diff --git a/.github/workflows/deploy_toserver_production.yml b/.github/workflows/deploy_toserver_production.yml index 930f111..514fb1b 100644 --- a/.github/workflows/deploy_toserver_production.yml +++ b/.github/workflows/deploy_toserver_production.yml @@ -1,5 +1,9 @@ name: Deploy to server production -on: [workflow_dispatch] +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] jobs: build: name: build-apps @@ -13,11 +17,7 @@ jobs: password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | - cd /opt/GPMain + cd $HOME/Projek/geraipi_main + source $HOME/virtualenv/Projek/geraipi_main/3.10/bin/activate git pull origin main - export $(grep -v '^#' .env | xargs) - /opt/geraienv/bin/python /opt/GPMain/manage.py makemigrations - /opt/geraienv/bin/python /opt/GPMain/manage.py migrate - echo yes | /opt/geraienv/bin/python /opt/GPMain/manage.py collectstatic - service uwsgi restart - service nginx restart + touch tmp/restart.txt diff --git a/.github/workflows/deploy_toserver_test.yml b/.github/workflows/deploy_toserver_test.yml index 1c31b53..9df0bfb 100644 --- a/.github/workflows/deploy_toserver_test.yml +++ b/.github/workflows/deploy_toserver_test.yml @@ -1,5 +1,9 @@ name: Deploy to server test -on: [workflow_dispatch] +on: + push: + branches: [ "main" ] + pull_request: + branches: [ "main" ] jobs: build: name: build-apps @@ -13,11 +17,7 @@ jobs: password: ${{ secrets.PASSWORD }} port: ${{ secrets.PORT }} script: | - cd /opt/geraipi - git pull origin2 main - export $(grep -v '^#' .env | xargs) - /opt/geraienv/bin/python /opt/geraipi/manage.py makemigrations - /opt/geraienv/bin/python /opt/geraipi/manage.py migrate - echo yes | /opt/geraienv/bin/python /opt/geraipi/manage.py collectstatic - service uwsgi restart - service nginx restart + cd $HOME/Projek/geraipi_test + source $HOME/virtualenv/Projek/geraipi_test/3.10/bin/activate + git pull origin main + touch tmp/restart.txt diff --git a/frontend/templates/firebase-messaging-sw.js b/frontend/templates/firebase-messaging-sw.js index c08fdee..a2fd522 100644 --- a/frontend/templates/firebase-messaging-sw.js +++ b/frontend/templates/firebase-messaging-sw.js @@ -1,2 +1,27 @@ -/*! For license information please see other.js.LICENSE.txt */ -(()=>{"use strict";var e={};e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}();const t=function(e){const t=[];let n=0;for(let i=0;i>6|192,t[n++]=63&r|128):55296==(64512&r)&&i+1>18|240,t[n++]=r>>12&63|128,t[n++]=r>>6&63|128,t[n++]=63&r|128):(t[n++]=r>>12|224,t[n++]=r>>6&63|128,t[n++]=63&r|128)}return t},n={byteToCharMap_:null,charToByteMap_:null,byteToCharMapWebSafe_:null,charToByteMapWebSafe_:null,ENCODED_VALS_BASE:"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",get ENCODED_VALS(){return this.ENCODED_VALS_BASE+"+/="},get ENCODED_VALS_WEBSAFE(){return this.ENCODED_VALS_BASE+"-_."},HAS_NATIVE_SUPPORT:"function"==typeof atob,encodeByteArray(e,t){if(!Array.isArray(e))throw Error("encodeByteArray takes an array as a parameter");this.init_();const n=t?this.byteToCharMapWebSafe_:this.byteToCharMap_,i=[];for(let t=0;t>2,u=(3&r)<<4|o>>4;let d=(15&o)<<2|c>>6,p=63&c;s||(p=64,a||(d=64)),i.push(n[l],n[u],n[d],n[p])}return i.join("")},encodeString(e,n){return this.HAS_NATIVE_SUPPORT&&!n?btoa(e):this.encodeByteArray(t(e),n)},decodeString(e,t){return this.HAS_NATIVE_SUPPORT&&!t?atob(e):function(e){const t=[];let n=0,i=0;for(;n191&&r<224){const a=e[n++];t[i++]=String.fromCharCode((31&r)<<6|63&a)}else if(r>239&&r<365){const a=((7&r)<<18|(63&e[n++])<<12|(63&e[n++])<<6|63&e[n++])-65536;t[i++]=String.fromCharCode(55296+(a>>10)),t[i++]=String.fromCharCode(56320+(1023&a))}else{const a=e[n++],o=e[n++];t[i++]=String.fromCharCode((15&r)<<12|(63&a)<<6|63&o)}}return t.join("")}(this.decodeStringToByteArray(e,t))},decodeStringToByteArray(e,t){this.init_();const n=t?this.charToByteMapWebSafe_:this.charToByteMap_,r=[];for(let t=0;t>4;if(r.push(l),64!==s){const e=o<<4&240|s>>2;if(r.push(e),64!==c){const e=s<<6&192|c;r.push(e)}}}return r},init_(){if(!this.byteToCharMap_){this.byteToCharMap_={},this.charToByteMap_={},this.byteToCharMapWebSafe_={},this.charToByteMapWebSafe_={};for(let e=0;e=this.ENCODED_VALS_BASE.length&&(this.charToByteMap_[this.ENCODED_VALS_WEBSAFE.charAt(e)]=e,this.charToByteMapWebSafe_[this.ENCODED_VALS.charAt(e)]=e)}}};class i extends Error{constructor(){super(...arguments),this.name="DecodeBase64StringError"}}const r=function(e){return function(e){const i=t(e);return n.encodeByteArray(i,!0)}(e).replace(/\./g,"")},a=()=>{try{return function(){if("undefined"!=typeof self)return self;if("undefined"!=typeof window)return window;if(void 0!==e.g)return e.g;throw new Error("Unable to locate global object.")}().__FIREBASE_DEFAULTS__||(()=>{if("undefined"==typeof process||void 0===process.env)return;const e=process.env.__FIREBASE_DEFAULTS__;return e?JSON.parse(e):void 0})()||(()=>{if("undefined"==typeof document)return;let e;try{e=document.cookie.match(/__FIREBASE_DEFAULTS__=([^;]+)/)}catch(e){return}const t=e&&function(e){try{return n.decodeString(e,!0)}catch(e){console.error("base64Decode failed: ",e)}return null}(e[1]);return t&&JSON.parse(t)})()}catch(e){return void console.info(`Unable to get __FIREBASE_DEFAULTS__ due to: ${e}`)}},o=()=>{var e;return null===(e=a())||void 0===e?void 0:e.config};class s{constructor(){this.reject=()=>{},this.resolve=()=>{},this.promise=new Promise(((e,t)=>{this.resolve=e,this.reject=t}))}wrapCallback(e){return(t,n)=>{t?this.reject(t):this.resolve(n),"function"==typeof e&&(this.promise.catch((()=>{})),1===e.length?e(t):e(t,n))}}}function c(){try{return"object"==typeof indexedDB}catch(e){return!1}}function l(){return new Promise(((e,t)=>{try{let n=!0;const i="validate-browser-context-for-indexeddb-analytics-module",r=self.indexedDB.open(i);r.onsuccess=()=>{r.result.close(),n||self.indexedDB.deleteDatabase(i),e(!0)},r.onupgradeneeded=()=>{n=!1},r.onerror=()=>{var e;t((null===(e=r.error)||void 0===e?void 0:e.message)||"")}}catch(e){t(e)}}))}class u extends Error{constructor(e,t,n){super(t),this.code=e,this.customData=n,this.name="FirebaseError",Object.setPrototypeOf(this,u.prototype),Error.captureStackTrace&&Error.captureStackTrace(this,d.prototype.create)}}class d{constructor(e,t,n){this.service=e,this.serviceName=t,this.errors=n}create(e,...t){const n=t[0]||{},i=`${this.service}/${e}`,r=this.errors[e],a=r?function(e,t){return e.replace(p,((e,n)=>{const i=t[n];return null!=i?String(i):`<${n}?>`}))}(r,n):"Error",o=`${this.serviceName}: ${a} (${i}).`;return new u(i,o,n)}}const p=/\{\$([^}]+)}/g;function f(e,t){if(e===t)return!0;const n=Object.keys(e),i=Object.keys(t);for(const r of n){if(!i.includes(r))return!1;const n=e[r],a=t[r];if(h(n)&&h(a)){if(!f(n,a))return!1}else if(n!==a)return!1}for(const e of i)if(!n.includes(e))return!1;return!0}function h(e){return null!==e&&"object"==typeof e}function g(e){return e&&e._delegate?e._delegate:e}class m{constructor(e,t,n){this.name=e,this.instanceFactory=t,this.type=n,this.multipleInstances=!1,this.serviceProps={},this.instantiationMode="LAZY",this.onInstanceCreated=null}setInstantiationMode(e){return this.instantiationMode=e,this}setMultipleInstances(e){return this.multipleInstances=e,this}setServiceProps(e){return this.serviceProps=e,this}setInstanceCreatedCallback(e){return this.onInstanceCreated=e,this}}const b="[DEFAULT]";class w{constructor(e,t){this.name=e,this.container=t,this.component=null,this.instances=new Map,this.instancesDeferred=new Map,this.instancesOptions=new Map,this.onInitCallbacks=new Map}get(e){const t=this.normalizeInstanceIdentifier(e);if(!this.instancesDeferred.has(t)){const e=new s;if(this.instancesDeferred.set(t,e),this.isInitialized(t)||this.shouldAutoInitialize())try{const n=this.getOrInitializeService({instanceIdentifier:t});n&&e.resolve(n)}catch(e){}}return this.instancesDeferred.get(t).promise}getImmediate(e){var t;const n=this.normalizeInstanceIdentifier(null==e?void 0:e.identifier),i=null!==(t=null==e?void 0:e.optional)&&void 0!==t&&t;if(!this.isInitialized(n)&&!this.shouldAutoInitialize()){if(i)return null;throw Error(`Service ${this.name} is not available`)}try{return this.getOrInitializeService({instanceIdentifier:n})}catch(e){if(i)return null;throw e}}getComponent(){return this.component}setComponent(e){if(e.name!==this.name)throw Error(`Mismatching Component ${e.name} for Provider ${this.name}.`);if(this.component)throw Error(`Component for ${this.name} has already been provided`);if(this.component=e,this.shouldAutoInitialize()){if(function(e){return"EAGER"===e.instantiationMode}(e))try{this.getOrInitializeService({instanceIdentifier:b})}catch(e){}for(const[e,t]of this.instancesDeferred.entries()){const n=this.normalizeInstanceIdentifier(e);try{const e=this.getOrInitializeService({instanceIdentifier:n});t.resolve(e)}catch(e){}}}}clearInstance(e=b){this.instancesDeferred.delete(e),this.instancesOptions.delete(e),this.instances.delete(e)}async delete(){const e=Array.from(this.instances.values());await Promise.all([...e.filter((e=>"INTERNAL"in e)).map((e=>e.INTERNAL.delete())),...e.filter((e=>"_delete"in e)).map((e=>e._delete()))])}isComponentSet(){return null!=this.component}isInitialized(e=b){return this.instances.has(e)}getOptions(e=b){return this.instancesOptions.get(e)||{}}initialize(e={}){const{options:t={}}=e,n=this.normalizeInstanceIdentifier(e.instanceIdentifier);if(this.isInitialized(n))throw Error(`${this.name}(${n}) has already been initialized`);if(!this.isComponentSet())throw Error(`Component ${this.name} has not been registered yet`);const i=this.getOrInitializeService({instanceIdentifier:n,options:t});for(const[e,t]of this.instancesDeferred.entries())n===this.normalizeInstanceIdentifier(e)&&t.resolve(i);return i}onInit(e,t){var n;const i=this.normalizeInstanceIdentifier(t),r=null!==(n=this.onInitCallbacks.get(i))&&void 0!==n?n:new Set;r.add(e),this.onInitCallbacks.set(i,r);const a=this.instances.get(i);return a&&e(a,i),()=>{r.delete(e)}}invokeOnInitCallbacks(e,t){const n=this.onInitCallbacks.get(t);if(n)for(const i of n)try{i(e,t)}catch(e){}}getOrInitializeService({instanceIdentifier:e,options:t={}}){let n=this.instances.get(e);if(!n&&this.component&&(n=this.component.instanceFactory(this.container,{instanceIdentifier:(i=e,i===b?void 0:i),options:t}),this.instances.set(e,n),this.instancesOptions.set(e,t),this.invokeOnInitCallbacks(n,e),this.component.onInstanceCreated))try{this.component.onInstanceCreated(this.container,e,n)}catch(e){}var i;return n||null}normalizeInstanceIdentifier(e=b){return this.component?this.component.multipleInstances?e:b:e}shouldAutoInitialize(){return!!this.component&&"EXPLICIT"!==this.component.instantiationMode}}class y{constructor(e){this.name=e,this.providers=new Map}addComponent(e){const t=this.getProvider(e.name);if(t.isComponentSet())throw new Error(`Component ${e.name} has already been registered with ${this.name}`);t.setComponent(e)}addOrOverwriteComponent(e){this.getProvider(e.name).isComponentSet()&&this.providers.delete(e.name),this.addComponent(e)}getProvider(e){if(this.providers.has(e))return this.providers.get(e);const t=new w(e,this);return this.providers.set(e,t),t}getProviders(){return Array.from(this.providers.values())}}const v=[];var I;!function(e){e[e.DEBUG=0]="DEBUG",e[e.VERBOSE=1]="VERBOSE",e[e.INFO=2]="INFO",e[e.WARN=3]="WARN",e[e.ERROR=4]="ERROR",e[e.SILENT=5]="SILENT"}(I||(I={}));const S={debug:I.DEBUG,verbose:I.VERBOSE,info:I.INFO,warn:I.WARN,error:I.ERROR,silent:I.SILENT},_=I.INFO,E={[I.DEBUG]:"log",[I.VERBOSE]:"log",[I.INFO]:"info",[I.WARN]:"warn",[I.ERROR]:"error"},C=(e,t,...n)=>{if(tt.some((t=>e instanceof t));let k,T;const A=new WeakMap,O=new WeakMap,M=new WeakMap,N=new WeakMap,B=new WeakMap;let j={get(e,t,n){if(e instanceof IDBTransaction){if("done"===t)return O.get(e);if("objectStoreNames"===t)return e.objectStoreNames||M.get(e);if("store"===t)return n.objectStoreNames[1]?void 0:n.objectStore(n.objectStoreNames[0])}return L(e[t])},set:(e,t,n)=>(e[t]=n,!0),has:(e,t)=>e instanceof IDBTransaction&&("done"===t||"store"===t)||t in e};function P(e){return"function"==typeof e?(t=e)!==IDBDatabase.prototype.transaction||"objectStoreNames"in IDBTransaction.prototype?(T||(T=[IDBCursor.prototype.advance,IDBCursor.prototype.continue,IDBCursor.prototype.continuePrimaryKey])).includes(t)?function(...e){return t.apply($(this),e),L(A.get(this))}:function(...e){return L(t.apply($(this),e))}:function(e,...n){const i=t.call($(this),e,...n);return M.set(i,e.sort?e.sort():[e]),L(i)}:(e instanceof IDBTransaction&&function(e){if(O.has(e))return;const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("complete",r),e.removeEventListener("error",a),e.removeEventListener("abort",a)},r=()=>{t(),i()},a=()=>{n(e.error||new DOMException("AbortError","AbortError")),i()};e.addEventListener("complete",r),e.addEventListener("error",a),e.addEventListener("abort",a)}));O.set(e,t)}(e),D(e,k||(k=[IDBDatabase,IDBObjectStore,IDBIndex,IDBCursor,IDBTransaction]))?new Proxy(e,j):e);var t}function L(e){if(e instanceof IDBRequest)return function(e){const t=new Promise(((t,n)=>{const i=()=>{e.removeEventListener("success",r),e.removeEventListener("error",a)},r=()=>{t(L(e.result)),i()},a=()=>{n(e.error),i()};e.addEventListener("success",r),e.addEventListener("error",a)}));return t.then((t=>{t instanceof IDBCursor&&A.set(t,e)})).catch((()=>{})),B.set(t,e),t}(e);if(N.has(e))return N.get(e);const t=P(e);return t!==e&&(N.set(e,t),B.set(t,e)),t}const $=e=>B.get(e);function H(e,t,{blocked:n,upgrade:i,blocking:r,terminated:a}={}){const o=indexedDB.open(e,t),s=L(o);return i&&o.addEventListener("upgradeneeded",(e=>{i(L(o.result),e.oldVersion,e.newVersion,L(o.transaction),e)})),n&&o.addEventListener("blocked",(e=>n(e.oldVersion,e.newVersion,e))),s.then((e=>{a&&e.addEventListener("close",(()=>a())),r&&e.addEventListener("versionchange",(e=>r(e.oldVersion,e.newVersion,e)))})).catch((()=>{})),s}function R(e,{blocked:t}={}){const n=indexedDB.deleteDatabase(e);return t&&n.addEventListener("blocked",(e=>t(e.oldVersion,e))),L(n).then((()=>{}))}const F=["get","getKey","getAll","getAllKeys","count"],x=["put","add","delete","clear"],V=new Map;function K(e,t){if(!(e instanceof IDBDatabase)||t in e||"string"!=typeof t)return;if(V.get(t))return V.get(t);const n=t.replace(/FromIndex$/,""),i=t!==n,r=x.includes(n);if(!(n in(i?IDBIndex:IDBObjectStore).prototype)||!r&&!F.includes(n))return;const a=async function(e,...t){const a=this.transaction(e,r?"readwrite":"readonly");let o=a.store;return i&&(o=o.index(t.shift())),(await Promise.all([o[n](...t),r&&a.done]))[0]};return V.set(t,a),a}var U;U=j,j={...U,get:(e,t,n)=>K(e,t)||U.get(e,t,n),has:(e,t)=>!!K(e,t)||U.has(e,t)};class W{constructor(e){this.container=e}getPlatformInfoString(){return this.container.getProviders().map((e=>{if(function(e){const t=e.getComponent();return"VERSION"===(null==t?void 0:t.type)}(e)){const t=e.getImmediate();return`${t.library}/${t.version}`}return null})).filter((e=>e)).join(" ")}}const z="@firebase/app",q="0.10.10",G=new class{constructor(e){this.name=e,this._logLevel=_,this._logHandler=C,this._userLogHandler=null,v.push(this)}get logLevel(){return this._logLevel}set logLevel(e){if(!(e in I))throw new TypeError(`Invalid value "${e}" assigned to \`logLevel\``);this._logLevel=e}setLogLevel(e){this._logLevel="string"==typeof e?S[e]:e}get logHandler(){return this._logHandler}set logHandler(e){if("function"!=typeof e)throw new TypeError("Value assigned to `logHandler` must be a function");this._logHandler=e}get userLogHandler(){return this._userLogHandler}set userLogHandler(e){this._userLogHandler=e}debug(...e){this._userLogHandler&&this._userLogHandler(this,I.DEBUG,...e),this._logHandler(this,I.DEBUG,...e)}log(...e){this._userLogHandler&&this._userLogHandler(this,I.VERBOSE,...e),this._logHandler(this,I.VERBOSE,...e)}info(...e){this._userLogHandler&&this._userLogHandler(this,I.INFO,...e),this._logHandler(this,I.INFO,...e)}warn(...e){this._userLogHandler&&this._userLogHandler(this,I.WARN,...e),this._logHandler(this,I.WARN,...e)}error(...e){this._userLogHandler&&this._userLogHandler(this,I.ERROR,...e),this._logHandler(this,I.ERROR,...e)}}("@firebase/app"),J="@firebase/app-compat",Y="@firebase/analytics-compat",Z="@firebase/analytics",Q="@firebase/app-check-compat",X="@firebase/app-check",ee="@firebase/auth",te="@firebase/auth-compat",ne="@firebase/database",ie="@firebase/database-compat",re="@firebase/functions",ae="@firebase/functions-compat",oe="@firebase/installations",se="@firebase/installations-compat",ce="@firebase/messaging",le="@firebase/messaging-compat",ue="@firebase/performance",de="@firebase/performance-compat",pe="@firebase/remote-config",fe="@firebase/remote-config-compat",he="@firebase/storage",ge="@firebase/storage-compat",me="@firebase/firestore",be="@firebase/vertexai-preview",we="@firebase/firestore-compat",ye="firebase",ve="[DEFAULT]",Ie={[z]:"fire-core",[J]:"fire-core-compat",[Z]:"fire-analytics",[Y]:"fire-analytics-compat",[X]:"fire-app-check",[Q]:"fire-app-check-compat",[ee]:"fire-auth",[te]:"fire-auth-compat",[ne]:"fire-rtdb",[ie]:"fire-rtdb-compat",[re]:"fire-fn",[ae]:"fire-fn-compat",[oe]:"fire-iid",[se]:"fire-iid-compat",[ce]:"fire-fcm",[le]:"fire-fcm-compat",[ue]:"fire-perf",[de]:"fire-perf-compat",[pe]:"fire-rc",[fe]:"fire-rc-compat",[he]:"fire-gcs",[ge]:"fire-gcs-compat",[me]:"fire-fst",[we]:"fire-fst-compat",[be]:"fire-vertex","fire-js":"fire-js",[ye]:"fire-js-all"},Se=new Map,_e=new Map,Ee=new Map;function Ce(e,t){try{e.container.addComponent(t)}catch(n){G.debug(`Component ${t.name} failed to register with FirebaseApp ${e.name}`,n)}}function De(e){const t=e.name;if(Ee.has(t))return G.debug(`There were multiple attempts to register component ${t}.`),!1;Ee.set(t,e);for(const t of Se.values())Ce(t,e);for(const t of _e.values())Ce(t,e);return!0}function ke(e,t){const n=e.container.getProvider("heartbeat").getImmediate({optional:!0});return n&&n.triggerHeartbeat(),e.container.getProvider(t)}const Te=new d("app","Firebase",{"no-app":"No Firebase App '{$appName}' has been created - call initializeApp() first","bad-app-name":"Illegal App name: '{$appName}'","duplicate-app":"Firebase App named '{$appName}' already exists with different options or config","app-deleted":"Firebase App named '{$appName}' already deleted","server-app-deleted":"Firebase Server App has been deleted","no-options":"Need to provide options, when not being deployed to hosting via source.","invalid-app-argument":"firebase.{$appName}() takes either no argument or a Firebase App instance.","invalid-log-argument":"First argument to `onLog` must be null or a function.","idb-open":"Error thrown when opening IndexedDB. Original error: {$originalErrorMessage}.","idb-get":"Error thrown when reading from IndexedDB. Original error: {$originalErrorMessage}.","idb-set":"Error thrown when writing to IndexedDB. Original error: {$originalErrorMessage}.","idb-delete":"Error thrown when deleting from IndexedDB. Original error: {$originalErrorMessage}.","finalization-registry-not-supported":"FirebaseServerApp deleteOnDeref field defined but the JS runtime does not support FinalizationRegistry.","invalid-server-app-environment":"FirebaseServerApp is not for use in browser environments."});class Ae{constructor(e,t,n){this._isDeleted=!1,this._options=Object.assign({},e),this._config=Object.assign({},t),this._name=t.name,this._automaticDataCollectionEnabled=t.automaticDataCollectionEnabled,this._container=n,this.container.addComponent(new m("app",(()=>this),"PUBLIC"))}get automaticDataCollectionEnabled(){return this.checkDestroyed(),this._automaticDataCollectionEnabled}set automaticDataCollectionEnabled(e){this.checkDestroyed(),this._automaticDataCollectionEnabled=e}get name(){return this.checkDestroyed(),this._name}get options(){return this.checkDestroyed(),this._options}get config(){return this.checkDestroyed(),this._config}get container(){return this._container}get isDeleted(){return this._isDeleted}set isDeleted(e){this._isDeleted=e}checkDestroyed(){if(this.isDeleted)throw Te.create("app-deleted",{appName:this._name})}}function Oe(e,t={}){let n=e;"object"!=typeof t&&(t={name:t});const i=Object.assign({name:ve,automaticDataCollectionEnabled:!1},t),r=i.name;if("string"!=typeof r||!r)throw Te.create("bad-app-name",{appName:String(r)});if(n||(n=o()),!n)throw Te.create("no-options");const a=Se.get(r);if(a){if(f(n,a.options)&&f(i,a.config))return a;throw Te.create("duplicate-app",{appName:r})}const s=new y(r);for(const e of Ee.values())s.addComponent(e);const c=new Ae(n,i,s);return Se.set(r,c),c}function Me(e,t,n){var i;let r=null!==(i=Ie[e])&&void 0!==i?i:e;n&&(r+=`-${n}`);const a=r.match(/\s|\//),o=t.match(/\s|\//);if(a||o){const e=[`Unable to register library "${r}" with version "${t}":`];return a&&e.push(`library name "${r}" contains illegal characters (whitespace or "/")`),a&&o&&e.push("and"),o&&e.push(`version name "${t}" contains illegal characters (whitespace or "/")`),void G.warn(e.join(" "))}De(new m(`${r}-version`,(()=>({library:r,version:t})),"VERSION"))}const Ne="firebase-heartbeat-database",Be=1,je="firebase-heartbeat-store";let Pe=null;function Le(){return Pe||(Pe=H(Ne,Be,{upgrade:(e,t)=>{if(0===t)try{e.createObjectStore(je)}catch(e){console.warn(e)}}}).catch((e=>{throw Te.create("idb-open",{originalErrorMessage:e.message})}))),Pe}async function $e(e,t){try{const n=(await Le()).transaction(je,"readwrite"),i=n.objectStore(je);await i.put(t,He(e)),await n.done}catch(e){if(e instanceof u)G.warn(e.message);else{const t=Te.create("idb-set",{originalErrorMessage:null==e?void 0:e.message});G.warn(t.message)}}}function He(e){return`${e.name}!${e.options.appId}`}class Re{constructor(e){this.container=e,this._heartbeatsCache=null;const t=this.container.getProvider("app").getImmediate();this._storage=new xe(t),this._heartbeatsCachePromise=this._storage.read().then((e=>(this._heartbeatsCache=e,e)))}async triggerHeartbeat(){var e,t;try{const n=this.container.getProvider("platform-logger").getImmediate().getPlatformInfoString(),i=Fe();if(null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)&&(this._heartbeatsCache=await this._heartbeatsCachePromise,null==(null===(t=this._heartbeatsCache)||void 0===t?void 0:t.heartbeats)))return;if(this._heartbeatsCache.lastSentHeartbeatDate===i||this._heartbeatsCache.heartbeats.some((e=>e.date===i)))return;return this._heartbeatsCache.heartbeats.push({date:i,agent:n}),this._heartbeatsCache.heartbeats=this._heartbeatsCache.heartbeats.filter((e=>{const t=new Date(e.date).valueOf();return Date.now()-t<=2592e6})),this._storage.overwrite(this._heartbeatsCache)}catch(e){G.warn(e)}}async getHeartbeatsHeader(){var e;try{if(null===this._heartbeatsCache&&await this._heartbeatsCachePromise,null==(null===(e=this._heartbeatsCache)||void 0===e?void 0:e.heartbeats)||0===this._heartbeatsCache.heartbeats.length)return"";const t=Fe(),{heartbeatsToSend:n,unsentEntries:i}=function(e,t=1024){const n=[];let i=e.slice();for(const r of e){const e=n.find((e=>e.agent===r.agent));if(e){if(e.dates.push(r.date),Ve(n)>t){e.dates.pop();break}}else if(n.push({agent:r.agent,dates:[r.date]}),Ve(n)>t){n.pop();break}i=i.slice(1)}return{heartbeatsToSend:n,unsentEntries:i}}(this._heartbeatsCache.heartbeats),a=r(JSON.stringify({version:2,heartbeats:n}));return this._heartbeatsCache.lastSentHeartbeatDate=t,i.length>0?(this._heartbeatsCache.heartbeats=i,await this._storage.overwrite(this._heartbeatsCache)):(this._heartbeatsCache.heartbeats=[],this._storage.overwrite(this._heartbeatsCache)),a}catch(e){return G.warn(e),""}}}function Fe(){return(new Date).toISOString().substring(0,10)}class xe{constructor(e){this.app=e,this._canUseIndexedDBPromise=this.runIndexedDBEnvironmentCheck()}async runIndexedDBEnvironmentCheck(){return!!c()&&l().then((()=>!0)).catch((()=>!1))}async read(){if(await this._canUseIndexedDBPromise){const e=await async function(e){try{const t=(await Le()).transaction(je),n=await t.objectStore(je).get(He(e));return await t.done,n}catch(e){if(e instanceof u)G.warn(e.message);else{const t=Te.create("idb-get",{originalErrorMessage:null==e?void 0:e.message});G.warn(t.message)}}}(this.app);return(null==e?void 0:e.heartbeats)?e:{heartbeats:[]}}return{heartbeats:[]}}async overwrite(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return $e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:e.heartbeats})}}async add(e){var t;if(await this._canUseIndexedDBPromise){const n=await this.read();return $e(this.app,{lastSentHeartbeatDate:null!==(t=e.lastSentHeartbeatDate)&&void 0!==t?t:n.lastSentHeartbeatDate,heartbeats:[...n.heartbeats,...e.heartbeats]})}}}function Ve(e){return r(JSON.stringify({version:2,heartbeats:e})).length}De(new m("platform-logger",(e=>new W(e)),"PRIVATE")),De(new m("heartbeat",(e=>new Re(e)),"PRIVATE")),Me(z,q,""),Me(z,q,"esm2017"),Me("fire-js",""),Me("firebase","10.13.1","app");const Ke="@firebase/installations",Ue="0.6.8",We=1e4,ze=`w:${Ue}`,qe="FIS_v2",Ge="https://firebaseinstallations.googleapis.com/v1",Je=36e5,Ye=new d("installations","Installations",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"not-registered":"Firebase Installation is not registered.","installation-not-found":"Firebase Installation not found.","request-failed":'{$requestName} request failed with error "{$serverCode} {$serverStatus}: {$serverMessage}"',"app-offline":"Could not process request. Application offline.","delete-pending-registration":"Can't delete installation while there is a pending registration request."});function Ze(e){return e instanceof u&&e.code.includes("request-failed")}function Qe({projectId:e}){return`${Ge}/projects/${e}/installations`}function Xe(e){return{token:e.token,requestStatus:2,expiresIn:(t=e.expiresIn,Number(t.replace("s","000"))),creationTime:Date.now()};var t}async function et(e,t){const n=(await t.json()).error;return Ye.create("request-failed",{requestName:e,serverCode:n.code,serverMessage:n.message,serverStatus:n.status})}function tt({apiKey:e}){return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e})}async function nt(e){const t=await e();return t.status>=500&&t.status<600?e():t}function it(e){return new Promise((t=>{setTimeout(t,e)}))}const rt=/^[cdef][\w-]{21}$/,at="";function ot(){try{const e=new Uint8Array(17);(self.crypto||self.msCrypto).getRandomValues(e),e[0]=112+e[0]%16;const t=function(e){var t;return(t=e,btoa(String.fromCharCode(...t)).replace(/\+/g,"-").replace(/\//g,"_")).substr(0,22)}(e);return rt.test(t)?t:at}catch(e){return at}}function st(e){return`${e.appName}!${e.appId}`}const ct=new Map;function lt(e,t){const n=st(e);ut(n,t),function(e,t){const n=(!dt&&"BroadcastChannel"in self&&(dt=new BroadcastChannel("[Firebase] FID Change"),dt.onmessage=e=>{ut(e.data.key,e.data.fid)}),dt);n&&n.postMessage({key:e,fid:t}),0===ct.size&&dt&&(dt.close(),dt=null)}(n,t)}function ut(e,t){const n=ct.get(e);if(n)for(const e of n)e(t)}let dt=null;const pt="firebase-installations-database",ft=1,ht="firebase-installations-store";let gt=null;function mt(){return gt||(gt=H(pt,ft,{upgrade:(e,t)=>{0===t&&e.createObjectStore(ht)}})),gt}async function bt(e,t){const n=st(e),i=(await mt()).transaction(ht,"readwrite"),r=i.objectStore(ht),a=await r.get(n);return await r.put(t,n),await i.done,a&&a.fid===t.fid||lt(e,t.fid),t}async function wt(e){const t=st(e),n=(await mt()).transaction(ht,"readwrite");await n.objectStore(ht).delete(t),await n.done}async function yt(e,t){const n=st(e),i=(await mt()).transaction(ht,"readwrite"),r=i.objectStore(ht),a=await r.get(n),o=t(a);return void 0===o?await r.delete(n):await r.put(o,n),await i.done,!o||a&&a.fid===o.fid||lt(e,o.fid),o}async function vt(e){let t;const n=await yt(e.appConfig,(n=>{const i=function(e){return _t(e||{fid:ot(),registrationStatus:0})}(n),r=function(e,t){if(0===t.registrationStatus){if(!navigator.onLine)return{installationEntry:t,registrationPromise:Promise.reject(Ye.create("app-offline"))};const n={fid:t.fid,registrationStatus:1,registrationTime:Date.now()},i=async function(e,t){try{const n=await async function({appConfig:e,heartbeatServiceProvider:t},{fid:n}){const i=Qe(e),r=tt(e),a=t.getImmediate({optional:!0});if(a){const e=await a.getHeartbeatsHeader();e&&r.append("x-firebase-client",e)}const o={fid:n,authVersion:qe,appId:e.appId,sdkVersion:ze},s={method:"POST",headers:r,body:JSON.stringify(o)},c=await nt((()=>fetch(i,s)));if(c.ok){const e=await c.json();return{fid:e.fid||n,registrationStatus:2,refreshToken:e.refreshToken,authToken:Xe(e.authToken)}}throw await et("Create Installation",c)}(e,t);return bt(e.appConfig,n)}catch(n){throw Ze(n)&&409===n.customData.serverCode?await wt(e.appConfig):await bt(e.appConfig,{fid:t.fid,registrationStatus:0}),n}}(e,n);return{installationEntry:n,registrationPromise:i}}return 1===t.registrationStatus?{installationEntry:t,registrationPromise:It(e)}:{installationEntry:t}}(e,i);return t=r.registrationPromise,r.installationEntry}));return n.fid===at?{installationEntry:await t}:{installationEntry:n,registrationPromise:t}}async function It(e){let t=await St(e.appConfig);for(;1===t.registrationStatus;)await it(100),t=await St(e.appConfig);if(0===t.registrationStatus){const{installationEntry:t,registrationPromise:n}=await vt(e);return n||t}return t}function St(e){return yt(e,(e=>{if(!e)throw Ye.create("installation-not-found");return _t(e)}))}function _t(e){return 1===(t=e).registrationStatus&&t.registrationTime+Wefetch(i,s)));if(c.ok)return Xe(await c.json());throw await et("Generate Auth Token",c)}async function Ct(e,t=!1){let n;const i=await yt(e.appConfig,(i=>{if(!kt(i))throw Ye.create("not-registered");const r=i.authToken;if(!t&&(2===(a=r).requestStatus&&!function(e){const t=Date.now();return t{if(!kt(e))throw Ye.create("not-registered");return 1===(t=e.authToken).requestStatus&&t.requestTime+We{const t=e.getProvider("app").getImmediate(),n=function(e){if(!e||!e.options)throw Tt("App Configuration");if(!e.name)throw Tt("App Name");const t=["projectId","apiKey","appId"];for(const n of t)if(!e.options[n])throw Tt(n);return{appName:e.name,projectId:e.options.projectId,apiKey:e.options.apiKey,appId:e.options.appId}}(t);return{app:t,appConfig:n,heartbeatServiceProvider:ke(t,"heartbeat"),_delete:()=>Promise.resolve()}}),"PUBLIC")),De(new m("installations-internal",(e=>{const t=ke(e.getProvider("app").getImmediate(),At).getImmediate();return{getId:()=>async function(e){const t=e,{installationEntry:n,registrationPromise:i}=await vt(t);return i?i.catch(console.error):Ct(t).catch(console.error),n.fid}(t),getToken:e=>async function(e,t=!1){const n=e;return await async function(e){const{registrationPromise:t}=await vt(e);t&&await t}(n),(await Ct(n,t)).token}(t,e)}}),"PRIVATE")),Me(Ke,Ue),Me(Ke,Ue,"esm2017");const Ot="BDOU99-h67HcA6JeFXHbSNMu7e2yNNu3RzoMj8TM4W88jITfq7ZmPvIM1Iv-4_l2LxQcYwhqby2xGpWwzjfAnG4",Mt="https://fcmregistrations.googleapis.com/v1",Nt="FCM_MSG",Bt=3,jt=1;var Pt,Lt;function $t(e){const t=new Uint8Array(e);return btoa(String.fromCharCode(...t)).replace(/=/g,"").replace(/\+/g,"-").replace(/\//g,"_")}function Ht(e){const t=(e+"=".repeat((4-e.length%4)%4)).replace(/\-/g,"+").replace(/_/g,"/"),n=atob(t),i=new Uint8Array(n.length);for(let e=0;e{0===t&&e.createObjectStore(Ut)}})),Wt}async function qt(e){const t=Jt(e),n=await zt(),i=await n.transaction(Ut).objectStore(Ut).get(t);if(i)return i;{const t=await async function(e){if("databases"in indexedDB){const e=(await indexedDB.databases()).map((e=>e.name));if(!e.includes(Rt))return null}let t=null;return(await H(Rt,Ft,{upgrade:async(n,i,r,a)=>{var o;if(i<2)return;if(!n.objectStoreNames.contains(xt))return;const s=a.objectStore(xt),c=await s.index("fcmSenderId").get(e);if(await s.clear(),c)if(2===i){const e=c;if(!e.auth||!e.p256dh||!e.endpoint)return;t={token:e.fcmToken,createTime:null!==(o=e.createTime)&&void 0!==o?o:Date.now(),subscriptionOptions:{auth:e.auth,p256dh:e.p256dh,endpoint:e.endpoint,swScope:e.swScope,vapidKey:"string"==typeof e.vapidKey?e.vapidKey:$t(e.vapidKey)}}}else if(3===i){const e=c;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:$t(e.auth),p256dh:$t(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:$t(e.vapidKey)}}}else if(4===i){const e=c;t={token:e.fcmToken,createTime:e.createTime,subscriptionOptions:{auth:$t(e.auth),p256dh:$t(e.p256dh),endpoint:e.endpoint,swScope:e.swScope,vapidKey:$t(e.vapidKey)}}}}})).close(),await R(Rt),await R("fcm_vapid_details_db"),await R("undefined"),function(e){if(!e||!e.subscriptionOptions)return!1;const{subscriptionOptions:t}=e;return"number"==typeof e.createTime&&e.createTime>0&&"string"==typeof e.token&&e.token.length>0&&"string"==typeof t.auth&&t.auth.length>0&&"string"==typeof t.p256dh&&t.p256dh.length>0&&"string"==typeof t.endpoint&&t.endpoint.length>0&&"string"==typeof t.swScope&&t.swScope.length>0&&"string"==typeof t.vapidKey&&t.vapidKey.length>0}(t)?t:null}(e.appConfig.senderId);if(t)return await Gt(e,t),t}}async function Gt(e,t){const n=Jt(e),i=(await zt()).transaction(Ut,"readwrite");return await i.objectStore(Ut).put(t,n),await i.done,t}function Jt({appConfig:e}){return e.appId}const Yt=new d("messaging","Messaging",{"missing-app-config-values":'Missing App configuration value: "{$valueName}"',"only-available-in-window":"This method is available in a Window context.","only-available-in-sw":"This method is available in a service worker context.","permission-default":"The notification permission was not granted and dismissed instead.","permission-blocked":"The notification permission was not granted and blocked instead.","unsupported-browser":"This browser doesn't support the API's required to use the Firebase SDK.","indexed-db-unsupported":"This browser doesn't support indexedDb.open() (ex. Safari iFrame, Firefox Private Browsing, etc)","failed-service-worker-registration":"We are unable to register the default service worker. {$browserErrorMessage}","token-subscribe-failed":"A problem occurred while subscribing the user to FCM: {$errorInfo}","token-subscribe-no-token":"FCM returned no token when subscribing the user to push.","token-unsubscribe-failed":"A problem occurred while unsubscribing the user from FCM: {$errorInfo}","token-update-failed":"A problem occurred while updating the user from FCM: {$errorInfo}","token-update-no-token":"FCM returned no token when updating the user to push.","use-sw-after-get-token":"The useServiceWorker() method may only be called once and must be called before calling getToken() to ensure your service worker is used.","invalid-sw-registration":"The input to useServiceWorker() must be a ServiceWorkerRegistration.","invalid-bg-handler":"The input to setBackgroundMessageHandler() must be a function.","invalid-vapid-key":"The public VAPID key must be a string.","use-vapid-key-after-get-token":"The usePublicVapidKey() method may only be called once and must be called before calling getToken() to ensure your VAPID key is used."});async function Zt(e,t){const n={method:"DELETE",headers:await Xt(e)};try{const i=await fetch(`${Qt(e.appConfig)}/${t}`,n),r=await i.json();if(r.error){const e=r.error.message;throw Yt.create("token-unsubscribe-failed",{errorInfo:e})}}catch(e){throw Yt.create("token-unsubscribe-failed",{errorInfo:null==e?void 0:e.toString()})}}function Qt({projectId:e}){return`${Mt}/projects/${e}/registrations`}async function Xt({appConfig:e,installations:t}){const n=await t.getToken();return new Headers({"Content-Type":"application/json",Accept:"application/json","x-goog-api-key":e.apiKey,"x-goog-firebase-installations-auth":`FIS ${n}`})}function en({p256dh:e,auth:t,endpoint:n,vapidKey:i}){const r={web:{endpoint:n,auth:t,p256dh:e}};return i!==Ot&&(r.web.applicationPubKey=i),r}async function tn(e){const t=await qt(e.firebaseDependencies);t&&(await Zt(e.firebaseDependencies,t.token),await async function(e){const t=Jt(e),n=(await zt()).transaction(Ut,"readwrite");await n.objectStore(Ut).delete(t),await n.done}(e.firebaseDependencies));const n=await e.swRegistration.pushManager.getSubscription();return!n||n.unsubscribe()}async function nn(e,t){const n=await async function(e,t){const n=await Xt(e),i=en(t),r={method:"POST",headers:n,body:JSON.stringify(i)};let a;try{const t=await fetch(Qt(e.appConfig),r);a=await t.json()}catch(e){throw Yt.create("token-subscribe-failed",{errorInfo:null==e?void 0:e.toString()})}if(a.error){const e=a.error.message;throw Yt.create("token-subscribe-failed",{errorInfo:e})}if(!a.token)throw Yt.create("token-subscribe-no-token");return a.token}(e,t),i={token:n,createTime:Date.now(),subscriptionOptions:t};return await Gt(e,i),i.token}function rn(e,t){const n=[];for(let i=0;i"visible"===e.visibilityState&&!e.url.startsWith("chrome-extension://")))}(i))return function(e,t){t.isFirebaseMessaging=!0,t.messageType=Lt.PUSH_RECEIVED;for(const n of e)n.postMessage(t)}(i,n);if(n.notification&&await function(e){var t;const{actions:n}=e,{maxActions:i}=Notification;return n&&i&&n.length>i&&console.warn(`This browser only supports ${i} actions. The remaining actions will not be displayed.`),self.registration.showNotification(null!==(t=e.title)&&void 0!==t?t:"",e)}(function(e){const t=Object.assign({},e.notification);return t.data={[Nt]:e},t}(n)),t&&t.onBackgroundMessageHandler){const e=function(e){const t={from:e.from,collapseKey:e.collapse_key,messageId:e.fcmMessageId};return function(e,t){if(!t.notification)return;e.notification={};const n=t.notification.title;n&&(e.notification.title=n);const i=t.notification.body;i&&(e.notification.body=i);const r=t.notification.image;r&&(e.notification.image=r);const a=t.notification.icon;a&&(e.notification.icon=a)}(t,e),function(e,t){t.data&&(e.data=t.data)}(t,e),function(e,t){var n,i,r,a,o;if(!t.fcmOptions&&!(null===(n=t.notification)||void 0===n?void 0:n.click_action))return;e.fcmOptions={};const s=null!==(r=null===(i=t.fcmOptions)||void 0===i?void 0:i.link)&&void 0!==r?r:null===(a=t.notification)||void 0===a?void 0:a.click_action;s&&(e.fcmOptions.link=s);const c=null===(o=t.fcmOptions)||void 0===o?void 0:o.analytics_label;c&&(e.fcmOptions.analyticsLabel=c)}(t,e),t}(n);"function"==typeof t.onBackgroundMessageHandler?await t.onBackgroundMessageHandler(e):t.onBackgroundMessageHandler.next(e)}}function on(){return self.clients.matchAll({type:"window",includeUncontrolled:!0})}function sn(e){return Yt.create("missing-app-config-values",{valueName:e})}rn("hts/frbslgigp.ogepscmv/ieo/eaylg","tp:/ieaeogn-agolai.o/1frlglgc/o"),rn("AzSCbw63g1R0nCw85jG8","Iaya3yLKwmgvh7cF0q4");class cn{constructor(e,t,n){this.deliveryMetricsExportedToBigQueryEnabled=!1,this.onBackgroundMessageHandler=null,this.onMessageHandler=null,this.logEvents=[],this.isLogServiceStarted=!1;const i=function(e){if(!e||!e.options)throw sn("App Configuration Object");if(!e.name)throw sn("App Name");const t=["projectId","apiKey","appId","messagingSenderId"],{options:n}=e;for(const e of t)if(!n[e])throw sn(e);return{appName:e.name,projectId:n.projectId,apiKey:n.apiKey,appId:n.appId,senderId:n.messagingSenderId}}(e);this.firebaseDependencies={app:e,appConfig:i,installations:t,analyticsProvider:n}}_delete(){return Promise.resolve()}}De(new m("messaging-sw",(e=>{const t=new cn(e.getProvider("app").getImmediate(),e.getProvider("installations-internal").getImmediate(),e.getProvider("analytics-internal"));return self.addEventListener("push",(e=>{e.waitUntil(an(e,t))})),self.addEventListener("pushsubscriptionchange",(e=>{e.waitUntil(async function(e,t){var n,i;const{newSubscription:r}=e;if(!r)return void await tn(t);const a=await qt(t.firebaseDependencies);await tn(t),t.vapidKey=null!==(i=null===(n=null==a?void 0:a.subscriptionOptions)||void 0===n?void 0:n.vapidKey)&&void 0!==i?i:Ot,await async function(e){const t=await async function(e,t){return await e.pushManager.getSubscription()||e.pushManager.subscribe({userVisibleOnly:!0,applicationServerKey:Ht(t)})}(e.swRegistration,e.vapidKey),n={vapidKey:e.vapidKey,swScope:e.swRegistration.scope,endpoint:t.endpoint,auth:$t(t.getKey("auth")),p256dh:$t(t.getKey("p256dh"))},i=await qt(e.firebaseDependencies);if(i){if(function(e,t){const n=t.vapidKey===e.vapidKey,i=t.endpoint===e.endpoint,r=t.auth===e.auth,a=t.p256dh===e.p256dh;return n&&i&&r&&a}(i.subscriptionOptions,n))return Date.now()>=i.createTime+6048e5?async function(e,t){try{const n=await async function(e,t){const n=await Xt(e),i=en(t.subscriptionOptions),r={method:"PATCH",headers:n,body:JSON.stringify(i)};let a;try{const n=await fetch(`${Qt(e.appConfig)}/${t.token}`,r);a=await n.json()}catch(e){throw Yt.create("token-update-failed",{errorInfo:null==e?void 0:e.toString()})}if(a.error){const e=a.error.message;throw Yt.create("token-update-failed",{errorInfo:e})}if(!a.token)throw Yt.create("token-update-no-token");return a.token}(e.firebaseDependencies,t),i=Object.assign(Object.assign({},t),{token:n,createTime:Date.now()});return await Gt(e.firebaseDependencies,i),n}catch(e){throw e}}(e,{token:i.token,createTime:Date.now(),subscriptionOptions:n}):i.token;try{await Zt(e.firebaseDependencies,i.token)}catch(e){console.warn(e)}return nn(e.firebaseDependencies,n)}return nn(e.firebaseDependencies,n)}(t)}(e,t))})),self.addEventListener("notificationclick",(e=>{e.waitUntil(async function(e){var t,n;const i=null===(n=null===(t=e.notification)||void 0===t?void 0:t.data)||void 0===n?void 0:n[Nt];if(!i)return;if(e.action)return;e.stopImmediatePropagation(),e.notification.close();const r=function(e){var t,n,i;return(null!==(n=null===(t=e.fcmOptions)||void 0===t?void 0:t.link)&&void 0!==n?n:null===(i=e.notification)||void 0===i?void 0:i.click_action)||("object"==typeof(r=e.data)&&r&&"google.c.a.c_id"in r?self.location.origin:null);var r}(i);if(!r)return;const a=new URL(r,self.location.href),o=new URL(self.location.origin);if(a.host!==o.host)return;let s=await async function(e){const t=await on();for(const n of t){const t=new URL(n.url,self.location.href);if(e.host===t.host)return n}return null}(a);return s?s=await s.focus():(s=await self.clients.openWindow(r),await new Promise((e=>{setTimeout(e,3e3)}))),s?(i.messageType=Lt.NOTIFICATION_CLICKED,i.isFirebaseMessaging=!0,s.postMessage(i)):void 0}(e))})),t}),"PUBLIC"));!function(e){!function(e,t){if(void 0!==self.document)throw Yt.create("only-available-in-sw");e.onBackgroundMessageHandler=t}(e=g(e),(e=>{console.log("[firebase-messaging-sw.js] Received background message ",e),self.registration.showNotification("Background Message Title",{body:"Background Message body.",icon:"/firebase-logo.png"})}))}(function(e=function(e=ve){const t=Se.get(e);if(!t&&e===ve&&o())return Oe();if(!t)throw Te.create("no-app",{appName:e});return t}()){return async function(){return c()&&await l()&&"PushManager"in self&&"Notification"in self&&ServiceWorkerRegistration.prototype.hasOwnProperty("showNotification")&&PushSubscription.prototype.hasOwnProperty("getKey")}().then((e=>{if(!e)throw Yt.create("unsupported-browser")}),(e=>{throw Yt.create("indexed-db-unsupported")})),ke(g(e),"messaging-sw").getImmediate()}(Oe({apiKey:"AIzaSyCsEEl7bhST8VHrK3ovbEfMxCUcHZngKg0",authDomain:"geraipi.firebaseapp.com",projectId:"geraipi",storageBucket:"geraipi.appspot.com",messagingSenderId:"1071852496864",appId:"1:1071852496864:web:c5e8338dc67fa12d9bad85",measurementId:"G-SW3CZ09N71"})))})(); \ No newline at end of file +importScripts('https://www.gstatic.com/firebasejs/8.1.1/firebase-app.js'); +importScripts('https://www.gstatic.com/firebasejs/8.1.1/firebase-messaging.js'); +self.addEventListener('notificationclick', event => { + console.log(event) +}); +const firebaseConfig = { + apiKey: "AIzaSyC0lUXHwQdTFXz8KkC5D7zy-t47RrkIvsY", + authDomain: "geraipi-indonesia.firebaseapp.com", + projectId: "geraipi-indonesia", + storageBucket: "geraipi-indonesia.appspot.com", + messagingSenderId: "981139646267", + appId: "1:981139646267:web:53cc230affb50210a5391e", + measurementId: "G-F368X3MB4J" +}; +firebase.initializeApp(firebaseConfig); +const messaging = firebase.messaging(); +messaging.onBackgroundMessage((payload) => { + console.log('[firebase-messaging-sw.js] Received background message ', payload); + const notificationTitle = payload.notification.title; + const notificationOptions = { + body: payload.notification.body, + }; + return self.registration.showNotification(notificationTitle, + notificationOptions); +}); + + diff --git a/frontend/templates/layout.html b/frontend/templates/layout.html index 4990dc3..f193d14 100644 --- a/frontend/templates/layout.html +++ b/frontend/templates/layout.html @@ -1,6 +1,5 @@ -{% load static tailwind_tags %} -{% load i18n translater %} +{% load static tailwind_tags i18n translater %} @@ -221,31 +220,31 @@ --> - +{% endblock %} + +{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.model_name }} change-form{% endblock %} +{% if not is_popup %} + {% block breadcrumbs %} + + {% endblock %} +{% endif %} + +{% block content_title %} {% trans 'Change password' %} {% endblock %} + +{% block content %} + +
+ {% if form.errors %} +
+ {% if errors|length == 1 %} + {% trans "Please correct the error below." %} + {% else %} + {% trans "Please correct the errors below." %} + {% endif %} +
+ {% endif %} + +
+
+

+ {% blocktrans with username=original %}Enter a new password for the user {{ username }}.{% endblocktrans %} +

+
+ +
+
+
+ {% csrf_token %} + {% block form_top %}{% endblock %} + +
+ {% if is_popup %}{% endif %} + +
+
+
+ +
+
+ {{ form.password1 }} + {% if form.password1.help_text %} +
{{ form.password1.help_text|safe }}
+ {% endif %} +
+
+
+ {{ form.password1.errors }} +
+
+
+ +
+
+ +
+
+ {{ form.password2 }} + {% if form.password2.help_text %} +
{{ form.password2.help_text|safe }}
+ {% endif %} +
+
+
+ {{ form.password2.errors }} +
+
+
+ +
+
+
+ +
+
+
+
+
+
+
+
+ +{% endblock %} + +{% block extrajs %} + +{% endblock %} diff --git a/templates/admin/base.html b/templates/admin/base.html new file mode 100644 index 0000000..85ff041 --- /dev/null +++ b/templates/admin/base.html @@ -0,0 +1,386 @@ +{% load i18n static jazzmin admin_urls %} +{% get_current_language as LANGUAGE_CODE %} +{% get_current_language_bidi as LANGUAGE_BIDI %} +{% get_jazzmin_settings request as jazzmin_settings %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + + + + + + + + + + + {% block title %}{{ title }} | {{ jazzmin_settings.site_title }}{% endblock %} + + + + + + + + + {% if jazzmin_ui.theme.name != 'default' %} + + {% endif %} + + {% if jazzmin_ui.dark_mode_theme %} + + {% endif %} + + + + + {% if jazzmin_settings.custom_css %} + + + {% endif %} + + + + + + {% if jazzmin_settings.use_google_fonts_cdn %} + + + {% endif %} + + {% block extrastyle %} {% endblock %} + {% block extrahead %} {% endblock %} + + + +
+ + {% if not is_popup %} + + {% block sidebar %} + {% if jazzmin_settings.show_sidebar %} + {% get_side_menu as side_menu_list %} + + + {% endif %} + {% endblock %} + {% endif %} + +
+ {% block page_content %} + {% if not is_popup %} +
+
+
+
+

{% block content_title %}{% endblock %}

+ {% block breadcrumbs %}{% endblock %} +
+ {% block page_actions %}{% endblock %} +
+
+
+ {% endif %} + +
+
+
+ {% block messages %} + {% for message in messages %} + {% if message.tags == 'success' %} +
+ + {{ message|capfirst }} +
+ {% elif message.tags == 'error' %} +
+ + {{ message|capfirst }} +
+ {% elif message.tags == 'warning' %} +
+ + {{ message|capfirst }} +
+ {% elif message.tags == 'info' %} +
+ + {{ message|capfirst }} +
+ {% endif %} + {% endfor %} + {% endblock messages %} +
+ {% block content %} {% endblock %} +
+
+
+
+ + + {% endblock %} +
+ +{% block footer %} + {% if not is_popup %} +
+
+ {% trans 'Jazzmin version' %} {% get_jazzmin_version %} +
+ {% autoescape off %} + {% trans 'Copyright' %} © {% now 'Y' %} {{ jazzmin_settings.copyright }}. {% trans 'All rights reserved.' %} + {% endautoescape %} +
+ {% if jazzmin_settings.show_ui_builder %} + {% include 'jazzmin/includes/ui_builder_panel.html' %} + {% endif %} + {% endif %} +{% endblock %} + +
+ +{% if jazzmin_settings.show_ui_builder %} + +{% endif %} + + + + + + + + + + +{% if jazzmin_settings.custom_js %} + +{% endif %} + +{% if jazzmin_settings.show_ui_builder %} + + +{% endif %} + +{% block extrajs %}{% endblock %} + + + diff --git a/templates/admin/base_site.html b/templates/admin/base_site.html new file mode 100644 index 0000000..02f53be --- /dev/null +++ b/templates/admin/base_site.html @@ -0,0 +1 @@ +{% extends 'admin/base.html' %} \ No newline at end of file diff --git a/templates/admin/change_form.html b/templates/admin/change_form.html new file mode 100644 index 0000000..5be7d3b --- /dev/null +++ b/templates/admin/change_form.html @@ -0,0 +1,128 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_modify jazzmin %} +{% get_jazzmin_settings request as jazzmin_settings %} + +{% block extrastyle %} + {{ block.super }} + +{% endblock %} + +{% block extrahead %} + {{ block.super }} + + {{ media }} +{% endblock %} + +{% block coltype %}colM{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-form{% endblock %} + +{% if not is_popup %} + {% block breadcrumbs %} + + {% endblock %} +{% endif %} + +{% block content_title %} {{ opts.verbose_name_plural|capfirst }} {% endblock %} + +{% block content %} + +
+
+ {% csrf_token %} + {% block form_top %}{% endblock %} + + {% if errors %} +
+ {% if errors|length == 1 %} + {% trans "Please correct the error below." %} + {% else %} + {% trans "Please correct the errors below." %} + {% endif %} +
+ {% for error in adminform.form.non_field_errors %} +
+ + {{ error|capfirst }} +
+ {% endfor %} + {% endif %} + +
+ {% if is_popup %}{% endif %} + {% if to_field %}{% endif %} + + {% block field_sets %} +
+
+
+ {% get_changeform_template adminform as changeform_template %} + {% include changeform_template %} +
+
+
+ {% endblock %} + + {% block after_field_sets %}{% endblock %} + + {% block inline_field_sets %}{% endblock %} + + {% block after_related_objects %}{% endblock %} + +
+
+ {% block submit_buttons_bottom %} + {% submit_row %} + {% block object-tools %} + {% if change %} + {% if not is_popup %} +
+ {% block object-tools-items %} + {% change_form_object_tools %} + {% block extra_actions %}{% endblock %} + {% endblock %} +
+ {% endif %} + {% endif %} + {% endblock %} + {% endblock %} +
+
+ + {% block admin_change_form_document_ready %} + + {% endblock %} + + {% prepopulated_fields_js %} +
+
+
+ +{% endblock %} + +{% block extrajs %} + {{ block.super }} + + + {% if jazzmin_settings.related_modal_active %} + + + {% endif %} +{% endblock %} diff --git a/templates/admin/change_form_object_tools.html b/templates/admin/change_form_object_tools.html new file mode 100644 index 0000000..9786a99 --- /dev/null +++ b/templates/admin/change_form_object_tools.html @@ -0,0 +1,10 @@ +{% load i18n admin_urls jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block object-tools-items %} + {% url opts|admin_urlname:'history' original.pk|admin_urlquote as history_url %} + {% trans 'History' %} + {% if has_absolute_url %} + {% trans "View on site" %} + {% endif %} +{% endblock %} diff --git a/templates/admin/change_list.html b/templates/admin/change_list.html new file mode 100644 index 0000000..d7d35a1 --- /dev/null +++ b/templates/admin/change_list.html @@ -0,0 +1,122 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static admin_list jazzmin %} + +{% block extrastyle %} + {{ block.super }} + + + {% if cl.formset or action_form %} + + {% endif %} + {{ media.css }} + {% if not actions_on_top and not actions_on_bottom %} + + {% endif %} +{% endblock %} + +{% block extrahead %} + {{ block.super }} + {{ media.js }} +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} change-list{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content_title %} {{ cl.opts.verbose_name_plural|capfirst }} {% endblock %} + +{% block coltype %}flex{% endblock %} + + {% block page_actions %} +
+ {% block object-tools %} + {% block object-tools-items %} + {% change_list_object_tools %} + {% endblock %} + {% endblock %} +
+ {% endblock %} + + +{% block content %} + + {% block date_hierarchy %}{% if cl.date_hierarchy %}{% date_hierarchy cl %}{% endif %}{% endblock %} + + {% block search %} + {% search_form cl %} + {% endblock %} + +
+
+
{% csrf_token %} +
+ {% if cl.formset and cl.formset.errors %} + + {{ cl.formset.non_form_errors }} + {% endif %} +
+
+
+ {% if cl.formset %} +
{{ cl.formset.management_form }}
+ {% endif %} + + {% block result_list %} +
+
+ {% if action_form and actions_on_top and cl.show_admin_actions %} + {% admin_actions %} + {% endif %} +
+
+ {% result_list cl %} + {% if action_form and actions_on_bottom and cl.show_admin_actions %} +
+
+ {% admin_actions %} +
+
+ {% endif %} + {% endblock %} +
+
+
+ {% block pagination %}{% pagination cl %}{% endblock %} +
+
+
+
+
+ +
+
+{% endblock %} + +{% block extrajs %} + {{ block.super }} + + + +{% endblock %} diff --git a/templates/admin/change_list_object_tools.html b/templates/admin/change_list_object_tools.html new file mode 100644 index 0000000..18b3c4e --- /dev/null +++ b/templates/admin/change_list_object_tools.html @@ -0,0 +1,11 @@ +{% load i18n admin_urls jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block object-tools-items %} + {% if has_add_permission %} + {% url cl.opts|admin_urlname:'add' as add_url %} + +   {% blocktrans with cl.opts.verbose_name as name %}Add {{ name }}{% endblocktrans %} + + {% endif %} +{% endblock %} diff --git a/templates/admin/change_list_results.html b/templates/admin/change_list_results.html new file mode 100644 index 0000000..f928548 --- /dev/null +++ b/templates/admin/change_list_results.html @@ -0,0 +1,48 @@ +{% load i18n static jazzmin %} + +{% if result_hidden_fields %} +
+ {% for item in result_hidden_fields %}{{ item }}{% endfor %} +
+{% endif %} + +{% if results %} +
+
+ + + + {% for header in result_headers %} + + {% endfor %} + + + + {% for result in results %} + + {% for item in result %}{{ item }}{% endfor %} + + {% endfor %} + +
+
+ {% if header.sortable %} + {{ header.text|capfirst }} + {% else %} + {{ header.text|capfirst }} + {% endif %} + {% if header.sorted %} + +
+
+ {% if header.ascending %} + + {% else %} + + {% endif %} + {% endif %} +
+
+
+
+{% endif %} diff --git a/templates/admin/date_hierarchy.html b/templates/admin/date_hierarchy.html new file mode 100644 index 0000000..6e5d5b1 --- /dev/null +++ b/templates/admin/date_hierarchy.html @@ -0,0 +1,23 @@ +{% load jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% if show %} +
+
+ {% block date-hierarchy-toplinks %} + {% block date-hierarchy-back %} + {% if back %} + ‹ {{ back.title }} + {% endif %} + {% endblock %} + {% block date-hierarchy-choices %} + {% for choice in choices %} + + {{ choice.title }} + + {% endfor %} + {% endblock %} + {% endblock %} +
+
+{% endif %} diff --git a/templates/admin/delete_confirmation.html b/templates/admin/delete_confirmation.html new file mode 100644 index 0000000..3a54bdc --- /dev/null +++ b/templates/admin/delete_confirmation.html @@ -0,0 +1,79 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block extrahead %} +{{ block.super }} +{{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content_title %} {% trans 'Delete' %} {% endblock %} + +{% block content %} + +
+
+
+

+ {% trans 'Delete' %} {{ object|truncatewords:"18" }} +

+
+ +
+
+ {% if perms_lacking %} +

{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

+
    + {% for obj in perms_lacking %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% elif protected %} +

{% blocktrans with escaped_object=object %}Deleting the {{ object_name }} '{{ escaped_object }}' would require deleting the following protected related objects:{% endblocktrans %}

+
    + {% for obj in protected %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% else %} +

{% blocktrans with escaped_object=object %}Are you sure you want to delete the {{ object_name }} "{{ escaped_object }}"? All of the following related items will be deleted:{% endblocktrans %}

+
+
+

{% trans "Objects" %}

+
    {{ deleted_objects|unordered_list }}
+
+
+ {% include "admin/includes/object_delete_summary.html" %} +
{% csrf_token %} + + {% if is_popup %}{% endif %} + {% if to_field %}{% endif %} +
+ +
+ +
+
+
+ {% endif %} +
+
+
+
+ +{% endblock %} diff --git a/templates/admin/delete_selected_confirmation.html b/templates/admin/delete_selected_confirmation.html new file mode 100644 index 0000000..2061184 --- /dev/null +++ b/templates/admin/delete_selected_confirmation.html @@ -0,0 +1,83 @@ +{% extends "admin/base_site.html" %} +{% load i18n l10n admin_urls static jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block extrahead %} + {{ block.super }} + {{ media }} + +{% endblock %} + +{% block bodyclass %}{{ block.super }} app-{{ opts.app_label }} model-{{ opts.model_name }} delete-confirmation delete-selected-confirmation{% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content_title %} {% trans 'Delete multiple objects' %} {% endblock %} + +{% block content %} + +
+
+
+

+ {% trans 'Delete multiple objects' %} +

+
+ +
+
+ {% if perms_lacking %} +

{% blocktrans %}Deleting the selected {{ objects_name }} would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

+
    + {% for obj in perms_lacking %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% elif protected %} +

{% blocktrans %}Deleting the selected {{ objects_name }} would require deleting the following protected related objects:{% endblocktrans %}

+
    + {% for obj in protected %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% else %} +

{% blocktrans %}Are you sure you want to delete the selected {{ objects_name }}? All of the following objects and their related items will be deleted:{% endblocktrans %}

+
+
+

{% trans "Objects" %}

+ {% for deletable_object in deletable_objects %} +
    {{ deletable_object|unordered_list }}
+ {% endfor %} +
+
+ {% include "admin/includes/object_delete_summary.html" %} +
+
+ {% csrf_token %} + {% for obj in queryset %} + + {% endfor %} + + +
+ +
+ +
+
+
+ {% endif %} +
+
+
+
+{% endblock %} diff --git a/templates/admin/edit_inline/stacked.html b/templates/admin/edit_inline/stacked.html new file mode 100644 index 0000000..97276f9 --- /dev/null +++ b/templates/admin/edit_inline/stacked.html @@ -0,0 +1,58 @@ +{% load i18n admin_urls static %} +
+
+
+ {{ inline_admin_formset.formset.management_form }} + {{ inline_admin_formset.formset.non_form_errors }} + + {% for inline_admin_form in inline_admin_formset %} +
+
+
+

+ + {% if inline_admin_form.original %} + {% if inline_admin_form.model_admin.show_change_link and inline_admin_form.model_admin.has_registered_model %} + + {% if inline_admin_formset.has_change_permission %} + + {% else %} + + {% endif %} + + {% endif %} + {{ inline_admin_form.original }} + {% else %} + + {% trans "New" %} {{ inline_admin_formset.opts.verbose_name|capfirst }} + {% endif %} + + {% if inline_admin_form.show_url %} + + + + {% endif %} +

+ {% if inline_admin_formset.formset.can_delete and inline_admin_formset.has_delete_permission and inline_admin_form.original %} + + {{ inline_admin_form.deletion_field.field }} {{ inline_admin_form.deletion_field.label_tag }} + + {% endif %} +
+
+ {% if inline_admin_form.form.non_field_errors %}{{ inline_admin_form.form.non_field_errors }}{% endif %} + {% for fieldset in inline_admin_form %} + {% include "admin/includes/fieldset.html" %} + {% endfor %} + {% if inline_admin_form.needs_explicit_pk_field %}{{ inline_admin_form.pk_field.field }}{% endif %} + {% if inline_admin_form.fk_field %}{{ inline_admin_form.fk_field.field }}{% endif %} +
+
+
+ {% endfor %} +
+
+
diff --git a/templates/admin/edit_inline/tabular.html b/templates/admin/edit_inline/tabular.html new file mode 100644 index 0000000..66ae83b --- /dev/null +++ b/templates/admin/edit_inline/tabular.html @@ -0,0 +1,94 @@ +{% load i18n admin_urls static admin_modify %} +
+ +
diff --git a/templates/admin/filer/breadcrumbs.html b/templates/admin/filer/breadcrumbs.html new file mode 100644 index 0000000..695041f --- /dev/null +++ b/templates/admin/filer/breadcrumbs.html @@ -0,0 +1,30 @@ +{% load i18n %} + + diff --git a/templates/admin/filer/change_form.html b/templates/admin/filer/change_form.html new file mode 100644 index 0000000..c6f46e8 --- /dev/null +++ b/templates/admin/filer/change_form.html @@ -0,0 +1,33 @@ +{% extends "admin/change_form.html" %} +{% load i18n admin_modify static filer_admin_tags %} + +{% block breadcrumbs %} + {% with original as instance %} + {% include "admin/filer/breadcrumbs.html" %} + {% endwith %} +{% endblock %} + +{% block extrastyle %} + {{ block.super }} + +{% endblock %} + + +{% block after_field_sets %} + {% filer_admin_context_hidden_formfields %} +{% endblock %} + +{% block file_sidebar %} + {% with original.duplicates as duplicates %} + {% if duplicates %} +
+

{% trans "Duplicates" %}

+ +
+ {% endif %} + {% endwith %} +{% endblock %} diff --git a/templates/admin/filer/delete_selected_files_confirmation.html b/templates/admin/filer/delete_selected_files_confirmation.html new file mode 100644 index 0000000..cca72ad --- /dev/null +++ b/templates/admin/filer/delete_selected_files_confirmation.html @@ -0,0 +1,75 @@ +{% extends "admin/delete_selected_confirmation.html" %} +{% load i18n static admin_urls static jazzmin %} + +{% block breadcrumbs %} + {% include "admin/filer/breadcrumbs.html" %} +{% endblock %} + +{% block content %} +
+
+
+

+ {% trans 'Delete multiple objects' %} +

+
+ +
+
+ + {% if perms_lacking or protected %} + {% if perms_lacking %} +

{% blocktrans %}Deleting the selected files and/or folders would result in deleting related objects, but your account doesn't have permission to delete the following types of objects:{% endblocktrans %}

+
    + {% for obj in perms_lacking %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% endif %} + {% if protected %} +

{% blocktrans %}Deleting the selected files and/or folders would require deleting the following protected related objects:{% endblocktrans %}

+
    + {% for obj in protected %} +
  1. {{ obj }}
  2. + {% endfor %} +
+ {% endif %} + {% else %} +

{% blocktrans %}Are you sure you want to delete the selected files and/or folders? All of the following objects and their related items will be deleted:{% endblocktrans %}

+
+
+

{% trans "Objects" %}

+ {% for deletable_object in deletable_objects %} +
    {{ deletable_object|unordered_list }}
+ {% endfor %} +
+
+
+ {% csrf_token %} + {% for f in files_queryset %} + + {% endfor %} + {% for f in folders_queryset %} + + {% endfor %} + {% if is_popup %} + + {% if select_folder %}{% endif %} + {% endif %} + + +
+ +
+ +
+
+
+ {% endif %} +
+
+
+
+{% endblock %} \ No newline at end of file diff --git a/templates/admin/filer/file/change_form.html b/templates/admin/filer/file/change_form.html new file mode 100644 index 0000000..b3c4fb3 --- /dev/null +++ b/templates/admin/filer/file/change_form.html @@ -0,0 +1,36 @@ +{% extends "admin/filer/change_form.html" %} +{% load admin_modify static %} + +{% block extrahead %} + {{ block.super }} + + {# upload stuff #} + + + + + + + + + + + + + +{% endblock %} + +{% block submit_buttons_bottom %} + {% include "admin/filer/tools/detail_info.html" with file=True %} + {{ block.super }} +{% endblock %} diff --git a/templates/admin/filer/folder/change_form.html b/templates/admin/filer/folder/change_form.html new file mode 100644 index 0000000..78582e7 --- /dev/null +++ b/templates/admin/filer/folder/change_form.html @@ -0,0 +1,33 @@ +{% extends "admin/change_form.html" %} +{% load i18n admin_modify static filer_admin_tags %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block coltype %}{% if is_popup %}colM{% else %}colMS{% endif %}{% endblock %} + +{% block object-tools %} + {% if change and not is_popup %} + {% trans 'History' %} + {% if has_absolute_url %} + {% trans "View on site" %} + {% endif%} + {% endif %} +{% endblock %} + +{% block after_field_sets %} + {% filer_admin_context_hidden_formfields %} +{% endblock %} diff --git a/templates/admin/filer/folder/directory_listing.html b/templates/admin/filer/folder/directory_listing.html new file mode 100644 index 0000000..8bb6d3c --- /dev/null +++ b/templates/admin/filer/folder/directory_listing.html @@ -0,0 +1,258 @@ +{% extends "admin/filer/base_site.html" %} +{% load i18n static filer_admin_tags %} + +{% block extrahead %} + {{ block.super }} + + {% if action_form and actions_on_top or actions_on_bottom %} + + {% endif %} +{% endblock %} + +{% block coltype %}{% endblock %} +{% block bodyclass %}change-list filebrowser{% endblock %} + + +{% block extrastyle %} + {{ block.super }} + + {{ media.css }} + {% if action_form %} + {% url 'admin:jsi18n' as jsi18nurl %} + + {% endif %} + {% if query.pop %} + + {% endif %} +{% endblock %} + +{% block breadcrumbs %} + {% if not is_popup %} + + + + + {% endif %} +{% endblock %} + +{% block content %} + +
+ {% include "admin/filer/tools/search_form.html" %} + +
+{% endblock %} diff --git a/templates/admin/filer/image/change_form.html b/templates/admin/filer/image/change_form.html new file mode 100644 index 0000000..3951695 --- /dev/null +++ b/templates/admin/filer/image/change_form.html @@ -0,0 +1,36 @@ +{% extends "admin/filer/change_form.html" %} +{% load admin_modify static %} + +{% block extrahead %} + {{ block.super }} + + {# upload stuff #} + + + + + + + + + + + + + +{% endblock %} + +{% block submit_buttons_bottom %} + {% include "admin/filer/tools/detail_info.html" %} + {{ block.super }} +{% endblock %} \ No newline at end of file diff --git a/templates/admin/filer/tools/detail_info.html b/templates/admin/filer/tools/detail_info.html new file mode 100644 index 0000000..dea4d07 --- /dev/null +++ b/templates/admin/filer/tools/detail_info.html @@ -0,0 +1,55 @@ +{% load filer_admin_tags i18n static jazzmin %} + +
+
+

+ + {{ original }} +

+
+
+
+ {% if file %} + + {% else %} +
+ +
+ +
+
+ {% endif %} +
+ {% if original.file_type or original.modified_at or original.uploaded_at or original.width or original.height or original.size or original.owner %} +
    + {% if original.file_type %} +
  • {% trans "Type" %}: {{ original.extension|upper }} {{ original.file_type }}
  • + {% endif %} + {% if original.width or original.height %} +
  • {% trans "Size" %}: {{ original.width }}x{{ original.height }} px
  • + {% endif %} + {% if original.size %} +
  • {% trans "File-size" %}: {{ original.size|filesizeformat }}
  • + {% endif %} + {% if original.modified_at %} +
  • {% trans "Modified" %}: {{ original.modified_at }}
  • + {% endif %} + {% if original.uploaded_at %} +
  • {% trans "Created" %}: {{ original.uploaded_at }}
  • + {% endif %} + {% if original.owner %} +
  • {% trans "Owner" %}: {{ original.owner }}
  • + {% endif %} +
+ {% endif %} + +
+
diff --git a/templates/admin/filter.html b/templates/admin/filter.html new file mode 100644 index 0000000..40750af --- /dev/null +++ b/templates/admin/filter.html @@ -0,0 +1,15 @@ +{% load i18n %} + +
+ +
diff --git a/templates/admin/import_export/base.html b/templates/admin/import_export/base.html new file mode 100644 index 0000000..904b8e0 --- /dev/null +++ b/templates/admin/import_export/base.html @@ -0,0 +1,19 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_modify %} +{% load admin_urls %} +{% load static %} + +{% block extrastyle %}{{ block.super }}{% endblock %} +{% block bodyclass %}{{ block.super }} {{ opts.app_label }}-{{ opts.object_name.lower }} change-form{% endblock %} +{% if not is_popup %} +{% block breadcrumbs %} + + + +{% endblock %} +{% endif %} diff --git a/templates/admin/import_export/change_list.html b/templates/admin/import_export/change_list.html new file mode 100644 index 0000000..0f23dc7 --- /dev/null +++ b/templates/admin/import_export/change_list.html @@ -0,0 +1,13 @@ +{% extends "admin/change_list.html" %} + +{# Original template renders object-tools only when has_add_permission is True. #} +{# This hack allows sub templates to add to object-tools #} +{% block object-tools %} +
    + {% block object-tools-items %} + {% if has_add_permission %} + {{ block.super }} + {% endif %} + {% endblock %} +
+{% endblock %} diff --git a/templates/admin/import_export/change_list_export.html b/templates/admin/import_export/change_list_export.html new file mode 100644 index 0000000..9af1f73 --- /dev/null +++ b/templates/admin/import_export/change_list_export.html @@ -0,0 +1,6 @@ +{% extends "admin/import_export/change_list.html" %} + +{% block object-tools-items %} + {% include "admin/import_export/change_list_export_item.html" %} + {{ block.super }} +{% endblock %} diff --git a/templates/admin/import_export/change_list_export_item.html b/templates/admin/import_export/change_list_export_item.html new file mode 100644 index 0000000..a63791d --- /dev/null +++ b/templates/admin/import_export/change_list_export_item.html @@ -0,0 +1,8 @@ +{% load i18n %} +{% load admin_urls %} + +{% if has_export_permission %} + + {% trans "Export" %} + +{% endif %} diff --git a/templates/admin/import_export/change_list_import.html b/templates/admin/import_export/change_list_import.html new file mode 100644 index 0000000..9aa1860 --- /dev/null +++ b/templates/admin/import_export/change_list_import.html @@ -0,0 +1,6 @@ +{% extends "admin/import_export/change_list.html" %} + +{% block object-tools-items %} + {% include "admin/import_export/change_list_import_item.html" %} + {{ block.super }} +{% endblock %} diff --git a/templates/admin/import_export/change_list_import_export.html b/templates/admin/import_export/change_list_import_export.html new file mode 100644 index 0000000..6b30773 --- /dev/null +++ b/templates/admin/import_export/change_list_import_export.html @@ -0,0 +1,9 @@ +{% extends "admin/import_export/change_list.html" %} + +{% block object-tools-items %} +
+ {% include "admin/import_export/change_list_import_item.html" %} + {% include "admin/import_export/change_list_export_item.html" %} + {{ block.super }} +
+{% endblock %} diff --git a/templates/admin/import_export/change_list_import_item.html b/templates/admin/import_export/change_list_import_item.html new file mode 100644 index 0000000..561e105 --- /dev/null +++ b/templates/admin/import_export/change_list_import_item.html @@ -0,0 +1,8 @@ +{% load i18n admin_urls jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% if has_import_permission %} + + {% trans "Import" %} + +{% endif %} diff --git a/templates/admin/import_export/export.html b/templates/admin/import_export/export.html new file mode 100644 index 0000000..c7a9d5e --- /dev/null +++ b/templates/admin/import_export/export.html @@ -0,0 +1,74 @@ +{% extends "admin/import_export/base.html" %} +{% load i18n admin_urls static import_export_tags jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block extrastyle %} + {{ block.super }} + +{% endblock %} + +{% block breadcrumbs_last %} + {% trans "Export" %} +{% endblock %} + +{% block content %} +
+
+ {% csrf_token %} +
+
+
+
+
+ Export +
+
+
+ {% for field in form %} +
+
+ {{ field.errors }} +
+ {{ field.label_tag }} +
+
+ {{ field }} +
+ +
+ {% if field.field.help_text %} + ({{ field.field.help_text|striptags }}) + {% endif %} +
+
+
+ {% endfor %} +
+
+
+ +
+
+
+

+ + Actions +

+
+
+
+ +
+
+
+
+
+
+
+{% endblock %} + +{% block extrajs %} + {{ block.super }} + + +{% endblock %} diff --git a/templates/admin/import_export/import.html b/templates/admin/import_export/import.html new file mode 100644 index 0000000..5cb4b33 --- /dev/null +++ b/templates/admin/import_export/import.html @@ -0,0 +1,272 @@ +{% extends "admin/import_export/base.html" %} +{% load i18n admin_urls import_export_tags static jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block extrastyle %} + {{ block.super }} + + +{% endblock %} + +{% block breadcrumbs_last %} + {% trans "Import" %} +{% endblock %} + +{% block content %} +
+ {% if confirm_form %} +
+ {% csrf_token %} +
+
+
+
+
+ {% trans 'Confirm Import' %} +
+
+
+
+ {{ confirm_form.as_p }} +

+ {% trans "Below is a preview of data to be imported. If you are satisfied with the results, click 'Confirm import'" %} +

+
+
+
+
+
+
+
+

+ + {% trans 'Actions' %} +

+
+
+
+ +
+
+
+
+
+
+ {% else %} +
+ {% csrf_token %} +
+
+
+
+
+ {% trans 'Confirm Import' %} +
+
+
+ {% for field in form %} +
+
+ {{ field.errors }} +
+ {{ field.label_tag }} +
+
+ {{ field }} +
+ +
+ {% if field.field.help_text %} + ({{ field.field.help_text|striptags }}) + {% endif %} +
+
+
+ {% endfor %} +
+

+ {% trans "This importer will import the following fields: " %} +

    + {% for field in fields %} +
  • {{ field }}
  • + {% endfor %} +
+

+
+
+
+
+ +
+
+
+

+ + {% trans 'Actions' %} +

+
+
+
+ +
+
+
+
+
+
+ {% endif %} + + {% if result %} + + {% if result.has_errors %} +
+
+
+
+
+ {% trans "Errors" %} +
+
+ +
+
    + {% for error in result.base_errors %} +
  • + {{ error.error }} +
    +
    + {{ error.traceback|linebreaks }} +
    +
    +
  • + {% endfor %} + {% for line, errors in result.row_errors %} + {% for error in errors %} +
  • + {% trans "Line number" %}: {{ line }} - {{ error.error }} +
    + {{ error.row.values|join:", " }} +
    +
    +
    + {{ error.traceback|linebreaks }} +
    +
    +
  • + {% endfor %} + {% endfor %} +
+
+
+
+
+ + {% elif result.has_validation_errors %} + +

{% trans "Some rows failed to validate" %}

+ +

{% trans "Please correct these errors in your data where possible, then reupload it using the form above." %}

+ + + + + + + {% for field in result.diff_headers %} + + {% endfor %} + + + + {% for row in result.invalid_rows %} + + + + {% for field in row.values %} + + {% endfor %} + + {% endfor %} + +
{% trans "Row" %}{% trans "Errors" %}{{ field }}
{{ row.number }} + {{ row.error_count }} +
+
    + {% for field_name, error_list in row.field_specific_errors.items %} +
  • + {{ field_name }} +
      + {% for error in error_list %} +
    • {{ error }}
    • + {% endfor %} +
    +
  • + {% endfor %} + {% if row.non_field_specific_errors %} +
  • + {% trans "Non field specific" %} +
      + {% for error in row.non_field_specific_errors %} +
    • {{ error }}
    • + {% endfor %} +
    +
  • + {% endif %} +
+
+
{{ field }}
+ + {% else %} + +
+
+
+
+
+ {% trans "Preview" %} +
+
+
+ + + + + {% for field in result.diff_headers %} + + {% endfor %} + + + {% for row in result.valid_rows %} + + + {% for field in row.diff %} + + {% endfor %} + + {% endfor %} +
{{ field }}
+ {% if row.import_type == 'new' %} + {% trans "New" %} + {% elif row.import_type == 'skip' %} + {% trans "Skipped" %} + {% elif row.import_type == 'delete' %} + {% trans "Delete" %} + {% elif row.import_type == 'update' %} + {% trans "Update" %} + {% endif %} + {{ field }}
+
+
+
+
+ + {% endif %} + {% endif %} +
+{% endblock %} + +{% block extrajs %} + {{ block.super }} + + +{% endblock %} diff --git a/templates/admin/includes/fieldset.html b/templates/admin/includes/fieldset.html new file mode 100644 index 0000000..0189fc1 --- /dev/null +++ b/templates/admin/includes/fieldset.html @@ -0,0 +1,59 @@ +{% load jazzmin %} +{% if card %} +
+ {% if card_header and fieldset.name %} +
+
+ {{ fieldset.name }}{% if fieldset.description %} - {{ fieldset.description }}{% endif %} +
+
+ {%elif fieldset.description %} +
+
+ {{ fieldset.description }} +
+
+ {%endif%} + +
+{% endif %} + + {% for line in fieldset %} +
+
+ {% for field in line %} + + + {% endfor %} +
+
+ {% endfor %} + +{% if card %} +
+
+{% endif %} \ No newline at end of file diff --git a/templates/admin/includes/object_delete_summary.html b/templates/admin/includes/object_delete_summary.html new file mode 100644 index 0000000..0057af8 --- /dev/null +++ b/templates/admin/includes/object_delete_summary.html @@ -0,0 +1,12 @@ +{% load i18n %} +

{% trans "Summary" %}

+ + + {% for model_name, object_count in model_count %} + + + + + {% endfor %} + +
{{ model_name|capfirst }}{{ object_count }}
diff --git a/templates/admin/index.html b/templates/admin/index.html new file mode 100644 index 0000000..abc77db --- /dev/null +++ b/templates/admin/index.html @@ -0,0 +1,133 @@ +{% extends "admin/base_site.html" %} +{% load i18n static jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block bodyclass %}{{ block.super }} dashboard{% endblock %} + +{% block content_title %} {% trans 'Dashboard' %} {% endblock %} + +{% block breadcrumbs %} + +{% endblock %} + + +{% block content %} + {% get_side_menu using="app_list" as dashboard_list %} + {% if dashboard_list %} + {% widthratio dashboard_list|length 2 1 as middle %} + {% endif %} + +
+
+
+ {% for app in dashboard_list %} +
+
+
{{ app.name }}
+
+
+ + + {% for model in app.models %} + + + + + {% endfor %} + +
+ {% if model.url %}{{ model.name }}{% else %}{{ model.name }}{% endif %} + +
+ {% if model.add_url %} + {% trans 'Add' %} + {% endif %} + {% if model.url %} + {% if model.view_only %} + {% trans 'View' %} + {% else %} + {% if model.custom %}{% trans 'Go' %}{% else %}{% trans 'Change' %}{% endif %} + {% endif %} + {% endif %} +
+
+
+
+ + {% if forloop.counter == middle|add:"0" %} +
+
+ {% endif %} + + {% endfor %} +
+
+ +
+
+ +
+ +{% endblock %} diff --git a/templates/admin/login.html b/templates/admin/login.html new file mode 100644 index 0000000..5c41ffc --- /dev/null +++ b/templates/admin/login.html @@ -0,0 +1,76 @@ +{% extends "registration/base.html" %} + +{% load i18n jazzmin %} +{% get_jazzmin_settings request as jazzmin_settings %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block content %} + +
+ {% csrf_token %} + {% if user.is_authenticated %} +

+

+

+ {% blocktrans trimmed %} + You are authenticated as {{ username }}, but are not authorized to + access this page. Would you like to login to a different account? + {% endblocktrans %} +

+
+

+ {% endif %} + {% if form.errors %} + {% if form.username.errors %} +
+

{{ form.username.label }}: {{ form.username.errors|join:', ' }}

+
+ {% endif %} + {% if form.password.errors %} +
+

{{ form.password.label }}: {{ form.password.errors|join:', ' }}

+
+ {% endif %} + {% if form.non_field_errors %} +
+ {% for error in form.non_field_errors %} +

{{ error }}

+ {% endfor %} +
+ {% endif %} + {% endif %} +
+ +
+
+ +
+
+
+
+ +
+
+ +
+
+
+ {% url 'admin_password_reset' as password_reset_url %} + {% if password_reset_url %} + + {% endif %} +
+
+ +
+
+
+{% endblock %} diff --git a/templates/admin/mptt_filter.html b/templates/admin/mptt_filter.html new file mode 100644 index 0000000..ef78514 --- /dev/null +++ b/templates/admin/mptt_filter.html @@ -0,0 +1,16 @@ +{% load i18n %} +{% load mptt_admin %} + +
+ +
\ No newline at end of file diff --git a/templates/admin/object_history.html b/templates/admin/object_history.html new file mode 100644 index 0000000..9ce281a --- /dev/null +++ b/templates/admin/object_history.html @@ -0,0 +1,72 @@ +{% extends "admin/base_site.html" %} +{% load i18n admin_urls static jazzmin %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block content %} + +
+
+
+
+

+ {% trans 'History' %} +

+
+ +
+
+
+ +
+ + {% for action in action_list reversed %} +
+ {{ action.action_time|date:"DATETIME_FORMAT" }} +
+ + {% action_message_to_list action as action_message_list %} + {% for action_message in action_message_list %} + + {% endfor %} + + {% endfor %} + +
+ + {% if not action_list %} +
+

+ {% trans "This object doesn't have a change history. It probably wasn't added via this admin site." %} +

+
+ {% endif %} +
+
+ +
+
+
+
+
+
+ +{% endblock %} diff --git a/templates/admin/pagination.html b/templates/admin/pagination.html new file mode 100644 index 0000000..a3f4d09 --- /dev/null +++ b/templates/admin/pagination.html @@ -0,0 +1,30 @@ +{% load admin_list jazzmin i18n %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +
+
+ {{ cl.result_count }} + {% if cl.result_count == 1 %} + {{ cl.opts.verbose_name }} + {% else %} + {{ cl.opts.verbose_name_plural }} + {% endif %} + + {% if show_all_url %}   + {% trans 'Show all' %} + {% endif %} + {% if cl.formset and cl.result_count %} + + {% endif %} +
+
+ +
+
    + {% if pagination_required %} + {% for i in page_range %} + {% jazzmin_paginator_number cl i %} + {% endfor %} + {% endif %} +
+
diff --git a/templates/admin/popup_response.html b/templates/admin/popup_response.html new file mode 100644 index 0000000..20fcbfc --- /dev/null +++ b/templates/admin/popup_response.html @@ -0,0 +1,17 @@ +{% load i18n static %} + + + + {% trans 'Popup closing...' %} + + + + \ No newline at end of file diff --git a/templates/admin/search_form.html b/templates/admin/search_form.html new file mode 100644 index 0000000..db22136 --- /dev/null +++ b/templates/admin/search_form.html @@ -0,0 +1,42 @@ +{% load i18n static admin_list jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +
+ +
\ No newline at end of file diff --git a/templates/admin/solo/change_form.html b/templates/admin/solo/change_form.html new file mode 100644 index 0000000..ff667a6 --- /dev/null +++ b/templates/admin/solo/change_form.html @@ -0,0 +1,18 @@ +{% extends "admin/change_form.html" %} +{% load admin_urls i18n jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block breadcrumbs %} + +{% endblock %} + +{% block object-tools-items %} + {% trans 'History' %} + {% if has_absolute_url %} + {% trans "View on site" %} + {% endif %} +{% endblock %} diff --git a/templates/admin/solo/object_history.html b/templates/admin/solo/object_history.html new file mode 100644 index 0000000..ebb6c28 --- /dev/null +++ b/templates/admin/solo/object_history.html @@ -0,0 +1,11 @@ +{% extends "admin/object_history.html" %} +{% load admin_urls i18n %} + +{% block breadcrumbs %} + +{% endblock %} diff --git a/templates/admin/submit_line.html b/templates/admin/submit_line.html new file mode 100644 index 0000000..c3a553e --- /dev/null +++ b/templates/admin/submit_line.html @@ -0,0 +1,42 @@ +{% load i18n admin_urls jazzmin %} +{% get_jazzmin_ui_tweaks as jazzmin_ui %} + +{% block submit-row %} +
+ {% if show_save %} +
+ +
+ {% endif %} + {% if show_delete_link and original %} +
+ {% url opts|admin_urlname:'delete' original.pk|admin_urlquote as delete_url %} + {% trans "Delete" %} +
+ {% endif %} + {% if show_save_as_new %} +
+ +
+ {% endif %} + {% if show_save_and_add_another %} +
+ +
+ {% endif %} + {% if show_save_and_continue %} +
+ +
+ {% endif %} + {% if show_close %} + + {% endif %} + + {% block extra-actions %}{% endblock %} + +
+{% endblock %} + diff --git a/uv.lock b/uv.lock index 372a9c4..1ed04e6 100644 --- a/uv.lock +++ b/uv.lock @@ -41,6 +41,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/39/e3/893e8757be2612e6c266d9bb58ad2e3651524b5b40cf56761e985a28b13e/asgiref-3.8.1-py3-none-any.whl", hash = "sha256:3e1e3ecc849832fe52ccf2cb6686b7a55f82bb1d6aee72a58826471390335e47", size = 23828 }, ] +[[package]] +name = "asttokens" +version = "2.4.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/1d/f03bcb60c4a3212e15f99a56085d93093a497718adf828d050b9d675da81/asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0", size = 62284 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/45/86/4736ac618d82a20d87d2f92ae19441ebc7ac9e7a581d7e58bbe79233b24a/asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24", size = 27764 }, +] + +[[package]] +name = "async-timeout" +version = "4.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/87/d6/21b30a550dafea84b1b8eee21b5e23fa16d010ae006011221f33dcd8d7f8/async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f", size = 8345 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/fa/e01228c2938de91d47b307831c62ab9e4001e747789d0b05baf779a6488c/async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028", size = 5721 }, +] + [[package]] name = "beautifulsoup4" version = "4.12.3" @@ -345,6 +366,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/a2/80/fb7d668f1be5e4443b7ac191f68390be24f7c2ebd36011741f62c7645eb2/cryptography-43.0.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:5b43d1ea6b378b54a1dc99dd8a2b5be47658fe9a7ce0a58ff0b55f4b43ef2b84", size = 2989208 }, ] +[[package]] +name = "decorator" +version = "5.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/0c/8d907af351aa16b42caae42f9d6aa37b900c67308052d10fdce809f8d952/decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330", size = 35016 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d5/50/83c593b07763e1161326b3b8c6686f0f4b0f24d5526546bee538c89837d6/decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186", size = 9073 }, +] + [[package]] name = "deep-translator" version = "1.11.4" @@ -369,16 +399,16 @@ wheels = [ [[package]] name = "django" -version = "5.0" +version = "5.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "asgiref" }, { name = "sqlparse" }, { name = "tzdata", marker = "sys_platform == 'win32'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/be/a6/46e250737d46e955e048f6bbc2948fb22f0de3f3ab828d3803070dc1260e/Django-5.0.tar.gz", hash = "sha256:7d29e14dfbc19cb6a95a4bd669edbde11f5d4c6a71fdaa42c2d40b6846e807f7", size = 10585390 } +sdist = { url = "https://files.pythonhosted.org/packages/1e/0c/d854d25bb74a8a3b41e642bbd27fe6af12fadd0edfd07d487809cf0ef719/Django-5.1.tar.gz", hash = "sha256:848a5980e8efb76eea70872fb0e4bc5e371619c70fffbe48e3e1b50b2c09455d", size = 10681050 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ba/c7/61b02c0ef9e129080a8c2bffefb3cb2b9ddddece4c44dc473c1c4f0647c1/Django-5.0-py3-none-any.whl", hash = "sha256:3a9fd52b8dbeae335ddf4a9dfa6c6a0853a1122f1fb071a8d5eca979f73a05c8", size = 8136382 }, + { url = "https://files.pythonhosted.org/packages/28/b4/110532cebfea2244d76119904da98c6fa045ebb202aee9ec7cbf36ea3cad/Django-5.1-py3-none-any.whl", hash = "sha256:d3b811bf5371a26def053d7ee42a9df1267ef7622323fe70a601936725aa4557", size = 8246099 }, ] [[package]] @@ -431,6 +461,19 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/09/b1/92f1c30b47c1ebf510c35a2ccad9448f73437e5891bbd2b4febe357cc3de/django_filter-24.3-py3-none-any.whl", hash = "sha256:c4852822928ce17fb699bcfccd644b3574f1a2d80aeb2b4ff4f16b02dd49dc64", size = 95011 }, ] +[[package]] +name = "django-htmx" +version = "1.19.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/38/3b5b53b158f3e75da6b68f798514f1b533b0c88f87dd7bb59eb3e4836c32/django_htmx-1.19.0.tar.gz", hash = "sha256:e7e17304e78e07f96eca0affc3ce1806edfdf3538bb7cb1912452b101f3e627d", size = 9791 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/a8/831374e1b117c345ee63690186bfdc56ad0b578b0f5ad2361de65d82757e/django_htmx-1.19.0-py3-none-any.whl", hash = "sha256:875a642814e52278c1728842436beda2001847a493ab79fd82da3fb46ead140f", size = 6904 }, +] + [[package]] name = "django-import-export" version = "4.1.1" @@ -487,6 +530,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/05/ef/a3ad9941f14a13a5dc9f2bdc8992bf21cc09c462c718711a0281acfab67c/django_resized-1.0.2-py3-none-any.whl", hash = "sha256:d55a8d4125838486a1e76ffb689f8364f7d579bc7562b04400065602ec2ba7cc", size = 5141 }, ] +[[package]] +name = "django-sesame" +version = "3.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/88/584aa0c56b0788ef506ca178ba647fc4403b35f4660064dffd43014c3133/django_sesame-3.2.2.tar.gz", hash = "sha256:5d753a309166356b6a0d7fc047690943b9e80b4aa7952f1a6400fe6ce60d573c", size = 17615 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/dd/e7/951f35106972668b61e79635c93933c51c2d58f49a9c8ebf0a8ff7262331/django_sesame-3.2.2-py3-none-any.whl", hash = "sha256:523ebd4d04e28c897c262f25b78b6fd8f37e11cdca6e277fdc8bf496bd686cf5", size = 20289 }, +] + [[package]] name = "django-solo" version = "2.3.0" @@ -512,6 +567,27 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cf/14/20c40882d9ee91f7a2a20d3c0175cf813340c02ae31c975ce567de2c7c67/django_tailwind-3.8.0-py3-none-any.whl", hash = "sha256:fa969c5b95d314b173fe2b2ed2cb2c03f2e2c94fdc2c01ff73a993fa159085da", size = 12936 }, ] +[[package]] +name = "django-unfold" +version = "0.39.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/4c/808b551f5c75d24c0a6aabf3275c6f661e0b0ab24bd50236fb13b2b16feb/django_unfold-0.39.0.tar.gz", hash = "sha256:927218e8a14f951dd82212a980f3f02608a160f966da656d13ef51be887a610c", size = 811917 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4f/41/855b6d650bf11455e697948f194780d6704e89a2965b18985a5277172099/django_unfold-0.39.0-py3-none-any.whl", hash = "sha256:5393742d0755fc3983ee805ac27213cb7abbe06b563a0cdfd24103ff22480322", size = 877521 }, +] + +[[package]] +name = "django-vite-plugin" +version = "3.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3a/ec/24786da10b7d32906e99e22f6312333b51fb3d6322647d056ef090d99e64/django_vite_plugin-3.0.4.tar.gz", hash = "sha256:e5964597daa53ad5992f23e99e61dc4168c07ed51077851a3e3f02989697d41c", size = 5825 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/e0/4bc110d278d213d3dbccfac6d6f8ab229199d1876251eaa7e7f945de251a/django_vite_plugin-3.0.4-py3-none-any.whl", hash = "sha256:5cc0425cd9a56afc0d1d27d5016e61a6929ad93024307af4195e4b25db340574", size = 8569 }, +] + [[package]] name = "django-webpack-loader" version = "3.1.1" @@ -533,6 +609,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/7c/b6/fa99d8f05eff3a9310286ae84c4059b08c301ae4ab33ae32e46e8ef76491/djangorestframework-3.15.2-py3-none-any.whl", hash = "sha256:2b8871b062ba1aefc2de01f773875441a961fefbf79f5eed1e32b2f096944b20", size = 1071235 }, ] +[[package]] +name = "exceptiongroup" +version = "1.2.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/09/35/2495c4ac46b980e4ca1f6ad6db102322ef3ad2410b79fdde159a4b0f3b92/exceptiongroup-1.2.2.tar.gz", hash = "sha256:47c2edf7c6738fafb49fd34290706d1a1a2f4d1c6df275526b62cbb4aa5393cc", size = 28883 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/cc/b7e31358aac6ed1ef2bb790a9746ac2c69bcb3c8588b41616914eb106eaf/exceptiongroup-1.2.2-py3-none-any.whl", hash = "sha256:3111b9d131c238bec2f8f516e123e14ba243563fb135d3fe885990585aa7795b", size = 16453 }, +] + +[[package]] +name = "executing" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8c/e3/7d45f492c2c4a0e8e0fad57d081a7c8a0286cdd86372b070cca1ec0caa1e/executing-2.1.0.tar.gz", hash = "sha256:8ea27ddd260da8150fa5a708269c4a10e76161e2496ec3e587da9e3c0fe4b9ab", size = 977485 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b5/fd/afcd0496feca3276f509df3dbd5dae726fcc756f1a08d9e25abe1733f962/executing-2.1.0-py2.py3-none-any.whl", hash = "sha256:8d63781349375b5ebccc3142f4b30350c0cd9c79f921cde38be2be4637e98eaf", size = 25805 }, +] + [[package]] name = "firebase-admin" version = "6.5.0" @@ -575,18 +669,24 @@ dependencies = [ { name = "django-ckeditor" }, { name = "django-cors-headers" }, { name = "django-filter" }, + { name = "django-htmx" }, { name = "django-import-export" }, { name = "django-jazzmin" }, { name = "django-loginas" }, { name = "django-resized" }, + { name = "django-sesame" }, { name = "django-solo" }, { name = "django-tailwind" }, + { name = "django-unfold" }, + { name = "django-vite-plugin" }, { name = "djangorestframework" }, { name = "firebase-admin" }, + { name = "ipython" }, { name = "mysqlclient" }, { name = "pillow" }, { name = "pip" }, { name = "python-dotenv" }, + { name = "redis" }, { name = "stellar-sdk" }, ] @@ -603,22 +703,28 @@ dev = [ requires-dist = [ { name = "celery", specifier = ">=5.4.0" }, { name = "deep-translator", specifier = ">=1.11.4" }, - { name = "django", specifier = "==5.0" }, + { name = "django", specifier = "==5.1" }, { name = "django-ckeditor", specifier = ">=6.7.1" }, { name = "django-cors-headers", specifier = ">=4.4.0" }, { name = "django-filter", specifier = ">=24.3" }, + { name = "django-htmx", specifier = ">=1.19.0" }, { name = "django-import-export", specifier = ">=4.1.1" }, { name = "django-jazzmin", specifier = ">=3.0.0" }, { name = "django-loginas", specifier = ">=0.3.11" }, { name = "django-resized", specifier = ">=1.0.2" }, + { name = "django-sesame", specifier = ">=3.2.2" }, { name = "django-solo", specifier = ">=2.3.0" }, { name = "django-tailwind", specifier = ">=3.8.0" }, + { name = "django-unfold", specifier = ">=0.39.0" }, + { name = "django-vite-plugin", specifier = ">=3.0.4" }, { name = "djangorestframework", specifier = ">=3.15.2" }, { name = "firebase-admin", specifier = ">=6.5.0" }, + { name = "ipython", specifier = ">=8.27.0" }, { name = "mysqlclient", specifier = ">=2.2.4" }, { name = "pillow", specifier = ">=10.4.0" }, { name = "pip", specifier = ">=24.2" }, { name = "python-dotenv", specifier = ">=1.0.1" }, + { name = "redis", specifier = ">=5.0.8" }, { name = "stellar-sdk", specifier = ">=11.0.0" }, ] @@ -862,6 +968,28 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl", hash = "sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3", size = 70442 }, ] +[[package]] +name = "ipython" +version = "8.27.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'emscripten' and sys_platform != 'win32'" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "stack-data" }, + { name = "traitlets" }, + { name = "typing-extensions", marker = "python_full_version < '3.12'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/57/24/d4fabaca03c8804bf0b8d994c8ae3a20e57e9330d277fb43d83e558dec5e/ipython-8.27.0.tar.gz", hash = "sha256:0b99a2dc9f15fd68692e898e5568725c6d49c527d36a9fb5960ffbdeaa82ff7e", size = 5494984 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/a2/6c725958e6f135d8e5de081e69841bb2c1d84b3fc259d02eb092b8fc203a/ipython-8.27.0-py3-none-any.whl", hash = "sha256:f68b3cb8bde357a5d7adc9598d57e22a45dfbea19eb6b98286fa3b288c9cd55c", size = 818986 }, +] + [[package]] name = "isort" version = "5.13.2" @@ -871,6 +999,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d1/b3/8def84f539e7d2289a02f0524b944b15d7c75dab7628bedf1c4f0992029c/isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6", size = 92310 }, ] +[[package]] +name = "jedi" +version = "0.19.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d6/99/99b493cec4bf43176b678de30f81ed003fd6a647a301b9c927280c600f0a/jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd", size = 1227821 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/20/9f/bc63f0f0737ad7a60800bfd472a4836661adae21f9c2535f3957b1e54ceb/jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0", size = 1569361 }, +] + [[package]] name = "kombu" version = "5.4.1" @@ -884,6 +1024,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/c1/78/c556bf2954bd36f166959ac33d23cde4a8967e61cdb74678585a66edbae0/kombu-5.4.1-py3-none-any.whl", hash = "sha256:621d365f234e4c089596f3a2510f1ade07026efc28caca426161d8f458786cab", size = 201338 }, ] +[[package]] +name = "matplotlib-inline" +version = "0.1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/99/5b/a36a337438a14116b16480db471ad061c36c3694df7c2084a0da7ba538b7/matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90", size = 8159 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8f/8e/9ad090d3553c280a8060fbf6e24dc1c0c29704ee7d1c372f0c174aa59285/matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca", size = 9899 }, +] + [[package]] name = "mccabe" version = "0.7.0" @@ -984,6 +1136,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 }, ] +[[package]] +name = "parso" +version = "0.8.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/66/94/68e2e17afaa9169cf6412ab0f28623903be73d1b32e208d9e8e541bb086d/parso-0.8.4.tar.gz", hash = "sha256:eb3a7b58240fb99099a345571deecc0f9540ea5f4dd2fe14c2a99d6b281ab92d", size = 400609 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c6/ac/dac4a63f978e4dcb3c6d3a78c4d8e0192a113d288502a1216950c41b1027/parso-0.8.4-py2.py3-none-any.whl", hash = "sha256:a418670a20291dacd2dddc80c377c5c3791378ee1e8d12bffc35420643d43f18", size = 103650 }, +] + [[package]] name = "pathspec" version = "0.12.1" @@ -993,6 +1154,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08", size = 31191 }, ] +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772 }, +] + [[package]] name = "pillow" version = "10.4.0" @@ -1108,6 +1281,24 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/51/3d/71fae0078424ba8ea70b222b6fa56ef771a9918ab91cee806c2abc9d57fa/protobuf-5.28.1-py3-none-any.whl", hash = "sha256:c529535e5c0effcf417682563719e5d8ac8d2b93de07a56108b4c2d436d7a29a", size = 169572 }, ] +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993 }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842 }, +] + [[package]] name = "pyasn1" version = "0.6.1" @@ -1237,6 +1428,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/d4/d7/f1b7db88d8e4417c5d47adad627a93547f44bdc9028372dbd2313f34a855/pyflakes-3.2.0-py2.py3-none-any.whl", hash = "sha256:84b5be138a2dfbb40689ca07e2152deb896a65c3a3e24c251c5c62489568074a", size = 62725 }, ] +[[package]] +name = "pygments" +version = "2.18.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8e/62/8336eff65bcbc8e4cb5d05b55faf041285951b6e80f33e2bff2024788f31/pygments-2.18.0.tar.gz", hash = "sha256:786ff802f32e91311bff3889f6e9a86e81505fe99f2735bb6d60ae0c5004f199", size = 4891905 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f7/3f/01c8b82017c199075f8f788d0d906b9ffbbc5a47dc9918a945e13d5a2bda/pygments-2.18.0-py3-none-any.whl", hash = "sha256:b8e6aca0523f3ab76fee51799c488e38782ac06eafcf95e7ba832985c8e7b13a", size = 1205513 }, +] + [[package]] name = "pyjwt" version = "2.9.0" @@ -1301,6 +1501,18 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/6a/3e/b68c118422ec867fa7ab88444e1274aa40681c606d59ac27de5a5588f082/python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a", size = 19863 }, ] +[[package]] +name = "redis" +version = "5.0.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout", marker = "python_full_version < '3.11.3'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/10/defc227d65ea9c2ff5244645870859865cba34da7373477c8376629746ec/redis-5.0.8.tar.gz", hash = "sha256:0c5b10d387568dfe0698c6fad6615750c24170e548ca2deac10c649d463e9870", size = 4595651 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c5/d1/19a9c76811757684a0f74adc25765c8a901d67f9f6472ac9d57c844a23c8/redis-5.0.8-py3-none-any.whl", hash = "sha256:56134ee08ea909106090934adc36f65c9bcbbaecea5b21ba704ba6fb561f8eb4", size = 255608 }, +] + [[package]] name = "requests" version = "2.32.3" @@ -1367,6 +1579,20 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/5d/a5/b2860373aa8de1e626b2bdfdd6df4355f0565b47e51f7d0c54fe70faf8fe/sqlparse-0.5.1-py3-none-any.whl", hash = "sha256:773dcbf9a5ab44a090f3441e2180efe2560220203dc2f8c0b0fa141e18b505e4", size = 44156 }, ] +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521 }, +] + [[package]] name = "stellar-sdk" version = "11.0.0" @@ -1412,6 +1638,15 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757 }, ] +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359 }, +] + [[package]] name = "typing-extensions" version = "4.12.2" diff --git a/vite.config.js b/vite.config.js new file mode 100644 index 0000000..2be9e8a --- /dev/null +++ b/vite.config.js @@ -0,0 +1,12 @@ +//vite.config.js +import { defineConfig } from 'vite' +import { djangoVitePlugin } from 'django-vite-plugin' + +export default defineConfig({ + plugins: [ + djangoVitePlugin([ + 'jsvite/js/main.js', + // 'templatevite/css/style.css', + ]) + ], +}); \ No newline at end of file diff --git a/webpack-stats.json b/webpack-stats.json deleted file mode 100644 index 7c64e2d..0000000 --- a/webpack-stats.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "status": "done", - "assets": { - "main.js": { - "name": "main.js", - "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\main.js", - "publicPath": "auto" - }, - "main.js.LICENSE.txt": { - "name": "main.js.LICENSE.txt", - "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\main.js.LICENSE.txt", - "publicPath": "auto" - }, - "other.js": { - "name": "other.js", - "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\other.js", - "publicPath": "auto" - }, - "other.js.LICENSE.txt": { - "name": "other.js.LICENSE.txt", - "path": "D:\\Project\\Upload\\geraipi_test\\static\\webpack_bundles\\other.js.LICENSE.txt", - "publicPath": "auto" - } - }, - "chunks": { - "main": [ - "main.js" - ], - "other": [ - "other.js" - ] - }, - "publicPath": "auto" -} \ No newline at end of file diff --git a/webpack.config.js b/webpack.config.js deleted file mode 100644 index 1f7d44d..0000000 --- a/webpack.config.js +++ /dev/null @@ -1,47 +0,0 @@ -var path = require("path"); -var BundleTracker = require("webpack-bundle-tracker"); -const FileManagerPlugin = require('filemanager-webpack-plugin'); - -module.exports = { - context: __dirname, - entry: { - main: "./assets/js/index", - other: "./assets/js/other", - }, - output: { - path: path.resolve(__dirname, "static/webpack_bundles/"), - publicPath: "auto", - filename: "[name].js", - }, - - plugins: [ - new BundleTracker({ path: __dirname, filename: "webpack-stats.json" }), - new FileManagerPlugin({ - events: { - onEnd: { - copy: [{ - source: './static/webpack_bundles/other.js', - destination: './frontend/templates/firebase-messaging-sw.js', - }], - }, - } - }), - ], - - module: { - rules: [ - // we pass the output from babel loader to react-hot loader - { - test: /\.jsx?$/, - exclude: /node_modules/, - use: { - loader: "babel-loader", - }, - }, - ], - }, - - resolve: { - extensions: [".js", ".jsx"], - }, -}; \ No newline at end of file