diff --git a/assets/css/app.css b/assets/css/app.css index e403b27..77042bb 100644 --- a/assets/css/app.css +++ b/assets/css/app.css @@ -19,7 +19,7 @@ } }*/ -@import url('http://fonts.cdnfonts.com/css/noto-sans'); +@import url('https://fonts.cdnfonts.com/css/noto-sans'); * { --hover-color: #f18902; diff --git a/assets/images/favicon.ico b/assets/images/favicon.ico new file mode 100644 index 0000000..e69de29 diff --git a/assets/templates/account.html b/assets/templates/account.html index 470e9a9..a423956 100644 --- a/assets/templates/account.html +++ b/assets/templates/account.html @@ -6,6 +6,7 @@ + diff --git a/client/dist/app.js b/client/dist/app.js new file mode 100644 index 0000000..2031dcc --- /dev/null +++ b/client/dist/app.js @@ -0,0 +1,1167 @@ +const S = Symbol(); +const FORM_STYLE = ` +form { + display: block; +} +form.inline { + display: flex; + justify-content: space-between; +} +form > div { + display: block; + margin-bottom: 1rem; +} +input, textarea { + font-size: 16px; + + border: none; + border-bottom-style: none; + border-bottom-width: medium; + border-bottom: 1px solid rgba(0,0,0,.1); + border-radius: 2px; + padding: 0; + + height: 36px; + background: #fff; + color: rgba(0,0,0,.8); + font-size: 14px; + + box-shadow: none !important; + + display: block; + width: 100%; + height: calc(1.5em + 0.75rem + 2px); + padding: .375rem .75rem; + font-size: 1rem; + font-weight: 400; + line-height: 1.5; + color: #495057; + background-clip: padding-box; + transition: border-color .15s ease-in-out , -webkit-box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out , box-shadow .15s ease-in-out; + transition: border-color .15s ease-in-out , box-shadow .15s ease-in-out , -webkit-box-shadow .15s ease-in-out; +} +input[type="text"], +input[type="number"], +input[type="email"], +input[type="password"], +textarea { + width: calc(100% - 1.5rem - 2px); +} +label { + color: #000; + text-transform: uppercase; + font-size: 12px; + font-weight: 600; + + display: inline-block; + margin-bottom: .5rem; +} +input[type="button"], input[type="submit"] { + padding: 12px 16px; + cursor: pointer; + border: none; + border-width: 1px; + border-radius: 5px; + font-size: 14px; + font-weight: 400; + box-shadow: 0 10px 20px -6px rgba(0,0,0,.12); + position: relative; + margin-bottom: 20px; + transition: .3s; + + background: #46b5d1; + color: #fff; + + display: inline-block; + font-weight: 400; + text-align: center; + vertical-align: middle; + user-select: none; + padding: .375rem .75rem; + font-size: 1rem; + line-height: 1.5; + transition: color .15s ease-in-out, + background-color .15s ease-in-out, + border-color .15s ease-in-out, + box-shadow .15s ease-in-out, + width: auto; + height: calc(1.5em + 0.75rem + 2px); + padding: .375rem .75rem; +} +`; +class PseudoForm extends HTMLElement { + reportValidity() { + return this[S].querySelector("form").reportValidity(); + } + checkValidity() { + return this[S].querySelector("form").checkValidity(); + } + get elements() { + return this[S].querySelector("form").elements; + } +} +const fireFbReady = ()=>{ + for (let c of (b = !0, a))c(); +}; +const runFbReady = (c)=>{ + b ? c() : a.push(c); +}; +let a = [], b = !1; +customElements.define("form-navigation", class extends HTMLElement { + static get observedAttributes() { + return [ + "next", + "prev" + ]; + } + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ + +
+
+ `, c.querySelector("#prev").addEventListener("click", (a)=>{ + a.stopPropagation(), a.preventDefault(), this.dispatchEvent(new CustomEvent("form:prev", { + bubbles: !0, + composed: !0, + detail: this.parentElement + })); + }), c.querySelector("#next").addEventListener("click", (a)=>{ + a.stopPropagation(), a.preventDefault(), this.dispatchEvent(new CustomEvent("form:next", { + bubbles: !0, + composed: !0, + detail: this.parentElement + })); + }); + } + attributeChangedCallback(b, c, d) { + if (c !== d) switch(b){ + case "next": + this[S].querySelector("#next").className = "hidden" === d ? "hidden" : ""; + break; + case "prev": + this[S].querySelector("#prev").className = "hidden" === d ? "hidden" : ""; + } + } +}); +customElements.define("local-service", class extends HTMLElement { + static get observedAttributes() { + return [ + "name", + "service-id", + "state" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + +

+ +
+ +
+ `; + } + connectedCallback() { + this[S].querySelector("#name").textContent = this.getAttribute("name"); + } + attributeChangedCallback(b, c, d) { + if (c !== d && "name" === b) return this[S].querySelector("#name").textContent = d; + } + get name() { + return this.getAttribute("name") || ""; + } +}); +customElements.define("local-service-item", class extends HTMLElement { + static get observedAttributes() { + return [ + "name", + "price" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + +
+

+ +
+ `; + } + connectedCallback() { + this[S].querySelector("#name").textContent = this.getAttribute("name"), this[S].querySelector("#price").value = this.price(); + } + attributeChangedCallback(b, c, d) { + if (c !== d) switch(b){ + case "name": + return this[S].querySelector("#name").textContent = d; + case "price": + return this[S].querySelector("#price").value = d; + } + } + price(a) { + let b = parseInt(a || this.getAttribute("price")); + return isNaN(b) ? 0 : b; + } +}); +customElements.define("local-services", class extends HTMLElement { + static get observedAttributes() { + return [ + "filter" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + +
+ +
+
+ +
+ `; + { + let c = b.querySelector("#filter"), d = null; + c.addEventListener("change", (a)=>{ + a.stopPropagation(), this.filter = a.target.value; + }), c.addEventListener("keyup", (a)=>{ + a.stopPropagation(); + let b = a.target.value; + d && clearTimeout(d), d = setTimeout(()=>{ + this.filter = b, d = null; + }, 1000 / 3); + }); + } + } + connectedCallback() { + this.filter = this.getAttribute("filter"); + } + attributeChangedCallback(a, b, c) { + if (b !== c && "filter" === a) return this.filter = c; + } + get filter() { + return this.getAttribute("filter"); + } + set filter(a) { + if (a && "" !== a) for (let b of (this.setAttribute("filter", a), this.querySelectorAll("local-service")))b.name && (b.name.includes(a) ? b.setAttribute("local-services-visible", "visible") : b.setAttribute("local-services-visible", "invisible")); + else for (let c of (this.removeAttribute("filter"), this.querySelectorAll("local-service")))c.removeAttribute("local-services-visible"); + } +}); +customElements.define("login-form", class extends HTMLElement { + static get observedAttributes() { + return []; + } + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ + +
+
+ + +
+
+ +
+
+ `; + } + connectedCallback() {} + attributeChangedCallback(a, b, c) { + if (b === c) return; + } +}); +customElements.define("ow-account", class extends HTMLElement { + static get observedAttributes() { + return [ + "mode" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + +
+ + +
+ Nie masz konta? Utwórz nowe +
+
+ Masz konta? Zaloguj się +
+
+ `, b.querySelector("#switch-login > a").addEventListener("click", (a)=>{ + a.stopPropagation(), a.preventDefault(), this.mode = "login"; + }), b.querySelector("#switch-register > a").addEventListener("click", (a)=>{ + a.stopPropagation(), a.preventDefault(), this.mode = "register"; + }); + } + connectedCallback() { + this.mode = "login"; + } + attributeChangedCallback(a, b, c) { + if (b === c) return; + } + get mode() { + return this.getAttribute("mode"); + } + set mode(a) { + a = "login" === a || "register" === a ? a : "login", this.setAttribute("mode", a); + } +}); +customElements.define("ow-nav", class extends HTMLElement { + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + +
+ +
+ `; + } +}); +customElements.define("ow-path", class extends HTMLElement { + static get observedAttributes() { + return [ + "selected", + "path" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + + + `; + } + connectedCallback() { + this.selected = this.getAttribute("selected"); + } + attributeChangedCallback(a, b, c) { + if (b !== c) switch(a){ + case "selected": + return this.selected = c; + case "path": + return this.path = c; + } + } + get selected() { + return "selected" === this.getAttribute("selected"); + } + set selected(a) { + "selected" === a ? this.setAttribute("selected", "selected") : this.removeAttribute("selected"); + } + get path() { + return this.getAttribute("path") || ""; + } + set path(b) { + if (!b || "" === b) { + this.removeAttribute("path"); + return; + } + this.setAttribute("path", b), this[S].querySelector("a").setAttribute("href", b); + } +}); +customElements.define("price-view", class extends HTMLElement { + static get observedAttributes() { + return [ + "value", + "currency" + ]; + } + constructor(){ + super(); + let b = this[S] = this.attachShadow({ + mode: "closed" + }); + b.innerHTML = ` + + + `; + } + connectedCallback() { + this[S].querySelector("#price").textContent = this.formatted; + } + attributeChangedCallback(a, b, c) { + b !== c && "price" === a && (this.value = c); + } + get formatted() { + let a = this.value, b = a % 100; + return `${Math.ceil(a / 100)},${b < 10 ? `0${b}` : b}${this.currency}`; + } + get value() { + let a = parseInt(this.getAttribute("value")); + return isNaN(a) ? 0 : a; + } + set value(b) { + this.setAttribute("value", b), this[S].querySelector("#price").textContent = this.formatted; + } + get currency() { + return this.getAttribute("currency") || "PLN"; + } +}); +customElements.define("price-input", class extends HTMLElement { + static get observedAttributes() { + return [ + "value", + "currency", + "required", + "name" + ]; + } + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+ + +
+ `; + } + connectedCallback() { + this[S].querySelector("#currency").textContent = this.currency; + } + attributeChangedCallback(b, c, d) { + if (c === d) return; + let e = this[S].querySelector("#price"); + switch(b){ + case "price": + this.value = d; + break; + case "currency": + this.currency = d; + break; + case "required": + d ? e.setAttribute("required", "required") : e.removeAttribute("required"); + break; + case "readonly": + d ? e.setAttribute("readonly", "readonly") : e.removeAttribute("readonly"); + } + } + get value() { + return 100 * this[S].querySelector("#price").value; + } + set value(b) { + this.setAttribute("value", b), this[S].querySelector("#price").value = b; + } + get currency() { + return this.getAttribute("currency") || "PLN"; + } + set currency(b) { + this.setAttribute("currency", b), this[S].querySelector("#currency").textContent = this.currency; + } + reportValidity() { + return this[S].querySelector("input").reportValidity(); + } + get name() { + return this.getAttribute("name"); + } + set name(a) { + this.setAttribute("name", a); + } +}); +customElements.define("register-basic-form", class extends PseudoForm { + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ + +
+
+ + +
+
+ + +
+ +
+ `; + let d = c.querySelector("form"); + d.addEventListener("submit", (a)=>{ + a.preventDefault(), a.stopPropagation(), this.dispatchEvent(new CustomEvent("form:next", { + bubbles: !0, + composed: !0, + detail: d + })); + }); + } +}); +customElements.define("register-item-form-row", class extends PseudoForm { + static get observedAttributes() { + return [ + "idx", + "name" + ]; + } + constructor(){ + super(), this[S] = this.attachShadow({ + mode: "closed" + }), this.addEventListener("item:removed", ()=>{ + this.setAttribute("removed", "removed"); + let a = this.parentElement; + this.remove(), a.dispatchEvent(new CustomEvent("item:removed", { + bubbles: !0, + composed: !0 + })); + }); + } + connectedCallback() { + let c = this.getAttribute("idx"); + this[S].innerHTML = ` + +
+
+ + +
+
+ + + +
+
+
+ `, this[S].querySelector("form").addEventListener("submit", (a)=>{ + a.preventDefault(), a.stopPropagation(), this.reportValidity(); + }), this[S].querySelector(".remove").addEventListener("click", (a)=>{ + a.preventDefault(), a.stopPropagation(), this.dispatchEvent(new CustomEvent("item:removed", { + bubbles: !0, + composed: !1 + })); + }); + } + attributeChangedCallback(a, b, c) { + b !== c && "idx" === a && this.updateNames(); + } + get inputs() { + return [ + this[S].querySelector("input.item-name").cloneNode(!0), + this[S].querySelector("input.item-price").cloneNode(!0), + ]; + } + updateNames() { + let b = this.getAttribute("idx"); + for (let c of this[S].querySelectorAll(".field")){ + let d = c.id; + c.querySelector("input, price-input").setAttribute("name", `items[${b}][${d}]`); + } + } + get idx() { + return this.getAttribute("idx"); + } + set idx(a) { + this.setAttribute("idx", a); + } + reportValidity() { + return super.reportValidity() && this[S].querySelector("price-input").reportValidity(); + } +}); +let d = (a)=>{ + let b = 0; + for (let c of a.querySelectorAll("register-item-form-row"))c.idx = b++; + return b; +}; +customElements.define("register-items-form", class extends PseudoForm { + static get observedAttributes() { + return []; + } + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ +
+
+ +
+ +
+ `, this.addEventListener("item:removed", (a)=>{ + a.stopPropagation(), d(this); + }), this.addEventListener("form:next", (a)=>{ + for (let b of this.querySelectorAll("item-form-row"))b.reportValidity() || (a.stopPropagation(), a.preventDefault()); + }), c.querySelector("#add-item").addEventListener("click", (a)=>{ + a.stopPropagation(), a.preventDefault(), this.appendChild(document.createElement("register-item-form-row")), d(this); + }); + } + get inputs() { + return [ + ...this.querySelectorAll("register-item-form-row") + ].map((a)=>a.inputs); + } +}); +customElements.define("register-company-form", class extends PseudoForm { + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ +
+
+ + +
+ +
+ `; + } +}); +customElements.define("register-submit-form", class extends PseudoForm { + constructor(){ + super(); + let c = this[S] = this.attachShadow({ + mode: "closed" + }); + c.innerHTML = ` + +
+
+ + + + + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+
+ +
+ + +
+
+ `; + } + updateField(a, c) { + this[S].querySelector(`[id="hidden-${a}"]`).value = c, this[S].querySelector(`[id="preview-${a}"]`).value = c; + } + setItems(a) { + let c = this[S].querySelector("#items"); + for (let d of (c.innerHTML = "", a)){ + let e = c.appendChild(document.createElement("div")), [f, g] = d; + f.setAttribute("readonly", "readonly"), e.appendChild(f), e.appendChild(document.createElement("price-view")).value = g.value, g.setAttribute("readonly", "readonly"), g.setAttribute("type", "hidden"), e.appendChild(g); + } + } +}); +customElements.define("register-user-type", class extends HTMLElement { + constructor(){ + super(); + let a = this.attachShadow({ + mode: "closed" + }); + a.innerHTML = ` + +
+ +
+ `; + let b = a.querySelector("#user"); + b.addEventListener("click", (a)=>{ + a.preventDefault(), a.stopPropagation(), this.dispatchEvent(new CustomEvent("account:type:user", { + bubbles: !0, + composed: !0 + })); + }); + let c = a.querySelector("#local-service"); + c.addEventListener("click", (a)=>{ + a.preventDefault(), a.stopPropagation(), this.dispatchEvent(new CustomEvent("account:type:local-service", { + bubbles: !0, + composed: !0 + })); + }); + } +}); +customElements.define("register-oauth2", class extends HTMLElement { + static get observedAttributes() { + return [ + "fb-connected" + ]; + } + constructor(){ + super(); + let a = this.attachShadow({ + mode: "closed" + }); + a.innerHTML = ` + + + +
+Rejestracja adresem e-mail +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + + `; + } + connectedCallback() { + runFbReady(()=>{ + FB.getLoginStatus(({ status: a })=>{ + "connected" !== a ? FB.login() : this.setAttribute("fb-connected", "1"); + }); + }); + } +}); +let c = (a, b)=>{ + for (let c of (a.reportValidity(), a.elements))if ("" !== c.name && !c.reportValidity()) return !1; + let d = a.inputs; + if (d) b.setItems(d); + else for (let e of a.elements)"" !== e.name && b.updateField(e.name, e.value); + return !0; +}; +customElements.define("register-form", class extends HTMLElement { + static get observedAttributes() { + return [ + "step" + ]; + } + constructor(){ + super(); + let d = this[S] = this.attachShadow({ + mode: "closed" + }); + d.innerHTML = ` + +
+ + + + + + + + + + + + + + + + + +
+ `; + let e = d.querySelector("#step-4"); + this[S].addEventListener("account:type:user", (a)=>{ + a.stopPropagation(), this.step = 1000; + }), this[S].addEventListener("account:type:local-service", (a)=>{ + a.stopPropagation(), this.step = 1; + }), this[S].addEventListener("form:next", (a)=>{ + a.stopPropagation(); + let b = d.querySelector(`#step-${this.step}`); + c(b, e) && (this.step = this.step + 1); + }), this[S].addEventListener("form:prev", (a)=>{ + a.stopPropagation(), this.step = this.step - 1; + }), e.addEventListener("submit", (a)=>{ + a.preventDefault(), a.stopPropagation(); + }); + } + connectedCallback() { + this.step = 0; + } + attributeChangedCallback(a, b, c) { + if (b === c) return; + } + get step() { + let a = parseInt(this.getAttribute("step")); + return isNaN(a) ? 1 : a; + } + set step(a) { + a < 0 || this.setAttribute("step", a); + } +}); +if (window.fbAsyncInit = ()=>{ + FB.init({ + appId: "1293538251053124", + cookie: !0, + xfbml: !0, + version: "v14.0" + }), FB.AppEvents.logPageView(), fireFbReady(); +}, !document.querySelector("#facebook-jssdk")) { + let b1 = document.createElement("script"); + b1.id = "facebook-jssdk", b1.src = "https://connect.facebook.net/en_US/sdk.js", document.head.appendChild(b1); +} diff --git a/client/dist/app.js.map b/client/dist/app.js.map new file mode 100644 index 0000000..1bcef7c --- /dev/null +++ b/client/dist/app.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["/home/eraden/code/eraden/oswilno/client/src/shared.js","/home/eraden/code/eraden/oswilno/client/src/form-navigation.js","/home/eraden/code/eraden/oswilno/client/src/local-service.js","/home/eraden/code/eraden/oswilno/client/src/local-service-item.js","/home/eraden/code/eraden/oswilno/client/src/local-services.js","/home/eraden/code/eraden/oswilno/client/src/login-form.js","/home/eraden/code/eraden/oswilno/client/src/ow-account.js","/home/eraden/code/eraden/oswilno/client/src/ow-nav.js","/home/eraden/code/eraden/oswilno/client/src/ow-path.js","/home/eraden/code/eraden/oswilno/client/src/price/price-view.js","/home/eraden/code/eraden/oswilno/client/src/price/price-input.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-basic-form.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-item-form-row.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-items-form.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-company-form.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-submit-form.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-user-type.js","/home/eraden/code/eraden/oswilno/client/src/register-form/register-oauth2.js","/home/eraden/code/eraden/oswilno/client/src/register-form.js","/home/eraden/code/eraden/oswilno/client/src/app.js"],"sourcesContent":["export const S = Symbol();\n\nexport const FORM_STYLE = `\nform {\n display: block;\n}\nform.inline {\n display: flex;\n justify-content: space-between;\n}\nform > div {\n display: block;\n margin-bottom: 1rem;\n}\ninput, textarea {\n font-size: 16px;\n\n border: none;\n border-bottom-style: none;\n border-bottom-width: medium;\n border-bottom: 1px solid rgba(0,0,0,.1);\n border-radius: 2px;\n padding: 0;\n \n height: 36px;\n background: #fff;\n color: rgba(0,0,0,.8);\n font-size: 14px;\n \n box-shadow: none !important;\n\n display: block;\n width: 100%;\n height: calc(1.5em + 0.75rem + 2px);\n padding: .375rem .75rem;\n font-size: 1rem;\n font-weight: 400;\n line-height: 1.5;\n color: #495057;\n background-clip: padding-box;\n transition: border-color .15s ease-in-out , -webkit-box-shadow .15s ease-in-out;\n transition: border-color .15s ease-in-out , box-shadow .15s ease-in-out;\n transition: border-color .15s ease-in-out , box-shadow .15s ease-in-out , -webkit-box-shadow .15s ease-in-out;\n}\ninput[type=\"text\"],\ninput[type=\"number\"],\ninput[type=\"email\"],\ninput[type=\"password\"],\ntextarea {\n width: calc(100% - 1.5rem - 2px);\n}\nlabel {\n color: #000;\n text-transform: uppercase;\n font-size: 12px;\n font-weight: 600;\n \n display: inline-block;\n margin-bottom: .5rem;\n}\ninput[type=\"button\"], input[type=\"submit\"] {\n padding: 12px 16px;\n cursor: pointer;\n border: none;\n border-width: 1px;\n border-radius: 5px;\n font-size: 14px;\n font-weight: 400;\n box-shadow: 0 10px 20px -6px rgba(0,0,0,.12);\n position: relative;\n margin-bottom: 20px;\n transition: .3s;\n \n background: #46b5d1;\n color: #fff;\n \n display: inline-block;\n font-weight: 400;\n text-align: center;\n vertical-align: middle;\n user-select: none;\n padding: .375rem .75rem;\n font-size: 1rem;\n line-height: 1.5;\n transition: color .15s ease-in-out,\n background-color .15s ease-in-out,\n border-color .15s ease-in-out,\n box-shadow .15s ease-in-out,\n width: auto;\n height: calc(1.5em + 0.75rem + 2px);\n padding: .375rem .75rem;\n}\n`;\n\nexport class PseudoForm extends HTMLElement {\n reportValidity() {\n return this[S].querySelector('form').reportValidity();\n }\n\n checkValidity() {\n return this[S].querySelector('form').checkValidity();\n }\n\n get elements() {\n return this[S].querySelector('form').elements;\n }\n}\n\nexport const fireFbReady = () => {\n fbReady = true;\n for (const fn of fbQueue) fn();\n};\nexport const runFbReady = (fn) => {\n if (!fbReady) fbQueue.push(fn);\n else fn();\n};\nconst fbQueue = [];\nlet fbReady = false;\n","import { S, FORM_STYLE } from \"./shared\";\n\ncustomElements.define('form-navigation', class extends HTMLElement {\n static get observedAttributes() {\n return ['next', 'prev']\n }\n\n constructor() {\n super();\n\n const shadow = this[S] = this.attachShadow({ mode: \"closed\" });\n shadow.innerHTML = `\n \n
\n
\n \n \n
\n
\n `;\n shadow.querySelector('#prev').addEventListener('click', ev => {\n ev.stopPropagation();\n ev.preventDefault();\n this.dispatchEvent(new CustomEvent('form:prev', {\n bubbles: true,\n composed: true,\n detail: this.parentElement\n }));\n });\n shadow.querySelector('#next').addEventListener('click', ev => {\n ev.stopPropagation();\n ev.preventDefault();\n this.dispatchEvent(new CustomEvent('form:next', {\n bubbles: true,\n composed: true,\n detail: this.parentElement\n }));\n });\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'next': {\n this[S].querySelector('#next').className = newV === 'hidden' ? 'hidden' : '';\n break;\n }\n case 'prev': {\n this[S].querySelector('#prev').className = newV === 'hidden' ? 'hidden' : '';\n break;\n }\n }\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('local-service', class extends HTMLElement {\n static get observedAttributes() {\n return ['name', 'service-id', 'state']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n

\n \n
\n \n
\n `;\n }\n\n connectedCallback() {\n this[S].querySelector('#name').textContent = this.getAttribute('name');\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'name':\n return this[S].querySelector('#name').textContent = newV;\n }\n }\n\n get name() {\n return this.getAttribute('name') || ''\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('local-service-item', class extends HTMLElement {\n static get observedAttributes() {\n return ['name', 'price']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n

\n \n
\n `;\n }\n\n connectedCallback() {\n this[S].querySelector('#name').textContent = this.getAttribute('name');\n this[S].querySelector('#price').value = this.price();\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'name':\n return this[S].querySelector('#name').textContent = newV;\n case 'price':\n return this[S].querySelector('#price').value = newV;\n }\n }\n\n price(s) {\n const n = parseInt(s || this.getAttribute('price'));\n return isNaN(n) ? 0 : n;\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('local-services', class extends HTMLElement {\n static get observedAttributes() {\n return ['filter']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n \n
\n
\n \n
\n `;\n {\n const filter = shadow.querySelector('#filter');\n let t = null;\n filter.addEventListener('change', ev => {\n ev.stopPropagation();\n this.filter = ev.target.value;\n });\n filter.addEventListener('keyup', ev => {\n ev.stopPropagation();\n const value = ev.target.value;\n\n if (t) clearTimeout(t);\n t = setTimeout(() => {\n this.filter = value;\n t = null;\n }, 1000 / 3);\n });\n }\n }\n\n connectedCallback() {\n this.filter = this.getAttribute('filter');\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'filter':\n return this.filter = newV;\n }\n }\n\n get filter() {\n return this.getAttribute('filter');\n }\n\n set filter(value) {\n if (!value || value === '') {\n this.removeAttribute('filter');\n for (const el of this.querySelectorAll('local-service')) {\n el.removeAttribute('local-services-visible');\n }\n } else {\n this.setAttribute('filter', value);\n for (const el of this.querySelectorAll('local-service')) {\n if (!el.name) continue;\n if (el.name.includes(value)) {\n el.setAttribute('local-services-visible', 'visible');\n } else {\n el.setAttribute('local-services-visible', 'invisible');\n }\n }\n }\n }\n});\n","import { FORM_STYLE, S } from \"./shared\";\n\ncustomElements.define('login-form', class extends HTMLElement {\n static get observedAttributes() {\n return []\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n `;\n }\n\n connectedCallback() {\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n }\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('ow-account', class extends HTMLElement {\n static get observedAttributes() {\n return ['mode']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n \n \n
\n Nie masz konta? Utwórz nowe\n
\n
\n Masz konta? Zaloguj się\n
\n
\n `;\n shadow.querySelector('#switch-login > a').addEventListener('click', ev => {\n ev.stopPropagation();\n ev.preventDefault();\n this.mode = 'login';\n });\n shadow.querySelector('#switch-register > a').addEventListener('click', ev => {\n ev.stopPropagation();\n ev.preventDefault();\n this.mode = 'register';\n });\n }\n\n connectedCallback() {\n this.mode = 'login';\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n }\n }\n\n get mode() {\n return this.getAttribute('mode');\n }\n\n set mode(value) {\n value = value === 'login' || value === 'register' ? value : 'login';\n this.setAttribute('mode', value);\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('ow-nav', class extends HTMLElement {\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n \n
\n `;\n }\n});\n","import { S } from \"./shared\";\n\ncustomElements.define('ow-path', class extends HTMLElement {\n static get observedAttributes() {\n return ['selected', 'path'];\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n \n `;\n }\n\n connectedCallback() {\n this.selected = this.getAttribute('selected');\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'selected':\n return this.selected = newV;\n case 'path':\n return this.path = newV;\n }\n }\n\n get selected() {\n return this.getAttribute('selected') === 'selected';\n }\n\n set selected(value) {\n if (value === 'selected') this.setAttribute('selected', 'selected');\n else this.removeAttribute('selected');\n }\n\n get path() {\n return this.getAttribute('path') || ''\n }\n\n set path(value) {\n if (!value || value === '') {\n this.removeAttribute('path');\n return;\n }\n this.setAttribute('path', value);\n this[S].querySelector('a').setAttribute('href', value);\n }\n});\n","import { S } from \"../shared\";\n\ncustomElements.define('price-view', class extends HTMLElement {\n static get observedAttributes() {\n return ['value', 'currency']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n \n `;\n }\n\n connectedCallback() {\n this[S].querySelector('#price').textContent = this.formatted;\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'price': {\n this.value = newV;\n break;\n }\n }\n }\n\n get formatted() {\n let v = this.value;\n let major = Math.ceil(v / 100);\n let minor = v % 100;\n let formatted = `${ major },${ minor < 10 ? `0${ minor }` : minor }`;\n return `${ formatted }${ this.currency }`\n }\n\n get value() {\n const n = parseInt(this.getAttribute('value'));\n return isNaN(n) ? 0 : n;\n }\n\n set value(v) {\n this.setAttribute('value', v);\n this[S].querySelector('#price').textContent = this.formatted;\n }\n\n get currency() {\n return this.getAttribute('currency') || 'PLN';\n }\n});\n","import { S, FORM_STYLE } from \"../shared\";\n\ncustomElements.define('price-input', class extends HTMLElement {\n static get observedAttributes() {\n return ['value', 'currency', 'required', 'name']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n \n \n
\n `;\n }\n\n connectedCallback() {\n this[S].querySelector('#currency').textContent = this.currency;\n // this[S].querySelector('#price').textContent = this.formatted;\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n const price = this[S].querySelector('#price');\n switch (name) {\n case 'price': {\n this.value = newV;\n break;\n }\n case 'currency': {\n this.currency = newV;\n break;\n }\n case 'required': {\n newV\n ? price.setAttribute('required', 'required')\n : price.removeAttribute('required');\n break;\n }\n case 'readonly': {\n newV\n ? price.setAttribute('readonly', 'readonly')\n : price.removeAttribute('readonly');\n break;\n }\n case 'name': {\n break;\n }\n }\n }\n\n get value() {\n return this[S].querySelector('#price').value * 100;\n }\n\n set value(v) {\n this.setAttribute('value', v);\n this[S].querySelector('#price').value = v;\n }\n\n get currency() {\n return this.getAttribute('currency') || 'PLN';\n }\n\n set currency(value) {\n this.setAttribute('currency', value);\n this[S].querySelector('#currency').textContent = this.currency;\n }\n\n reportValidity() {\n return this[S].querySelector('input').reportValidity();\n }\n\n get name() {\n return this.getAttribute('name');\n }\n\n set name(value) {\n this.setAttribute('name', value);\n }\n});\n","import { FORM_STYLE, S, PseudoForm } from \"../shared\";\n\ncustomElements.define('register-basic-form', class extends PseudoForm {\n constructor() {\n super();\n\n const shadow = this[S] = this.attachShadow({ mode: \"closed\" });\n\n shadow.innerHTML = `\n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n \n
\n `;\n\n const form = shadow.querySelector('form');\n form.addEventListener('submit', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n this.dispatchEvent(new CustomEvent('form:next', { bubbles: true, composed: true, detail: form }));\n })\n }\n});\n","import { S, FORM_STYLE, PseudoForm } from \"../shared\";\n\ncustomElements.define('register-item-form-row', class extends PseudoForm {\n static get observedAttributes() {\n return ['idx', 'name']\n }\n\n constructor() {\n super();\n this[S] = this.attachShadow({ mode: 'closed' });\n\n this.addEventListener('item:removed', () => {\n this.setAttribute('removed', 'removed');\n const parent = this.parentElement;\n this.remove();\n parent.dispatchEvent(new CustomEvent('item:removed', { bubbles: true, composed: true }));\n });\n }\n\n connectedCallback() {\n const idx = this.getAttribute('idx');\n this[S].innerHTML = `\n \n
\n
\n \n \n
\n
\n \n \n \n
\n
\n
\n `;\n this[S].querySelector('form').addEventListener('submit', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n this.reportValidity();\n });\n this[S].querySelector('.remove').addEventListener('click', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n\n this.dispatchEvent(new CustomEvent('item:removed', { bubbles: true, composed: false }));\n });\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n case 'idx': {\n this.updateNames();\n break;\n }\n }\n }\n\n\n get inputs() {\n return [\n this[S].querySelector('input.item-name').cloneNode(true),\n this[S].querySelector('input.item-price').cloneNode(true),\n ];\n }\n\n updateNames() {\n const idx = this.getAttribute('idx');\n for (const el of this[S].querySelectorAll('.field')) {\n const id = el.id;\n el.querySelector('input, price-input').setAttribute('name', `items[${ idx }][${ id }]`);\n }\n }\n\n get idx() {\n return this.getAttribute('idx');\n }\n\n set idx(idx) {\n this.setAttribute('idx', idx);\n }\n\n reportValidity() {\n return super.reportValidity() && this[S].querySelector('price-input').reportValidity();\n }\n});\n","import { FORM_STYLE, S, PseudoForm } from \"../shared\";\n\nimport \"./register-item-form-row\"\n\nconst updateItems = (form) => {\n let idx = 0;\n for (const el of form.querySelectorAll('register-item-form-row')) {\n el.idx = idx++;\n }\n return idx;\n}\n\ncustomElements.define('register-items-form', class extends PseudoForm {\n static get observedAttributes() {\n return []\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n
\n \n
\n
\n \n
\n \n
\n `;\n this.addEventListener('item:removed', ev => {\n ev.stopPropagation();\n updateItems(this)\n });\n this.addEventListener('form:next', ev => {\n for (const el of this.querySelectorAll('item-form-row')) {\n if (!el.reportValidity()) {\n ev.stopPropagation();\n ev.preventDefault();\n }\n }\n });\n shadow.querySelector('#add-item').addEventListener('click', ev => {\n ev.stopPropagation();\n ev.preventDefault();\n this.appendChild(document.createElement('register-item-form-row'));\n updateItems(this)\n });\n }\n\n get inputs() {\n return [...this.querySelectorAll(\"register-item-form-row\")].map(form => form.inputs)\n }\n});\n","import { FORM_STYLE, S, PseudoForm } from \"../shared\";\n\ncustomElements.define('register-company-form', class extends PseudoForm {\n constructor() {\n super();\n\n const shadow = this[S] = this.attachShadow({mode: \"closed\"});\n\n shadow.innerHTML = `\n \n
\n
\n \n
\n
\n \n \n
\n \n
\n `;\n }\n})\n","import { FORM_STYLE, S, PseudoForm } from \"../shared\";\n\ncustomElements.define('register-submit-form', class extends PseudoForm {\n constructor() {\n super();\n\n const shadow = this[S] = this.attachShadow({ mode: \"closed\" });\n\n shadow.innerHTML = `\n \n
\n
\n \n \n \n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n
\n \n
\n \n \n
\n
\n `;\n }\n\n updateField(name, value) {\n this[S].querySelector(`[id=\"hidden-${ name }\"]`).value = value;\n this[S].querySelector(`[id=\"preview-${ name }\"]`).value = value;\n }\n\n setItems(items) {\n const host = this[S].querySelector('#items');\n host.innerHTML = ``;\n for (const row of items) {\n const el = host.appendChild(document.createElement('div'));\n const [name, price] = row;\n\n name.setAttribute('readonly', 'readonly');\n el.appendChild(name);\n\n el.appendChild(document.createElement('price-view')).value = price.value;\n price.setAttribute('readonly', 'readonly');\n price.setAttribute('type', 'hidden');\n el.appendChild(price);\n }\n }\n});\n","customElements.define('register-user-type', class extends HTMLElement {\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: \"closed\" });\n\n shadow.innerHTML = `\n \n
\n \n
\n `;\n\n const user = shadow.querySelector('#user');\n user.addEventListener('click', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n this.dispatchEvent(new CustomEvent('account:type:user', { bubbles: true, composed: true }));\n });\n const service = shadow.querySelector('#local-service');\n service.addEventListener('click', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n this.dispatchEvent(new CustomEvent('account:type:local-service', { bubbles: true, composed: true }));\n });\n }\n});\n","import { runFbReady } from \"../shared\";\n\ncustomElements.define('register-oauth2', class extends HTMLElement {\n static get observedAttributes() {\n return ['fb-connected']\n }\n constructor() {\n super();\n\n const shadow = this.attachShadow({ mode: \"closed\" });\n shadow.innerHTML = `\n \n \n\n
\nRejestracja adresem e-mail\n
\n \n \n
\n
\n \n \n
\n
\n \n \n
\n
\n \n
\n
\n\n\n `;\n }\n\n connectedCallback() {\n runFbReady(() => {\n FB.getLoginStatus(({ status }) => {\n if (status !== 'connected')\n FB.login();\n else\n this.setAttribute('fb-connected', '1');\n });\n });\n }\n});\n","import { S, FORM_STYLE } from \"./shared\";\n\nimport \"./register-form/register-basic-form\";\nimport \"./register-form/register-item-form-row.js\";\nimport \"./register-form/register-items-form.js\";\nimport \"./register-form/register-company-form\";\nimport \"./register-form/register-submit-form\";\nimport \"./register-form/register-user-type\";\nimport \"./register-form/register-oauth2\";\n\nconst copyForm = (form, finalForm) => {\n form.reportValidity();\n\n for (const el of form.elements) {\n if (el.name === '') continue;\n if (!el.reportValidity()) {\n return false;\n }\n }\n const inputs = form.inputs;\n if (inputs)\n finalForm.setItems(inputs);\n else\n for (const el of form.elements) {\n if (el.name === '') continue;\n finalForm.updateField(el.name, el.value);\n }\n return true;\n};\n\ncustomElements.define('register-form', class extends HTMLElement {\n static get observedAttributes() {\n return ['step']\n }\n\n constructor() {\n super();\n const shadow = this[S] = this.attachShadow({ mode: 'closed' });\n shadow.innerHTML = `\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `;\n\n const finalForm = shadow.querySelector('#step-4');\n this[S].addEventListener('account:type:user', ev => {\n ev.stopPropagation();\n this.step = 1000;\n });\n this[S].addEventListener('account:type:local-service', ev => {\n ev.stopPropagation();\n this.step = 1;\n });\n this[S].addEventListener('form:next', ev => {\n ev.stopPropagation();\n const form = shadow.querySelector(`#step-${ this.step }`);\n if (copyForm(form, finalForm)) {\n this.step = this.step + 1;\n }\n });\n this[S].addEventListener('form:prev', ev => {\n ev.stopPropagation();\n this.step = this.step - 1;\n });\n {\n const el = finalForm;\n el.addEventListener('submit', ev => {\n ev.preventDefault();\n ev.stopPropagation();\n });\n }\n }\n\n connectedCallback() {\n this.step = 0;\n }\n\n attributeChangedCallback(name, oldV, newV) {\n if (oldV === newV) return;\n switch (name) {\n }\n }\n\n get step() {\n const step = parseInt(this.getAttribute('step'));\n return isNaN(step) ? 1 : step;\n }\n\n set step(n) {\n if (n < 0) return;\n this.setAttribute('step', n);\n }\n});\n","import \"./form-navigation.js\";\nimport \"./local-service.js\";\nimport \"./local-service-item.js\";\nimport \"./local-services.js\";\nimport \"./login-form.js\";\nimport \"./ow-account.js\";\nimport \"./ow-nav.js\";\nimport \"./ow-path.js\";\nimport \"./price/price-view\";\nimport \"./price/price-input\";\nimport \"./register-form.js\";\nimport { fireFbReady } from \"./shared.js\";\n\nwindow.fbAsyncInit = () => {\n FB.init({\n appId : '1293538251053124',\n cookie : true,\n xfbml : true,\n version : 'v14.0'\n });\n FB.AppEvents.logPageView();\n\tfireFbReady();\n};\n\n{\n if (!document.querySelector('#facebook-jssdk')) {\n const js = document.createElement('script');\n js.id = 'facebook-jssdk';\n js.src = \"https://connect.facebook.net/en_US/sdk.js\";\n document.head.appendChild(js);\n }\n}\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/client/src/app.js b/client/src/app.js index 83aa458..084fc85 100644 --- a/client/src/app.js +++ b/client/src/app.js @@ -9,4 +9,24 @@ import "./ow-path.js"; import "./price/price-view"; import "./price/price-input"; import "./register-form.js"; -import "./shared.js"; +import { fireFbReady } from "./shared.js"; + +window.fbAsyncInit = () => { + FB.init({ + appId : '1293538251053124', + cookie : true, + xfbml : true, + version : 'v14.0' + }); + FB.AppEvents.logPageView(); + fireFbReady(); +}; + +{ + if (!document.querySelector('#facebook-jssdk')) { + const js = document.createElement('script'); + js.id = 'facebook-jssdk'; + js.src = "https://connect.facebook.net/en_US/sdk.js"; + document.head.appendChild(js); + } +} diff --git a/client/src/register-form/register-oauth2.js b/client/src/register-form/register-oauth2.js index b1bcc4f..6c7bf23 100644 --- a/client/src/register-form/register-oauth2.js +++ b/client/src/register-form/register-oauth2.js @@ -1,12 +1,101 @@ +import { runFbReady } from "../shared"; + customElements.define('register-oauth2', class extends HTMLElement { + static get observedAttributes() { + return ['fb-connected'] + } constructor() { super(); const shadow = this.attachShadow({ mode: "closed" }); shadow.innerHTML = ` - - Sign in with Google - + + + +
+Rejestracja adresem e-mail +
+ + +
+
+ + +
+
+ + +
+
+ +
+
+ + `; } + + connectedCallback() { + runFbReady(() => { + FB.getLoginStatus(({ status }) => { + if (status !== 'connected') + FB.login(); + else + this.setAttribute('fb-connected', '1'); + }); + }); + } }); diff --git a/client/src/shared.js b/client/src/shared.js index 49c5055..a032362 100644 --- a/client/src/shared.js +++ b/client/src/shared.js @@ -105,3 +105,14 @@ export class PseudoForm extends HTMLElement { return this[S].querySelector('form').elements; } } + +export const fireFbReady = () => { + fbReady = true; + for (const fn of fbQueue) fn(); +}; +export const runFbReady = (fn) => { + if (!fbReady) fbQueue.push(fn); + else fn(); +}; +const fbQueue = []; +let fbReady = false;