├── auctions ├── __init__.py ├── management │ ├── __init__.py │ ├── commands │ │ ├── __init__.py │ │ ├── __pycache__ │ │ │ ├── info.cpython-36.pyc │ │ │ ├── __init__.cpython-36.pyc │ │ │ ├── invoice.cpython-36.pyc │ │ │ ├── endauctions.cpython-36.pyc │ │ │ ├── email_invoice.cpython-36.pyc │ │ │ ├── print_invoice.cpython-36.pyc │ │ │ ├── sendnotifications.cpython-36.pyc │ │ │ ├── update_breederboard.cpython-36.pyc │ │ │ └── update_user_interest.cpython-36.pyc │ │ ├── remove_duplicate_views.py │ │ ├── purge_bot_users.py │ │ ├── change_paypal.py │ │ ├── change_square.py │ │ └── change_standalone_lots.py │ └── __pycache__ │ │ └── __init__.cpython-36.pyc ├── migrations │ ├── __init__.py │ ├── __pycache__ │ │ ├── __init__.cpython-36.pyc │ │ ├── 0001_initial.cpython-36.pyc │ │ ├── 0011_pageview.cpython-36.pyc │ │ ├── 0011_userinfo.cpython-36.pyc │ │ ├── 0045_lot_slug.cpython-36.pyc │ │ ├── 0002_auction_test.cpython-36.pyc │ │ ├── 0004_auction_test.cpython-36.pyc │ │ ├── 0009_userpreferences.cpython-36.pyc │ │ ├── 0017_bid_was_high_bid.cpython-36.pyc │ │ ├── 0025_bid_last_bid_time.cpython-36.pyc │ │ ├── 0003_auto_20201004_1543.cpython-36.pyc │ │ ├── 0005_remove_auction_test.cpython-36.pyc │ │ ├── 0006_auto_20201004_1615.cpython-36.pyc │ │ ├── 0007_auto_20201004_2107.cpython-36.pyc │ │ ├── 0008_auto_20201004_2328.cpython-36.pyc │ │ ├── 0009_auto_20201005_0027.cpython-36.pyc │ │ ├── 0010_auto_20201005_0041.cpython-36.pyc │ │ ├── 0012_auto_20201005_0142.cpython-36.pyc │ │ ├── 0013_auto_20201005_1231.cpython-36.pyc │ │ ├── 0014_auto_20201008_1726.cpython-36.pyc │ │ ├── 0016_auto_20201009_1255.cpython-36.pyc │ │ ├── 0018_auto_20201010_1429.cpython-36.pyc │ │ ├── 0019_auto_20201010_2102.cpython-36.pyc │ │ ├── 0021_auto_20201025_1232.cpython-36.pyc │ │ ├── 0022_auto_20201031_2117.cpython-36.pyc │ │ ├── 0024_auto_20201102_0659.cpython-36.pyc │ │ ├── 0026_auto_20201102_2030.cpython-36.pyc │ │ ├── 0027_auto_20201102_2040.cpython-36.pyc │ │ ├── 0028_auto_20201103_0757.cpython-36.pyc │ │ ├── 0029_auto_20201113_0929.cpython-36.pyc │ │ ├── 0030_auto_20201113_0952.cpython-36.pyc │ │ ├── 0031_auto_20201113_0953.cpython-36.pyc │ │ ├── 0032_auto_20201115_1213.cpython-36.pyc │ │ ├── 0033_auto_20201115_1355.cpython-36.pyc │ │ ├── 0034_auto_20201116_1923.cpython-36.pyc │ │ ├── 0035_userinterestcategory.cpython-36.pyc │ │ ├── 0036_auto_20201120_1025.cpython-36.pyc │ │ ├── 0038_auto_20201123_1138.cpython-36.pyc │ │ ├── 0039_auto_20201124_0856.cpython-36.pyc │ │ ├── 0040_auto_20201124_0857.cpython-36.pyc │ │ ├── 0041_auto_20201124_0857.cpython-36.pyc │ │ ├── 0042_auto_20201127_1627.cpython-36.pyc │ │ ├── 0043_auto_20201128_1201.cpython-36.pyc │ │ ├── 0044_auto_20201128_1407.cpython-36.pyc │ │ ├── 0008_userdata_data_opt_out.cpython-36.pyc │ │ ├── 0015_userdata_email_visible.cpython-36.pyc │ │ ├── 0023_userdata_use_list_view.cpython-36.pyc │ │ ├── 0042_remove_blogpost_extra_js.cpython-36.pyc │ │ ├── 0020_userdata_last_auction_used.cpython-36.pyc │ │ ├── 0037_auction_lot_promotion_cost.cpython-36.pyc │ │ └── 0010_remove_userpreferences_data_opt_out.cpython-36.pyc │ ├── 0210_merge_20251123_1159.py │ ├── 0198_merge_20251104_1334.py │ ├── 0176_lot_admin_validated.py │ ├── 0195_paypalseller_currency.py │ ├── 0161_alter_auction_reprint_reminder_sent.py │ ├── 0151_lot_summernote_description.py │ ├── 0142_club_date_contacted_for_in_person_auctions.py │ ├── 0181_alter_pageview_ip_address.py │ ├── 0182_auto_20250409_1115.py │ ├── 0167_alter_auction_use_seller_dash_lot_numbering.py │ ├── 0218_set_next_update_due_default.py │ ├── 0199_auction_weekly_promo_emails_sent.py │ ├── 0197_alter_invoiceadjustment_adjustment_type.py │ ├── 0209_add_no_more_refunds_field.py │ ├── 0138_auction_only_approved_bidders.py │ ├── 0212_invoicepayment_receipt_number.py │ ├── 0148_userdata_push_notifications_when_lots_sell.py │ ├── 0155_auction_label_print_fields.py │ ├── 0177_alter_pageview_date_start_alter_pageview_session_id.py │ ├── 0143_auction_extra_promo_link_auction_extra_promo_text.py │ ├── 0190_auction_paypal_email_address.py │ ├── 0203_alter_userdata_distance_unit.py │ ├── 0135_lot_partial_refund_percent.py │ ├── 0166_auction_use_seller_dash_lot_numbering_and_more.py │ ├── 0165_alter_auction_summernote_description_and_more.py │ ├── 0201_userdata_distance_unit.py │ ├── 0171_alter_auction_message_users_when_lots_sell.py │ ├── 0204_userdata_is_trusted.py │ ├── 0163_alter_auction_summernote_description_and_more.py │ ├── 0190_auction_alternative_split_label.py │ ├── 0206_userdata_preferred_currency.py │ ├── 0141_auctiontos_email_address_status.py │ ├── 0152_copy_description.py │ ├── 0154_remove_auction_notes_remove_auction_notes_rendered_and_more.py │ ├── 0179_auctiontos_possible_duplicate.py │ ├── 0153_auction_summernote_description.py │ ├── 0208_enable_square_encryption.py │ ├── 0169_auction_custom_field_1.py │ ├── 0194_remove_paypalseller_access_token_and_more.py │ ├── 0137_alter_userlabelprefs_preset.py │ ├── 0178_create_locations.py │ ├── 0156_category_name_on_label_and_more.py │ ├── 0150_auction_invoice_rounding_and_more.py │ └── 0207_add_square_oauth_fields.py ├── templatetags │ └── __init__.py ├── static │ ├── js │ │ └── auction_site.js │ ├── webpush │ │ ├── new.json │ │ └── webpush_serviceworker.js │ ├── summernote │ │ ├── SOURCE │ │ ├── font │ │ │ ├── summernote.hash │ │ │ ├── summernote.eot │ │ │ ├── summernote.ttf │ │ │ ├── summernote.woff │ │ │ └── summernote.woff2 │ │ ├── summernote.png │ │ ├── django_summernote.css │ │ └── bs5-hack.js │ ├── models │ │ └── vosk │ │ │ └── vosk-model-small-en-us-0.15 │ │ │ ├── index.html │ │ │ └── README │ ├── mess.jpg │ ├── favicon.ico │ ├── youtube.png │ ├── markdownfield │ │ ├── md.css │ │ └── fontawesome │ │ │ └── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ ├── cracked_tank.jpg │ ├── favicon-16x16.png │ ├── favicon-32x32.png │ ├── apple-touch-icon.png │ ├── android-chrome-192x192.png │ ├── android-chrome-512x512.png │ ├── fonts │ │ ├── bootstrap-icons.woff │ │ └── bootstrap-icons.woff2 │ ├── location_field │ │ ├── images │ │ │ ├── layers.png │ │ │ ├── layers-2x.png │ │ │ ├── marker-icon.png │ │ │ ├── marker-icon-2x.png │ │ │ └── marker-shadow.png │ │ └── leaflet │ │ │ └── images │ │ │ ├── layers.png │ │ │ ├── layers-2x.png │ │ │ ├── marker-icon.png │ │ │ ├── marker-icon-2x.png │ │ │ └── marker-shadow.png │ ├── admin │ │ ├── fonts │ │ │ ├── Roboto-Bold-webfont.woff │ │ │ ├── Roboto-Light-webfont.woff │ │ │ ├── Roboto-Regular-webfont.woff │ │ │ └── README.txt │ │ ├── img │ │ │ ├── tooltag-arrowright.svg │ │ │ ├── README.txt │ │ │ ├── icon-addlink.svg │ │ │ ├── tooltag-add.svg │ │ │ ├── icon-changelink.svg │ │ │ ├── icon-deletelink.svg │ │ │ ├── icon-yes.svg │ │ │ ├── search.svg │ │ │ ├── icon-alert.svg │ │ │ ├── icon-no.svg │ │ │ ├── inline-delete.svg │ │ │ ├── icon-viewlink.svg │ │ │ ├── icon-unknown-alt.svg │ │ │ ├── icon-unknown.svg │ │ │ ├── icon-clock.svg │ │ │ └── icon-hidelink.svg │ │ ├── js │ │ │ ├── jquery.init.js │ │ │ ├── popup_response.js │ │ │ ├── vendor │ │ │ │ └── select2 │ │ │ │ │ └── i18n │ │ │ │ │ ├── zh-TW.js │ │ │ │ │ ├── zh-CN.js │ │ │ │ │ ├── ja.js │ │ │ │ │ ├── az.js │ │ │ │ │ ├── ko.js │ │ │ │ │ ├── vi.js │ │ │ │ │ ├── tk.js │ │ │ │ │ ├── id.js │ │ │ │ │ ├── tr.js │ │ │ │ │ ├── ar.js │ │ │ │ │ ├── th.js │ │ │ │ │ ├── nb.js │ │ │ │ │ ├── km.js │ │ │ │ │ ├── sv.js │ │ │ │ │ ├── is.js │ │ │ │ │ ├── fi.js │ │ │ │ │ ├── et.js │ │ │ │ │ ├── hu.js │ │ │ │ │ ├── ms.js │ │ │ │ │ ├── da.js │ │ │ │ │ ├── ka.js │ │ │ │ │ ├── bg.js │ │ │ │ │ ├── hy.js │ │ │ │ │ ├── fa.js │ │ │ │ │ ├── en.js │ │ │ │ │ ├── hi.js │ │ │ │ │ ├── he.js │ │ │ │ │ ├── hr.js │ │ │ │ │ ├── de.js │ │ │ │ │ ├── af.js │ │ │ │ │ ├── eu.js │ │ │ │ │ ├── mk.js │ │ │ │ │ ├── pt-BR.js │ │ │ │ │ ├── pt.js │ │ │ │ │ ├── bn.js │ │ │ │ │ ├── lv.js │ │ │ │ │ ├── ca.js │ │ │ │ │ ├── ps.js │ │ │ │ │ ├── sq.js │ │ │ │ │ ├── it.js │ │ │ │ │ ├── nl.js │ │ │ │ │ ├── ne.js │ │ │ │ │ ├── fr.js │ │ │ │ │ ├── es.js │ │ │ │ │ ├── gl.js │ │ │ │ │ ├── sl.js │ │ │ │ │ ├── ro.js │ │ │ │ │ ├── lt.js │ │ │ │ │ └── pl.js │ │ │ ├── prepopulate_init.js │ │ │ └── change_form.js │ │ └── css │ │ │ ├── fonts.css │ │ │ ├── dashboard.css │ │ │ └── unusable_password_field.css │ ├── django_extensions │ │ ├── img │ │ │ └── indicator.gif │ │ └── css │ │ │ └── jquery.autocomplete.css │ ├── django_tables2 │ │ ├── themes │ │ │ └── paleblue │ │ │ │ └── img │ │ │ │ ├── true.gif │ │ │ │ ├── false.gif │ │ │ │ ├── missing.png │ │ │ │ ├── header-bg.png │ │ │ │ ├── pagination-bg.gif │ │ │ │ ├── arrow-active-down.png │ │ │ │ ├── arrow-active-up.png │ │ │ │ ├── arrow-inactive-up.png │ │ │ │ └── arrow-inactive-down.png │ │ └── bootstrap.css │ ├── css │ │ └── Chart.min.css │ ├── account │ │ └── js │ │ │ ├── account.js │ │ │ └── onload.js │ ├── autocomplete_light │ │ └── i18n │ │ │ ├── zh-TW.js │ │ │ ├── zh-CN.js │ │ │ ├── ja.js │ │ │ ├── az.js │ │ │ ├── ko.js │ │ │ ├── vi.js │ │ │ ├── tk.js │ │ │ ├── id.js │ │ │ ├── tr.js │ │ │ ├── ar.js │ │ │ ├── th.js │ │ │ ├── nb.js │ │ │ ├── km.js │ │ │ ├── sv.js │ │ │ ├── is.js │ │ │ ├── et.js │ │ │ ├── fi.js │ │ │ ├── ms.js │ │ │ ├── da.js │ │ │ ├── ka.js │ │ │ ├── bg.js │ │ │ ├── hi.js │ │ │ ├── hy.js │ │ │ ├── fa.js │ │ │ ├── he.js │ │ │ ├── eo.js │ │ │ ├── hr.js │ │ │ ├── de.js │ │ │ ├── eu.js │ │ │ ├── lv.js │ │ │ ├── pt.js │ │ │ ├── af.js │ │ │ └── bn.js │ ├── django-htmx.js │ └── django_htmx │ │ └── django-htmx.js ├── templates │ ├── robots.txt │ ├── tables │ │ ├── product_table_partial.html │ │ ├── table_generic.html │ │ ├── product_table_htmx.html │ │ └── base.html │ ├── email_users_button.html │ ├── location_fragment.html │ ├── submit_bid.html │ ├── account │ │ ├── password_reset_from_key_done.html │ │ ├── verification_sent.html │ │ ├── password_reset_done.html │ │ ├── password_change.html │ │ ├── email │ │ │ └── email_confirmation_message.txt │ │ ├── password_reset.html │ │ └── password_reset_from_key.html │ ├── user_username.html │ ├── 404.html │ ├── tos_wrapper.html │ ├── ad.html │ ├── auctions │ │ ├── lot_confirm_delete.html │ │ ├── lotimage_confirm_delete.html │ │ ├── auction_confirm_delete.html │ │ ├── paypal_seller_confirm_delete.html │ │ ├── square_seller_confirm_delete.html │ │ ├── pickuplocation_confirm_delete.html │ │ └── quick_set_winner_images.html │ ├── image_form.html │ ├── dashboard_referrers.html │ ├── leave_page_warning.js │ ├── blog_post.html │ ├── markdownfield │ │ └── widget.html │ ├── unsubscribe.html │ ├── 500.html │ ├── recommended_lots.html │ └── socialaccount │ │ └── signup.html ├── __pycache__ │ ├── admin.cpython-36.pyc │ ├── forms.cpython-36.pyc │ ├── models.cpython-36.pyc │ ├── tests.cpython-36.pyc │ ├── urls.cpython-36.pyc │ ├── views.cpython-36.pyc │ ├── __init__.cpython-36.pyc │ ├── filters.cpython-36.pyc │ ├── recommendations.cpython-36.pyc │ └── context_processors.cpython-36.pyc ├── apps.py └── routing.py ├── requirements-test.in ├── .devcontainer ├── post-create.sh └── docker-compose.yml ├── fishauctions ├── __pycache__ │ ├── urls.cpython-36.pyc │ ├── wsgi.cpython-36.pyc │ ├── __init__.cpython-36.pyc │ └── settings.cpython-36.pyc ├── __init__.py ├── urls.py ├── wsgi.py └── asgi_old.py ├── .github ├── scripts │ └── prepare-ci.sh ├── dependabot.yml └── workflows │ ├── copilot-setup-steps.yml │ └── image-builds.yml ├── .pre-commit-config.yaml ├── .vscode └── settings.json ├── db-init ├── grant-permissions-existing-db.sh └── 01-grant-test-permissions.sql ├── manage.py ├── nginx.prod.conf ├── celery_worker_entrypoint.sh ├── celery_beat_entrypoint.sh └── nginx.dev.conf /auctions/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/management/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/migrations/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/templatetags/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/static/js/auction_site.js: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/management/commands/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/static/webpush/new.json: -------------------------------------------------------------------------------- 1 | {"1": 2} 2 | -------------------------------------------------------------------------------- /requirements-test.in: -------------------------------------------------------------------------------- 1 | pre-commit 2 | ruff 3 | selenium 4 | -------------------------------------------------------------------------------- /auctions/static/summernote/SOURCE: -------------------------------------------------------------------------------- 1 | Using Summernote v0.8.20 2 | -------------------------------------------------------------------------------- /auctions/templates/robots.txt: -------------------------------------------------------------------------------- 1 | User-agent: * 2 | Allow: / 3 | -------------------------------------------------------------------------------- /auctions/static/models/vosk/vosk-model-small-en-us-0.15/index.html: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /auctions/static/summernote/font/summernote.hash: -------------------------------------------------------------------------------- 1 | 9fe8a4284ea6542e5b857380d2288fbd 2 | -------------------------------------------------------------------------------- /auctions/static/mess.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/mess.jpg -------------------------------------------------------------------------------- /.devcontainer/post-create.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cd /workspace 4 | pre-commit install-hooks 5 | -------------------------------------------------------------------------------- /auctions/static/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/favicon.ico -------------------------------------------------------------------------------- /auctions/static/youtube.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/youtube.png -------------------------------------------------------------------------------- /auctions/static/markdownfield/md.css: -------------------------------------------------------------------------------- 1 | .cm-s-easymde .cm-formatting-emoji { 2 | color: #183691; 3 | } 4 | -------------------------------------------------------------------------------- /auctions/static/cracked_tank.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/cracked_tank.jpg -------------------------------------------------------------------------------- /auctions/static/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/favicon-16x16.png -------------------------------------------------------------------------------- /auctions/static/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/favicon-32x32.png -------------------------------------------------------------------------------- /auctions/static/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/apple-touch-icon.png -------------------------------------------------------------------------------- /auctions/__pycache__/admin.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/admin.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/forms.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/forms.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/models.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/models.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/tests.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/tests.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/views.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/views.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/android-chrome-192x192.png -------------------------------------------------------------------------------- /auctions/static/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/android-chrome-512x512.png -------------------------------------------------------------------------------- /auctions/static/fonts/bootstrap-icons.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/fonts/bootstrap-icons.woff -------------------------------------------------------------------------------- /auctions/static/summernote/summernote.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/summernote/summernote.png -------------------------------------------------------------------------------- /auctions/templates/tables/product_table_partial.html: -------------------------------------------------------------------------------- 1 | {% load render_table from django_tables2 %} 2 | 3 | {% render_table table %} 4 | -------------------------------------------------------------------------------- /auctions/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/filters.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/filters.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/fonts/bootstrap-icons.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/fonts/bootstrap-icons.woff2 -------------------------------------------------------------------------------- /fishauctions/__pycache__/urls.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/fishauctions/__pycache__/urls.cpython-36.pyc -------------------------------------------------------------------------------- /fishauctions/__pycache__/wsgi.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/fishauctions/__pycache__/wsgi.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/summernote/font/summernote.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/summernote/font/summernote.eot -------------------------------------------------------------------------------- /auctions/static/summernote/font/summernote.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/summernote/font/summernote.ttf -------------------------------------------------------------------------------- /auctions/static/summernote/font/summernote.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/summernote/font/summernote.woff -------------------------------------------------------------------------------- /auctions/static/location_field/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/images/layers.png -------------------------------------------------------------------------------- /auctions/static/summernote/font/summernote.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/summernote/font/summernote.woff2 -------------------------------------------------------------------------------- /fishauctions/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/fishauctions/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /fishauctions/__pycache__/settings.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/fishauctions/__pycache__/settings.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/__pycache__/recommendations.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/recommendations.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/admin/fonts/Roboto-Bold-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/admin/fonts/Roboto-Bold-webfont.woff -------------------------------------------------------------------------------- /auctions/static/django_extensions/img/indicator.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_extensions/img/indicator.gif -------------------------------------------------------------------------------- /auctions/static/location_field/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/images/layers-2x.png -------------------------------------------------------------------------------- /auctions/__pycache__/context_processors.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/__pycache__/context_processors.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/admin/fonts/Roboto-Light-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/admin/fonts/Roboto-Light-webfont.woff -------------------------------------------------------------------------------- /auctions/static/location_field/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/images/marker-icon.png -------------------------------------------------------------------------------- /auctions/management/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/admin/fonts/Roboto-Regular-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/admin/fonts/Roboto-Regular-webfont.woff -------------------------------------------------------------------------------- /auctions/static/location_field/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/images/marker-icon-2x.png -------------------------------------------------------------------------------- /auctions/static/location_field/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/images/marker-shadow.png -------------------------------------------------------------------------------- /auctions/static/location_field/leaflet/images/layers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/leaflet/images/layers.png -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0001_initial.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0001_initial.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/true.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/true.gif -------------------------------------------------------------------------------- /auctions/static/location_field/leaflet/images/layers-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/leaflet/images/layers-2x.png -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/info.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/info.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0011_pageview.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0011_pageview.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0011_userinfo.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0011_userinfo.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0045_lot_slug.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0045_lot_slug.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/false.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/false.gif -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/missing.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/missing.png -------------------------------------------------------------------------------- /auctions/static/location_field/leaflet/images/marker-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/leaflet/images/marker-icon.png -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/__init__.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/__init__.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/invoice.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/invoice.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0002_auction_test.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0002_auction_test.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0004_auction_test.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0004_auction_test.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/header-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/header-bg.png -------------------------------------------------------------------------------- /auctions/static/location_field/leaflet/images/marker-icon-2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/leaflet/images/marker-icon-2x.png -------------------------------------------------------------------------------- /auctions/static/location_field/leaflet/images/marker-shadow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/location_field/leaflet/images/marker-shadow.png -------------------------------------------------------------------------------- /auctions/static/markdownfield/fontawesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/markdownfield/fontawesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/endauctions.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/endauctions.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0009_userpreferences.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0009_userpreferences.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/email_invoice.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/email_invoice.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/print_invoice.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/print_invoice.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0017_bid_was_high_bid.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0017_bid_was_high_bid.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0025_bid_last_bid_time.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0025_bid_last_bid_time.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/pagination-bg.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/pagination-bg.gif -------------------------------------------------------------------------------- /auctions/templates/email_users_button.html: -------------------------------------------------------------------------------- 1 | Email all users ({{ email_count }}) 2 | -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0003_auto_20201004_1543.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0003_auto_20201004_1543.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0005_remove_auction_test.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0005_remove_auction_test.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0006_auto_20201004_1615.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0006_auto_20201004_1615.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0007_auto_20201004_2107.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0007_auto_20201004_2107.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0008_auto_20201004_2328.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0008_auto_20201004_2328.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0009_auto_20201005_0027.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0009_auto_20201005_0027.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0010_auto_20201005_0041.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0010_auto_20201005_0041.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0012_auto_20201005_0142.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0012_auto_20201005_0142.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0013_auto_20201005_1231.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0013_auto_20201005_1231.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0014_auto_20201008_1726.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0014_auto_20201008_1726.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0016_auto_20201009_1255.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0016_auto_20201009_1255.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0018_auto_20201010_1429.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0018_auto_20201010_1429.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0019_auto_20201010_2102.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0019_auto_20201010_2102.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0021_auto_20201025_1232.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0021_auto_20201025_1232.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0022_auto_20201031_2117.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0022_auto_20201031_2117.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0024_auto_20201102_0659.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0024_auto_20201102_0659.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0026_auto_20201102_2030.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0026_auto_20201102_2030.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0027_auto_20201102_2040.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0027_auto_20201102_2040.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0028_auto_20201103_0757.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0028_auto_20201103_0757.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0029_auto_20201113_0929.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0029_auto_20201113_0929.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0030_auto_20201113_0952.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0030_auto_20201113_0952.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0031_auto_20201113_0953.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0031_auto_20201113_0953.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0032_auto_20201115_1213.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0032_auto_20201115_1213.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0033_auto_20201115_1355.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0033_auto_20201115_1355.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0034_auto_20201116_1923.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0034_auto_20201116_1923.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0035_userinterestcategory.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0035_userinterestcategory.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0036_auto_20201120_1025.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0036_auto_20201120_1025.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0038_auto_20201123_1138.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0038_auto_20201123_1138.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0039_auto_20201124_0856.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0039_auto_20201124_0856.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0040_auto_20201124_0857.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0040_auto_20201124_0857.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0041_auto_20201124_0857.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0041_auto_20201124_0857.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0042_auto_20201127_1627.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0042_auto_20201127_1627.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0043_auto_20201128_1201.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0043_auto_20201128_1201.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0044_auto_20201128_1407.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0044_auto_20201128_1407.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/arrow-active-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/arrow-active-down.png -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/arrow-active-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/arrow-active-up.png -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/arrow-inactive-up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/arrow-inactive-up.png -------------------------------------------------------------------------------- /auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /auctions/templates/location_fragment.html: -------------------------------------------------------------------------------- 1 | {% if location.description %} 2 |

{{ location.description|linebreaksbr }}

3 | {% endif %} 4 | {% include 'location_fragment_short.html' %} 5 | -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/sendnotifications.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/sendnotifications.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0008_userdata_data_opt_out.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0008_userdata_data_opt_out.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0015_userdata_email_visible.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0015_userdata_email_visible.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0023_userdata_use_list_view.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0023_userdata_use_list_view.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/django_tables2/themes/paleblue/img/arrow-inactive-down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/django_tables2/themes/paleblue/img/arrow-inactive-down.png -------------------------------------------------------------------------------- /auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/static/markdownfield/fontawesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /auctions/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class AuctionsConfig(AppConfig): 5 | name = "auctions" 6 | 7 | def ready(self): 8 | import auctions.signals # noqa: F401 9 | -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/update_breederboard.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/update_breederboard.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/management/commands/__pycache__/update_user_interest.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/management/commands/__pycache__/update_user_interest.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0042_remove_blogpost_extra_js.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0042_remove_blogpost_extra_js.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/summernote/django_summernote.css: -------------------------------------------------------------------------------- 1 | .summernote-div { 2 | display: inline-block; 3 | position: relative; 4 | } 5 | 6 | form .summernote-div .dropdown-menu { 7 | margin-left: 0; 8 | } 9 | -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0020_userdata_last_auction_used.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0020_userdata_last_auction_used.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0037_auction_lot_promotion_cost.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0037_auction_lot_promotion_cost.cpython-36.pyc -------------------------------------------------------------------------------- /auctions/static/models/vosk/vosk-model-small-en-us-0.15/README: -------------------------------------------------------------------------------- 1 | This is a placeholder for the Vosk model. Please download the real model from: https://alphacephei.com/vosk/models/vosk-model-small-en-us-0.15.zip 2 | -------------------------------------------------------------------------------- /auctions/migrations/__pycache__/0010_remove_userpreferences_data_opt_out.cpython-36.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/iragm/fishauctions/HEAD/auctions/migrations/__pycache__/0010_remove_userpreferences_data_opt_out.cpython-36.pyc -------------------------------------------------------------------------------- /fishauctions/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | This will make sure the app is always imported when 3 | Django starts so that shared_task will use this app. 4 | """ 5 | 6 | from .celery import app as celery_app 7 | 8 | __all__ = ("celery_app",) 9 | -------------------------------------------------------------------------------- /auctions/static/django_tables2/bootstrap.css: -------------------------------------------------------------------------------- 1 | .table-container th.asc:after { 2 | content: '\0000a0\0025b2'; 3 | float: right; 4 | } 5 | .table-container th.desc:after { 6 | content: '\0000a0\0025bc'; 7 | float: right; 8 | } 9 | -------------------------------------------------------------------------------- /.devcontainer/docker-compose.yml: -------------------------------------------------------------------------------- 1 | services: 2 | dev: 3 | build: 4 | context: ../ 5 | dockerfile: Dockerfile 6 | target: dev 7 | volumes: 8 | - ${LOCAL_WORKSPACE_FOLDER:-../}:/workspace 9 | command: sleep infinity 10 | -------------------------------------------------------------------------------- /auctions/routing.py: -------------------------------------------------------------------------------- 1 | # # chat/routing.py 2 | # from django.urls import re_path 3 | 4 | # from . import consumers 5 | 6 | 7 | # websocket_urlpatterns = [ 8 | # re_path(r"ws/lots/(?P\w+)/$", consumers.LotConsumer.as_asgi()), 9 | # ] 10 | -------------------------------------------------------------------------------- /auctions/templates/submit_bid.html: -------------------------------------------------------------------------------- 1 | this one is not used, I think 2 | {% extends "base.html" %} 3 | {% load crispy_forms_tags %} 4 | {% block title %}Bid{% endblock %} 5 | {% block content %} 6 |
{% crispy form form.helper %}
7 | 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /auctions/templates/tables/table_generic.html: -------------------------------------------------------------------------------- 1 | {% load render_table from django_tables2 %} 2 | {% if no_results %} 3 |
4 | {{ no_results | safe }} 5 |
6 | {% else %} 7 | {% render_table table %} 8 | {% endif %} 9 | -------------------------------------------------------------------------------- /auctions/static/admin/fonts/README.txt: -------------------------------------------------------------------------------- 1 | Roboto webfont source: https://www.google.com/fonts/specimen/Roboto 2 | WOFF files extracted using https://github.com/majodev/google-webfonts-helper 3 | Weights used in this project: Light (300), Regular (400), Bold (700) 4 | -------------------------------------------------------------------------------- /auctions/static/admin/img/tooltag-arrowright.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/account/password_reset_from_key_done.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% block head_title %}{% trans "Change Password" %}{% endblock %} 5 | 6 | {% block content %} 7 |

{% trans "Change Password" %}

8 |

{% trans 'Your password is now changed.' %}

9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /.github/scripts/prepare-ci.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | cp .env.example .env 4 | 5 | sed -i "/^DEBUG='False'/d" .env 6 | sed -i "/^NGINX_IMAGE='lscr.io\/linuxserver\/swag'/d" .env 7 | sed -i "/^NGINX_CONF='.\/nginx.prod.conf'/d" .env 8 | sed -i "/^NGINX_CONF_LOCATION='\/config\/nginx\/site-confs\/default.conf'/d" .env 9 | 10 | mkdir logs 11 | chmod -R 777 logs 12 | -------------------------------------------------------------------------------- /auctions/static/admin/img/README.txt: -------------------------------------------------------------------------------- 1 | All icons are taken from Font Awesome (http://fontawesome.io/) project. 2 | The Font Awesome font is licensed under the SIL OFL 1.1: 3 | - https://scripts.sil.org/OFL 4 | 5 | SVG icons source: https://github.com/encharm/Font-Awesome-SVG-PNG 6 | Font-Awesome-SVG-PNG is licensed under the MIT license (see file license 7 | in current folder). 8 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-addlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/static/admin/img/tooltag-add.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fishauctions/urls.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | from django.urls import include, path 3 | 4 | urlpatterns = [ 5 | path("", include("auctions.urls")), 6 | path("summernote/", include("django_summernote.urls")), 7 | path("admin/", admin.site.urls), 8 | path("", include("allauth.urls")), 9 | # path("__debug__/", include(debug_toolbar.urls)), 10 | ] 11 | -------------------------------------------------------------------------------- /auctions/migrations/0210_merge_20251123_1159.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.8 on 2025-11-23 16:59 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0207_alter_userdata_preferred_currency"), 9 | ("auctions", "0209_add_no_more_refunds_field"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /auctions/migrations/0198_merge_20251104_1334.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.7 on 2025-11-04 18:34 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0190_auction_alternative_split_label"), 9 | ("auctions", "0197_alter_invoiceadjustment_adjustment_type"), 10 | ] 11 | 12 | operations = [] 13 | -------------------------------------------------------------------------------- /auctions/static/admin/js/jquery.init.js: -------------------------------------------------------------------------------- 1 | /*global jQuery:false*/ 2 | 'use strict'; 3 | /* Puts the included jQuery into our own namespace using noConflict and passing 4 | * it 'true'. This ensures that the included jQuery doesn't pollute the global 5 | * namespace (i.e. this preserves pre-existing values for both window.$ and 6 | * window.jQuery). 7 | */ 8 | window.django = {jQuery: jQuery.noConflict(true)}; 9 | -------------------------------------------------------------------------------- /auctions/templates/user_username.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% load crispy_forms_tags %} 5 | 6 | {% block title %}Change username{% endblock %} 7 | 8 | {% block extra_js %} 9 | 10 | {% endblock %} 11 | {% block content %} 12 | {% include "preferences_ribbon.html" %} 13 |
14 | {% crispy form form.helper %} 15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-changelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/404.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load static %} 3 | {% block body_class %}template-404{% endblock %} 4 | 5 | {% block content %} 6 |

Page not found

7 |

I know it's burried here somewhere!

8 |
9 | Just gotta find it... 10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-deletelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/tos_wrapper.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %}Terms and conditions{% endblock %} 3 | {% block extra_js %}{% endblock %} 4 | {% block content %} 5 | {# DO NOT UPDATE THIS FILE #} 6 | {# instead, place a file called tos.html in the same folder as the .env file, requirements.txt, update.sh, etc. This file will be automatically loaded #} 7 | {{ tos_content | safe }} 8 | {% endblock %} 9 | -------------------------------------------------------------------------------- /auctions/templates/ad.html: -------------------------------------------------------------------------------- 1 | {% if show_ads %} 2 | 3 | 4 | 5 | 16 | {% endif %} 17 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-yes.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /fishauctions/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for fishauctions project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fishauctions.settings") 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /auctions/static/admin/img/search.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/account/verification_sent.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | 5 | {% block head_title %}{% trans "Verify Your E-mail Address" %}{% endblock %} 6 | 7 | {% block content %} 8 |

{% trans "Verify Your E-mail Address" %}

9 |

{% blocktrans %}We have sent an e-mail to you for verification. Follow the link provided to finalize the signup process. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}

10 | {% endblock %} 11 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for more information: 4 | # https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | # https://containers.dev/guide/dependabot 6 | 7 | version: 2 8 | updates: 9 | - package-ecosystem: "devcontainers" 10 | directory: "/" 11 | schedule: 12 | interval: weekly 13 | -------------------------------------------------------------------------------- /auctions/migrations/0176_lot_admin_validated.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.6 on 2025-03-08 20:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0175_userdata_can_create_club_auctions_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="lot", 14 | name="admin_validated", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-alert.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/auctions/lot_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load crispy_forms_tags %} 3 | {% block title %} Delete lot {% endblock %} 4 | {% load static %} 5 | {% block content %} 6 |
{% csrf_token %} 7 |

Are you sure you want to delete {{ object }}?

8 | 9 | Cancel 10 |
11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /auctions/static/admin/css/fonts.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'Roboto'; 3 | src: url('../fonts/Roboto-Bold-webfont.woff'); 4 | font-weight: 700; 5 | font-style: normal; 6 | } 7 | 8 | @font-face { 9 | font-family: 'Roboto'; 10 | src: url('../fonts/Roboto-Regular-webfont.woff'); 11 | font-weight: 400; 12 | font-style: normal; 13 | } 14 | 15 | @font-face { 16 | font-family: 'Roboto'; 17 | src: url('../fonts/Roboto-Light-webfont.woff'); 18 | font-weight: 300; 19 | font-style: normal; 20 | } 21 | -------------------------------------------------------------------------------- /auctions/static/css/Chart.min.css: -------------------------------------------------------------------------------- 1 | @keyframes chartjs-render-animation{from{opacity:.99}to{opacity:1}}.chartjs-render-monitor{animation:chartjs-render-animation 1ms}.chartjs-size-monitor,.chartjs-size-monitor-expand,.chartjs-size-monitor-shrink{position:absolute;direction:ltr;left:0;top:0;right:0;bottom:0;overflow:hidden;pointer-events:none;visibility:hidden;z-index:-1}.chartjs-size-monitor-expand>div{position:absolute;width:1000000px;height:1000000px;left:0;top:0}.chartjs-size-monitor-shrink>div{position:absolute;width:200%;height:200%;left:0;top:0} 2 | -------------------------------------------------------------------------------- /auctions/migrations/0195_paypalseller_currency.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.7 on 2025-10-29 18:23 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0194_remove_paypalseller_access_token_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="paypalseller", 14 | name="currency", 15 | field=models.CharField(default="USD", max_length=10), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/static/account/js/account.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | const allauth = window.allauth = window.allauth || {} 3 | 4 | function manageEmailForm (o) { 5 | const actions = document.getElementsByName('action_remove') 6 | if (actions.length) { 7 | actions[0].addEventListener('click', function (e) { 8 | if (!window.confirm(o.i18n.confirmDelete)) { 9 | e.preventDefault() 10 | } 11 | }) 12 | } 13 | } 14 | 15 | allauth.account = { 16 | forms: { 17 | manageEmailForm 18 | } 19 | } 20 | })() 21 | -------------------------------------------------------------------------------- /auctions/migrations/0161_alter_auction_reprint_reminder_sent.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2024-10-18 14:41 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0160_remove_auction_allow_bidding_on_lots_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="auction", 14 | name="reprint_reminder_sent", 15 | field=models.BooleanField(default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/templates/image_form.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {{ form.media }} 3 | {% load crispy_forms_tags %} 4 | {% block extra_js %} 5 | 6 | 11 | {% endblock %} 12 | {% block title %}{{ title }}{% endblock %} 13 | {% block content %} 14 |

{{ title }}

15 | {% crispy form form.helper %} 16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /auctions/templates/account/password_reset_done.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% load account %} 5 | 6 | {% block title %}{% trans "Password Reset" %}{% endblock %} 7 | 8 | {% block content %} 9 |

{% trans "Password Reset" %}

10 | 11 | {% if user.is_authenticated %} 12 | {% include "account/snippets/already_logged_in.html" %} 13 | {% endif %} 14 | 15 |

{% blocktrans %}We have sent you an e-mail. Please contact us if you do not receive it within a few minutes.{% endblocktrans %}

16 | {% endblock %} 17 | -------------------------------------------------------------------------------- /auctions/migrations/0151_lot_summernote_description.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-06 23:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0150_auction_invoice_rounding_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="lot", 14 | name="summernote_description", 15 | field=models.CharField(default="", max_length=2000, verbose_name="Description"), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/static/account/js/onload.js: -------------------------------------------------------------------------------- 1 | (function () { 2 | document.addEventListener('DOMContentLoaded', function () { 3 | Array.from(document.querySelectorAll('script[data-allauth-onload]')).forEach(scriptElt => { 4 | const funcRef = scriptElt.dataset.allauthOnload 5 | if (typeof funcRef === 'string' && funcRef.startsWith('allauth.')) { 6 | const funcArg = JSON.parse(scriptElt.textContent) 7 | const func = funcRef.split('.').reduce((acc, part) => acc && acc[part], window) 8 | func(funcArg) 9 | } 10 | }) 11 | }) 12 | })() 13 | -------------------------------------------------------------------------------- /auctions/templates/account/password_change.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% load crispy_forms_tags %} 5 | {% block title %}{% trans "Change Password" %}{% endblock %} 6 | 7 | {% block content %} 8 | {% include "preferences_ribbon.html" %} 9 |
10 |
11 | {% csrf_token %} 12 | {{ form | crispy }} 13 | 14 |
15 | {% endblock %} 16 | -------------------------------------------------------------------------------- /auctions/migrations/0142_club_date_contacted_for_in_person_auctions.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.8 on 2024-08-22 13:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0141_auctiontos_email_address_status"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="club", 14 | name="date_contacted_for_in_person_auctions", 15 | field=models.DateTimeField(blank=True, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/migrations/0181_alter_pageview_ip_address.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.6 on 2025-04-07 15:05 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0180_alter_auction_use_seller_dash_lot_numbering_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="pageview", 14 | name="ip_address", 15 | field=models.CharField(blank=True, db_index=True, max_length=100, null=True), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/migrations/0182_auto_20250409_1115.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.6 on 2025-04-09 15:15 2 | 3 | from django.db import migrations 4 | 5 | 6 | def delete_googlebot_pageviews(apps, schema_editor): 7 | PageView = apps.get_model("auctions", "PageView") 8 | PageView.objects.filter(user_agent__icontains="googlebot").delete() 9 | 10 | 11 | class Migration(migrations.Migration): 12 | dependencies = [ 13 | ("auctions", "0181_alter_pageview_ip_address"), 14 | ] 15 | 16 | operations = [ 17 | migrations.RunPython(delete_googlebot_pageviews), 18 | ] 19 | -------------------------------------------------------------------------------- /auctions/migrations/0167_alter_auction_use_seller_dash_lot_numbering.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2025-02-18 16:31 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0166_auction_use_seller_dash_lot_numbering_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="auction", 14 | name="use_seller_dash_lot_numbering", 15 | field=models.BooleanField(blank=True, default=False), 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-no.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/auctions/lotimage_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load crispy_forms_tags %} 3 | {% block title %} Delete image {% endblock %} 4 | {% load static %} 5 | {% block content %} 6 |
{% csrf_token %} 7 |

Are you sure you want to delete this image from {{ object.lot_number.lot_name }}?

8 | 9 | Cancel 10 |
11 | {% endblock %} 12 | -------------------------------------------------------------------------------- /auctions/static/admin/img/inline-delete.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/static/admin/css/dashboard.css: -------------------------------------------------------------------------------- 1 | /* DASHBOARD */ 2 | .dashboard td, .dashboard th { 3 | word-break: break-word; 4 | } 5 | 6 | .dashboard .module table th { 7 | width: 100%; 8 | } 9 | 10 | .dashboard .module table td { 11 | white-space: nowrap; 12 | } 13 | 14 | .dashboard .module table td a { 15 | display: block; 16 | padding-right: .6em; 17 | } 18 | 19 | /* RECENT ACTIONS MODULE */ 20 | 21 | .module ul.actionlist { 22 | margin-left: 0; 23 | } 24 | 25 | ul.actionlist li { 26 | list-style-type: none; 27 | overflow: hidden; 28 | text-overflow: ellipsis; 29 | } 30 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | # See https://pre-commit.com for more information 2 | # See https://pre-commit.com/hooks.html for more hooks 3 | repos: 4 | - repo: https://github.com/pre-commit/pre-commit-hooks 5 | rev: v6.0.0 6 | hooks: 7 | - id: trailing-whitespace 8 | - id: end-of-file-fixer 9 | - id: check-yaml 10 | - id: check-added-large-files 11 | - repo: https://github.com/astral-sh/ruff-pre-commit 12 | # Ruff version. 13 | rev: v0.14.3 14 | hooks: 15 | # Run the linter. 16 | - id: ruff 17 | args: [ --fix ] 18 | # Run the formatter. 19 | - id: ruff-format 20 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-viewlink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/management/commands/remove_duplicate_views.py: -------------------------------------------------------------------------------- 1 | from django.core.management.base import BaseCommand 2 | 3 | from auctions.models import PageView 4 | 5 | 6 | class Command(BaseCommand): 7 | help = "Duplicate pageviews appear when the user views the same page twice in rapid succession; this will merge the duplicate views" 8 | 9 | def handle(self, *args, **options): 10 | views = PageView.objects.filter(duplicate_check_completed=False) 11 | for view in views: 12 | view.merge_and_delete_duplicate() 13 | view.duplicate_check_completed = True 14 | view.save() 15 | -------------------------------------------------------------------------------- /.github/workflows/copilot-setup-steps.yml: -------------------------------------------------------------------------------- 1 | name: "Copilot Setup Steps" 2 | 3 | on: 4 | workflow_dispatch: {} 5 | push: 6 | paths: 7 | - .github/workflows/copilot-setup-steps.yml 8 | pull_request: 9 | paths: 10 | - .github/workflows/copilot-setup-steps.yml 11 | 12 | jobs: 13 | copilot-setup-steps: 14 | runs-on: ubuntu-latest 15 | permissions: 16 | contents: read 17 | 18 | steps: 19 | - uses: actions/checkout@v4 20 | 21 | - run: ./.github/scripts/prepare-ci.sh 22 | - run: docker compose build 23 | - run: docker compose up --detach --wait --wait-timeout 60 24 | -------------------------------------------------------------------------------- /auctions/migrations/0218_set_next_update_due_default.py: -------------------------------------------------------------------------------- 1 | # Generated migration to set default value for next_update_due field 2 | 3 | from django.db import migrations, models 4 | from django.utils import timezone 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("auctions", "0217_remove_email_invoice_periodic_task"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="auction", 15 | name="next_update_due", 16 | field=models.DateTimeField(blank=True, null=True, default=timezone.now), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "charliermarsh.ruff", 3 | "editor.formatOnPaste": true, 4 | "editor.formatOnSave": true, 5 | "editor.formatOnType": true, 6 | "files.insertFinalNewline": true, 7 | "files.trimFinalNewlines": true, 8 | "files.trimTrailingWhitespace": true, 9 | "python.analysis.typeCheckingMode": "off", 10 | "python.analysis.autoImportCompletions": true, 11 | "python.defaultInterpreterPath": "/usr/local/bin/python", 12 | "ruff.enable": true, 13 | "ruff.codeAction.fixViolation": { 14 | "enable": true 15 | }, 16 | "ruff.lint.enable": true, 17 | } 18 | -------------------------------------------------------------------------------- /auctions/templates/tables/product_table_htmx.html: -------------------------------------------------------------------------------- 1 | {% extends "products/base.html" %} 2 | 3 | {% load render_table from django_tables2 %} 4 | {% load i18n %} 5 | {% load crispy_forms_tags %} 6 | 7 | {% block simple_htmx_table %}active{% endblock %} 8 | 9 | {% block table_main %} 10 |

Product table

11 | 12 |
13 |
14 | {% crispy filter.form %} 15 |
16 |
17 | 18 | {% render_table table %} 19 | {% endblock %} 20 | -------------------------------------------------------------------------------- /auctions/templates/auctions/auction_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load crispy_forms_tags %} 3 | {% block title %} Delete auction {% endblock %} 4 | {% load static %} 5 | {% block content %} 6 |
{% csrf_token %} 7 |

Are you sure you want to delete {{ object }}?

8 | This cannot be undone!
9 | Cancel 10 | 11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /auctions/static/admin/js/popup_response.js: -------------------------------------------------------------------------------- 1 | /*global opener */ 2 | 'use strict'; 3 | { 4 | const initData = JSON.parse(document.getElementById('django-admin-popup-response-constants').dataset.popupResponse); 5 | switch(initData.action) { 6 | case 'change': 7 | opener.dismissChangeRelatedObjectPopup(window, initData.value, initData.obj, initData.new_value); 8 | break; 9 | case 'delete': 10 | opener.dismissDeleteRelatedObjectPopup(window, initData.value); 11 | break; 12 | default: 13 | opener.dismissAddRelatedObjectPopup(window, initData.value, initData.obj); 14 | break; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /auctions/templates/dashboard_referrers.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Referrers {% endblock %} 3 | {% load static %} 4 | {% block content %} 5 |

Referrers from the last {{ days }} days

6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | {% for ref in referrers %} 16 | 17 | 18 | 19 | 20 | 21 | {% endfor %} 22 | 23 |
ClicksReferrerTop page
{{ ref.total_clicks }}{{ ref.referrer }}{{ ref.title }}
24 | {% endblock %} 25 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/templates/leave_page_warning.js: -------------------------------------------------------------------------------- 1 | if (typeof(form_id)=="undefined") { 2 | console.error("leave_page_warning.js should be included after defining var form_id='#some-id'"); 3 | } 4 | var isDirty = false; 5 | $( document ).ready(function() { 6 | $('.form-control').blur(function(){ 7 | isDirty = true; 8 | }) 9 | }); 10 | $(form_id).submit(function(event){ 11 | isDirty = false; 12 | $(this).find(':input[type=submit]').prop('disabled', true); 13 | }); 14 | window.addEventListener('beforeunload', function(e) { 15 | if(isDirty) { 16 | e.preventDefault(); //per the standard 17 | e.returnValue = ''; //required for Chrome 18 | } 19 | }); 20 | -------------------------------------------------------------------------------- /auctions/templates/auctions/paypal_seller_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %}Disconnect PayPal{% endblock %} 3 | {% block content %} 4 |
5 |

Disconnect PayPal

6 |

Disconnecting your PayPal account will prevent you from offering PayPal services and products on your website. Do you wish to continue?

7 |
8 | {% csrf_token %} 9 | Cancel 10 | 11 |
12 |
13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /auctions/templates/auctions/square_seller_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %}Disconnect Square{% endblock %} 3 | {% block content %} 4 |
5 |

Disconnect Square

6 |

Disconnecting your Square account will prevent you from offering Square services and products on your website. Do you wish to continue?

7 |
8 | {% csrf_token %} 9 | Cancel 10 | 11 |
12 |
13 | {% endblock %} 14 | -------------------------------------------------------------------------------- /auctions/templates/blog_post.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} {{ blogpost.title }} {% endblock %} 3 | {% load static %} 4 | {% block extra_js %} 5 | 6 | 12 | {{ blogpost.extra_js | safe }} 13 | {% endblock %} 14 | {% block content %} 15 |

{{ blogpost.title }}

16 | {{ formatted_contents | safe }} 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /auctions/migrations/0199_auction_weekly_promo_emails_sent.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.6 on 2025-11-05 00:59 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0198_merge_20251104_1334"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="weekly_promo_emails_sent", 15 | field=models.PositiveIntegerField( 16 | default=0, 17 | help_text="Number of times this auction was included in weekly promotional emails", 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /.github/workflows/image-builds.yml: -------------------------------------------------------------------------------- 1 | name: Docker images build and test 2 | on: 3 | push: 4 | pull_request: 5 | branches: [master] 6 | 7 | jobs: 8 | image-build: 9 | name: Test Images Build 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | 14 | - run: ./.github/scripts/prepare-ci.sh 15 | - run: docker compose build 16 | - run: docker compose up --detach --wait --wait-timeout 120 17 | 18 | - run: docker compose exec web python3 manage.py test 19 | 20 | - name: Print web container logs 21 | run: docker compose logs web 22 | continue-on-error: true 23 | - run: docker compose down 24 | -------------------------------------------------------------------------------- /auctions/migrations/0197_alter_invoiceadjustment_adjustment_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.7 on 2025-11-02 16:18 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0196_invoicepayment_amount_available_to_refund_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="invoiceadjustment", 14 | name="adjustment_type", 15 | field=models.CharField( 16 | choices=[("ADD", "Charge extra"), ("DISCOUNT", "Discount")], default="ADD", max_length=20 17 | ), 18 | ), 19 | ] 20 | -------------------------------------------------------------------------------- /auctions/static/admin/js/prepopulate_init.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | { 3 | const $ = django.jQuery; 4 | const fields = $('#django-admin-prepopulated-fields-constants').data('prepopulatedFields'); 5 | $.each(fields, function(index, field) { 6 | $( 7 | '.empty-form .form-row .field-' + field.name + 8 | ', .empty-form.form-row .field-' + field.name + 9 | ', .empty-form .form-row.field-' + field.name 10 | ).addClass('prepopulated_field'); 11 | $(field.id).data('dependency_list', field.dependency_list).prepopulate( 12 | field.dependency_ids, field.maxLength, field.allowUnicode 13 | ); 14 | }); 15 | } 16 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-unknown-alt.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-unknown.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/templates/markdownfield/widget.html: -------------------------------------------------------------------------------- 1 | {% include 'django/forms/widgets/textarea.html' %} 2 | {{ options | json_script:options_id }} 3 | 14 | -------------------------------------------------------------------------------- /auctions/templates/auctions/pickuplocation_confirm_delete.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load crispy_forms_tags %} 3 | {% block title %} Delete auction {% endblock %} 4 | {% load static %} 5 | {% block content %} 6 |
{% csrf_token %} 7 |

Are you sure you want to delete {{ object }}?

8 | This cannot be undone!
9 | Keep this location 10 | 11 |
12 | {% endblock %} 13 | -------------------------------------------------------------------------------- /auctions/migrations/0209_add_no_more_refunds_field.py: -------------------------------------------------------------------------------- 1 | # Generated manually for Square refund protection 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0208_enable_square_encryption"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="lot", 14 | name="no_more_refunds_possible", 15 | field=models.BooleanField( 16 | default=False, 17 | help_text="Set to True after a Square refund is issued to prevent multiple refunds that would unbalance the books", 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /auctions/static/admin/js/change_form.js: -------------------------------------------------------------------------------- 1 | 'use strict'; 2 | { 3 | const inputTags = ['BUTTON', 'INPUT', 'SELECT', 'TEXTAREA']; 4 | const modelName = document.getElementById('django-admin-form-add-constants').dataset.modelName; 5 | if (modelName) { 6 | const form = document.getElementById(modelName + '_form'); 7 | for (const element of form.elements) { 8 | // HTMLElement.offsetParent returns null when the element is not 9 | // rendered. 10 | if (inputTags.includes(element.tagName) && !element.disabled && element.offsetParent) { 11 | element.focus(); 12 | break; 13 | } 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/templates/tables/base.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load render_table from django_tables2 %} 4 | {% load i18n %} 5 | 6 | {% block content %} 7 |
8 |
9 |
10 |
11 | Pages 12 | 16 |
17 |
18 |
19 | {% block table_main %}{% endblock %} 20 |
21 |
22 |
23 | {% endblock %} 24 | -------------------------------------------------------------------------------- /auctions/templates/unsubscribe.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %} Unsubscribe {% endblock %} 3 | {% load static %} 4 | {% block content %} 5 | {% block extra_js %}{% endblock %} 6 |

You've unsubscribed

7 | You won't get any additional promotional emails.

Note that you will still receive emails when you've been outbid, or when your watched lots are ending soon.

8 | {% if request.user.is_authenticated %} Preferences {% else %}Your account{% endif %} 9 | {% endblock %} 10 | -------------------------------------------------------------------------------- /auctions/migrations/0138_auction_only_approved_bidders.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.7 on 2024-08-09 01:01 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0137_alter_userlabelprefs_preset"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="only_approved_bidders", 15 | field=models.BooleanField( 16 | default=False, 17 | help_text="Require admin approval before users can bid. This will not change permissions for users that have already joined.", 18 | ), 19 | ), 20 | ] 21 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/templates/500.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% load static %} 3 | {% block body_class %}template-404{% endblock %} 4 | 5 | {% block content %} 6 |
Hm...that broke
7 | 8 | An error occurred while trying to load this page. 9 | 14 | 15 |
16 | rrasco / Reef Central had it worse than this, though 17 | {% endblock %} 18 | -------------------------------------------------------------------------------- /auctions/templates/recommended_lots.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | {% block title %}Recommended lots{% endblock %} 3 | {% load static %} 4 | {% block content %} 5 | Searching for recommended lots... 6 | {% endblock %} 7 | {% block extra_js %} 8 | 9 | 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-clock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/zh-TW.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/zh-TW",[],function(){return{inputTooLong:function(n){return"請刪掉"+(n.input.length-n.maximum)+"個字元"},inputTooShort:function(n){return"請再輸入"+(n.minimum-n.input.length)+"個字元"},loadingMore:function(){return"載入中…"},maximumSelected:function(n){return"你只能選擇最多"+n.maximum+"項"},noResults:function(){return"沒有找到相符的項目"},searching:function(){return"搜尋中…"},removeAllItems:function(){return"刪除所有項目"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"zh-TW"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/templates/account/email/email_confirmation_message.txt: -------------------------------------------------------------------------------- 1 | {% load account %}{% user_display user as user_display %}{% load i18n %}{% autoescape off %}{% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Hello from {{ site_name }}! 2 | 3 | You're receiving this e-mail because user {{ user_display }} has given yours as an e-mail address to connect their account. 4 | 5 | Just to make sure you're not up to anything fishy, we need to confirm that this is your address. Please go here: <{{ activate_url }}> 6 | {% endblocktrans %} 7 | {% blocktrans with site_name=current_site.name site_domain=current_site.domain %}Thank you from {{ site_name }}! 8 | {{ site_domain }}{% endblocktrans %} 9 | {% endautoescape %} 10 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0212_invoicepayment_receipt_number.py: -------------------------------------------------------------------------------- 1 | # Generated manually for Square receipt number field 2 | from django.db import migrations, models 3 | 4 | 5 | class Migration(migrations.Migration): 6 | dependencies = [ 7 | ("auctions", "0211_update_email_templates_reply_to_note"), 8 | ] 9 | 10 | operations = [ 11 | migrations.AddField( 12 | model_name="invoicepayment", 13 | name="receipt_number", 14 | field=models.CharField( 15 | blank=True, 16 | db_index=True, 17 | help_text="Short receipt number (4 chars for Square)", 18 | max_length=10, 19 | null=True, 20 | ), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /db-init/grant-permissions-existing-db.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Script to grant test database permissions on existing development systems 3 | # Run this if you're getting "Access denied for user 'mysqluser'@'%' to database 'test_auctions'" 4 | 5 | echo "Granting test database permissions to mysqluser..." 6 | docker exec -it db mariadb -uroot -p${DATABASE_ROOT_PASSWORD:-secret} -e " 7 | GRANT CREATE, DROP ON *.* TO 'mysqluser'@'%'; 8 | GRANT ALL PRIVILEGES ON \`test_%\`.* TO 'mysqluser'@'%'; 9 | FLUSH PRIVILEGES; 10 | " 11 | 12 | if [ $? -eq 0 ]; then 13 | echo "✓ Permissions granted successfully" 14 | else 15 | echo "✗ Failed to grant permissions. Make sure the db container is running and DATABASE_ROOT_PASSWORD is correct." 16 | exit 1 17 | fi 18 | -------------------------------------------------------------------------------- /auctions/management/commands/purge_bot_users.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from allauth.account.models import EmailAddress 4 | from django.core.management.base import BaseCommand 5 | from django.utils import timezone 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | 10 | class Command(BaseCommand): 11 | help = "Remove users with no verified email" 12 | 13 | def handle(self, *args, **options): 14 | emails = EmailAddress.objects.filter(verified=False, primary=True) 15 | for email in emails: 16 | time_difference = email.user.userdata.last_activity - email.user.date_joined 17 | if time_difference < timezone.timedelta(hours=24): 18 | logger.info("Deleting %s", email.user) 19 | email.user.delete() 20 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0148_userdata_push_notifications_when_lots_sell.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.8 on 2024-09-14 00:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0147_auction_message_users_when_lots_sell_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="userdata", 14 | name="push_notifications_when_lots_sell", 15 | field=models.BooleanField( 16 | blank=True, 17 | default=False, 18 | help_text="For in-person auctions, get a notification when bidding starts on a lot that you've watched", 19 | ), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /auctions/migrations/0155_auction_label_print_fields.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-11 19:16 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0154_remove_auction_notes_remove_auction_notes_rendered_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="label_print_fields", 15 | field=models.CharField( 16 | blank=True, 17 | default="lot_name,min_bid_label,buy_now_label,quantity_label,seller_name_label,donation_label", 18 | max_length=1000, 19 | null=True, 20 | ), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/migrations/0177_alter_pageview_date_start_alter_pageview_session_id.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.6 on 2025-03-19 17:21 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0176_lot_admin_validated"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="pageview", 14 | name="date_start", 15 | field=models.DateTimeField(auto_now_add=True, db_index=True), 16 | ), 17 | migrations.AlterField( 18 | model_name="pageview", 19 | name="session_id", 20 | field=models.CharField(blank=True, db_index=True, max_length=600, null=True), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/zh-CN.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/zh-CN",[],function(){return{errorLoading:function(){return"无法载入结果。"},inputTooLong:function(n){return"请删除"+(n.input.length-n.maximum)+"个字符"},inputTooShort:function(n){return"请再输入至少"+(n.minimum-n.input.length)+"个字符"},loadingMore:function(){return"载入更多结果…"},maximumSelected:function(n){return"最多只能选择"+n.maximum+"个项目"},noResults:function(){return"未找到结果"},searching:function(){return"搜索中…"},removeAllItems:function(){return"删除所有项目"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"zh-CN"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0143_auction_extra_promo_link_auction_extra_promo_text.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.8 on 2024-08-25 18:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0142_club_date_contacted_for_in_person_auctions"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="extra_promo_link", 15 | field=models.URLField(blank=True, null=True), 16 | ), 17 | migrations.AddField( 18 | model_name="auction", 19 | name="extra_promo_text", 20 | field=models.CharField(blank=True, default="", max_length=50, null=True), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/migrations/0190_auction_paypal_email_address.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.5 on 2025-10-24 18:11 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0189_auctiontos_add_to_calendar_alter_club_abbreviation_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="paypal_email_address", 15 | field=models.EmailField( 16 | blank=True, 17 | help_text="To enable PayPal payments, enter the email address associated with your PayPal account", 18 | max_length=255, 19 | null=True, 20 | ), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/admin/css/unusable_password_field.css: -------------------------------------------------------------------------------- 1 | /* Hide warnings fields if usable password is selected */ 2 | form:has(#id_usable_password input[value="true"]:checked) .messagelist { 3 | display: none; 4 | } 5 | 6 | /* Hide password fields if unusable password is selected */ 7 | form:has(#id_usable_password input[value="false"]:checked) .field-password1, 8 | form:has(#id_usable_password input[value="false"]:checked) .field-password2 { 9 | display: none; 10 | } 11 | 12 | /* Select appropriate submit button */ 13 | form:has(#id_usable_password input[value="true"]:checked) input[type="submit"].unset-password { 14 | display: none; 15 | } 16 | 17 | form:has(#id_usable_password input[value="false"]:checked) input[type="submit"].set-password { 18 | display: none; 19 | } 20 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/tk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0203_alter_userdata_distance_unit.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.6 on 2025-11-05 16:09 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0202_set_distance_unit_for_canadian_users"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="userdata", 14 | name="distance_unit", 15 | field=models.CharField( 16 | choices=[("mi", "Miles"), ("km", "Kilometers")], 17 | default="mi", 18 | help_text="Unit for displaying distances", 19 | max_length=10, 20 | verbose_name="Distance unit", 21 | ), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | 4 | import os 5 | import sys 6 | 7 | 8 | def main(): 9 | """Run administrative tasks.""" 10 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fishauctions.settings") 11 | try: 12 | from django.core.management import execute_from_command_line 13 | except ImportError as exc: 14 | msg = ( 15 | "Couldn't import Django. Are you sure it's installed and " 16 | "available on your PYTHONPATH environment variable? Did you " 17 | "forget to activate a virtual environment?" 18 | ) 19 | raise ImportError(msg) from exc 20 | execute_from_command_line(sys.argv) 21 | 22 | 23 | if __name__ == "__main__": 24 | main() 25 | -------------------------------------------------------------------------------- /auctions/migrations/0135_lot_partial_refund_percent.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.3 on 2024-05-08 00:03 2 | 3 | import django.core.validators 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("auctions", "0134_remove_invoice_adjustment_and_more"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="lot", 15 | name="partial_refund_percent", 16 | field=models.IntegerField( 17 | default=0, 18 | validators=[ 19 | django.core.validators.MinValueValidator(0), 20 | django.core.validators.MaxValueValidator(100), 21 | ], 22 | ), 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /auctions/migrations/0166_auction_use_seller_dash_lot_numbering_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2025-02-18 16:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0165_alter_auction_summernote_description_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="use_seller_dash_lot_numbering", 15 | field=models.BooleanField(blank=True, default=True), 16 | ), 17 | migrations.AddField( 18 | model_name="lot", 19 | name="lot_number_int", 20 | field=models.IntegerField(blank=True, null=True, verbose_name="Lot number"), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/ja.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/ja",[],function(){return{errorLoading:function(){return"結果が読み込まれませんでした"},inputTooLong:function(n){return n.input.length-n.maximum+" 文字を削除してください"},inputTooShort:function(n){return"少なくとも "+(n.minimum-n.input.length)+" 文字を入力してください"},loadingMore:function(){return"読み込み中…"},maximumSelected:function(n){return n.maximum+" 件しか選択できません"},noResults:function(){return"対象が見つかりません"},searching:function(){return"検索しています…"},removeAllItems:function(){return"すべてのアイテムを削除"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"ja"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /fishauctions/asgi_old.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for fishauctions project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from channels.auth import AuthMiddlewareStack 13 | from channels.routing import ProtocolTypeRouter, URLRouter 14 | from django.core.asgi import get_asgi_application 15 | 16 | import auctions.routing 17 | 18 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "fishauctions.settings") 19 | 20 | application = ProtocolTypeRouter( 21 | { 22 | "http": get_asgi_application(), 23 | "websocket": AuthMiddlewareStack(URLRouter(auctions.routing.websocket_urlpatterns)), 24 | } 25 | ) 26 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ar.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0165_alter_auction_summernote_description_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2024-11-15 19:57 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0164_auction_force_donation_threshold"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="auction", 14 | name="summernote_description", 15 | field=models.TextField(blank=True, default="", verbose_name="Rules"), 16 | ), 17 | migrations.AlterField( 18 | model_name="lot", 19 | name="summernote_description", 20 | field=models.TextField(blank=True, default="", verbose_name="Description"), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/az.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/az",[],function(){return{inputTooLong:function(n){return n.input.length-n.maximum+" simvol silin"},inputTooShort:function(n){return n.minimum-n.input.length+" simvol daxil edin"},loadingMore:function(){return"Daha çox nəticə yüklənir…"},maximumSelected:function(n){return"Sadəcə "+n.maximum+" element seçə bilərsiniz"},noResults:function(){return"Nəticə tapılmadı"},searching:function(){return"Axtarılır…"},removeAllItems:function(){return"Bütün elementləri sil"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"az"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/admin/img/icon-hidelink.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,e="Vinsamlegast styttið texta um "+t+" staf";return t<=1?e:e+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,e="Vinsamlegast skrifið "+t+" staf";return t>1&&(e+="i"),e+=" í viðbót"},loadingMore:function(){return"Sæki fleiri niðurstöður…"},maximumSelected:function(n){return"Þú getur aðeins valið "+n.maximum+" atriði"},noResults:function(){return"Ekkert fannst"},searching:function(){return"Leita…"},removeAllItems:function(){return"Fjarlægðu öll atriði"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/ko.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/ko",[],function(){return{errorLoading:function(){return"결과를 불러올 수 없습니다."},inputTooLong:function(n){return"너무 깁니다. "+(n.input.length-n.maximum)+" 글자 지워주세요."},inputTooShort:function(n){return"너무 짧습니다. "+(n.minimum-n.input.length)+" 글자 더 입력해주세요."},loadingMore:function(){return"불러오는 중…"},maximumSelected:function(n){return"최대 "+n.maximum+"개까지만 선택 가능합니다."},noResults:function(){return"결과가 없습니다."},searching:function(){return"검색 중…"},removeAllItems:function(){return"모든 항목 삭제"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"ko"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0201_userdata_distance_unit.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.6 on 2025-11-05 11:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0200_auction_google_drive_link_auction_last_sync_time"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="userdata", 14 | name="distance_unit", 15 | field=models.CharField( 16 | blank=True, 17 | choices=[("mi", "Miles"), ("km", "Kilometers")], 18 | default="mi", 19 | help_text="Unit for displaying distances", 20 | max_length=10, 21 | verbose_name="Distance unit", 22 | ), 23 | ), 24 | ] 25 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0171_alter_auction_message_users_when_lots_sell.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2025-03-01 16:49 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0170_auction_use_donation_field_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="auction", 14 | name="message_users_when_lots_sell", 15 | field=models.BooleanField( 16 | blank=True, 17 | default=True, 18 | help_text="Recommended if you are recording winners as lots sell. When you enter a lot number on the set lot winners screen, send a notification to any users watching that lot", 19 | ), 20 | ), 21 | ] 22 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Sisesta "+n+" täht";return 1!=n&&(t+="e"),t+=" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+=" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0204_userdata_is_trusted.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.6 on 2025-11-08 17:45 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | def set_existing_users_trusted(apps, schema_editor): 7 | """Set all existing users to trusted""" 8 | UserData = apps.get_model("auctions", "UserData") 9 | UserData.objects.all().update(is_trusted=True) 10 | 11 | 12 | class Migration(migrations.Migration): 13 | dependencies = [ 14 | ("auctions", "0203_alter_userdata_distance_unit"), 15 | ] 16 | 17 | operations = [ 18 | migrations.AddField( 19 | model_name="userdata", 20 | name="is_trusted", 21 | field=models.BooleanField(default=True), 22 | ), 23 | migrations.RunPython(set_existing_users_trusted, migrations.RunPython.noop), 24 | ] 25 | -------------------------------------------------------------------------------- /auctions/migrations/0163_alter_auction_summernote_description_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2024-11-13 15:58 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0162_alter_auction_buy_now_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="auction", 14 | name="summernote_description", 15 | field=models.CharField(blank=True, default="", max_length=10000, verbose_name="Rules"), 16 | ), 17 | migrations.AlterField( 18 | model_name="lot", 19 | name="summernote_description", 20 | field=models.CharField(blank=True, default="", max_length=10000, verbose_name="Description"), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/hu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/hu",[],function(){return{errorLoading:function(){return"Az eredmények betöltése nem sikerült."},inputTooLong:function(e){return"Túl hosszú. "+(e.input.length-e.maximum)+" karakterrel több, mint kellene."},inputTooShort:function(e){return"Túl rövid. Még "+(e.minimum-e.input.length)+" karakter hiányzik."},loadingMore:function(){return"Töltés…"},maximumSelected:function(e){return"Csak "+e.maximum+" elemet lehet kiválasztani."},noResults:function(){return"Nincs találat."},searching:function(){return"Keresés…"},removeAllItems:function(){return"Távolítson el minden elemet"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/vi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var t;(t=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:t).define("select2/i18n/vi",[],function(){return{inputTooLong:function(n){return"Vui lòng xóa bớt "+(n.input.length-n.maximum)+" ký tự"},inputTooShort:function(n){return"Vui lòng nhập thêm từ "+(n.minimum-n.input.length)+" ký tự trở lên"},loadingMore:function(){return"Đang lấy thêm kết quả…"},maximumSelected:function(n){return"Chỉ có thể chọn được "+n.maximum+" lựa chọn"},noResults:function(){return"Không tìm thấy kết quả"},searching:function(){return"Đang tìm…"},removeAllItems:function(){return"Xóa tất cả các mục"}}}),t.define,t.require},event=new CustomEvent("dal-language-loaded",{lang:"vi"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0190_auction_alternative_split_label.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.5 on 2025-11-03 14:06 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0189_auctiontos_add_to_calendar_alter_club_abbreviation_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="alternative_split_label", 15 | field=models.CharField( 16 | default="club member", 17 | help_text="Label to use instead of 'club member' for users with alternate fees (appears in invoices, user tables, etc.)", 18 | max_length=50, 19 | verbose_name="Alternative split label", 20 | ), 21 | ), 22 | ] 23 | -------------------------------------------------------------------------------- /auctions/static/django-htmx.js: -------------------------------------------------------------------------------- 1 | { 2 | const data = document.currentScript.dataset; 3 | const isDebug = data.debug === "True"; 4 | 5 | if (isDebug) { 6 | document.addEventListener("htmx:beforeOnLoad", function (event) { 7 | const xhr = event.detail.xhr; 8 | if (xhr.status == 500 || xhr.status == 404) { 9 | // Tell htmx to stop processing this response 10 | event.stopPropagation(); 11 | 12 | document.children[0].innerHTML = xhr.response; 13 | 14 | // Run Django’s inline script 15 | // (1, eval) wtf - see https://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript 16 | (1, eval)(document.scripts[0].innerText); 17 | // Need to directly call Django’s onload function since browser won’t 18 | window.onload(); 19 | } 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ka.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /nginx.prod.conf: -------------------------------------------------------------------------------- 1 | # redirect all traffic to https 2 | server { 3 | listen 80 default_server; 4 | listen [::]:80 default_server; 5 | 6 | location / { 7 | return 301 https://$host$request_uri; 8 | } 9 | } 10 | 11 | # main server block 12 | server { 13 | listen 443 ssl http2 default_server; 14 | listen [::]:443 ssl http2 default_server; 15 | 16 | server_name --; 17 | 18 | include /config/nginx/ssl.conf; 19 | 20 | location / { 21 | # block traffic with the wrong url (mostly traffic hitting the server IP) 22 | return 404; 23 | } 24 | 25 | } 26 | 27 | # fishauctions server, https only 28 | server { 29 | listen 443 ssl http2; 30 | listen [::]:443 ssl http2; 31 | 32 | server_name _; 33 | 34 | include /config/nginx/ssl.conf; 35 | 36 | include ./nginx_fishauctions.conf; 37 | } 38 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,u="Моля въведете с "+e+" по-малко символ";return e>1&&(u+="a"),u},inputTooShort:function(n){var e=n.minimum-n.input.length,u="Моля въведете още "+e+" символ";return e>1&&(u+="a"),u},loadingMore:function(){return"Зареждат се още…"},maximumSelected:function(n){var e="Можете да направите до "+n.maximum+" ";return n.maximum>1?e+="избора":e+="избор",e},noResults:function(){return"Няма намерени съвпадения"},searching:function(){return"Търсене…"},removeAllItems:function(){return"Премахнете всички елементи"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/tk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/tk",[],function(){return{errorLoading:function(){return"Netije ýüklenmedi."},inputTooLong:function(e){return e.input.length-e.maximum+" harp bozuň."},inputTooShort:function(e){return"Ýene-de iň az "+(e.minimum-e.input.length)+" harp ýazyň."},loadingMore:function(){return"Köpräk netije görkezilýär…"},maximumSelected:function(e){return"Diňe "+e.maximum+" sanysyny saýlaň."},noResults:function(){return"Netije tapylmady."},searching:function(){return"Gözlenýär…"},removeAllItems:function(){return"Remove all items"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"tk"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/django_htmx/django-htmx.js: -------------------------------------------------------------------------------- 1 | { 2 | const data = document.currentScript.dataset; 3 | const isDebug = data.debug === "True"; 4 | 5 | if (isDebug) { 6 | document.addEventListener("htmx:beforeOnLoad", function (event) { 7 | const xhr = event.detail.xhr; 8 | if (xhr.status == 500 || xhr.status == 404) { 9 | // Tell htmx to stop processing this response 10 | event.stopPropagation(); 11 | 12 | document.children[0].innerHTML = xhr.response; 13 | 14 | // Run Django’s inline script 15 | // (1, eval) wtf - see https://stackoverflow.com/questions/9107240/1-evalthis-vs-evalthis-in-javascript 16 | (1, eval)(document.scripts[0].innerText); 17 | // Need to directly call Django’s onload function since browser won’t 18 | window.onload(); 19 | } 20 | }); 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /auctions/migrations/0206_userdata_preferred_currency.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.6 on 2025-11-20 13:30 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0205_auction_cached_stats_auction_last_stats_update_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="userdata", 14 | name="preferred_currency", 15 | field=models.CharField( 16 | choices=[("USD", "US Dollar ($)"), ("CAD", "Canadian Dollar ($)"), ("GBP", "British Pound (£)")], 17 | default="USD", 18 | help_text="Currency to display for prices", 19 | max_length=10, 20 | verbose_name="Preferred currency", 21 | ), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/hy.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hy",[],function(){return{errorLoading:function(){return"Արդյունքները հնարավոր չէ բեռնել։"},inputTooLong:function(n){return"Խնդրում ենք հեռացնել "+(n.input.length-n.maximum)+" նշան"},inputTooShort:function(n){return"Խնդրում ենք մուտքագրել "+(n.minimum-n.input.length)+" կամ ավել նշաններ"},loadingMore:function(){return"Բեռնվում են նոր արդյունքներ․․․"},maximumSelected:function(n){return"Դուք կարող եք ընտրել առավելագույնը "+n.maximum+" կետ"},noResults:function(){return"Արդյունքներ չեն գտնվել"},searching:function(){return"Որոնում․․․"},removeAllItems:function(){return"Հեռացնել բոլոր տարրերը"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0141_auctiontos_email_address_status.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.8 on 2024-08-18 18:54 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0140_auction_advanced_lot_adding_alter_auction_buy_now_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auctiontos", 14 | name="email_address_status", 15 | field=models.CharField( 16 | blank=True, 17 | choices=[ 18 | ("BAD", "Invalid"), 19 | ("UNKNOWN", "Unknown"), 20 | ("VALID", "Verified"), 21 | ], 22 | default="UNKNOWN", 23 | max_length=20, 24 | ), 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /auctions/migrations/0152_copy_description.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-07 12:56 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | def copy_description(apps, schema_editor): 7 | Lot = apps.get_model("auctions", "Lot") 8 | for lot in Lot.objects.all(): 9 | lot.summernote_description = lot.description_rendered[:10000] or "" 10 | lot.save() 11 | 12 | 13 | class Migration(migrations.Migration): 14 | dependencies = [ 15 | ("auctions", "0151_lot_summernote_description"), 16 | ] 17 | 18 | operations = [ 19 | migrations.AlterField( 20 | model_name="lot", 21 | name="summernote_description", 22 | field=models.CharField(blank=True, default="", max_length=10000, verbose_name="Description"), 23 | ), 24 | migrations.RunPython(copy_description), 25 | ] 26 | -------------------------------------------------------------------------------- /auctions/migrations/0154_remove_auction_notes_remove_auction_notes_rendered_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-07 16:47 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0153_auction_summernote_description"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveField( 13 | model_name="auction", 14 | name="notes", 15 | ), 16 | migrations.RemoveField( 17 | model_name="auction", 18 | name="notes_rendered", 19 | ), 20 | migrations.RemoveField( 21 | model_name="lot", 22 | name="description", 23 | ), 24 | migrations.RemoveField( 25 | model_name="lot", 26 | name="description_rendered", 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0179_auctiontos_possible_duplicate.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.6 on 2025-03-21 15:40 2 | 3 | import django.db.models.deletion 4 | from django.db import migrations, models 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("auctions", "0178_create_locations"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name="auctiontos", 15 | name="possible_duplicate", 16 | field=models.ForeignKey( 17 | blank=True, 18 | help_text="There's a chance this user is a duplicate if this is set", 19 | null=True, 20 | on_delete=django.db.models.deletion.SET_NULL, 21 | related_name="duplicate", 22 | to="auctions.auctiontos", 23 | ), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/en.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/en",[],function(){return{errorLoading:function(){return"The results could not be loaded."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Please delete "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Please enter "+(e.minimum-e.input.length)+" or more characters"},loadingMore:function(){return"Loading more results…"},maximumSelected:function(e){var n="You can only select "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No results found"},searching:function(){return"Searching…"},removeAllItems:function(){return"Remove all items"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/id.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/id",[],function(){return{errorLoading:function(){return"Data tidak boleh diambil."},inputTooLong:function(n){return"Hapuskan "+(n.input.length-n.maximum)+" huruf"},inputTooShort:function(n){return"Masukkan "+(n.minimum-n.input.length)+" huruf lagi"},loadingMore:function(){return"Mengambil data…"},maximumSelected:function(n){return"Anda hanya dapat memilih "+n.maximum+" pilihan"},noResults:function(){return"Tidak ada data yang sesuai"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Hapus semua item"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"id"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/tr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/tr",[],function(){return{errorLoading:function(){return"Sonuç yüklenemedi"},inputTooLong:function(n){return n.input.length-n.maximum+" karakter daha girmelisiniz"},inputTooShort:function(n){return"En az "+(n.minimum-n.input.length)+" karakter daha girmelisiniz"},loadingMore:function(){return"Daha fazla…"},maximumSelected:function(n){return"Sadece "+n.maximum+" seçim yapabilirsiniz"},noResults:function(){return"Sonuç bulunamadı"},searching:function(){return"Aranıyor…"},removeAllItems:function(){return"Tüm öğeleri kaldır"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"tr"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /celery_worker_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Celery worker entrypoint script 3 | 4 | echo "Waiting for database..." 5 | python << END 6 | import sys 7 | import time 8 | import MySQLdb 9 | start = time.time() 10 | while True: 11 | try: 12 | _db = MySQLdb._mysql.connect( 13 | host="${DATABASE_HOST:-db}", 14 | user="${DATABASE_USER-mysqluser}", 15 | password="${DATABASE_PASSWORD-unsecure}", 16 | database="${DATABASE_NAME-auctions}", 17 | port=int("${DATABASE_PORT-3306}") 18 | ) 19 | break 20 | except MySQLdb._exceptions.OperationalError as error: 21 | sys.stderr.write("Waiting for MySQL to become available...\n") 22 | time.sleep(1) 23 | END 24 | 25 | echo "Starting Celery worker..." 26 | cd /home/app/web 27 | exec celery -A fishauctions worker --loglevel=info --concurrency=2 28 | -------------------------------------------------------------------------------- /auctions/migrations/0153_auction_summernote_description.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-07 15:27 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | def copy_notes(apps, schema_editor): 7 | Auction = apps.get_model("auctions", "Auction") 8 | for auction in Auction.objects.all(): 9 | auction.summernote_description = auction.notes_rendered[:10000] or "" 10 | auction.save() 11 | 12 | 13 | class Migration(migrations.Migration): 14 | dependencies = [ 15 | ("auctions", "0152_copy_description"), 16 | ] 17 | 18 | operations = [ 19 | migrations.AddField( 20 | model_name="auction", 21 | name="summernote_description", 22 | field=models.CharField(blank=True, default="", max_length=10000, verbose_name="Rules"), 23 | ), 24 | migrations.RunPython(copy_notes), 25 | ] 26 | -------------------------------------------------------------------------------- /auctions/migrations/0208_enable_square_encryption.py: -------------------------------------------------------------------------------- 1 | # Generated migration for enabling encryption on SquareSeller OAuth tokens 2 | 3 | import encrypted_model_fields.fields 4 | from django.db import migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | dependencies = [ 9 | ("auctions", "0207_add_square_oauth_fields"), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name="squareseller", 15 | name="access_token", 16 | field=encrypted_model_fields.fields.EncryptedCharField(blank=True, max_length=500, null=True), 17 | ), 18 | migrations.AlterField( 19 | model_name="squareseller", 20 | name="refresh_token", 21 | field=encrypted_model_fields.fields.EncryptedCharField(blank=True, max_length=500, null=True), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/hi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hi",[],function(){return{errorLoading:function(){return"परिणामों को लोड नहीं किया जा सका।"},inputTooLong:function(n){var e=n.input.length-n.maximum,r=e+" अक्षर को हटा दें";return e>1&&(r=e+" अक्षरों को हटा दें "),r},inputTooShort:function(n){return"कृपया "+(n.minimum-n.input.length)+" या अधिक अक्षर दर्ज करें"},loadingMore:function(){return"अधिक परिणाम लोड हो रहे है..."},maximumSelected:function(n){return"आप केवल "+n.maximum+" आइटम का चयन कर सकते हैं"},noResults:function(){return"कोई परिणाम नहीं मिला"},searching:function(){return"खोज रहा है..."},removeAllItems:function(){return"सभी वस्तुओं को हटा दें"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/ar.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/ar",[],function(){return{errorLoading:function(){return"لا يمكن تحميل النتائج"},inputTooLong:function(n){return"الرجاء حذف "+(n.input.length-n.maximum)+" عناصر"},inputTooShort:function(n){return"الرجاء إضافة "+(n.minimum-n.input.length)+" عناصر"},loadingMore:function(){return"جاري تحميل نتائج إضافية..."},maximumSelected:function(n){return"تستطيع إختيار "+n.maximum+" بنود فقط"},noResults:function(){return"لم يتم العثور على أي نتائج"},searching:function(){return"جاري البحث…"},removeAllItems:function(){return"قم بإزالة كل العناصر"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"ar"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/th.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/th",[],function(){return{errorLoading:function(){return"ไม่สามารถค้นข้อมูลได้"},inputTooLong:function(n){return"โปรดลบออก "+(n.input.length-n.maximum)+" ตัวอักษร"},inputTooShort:function(n){return"โปรดพิมพ์เพิ่มอีก "+(n.minimum-n.input.length)+" ตัวอักษร"},loadingMore:function(){return"กำลังค้นข้อมูลเพิ่ม…"},maximumSelected:function(n){return"คุณสามารถเลือกได้ไม่เกิน "+n.maximum+" รายการ"},noResults:function(){return"ไม่พบข้อมูล"},searching:function(){return"กำลังค้นข้อมูล…"},removeAllItems:function(){return"ลบรายการทั้งหมด"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"th"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="נא למחוק ";return r+=1===e?"תו אחד":e+" תווים"},inputTooShort:function(n){var e=n.minimum-n.input.length,r="נא להכניס ";return r+=1===e?"תו אחד":e+" תווים",r+=" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/hr",[],function(){function n(n){var e=" "+n+" znak";return n%10<5&&n%10>0&&(n%100<5||n%100>19)?n%10>1&&(e+="a"):e+="ova",e}return{errorLoading:function(){return"Preuzimanje nije uspjelo."},inputTooLong:function(e){return"Unesite "+n(e.input.length-e.maximum)},inputTooShort:function(e){return"Unesite još "+n(e.minimum-e.input.length)},loadingMore:function(){return"Učitavanje rezultata…"},maximumSelected:function(n){return"Maksimalan broj odabranih stavki je "+n.maximum},noResults:function(){return"Nema rezultata"},searching:function(){return"Pretraga…"},removeAllItems:function(){return"Ukloni sve stavke"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/nb.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/nb",[],function(){return{errorLoading:function(){return"Kunne ikke hente resultater."},inputTooLong:function(e){return"Vennligst fjern "+(e.input.length-e.maximum)+" tegn"},inputTooShort:function(e){return"Vennligst skriv inn "+(e.minimum-e.input.length)+" tegn til"},loadingMore:function(){return"Laster flere resultater…"},maximumSelected:function(e){return"Du kan velge maks "+e.maximum+" elementer"},noResults:function(){return"Ingen treff"},searching:function(){return"Søker…"},removeAllItems:function(){return"Fjern alle elementer"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"nb"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/km.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/km",[],function(){return{errorLoading:function(){return"មិនអាចទាញយកទិន្នន័យ"},inputTooLong:function(n){return"សូមលុបចេញ "+(n.input.length-n.maximum)+" អក្សរ"},inputTooShort:function(n){return"សូមបញ្ចូល"+(n.minimum-n.input.length)+" អក្សរ រឺ ច្រើនជាងនេះ"},loadingMore:function(){return"កំពុងទាញយកទិន្នន័យបន្ថែម..."},maximumSelected:function(n){return"អ្នកអាចជ្រើសរើសបានតែ "+n.maximum+" ជម្រើសប៉ុណ្ណោះ"},noResults:function(){return"មិនមានលទ្ធផល"},searching:function(){return"កំពុងស្វែងរក..."},removeAllItems:function(){return"លុបធាតុទាំងអស់"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"km"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/sv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/sv",[],function(){return{errorLoading:function(){return"Resultat kunde inte laddas."},inputTooLong:function(n){return"Vänligen sudda ut "+(n.input.length-n.maximum)+" tecken"},inputTooShort:function(n){return"Vänligen skriv in "+(n.minimum-n.input.length)+" eller fler tecken"},loadingMore:function(){return"Laddar fler resultat…"},maximumSelected:function(n){return"Du kan max välja "+n.maximum+" element"},noResults:function(){return"Inga träffar"},searching:function(){return"Söker…"},removeAllItems:function(){return"Ta bort alla objekt"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"sv"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+=" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/is.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var t;(t=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:t).define("select2/i18n/is",[],function(){return{inputTooLong:function(n){var t=n.input.length-n.maximum,n="Vinsamlegast styttið texta um "+t+" staf";return t<=1?n:n+"i"},inputTooShort:function(n){var t=n.minimum-n.input.length,n="Vinsamlegast skrifið "+t+" staf";return 1 10 | var lotSearch; 11 | $(window).on("load", function() { 12 | $('#id_lot').select(); 13 | var input = document.getElementById('id_lot'); 14 | input.addEventListener('keyup', function () { 15 | var value = this.value; 16 | clearTimeout(lotSearch); 17 | lotSearch = setTimeout(function () { 18 | htmx.ajax('get','/api/{{ auction.slug }}/lots/' + encodeURIComponent(value), {target: '#result'}); 19 | }, 300); 20 | }); 21 | }); 22 | 23 | {% endblock %} 24 | {% block content %} 25 | {# {% include 'auction_ribbon.html' %} #} 26 | {% crispy form form.helper %} 27 |
28 | {% endblock %} 29 | -------------------------------------------------------------------------------- /auctions/migrations/0169_auction_custom_field_1.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1.1 on 2025-03-01 16:28 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0168_auction_allow_bulk_adding_lots_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="custom_field_1", 15 | field=models.CharField( 16 | choices=[("disable", "Off"), ("allow", "Optional"), ("required", "Required for all lots")], 17 | default="disable", 18 | help_text="Additional information on the label such as notes, scientific name, collection location...", 19 | max_length=20, 20 | verbose_name="Custom field for lots", 21 | ), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/af.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Verwyders asseblief "+n+" character";return 1!=n&&(r+="s"),r},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var t=e.input.length-e.maximum,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gutxiago"},inputTooShort:function(e){var t=e.minimum-e.input.length,n="Idatzi ";return n+=1==t?"karaktere bat":t+" karaktere",n+=" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/et.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/et",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,e="Sisesta "+n+" täht";return 1!=n&&(e+="e"),e+" vähem"},inputTooShort:function(e){var n=e.minimum-e.input.length,e="Sisesta "+n+" täht";return 1!=n&&(e+="e"),e+" rohkem"},loadingMore:function(){return"Laen tulemusi…"},maximumSelected:function(e){var n="Saad vaid "+e.maximum+" tulemus";return 1==e.maximum?n+="e":n+="t",n+" valida"},noResults:function(){return"Tulemused puuduvad"},searching:function(){return"Otsin…"},removeAllItems:function(){return"Eemalda kõik esemed"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"et"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/fi.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/fi",[],function(){return{errorLoading:function(){return"Tuloksia ei saatu ladattua."},inputTooLong:function(n){return"Ole hyvä ja anna "+(n.input.length-n.maximum)+" merkkiä vähemmän"},inputTooShort:function(n){return"Ole hyvä ja anna "+(n.minimum-n.input.length)+" merkkiä lisää"},loadingMore:function(){return"Ladataan lisää tuloksia…"},maximumSelected:function(n){return"Voit valita ainoastaan "+n.maximum+" kpl"},noResults:function(){return"Ei tuloksia"},searching:function(){return"Haetaan…"},removeAllItems:function(){return"Poista kaikki kohteet"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"fi"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0194_remove_paypalseller_access_token_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.7 on 2025-10-29 00:53 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0193_auction_dismissed_paypal_banner_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.RemoveField( 13 | model_name="paypalseller", 14 | name="paypal_merchant_id_in_paypal", 15 | ), 16 | migrations.RemoveField( 17 | model_name="paypalseller", 18 | name="paypal_user_id", 19 | ), 20 | migrations.RemoveField( 21 | model_name="paypalseller", 22 | name="scope", 23 | ), 24 | migrations.RemoveField( 25 | model_name="paypalseller", 26 | name="token_expires_at", 27 | ), 28 | ] 29 | -------------------------------------------------------------------------------- /auctions/static/webpush/webpush_serviceworker.js: -------------------------------------------------------------------------------- 1 | 2 | // Register event listener for the 'push' event. 3 | self.addEventListener('push', function(event) { 4 | // Retrieve the textual payload from event.data (a PushMessageData object). 5 | // Other formats are supported (ArrayBuffer, Blob, JSON), check out the documentation 6 | // on https://developer.mozilla.org/en-US/docs/Web/API/PushMessageData. 7 | var payload = event.data ? event.data.text() : {"head": "No Content", "Body": "No Content"}, 8 | data = JSON.parse(payload), 9 | head = data.head, 10 | body = data.body; 11 | 12 | // Keep the service worker alive until the notification is created. 13 | event.waitUntil( 14 | // Show a notification with title 'ServiceWorker Cookbook' and use the payload 15 | // as the body. 16 | self.registration.showNotification(head, { 17 | body: body 18 | }) 19 | ); 20 | }); 21 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/mk.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/mk",[],function(){return{inputTooLong:function(n){var e=(n.input.length,n.maximum,"Ве молиме внесете "+n.maximum+" помалку карактер");return 1!==n.maximum&&(e+="и"),e},inputTooShort:function(n){var e=(n.minimum,n.input.length,"Ве молиме внесете уште "+n.maximum+" карактер");return 1!==n.maximum&&(e+="и"),e},loadingMore:function(){return"Вчитување резултати…"},maximumSelected:function(n){var e="Можете да изберете само "+n.maximum+" ставк";return 1===n.maximum?e+="а":e+="и",e},noResults:function(){return"Нема пронајдено совпаѓања"},searching:function(){return"Пребарување…"},removeAllItems:function(){return"Отстрани ги сите предмети"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/pt-BR.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt-BR",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Apague "+n+" caracter";return 1!=n&&(r+="es"),r},inputTooShort:function(e){return"Digite "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"Carregando mais resultados…"},maximumSelected:function(e){var n="Você só pode selecionar "+e.maximum+" ite";return 1==e.maximum?n+="m":n+="ns",n},noResults:function(){return"Nenhum resultado encontrado"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){var r=e.input.length-e.maximum,n="Por favor apague "+r+" ";return n+=1!=r?"caracteres":"caractere"},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){var r="Apenas pode seleccionar "+e.maximum+" ";return r+=1!=e.maximum?"itens":"item"},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/management/commands/change_paypal.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from django.core.management.base import BaseCommand 4 | 5 | from auctions.models import UserData 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | 10 | class Command(BaseCommand): 11 | help = "Enable or disable linking paypal accounts all users" 12 | 13 | def add_arguments(self, parser): 14 | parser.add_argument( 15 | "state", 16 | choices=["on", "off"], 17 | help="Set 'on' or 'off'.", 18 | ) 19 | 20 | def handle(self, *args, **options): 21 | state = options["state"] == "on" 22 | 23 | count = UserData.objects.update(paypal_enabled=state) 24 | self.stdout.write( 25 | self.style.SUCCESS( 26 | f"{'ENABLED' if state else 'DISABLED'} for {count} users. Make sure to update your .env for new users." 27 | ) 28 | ) 29 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/bn.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){var e=n.input.length-n.maximum,u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।";return 1!=e&&(u="অনুগ্রহ করে "+e+" টি অক্ষর মুছে দিন।"),u},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return 1!=n.maximum&&(e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।"),e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/lv",[],function(){function e(e,n,u,i){return 11===e?n:e%10==1?u:i}return{inputTooLong:function(n){var u=n.input.length-n.maximum,i="Lūdzu ievadiet par "+u;return(i+=" simbol"+e(u,"iem","u","iem"))+" mazāk"},inputTooShort:function(n){var u=n.minimum-n.input.length,i="Lūdzu ievadiet vēl "+u;return i+=" simbol"+e(u,"us","u","us")},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(n){var u="Jūs varat izvēlēties ne vairāk kā "+n.maximum;return u+=" element"+e(n.maximum,"us","u","us")},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/ms.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/ms",[],function(){return{errorLoading:function(){return"Keputusan tidak berjaya dimuatkan."},inputTooLong:function(n){return"Sila hapuskan "+(n.input.length-n.maximum)+" aksara"},inputTooShort:function(n){return"Sila masukkan "+(n.minimum-n.input.length)+" atau lebih aksara"},loadingMore:function(){return"Sedang memuatkan keputusan…"},maximumSelected:function(n){return"Anda hanya boleh memilih "+n.maximum+" pilihan"},noResults:function(){return"Tiada padanan yang ditemui"},searching:function(){return"Mencari…"},removeAllItems:function(){return"Keluarkan semua item"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"ms"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /celery_beat_entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Celery beat entrypoint script 3 | 4 | echo "Waiting for database..." 5 | python << END 6 | import sys 7 | import time 8 | import MySQLdb 9 | start = time.time() 10 | while True: 11 | try: 12 | _db = MySQLdb._mysql.connect( 13 | host="${DATABASE_HOST:-db}", 14 | user="${DATABASE_USER-mysqluser}", 15 | password="${DATABASE_PASSWORD-unsecure}", 16 | database="${DATABASE_NAME-auctions}", 17 | port=int("${DATABASE_PORT-3306}") 18 | ) 19 | break 20 | except MySQLdb._exceptions.OperationalError as error: 21 | sys.stderr.write("Waiting for MySQL to become available...\n") 22 | time.sleep(1) 23 | END 24 | 25 | echo "Starting Celery beat scheduler..." 26 | cd /home/app/web 27 | exec celery -A fishauctions beat --loglevel=info --scheduler django_celery_beat.schedulers:DatabaseScheduler 28 | -------------------------------------------------------------------------------- /auctions/management/commands/change_square.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from django.core.management.base import BaseCommand 4 | 5 | from auctions.models import UserData 6 | 7 | logger = logging.getLogger(__name__) 8 | 9 | 10 | class Command(BaseCommand): 11 | help = "Enable or disable linking square accounts for all users" 12 | 13 | def add_arguments(self, parser): 14 | parser.add_argument( 15 | "state", 16 | choices=["on", "off"], 17 | help="Set 'on' or 'off'.", 18 | ) 19 | 20 | def handle(self, *args, **options): 21 | state = options["state"] == "on" 22 | 23 | count = UserData.objects.update(square_enabled=state) 24 | self.stdout.write( 25 | self.style.SUCCESS( 26 | f"{'ENABLED' if state else 'DISABLED'} for {count} users. Make sure to update your .env for new users." 27 | ) 28 | ) 29 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ca.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ca",[],function(){return{errorLoading:function(){return"La càrrega ha fallat"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Si us plau, elimina "+n+" car";return r+=1==n?"àcter":"àcters"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Si us plau, introdueix "+n+" car";return r+=1==n?"àcter":"àcters"},loadingMore:function(){return"Carregant més resultats…"},maximumSelected:function(e){var n="Només es pot seleccionar "+e.maximum+" element";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No s'han trobat resultats"},searching:function(){return"Cercant…"},removeAllItems:function(){return"Treu tots els elements"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ps.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/ps",[],function(){return{errorLoading:function(){return"پايلي نه سي ترلاسه کېدای"},inputTooLong:function(n){var e=n.input.length-n.maximum,r="د مهربانۍ لمخي "+e+" توری ړنګ کړئ";return 1!=e&&(r=r.replace("توری","توري")),r},inputTooShort:function(n){return"لږ تر لږه "+(n.minimum-n.input.length)+" يا ډېر توري وليکئ"},loadingMore:function(){return"نوري پايلي ترلاسه کيږي..."},maximumSelected:function(n){var e="تاسو يوازي "+n.maximum+" قلم په نښه کولای سی";return 1!=n.maximum&&(e=e.replace("قلم","قلمونه")),e},noResults:function(){return"پايلي و نه موندل سوې"},searching:function(){return"لټول کيږي..."},removeAllItems:function(){return"ټول توکي لرې کړئ"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/sq.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sq",[],function(){return{errorLoading:function(){return"Rezultatet nuk mund të ngarkoheshin."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Të lutem fshi "+n+" karakter";return 1!=n&&(t+="e"),t},inputTooShort:function(e){return"Të lutem shkruaj "+(e.minimum-e.input.length)+" ose më shumë karaktere"},loadingMore:function(){return"Duke ngarkuar më shumë rezultate…"},maximumSelected:function(e){var n="Mund të zgjedhësh vetëm "+e.maximum+" element";return 1!=e.maximum&&(n+="e"),n},noResults:function(){return"Nuk u gjet asnjë rezultat"},searching:function(){return"Duke kërkuar…"},removeAllItems:function(){return"Hiq të gjitha sendet"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/it.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/it",[],function(){return{errorLoading:function(){return"I risultati non possono essere caricati."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Per favore cancella "+n+" caratter";return t+=1!==n?"i":"e"},inputTooShort:function(e){return"Per favore inserisci "+(e.minimum-e.input.length)+" o più caratteri"},loadingMore:function(){return"Caricando più risultati…"},maximumSelected:function(e){var n="Puoi selezionare solo "+e.maximum+" element";return 1!==e.maximum?n+="i":n+="o",n},noResults:function(){return"Nessun risultato trovato"},searching:function(){return"Sto cercando…"},removeAllItems:function(){return"Rimuovi tutti gli oggetti"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/da.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/da",[],function(){return{errorLoading:function(){return"Resultaterne kunne ikke indlæses."},inputTooLong:function(e){return"Angiv venligst "+(e.input.length-e.maximum)+" tegn mindre"},inputTooShort:function(e){return"Angiv venligst "+(e.minimum-e.input.length)+" tegn mere"},loadingMore:function(){return"Indlæser flere resultater…"},maximumSelected:function(e){var n="Du kan kun vælge "+e.maximum+" emne";return 1!=e.maximum&&(n+="r"),n},noResults:function(){return"Ingen resultater fundet"},searching:function(){return"Søger…"},removeAllItems:function(){return"Fjern alle elementer"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"da"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/ka.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/ka",[],function(){return{errorLoading:function(){return"მონაცემების ჩატვირთვა შეუძლებელია."},inputTooLong:function(n){return"გთხოვთ აკრიფეთ "+(n.input.length-n.maximum)+" სიმბოლოთი ნაკლები"},inputTooShort:function(n){return"გთხოვთ აკრიფეთ "+(n.minimum-n.input.length)+" სიმბოლო ან მეტი"},loadingMore:function(){return"მონაცემების ჩატვირთვა…"},maximumSelected:function(n){return"თქვენ შეგიძლიათ აირჩიოთ არაუმეტეს "+n.maximum+" ელემენტი"},noResults:function(){return"რეზულტატი არ მოიძებნა"},searching:function(){return"ძიება…"},removeAllItems:function(){return"ამოიღე ყველა ელემენტი"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"ka"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0137_alter_userlabelprefs_preset.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.0.7 on 2024-08-02 19:52 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0136_alter_lot_banned_alter_lot_partial_refund_percent"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AlterField( 13 | model_name="userlabelprefs", 14 | name="preset", 15 | field=models.CharField( 16 | choices=[ 17 | ("sm", "Small (Avery 5160)"), 18 | ("lg", "Large (Avery 18262)"), 19 | ("thermal_sm", 'Thermal 3"x2"'), 20 | ("custom", "Custom"), 21 | ], 22 | default="lg", 23 | max_length=20, 24 | verbose_name="Label size", 25 | ), 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /auctions/migrations/0178_create_locations.py: -------------------------------------------------------------------------------- 1 | from django.db import migrations 2 | 3 | 4 | def create_locations(apps, schema_editor): 5 | Location = apps.get_model("auctions", "Location") 6 | 7 | if not Location.objects.exists(): 8 | Location.objects.bulk_create( 9 | [ 10 | Location(name="Other"), 11 | Location(name="Australia"), 12 | Location(name="Africa"), 13 | Location(name="South America"), 14 | Location(name="Europe"), 15 | Location(name="Canada"), 16 | Location(name="United States"), 17 | ] 18 | ) 19 | 20 | 21 | class Migration(migrations.Migration): 22 | dependencies = [ 23 | ("auctions", "0177_alter_pageview_date_start_alter_pageview_session_id"), 24 | ] 25 | 26 | operations = [ 27 | migrations.RunPython(create_locations), 28 | ] 29 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/nl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/nl",[],function(){return{errorLoading:function(){return"De resultaten konden niet worden geladen."},inputTooLong:function(e){return"Gelieve "+(e.input.length-e.maximum)+" karakters te verwijderen"},inputTooShort:function(e){return"Gelieve "+(e.minimum-e.input.length)+" of meer karakters in te voeren"},loadingMore:function(){return"Meer resultaten laden…"},maximumSelected:function(e){var n=1==e.maximum?"kan":"kunnen",r="Er "+n+" maar "+e.maximum+" item";return 1!=e.maximum&&(r+="s"),r+=" worden geselecteerd"},noResults:function(){return"Geen resultaten gevonden…"},searching:function(){return"Zoeken…"},removeAllItems:function(){return"Verwijder alle items"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/bg.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/bg",[],function(){return{inputTooLong:function(n){var e=n.input.length-n.maximum,n="Моля въведете с "+e+" по-малко символ";return 11?"s":"")},inputTooShort:function(e){var n=e.minimum-e.input.length;return"Saisissez au moins "+n+" caractère"+(n>1?"s":"")},loadingMore:function(){return"Chargement de résultats supplémentaires…"},maximumSelected:function(e){return"Vous pouvez seulement sélectionner "+e.maximum+" élément"+(e.maximum>1?"s":"")},noResults:function(){return"Aucun résultat trouvé"},searching:function(){return"Recherche en cours…"},removeAllItems:function(){return"Supprimer tous les éléments"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/fa.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/fa",[],function(){return{errorLoading:function(){return"امکان بارگذاری نتایج وجود ندارد."},inputTooLong:function(n){return"لطفاً "+(n.input.length-n.maximum)+" کاراکتر را حذف نمایید"},inputTooShort:function(n){return"لطفاً تعداد "+(n.minimum-n.input.length)+" کاراکتر یا بیشتر وارد نمایید"},loadingMore:function(){return"در حال بارگذاری نتایج بیشتر..."},maximumSelected:function(n){return"شما تنها می‌توانید "+n.maximum+" آیتم را انتخاب نمایید"},noResults:function(){return"هیچ نتیجه‌ای یافت نشد"},searching:function(){return"در حال جستجو..."},removeAllItems:function(){return"همه موارد را حذف کنید"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"fa"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/he.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/he",[],function(){return{errorLoading:function(){return"שגיאה בטעינת התוצאות"},inputTooLong:function(n){n=n.input.length-n.maximum;return"נא למחוק "+(1==n?"תו אחד":n+" תווים")},inputTooShort:function(n){var e=n.minimum-n.input.length,n="נא להכניס ";return(n+=1==e?"תו אחד":e+" תווים")+" או יותר"},loadingMore:function(){return"טוען תוצאות נוספות…"},maximumSelected:function(n){var e="באפשרותך לבחור עד ";return 1===n.maximum?e+="פריט אחד":e+=n.maximum+" פריטים",e},noResults:function(){return"לא נמצאו תוצאות"},searching:function(){return"מחפש…"},removeAllItems:function(){return"הסר את כל הפריטים"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"he"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/migrations/0156_category_name_on_label_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-16 14:58 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0155_auction_label_print_fields"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="category", 14 | name="name_on_label", 15 | field=models.CharField(default="", max_length=255), 16 | ), 17 | migrations.AlterField( 18 | model_name="auction", 19 | name="label_print_fields", 20 | field=models.CharField( 21 | blank=True, 22 | default="qr_code,lot_name,min_bid_label,buy_now_label,quantity_label,seller_name,donation_label", 23 | max_length=1000, 24 | null=True, 25 | ), 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/es.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/es",[],function(){return{errorLoading:function(){return"No se pudieron cargar los resultados"},inputTooLong:function(e){var n=e.input.length-e.maximum,r="Por favor, elimine "+n+" car";return r+=1==n?"ácter":"acteres"},inputTooShort:function(e){var n=e.minimum-e.input.length,r="Por favor, introduzca "+n+" car";return r+=1==n?"ácter":"acteres"},loadingMore:function(){return"Cargando más resultados…"},maximumSelected:function(e){var n="Sólo puede seleccionar "+e.maximum+" elemento";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"No se encontraron resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Eliminar todos los elementos"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/gl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/gl",[],function(){return{errorLoading:function(){return"Non foi posíbel cargar os resultados."},inputTooLong:function(e){var n=e.input.length-e.maximum;return 1===n?"Elimine un carácter":"Elimine "+n+" caracteres"},inputTooShort:function(e){var n=e.minimum-e.input.length;return 1===n?"Engada un carácter":"Engada "+n+" caracteres"},loadingMore:function(){return"Cargando máis resultados…"},maximumSelected:function(e){return 1===e.maximum?"Só pode seleccionar un elemento":"Só pode seleccionar "+e.maximum+" elementos"},noResults:function(){return"Non se atoparon resultados"},searching:function(){return"Buscando…"},removeAllItems:function(){return"Elimina todos os elementos"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/sl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/sl",[],function(){return{errorLoading:function(){return"Zadetkov iskanja ni bilo mogoče naložiti."},inputTooLong:function(e){var n=e.input.length-e.maximum,t="Prosim zbrišite "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},inputTooShort:function(e){var n=e.minimum-e.input.length,t="Prosim vpišite še "+n+" znak";return 2==n?t+="a":1!=n&&(t+="e"),t},loadingMore:function(){return"Nalagam več zadetkov…"},maximumSelected:function(e){var n="Označite lahko največ "+e.maximum+" predmet";return 2==e.maximum?n+="a":1!=e.maximum&&(n+="e"),n},noResults:function(){return"Ni zadetkov."},searching:function(){return"Iščem…"},removeAllItems:function(){return"Odstranite vse elemente"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/summernote/bs5-hack.js: -------------------------------------------------------------------------------- 1 | // Function to replace data-toggle with data-bs-toggle 2 | function replaceDataToggle() { 3 | document.querySelectorAll('[data-toggle="dropdown"]').forEach(function(el) { 4 | el.setAttribute('data-bs-toggle', 'dropdown'); 5 | el.removeAttribute('data-toggle'); 6 | }); 7 | } 8 | 9 | // Run on page load 10 | document.addEventListener('DOMContentLoaded', function() { 11 | replaceDataToggle(); 12 | 13 | // Observe for new elements added to the iframe's DOM 14 | const observer = new MutationObserver(function(mutations) { 15 | mutations.forEach(function(mutation) { 16 | if (mutation.addedNodes.length > 0) { 17 | replaceDataToggle(); // Replace in newly added elements 18 | } 19 | }); 20 | }); 21 | 22 | // Observe the document body for changes 23 | observer.observe(document.body, { childList: true, subtree: true }); 24 | }); 25 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/ro.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var e=jQuery.fn.select2.amd;e.define("select2/i18n/ro",[],function(){return{errorLoading:function(){return"Rezultatele nu au putut fi incărcate."},inputTooLong:function(e){var t=e.input.length-e.maximum,n="Vă rugăm să ștergeți"+t+" caracter";return 1!==t&&(n+="e"),n},inputTooShort:function(e){return"Vă rugăm să introduceți "+(e.minimum-e.input.length)+" sau mai multe caractere"},loadingMore:function(){return"Se încarcă mai multe rezultate…"},maximumSelected:function(e){var t="Aveți voie să selectați cel mult "+e.maximum;return t+=" element",1!==e.maximum&&(t+="e"),t},noResults:function(){return"Nu au fost găsite rezultate"},searching:function(){return"Căutare…"},removeAllItems:function(){return"Eliminați toate elementele"}}}),e.define,e.require}(); 4 | -------------------------------------------------------------------------------- /auctions/migrations/0150_auction_invoice_rounding_and_more.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.1 on 2024-10-05 13:38 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0149_alter_userdata_email_me_when_people_comment_on_my_lots_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="auction", 14 | name="invoice_rounding", 15 | field=models.BooleanField( 16 | default=True, 17 | help_text="Round invoice totals to whole dollar amounts. Check if you plan to accept cash payments.", 18 | ), 19 | ), 20 | migrations.AlterField( 21 | model_name="auction", 22 | name="allow_bidding_on_lots", 23 | field=models.BooleanField(default=True, verbose_name="Allow online bidding"), 24 | ), 25 | ] 26 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/eo.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/eo",[],function(){return{errorLoading:function(){return"La rezultoj ne povas esti ŝargitaj."},inputTooLong:function(n){n=n.input.length-n.maximum;return"Bonvolu forigi "+n+" signo"+(1==n?"n":"jn")},inputTooShort:function(n){return"Bv. enigi "+(n.minimum-n.input.length)+" aŭ pli multajn signojn"},loadingMore:function(){return"Ŝargado de pliaj rezultoj…"},maximumSelected:function(n){var e="Vi povas elekti nur "+n.maximum+" ero";return 1==n.maximum?e+="n":e+="jn",e},noResults:function(){return"Neniuj rezultoj trovitaj"},searching:function(){return"Serĉado…"},removeAllItems:function(){return"Forigi ĉiujn erojn"}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"eo"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/hr.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/hr",[],function(){function e(n){var e=" "+n+" znak";return n%10<5&&0{% trans "Password Reset" %} 10 |
11 | {% if user.is_authenticated %} 12 | {% include "account/snippets/already_logged_in.html" %} 13 | {% endif %} 14 | {% trans "Forgotten your password? Enter your e-mail address below, and we'll send you an e-mail allowing you to reset it." %} 15 |
16 | {% csrf_token %} 17 | {{ form | crispy }} 18 | Edit other info 19 |
20 | 21 | {% endblock %} 22 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/lt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/lt",[],function(){function n(n,e,i,t){return n%10==1&&(n%100<11||n%100>19)?e:n%10>=2&&n%10<=9&&(n%100<11||n%100>19)?i:t}return{inputTooLong:function(e){var i=e.input.length-e.maximum,t="Pašalinkite "+i+" simbol";return t+=n(i,"į","ius","ių")},inputTooShort:function(e){var i=e.minimum-e.input.length,t="Įrašykite dar "+i+" simbol";return t+=n(i,"į","ius","ių")},loadingMore:function(){return"Kraunama daugiau rezultatų…"},maximumSelected:function(e){var i="Jūs galite pasirinkti tik "+e.maximum+" element";return i+=n(e.maximum,"ą","us","ų")},noResults:function(){return"Atitikmenų nerasta"},searching:function(){return"Ieškoma…"},removeAllItems:function(){return"Pašalinti visus elementus"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/django_extensions/css/jquery.autocomplete.css: -------------------------------------------------------------------------------- 1 | /** 2 | * @fileOverview CSS for jquery-autocomplete, the jQuery Autocompleter 3 | * @author Dylan Verheul 4 | * @license MIT | GPL | Apache 2.0, see LICENSE.txt 5 | * @see https://github.com/dyve/jquery-autocomplete 6 | */ 7 | .acResults { 8 | padding: 0px; 9 | border: 1px solid WindowFrame; 10 | background-color: Window; 11 | overflow: hidden; 12 | } 13 | 14 | .acResults ul { 15 | margin: 0px; 16 | padding: 0px; 17 | list-style-position: outside; 18 | list-style: none; 19 | } 20 | 21 | .acResults ul li { 22 | margin: 0px; 23 | padding: 2px 5px; 24 | cursor: pointer; 25 | display: block; 26 | font: menu; 27 | font-size: 12px; 28 | overflow: hidden; 29 | } 30 | 31 | .acLoading { 32 | background : url('../img/indicator.gif') right center no-repeat; 33 | } 34 | 35 | .acSelect { 36 | background-color: Highlight; 37 | color: HighlightText; 38 | } 39 | -------------------------------------------------------------------------------- /auctions/templates/account/password_reset_from_key.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% load crispy_forms_tags %} 5 | {% block head_title %}{% trans "Change Password" %}{% endblock %} 6 | 7 | {% block content %} 8 |

{% if token_fail %}{% trans "Bad Token" %}{% else %}{% trans "Change Password" %}{% endif %}

9 | 10 | {% if token_fail %} 11 | {% url 'account_reset_password' as passwd_reset_url %} 12 |

{% blocktrans %}The password reset link was invalid, possibly because it has already been used. Please request a new password reset.{% endblocktrans %}

13 | {% else %} 14 |
15 | {% csrf_token %} 16 | {{ form | crispy }} 17 | 18 |
19 | {% endif %} 20 | {% endblock %} 21 | -------------------------------------------------------------------------------- /nginx.dev.conf: -------------------------------------------------------------------------------- 1 | events { 2 | worker_connections 1024; 3 | } 4 | 5 | http { 6 | include /etc/nginx/mime.types; 7 | default_type application/octet-stream; 8 | log_format main '$remote_addr - $remote_user [$time_local] "$request" ' 9 | '$status $body_bytes_sent "$http_referer" ' 10 | '"$http_user_agent" "$http_x_forwarded_for"'; 11 | 12 | access_log off; 13 | #access_log /var/log/nginx/access.log main; 14 | error_log /var/log/nginx/error.log warn; 15 | 16 | sendfile on; 17 | tcp_nopush on; 18 | tcp_nodelay on; 19 | keepalive_timeout 65; 20 | types_hash_max_size 2048; 21 | 22 | include /etc/nginx/conf.d/*.conf; 23 | include /etc/nginx/sites-enabled/*; 24 | server { 25 | listen 80 default_server; 26 | listen [::]:80 default_server; 27 | 28 | server_name _; 29 | 30 | 31 | 32 | include ./nginx_fishauctions.conf; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /auctions/migrations/0207_add_square_oauth_fields.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 5.2.8 on 2025-11-15 17:31 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | dependencies = [ 8 | ("auctions", "0206_auction_dismissed_square_banner_and_more"), 9 | ] 10 | 11 | operations = [ 12 | migrations.AddField( 13 | model_name="squareseller", 14 | name="access_token", 15 | field=models.CharField(blank=True, max_length=500, null=True), 16 | ), 17 | migrations.AddField( 18 | model_name="squareseller", 19 | name="refresh_token", 20 | field=models.CharField(blank=True, max_length=500, null=True), 21 | ), 22 | migrations.AddField( 23 | model_name="squareseller", 24 | name="token_expires_at", 25 | field=models.DateTimeField(blank=True, null=True), 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /auctions/static/admin/js/vendor/select2/i18n/pl.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.0.13 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | 3 | !function(){if(jQuery&&jQuery.fn&&jQuery.fn.select2&&jQuery.fn.select2.amd)var n=jQuery.fn.select2.amd;n.define("select2/i18n/pl",[],function(){var n=["znak","znaki","znaków"],e=["element","elementy","elementów"],r=function(n,e){return 1===n?e[0]:n>1&&n<=4?e[1]:n>=5?e[2]:void 0};return{errorLoading:function(){return"Nie można załadować wyników."},inputTooLong:function(e){var t=e.input.length-e.maximum;return"Usuń "+t+" "+r(t,n)},inputTooShort:function(e){var t=e.minimum-e.input.length;return"Podaj przynajmniej "+t+" "+r(t,n)},loadingMore:function(){return"Trwa ładowanie…"},maximumSelected:function(n){return"Możesz zaznaczyć tylko "+n.maximum+" "+r(n.maximum,e)},noResults:function(){return"Brak wyników"},searching:function(){return"Trwa wyszukiwanie…"},removeAllItems:function(){return"Usuń wszystkie przedmioty"}}}),n.define,n.require}(); 4 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/de.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/de",[],function(){return{errorLoading:function(){return"Die Ergebnisse konnten nicht geladen werden."},inputTooLong:function(e){return"Bitte "+(e.input.length-e.maximum)+" Zeichen weniger eingeben"},inputTooShort:function(e){return"Bitte "+(e.minimum-e.input.length)+" Zeichen mehr eingeben"},loadingMore:function(){return"Lade mehr Ergebnisse…"},maximumSelected:function(e){var n="Sie können nur "+e.maximum+" Element";return 1!=e.maximum&&(n+="e"),n+" auswählen"},noResults:function(){return"Keine Übereinstimmungen gefunden"},searching:function(){return"Suche…"},removeAllItems:function(){return"Entferne alle Elemente"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"de"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/eu.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/eu",[],function(){return{inputTooLong:function(e){var n=e.input.length-e.maximum,e="Idatzi ";return(e+=1==n?"karaktere bat":n+" karaktere")+" gutxiago"},inputTooShort:function(e){var n=e.minimum-e.input.length,e="Idatzi ";return(e+=1==n?"karaktere bat":n+" karaktere")+" gehiago"},loadingMore:function(){return"Emaitza gehiago kargatzen…"},maximumSelected:function(e){return 1===e.maximum?"Elementu bakarra hauta dezakezu":e.maximum+" elementu hauta ditzakezu soilik"},noResults:function(){return"Ez da bat datorrenik aurkitu"},searching:function(){return"Bilatzen…"},removeAllItems:function(){return"Kendu elementu guztiak"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"eu"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/lv.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/lv",[],function(){function n(e,n,t,u){return 11===e?n:e%10==1?t:u}return{inputTooLong:function(e){e=e.input.length-e.maximum;return"Lūdzu ievadiet par "+e+(" simbol"+n(e,"iem","u","iem"))+" mazāk"},inputTooShort:function(e){e=e.minimum-e.input.length;return"Lūdzu ievadiet vēl "+e+(" simbol"+n(e,"us","u","us"))},loadingMore:function(){return"Datu ielāde…"},maximumSelected:function(e){return"Jūs varat izvēlēties ne vairāk kā "+e.maximum+(" element"+n(e.maximum,"us","u","us"))},noResults:function(){return"Sakritību nav"},searching:function(){return"Meklēšana…"},removeAllItems:function(){return"Noņemt visus vienumus"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"lv"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/pt.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/pt",[],function(){return{errorLoading:function(){return"Os resultados não puderam ser carregados."},inputTooLong:function(e){e=e.input.length-e.maximum;return"Por favor apague "+e+" "+(1!=e?"caracteres":"caractere")},inputTooShort:function(e){return"Introduza "+(e.minimum-e.input.length)+" ou mais caracteres"},loadingMore:function(){return"A carregar mais resultados…"},maximumSelected:function(e){return"Apenas pode seleccionar "+e.maximum+" "+(1!=e.maximum?"itens":"item")},noResults:function(){return"Sem resultados"},searching:function(){return"A procurar…"},removeAllItems:function(){return"Remover todos os itens"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"pt"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/af.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(e){var n;(n=e&&e.fn&&e.fn.select2&&e.fn.select2.amd?e.fn.select2.amd:n).define("select2/i18n/af",[],function(){return{errorLoading:function(){return"Die resultate kon nie gelaai word nie."},inputTooLong:function(e){var n=e.input.length-e.maximum,e="Verwyders asseblief "+n+" character";return 1!=n&&(e+="s"),e},inputTooShort:function(e){return"Voer asseblief "+(e.minimum-e.input.length)+" of meer karakters"},loadingMore:function(){return"Meer resultate word gelaai…"},maximumSelected:function(e){var n="Kies asseblief net "+e.maximum+" item";return 1!=e.maximum&&(n+="s"),n},noResults:function(){return"Geen resultate gevind"},searching:function(){return"Besig…"},removeAllItems:function(){return"Verwyder alle items"}}}),n.define,n.require},event=new CustomEvent("dal-language-loaded",{lang:"af"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /db-init/01-grant-test-permissions.sql: -------------------------------------------------------------------------------- 1 | -- Grant permissions for the test database 2 | -- Django's test runner creates test databases with a 'test_' prefix 3 | -- This grants the database user permission to create and use test databases 4 | 5 | -- Note: CREATE and DROP privileges must be granted globally (on *.*) in MariaDB as it doesn't 6 | -- support database name patterns for these grants. This allows Django to create and drop 7 | -- test databases with any name (e.g., test_auctions, test_auctions_2 for parallel tests) 8 | 9 | -- Check if user already has these privileges, if not grant them 10 | -- This makes the script idempotent for existing dev systems with persistent volumes 11 | GRANT CREATE, DROP ON *.* TO 'mysqluser'@'%'; 12 | 13 | -- Grant full privileges on any database starting with 'test_' 14 | -- This pattern matching is supported for table-level privileges in MariaDB 15 | GRANT ALL PRIVILEGES ON `test_%`.* TO 'mysqluser'@'%'; 16 | 17 | FLUSH PRIVILEGES; 18 | -------------------------------------------------------------------------------- /auctions/static/autocomplete_light/i18n/bn.js: -------------------------------------------------------------------------------- 1 | /*! Select2 4.1.0-rc.0 | https://github.com/select2/select2/blob/master/LICENSE.md */ 2 | var dalLoadLanguage=function(n){var e;(e=n&&n.fn&&n.fn.select2&&n.fn.select2.amd?n.fn.select2.amd:e).define("select2/i18n/bn",[],function(){return{errorLoading:function(){return"ফলাফলগুলি লোড করা যায়নি।"},inputTooLong:function(n){n=n.input.length-n.maximum;return 1!=n?"অনুগ্রহ করে "+n+" টি অক্ষর মুছে দিন।":"অনুগ্রহ করে "+n+" টি অক্ষর মুছে দিন।"},inputTooShort:function(n){return n.minimum-n.input.length+" টি অক্ষর অথবা অধিক অক্ষর লিখুন।"},loadingMore:function(){return"আরো ফলাফল লোড হচ্ছে ..."},maximumSelected:function(n){var e=n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।";return e=1!=n.maximum?n.maximum+" টি আইটেম নির্বাচন করতে পারবেন।":e},noResults:function(){return"কোন ফলাফল পাওয়া যায়নি।"},searching:function(){return"অনুসন্ধান করা হচ্ছে ..."}}}),e.define,e.require},event=new CustomEvent("dal-language-loaded",{lang:"bn"});document.dispatchEvent(event); 3 | -------------------------------------------------------------------------------- /auctions/templates/socialaccount/signup.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% load i18n %} 4 | {% load crispy_forms_tags %} 5 | {% block title %}{% trans "Signup" %}{% endblock %} 6 | 7 | {% block content %} 8 |

{% trans "Sign Up" %}

9 | 10 |

{% blocktrans with provider_name=account.get_provider.name site_name=site.name %}You are about to use your {{provider_name}} account to login to 11 | {{site_name}}. 12 | {% endblocktrans %}

13 | 14 | If you are signing up for the first time and seeing this page, please enter the following information: 15 | 23 | {% endblock %} 24 | --------------------------------------------------------------------------------