From ce0758fbbb1a36fcc53b5b452c4339e732aeb9c4 Mon Sep 17 00:00:00 2001 From: mrtoine Date: Fri, 12 Sep 2025 11:11:44 +0200 Subject: [PATCH] First Commit --- .gitignore | 8 + commons/bbcode_parser.py | 82 + forum/__init__.py | 0 forum/admin.py | 33 + forum/apps.py | 6 + forum/forms.py | 26 + forum/middleware.py | 47 + forum/migrations/0001_initial.py | 98 + .../0002_alter_category_options_topicread.py | 51 + forum/migrations/0003_alter_post_topic.py | 23 + forum/migrations/0004_alter_post_content.py | 18 + forum/migrations/__init__.py | 0 forum/models.py | 87 + forum/templatetags/__init__.py | 0 forum/templatetags/_bbcode_tags.py | 9 + forum/templatetags/forum_extras.py | 7 + forum/templatetags/paginator_tag.py | 7 + forum/tests.py | 3 + forum/urls.py | 20 + forum/views.py | 303 + gallery/__init__.py | 0 gallery/admin.py | 3 + gallery/apps.py | 6 + gallery/forms.py | 17 + gallery/migrations/__init__.py | 0 gallery/models.py | 3 + gallery/tests.py | 3 + gallery/urls.py | 10 + gallery/views.py | 52 + games/__init__.py | 0 games/admin.py | 4 + games/apps.py | 6 + games/migrations/0001_initial.py | 64 + .../migrations/0002_littlebacplayers_game.py | 20 + .../migrations/0003_littlebacgames_author.py | 22 + .../0004_littlebacplayers_is_ready.py | 18 + .../migrations/0005_littlebacgames_players.py | 18 + .../0006_remove_littlebacgames_players.py | 17 + ...ttlebacgames_countdown_started_and_more.py | 61 + ...008_littlebacgames_countdown_start_time.py | 18 + ...ter_littlebacgames_countdown_start_time.py | 18 + .../0010_littlebacplayers_status.py | 18 + .../0011_littlebacgames_current_phase.py | 18 + games/migrations/__init__.py | 0 games/models.py | 49 + games/templatetags/custom_filters.py | 7 + games/tests.py | 3 + games/urls.py | 25 + games/views.py | 433 + guestbook/__init__.py | 0 guestbook/admin.py | 3 + guestbook/apps.py | 6 + guestbook/forms.py | 12 + guestbook/middleware.py | 14 + guestbook/migrations/0001_initial.py | 23 + guestbook/migrations/__init__.py | 0 guestbook/models.py | 11 + guestbook/tests.py | 3 + guestbook/urls.py | 9 + guestbook/views.py | 29 + home/__init__.py | 0 home/admin.py | 3 + home/apps.py | 6 + home/migrations/__init__.py | 0 home/models.py | 3 + home/tests.py | 3 + home/urls.py | 12 + home/views.py | 16 + maintenance/__init__.py | 0 maintenance/admin.py | 4 + maintenance/apps.py | 6 + maintenance/middleware.py | 22 + maintenance/migrations/0001_initial.py | 23 + ...002_alter_informations_content_and_more.py | 23 + maintenance/migrations/__init__.py | 0 maintenance/models.py | 10 + maintenance/tests.py | 3 + maintenance/urls.py | 7 + maintenance/views.py | 6 + manage.py | 22 + messagerie/__init__.py | 0 messagerie/admin.py | 3 + messagerie/apps.py | 6 + messagerie/context_processors.py | 24 + messagerie/forms.py | 23 + messagerie/migrations/0001_initial.py | 34 + ..._remove_privatemessage_is_read_and_more.py | 53 + .../0003_privatemessagesubject_is_active.py | 18 + messagerie/migrations/__init__.py | 0 messagerie/models.py | 28 + messagerie/tests.py | 3 + messagerie/urls.py | 13 + messagerie/views.py | 122 + passion_retro/__init__.py | 0 passion_retro/asgi.py | 16 + passion_retro/settings.py | 199 + passion_retro/urls.py | 40 + passion_retro/views.py | 4 + passion_retro/wsgi.py | 16 + posts/__init__.py | 0 posts/admin.py | 25 + posts/apps.py | 6 + posts/context_processors.py | 7 + posts/forms.py | 31 + posts/middleware.py | 23 + posts/migrations/0001_initial.py | 38 + posts/migrations/0002_initial.py | 33 + ...ry_options_alter_post_options_post_slug.py | 26 + posts/migrations/0004_post_forum_link.py | 18 + posts/migrations/0005_remove_post_date.py | 17 + posts/migrations/0006_post_contribution.py | 18 + posts/migrations/0007_post_post_parent.py | 19 + .../migrations/0008_alter_post_post_parent.py | 18 + .../migrations/0009_alter_post_post_parent.py | 19 + posts/migrations/0010_post_parent.py | 18 + .../migrations/0011_alter_post_post_parent.py | 19 + posts/migrations/__init__.py | 0 posts/models.py | 59 + posts/templatetags/__init__.py | 0 posts/templatetags/bbcode_tags.py | 9 + posts/tests.py | 3 + posts/urls.py | 12 + posts/views.py | 108 + quiz/__init__.py | 0 quiz/admin.py | 25 + quiz/apps.py | 6 + quiz/context_processors.py | 7 + quiz/forms.py | 27 + quiz/migrations/0001_initial.py | 71 + quiz/migrations/0002_quiz_image.py | 18 + quiz/migrations/__init__.py | 0 quiz/models.py | 57 + quiz/templatetags/quiz_tags.py | 8 + quiz/tests.py | 3 + quiz/urls.py | 10 + quiz/views.py | 149 + requirements.txt | 4 + shop/__init__.py | 0 shop/admin.py | 6 + shop/apps.py | 6 + shop/migrations/0001_initial.py | 35 + .../0002_item_category_alter_item_image.py | 25 + shop/migrations/__init__.py | 0 shop/models.py | 22 + shop/tests.py | 3 + shop/urls.py | 7 + shop/views.py | 36 + static/css/autocomplete.css | 275 + static/css/base.css | 1145 ++ static/css/changelists.css | 328 + static/css/dark_mode.css | 137 + static/css/dashboard.css | 29 + static/css/forms.css | 534 + static/css/login.css | 61 + static/css/nav_sidebar.css | 144 + static/css/profile.css | 86 + static/css/responsive.css | 999 ++ static/css/responsive_rtl.css | 84 + static/css/rtl.css | 298 + static/css/vendor/select2/LICENSE-SELECT2.md | 21 + static/css/vendor/select2/select2.css | 481 + static/css/vendor/select2/select2.min.css | 1 + static/css/widgets.css | 604 + static/img/LICENSE | 20 + static/img/README.txt | 7 + static/img/calendar-icons.svg | 14 + static/img/gis/move_vertex_off.svg | 1 + static/img/gis/move_vertex_on.svg | 1 + static/img/icon-addlink.svg | 3 + static/img/icon-alert.svg | 3 + static/img/icon-calendar.svg | 9 + static/img/icon-changelink.svg | 3 + static/img/icon-clock.svg | 9 + static/img/icon-deletelink.svg | 3 + static/img/icon-no.svg | 3 + static/img/icon-unknown-alt.svg | 3 + static/img/icon-unknown.svg | 3 + static/img/icon-viewlink.svg | 3 + static/img/icon-yes.svg | 3 + static/img/icons/bag.png | Bin 0 -> 1454 bytes static/img/icons/bag_25x25.png | Bin 0 -> 1887 bytes static/img/icons/money.png | Bin 0 -> 2007 bytes static/img/icons/money_12x12.png | Bin 0 -> 1064 bytes static/img/icons/money_25x25.png | Bin 0 -> 2403 bytes static/img/icons/shield-green-v.png | Bin 0 -> 1861 bytes static/img/icons/shield-red-cross.png | Bin 0 -> 2079 bytes static/img/inline-delete.svg | 3 + static/img/maintenance/maintenance.jpeg | Bin 0 -> 204194 bytes static/img/retrobot.jpg | Bin 0 -> 239884 bytes static/img/retrobot.png | Bin 0 -> 337017 bytes static/img/search.svg | 3 + static/img/selector-icons.svg | 34 + static/img/sorting-icons.svg | 19 + static/img/tooltag-add.svg | 3 + static/img/tooltag-arrowright.svg | 3 + static/js/SelectBox.js | 116 + static/js/SelectFilter2.js | 283 + static/js/actions.js | 201 + static/js/admin/DateTimeShortcuts.js | 408 + static/js/admin/RelatedObjectLookups.js | 238 + static/js/autocomplete.js | 33 + static/js/calendar.js | 221 + static/js/cancel.js | 29 + static/js/change_form.js | 16 + static/js/collapse.js | 43 + static/js/core.js | 170 + static/js/filters.js | 30 + static/js/games/bac-play.js | 161 + static/js/games/bac-results.js | 24 + static/js/games/bac-start.js | 112 + static/js/games/bac-utils.js | 18 + static/js/games/quiz.js | 55 + static/js/inlines.js | 359 + static/js/jquery.init.js | 8 + static/js/nav_sidebar.js | 79 + static/js/popup_response.js | 16 + static/js/prepopulate.js | 43 + static/js/prepopulate_init.js | 15 + static/js/theme.js | 56 + static/js/urlify.js | 169 + static/js/utils/bbcode-bar.html | 32 + static/js/utils/bbcode_display.js | 276 + static/js/utils/functions.js | 57 + static/js/utils/multiple_posts.js | 87 + static/js/vendor/jquery/LICENSE.txt | 20 + static/js/vendor/jquery/jquery.js | 10965 ++++++++++++++++ static/js/vendor/jquery/jquery.min.js | 2 + static/js/vendor/select2/LICENSE.md | 21 + static/js/vendor/select2/i18n/af.js | 3 + static/js/vendor/select2/i18n/ar.js | 3 + static/js/vendor/select2/i18n/az.js | 3 + static/js/vendor/select2/i18n/bg.js | 3 + static/js/vendor/select2/i18n/bn.js | 3 + static/js/vendor/select2/i18n/bs.js | 3 + static/js/vendor/select2/i18n/ca.js | 3 + static/js/vendor/select2/i18n/cs.js | 3 + static/js/vendor/select2/i18n/da.js | 3 + static/js/vendor/select2/i18n/de.js | 3 + static/js/vendor/select2/i18n/dsb.js | 3 + static/js/vendor/select2/i18n/el.js | 3 + static/js/vendor/select2/i18n/en.js | 3 + static/js/vendor/select2/i18n/es.js | 3 + static/js/vendor/select2/i18n/et.js | 3 + static/js/vendor/select2/i18n/eu.js | 3 + static/js/vendor/select2/i18n/fa.js | 3 + static/js/vendor/select2/i18n/fi.js | 3 + static/js/vendor/select2/i18n/fr.js | 3 + static/js/vendor/select2/i18n/gl.js | 3 + static/js/vendor/select2/i18n/he.js | 3 + static/js/vendor/select2/i18n/hi.js | 3 + static/js/vendor/select2/i18n/hr.js | 3 + static/js/vendor/select2/i18n/hsb.js | 3 + static/js/vendor/select2/i18n/hu.js | 3 + static/js/vendor/select2/i18n/hy.js | 3 + static/js/vendor/select2/i18n/id.js | 3 + static/js/vendor/select2/i18n/is.js | 3 + static/js/vendor/select2/i18n/it.js | 3 + static/js/vendor/select2/i18n/ja.js | 3 + static/js/vendor/select2/i18n/ka.js | 3 + static/js/vendor/select2/i18n/km.js | 3 + static/js/vendor/select2/i18n/ko.js | 3 + static/js/vendor/select2/i18n/lt.js | 3 + static/js/vendor/select2/i18n/lv.js | 3 + static/js/vendor/select2/i18n/mk.js | 3 + static/js/vendor/select2/i18n/ms.js | 3 + static/js/vendor/select2/i18n/nb.js | 3 + static/js/vendor/select2/i18n/ne.js | 3 + static/js/vendor/select2/i18n/nl.js | 3 + static/js/vendor/select2/i18n/pl.js | 3 + static/js/vendor/select2/i18n/ps.js | 3 + static/js/vendor/select2/i18n/pt-BR.js | 3 + static/js/vendor/select2/i18n/pt.js | 3 + static/js/vendor/select2/i18n/ro.js | 3 + static/js/vendor/select2/i18n/ru.js | 3 + static/js/vendor/select2/i18n/sk.js | 3 + static/js/vendor/select2/i18n/sl.js | 3 + static/js/vendor/select2/i18n/sq.js | 3 + static/js/vendor/select2/i18n/sr-Cyrl.js | 3 + static/js/vendor/select2/i18n/sr.js | 3 + static/js/vendor/select2/i18n/sv.js | 3 + static/js/vendor/select2/i18n/th.js | 3 + static/js/vendor/select2/i18n/tk.js | 3 + static/js/vendor/select2/i18n/tr.js | 3 + static/js/vendor/select2/i18n/uk.js | 3 + static/js/vendor/select2/i18n/vi.js | 3 + static/js/vendor/select2/i18n/zh-CN.js | 3 + static/js/vendor/select2/i18n/zh-TW.js | 3 + static/js/vendor/select2/select2.full.js | 6820 ++++++++++ static/js/vendor/select2/select2.full.min.js | 2 + static/js/vendor/xregexp/LICENSE.txt | 21 + static/js/vendor/xregexp/xregexp.js | 4652 +++++++ static/js/vendor/xregexp/xregexp.min.js | 160 + static/themes/00s-copy/banner.css | 108 + static/themes/00s-copy/bbcode.css | 95 + static/themes/00s-copy/colors.css | 364 + static/themes/00s-copy/forms.css | 43 + static/themes/00s-copy/gallery.css | 13 + static/themes/00s-copy/games.css | 466 + static/themes/00s-copy/grid.css | 59 + static/themes/00s-copy/img/archer_sprite.png | Bin 0 -> 76890 bytes static/themes/00s-copy/img/bg.png | Bin 0 -> 123 bytes static/themes/00s-copy/img/bg2.png | Bin 0 -> 154 bytes static/themes/00s-copy/img/bg3.png | Bin 0 -> 161 bytes static/themes/00s-copy/img/bg_container.png | Bin 0 -> 101 bytes static/themes/00s-copy/img/bg_galactique.png | Bin 0 -> 35279 bytes static/themes/00s-copy/img/bg_galactique2.png | Bin 0 -> 446238 bytes static/themes/00s-copy/img/computer.png | Bin 0 -> 54324 bytes static/themes/00s-copy/img/gamepad.png | Bin 0 -> 2307 bytes static/themes/00s-copy/img/gamepad2.png | Bin 0 -> 134328 bytes static/themes/00s-copy/img/mage_sprite.png | Bin 0 -> 6883 bytes static/themes/00s-copy/img/music.png | Bin 0 -> 18459 bytes static/themes/00s-copy/img/news_contrib.png | Bin 0 -> 202169 bytes static/themes/00s-copy/img/television.png | Bin 0 -> 289137 bytes static/themes/00s-copy/pm.css | 34 + static/themes/00s-copy/post.css | 41 + static/themes/00s-copy/profile.css | 291 + static/themes/00s-copy/shop.css | 101 + static/themes/00s-copy/structure.css | 486 + static/themes/00s-copy/typo.css | 53 + static/themes/00s/animations.css | 0 static/themes/00s/banner.css | 108 + static/themes/00s/bbcode.css | 78 + static/themes/00s/decorations.css | 0 static/themes/00s/forms.css | 39 + static/themes/00s/gallery.css | 13 + static/themes/00s/games.css | 310 + static/themes/00s/grid.css | 59 + static/themes/00s/pm.css | 27 + static/themes/00s/post.css | 30 + static/themes/00s/profile.css | 228 + static/themes/00s/shop.css | 69 + static/themes/00s/structure.css | 455 + static/themes/00s/styles.css | 883 ++ static/themes/00s/typo.css | 46 + static/themes/80s/banner.css | 258 + static/themes/80s/bbcode.css | 98 + static/themes/80s/colors.css | 326 + static/themes/80s/forms.css | 42 + static/themes/80s/gallery.css | 13 + static/themes/80s/games.css | 415 + static/themes/80s/grid.css | 59 + static/themes/80s/img/archer_sprite.png | Bin 0 -> 76890 bytes static/themes/80s/img/bg.png | Bin 0 -> 123 bytes static/themes/80s/img/bg2.png | Bin 0 -> 154 bytes static/themes/80s/img/bg3.png | Bin 0 -> 161 bytes static/themes/80s/img/bg_container.png | Bin 0 -> 101 bytes static/themes/80s/img/bg_galactique.png | Bin 0 -> 35279 bytes static/themes/80s/img/bg_galactique2.png | Bin 0 -> 446238 bytes static/themes/80s/img/computer.png | Bin 0 -> 54324 bytes static/themes/80s/img/gamepad.png | Bin 0 -> 2307 bytes static/themes/80s/img/gamepad2.png | Bin 0 -> 134328 bytes static/themes/80s/img/mage_sprite.png | Bin 0 -> 6883 bytes static/themes/80s/img/music.png | Bin 0 -> 18459 bytes static/themes/80s/img/news_contrib.png | Bin 0 -> 202169 bytes static/themes/80s/img/television.png | Bin 0 -> 289137 bytes static/themes/80s/pm.css | 65 + static/themes/80s/post.css | 35 + static/themes/80s/profile.css | 329 + static/themes/80s/shop.css | 139 + static/themes/80s/structure.css | 317 + static/themes/80s/typo.css | 42 + static/themes/border-avatars.css | 247 + static/themes/decoration-username.css | 493 + static/themes/default/banner.css | 127 + static/themes/default/bbcode.css | 100 + static/themes/default/colors.css | 312 + static/themes/default/forms.css | 42 + static/themes/default/gallery.css | 13 + static/themes/default/games.css | 338 + static/themes/default/grid.css | 59 + static/themes/default/img/archer_sprite.png | Bin 0 -> 76890 bytes static/themes/default/img/bg.png | Bin 0 -> 123 bytes static/themes/default/img/bg2.png | Bin 0 -> 154 bytes static/themes/default/img/bg3.png | Bin 0 -> 161 bytes static/themes/default/img/bg_container.png | Bin 0 -> 101 bytes static/themes/default/img/bg_galactique.png | Bin 0 -> 35279 bytes static/themes/default/img/bg_galactique2.png | Bin 0 -> 446238 bytes static/themes/default/img/computer.png | Bin 0 -> 54324 bytes static/themes/default/img/gamepad.png | Bin 0 -> 2307 bytes static/themes/default/img/gamepad2.png | Bin 0 -> 134328 bytes static/themes/default/img/mage_sprite.png | Bin 0 -> 6883 bytes static/themes/default/img/music.png | Bin 0 -> 18459 bytes static/themes/default/img/news_contrib.png | Bin 0 -> 202169 bytes static/themes/default/img/television.png | Bin 0 -> 289137 bytes static/themes/default/pm.css | 60 + static/themes/default/post.css | 35 + static/themes/default/profile.css | 285 + static/themes/default/shop.css | 108 + static/themes/default/structure.css | 305 + static/themes/default/typo.css | 20 + static/themes/error.css | 63 + static/themes/generic.css | 89 + static/themes/rpg/animations.css | 26 + static/themes/rpg/banner.css | 179 + static/themes/rpg/bbcode.css | 78 + static/themes/rpg/decorations.css | 69 + static/themes/rpg/forms.css | 39 + static/themes/rpg/gallery.css | 13 + static/themes/rpg/games.css | 310 + static/themes/rpg/grid.css | 59 + static/themes/rpg/pm.css | 27 + static/themes/rpg/post.css | 30 + static/themes/rpg/profile.css | 228 + static/themes/rpg/shop.css | 69 + static/themes/rpg/structure.css | 455 + static/themes/rpg/styles.css | 1362 ++ static/themes/rpg/typo.css | 46 + static/themes/styles.default.css | 847 ++ tchat/__init__.py | 0 tchat/admin.py | 3 + tchat/apps.py | 6 + tchat/migrations/0001_initial.py | 33 + tchat/migrations/__init__.py | 0 tchat/models.py | 12 + tchat/tests.py | 3 + tchat/views.py | 3 + templates/components/banner.html | 41 + templates/components/forum_home.html | 48 + templates/components/guestbook_home.html | 22 + templates/components/horizontal_menu.html | 53 + templates/components/left_menu.html | 49 + templates/components/paginator.html | 69 + templates/components/profile_nav.html | 6 + templates/components/right_menu.html | 87 + templates/emails/activation_account.html | 12 + templates/errors/403.html | 14 + templates/errors/404.html | 17 + templates/errors/500.html | 14 + .../features/new_feature_user_inventory.html | 145 + .../features/new_feature_user_level.html | 153 + templates/forum/create_topic.html | 20 + templates/forum/edit_post.html | 12 + templates/forum/topic_detail.html | 85 + templates/forum/topic_list.html | 60 + templates/forum_layout.html | 23 + templates/gallery/form.html | 32 + templates/gallery/home.html | 16 + templates/games/littlebac/finish.html | 32 + templates/games/littlebac/game.html | 28 + templates/games/littlebac/home.html | 13 + templates/games/littlebac/play.html | 59 + templates/games/littlebac/results.html | 72 + templates/games/portal.html | 61 + templates/games/quiz/create_quiz.html | 21 + .../games/quiz/create_responses_quiz.html | 51 + templates/games/quiz/home.html | 71 + templates/games/quiz/quiz.html | 41 + templates/games/quiz/result.html | 62 + templates/home.html | 36 + templates/layout.html | 97 + templates/layouts/00s.html | 151 + templates/layouts/default.html | 151 + templates/maintenance/index.html | 29 + templates/messagerie/home.html | 29 + templates/messagerie/new_message.html | 13 + templates/messagerie/view_message.html | 52 + templates/posts/create_post.html | 17 + templates/posts/edit_post.html | 17 + templates/posts/news.html | 11 + templates/posts/post.html | 37 + templates/shop/home.html | 50 + templates/users/contribute.html | 34 + templates/users/contributions.html | 35 + templates/users/form_contribute.html | 30 + templates/users/login.html | 13 + templates/users/profile.html | 158 + templates/users/profile_update.html | 11 + templates/users/register.html | 13 + users/__init__.py | 0 users/admin.py | 30 + users/apps.py | 6 + users/decorators.py | 13 + users/forms.py | 79 + users/middleware.py | 113 + users/migrations/0001_initial.py | 138 + ...02_alter_user_options_alter_user_avatar.py | 26 + users/migrations/0003_user_active.py | 18 + .../0004_user_theme_alter_user_avatar.py | 25 + users/migrations/0005_alter_user_active.py | 18 + ...0006_alter_user_avatar_alter_user_email.py | 24 + users/migrations/0007_alter_user_avatar.py | 19 + users/migrations/0008_visitorstats.py | 21 + users/migrations/0009_userlevel.py | 29 + ...er_user_first_name_alter_user_last_name.py | 23 + users/migrations/0011_userinventory.py | 30 + users/migrations/0012_user_border_avatar.py | 18 + .../0013_user_username_decoration.py | 18 + .../0014_alter_user_username_decoration.py | 18 + .../0015_alter_user_border_avatar.py | 18 + users/migrations/__init__.py | 0 users/models.py | 87 + users/templatetags/__init__.py | 0 users/templatetags/users_custom_tags.py | 7 + users/tests.py | 3 + users/urls.py | 22 + users/views.py | 308 + 496 files changed, 52062 insertions(+) create mode 100644 .gitignore create mode 100644 commons/bbcode_parser.py create mode 100755 forum/__init__.py create mode 100755 forum/admin.py create mode 100755 forum/apps.py create mode 100755 forum/forms.py create mode 100755 forum/middleware.py create mode 100755 forum/migrations/0001_initial.py create mode 100755 forum/migrations/0002_alter_category_options_topicread.py create mode 100755 forum/migrations/0003_alter_post_topic.py create mode 100644 forum/migrations/0004_alter_post_content.py create mode 100755 forum/migrations/__init__.py create mode 100755 forum/models.py create mode 100755 forum/templatetags/__init__.py create mode 100644 forum/templatetags/_bbcode_tags.py create mode 100755 forum/templatetags/forum_extras.py create mode 100755 forum/templatetags/paginator_tag.py create mode 100755 forum/tests.py create mode 100755 forum/urls.py create mode 100755 forum/views.py create mode 100644 gallery/__init__.py create mode 100644 gallery/admin.py create mode 100644 gallery/apps.py create mode 100644 gallery/forms.py create mode 100644 gallery/migrations/__init__.py create mode 100644 gallery/models.py create mode 100644 gallery/tests.py create mode 100755 gallery/urls.py create mode 100644 gallery/views.py create mode 100644 games/__init__.py create mode 100644 games/admin.py create mode 100644 games/apps.py create mode 100644 games/migrations/0001_initial.py create mode 100644 games/migrations/0002_littlebacplayers_game.py create mode 100644 games/migrations/0003_littlebacgames_author.py create mode 100644 games/migrations/0004_littlebacplayers_is_ready.py create mode 100644 games/migrations/0005_littlebacgames_players.py create mode 100644 games/migrations/0006_remove_littlebacgames_players.py create mode 100644 games/migrations/0007_littlebacgames_countdown_started_and_more.py create mode 100644 games/migrations/0008_littlebacgames_countdown_start_time.py create mode 100644 games/migrations/0009_alter_littlebacgames_countdown_start_time.py create mode 100644 games/migrations/0010_littlebacplayers_status.py create mode 100644 games/migrations/0011_littlebacgames_current_phase.py create mode 100644 games/migrations/__init__.py create mode 100644 games/models.py create mode 100644 games/templatetags/custom_filters.py create mode 100644 games/tests.py create mode 100644 games/urls.py create mode 100644 games/views.py create mode 100755 guestbook/__init__.py create mode 100755 guestbook/admin.py create mode 100755 guestbook/apps.py create mode 100755 guestbook/forms.py create mode 100755 guestbook/middleware.py create mode 100755 guestbook/migrations/0001_initial.py create mode 100755 guestbook/migrations/__init__.py create mode 100755 guestbook/models.py create mode 100755 guestbook/tests.py create mode 100755 guestbook/urls.py create mode 100755 guestbook/views.py create mode 100755 home/__init__.py create mode 100755 home/admin.py create mode 100755 home/apps.py create mode 100755 home/migrations/__init__.py create mode 100755 home/models.py create mode 100755 home/tests.py create mode 100755 home/urls.py create mode 100755 home/views.py create mode 100644 maintenance/__init__.py create mode 100644 maintenance/admin.py create mode 100644 maintenance/apps.py create mode 100644 maintenance/middleware.py create mode 100644 maintenance/migrations/0001_initial.py create mode 100644 maintenance/migrations/0002_alter_informations_content_and_more.py create mode 100644 maintenance/migrations/__init__.py create mode 100644 maintenance/models.py create mode 100644 maintenance/tests.py create mode 100644 maintenance/urls.py create mode 100644 maintenance/views.py create mode 100755 manage.py create mode 100644 messagerie/__init__.py create mode 100644 messagerie/admin.py create mode 100644 messagerie/apps.py create mode 100644 messagerie/context_processors.py create mode 100644 messagerie/forms.py create mode 100644 messagerie/migrations/0001_initial.py create mode 100644 messagerie/migrations/0002_remove_privatemessage_is_read_and_more.py create mode 100644 messagerie/migrations/0003_privatemessagesubject_is_active.py create mode 100644 messagerie/migrations/__init__.py create mode 100644 messagerie/models.py create mode 100644 messagerie/tests.py create mode 100644 messagerie/urls.py create mode 100644 messagerie/views.py create mode 100755 passion_retro/__init__.py create mode 100755 passion_retro/asgi.py create mode 100755 passion_retro/settings.py create mode 100755 passion_retro/urls.py create mode 100644 passion_retro/views.py create mode 100755 passion_retro/wsgi.py create mode 100755 posts/__init__.py create mode 100755 posts/admin.py create mode 100755 posts/apps.py create mode 100644 posts/context_processors.py create mode 100755 posts/forms.py create mode 100755 posts/middleware.py create mode 100755 posts/migrations/0001_initial.py create mode 100755 posts/migrations/0002_initial.py create mode 100755 posts/migrations/0003_alter_category_options_alter_post_options_post_slug.py create mode 100755 posts/migrations/0004_post_forum_link.py create mode 100755 posts/migrations/0005_remove_post_date.py create mode 100644 posts/migrations/0006_post_contribution.py create mode 100644 posts/migrations/0007_post_post_parent.py create mode 100644 posts/migrations/0008_alter_post_post_parent.py create mode 100644 posts/migrations/0009_alter_post_post_parent.py create mode 100644 posts/migrations/0010_post_parent.py create mode 100644 posts/migrations/0011_alter_post_post_parent.py create mode 100755 posts/migrations/__init__.py create mode 100755 posts/models.py create mode 100644 posts/templatetags/__init__.py create mode 100644 posts/templatetags/bbcode_tags.py create mode 100755 posts/tests.py create mode 100755 posts/urls.py create mode 100755 posts/views.py create mode 100644 quiz/__init__.py create mode 100644 quiz/admin.py create mode 100644 quiz/apps.py create mode 100644 quiz/context_processors.py create mode 100644 quiz/forms.py create mode 100644 quiz/migrations/0001_initial.py create mode 100644 quiz/migrations/0002_quiz_image.py create mode 100644 quiz/migrations/__init__.py create mode 100644 quiz/models.py create mode 100644 quiz/templatetags/quiz_tags.py create mode 100644 quiz/tests.py create mode 100644 quiz/urls.py create mode 100644 quiz/views.py create mode 100644 requirements.txt create mode 100644 shop/__init__.py create mode 100644 shop/admin.py create mode 100644 shop/apps.py create mode 100644 shop/migrations/0001_initial.py create mode 100644 shop/migrations/0002_item_category_alter_item_image.py create mode 100644 shop/migrations/__init__.py create mode 100644 shop/models.py create mode 100644 shop/tests.py create mode 100644 shop/urls.py create mode 100644 shop/views.py create mode 100644 static/css/autocomplete.css create mode 100644 static/css/base.css create mode 100644 static/css/changelists.css create mode 100644 static/css/dark_mode.css create mode 100644 static/css/dashboard.css create mode 100644 static/css/forms.css create mode 100644 static/css/login.css create mode 100644 static/css/nav_sidebar.css create mode 100644 static/css/profile.css create mode 100644 static/css/responsive.css create mode 100644 static/css/responsive_rtl.css create mode 100644 static/css/rtl.css create mode 100644 static/css/vendor/select2/LICENSE-SELECT2.md create mode 100644 static/css/vendor/select2/select2.css create mode 100644 static/css/vendor/select2/select2.min.css create mode 100644 static/css/widgets.css create mode 100644 static/img/LICENSE create mode 100644 static/img/README.txt create mode 100644 static/img/calendar-icons.svg create mode 100644 static/img/gis/move_vertex_off.svg create mode 100644 static/img/gis/move_vertex_on.svg create mode 100644 static/img/icon-addlink.svg create mode 100644 static/img/icon-alert.svg create mode 100644 static/img/icon-calendar.svg create mode 100644 static/img/icon-changelink.svg create mode 100644 static/img/icon-clock.svg create mode 100644 static/img/icon-deletelink.svg create mode 100644 static/img/icon-no.svg create mode 100644 static/img/icon-unknown-alt.svg create mode 100644 static/img/icon-unknown.svg create mode 100644 static/img/icon-viewlink.svg create mode 100644 static/img/icon-yes.svg create mode 100644 static/img/icons/bag.png create mode 100644 static/img/icons/bag_25x25.png create mode 100644 static/img/icons/money.png create mode 100644 static/img/icons/money_12x12.png create mode 100644 static/img/icons/money_25x25.png create mode 100644 static/img/icons/shield-green-v.png create mode 100644 static/img/icons/shield-red-cross.png create mode 100644 static/img/inline-delete.svg create mode 100644 static/img/maintenance/maintenance.jpeg create mode 100644 static/img/retrobot.jpg create mode 100644 static/img/retrobot.png create mode 100644 static/img/search.svg create mode 100644 static/img/selector-icons.svg create mode 100644 static/img/sorting-icons.svg create mode 100644 static/img/tooltag-add.svg create mode 100644 static/img/tooltag-arrowright.svg create mode 100644 static/js/SelectBox.js create mode 100644 static/js/SelectFilter2.js create mode 100644 static/js/actions.js create mode 100644 static/js/admin/DateTimeShortcuts.js create mode 100644 static/js/admin/RelatedObjectLookups.js create mode 100644 static/js/autocomplete.js create mode 100644 static/js/calendar.js create mode 100644 static/js/cancel.js create mode 100644 static/js/change_form.js create mode 100644 static/js/collapse.js create mode 100644 static/js/core.js create mode 100644 static/js/filters.js create mode 100644 static/js/games/bac-play.js create mode 100644 static/js/games/bac-results.js create mode 100644 static/js/games/bac-start.js create mode 100644 static/js/games/bac-utils.js create mode 100644 static/js/games/quiz.js create mode 100644 static/js/inlines.js create mode 100644 static/js/jquery.init.js create mode 100644 static/js/nav_sidebar.js create mode 100644 static/js/popup_response.js create mode 100644 static/js/prepopulate.js create mode 100644 static/js/prepopulate_init.js create mode 100644 static/js/theme.js create mode 100644 static/js/urlify.js create mode 100644 static/js/utils/bbcode-bar.html create mode 100644 static/js/utils/bbcode_display.js create mode 100644 static/js/utils/functions.js create mode 100644 static/js/utils/multiple_posts.js create mode 100644 static/js/vendor/jquery/LICENSE.txt create mode 100644 static/js/vendor/jquery/jquery.js create mode 100644 static/js/vendor/jquery/jquery.min.js create mode 100644 static/js/vendor/select2/LICENSE.md create mode 100644 static/js/vendor/select2/i18n/af.js create mode 100644 static/js/vendor/select2/i18n/ar.js create mode 100644 static/js/vendor/select2/i18n/az.js create mode 100644 static/js/vendor/select2/i18n/bg.js create mode 100644 static/js/vendor/select2/i18n/bn.js create mode 100644 static/js/vendor/select2/i18n/bs.js create mode 100644 static/js/vendor/select2/i18n/ca.js create mode 100644 static/js/vendor/select2/i18n/cs.js create mode 100644 static/js/vendor/select2/i18n/da.js create mode 100644 static/js/vendor/select2/i18n/de.js create mode 100644 static/js/vendor/select2/i18n/dsb.js create mode 100644 static/js/vendor/select2/i18n/el.js create mode 100644 static/js/vendor/select2/i18n/en.js create mode 100644 static/js/vendor/select2/i18n/es.js create mode 100644 static/js/vendor/select2/i18n/et.js create mode 100644 static/js/vendor/select2/i18n/eu.js create mode 100644 static/js/vendor/select2/i18n/fa.js create mode 100644 static/js/vendor/select2/i18n/fi.js create mode 100644 static/js/vendor/select2/i18n/fr.js create mode 100644 static/js/vendor/select2/i18n/gl.js create mode 100644 static/js/vendor/select2/i18n/he.js create mode 100644 static/js/vendor/select2/i18n/hi.js create mode 100644 static/js/vendor/select2/i18n/hr.js create mode 100644 static/js/vendor/select2/i18n/hsb.js create mode 100644 static/js/vendor/select2/i18n/hu.js create mode 100644 static/js/vendor/select2/i18n/hy.js create mode 100644 static/js/vendor/select2/i18n/id.js create mode 100644 static/js/vendor/select2/i18n/is.js create mode 100644 static/js/vendor/select2/i18n/it.js create mode 100644 static/js/vendor/select2/i18n/ja.js create mode 100644 static/js/vendor/select2/i18n/ka.js create mode 100644 static/js/vendor/select2/i18n/km.js create mode 100644 static/js/vendor/select2/i18n/ko.js create mode 100644 static/js/vendor/select2/i18n/lt.js create mode 100644 static/js/vendor/select2/i18n/lv.js create mode 100644 static/js/vendor/select2/i18n/mk.js create mode 100644 static/js/vendor/select2/i18n/ms.js create mode 100644 static/js/vendor/select2/i18n/nb.js create mode 100644 static/js/vendor/select2/i18n/ne.js create mode 100644 static/js/vendor/select2/i18n/nl.js create mode 100644 static/js/vendor/select2/i18n/pl.js create mode 100644 static/js/vendor/select2/i18n/ps.js create mode 100644 static/js/vendor/select2/i18n/pt-BR.js create mode 100644 static/js/vendor/select2/i18n/pt.js create mode 100644 static/js/vendor/select2/i18n/ro.js create mode 100644 static/js/vendor/select2/i18n/ru.js create mode 100644 static/js/vendor/select2/i18n/sk.js create mode 100644 static/js/vendor/select2/i18n/sl.js create mode 100644 static/js/vendor/select2/i18n/sq.js create mode 100644 static/js/vendor/select2/i18n/sr-Cyrl.js create mode 100644 static/js/vendor/select2/i18n/sr.js create mode 100644 static/js/vendor/select2/i18n/sv.js create mode 100644 static/js/vendor/select2/i18n/th.js create mode 100644 static/js/vendor/select2/i18n/tk.js create mode 100644 static/js/vendor/select2/i18n/tr.js create mode 100644 static/js/vendor/select2/i18n/uk.js create mode 100644 static/js/vendor/select2/i18n/vi.js create mode 100644 static/js/vendor/select2/i18n/zh-CN.js create mode 100644 static/js/vendor/select2/i18n/zh-TW.js create mode 100644 static/js/vendor/select2/select2.full.js create mode 100644 static/js/vendor/select2/select2.full.min.js create mode 100644 static/js/vendor/xregexp/LICENSE.txt create mode 100644 static/js/vendor/xregexp/xregexp.js create mode 100644 static/js/vendor/xregexp/xregexp.min.js create mode 100755 static/themes/00s-copy/banner.css create mode 100644 static/themes/00s-copy/bbcode.css create mode 100755 static/themes/00s-copy/colors.css create mode 100644 static/themes/00s-copy/forms.css create mode 100644 static/themes/00s-copy/gallery.css create mode 100644 static/themes/00s-copy/games.css create mode 100755 static/themes/00s-copy/grid.css create mode 100755 static/themes/00s-copy/img/archer_sprite.png create mode 100755 static/themes/00s-copy/img/bg.png create mode 100755 static/themes/00s-copy/img/bg2.png create mode 100755 static/themes/00s-copy/img/bg3.png create mode 100755 static/themes/00s-copy/img/bg_container.png create mode 100755 static/themes/00s-copy/img/bg_galactique.png create mode 100755 static/themes/00s-copy/img/bg_galactique2.png create mode 100755 static/themes/00s-copy/img/computer.png create mode 100755 static/themes/00s-copy/img/gamepad.png create mode 100755 static/themes/00s-copy/img/gamepad2.png create mode 100755 static/themes/00s-copy/img/mage_sprite.png create mode 100755 static/themes/00s-copy/img/music.png create mode 100755 static/themes/00s-copy/img/news_contrib.png create mode 100755 static/themes/00s-copy/img/television.png create mode 100644 static/themes/00s-copy/pm.css create mode 100644 static/themes/00s-copy/post.css create mode 100644 static/themes/00s-copy/profile.css create mode 100644 static/themes/00s-copy/shop.css create mode 100755 static/themes/00s-copy/structure.css create mode 100755 static/themes/00s-copy/typo.css create mode 100644 static/themes/00s/animations.css create mode 100755 static/themes/00s/banner.css create mode 100644 static/themes/00s/bbcode.css create mode 100644 static/themes/00s/decorations.css create mode 100644 static/themes/00s/forms.css create mode 100644 static/themes/00s/gallery.css create mode 100644 static/themes/00s/games.css create mode 100755 static/themes/00s/grid.css create mode 100644 static/themes/00s/pm.css create mode 100644 static/themes/00s/post.css create mode 100644 static/themes/00s/profile.css create mode 100644 static/themes/00s/shop.css create mode 100755 static/themes/00s/structure.css create mode 100644 static/themes/00s/styles.css create mode 100755 static/themes/00s/typo.css create mode 100755 static/themes/80s/banner.css create mode 100644 static/themes/80s/bbcode.css create mode 100755 static/themes/80s/colors.css create mode 100644 static/themes/80s/forms.css create mode 100644 static/themes/80s/gallery.css create mode 100644 static/themes/80s/games.css create mode 100755 static/themes/80s/grid.css create mode 100755 static/themes/80s/img/archer_sprite.png create mode 100755 static/themes/80s/img/bg.png create mode 100755 static/themes/80s/img/bg2.png create mode 100755 static/themes/80s/img/bg3.png create mode 100755 static/themes/80s/img/bg_container.png create mode 100755 static/themes/80s/img/bg_galactique.png create mode 100755 static/themes/80s/img/bg_galactique2.png create mode 100755 static/themes/80s/img/computer.png create mode 100755 static/themes/80s/img/gamepad.png create mode 100755 static/themes/80s/img/gamepad2.png create mode 100755 static/themes/80s/img/mage_sprite.png create mode 100755 static/themes/80s/img/music.png create mode 100755 static/themes/80s/img/news_contrib.png create mode 100755 static/themes/80s/img/television.png create mode 100644 static/themes/80s/pm.css create mode 100644 static/themes/80s/post.css create mode 100644 static/themes/80s/profile.css create mode 100644 static/themes/80s/shop.css create mode 100755 static/themes/80s/structure.css create mode 100755 static/themes/80s/typo.css create mode 100644 static/themes/border-avatars.css create mode 100644 static/themes/decoration-username.css create mode 100755 static/themes/default/banner.css create mode 100644 static/themes/default/bbcode.css create mode 100755 static/themes/default/colors.css create mode 100644 static/themes/default/forms.css create mode 100644 static/themes/default/gallery.css create mode 100644 static/themes/default/games.css create mode 100755 static/themes/default/grid.css create mode 100755 static/themes/default/img/archer_sprite.png create mode 100755 static/themes/default/img/bg.png create mode 100755 static/themes/default/img/bg2.png create mode 100755 static/themes/default/img/bg3.png create mode 100755 static/themes/default/img/bg_container.png create mode 100755 static/themes/default/img/bg_galactique.png create mode 100755 static/themes/default/img/bg_galactique2.png create mode 100755 static/themes/default/img/computer.png create mode 100755 static/themes/default/img/gamepad.png create mode 100755 static/themes/default/img/gamepad2.png create mode 100755 static/themes/default/img/mage_sprite.png create mode 100755 static/themes/default/img/music.png create mode 100755 static/themes/default/img/news_contrib.png create mode 100755 static/themes/default/img/television.png create mode 100644 static/themes/default/pm.css create mode 100644 static/themes/default/post.css create mode 100644 static/themes/default/profile.css create mode 100644 static/themes/default/shop.css create mode 100755 static/themes/default/structure.css create mode 100755 static/themes/default/typo.css create mode 100644 static/themes/error.css create mode 100644 static/themes/generic.css create mode 100644 static/themes/rpg/animations.css create mode 100755 static/themes/rpg/banner.css create mode 100644 static/themes/rpg/bbcode.css create mode 100644 static/themes/rpg/decorations.css create mode 100644 static/themes/rpg/forms.css create mode 100644 static/themes/rpg/gallery.css create mode 100644 static/themes/rpg/games.css create mode 100755 static/themes/rpg/grid.css create mode 100644 static/themes/rpg/pm.css create mode 100644 static/themes/rpg/post.css create mode 100644 static/themes/rpg/profile.css create mode 100644 static/themes/rpg/shop.css create mode 100755 static/themes/rpg/structure.css create mode 100644 static/themes/rpg/styles.css create mode 100755 static/themes/rpg/typo.css create mode 100644 static/themes/styles.default.css create mode 100755 tchat/__init__.py create mode 100755 tchat/admin.py create mode 100755 tchat/apps.py create mode 100755 tchat/migrations/0001_initial.py create mode 100755 tchat/migrations/__init__.py create mode 100755 tchat/models.py create mode 100755 tchat/tests.py create mode 100755 tchat/views.py create mode 100644 templates/components/banner.html create mode 100755 templates/components/forum_home.html create mode 100755 templates/components/guestbook_home.html create mode 100644 templates/components/horizontal_menu.html create mode 100644 templates/components/left_menu.html create mode 100755 templates/components/paginator.html create mode 100644 templates/components/profile_nav.html create mode 100644 templates/components/right_menu.html create mode 100644 templates/emails/activation_account.html create mode 100644 templates/errors/403.html create mode 100644 templates/errors/404.html create mode 100644 templates/errors/500.html create mode 100644 templates/features/new_feature_user_inventory.html create mode 100644 templates/features/new_feature_user_level.html create mode 100755 templates/forum/create_topic.html create mode 100644 templates/forum/edit_post.html create mode 100755 templates/forum/topic_detail.html create mode 100755 templates/forum/topic_list.html create mode 100755 templates/forum_layout.html create mode 100644 templates/gallery/form.html create mode 100644 templates/gallery/home.html create mode 100644 templates/games/littlebac/finish.html create mode 100644 templates/games/littlebac/game.html create mode 100644 templates/games/littlebac/home.html create mode 100644 templates/games/littlebac/play.html create mode 100644 templates/games/littlebac/results.html create mode 100644 templates/games/portal.html create mode 100644 templates/games/quiz/create_quiz.html create mode 100644 templates/games/quiz/create_responses_quiz.html create mode 100644 templates/games/quiz/home.html create mode 100644 templates/games/quiz/quiz.html create mode 100644 templates/games/quiz/result.html create mode 100755 templates/home.html create mode 100755 templates/layout.html create mode 100644 templates/layouts/00s.html create mode 100644 templates/layouts/default.html create mode 100644 templates/maintenance/index.html create mode 100644 templates/messagerie/home.html create mode 100644 templates/messagerie/new_message.html create mode 100644 templates/messagerie/view_message.html create mode 100755 templates/posts/create_post.html create mode 100644 templates/posts/edit_post.html create mode 100755 templates/posts/news.html create mode 100755 templates/posts/post.html create mode 100644 templates/shop/home.html create mode 100755 templates/users/contribute.html create mode 100644 templates/users/contributions.html create mode 100755 templates/users/form_contribute.html create mode 100644 templates/users/login.html create mode 100644 templates/users/profile.html create mode 100644 templates/users/profile_update.html create mode 100644 templates/users/register.html create mode 100755 users/__init__.py create mode 100755 users/admin.py create mode 100755 users/apps.py create mode 100755 users/decorators.py create mode 100755 users/forms.py create mode 100755 users/middleware.py create mode 100644 users/migrations/0001_initial.py create mode 100644 users/migrations/0002_alter_user_options_alter_user_avatar.py create mode 100644 users/migrations/0003_user_active.py create mode 100644 users/migrations/0004_user_theme_alter_user_avatar.py create mode 100644 users/migrations/0005_alter_user_active.py create mode 100644 users/migrations/0006_alter_user_avatar_alter_user_email.py create mode 100644 users/migrations/0007_alter_user_avatar.py create mode 100644 users/migrations/0008_visitorstats.py create mode 100644 users/migrations/0009_userlevel.py create mode 100644 users/migrations/0010_alter_user_first_name_alter_user_last_name.py create mode 100644 users/migrations/0011_userinventory.py create mode 100644 users/migrations/0012_user_border_avatar.py create mode 100644 users/migrations/0013_user_username_decoration.py create mode 100644 users/migrations/0014_alter_user_username_decoration.py create mode 100644 users/migrations/0015_alter_user_border_avatar.py create mode 100755 users/migrations/__init__.py create mode 100755 users/models.py create mode 100755 users/templatetags/__init__.py create mode 100755 users/templatetags/users_custom_tags.py create mode 100755 users/tests.py create mode 100755 users/urls.py create mode 100755 users/views.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a04afce --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +.venv +.env +.DS_Store +venv +staticfiles/**/* +media/**/* +*.sqlite3 +**/__pycache__/* diff --git a/commons/bbcode_parser.py b/commons/bbcode_parser.py new file mode 100644 index 0000000..54e7958 --- /dev/null +++ b/commons/bbcode_parser.py @@ -0,0 +1,82 @@ +import re + +class BBCodeParser: + def __init__(self): + # On défini ici les balises BBcode et leur équivalent en html + self.bbcode_patterns = { + r'\[b\](.*?)\[/b\]': r'\1', + r'\[i\](.*?)\[/i\]': r'\1', + r'\[u\](.*?)\[/u\]': r'\1', + r'\[s\](.*?)\[/s\]': r'\1', + r'\[url=(.*?)\](.*?)\[/url\]': r'\2', + r'\[url\](.*?)\[/url\]': r'\1', + r'\[url=(.*?)(?:\s+class=(.*?))?\](.*?)\[/url\]': lambda m: f'{{m.group(3)}}', + r'\[url\](?:\s+class=(.*?))?\](.*?)\[/url\]': lambda m: f'{{m.group(2)}}', + r'\[img alt=(.*?)\](.*?)\[/img\]': r'\1', + r'\[img\](.*?)\[/img\]': r'Image insérer par un utilisateur', + r'\[list\](.*?)\[/list\]': r'', + r'\[\*\](.*?)': r'
  • \1
  • ', + r'\[t1\](.*?)\[/t1\]': r'\1', + r'\[t2\](.*?)\[/t2\]': r'\1', + r'\[t3\](.*?)\[/t3\]': r'\1', + r'\[citation\](.*?)\[/citation\]': r'
    \1
    ', + r'\[citation=(.*?)\](.*?)\[/citation\]': r'
    \1\2
    ', + r'\[quote\](.*?)\[/quote\]': r'
    \1
    ', + r'\[quote=(.*?)\](.*?)\[/quote\]': r'
    \1\2
    ', + r'\[color=(.*?)\](.*?)\[/color\]': r'\2', + r'\[size=(.*?)\](.*?)\[/size\]': r'\2', + r'\[p](.*?)\[/p\]': r'

    \1

    ', + r'\[center\](.*?)\[/center\]': r'
    \1
    ', + r'\[right\](.*?)\[/right\]': r'
    \1
    ', + r'\[hr\]': r'
    ', + r'\[block\](.*?)\[/block\]': r'
    \1
    ', + r'\[block style=(.*?)\](.*?)\[/block\]': r'
    \2
    ', + r'\[block class=(.*?)\](.*?)\[/block\]': r'
    \2
    ', + r'\[block style=(.*?) class=(.*?)\](.*?)\[/block\]': r'
    \3
    ', + r'\[code\](.*?)\[/code\]': lambda m: self._handle_code(m.group(1)), + r'\[code=(.*?)\](.*?)\[/code\]': lambda m: self._handle_code(m.group(2), m.group(1)), + } + + def _handle_code(self, content, language='none'): + # Convertit les retours à la ligne en \n littéraux + escaped_content = ( + content + .replace('&', '&') + .replace('<', '<') + .replace('>', '>') + .replace('"', '"') + .replace("'", ''') + .replace('\r\n', '\n') # Normalise les retours à la ligne Windows + .replace('\r', '\n') # Normalise les retours à la ligne Mac + ) + # Enveloppe dans pre/code sans modifier les \n + return f'''
    {escaped_content}
    ''' + + def parse(self, text): + # Protège temporairement le contenu des balises [code] + code_blocks = [] + def save_code(match): + code_blocks.append(match.group(0)) + return f'@@CODE_BLOCK_{len(code_blocks)-1}@@' + + text = re.sub(r'\[code(?:=.*?)?\].*?\[/code\]', save_code, text, flags=re.DOTALL) + + # Parse les autres BBCodes + for bbcode, html in self.bbcode_patterns.items(): + if callable(html): + text = re.sub(bbcode, html, text, flags=re.DOTALL) + else: + text = re.sub(bbcode, html, text, flags=re.DOTALL) + + # Restaure les blocs de code + for i, code_block in enumerate(code_blocks): + if '=' in code_block: # code avec langage spécifié + lang = re.match(r'\[code=(.*?)\]', code_block).group(1) + content = re.search(r'\[code=.*?\](.*?)\[/code\]', code_block, re.DOTALL).group(1) + else: # code sans langage + lang = 'none' + content = re.search(r'\[code\](.*?)\[/code\]', code_block, re.DOTALL).group(1) + + text = text.replace(f'@@CODE_BLOCK_{i}@@', self._handle_code(content, lang)) + + return text \ No newline at end of file diff --git a/forum/__init__.py b/forum/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/forum/admin.py b/forum/admin.py new file mode 100755 index 0000000..8883f6c --- /dev/null +++ b/forum/admin.py @@ -0,0 +1,33 @@ +from django.contrib import admin +from .models import Category, Forum, Topic, Post + +class CategoryAdmin(admin.ModelAdmin): + list_display = ('name', 'description', 'created', 'updated') + list_filter = ('created', 'updated') + search_fields = ('name', 'description') + ordering = ('-created',) + fields = ('name', 'description') + +class ForumAdmin(admin.ModelAdmin): + list_display = ('name', 'author', 'category', 'created', 'updated') + list_filter = ('category', 'author', 'created', 'updated') + search_fields = ('name', 'description') + ordering = ('-created',) + fields = ('category', 'author', 'name', 'description') + +class TopicAdmin(admin.ModelAdmin): + list_display = ('title', 'author', 'created', 'updated') + list_filter = ('forum', 'author', 'created', 'updated', 'state') + search_fields = ('title',) + ordering = ('-created',) + fields = ('forum', 'author', 'title', 'state') + +class PostAdmin(admin.ModelAdmin): + list_display = ('type', 'topic', 'author', 'created', 'updated') + list_filter = ('topic', 'author', 'created', 'updated', 'type') + fields = ('topic', 'author', 'content', 'type') + +admin.site.register(Category, CategoryAdmin) +admin.site.register(Forum, ForumAdmin) +admin.site.register(Topic, TopicAdmin) +admin.site.register(Post, PostAdmin) diff --git a/forum/apps.py b/forum/apps.py new file mode 100755 index 0000000..736b8e9 --- /dev/null +++ b/forum/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ForumConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "forum" diff --git a/forum/forms.py b/forum/forms.py new file mode 100755 index 0000000..256fff5 --- /dev/null +++ b/forum/forms.py @@ -0,0 +1,26 @@ +from django import forms + +class CreateTopic(forms.Form): + TOPIC_TYPE_CHOICES = ( + ('normal', 'Normal'), + ('announce', 'Annonce'), + ) + title = forms.CharField( + max_length=150, + label='', + widget=forms.TextInput(attrs={'placeholder': 'Titre du sujet'}) + ) + content = forms.CharField( + label='', + widget=forms.Textarea(attrs={'placeholder': 'Contenu du sujet'}) + ) + type = forms.ChoiceField(choices=TOPIC_TYPE_CHOICES, label='Type de sujet') + +class CreatePost(forms.Form): + content = forms.CharField( + label='', + widget=forms.Textarea(attrs={'placeholder': 'Contenu du message'}) + ) + +class EditPost(forms.Form): + content = forms.CharField(widget=forms.Textarea, label="Message") \ No newline at end of file diff --git a/forum/middleware.py b/forum/middleware.py new file mode 100755 index 0000000..8aedb8b --- /dev/null +++ b/forum/middleware.py @@ -0,0 +1,47 @@ +from django.utils.deprecation import MiddlewareMixin +from .models import Forum, Topic, Post +from users.models import User +from django.db.models import Count + +class ForumStatsMiddleware(MiddlewareMixin): + # On récupère les statistiques du forum pour les affiché dans le menu + def process_request(self, request): + # Nombre total de forums + total_forums = Forum.objects.count() + + # Nombre total de topics + total_topics = Topic.objects.count() + + # Nombre total de posts + total_posts = Post.objects.count() + + # Utilisateur ayant posté le plus de messages + user_with_most_posts = User.objects.annotate(num_posts=Count('post')).order_by('-num_posts').first() + + # Nombre de messages de l'utilisateur ayant posté le plus de messages + most_posts = user_with_most_posts.num_posts if user_with_most_posts else 0 + + # Utilisateur ayant créé le plus de topics + user_with_most_topics = None + most_topics = 0 + for user in User.objects.all(): + if user.topic_set.count() > most_topics: + user_with_most_topics = user + most_topics = user.topic_set.count() + + # Dernier message posté + last_post = Post.objects.latest('created') if total_posts > 0 else None + + # Derneir topic créé + last_topic = Topic.objects.latest('created') if total_topics > 0 else None + + # Ajouter les variables à l'objet request + request.total_forums = total_forums + request.total_topics = total_topics + request.total_posts = total_posts + request.user_with_most_posts = user_with_most_posts + request.most_posts = most_posts + request.user_with_most_topics = user_with_most_topics + request.most_topics = most_topics + request.last_post = last_post + request.last_topic = last_topic \ No newline at end of file diff --git a/forum/migrations/0001_initial.py b/forum/migrations/0001_initial.py new file mode 100755 index 0000000..08cfdf0 --- /dev/null +++ b/forum/migrations/0001_initial.py @@ -0,0 +1,98 @@ +# Generated by Django 4.2.16 on 2024-10-22 11:02 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name="Category", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("name", models.CharField(max_length=50)), + ("description", models.CharField(max_length=100)), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name="Forum", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("name", models.CharField(max_length=50)), + ("description", models.CharField(max_length=100)), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "category", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="forum.category" + ), + ), + ], + ), + migrations.CreateModel( + name="Topic", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("title", models.CharField(max_length=50)), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ("state", models.CharField(default="open", max_length=10)), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "forum", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="forum.forum" + ), + ), + ], + ), + migrations.CreateModel( + name="Post", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("content", models.CharField(max_length=100)), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ("type", models.CharField(default="post", max_length=10)), + ("active", models.BooleanField(default=True)), + ( + "author", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="forum_author", + to=settings.AUTH_USER_MODEL, + ), + ), + ( + "topic", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="forum.topic" + ), + ), + ], + ), + ] diff --git a/forum/migrations/0002_alter_category_options_topicread.py b/forum/migrations/0002_alter_category_options_topicread.py new file mode 100755 index 0000000..173068f --- /dev/null +++ b/forum/migrations/0002_alter_category_options_topicread.py @@ -0,0 +1,51 @@ +# Generated by Django 4.2.16 on 2024-10-22 18:36 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ("forum", "0001_initial"), + ] + + operations = [ + migrations.AlterModelOptions( + name="category", + options={"verbose_name": "Catégorie", "verbose_name_plural": "Catégories"}, + ), + migrations.CreateModel( + name="TopicRead", + fields=[ + ( + "id", + models.BigAutoField( + auto_created=True, + primary_key=True, + serialize=False, + verbose_name="ID", + ), + ), + ("last_read", models.DateTimeField(auto_now=True)), + ( + "topic", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="forum.topic" + ), + ), + ( + "user", + models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + to=settings.AUTH_USER_MODEL, + ), + ), + ], + options={ + "unique_together": {("user", "topic")}, + }, + ), + ] diff --git a/forum/migrations/0003_alter_post_topic.py b/forum/migrations/0003_alter_post_topic.py new file mode 100755 index 0000000..99c77f2 --- /dev/null +++ b/forum/migrations/0003_alter_post_topic.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.16 on 2024-10-22 18:49 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ("forum", "0002_alter_category_options_topicread"), + ] + + operations = [ + migrations.AlterField( + model_name="post", + name="topic", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, + related_name="posts", + to="forum.topic", + ), + ), + ] diff --git a/forum/migrations/0004_alter_post_content.py b/forum/migrations/0004_alter_post_content.py new file mode 100644 index 0000000..0dc89ac --- /dev/null +++ b/forum/migrations/0004_alter_post_content.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-23 16:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('forum', '0003_alter_post_topic'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='content', + field=models.TextField(), + ), + ] diff --git a/forum/migrations/__init__.py b/forum/migrations/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/forum/models.py b/forum/models.py new file mode 100755 index 0000000..e0fcf49 --- /dev/null +++ b/forum/models.py @@ -0,0 +1,87 @@ +from django.db import models +from users.models import User + +class Category(models.Model): + id = models.AutoField(primary_key=True) + name = models.CharField(max_length=50) + description = models.CharField(max_length=100) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + class Meta: + verbose_name = 'Catégorie' + verbose_name_plural = 'Catégories' + + def __str__(self): + return f'ForumCategory({self.id}, {self.name}, {self.description})' + +class Forum(models.Model): + id = models.AutoField(primary_key=True) + category = models.ForeignKey(Category, on_delete=models.CASCADE) + author = models.ForeignKey(User, on_delete=models.CASCADE) + name = models.CharField(max_length=50) + description = models.CharField(max_length=100) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return f'Forum({self.id}, {self.category}, {self.name}, {self.description})' + +class Topic(models.Model): + id = models.AutoField(primary_key=True) + forum = models.ForeignKey(Forum, on_delete=models.CASCADE) + author = models.ForeignKey(User, on_delete=models.CASCADE) + title = models.CharField(max_length=50) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + state = models.CharField(max_length=10, default='open') + + def save(self, *args, **kwargs): + if not self.id: + self.state = 'open' + super(Topic, self).save(*args, **kwargs) + + def __str__(self): + return f'Topic({self.id}, {self.forum}, {self.title})' + + def is_unread(self, user): + if not user.is_authenticated: + return False + + last_read = TopicRead.objects.filter( + user=user, + topic=self + ).first() + + if not last_read: + return True + + last_post = Post.objects.filter(topic=self).order_by('-created').first() + if not last_post: + return False + + return last_post.created > last_read.last_read + +class Post(models.Model): + id = models.AutoField(primary_key=True) + topic = models.ForeignKey(Topic, on_delete=models.CASCADE, related_name='posts') + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='forum_author') + content = models.TextField() + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + type = models.CharField(max_length=10, default='post') + active = models.BooleanField(default=True) + + def __str__(self): + return f'Post({self.id}, {self.topic}, {self.author}, {self.content})' + +class TopicRead(models.Model): + user = models.ForeignKey(User, on_delete=models.CASCADE) + topic = models.ForeignKey(Topic, on_delete=models.CASCADE) + last_read = models.DateTimeField(auto_now=True) + + class Meta: + unique_together = ['user', 'topic'] + + def __str__(self): + return f'TopicRead({self.id}, {self.topic}, {self.user})' \ No newline at end of file diff --git a/forum/templatetags/__init__.py b/forum/templatetags/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/forum/templatetags/_bbcode_tags.py b/forum/templatetags/_bbcode_tags.py new file mode 100644 index 0000000..e68e84d --- /dev/null +++ b/forum/templatetags/_bbcode_tags.py @@ -0,0 +1,9 @@ +from django import template +from commons.bbcode_parser import BBCodeParser + +register = template.Library() + +@register.filter(name='bbcode') +def bbcode(value): + parser = BBCodeParser() + return parser.parse(value) \ No newline at end of file diff --git a/forum/templatetags/forum_extras.py b/forum/templatetags/forum_extras.py new file mode 100755 index 0000000..420e579 --- /dev/null +++ b/forum/templatetags/forum_extras.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) \ No newline at end of file diff --git a/forum/templatetags/paginator_tag.py b/forum/templatetags/paginator_tag.py new file mode 100755 index 0000000..07281ca --- /dev/null +++ b/forum/templatetags/paginator_tag.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.inclusion_tag('components/paginator.html', takes_context=True) +def paginate(context): + return context \ No newline at end of file diff --git a/forum/tests.py b/forum/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/forum/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/forum/urls.py b/forum/urls.py new file mode 100755 index 0000000..d5fb734 --- /dev/null +++ b/forum/urls.py @@ -0,0 +1,20 @@ +from django.urls import path +from django.conf.urls.static import static + +from passion_retro import settings +from . import views + +urlpatterns = [ + path("", views.forum_home, name="forum_home"), + path("/", views.topic_list, name="topic_list"), + path("/create_topic/", views.create_topic, name="create_topic"), + path("//", views.topic_detail, name="post_list"), + + path("/lock/", views.lock_topic, name="lock_topic"), + path("/unlock/", views.unlock_topic, name="unlock_topic"), + path("//deactivate/", views.deactivate_topic, name="deactivate_topic"), + path("//activate/", views.activate_topic, name="activate_topic"), + path("/deactivate/", views.deactivate_post, name="deactivate_post"), + path("/activate/", views.activate_post, name="activate_post"), + path('post//edit/', views.edit_post, name='forum_edit_post'), +] \ No newline at end of file diff --git a/forum/views.py b/forum/views.py new file mode 100755 index 0000000..d513495 --- /dev/null +++ b/forum/views.py @@ -0,0 +1,303 @@ +from django.core.paginator import Paginator +from django.shortcuts import render, redirect +from django.contrib import messages +from django.contrib.auth.decorators import login_required +from django.http import HttpResponseForbidden +from django.utils import timezone +from .models import Category, Forum, Topic, Post, TopicRead +from .forms import CreateTopic, CreatePost, EditPost +from django.db.models import Max, F +from users.decorators import groups_required +from users.models import UserLevel + +def forum_home(request): + categories = Category.objects.all() + forums = Forum.objects.all() + + last_posts = {} + count_topics = {} + unread_topics = {} + + for forum in forums: + # Dernier post du forum avec une seule requête + last_post = Post.objects.select_related( + 'topic', + 'author', + 'topic__forum' + ).filter( + topic__forum=forum + ).order_by('-created').first() + + last_posts[forum.id] = last_post + + # Nombre de topics (pas de changement) + count_topic = Topic.objects.filter(forum=forum).count() + count_topics[forum.id] = count_topic + + # Optimisation de la vérification des topics non lus + if request.user.is_authenticated: + # Récupérer le dernier post de chaque topic du forum en une seule requête + latest_posts_per_topic = Post.objects.filter( + topic__forum=forum + ).values('topic_id').annotate( + last_post_date=Max('created') + ) + + # Récupérer les dernières lectures de l'utilisateur pour tous les topics du forum + topic_reads = TopicRead.objects.filter( + user=request.user, + topic__forum=forum + ).values_list('topic_id', 'last_read') + + # Convertir en dictionnaire pour un accès plus rapide + read_dates = dict(topic_reads) + + # Un forum est non lu si au moins un topic a un post plus récent que la dernière lecture + is_unread = False + for post_info in latest_posts_per_topic: + topic_id = post_info['topic_id'] + last_post_date = post_info['last_post_date'] + + # Si le topic n'a jamais été lu + if topic_id not in read_dates: + is_unread = True + break + + # Si le dernier post est plus récent que la dernière lecture + if last_post_date > read_dates[topic_id]: + is_unread = True + break + + unread_topics[forum.id] = is_unread + else: + unread_topics[forum.id] = False + + print(unread_topics) + + context = { + 'categories': categories, + 'forums': forums, + 'last_posts': last_posts, + 'count_topics': count_topics, + 'unread_topics': unread_topics, + } + + return render(request, "components/forum_home.html", context) + +def topic_list(request, forum_id): + forum = Forum.objects.get(id=forum_id) + topics = Topic.objects.filter(forum=forum).order_by('-created') + paginator = Paginator(topics, 20) + + page_number = request.GET.get('page') + topics = paginator.get_page(page_number) + + count_posts = {} + last_posts = {} + page_numbers = {} + unread_topics = {} + + for topic in topics: + count_post = Post.objects.filter(topic=topic).count() + count_posts[topic.id] = count_post + + last_post = Post.objects.filter(topic=topic).order_by('-created').first() + last_posts[topic.id] = last_post + + if request.user.is_authenticated: + # Récupérer le dernier post du topic + latest_post = Post.objects.filter(topic=topic).aggregate(last_post_date=Max('created'))['last_post_date'] + + # Récupérer la dernière lecture de l'utilisateur pour ce topic + topic_read = TopicRead.objects.filter(user=request.user, topic=topic).first() + + # Un topic est non lu si le dernier post est plus récent que la dernière lecture + if topic_read: + unread_topics[topic.id] = latest_post > topic_read.last_read + else: + unread_topics[topic.id] = True + else: + unread_topics[topic.id] = False + + if last_post: + # Position du dernier message (nombre de messages jusqu'à ce message) + post_position = Post.objects.filter( + topic=topic, + created__lte=last_post.created + ).count() + + # Calcul du numéro de page (20 messages par page comme dans topic_detail) + page_number = (post_position + 19) // 20 # équivalent à ceil(post_position/20) + page_numbers[topic.id] = page_number + + context = { + 'forum': forum, + 'topics': topics, + 'count_posts': count_posts, + 'last_posts': last_posts, + 'page_numbers': page_numbers, + 'unread_topics': unread_topics, + 'is_paginated': topics.has_other_pages(), + 'page_obj': topics, + 'paginator': paginator, + } + + return render(request, "forum/topic_list.html", context) + +@login_required +def create_topic(request, forum_id): + if not request.user.is_active: + return HttpResponseForbidden("Vous n'êtes pas autorisé à créer un sujet.") + + if request.method == 'POST': + topic_form = request.POST + # On créer le topic via le model Topic + topic = Topic( + forum=Forum.objects.get(id=forum_id), + author=request.user, + title=topic_form['title'], + ) + + # Puis le premier post du topic + post = Post( + topic=topic, + author=request.user, + content=topic_form['content'], + ) + + topic.save() + post.save() + messages.success(request, 'Topic créer avec succès.') + UserLevel.objects.update(user=request.user, experience=F('experience') + 15) + # on renvoie l'utilisateur sur la page du topic contenu l'id du forum et du topic créer + return redirect('post_list', forum_id=forum_id, topic_id=topic.id) + + forum = Forum.objects.get(id=forum_id) + topic_form = CreateTopic() + context = { + 'forum': forum, + 'topic_form': topic_form, + } + return render(request, "forum/create_topic.html", context) + +def topic_detail(request, topic_id, forum_id): + if request.method == 'POST': + if not request.user.is_active or not request.user.is_authenticated: + return HttpResponseForbidden("Vous n'êtes pas autorisé à poster un message.") + + post_form = CreatePost(request.POST) + if post_form.is_valid(): + post = Post( + topic=Topic.objects.get(id=topic_id), + author=request.user, + content=post_form.cleaned_data['content'], + ) + post.save() + UserLevel.objects.update(user=request.user, experience=F('experience') + 10) + messages.success(request, 'Message posté avec succès.') + + topic = Topic.objects.get(id=topic_id) + posts = Post.objects.filter(topic=topic, active=True) + paginator = Paginator(posts, 20) + + page_number = request.GET.get('page') + posts = paginator.get_page(page_number) + + # Marquer comme lu si l'utilisateur est connecté + if request.user.is_authenticated: + TopicRead.objects.update_or_create( + user=request.user, + topic=topic, + defaults={'last_read': timezone.now()} + ) + + # On compte le nombre de posts de l'auteur + count_posts = {} + for post in posts: + count_post = Post.objects.filter(author=post.author).count() + count_posts[post.author.id] = count_post + + context = { + 'topic': topic, + 'posts': posts, + 'count_posts': count_posts, + 'post_form': CreatePost(), + 'is_paginated': posts.has_other_pages(), + 'page_obj': posts, + 'paginator': paginator, + } + + return render(request, "forum/topic_detail.html", context) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def lock_topic(request, topic_id): + topic = Topic.objects.get(id=topic_id) + topic.state = 'closed' + topic.save() + messages.success(request, 'Sujet verrouillé avec succès.') + return redirect('post_list', forum_id=topic.forum.id, topic_id=topic_id) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def unlock_topic(request, topic_id): + topic = Topic.objects.get(id=topic_id) + topic.state = 'open' + topic.save() + messages.success(request, 'Sujet déverrouillé avec succès.') + return redirect('post_list', forum_id=topic.forum.id, topic_id=topic_id) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def deactivate_post(request, post_id): + post = Post.objects.get(id=post_id) + post.active = False + post.save() + messages.success(request, 'Message désactivé avec succès.') + return redirect('post_list', forum_id=post.topic.forum.id, topic_id=post.topic.id) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def activate_post(request, post_id): + post = Post.objects.get(id=post_id) + post.active = True + post.save() + messages.success(request, 'Message activé avec succès.') + return redirect('post_list', forum_id=post.topic.forum.id, topic_id=post.topic.id) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def deactivate_topic(request, topic_id): + topic = Topic.objects.get(id=topic_id) + topic.active = False + topic.save() + messages.success(request, 'Sujet désactivé avec succès.') + return redirect('topic_list', forum_id=topic.forum.id) + +@groups_required('Modérateur', 'Admininistrateur', 'Super Admin') +def activate_topic(request, topic_id): + topic = Topic.objects.get(id=topic_id) + topic.active = True + topic.save() + messages.success(request, 'Sujet activé avec succès.') + return redirect('topic_list', forum_id=topic.forum.id) + +@login_required +def edit_post(request, post_id): + post = Post.objects.get(id=post_id) + + # Vérifier si l'utilisateur a le droit d'éditer + if not (request.user == post.author or request.user.groups.filter(name__in=['Administrateur', 'Super Admin']).exists()): + return HttpResponseForbidden("Vous n'êtes pas autorisé à éditer ce message.") + + if request.method == 'POST': + form = EditPost(request.POST) + if form.is_valid(): + post.content = form.cleaned_data['content'] + post.updated = timezone.now() + post.save() + messages.success(request, 'Message modifié avec succès.') + return redirect('post_list', forum_id=post.topic.forum.id, topic_id=post.topic.id) + else: + form = EditPost(initial={'content': post.content}) + + context = { + 'form': form, + 'post': post + } + return render(request, "forum/edit_post.html", context) \ No newline at end of file diff --git a/gallery/__init__.py b/gallery/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gallery/admin.py b/gallery/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/gallery/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/gallery/apps.py b/gallery/apps.py new file mode 100644 index 0000000..97a664a --- /dev/null +++ b/gallery/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GalleryConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'gallery' diff --git a/gallery/forms.py b/gallery/forms.py new file mode 100644 index 0000000..4c708c0 --- /dev/null +++ b/gallery/forms.py @@ -0,0 +1,17 @@ +from django import forms + +class AddImgGallery(forms.Form): + image = forms.FileField( + label='Image', + required=True, + widget=forms.ClearableFileInput(attrs={'class': 'form-inline'}) + ) + + def clean_img(self): + img = self.cleaned_data.get('image') + if img: + if not img.name.lower().endswith(('.jpg', '.jpeg', '.png')): + raise forms.ValidationError('Seul les fichiers JPG, JPEG, PNG sont autorisés.') + if img.size > 5 * 1024 * 1024: + raise forms.ValidationError('La taille de l\'image ne dois pas dépasser 5 Mo.') + return img \ No newline at end of file diff --git a/gallery/migrations/__init__.py b/gallery/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/gallery/models.py b/gallery/models.py new file mode 100644 index 0000000..71a8362 --- /dev/null +++ b/gallery/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/gallery/tests.py b/gallery/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/gallery/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/gallery/urls.py b/gallery/urls.py new file mode 100755 index 0000000..cbbd78f --- /dev/null +++ b/gallery/urls.py @@ -0,0 +1,10 @@ +from django.urls import path +from django.conf.urls.static import static + +from passion_retro import settings +from . import views + +urlpatterns = [ + path("", views.home_gallery, name="home_gallery"), + path("import", views.import_img, name="import"), +] \ No newline at end of file diff --git a/gallery/views.py b/gallery/views.py new file mode 100644 index 0000000..9d5eb76 --- /dev/null +++ b/gallery/views.py @@ -0,0 +1,52 @@ +from django.shortcuts import render +from django.contrib import messages +from .forms import AddImgGallery +from django.contrib.auth.decorators import login_required +import os +from django.conf import settings + +@login_required() +def home_gallery(request): + user_id = request.user.id + user_directory = os.path.join(settings.MEDIA_ROOT, 'galleries', str(user_id)) + img_urls = [] + + if os.path.exists(user_directory): + for filename in os.listdir(user_directory): + if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif')): + img_urls.append(f"{settings.MEDIA_URL}galleries/{user_id}/{filename}") + + return render(request, 'gallery/home.html', {'images': img_urls}) + +@login_required() +def import_img(request): + if request.method == "POST": + form = AddImgGallery(request.POST, request.FILES) + if form.is_valid(): + image = form.clean_img() + user_id = request.user.id + saved_image_url = save_image_to_gallery(image, user_id) + + messages.success(request, 'Votre image a bien été ajoutée à la galerie') + form = AddImgGallery() + return render(request, 'gallery/form.html', {'form': form}) + +def save_image_to_gallery(image, user_id): + user_directory = os.path.join(settings.MEDIA_ROOT, 'galleries', str(user_id)) + os.makedirs(user_directory, exist_ok=True) + + # Créer un fichier index.html vide pour sécuriser le répertoire + index_file_path = os.path.join(user_directory, 'index.html') + if not os.path.exists(index_file_path): # Vérifie si le fichier n'existe pas déjà + with open(index_file_path, 'w') as index_file: + index_file.write('') # Écrit un fichier vide + + # Définir le chemin complet du fichier + file_path = os.path.join(user_directory, image.name) + + # Enregistrer le fichier + with open(file_path, 'wb+') as destination: + for chunk in image.chunks(): + destination.write(chunk) + + return f"{settings.MEDIA_URL}galleries/{user_id}/{image.name}" \ No newline at end of file diff --git a/games/__init__.py b/games/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/games/admin.py b/games/admin.py new file mode 100644 index 0000000..0b86d66 --- /dev/null +++ b/games/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import LittleBacCategories + +admin.site.register(LittleBacCategories) \ No newline at end of file diff --git a/games/apps.py b/games/apps.py new file mode 100644 index 0000000..1a3efec --- /dev/null +++ b/games/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GamesConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'games' diff --git a/games/migrations/0001_initial.py b/games/migrations/0001_initial.py new file mode 100644 index 0000000..4286e2f --- /dev/null +++ b/games/migrations/0001_initial.py @@ -0,0 +1,64 @@ +# Generated by Django 4.2.17 on 2024-12-30 09:48 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='LittleBacCategories', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=100)), + ('description', models.TextField(default='')), + ], + ), + migrations.CreateModel( + name='LittleBacGames', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=155)), + ('status', models.CharField(choices=[('waiting', 'En attente'), ('in_progress', 'En cours'), ('finished', 'Terminée')], default='waiting', max_length=20)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ], + ), + migrations.CreateModel( + name='LittleBacRounds', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('letter', models.CharField(max_length=1)), + ('round_counter', models.IntegerField(default=1)), + ('game', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_rounds', to='games.littlebacgames')), + ], + ), + migrations.CreateModel( + name='LittleBacPlayers', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('score', models.IntegerField()), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_players', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='LittleBacAnswers', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('answer', models.CharField(max_length=100)), + ('is_valid', models.BooleanField(default=False)), + ('point', models.IntegerField(default=0)), + ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_answers', to='games.littlebaccategories')), + ('player', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_answers', to='games.littlebacplayers')), + ('round', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_answers', to='games.littlebacrounds')), + ], + ), + ] diff --git a/games/migrations/0002_littlebacplayers_game.py b/games/migrations/0002_littlebacplayers_game.py new file mode 100644 index 0000000..868f40c --- /dev/null +++ b/games/migrations/0002_littlebacplayers_game.py @@ -0,0 +1,20 @@ +# Generated by Django 4.2.17 on 2024-12-30 10:51 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacplayers', + name='game', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_players', to='games.littlebacgames'), + preserve_default=False, + ), + ] diff --git a/games/migrations/0003_littlebacgames_author.py b/games/migrations/0003_littlebacgames_author.py new file mode 100644 index 0000000..7a0fb38 --- /dev/null +++ b/games/migrations/0003_littlebacgames_author.py @@ -0,0 +1,22 @@ +# Generated by Django 4.2.17 on 2024-12-30 12:10 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('games', '0002_littlebacplayers_game'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacgames', + name='author', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='little_bac_games', to=settings.AUTH_USER_MODEL), + preserve_default=False, + ), + ] diff --git a/games/migrations/0004_littlebacplayers_is_ready.py b/games/migrations/0004_littlebacplayers_is_ready.py new file mode 100644 index 0000000..c44ed11 --- /dev/null +++ b/games/migrations/0004_littlebacplayers_is_ready.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-30 12:45 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0003_littlebacgames_author'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacplayers', + name='is_ready', + field=models.BooleanField(default=False), + ), + ] diff --git a/games/migrations/0005_littlebacgames_players.py b/games/migrations/0005_littlebacgames_players.py new file mode 100644 index 0000000..7873662 --- /dev/null +++ b/games/migrations/0005_littlebacgames_players.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-30 15:24 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0004_littlebacplayers_is_ready'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacgames', + name='players', + field=models.ManyToManyField(related_name='little_bac_games', to='games.littlebacplayers'), + ), + ] diff --git a/games/migrations/0006_remove_littlebacgames_players.py b/games/migrations/0006_remove_littlebacgames_players.py new file mode 100644 index 0000000..0bf1681 --- /dev/null +++ b/games/migrations/0006_remove_littlebacgames_players.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.17 on 2024-12-30 15:37 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0005_littlebacgames_players'), + ] + + operations = [ + migrations.RemoveField( + model_name='littlebacgames', + name='players', + ), + ] diff --git a/games/migrations/0007_littlebacgames_countdown_started_and_more.py b/games/migrations/0007_littlebacgames_countdown_started_and_more.py new file mode 100644 index 0000000..2823959 --- /dev/null +++ b/games/migrations/0007_littlebacgames_countdown_started_and_more.py @@ -0,0 +1,61 @@ +# Generated by Django 4.2.17 on 2024-12-30 19:24 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('games', '0006_remove_littlebacgames_players'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacgames', + name='countdown_started', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='littlebacgames', + name='countdown_time', + field=models.IntegerField(default=0), + ), + migrations.AlterField( + model_name='littlebacanswers', + name='category', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='games.littlebaccategories'), + ), + migrations.AlterField( + model_name='littlebacanswers', + name='player', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='games.littlebacplayers'), + ), + migrations.AlterField( + model_name='littlebacanswers', + name='round', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='answers', to='games.littlebacrounds'), + ), + migrations.AlterField( + model_name='littlebacgames', + name='author', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='games', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='littlebacplayers', + name='game', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to='games.littlebacgames'), + ), + migrations.AlterField( + model_name='littlebacplayers', + name='user', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='players', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='littlebacrounds', + name='game', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='rounds', to='games.littlebacgames'), + ), + ] diff --git a/games/migrations/0008_littlebacgames_countdown_start_time.py b/games/migrations/0008_littlebacgames_countdown_start_time.py new file mode 100644 index 0000000..0010e13 --- /dev/null +++ b/games/migrations/0008_littlebacgames_countdown_start_time.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-30 19:46 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0007_littlebacgames_countdown_started_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacgames', + name='countdown_start_time', + field=models.DateTimeField(blank=True, null=True), + ), + ] diff --git a/games/migrations/0009_alter_littlebacgames_countdown_start_time.py b/games/migrations/0009_alter_littlebacgames_countdown_start_time.py new file mode 100644 index 0000000..a9bcb36 --- /dev/null +++ b/games/migrations/0009_alter_littlebacgames_countdown_start_time.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-31 08:54 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0008_littlebacgames_countdown_start_time'), + ] + + operations = [ + migrations.AlterField( + model_name='littlebacgames', + name='countdown_start_time', + field=models.DateTimeField(blank=True, default=None, null=True), + ), + ] diff --git a/games/migrations/0010_littlebacplayers_status.py b/games/migrations/0010_littlebacplayers_status.py new file mode 100644 index 0000000..c4e57e0 --- /dev/null +++ b/games/migrations/0010_littlebacplayers_status.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-31 12:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0009_alter_littlebacgames_countdown_start_time'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacplayers', + name='status', + field=models.CharField(choices=[('playing', 'Joue'), ('overed', 'A fini')], default='playing', max_length=20), + ), + ] diff --git a/games/migrations/0011_littlebacgames_current_phase.py b/games/migrations/0011_littlebacgames_current_phase.py new file mode 100644 index 0000000..47a8deb --- /dev/null +++ b/games/migrations/0011_littlebacgames_current_phase.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2025-01-02 13:49 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('games', '0010_littlebacplayers_status'), + ] + + operations = [ + migrations.AddField( + model_name='littlebacgames', + name='current_phase', + field=models.CharField(blank=True, default='ready_game', max_length=60, null=True), + ), + ] diff --git a/games/migrations/__init__.py b/games/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/games/models.py b/games/models.py new file mode 100644 index 0000000..9b5d0c4 --- /dev/null +++ b/games/models.py @@ -0,0 +1,49 @@ +from django.db import models +from users.models import User + +class LittleBacGames(models.Model): + id = models.AutoField(primary_key=True) + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='games') + name = models.CharField(max_length=155) + status = models.CharField(max_length=20 ,choices=[ + ('waiting', 'En attente'), + ('in_progress', 'En cours'), + ('finished', 'Terminée') + ], default='waiting') + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + countdown_started = models.BooleanField(default=False) + countdown_time = models.IntegerField(default=0) + countdown_start_time = models.DateTimeField(default=None, null=True, blank=True) + current_phase = models.CharField(max_length=60, default="ready_game", null=True, blank=True) + +class LittleBacPlayers(models.Model): + id = models.AutoField(primary_key=True) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='players') + game = models.ForeignKey(LittleBacGames, on_delete=models.CASCADE, related_name='players') + score = models.IntegerField() + is_ready = models.BooleanField(default=False) + status = models.CharField(max_length=20, choices=[ + ('playing', 'Joue'), + ('overed', 'A fini') + ], default="playing") + +class LittleBacCategories(models.Model): + id = models.AutoField(primary_key=True) + name = models.CharField(max_length=100) + description = models.TextField(default="") + +class LittleBacRounds(models.Model): + id = models.AutoField(primary_key=True) + game = models.ForeignKey(LittleBacGames, on_delete=models.CASCADE, related_name='rounds') + letter = models.CharField(max_length=1) + round_counter = models.IntegerField(default=1) + +class LittleBacAnswers(models.Model): + id = models.AutoField(primary_key=True) + round = models.ForeignKey(LittleBacRounds, on_delete=models.CASCADE, related_name='answers') + player = models.ForeignKey(LittleBacPlayers, on_delete=models.CASCADE, related_name='answers') + category = models.ForeignKey(LittleBacCategories, on_delete=models.CASCADE, related_name='answers') + answer = models.CharField(max_length=100) + is_valid = models.BooleanField(default=False) + point = models.IntegerField(default=0) \ No newline at end of file diff --git a/games/templatetags/custom_filters.py b/games/templatetags/custom_filters.py new file mode 100644 index 0000000..420e579 --- /dev/null +++ b/games/templatetags/custom_filters.py @@ -0,0 +1,7 @@ +from django import template + +register = template.Library() + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) \ No newline at end of file diff --git a/games/tests.py b/games/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/games/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/games/urls.py b/games/urls.py new file mode 100644 index 0000000..c96eebe --- /dev/null +++ b/games/urls.py @@ -0,0 +1,25 @@ +from django.urls import path +from django.conf.urls.static import static +from . import views + +urlpatterns = [ + # API REST + path('api//start_countdown', views.game_start_countdown, name='game_start_countdown'), + path('api//countdown_status', views.game_countdown_status, name='game_countdown_status'), + path('api/bac//info', views.game_infos_little_bac, name='game_infos_little_bac'), + path('api/bac//info_party', views.party_infos_little_bac, name='party_infos_little_bac'), + path('api/bac//players', views.game_players_little_bac, name='game_players_little_bac'), + path('api/bac//end_game', views.game_liitle_bac_end_game, name='end_game'), + path('api/bac//player//toggle_ready', views.toggle_ready_status_little_bac, name='toggle_ready_status_little_bac'), + + + path("", views.portal, name="portal_games"), + path("bac", views.little_bac_home, name="bac_games"), + path("bac/party", views.little_bac_start, name="bac_start_games"), + path("bac/party/", views.little_bac_party, name="bac_party_games"), + path("bac/party//join", views.little_bac_party_join, name="bac_party_join_games"), + path("bac/party//play", views.little_bac_party_play, name="bac_party_play_games"), + path("bac/party//results", views.game_little_bac_results, name="bac_party_results_games"), + path('party//new_round/', views.game_little_bac_start_new_round, name='bac_start_new_round'), + +] \ No newline at end of file diff --git a/games/views.py b/games/views.py new file mode 100644 index 0000000..d841267 --- /dev/null +++ b/games/views.py @@ -0,0 +1,433 @@ +from django.shortcuts import render, redirect, get_object_or_404 +from django.http import JsonResponse +from django.contrib.auth.decorators import login_required +from .models import * +from users.models import UserLevel +from django.utils.timezone import now +from django.contrib import messages +from django.db.models import Count, Sum, F +from django.db.models.functions import Lower + +def portal(request): + last_party = LittleBacGames.objects.filter().last() + nb_parties = LittleBacGames.objects.filter(status="finished").count() + + if not request.user.is_authenticated: + return render(request, 'games/portal.html', {'last_party': last_party, 'nb_parties': nb_parties}) + games = LittleBacGames.objects.filter(author=request.user, status='waiting') + + return render(request, 'games/portal.html', {'games': games, 'last_party': last_party, 'nb_parties': nb_parties}) + +def little_bac_home(request): + return render(request, 'games/littlebac/home.html') + +@login_required() +def little_bac_start(request): + import random + import string + + game = LittleBacGames.objects.create(name=f"Partie de {request.user.username}", author=request.user) + LittleBacPlayers.objects.create( + user=request.user, + game=game, + score=0 + ) + + # Liste des lettres de l'alphabet + alphabet = string.ascii_uppercase # 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' + + # Sélection aléatoire + random_letter = random.choice(alphabet) + + LittleBacRounds.objects.create( + game=game, + letter=random_letter, + round_counter=1 + ) + + return redirect('bac_party_games', party_id=game.id) + +@login_required() +def little_bac_party(request, party_id): + game = LittleBacGames.objects.get(id=party_id) + players = LittleBacPlayers.objects.filter(game=game) + rounds = LittleBacRounds.objects.filter(game=game) + + if players.filter(user=request.user).exists(): + current_round = rounds.last() + return render(request, 'games/littlebac/game.html', {'game': game, 'players': players, 'round': current_round}) + else: + return redirect('bac_games') + +@login_required() +def little_bac_party_join(request, party_id): + game = LittleBacGames.objects.get(id=party_id) + players = LittleBacPlayers.objects.filter(game=game) + + if players.filter(user=request.user).exists(): + return redirect('bac_games') + + LittleBacPlayers.objects.create( + user=request.user, + game=game, + score=0 + ) + + return redirect('bac_party_games', party_id=game.id) + +@login_required() +def little_bac_party_play(request, party_id): + game = LittleBacGames.objects.get(id=party_id) + players = LittleBacPlayers.objects.filter(game=game) + + if not players.filter(user=request.user).exists(): + return redirect('bac_games') + + # Vérifie si la partie est en attente et met à jour le statut + if game.status == 'waiting': + game.status = 'in_progress' + game.save() + + # Récupère le round actuel (dernier round) + current_round = LittleBacRounds.objects.filter(game=game).last() + categories = LittleBacCategories.objects.all() + player = players.get(user=request.user) + + if request.method == "POST": + print("POST") + # On vérifie que les réponses commencent par la lettre du round + round_letter = current_round.letter.upper() + all_valid = True + for category in categories: + answer = request.POST.get(f"col-{category.id}", "").strip() + if answer and answer[0].upper() != round_letter: + all_valid = False + break + + if all_valid: + player = LittleBacPlayers.objects.get(game=game, user_id=request.user.id) + player.status = "overed" + player.save() + + # Récupérer les réponses soumises par le joueur + answers = { + f"col-{category.id}": request.POST.get(f"col-{category.id}") + for category in categories + } + + responses = [] + # Enregistre chaque réponse en base de données + for category in categories: + answer = answers.get(f"col-{category.id}", "").strip() # Récupère la réponse ou une chaîne vide + if answer: # Vérifie si une réponse est fournie + response = LittleBacAnswers.objects.create( + round=current_round, + player=players.get(user=request.user), + category=category, + answer=answer, + is_valid=False + ) + responses.append(response) + + return render(request, 'games/littlebac/finish.html', { + 'responses': responses, + 'round': current_round, + 'categories': categories, + 'player': player + }) + else: + messages.error(request, "Les réponses doivent commencer par la lettre du tour.") + return render(request, 'games/littlebac/play.html', { + 'game': game, + 'round': current_round, + 'categories': categories, + 'countdown_remaining': countdown_remaining, + }) + + # Passe les informations du décompte au template + countdown_remaining = max( + 0, game.countdown_time - int((now() - game.countdown_start_time).total_seconds()) + ) if game.countdown_started else None + + return render(request, 'games/littlebac/play.html', { + 'game': game, + 'round': current_round, + 'categories': categories, + 'countdown_remaining': countdown_remaining, + 'player': player + }) + +@login_required() +def game_little_bac_results(request, party_id): + game = get_object_or_404(LittleBacGames, id=party_id) + players = LittleBacPlayers.objects.filter(game=game) + rounds = LittleBacRounds.objects.filter(game=game) + categories = LittleBacCategories.objects.all() + + all_organized_answers = {} + scores_by_round = {round.id: {} for round in rounds} + total_scores = {player.id: 0 for player in players} + + for round in rounds: + answers = LittleBacAnswers.objects.filter(round=round) + + # On détermine qu'un mot est valide s'il est unique pour une catégorie donnée + for category in categories: + valid_answers = answers.filter(category=category).annotate( + lower_answer=Lower('answer') + ).values('lower_answer').annotate( + count=Count('lower_answer') + ).filter(count=1) + for answer in valid_answers: + answers.filter(category=category, answer__iexact=answer['lower_answer']).update(is_valid=True, point=5) + + # Marquer les réponses dupliquées et leur attribuer 1 point + duplicate_answers = answers.filter(category=category).annotate( + lower_answer=Lower('answer') + ).values('lower_answer').annotate( + count=Count('lower_answer') + ).filter(count__gt=1) + for answer in duplicate_answers: + answers.filter(category=category, answer__iexact=answer['lower_answer']).update(is_valid=False, point=1) + + # Calcule des points pour chaque joueur pour ce round + for player in players: + player_score = answers.filter( + player=player + ).aggregate( + total=Sum('point') + )['total'] or 0 + + + scores_by_round[round.id][player.id] = player_score + total_scores[player.id] += player_score + + # On ajoute X experience au joueur (X: score du round) + user_level = UserLevel.objects.get(user=player.user) + last_round_updated = request.session.get(f'last_round_updated_{player.user.id}', 0) + if last_round_updated < round.id: + user_level.experience += player_score + user_level.save() + request.session[f'last_round_updated_{player.user.id}'] = round.id + + # Organiser les réponses par joueur et par catégorie pour chaque round + for round in rounds: + answers = LittleBacAnswers.objects.filter(round=round) + organized_answers = {} + for player in players: + organized_answers[player.id] = {} + for category in categories: + answer = answers.filter(player=player, category=category).first() + if answer: + organized_answers[player.id][category.id] = answer.answer + else: + organized_answers[player.id][category.id] = "" + all_organized_answers[round.id] = organized_answers + + # Mettre à jour les scores totaux des joueurs + for player in players: + player.score = total_scores[player.id] + player.save() + + return render(request, 'games/littlebac/results.html', { + 'game': game, + 'players': players, + 'rounds': rounds, + 'categories': categories, + 'all_organized_answers': all_organized_answers, + 'scores_by_round': scores_by_round, + 'total_scores': total_scores + }) + +login_required() +def game_little_bac_start_new_round(request, game_id): + import random + import string + + game = LittleBacGames.objects.get(id=game_id) + if game.author != request.user: + return redirect('bac_party_games', party_id=game_id) + + players = LittleBacPlayers.objects.filter(game=game) + + game.status = 'waiting' + game.countdown_started = False + game.countdown_start_time = None + game.countdown_time = 0 + game.current_phase = "ready_game" + game.save() + + players.update(is_ready=False, status='playing') + + # Sélectionne une lettre aléatoire pour le nouveau round + alphabet = string.ascii_uppercase + letter = random.choice(alphabet) + + # Détermine le numéro du nouveau round + round_counter = game.rounds.count() + 1 + + # Crée un nouveau round + new_round = LittleBacRounds.objects.create( + game=game, + letter=letter, + round_counter=round_counter + ) + + return redirect('bac_party_games', party_id=game_id) + +# API REST DES JEUX +@login_required() +def game_players_little_bac(request, game_id): + try: + game = LittleBacGames.objects.get(id=game_id) + players = LittleBacPlayers.objects.filter(game=game) + players_list = [{"id": player.id, "username": player.user.username, "score": player.score} for player in players] + return JsonResponse({"game_id": game_id, "players": players_list}) + except LittleBacGames.DoesNotExist: + return JsonResponse({"error": "Game not found"}, status=404) + +@login_required() +def toggle_ready_status_little_bac(request, game_id, player_id): + try: + game = LittleBacGames.objects.get(id=game_id) + player = LittleBacPlayers.objects.get(game=game, user_id=player_id) + + player.is_ready = not player.is_ready + player.save() + + # Vérifie si tous les joueurs de la partie sont prêts + game = player.game + print("Joueurs de la partie",game) + all_ready = LittleBacPlayers.objects.filter(game=game, is_ready=True).count() + print(all_ready) + + return JsonResponse({"is_ready": player.is_ready, "all_ready": all_ready}) + except LittleBacPlayers.DoesNotExist: + return JsonResponse({"error": "Player not found"}, status=404) + +def game_infos_little_bac(request, game_id): + try: + game = LittleBacGames.objects.get(id=game_id) + + return JsonResponse({ + "name": game.name, + "status": game.status, + "created": game.created, + "all_ready": game.players.filter(is_ready=True).count() + }) + except LittleBacGames.DoesNotExist: + return JsonResponse({"error": "Party not found"}, status=404) + +@login_required() +def party_infos_little_bac(request, game_id): + from django.utils.timezone import now + + try: + game = LittleBacGames.objects.get(id=game_id) + players = LittleBacPlayers.objects.filter(game=game) + players_data = [ + {"id": player.id, "username": player.user.username, "status": player.status, "score": player.score} + for player in players + ] + + countdown_remaining = None + if game.countdown_started and game.countdown_start_time: + elapsed_time = (now() - game.countdown_start_time).total_seconds() + countdown_remaining = max(0, game.countdown_time - int(elapsed_time)) + + print(game.status) + + return JsonResponse({ + "game_status": game.status, + "players": players_data, + "countdown_time": countdown_remaining, + "countdown_started": game.countdown_started, + "current_phase": game.current_phase if hasattr(game, 'current_phase') else None + }) + except LittleBacGames.DoesNotExist: + return JsonResponse({"error": "Game not found"}, status=404) + +@login_required() +def game_start_countdown(request, game_id): + from django.utils.timezone import now + + # Récupère le type de décompte (ready_game ou finish_game) + countdown_type = request.GET.get("type", "ready_game") + print(f"Type de décompte reçu: {countdown_type}") # Ajout de cette ligne pour vérifier le type de décompte + + if countdown_type not in ["ready_game", "finish_game"]: + return JsonResponse({"success": False, "error": "Type de décompte invalide."}, status=400) + + try: + game = LittleBacGames.objects.get(id=game_id) + print(f"Statut du jeu: {game.status}") # Ajout de cette ligne pour vérifier le statut du jeu + + # Vérification des conditions pour chaque décompte + if countdown_type == "ready_game" and not game.countdown_started and game.status == "waiting": + game.countdown_started = True + game.countdown_start_time = now() + game.countdown_time = 5 + game.save() + + elif countdown_type == "finish_game" and game.status == "in_progress": + print("Finish game") + # Vérifie si un décompte précédent n'est pas actif + elapsed_time = (now() - game.countdown_start_time).total_seconds() + if not game.countdown_started or elapsed_time >= game.countdown_time: + print("Start countdown") + game.countdown_started = True + game.countdown_start_time = now() + game.countdown_time = 60 + game.current_phase = "finish_game" + game.save() + else: + return JsonResponse({"success": False, "error": "Décompte déjà en cours."}, status=400) + + else: + return JsonResponse({"success": False, "error": "Condition de décompte non remplie."}, status=400) + + return JsonResponse({ + "success": True, + "countdown_started": game.countdown_started, + "countdown_time": game.countdown_time + }) + except LittleBacGames.DoesNotExist: + return JsonResponse({"success": False, "error": "Game not found"}, status=404) + +def game_countdown_status(request, game_id): + from django.utils.timezone import now + + game = LittleBacGames.objects.get(id=game_id) + + if game.countdown_started and game.countdown_start_time: + # Temps écoulé en secondes + elapsed_time = (now() - game.countdown_start_time).total_seconds() + remaining_time = max(0, game.countdown_time - int(elapsed_time)) + print(f"Elapsed time: {elapsed_time}, Remaining time: {remaining_time}") # Vérification + else: + print("Ouuups") + remaining_time = game.countdown_time + + return JsonResponse({ + "countdown_started": game.countdown_started, + "countdown_time": remaining_time + }) + +@login_required() +def game_liitle_bac_end_game(request, game_id): + from django.utils.timezone import now + + try: + game = LittleBacGames.objects.get(id=game_id) + + # Mettre à jour l'état du jeu à "finished" + game.status = 'finished' + game.updated = now() + game.save() + + # Optionnel : Mettez à jour tous les joueurs pour les marquer comme ayant terminé + LittleBacPlayers.objects.filter(game=game).update(status='overed') + + return JsonResponse({"success": True, "message": "Game ended successfully."}) + except LittleBacGames.DoesNotExist: + return JsonResponse({"error": "Game not found"}, status=404) \ No newline at end of file diff --git a/guestbook/__init__.py b/guestbook/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/guestbook/admin.py b/guestbook/admin.py new file mode 100755 index 0000000..8c38f3f --- /dev/null +++ b/guestbook/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/guestbook/apps.py b/guestbook/apps.py new file mode 100755 index 0000000..9586043 --- /dev/null +++ b/guestbook/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class GuestbookConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "guestbook" diff --git a/guestbook/forms.py b/guestbook/forms.py new file mode 100755 index 0000000..be1a1fa --- /dev/null +++ b/guestbook/forms.py @@ -0,0 +1,12 @@ +from django import forms + +class CreateGuestbook(forms.Form): + author = forms.CharField( + max_length=150, + label='', + widget=forms.TextInput(attrs={'placeholder': 'Nom'}) + ) + content = forms.CharField( + label='', + widget=forms.Textarea(attrs={'placeholder': 'Message'}) + ) \ No newline at end of file diff --git a/guestbook/middleware.py b/guestbook/middleware.py new file mode 100755 index 0000000..6530d44 --- /dev/null +++ b/guestbook/middleware.py @@ -0,0 +1,14 @@ +from django.utils.deprecation import MiddlewareMixin +from guestbook.models import Guestbook + +class GuestbookMiddleware(MiddlewareMixin): + def process_request(self, request): + # On récupère les messages du livre d'or et les auteurs + guestbook = Guestbook.objects.all().order_by('-created')[:5] + + # On compte le nombre de messages + total_guestbook = Guestbook.objects.count() + + # On ajoute les variables à l'objet request + request.guestbook = guestbook + request.total_guestbook = total_guestbook \ No newline at end of file diff --git a/guestbook/migrations/0001_initial.py b/guestbook/migrations/0001_initial.py new file mode 100755 index 0000000..791bd4f --- /dev/null +++ b/guestbook/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.16 on 2024-10-22 11:02 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Guestbook", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("author", models.CharField(default="Visiteur", max_length=50)), + ("content", models.CharField(max_length=100)), + ("created", models.DateTimeField(auto_now_add=True)), + ("active", models.BooleanField(default=True)), + ], + ), + ] diff --git a/guestbook/migrations/__init__.py b/guestbook/migrations/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/guestbook/models.py b/guestbook/models.py new file mode 100755 index 0000000..24cfed1 --- /dev/null +++ b/guestbook/models.py @@ -0,0 +1,11 @@ +from django.db import models + +class Guestbook(models.Model): + id = models.AutoField(primary_key=True) + author = models.CharField(max_length=50, default='Visiteur') + content = models.CharField(max_length=100) + created = models.DateTimeField(auto_now_add=True) + active = models.BooleanField(default=True) + + def __str__(self): + return f'Guestbook({self.id}, {self.author}, {self.content}, {self.created})' \ No newline at end of file diff --git a/guestbook/tests.py b/guestbook/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/guestbook/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/guestbook/urls.py b/guestbook/urls.py new file mode 100755 index 0000000..fa5469c --- /dev/null +++ b/guestbook/urls.py @@ -0,0 +1,9 @@ +from django.urls import path +from django.conf.urls.static import static + +from passion_retro import settings +from . import views + +urlpatterns = [ + path("", views.guestbook_home, name="guestbook_home"), +] \ No newline at end of file diff --git a/guestbook/views.py b/guestbook/views.py new file mode 100755 index 0000000..05fa9b2 --- /dev/null +++ b/guestbook/views.py @@ -0,0 +1,29 @@ +from django.core.paginator import Paginator +from django.shortcuts import render +from .models import Guestbook +from .forms import CreateGuestbook + +def guestbook_home(request): + # Si un message est envoyé on le traite + if request.method == "POST": + form = CreateGuestbook(request.POST) + if form.is_valid(): + author = form.cleaned_data['author'] + content = form.cleaned_data['content'] + Guestbook.objects.create(author=author, content=content) + + guestbook = Guestbook.objects.all().order_by('-created') + paginator = Paginator(guestbook, 10) + + page_number = request.GET.get('page') + guestbook = paginator.get_page(page_number) + + context = { + 'guestbook': guestbook, + 'is_paginated': guestbook.has_other_pages(), + 'page_obj': guestbook, + 'paginator': paginator, + 'form': CreateGuestbook(), + } + + return render(request, "components/guestbook_home.html", context) \ No newline at end of file diff --git a/home/__init__.py b/home/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/home/admin.py b/home/admin.py new file mode 100755 index 0000000..8c38f3f --- /dev/null +++ b/home/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/home/apps.py b/home/apps.py new file mode 100755 index 0000000..e7d1c7e --- /dev/null +++ b/home/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class HomeConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "home" diff --git a/home/migrations/__init__.py b/home/migrations/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/home/models.py b/home/models.py new file mode 100755 index 0000000..71a8362 --- /dev/null +++ b/home/models.py @@ -0,0 +1,3 @@ +from django.db import models + +# Create your models here. diff --git a/home/tests.py b/home/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/home/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/home/urls.py b/home/urls.py new file mode 100755 index 0000000..807615d --- /dev/null +++ b/home/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from django.conf.urls.static import static + +from passion_retro import settings +from . import views + +urlpatterns = [ + path("", views.home, name="home"), +] + +if settings.DEBUG: + urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) \ No newline at end of file diff --git a/home/views.py b/home/views.py new file mode 100755 index 0000000..2652b08 --- /dev/null +++ b/home/views.py @@ -0,0 +1,16 @@ +from django.shortcuts import render +from posts.models import Post + +def home(request): + edito = Post.objects.filter(type='edito', active=True).first() + news = Post.objects.filter(type='news', active=True).order_by('-created')[:6] + + context = { + 'edito': edito, + 'news': news, + } + + return render(request, "home.html", context) + +def custom_404(request, exception): + return render(request, "errors/404.html", status=404) \ No newline at end of file diff --git a/maintenance/__init__.py b/maintenance/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/maintenance/admin.py b/maintenance/admin.py new file mode 100644 index 0000000..a2cb4db --- /dev/null +++ b/maintenance/admin.py @@ -0,0 +1,4 @@ +from django.contrib import admin +from .models import * + +admin.site.register(Informations) \ No newline at end of file diff --git a/maintenance/apps.py b/maintenance/apps.py new file mode 100644 index 0000000..df4a3eb --- /dev/null +++ b/maintenance/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MaintenanceConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'maintenance' diff --git a/maintenance/middleware.py b/maintenance/middleware.py new file mode 100644 index 0000000..936f247 --- /dev/null +++ b/maintenance/middleware.py @@ -0,0 +1,22 @@ +from django.shortcuts import redirect +from django.urls import reverse +from django.contrib.auth import get_user + +from .models import Informations + +class MaintenanceMiddleware: + def __init__(self, get_response): + self.get_response = get_response + + def __call__(self, request): + if not request.user.is_superuser and not request.path.startswith('/admin'): + try: + maintenance_info = Informations.objects.get(pk=1) + except Informations.DoesNotExist: + maintenance_info = None + + if maintenance_info and maintenance_info.is_active == True and not request.path.startswith(reverse('maintenance:info')): + return redirect(reverse('maintenance:info')) + + response = self.get_response(request) + return response \ No newline at end of file diff --git a/maintenance/migrations/0001_initial.py b/maintenance/migrations/0001_initial.py new file mode 100644 index 0000000..4ce52af --- /dev/null +++ b/maintenance/migrations/0001_initial.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.17 on 2024-12-26 19:59 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Informations', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(default='Maintenance en cours', max_length=255, verbose_name='Titre de la maintenance')), + ('content', models.TextField(verbose_name='Contenu de la maintenance')), + ('is_active', models.BooleanField(default=False)), + ], + ), + ] diff --git a/maintenance/migrations/0002_alter_informations_content_and_more.py b/maintenance/migrations/0002_alter_informations_content_and_more.py new file mode 100644 index 0000000..00116a2 --- /dev/null +++ b/maintenance/migrations/0002_alter_informations_content_and_more.py @@ -0,0 +1,23 @@ +# Generated by Django 4.2.17 on 2025-01-06 17:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('maintenance', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='informations', + name='content', + field=models.TextField(default='Votre site rétro favoris fait un chek-up ;)'), + ), + migrations.AlterField( + model_name='informations', + name='is_active', + field=models.BooleanField(default=True), + ), + ] diff --git a/maintenance/migrations/__init__.py b/maintenance/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/maintenance/models.py b/maintenance/models.py new file mode 100644 index 0000000..9b5f89f --- /dev/null +++ b/maintenance/models.py @@ -0,0 +1,10 @@ +from django.db import models + +class Informations(models.Model): + name = models.CharField("Titre de la maintenance", max_length=255, default="Maintenance en cours") + content = models.TextField(default="Votre site rétro favoris fait un chek-up ;)") + is_active = models.BooleanField(default=True) + + def __str__(self): + return "Contenu de la maintenance" + \ No newline at end of file diff --git a/maintenance/tests.py b/maintenance/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/maintenance/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/maintenance/urls.py b/maintenance/urls.py new file mode 100644 index 0000000..16e2cf7 --- /dev/null +++ b/maintenance/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +app_name = "maintenance" +urlpatterns = [ + path('', views.info, name="info"), +] \ No newline at end of file diff --git a/maintenance/views.py b/maintenance/views.py new file mode 100644 index 0000000..288a20f --- /dev/null +++ b/maintenance/views.py @@ -0,0 +1,6 @@ +from django.shortcuts import render, get_object_or_404 +from .models import Informations + +def info(request): + message = get_object_or_404(Informations, pk=1) + return render(request, 'maintenance/index.html', {'message': message}) \ No newline at end of file diff --git a/manage.py b/manage.py new file mode 100755 index 0000000..488a84a --- /dev/null +++ b/manage.py @@ -0,0 +1,22 @@ +#!/usr/bin/env python +"""Django's command-line utility for administrative tasks.""" +import os +import sys + + +def main(): + """Run administrative tasks.""" + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "passion_retro.settings") + try: + from django.core.management import execute_from_command_line + except ImportError as exc: + raise ImportError( + "Couldn't import Django. Are you sure it's installed and " + "available on your PYTHONPATH environment variable? Did you " + "forget to activate a virtual environment?" + ) from exc + execute_from_command_line(sys.argv) + + +if __name__ == "__main__": + main() diff --git a/messagerie/__init__.py b/messagerie/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messagerie/admin.py b/messagerie/admin.py new file mode 100644 index 0000000..8c38f3f --- /dev/null +++ b/messagerie/admin.py @@ -0,0 +1,3 @@ +from django.contrib import admin + +# Register your models here. diff --git a/messagerie/apps.py b/messagerie/apps.py new file mode 100644 index 0000000..bde95f3 --- /dev/null +++ b/messagerie/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class MessagerieConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'messagerie' diff --git a/messagerie/context_processors.py b/messagerie/context_processors.py new file mode 100644 index 0000000..cef269a --- /dev/null +++ b/messagerie/context_processors.py @@ -0,0 +1,24 @@ +from .models import PrivateMessageSubject, PrivateMessage +from django.db.models import Q + +def pending_pm_count(request): + if request.user.is_authenticated: + # Filtrer les sujets de messages où l'utilisateur est soit le receiver soit le sender + pm_subjects = PrivateMessageSubject.objects.filter( + Q(receiver=request.user) | Q(sender=request.user) + ) + + # Initialiser le compteur de messages non lus + count = 0 + + # Parcourir chaque sujet de message + for subject in pm_subjects: + # Récupérer le dernier message du sujet + last_message = subject.messages.order_by('-date_sent').first() + + # Vérifier si le dernier message n'est pas de l'utilisateur actuel et si le sujet n'est pas lu + if last_message and last_message.author != request.user and not subject.is_read: + count += 1 + + return {'pending_pm_count': count} + return {'pending_pm_count': 0} \ No newline at end of file diff --git a/messagerie/forms.py b/messagerie/forms.py new file mode 100644 index 0000000..ddaa4bc --- /dev/null +++ b/messagerie/forms.py @@ -0,0 +1,23 @@ +# Forms pour la messagerie +from django import forms +from .models import PrivateMessageSubject, PrivateMessage + +class PrivateMessageSubjectForm(forms.ModelForm): + class Meta: + model = PrivateMessageSubject + fields = ['receiver', 'subject'] + labels = { + 'receiver': 'Destinataire', + 'subject': 'Sujet' + } + +class PrivateMessageForm(forms.ModelForm): + class Meta: + model = PrivateMessage + fields = ['message'] + labels = { + 'message': '' + } + widgets = { + 'message': forms.Textarea(attrs={'placeholder': 'Votre message'}) + } \ No newline at end of file diff --git a/messagerie/migrations/0001_initial.py b/messagerie/migrations/0001_initial.py new file mode 100644 index 0000000..1cc63ab --- /dev/null +++ b/messagerie/migrations/0001_initial.py @@ -0,0 +1,34 @@ +# Generated by Django 4.2.17 on 2025-01-06 10:49 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='PrivateMessage', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('subject', models.CharField(max_length=100)), + ('message', models.TextField()), + ('date_sent', models.DateTimeField(auto_now_add=True)), + ('is_read', models.BooleanField(default=False)), + ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_messages', to=settings.AUTH_USER_MODEL)), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_messages', to=settings.AUTH_USER_MODEL)), + ], + options={ + 'verbose_name': 'Message privé', + 'verbose_name_plural': 'Messages privés', + 'ordering': ['-date_sent'], + }, + ), + ] diff --git a/messagerie/migrations/0002_remove_privatemessage_is_read_and_more.py b/messagerie/migrations/0002_remove_privatemessage_is_read_and_more.py new file mode 100644 index 0000000..02d0bf2 --- /dev/null +++ b/messagerie/migrations/0002_remove_privatemessage_is_read_and_more.py @@ -0,0 +1,53 @@ +# Generated by Django 4.2.17 on 2025-01-06 11:33 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ('messagerie', '0001_initial'), + ] + + operations = [ + migrations.RemoveField( + model_name='privatemessage', + name='is_read', + ), + migrations.RemoveField( + model_name='privatemessage', + name='receiver', + ), + migrations.RemoveField( + model_name='privatemessage', + name='sender', + ), + migrations.AddField( + model_name='privatemessage', + name='author', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='author_messages', to=settings.AUTH_USER_MODEL), + ), + migrations.AlterField( + model_name='privatemessage', + name='id', + field=models.AutoField(primary_key=True, serialize=False), + ), + migrations.CreateModel( + name='PrivateMessageSubject', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('subject', models.CharField(max_length=100)), + ('is_read', models.BooleanField(default=False)), + ('receiver', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='received_messages', to=settings.AUTH_USER_MODEL)), + ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_messages', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.AlterField( + model_name='privatemessage', + name='subject', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='messages', to='messagerie.privatemessagesubject'), + ), + ] diff --git a/messagerie/migrations/0003_privatemessagesubject_is_active.py b/messagerie/migrations/0003_privatemessagesubject_is_active.py new file mode 100644 index 0000000..23fed35 --- /dev/null +++ b/messagerie/migrations/0003_privatemessagesubject_is_active.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2025-01-06 13:29 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('messagerie', '0002_remove_privatemessage_is_read_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='privatemessagesubject', + name='is_active', + field=models.BooleanField(default=True), + ), + ] diff --git a/messagerie/migrations/__init__.py b/messagerie/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/messagerie/models.py b/messagerie/models.py new file mode 100644 index 0000000..ff309e8 --- /dev/null +++ b/messagerie/models.py @@ -0,0 +1,28 @@ +from django.db import models +from users.models import User + +# Création d'une messagerie privée pour les membres +class PrivateMessageSubject(models.Model): + receiver = models.ForeignKey(User, on_delete=models.CASCADE, related_name='received_messages') + sender = models.ForeignKey(User, on_delete=models.CASCADE, related_name='sent_messages') + subject = models.CharField(max_length=100) + is_read = models.BooleanField(default=False) + is_active = models.BooleanField(default=True) + + def __str__(self): + return f'Sujet: {self.subject} (De: {self.sender.username} À: {self.receiver.username})' + +class PrivateMessage(models.Model): + id = models.AutoField(primary_key=True) + subject = models.ForeignKey(PrivateMessageSubject, on_delete=models.CASCADE, related_name='messages') + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='author_messages', default=1) + message = models.TextField() + date_sent = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return f'{self.author.username} ({self.date_sent})' + + class Meta: + verbose_name = 'Message privé' + verbose_name_plural = 'Messages privés' + ordering = ['-date_sent'] \ No newline at end of file diff --git a/messagerie/tests.py b/messagerie/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/messagerie/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/messagerie/urls.py b/messagerie/urls.py new file mode 100644 index 0000000..d81296b --- /dev/null +++ b/messagerie/urls.py @@ -0,0 +1,13 @@ +# urls messagerie + +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.home, name='pm_home'), + path('view//', views.view_message, name='pm_view'), + path('new/', views.new_message, name='pm_new'), + path('delete//', views.delete_subject, name='pm_delete'), + + path('send_all_users/', views.send_all_users, name='pm_send_all_users'), +] diff --git a/messagerie/views.py b/messagerie/views.py new file mode 100644 index 0000000..37b54da --- /dev/null +++ b/messagerie/views.py @@ -0,0 +1,122 @@ +from django.shortcuts import render, redirect +from django.contrib.auth.decorators import login_required +from .models import PrivateMessage, PrivateMessageSubject +from django.db import models +from django.db.models import Max +from .forms import PrivateMessageForm, PrivateMessageSubjectForm +from django.contrib import messages + +@login_required +def home(request): + private_messages = PrivateMessageSubject.objects.filter( + (models.Q(receiver=request.user) | models.Q(sender=request.user)) & models.Q(is_active=True) + ).annotate(last_message_date=Max('messages__date_sent')).order_by('-last_message_date') + + return render(request, 'messagerie/home.html', {'private_messages': private_messages}) + +@login_required +def view_message(request, message_id): + pm_message = PrivateMessageSubject.objects.get(pk=message_id) + if (pm_message.receiver != request.user and pm_message.sender != request.user) or not pm_message.is_active: + return redirect('pm_home') + + private_messages = PrivateMessage.objects.filter(subject=pm_message).order_by('date_sent') + + form = PrivateMessageForm(request.POST or None) + + if not pm_message.is_read and pm_message.messages.first().author != request.user: + pm_message.is_read = True + pm_message.save() + + if form.is_valid(): + message = form.save(commit=False) + message.author = request.user + message.subject = pm_message + message.save() + + pm_message.is_read = False + pm_message.save() + + form = PrivateMessageForm() + + return render(request, 'messagerie/view_message.html', {'pm_message': pm_message, 'private_messages': private_messages, 'form': form}) + + return render(request, 'messagerie/view_message.html', {'pm_message': pm_message, 'private_messages': private_messages, 'form': form}) + +@login_required +def new_message(request): + form_subject = PrivateMessageSubjectForm(request.POST or None) + form_message = PrivateMessageForm(request.POST or None) + + if form_subject.is_valid() and form_message.is_valid(): + if form_subject.cleaned_data['receiver'] == request.user: + messages.error(request, 'Vous ne pouvez pas vous envoyer un message à vous-même') + return redirect('pm_home') + subject = form_subject.save(commit=False) + subject.sender = request.user + subject.is_read = False + subject.save() + + message = form_message.save(commit=False) + message.author = request.user + message.subject = subject + message.save() + + return redirect('pm_view', message_id=message.id) + + return render(request, 'messagerie/new_message.html', {'form_subject': form_subject, 'form_message': form_message}) + +def delete_subject(request, message_id): + pm_message = PrivateMessageSubject.objects.get(pk=message_id) + if pm_message.receiver != request.user and pm_message.sender != request.user: + return redirect('pm_home') + + pm_message.is_active = False + pm_message.is_read = True + pm_message.save() + + messages.success(request, 'Le sujet a bien été supprimé') + + return redirect('pm_home') + +@login_required +def send_all_users(request): + from users.models import User + all_users = User.objects.all() + sender = User.objects.get(username='RetroBot') + for user in all_users: + subject = PrivateMessageSubject.objects.create( + receiver=user, + sender=User.objects.get(username='RetroBot'), + subject="Bienvenue sur PassionRetro !" + ) + + PrivateMessage.objects.create( + subject=subject, + author=User.objects.get(username='RetroBot'), + message=f"""[b]Bienvenue sur Passion Retro ![/b] + +Salut [b]{user.username}[/b] !, + +Merci de nous avoir rejoints dans cette aventure dédiée aux passionnés de rétro ! Que tu sois fan de consoles vintage, collectionneur d'objets d'époque ou simple curieux, tu es ici chez toi. + +✨ [b]Découvre tout ce que Passion Retro a à offrir :[/b] +Plonge dans nos articles pour en apprendre plus sur les trésors du passé, participe aux discussions sur le forum et teste tes connaissances avec nos jeux rétro. Chaque section est là pour te permettre de partager ta passion et d'en apprendre davantage. + +🚀 [b]Rejoins la communauté :[/b] +Ton avis et tes contributions sont précieux ! N’hésite pas à lancer une discussion sur le forum, à réagir aux articles ou à défier les autres membres sur nos jeux. Plus nous sommes actifs, plus l’expérience sera enrichissante pour tous. + +Si tu as des questions ou des suggestions pour améliorer le site, contacte-nous. Nous sommes là pour t'accompagner ! + +Encore une fois, bienvenue parmi nous et prépare-toi à replonger dans l’univers du rétro ! + +À bientôt, +[b]L'équipe Passion Retro[/b]""") + + subject = PrivateMessageSubject.objects.create(receiver=user, sender=sender, subject='Bienvenue sur la messagerie privée') + PrivateMessage.objects.create( + subject=subject, + author=sender, + message=f"Cher [b]{user.username}[/b],\n\nBienvenue sur la messagerie privée de passion-retro. Tu peux désormais échanger des messages privés avec les autres membres du site.\n\nQuant a moi, je suis un nouvel utilisateur du site venu de la planète [b]Retronia[/b] ! J'ai été investis de la mission la plus importante de ma longue vie : [u]être le meilleur assistant de passion-retro[/u] ! J'espère sincèrement y parvenir !\n\nJe suis encore en orbite actuellement, mais guette les infos car je serait bientôt présent !\n\nCordialement,\n{sender.username}" + ) + return redirect('pm_home') \ No newline at end of file diff --git a/passion_retro/__init__.py b/passion_retro/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/passion_retro/asgi.py b/passion_retro/asgi.py new file mode 100755 index 0000000..94f1341 --- /dev/null +++ b/passion_retro/asgi.py @@ -0,0 +1,16 @@ +""" +ASGI config for passion_retro project. + +It exposes the ASGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ +""" + +import os + +from django.core.asgi import get_asgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "passion_retro.settings") + +application = get_asgi_application() diff --git a/passion_retro/settings.py b/passion_retro/settings.py new file mode 100755 index 0000000..b37dc0b --- /dev/null +++ b/passion_retro/settings.py @@ -0,0 +1,199 @@ +""" +Django settings for passion_retro project. + +Generated by 'django-admin startproject' using Django 4.2.16. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/topics/settings/ + +For the full list of settings and their values, see +https://docs.djangoproject.com/en/4.2/ref/settings/ +""" + +from pathlib import Path +import os +from dotenv import load_dotenv +import json + +load_dotenv() + +if os.getenv('DATABASE_ENGINE') == "django.db.backends.mysql": + print("c'est mariaDB") + import pymysql + pymysql.install_as_MySQLdb() + + +# Build paths inside the project like this: BASE_DIR / 'subdir'. +BASE_DIR = Path(__file__).resolve().parent.parent + + +# Quick-start development settings - unsuitable for production +# See https://docs.djangoproject.com/en/4.2/howto/deployment/checklist/ + +# SECURITY WARNING: keep the secret key used in production secret! +SECRET_KEY = os.getenv('SECRET_KEY') +GOOGLE_PUBLIC_KEY = os.getenv('GOOGLE_PUBLIC_KEY') +GOOGLE_PRIVATE_KEY = os.getenv('GOOGLE_PRIVATE_KEY') + +# SECURITY WARNING: don't run with debug turned on in production! +DEBUG = os.getenv('DEBUG') == 'True' + +ALLOWED_HOSTS = os.getenv('ALLOWED_HOSTS').split(',') +CSRF_TRUSTED_ORIGINS = os.getenv('CSRF_TRUSTED_ORIGINS').split(',') +USE_X_FORWARDED_HOST = os.getenv('USE_X_FORWARDED_HOST') == 'True' +SECURE_PROXY_SSL_HEADER = tuple(os.getenv('SECURE_PROXY_SSL_HEADER').split(',')) + + +# Application definition + +INSTALLED_APPS = [ + "django.contrib.admin", + "django.contrib.auth", + "django.contrib.contenttypes", + "django.contrib.sessions", + "django.contrib.messages", + "django.contrib.staticfiles", + # "django.contrib.sites", + + "maintenance", + "home", + "posts", + "users", + "gallery", + "forum", + "tchat", + "guestbook", + "games", + "quiz", + "messagerie", + "shop", +] + +SITE_ID = 1 + +MIDDLEWARE = [ + "django.middleware.security.SecurityMiddleware", + "django.contrib.sessions.middleware.SessionMiddleware", + "django.middleware.common.CommonMiddleware", + "django.middleware.csrf.CsrfViewMiddleware", + "django.contrib.auth.middleware.AuthenticationMiddleware", + "django.contrib.messages.middleware.MessageMiddleware", + "django.middleware.clickjacking.XFrameOptionsMiddleware", + "users.middleware.UserStatsMiddleware", + "forum.middleware.ForumStatsMiddleware", + "guestbook.middleware.GuestbookMiddleware", + "posts.middleware.PostsMiddleware", + 'maintenance.middleware.MaintenanceMiddleware', + "users.middleware.UserLevelMiddleware", + "users.middleware.UserLevelUpMiddleware", +] + +ROOT_URLCONF = "passion_retro.urls" + +TEMPLATES = [ + { + "BACKEND": "django.template.backends.django.DjangoTemplates", + "DIRS": (BASE_DIR, 'templates'), + "APP_DIRS": True, + "OPTIONS": { + "context_processors": [ + "django.template.context_processors.debug", + "django.template.context_processors.request", + "django.contrib.auth.context_processors.auth", + "django.contrib.messages.context_processors.messages", + "posts.context_processors.pending_posts_count", + "quiz.context_processors.pending_quizes_count", + "messagerie.context_processors.pending_pm_count", + ], + }, + }, +] + +WSGI_APPLICATION = "passion_retro.wsgi.application" + + +# Database +# https://docs.djangoproject.com/en/4.2/ref/settings/#databases + +DATABASES = { + 'default': { + 'ENGINE': os.getenv('DATABASE_ENGINE'), # Utilise MySQL/MariaDB + 'NAME': os.getenv('DATABASE_NAME') if os.getenv('DATABASE_ENGINE') == "django.db.backends.mysql" else BASE_DIR / os.getenv('DATABASE_NAME'), + 'USER': os.getenv('DATABASE_USER'), + 'PASSWORD': os.getenv('DATABASE_PASSWORD'), + 'HOST': os.getenv('DATABASE_HOST'), + 'PORT': os.getenv('DATABASE_PORT', '3306'), # Port par défaut de MySQL/MariaDB + 'OPTIONS': { + 'init_command': "SET sql_mode='STRICT_TRANS_TABLES'", + 'charset': 'utf8mb4', + } + } +} + + +# Password validation +# https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators + +AUTH_PASSWORD_VALIDATORS = [ + { + "NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.MinimumLengthValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.CommonPasswordValidator", + }, + { + "NAME": "django.contrib.auth.password_validation.NumericPasswordValidator", + }, +] + + +# Internationalization +# https://docs.djangoproject.com/en/4.2/topics/i18n/ + +LANGUAGE_CODE = "fr-FR" + +TIME_ZONE = "Europe/Paris" + +USE_I18N = True + +USE_TZ = True + + +# Static files (CSS, JavaScript, Images) +# https://docs.djangoproject.com/en/4.2/howto/static-files/ + +# URL pour accéder aux fichiers statiques +STATIC_URL = '/static/' + +# Chemin absolu vers le répertoire où collecter les fichiers statiques +STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') + +# Répertoires supplémentaires pour rechercher les fichiers statiques +STATICFILES_DIRS = [ + os.path.join(BASE_DIR, 'static'), +] + +MEDIA_ROOT = os.path.join(BASE_DIR, 'media') +MEDIA_URL = '/media/' + +# Default primary key field type +# https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field + +DEFAULT_AUTO_FIELD = "django.db.models.BigAutoField" + +LOGOUT_REDIRECT_URL = os.getenv('LOGOUT_REDIRECT_URL', default='/') +LOGIN_URL = os.getenv('LOGIN_URL', default='/login/') + +AUTH_USER_MODEL = os.getenv('AUTH_USER_MODEL', default='users.User') + +EMAIL_BACKEND = os.getenv('EMAIL_BACKEND', default='django.core.mail.backends.smtp.EmailBackend') +EMAIL_HOST = os.getenv('EMAIL_HOST', default='smtp.gmail.com') +EMAIL_PORT = os.getenv('EMAIL_PORT', default=587) +EMAIL_USE_TLS = os.getenv('EMAIL_USE_TLS', default=True) +EMAIL_USE_SSL = os.getenv('EMAIL_USE_TLS', default=False) +EMAIL_HOST_USER = os.getenv('EMAIL_HOST_USER', default='webmaster@localhost') +EMAIL_HOST_PASSWORD = os.getenv('EMAIL_HOST_PASSWORD', default='password') +DEFAULT_FROM_EMAIL = os.getenv('DEFAULT_FROM_EMAIL', default='webmaster@localhost') \ No newline at end of file diff --git a/passion_retro/urls.py b/passion_retro/urls.py new file mode 100755 index 0000000..d14f136 --- /dev/null +++ b/passion_retro/urls.py @@ -0,0 +1,40 @@ +""" +URL configuration for passion_retro project. + +The `urlpatterns` list routes URLs to views. For more information please see: + https://docs.djangoproject.com/en/4.2/topics/http/urls/ +Examples: +Function views + 1. Add an import: from my_app import views + 2. Add a URL to urlpatterns: path('', views.home, name='home') +Class-based views + 1. Add an import: from other_app.views import Home + 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') +Including another URLconf + 1. Import the include() function: from django.urls import include, path + 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) +""" + +from django.contrib import admin +from django.contrib.auth import views as auth_views +from django.urls import include, path +from . import views + +urlpatterns = [ + path("admin/", admin.site.urls), + path("maintenance/", include("maintenance.urls")), + path("", include("home.urls")), + path("posts/", include("posts.urls")), + path("forum/", include("forum.urls")), + path("users/", include("users.urls")), + path("guestbook/", include("guestbook.urls")), + path("gallery/", include("gallery.urls")), + path("games/", include("games.urls")), + path("quiz/", include("quiz.urls")), + path("pm/", include("messagerie.urls")), + path("shop/", include("shop.urls")), + + path('logout/', auth_views.LogoutView.as_view(), name='logout'), +] + +handler404 = 'home.views.custom_404' \ No newline at end of file diff --git a/passion_retro/views.py b/passion_retro/views.py new file mode 100644 index 0000000..00326b4 --- /dev/null +++ b/passion_retro/views.py @@ -0,0 +1,4 @@ +from django.shortcuts import render + +def custom_404(request, exception): + return render(request, "errors/404.html", status=404) \ No newline at end of file diff --git a/passion_retro/wsgi.py b/passion_retro/wsgi.py new file mode 100755 index 0000000..cde1897 --- /dev/null +++ b/passion_retro/wsgi.py @@ -0,0 +1,16 @@ +""" +WSGI config for passion_retro project. + +It exposes the WSGI callable as a module-level variable named ``application``. + +For more information on this file, see +https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ +""" + +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "passion_retro.settings") + +application = get_wsgi_application() diff --git a/posts/__init__.py b/posts/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/posts/admin.py b/posts/admin.py new file mode 100755 index 0000000..ce1fb64 --- /dev/null +++ b/posts/admin.py @@ -0,0 +1,25 @@ +from django.contrib import admin +from django.db.models import QuerySet +from .models import Post, Category + +@admin.action(description="Activer les posts séléctionnés") +def activate_posts(modelAdmin, request, querySet: QuerySet): + updated = querySet.update(active=True) + modelAdmin.message_user(request, f"{updated} post(s) ont été activé(s).") + +@admin.action(description="Désactiver les posts séléctionnés") +def deactivate_posts(modelAdmin, request, querySet: QuerySet): + updated = querySet.update(active=False) + modelAdmin.message_user(request, f"{updated} post(s) ont été désactivé(s).") + +class PostAdmin(admin.ModelAdmin): + list_display = ('title', 'category', 'author', 'type', 'active', 'created', 'updated') + list_filter = ('category', 'type', 'active', 'created', 'updated') + search_fields = ('title', 'content', 'author__username') + ordering = ('-created',) + fields = ('parent', 'post_parent', 'title', 'slug', 'category', 'content', 'type', 'image', 'author', 'active') + prepopulated_fields = {'slug': ('title',)} + actions = [activate_posts, deactivate_posts] + +admin.site.register(Post, PostAdmin) +admin.site.register(Category) \ No newline at end of file diff --git a/posts/apps.py b/posts/apps.py new file mode 100755 index 0000000..81782a2 --- /dev/null +++ b/posts/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class PostsConfig(AppConfig): + default_auto_field = "django.db.models.BigAutoField" + name = "posts" diff --git a/posts/context_processors.py b/posts/context_processors.py new file mode 100644 index 0000000..12a65cc --- /dev/null +++ b/posts/context_processors.py @@ -0,0 +1,7 @@ +from .models import Post +from users.decorators import groups_required + +groups_required('Administrateur', 'SuperAdmin') +def pending_posts_count(request): + count = Post.objects.filter(active=False).count() + return {'pending_posts_count': count} \ No newline at end of file diff --git a/posts/forms.py b/posts/forms.py new file mode 100755 index 0000000..43213ea --- /dev/null +++ b/posts/forms.py @@ -0,0 +1,31 @@ +from django import forms +from .models import Post + +class CreatePost(forms.Form): + title = forms.CharField( + max_length=150, + label='', + required=True, + widget=forms.TextInput(attrs={'placeholder': 'Titre du post'}) + ) + + content = forms.CharField( + label='', + required=True, + widget=forms.Textarea(attrs={'placeholder': 'Contenu du post'}) + ) + + active = forms.BooleanField( + required=True, + label='Actif', + initial=True + ) + +class EditPost(forms.ModelForm): + class Meta: + model = Post + fields = ['title', 'content'] + widgets = { + 'title': forms.TextInput(attrs={'placeholder': 'Titre du post'}), + 'content': forms.Textarea(attrs={'placeholder': 'Contenu du post'}), + } \ No newline at end of file diff --git a/posts/middleware.py b/posts/middleware.py new file mode 100755 index 0000000..ad56813 --- /dev/null +++ b/posts/middleware.py @@ -0,0 +1,23 @@ +from django.utils.deprecation import MiddlewareMixin +from .models import Post + +class PostsMiddleware(MiddlewareMixin): + def process_request(self, request): + + # On récupère tous les posts de type 'games' + posts_games = Post.objects.filter(type='games', active=True, parent=True) + + # On récupère tous les posts de type 'movies' + posts_movies = Post.objects.filter(type='movies', active=True, parent=True) + + # On récupère tous les posts de type 'music' + posts_music = Post.objects.filter(type='music', active=True, parent=True) + + # On récupère tous les posts de type 'tech' + posts_tech = Post.objects.filter(type='tech', active=True, parent=True) + + # on met tout ça dans l'objet request + request.posts_games = posts_games + request.posts_movies = posts_movies + request.posts_music = posts_music + request.posts_tech = posts_tech \ No newline at end of file diff --git a/posts/migrations/0001_initial.py b/posts/migrations/0001_initial.py new file mode 100755 index 0000000..f7d20d9 --- /dev/null +++ b/posts/migrations/0001_initial.py @@ -0,0 +1,38 @@ +# Generated by Django 4.2.16 on 2024-10-21 18:39 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [] + + operations = [ + migrations.CreateModel( + name="Category", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("name", models.CharField(max_length=200)), + ("created", models.DateTimeField(auto_now_add=True)), + ], + ), + migrations.CreateModel( + name="Post", + fields=[ + ("id", models.AutoField(primary_key=True, serialize=False)), + ("title", models.CharField(max_length=200)), + ("content", models.TextField()), + ("date", models.DateTimeField(auto_now_add=True)), + ("type", models.CharField(default="news", max_length=200)), + ( + "image", + models.ImageField(blank=True, null=True, upload_to="images/"), + ), + ("active", models.BooleanField(default=False)), + ("created", models.DateTimeField(auto_now_add=True)), + ("updated", models.DateTimeField(auto_now=True)), + ], + ), + ] diff --git a/posts/migrations/0002_initial.py b/posts/migrations/0002_initial.py new file mode 100755 index 0000000..aca4274 --- /dev/null +++ b/posts/migrations/0002_initial.py @@ -0,0 +1,33 @@ +# Generated by Django 4.2.16 on 2024-10-21 18:39 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ("users", "0001_initial"), + ("posts", "0001_initial"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="author", + field=models.ForeignKey( + on_delete=django.db.models.deletion.CASCADE, to="users.user" + ), + ), + migrations.AddField( + model_name="post", + name="category", + field=models.ForeignKey( + default=1, + on_delete=django.db.models.deletion.CASCADE, + to="posts.category", + ), + ), + ] diff --git a/posts/migrations/0003_alter_category_options_alter_post_options_post_slug.py b/posts/migrations/0003_alter_category_options_alter_post_options_post_slug.py new file mode 100755 index 0000000..aa78384 --- /dev/null +++ b/posts/migrations/0003_alter_category_options_alter_post_options_post_slug.py @@ -0,0 +1,26 @@ +# Generated by Django 4.2.16 on 2024-10-21 21:37 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("posts", "0002_initial"), + ] + + operations = [ + migrations.AlterModelOptions( + name="category", + options={"verbose_name": "Categorie", "verbose_name_plural": "Categories"}, + ), + migrations.AlterModelOptions( + name="post", + options={"verbose_name": "Post", "verbose_name_plural": "Posts"}, + ), + migrations.AddField( + model_name="post", + name="slug", + field=models.SlugField(default="default-slug", max_length=200, unique=True), + ), + ] diff --git a/posts/migrations/0004_post_forum_link.py b/posts/migrations/0004_post_forum_link.py new file mode 100755 index 0000000..bb267f1 --- /dev/null +++ b/posts/migrations/0004_post_forum_link.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.16 on 2024-10-23 11:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ("posts", "0003_alter_category_options_alter_post_options_post_slug"), + ] + + operations = [ + migrations.AddField( + model_name="post", + name="forum_link", + field=models.CharField(blank=True, max_length=200, null=True), + ), + ] diff --git a/posts/migrations/0005_remove_post_date.py b/posts/migrations/0005_remove_post_date.py new file mode 100755 index 0000000..43e1939 --- /dev/null +++ b/posts/migrations/0005_remove_post_date.py @@ -0,0 +1,17 @@ +# Generated by Django 4.2.16 on 2024-10-24 21:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ("posts", "0004_post_forum_link"), + ] + + operations = [ + migrations.RemoveField( + model_name="post", + name="date", + ), + ] diff --git a/posts/migrations/0006_post_contribution.py b/posts/migrations/0006_post_contribution.py new file mode 100644 index 0000000..48b8b1c --- /dev/null +++ b/posts/migrations/0006_post_contribution.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-16 11:44 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0005_remove_post_date'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='contribution', + field=models.BooleanField(default=False), + ), + ] diff --git a/posts/migrations/0007_post_post_parent.py b/posts/migrations/0007_post_post_parent.py new file mode 100644 index 0000000..78f1ed9 --- /dev/null +++ b/posts/migrations/0007_post_post_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.17 on 2024-12-23 16:48 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0006_post_contribution'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='post_parent', + field=models.IntegerField(default=0), + preserve_default=False, + ), + ] diff --git a/posts/migrations/0008_alter_post_post_parent.py b/posts/migrations/0008_alter_post_post_parent.py new file mode 100644 index 0000000..65cf5c4 --- /dev/null +++ b/posts/migrations/0008_alter_post_post_parent.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-23 16:50 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0007_post_post_parent'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='post_parent', + field=models.IntegerField(default=0), + ), + ] diff --git a/posts/migrations/0009_alter_post_post_parent.py b/posts/migrations/0009_alter_post_post_parent.py new file mode 100644 index 0000000..ac9554e --- /dev/null +++ b/posts/migrations/0009_alter_post_post_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.17 on 2024-12-23 16:54 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0008_alter_post_post_parent'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='post_parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='posts.post'), + ), + ] diff --git a/posts/migrations/0010_post_parent.py b/posts/migrations/0010_post_parent.py new file mode 100644 index 0000000..ab1e67a --- /dev/null +++ b/posts/migrations/0010_post_parent.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2024-12-23 17:03 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0009_alter_post_post_parent'), + ] + + operations = [ + migrations.AddField( + model_name='post', + name='parent', + field=models.BooleanField(default=True), + ), + ] diff --git a/posts/migrations/0011_alter_post_post_parent.py b/posts/migrations/0011_alter_post_post_parent.py new file mode 100644 index 0000000..ddd5bae --- /dev/null +++ b/posts/migrations/0011_alter_post_post_parent.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.17 on 2024-12-26 19:57 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('posts', '0010_post_parent'), + ] + + operations = [ + migrations.AlterField( + model_name='post', + name='post_parent', + field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='child_posts', to='posts.post'), + ), + ] diff --git a/posts/migrations/__init__.py b/posts/migrations/__init__.py new file mode 100755 index 0000000..e69de29 diff --git a/posts/models.py b/posts/models.py new file mode 100755 index 0000000..c624f83 --- /dev/null +++ b/posts/models.py @@ -0,0 +1,59 @@ +from django.db import models +from users.models import User +from commons.bbcode_parser import BBCodeParser +from django.db.models.signals import pre_delete +from django.dispatch import receiver + +class Category(models.Model): + id = models.AutoField(primary_key=True) + name = models.CharField(max_length=200) + created = models.DateTimeField(auto_now_add=True) + + def __str__(self): + return self.name + + class Meta: + verbose_name = 'Categorie' + verbose_name_plural = 'Categories' + +class Post(models.Model): + id = models.AutoField(primary_key=True) + slug = models.SlugField(max_length=200, unique=True, default='default-slug') + category = models.ForeignKey(Category, on_delete=models.CASCADE, default=1) + title = models.CharField(max_length=200) + content = models.TextField() + type = models.CharField(max_length=200, default='news') + image = models.ImageField(upload_to='images/', null=True, blank=True) + author = models.ForeignKey(User, on_delete=models.CASCADE) + active = models.BooleanField(default=False) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + contribution = models.BooleanField(default=False) + forum_link = models.CharField(max_length=200, null=True, blank=True) + post_parent = models.ForeignKey('self', on_delete=models.SET_NULL, null=True, blank=True, related_name='child_posts') + parent = models.BooleanField(default=True) + + def __str__(self): + return self.title + + def save(self, *args, **kwargs): + # Si le post a un parent, il ne doit pas être considéré comme parent + if self.post_parent: + self.parent = False + else: + self.parent = True + super().save(*args, **kwargs) + + + class Meta: + verbose_name = 'Post' + verbose_name_plural = 'Posts' + +@receiver(pre_delete, sender=Post) +def handle_parent_deletion(sender, instance, **kwargs): + # Si le post supprimé a des enfants + for child in instance.child_posts.all(): + # Rendre l'enfant un parent + child.post_parent = None + child.parent = True + child.save() \ No newline at end of file diff --git a/posts/templatetags/__init__.py b/posts/templatetags/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/posts/templatetags/bbcode_tags.py b/posts/templatetags/bbcode_tags.py new file mode 100644 index 0000000..e68e84d --- /dev/null +++ b/posts/templatetags/bbcode_tags.py @@ -0,0 +1,9 @@ +from django import template +from commons.bbcode_parser import BBCodeParser + +register = template.Library() + +@register.filter(name='bbcode') +def bbcode(value): + parser = BBCodeParser() + return parser.parse(value) \ No newline at end of file diff --git a/posts/tests.py b/posts/tests.py new file mode 100755 index 0000000..7ce503c --- /dev/null +++ b/posts/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/posts/urls.py b/posts/urls.py new file mode 100755 index 0000000..e9e506a --- /dev/null +++ b/posts/urls.py @@ -0,0 +1,12 @@ +from django.urls import path +from django.conf.urls.static import static + +from passion_retro import settings +from . import views + +urlpatterns = [ + path("/", views.view_post, name="view_post"), + + path("create//", views.create_post, name="create_news"), + path("/edit", views.edit_post, name="edit_post"), +] \ No newline at end of file diff --git a/posts/views.py b/posts/views.py new file mode 100755 index 0000000..085d2dc --- /dev/null +++ b/posts/views.py @@ -0,0 +1,108 @@ +from django.shortcuts import render, get_object_or_404, redirect +from posts.models import Post +from forum.models import Topic, Forum, Post as ForumPost +from users.models import UserLevel +from django.contrib import messages +from users.decorators import groups_required +from posts.forms import CreatePost, EditPost +from django.utils.text import slugify +from django.contrib.auth.decorators import login_required +from django.db.models import F + +def view_post(request, slug): + post = Post.objects.filter(slug=slug, active=True).first() + subposts = None + + if post.parent: + subposts = Post.objects.filter(post_parent=post.id) + + context = { + 'post': post, + 'subposts': subposts + } + + return render(request, "posts/post.html", context) + +@groups_required('Rédacteur', 'Admininistrateur', 'Super Admin') +def create_post(request, type): + # Create a new post + if request.method == 'POST': + title = request.POST.get('title') + content = request.POST.get('content') + active = request.POST.get('active') == 'on' + image=request.FILES.get('image') if type == 'news' else None + + # Si c'est une news, on créer aussi un topic sur le forum news + if type == 'news': + topic = Topic.objects.create( + title=title, + forum=Forum.objects.get(name='Actus du site'), + author=request.user + ) + + content_forum = f'

    {content}

    ' + + forum_post = ForumPost.objects.create( + topic=topic, + content=content_forum, + author=request.user + ) + + UserLevel.objects.update(user=request.user, experience=F('experience') + 20) + + topic.save() + forum_post.save() + + forum_link = f'forum/{topic.forum.id}/{topic.id}/' + + post = Post.objects.create( + slug=slugify(title), + title=title, + content=content, + type=type, + image=image, + author=request.user, + active=active, + forum_link=forum_link + ) + + post.save() + + + + messages.success(request, 'Post créer avec succès !') + + return redirect('home') + + context = { + 'type': type, + 'post_form': CreatePost(), + } + + return render(request, "posts/create_post.html", context) + +@login_required() +def edit_post(request, post_id): + post = get_object_or_404(Post, id=post_id, author=request.user) + + if request.method == 'POST': + form = EditPost(request.POST, instance=post) + if form.is_valid(): + post.title = form.cleaned_data['title'] + post.content = form.cleaned_data['content'] + post.active = False + post.save() + return redirect('contributions') + else: + form = CreatePost(initial={ + 'title': post.title, + 'content': post.content, + }) + + return render(request, 'posts/edit_post.html', {'form': form, 'post': post}) + +@groups_required('Administrateur', 'Super Admin') +def prending_posts(request): + posts = Post.objects.filter(active=False) + + return render(request, 'posts/pending_posts.html') \ No newline at end of file diff --git a/quiz/__init__.py b/quiz/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quiz/admin.py b/quiz/admin.py new file mode 100644 index 0000000..576cd55 --- /dev/null +++ b/quiz/admin.py @@ -0,0 +1,25 @@ +from django.contrib import admin +from django.db.models import QuerySet +from .models import * + +@admin.action(description="Activer les quizes séléctionnés") +def activate(modelAdmin, request, querySet: QuerySet): + updated = querySet.update(is_active=True) + modelAdmin.message_user(request, f"{updated} quiz(es) ont été activé(s).") + +@admin.action(description="Désactiver les quizes séléctionnés") +def deactivate(modelAdmin, request, querySet: QuerySet): + updated = querySet.update(is_active=False) + modelAdmin.message_user(request, f"{updated} quiz(es) ont été désactivé(s).") + +class QuizAdmin(admin.ModelAdmin): + list_display = ('name', 'author', 'is_active', 'created', 'updated') + list_filter = ('author', 'is_active', 'created', 'updated') + search_fields = ('title', 'author__username') + ordering = ('-created',) + fields = ('title', 'author', 'is_active') + actions = [activate, deactivate] + +admin.site.register(Quiz, QuizAdmin) +admin.site.register(Question) +admin.site.register(Choice) diff --git a/quiz/apps.py b/quiz/apps.py new file mode 100644 index 0000000..3dc8afe --- /dev/null +++ b/quiz/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class QuizConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'quiz' diff --git a/quiz/context_processors.py b/quiz/context_processors.py new file mode 100644 index 0000000..4846516 --- /dev/null +++ b/quiz/context_processors.py @@ -0,0 +1,7 @@ +from .models import Quiz +from users.decorators import groups_required + +groups_required('Administrateur', 'SuperAdmin') +def pending_quizes_count(request): + count = Quiz.objects.filter(is_active=False).count() + return {'pending_quizes_count': count} \ No newline at end of file diff --git a/quiz/forms.py b/quiz/forms.py new file mode 100644 index 0000000..d3752ae --- /dev/null +++ b/quiz/forms.py @@ -0,0 +1,27 @@ +from django import forms +from .models import * + +# Gestion des formulaires pour les quiz en se servant du model +class QuizForm(forms.ModelForm): + class Meta: + model = Quiz + fields = ['name', 'description', 'image'] + labels = { + 'name': '', + 'description': '', + 'image': '(Pas obligatoire) ' + } + widgets = { + 'name': forms.TextInput(attrs={'placeholder': 'Nom du quiz'}), + 'description': forms.Textarea(attrs={'placeholder': 'Un text de description pour que les membres aient une idée du contenu du quiz'}), + } + +class QuestionForm(forms.ModelForm): + class Meta: + model = Question + fields = ['question'] + +class ChoiceForm(forms.ModelForm): + class Meta: + model = Choice + fields = ['choice', 'is_correct'] \ No newline at end of file diff --git a/quiz/migrations/0001_initial.py b/quiz/migrations/0001_initial.py new file mode 100644 index 0000000..449edbf --- /dev/null +++ b/quiz/migrations/0001_initial.py @@ -0,0 +1,71 @@ +# Generated by Django 4.2.17 on 2025-01-04 13:39 + +from django.conf import settings +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + migrations.swappable_dependency(settings.AUTH_USER_MODEL), + ] + + operations = [ + migrations.CreateModel( + name='Quiz', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('name', models.CharField(max_length=155)), + ('description', models.TextField(default='')), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('is_active', models.BooleanField(default=True)), + ('author', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='quizzes', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='UserQuiz', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('score', models.IntegerField(default=0)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_quizzes', to='quiz.quiz')), + ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_quizzes', to=settings.AUTH_USER_MODEL)), + ], + ), + migrations.CreateModel( + name='Question', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('question', models.CharField(max_length=255)), + ('created', models.DateTimeField(auto_now_add=True)), + ('updated', models.DateTimeField(auto_now=True)), + ('quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='questions', to='quiz.quiz')), + ], + ), + migrations.CreateModel( + name='Choice', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('choice', models.CharField(max_length=255)), + ('is_correct', models.BooleanField(default=False)), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='choices', to='quiz.question')), + ], + ), + migrations.CreateModel( + name='UserAnswer', + fields=[ + ('id', models.AutoField(primary_key=True, serialize=False)), + ('choice', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_answers', to='quiz.choice')), + ('question', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_answers', to='quiz.question')), + ('user_quiz', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='user_answers', to='quiz.userquiz')), + ], + options={ + 'unique_together': {('user_quiz', 'question')}, + }, + ), + ] diff --git a/quiz/migrations/0002_quiz_image.py b/quiz/migrations/0002_quiz_image.py new file mode 100644 index 0000000..7f24306 --- /dev/null +++ b/quiz/migrations/0002_quiz_image.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.17 on 2025-01-04 14:11 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('quiz', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='quiz', + name='image', + field=models.ImageField(blank=True, default='', upload_to='quiz_images/'), + ), + ] diff --git a/quiz/migrations/__init__.py b/quiz/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/quiz/models.py b/quiz/models.py new file mode 100644 index 0000000..50523f6 --- /dev/null +++ b/quiz/models.py @@ -0,0 +1,57 @@ +from django.db import models +from users.models import User + +class Quiz(models.Model): + id = models.AutoField(primary_key=True) + author = models.ForeignKey(User, on_delete=models.CASCADE, related_name='quizzes') + name = models.CharField(max_length=155) + description = models.TextField(default="") + image = models.ImageField(upload_to='quiz_images/', default='', blank=True) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + is_active = models.BooleanField(default=True) + + def __str__(self): + return self.name + +class Question(models.Model): + id = models.AutoField(primary_key=True) + quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='questions') + question = models.CharField(max_length=255) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return self.question + +class Choice(models.Model): # Renommé au singulier + id = models.AutoField(primary_key=True) + question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='choices') + choice = models.CharField(max_length=255) + is_correct = models.BooleanField(default=False) + + def __str__(self): + return self.choice + +class UserQuiz(models.Model): + id = models.AutoField(primary_key=True) + user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='user_quizzes') + quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, related_name='user_quizzes') # Ajouté + score = models.IntegerField(default=0) + created = models.DateTimeField(auto_now_add=True) + updated = models.DateTimeField(auto_now=True) + + def __str__(self): + return f"{self.user.username} - {self.quiz.name}" + +class UserAnswer(models.Model): + id = models.AutoField(primary_key=True) + user_quiz = models.ForeignKey(UserQuiz, on_delete=models.CASCADE, related_name='user_answers') + question = models.ForeignKey(Question, on_delete=models.CASCADE, related_name='user_answers') + choice = models.ForeignKey(Choice, on_delete=models.CASCADE, related_name='user_answers') + + def __str__(self): + return f"{self.user_quiz.user.username} - {self.question.question}" + + class Meta: + unique_together = ('user_quiz', 'question') # Empêche qu'un utilisateur réponde plusieurs fois à la même question. \ No newline at end of file diff --git a/quiz/templatetags/quiz_tags.py b/quiz/templatetags/quiz_tags.py new file mode 100644 index 0000000..8310daf --- /dev/null +++ b/quiz/templatetags/quiz_tags.py @@ -0,0 +1,8 @@ + +from django import template + +register = template.Library() + +@register.filter +def get_item(dictionary, key): + return dictionary.get(key) \ No newline at end of file diff --git a/quiz/tests.py b/quiz/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/quiz/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/quiz/urls.py b/quiz/urls.py new file mode 100644 index 0000000..a58871e --- /dev/null +++ b/quiz/urls.py @@ -0,0 +1,10 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.home, name='quiz_home'), + path('/', views.quiz, name='quiz'), + path('result//', views.result, name='quiz_result'), + path('create/', views.create_quiz, name='create_quiz'), + path('create//', views.create_responses_quiz, name='create_responses_quiz'), +] \ No newline at end of file diff --git a/quiz/views.py b/quiz/views.py new file mode 100644 index 0000000..b44f0a9 --- /dev/null +++ b/quiz/views.py @@ -0,0 +1,149 @@ +from django.shortcuts import render, get_object_or_404, redirect +from django.contrib.auth.decorators import login_required +from .models import * +from users.models import UserLevel, UserInventory +from shop.models import Item +from .forms import * + +@login_required +def home(request): + quizes = Quiz.objects.filter(is_active=True) + my_quizes = Quiz.objects.filter(author=request.user) + + if request.user.is_superuser: + quizes = Quiz.objects.all() + + + # Récupérer les meilleurs scores de l'utilisateur pour chaque quiz + user_scores = {} + if request.user.is_authenticated: + user_quiz_scores = UserQuiz.objects.filter( + user=request.user + ).values('quiz_id').annotate( + best_score=models.Max('score') + ) + user_scores = {score['quiz_id']: score['best_score'] for score in user_quiz_scores} + + return render(request, "games/quiz/home.html", { + "quizes": quizes, + "my_quizes": my_quizes, + "user_scores": user_scores + }) + +@login_required +def quiz(request, quiz_id): + quiz = get_object_or_404(Quiz, id=quiz_id) + + if request.method == 'POST': + # Vérifier si l'utilisateur a déjà participé à ce quiz + user_quiz = UserQuiz.objects.filter(user=request.user, quiz=quiz).first() + if user_quiz: + # Si oui, supprimer les anciennes réponses + UserAnswer.objects.filter(user_quiz=user_quiz).delete() + else: + # Si non, créer une nouvelle entrée + user_quiz = UserQuiz.objects.create(user=request.user, quiz=quiz) + + score = 0 + for question in quiz.questions.all(): + choice_id = request.POST.get(f'question_{question.id}') + if choice_id: + choice = Choice.objects.get(id=choice_id) + UserAnswer.objects.create( + user_quiz=user_quiz, + question=question, + choice=choice + ) + if choice.is_correct: + score += 1 + + user_quiz.score = score + user_quiz.save() + return redirect('quiz_result', user_quiz_id=user_quiz.id) + + return render(request, "games/quiz/quiz.html", { + "quiz": quiz, + "questions": quiz.questions.all() + }) + +@login_required +def result(request, user_quiz_id): + user_quiz = get_object_or_404(UserQuiz, id=user_quiz_id, user=request.user) + total_questions = user_quiz.quiz.questions.count() + + # Vérifiez si l'utilisateur a déjà joué à ce quiz + if not UserQuiz.objects.filter(user=request.user, quiz=user_quiz.quiz).exists(): + # Si c'est la première fois que l'on joue, alors on gagne 10 pièces d'or + 10 points d'expérience par réponse correcte + inventory_item = UserInventory.objects.get(user=user_quiz.user, item=Item.objects.get(name='Or')) + inventory_item.quantity += 10 + inventory_item.save() + + user_level = request.user.level + user_level.experience += 10 * user_quiz.score + user_level.save() + else: + # Si l'utilisateur a déjà joué, ajoutez 1 point d'expérience par réponse correcte + user_level = request.user.level + user_level.experience += 1 * user_quiz.score + user_level.save() + + return render(request, "games/quiz/result.html", { + "user_quiz": user_quiz, + "total_questions": total_questions, + "percentage": (user_quiz.score / total_questions) * 100 if total_questions > 0 else 0 + }) + +@login_required +def create_quiz(request): + form = QuizForm() + if request.method == 'POST': + quiz = Quiz.objects.create(author=request.user, name=request.POST.get('name'), description=request.POST.get('description'), is_active=False) + return redirect('create_responses_quiz', quiz_id=quiz.id) + + return render(request, "games/quiz/create_quiz.html", {"form": form}) + +@login_required +def create_responses_quiz(request, quiz_id): + quiz = get_object_or_404(Quiz, id=quiz_id, author=request.user) + questions = quiz.questions.all() + choices = [] + for question in questions: + choices.append(question.choices.all()) + + form = QuestionForm() + + if request.method == 'POST': + # Parcourir les données POST pour trouver les questions et réponses + for key in request.POST: + if key.startswith('ask-'): + question_text = request.POST[key] + if question_text: # Vérifie si la question n'est pas vide + # Créer la question + question = Question.objects.create( + quiz=quiz, + question=question_text + ) + + # Récupérer le numéro de la question depuis la clé + question_num = key.split('-')[1] + + # Chercher toutes les réponses associées à cette question + response_prefix = f'response-{question_num}-' + correct_response_key = f'is_correct-{question_num}' + correct_response_value = request.POST.get(correct_response_key) + + for response_key in request.POST: + if response_key.startswith(response_prefix): + response_text = request.POST[response_key] + if response_text: # Vérifie si la réponse n'est pas vide + response_num = response_key.split('-')[-1] + is_correct = (response_num == correct_response_value) + Choice.objects.create( + question=question, + choice=response_text, + is_correct=is_correct # Par défaut, aucune réponse n'est correcte + ) + + return redirect('create_responses_quiz', quiz.id) # Redirection vers la page d'accueil + + return render(request, "games/quiz/create_responses_quiz.html", {"form": form, "quiz": quiz}) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..c359d0d --- /dev/null +++ b/requirements.txt @@ -0,0 +1,4 @@ +django +Pillow +python-dotenv +pymysql \ No newline at end of file diff --git a/shop/__init__.py b/shop/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/shop/admin.py b/shop/admin.py new file mode 100644 index 0000000..f3edd38 --- /dev/null +++ b/shop/admin.py @@ -0,0 +1,6 @@ +from django.contrib import admin +from .models import Category, Item + +# Register your models here. +admin.site.register(Category) +admin.site.register(Item) \ No newline at end of file diff --git a/shop/apps.py b/shop/apps.py new file mode 100644 index 0000000..1f05a2b --- /dev/null +++ b/shop/apps.py @@ -0,0 +1,6 @@ +from django.apps import AppConfig + + +class ShopConfig(AppConfig): + default_auto_field = 'django.db.models.BigAutoField' + name = 'shop' diff --git a/shop/migrations/0001_initial.py b/shop/migrations/0001_initial.py new file mode 100644 index 0000000..4395954 --- /dev/null +++ b/shop/migrations/0001_initial.py @@ -0,0 +1,35 @@ +# Generated by Django 4.2.17 on 2025-01-07 10:47 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + initial = True + + dependencies = [ + ] + + operations = [ + migrations.CreateModel( + name='Category', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('description', models.TextField()), + ('image', models.ImageField(upload_to='items_categories/')), + ('is_active', models.BooleanField(default=True)), + ], + ), + migrations.CreateModel( + name='Item', + fields=[ + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('name', models.CharField(max_length=100)), + ('description', models.TextField()), + ('price', models.DecimalField(decimal_places=2, max_digits=5)), + ('image', models.ImageField(upload_to='items/')), + ('is_active', models.BooleanField(default=True)), + ], + ), + ] diff --git a/shop/migrations/0002_item_category_alter_item_image.py b/shop/migrations/0002_item_category_alter_item_image.py new file mode 100644 index 0000000..747192c --- /dev/null +++ b/shop/migrations/0002_item_category_alter_item_image.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.17 on 2025-01-07 13:23 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('shop', '0001_initial'), + ] + + operations = [ + migrations.AddField( + model_name='item', + name='category', + field=models.ForeignKey(default=1, on_delete=django.db.models.deletion.CASCADE, related_name='items', to='shop.category'), + preserve_default=False, + ), + migrations.AlterField( + model_name='item', + name='image', + field=models.ImageField(upload_to='shop/items/'), + ), + ] diff --git a/shop/migrations/__init__.py b/shop/migrations/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/shop/models.py b/shop/models.py new file mode 100644 index 0000000..e32da2a --- /dev/null +++ b/shop/models.py @@ -0,0 +1,22 @@ +from django.db import models + +# Create your models here. +class Item(models.Model): + category = models.ForeignKey('Category', on_delete=models.CASCADE, related_name='items') + name = models.CharField(max_length=100) + description = models.TextField() + price = models.DecimalField(max_digits=5, decimal_places=2) + image = models.ImageField(upload_to='shop/items/') + is_active = models.BooleanField(default=True) + + def __str__(self): + return self.name + +class Category(models.Model): + name = models.CharField(max_length=100) + description = models.TextField() + image = models.ImageField(upload_to='items_categories/') + is_active = models.BooleanField(default=True) + + def __str__(self): + return self.name \ No newline at end of file diff --git a/shop/tests.py b/shop/tests.py new file mode 100644 index 0000000..7ce503c --- /dev/null +++ b/shop/tests.py @@ -0,0 +1,3 @@ +from django.test import TestCase + +# Create your tests here. diff --git a/shop/urls.py b/shop/urls.py new file mode 100644 index 0000000..e00c0b7 --- /dev/null +++ b/shop/urls.py @@ -0,0 +1,7 @@ +from django.urls import path +from . import views + +urlpatterns = [ + path('', views.home, name='shop_home'), + path('buy//', views.buy, name='shop_buy'), +] \ No newline at end of file diff --git a/shop/views.py b/shop/views.py new file mode 100644 index 0000000..add60e9 --- /dev/null +++ b/shop/views.py @@ -0,0 +1,36 @@ +from django.shortcuts import render, redirect +from .models import * +from users.models import UserInventory +from django.contrib.auth.decorators import login_required +from django.contrib import messages + +# Create your views here. +def home(request): + items = Item.objects.filter(is_active=True) + print(items) + return render(request, 'shop/home.html', {'items': items}) + +@login_required +def buy(request, item_id): + item = Item.objects.get(id=item_id) + # ON vérifie si l'utilisateur a assez d'argent pour acheter l'item + if request.user.money >= item.price: + # On vérifie que l'utilisateur n'a pas déjà acheté l'item + if not request.user.inventory.filter(item=item).exists(): + # On déduit le prix de l'item de l'argent de l'utilisateur + user_inventory = UserInventory.objects.get(user=request.user, item__name='Or') + user_inventory.quantity -= item.price + user_inventory.save() + + # On ajoute l'item dans l'inventaire de l'utilisateur + user_inventory = UserInventory.objects.create(user=request.user, item=item) + user_inventory.quantity = 1 + user_inventory.save() + messages.success(request, f"Vous avez acheté {item.name} pour {item.price} pièces d'or.") + else: + messages.error(request, f"Vous avez déjà acheté {item.name}.") + else: + messages.error(request, f"Vous n'avez pas assez d'argent pour acheter {item.name}.") + return redirect('shop_home') + + \ No newline at end of file diff --git a/static/css/autocomplete.css b/static/css/autocomplete.css new file mode 100644 index 0000000..69c94e7 --- /dev/null +++ b/static/css/autocomplete.css @@ -0,0 +1,275 @@ +select.admin-autocomplete { + width: 20em; +} + +.select2-container--admin-autocomplete.select2-container { + min-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single, +.select2-container--admin-autocomplete .select2-selection--multiple { + min-height: 30px; + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection, +.select2-container--admin-autocomplete.select2-container--open .select2-selection { + border-color: var(--body-quiet-color); + min-height: 30px; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--single, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--single { + padding: 0; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection.select2-selection--multiple, +.select2-container--admin-autocomplete.select2-container--open .select2-selection.select2-selection--multiple { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-selection--single { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__rendered { + color: var(--body-fg); + line-height: 30px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__placeholder { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; +} + +.select2-container--admin-autocomplete .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple { + background-color: var(--body-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: text; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 10px 5px 5px; + width: 100%; + display: flex; + flex-wrap: wrap; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__rendered li { + list-style: none; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__placeholder { + color: var(--body-quiet-color); + margin-top: 5px; + float: left; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin: 5px; + position: absolute; + right: 0; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice { + background-color: var(--darkened-bg); + border: 1px solid var(--border-color); + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove { + color: var(--body-quiet-color); + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; +} + +.select2-container--admin-autocomplete .select2-selection--multiple .select2-selection__choice__remove:hover { + color: var(--body-fg); +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__placeholder, .select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; +} + +.select2-container--admin-autocomplete[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; +} + +.select2-container--admin-autocomplete.select2-container--focus .select2-selection--multiple { + border: solid var(--body-quiet-color) 1px; + outline: 0; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection--multiple { + background-color: var(--darkened-bg); + cursor: default; +} + +.select2-container--admin-autocomplete.select2-container--disabled .select2-selection__choice__remove { + display: none; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; +} + +.select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--single, .select2-container--admin-autocomplete.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; +} + +.select2-container--admin-autocomplete .select2-search--dropdown { + background: var(--darkened-bg); +} + +.select2-container--admin-autocomplete .select2-search--dropdown .select2-search__field { + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; +} + +.select2-container--admin-autocomplete .select2-search--inline .select2-search__field { + background: transparent; + color: var(--body-fg); + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; +} + +.select2-container--admin-autocomplete .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; + color: var(--body-fg); + background: var(--body-bg); +} + +.select2-container--admin-autocomplete .select2-results__option[role=group] { + padding: 0; +} + +.select2-container--admin-autocomplete .select2-results__option[aria-disabled=true] { + color: var(--body-quiet-color); +} + +.select2-container--admin-autocomplete .select2-results__option[aria-selected=true] { + background-color: var(--selected-bg); + color: var(--body-fg); +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option { + padding-left: 1em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; +} + +.select2-container--admin-autocomplete .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; +} + +.select2-container--admin-autocomplete .select2-results__option--highlighted[aria-selected] { + background-color: var(--primary); + color: var(--primary-fg); +} + +.select2-container--admin-autocomplete .select2-results__group { + cursor: default; + display: block; + padding: 6px; +} diff --git a/static/css/base.css b/static/css/base.css new file mode 100644 index 0000000..93db7d0 --- /dev/null +++ b/static/css/base.css @@ -0,0 +1,1145 @@ +/* + DJANGO Admin styles +*/ + +/* VARIABLE DEFINITIONS */ +html[data-theme="light"], +:root { + --primary: #79aec8; + --secondary: #417690; + --accent: #f5dd5d; + --primary-fg: #fff; + + --body-fg: #333; + --body-bg: #fff; + --body-quiet-color: #666; + --body-loud-color: #000; + + --header-color: #ffc; + --header-branding-color: var(--accent); + --header-bg: var(--secondary); + --header-link-color: var(--primary-fg); + + --breadcrumbs-fg: #c4dce8; + --breadcrumbs-link-fg: var(--body-bg); + --breadcrumbs-bg: var(--primary); + + --link-fg: #417893; + --link-hover-color: #036; + --link-selected-fg: #5b80b2; + + --hairline-color: #e8e8e8; + --border-color: #ccc; + + --error-fg: #ba2121; + + --message-success-bg: #dfd; + --message-warning-bg: #ffc; + --message-error-bg: #ffefef; + + --darkened-bg: #f8f8f8; /* A bit darker than --body-bg */ + --selected-bg: #e4e4e4; /* E.g. selected table cells */ + --selected-row: #ffc; + + --button-fg: #fff; + --button-bg: var(--primary); + --button-hover-bg: #609ab6; + --default-button-bg: var(--secondary); + --default-button-hover-bg: #205067; + --close-button-bg: #747474; + --close-button-hover-bg: #333; + --delete-button-bg: #ba2121; + --delete-button-hover-bg: #a41515; + + --object-tools-fg: var(--button-fg); + --object-tools-bg: var(--close-button-bg); + --object-tools-hover-bg: var(--close-button-hover-bg); + + --font-family-primary: + -apple-system, + BlinkMacSystemFont, + "Segoe UI", + system-ui, + Roboto, + "Helvetica Neue", + Arial, + sans-serif, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; + --font-family-monospace: + ui-monospace, + Menlo, + Monaco, + "Cascadia Mono", + "Segoe UI Mono", + "Roboto Mono", + "Oxygen Mono", + "Ubuntu Monospace", + "Source Code Pro", + "Fira Mono", + "Droid Sans Mono", + "Courier New", + monospace, + "Apple Color Emoji", + "Segoe UI Emoji", + "Segoe UI Symbol", + "Noto Color Emoji"; +} + +html, body { + height: 100%; +} + +body { + margin: 0; + padding: 0; + font-size: 0.875rem; + font-family: var(--font-family-primary); + color: var(--body-fg); + background: var(--body-bg); +} + +/* LINKS */ + +a:link, a:visited { + color: var(--link-fg); + text-decoration: none; + transition: color 0.15s, background 0.15s; +} + +a:focus, a:hover { + color: var(--link-hover-color); +} + +a:focus { + text-decoration: underline; +} + +a img { + border: none; +} + +a.section:link, a.section:visited { + color: var(--header-link-color); + text-decoration: none; +} + +a.section:focus, a.section:hover { + text-decoration: underline; +} + +/* GLOBAL DEFAULTS */ + +p, ol, ul, dl { + margin: .2em 0 .8em 0; +} + +p { + padding: 0; + line-height: 140%; +} + +h1,h2,h3,h4,h5 { + font-weight: bold; +} + +h1 { + margin: 0 0 20px; + font-weight: 300; + font-size: 1.25rem; + color: var(--body-quiet-color); +} + +h2 { + font-size: 1rem; + margin: 1em 0 .5em 0; +} + +h2.subhead { + font-weight: normal; + margin-top: 0; +} + +h3 { + font-size: 0.875rem; + margin: .8em 0 .3em 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +h4 { + font-size: 0.75rem; + margin: 1em 0 .8em 0; + padding-bottom: 3px; +} + +h5 { + font-size: 0.625rem; + margin: 1.5em 0 .5em 0; + color: var(--body-quiet-color); + text-transform: uppercase; + letter-spacing: 1px; +} + +ul > li { + list-style-type: square; + padding: 1px 0; +} + +li ul { + margin-bottom: 0; +} + +li, dt, dd { + font-size: 0.8125rem; + line-height: 1.25rem; +} + +dt { + font-weight: bold; + margin-top: 4px; +} + +dd { + margin-left: 0; +} + +form { + margin: 0; + padding: 0; +} + +fieldset { + margin: 0; + min-width: 0; + padding: 0; + border: none; + border-top: 1px solid var(--hairline-color); +} + +blockquote { + font-size: 0.6875rem; + color: #777; + margin-left: 2px; + padding-left: 10px; + border-left: 5px solid #ddd; +} + +code, pre { + font-family: var(--font-family-monospace); + color: var(--body-quiet-color); + font-size: 0.75rem; + overflow-x: auto; +} + +pre.literal-block { + margin: 10px; + background: var(--darkened-bg); + padding: 6px 8px; +} + +code strong { + color: #930; +} + +hr { + clear: both; + color: var(--hairline-color); + background-color: var(--hairline-color); + height: 1px; + border: none; + margin: 0; + padding: 0; + line-height: 1px; +} + +/* TEXT STYLES & MODIFIERS */ + +.small { + font-size: 0.6875rem; +} + +.mini { + font-size: 0.625rem; +} + +.help, p.help, form p.help, div.help, form div.help, div.help li { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +div.help ul { + margin-bottom: 0; +} + +.help-tooltip { + cursor: help; +} + +p img, h1 img, h2 img, h3 img, h4 img, td img { + vertical-align: middle; +} + +.quiet, a.quiet:link, a.quiet:visited { + color: var(--body-quiet-color); + font-weight: normal; +} + +.clear { + clear: both; +} + +.nowrap { + white-space: nowrap; +} + +.hidden { + display: none !important; +} + +/* TABLES */ + +table { + border-collapse: collapse; + border-color: var(--border-color); +} + +td, th { + font-size: 0.8125rem; + line-height: 1rem; + border-bottom: 1px solid var(--hairline-color); + vertical-align: top; + padding: 8px; +} + +th { + font-weight: 600; + text-align: left; +} + +thead th, +tfoot td { + color: var(--body-quiet-color); + padding: 5px 10px; + font-size: 0.6875rem; + background: var(--body-bg); + border: none; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +tfoot td { + border-bottom: none; + border-top: 1px solid var(--hairline-color); +} + +thead th.required { + color: var(--body-loud-color); +} + +tr.alt { + background: var(--darkened-bg); +} + +tr:nth-child(odd), .row-form-errors { + background: var(--body-bg); +} + +tr:nth-child(even), +tr:nth-child(even) .errorlist, +tr:nth-child(odd) + .row-form-errors, +tr:nth-child(odd) + .row-form-errors .errorlist { + background: var(--darkened-bg); +} + +/* SORTABLE TABLES */ + +thead th { + padding: 5px 10px; + line-height: normal; + text-transform: uppercase; + background: var(--darkened-bg); +} + +thead th a:link, thead th a:visited { + color: var(--body-quiet-color); +} + +thead th.sorted { + background: var(--selected-bg); +} + +thead th.sorted .text { + padding-right: 42px; +} + +table thead th .text span { + padding: 8px 10px; + display: block; +} + +table thead th .text a { + display: block; + cursor: pointer; + padding: 8px 10px; +} + +table thead th .text a:focus, table thead th .text a:hover { + background: var(--selected-bg); +} + +thead th.sorted a.sortremove { + visibility: hidden; +} + +table thead th.sorted:hover a.sortremove { + visibility: visible; +} + +table thead th.sorted .sortoptions { + display: block; + padding: 9px 5px 0 5px; + float: right; + text-align: right; +} + +table thead th.sorted .sortpriority { + font-size: .8em; + min-width: 12px; + text-align: center; + vertical-align: 3px; + margin-left: 2px; + margin-right: 2px; +} + +table thead th.sorted .sortoptions a { + position: relative; + width: 14px; + height: 14px; + display: inline-block; + background: url(../img/sorting-icons.svg) 0 0 no-repeat; + background-size: 14px auto; +} + +table thead th.sorted .sortoptions a.sortremove { + background-position: 0 0; +} + +table thead th.sorted .sortoptions a.sortremove:after { + content: '\\'; + position: absolute; + top: -6px; + left: 3px; + font-weight: 200; + font-size: 1.125rem; + color: var(--body-quiet-color); +} + +table thead th.sorted .sortoptions a.sortremove:focus:after, +table thead th.sorted .sortoptions a.sortremove:hover:after { + color: var(--link-fg); +} + +table thead th.sorted .sortoptions a.sortremove:focus, +table thead th.sorted .sortoptions a.sortremove:hover { + background-position: 0 -14px; +} + +table thead th.sorted .sortoptions a.ascending { + background-position: 0 -28px; +} + +table thead th.sorted .sortoptions a.ascending:focus, +table thead th.sorted .sortoptions a.ascending:hover { + background-position: 0 -42px; +} + +table thead th.sorted .sortoptions a.descending { + top: 1px; + background-position: 0 -56px; +} + +table thead th.sorted .sortoptions a.descending:focus, +table thead th.sorted .sortoptions a.descending:hover { + background-position: 0 -70px; +} + +/* FORM DEFAULTS */ + +input, textarea, select, .form-row p, form .button { + margin: 2px 0; + padding: 2px 3px; + vertical-align: middle; + font-family: var(--font-family-primary); + font-weight: normal; + font-size: 0.8125rem; +} +.form-row div.help { + padding: 2px 3px; +} + +textarea { + vertical-align: top; +} + +input[type=text], input[type=password], input[type=email], input[type=url], +input[type=number], input[type=tel], textarea, select, .vTextField { + border: 1px solid var(--border-color); + border-radius: 4px; + padding: 5px 6px; + margin-top: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} + +input[type=text]:focus, input[type=password]:focus, input[type=email]:focus, +input[type=url]:focus, input[type=number]:focus, input[type=tel]:focus, +textarea:focus, select:focus, .vTextField:focus { + border-color: var(--body-quiet-color); +} + +select { + height: 1.875rem; +} + +select[multiple] { + /* Allow HTML size attribute to override the height in the rule above. */ + height: auto; + min-height: 150px; +} + +/* FORM BUTTONS */ + +.button, input[type=submit], input[type=button], .submit-row input, a.button { + background: var(--button-bg); + padding: 10px 15px; + border: none; + border-radius: 4px; + color: var(--button-fg); + cursor: pointer; + transition: background 0.15s; +} + +a.button { + padding: 4px 5px; +} + +.button:active, input[type=submit]:active, input[type=button]:active, +.button:focus, input[type=submit]:focus, input[type=button]:focus, +.button:hover, input[type=submit]:hover, input[type=button]:hover { + background: var(--button-hover-bg); +} + +.button[disabled], input[type=submit][disabled], input[type=button][disabled] { + opacity: 0.4; +} + +.button.default, input[type=submit].default, .submit-row input.default { + border: none; + font-weight: 400; + background: var(--default-button-bg); +} + +.button.default:active, input[type=submit].default:active, +.button.default:focus, input[type=submit].default:focus, +.button.default:hover, input[type=submit].default:hover { + background: var(--default-button-hover-bg); +} + +.button[disabled].default, +input[type=submit][disabled].default, +input[type=button][disabled].default { + opacity: 0.4; +} + + +/* MODULES */ + +.module { + border: none; + margin-bottom: 30px; + background: var(--body-bg); +} + +.module p, .module ul, .module h3, .module h4, .module dl, .module pre { + padding-left: 10px; + padding-right: 10px; +} + +.module blockquote { + margin-left: 12px; +} + +.module ul, .module ol { + margin-left: 1.5em; +} + +.module h3 { + margin-top: .6em; +} + +.module h2, .module caption, .inline-group h2 { + margin: 0; + padding: 8px; + font-weight: 400; + font-size: 0.8125rem; + text-align: left; + background: var(--primary); + color: var(--header-link-color); +} + +.module caption, +.inline-group h2 { + font-size: 0.75rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +.module table { + border-collapse: collapse; +} + +/* MESSAGES & ERRORS */ + +ul.messagelist { + padding: 0; + margin: 0; +} + +ul.messagelist li { + display: block; + font-weight: 400; + font-size: 0.8125rem; + padding: 10px 10px 10px 65px; + margin: 0 0 10px 0; + background: var(--message-success-bg) url(../img/icon-yes.svg) 40px 12px no-repeat; + background-size: 16px auto; + color: var(--body-fg); + word-break: break-word; +} + +ul.messagelist li.warning { + background: var(--message-warning-bg) url(../img/icon-alert.svg) 40px 14px no-repeat; + background-size: 14px auto; +} + +ul.messagelist li.error { + background: var(--message-error-bg) url(../img/icon-no.svg) 40px 12px no-repeat; + background-size: 16px auto; +} + +.errornote { + font-size: 0.875rem; + font-weight: 700; + display: block; + padding: 10px 12px; + margin: 0 0 10px 0; + color: var(--error-fg); + border: 1px solid var(--error-fg); + border-radius: 4px; + background-color: var(--body-bg); + background-position: 5px 12px; + overflow-wrap: break-word; +} + +ul.errorlist { + margin: 0 0 4px; + padding: 0; + color: var(--error-fg); + background: var(--body-bg); +} + +ul.errorlist li { + font-size: 0.8125rem; + display: block; + margin-bottom: 4px; + overflow-wrap: break-word; +} + +ul.errorlist li:first-child { + margin-top: 0; +} + +ul.errorlist li a { + color: inherit; + text-decoration: underline; +} + +td ul.errorlist { + margin: 0; + padding: 0; +} + +td ul.errorlist li { + margin: 0; +} + +.form-row.errors { + margin: 0; + border: none; + border-bottom: 1px solid var(--hairline-color); + background: none; +} + +.form-row.errors ul.errorlist li { + padding-left: 0; +} + +.errors input, .errors select, .errors textarea, +td ul.errorlist + input, td ul.errorlist + select, td ul.errorlist + textarea { + border: 1px solid var(--error-fg); +} + +.description { + font-size: 0.75rem; + padding: 5px 0 0 12px; +} + +/* BREADCRUMBS */ + +div.breadcrumbs { + background: var(--breadcrumbs-bg); + padding: 10px 40px; + border: none; + color: var(--breadcrumbs-fg); + text-align: left; +} + +div.breadcrumbs a { + color: var(--breadcrumbs-link-fg); +} + +div.breadcrumbs a:focus, div.breadcrumbs a:hover { + color: var(--breadcrumbs-fg); +} + +/* ACTION ICONS */ + +.viewlink, .inlineviewlink { + padding-left: 16px; + background: url(../img/icon-viewlink.svg) 0 1px no-repeat; +} + +.addlink { + padding-left: 16px; + background: url(../img/icon-addlink.svg) 0 1px no-repeat; +} + +.changelink, .inlinechangelink { + padding-left: 16px; + background: url(../img/icon-changelink.svg) 0 1px no-repeat; +} + +.deletelink { + padding-left: 16px; + background: url(../img/icon-deletelink.svg) 0 1px no-repeat; +} + +a.deletelink:link, a.deletelink:visited { + color: #CC3434; /* XXX Probably unused? */ +} + +a.deletelink:focus, a.deletelink:hover { + color: #993333; /* XXX Probably unused? */ + text-decoration: none; +} + +/* OBJECT TOOLS */ + +.object-tools { + font-size: 0.625rem; + font-weight: bold; + padding-left: 0; + float: right; + position: relative; + margin-top: -48px; +} + +.object-tools li { + display: block; + float: left; + margin-left: 5px; + height: 1rem; +} + +.object-tools a { + border-radius: 15px; +} + +.object-tools a:link, .object-tools a:visited { + display: block; + float: left; + padding: 3px 12px; + background: var(--object-tools-bg); + color: var(--object-tools-fg); + font-weight: 400; + font-size: 0.6875rem; + text-transform: uppercase; + letter-spacing: 0.5px; +} + +.object-tools a:focus, .object-tools a:hover { + background-color: var(--object-tools-hover-bg); +} + +.object-tools a:focus{ + text-decoration: none; +} + +.object-tools a.viewsitelink, .object-tools a.addlink { + background-repeat: no-repeat; + background-position: right 7px center; + padding-right: 26px; +} + +.object-tools a.viewsitelink { + background-image: url(../img/tooltag-arrowright.svg); +} + +.object-tools a.addlink { + background-image: url(../img/tooltag-add.svg); +} + +/* OBJECT HISTORY */ + +#change-history table { + width: 100%; +} + +#change-history table tbody th { + width: 16em; +} + +#change-history .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* PAGE STRUCTURE */ + +#container { + position: relative; + width: 100%; + min-width: 980px; + padding: 0; + display: flex; + flex-direction: column; + height: 100%; +} + +#container > div { + flex-shrink: 0; +} + +#container > .main { + display: flex; + flex: 1 0 auto; +} + +.main > .content { + flex: 1 0; + max-width: 100%; +} + +.skip-to-content-link { + position: absolute; + top: -999px; + margin: 5px; + padding: 5px; + background: var(--body-bg); + z-index: 1; +} + +.skip-to-content-link:focus { + left: 0px; + top: 0px; +} + +#content { + padding: 20px 40px; +} + +.dashboard #content { + width: 600px; +} + +#content-main { + float: left; + width: 100%; +} + +#content-related { + float: right; + width: 260px; + position: relative; + margin-right: -300px; +} + +#footer { + clear: both; + padding: 10px; +} + +/* COLUMN TYPES */ + +.colMS { + margin-right: 300px; +} + +.colSM { + margin-left: 300px; +} + +.colSM #content-related { + float: left; + margin-right: 0; + margin-left: -300px; +} + +.colSM #content-main { + float: right; +} + +.popup .colM { + width: auto; +} + +/* HEADER */ + +#header { + width: auto; + height: auto; + display: flex; + justify-content: space-between; + align-items: center; + padding: 10px 40px; + background: var(--header-bg); + color: var(--header-color); + overflow: hidden; +} + +#header a:link, #header a:visited, #logout-form button { + color: var(--header-link-color); +} + +#header a:focus , #header a:hover { + text-decoration: underline; +} + +#branding { + display: flex; +} + +#branding h1 { + padding: 0; + margin: 0; + margin-inline-end: 20px; + font-weight: 300; + font-size: 1.5rem; + color: var(--header-branding-color); +} + +#branding h1 a:link, #branding h1 a:visited { + color: var(--accent); +} + +#branding h2 { + padding: 0 10px; + font-size: 0.875rem; + margin: -8px 0 8px 0; + font-weight: normal; + color: var(--header-color); +} + +#branding a:hover { + text-decoration: none; +} + +#logout-form { + display: inline; +} + +#logout-form button { + background: none; + border: 0; + cursor: pointer; + font-family: var(--font-family-primary); +} + +#user-tools { + float: right; + margin: 0 0 0 20px; + text-align: right; +} + +#user-tools, #logout-form button{ + padding: 0; + font-weight: 300; + font-size: 0.6875rem; + letter-spacing: 0.5px; + text-transform: uppercase; +} + +#user-tools a, #logout-form button { + border-bottom: 1px solid rgba(255, 255, 255, 0.25); +} + +#user-tools a:focus, #user-tools a:hover, +#logout-form button:active, #logout-form button:hover { + text-decoration: none; + border-bottom: 0; +} + +#logout-form button:active, #logout-form button:hover { + margin-bottom: 1px; +} + +/* SIDEBAR */ + +#content-related { + background: var(--darkened-bg); +} + +#content-related .module { + background: none; +} + +#content-related h3 { + color: var(--body-quiet-color); + padding: 0 16px; + margin: 0 0 16px; +} + +#content-related h4 { + font-size: 0.8125rem; +} + +#content-related p { + padding-left: 16px; + padding-right: 16px; +} + +#content-related .actionlist { + padding: 0; + margin: 16px; +} + +#content-related .actionlist li { + line-height: 1.2; + margin-bottom: 10px; + padding-left: 18px; +} + +#content-related .module h2 { + background: none; + padding: 16px; + margin-bottom: 16px; + border-bottom: 1px solid var(--hairline-color); + font-size: 1.125rem; + color: var(--body-fg); +} + +.delete-confirmation form input[type="submit"] { + background: var(--delete-button-bg); + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); +} + +.delete-confirmation form input[type="submit"]:active, +.delete-confirmation form input[type="submit"]:focus, +.delete-confirmation form input[type="submit"]:hover { + background: var(--delete-button-hover-bg); +} + +.delete-confirmation form .cancel-link { + display: inline-block; + vertical-align: middle; + height: 0.9375rem; + line-height: 0.9375rem; + border-radius: 4px; + padding: 10px 15px; + color: var(--button-fg); + background: var(--close-button-bg); + margin: 0 0 0 10px; +} + +.delete-confirmation form .cancel-link:active, +.delete-confirmation form .cancel-link:focus, +.delete-confirmation form .cancel-link:hover { + background: var(--close-button-hover-bg); +} + +/* POPUP */ +.popup #content { + padding: 20px; +} + +.popup #container { + min-width: 0; +} + +.popup #header { + padding: 10px 20px; +} + +/* PAGINATOR */ + +.paginator { + display: flex; + align-items: center; + gap: 4px; + font-size: 0.8125rem; + padding-top: 10px; + padding-bottom: 10px; + line-height: 22px; + margin: 0; + border-top: 1px solid var(--hairline-color); + width: 100%; +} + +.paginator a:link, .paginator a:visited { + padding: 2px 6px; + background: var(--button-bg); + text-decoration: none; + color: var(--button-fg); +} + +.paginator a.showall { + border: none; + background: none; + color: var(--link-fg); +} + +.paginator a.showall:focus, .paginator a.showall:hover { + background: none; + color: var(--link-hover-color); +} + +.paginator .end { + margin-right: 6px; +} + +.paginator .this-page { + padding: 2px 6px; + font-weight: bold; + font-size: 0.8125rem; + vertical-align: top; +} + +.paginator a:focus, .paginator a:hover { + color: white; + background: var(--link-hover-color); +} + +.paginator input { + margin-left: auto; +} + +.base-svgs { + display: none; +} diff --git a/static/css/changelists.css b/static/css/changelists.css new file mode 100644 index 0000000..a754513 --- /dev/null +++ b/static/css/changelists.css @@ -0,0 +1,328 @@ +/* CHANGELISTS */ + +#changelist { + display: flex; + align-items: flex-start; + justify-content: space-between; +} + +#changelist .changelist-form-container { + flex: 1 1 auto; + min-width: 0; +} + +#changelist table { + width: 100%; +} + +.change-list .hiddenfields { display:none; } + +.change-list .filtered table { + border-right: none; +} + +.change-list .filtered { + min-height: 400px; +} + +.change-list .filtered .results, .change-list .filtered .paginator, +.filtered #toolbar, .filtered div.xfull { + width: auto; +} + +.change-list .filtered table tbody th { + padding-right: 1em; +} + +#changelist-form .results { + overflow-x: auto; + width: 100%; +} + +#changelist .toplinks { + border-bottom: 1px solid var(--hairline-color); +} + +#changelist .paginator { + color: var(--body-quiet-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--body-bg); + overflow: hidden; +} + +/* CHANGELIST TABLES */ + +#changelist table thead th { + padding: 0; + white-space: nowrap; + vertical-align: middle; +} + +#changelist table thead th.action-checkbox-column { + width: 1.5em; + text-align: center; +} + +#changelist table tbody td.action-checkbox { + text-align: center; +} + +#changelist table tfoot { + color: var(--body-quiet-color); +} + +/* TOOLBAR */ + +#toolbar { + padding: 8px 10px; + margin-bottom: 15px; + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +#toolbar form input { + border-radius: 4px; + font-size: 0.875rem; + padding: 5px; + color: var(--body-fg); +} + +#toolbar #searchbar { + height: 1.1875rem; + border: 1px solid var(--border-color); + padding: 2px 5px; + margin: 0; + vertical-align: top; + font-size: 0.8125rem; + max-width: 100%; +} + +#toolbar #searchbar:focus { + border-color: var(--body-quiet-color); +} + +#toolbar form input[type="submit"] { + border: 1px solid var(--border-color); + font-size: 0.8125rem; + padding: 4px 8px; + margin: 0; + vertical-align: middle; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + color: var(--body-fg); +} + +#toolbar form input[type="submit"]:focus, +#toolbar form input[type="submit"]:hover { + border-color: var(--body-quiet-color); +} + +#changelist-search img { + vertical-align: middle; + margin-right: 4px; +} + +#changelist-search .help { + word-break: break-word; +} + +/* FILTER COLUMN */ + +#changelist-filter { + flex: 0 0 240px; + order: 1; + background: var(--darkened-bg); + border-left: none; + margin: 0 0 0 30px; +} + +#changelist-filter h2 { + font-size: 0.875rem; + text-transform: uppercase; + letter-spacing: 0.5px; + padding: 5px 15px; + margin-bottom: 12px; + border-bottom: none; +} + +#changelist-filter h3, +#changelist-filter details summary { + font-weight: 400; + padding: 0 15px; + margin-bottom: 10px; +} + +#changelist-filter details summary > * { + display: inline; +} + +#changelist-filter details > summary { + list-style-type: none; +} + +#changelist-filter details > summary::-webkit-details-marker { + display: none; +} + +#changelist-filter details > summary::before { + content: '→'; + font-weight: bold; + color: var(--link-hover-color); +} + +#changelist-filter details[open] > summary::before { + content: '↓'; +} + +#changelist-filter ul { + margin: 5px 0; + padding: 0 15px 15px; + border-bottom: 1px solid var(--hairline-color); +} + +#changelist-filter ul:last-child { + border-bottom: none; +} + +#changelist-filter li { + list-style-type: none; + margin-left: 0; + padding-left: 0; +} + +#changelist-filter a { + display: block; + color: var(--body-quiet-color); + word-break: break-word; +} + +#changelist-filter li.selected { + border-left: 5px solid var(--hairline-color); + padding-left: 10px; + margin-left: -15px; +} + +#changelist-filter li.selected a { + color: var(--link-selected-fg); +} + +#changelist-filter a:focus, #changelist-filter a:hover, +#changelist-filter li.selected a:focus, +#changelist-filter li.selected a:hover { + color: var(--link-hover-color); +} + +#changelist-filter #changelist-filter-clear a { + font-size: 0.8125rem; + padding-bottom: 10px; + border-bottom: 1px solid var(--hairline-color); +} + +/* DATE DRILLDOWN */ + +.change-list .toplinks { + display: flex; + padding-bottom: 5px; + flex-wrap: wrap; + gap: 3px 17px; + font-weight: bold; +} + +.change-list .toplinks a { + font-size: 0.8125rem; +} + +.change-list .toplinks .date-back { + color: var(--body-quiet-color); +} + +.change-list .toplinks .date-back:focus, +.change-list .toplinks .date-back:hover { + color: var(--link-hover-color); +} + +/* ACTIONS */ + +.filtered .actions { + border-right: none; +} + +#changelist table input { + margin: 0; + vertical-align: baseline; +} + +/* Once the :has() pseudo-class is supported by all browsers, the tr.selected + selector and the JS adding the class can be removed. */ +#changelist tbody tr.selected { + background-color: var(--selected-row); +} + +#changelist tbody tr:has(.action-select:checked) { + background-color: var(--selected-row); +} + +#changelist .actions { + padding: 10px; + background: var(--body-bg); + border-top: none; + border-bottom: none; + line-height: 1.5rem; + color: var(--body-quiet-color); + width: 100%; +} + +#changelist .actions span.all, +#changelist .actions span.action-counter, +#changelist .actions span.clear, +#changelist .actions span.question { + font-size: 0.8125rem; + margin: 0 0.5em; +} + +#changelist .actions:last-child { + border-bottom: none; +} + +#changelist .actions select { + vertical-align: top; + height: 1.5rem; + color: var(--body-fg); + border: 1px solid var(--border-color); + border-radius: 4px; + font-size: 0.875rem; + padding: 0 0 0 4px; + margin: 0; + margin-left: 10px; +} + +#changelist .actions select:focus { + border-color: var(--body-quiet-color); +} + +#changelist .actions label { + display: inline-block; + vertical-align: middle; + font-size: 0.8125rem; +} + +#changelist .actions .button { + font-size: 0.8125rem; + border: 1px solid var(--border-color); + border-radius: 4px; + background: var(--body-bg); + box-shadow: 0 -15px 20px -10px rgba(0, 0, 0, 0.15) inset; + cursor: pointer; + height: 1.5rem; + line-height: 1; + padding: 4px 8px; + margin: 0; + color: var(--body-fg); +} + +#changelist .actions .button:focus, #changelist .actions .button:hover { + border-color: var(--body-quiet-color); +} diff --git a/static/css/dark_mode.css b/static/css/dark_mode.css new file mode 100644 index 0000000..6d08233 --- /dev/null +++ b/static/css/dark_mode.css @@ -0,0 +1,137 @@ +@media (prefers-color-scheme: dark) { + :root { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; + } + } + + +html[data-theme="dark"] { + --primary: #264b5d; + --primary-fg: #f7f7f7; + + --body-fg: #eeeeee; + --body-bg: #121212; + --body-quiet-color: #e0e0e0; + --body-loud-color: #ffffff; + + --breadcrumbs-link-fg: #e0e0e0; + --breadcrumbs-bg: var(--primary); + + --link-fg: #81d4fa; + --link-hover-color: #4ac1f7; + --link-selected-fg: #6f94c6; + + --hairline-color: #272727; + --border-color: #353535; + + --error-fg: #e35f5f; + --message-success-bg: #006b1b; + --message-warning-bg: #583305; + --message-error-bg: #570808; + + --darkened-bg: #212121; + --selected-bg: #1b1b1b; + --selected-row: #00363a; + + --close-button-bg: #333333; + --close-button-hover-bg: #666666; +} + +/* THEME SWITCH */ +.theme-toggle { + cursor: pointer; + border: none; + padding: 0; + background: transparent; + vertical-align: middle; + margin-inline-start: 5px; + margin-top: -1px; +} + +.theme-toggle svg { + vertical-align: middle; + height: 1rem; + width: 1rem; + display: none; +} + +/* +Fully hide screen reader text so we only show the one matching the current +theme. +*/ +.theme-toggle .visually-hidden { + display: none; +} + +html[data-theme="auto"] .theme-toggle .theme-label-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle .theme-label-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle .theme-label-when-light { + display: block; +} + +/* ICONS */ +.theme-toggle svg.theme-icon-when-auto, +.theme-toggle svg.theme-icon-when-dark, +.theme-toggle svg.theme-icon-when-light { + fill: var(--header-link-color); + color: var(--header-bg); +} + +html[data-theme="auto"] .theme-toggle svg.theme-icon-when-auto { + display: block; +} + +html[data-theme="dark"] .theme-toggle svg.theme-icon-when-dark { + display: block; +} + +html[data-theme="light"] .theme-toggle svg.theme-icon-when-light { + display: block; +} + +.visually-hidden { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + overflow: hidden; + clip: rect(0,0,0,0); + white-space: nowrap; + border: 0; + color: var(--body-fg); + background-color: var(--body-bg); +} diff --git a/static/css/dashboard.css b/static/css/dashboard.css new file mode 100644 index 0000000..242b81a --- /dev/null +++ b/static/css/dashboard.css @@ -0,0 +1,29 @@ +/* DASHBOARD */ +.dashboard td, .dashboard th { + word-break: break-word; +} + +.dashboard .module table th { + width: 100%; +} + +.dashboard .module table td { + white-space: nowrap; +} + +.dashboard .module table td a { + display: block; + padding-right: .6em; +} + +/* RECENT ACTIONS MODULE */ + +.module ul.actionlist { + margin-left: 0; +} + +ul.actionlist li { + list-style-type: none; + overflow: hidden; + text-overflow: ellipsis; +} diff --git a/static/css/forms.css b/static/css/forms.css new file mode 100644 index 0000000..9a8dad0 --- /dev/null +++ b/static/css/forms.css @@ -0,0 +1,534 @@ +@import url('widgets.css'); + +/* FORM ROWS */ + +.form-row { + overflow: hidden; + padding: 10px; + font-size: 0.8125rem; + border-bottom: 1px solid var(--hairline-color); +} + +.form-row img, .form-row input { + vertical-align: middle; +} + +.form-row label input[type="checkbox"] { + margin-top: 0; + vertical-align: 0; +} + +form .form-row p { + padding-left: 0; +} + +.flex-container { + display: flex; +} + +.form-multiline { + flex-wrap: wrap; +} + +.form-multiline > div { + padding-bottom: 10px; +} + +/* FORM LABELS */ + +label { + font-weight: normal; + color: var(--body-quiet-color); + font-size: 0.8125rem; +} + +.required label, label.required { + font-weight: bold; + color: var(--body-fg); +} + +/* RADIO BUTTONS */ + +form div.radiolist div { + padding-right: 7px; +} + +form div.radiolist.inline div { + display: inline-block; +} + +form div.radiolist label { + width: auto; +} + +form div.radiolist input[type="radio"] { + margin: -2px 4px 0 0; + padding: 0; +} + +form ul.inline { + margin-left: 0; + padding: 0; +} + +form ul.inline li { + float: left; + padding-right: 7px; +} + +/* ALIGNED FIELDSETS */ + +.aligned label { + display: block; + padding: 4px 10px 0 0; + min-width: 160px; + width: 160px; + word-wrap: break-word; + line-height: 1; +} + +.aligned label:not(.vCheckboxLabel):after { + content: ''; + display: inline-block; + vertical-align: middle; + height: 1.625rem; +} + +.aligned label + p, .aligned .checkbox-row + div.help, .aligned label + div.readonly { + padding: 6px 0; + margin-top: 0; + margin-bottom: 0; + margin-left: 0; + overflow-wrap: break-word; +} + +.aligned ul label { + display: inline; + float: none; + width: auto; +} + +.aligned .form-row input { + margin-bottom: 0; +} + +.colMS .aligned .vLargeTextField, .colMS .aligned .vXMLLargeTextField { + width: 350px; +} + +form .aligned ul { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned div.radiolist { + display: inline-block; + margin: 0; + padding: 0; +} + +form .aligned p.help, +form .aligned div.help { + margin-top: 0; + margin-left: 160px; + padding-left: 10px; +} + +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-left: 0; + padding-left: 0; + font-weight: normal; +} + +form .aligned p.help:last-child, +form .aligned div.help:last-child { + margin-bottom: 0; + padding-bottom: 0; +} + +form .aligned input + p.help, +form .aligned textarea + p.help, +form .aligned select + p.help, +form .aligned input + div.help, +form .aligned textarea + div.help, +form .aligned select + div.help { + margin-left: 160px; + padding-left: 10px; +} + +form .aligned ul li { + list-style: none; +} + +form .aligned table p { + margin-left: 0; + padding-left: 0; +} + +.aligned .vCheckboxLabel { + float: none; + width: auto; + display: inline-block; + vertical-align: -3px; + padding: 0 0 5px 5px; +} + +.aligned .vCheckboxLabel + p.help, +.aligned .vCheckboxLabel + div.help { + margin-top: -4px; +} + +.colM .aligned .vLargeTextField, .colM .aligned .vXMLLargeTextField { + width: 610px; +} + +fieldset .fieldBox { + margin-right: 20px; +} + +/* WIDE FIELDSETS */ + +.wide label { + width: 200px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-left: 200px; +} + +form .wide p.help, +form .wide div.help { + padding-left: 50px; +} + +form div.help ul { + padding-left: 0; + margin-left: 0; +} + +.colM fieldset.wide .vLargeTextField, .colM fieldset.wide .vXMLLargeTextField { + width: 450px; +} + +/* COLLAPSED FIELDSETS */ + +fieldset.collapsed * { + display: none; +} + +fieldset.collapsed h2, fieldset.collapsed { + display: block; +} + +fieldset.collapsed { + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; +} + +fieldset.collapsed h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +fieldset .collapse-toggle { + color: var(--header-link-color); +} + +fieldset.collapsed .collapse-toggle { + background: transparent; + display: inline; + color: var(--link-fg); +} + +/* MONOSPACE TEXTAREAS */ + +fieldset.monospace textarea { + font-family: var(--font-family-monospace); +} + +/* SUBMIT ROW */ + +.submit-row { + padding: 12px 14px 12px; + margin: 0 0 20px; + background: var(--darkened-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + display: flex; + gap: 10px; + flex-wrap: wrap; +} + +body.popup .submit-row { + overflow: auto; +} + +.submit-row input { + height: 2.1875rem; + line-height: 0.9375rem; +} + +.submit-row input, .submit-row a { + margin: 0; +} + +.submit-row input.default { + text-transform: uppercase; +} + +.submit-row a.deletelink { + margin-left: auto; +} + +.submit-row a.deletelink { + display: block; + background: var(--delete-button-bg); + border-radius: 4px; + padding: 0.625rem 0.9375rem; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.closelink { + display: inline-block; + background: var(--close-button-bg); + border-radius: 4px; + padding: 10px 15px; + height: 0.9375rem; + line-height: 0.9375rem; + color: var(--button-fg); +} + +.submit-row a.deletelink:focus, +.submit-row a.deletelink:hover, +.submit-row a.deletelink:active { + background: var(--delete-button-hover-bg); + text-decoration: none; +} + +.submit-row a.closelink:focus, +.submit-row a.closelink:hover, +.submit-row a.closelink:active { + background: var(--close-button-hover-bg); + text-decoration: none; +} + +/* CUSTOM FORM FIELDS */ + +.vSelectMultipleField { + vertical-align: top; +} + +.vCheckboxField { + border: none; +} + +.vDateField, .vTimeField { + margin-right: 2px; + margin-bottom: 4px; +} + +.vDateField { + min-width: 6.85em; +} + +.vTimeField { + min-width: 4.7em; +} + +.vURLField { + width: 30em; +} + +.vLargeTextField, .vXMLLargeTextField { + width: 48em; +} + +.flatpages-flatpage #id_content { + height: 40.2em; +} + +.module table .vPositiveSmallIntegerField { + width: 2.2em; +} + +.vIntegerField { + width: 5em; +} + +.vBigIntegerField { + width: 10em; +} + +.vForeignKeyRawIdAdminField { + width: 5em; +} + +.vTextField, .vUUIDField { + width: 20em; +} + +/* INLINES */ + +.inline-group { + padding: 0; + margin: 0 0 30px; +} + +.inline-group thead th { + padding: 8px 10px; +} + +.inline-group .aligned label { + width: 160px; +} + +.inline-related { + position: relative; +} + +.inline-related h3 { + margin: 0; + color: var(--body-quiet-color); + padding: 5px; + font-size: 0.8125rem; + background: var(--darkened-bg); + border-top: 1px solid var(--hairline-color); + border-bottom: 1px solid var(--hairline-color); +} + +.inline-related h3 span.delete { + float: right; +} + +.inline-related h3 span.delete label { + margin-left: 2px; + font-size: 0.6875rem; +} + +.inline-related fieldset { + margin: 0; + background: var(--body-bg); + border: none; + width: 100%; +} + +.inline-related fieldset.module h3 { + margin: 0; + padding: 2px 5px 3px 5px; + font-size: 0.6875rem; + text-align: left; + font-weight: bold; + background: #bcd; + color: var(--body-bg); +} + +.inline-group .tabular fieldset.module { + border: none; +} + +.inline-related.tabular fieldset.module table { + width: 100%; + overflow-x: scroll; +} + +.last-related fieldset { + border: none; +} + +.inline-group .tabular tr.has_original td { + padding-top: 2em; +} + +.inline-group .tabular tr td.original { + padding: 2px 0 0 0; + width: 0; + _position: relative; +} + +.inline-group .tabular th.original { + width: 0px; + padding: 0; +} + +.inline-group .tabular td.original p { + position: absolute; + left: 0; + height: 1.1em; + padding: 2px 9px; + overflow: hidden; + font-size: 0.5625rem; + font-weight: bold; + color: var(--body-quiet-color); + _width: 700px; +} + +.inline-group ul.tools { + padding: 0; + margin: 0; + list-style: none; +} + +.inline-group ul.tools li { + display: inline; + padding: 0 5px; +} + +.inline-group div.add-row, +.inline-group .tabular tr.add-row td { + color: var(--body-quiet-color); + background: var(--darkened-bg); + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group .tabular tr.add-row td { + padding: 8px 10px; + border-bottom: 1px solid var(--hairline-color); +} + +.inline-group ul.tools a.add, +.inline-group div.add-row a, +.inline-group .tabular tr.add-row td a { + background: url(../img/icon-addlink.svg) 0 1px no-repeat; + padding-left: 16px; + font-size: 0.75rem; +} + +.empty-form { + display: none; +} + +/* RELATED FIELD ADD ONE / LOOKUP */ + +.related-lookup { + margin-left: 5px; + display: inline-block; + vertical-align: middle; + background-repeat: no-repeat; + background-size: 14px; +} + +.related-lookup { + width: 1rem; + height: 1rem; + background-image: url(../img/search.svg); +} + +form .related-widget-wrapper ul { + display: inline-block; + margin-left: 0; + padding-left: 0; +} + +.clearable-file-input input { + margin-top: 0; +} diff --git a/static/css/login.css b/static/css/login.css new file mode 100644 index 0000000..389772f --- /dev/null +++ b/static/css/login.css @@ -0,0 +1,61 @@ +/* LOGIN FORM */ + +.login { + background: var(--darkened-bg); + height: auto; +} + +.login #header { + height: auto; + padding: 15px 16px; + justify-content: center; +} + +.login #header h1 { + font-size: 1.125rem; + margin: 0; +} + +.login #header h1 a { + color: var(--header-link-color); +} + +.login #content { + padding: 20px 20px 0; +} + +.login #container { + background: var(--body-bg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + overflow: hidden; + width: 28em; + min-width: 300px; + margin: 100px auto; + height: auto; +} + +.login .form-row { + padding: 4px 0; +} + +.login .form-row label { + display: block; + line-height: 2em; +} + +.login .form-row #id_username, .login .form-row #id_password { + padding: 8px; + width: 100%; + box-sizing: border-box; +} + +.login .submit-row { + padding: 1em 0 0 0; + margin: 0; + text-align: center; +} + +.login .password-reset-link { + text-align: center; +} diff --git a/static/css/nav_sidebar.css b/static/css/nav_sidebar.css new file mode 100644 index 0000000..f76e6ce --- /dev/null +++ b/static/css/nav_sidebar.css @@ -0,0 +1,144 @@ +.sticky { + position: sticky; + top: 0; + max-height: 100vh; +} + +.toggle-nav-sidebar { + z-index: 20; + left: 0; + display: flex; + align-items: center; + justify-content: center; + flex: 0 0 23px; + width: 23px; + border: 0; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + cursor: pointer; + font-size: 1.25rem; + color: var(--link-fg); + padding: 0; +} + +[dir="rtl"] .toggle-nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; +} + +.toggle-nav-sidebar:hover, +.toggle-nav-sidebar:focus { + background-color: var(--darkened-bg); +} + +#nav-sidebar { + z-index: 15; + flex: 0 0 275px; + left: -276px; + margin-left: -276px; + border-top: 1px solid transparent; + border-right: 1px solid var(--hairline-color); + background-color: var(--body-bg); + overflow: auto; +} + +[dir="rtl"] #nav-sidebar { + border-left: 1px solid var(--hairline-color); + border-right: 0; + left: 0; + margin-left: 0; + right: -276px; + margin-right: -276px; +} + +.toggle-nav-sidebar::before { + content: '\00BB'; +} + +.main.shifted .toggle-nav-sidebar::before { + content: '\00AB'; +} + +.main > #nav-sidebar { + visibility: hidden; +} + +.main.shifted > #nav-sidebar { + margin-left: 0; + visibility: visible; +} + +[dir="rtl"] .main.shifted > #nav-sidebar { + margin-right: 0; +} + +#nav-sidebar .module th { + width: 100%; + overflow-wrap: anywhere; +} + +#nav-sidebar .module th, +#nav-sidebar .module caption { + padding-left: 16px; +} + +#nav-sidebar .module td { + white-space: nowrap; +} + +[dir="rtl"] #nav-sidebar .module th, +[dir="rtl"] #nav-sidebar .module caption { + padding-left: 8px; + padding-right: 16px; +} + +#nav-sidebar .current-app .section:link, +#nav-sidebar .current-app .section:visited { + color: var(--header-color); + font-weight: bold; +} + +#nav-sidebar .current-model { + background: var(--selected-row); +} + +.main > #nav-sidebar + .content { + max-width: calc(100% - 23px); +} + +.main.shifted > #nav-sidebar + .content { + max-width: calc(100% - 299px); +} + +@media (max-width: 767px) { + #nav-sidebar, #toggle-nav-sidebar { + display: none; + } + + .main > #nav-sidebar + .content, + .main.shifted > #nav-sidebar + .content { + max-width: 100%; + } +} + +#nav-filter { + width: 100%; + box-sizing: border-box; + padding: 2px 5px; + margin: 5px 0; + border: 1px solid var(--border-color); + background-color: var(--darkened-bg); + color: var(--body-fg); +} + +#nav-filter:focus { + border-color: var(--body-quiet-color); +} + +#nav-filter.no-results { + background: var(--message-error-bg); +} + +#nav-sidebar table { + width: 100%; +} diff --git a/static/css/profile.css b/static/css/profile.css new file mode 100644 index 0000000..2751d20 --- /dev/null +++ b/static/css/profile.css @@ -0,0 +1,86 @@ +.profile-grid { + display: grid; + grid-template-columns: 2fr 1fr; + gap: 2rem; + margin: 2rem 0; +} + +.profile-header { + background-color: #1a1b2e; + border-radius: 8px; + padding: 1.5rem; + margin-bottom: 1.5rem; +} + +.level-badge { + background: linear-gradient(135deg, #7e3ace, #6425c9); + color: #ffffff; + border-radius: 50%; + padding: 0.5rem; +} + +.profile-info .username { + color: #8a2be2; + font-size: 1.8rem; +} + +.profile-bio { + background-color: #1a1b2e; + border-radius: 8px; + padding: 1.5rem; +} + +.stats-card, .achievements-card { + background-color: #1a1b2e; + border-radius: 8px; + padding: 1.5rem; + margin-bottom: 1.5rem; +} + +.stat-item { + background-color: #242642; + border-radius: 6px; + padding: 1rem; + text-align: center; +} + +.stat-value { + color: #8a2be2; + font-size: 1.4rem; + font-weight: bold; +} + +.badge-item { + background-color: #242642; + border-radius: 6px; + padding: 0.8rem; + transition: transform 0.2s; +} + +.badge-item:hover { + transform: translateY(-2px); + background-color: #2f325a; +} + +.profile-actions .btn-primary { + background-color: #8a2be2; + border: none; + color: white; + transition: background-color 0.2s; +} + +.profile-actions .btn-primary:hover { + background-color: #7e3ace; +} + +.profile-actions .btn-secondary { + background-color: #242642; + border: 1px solid #8a2be2; + color: #8a2be2; + transition: all 0.2s; +} + +.profile-actions .btn-secondary:hover { + background-color: #8a2be2; + color: white; +} diff --git a/static/css/responsive.css b/static/css/responsive.css new file mode 100644 index 0000000..1d0a188 --- /dev/null +++ b/static/css/responsive.css @@ -0,0 +1,999 @@ +/* Tablets */ + +input[type="submit"], button { + -webkit-appearance: none; + appearance: none; +} + +@media (max-width: 1024px) { + /* Basic */ + + html { + -webkit-text-size-adjust: 100%; + } + + td, th { + padding: 10px; + font-size: 0.875rem; + } + + .small { + font-size: 0.75rem; + } + + /* Layout */ + + #container { + min-width: 0; + } + + #content { + padding: 15px 20px 20px; + } + + div.breadcrumbs { + padding: 10px 30px; + } + + /* Header */ + + #header { + flex-direction: column; + padding: 15px 30px; + justify-content: flex-start; + } + + #branding h1 { + margin: 0 0 8px; + line-height: 1.2; + } + + #user-tools { + margin: 0; + font-weight: 400; + line-height: 1.85; + text-align: left; + } + + #user-tools a { + display: inline-block; + line-height: 1.4; + } + + /* Dashboard */ + + .dashboard #content { + width: auto; + } + + #content-related { + margin-right: -290px; + } + + .colSM #content-related { + margin-left: -290px; + } + + .colMS { + margin-right: 290px; + } + + .colSM { + margin-left: 290px; + } + + .dashboard .module table td a { + padding-right: 0; + } + + td .changelink, td .addlink { + font-size: 0.8125rem; + } + + /* Changelist */ + + #toolbar { + border: none; + padding: 15px; + } + + #changelist-search > div { + display: flex; + flex-wrap: nowrap; + max-width: 480px; + } + + #changelist-search label { + line-height: 1.375rem; + } + + #toolbar form #searchbar { + flex: 1 0 auto; + width: 0; + height: 1.375rem; + margin: 0 10px 0 6px; + } + + #toolbar form input[type=submit] { + flex: 0 1 auto; + } + + #changelist-search .quiet { + width: 0; + flex: 1 0 auto; + margin: 5px 0 0 25px; + } + + #changelist .actions { + display: flex; + flex-wrap: wrap; + padding: 15px 0; + } + + #changelist .actions label { + display: flex; + } + + #changelist .actions select { + background: var(--body-bg); + } + + #changelist .actions .button { + min-width: 48px; + margin: 0 10px; + } + + #changelist .actions span.all, + #changelist .actions span.clear, + #changelist .actions span.question, + #changelist .actions span.action-counter { + font-size: 0.6875rem; + margin: 0 10px 0 0; + } + + #changelist-filter { + flex-basis: 200px; + } + + .change-list .filtered .results, + .change-list .filtered .paginator, + .filtered #toolbar, + .filtered .actions, + + #changelist .paginator { + border-top-color: var(--hairline-color); /* XXX Is this used at all? */ + } + + #changelist .results + .paginator { + border-top: none; + } + + /* Forms */ + + label { + font-size: 0.875rem; + } + + .form-row input[type=text], + .form-row input[type=password], + .form-row input[type=email], + .form-row input[type=url], + .form-row input[type=tel], + .form-row input[type=number], + .form-row textarea, + .form-row select, + .form-row .vTextField { + box-sizing: border-box; + margin: 0; + padding: 6px 8px; + min-height: 2.25rem; + font-size: 0.875rem; + } + + .form-row select { + height: 2.25rem; + } + + .form-row select[multiple] { + height: auto; + min-height: 0; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 10px; + padding-top: 10px; + border-top: 1px solid var(--hairline-color); + } + + textarea { + max-width: 100%; + max-height: 120px; + } + + .aligned label { + padding-top: 6px; + } + + .aligned .related-lookup, + .aligned .datetimeshortcuts, + .aligned .related-lookup + strong { + align-self: center; + margin-left: 15px; + } + + form .aligned div.radiolist { + margin-left: 2px; + } + + .submit-row { + padding: 8px; + } + + .submit-row a.deletelink { + padding: 10px 7px; + } + + .button, input[type=submit], input[type=button], .submit-row input, a.button { + padding: 7px; + } + + /* Related widget */ + + .related-widget-wrapper { + float: none; + } + + .related-widget-wrapper-link + .selector { + max-width: calc(100% - 30px); + margin-right: 15px; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 10px; + } + + /* Selector */ + + .selector { + display: flex; + width: 100%; + } + + .selector .selector-filter { + display: flex; + align-items: center; + } + + .selector .selector-filter label { + margin: 0 8px 0 0; + } + + .selector .selector-filter input { + width: auto; + min-height: 0; + flex: 1 1; + } + + .selector-available, .selector-chosen { + width: auto; + flex: 1 1; + display: flex; + flex-direction: column; + } + + .selector select { + width: 100%; + flex: 1 0 auto; + margin-bottom: 5px; + } + + .selector ul.selector-chooser { + width: 26px; + height: 52px; + padding: 2px 0; + margin: auto 15px; + border-radius: 20px; + transform: translateY(-10px); + } + + .selector-add, .selector-remove { + width: 20px; + height: 20px; + background-size: 20px auto; + } + + .selector-add { + background-position: 0 -120px; + } + + .selector-remove { + background-position: 0 -80px; + } + + a.selector-chooseall, a.selector-clearall { + align-self: center; + } + + .stacked { + flex-direction: column; + max-width: 480px; + } + + .stacked > * { + flex: 0 1 auto; + } + + .stacked select { + margin-bottom: 0; + } + + .stacked .selector-available, .stacked .selector-chosen { + width: auto; + } + + .stacked ul.selector-chooser { + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto; + transform: none; + } + + .stacked .selector-chooser li { + padding: 3px; + } + + .stacked .selector-add, .stacked .selector-remove { + background-size: 20px auto; + } + + .stacked .selector-add { + background-position: 0 -40px; + } + + .stacked .active.selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -140px; + } + + .stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -60px; + } + + .stacked .selector-remove { + background-position: 0 0; + } + + .stacked .active.selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -100px; + } + + .stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -20px; + } + + .help-tooltip, .selector .help-icon { + display: none; + } + + .datetime input { + width: 50%; + max-width: 120px; + } + + .datetime span { + font-size: 0.8125rem; + } + + .datetime .timezonewarning { + display: block; + font-size: 0.6875rem; + color: var(--body-quiet-color); + } + + .datetimeshortcuts { + color: var(--border-color); /* XXX Redundant, .datetime span also sets #ccc */ + } + + .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + width: 75%; + } + + .inline-group { + overflow: auto; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 55px; + background-position: 30px 12px; + } + + ul.messagelist li.error { + background-position: 30px 12px; + } + + ul.messagelist li.warning { + background-position: 30px 14px; + } + + /* Login */ + + .login #header { + padding: 15px 20px; + } + + .login #branding h1 { + margin: 0; + } + + /* GIS */ + + div.olMap { + max-width: calc(100vw - 30px); + max-height: 300px; + } + + .olMap + .clear_features { + display: block; + margin-top: 10px; + } + + /* Docs */ + + .module table.xfull { + width: 100%; + } + + pre.literal-block { + overflow: auto; + } +} + +/* Mobile */ + +@media (max-width: 767px) { + /* Layout */ + + #header, #content, #footer { + padding: 15px; + } + + #footer:empty { + padding: 0; + } + + div.breadcrumbs { + padding: 10px 15px; + } + + /* Dashboard */ + + .colMS, .colSM { + margin: 0; + } + + #content-related, .colSM #content-related { + width: 100%; + margin: 0; + } + + #content-related .module { + margin-bottom: 0; + } + + #content-related .module h2 { + padding: 10px 15px; + font-size: 1rem; + } + + /* Changelist */ + + #changelist { + align-items: stretch; + flex-direction: column; + } + + #toolbar { + padding: 10px; + } + + #changelist-filter { + margin-left: 0; + } + + #changelist .actions label { + flex: 1 1; + } + + #changelist .actions select { + flex: 1 0; + width: 100%; + } + + #changelist .actions span { + flex: 1 0 100%; + } + + #changelist-filter { + position: static; + width: auto; + margin-top: 30px; + } + + .object-tools { + float: none; + margin: 0 0 15px; + padding: 0; + overflow: hidden; + } + + .object-tools li { + height: auto; + margin-left: 0; + } + + .object-tools li + li { + margin-left: 15px; + } + + /* Forms */ + + .form-row { + padding: 15px 0; + } + + .aligned .form-row, + .aligned .form-row > div { + max-width: 100vw; + } + + .aligned .form-row > div { + width: calc(100vw - 30px); + } + + .flex-container { + flex-flow: column; + } + + .flex-container.checkbox-row { + flex-flow: row; + } + + textarea { + max-width: none; + } + + .vURLField { + width: auto; + } + + fieldset .fieldBox + .fieldBox { + margin-top: 15px; + padding-top: 15px; + } + + fieldset.collapsed .form-row { + display: none; + } + + .aligned label { + width: 100%; + min-width: auto; + padding: 0 0 10px; + } + + .aligned label:after { + max-height: 0; + } + + .aligned .form-row input, + .aligned .form-row select, + .aligned .form-row textarea { + flex: 1 1 auto; + max-width: 100%; + } + + .aligned .checkbox-row input { + flex: 0 1 auto; + margin: 0; + } + + .aligned .vCheckboxLabel { + flex: 1 0; + padding: 1px 0 0 5px; + } + + .aligned label + p, + .aligned label + div.help, + .aligned label + div.readonly { + padding: 0; + margin-left: 0; + } + + .aligned p.file-upload { + font-size: 0.8125rem; + } + + span.clearable-file-input { + margin-left: 15px; + } + + span.clearable-file-input label { + font-size: 0.8125rem; + padding-bottom: 0; + } + + .aligned .timezonewarning { + flex: 1 0 100%; + margin-top: 5px; + } + + form .aligned .form-row div.help { + width: 100%; + margin: 5px 0 0; + padding: 0; + } + + form .aligned ul, + form .aligned ul.errorlist { + margin-left: 0; + padding-left: 0; + } + + form .aligned div.radiolist { + margin-top: 5px; + margin-right: 15px; + margin-bottom: -3px; + } + + form .aligned div.radiolist:not(.inline) div + div { + margin-top: 5px; + } + + /* Related widget */ + + .related-widget-wrapper { + width: 100%; + display: flex; + align-items: flex-start; + } + + .related-widget-wrapper .selector { + order: 1; + } + + .related-widget-wrapper > a { + order: 2; + } + + .related-widget-wrapper .radiolist ~ a { + align-self: flex-end; + } + + .related-widget-wrapper > select ~ a { + align-self: center; + } + + select + .related-widget-wrapper-link, + .related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 15px; + } + + /* Selector */ + + .selector { + flex-direction: column; + } + + .selector > * { + float: none; + } + + .selector-available, .selector-chosen { + margin-bottom: 0; + flex: 1 1 auto; + } + + .selector select { + max-height: 96px; + } + + .selector ul.selector-chooser { + display: block; + float: none; + width: 52px; + height: 26px; + padding: 0 2px; + margin: 15px auto 20px; + transform: none; + } + + .selector ul.selector-chooser li { + float: left; + } + + .selector-remove { + background-position: 0 0; + } + + .active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -20px; + } + + .selector-add { + background-position: 0 -40px; + } + + .active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -60px; + } + + /* Inlines */ + + .inline-group[data-inline-type="stacked"] .inline-related { + border: 1px solid var(--hairline-color); + border-radius: 4px; + margin-top: 15px; + overflow: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related > * { + box-sizing: border-box; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module { + padding: 0 10px; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row { + border-top: 1px solid var(--hairline-color); + border-bottom: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related .module .form-row:first-child { + border-top: none; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 { + padding: 10px; + border-top-width: 0; + border-bottom-width: 2px; + display: flex; + flex-wrap: wrap; + align-items: center; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 .inline_label { + margin-right: auto; + } + + .inline-group[data-inline-type="stacked"] .inline-related h3 span.delete { + float: none; + flex: 1 1 100%; + margin-top: 5px; + } + + .inline-group[data-inline-type="stacked"] .aligned .form-row > div:not([class]) { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] .aligned label { + width: 100%; + } + + .inline-group[data-inline-type="stacked"] div.add-row { + margin-top: 15px; + border: 1px solid var(--hairline-color); + border-radius: 4px; + } + + .inline-group div.add-row, + .inline-group .tabular tr.add-row td { + padding: 0; + } + + .inline-group div.add-row a, + .inline-group .tabular tr.add-row td a { + display: block; + padding: 8px 10px 8px 26px; + background-position: 8px 9px; + } + + /* Submit row */ + + .submit-row { + padding: 10px; + margin: 0 0 15px; + flex-direction: column; + gap: 8px; + } + + .submit-row input, .submit-row input.default, .submit-row a { + text-align: center; + } + + .submit-row a.closelink { + padding: 10px 0; + text-align: center; + } + + .submit-row a.deletelink { + margin: 0; + } + + /* Messages */ + + ul.messagelist li { + padding-left: 40px; + background-position: 15px 12px; + } + + ul.messagelist li.error { + background-position: 15px 12px; + } + + ul.messagelist li.warning { + background-position: 15px 14px; + } + + /* Paginator */ + + .paginator .this-page, .paginator a:link, .paginator a:visited { + padding: 4px 10px; + } + + /* Login */ + + body.login { + padding: 0 15px; + } + + .login #container { + width: auto; + max-width: 480px; + margin: 50px auto; + } + + .login #header, + .login #content { + padding: 15px; + } + + .login #content-main { + float: none; + } + + .login .form-row { + padding: 0; + } + + .login .form-row + .form-row { + margin-top: 15px; + } + + .login .form-row label { + margin: 0 0 5px; + line-height: 1.2; + } + + .login .submit-row { + padding: 15px 0 0; + } + + .login br { + display: none; + } + + .login .submit-row input { + margin: 0; + text-transform: uppercase; + } + + .errornote { + margin: 0 0 20px; + padding: 8px 12px; + font-size: 0.8125rem; + } + + /* Calendar and clock */ + + .calendarbox, .clockbox { + position: fixed !important; + top: 50% !important; + left: 50% !important; + transform: translate(-50%, -50%); + margin: 0; + border: none; + overflow: visible; + } + + .calendarbox:before, .clockbox:before { + content: ''; + position: fixed; + top: 50%; + left: 50%; + width: 100vw; + height: 100vh; + background: rgba(0, 0, 0, 0.75); + transform: translate(-50%, -50%); + } + + .calendarbox > *, .clockbox > * { + position: relative; + z-index: 1; + } + + .calendarbox > div:first-child { + z-index: 2; + } + + .calendarbox .calendar, .clockbox h2 { + border-radius: 4px 4px 0 0; + overflow: hidden; + } + + .calendarbox .calendar-cancel, .clockbox .calendar-cancel { + border-radius: 0 0 4px 4px; + overflow: hidden; + } + + .calendar-shortcuts { + padding: 10px 0; + font-size: 0.75rem; + line-height: 0.75rem; + } + + .calendar-shortcuts a { + margin: 0 4px; + } + + .timelist a { + background: var(--body-bg); + padding: 4px; + } + + .calendar-cancel { + padding: 8px 10px; + } + + .clockbox h2 { + padding: 8px 15px; + } + + .calendar caption { + padding: 10px; + } + + .calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + z-index: 1; + top: 10px; + } + + /* History */ + + table#change-history tbody th, table#change-history tbody td { + font-size: 0.8125rem; + word-break: break-word; + } + + table#change-history tbody th { + width: auto; + } + + /* Docs */ + + table.model tbody th, table.model tbody td { + font-size: 0.8125rem; + word-break: break-word; + } +} diff --git a/static/css/responsive_rtl.css b/static/css/responsive_rtl.css new file mode 100644 index 0000000..31dc8ff --- /dev/null +++ b/static/css/responsive_rtl.css @@ -0,0 +1,84 @@ +/* TABLETS */ + +@media (max-width: 1024px) { + [dir="rtl"] .colMS { + margin-right: 0; + } + + [dir="rtl"] #user-tools { + text-align: right; + } + + [dir="rtl"] #changelist .actions label { + padding-left: 10px; + padding-right: 0; + } + + [dir="rtl"] #changelist .actions select { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .change-list .filtered .results, + [dir="rtl"] .change-list .filtered .paginator, + [dir="rtl"] .filtered #toolbar, + [dir="rtl"] .filtered div.xfull, + [dir="rtl"] .filtered .actions, + [dir="rtl"] #changelist-filter { + margin-left: 0; + } + + [dir="rtl"] .inline-group ul.tools a.add, + [dir="rtl"] .inline-group div.add-row a, + [dir="rtl"] .inline-group .tabular tr.add-row td a { + padding: 8px 26px 8px 10px; + background-position: calc(100% - 8px) 9px; + } + + [dir="rtl"] .related-widget-wrapper-link + .selector { + margin-right: 0; + margin-left: 15px; + } + + [dir="rtl"] .selector .selector-filter label { + margin-right: 0; + margin-left: 8px; + } + + [dir="rtl"] .object-tools li { + float: right; + } + + [dir="rtl"] .object-tools li + li { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .dashboard .module table td a { + padding-left: 0; + padding-right: 16px; + } +} + +/* MOBILE */ + +@media (max-width: 767px) { + [dir="rtl"] .aligned .related-lookup, + [dir="rtl"] .aligned .datetimeshortcuts { + margin-left: 0; + margin-right: 15px; + } + + [dir="rtl"] .aligned ul, + [dir="rtl"] form .aligned ul.errorlist { + margin-right: 0; + } + + [dir="rtl"] #changelist-filter { + margin-left: 0; + margin-right: 0; + } + [dir="rtl"] .aligned .vCheckboxLabel { + padding: 1px 5px 0 0; + } +} diff --git a/static/css/rtl.css b/static/css/rtl.css new file mode 100644 index 0000000..c349a93 --- /dev/null +++ b/static/css/rtl.css @@ -0,0 +1,298 @@ +/* GLOBAL */ + +th { + text-align: right; +} + +.module h2, .module caption { + text-align: right; +} + +.module ul, .module ol { + margin-left: 0; + margin-right: 1.5em; +} + +.viewlink, .addlink, .changelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.deletelink { + padding-left: 0; + padding-right: 16px; + background-position: 100% 1px; +} + +.object-tools { + float: left; +} + +thead th:first-child, +tfoot td:first-child { + border-left: none; +} + +/* LAYOUT */ + +#user-tools { + right: auto; + left: 0; + text-align: left; +} + +div.breadcrumbs { + text-align: right; +} + +#content-main { + float: right; +} + +#content-related { + float: left; + margin-left: -300px; + margin-right: auto; +} + +.colMS { + margin-left: 300px; + margin-right: 0; +} + +/* SORTABLE TABLES */ + +table thead th.sorted .sortoptions { + float: left; +} + +thead th.sorted .text { + padding-right: 0; + padding-left: 42px; +} + +/* dashboard styles */ + +.dashboard .module table td a { + padding-left: .6em; + padding-right: 16px; +} + +/* changelists styles */ + +.change-list .filtered table { + border-left: none; + border-right: 0px none; +} + +#changelist-filter { + border-left: none; + border-right: none; + margin-left: 0; + margin-right: 30px; +} + +#changelist-filter li.selected { + border-left: none; + padding-left: 10px; + margin-left: 0; + border-right: 5px solid var(--hairline-color); + padding-right: 10px; + margin-right: -15px; +} + +#changelist table tbody td:first-child, #changelist table tbody th:first-child { + border-right: none; + border-left: none; +} + +.paginator .end { + margin-left: 6px; + margin-right: 0; +} + +.paginator input { + margin-left: 0; + margin-right: auto; +} + +/* FORMS */ + +.aligned label { + padding: 0 0 3px 1em; +} + +.submit-row a.deletelink { + margin-left: 0; + margin-right: auto; +} + +.vDateField, .vTimeField { + margin-left: 2px; +} + +.aligned .form-row input { + margin-left: 5px; +} + +form .aligned ul { + margin-right: 163px; + padding-right: 10px; + margin-left: 0; + padding-left: 0; +} + +form ul.inline li { + float: right; + padding-right: 0; + padding-left: 7px; +} + +form .aligned p.help, +form .aligned div.help { + margin-right: 160px; + padding-right: 10px; +} + +form div.help ul, +form .aligned .checkbox-row + .help, +form .aligned p.date div.help.timezonewarning, +form .aligned p.datetime div.help.timezonewarning, +form .aligned p.time div.help.timezonewarning { + margin-right: 0; + padding-right: 0; +} + +form .wide p.help, form .wide div.help { + padding-left: 0; + padding-right: 50px; +} + +form .wide p, +form .wide ul.errorlist, +form .wide input + p.help, +form .wide input + div.help { + margin-right: 200px; + margin-left: 0px; +} + +.submit-row { + text-align: right; +} + +fieldset .fieldBox { + margin-left: 20px; + margin-right: 0; +} + +.errorlist li { + background-position: 100% 12px; + padding: 0; +} + +.errornote { + background-position: 100% 12px; + padding: 10px 12px; +} + +/* WIDGETS */ + +.calendarnav-previous { + top: 0; + left: auto; + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -45px; +} + +.calendarnav-next { + top: 0; + right: auto; + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -15px; +} + +.calendar caption, .calendarbox h2 { + text-align: center; +} + +.selector { + float: right; +} + +.selector .selector-filter { + text-align: right; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -80px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -112px; +} + +a.selector-chooseall { + background: url(../img/selector-icons.svg) right -128px no-repeat; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -144px; +} + +a.selector-clearall { + background: url(../img/selector-icons.svg) 0 -160px no-repeat; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -176px; +} + +.inline-deletelink { + float: left; +} + +form .form-row p.datetime { + overflow: hidden; +} + +.related-widget-wrapper { + float: right; +} + +/* MISC */ + +.inline-related h2, .inline-group h2 { + text-align: right +} + +.inline-related h3 span.delete { + padding-right: 20px; + padding-left: inherit; + left: 10px; + right: inherit; + float:left; +} + +.inline-related h3 span.delete label { + margin-left: inherit; + margin-right: 2px; +} diff --git a/static/css/vendor/select2/LICENSE-SELECT2.md b/static/css/vendor/select2/LICENSE-SELECT2.md new file mode 100644 index 0000000..8cb8a2b --- /dev/null +++ b/static/css/vendor/select2/LICENSE-SELECT2.md @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2012-2017 Kevin Brown, Igor Vaynberg, and Select2 contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/static/css/vendor/select2/select2.css b/static/css/vendor/select2/select2.css new file mode 100644 index 0000000..750b320 --- /dev/null +++ b/static/css/vendor/select2/select2.css @@ -0,0 +1,481 @@ +.select2-container { + box-sizing: border-box; + display: inline-block; + margin: 0; + position: relative; + vertical-align: middle; } + .select2-container .select2-selection--single { + box-sizing: border-box; + cursor: pointer; + display: block; + height: 28px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--single .select2-selection__rendered { + display: block; + padding-left: 8px; + padding-right: 20px; + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-selection--single .select2-selection__clear { + position: relative; } + .select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered { + padding-right: 8px; + padding-left: 20px; } + .select2-container .select2-selection--multiple { + box-sizing: border-box; + cursor: pointer; + display: block; + min-height: 32px; + user-select: none; + -webkit-user-select: none; } + .select2-container .select2-selection--multiple .select2-selection__rendered { + display: inline-block; + overflow: hidden; + padding-left: 8px; + text-overflow: ellipsis; + white-space: nowrap; } + .select2-container .select2-search--inline { + float: left; } + .select2-container .select2-search--inline .select2-search__field { + box-sizing: border-box; + border: none; + font-size: 100%; + margin-top: 5px; + padding: 0; } + .select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + +.select2-dropdown { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + box-sizing: border-box; + display: block; + position: absolute; + left: -100000px; + width: 100%; + z-index: 1051; } + +.select2-results { + display: block; } + +.select2-results__options { + list-style: none; + margin: 0; + padding: 0; } + +.select2-results__option { + padding: 6px; + user-select: none; + -webkit-user-select: none; } + .select2-results__option[aria-selected] { + cursor: pointer; } + +.select2-container--open .select2-dropdown { + left: 0; } + +.select2-container--open .select2-dropdown--above { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--open .select2-dropdown--below { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-search--dropdown { + display: block; + padding: 4px; } + .select2-search--dropdown .select2-search__field { + padding: 4px; + width: 100%; + box-sizing: border-box; } + .select2-search--dropdown .select2-search__field::-webkit-search-cancel-button { + -webkit-appearance: none; } + .select2-search--dropdown.select2-search--hide { + display: none; } + +.select2-close-mask { + border: 0; + margin: 0; + padding: 0; + display: block; + position: fixed; + left: 0; + top: 0; + min-height: 100%; + min-width: 100%; + height: auto; + width: auto; + opacity: 0; + z-index: 99; + background-color: #fff; + filter: alpha(opacity=0); } + +.select2-hidden-accessible { + border: 0 !important; + clip: rect(0 0 0 0) !important; + -webkit-clip-path: inset(50%) !important; + clip-path: inset(50%) !important; + height: 1px !important; + overflow: hidden !important; + padding: 0 !important; + position: absolute !important; + width: 1px !important; + white-space: nowrap !important; } + +.select2-container--default .select2-selection--single { + background-color: #fff; + border: 1px solid #aaa; + border-radius: 4px; } + .select2-container--default .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--default .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; } + .select2-container--default .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--default .select2-selection--single .select2-selection__arrow { + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; } + .select2-container--default .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow { + left: 1px; + right: auto; } + +.select2-container--default.select2-container--disabled .select2-selection--single { + background-color: #eee; + cursor: default; } + .select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear { + display: none; } + +.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--default .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered { + box-sizing: border-box; + list-style: none; + margin: 0; + padding: 0 5px; + width: 100%; } + .select2-container--default .select2-selection--multiple .select2-selection__rendered li { + list-style: none; } + .select2-container--default .select2-selection--multiple .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-top: 5px; + margin-right: 10px; + padding: 1px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove { + color: #999; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #333; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice, .select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline { + float: right; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + margin-left: 5px; + margin-right: auto; } + +.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--default.select2-container--focus .select2-selection--multiple { + border: solid black 1px; + outline: 0; } + +.select2-container--default.select2-container--disabled .select2-selection--multiple { + background-color: #eee; + cursor: default; } + +.select2-container--default.select2-container--disabled .select2-selection__choice__remove { + display: none; } + +.select2-container--default.select2-container--open.select2-container--above .select2-selection--single, .select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple { + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--default.select2-container--open.select2-container--below .select2-selection--single, .select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--default .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; } + +.select2-container--default .select2-search--inline .select2-search__field { + background: transparent; + border: none; + outline: 0; + box-shadow: none; + -webkit-appearance: textfield; } + +.select2-container--default .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--default .select2-results__option[role=group] { + padding: 0; } + +.select2-container--default .select2-results__option[aria-disabled=true] { + color: #999; } + +.select2-container--default .select2-results__option[aria-selected=true] { + background-color: #ddd; } + +.select2-container--default .select2-results__option .select2-results__option { + padding-left: 1em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__group { + padding-left: 0; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option { + margin-left: -1em; + padding-left: 2em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -2em; + padding-left: 3em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -3em; + padding-left: 4em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -4em; + padding-left: 5em; } + .select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option { + margin-left: -5em; + padding-left: 6em; } + +.select2-container--default .select2-results__option--highlighted[aria-selected] { + background-color: #5897fb; + color: white; } + +.select2-container--default .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic .select2-selection--single { + background-color: #f7f7f7; + border: 1px solid #aaa; + border-radius: 4px; + outline: 0; + background-image: -webkit-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: -o-linear-gradient(top, white 50%, #eeeeee 100%); + background-image: linear-gradient(to bottom, white 50%, #eeeeee 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + .select2-container--classic .select2-selection--single:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--single .select2-selection__rendered { + color: #444; + line-height: 28px; } + .select2-container--classic .select2-selection--single .select2-selection__clear { + cursor: pointer; + float: right; + font-weight: bold; + margin-right: 10px; } + .select2-container--classic .select2-selection--single .select2-selection__placeholder { + color: #999; } + .select2-container--classic .select2-selection--single .select2-selection__arrow { + background-color: #ddd; + border: none; + border-left: 1px solid #aaa; + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + height: 26px; + position: absolute; + top: 1px; + right: 1px; + width: 20px; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, #cccccc 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, #cccccc 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0); } + .select2-container--classic .select2-selection--single .select2-selection__arrow b { + border-color: #888 transparent transparent transparent; + border-style: solid; + border-width: 5px 4px 0 4px; + height: 0; + left: 50%; + margin-left: -4px; + margin-top: -2px; + position: absolute; + top: 50%; + width: 0; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear { + float: left; } + +.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow { + border: none; + border-right: 1px solid #aaa; + border-radius: 0; + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; + left: 1px; + right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--single { + border: 1px solid #5897fb; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow { + background: transparent; + border: none; } + .select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b { + border-color: transparent transparent #888 transparent; + border-width: 0 4px 5px 4px; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; + background-image: -webkit-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: -o-linear-gradient(top, white 0%, #eeeeee 50%); + background-image: linear-gradient(to bottom, white 0%, #eeeeee 50%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0); } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + background-image: -webkit-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: -o-linear-gradient(top, #eeeeee 50%, white 100%); + background-image: linear-gradient(to bottom, #eeeeee 50%, white 100%); + background-repeat: repeat-x; + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0); } + +.select2-container--classic .select2-selection--multiple { + background-color: white; + border: 1px solid #aaa; + border-radius: 4px; + cursor: text; + outline: 0; } + .select2-container--classic .select2-selection--multiple:focus { + border: 1px solid #5897fb; } + .select2-container--classic .select2-selection--multiple .select2-selection__rendered { + list-style: none; + margin: 0; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__clear { + display: none; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice { + background-color: #e4e4e4; + border: 1px solid #aaa; + border-radius: 4px; + cursor: default; + float: left; + margin-right: 5px; + margin-top: 5px; + padding: 0 5px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove { + color: #888; + cursor: pointer; + display: inline-block; + font-weight: bold; + margin-right: 2px; } + .select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover { + color: #555; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice { + float: right; + margin-left: 5px; + margin-right: auto; } + +.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove { + margin-left: 2px; + margin-right: auto; } + +.select2-container--classic.select2-container--open .select2-selection--multiple { + border: 1px solid #5897fb; } + +.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple { + border-top: none; + border-top-left-radius: 0; + border-top-right-radius: 0; } + +.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple { + border-bottom: none; + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; } + +.select2-container--classic .select2-search--dropdown .select2-search__field { + border: 1px solid #aaa; + outline: 0; } + +.select2-container--classic .select2-search--inline .select2-search__field { + outline: 0; + box-shadow: none; } + +.select2-container--classic .select2-dropdown { + background-color: white; + border: 1px solid transparent; } + +.select2-container--classic .select2-dropdown--above { + border-bottom: none; } + +.select2-container--classic .select2-dropdown--below { + border-top: none; } + +.select2-container--classic .select2-results > .select2-results__options { + max-height: 200px; + overflow-y: auto; } + +.select2-container--classic .select2-results__option[role=group] { + padding: 0; } + +.select2-container--classic .select2-results__option[aria-disabled=true] { + color: grey; } + +.select2-container--classic .select2-results__option--highlighted[aria-selected] { + background-color: #3875d7; + color: white; } + +.select2-container--classic .select2-results__group { + cursor: default; + display: block; + padding: 6px; } + +.select2-container--classic.select2-container--open .select2-dropdown { + border-color: #5897fb; } diff --git a/static/css/vendor/select2/select2.min.css b/static/css/vendor/select2/select2.min.css new file mode 100644 index 0000000..7c18ad5 --- /dev/null +++ b/static/css/vendor/select2/select2.min.css @@ -0,0 +1 @@ +.select2-container{box-sizing:border-box;display:inline-block;margin:0;position:relative;vertical-align:middle}.select2-container .select2-selection--single{box-sizing:border-box;cursor:pointer;display:block;height:28px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--single .select2-selection__rendered{display:block;padding-left:8px;padding-right:20px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-selection--single .select2-selection__clear{position:relative}.select2-container[dir="rtl"] .select2-selection--single .select2-selection__rendered{padding-right:8px;padding-left:20px}.select2-container .select2-selection--multiple{box-sizing:border-box;cursor:pointer;display:block;min-height:32px;user-select:none;-webkit-user-select:none}.select2-container .select2-selection--multiple .select2-selection__rendered{display:inline-block;overflow:hidden;padding-left:8px;text-overflow:ellipsis;white-space:nowrap}.select2-container .select2-search--inline{float:left}.select2-container .select2-search--inline .select2-search__field{box-sizing:border-box;border:none;font-size:100%;margin-top:5px;padding:0}.select2-container .select2-search--inline .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-dropdown{background-color:white;border:1px solid #aaa;border-radius:4px;box-sizing:border-box;display:block;position:absolute;left:-100000px;width:100%;z-index:1051}.select2-results{display:block}.select2-results__options{list-style:none;margin:0;padding:0}.select2-results__option{padding:6px;user-select:none;-webkit-user-select:none}.select2-results__option[aria-selected]{cursor:pointer}.select2-container--open .select2-dropdown{left:0}.select2-container--open .select2-dropdown--above{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--open .select2-dropdown--below{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-search--dropdown{display:block;padding:4px}.select2-search--dropdown .select2-search__field{padding:4px;width:100%;box-sizing:border-box}.select2-search--dropdown .select2-search__field::-webkit-search-cancel-button{-webkit-appearance:none}.select2-search--dropdown.select2-search--hide{display:none}.select2-close-mask{border:0;margin:0;padding:0;display:block;position:fixed;left:0;top:0;min-height:100%;min-width:100%;height:auto;width:auto;opacity:0;z-index:99;background-color:#fff;filter:alpha(opacity=0)}.select2-hidden-accessible{border:0 !important;clip:rect(0 0 0 0) !important;-webkit-clip-path:inset(50%) !important;clip-path:inset(50%) !important;height:1px !important;overflow:hidden !important;padding:0 !important;position:absolute !important;width:1px !important;white-space:nowrap !important}.select2-container--default .select2-selection--single{background-color:#fff;border:1px solid #aaa;border-radius:4px}.select2-container--default .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--default .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold}.select2-container--default .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--default .select2-selection--single .select2-selection__arrow{height:26px;position:absolute;top:1px;right:1px;width:20px}.select2-container--default .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--default[dir="rtl"] .select2-selection--single .select2-selection__arrow{left:1px;right:auto}.select2-container--default.select2-container--disabled .select2-selection--single{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection--single .select2-selection__clear{display:none}.select2-container--default.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--default .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text}.select2-container--default .select2-selection--multiple .select2-selection__rendered{box-sizing:border-box;list-style:none;margin:0;padding:0 5px;width:100%}.select2-container--default .select2-selection--multiple .select2-selection__rendered li{list-style:none}.select2-container--default .select2-selection--multiple .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-top:5px;margin-right:10px;padding:1px}.select2-container--default .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove{color:#999;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover{color:#333}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice,.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-search--inline{float:right}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice{margin-left:5px;margin-right:auto}.select2-container--default[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--default.select2-container--focus .select2-selection--multiple{border:solid black 1px;outline:0}.select2-container--default.select2-container--disabled .select2-selection--multiple{background-color:#eee;cursor:default}.select2-container--default.select2-container--disabled .select2-selection__choice__remove{display:none}.select2-container--default.select2-container--open.select2-container--above .select2-selection--single,.select2-container--default.select2-container--open.select2-container--above .select2-selection--multiple{border-top-left-radius:0;border-top-right-radius:0}.select2-container--default.select2-container--open.select2-container--below .select2-selection--single,.select2-container--default.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--default .select2-search--dropdown .select2-search__field{border:1px solid #aaa}.select2-container--default .select2-search--inline .select2-search__field{background:transparent;border:none;outline:0;box-shadow:none;-webkit-appearance:textfield}.select2-container--default .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--default .select2-results__option[role=group]{padding:0}.select2-container--default .select2-results__option[aria-disabled=true]{color:#999}.select2-container--default .select2-results__option[aria-selected=true]{background-color:#ddd}.select2-container--default .select2-results__option .select2-results__option{padding-left:1em}.select2-container--default .select2-results__option .select2-results__option .select2-results__group{padding-left:0}.select2-container--default .select2-results__option .select2-results__option .select2-results__option{margin-left:-1em;padding-left:2em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-2em;padding-left:3em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-3em;padding-left:4em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-4em;padding-left:5em}.select2-container--default .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option .select2-results__option{margin-left:-5em;padding-left:6em}.select2-container--default .select2-results__option--highlighted[aria-selected]{background-color:#5897fb;color:white}.select2-container--default .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic .select2-selection--single{background-color:#f7f7f7;border:1px solid #aaa;border-radius:4px;outline:0;background-image:-webkit-linear-gradient(top, #fff 50%, #eee 100%);background-image:-o-linear-gradient(top, #fff 50%, #eee 100%);background-image:linear-gradient(to bottom, #fff 50%, #eee 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic .select2-selection--single:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--single .select2-selection__rendered{color:#444;line-height:28px}.select2-container--classic .select2-selection--single .select2-selection__clear{cursor:pointer;float:right;font-weight:bold;margin-right:10px}.select2-container--classic .select2-selection--single .select2-selection__placeholder{color:#999}.select2-container--classic .select2-selection--single .select2-selection__arrow{background-color:#ddd;border:none;border-left:1px solid #aaa;border-top-right-radius:4px;border-bottom-right-radius:4px;height:26px;position:absolute;top:1px;right:1px;width:20px;background-image:-webkit-linear-gradient(top, #eee 50%, #ccc 100%);background-image:-o-linear-gradient(top, #eee 50%, #ccc 100%);background-image:linear-gradient(to bottom, #eee 50%, #ccc 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFCCCCCC', GradientType=0)}.select2-container--classic .select2-selection--single .select2-selection__arrow b{border-color:#888 transparent transparent transparent;border-style:solid;border-width:5px 4px 0 4px;height:0;left:50%;margin-left:-4px;margin-top:-2px;position:absolute;top:50%;width:0}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__clear{float:left}.select2-container--classic[dir="rtl"] .select2-selection--single .select2-selection__arrow{border:none;border-right:1px solid #aaa;border-radius:0;border-top-left-radius:4px;border-bottom-left-radius:4px;left:1px;right:auto}.select2-container--classic.select2-container--open .select2-selection--single{border:1px solid #5897fb}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow{background:transparent;border:none}.select2-container--classic.select2-container--open .select2-selection--single .select2-selection__arrow b{border-color:transparent transparent #888 transparent;border-width:0 4px 5px 4px}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--single{border-top:none;border-top-left-radius:0;border-top-right-radius:0;background-image:-webkit-linear-gradient(top, #fff 0%, #eee 50%);background-image:-o-linear-gradient(top, #fff 0%, #eee 50%);background-image:linear-gradient(to bottom, #fff 0%, #eee 50%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFFFFFFF', endColorstr='#FFEEEEEE', GradientType=0)}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--single{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0;background-image:-webkit-linear-gradient(top, #eee 50%, #fff 100%);background-image:-o-linear-gradient(top, #eee 50%, #fff 100%);background-image:linear-gradient(to bottom, #eee 50%, #fff 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#FFEEEEEE', endColorstr='#FFFFFFFF', GradientType=0)}.select2-container--classic .select2-selection--multiple{background-color:white;border:1px solid #aaa;border-radius:4px;cursor:text;outline:0}.select2-container--classic .select2-selection--multiple:focus{border:1px solid #5897fb}.select2-container--classic .select2-selection--multiple .select2-selection__rendered{list-style:none;margin:0;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__clear{display:none}.select2-container--classic .select2-selection--multiple .select2-selection__choice{background-color:#e4e4e4;border:1px solid #aaa;border-radius:4px;cursor:default;float:left;margin-right:5px;margin-top:5px;padding:0 5px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove{color:#888;cursor:pointer;display:inline-block;font-weight:bold;margin-right:2px}.select2-container--classic .select2-selection--multiple .select2-selection__choice__remove:hover{color:#555}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice{float:right;margin-left:5px;margin-right:auto}.select2-container--classic[dir="rtl"] .select2-selection--multiple .select2-selection__choice__remove{margin-left:2px;margin-right:auto}.select2-container--classic.select2-container--open .select2-selection--multiple{border:1px solid #5897fb}.select2-container--classic.select2-container--open.select2-container--above .select2-selection--multiple{border-top:none;border-top-left-radius:0;border-top-right-radius:0}.select2-container--classic.select2-container--open.select2-container--below .select2-selection--multiple{border-bottom:none;border-bottom-left-radius:0;border-bottom-right-radius:0}.select2-container--classic .select2-search--dropdown .select2-search__field{border:1px solid #aaa;outline:0}.select2-container--classic .select2-search--inline .select2-search__field{outline:0;box-shadow:none}.select2-container--classic .select2-dropdown{background-color:#fff;border:1px solid transparent}.select2-container--classic .select2-dropdown--above{border-bottom:none}.select2-container--classic .select2-dropdown--below{border-top:none}.select2-container--classic .select2-results>.select2-results__options{max-height:200px;overflow-y:auto}.select2-container--classic .select2-results__option[role=group]{padding:0}.select2-container--classic .select2-results__option[aria-disabled=true]{color:grey}.select2-container--classic .select2-results__option--highlighted[aria-selected]{background-color:#3875d7;color:#fff}.select2-container--classic .select2-results__group{cursor:default;display:block;padding:6px}.select2-container--classic.select2-container--open .select2-dropdown{border-color:#5897fb} diff --git a/static/css/widgets.css b/static/css/widgets.css new file mode 100644 index 0000000..1104e8b --- /dev/null +++ b/static/css/widgets.css @@ -0,0 +1,604 @@ +/* SELECTOR (FILTER INTERFACE) */ + +.selector { + width: 800px; + float: left; + display: flex; +} + +.selector select { + width: 380px; + height: 17.2em; + flex: 1 0 auto; +} + +.selector-available, .selector-chosen { + width: 380px; + text-align: center; + margin-bottom: 5px; + display: flex; + flex-direction: column; +} + +.selector-available h2, .selector-chosen h2 { + border: 1px solid var(--border-color); + border-radius: 4px 4px 0 0; +} + +.selector-chosen .list-footer-display { + border: 1px solid var(--border-color); + border-top: none; + border-radius: 0 0 4px 4px; + margin: 0 0 10px; + padding: 8px; + text-align: center; + background: var(--primary); + color: var(--header-link-color); + cursor: pointer; +} +.selector-chosen .list-footer-display__clear { + color: var(--breadcrumbs-fg); +} + +.selector-chosen h2 { + background: var(--primary); + color: var(--header-link-color); +} + +.selector .selector-available h2 { + background: var(--darkened-bg); + color: var(--body-quiet-color); +} + +.selector .selector-filter { + border: 1px solid var(--border-color); + border-width: 0 1px; + padding: 8px; + color: var(--body-quiet-color); + font-size: 0.625rem; + margin: 0; + text-align: left; +} + +.selector .selector-filter label, +.inline-group .aligned .selector .selector-filter label { + float: left; + margin: 7px 0 0; + width: 18px; + height: 18px; + padding: 0; + overflow: hidden; + line-height: 1; + min-width: auto; +} + +.selector .selector-available input, +.selector .selector-chosen input { + width: 320px; + margin-left: 8px; +} + +.selector ul.selector-chooser { + align-self: center; + width: 22px; + background-color: var(--selected-bg); + border-radius: 10px; + margin: 0 5px; + padding: 0; + transform: translateY(-17px); +} + +.selector-chooser li { + margin: 0; + padding: 3px; + list-style-type: none; +} + +.selector select { + padding: 0 10px; + margin: 0 0 10px; + border-radius: 0 0 4px 4px; +} +.selector .selector-chosen--with-filtered select { + margin: 0; + border-radius: 0; + height: 14em; +} + +.selector .selector-chosen:not(.selector-chosen--with-filtered) .list-footer-display { + display: none; +} + +.selector-add, .selector-remove { + width: 16px; + height: 16px; + display: block; + text-indent: -3000px; + overflow: hidden; + cursor: default; + opacity: 0.55; +} + +.active.selector-add, .active.selector-remove { + opacity: 1; +} + +.active.selector-add:hover, .active.selector-remove:hover { + cursor: pointer; +} + +.selector-add { + background: url(../img/selector-icons.svg) 0 -96px no-repeat; +} + +.active.selector-add:focus, .active.selector-add:hover { + background-position: 0 -112px; +} + +.selector-remove { + background: url(../img/selector-icons.svg) 0 -64px no-repeat; +} + +.active.selector-remove:focus, .active.selector-remove:hover { + background-position: 0 -80px; +} + +a.selector-chooseall, a.selector-clearall { + display: inline-block; + height: 16px; + text-align: left; + margin: 1px auto 3px; + overflow: hidden; + font-weight: bold; + line-height: 16px; + color: var(--body-quiet-color); + text-decoration: none; + opacity: 0.55; +} + +a.active.selector-chooseall:focus, a.active.selector-clearall:focus, +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + color: var(--link-fg); +} + +a.active.selector-chooseall, a.active.selector-clearall { + opacity: 1; +} + +a.active.selector-chooseall:hover, a.active.selector-clearall:hover { + cursor: pointer; +} + +a.selector-chooseall { + padding: 0 18px 0 0; + background: url(../img/selector-icons.svg) right -160px no-repeat; + cursor: default; +} + +a.active.selector-chooseall:focus, a.active.selector-chooseall:hover { + background-position: 100% -176px; +} + +a.selector-clearall { + padding: 0 0 0 18px; + background: url(../img/selector-icons.svg) 0 -128px no-repeat; + cursor: default; +} + +a.active.selector-clearall:focus, a.active.selector-clearall:hover { + background-position: 0 -144px; +} + +/* STACKED SELECTORS */ + +.stacked { + float: left; + width: 490px; + display: block; +} + +.stacked select { + width: 480px; + height: 10.1em; +} + +.stacked .selector-available, .stacked .selector-chosen { + width: 480px; +} + +.stacked .selector-available { + margin-bottom: 0; +} + +.stacked .selector-available input { + width: 422px; +} + +.stacked ul.selector-chooser { + height: 22px; + width: 50px; + margin: 0 0 10px 40%; + background-color: #eee; + border-radius: 10px; + transform: none; +} + +.stacked .selector-chooser li { + float: left; + padding: 3px 3px 3px 5px; +} + +.stacked .selector-chooseall, .stacked .selector-clearall { + display: none; +} + +.stacked .selector-add { + background: url(../img/selector-icons.svg) 0 -32px no-repeat; + cursor: default; +} + +.stacked .active.selector-add { + background-position: 0 -32px; + cursor: pointer; +} + +.stacked .active.selector-add:focus, .stacked .active.selector-add:hover { + background-position: 0 -48px; + cursor: pointer; +} + +.stacked .selector-remove { + background: url(../img/selector-icons.svg) 0 0 no-repeat; + cursor: default; +} + +.stacked .active.selector-remove { + background-position: 0 0px; + cursor: pointer; +} + +.stacked .active.selector-remove:focus, .stacked .active.selector-remove:hover { + background-position: 0 -16px; + cursor: pointer; +} + +.selector .help-icon { + background: url(../img/icon-unknown.svg) 0 0 no-repeat; + display: inline-block; + vertical-align: middle; + margin: -2px 0 0 2px; + width: 13px; + height: 13px; +} + +.selector .selector-chosen .help-icon { + background: url(../img/icon-unknown-alt.svg) 0 0 no-repeat; +} + +.selector .search-label-icon { + background: url(../img/search.svg) 0 0 no-repeat; + display: inline-block; + height: 1.125rem; + width: 1.125rem; +} + +/* DATE AND TIME */ + +p.datetime { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-weight: bold; +} + +.datetime span { + white-space: nowrap; + font-weight: normal; + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +.datetime input, .form-row .datetime input.vDateField, .form-row .datetime input.vTimeField { + margin-left: 5px; + margin-bottom: 4px; +} + +table p.datetime { + font-size: 0.6875rem; + margin-left: 0; + padding-left: 0; +} + +.datetimeshortcuts .clock-icon, .datetimeshortcuts .date-icon { + position: relative; + display: inline-block; + vertical-align: middle; + height: 16px; + width: 16px; + overflow: hidden; +} + +.datetimeshortcuts .clock-icon { + background: url(../img/icon-clock.svg) 0 0 no-repeat; +} + +.datetimeshortcuts a:focus .clock-icon, +.datetimeshortcuts a:hover .clock-icon { + background-position: 0 -16px; +} + +.datetimeshortcuts .date-icon { + background: url(../img/icon-calendar.svg) 0 0 no-repeat; + top: -1px; +} + +.datetimeshortcuts a:focus .date-icon, +.datetimeshortcuts a:hover .date-icon { + background-position: 0 -16px; +} + +.timezonewarning { + font-size: 0.6875rem; + color: var(--body-quiet-color); +} + +/* URL */ + +p.url { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.url a { + font-weight: normal; +} + +/* FILE UPLOADS */ + +p.file-upload { + line-height: 20px; + margin: 0; + padding: 0; + color: var(--body-quiet-color); + font-size: 0.6875rem; + font-weight: bold; +} + +.file-upload a { + font-weight: normal; +} + +.file-upload .deletelink { + margin-left: 5px; +} + +span.clearable-file-input label { + color: var(--body-fg); + font-size: 0.6875rem; + display: inline; + float: none; +} + +/* CALENDARS & CLOCKS */ + +.calendarbox, .clockbox { + margin: 5px auto; + font-size: 0.75rem; + width: 19em; + text-align: center; + background: var(--body-bg); + color: var(--body-fg); + border: 1px solid var(--hairline-color); + border-radius: 4px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.15); + overflow: hidden; + position: relative; +} + +.clockbox { + width: auto; +} + +.calendar { + margin: 0; + padding: 0; +} + +.calendar table { + margin: 0; + padding: 0; + border-collapse: collapse; + background: white; + width: 100%; +} + +.calendar caption, .calendarbox h2 { + margin: 0; + text-align: center; + border-top: none; + font-weight: 700; + font-size: 0.75rem; + color: #333; + background: var(--accent); +} + +.calendar th { + padding: 8px 5px; + background: var(--darkened-bg); + border-bottom: 1px solid var(--border-color); + font-weight: 400; + font-size: 0.75rem; + text-align: center; + color: var(--body-quiet-color); +} + +.calendar td { + font-weight: 400; + font-size: 0.75rem; + text-align: center; + padding: 0; + border-top: 1px solid var(--hairline-color); + border-bottom: none; +} + +.calendar td.selected a { + background: var(--primary); + color: var(--button-fg); +} + +.calendar td.nonday { + background: var(--darkened-bg); +} + +.calendar td.today a { + font-weight: 700; +} + +.calendar td a, .timelist a { + display: block; + font-weight: 400; + padding: 6px; + text-decoration: none; + color: var(--body-quiet-color); +} + +.calendar td a:focus, .timelist a:focus, +.calendar td a:hover, .timelist a:hover { + background: var(--primary); + color: white; +} + +.calendar td a:active, .timelist a:active { + background: var(--header-bg); + color: white; +} + +.calendarnav { + font-size: 0.625rem; + text-align: center; + color: #ccc; + margin: 0; + padding: 1px 3px; +} + +.calendarnav a:link, #calendarnav a:visited, +#calendarnav a:focus, #calendarnav a:hover { + color: var(--body-quiet-color); +} + +.calendar-shortcuts { + background: var(--body-bg); + color: var(--body-quiet-color); + font-size: 0.6875rem; + line-height: 0.6875rem; + border-top: 1px solid var(--hairline-color); + padding: 8px 0; +} + +.calendarbox .calendarnav-previous, .calendarbox .calendarnav-next { + display: block; + position: absolute; + top: 8px; + width: 15px; + height: 15px; + text-indent: -9999px; + padding: 0; +} + +.calendarnav-previous { + left: 10px; + background: url(../img/calendar-icons.svg) 0 0 no-repeat; +} + +.calendarbox .calendarnav-previous:focus, +.calendarbox .calendarnav-previous:hover { + background-position: 0 -15px; +} + +.calendarnav-next { + right: 10px; + background: url(../img/calendar-icons.svg) 0 -30px no-repeat; +} + +.calendarbox .calendarnav-next:focus, +.calendarbox .calendarnav-next:hover { + background-position: 0 -45px; +} + +.calendar-cancel { + margin: 0; + padding: 4px 0; + font-size: 0.75rem; + background: #eee; + border-top: 1px solid var(--border-color); + color: var(--body-fg); +} + +.calendar-cancel:focus, .calendar-cancel:hover { + background: #ddd; +} + +.calendar-cancel a { + color: black; + display: block; +} + +ul.timelist, .timelist li { + list-style-type: none; + margin: 0; + padding: 0; +} + +.timelist a { + padding: 2px; +} + +/* EDIT INLINE */ + +.inline-deletelink { + float: right; + text-indent: -9999px; + background: url(../img/inline-delete.svg) 0 0 no-repeat; + width: 16px; + height: 16px; + border: 0px none; +} + +.inline-deletelink:focus, .inline-deletelink:hover { + cursor: pointer; +} + +/* RELATED WIDGET WRAPPER */ +.related-widget-wrapper { + float: left; /* display properly in form rows with multiple fields */ + overflow: hidden; /* clear floated contents */ +} + +.related-widget-wrapper-link { + opacity: 0.3; +} + +.related-widget-wrapper-link:link { + opacity: .8; +} + +.related-widget-wrapper-link:link:focus, +.related-widget-wrapper-link:link:hover { + opacity: 1; +} + +select + .related-widget-wrapper-link, +.related-widget-wrapper-link + .related-widget-wrapper-link { + margin-left: 7px; +} + +/* GIS MAPS */ +.dj_map { + width: 600px; + height: 400px; +} diff --git a/static/img/LICENSE b/static/img/LICENSE new file mode 100644 index 0000000..a4faaa1 --- /dev/null +++ b/static/img/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2014 Code Charm Ltd + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/static/img/README.txt b/static/img/README.txt new file mode 100644 index 0000000..4eb2e49 --- /dev/null +++ b/static/img/README.txt @@ -0,0 +1,7 @@ +All icons are taken from Font Awesome (http://fontawesome.io/) project. +The Font Awesome font is licensed under the SIL OFL 1.1: +- https://scripts.sil.org/OFL + +SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG +Font-Awesome-SVG-PNG is licensed under the MIT license (see file license +in current folder). diff --git a/static/img/calendar-icons.svg b/static/img/calendar-icons.svg new file mode 100644 index 0000000..dbf21c3 --- /dev/null +++ b/static/img/calendar-icons.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/static/img/gis/move_vertex_off.svg b/static/img/gis/move_vertex_off.svg new file mode 100644 index 0000000..228854f --- /dev/null +++ b/static/img/gis/move_vertex_off.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/gis/move_vertex_on.svg b/static/img/gis/move_vertex_on.svg new file mode 100644 index 0000000..96b87fd --- /dev/null +++ b/static/img/gis/move_vertex_on.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/img/icon-addlink.svg b/static/img/icon-addlink.svg new file mode 100644 index 0000000..e004fb1 --- /dev/null +++ b/static/img/icon-addlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-alert.svg b/static/img/icon-alert.svg new file mode 100644 index 0000000..e51ea83 --- /dev/null +++ b/static/img/icon-alert.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-calendar.svg b/static/img/icon-calendar.svg new file mode 100644 index 0000000..97910a9 --- /dev/null +++ b/static/img/icon-calendar.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/icon-changelink.svg b/static/img/icon-changelink.svg new file mode 100644 index 0000000..bbb137a --- /dev/null +++ b/static/img/icon-changelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-clock.svg b/static/img/icon-clock.svg new file mode 100644 index 0000000..bf9985d --- /dev/null +++ b/static/img/icon-clock.svg @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/static/img/icon-deletelink.svg b/static/img/icon-deletelink.svg new file mode 100644 index 0000000..4059b15 --- /dev/null +++ b/static/img/icon-deletelink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-no.svg b/static/img/icon-no.svg new file mode 100644 index 0000000..2e0d383 --- /dev/null +++ b/static/img/icon-no.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-unknown-alt.svg b/static/img/icon-unknown-alt.svg new file mode 100644 index 0000000..1c6b99f --- /dev/null +++ b/static/img/icon-unknown-alt.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-unknown.svg b/static/img/icon-unknown.svg new file mode 100644 index 0000000..50b4f97 --- /dev/null +++ b/static/img/icon-unknown.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-viewlink.svg b/static/img/icon-viewlink.svg new file mode 100644 index 0000000..a1ca1d3 --- /dev/null +++ b/static/img/icon-viewlink.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icon-yes.svg b/static/img/icon-yes.svg new file mode 100644 index 0000000..5883d87 --- /dev/null +++ b/static/img/icon-yes.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/icons/bag.png b/static/img/icons/bag.png new file mode 100644 index 0000000000000000000000000000000000000000..feae0c644e39ca8a7853beaf205ec8f79f91e43b GIT binary patch literal 1454 zcmV;f1yTBmP)QtizW-G;Lu`PD2YLRL*UnNF#`Ia>)rjl0`QwGb>V#lfy z30CV0rIH5oM5y1k`qwu=mDqOuXN-6eHZ_V zIe^~S-D$F(C&{6vX%PNxy$sF~{H}yuJ@A z4*J1ys2{2tFGKa=K@f>Sgq36RpTj+%jIq`CL8;59TuX|QTYOf@Ih|i`>Mn^rfT=5a z24KnMNs2kZ*1}Vds|Ao{=z1jP02IS{U(ehDI{pxBF`S6G=`F@@Ank1l*6S@m(d;-y zbH7tG=c5?5m7;UI1e62o^(By!Q#W%HDnfW+qXnKhv;{$W>E~+p<%e20T8Y? zL9c%xVgLaRCQVOV-Pi}kRbK#aanEZglx_n?gOI&zKWw+RL#6wN*?C^Mb^gT7IWJKR zcR85r^N0b&mLb!eOZ+%cbz#PsYJlzV~ZE=2?&AUv!V zfFR+4c{`xv?+2f{WV=m7pvZ2(ci-q{{V#YyGKCxteHeI{)4 zWP>e8va+32RY;!mnAFg0Y4G{~QAE`bbU+?eeF-5vJO_Ybdk8>cI=e0k0PIzN3CX8s zd!T4;lmM(}wmle42dwIMK;Aja!t&tf^psAgyE9^dDrw+RQIfBz2r#-IU0FG&0}MAz zI!3Sr3(n}P_6nB-gfK!%GNS)6FZ^;2tv4*901|kP;+b2vsaUsnDQcH*vbT* zepOTu0>Xs?!hgozxI88zoVU>28k)@y00eh=G=C4)qUs~V4~H|ihUQ-;TS^VhUDMFq*HHn)BOdXH$Ff+*KRS=&Ujzt$MgRZ+07*qo IM6N<$f_+)7E&u=k literal 0 HcmV?d00001 diff --git a/static/img/icons/bag_25x25.png b/static/img/icons/bag_25x25.png new file mode 100644 index 0000000000000000000000000000000000000000..b035cffb62470d383e3827cdbbdc8a678ebed329 GIT binary patch literal 1887 zcmY*ad0bOh7Je)Vgg~j3LI4XP)M3wt6SgGEzR8wS$|hwC7|4PoLf8Z$D%%tU1X(Hx zC?lmoIwFf~3RIyY0_g zl8duFNt`t#ArBV6`&KW8i<1{q+Z#ZN>mq>Saz(|bc0g#jmAS0oOA3#bI z0PSM{aFxAp|L0|)>OXucx^-ljo<}2001ew*xUFxE8X>tq53$e63s;G zMe!|j>tVTgzDoP2pC*FbS#F~`M6MBaJfunU<~GH+kDE0j=!1nX=3aBwf@3hMfqU=d zMs>!%Hc+D6C*~PunDXylj2F-ogvod_L9)NAv{H7_;QX{%RF|+)SlQMNv}oj14|A&f zU)a8$D;&5{e5%>)U2}T?GXo^Il0D_lfu^YKjq9>`3!P5!IPIDCrTZ6b&(HiIjJDdC z9eSu7t)AP84v^x6ynQ3==nklTonKsF7yLwk^$gRmASPu4v}2r<&iYrqV0w2EtEC{X z)tejH834~YGnmyLQToj{&6b>E*IP{ZmjuSf;oACck5GF9x#i|C3SS>= z&anmghizq6b&YhMWk1gtn<2jP@%CnIPQE!|T2t(*b|auWX$FJ7z8IIQ_!*+K53`LyPoF+IV*XBsSi_pu%>VpIqyXos zk_;HwVPFq4-5RM6o4ybIuW0x8Z(Ybwm(eQmh${u{_wEHDN^ji0ZRZ>nIElO&m0D1K zJgea;cM$g~iCl0)ixB3Idr=MvLgha)cF~3$r@h#`7sZ2R*RDV+Nodi;#DuTPYy>$5 z`ty_DzB0y^sT!lccKGW1ybGac3I<*{%eLZp7K@kv`KvegKj2=yl~wBU(ZM?PX4MVt zdadi*ZR=g-Dx5tY%}J zxZV4Q`Gt^HOhs9<$>U=AhgY6>WPVr6(T`VF!%Lq}%W}(}9#GqKi;mn3>8&>=E_sZj zy4w`*uJP_SR}s&yRaQWbuS}UdyM@j(5&naks4XLBnsKHnXwYx%yu55r&yc9CiV__% z<6Eh><{gmnt$u#KwBFoQ4usBx=KD|Q^cV~q*Rz`}W=%AfPO7zJUwQoV+|V@e(~n`Q zedI{hm$VgRZGT_lF?*fX4(UHlY|4gD=*aT3)&?s?>9J{w^*)v}>J%E^{QCS{ zdkrX#Fo4S1%|7kxS99-S)K99*C*gI^!mO*oS|aF2W0RAmF$-+GZce(+7nhLp=W>so zgm@eJke*?^V1^oR=;?At0+BdURAU;&$?5VjY#kp|aR-boI$c{Q+LQrp7e-sO?KFRq zY_E(oT(sFCiSqVHUpjOu2MRKO!4>{-r;YdkWFdN9FT724cv<&LVXSk+x!#NIbJ&jH z6N67`9bqH&qR!^{bZejP*S_k$tdjJm?l<<2x&0i50sBZIRG6Ilr$4pyU(8h>XkpNC z7R_sN+$IQhZHCLMBdku3m6q4hmt}L}9D^W=I%$M54nGaXb1<~HY+d+!f(XSi);+nQ zJQ)UldS-X{vyafD-`H4+27h#{4y3Lx?=@{GFAg|dAK6eym;7a196anBY(p~s0tF!t AoB#j- literal 0 HcmV?d00001 diff --git a/static/img/icons/money.png b/static/img/icons/money.png new file mode 100644 index 0000000000000000000000000000000000000000..1283c97430b10733a7453197b5245b33b1ba0219 GIT binary patch literal 2007 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 literal 0 HcmV?d00001 diff --git a/static/img/icons/money_12x12.png b/static/img/icons/money_12x12.png new file mode 100644 index 0000000000000000000000000000000000000000..9b10ff08bd1d34c64b4cfa3f123aa64a49d284d7 GIT binary patch literal 1064 zcmeAS@N?(olHy`uVBq!ia0vp^JRr=$1|-8uW1a&k#^NA%Cx&(BWL^R}EvXTnX}-P; zT0k}j11qBt12aeo5Hc`IF|dN!3=Ce3(r|VVqXtwB69YqgCIbspO%#v@0S_Ps>W0$H z3m6e5E?|PI=2^guV1u+hFq<9+q&N#aB8wRqxP?KOkzv*x37~0_nIRD+5xzcF$@#f@ zi7EL>sd^Q;1t47vHWgMtW^QUpqC!P(PF}H9g{=};g%ywu64qBz04piUwpEJo4N!2- zFG^J~(=*UBP_pAvP*AWbN=dT{a&d!d2l8x{GD=Dctn~HE%ggo3jrH=2()A53EiLs8 zjP#9+bb%^#i!1X=5-W7`ij^UTz|3(;Elw`VEGWs$&r<-Io0ybeT4JlD1hNPYAnq*5 zOhed|R}A$Q(1ZFQ8GS=N1AVyJK&>_)Q7iwV%v7MwAoJ}EZNMr~#Gv-r=z}araty?$ zU{Rn~?YM08;lXCdB^mdS9T>DAfGI{)4$GKtNFNV(V5351nIToHkn%q~mk5w0!TK{yk&o zIh)Gz!uK<+pP#cWPM6ps*l5hQG?}w@jS&s505dGMi?SI4Y-Pj(#gdt|!x{OvbR>Q9$BsO{*# zZ)sWhN;EP2RFcud$X(1!4z5i9*erdWccv8YxeN~fyu;_&ER;k~%=;>#*_vZ|VmW77L-%bz2s&p&ed)d8r Uc%w94l!LO1r>mdKI;Vst0D(_!hyVZp literal 0 HcmV?d00001 diff --git a/static/img/icons/money_25x25.png b/static/img/icons/money_25x25.png new file mode 100644 index 0000000000000000000000000000000000000000..abcc05007324d4d6acbd08ac460ee79e5fb794f7 GIT binary patch literal 2403 zcmZ`*c|4S99Dl~7zgO=H~0&}eehxH62Pam-9(FpeZw6s2-RlqlO~ z)4I!=nj$%JL}a%_6jEyCTvYoGHnz|1`+lDH_j|v;@Ar4S&-2HdK(?`v65lKi0FWYD zn%Y8ER=C7gLeHAFu{6l6@HQeD0Z?>CV$NL@dPmYMZAk!xssIof1HcRfMGgTFhyh@j z3IOf`02|p^mHY8fAcjsMdXY$AC*+F(QJ6G zbqsq7mqOZ$qp|!^?w%|UI*RAd7ODWAhl5;yI@cY^^Y>#0;CT9q^9&s13t_Y(a-PEV z)mNmD$Vd|whmO=iVNe)Ff;bY1#B)5oaJHuAi*o2qU-2-P%f_M6!NI|(U@a7j zCzs*1REZg|I2JS@S{OlVpfKqFlF@mL|B(qJ3$ppS7Rup;$#9Og^Z=G$ps+21t|orI z!oR?!{uTsFdunU^eszGu&uas0nB%L0o+JX*Nd%l3ZZ zV9le@$s&m3(cexfL3||pyfpx#fkaaydrPTQ2WvkEhxM+5m%={Ij!#%P@4US7dVIN0 zEr8J$W^6AX)Wgx*qz4^+hzRw$4V=T?`<#o%V}Jiu6?qiiSAOGSCieF z*;iQ~xc17ONV`{#RhfFJf^$>Hj-p^$kDRnlZrwvVkxo_HPHlXIc(FTbI6F_Qpc>2P z!{o9b!S+b*lYf5v*h&r!&Jm>KW!N1q+A){I8M=AM7?E}%Kzth<|{!Ht< z$V&(Qblrf$dLj-NSZO{KlPRmdJN(&o;1n` zX-l`c_ImSlxmm`al!<7*TUWT7xs>FE(3~#WGlq2oUe6!UWsEy4Q#9`+F?a>ekh-DgnQI{^`thaS7 zIQy~{mhH7g`MjA%oE-d7lj!Xrud63jdEya`>7#>3XZw_-5slGVSgT)7_w>b+?nHf> zAlkDwI^s4m)t=v2qokA0e`4i3vZ2rgi+QCsS)voe)Nf7<6j?Pg-Ej8f<0gNUZ06~>w!x!(PV$o2+9uQ-KR1&oA6W!%mB1#W77R&FAhA_<<*tKGS)N~tm~U3qX!~f z9-bOm-OzG9i{`>-tDdBNZqDz< z{J76fd2|f5bDf+UgDlscNWIq_WiqaCH}t<|a@(o@x#84rDDrr#Dkibi(fBHo#|c3l|58zhZ-tbLo{ zJMd*VrE;J8b%%#VJ*i15#8wtJkUa8v{JP%FRk!70GQ$bCW@l&f`Uh)+lIyBFtVG-G z+G{z0_nTU3^U&$CcVyM(@J}x~FIChK73-TWdL|F0dlz3@m&A9%Uk9R@jcK7VHR^8` CILl-J literal 0 HcmV?d00001 diff --git a/static/img/icons/shield-green-v.png b/static/img/icons/shield-green-v.png new file mode 100644 index 0000000000000000000000000000000000000000..8bb0ea416359cea9d043efa16c71dd1f38690434 GIT binary patch literal 1861 zcmeAS@N?(olHy`uVBq!ia0vp^k|4~%1|*NXY)uAIjKx9jP7LeL$-D$|T2doC(|mmy zw18|523AHP24;{FAY@>aVqgWc85q16rQz%#Mh&PMCI*J~Oa>OHnkXO*0vSb_NEPubwWBAs)QFq24_qt|DviSKrm;@%XW(^dXn9c%H%H zA8ht(N)|IG8EC1g35iRE=lNut%#b+RYsle|wCKbZHX(60lalU55=MrGlO#+V*pz2} zWWH=Wzbz=;+ z=c2+NXvVjP z`sF;TWmWAH9%=5?*{K(yUlYeMHEW@eYRvI}N-g(eS1)C^yZ7N;NGGe)-m;?HjGW8~ z0vmZHB8y-5I-UIO%E2$)AbjKbz6o9@1U4wO9>3gtV!{RA=g*r3-fOJCpPgq_@vG>B z$0Sqt>D-Fu356COJ2``RW-ko+y)K%m?&!11O$~@i)Iv0P%7_`*vQR$`M|+7I|Sx@KUdX1(=c>%pvTU@rCvAo?>?XO z^QoLC$3li5J#(845BASKyT36x_v3+cmGy!y8fmhx6PEg|KCx;+at}+8FFXHr0Zx-Q z%-KhIr}J;NxhTY3_U!a>H9w6Ls>^O_PloJoWm(ty;Hlg`t@*nXN{Xf(o6)(d zWAlZ4wu@8x{;D_3D8Dkz&7pFt)a3YA^A6r#t@QoXfgBSw7n}qj%38TO*eD^U2R! z;QMe%_8cFkIZ5l4r$iXKty$fvllE4yLB_FLI7KgZqSl%3Cj$QTCI9T2`$|Y%=tJx8 z)TWhF?iZYUtrn*`hefjQ<1L1YGkUiq`ln>>(z-h@{*ByYeic;SCd2!u?L%~f z^bh7akA8FT6vuPz5uf0+*|t0H;l@JGh6e>{E0SWC|E_xdZR7HpuFl8WcHNm+vWSm~ zyV3K)X|-EhHTKB6FsNT~lD>XU|4DI~_}#`U;>K6YUl{LT7L#uF_u%B3 zRJM)I6?eJc|22-!wX-?6P4sJ(4cDDJ)3ucr3ZIH{*yevWph%tTjFRiI7sXHKyRxfo zyL(nlGBwg-&-};UJR-bKip0eYcwilbfoL5Q~cyj!@Z;Sel5cksQ zyL2Y4j#-eSb4y%Wda}`vvle&vzs#QG=%U~ue7)>(=hyF_u006Un5yydN6akG{MJ~< z*pDy&-1M%WJ$vJQL4nhIR{fm#DR5DrZP@Iqv+Z`TF3i06^@?+3h0fZOO}6{a3U9rm zo4k1IE32LHp_6lC9>mJ+Iy(F8n+tyD*1H|}`d=onXmVsGu9T&Agl@^1itDnm{r-UW|xdQS4 literal 0 HcmV?d00001 diff --git a/static/img/icons/shield-red-cross.png b/static/img/icons/shield-red-cross.png new file mode 100644 index 0000000000000000000000000000000000000000..67a660487240f928b7517747424b767d111d3d28 GIT binary patch literal 2079 zcmY*aeLR!v8-KPT@2_(*NA;N3I`)Rd8b(Vqp|d!KkQkKYqhhi1i8w3IInLfYJ&lNS+moEDyPQCBw=g-yO@L-`I$9*mtauUFuv6ktely zav&Q3Gz=600ZMsBa<@Q+AB{uv-j0u8#i7F^S$pVcZd|-V1rWG+IgF!o!a;7_J|-K_ zbw+++;N@6R#vs8j6wY2}B+YvVxP_HK2OZE@G#2Ti4uT*dAuvhk#Ku|DVHro%BmpKB|j40rTzJT+|VvFIEA7@0ha6f%B7u91p^JipDvaWaRV^3S$AwWOYh7Z=x?k3w3Cr{iv30ggtEC>%hgKw%`S?DrA-ML%PU^vVVpH}-)p_} z9BmJvcTTqxT4FR>=SEgrceJ}>G$iEcmAubyYilIbCyzgJYzpp)_&xzgW+wRTaTgDJ z%Hrp<_^cY39^JBYO}c@{@v#Goj=4478Off$;Uwzui7pD)FTjVNQ~1GvhBJs@?%-o79-`Z$1$FZ< z5%|i^Awn!FX>Z4Dd;9i->F}16hyh~jI@{-=*Qc*1+n1j5sWuoVqO5xhjsy>YbGao= zc?c4mu^H8eeEknCFHmFk&7|nbXY1-+pn)=h;4`A&nptKe&A?4_de7X_0xDEktoq)A z7_Im7?eM_Vh*mPSf5bIoF=Xpczn|zc983;fsI4uXmdUJ+I4HuvY87QS zqw;6=Ke>Nj7Na?&gO6oE)t=6M9PTJpvoSBf*oJP(;^(f>YK%Y@bqzE&5Zdv0?eG@J zT)>pTY+K%J3ol^6_0#*Ck%Um9#qpqBez9Rnhflyi4(I6pp&tZx^fx`3D@?)mqdAYJ zBs7!p##L^~z^wk?WhTvUn?)*S)js^1>4h4p?0KElBk`+cjlmbrb|xBS{~p-VZWfdi znmc36DOI`H>l2Odmr6zV&KTCY0_FC92IEE`gGv=*E+c2={4;uYD4A}nT-fCvtu@Uh zV8`d;YE4%cN<8ZxzL{)28k0H&?|*Q=_HtBhbJ8Z&G1vrPu99*367Q)tYiLew;4XN{ zbObuFMb`*zQ9Z8wZq%Vo{2K>;;m?ZQmuKAw2hL!-%MEeE`Fi&b-aEb*Ja|JOvuaFT zepD|T8cF{ER%)E~Lz~nUa7%Vl-f2%D-n~}}8@$zJX%f3{2|e&Q^2k!kM!0Gv%XaQi zR(;3(hZ7E)%7V4D7Urj4TT*wje^|5=C_ViV|5m1i zUVq-o7g>HFIR1547&z!}VG;OhDl4V|rI!z@@_i`a-HX}}xn-@@ZCzA7w@UJfM0DJ2 zrMBBwvaAJ4_#VcEvO?dSMx0;wt7MDd9lYU@LpOp0efW*_6Sv#wgJDHT(MTq51Xd`A|LuhnVG9OuqN?d%Eyq3P6v=HtavClctol%TU=J0rvOD9KX8t zsqk*v_QXAuk_)3Q9B)#CUdbjQvQNTI))aUrv`Suv74ve+?U%zw64G);TGb*~_l^k* iZ`CamJH3*sCS9{_N1*PWIV{Cr(sQd1>9YIojQ;>?abk1; literal 0 HcmV?d00001 diff --git a/static/img/inline-delete.svg b/static/img/inline-delete.svg new file mode 100644 index 0000000..17d1ad6 --- /dev/null +++ b/static/img/inline-delete.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/maintenance/maintenance.jpeg b/static/img/maintenance/maintenance.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..b484c8d72c2a63ee884b66564a605b71dab5eedf GIT binary patch literal 204194 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�kz1OVM(cafz=b%M=`qO%Es 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±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�G08>vtk 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%0DgdYW#7K6NzDL)>J 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

    %A`4Ah;vM>WnVsTVK>KVuB;+eRY{TP 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⁣Xp`1_x>DY^J@Vg$48GGOewXe|-3H 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%0Aaa|bb)SFAJBRi^2 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�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 + + diff --git a/static/img/selector-icons.svg b/static/img/selector-icons.svg new file mode 100644 index 0000000..926b8e2 --- /dev/null +++ b/static/img/selector-icons.svg @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/img/sorting-icons.svg b/static/img/sorting-icons.svg new file mode 100644 index 0000000..7c31ec9 --- /dev/null +++ b/static/img/sorting-icons.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/static/img/tooltag-add.svg b/static/img/tooltag-add.svg new file mode 100644 index 0000000..1ca64ae --- /dev/null +++ b/static/img/tooltag-add.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/img/tooltag-arrowright.svg b/static/img/tooltag-arrowright.svg new file mode 100644 index 0000000..b664d61 --- /dev/null +++ b/static/img/tooltag-arrowright.svg @@ -0,0 +1,3 @@ + + + diff --git a/static/js/SelectBox.js b/static/js/SelectBox.js new file mode 100644 index 0000000..3db4ec7 --- /dev/null +++ b/static/js/SelectBox.js @@ -0,0 +1,116 @@ +'use strict'; +{ + const SelectBox = { + cache: {}, + init: function(id) { + const box = document.getElementById(id); + SelectBox.cache[id] = []; + const cache = SelectBox.cache[id]; + for (const node of box.options) { + cache.push({value: node.value, text: node.text, displayed: 1}); + } + }, + redisplay: function(id) { + // Repopulate HTML select box from cache + const box = document.getElementById(id); + const scroll_value_from_top = box.scrollTop; + box.innerHTML = ''; + for (const node of SelectBox.cache[id]) { + if (node.displayed) { + const new_option = new Option(node.text, node.value, false, false); + // Shows a tooltip when hovering over the option + new_option.title = node.text; + box.appendChild(new_option); + } + } + box.scrollTop = scroll_value_from_top; + }, + filter: function(id, text) { + // Redisplay the HTML select box, displaying only the choices containing ALL + // the words in text. (It's an AND search.) + const tokens = text.toLowerCase().split(/\s+/); + for (const node of SelectBox.cache[id]) { + node.displayed = 1; + const node_text = node.text.toLowerCase(); + for (const token of tokens) { + if (!node_text.includes(token)) { + node.displayed = 0; + break; // Once the first token isn't found we're done + } + } + } + SelectBox.redisplay(id); + }, + get_hidden_node_count(id) { + const cache = SelectBox.cache[id] || []; + return cache.filter(node => node.displayed === 0).length; + }, + delete_from_cache: function(id, value) { + let delete_index = null; + const cache = SelectBox.cache[id]; + for (const [i, node] of cache.entries()) { + if (node.value === value) { + delete_index = i; + break; + } + } + cache.splice(delete_index, 1); + }, + add_to_cache: function(id, option) { + SelectBox.cache[id].push({value: option.value, text: option.text, displayed: 1}); + }, + cache_contains: function(id, value) { + // Check if an item is contained in the cache + for (const node of SelectBox.cache[id]) { + if (node.value === value) { + return true; + } + } + return false; + }, + move: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (option.selected && SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + move_all: function(from, to) { + const from_box = document.getElementById(from); + for (const option of from_box.options) { + const option_value = option.value; + if (SelectBox.cache_contains(from, option_value)) { + SelectBox.add_to_cache(to, {value: option_value, text: option.text, displayed: 1}); + SelectBox.delete_from_cache(from, option_value); + } + } + SelectBox.redisplay(from); + SelectBox.redisplay(to); + }, + sort: function(id) { + SelectBox.cache[id].sort(function(a, b) { + a = a.text.toLowerCase(); + b = b.text.toLowerCase(); + if (a > b) { + return 1; + } + if (a < b) { + return -1; + } + return 0; + } ); + }, + select_all: function(id) { + const box = document.getElementById(id); + for (const option of box.options) { + option.selected = true; + } + } + }; + window.SelectBox = SelectBox; +} diff --git a/static/js/SelectFilter2.js b/static/js/SelectFilter2.js new file mode 100644 index 0000000..9a4e0a3 --- /dev/null +++ b/static/js/SelectFilter2.js @@ -0,0 +1,283 @@ +/*global SelectBox, gettext, interpolate, quickElement, SelectFilter*/ +/* +SelectFilter2 - Turns a multiple-select box into a filter interface. + +Requires core.js and SelectBox.js. +*/ +'use strict'; +{ + window.SelectFilter = { + init: function(field_id, field_name, is_stacked) { + if (field_id.match(/__prefix__/)) { + // Don't initialize on empty forms. + return; + } + const from_box = document.getElementById(field_id); + from_box.id += '_from'; // change its ID + from_box.className = 'filtered'; + + for (const p of from_box.parentNode.getElementsByTagName('p')) { + if (p.classList.contains("info")) { + // Remove

    , because it just gets in the way. + from_box.parentNode.removeChild(p); + } else if (p.classList.contains("help")) { + // Move help text up to the top so it isn't below the select + // boxes or wrapped off on the side to the right of the add + // button: + from_box.parentNode.insertBefore(p, from_box.parentNode.firstChild); + } + } + + //

    or
    + const selector_div = quickElement('div', from_box.parentNode); + selector_div.className = is_stacked ? 'selector stacked' : 'selector'; + + //
    + const selector_available = quickElement('div', selector_div); + selector_available.className = 'selector-available'; + const title_available = quickElement('h2', selector_available, interpolate(gettext('Available %s') + ' ', [field_name])); + quickElement( + 'span', title_available, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of available %s. You may choose some by ' + + 'selecting them in the box below and then clicking the ' + + '"Choose" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_p = quickElement('p', selector_available, '', 'id', field_id + '_filter'); + filter_p.className = 'selector-filter'; + + const search_filter_label = quickElement('label', filter_p, '', 'for', field_id + '_input'); + + quickElement( + 'span', search_filter_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of available %s."), [field_name]) + ); + + filter_p.appendChild(document.createTextNode(' ')); + + const filter_input = quickElement('input', filter_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_input.id = field_id + '_input'; + + selector_available.appendChild(from_box); + const choose_all = quickElement('a', selector_available, gettext('Choose all'), 'title', interpolate(gettext('Click to choose all %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_add_all_link'); + choose_all.className = 'selector-chooseall'; + + //
      + const selector_chooser = quickElement('ul', selector_div); + selector_chooser.className = 'selector-chooser'; + const add_link = quickElement('a', quickElement('li', selector_chooser), gettext('Choose'), 'title', gettext('Choose'), 'href', '#', 'id', field_id + '_add_link'); + add_link.className = 'selector-add'; + const remove_link = quickElement('a', quickElement('li', selector_chooser), gettext('Remove'), 'title', gettext('Remove'), 'href', '#', 'id', field_id + '_remove_link'); + remove_link.className = 'selector-remove'; + + //
      + const selector_chosen = quickElement('div', selector_div, '', 'id', field_id + '_selector_chosen'); + selector_chosen.className = 'selector-chosen'; + const title_chosen = quickElement('h2', selector_chosen, interpolate(gettext('Chosen %s') + ' ', [field_name])); + quickElement( + 'span', title_chosen, '', + 'class', 'help help-tooltip help-icon', + 'title', interpolate( + gettext( + 'This is the list of chosen %s. You may remove some by ' + + 'selecting them in the box below and then clicking the ' + + '"Remove" arrow between the two boxes.' + ), + [field_name] + ) + ); + + const filter_selected_p = quickElement('p', selector_chosen, '', 'id', field_id + '_filter_selected'); + filter_selected_p.className = 'selector-filter'; + + const search_filter_selected_label = quickElement('label', filter_selected_p, '', 'for', field_id + '_selected_input'); + + quickElement( + 'span', search_filter_selected_label, '', + 'class', 'help-tooltip search-label-icon', + 'title', interpolate(gettext("Type into this box to filter down the list of selected %s."), [field_name]) + ); + + filter_selected_p.appendChild(document.createTextNode(' ')); + + const filter_selected_input = quickElement('input', filter_selected_p, '', 'type', 'text', 'placeholder', gettext("Filter")); + filter_selected_input.id = field_id + '_selected_input'; + + const to_box = quickElement('select', selector_chosen, '', 'id', field_id + '_to', 'multiple', '', 'size', from_box.size, 'name', from_box.name); + to_box.className = 'filtered'; + + const warning_footer = quickElement('div', selector_chosen, '', 'class', 'list-footer-display'); + quickElement('span', warning_footer, '', 'id', field_id + '_list-footer-display-text'); + quickElement('span', warning_footer, ' (click to clear)', 'class', 'list-footer-display__clear'); + + const clear_all = quickElement('a', selector_chosen, gettext('Remove all'), 'title', interpolate(gettext('Click to remove all chosen %s at once.'), [field_name]), 'href', '#', 'id', field_id + '_remove_all_link'); + clear_all.className = 'selector-clearall'; + + from_box.name = from_box.name + '_old'; + + // Set up the JavaScript event handlers for the select box filter interface + const move_selection = function(e, elem, move_func, from, to) { + if (elem.classList.contains('active')) { + move_func(from, to); + SelectFilter.refresh_icons(field_id); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + } + e.preventDefault(); + }; + choose_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_from', field_id + '_to'); + }); + add_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_from', field_id + '_to'); + }); + remove_link.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move, field_id + '_to', field_id + '_from'); + }); + clear_all.addEventListener('click', function(e) { + move_selection(e, this, SelectBox.move_all, field_id + '_to', field_id + '_from'); + }); + warning_footer.addEventListener('click', function(e) { + filter_selected_input.value = ''; + SelectBox.filter(field_id + '_to', ''); + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }); + filter_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_from', '_to'); + }); + filter_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_from'); + }); + filter_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_from', '_to'); + }); + filter_selected_input.addEventListener('keypress', function(e) { + SelectFilter.filter_key_press(e, field_id, '_to', '_from'); + }); + filter_selected_input.addEventListener('keyup', function(e) { + SelectFilter.filter_key_up(e, field_id, '_to', '_selected_input'); + }); + filter_selected_input.addEventListener('keydown', function(e) { + SelectFilter.filter_key_down(e, field_id, '_to', '_from'); + }); + selector_div.addEventListener('change', function(e) { + if (e.target.tagName === 'SELECT') { + SelectFilter.refresh_icons(field_id); + } + }); + selector_div.addEventListener('dblclick', function(e) { + if (e.target.tagName === 'OPTION') { + if (e.target.closest('select').id === field_id + '_to') { + SelectBox.move(field_id + '_to', field_id + '_from'); + } else { + SelectBox.move(field_id + '_from', field_id + '_to'); + } + SelectFilter.refresh_icons(field_id); + } + }); + from_box.closest('form').addEventListener('submit', function() { + SelectBox.filter(field_id + '_to', ''); + SelectBox.select_all(field_id + '_to'); + }); + SelectBox.init(field_id + '_from'); + SelectBox.init(field_id + '_to'); + // Move selected from_box options to to_box + SelectBox.move(field_id + '_from', field_id + '_to'); + + // Initial icon refresh + SelectFilter.refresh_icons(field_id); + }, + any_selected: function(field) { + // Temporarily add the required attribute and check validity. + field.required = true; + const any_selected = field.checkValidity(); + field.required = false; + return any_selected; + }, + refresh_filtered_warning: function(field_id) { + const count = SelectBox.get_hidden_node_count(field_id + '_to'); + const selector = document.getElementById(field_id + '_selector_chosen'); + const warning = document.getElementById(field_id + '_list-footer-display-text'); + selector.className = selector.className.replace('selector-chosen--with-filtered', ''); + warning.textContent = interpolate(ngettext( + '%s selected option not visible', + '%s selected options not visible', + count + ), [count]); + if(count > 0) { + selector.className += ' selector-chosen--with-filtered'; + } + }, + refresh_filtered_selects: function(field_id) { + SelectBox.filter(field_id + '_from', document.getElementById(field_id + "_input").value); + SelectBox.filter(field_id + '_to', document.getElementById(field_id + "_selected_input").value); + }, + refresh_icons: function(field_id) { + const from = document.getElementById(field_id + '_from'); + const to = document.getElementById(field_id + '_to'); + // Active if at least one item is selected + document.getElementById(field_id + '_add_link').classList.toggle('active', SelectFilter.any_selected(from)); + document.getElementById(field_id + '_remove_link').classList.toggle('active', SelectFilter.any_selected(to)); + // Active if the corresponding box isn't empty + document.getElementById(field_id + '_add_all_link').classList.toggle('active', from.querySelector('option')); + document.getElementById(field_id + '_remove_all_link').classList.toggle('active', to.querySelector('option')); + SelectFilter.refresh_filtered_warning(field_id); + }, + filter_key_press: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // don't submit form if user pressed Enter + if ((event.which && event.which === 13) || (event.keyCode && event.keyCode === 13)) { + source_box.selectedIndex = 0; + SelectBox.move(field_id + source, field_id + target); + source_box.selectedIndex = 0; + event.preventDefault(); + } + }, + filter_key_up: function(event, field_id, source, filter_input) { + const input = filter_input || '_input'; + const source_box = document.getElementById(field_id + source); + const temp = source_box.selectedIndex; + SelectBox.filter(field_id + source, document.getElementById(field_id + input).value); + source_box.selectedIndex = temp; + SelectFilter.refresh_filtered_warning(field_id); + SelectFilter.refresh_icons(field_id); + }, + filter_key_down: function(event, field_id, source, target) { + const source_box = document.getElementById(field_id + source); + // right key (39) or left key (37) + const direction = source === '_from' ? 39 : 37; + // right arrow -- move across + if ((event.which && event.which === direction) || (event.keyCode && event.keyCode === direction)) { + const old_index = source_box.selectedIndex; + SelectBox.move(field_id + source, field_id + target); + SelectFilter.refresh_filtered_selects(field_id); + SelectFilter.refresh_filtered_warning(field_id); + source_box.selectedIndex = (old_index === source_box.length) ? source_box.length - 1 : old_index; + return; + } + // down arrow -- wrap around + if ((event.which && event.which === 40) || (event.keyCode && event.keyCode === 40)) { + source_box.selectedIndex = (source_box.length === source_box.selectedIndex + 1) ? 0 : source_box.selectedIndex + 1; + } + // up arrow -- wrap around + if ((event.which && event.which === 38) || (event.keyCode && event.keyCode === 38)) { + source_box.selectedIndex = (source_box.selectedIndex === 0) ? source_box.length - 1 : source_box.selectedIndex - 1; + } + } + }; + + window.addEventListener('load', function(e) { + document.querySelectorAll('select.selectfilter, select.selectfilterstacked').forEach(function(el) { + const data = el.dataset; + SelectFilter.init(el.id, data.fieldName, parseInt(data.isStacked, 10)); + }); + }); +} diff --git a/static/js/actions.js b/static/js/actions.js new file mode 100644 index 0000000..20a5c14 --- /dev/null +++ b/static/js/actions.js @@ -0,0 +1,201 @@ +/*global gettext, interpolate, ngettext*/ +'use strict'; +{ + function show(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.remove('hidden'); + }); + } + + function hide(selector) { + document.querySelectorAll(selector).forEach(function(el) { + el.classList.add('hidden'); + }); + } + + function showQuestion(options) { + hide(options.acrossClears); + show(options.acrossQuestions); + hide(options.allContainer); + } + + function showClear(options) { + show(options.acrossClears); + hide(options.acrossQuestions); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + show(options.allContainer); + hide(options.counterContainer); + } + + function reset(options) { + hide(options.acrossClears); + hide(options.acrossQuestions); + hide(options.allContainer); + show(options.counterContainer); + } + + function clearAcross(options) { + reset(options); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 0; + }); + document.querySelector(options.actionContainer).classList.remove(options.selectedClass); + } + + function checker(actionCheckboxes, options, checked) { + if (checked) { + showQuestion(options); + } else { + reset(options); + } + actionCheckboxes.forEach(function(el) { + el.checked = checked; + el.closest('tr').classList.toggle(options.selectedClass, checked); + }); + } + + function updateCounter(actionCheckboxes, options) { + const sel = Array.from(actionCheckboxes).filter(function(el) { + return el.checked; + }).length; + const counter = document.querySelector(options.counterContainer); + // data-actions-icnt is defined in the generated HTML + // and contains the total amount of objects in the queryset + const actions_icnt = Number(counter.dataset.actionsIcnt); + counter.textContent = interpolate( + ngettext('%(sel)s of %(cnt)s selected', '%(sel)s of %(cnt)s selected', sel), { + sel: sel, + cnt: actions_icnt + }, true); + const allToggle = document.getElementById(options.allToggleId); + allToggle.checked = sel === actionCheckboxes.length; + if (allToggle.checked) { + showQuestion(options); + } else { + clearAcross(options); + } + } + + const defaults = { + actionContainer: "div.actions", + counterContainer: "span.action-counter", + allContainer: "div.actions span.all", + acrossInput: "div.actions input.select-across", + acrossQuestions: "div.actions span.question", + acrossClears: "div.actions span.clear", + allToggleId: "action-toggle", + selectedClass: "selected" + }; + + window.Actions = function(actionCheckboxes, options) { + options = Object.assign({}, defaults, options); + let list_editable_changed = false; + let lastChecked = null; + let shiftPressed = false; + + document.addEventListener('keydown', (event) => { + shiftPressed = event.shiftKey; + }); + + document.addEventListener('keyup', (event) => { + shiftPressed = event.shiftKey; + }); + + document.getElementById(options.allToggleId).addEventListener('click', function(event) { + checker(actionCheckboxes, options, this.checked); + updateCounter(actionCheckboxes, options); + }); + + document.querySelectorAll(options.acrossQuestions + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + const acrossInputs = document.querySelectorAll(options.acrossInput); + acrossInputs.forEach(function(acrossInput) { + acrossInput.value = 1; + }); + showClear(options); + }); + }); + + document.querySelectorAll(options.acrossClears + " a").forEach(function(el) { + el.addEventListener('click', function(event) { + event.preventDefault(); + document.getElementById(options.allToggleId).checked = false; + clearAcross(options); + checker(actionCheckboxes, options, false); + updateCounter(actionCheckboxes, options); + }); + }); + + function affectedCheckboxes(target, withModifier) { + const multiSelect = (lastChecked && withModifier && lastChecked !== target); + if (!multiSelect) { + return [target]; + } + const checkboxes = Array.from(actionCheckboxes); + const targetIndex = checkboxes.findIndex(el => el === target); + const lastCheckedIndex = checkboxes.findIndex(el => el === lastChecked); + const startIndex = Math.min(targetIndex, lastCheckedIndex); + const endIndex = Math.max(targetIndex, lastCheckedIndex); + const filtered = checkboxes.filter((el, index) => (startIndex <= index) && (index <= endIndex)); + return filtered; + }; + + Array.from(document.getElementById('result_list').tBodies).forEach(function(el) { + el.addEventListener('change', function(event) { + const target = event.target; + if (target.classList.contains('action-select')) { + const checkboxes = affectedCheckboxes(target, shiftPressed); + checker(checkboxes, options, target.checked); + updateCounter(actionCheckboxes, options); + lastChecked = target; + } else { + list_editable_changed = true; + } + }); + }); + + document.querySelector('#changelist-form button[name=index]').addEventListener('click', function(event) { + if (list_editable_changed) { + const confirmed = confirm(gettext("You have unsaved changes on individual editable fields. If you run an action, your unsaved changes will be lost.")); + if (!confirmed) { + event.preventDefault(); + } + } + }); + + const el = document.querySelector('#changelist-form input[name=_save]'); + // The button does not exist if no fields are editable. + if (el) { + el.addEventListener('click', function(event) { + if (document.querySelector('[name=action]').value) { + const text = list_editable_changed + ? gettext("You have selected an action, but you haven’t saved your changes to individual fields yet. Please click OK to save. You’ll need to re-run the action.") + : gettext("You have selected an action, and you haven’t made any changes on individual fields. You’re probably looking for the Go button rather than the Save button."); + if (!confirm(text)) { + event.preventDefault(); + } + } + }); + } + }; + + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + const actionsEls = document.querySelectorAll('tr input.action-select'); + if (actionsEls.length > 0) { + Actions(actionsEls); + } + }); +} diff --git a/static/js/admin/DateTimeShortcuts.js b/static/js/admin/DateTimeShortcuts.js new file mode 100644 index 0000000..aa1cae9 --- /dev/null +++ b/static/js/admin/DateTimeShortcuts.js @@ -0,0 +1,408 @@ +/*global Calendar, findPosX, findPosY, get_format, gettext, gettext_noop, interpolate, ngettext, quickElement*/ +// Inserts shortcut buttons after all of the following: +// +// +'use strict'; +{ + const DateTimeShortcuts = { + calendars: [], + calendarInputs: [], + clockInputs: [], + clockHours: { + default_: [ + [gettext_noop('Now'), -1], + [gettext_noop('Midnight'), 0], + [gettext_noop('6 a.m.'), 6], + [gettext_noop('Noon'), 12], + [gettext_noop('6 p.m.'), 18] + ] + }, + dismissClockFunc: [], + dismissCalendarFunc: [], + calendarDivName1: 'calendarbox', // name of calendar
      that gets toggled + calendarDivName2: 'calendarin', // name of
      that contains calendar + calendarLinkName: 'calendarlink', // name of the link that is used to toggle + clockDivName: 'clockbox', // name of clock
      that gets toggled + clockLinkName: 'clocklink', // name of the link that is used to toggle + shortCutsClass: 'datetimeshortcuts', // class of the clock and cal shortcuts + timezoneWarningClass: 'timezonewarning', // class of the warning for timezone mismatch + timezoneOffset: 0, + init: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localOffset = new Date().getTimezoneOffset() * -60; + DateTimeShortcuts.timezoneOffset = localOffset - serverOffset; + } + + for (const inp of document.getElementsByTagName('input')) { + if (inp.type === 'text' && inp.classList.contains('vTimeField')) { + DateTimeShortcuts.addClock(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + else if (inp.type === 'text' && inp.classList.contains('vDateField')) { + DateTimeShortcuts.addCalendar(inp); + DateTimeShortcuts.addTimezoneWarning(inp); + } + } + }, + // Return the current time while accounting for the server timezone. + now: function() { + const serverOffset = document.body.dataset.adminUtcOffset; + if (serverOffset) { + const localNow = new Date(); + const localOffset = localNow.getTimezoneOffset() * -60; + localNow.setTime(localNow.getTime() + 1000 * (serverOffset - localOffset)); + return localNow; + } else { + return new Date(); + } + }, + // Add a warning when the time zone in the browser and backend do not match. + addTimezoneWarning: function(inp) { + const warningClass = DateTimeShortcuts.timezoneWarningClass; + let timezoneOffset = DateTimeShortcuts.timezoneOffset / 3600; + + // Only warn if there is a time zone mismatch. + if (!timezoneOffset) { + return; + } + + // Check if warning is already there. + if (inp.parentNode.querySelectorAll('.' + warningClass).length) { + return; + } + + let message; + if (timezoneOffset > 0) { + message = ngettext( + 'Note: You are %s hour ahead of server time.', + 'Note: You are %s hours ahead of server time.', + timezoneOffset + ); + } + else { + timezoneOffset *= -1; + message = ngettext( + 'Note: You are %s hour behind server time.', + 'Note: You are %s hours behind server time.', + timezoneOffset + ); + } + message = interpolate(message, [timezoneOffset]); + + const warning = document.createElement('div'); + warning.classList.add('help', warningClass); + warning.textContent = message; + inp.parentNode.appendChild(warning); + }, + // Add clock widget to a given field + addClock: function(inp) { + const num = DateTimeShortcuts.clockInputs.length; + DateTimeShortcuts.clockInputs[num] = inp; + DateTimeShortcuts.dismissClockFunc[num] = function() { DateTimeShortcuts.dismissClock(num); return true; }; + + // Shortcut links (clock icon and "Now" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const now_link = document.createElement('a'); + now_link.href = "#"; + now_link.textContent = gettext('Now'); + now_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, -1); + }); + const clock_link = document.createElement('a'); + clock_link.href = '#'; + clock_link.id = DateTimeShortcuts.clockLinkName + num; + clock_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the clock + e.stopPropagation(); + DateTimeShortcuts.openClock(num); + }); + + quickElement( + 'span', clock_link, '', + 'class', 'clock-icon', + 'title', gettext('Choose a Time') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(now_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(clock_link); + + // Create clock link div + // + // Markup looks like: + // + + const clock_box = document.createElement('div'); + clock_box.style.display = 'none'; + clock_box.style.position = 'absolute'; + clock_box.className = 'clockbox module'; + clock_box.id = DateTimeShortcuts.clockDivName + num; + document.body.appendChild(clock_box); + clock_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + quickElement('h2', clock_box, gettext('Choose a time')); + const time_list = quickElement('ul', clock_box); + time_list.className = 'timelist'; + // The list of choices can be overridden in JavaScript like this: + // DateTimeShortcuts.clockHours.name = [['3 a.m.', 3]]; + // where name is the name attribute of the . + const name = typeof DateTimeShortcuts.clockHours[inp.name] === 'undefined' ? 'default_' : inp.name; + DateTimeShortcuts.clockHours[name].forEach(function(element) { + const time_link = quickElement('a', quickElement('li', time_list), gettext(element[0]), 'href', '#'); + time_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleClockQuicklink(num, element[1]); + }); + }); + + const cancel_p = quickElement('p', clock_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissClock(num); + }); + + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissClock(num); + event.preventDefault(); + } + }); + }, + openClock: function(num) { + const clock_box = document.getElementById(DateTimeShortcuts.clockDivName + num); + const clock_link = document.getElementById(DateTimeShortcuts.clockLinkName + num); + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + clock_box.style.left = findPosX(clock_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + clock_box.style.left = findPosX(clock_link) - 110 + 'px'; + } + clock_box.style.top = Math.max(0, findPosY(clock_link) - 30) + 'px'; + + // Show the clock box + clock_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + dismissClock: function(num) { + document.getElementById(DateTimeShortcuts.clockDivName + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissClockFunc[num]); + }, + handleClockQuicklink: function(num, val) { + let d; + if (val === -1) { + d = DateTimeShortcuts.now(); + } + else { + d = new Date(1970, 1, 1, val, 0, 0, 0); + } + DateTimeShortcuts.clockInputs[num].value = d.strftime(get_format('TIME_INPUT_FORMATS')[0]); + DateTimeShortcuts.clockInputs[num].focus(); + DateTimeShortcuts.dismissClock(num); + }, + // Add calendar widget to a given field. + addCalendar: function(inp) { + const num = DateTimeShortcuts.calendars.length; + + DateTimeShortcuts.calendarInputs[num] = inp; + DateTimeShortcuts.dismissCalendarFunc[num] = function() { DateTimeShortcuts.dismissCalendar(num); return true; }; + + // Shortcut links (calendar icon and "Today" link) + const shortcuts_span = document.createElement('span'); + shortcuts_span.className = DateTimeShortcuts.shortCutsClass; + inp.parentNode.insertBefore(shortcuts_span, inp.nextSibling); + const today_link = document.createElement('a'); + today_link.href = '#'; + today_link.appendChild(document.createTextNode(gettext('Today'))); + today_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + const cal_link = document.createElement('a'); + cal_link.href = '#'; + cal_link.id = DateTimeShortcuts.calendarLinkName + num; + cal_link.addEventListener('click', function(e) { + e.preventDefault(); + // avoid triggering the document click handler to dismiss the calendar + e.stopPropagation(); + DateTimeShortcuts.openCalendar(num); + }); + quickElement( + 'span', cal_link, '', + 'class', 'date-icon', + 'title', gettext('Choose a Date') + ); + shortcuts_span.appendChild(document.createTextNode('\u00A0')); + shortcuts_span.appendChild(today_link); + shortcuts_span.appendChild(document.createTextNode('\u00A0|\u00A0')); + shortcuts_span.appendChild(cal_link); + + // Create calendarbox div. + // + // Markup looks like: + // + //
      + //

      + // + // February 2003 + //

      + //
      + // + //
      + //
      + // Yesterday | Today | Tomorrow + //
      + //

      Cancel

      + //
      + const cal_box = document.createElement('div'); + cal_box.style.display = 'none'; + cal_box.style.position = 'absolute'; + cal_box.className = 'calendarbox module'; + cal_box.id = DateTimeShortcuts.calendarDivName1 + num; + document.body.appendChild(cal_box); + cal_box.addEventListener('click', function(e) { e.stopPropagation(); }); + + // next-prev links + const cal_nav = quickElement('div', cal_box); + const cal_nav_prev = quickElement('a', cal_nav, '<', 'href', '#'); + cal_nav_prev.className = 'calendarnav-previous'; + cal_nav_prev.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawPrev(num); + }); + + const cal_nav_next = quickElement('a', cal_nav, '>', 'href', '#'); + cal_nav_next.className = 'calendarnav-next'; + cal_nav_next.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.drawNext(num); + }); + + // main box + const cal_main = quickElement('div', cal_box, '', 'id', DateTimeShortcuts.calendarDivName2 + num); + cal_main.className = 'calendar'; + DateTimeShortcuts.calendars[num] = new Calendar(DateTimeShortcuts.calendarDivName2 + num, DateTimeShortcuts.handleCalendarCallback(num)); + DateTimeShortcuts.calendars[num].drawCurrent(); + + // calendar shortcuts + const shortcuts = quickElement('div', cal_box); + shortcuts.className = 'calendar-shortcuts'; + let day_link = quickElement('a', shortcuts, gettext('Yesterday'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, -1); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Today'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, 0); + }); + shortcuts.appendChild(document.createTextNode('\u00A0|\u00A0')); + day_link = quickElement('a', shortcuts, gettext('Tomorrow'), 'href', '#'); + day_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.handleCalendarQuickLink(num, +1); + }); + + // cancel bar + const cancel_p = quickElement('p', cal_box); + cancel_p.className = 'calendar-cancel'; + const cancel_link = quickElement('a', cancel_p, gettext('Cancel'), 'href', '#'); + cancel_link.addEventListener('click', function(e) { + e.preventDefault(); + DateTimeShortcuts.dismissCalendar(num); + }); + document.addEventListener('keyup', function(event) { + if (event.which === 27) { + // ESC key closes popup + DateTimeShortcuts.dismissCalendar(num); + event.preventDefault(); + } + }); + }, + openCalendar: function(num) { + const cal_box = document.getElementById(DateTimeShortcuts.calendarDivName1 + num); + const cal_link = document.getElementById(DateTimeShortcuts.calendarLinkName + num); + const inp = DateTimeShortcuts.calendarInputs[num]; + + // Determine if the current value in the input has a valid date. + // If so, draw the calendar with that date's year and month. + if (inp.value) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + const selected = inp.value.strptime(format); + const year = selected.getUTCFullYear(); + const month = selected.getUTCMonth() + 1; + const re = /\d{4}/; + if (re.test(year.toString()) && month >= 1 && month <= 12) { + DateTimeShortcuts.calendars[num].drawDate(month, year, selected); + } + } + + // Recalculate the clockbox position + // is it left-to-right or right-to-left layout ? + if (window.getComputedStyle(document.body).direction !== 'rtl') { + cal_box.style.left = findPosX(cal_link) + 17 + 'px'; + } + else { + // since style's width is in em, it'd be tough to calculate + // px value of it. let's use an estimated px for now + cal_box.style.left = findPosX(cal_link) - 180 + 'px'; + } + cal_box.style.top = Math.max(0, findPosY(cal_link) - 75) + 'px'; + + cal_box.style.display = 'block'; + document.addEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + dismissCalendar: function(num) { + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + document.removeEventListener('click', DateTimeShortcuts.dismissCalendarFunc[num]); + }, + drawPrev: function(num) { + DateTimeShortcuts.calendars[num].drawPreviousMonth(); + }, + drawNext: function(num) { + DateTimeShortcuts.calendars[num].drawNextMonth(); + }, + handleCalendarCallback: function(num) { + const format = get_format('DATE_INPUT_FORMATS')[0]; + return function(y, m, d) { + DateTimeShortcuts.calendarInputs[num].value = new Date(y, m - 1, d).strftime(format); + DateTimeShortcuts.calendarInputs[num].focus(); + document.getElementById(DateTimeShortcuts.calendarDivName1 + num).style.display = 'none'; + }; + }, + handleCalendarQuickLink: function(num, offset) { + const d = DateTimeShortcuts.now(); + d.setDate(d.getDate() + offset); + DateTimeShortcuts.calendarInputs[num].value = d.strftime(get_format('DATE_INPUT_FORMATS')[0]); + DateTimeShortcuts.calendarInputs[num].focus(); + DateTimeShortcuts.dismissCalendar(num); + } + }; + + window.addEventListener('load', DateTimeShortcuts.init); + window.DateTimeShortcuts = DateTimeShortcuts; +} diff --git a/static/js/admin/RelatedObjectLookups.js b/static/js/admin/RelatedObjectLookups.js new file mode 100644 index 0000000..afb6b66 --- /dev/null +++ b/static/js/admin/RelatedObjectLookups.js @@ -0,0 +1,238 @@ +/*global SelectBox, interpolate*/ +// Handles related-objects functionality: lookup link for raw_id_fields +// and Add Another links. +'use strict'; +{ + const $ = django.jQuery; + let popupIndex = 0; + const relatedWindows = []; + + function dismissChildPopups() { + relatedWindows.forEach(function(win) { + if(!win.closed) { + win.dismissChildPopups(); + win.close(); + } + }); + } + + function setPopupIndex() { + if(document.getElementsByName("_popup").length > 0) { + const index = window.name.lastIndexOf("__") + 2; + popupIndex = parseInt(window.name.substring(index)); + } else { + popupIndex = 0; + } + } + + function addPopupIndex(name) { + return name + "__" + (popupIndex + 1); + } + + function removePopupIndex(name) { + return name.replace(new RegExp("__" + (popupIndex + 1) + "$"), ''); + } + + function showAdminPopup(triggeringLink, name_regexp, add_popup) { + const name = addPopupIndex(triggeringLink.id.replace(name_regexp, '')); + const href = new URL(triggeringLink.href); + if (add_popup) { + href.searchParams.set('_popup', 1); + } + const win = window.open(href, name, 'height=500,width=800,resizable=yes,scrollbars=yes'); + relatedWindows.push(win); + win.focus(); + return false; + } + + function showRelatedObjectLookupPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^lookup_/, true); + } + + function dismissRelatedLookupPopup(win, chosenId) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + chosenId; + } else { + document.getElementById(name).value = chosenId; + } + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function showRelatedObjectPopup(triggeringLink) { + return showAdminPopup(triggeringLink, /^(change|add|delete)_/, false); + } + + function updateRelatedObjectLinks(triggeringLink) { + const $this = $(triggeringLink); + const siblings = $this.nextAll('.view-related, .change-related, .delete-related'); + if (!siblings.length) { + return; + } + const value = $this.val(); + if (value) { + siblings.each(function() { + const elm = $(this); + elm.attr('href', elm.attr('data-href-template').replace('__fk__', value)); + }); + } else { + siblings.removeAttr('href'); + } + } + + function updateRelatedSelectsOptions(currentSelect, win, objId, newRepr, newId) { + // After create/edit a model from the options next to the current + // select (+ or :pencil:) update ForeignKey PK of the rest of selects + // in the page. + + const path = win.location.pathname; + // Extract the model from the popup url '...//add/' or + // '...///change/' depending the action (add or change). + const modelName = path.split('/')[path.split('/').length - (objId ? 4 : 3)]; + // Exclude autocomplete selects. + const selectsRelated = document.querySelectorAll(`[data-model-ref="${modelName}"] select:not(.admin-autocomplete)`); + + selectsRelated.forEach(function(select) { + if (currentSelect === select) { + return; + } + + let option = select.querySelector(`option[value="${objId}"]`); + + if (!option) { + option = new Option(newRepr, newId); + select.options.add(option); + return; + } + + option.textContent = newRepr; + option.value = newId; + }); + } + + function dismissAddRelatedObjectPopup(win, newId, newRepr) { + const name = removePopupIndex(win.name); + const elem = document.getElementById(name); + if (elem) { + const elemName = elem.nodeName.toUpperCase(); + if (elemName === 'SELECT') { + elem.options[elem.options.length] = new Option(newRepr, newId, true, true); + updateRelatedSelectsOptions(elem, win, null, newRepr, newId); + } else if (elemName === 'INPUT') { + if (elem.classList.contains('vManyToManyRawIdAdminField') && elem.value) { + elem.value += ',' + newId; + } else { + elem.value = newId; + } + } + // Trigger a change event to update related links if required. + $(elem).trigger('change'); + } else { + const toId = name + "_to"; + const o = new Option(newRepr, newId); + SelectBox.add_to_cache(toId, o); + SelectBox.redisplay(toId); + } + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissChangeRelatedObjectPopup(win, objId, newRepr, newId) { + const id = removePopupIndex(win.name.replace(/^edit_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + this.textContent = newRepr; + this.value = newId; + } + }).trigger('change'); + updateRelatedSelectsOptions(selects[0], win, objId, newRepr, newId); + selects.next().find('.select2-selection__rendered').each(function() { + // The element can have a clear button as a child. + // Use the lastChild to modify only the displayed value. + this.lastChild.textContent = newRepr; + this.title = newRepr; + }); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + function dismissDeleteRelatedObjectPopup(win, objId) { + const id = removePopupIndex(win.name.replace(/^delete_/, '')); + const selectsSelector = interpolate('#%s, #%s_from, #%s_to', [id, id, id]); + const selects = $(selectsSelector); + selects.find('option').each(function() { + if (this.value === objId) { + $(this).remove(); + } + }).trigger('change'); + const index = relatedWindows.indexOf(win); + if (index > -1) { + relatedWindows.splice(index, 1); + } + win.close(); + } + + window.showRelatedObjectLookupPopup = showRelatedObjectLookupPopup; + window.dismissRelatedLookupPopup = dismissRelatedLookupPopup; + window.showRelatedObjectPopup = showRelatedObjectPopup; + window.updateRelatedObjectLinks = updateRelatedObjectLinks; + window.dismissAddRelatedObjectPopup = dismissAddRelatedObjectPopup; + window.dismissChangeRelatedObjectPopup = dismissChangeRelatedObjectPopup; + window.dismissDeleteRelatedObjectPopup = dismissDeleteRelatedObjectPopup; + window.dismissChildPopups = dismissChildPopups; + + // Kept for backward compatibility + window.showAddAnotherPopup = showRelatedObjectPopup; + window.dismissAddAnotherPopup = dismissAddRelatedObjectPopup; + + window.addEventListener('unload', function(evt) { + window.dismissChildPopups(); + }); + + $(document).ready(function() { + setPopupIndex(); + $("a[data-popup-opener]").on('click', function(event) { + event.preventDefault(); + opener.dismissRelatedLookupPopup(window, $(this).data("popup-opener")); + }); + $('body').on('click', '.related-widget-wrapper-link[data-popup="yes"]', function(e) { + e.preventDefault(); + if (this.href) { + const event = $.Event('django:show-related', {href: this.href}); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectPopup(this); + } + } + }); + $('body').on('change', '.related-widget-wrapper select', function(e) { + const event = $.Event('django:update-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + updateRelatedObjectLinks(this); + } + }); + $('.related-widget-wrapper select').trigger('change'); + $('body').on('click', '.related-lookup', function(e) { + e.preventDefault(); + const event = $.Event('django:lookup-related'); + $(this).trigger(event); + if (!event.isDefaultPrevented()) { + showRelatedObjectLookupPopup(this); + } + }); + }); +} diff --git a/static/js/autocomplete.js b/static/js/autocomplete.js new file mode 100644 index 0000000..d3daeab --- /dev/null +++ b/static/js/autocomplete.js @@ -0,0 +1,33 @@ +'use strict'; +{ + const $ = django.jQuery; + + $.fn.djangoAdminSelect2 = function() { + $.each(this, function(i, element) { + $(element).select2({ + ajax: { + data: (params) => { + return { + term: params.term, + page: params.page, + app_label: element.dataset.appLabel, + model_name: element.dataset.modelName, + field_name: element.dataset.fieldName + }; + } + } + }); + }); + return this; + }; + + $(function() { + // Initialize all autocomplete widgets except the one in the template + // form used when a new formset is added. + $('.admin-autocomplete').not('[name*=__prefix__]').djangoAdminSelect2(); + }); + + document.addEventListener('formset:added', (event) => { + $(event.target).find('.admin-autocomplete').djangoAdminSelect2(); + }); +} diff --git a/static/js/calendar.js b/static/js/calendar.js new file mode 100644 index 0000000..a62d10a --- /dev/null +++ b/static/js/calendar.js @@ -0,0 +1,221 @@ +/*global gettext, pgettext, get_format, quickElement, removeChildren*/ +/* +calendar.js - Calendar functions by Adrian Holovaty +depends on core.js for utility functions like removeChildren or quickElement +*/ +'use strict'; +{ + // CalendarNamespace -- Provides a collection of HTML calendar-related helper functions + const CalendarNamespace = { + monthsOfYear: [ + gettext('January'), + gettext('February'), + gettext('March'), + gettext('April'), + gettext('May'), + gettext('June'), + gettext('July'), + gettext('August'), + gettext('September'), + gettext('October'), + gettext('November'), + gettext('December') + ], + monthsOfYearAbbrev: [ + pgettext('abbrev. month January', 'Jan'), + pgettext('abbrev. month February', 'Feb'), + pgettext('abbrev. month March', 'Mar'), + pgettext('abbrev. month April', 'Apr'), + pgettext('abbrev. month May', 'May'), + pgettext('abbrev. month June', 'Jun'), + pgettext('abbrev. month July', 'Jul'), + pgettext('abbrev. month August', 'Aug'), + pgettext('abbrev. month September', 'Sep'), + pgettext('abbrev. month October', 'Oct'), + pgettext('abbrev. month November', 'Nov'), + pgettext('abbrev. month December', 'Dec') + ], + daysOfWeek: [ + pgettext('one letter Sunday', 'S'), + pgettext('one letter Monday', 'M'), + pgettext('one letter Tuesday', 'T'), + pgettext('one letter Wednesday', 'W'), + pgettext('one letter Thursday', 'T'), + pgettext('one letter Friday', 'F'), + pgettext('one letter Saturday', 'S') + ], + firstDayOfWeek: parseInt(get_format('FIRST_DAY_OF_WEEK')), + isLeapYear: function(year) { + return (((year % 4) === 0) && ((year % 100) !== 0 ) || ((year % 400) === 0)); + }, + getDaysInMonth: function(month, year) { + let days; + if (month === 1 || month === 3 || month === 5 || month === 7 || month === 8 || month === 10 || month === 12) { + days = 31; + } + else if (month === 4 || month === 6 || month === 9 || month === 11) { + days = 30; + } + else if (month === 2 && CalendarNamespace.isLeapYear(year)) { + days = 29; + } + else { + days = 28; + } + return days; + }, + draw: function(month, year, div_id, callback, selected) { // month = 1-12, year = 1-9999 + const today = new Date(); + const todayDay = today.getDate(); + const todayMonth = today.getMonth() + 1; + const todayYear = today.getFullYear(); + let todayClass = ''; + + // Use UTC functions here because the date field does not contain time + // and using the UTC function variants prevent the local time offset + // from altering the date, specifically the day field. For example: + // + // ``` + // var x = new Date('2013-10-02'); + // var day = x.getDate(); + // ``` + // + // The day variable above will be 1 instead of 2 in, say, US Pacific time + // zone. + let isSelectedMonth = false; + if (typeof selected !== 'undefined') { + isSelectedMonth = (selected.getUTCFullYear() === year && (selected.getUTCMonth() + 1) === month); + } + + month = parseInt(month); + year = parseInt(year); + const calDiv = document.getElementById(div_id); + removeChildren(calDiv); + const calTable = document.createElement('table'); + quickElement('caption', calTable, CalendarNamespace.monthsOfYear[month - 1] + ' ' + year); + const tableBody = quickElement('tbody', calTable); + + // Draw days-of-week header + let tableRow = quickElement('tr', tableBody); + for (let i = 0; i < 7; i++) { + quickElement('th', tableRow, CalendarNamespace.daysOfWeek[(i + CalendarNamespace.firstDayOfWeek) % 7]); + } + + const startingPos = new Date(year, month - 1, 1 - CalendarNamespace.firstDayOfWeek).getDay(); + const days = CalendarNamespace.getDaysInMonth(month, year); + + let nonDayCell; + + // Draw blanks before first of month + tableRow = quickElement('tr', tableBody); + for (let i = 0; i < startingPos; i++) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + function calendarMonth(y, m) { + function onClick(e) { + e.preventDefault(); + callback(y, m, this.textContent); + } + return onClick; + } + + // Draw days of month + let currentDay = 1; + for (let i = startingPos; currentDay <= days; i++) { + if (i % 7 === 0 && currentDay !== 1) { + tableRow = quickElement('tr', tableBody); + } + if ((currentDay === todayDay) && (month === todayMonth) && (year === todayYear)) { + todayClass = 'today'; + } else { + todayClass = ''; + } + + // use UTC function; see above for explanation. + if (isSelectedMonth && currentDay === selected.getUTCDate()) { + if (todayClass !== '') { + todayClass += " "; + } + todayClass += "selected"; + } + + const cell = quickElement('td', tableRow, '', 'class', todayClass); + const link = quickElement('a', cell, currentDay, 'href', '#'); + link.addEventListener('click', calendarMonth(year, month)); + currentDay++; + } + + // Draw blanks after end of month (optional, but makes for valid code) + while (tableRow.childNodes.length < 7) { + nonDayCell = quickElement('td', tableRow, ' '); + nonDayCell.className = "nonday"; + } + + calDiv.appendChild(calTable); + } + }; + + // Calendar -- A calendar instance + function Calendar(div_id, callback, selected) { + // div_id (string) is the ID of the element in which the calendar will + // be displayed + // callback (string) is the name of a JavaScript function that will be + // called with the parameters (year, month, day) when a day in the + // calendar is clicked + this.div_id = div_id; + this.callback = callback; + this.today = new Date(); + this.currentMonth = this.today.getMonth() + 1; + this.currentYear = this.today.getFullYear(); + if (typeof selected !== 'undefined') { + this.selected = selected; + } + } + Calendar.prototype = { + drawCurrent: function() { + CalendarNamespace.draw(this.currentMonth, this.currentYear, this.div_id, this.callback, this.selected); + }, + drawDate: function(month, year, selected) { + this.currentMonth = month; + this.currentYear = year; + + if(selected) { + this.selected = selected; + } + + this.drawCurrent(); + }, + drawPreviousMonth: function() { + if (this.currentMonth === 1) { + this.currentMonth = 12; + this.currentYear--; + } + else { + this.currentMonth--; + } + this.drawCurrent(); + }, + drawNextMonth: function() { + if (this.currentMonth === 12) { + this.currentMonth = 1; + this.currentYear++; + } + else { + this.currentMonth++; + } + this.drawCurrent(); + }, + drawPreviousYear: function() { + this.currentYear--; + this.drawCurrent(); + }, + drawNextYear: function() { + this.currentYear++; + this.drawCurrent(); + } + }; + window.Calendar = Calendar; + window.CalendarNamespace = CalendarNamespace; +} diff --git a/static/js/cancel.js b/static/js/cancel.js new file mode 100644 index 0000000..3069c6f --- /dev/null +++ b/static/js/cancel.js @@ -0,0 +1,29 @@ +'use strict'; +{ + // Call function fn when the DOM is loaded and ready. If it is already + // loaded, call the function now. + // http://youmightnotneedjquery.com/#ready + function ready(fn) { + if (document.readyState !== 'loading') { + fn(); + } else { + document.addEventListener('DOMContentLoaded', fn); + } + } + + ready(function() { + function handleClick(event) { + event.preventDefault(); + const params = new URLSearchParams(window.location.search); + if (params.has('_popup')) { + window.close(); // Close the popup. + } else { + window.history.back(); // Otherwise, go back. + } + } + + document.querySelectorAll('.cancel-link').forEach(function(el) { + el.addEventListener('click', handleClick); + }); + }); +} diff --git a/static/js/change_form.js b/static/js/change_form.js new file mode 100644 index 0000000..96a4c62 --- /dev/null +++ b/static/js/change_form.js @@ -0,0 +1,16 @@ +'use strict'; +{ + const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; + const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; + if (modelName) { + const form = document.getElementById(modelName + '_form'); + for (const element of form.elements) { + // HTMLElement.offsetParent returns null when the element is not + // rendered. + if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { + element.focus(); + break; + } + } + } +} diff --git a/static/js/collapse.js b/static/js/collapse.js new file mode 100644 index 0000000..c6c7b0f --- /dev/null +++ b/static/js/collapse.js @@ -0,0 +1,43 @@ +/*global gettext*/ +'use strict'; +{ + window.addEventListener('load', function() { + // Add anchor tag for Show/Hide link + const fieldsets = document.querySelectorAll('fieldset.collapse'); + for (const [i, elem] of fieldsets.entries()) { + // Don't hide if fields in this fieldset have errors + if (elem.querySelectorAll('div.errors, ul.errorlist').length === 0) { + elem.classList.add('collapsed'); + const h2 = elem.querySelector('h2'); + const link = document.createElement('a'); + link.id = 'fieldsetcollapser' + i; + link.className = 'collapse-toggle'; + link.href = '#'; + link.textContent = gettext('Show'); + h2.appendChild(document.createTextNode(' (')); + h2.appendChild(link); + h2.appendChild(document.createTextNode(')')); + } + } + // Add toggle to hide/show anchor tag + const toggleFunc = function(ev) { + if (ev.target.matches('.collapse-toggle')) { + ev.preventDefault(); + ev.stopPropagation(); + const fieldset = ev.target.closest('fieldset'); + if (fieldset.classList.contains('collapsed')) { + // Show + ev.target.textContent = gettext('Hide'); + fieldset.classList.remove('collapsed'); + } else { + // Hide + ev.target.textContent = gettext('Show'); + fieldset.classList.add('collapsed'); + } + } + }; + document.querySelectorAll('fieldset.module').forEach(function(el) { + el.addEventListener('click', toggleFunc); + }); + }); +} diff --git a/static/js/core.js b/static/js/core.js new file mode 100644 index 0000000..0344a13 --- /dev/null +++ b/static/js/core.js @@ -0,0 +1,170 @@ +// Core JavaScript helper functions +'use strict'; + +// quickElement(tagType, parentReference [, textInChildNode, attribute, attributeValue ...]); +function quickElement() { + const obj = document.createElement(arguments[0]); + if (arguments[2]) { + const textNode = document.createTextNode(arguments[2]); + obj.appendChild(textNode); + } + const len = arguments.length; + for (let i = 3; i < len; i += 2) { + obj.setAttribute(arguments[i], arguments[i + 1]); + } + arguments[1].appendChild(obj); + return obj; +} + +// "a" is reference to an object +function removeChildren(a) { + while (a.hasChildNodes()) { + a.removeChild(a.lastChild); + } +} + +// ---------------------------------------------------------------------------- +// Find-position functions by PPK +// See https://www.quirksmode.org/js/findpos.html +// ---------------------------------------------------------------------------- +function findPosX(obj) { + let curleft = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curleft += obj.offsetLeft - obj.scrollLeft; + obj = obj.offsetParent; + } + } else if (obj.x) { + curleft += obj.x; + } + return curleft; +} + +function findPosY(obj) { + let curtop = 0; + if (obj.offsetParent) { + while (obj.offsetParent) { + curtop += obj.offsetTop - obj.scrollTop; + obj = obj.offsetParent; + } + } else if (obj.y) { + curtop += obj.y; + } + return curtop; +} + +//----------------------------------------------------------------------------- +// Date object extensions +// ---------------------------------------------------------------------------- +{ + Date.prototype.getTwelveHours = function() { + return this.getHours() % 12 || 12; + }; + + Date.prototype.getTwoDigitMonth = function() { + return (this.getMonth() < 9) ? '0' + (this.getMonth() + 1) : (this.getMonth() + 1); + }; + + Date.prototype.getTwoDigitDate = function() { + return (this.getDate() < 10) ? '0' + this.getDate() : this.getDate(); + }; + + Date.prototype.getTwoDigitTwelveHour = function() { + return (this.getTwelveHours() < 10) ? '0' + this.getTwelveHours() : this.getTwelveHours(); + }; + + Date.prototype.getTwoDigitHour = function() { + return (this.getHours() < 10) ? '0' + this.getHours() : this.getHours(); + }; + + Date.prototype.getTwoDigitMinute = function() { + return (this.getMinutes() < 10) ? '0' + this.getMinutes() : this.getMinutes(); + }; + + Date.prototype.getTwoDigitSecond = function() { + return (this.getSeconds() < 10) ? '0' + this.getSeconds() : this.getSeconds(); + }; + + Date.prototype.getAbbrevMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYearAbbrev[this.getMonth()]; + }; + + Date.prototype.getFullMonthName = function() { + return typeof window.CalendarNamespace === "undefined" + ? this.getTwoDigitMonth() + : window.CalendarNamespace.monthsOfYear[this.getMonth()]; + }; + + Date.prototype.strftime = function(format) { + const fields = { + b: this.getAbbrevMonthName(), + B: this.getFullMonthName(), + c: this.toString(), + d: this.getTwoDigitDate(), + H: this.getTwoDigitHour(), + I: this.getTwoDigitTwelveHour(), + m: this.getTwoDigitMonth(), + M: this.getTwoDigitMinute(), + p: (this.getHours() >= 12) ? 'PM' : 'AM', + S: this.getTwoDigitSecond(), + w: '0' + this.getDay(), + x: this.toLocaleDateString(), + X: this.toLocaleTimeString(), + y: ('' + this.getFullYear()).substr(2, 4), + Y: '' + this.getFullYear(), + '%': '%' + }; + let result = '', i = 0; + while (i < format.length) { + if (format.charAt(i) === '%') { + result += fields[format.charAt(i + 1)]; + ++i; + } + else { + result += format.charAt(i); + } + ++i; + } + return result; + }; + + // ---------------------------------------------------------------------------- + // String object extensions + // ---------------------------------------------------------------------------- + String.prototype.strptime = function(format) { + const split_format = format.split(/[.\-/]/); + const date = this.split(/[.\-/]/); + let i = 0; + let day, month, year; + while (i < split_format.length) { + switch (split_format[i]) { + case "%d": + day = date[i]; + break; + case "%m": + month = date[i] - 1; + break; + case "%Y": + year = date[i]; + break; + case "%y": + // A %y value in the range of [00, 68] is in the current + // century, while [69, 99] is in the previous century, + // according to the Open Group Specification. + if (parseInt(date[i], 10) >= 69) { + year = date[i]; + } else { + year = (new Date(Date.UTC(date[i], 0))).getUTCFullYear() + 100; + } + break; + } + ++i; + } + // Create Date object from UTC since the parsed value is supposed to be + // in UTC, not local time. Also, the calendar uses UTC functions for + // date extraction. + return new Date(Date.UTC(year, month, day)); + }; +} diff --git a/static/js/filters.js b/static/js/filters.js new file mode 100644 index 0000000..f5536eb --- /dev/null +++ b/static/js/filters.js @@ -0,0 +1,30 @@ +/** + * Persist changelist filters state (collapsed/expanded). + */ +'use strict'; +{ + // Init filters. + let filters = JSON.parse(sessionStorage.getItem('django.admin.filtersState')); + + if (!filters) { + filters = {}; + } + + Object.entries(filters).forEach(([key, value]) => { + const detailElement = document.querySelector(`[data-filter-title='${CSS.escape(key)}']`); + + // Check if the filter is present, it could be from other view. + if (detailElement) { + value ? detailElement.setAttribute('open', '') : detailElement.removeAttribute('open'); + } + }); + + // Save filter state when clicks. + const details = document.querySelectorAll('details'); + details.forEach(detail => { + detail.addEventListener('toggle', event => { + filters[`${event.target.dataset.filterTitle}`] = detail.open; + sessionStorage.setItem('django.admin.filtersState', JSON.stringify(filters)); + }); + }); +} diff --git a/static/js/games/bac-play.js b/static/js/games/bac-play.js new file mode 100644 index 0000000..bb4b8a7 --- /dev/null +++ b/static/js/games/bac-play.js @@ -0,0 +1,161 @@ +document.addEventListener('DOMContentLoaded', () => { + const container = document.querySelector('.container'); + const gameId = container.dataset.gameId; + const players = document.querySelector('#playersList'); + const countdownDisplay = document.querySelector('#countdownDisplay'); + const buttonFinish = document.querySelector('#buttonFinish'); + const playerId = buttonFinish.dataset.playerId; + const roundId = container.dataset.roundId; + + let countdownInterval = null; + + /* Fonction pour récupérer les informations de la partie */ + const fetchGameInfo = async () => { + try { + const response = await fetch(`/games/api/bac/${gameId}/info_party`); + const data = await response.json(); + + // Mise à jour de la liste des joueurs + players.innerHTML = ""; + Object.values(data.players).forEach(player => { + const listItem = document.createElement("li"); + const status = player.status === "playing" ? 'En train de jouer...' : 'A fini de jouer'; + listItem.innerHTML = `${player.username} (${status})`; + players.appendChild(listItem); + }); + + const allPlayersOvered = data.players.every(player => player.status === "overed"); + + // Gestion du décompte + if (data.countdown_started && data.current_phase === "finish_game") { + if (!countdownInterval && data.countdown_time > 0) { + startCountdown(data.countdown_time); + countdownDisplay.style.display = "block"; // Affiche le décompte + } else if (data.countdown_time <= 0 || allPlayersOvered) { + clearInterval(countdownInterval); // Arrête l'intervalle si actif + countdownDisplay.style.display = "none"; // Cache le décompte + stopGame(); + } + } + + // On vérifie que le joueur est bien la liste des joueurs et que son status est overed + console.log(data.players) + console.log(playerId) + const player = data.players.find(player => player.username === playerId); + console.log(player) + if(player && player.status === "overed") { + clearInterval(countdownInterval); // Arrête l'intervalle si actif + countdownDisplay.style.display = "none"; // Cache le décompte + buttonFinish.style.display = "none"; // Cache le bouton de fin de partie + document.querySelector('#textFinished').style.display = "block"; // Affiche le message de fin de partie + // window.location.href = `/games/bac/party/${gameId}/results`; + } else { + console.log('Le joueur n\'a pas terminé la partie'); + } + } catch (error) { + console.error("Erreur lors de la récupération des informations de la partie :", error); + } + }; + + /* Fonction pour démarrer le décompte */ + const startCountdown = (initialTime) => { + console.log("Démarrage du décompte..."); + let countdownTime = initialTime; + + countdownInterval = setInterval(() => { + // Affichage du décompte + console.log(`Temps restant : ${countdownTime} seconde${countdownTime > 1 ? 's' : ''}`); + countdownTime--; + countdownDisplay.style.display = "block"; + countdownDisplay.textContent = `Temps restant : ${countdownTime} seconde${countdownTime > 1 ? 's' : ''}`; + + if (countdownTime <= 0) { + clearInterval(countdownInterval); + countdownDisplay.style.display = "none"; // Cache le décompte + buttonFinish.style.display = "none"; // Cache le bouton + stopGame(); + } + }, 1000); + }; + + /* Fonction pour gérer la soumission du formulaire */ + const handleFormSubmit = async (form) => { + try { + const formData = new FormData(form); + const response = await fetch(form.action, { + method: "POST", + body: formData, + }); + + if (response.ok) { + console.log("Formulaire soumis avec succès."); + buttonFinish.style.display = "none"; // Cache le bouton + document.querySelector('#textFinished').style.display = "block"; // Affiche le message + + // Lance le décompte pour tous les joueurs + const countdownResponse = await startCountdownForAllPlayers(); + if (countdownResponse && countdownResponse.success) { + await fetchGameInfo(); // Rafraîchit les informations + } + } else { + console.error("Erreur lors de la soumission du formulaire :", response.status); + } + } catch (error) { + console.error("Erreur réseau lors de la soumission du formulaire :", error); + } + }; + + /* Fonction pour informer le serveur de démarrer le décompte */ + const startCountdownForAllPlayers = async () => { + console.log('On appelle l\'API pour lancer le décompte'); + try { + const csrfToken = document.querySelector('[name=csrfmiddlewaretoken]').value; + const response = await fetch(`/games/api/${gameId}/start_countdown?type=finish_game`, { + method: "POST", + headers: { + "Content-Type": "application/json", + "X-CSRFToken": csrfToken, + }, + body: JSON.stringify({}) + }); + + const data = await response.json(); + if (!response.ok) { + console.error("Erreur lors du démarrage du décompte :", response.status); + console.error("Détails de l'erreur:", data); + } + return data; + } catch (error) { + console.error("Erreur réseau lors du démarrage du décompte :", error); + return null; + } + }; + + /* Fonction pour gérer la fin de la partie */ + const stopGame = async () => { + try { + const response = await fetch(`/games/api/bac/${gameId}/end_game`); + + if (response.ok) { + console.log('Partie terminée.'); + window.location.href = `/games/bac/party/${gameId}/results`; + } else { + console.error("Erreur lors de la fin de la partie :", response.status); + } + } catch (error) { + console.error("Erreur réseau lors de la fin de la partie :", error); + } + }; + + /* Initialisation */ + const form = document.querySelector('form'); + if (form) { + form.addEventListener('submit', (e) => { + e.preventDefault(); // Empêche le rechargement de la page + handleFormSubmit(form); + }); + } + + fetchGameInfo(); + setInterval(fetchGameInfo, 3000); // Vérifie les informations toutes les 3 secondes +}); diff --git a/static/js/games/bac-results.js b/static/js/games/bac-results.js new file mode 100644 index 0000000..eecdc29 --- /dev/null +++ b/static/js/games/bac-results.js @@ -0,0 +1,24 @@ +document.addEventListener('DOMContentLoaded', () => { + const players = document.querySelector('#playersList'); + const gameId = document.querySelector(".container").dataset.gameId; + + const fetchPlayersList = async () => { + try { + const response = await fetch(`/games/api/bac/${gameId}/players`); + const data = await response.json(); + + // Met à jour la liste des joueurs + players.innerHTML = ""; + data.players.forEach(player => { + const listItem = document.createElement("li"); + const status = player.status === "playing" ? 'En train de jouer...' : 'A fini de jouer'; + listItem.textContent = `${player.username} (${status})`; + players.appendChild(listItem); + }); + } catch (error) { + console.error("Erreur lors de la récupération des joueurs :", error); + } + }; + + fetchPlayersList(); +}); \ No newline at end of file diff --git a/static/js/games/bac-start.js b/static/js/games/bac-start.js new file mode 100644 index 0000000..defe7dc --- /dev/null +++ b/static/js/games/bac-start.js @@ -0,0 +1,112 @@ +document.addEventListener('DOMContentLoaded', () => { + const container = document.querySelector('.container'); + const gameId = document.querySelector(".container").dataset.gameId; + const playerId = document.querySelector('#playButton').dataset.playerId; + const players = document.querySelector('#playersList'); + const playButton = document.querySelector('#playButton'); + + const infoNbPlayersReady = document.querySelector('#infoNbPlayersReady'); + const readyCount = document.querySelector('#readyCount'); + + let countdownStarted = false; + let countdownInterval; + let countdownIntervalStarted = false; + + /* Fonction pour mettre à jour la liste des joueurs */ + const fetchPlayersList = async () => { + try { + const response = await fetch(`/games/api/bac/${gameId}/players`); + const data = await response.json(); + + // Met à jour la liste des joueurs + players.innerHTML = ""; + data.players.forEach(player => { + const listItem = document.createElement("li"); + listItem.textContent = `${player.username}`; + players.appendChild(listItem); + }); + + // Met à jour le nombre de joueurs prêts + const gameInfo = await fetch(`/games/api/bac/${gameId}/info`); + const infoData = await gameInfo.json(); + readyCount.textContent = infoData.all_ready; + + // Affiche ou masque les messages en fonction du nombre de joueurs + playButton.style.display = data.players.length > 1 ? 'block' : 'none'; + document.querySelector('#infoNbPlayersReady').style.display = data.players.length > 1 ? 'block' : 'none'; + document.querySelector('#waitingPlayers').style.display = data.players.length > 1 ? 'none' : 'block'; + } catch (error) { + console.error("Erreur lors de la récupération des joueurs :", error); + } + }; + + /* Fonction pour vérifier le décompte */ + const checkCountdownStatus = async () => { + try { + const response = await fetch(`/games/api/${gameId}/countdown_status`); + const data = await response.json(); + + console.log("Countdown status data:", data); // Vérification + + if (data.countdown_started && data.countdown_time > 0) { + const countdownElement = document.querySelector('#countdown') || document.createElement('p'); + countdownElement.id = 'countdown'; + countdownElement.className = 'countdown'; + countdownElement.innerHTML = `La partie commence dans ${data.countdown_time} seconde${data.countdown_time > 1 ? 's' : ''}...`; + container.appendChild(countdownElement); + } + + console.log(data) + + if (data.countdown_started === true && data.countdown_time === 0) { + clearInterval(countdownInterval); // Arrête l'intervalle + window.location.href = `/games/bac/party/${gameId}/play`; + } + } catch (error) { + console.error("Erreur lors de la vérification du décompte :", error); + } + }; + + /* Fonction pour gérer le clic sur le bouton "Prêt" */ + const toggleReadyStatus = async () => { + try { + const response = await fetch(`/games/api/bac/${gameId}/player/${playerId}/toggle_ready`); + + if (response.ok) { + const data = await response.json(); + playButton.textContent = data.is_ready ? "Pas prêt :(" : "Prêt :)"; + playButton.className = data.is_ready ? "btn btn-warning btn-large" : "btn btn-default btn-large"; + + // Si tous les joueurs sont prêts et que le décompte n'a pas commencé + if (data.all_ready === players.childElementCount && !countdownStarted) { + countdownStarted = true; // Empêche de redémarrer le décompte + const response = await fetch(`/games/api/${gameId}/start_countdown?type=ready_game`); + const countdownData = await response.json(); + + if (countdownData.countdown_started) { + console.log("Décompte démarré par le serveur."); + startCountdownCheck(); // Commence à vérifier le décompte + } + } + } else { + console.error("ERREUR API :", response.status); + } + } catch (error) { + console.error("Erreur lors du changement d'état :", error); + } + }; + + /* Fonction pour démarrer la vérification du décompte */ + const startCountdownCheck = () => { + if (!countdownIntervalStarted) { + countdownIntervalStarted = true; + countdownInterval = setInterval(checkCountdownStatus, 1000); + } + }; + + /* INITIALISATION */ + playButton.addEventListener('click', toggleReadyStatus); + fetchPlayersList(); + setInterval(fetchPlayersList, 3000); + setInterval(checkCountdownStatus, 1000); +}); \ No newline at end of file diff --git a/static/js/games/bac-utils.js b/static/js/games/bac-utils.js new file mode 100644 index 0000000..d6d4872 --- /dev/null +++ b/static/js/games/bac-utils.js @@ -0,0 +1,18 @@ +document.addEventListener('DOMContentLoaded', () => { + const status = document.querySelector('#status'); + /* Fonction pour vérifier le statut de la partie */ + const updateStatus = () => { + const statuses = { + waiting: { text: 'En attente', style: 'color:orange;font-style:italic' }, + in_progress: { text: 'En cours', style: 'color:green;font-style:italic' }, + finished: { text: 'Terminée', style: 'color:red;font-style:italic' }, + }; + + const currentStatus = statuses[status.textContent]; + if (currentStatus) { + status.style = currentStatus.style; + status.textContent = currentStatus.text; + } + }; + updateStatus(); +}) \ No newline at end of file diff --git a/static/js/games/quiz.js b/static/js/games/quiz.js new file mode 100644 index 0000000..e1c72bf --- /dev/null +++ b/static/js/games/quiz.js @@ -0,0 +1,55 @@ +document.addEventListener('DOMContentLoaded', () => { + const buttonAddResponse = document.querySelector('#add-response') + const buttonAddAsk = document.querySelector('#add-ask') + const divResponses = document.querySelector('#responses') + const divQuestions = document.querySelector('#questions') + let responses = 0; + let questions = 0; + + if (buttonAddResponse) { + buttonAddResponse.addEventListener('click', () => { + // Si on clique sur le bouton, on ajoute un champ de réponse + responses++; + const newResponse = document.createElement('div') + newResponse.classList.add('form-group') + newResponse.innerHTML = ` + + ` + divResponses.appendChild(newResponse) + }) + } + + if (buttonAddAsk) { + buttonAddAsk.addEventListener('click', () => { + // Si on clique sur le bouton, on ajoute un champ de question + questions++; + const newAsk = document.createElement('div') + newAsk.classList.add('form-group') + newAsk.innerHTML = ` + + Ajouter une réponse +
      + ` + divQuestions.appendChild(newAsk) + + const hr = document.createElement('hr'); + hr.style.marginTop = '20px'; + hr.style.marginBottom = '20px'; + divQuestions.appendChild(hr); + + // Add event listener for the new "Ajouter une réponse" button + newAsk.querySelector('.add-response').addEventListener('click', (event) => { + const questionId = event.target.getAttribute('data-question'); + const responseContainer = document.querySelector(`#responses-${questionId}`); + const responseCount = responseContainer.children.length + 1; + const newResponse = document.createElement('div'); + newResponse.classList.add('form-group'); + newResponse.innerHTML = ` + +

      + `; + responseContainer.appendChild(newResponse); + }); + }) + } +}) \ No newline at end of file diff --git a/static/js/inlines.js b/static/js/inlines.js new file mode 100644 index 0000000..e9a1dfe --- /dev/null +++ b/static/js/inlines.js @@ -0,0 +1,359 @@ +/*global DateTimeShortcuts, SelectFilter*/ +/** + * Django admin inlines + * + * Based on jQuery Formset 1.1 + * @author Stanislaus Madueke (stan DOT madueke AT gmail DOT com) + * @requires jQuery 1.2.6 or later + * + * Copyright (c) 2009, Stanislaus Madueke + * All rights reserved. + * + * Spiced up with Code from Zain Memon's GSoC project 2009 + * and modified for Django by Jannis Leidel, Travis Swicegood and Julien Phalip. + * + * Licensed under the New BSD License + * See: https://opensource.org/licenses/bsd-license.php + */ +'use strict'; +{ + const $ = django.jQuery; + $.fn.formset = function(opts) { + const options = $.extend({}, $.fn.formset.defaults, opts); + const $this = $(this); + const $parent = $this.parent(); + const updateElementIndex = function(el, prefix, ndx) { + const id_regex = new RegExp("(" + prefix + "-(\\d+|__prefix__))"); + const replacement = prefix + "-" + ndx; + if ($(el).prop("for")) { + $(el).prop("for", $(el).prop("for").replace(id_regex, replacement)); + } + if (el.id) { + el.id = el.id.replace(id_regex, replacement); + } + if (el.name) { + el.name = el.name.replace(id_regex, replacement); + } + }; + const totalForms = $("#id_" + options.prefix + "-TOTAL_FORMS").prop("autocomplete", "off"); + let nextIndex = parseInt(totalForms.val(), 10); + const maxForms = $("#id_" + options.prefix + "-MAX_NUM_FORMS").prop("autocomplete", "off"); + const minForms = $("#id_" + options.prefix + "-MIN_NUM_FORMS").prop("autocomplete", "off"); + let addButton; + + /** + * The "Add another MyModel" button below the inline forms. + */ + const addInlineAddButton = function() { + if (addButton === null) { + if ($this.prop("tagName") === "TR") { + // If forms are laid out as table rows, insert the + // "add" button in a new table row: + const numCols = $this.eq(-1).children().length; + $parent.append('' + options.addText + ""); + addButton = $parent.find("tr:last a"); + } else { + // Otherwise, insert it immediately after the last form: + $this.filter(":last").after('"); + addButton = $this.filter(":last").next().find("a"); + } + } + addButton.on('click', addInlineClickHandler); + }; + + const addInlineClickHandler = function(e) { + e.preventDefault(); + const template = $("#" + options.prefix + "-empty"); + const row = template.clone(true); + row.removeClass(options.emptyCssClass) + .addClass(options.formCssClass) + .attr("id", options.prefix + "-" + nextIndex); + addInlineDeleteButton(row); + row.find("*").each(function() { + updateElementIndex(this, options.prefix, totalForms.val()); + }); + // Insert the new form when it has been fully edited. + row.insertBefore($(template)); + // Update number of total forms. + $(totalForms).val(parseInt(totalForms.val(), 10) + 1); + nextIndex += 1; + // Hide the add button if there's a limit and it's been reached. + if ((maxForms.val() !== '') && (maxForms.val() - totalForms.val()) <= 0) { + addButton.parent().hide(); + } + // Show the remove buttons if there are more than min_num. + toggleDeleteButtonVisibility(row.closest('.inline-group')); + + // Pass the new form to the post-add callback, if provided. + if (options.added) { + options.added(row); + } + row.get(0).dispatchEvent(new CustomEvent("formset:added", { + bubbles: true, + detail: { + formsetName: options.prefix + } + })); + }; + + /** + * The "X" button that is part of every unsaved inline. + * (When saved, it is replaced with a "Delete" checkbox.) + */ + const addInlineDeleteButton = function(row) { + if (row.is("tr")) { + // If the forms are laid out in table rows, insert + // the remove button into the last table cell: + row.children(":last").append('"); + } else if (row.is("ul") || row.is("ol")) { + // If they're laid out as an ordered/unordered list, + // insert an
    • after the last list item: + row.append('
    • ' + options.deleteText + "
    • "); + } else { + // Otherwise, just insert the remove button as the + // last child element of the form's container: + row.children(":first").append('' + options.deleteText + ""); + } + // Add delete handler for each row. + row.find("a." + options.deleteCssClass).on('click', inlineDeleteHandler.bind(this)); + }; + + const inlineDeleteHandler = function(e1) { + e1.preventDefault(); + const deleteButton = $(e1.target); + const row = deleteButton.closest('.' + options.formCssClass); + const inlineGroup = row.closest('.inline-group'); + // Remove the parent form containing this button, + // and also remove the relevant row with non-field errors: + const prevRow = row.prev(); + if (prevRow.length && prevRow.hasClass('row-form-errors')) { + prevRow.remove(); + } + row.remove(); + nextIndex -= 1; + // Pass the deleted form to the post-delete callback, if provided. + if (options.removed) { + options.removed(row); + } + document.dispatchEvent(new CustomEvent("formset:removed", { + detail: { + formsetName: options.prefix + } + })); + // Update the TOTAL_FORMS form count. + const forms = $("." + options.formCssClass); + $("#id_" + options.prefix + "-TOTAL_FORMS").val(forms.length); + // Show add button again once below maximum number. + if ((maxForms.val() === '') || (maxForms.val() - forms.length) > 0) { + addButton.parent().show(); + } + // Hide the remove buttons if at min_num. + toggleDeleteButtonVisibility(inlineGroup); + // Also, update names and ids for all remaining form controls so + // they remain in sequence: + let i, formCount; + const updateElementCallback = function() { + updateElementIndex(this, options.prefix, i); + }; + for (i = 0, formCount = forms.length; i < formCount; i++) { + updateElementIndex($(forms).get(i), options.prefix, i); + $(forms.get(i)).find("*").each(updateElementCallback); + } + }; + + const toggleDeleteButtonVisibility = function(inlineGroup) { + if ((minForms.val() !== '') && (minForms.val() - totalForms.val()) >= 0) { + inlineGroup.find('.inline-deletelink').hide(); + } else { + inlineGroup.find('.inline-deletelink').show(); + } + }; + + $this.each(function(i) { + $(this).not("." + options.emptyCssClass).addClass(options.formCssClass); + }); + + // Create the delete buttons for all unsaved inlines: + $this.filter('.' + options.formCssClass + ':not(.has_original):not(.' + options.emptyCssClass + ')').each(function() { + addInlineDeleteButton($(this)); + }); + toggleDeleteButtonVisibility($this); + + // Create the add button, initially hidden. + addButton = options.addButton; + addInlineAddButton(); + + // Show the add button if allowed to add more items. + // Note that max_num = None translates to a blank string. + const showAddButton = maxForms.val() === '' || (maxForms.val() - totalForms.val()) > 0; + if ($this.length && showAddButton) { + addButton.parent().show(); + } else { + addButton.parent().hide(); + } + + return this; + }; + + /* Setup plugin defaults */ + $.fn.formset.defaults = { + prefix: "form", // The form prefix for your django formset + addText: "add another", // Text for the add link + deleteText: "remove", // Text for the delete link + addCssClass: "add-row", // CSS class applied to the add link + deleteCssClass: "delete-row", // CSS class applied to the delete link + emptyCssClass: "empty-row", // CSS class applied to the empty row + formCssClass: "dynamic-form", // CSS class applied to each form in a formset + added: null, // Function called each time a new form is added + removed: null, // Function called each time a form is deleted + addButton: null // Existing add button to use + }; + + + // Tabular inlines --------------------------------------------------------- + $.fn.tabularFormset = function(selector, options) { + const $rows = $(this); + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets are a part of the new form, + // instantiate a new SelectFilter instance for it. + if (typeof SelectFilter !== 'undefined') { + $('.selectfilter').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $('.selectfilterstacked').each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + dependencies.push('#' + row.find('.field-' + field_name).find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + }, + addButton: options.addButton + }); + + return $rows; + }; + + // Stacked inlines --------------------------------------------------------- + $.fn.stackedFormset = function(selector, options) { + const $rows = $(this); + const updateInlineLabel = function(row) { + $(selector).find(".inline_label").each(function(i) { + const count = i + 1; + $(this).html($(this).html().replace(/(#\d+)/g, "#" + count)); + }); + }; + + const reinitDateTimeShortCuts = function() { + // Reinitialize the calendar and clock widgets by force, yuck. + if (typeof DateTimeShortcuts !== "undefined") { + $(".datetimeshortcuts").remove(); + DateTimeShortcuts.init(); + } + }; + + const updateSelectFilter = function() { + // If any SelectFilter widgets were added, instantiate a new instance. + if (typeof SelectFilter !== "undefined") { + $(".selectfilter").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, false); + }); + $(".selectfilterstacked").each(function(index, value) { + SelectFilter.init(value.id, this.dataset.fieldName, true); + }); + } + }; + + const initPrepopulatedFields = function(row) { + row.find('.prepopulated_field').each(function() { + const field = $(this), + input = field.find('input, select, textarea'), + dependency_list = input.data('dependency_list') || [], + dependencies = []; + $.each(dependency_list, function(i, field_name) { + // Dependency in a fieldset. + let field_element = row.find('.form-row .field-' + field_name); + // Dependency without a fieldset. + if (!field_element.length) { + field_element = row.find('.form-row.field-' + field_name); + } + dependencies.push('#' + field_element.find('input, select, textarea').attr('id')); + }); + if (dependencies.length) { + input.prepopulate(dependencies, input.attr('maxlength')); + } + }); + }; + + $rows.formset({ + prefix: options.prefix, + addText: options.addText, + formCssClass: "dynamic-" + options.prefix, + deleteCssClass: "inline-deletelink", + deleteText: options.deleteText, + emptyCssClass: "empty-form", + removed: updateInlineLabel, + added: function(row) { + initPrepopulatedFields(row); + reinitDateTimeShortCuts(); + updateSelectFilter(); + updateInlineLabel(row); + }, + addButton: options.addButton + }); + + return $rows; + }; + + $(document).ready(function() { + $(".js-inline-admin-formset").each(function() { + const data = $(this).data(), + inlineOptions = data.inlineFormset; + let selector; + switch(data.inlineType) { + case "stacked": + selector = inlineOptions.name + "-group .inline-related"; + $(selector).stackedFormset(selector, inlineOptions.options); + break; + case "tabular": + selector = inlineOptions.name + "-group .tabular.inline-related tbody:first > tr.form-row"; + $(selector).tabularFormset(selector, inlineOptions.options); + break; + } + }); + }); +} diff --git a/static/js/jquery.init.js b/static/js/jquery.init.js new file mode 100644 index 0000000..f40b27f --- /dev/null +++ b/static/js/jquery.init.js @@ -0,0 +1,8 @@ +/*global jQuery:false*/ +'use strict'; +/* Puts the included jQuery into our own namespace using noConflict and passing + * it 'true'. This ensures that the included jQuery doesn't pollute the global + * namespace (i.e. this preserves pre-existing values for both window.$ and + * window.jQuery). + */ +window.django = {jQuery: jQuery.noConflict(true)}; diff --git a/static/js/nav_sidebar.js b/static/js/nav_sidebar.js new file mode 100644 index 0000000..7e735db --- /dev/null +++ b/static/js/nav_sidebar.js @@ -0,0 +1,79 @@ +'use strict'; +{ + const toggleNavSidebar = document.getElementById('toggle-nav-sidebar'); + if (toggleNavSidebar !== null) { + const navSidebar = document.getElementById('nav-sidebar'); + const main = document.getElementById('main'); + let navSidebarIsOpen = localStorage.getItem('django.admin.navSidebarIsOpen'); + if (navSidebarIsOpen === null) { + navSidebarIsOpen = 'true'; + } + main.classList.toggle('shifted', navSidebarIsOpen === 'true'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + + toggleNavSidebar.addEventListener('click', function() { + if (navSidebarIsOpen === 'true') { + navSidebarIsOpen = 'false'; + } else { + navSidebarIsOpen = 'true'; + } + localStorage.setItem('django.admin.navSidebarIsOpen', navSidebarIsOpen); + main.classList.toggle('shifted'); + navSidebar.setAttribute('aria-expanded', navSidebarIsOpen); + }); + } + + function initSidebarQuickFilter() { + const options = []; + const navSidebar = document.getElementById('nav-sidebar'); + if (!navSidebar) { + return; + } + navSidebar.querySelectorAll('th[scope=row] a').forEach((container) => { + options.push({title: container.innerHTML, node: container}); + }); + + function checkValue(event) { + let filterValue = event.target.value; + if (filterValue) { + filterValue = filterValue.toLowerCase(); + } + if (event.key === 'Escape') { + filterValue = ''; + event.target.value = ''; // clear input + } + let matches = false; + for (const o of options) { + let displayValue = ''; + if (filterValue) { + if (o.title.toLowerCase().indexOf(filterValue) === -1) { + displayValue = 'none'; + } else { + matches = true; + } + } + // show/hide parent + o.node.parentNode.parentNode.style.display = displayValue; + } + if (!filterValue || matches) { + event.target.classList.remove('no-results'); + } else { + event.target.classList.add('no-results'); + } + sessionStorage.setItem('django.admin.navSidebarFilterValue', filterValue); + } + + const nav = document.getElementById('nav-filter'); + nav.addEventListener('change', checkValue, false); + nav.addEventListener('input', checkValue, false); + nav.addEventListener('keyup', checkValue, false); + + const storedValue = sessionStorage.getItem('django.admin.navSidebarFilterValue'); + if (storedValue) { + nav.value = storedValue; + checkValue({target: nav, key: ''}); + } + } + window.initSidebarQuickFilter = initSidebarQuickFilter; + initSidebarQuickFilter(); +} diff --git a/static/js/popup_response.js b/static/js/popup_response.js new file mode 100644 index 0000000..2b1d3dd --- /dev/null +++ b/static/js/popup_response.js @@ -0,0 +1,16 @@ +/*global opener */ +'use strict'; +{ + const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); + switch(initData.action) { + case 'change': + opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); + break; + case 'delete': + opener.dismissDeleteRelatedObjectPopup(window, initData.value); + break; + default: + opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); + break; + } +} diff --git a/static/js/prepopulate.js b/static/js/prepopulate.js new file mode 100644 index 0000000..89e95ab --- /dev/null +++ b/static/js/prepopulate.js @@ -0,0 +1,43 @@ +/*global URLify*/ +'use strict'; +{ + const $ = django.jQuery; + $.fn.prepopulate = function(dependencies, maxLength, allowUnicode) { + /* + Depends on urlify.js + Populates a selected field with the values of the dependent fields, + URLifies and shortens the string. + dependencies - array of dependent fields ids + maxLength - maximum length of the URLify'd string + allowUnicode - Unicode support of the URLify'd string + */ + return this.each(function() { + const prepopulatedField = $(this); + + const populate = function() { + // Bail if the field's value has been changed by the user + if (prepopulatedField.data('_changed')) { + return; + } + + const values = []; + $.each(dependencies, function(i, field) { + field = $(field); + if (field.val().length > 0) { + values.push(field.val()); + } + }); + prepopulatedField.val(URLify(values.join(' '), maxLength, allowUnicode)); + }; + + prepopulatedField.data('_changed', false); + prepopulatedField.on('change', function() { + prepopulatedField.data('_changed', true); + }); + + if (!prepopulatedField.val()) { + $(dependencies.join(',')).on('keyup change focus', populate); + } + }); + }; +} diff --git a/static/js/prepopulate_init.js b/static/js/prepopulate_init.js new file mode 100644 index 0000000..a58841f --- /dev/null +++ b/static/js/prepopulate_init.js @@ -0,0 +1,15 @@ +'use strict'; +{ + const $ = django.jQuery; + const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); + $.each(fields, function(index, field) { + $( + '.empty-form .form-row .field-' + field.name + + ', .empty-form.form-row .field-' + field.name + + ', .empty-form .form-row.field-' + field.name + ).addClass('prepopulated_field'); + $(field.id).data('dependency_list', field.dependency_list).prepopulate( + field.dependency_ids, field.maxLength, field.allowUnicode + ); + }); +} diff --git a/static/js/theme.js b/static/js/theme.js new file mode 100644 index 0000000..794cd15 --- /dev/null +++ b/static/js/theme.js @@ -0,0 +1,56 @@ +'use strict'; +{ + window.addEventListener('load', function(e) { + + function setTheme(mode) { + if (mode !== "light" && mode !== "dark" && mode !== "auto") { + console.error(`Got invalid theme mode: ${mode}. Resetting to auto.`); + mode = "auto"; + } + document.documentElement.dataset.theme = mode; + localStorage.setItem("theme", mode); + } + + function cycleTheme() { + const currentTheme = localStorage.getItem("theme") || "auto"; + const prefersDark = window.matchMedia("(prefers-color-scheme: dark)").matches; + + if (prefersDark) { + // Auto (dark) -> Light -> Dark + if (currentTheme === "auto") { + setTheme("light"); + } else if (currentTheme === "light") { + setTheme("dark"); + } else { + setTheme("auto"); + } + } else { + // Auto (light) -> Dark -> Light + if (currentTheme === "auto") { + setTheme("dark"); + } else if (currentTheme === "dark") { + setTheme("light"); + } else { + setTheme("auto"); + } + } + } + + function initTheme() { + // set theme defined in localStorage if there is one, or fallback to auto mode + const currentTheme = localStorage.getItem("theme"); + currentTheme ? setTheme(currentTheme) : setTheme("auto"); + } + + function setupTheme() { + // Attach event handlers for toggling themes + const buttons = document.getElementsByClassName("theme-toggle"); + Array.from(buttons).forEach((btn) => { + btn.addEventListener("click", cycleTheme); + }); + initTheme(); + } + + setupTheme(); + }); +} diff --git a/static/js/urlify.js b/static/js/urlify.js new file mode 100644 index 0000000..9fc0409 --- /dev/null +++ b/static/js/urlify.js @@ -0,0 +1,169 @@ +/*global XRegExp*/ +'use strict'; +{ + const LATIN_MAP = { + 'À': 'A', 'Á': 'A', 'Â': 'A', 'Ã': 'A', 'Ä': 'A', 'Å': 'A', 'Æ': 'AE', + 'Ç': 'C', 'È': 'E', 'É': 'E', 'Ê': 'E', 'Ë': 'E', 'Ì': 'I', 'Í': 'I', + 'Î': 'I', 'Ï': 'I', 'Ð': 'D', 'Ñ': 'N', 'Ò': 'O', 'Ó': 'O', 'Ô': 'O', + 'Õ': 'O', 'Ö': 'O', 'Ő': 'O', 'Ø': 'O', 'Ù': 'U', 'Ú': 'U', 'Û': 'U', + 'Ü': 'U', 'Ű': 'U', 'Ý': 'Y', 'Þ': 'TH', 'Ÿ': 'Y', 'ß': 'ss', 'à': 'a', + 'á': 'a', 'â': 'a', 'ã': 'a', 'ä': 'a', 'å': 'a', 'æ': 'ae', 'ç': 'c', + 'è': 'e', 'é': 'e', 'ê': 'e', 'ë': 'e', 'ì': 'i', 'í': 'i', 'î': 'i', + 'ï': 'i', 'ð': 'd', 'ñ': 'n', 'ò': 'o', 'ó': 'o', 'ô': 'o', 'õ': 'o', + 'ö': 'o', 'ő': 'o', 'ø': 'o', 'ù': 'u', 'ú': 'u', 'û': 'u', 'ü': 'u', + 'ű': 'u', 'ý': 'y', 'þ': 'th', 'ÿ': 'y' + }; + const LATIN_SYMBOLS_MAP = { + '©': '(c)' + }; + const GREEK_MAP = { + 'α': 'a', 'β': 'b', 'γ': 'g', 'δ': 'd', 'ε': 'e', 'ζ': 'z', 'η': 'h', + 'θ': '8', 'ι': 'i', 'κ': 'k', 'λ': 'l', 'μ': 'm', 'ν': 'n', 'ξ': '3', + 'ο': 'o', 'π': 'p', 'ρ': 'r', 'σ': 's', 'τ': 't', 'υ': 'y', 'φ': 'f', + 'χ': 'x', 'ψ': 'ps', 'ω': 'w', 'ά': 'a', 'έ': 'e', 'ί': 'i', 'ό': 'o', + 'ύ': 'y', 'ή': 'h', 'ώ': 'w', 'ς': 's', 'ϊ': 'i', 'ΰ': 'y', 'ϋ': 'y', + 'ΐ': 'i', 'Α': 'A', 'Β': 'B', 'Γ': 'G', 'Δ': 'D', 'Ε': 'E', 'Ζ': 'Z', + 'Η': 'H', 'Θ': '8', 'Ι': 'I', 'Κ': 'K', 'Λ': 'L', 'Μ': 'M', 'Ν': 'N', + 'Ξ': '3', 'Ο': 'O', 'Π': 'P', 'Ρ': 'R', 'Σ': 'S', 'Τ': 'T', 'Υ': 'Y', + 'Φ': 'F', 'Χ': 'X', 'Ψ': 'PS', 'Ω': 'W', 'Ά': 'A', 'Έ': 'E', 'Ί': 'I', + 'Ό': 'O', 'Ύ': 'Y', 'Ή': 'H', 'Ώ': 'W', 'Ϊ': 'I', 'Ϋ': 'Y' + }; + const TURKISH_MAP = { + 'ş': 's', 'Ş': 'S', 'ı': 'i', 'İ': 'I', 'ç': 'c', 'Ç': 'C', 'ü': 'u', + 'Ü': 'U', 'ö': 'o', 'Ö': 'O', 'ğ': 'g', 'Ğ': 'G' + }; + const ROMANIAN_MAP = { + 'ă': 'a', 'î': 'i', 'ș': 's', 'ț': 't', 'â': 'a', + 'Ă': 'A', 'Î': 'I', 'Ș': 'S', 'Ț': 'T', 'Â': 'A' + }; + const RUSSIAN_MAP = { + 'а': 'a', 'б': 'b', 'в': 'v', 'г': 'g', 'д': 'd', 'е': 'e', 'ё': 'yo', + 'ж': 'zh', 'з': 'z', 'и': 'i', 'й': 'j', 'к': 'k', 'л': 'l', 'м': 'm', + 'н': 'n', 'о': 'o', 'п': 'p', 'р': 'r', 'с': 's', 'т': 't', 'у': 'u', + 'ф': 'f', 'х': 'h', 'ц': 'c', 'ч': 'ch', 'ш': 'sh', 'щ': 'sh', 'ъ': '', + 'ы': 'y', 'ь': '', 'э': 'e', 'ю': 'yu', 'я': 'ya', + 'А': 'A', 'Б': 'B', 'В': 'V', 'Г': 'G', 'Д': 'D', 'Е': 'E', 'Ё': 'Yo', + 'Ж': 'Zh', 'З': 'Z', 'И': 'I', 'Й': 'J', 'К': 'K', 'Л': 'L', 'М': 'M', + 'Н': 'N', 'О': 'O', 'П': 'P', 'Р': 'R', 'С': 'S', 'Т': 'T', 'У': 'U', + 'Ф': 'F', 'Х': 'H', 'Ц': 'C', 'Ч': 'Ch', 'Ш': 'Sh', 'Щ': 'Sh', 'Ъ': '', + 'Ы': 'Y', 'Ь': '', 'Э': 'E', 'Ю': 'Yu', 'Я': 'Ya' + }; + const UKRAINIAN_MAP = { + 'Є': 'Ye', 'І': 'I', 'Ї': 'Yi', 'Ґ': 'G', 'є': 'ye', 'і': 'i', + 'ї': 'yi', 'ґ': 'g' + }; + const CZECH_MAP = { + 'č': 'c', 'ď': 'd', 'ě': 'e', 'ň': 'n', 'ř': 'r', 'š': 's', 'ť': 't', + 'ů': 'u', 'ž': 'z', 'Č': 'C', 'Ď': 'D', 'Ě': 'E', 'Ň': 'N', 'Ř': 'R', + 'Š': 'S', 'Ť': 'T', 'Ů': 'U', 'Ž': 'Z' + }; + const SLOVAK_MAP = { + 'á': 'a', 'ä': 'a', 'č': 'c', 'ď': 'd', 'é': 'e', 'í': 'i', 'ľ': 'l', + 'ĺ': 'l', 'ň': 'n', 'ó': 'o', 'ô': 'o', 'ŕ': 'r', 'š': 's', 'ť': 't', + 'ú': 'u', 'ý': 'y', 'ž': 'z', + 'Á': 'a', 'Ä': 'A', 'Č': 'C', 'Ď': 'D', 'É': 'E', 'Í': 'I', 'Ľ': 'L', + 'Ĺ': 'L', 'Ň': 'N', 'Ó': 'O', 'Ô': 'O', 'Ŕ': 'R', 'Š': 'S', 'Ť': 'T', + 'Ú': 'U', 'Ý': 'Y', 'Ž': 'Z' + }; + const POLISH_MAP = { + 'ą': 'a', 'ć': 'c', 'ę': 'e', 'ł': 'l', 'ń': 'n', 'ó': 'o', 'ś': 's', + 'ź': 'z', 'ż': 'z', + 'Ą': 'A', 'Ć': 'C', 'Ę': 'E', 'Ł': 'L', 'Ń': 'N', 'Ó': 'O', 'Ś': 'S', + 'Ź': 'Z', 'Ż': 'Z' + }; + const LATVIAN_MAP = { + 'ā': 'a', 'č': 'c', 'ē': 'e', 'ģ': 'g', 'ī': 'i', 'ķ': 'k', 'ļ': 'l', + 'ņ': 'n', 'š': 's', 'ū': 'u', 'ž': 'z', + 'Ā': 'A', 'Č': 'C', 'Ē': 'E', 'Ģ': 'G', 'Ī': 'I', 'Ķ': 'K', 'Ļ': 'L', + 'Ņ': 'N', 'Š': 'S', 'Ū': 'U', 'Ž': 'Z' + }; + const ARABIC_MAP = { + 'أ': 'a', 'ب': 'b', 'ت': 't', 'ث': 'th', 'ج': 'g', 'ح': 'h', 'خ': 'kh', 'د': 'd', + 'ذ': 'th', 'ر': 'r', 'ز': 'z', 'س': 's', 'ش': 'sh', 'ص': 's', 'ض': 'd', 'ط': 't', + 'ظ': 'th', 'ع': 'aa', 'غ': 'gh', 'ف': 'f', 'ق': 'k', 'ك': 'k', 'ل': 'l', 'م': 'm', + 'ن': 'n', 'ه': 'h', 'و': 'o', 'ي': 'y' + }; + const LITHUANIAN_MAP = { + 'ą': 'a', 'č': 'c', 'ę': 'e', 'ė': 'e', 'į': 'i', 'š': 's', 'ų': 'u', + 'ū': 'u', 'ž': 'z', + 'Ą': 'A', 'Č': 'C', 'Ę': 'E', 'Ė': 'E', 'Į': 'I', 'Š': 'S', 'Ų': 'U', + 'Ū': 'U', 'Ž': 'Z' + }; + const SERBIAN_MAP = { + 'ђ': 'dj', 'ј': 'j', 'љ': 'lj', 'њ': 'nj', 'ћ': 'c', 'џ': 'dz', + 'đ': 'dj', 'Ђ': 'Dj', 'Ј': 'j', 'Љ': 'Lj', 'Њ': 'Nj', 'Ћ': 'C', + 'Џ': 'Dz', 'Đ': 'Dj' + }; + const AZERBAIJANI_MAP = { + 'ç': 'c', 'ə': 'e', 'ğ': 'g', 'ı': 'i', 'ö': 'o', 'ş': 's', 'ü': 'u', + 'Ç': 'C', 'Ə': 'E', 'Ğ': 'G', 'İ': 'I', 'Ö': 'O', 'Ş': 'S', 'Ü': 'U' + }; + const GEORGIAN_MAP = { + 'ა': 'a', 'ბ': 'b', 'გ': 'g', 'დ': 'd', 'ე': 'e', 'ვ': 'v', 'ზ': 'z', + 'თ': 't', 'ი': 'i', 'კ': 'k', 'ლ': 'l', 'მ': 'm', 'ნ': 'n', 'ო': 'o', + 'პ': 'p', 'ჟ': 'j', 'რ': 'r', 'ს': 's', 'ტ': 't', 'უ': 'u', 'ფ': 'f', + 'ქ': 'q', 'ღ': 'g', 'ყ': 'y', 'შ': 'sh', 'ჩ': 'ch', 'ც': 'c', 'ძ': 'dz', + 'წ': 'w', 'ჭ': 'ch', 'ხ': 'x', 'ჯ': 'j', 'ჰ': 'h' + }; + + const ALL_DOWNCODE_MAPS = [ + LATIN_MAP, + LATIN_SYMBOLS_MAP, + GREEK_MAP, + TURKISH_MAP, + ROMANIAN_MAP, + RUSSIAN_MAP, + UKRAINIAN_MAP, + CZECH_MAP, + SLOVAK_MAP, + POLISH_MAP, + LATVIAN_MAP, + ARABIC_MAP, + LITHUANIAN_MAP, + SERBIAN_MAP, + AZERBAIJANI_MAP, + GEORGIAN_MAP + ]; + + const Downcoder = { + 'Initialize': function() { + if (Downcoder.map) { // already made + return; + } + Downcoder.map = {}; + for (const lookup of ALL_DOWNCODE_MAPS) { + Object.assign(Downcoder.map, lookup); + } + Downcoder.regex = new RegExp(Object.keys(Downcoder.map).join('|'), 'g'); + } + }; + + function downcode(slug) { + Downcoder.Initialize(); + return slug.replace(Downcoder.regex, function(m) { + return Downcoder.map[m]; + }); + } + + + function URLify(s, num_chars, allowUnicode) { + // changes, e.g., "Petty theft" to "petty-theft" + if (!allowUnicode) { + s = downcode(s); + } + s = s.toLowerCase(); // convert to lowercase + // if downcode doesn't hit, the char will be stripped here + if (allowUnicode) { + // Keep Unicode letters including both lowercase and uppercase + // characters, whitespace, and dash; remove other characters. + s = XRegExp.replace(s, XRegExp('[^-_\\p{L}\\p{N}\\s]', 'g'), ''); + } else { + s = s.replace(/[^-\w\s]/g, ''); // remove unneeded chars + } + s = s.replace(/^\s+|\s+$/g, ''); // trim leading/trailing spaces + s = s.replace(/[-\s]+/g, '-'); // convert spaces to hyphens + s = s.substring(0, num_chars); // trim to first num_chars chars + return s.replace(/-+$/g, ''); // trim any trailing hyphens + } + window.URLify = URLify; +} diff --git a/static/js/utils/bbcode-bar.html b/static/js/utils/bbcode-bar.html new file mode 100644 index 0000000..d8d128b --- /dev/null +++ b/static/js/utils/bbcode-bar.html @@ -0,0 +1,32 @@ +
      +
        +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      • +
      +
      +
      +
      + Ma Galerie + +
      + +
      \ No newline at end of file diff --git a/static/js/utils/bbcode_display.js b/static/js/utils/bbcode_display.js new file mode 100644 index 0000000..07dc20e --- /dev/null +++ b/static/js/utils/bbcode_display.js @@ -0,0 +1,276 @@ +document.addEventListener('DOMContentLoaded', () => { + let textarea = document.querySelector('textarea'); + const quoteButtons = document.querySelectorAll('#quote'); + console.log(quoteButtons); + quoteButtons.forEach((elem) =>{ + const post_id = elem.target; + elem.addEventListener('click', event => { + const author = document.querySelector(`#author-post-${post_id}`).textContent; + const content = document.querySelector(`#post-${post_id}`).textContent; + + textarea.value = `[citation=${author}]${content}[/citation]`; + textarea.focus(); + }); + }); + + let colorBarVisible = false; + let existingColorBar = null; + + fetch('/static/js/utils/bbcode-bar.html') + .then(response => { + if (response.ok) { + return response.text(); + } else { + throw new Error('Impossible de charger le fichier HTML'); + } + }) + .then(html => { + textarea.insertAdjacentHTML('beforebegin', html); + + const bbcodeBar = document.querySelector('.bbcode-bar'); + bbcodeBar.addEventListener('click', event => { + if (event.target.tagName === 'BUTTON' && event.target.classList.contains('bbcode-bar-item')) { + const tag = event.target.getAttribute('data-tag'); + if (tag.includes('][')) { + const [openTag, closeTag] = tag.split(']['); + let startTag = openTag + ']'; + if(tag === '[list][/list]') { + startTag = openTag + '][*]'; + } + const endTag = '[' + closeTag; + + const startPos = textarea.selectionStart; + const endPos = textarea.selectionEnd; + + const text = textarea.value; + + textarea.value = + text.slice(0, startPos) + + startTag + + text.slice(startPos, endPos) + + endTag + + text.slice(endPos); + + textarea.selectionStart = startPos + startTag.length; + textarea.selectionEnd = startPos + startTag.length; + + textarea.focus(); + } else { + console.error('Format de balise incorrect :', tag); + } + } else if (event.target.tagName === 'BUTTON' && event.target.classList.contains('bbcode-bar-button-gallery')) { + let draggableWindows = document.querySelector('.draggable'); + let header = draggableWindows.querySelector('.header'); + const contentArea = document.querySelector('.content-gallery') + fetch('/gallery/') + .then(response => { + if(response.ok) { + return response.text(); + } else { + throw new Error('Impossible de charger le fichier html de la galerie'); + } + }) + .then(html => { + contentArea.innerHTML = html; + draggableWindows.style.display = 'block'; + }) + .catch(error => { + contentArea.innerHTML = '

      Erreur lors du chargement de la galerie

      '; + draggableWindows.style.display = 'block'; + }) + + if (draggableWindows) { + const windowWidth = window.innerWidth; + const windowHeight = window.innerHeight; + const modalWidth = draggableWindows.offsetWidth; + const modalHeight = draggableWindows.offsetHeight; + + // Centre la fenêtre au milieu de l'écran + draggableWindows.style.left = `${(windowWidth - modalWidth) / 2}px`; + draggableWindows.style.top = `${(windowHeight - modalHeight) / 2}px`; + + // Assure que la fenêtre soit positionnée en mode absolu + draggableWindows.style.position = 'fixed'; + } + + if (draggableWindows) { + if (header) { + header.addEventListener('mousedown', (e) => { + e.preventDefault(); + let offsetX = e.clientX - draggableWindows.offsetLeft; + let offsetY = e.clientY - draggableWindows.offsetTop; + + function onMouseMove(e) { + draggableWindows.style.left = e.clientX - offsetX + 'px'; + draggableWindows.style.top = e.clientY - offsetY + 'px'; + } + + document.addEventListener('mousemove', onMouseMove); + + document.addEventListener('mouseup', () => { + document.removeEventListener('mousemove', onMouseMove); + }, { once: true }); + }); + } + + const closeButton = document.querySelector('#close-window'); + if (closeButton) { + closeButton.addEventListener('click', () => { + console.log("test fermeture") + draggableWindows.style.display = 'none'; + }); + } + } + } else if (event.target.tagName === 'BUTTON' && event.target.classList.contains('bbcode-bar-button-colors')) { + event.preventDefault(); + + if (existingColorBar) { + // Si la barre existe déjà, on bascule sa visibilité + existingColorBar.style.display = colorBarVisible ? 'none' : 'block'; + colorBarVisible = !colorBarVisible; + return; + } + + // Si la barre n'existe pas encore, on la crée + const colors = [ + // Basiques + 'black', + 'white', + + // Gris + 'gray', + 'darkgray', + 'silver', + + // Rouges + 'red', + 'darkred', + 'maroon', + 'crimson', + 'coral', + + // Roses/Violets + 'pink', + 'hotpink', + 'fuchsia', + 'purple', + 'blueviolet', + 'darkmagenta', + + // Bleus + 'blue', + 'navy', + 'darkblue', + 'royalblue', + 'cornflowerblue', + 'skyblue', + 'aqua', + 'cyan', + 'darkcyan', + 'teal', + + // Verts + 'green', + 'darkgreen', + 'lime', + 'limegreen', + 'springgreen', + 'aquamarine', + 'chartreuse', + + // Jaunes/Oranges + 'yellow', + 'gold', + 'orange', + 'darkorange', + + // Marrons + 'brown', + 'chocolate', + 'saddlebrown', + 'burlywood', + + // Tons pastel + 'aliceblue', + 'antiquewhite', + 'azure', + 'beige', + 'bisque', + 'blanchedalmond', + 'cornsilk', + 'darkkhaki', + 'olive' + ]; + + const colorBar = document.createElement('div'); + colorBar.classList.add('bbcode-bar-colors'); + colorBar.style.display = 'block'; + + const colorButtons = colors.map(color => { + const link = document.createElement('a'); + link.classList.add('bbcode-bar-item-color'); + link.style.backgroundColor = color; + link.style.width = '20px'; + link.style.height = '20px'; + link.style.display = 'inline-block'; + link.style.margin = '2px'; + link.setAttribute('data-color', color); + link.href = '#'; + return link; + }); + + colorButtons.forEach(link => colorBar.appendChild(link)); + bbcodeBar.appendChild(colorBar); + + existingColorBar = colorBar; + colorBarVisible = true; + } else if (event.target.tagName === 'A' && event.target.classList.contains('bbcode-bar-item-color')) { + event.preventDefault(); + const color = event.target.getAttribute('data-color'); + if (color) { + insertBBCode(`[color=${color}]`, `[/color]`); + } + } + }); + }) + + .catch(error => console.error('Erreur: ', error)); +}); + +function insertBBCode(openTag, closeTag) { + const textarea = document.querySelector('textarea'); // Assurez-vous de sélectionner le bon textarea + if (!textarea) return; + + const start = textarea.selectionStart; + const end = textarea.selectionEnd; + const text = textarea.value; + + const before = text.substring(0, start); + const selected = text.substring(start, end); + const after = text.substring(end); + + textarea.value = `${before}${openTag}${selected}${closeTag}${after}`; + textarea.focus(); + textarea.selectionStart = start + openTag.length; + textarea.selectionEnd = end + openTag.length; +} + +function load_gallery() { + const contentArea = document.querySelector('.content-gallery') + fetch('/gallery/') + .then(response => { + if(response.ok) { + return response.text(); + } else { + throw new Error('Impossible de charger le fichier html de la galerie'); + } + }) + .then(html => { + contentArea.innerHTML = html; + draggableWindows.style.display = 'block'; + }) + .catch(error => { + contentArea.innerHTML = '

      Erreur lors du chargement de la galerie

      '; + draggableWindows.style.display = 'block'; + }) +} \ No newline at end of file diff --git a/static/js/utils/functions.js b/static/js/utils/functions.js new file mode 100644 index 0000000..cc20968 --- /dev/null +++ b/static/js/utils/functions.js @@ -0,0 +1,57 @@ +function openPopup(url) { + window.open( + url, + 'PopupWindow', + 'width=400,height=400,scrollbars=no,resizable=no' + ); +} + +function copyToClipboard(event) { + // Récupère le bouton qui a déclenché l'événement + const button = event.target; + + // Récupère la valeur de l'attribut data-tag + const tag = button.getAttribute('data-tag'); + + // Utilise l'API Clipboard pour copier dans le presse-papiers + navigator.clipboard.writeText(tag) +} + +function modal(id, price) { + const modal = document.querySelector('.modal'); + if (modal) { + modal.style.display = 'block'; + const close = document.querySelector('.modal-close'); + const accept = modal.querySelector('#accept'); + accept.innerHTML = `Payer ${price}`; + const decline = modal.querySelector('#decline'); + + accept.addEventListener('click', () => { + window.location.href = `/shop/buy/${id}`; + }); + + decline.addEventListener('click', () => { + modal.style.display = 'none'; + }); + + close.addEventListener('click', () => { + modal.style.display = 'none'; + }); + } +} + +document.addEventListener('DOMContentLoaded', () => { + const avatars = document.querySelectorAll('.cadre-retro-gameboy'); + avatars.forEach(avatar => { + console.log("on a trouvé l'avatar"); + const divButtons = document.createElement('div'); + const divCross = document.createElement('div'); + const divStartSelect = document.createElement('div'); + divButtons.classList.add('buttons'); + divCross.classList.add('controls'); + divStartSelect.classList.add('start-select'); + avatar.appendChild(divButtons); + avatar.appendChild(divCross); + avatar.appendChild(divStartSelect); + }); +}); \ No newline at end of file diff --git a/static/js/utils/multiple_posts.js b/static/js/utils/multiple_posts.js new file mode 100644 index 0000000..a74a6f6 --- /dev/null +++ b/static/js/utils/multiple_posts.js @@ -0,0 +1,87 @@ +const selectPostType = document.querySelector('#post_type'); +if (selectPostType) { + let postsList = []; + let divChildForm = null; + const container = document.querySelector('form'); + const buttonSubmit = document.querySelector('#submit-button'); + const divSubmit = document.querySelector('#submit'); + const addPostButton = document.createElement('a'); + + addPostButton.className = 'btn btn-add'; + addPostButton.textContent = "Ajouter un article"; + + selectPostType.addEventListener('change', (event) => { + const selectedValue = event.target.value; + + if (selectedValue === 'solo') { + // Supprime le bouton si présent + buttonSubmit.textContent = 'Créer'; + if (divSubmit.contains(addPostButton)) { + divSubmit.removeChild(addPostButton); + } + + // Supprime le conteneur des articles, s'il existe + if (divChildForm) { + container.removeChild(divChildForm); + divChildForm = null; // Réinitialise pour éviter des doublons + } + } else if (selectedValue === 'multiple') { + // Crée le conteneur des articles si non encore créé + buttonSubmit.textContent = 'Créer mon ensemble d\'articles'; + if (!divChildForm) { + const hiddenForm = document.createElement('input'); + hiddenForm.type = 'hidden'; + hiddenForm.name = 'type_form'; + hiddenForm.value = 'multiple'; + container.appendChild(hiddenForm); + + divChildForm = document.createElement('div'); + container.appendChild(divChildForm); + } + + // Ajoute le bouton si non encore ajouté + if (!divSubmit.contains(addPostButton)) { + divSubmit.appendChild(addPostButton); + } + + // Évite les doublons d'écouteurs avec "onclick" + addPostButton.onclick = () => { + // Ajoute un numéro d'article à la liste + const articleNumber = postsList.length + 1; + postsList.push(articleNumber); + + // Crée un titre pour l'article + const title = document.createElement('h3'); + title.textContent = `Article enfant #${articleNumber}`; + + const form = document.createElement('form'); + form.method = "POST"; + form.action = ""; + + const formTitle = document.createElement('input'); + formTitle.type = 'text'; + formTitle.name = `title-post-${articleNumber}`; + formTitle.placeholder = `Titre article #${articleNumber}`; + formTitle.required = true; + + const formContent = document.createElement('textarea'); + formContent.name = `content-post-${articleNumber}`; + formContent.placeholder = `Contenu article #${articleNumber}`; + formContent.rows = 10; + formContent.cols = 40; + formContent.required = true; + + const formPostType = document.createElement('input'); + formPostType.type = 'hidden'; + formPostType.name = `post-type-${articleNumber}`; + formPostType.value = 'child'; + + divChildForm.appendChild(title); + // divChildForm.appendChild(form); + divChildForm.appendChild(formTitle); + divChildForm.appendChild(formContent); + divChildForm.appendChild(formPostType); + }; + } + }); +} \ No newline at end of file diff --git a/static/js/vendor/jquery/LICENSE.txt b/static/js/vendor/jquery/LICENSE.txt new file mode 100644 index 0000000..f642c3f --- /dev/null +++ b/static/js/vendor/jquery/LICENSE.txt @@ -0,0 +1,20 @@ +Copyright OpenJS Foundation and other contributors, https://openjsf.org/ + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/static/js/vendor/jquery/jquery.js b/static/js/vendor/jquery/jquery.js new file mode 100644 index 0000000..7f35c11 --- /dev/null +++ b/static/js/vendor/jquery/jquery.js @@ -0,0 +1,10965 @@ +/*! + * jQuery JavaScript Library v3.6.4 + * https://jquery.com/ + * + * Includes Sizzle.js + * https://sizzlejs.com/ + * + * Copyright OpenJS Foundation and other contributors + * Released under the MIT license + * https://jquery.org/license + * + * Date: 2023-03-08T15:28Z + */ +( function( global, factory ) { + + "use strict"; + + if ( typeof module === "object" && typeof module.exports === "object" ) { + + // For CommonJS and CommonJS-like environments where a proper `window` + // is present, execute the factory and get jQuery. + // For environments that do not have a `window` with a `document` + // (such as Node.js), expose a factory as module.exports. + // This accentuates the need for the creation of a real `window`. + // e.g. var jQuery = require("jquery")(window); + // See ticket trac-14549 for more info. + module.exports = global.document ? + factory( global, true ) : + function( w ) { + if ( !w.document ) { + throw new Error( "jQuery requires a window with a document" ); + } + return factory( w ); + }; + } else { + factory( global ); + } + +// Pass this if window is not defined yet +} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) { + +// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1 +// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode +// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common +// enough that all such attempts are guarded in a try block. +"use strict"; + +var arr = []; + +var getProto = Object.getPrototypeOf; + +var slice = arr.slice; + +var flat = arr.flat ? function( array ) { + return arr.flat.call( array ); +} : function( array ) { + return arr.concat.apply( [], array ); +}; + + +var push = arr.push; + +var indexOf = arr.indexOf; + +var class2type = {}; + +var toString = class2type.toString; + +var hasOwn = class2type.hasOwnProperty; + +var fnToString = hasOwn.toString; + +var ObjectFunctionString = fnToString.call( Object ); + +var support = {}; + +var isFunction = function isFunction( obj ) { + + // Support: Chrome <=57, Firefox <=52 + // In some browsers, typeof returns "function" for HTML elements + // (i.e., `typeof document.createElement( "object" ) === "function"`). + // We don't want to classify *any* DOM node as a function. + // Support: QtWeb <=3.8.5, WebKit <=534.34, wkhtmltopdf tool <=0.12.5 + // Plus for old WebKit, typeof returns "function" for HTML collections + // (e.g., `typeof document.getElementsByTagName("div") === "function"`). (gh-4756) + return typeof obj === "function" && typeof obj.nodeType !== "number" && + typeof obj.item !== "function"; + }; + + +var isWindow = function isWindow( obj ) { + return obj != null && obj === obj.window; + }; + + +var document = window.document; + + + + var preservedScriptAttributes = { + type: true, + src: true, + nonce: true, + noModule: true + }; + + function DOMEval( code, node, doc ) { + doc = doc || document; + + var i, val, + script = doc.createElement( "script" ); + + script.text = code; + if ( node ) { + for ( i in preservedScriptAttributes ) { + + // Support: Firefox 64+, Edge 18+ + // Some browsers don't support the "nonce" property on scripts. + // On the other hand, just using `getAttribute` is not enough as + // the `nonce` attribute is reset to an empty string whenever it + // becomes browsing-context connected. + // See https://github.com/whatwg/html/issues/2369 + // See https://html.spec.whatwg.org/#nonce-attributes + // The `node.getAttribute` check was added for the sake of + // `jQuery.globalEval` so that it can fake a nonce-containing node + // via an object. + val = node[ i ] || node.getAttribute && node.getAttribute( i ); + if ( val ) { + script.setAttribute( i, val ); + } + } + } + doc.head.appendChild( script ).parentNode.removeChild( script ); + } + + +function toType( obj ) { + if ( obj == null ) { + return obj + ""; + } + + // Support: Android <=2.3 only (functionish RegExp) + return typeof obj === "object" || typeof obj === "function" ? + class2type[ toString.call( obj ) ] || "object" : + typeof obj; +} +/* global Symbol */ +// Defining this global in .eslintrc.json would create a danger of using the global +// unguarded in another place, it seems safer to define global only for this module + + + +var + version = "3.6.4", + + // Define a local copy of jQuery + jQuery = function( selector, context ) { + + // The jQuery object is actually just the init constructor 'enhanced' + // Need init if jQuery is called (just allow error to be thrown if not included) + return new jQuery.fn.init( selector, context ); + }; + +jQuery.fn = jQuery.prototype = { + + // The current version of jQuery being used + jquery: version, + + constructor: jQuery, + + // The default length of a jQuery object is 0 + length: 0, + + toArray: function() { + return slice.call( this ); + }, + + // Get the Nth element in the matched element set OR + // Get the whole matched element set as a clean array + get: function( num ) { + + // Return all the elements in a clean array + if ( num == null ) { + return slice.call( this ); + } + + // Return just the one element from the set + return num < 0 ? this[ num + this.length ] : this[ num ]; + }, + + // Take an array of elements and push it onto the stack + // (returning the new matched element set) + pushStack: function( elems ) { + + // Build a new jQuery matched element set + var ret = jQuery.merge( this.constructor(), elems ); + + // Add the old object onto the stack (as a reference) + ret.prevObject = this; + + // Return the newly-formed element set + return ret; + }, + + // Execute a callback for every element in the matched set. + each: function( callback ) { + return jQuery.each( this, callback ); + }, + + map: function( callback ) { + return this.pushStack( jQuery.map( this, function( elem, i ) { + return callback.call( elem, i, elem ); + } ) ); + }, + + slice: function() { + return this.pushStack( slice.apply( this, arguments ) ); + }, + + first: function() { + return this.eq( 0 ); + }, + + last: function() { + return this.eq( -1 ); + }, + + even: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return ( i + 1 ) % 2; + } ) ); + }, + + odd: function() { + return this.pushStack( jQuery.grep( this, function( _elem, i ) { + return i % 2; + } ) ); + }, + + eq: function( i ) { + var len = this.length, + j = +i + ( i < 0 ? len : 0 ); + return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] ); + }, + + end: function() { + return this.prevObject || this.constructor(); + }, + + // For internal use only. + // Behaves like an Array's method, not like a jQuery method. + push: push, + sort: arr.sort, + splice: arr.splice +}; + +jQuery.extend = jQuery.fn.extend = function() { + var options, name, src, copy, copyIsArray, clone, + target = arguments[ 0 ] || {}, + i = 1, + length = arguments.length, + deep = false; + + // Handle a deep copy situation + if ( typeof target === "boolean" ) { + deep = target; + + // Skip the boolean and the target + target = arguments[ i ] || {}; + i++; + } + + // Handle case when target is a string or something (possible in deep copy) + if ( typeof target !== "object" && !isFunction( target ) ) { + target = {}; + } + + // Extend jQuery itself if only one argument is passed + if ( i === length ) { + target = this; + i--; + } + + for ( ; i < length; i++ ) { + + // Only deal with non-null/undefined values + if ( ( options = arguments[ i ] ) != null ) { + + // Extend the base object + for ( name in options ) { + copy = options[ name ]; + + // Prevent Object.prototype pollution + // Prevent never-ending loop + if ( name === "__proto__" || target === copy ) { + continue; + } + + // Recurse if we're merging plain objects or arrays + if ( deep && copy && ( jQuery.isPlainObject( copy ) || + ( copyIsArray = Array.isArray( copy ) ) ) ) { + src = target[ name ]; + + // Ensure proper type for the source value + if ( copyIsArray && !Array.isArray( src ) ) { + clone = []; + } else if ( !copyIsArray && !jQuery.isPlainObject( src ) ) { + clone = {}; + } else { + clone = src; + } + copyIsArray = false; + + // Never move original objects, clone them + target[ name ] = jQuery.extend( deep, clone, copy ); + + // Don't bring in undefined values + } else if ( copy !== undefined ) { + target[ name ] = copy; + } + } + } + } + + // Return the modified object + return target; +}; + +jQuery.extend( { + + // Unique for each copy of jQuery on the page + expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ), + + // Assume jQuery is ready without the ready module + isReady: true, + + error: function( msg ) { + throw new Error( msg ); + }, + + noop: function() {}, + + isPlainObject: function( obj ) { + var proto, Ctor; + + // Detect obvious negatives + // Use toString instead of jQuery.type to catch host objects + if ( !obj || toString.call( obj ) !== "[object Object]" ) { + return false; + } + + proto = getProto( obj ); + + // Objects with no prototype (e.g., `Object.create( null )`) are plain + if ( !proto ) { + return true; + } + + // Objects with prototype are plain iff they were constructed by a global Object function + Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor; + return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString; + }, + + isEmptyObject: function( obj ) { + var name; + + for ( name in obj ) { + return false; + } + return true; + }, + + // Evaluates a script in a provided context; falls back to the global one + // if not specified. + globalEval: function( code, options, doc ) { + DOMEval( code, { nonce: options && options.nonce }, doc ); + }, + + each: function( obj, callback ) { + var length, i = 0; + + if ( isArrayLike( obj ) ) { + length = obj.length; + for ( ; i < length; i++ ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } else { + for ( i in obj ) { + if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) { + break; + } + } + } + + return obj; + }, + + // results is for internal usage only + makeArray: function( arr, results ) { + var ret = results || []; + + if ( arr != null ) { + if ( isArrayLike( Object( arr ) ) ) { + jQuery.merge( ret, + typeof arr === "string" ? + [ arr ] : arr + ); + } else { + push.call( ret, arr ); + } + } + + return ret; + }, + + inArray: function( elem, arr, i ) { + return arr == null ? -1 : indexOf.call( arr, elem, i ); + }, + + // Support: Android <=4.0 only, PhantomJS 1 only + // push.apply(_, arraylike) throws on ancient WebKit + merge: function( first, second ) { + var len = +second.length, + j = 0, + i = first.length; + + for ( ; j < len; j++ ) { + first[ i++ ] = second[ j ]; + } + + first.length = i; + + return first; + }, + + grep: function( elems, callback, invert ) { + var callbackInverse, + matches = [], + i = 0, + length = elems.length, + callbackExpect = !invert; + + // Go through the array, only saving the items + // that pass the validator function + for ( ; i < length; i++ ) { + callbackInverse = !callback( elems[ i ], i ); + if ( callbackInverse !== callbackExpect ) { + matches.push( elems[ i ] ); + } + } + + return matches; + }, + + // arg is for internal usage only + map: function( elems, callback, arg ) { + var length, value, + i = 0, + ret = []; + + // Go through the array, translating each of the items to their new values + if ( isArrayLike( elems ) ) { + length = elems.length; + for ( ; i < length; i++ ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + + // Go through every key on the object, + } else { + for ( i in elems ) { + value = callback( elems[ i ], i, arg ); + + if ( value != null ) { + ret.push( value ); + } + } + } + + // Flatten any nested arrays + return flat( ret ); + }, + + // A global GUID counter for objects + guid: 1, + + // jQuery.support is not used in Core but other projects attach their + // properties to it so it needs to exist. + support: support +} ); + +if ( typeof Symbol === "function" ) { + jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ]; +} + +// Populate the class2type map +jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ), + function( _i, name ) { + class2type[ "[object " + name + "]" ] = name.toLowerCase(); + } ); + +function isArrayLike( obj ) { + + // Support: real iOS 8.2 only (not reproducible in simulator) + // `in` check used to prevent JIT error (gh-2145) + // hasOwn isn't used here due to false negatives + // regarding Nodelist length in IE + var length = !!obj && "length" in obj && obj.length, + type = toType( obj ); + + if ( isFunction( obj ) || isWindow( obj ) ) { + return false; + } + + return type === "array" || length === 0 || + typeof length === "number" && length > 0 && ( length - 1 ) in obj; +} +var Sizzle = +/*! + * Sizzle CSS Selector Engine v2.3.10 + * https://sizzlejs.com/ + * + * Copyright JS Foundation and other contributors + * Released under the MIT license + * https://js.foundation/ + * + * Date: 2023-02-14 + */ +( function( window ) { +var i, + support, + Expr, + getText, + isXML, + tokenize, + compile, + select, + outermostContext, + sortInput, + hasDuplicate, + + // Local document vars + setDocument, + document, + docElem, + documentIsHTML, + rbuggyQSA, + rbuggyMatches, + matches, + contains, + + // Instance-specific data + expando = "sizzle" + 1 * new Date(), + preferredDoc = window.document, + dirruns = 0, + done = 0, + classCache = createCache(), + tokenCache = createCache(), + compilerCache = createCache(), + nonnativeSelectorCache = createCache(), + sortOrder = function( a, b ) { + if ( a === b ) { + hasDuplicate = true; + } + return 0; + }, + + // Instance methods + hasOwn = ( {} ).hasOwnProperty, + arr = [], + pop = arr.pop, + pushNative = arr.push, + push = arr.push, + slice = arr.slice, + + // Use a stripped-down indexOf as it's faster than native + // https://jsperf.com/thor-indexof-vs-for/5 + indexOf = function( list, elem ) { + var i = 0, + len = list.length; + for ( ; i < len; i++ ) { + if ( list[ i ] === elem ) { + return i; + } + } + return -1; + }, + + booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|" + + "ismap|loop|multiple|open|readonly|required|scoped", + + // Regular expressions + + // http://www.w3.org/TR/css3-selectors/#whitespace + whitespace = "[\\x20\\t\\r\\n\\f]", + + // https://www.w3.org/TR/css-syntax-3/#ident-token-diagram + identifier = "(?:\\\\[\\da-fA-F]{1,6}" + whitespace + + "?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+", + + // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors + attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace + + + // Operator (capture 2) + "*([*^$|!~]?=)" + whitespace + + + // "Attribute values must be CSS identifiers [capture 5] + // or strings [capture 3 or capture 4]" + "*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + + whitespace + "*\\]", + + pseudos = ":(" + identifier + ")(?:\\((" + + + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments: + // 1. quoted (capture 3; capture 4 or capture 5) + "('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" + + + // 2. simple (capture 6) + "((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" + + + // 3. anything else (capture 2) + ".*" + + ")\\)|)", + + // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter + rwhitespace = new RegExp( whitespace + "+", "g" ), + rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + + whitespace + "+$", "g" ), + + rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), + rleadingCombinator = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + + "*" ), + rdescend = new RegExp( whitespace + "|>" ), + + rpseudo = new RegExp( pseudos ), + ridentifier = new RegExp( "^" + identifier + "$" ), + + matchExpr = { + "ID": new RegExp( "^#(" + identifier + ")" ), + "CLASS": new RegExp( "^\\.(" + identifier + ")" ), + "TAG": new RegExp( "^(" + identifier + "|[*])" ), + "ATTR": new RegExp( "^" + attributes ), + "PSEUDO": new RegExp( "^" + pseudos ), + "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), + "bool": new RegExp( "^(?:" + booleans + ")$", "i" ), + + // For use in libraries implementing .is() + // We use this for POS matching in `select` + "needsContext": new RegExp( "^" + whitespace + + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) + }, + + rhtml = /HTML$/i, + rinputs = /^(?:input|select|textarea|button)$/i, + rheader = /^h\d$/i, + + rnative = /^[^{]+\{\s*\[native \w/, + + // Easily-parseable/retrievable ID or TAG or CLASS selectors + rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, + + rsibling = /[+~]/, + + // CSS escapes + // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters + runescape = new RegExp( "\\\\[\\da-fA-F]{1,6}" + whitespace + "?|\\\\([^\\r\\n\\f])", "g" ), + funescape = function( escape, nonHex ) { + var high = "0x" + escape.slice( 1 ) - 0x10000; + + return nonHex ? + + // Strip the backslash prefix from a non-hex escape sequence + nonHex : + + // Replace a hexadecimal escape sequence with the encoded Unicode code point + // Support: IE <=11+ + // For values outside the Basic Multilingual Plane (BMP), manually construct a + // surrogate pair + high < 0 ? + String.fromCharCode( high + 0x10000 ) : + String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); + }, + + // CSS string/identifier serialization + // https://drafts.csswg.org/cssom/#common-serializing-idioms + rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g, + fcssescape = function( ch, asCodePoint ) { + if ( asCodePoint ) { + + // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER + if ( ch === "\0" ) { + return "\uFFFD"; + } + + // Control characters and (dependent upon position) numbers get escaped as code points + return ch.slice( 0, -1 ) + "\\" + + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " "; + } + + // Other potentially-special ASCII characters get backslash-escaped + return "\\" + ch; + }, + + // Used for iframes + // See setDocument() + // Removing the function wrapper causes a "Permission Denied" + // error in IE + unloadHandler = function() { + setDocument(); + }, + + inDisabledFieldset = addCombinator( + function( elem ) { + return elem.disabled === true && elem.nodeName.toLowerCase() === "fieldset"; + }, + { dir: "parentNode", next: "legend" } + ); + +// Optimize for push.apply( _, NodeList ) +try { + push.apply( + ( arr = slice.call( preferredDoc.childNodes ) ), + preferredDoc.childNodes + ); + + // Support: Android<4.0 + // Detect silently failing push.apply + // eslint-disable-next-line no-unused-expressions + arr[ preferredDoc.childNodes.length ].nodeType; +} catch ( e ) { + push = { apply: arr.length ? + + // Leverage slice if possible + function( target, els ) { + pushNative.apply( target, slice.call( els ) ); + } : + + // Support: IE<9 + // Otherwise append directly + function( target, els ) { + var j = target.length, + i = 0; + + // Can't trust NodeList.length + while ( ( target[ j++ ] = els[ i++ ] ) ) {} + target.length = j - 1; + } + }; +} + +function Sizzle( selector, context, results, seed ) { + var m, i, elem, nid, match, groups, newSelector, + newContext = context && context.ownerDocument, + + // nodeType defaults to 9, since context defaults to document + nodeType = context ? context.nodeType : 9; + + results = results || []; + + // Return early from calls with invalid selector or context + if ( typeof selector !== "string" || !selector || + nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) { + + return results; + } + + // Try to shortcut find operations (as opposed to filters) in HTML documents + if ( !seed ) { + setDocument( context ); + context = context || document; + + if ( documentIsHTML ) { + + // If the selector is sufficiently simple, try using a "get*By*" DOM method + // (excepting DocumentFragment context, where the methods don't exist) + if ( nodeType !== 11 && ( match = rquickExpr.exec( selector ) ) ) { + + // ID selector + if ( ( m = match[ 1 ] ) ) { + + // Document context + if ( nodeType === 9 ) { + if ( ( elem = context.getElementById( m ) ) ) { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( elem.id === m ) { + results.push( elem ); + return results; + } + } else { + return results; + } + + // Element context + } else { + + // Support: IE, Opera, Webkit + // TODO: identify versions + // getElementById can match elements by name instead of ID + if ( newContext && ( elem = newContext.getElementById( m ) ) && + contains( context, elem ) && + elem.id === m ) { + + results.push( elem ); + return results; + } + } + + // Type selector + } else if ( match[ 2 ] ) { + push.apply( results, context.getElementsByTagName( selector ) ); + return results; + + // Class selector + } else if ( ( m = match[ 3 ] ) && support.getElementsByClassName && + context.getElementsByClassName ) { + + push.apply( results, context.getElementsByClassName( m ) ); + return results; + } + } + + // Take advantage of querySelectorAll + if ( support.qsa && + !nonnativeSelectorCache[ selector + " " ] && + ( !rbuggyQSA || !rbuggyQSA.test( selector ) ) && + + // Support: IE 8 only + // Exclude object elements + ( nodeType !== 1 || context.nodeName.toLowerCase() !== "object" ) ) { + + newSelector = selector; + newContext = context; + + // qSA considers elements outside a scoping root when evaluating child or + // descendant combinators, which is not what we want. + // In such cases, we work around the behavior by prefixing every selector in the + // list with an ID selector referencing the scope context. + // The technique has to be used as well when a leading combinator is used + // as such selectors are not recognized by querySelectorAll. + // Thanks to Andrew Dupont for this technique. + if ( nodeType === 1 && + ( rdescend.test( selector ) || rleadingCombinator.test( selector ) ) ) { + + // Expand context for sibling selectors + newContext = rsibling.test( selector ) && testContext( context.parentNode ) || + context; + + // We can use :scope instead of the ID hack if the browser + // supports it & if we're not changing the context. + if ( newContext !== context || !support.scope ) { + + // Capture the context ID, setting it first if necessary + if ( ( nid = context.getAttribute( "id" ) ) ) { + nid = nid.replace( rcssescape, fcssescape ); + } else { + context.setAttribute( "id", ( nid = expando ) ); + } + } + + // Prefix every selector in the list + groups = tokenize( selector ); + i = groups.length; + while ( i-- ) { + groups[ i ] = ( nid ? "#" + nid : ":scope" ) + " " + + toSelector( groups[ i ] ); + } + newSelector = groups.join( "," ); + } + + try { + push.apply( results, + newContext.querySelectorAll( newSelector ) + ); + return results; + } catch ( qsaError ) { + nonnativeSelectorCache( selector, true ); + } finally { + if ( nid === expando ) { + context.removeAttribute( "id" ); + } + } + } + } + } + + // All others + return select( selector.replace( rtrim, "$1" ), context, results, seed ); +} + +/** + * Create key-value caches of limited size + * @returns {function(string, object)} Returns the Object data after storing it on itself with + * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) + * deleting the oldest entry + */ +function createCache() { + var keys = []; + + function cache( key, value ) { + + // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) + if ( keys.push( key + " " ) > Expr.cacheLength ) { + + // Only keep the most recent entries + delete cache[ keys.shift() ]; + } + return ( cache[ key + " " ] = value ); + } + return cache; +} + +/** + * Mark a function for special use by Sizzle + * @param {Function} fn The function to mark + */ +function markFunction( fn ) { + fn[ expando ] = true; + return fn; +} + +/** + * Support testing using an element + * @param {Function} fn Passed the created element and returns a boolean result + */ +function assert( fn ) { + var el = document.createElement( "fieldset" ); + + try { + return !!fn( el ); + } catch ( e ) { + return false; + } finally { + + // Remove from its parent by default + if ( el.parentNode ) { + el.parentNode.removeChild( el ); + } + + // release memory in IE + el = null; + } +} + +/** + * Adds the same handler for all of the specified attrs + * @param {String} attrs Pipe-separated list of attributes + * @param {Function} handler The method that will be applied + */ +function addHandle( attrs, handler ) { + var arr = attrs.split( "|" ), + i = arr.length; + + while ( i-- ) { + Expr.attrHandle[ arr[ i ] ] = handler; + } +} + +/** + * Checks document order of two siblings + * @param {Element} a + * @param {Element} b + * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b + */ +function siblingCheck( a, b ) { + var cur = b && a, + diff = cur && a.nodeType === 1 && b.nodeType === 1 && + a.sourceIndex - b.sourceIndex; + + // Use IE sourceIndex if available on both nodes + if ( diff ) { + return diff; + } + + // Check if b follows a + if ( cur ) { + while ( ( cur = cur.nextSibling ) ) { + if ( cur === b ) { + return -1; + } + } + } + + return a ? 1 : -1; +} + +/** + * Returns a function to use in pseudos for input types + * @param {String} type + */ +function createInputPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return name === "input" && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for buttons + * @param {String} type + */ +function createButtonPseudo( type ) { + return function( elem ) { + var name = elem.nodeName.toLowerCase(); + return ( name === "input" || name === "button" ) && elem.type === type; + }; +} + +/** + * Returns a function to use in pseudos for :enabled/:disabled + * @param {Boolean} disabled true for :disabled; false for :enabled + */ +function createDisabledPseudo( disabled ) { + + // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable + return function( elem ) { + + // Only certain elements can match :enabled or :disabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled + // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled + if ( "form" in elem ) { + + // Check for inherited disabledness on relevant non-disabled elements: + // * listed form-associated elements in a disabled fieldset + // https://html.spec.whatwg.org/multipage/forms.html#category-listed + // https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled + // * option elements in a disabled optgroup + // https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled + // All such elements have a "form" property. + if ( elem.parentNode && elem.disabled === false ) { + + // Option elements defer to a parent optgroup if present + if ( "label" in elem ) { + if ( "label" in elem.parentNode ) { + return elem.parentNode.disabled === disabled; + } else { + return elem.disabled === disabled; + } + } + + // Support: IE 6 - 11 + // Use the isDisabled shortcut property to check for disabled fieldset ancestors + return elem.isDisabled === disabled || + + // Where there is no isDisabled, check manually + /* jshint -W018 */ + elem.isDisabled !== !disabled && + inDisabledFieldset( elem ) === disabled; + } + + return elem.disabled === disabled; + + // Try to winnow out elements that can't be disabled before trusting the disabled property. + // Some victims get caught in our net (label, legend, menu, track), but it shouldn't + // even exist on them, let alone have a boolean value. + } else if ( "label" in elem ) { + return elem.disabled === disabled; + } + + // Remaining elements are neither :enabled nor :disabled + return false; + }; +} + +/** + * Returns a function to use in pseudos for positionals + * @param {Function} fn + */ +function createPositionalPseudo( fn ) { + return markFunction( function( argument ) { + argument = +argument; + return markFunction( function( seed, matches ) { + var j, + matchIndexes = fn( [], seed.length, argument ), + i = matchIndexes.length; + + // Match elements found at the specified indexes + while ( i-- ) { + if ( seed[ ( j = matchIndexes[ i ] ) ] ) { + seed[ j ] = !( matches[ j ] = seed[ j ] ); + } + } + } ); + } ); +} + +/** + * Checks a node for validity as a Sizzle context + * @param {Element|Object=} context + * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value + */ +function testContext( context ) { + return context && typeof context.getElementsByTagName !== "undefined" && context; +} + +// Expose support vars for convenience +support = Sizzle.support = {}; + +/** + * Detects XML nodes + * @param {Element|Object} elem An element or a document + * @returns {Boolean} True iff elem is a non-HTML XML node + */ +isXML = Sizzle.isXML = function( elem ) { + var namespace = elem && elem.namespaceURI, + docElem = elem && ( elem.ownerDocument || elem ).documentElement; + + // Support: IE <=8 + // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes + // https://bugs.jquery.com/ticket/4833 + return !rhtml.test( namespace || docElem && docElem.nodeName || "HTML" ); +}; + +/** + * Sets document-related variables once based on the current document + * @param {Element|Object} [doc] An element or document object to use to set the document + * @returns {Object} Returns the current document + */ +setDocument = Sizzle.setDocument = function( node ) { + var hasCompare, subWindow, + doc = node ? node.ownerDocument || node : preferredDoc; + + // Return early if doc is invalid or already selected + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( doc == document || doc.nodeType !== 9 || !doc.documentElement ) { + return document; + } + + // Update global variables + document = doc; + docElem = document.documentElement; + documentIsHTML = !isXML( document ); + + // Support: IE 9 - 11+, Edge 12 - 18+ + // Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936) + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + if ( preferredDoc != document && + ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { + + // Support: IE 11, Edge + if ( subWindow.addEventListener ) { + subWindow.addEventListener( "unload", unloadHandler, false ); + + // Support: IE 9 - 10 only + } else if ( subWindow.attachEvent ) { + subWindow.attachEvent( "onunload", unloadHandler ); + } + } + + // Support: IE 8 - 11+, Edge 12 - 18+, Chrome <=16 - 25 only, Firefox <=3.6 - 31 only, + // Safari 4 - 5 only, Opera <=11.6 - 12.x only + // IE/Edge & older browsers don't support the :scope pseudo-class. + // Support: Safari 6.0 only + // Safari 6.0 supports :scope but it's an alias of :root there. + support.scope = assert( function( el ) { + docElem.appendChild( el ).appendChild( document.createElement( "div" ) ); + return typeof el.querySelectorAll !== "undefined" && + !el.querySelectorAll( ":scope fieldset div" ).length; + } ); + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Make sure the the `:has()` argument is parsed unforgivingly. + // We include `*` in the test to detect buggy implementations that are + // _selectively_ forgiving (specifically when the list includes at least + // one valid selector). + // Note that we treat complete lack of support for `:has()` as if it were + // spec-compliant support, which is fine because use of `:has()` in such + // environments will fail in the qSA path and fall back to jQuery traversal + // anyway. + support.cssHas = assert( function() { + try { + document.querySelector( ":has(*,:jqfake)" ); + return false; + } catch ( e ) { + return true; + } + } ); + + /* Attributes + ---------------------------------------------------------------------- */ + + // Support: IE<8 + // Verify that getAttribute really returns attributes and not properties + // (excepting IE8 booleans) + support.attributes = assert( function( el ) { + el.className = "i"; + return !el.getAttribute( "className" ); + } ); + + /* getElement(s)By* + ---------------------------------------------------------------------- */ + + // Check if getElementsByTagName("*") returns only elements + support.getElementsByTagName = assert( function( el ) { + el.appendChild( document.createComment( "" ) ); + return !el.getElementsByTagName( "*" ).length; + } ); + + // Support: IE<9 + support.getElementsByClassName = rnative.test( document.getElementsByClassName ); + + // Support: IE<10 + // Check if getElementById returns elements by name + // The broken getElementById methods don't pick up programmatically-set names, + // so use a roundabout getElementsByName test + support.getById = assert( function( el ) { + docElem.appendChild( el ).id = expando; + return !document.getElementsByName || !document.getElementsByName( expando ).length; + } ); + + // ID filter and find + if ( support.getById ) { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + return elem.getAttribute( "id" ) === attrId; + }; + }; + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var elem = context.getElementById( id ); + return elem ? [ elem ] : []; + } + }; + } else { + Expr.filter[ "ID" ] = function( id ) { + var attrId = id.replace( runescape, funescape ); + return function( elem ) { + var node = typeof elem.getAttributeNode !== "undefined" && + elem.getAttributeNode( "id" ); + return node && node.value === attrId; + }; + }; + + // Support: IE 6 - 7 only + // getElementById is not reliable as a find shortcut + Expr.find[ "ID" ] = function( id, context ) { + if ( typeof context.getElementById !== "undefined" && documentIsHTML ) { + var node, i, elems, + elem = context.getElementById( id ); + + if ( elem ) { + + // Verify the id attribute + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + + // Fall back on getElementsByName + elems = context.getElementsByName( id ); + i = 0; + while ( ( elem = elems[ i++ ] ) ) { + node = elem.getAttributeNode( "id" ); + if ( node && node.value === id ) { + return [ elem ]; + } + } + } + + return []; + } + }; + } + + // Tag + Expr.find[ "TAG" ] = support.getElementsByTagName ? + function( tag, context ) { + if ( typeof context.getElementsByTagName !== "undefined" ) { + return context.getElementsByTagName( tag ); + + // DocumentFragment nodes don't have gEBTN + } else if ( support.qsa ) { + return context.querySelectorAll( tag ); + } + } : + + function( tag, context ) { + var elem, + tmp = [], + i = 0, + + // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too + results = context.getElementsByTagName( tag ); + + // Filter out possible comments + if ( tag === "*" ) { + while ( ( elem = results[ i++ ] ) ) { + if ( elem.nodeType === 1 ) { + tmp.push( elem ); + } + } + + return tmp; + } + return results; + }; + + // Class + Expr.find[ "CLASS" ] = support.getElementsByClassName && function( className, context ) { + if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) { + return context.getElementsByClassName( className ); + } + }; + + /* QSA/matchesSelector + ---------------------------------------------------------------------- */ + + // QSA and matchesSelector support + + // matchesSelector(:active) reports false when true (IE9/Opera 11.5) + rbuggyMatches = []; + + // qSa(:focus) reports false when true (Chrome 21) + // We allow this because of a bug in IE8/9 that throws an error + // whenever `document.activeElement` is accessed on an iframe + // So, we allow :focus to pass through QSA all the time to avoid the IE error + // See https://bugs.jquery.com/ticket/13378 + rbuggyQSA = []; + + if ( ( support.qsa = rnative.test( document.querySelectorAll ) ) ) { + + // Build QSA regex + // Regex strategy adopted from Diego Perini + assert( function( el ) { + + var input; + + // Select is set to empty string on purpose + // This is to test IE's treatment of not explicitly + // setting a boolean content attribute, + // since its presence should be enough + // https://bugs.jquery.com/ticket/12359 + docElem.appendChild( el ).innerHTML = "" + + ""; + + // Support: IE8, Opera 11-12.16 + // Nothing should be selected when empty strings follow ^= or $= or *= + // The test attribute must be unknown in Opera but "safe" for WinRT + // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section + if ( el.querySelectorAll( "[msallowcapture^='']" ).length ) { + rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" ); + } + + // Support: IE8 + // Boolean attributes and "value" are not treated correctly + if ( !el.querySelectorAll( "[selected]" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" ); + } + + // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+ + if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) { + rbuggyQSA.push( "~=" ); + } + + // Support: IE 11+, Edge 15 - 18+ + // IE 11/Edge don't find elements on a `[name='']` query in some cases. + // Adding a temporary attribute to the document before the selection works + // around the issue. + // Interestingly, IE 10 & older don't seem to have the issue. + input = document.createElement( "input" ); + input.setAttribute( "name", "" ); + el.appendChild( input ); + if ( !el.querySelectorAll( "[name='']" ).length ) { + rbuggyQSA.push( "\\[" + whitespace + "*name" + whitespace + "*=" + + whitespace + "*(?:''|\"\")" ); + } + + // Webkit/Opera - :checked should return selected option elements + // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked + // IE8 throws error here and will not see later tests + if ( !el.querySelectorAll( ":checked" ).length ) { + rbuggyQSA.push( ":checked" ); + } + + // Support: Safari 8+, iOS 8+ + // https://bugs.webkit.org/show_bug.cgi?id=136851 + // In-page `selector#id sibling-combinator selector` fails + if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) { + rbuggyQSA.push( ".#.+[+~]" ); + } + + // Support: Firefox <=3.6 - 5 only + // Old Firefox doesn't throw on a badly-escaped identifier. + el.querySelectorAll( "\\\f" ); + rbuggyQSA.push( "[\\r\\n\\f]" ); + } ); + + assert( function( el ) { + el.innerHTML = "" + + ""; + + // Support: Windows 8 Native Apps + // The type and name attributes are restricted during .innerHTML assignment + var input = document.createElement( "input" ); + input.setAttribute( "type", "hidden" ); + el.appendChild( input ).setAttribute( "name", "D" ); + + // Support: IE8 + // Enforce case-sensitivity of name attribute + if ( el.querySelectorAll( "[name=d]" ).length ) { + rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" ); + } + + // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) + // IE8 throws error here and will not see later tests + if ( el.querySelectorAll( ":enabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: IE9-11+ + // IE's :disabled selector does not pick up the children of disabled fieldsets + docElem.appendChild( el ).disabled = true; + if ( el.querySelectorAll( ":disabled" ).length !== 2 ) { + rbuggyQSA.push( ":enabled", ":disabled" ); + } + + // Support: Opera 10 - 11 only + // Opera 10-11 does not throw on post-comma invalid pseudos + el.querySelectorAll( "*,:x" ); + rbuggyQSA.push( ",.*:" ); + } ); + } + + if ( ( support.matchesSelector = rnative.test( ( matches = docElem.matches || + docElem.webkitMatchesSelector || + docElem.mozMatchesSelector || + docElem.oMatchesSelector || + docElem.msMatchesSelector ) ) ) ) { + + assert( function( el ) { + + // Check to see if it's possible to do matchesSelector + // on a disconnected node (IE 9) + support.disconnectedMatch = matches.call( el, "*" ); + + // This should fail with an exception + // Gecko does not error, returns false instead + matches.call( el, "[s!='']:x" ); + rbuggyMatches.push( "!=", pseudos ); + } ); + } + + if ( !support.cssHas ) { + + // Support: Chrome 105 - 110+, Safari 15.4 - 16.3+ + // Our regular `try-catch` mechanism fails to detect natively-unsupported + // pseudo-classes inside `:has()` (such as `:has(:contains("Foo"))`) + // in browsers that parse the `:has()` argument as a forgiving selector list. + // https://drafts.csswg.org/selectors/#relational now requires the argument + // to be parsed unforgivingly, but browsers have not yet fully adjusted. + rbuggyQSA.push( ":has" ); + } + + rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join( "|" ) ); + rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join( "|" ) ); + + /* Contains + ---------------------------------------------------------------------- */ + hasCompare = rnative.test( docElem.compareDocumentPosition ); + + // Element contains another + // Purposefully self-exclusive + // As in, an element does not contain itself + contains = hasCompare || rnative.test( docElem.contains ) ? + function( a, b ) { + + // Support: IE <9 only + // IE doesn't have `contains` on `document` so we need to check for + // `documentElement` presence. + // We need to fall back to `a` when `documentElement` is missing + // as `ownerDocument` of elements within `

    tTa3fnQCQPXLRZ2MZY=wEa+X;D?Zq$(ehJN$Qp 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 bEfn3FK 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