diff --git a/app/javascript/application.js b/app/javascript/application.js index de6b44b..9bcdcd6 100644 --- a/app/javascript/application.js +++ b/app/javascript/application.js @@ -5,6 +5,13 @@ import "controllers" import "@hotwired/turbo-rails" Turbo.setProgressBarDelay(300) +// AlpineJs +import Alpine from 'alpinejs' +import 'alpine-turbo-drive-adapter' +import 'alpine-clipboard' +window.Alpine = Alpine +Alpine.start() + // Toastify import Toastify from 'toastify-js' window.Toastify = Toastify diff --git a/app/views/layouts/_navbar.html.erb b/app/views/layouts/_navbar.html.erb index 1b9a371..10b165d 100644 --- a/app/views/layouts/_navbar.html.erb +++ b/app/views/layouts/_navbar.html.erb @@ -3,4 +3,5 @@ <%= Rails.configuration.application_title %> this is a text this is toto +

diff --git a/config/importmap.rb b/config/importmap.rb index e43aca9..3bea1da 100644 --- a/config/importmap.rb +++ b/config/importmap.rb @@ -6,9 +6,14 @@ pin_all_from 'app/javascript/controllers', under: 'controllers' pin '@hotwired/turbo-rails', to: 'turbo.min.js', preload: true pin '@hotwired/stimulus', to: 'stimulus.min.js' pin '@hotwired/stimulus-loading', to: 'stimulus-loading.js' + pin 'toastify-js' # @1.12.0 + pin '@fortawesome/fontawesome-svg-core', to: '@fortawesome--fontawesome-svg-core.js' # @6.5.2 pin '@fortawesome/free-brands-svg-icons', to: '@fortawesome--free-brands-svg-icons.js' # @6.5.2 pin '@fortawesome/free-regular-svg-icons', to: '@fortawesome--free-regular-svg-icons.js' # @6.5.2 pin '@fortawesome/free-solid-svg-icons', to: '@fortawesome--free-solid-svg-icons.js' # @6.5.2 -pin "@fortawesome/fontawesome-free", to: "@fortawesome--fontawesome-free.js" # @6.5.2 +pin '@fortawesome/fontawesome-free', to: '@fortawesome--fontawesome-free.js' # @6.5.2 +pin 'alpinejs' # @3.14.1 +pin 'alpine-clipboard' +pin 'alpine-turbo-drive-adapter' # @2.1.0 diff --git a/vendor/javascript/alpine-clipboard.js b/vendor/javascript/alpine-clipboard.js new file mode 100644 index 0000000..d93d11d --- /dev/null +++ b/vendor/javascript/alpine-clipboard.js @@ -0,0 +1,2 @@ +var e={};const t={start(){if(!window.Alpine)throw new Error("Alpine is required for `alpine-clipboard` to work.");Alpine.addMagicProperty("clipboard",()=>function(e){let t=e;if("string"!=typeof t)try{t=JSON.stringify(t)}catch(e){console.warn(e)}const n=document.createElement("textarea");if(n.value=t,n.setAttribute("readonly",""),n.style.cssText="position:fixed;pointer-events:none;z-index:-9999;opacity:0;",document.body.appendChild(n),navigator.userAgent&&navigator.userAgent.match(/ipad|ipod|iphone/i)){n.contentEditable=!0,n.readOnly=!0;const e=document.createRange();e.selectNodeContents(n);const t=window.getSelection();t.removeAllRanges(),t.addRange(e),n.setSelectionRange(0,999999)}else n.select();try{document.execCommand("copy")}catch(e){console.warn(err)}document.body.removeChild(n)})}},n=window.deferLoadingAlpine||(e=>e());window.deferLoadingAlpine=function(e){t.start(),n(e)},e=t;var o=e;export default o; + diff --git a/vendor/javascript/alpine-turbo-drive-adapter.js b/vendor/javascript/alpine-turbo-drive-adapter.js new file mode 100644 index 0000000..332de38 --- /dev/null +++ b/vendor/javascript/alpine-turbo-drive-adapter.js @@ -0,0 +1,2 @@ +function isValidVersion(e,t){var r=e.split(".");var a=t.split(".");for(var i=0;ir[i])return true;return a[r.length-1]===r[r.length-1]}function dispatch(e,t){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};e.dispatchEvent(new CustomEvent(t,{detail:r,bubbles:true,composed:true,cancelable:true}))}class Bridge{init(){if(!window.Alpine.version||!isValidVersion("3.0.0",window.Alpine.version))throw new Error("Invalid Alpine version. Please use Alpine 3.0.0 or above");window.Alpine.mutateDom((()=>{document.body.querySelectorAll("[x-cloak]").forEach((e=>{var t;e.setAttribute("data-alpine-was-cloaked",null!==(t=e.getAttribute("x-cloak"))&&void 0!==t?t:"")}))}));this.configureEventHandlers()}configureEventHandlers(){var renderCallback=e=>{if(!document.documentElement.hasAttribute("data-turbo-preview")){dispatch(document,"alpine:init");dispatch(document,"alpine:initializing");window.Alpine.flushAndStopDeferringMutations();dispatch(document,"alpine:initialised");window.Alpine.mutateDom((()=>{document.querySelectorAll("[data-alpine-ignored]").forEach((e=>{e.removeAttribute("x-ignore");e.removeAttribute("data-alpine-ignored")}))}))}};var beforeRenderCallback=e=>{window.Alpine.mutateDom((()=>{document.documentElement.hasAttribute("data-turbo-preview")||e.detail.newBody.querySelectorAll("[data-alpine-generated-me],[x-cloak]").forEach((e=>{if(e.hasAttribute("x-cloak")){var t;e.setAttribute("data-alpine-was-cloaked",null!==(t=e.getAttribute("x-cloak"))&&void 0!==t?t:"")}if(e.hasAttribute("data-alpine-generated-me")){e.removeAttribute("data-alpine-generated-me");e.remove()}}))}));window.Alpine.deferMutations()};var beforeCacheCallback=e=>{window.Alpine.mutateDom((()=>{document.body.querySelectorAll("[x-for],[x-if],[x-teleport],[data-alpine-was-cloaked]").forEach((e=>{if(e.hasAttribute("data-alpine-was-cloaked")){var t;e.setAttribute("x-cloak",null!==(t=e.getAttribute("data-alpine-was-cloaked"))&&void 0!==t?t:"");e.removeAttribute("data-alpine-was-cloaked")}e.hasAttribute("x-for")&&e._x_lookup&&Object.values(e._x_lookup).forEach((e=>e.setAttribute("data-alpine-generated-me",true)));e.hasAttribute("x-if")&&e._x_currentIfEl&&e._x_currentIfEl.setAttribute("data-alpine-generated-me",true);e.hasAttribute("x-teleport")&&e._x_teleport&&e._x_teleport.setAttribute("data-alpine-generated-me",true)}))}));document.querySelectorAll("[data-turbo-permanent]").forEach((e=>{window.Alpine.mutateDom((()=>{if(!e.hasAttribute("x-ignore")){e.setAttribute("x-ignore",true);e.setAttribute("data-alpine-ignored",true)}e.querySelectorAll("[data-alpine-generated-me]").forEach((e=>{e.removeAttribute("data-alpine-generated-me")}))}))}))};document.addEventListener("turbo:render",renderCallback);document.addEventListener("turbo:before-render",beforeRenderCallback);document.addEventListener("turbo:before-cache",beforeCacheCallback)}}window.Alpine&&console.error("Alpine-turbo-drive-adapter must be included before AlpineJs");Object.getOwnPropertyDescriptor(NodeList.prototype,"forEach")||Object.defineProperty(NodeList.prototype,"forEach",Object.getOwnPropertyDescriptor(Array.prototype,"forEach"));document.addEventListener("alpine:init",(()=>{var e=new Bridge;e.init()}),{once:true});var e={};export{e as default}; + diff --git a/vendor/javascript/alpinejs.js b/vendor/javascript/alpinejs.js new file mode 100644 index 0000000..ca6d40b --- /dev/null +++ b/vendor/javascript/alpinejs.js @@ -0,0 +1,2 @@ +var e=false;var t=false;var n=[];var r=-1;function scheduler(e){queueJob(e)}function queueJob(e){n.includes(e)||n.push(e);queueFlush()}function dequeueJob(e){let t=n.indexOf(e);t!==-1&&t>r&&n.splice(t,1)}function queueFlush(){if(!t&&!e){e=true;queueMicrotask(flushJobs)}}function flushJobs(){e=false;t=true;for(let e=0;ee.effect(t,{scheduler:e=>{l?scheduler(e):e()}});s=e.raw}function overrideEffect(e){a=e}function elementBoundEffect(e){let cleanup2=()=>{};let wrappedEffect=t=>{let n=a(t);if(!e._x_effects){e._x_effects=new Set;e._x_runEffects=()=>{e._x_effects.forEach((e=>e()))}}e._x_effects.add(n);cleanup2=()=>{if(n!==void 0){e._x_effects.delete(n);o(n)}};return n};return[wrappedEffect,()=>{cleanup2()}]}function watch(e,t){let n=true;let r;let i=a((()=>{let i=e();JSON.stringify(i);n?r=i:queueMicrotask((()=>{t(i,r);r=i}));n=false}));return()=>o(i)}var c=[];var u=[];var f=[];function onElAdded(e){f.push(e)}function onElRemoved(e,t){if(typeof t==="function"){e._x_cleanups||(e._x_cleanups=[]);e._x_cleanups.push(t)}else{t=e;u.push(t)}}function onAttributesAdded(e){c.push(e)}function onAttributeRemoved(e,t,n){e._x_attributeCleanups||(e._x_attributeCleanups={});e._x_attributeCleanups[t]||(e._x_attributeCleanups[t]=[]);e._x_attributeCleanups[t].push(n)}function cleanupAttributes(e,t){e._x_attributeCleanups&&Object.entries(e._x_attributeCleanups).forEach((([n,r])=>{if(t===void 0||t.includes(n)){r.forEach((e=>e()));delete e._x_attributeCleanups[n]}}))}function cleanupElement(e){if(e._x_cleanups)while(e._x_cleanups.length)e._x_cleanups.pop()()}var d=new MutationObserver(onMutate);var p=false;function startObservingMutations(){d.observe(document,{subtree:true,childList:true,attributes:true,attributeOldValue:true});p=true}function stopObservingMutations(){flushObserver();d.disconnect();p=false}var _=[];function flushObserver(){let e=d.takeRecords();_.push((()=>e.length>0&&onMutate(e)));let t=_.length;queueMicrotask((()=>{if(_.length===t)while(_.length>0)_.shift()()}))}function mutateDom(e){if(!p)return e();stopObservingMutations();let t=e();startObservingMutations();return t}var g=false;var m=[];function deferMutations(){g=true}function flushAndStopDeferringMutations(){g=false;onMutate(m);m=[]}function onMutate(e){if(g){m=m.concat(e);return}let t=new Set;let n=new Set;let r=new Map;let i=new Map;for(let a=0;ae.nodeType===1&&t.add(e)));e[a].removedNodes.forEach((e=>e.nodeType===1&&n.add(e)))}if(e[a].type==="attributes"){let t=e[a].target;let n=e[a].attributeName;let o=e[a].oldValue;let add2=()=>{r.has(t)||r.set(t,[]);r.get(t).push({name:n,value:t.getAttribute(n)})};let remove=()=>{i.has(t)||i.set(t,[]);i.get(t).push(n)};if(t.hasAttribute(n)&&o===null)add2();else if(t.hasAttribute(n)){remove();add2()}else remove()}}i.forEach(((e,t)=>{cleanupAttributes(t,e)}));r.forEach(((e,t)=>{c.forEach((n=>n(t,e)))}));for(let e of n)t.has(e)||u.forEach((t=>t(e)));t.forEach((e=>{e._x_ignoreSelf=true;e._x_ignore=true}));for(let e of t)if(!n.has(e)&&e.isConnected){delete e._x_ignoreSelf;delete e._x_ignore;f.forEach((t=>t(e)));e._x_ignore=true;e._x_ignoreSelf=true}t.forEach((e=>{delete e._x_ignoreSelf;delete e._x_ignore}));t=null;n=null;r=null;i=null}function scope(e){return mergeProxies(closestDataStack(e))}function addScopeToNode(e,t,n){e._x_dataStack=[t,...closestDataStack(n||e)];return()=>{e._x_dataStack=e._x_dataStack.filter((e=>e!==t))}}function closestDataStack(e){return e._x_dataStack?e._x_dataStack:typeof ShadowRoot==="function"&&e instanceof ShadowRoot?closestDataStack(e.host):e.parentNode?closestDataStack(e.parentNode):[]}function mergeProxies(e){return new Proxy({objects:e},v)}var v={ownKeys({objects:e}){return Array.from(new Set(e.flatMap((e=>Object.keys(e)))))},has({objects:e},t){return t!=Symbol.unscopables&&e.some((e=>Object.prototype.hasOwnProperty.call(e,t)||Reflect.has(e,t)))},get({objects:e},t,n){return t=="toJSON"?collapseProxies:Reflect.get(e.find((e=>Reflect.has(e,t)))||{},t,n)},set({objects:e},t,n,r){const i=e.find((e=>Object.prototype.hasOwnProperty.call(e,t)))||e[e.length-1];const a=Object.getOwnPropertyDescriptor(i,t);return a?.set&&a?.get?a.set.call(r,n)||true:Reflect.set(i,t,n)}};function collapseProxies(){let e=Reflect.ownKeys(this);return e.reduce(((e,t)=>{e[t]=Reflect.get(this,t);return e}),{})}function initInterceptors(e){let isObject2=e=>typeof e==="object"&&!Array.isArray(e)&&e!==null;let recurse=(t,n="")=>{Object.entries(Object.getOwnPropertyDescriptors(t)).forEach((([r,{value:i,enumerable:a}])=>{if(a===false||i===void 0)return;if(typeof i==="object"&&i!==null&&i.__v_skip)return;let o=n===""?r:`${n}.${r}`;typeof i==="object"&&i!==null&&i._x_interceptor?t[r]=i.initialize(e,o,r):!isObject2(i)||i===t||i instanceof Element||recurse(i,o)}))};return recurse(e)}function interceptor(e,t=(()=>{})){let n={initialValue:void 0,_x_interceptor:true,initialize(t,n,r){return e(this.initialValue,(()=>get(t,n)),(e=>set(t,n,e)),n,r)}};t(n);return e=>{if(typeof e==="object"&&e!==null&&e._x_interceptor){let t=n.initialize.bind(n);n.initialize=(r,i,a)=>{let o=e.initialize(r,i,a);n.initialValue=o;return t(r,i,a)}}else n.initialValue=e;return n}}function get(e,t){return t.split(".").reduce(((e,t)=>e[t]),e)}function set(e,t,n){typeof t==="string"&&(t=t.split("."));if(t.length!==1){if(t.length===0)throw error;if(e[t[0]])return set(e[t[0]],t.slice(1),n);e[t[0]]={};return set(e[t[0]],t.slice(1),n)}e[t[0]]=n}var h={};function magic(e,t){h[e]=t}function injectMagics(e,t){Object.entries(h).forEach((([n,r])=>{let i=null;function getUtilities(){if(i)return i;{let[e,n]=getElementBoundUtilities(t);i={interceptor:interceptor,...e};onElRemoved(t,n);return i}}Object.defineProperty(e,`$${n}`,{get(){return r(t,getUtilities())},enumerable:false})}));return e}function tryCatch(e,t,n,...r){try{return n(...r)}catch(n){handleError(n,e,t)}}function handleError(e,t,n=void 0){e=Object.assign(e??{message:"No error message given."},{el:t,expression:n});console.warn(`Alpine Expression Error: ${e.message}\n\n${n?'Expression: "'+n+'"\n\n':""}`,t);setTimeout((()=>{throw e}),0)}var x=true;function dontAutoEvaluateFunctions(e){let t=x;x=false;let n=e();x=t;return n}function evaluate(e,t,n={}){let r;evaluateLater(e,t)((e=>r=e),n);return r}function evaluateLater(...e){return y(...e)}var y=normalEvaluator;function setEvaluator(e){y=e}function normalEvaluator(e,t){let n={};injectMagics(n,e);let r=[n,...closestDataStack(e)];let i=typeof t==="function"?generateEvaluatorFromFunction(r,t):generateEvaluatorFromString(r,t,e);return tryCatch.bind(null,e,t,i)}function generateEvaluatorFromFunction(e,t){return(n=(()=>{}),{scope:r={},params:i=[]}={})=>{let a=t.apply(mergeProxies([r,...e]),i);runIfTypeOfFunction(n,a)}}var b={};function generateFunctionFromString(e,t){if(b[e])return b[e];let n=Object.getPrototypeOf((async function(){})).constructor;let r=/^[\n\s]*if.*\(.*\)/.test(e.trim())||/^(let|const)\s/.test(e.trim())?`(async()=>{ ${e} })()`:e;const safeAsyncFunction=()=>{try{let t=new n(["__self","scope"],`with (scope) { __self.result = ${r} }; __self.finished = true; return __self.result;`);Object.defineProperty(t,"name",{value:`[Alpine] ${e}`});return t}catch(n){handleError(n,t,e);return Promise.resolve()}};let i=safeAsyncFunction();b[e]=i;return i}function generateEvaluatorFromString(e,t,n){let r=generateFunctionFromString(t,n);return(i=(()=>{}),{scope:a={},params:o=[]}={})=>{r.result=void 0;r.finished=false;let s=mergeProxies([a,...e]);if(typeof r==="function"){let e=r(r,s).catch((e=>handleError(e,n,t)));if(r.finished){runIfTypeOfFunction(i,r.result,s,o,n);r.result=void 0}else e.then((e=>{runIfTypeOfFunction(i,e,s,o,n)})).catch((e=>handleError(e,n,t))).finally((()=>r.result=void 0))}}}function runIfTypeOfFunction(e,t,n,r,i){if(x&&typeof t==="function"){let a=t.apply(n,r);a instanceof Promise?a.then((t=>runIfTypeOfFunction(e,t,n,r))).catch((e=>handleError(e,i,t))):e(a)}else typeof t==="object"&&t instanceof Promise?t.then((t=>e(t))):e(t)}var w="x-";function prefix(e=""){return w+e}function setPrefix(e){w=e}var E={};function directive(e,t){E[e]=t;return{before(t){if(!E[t]){console.warn(String.raw`Cannot find directive \`${t}\`. \`${e}\` will use the default order of execution`);return}const n=R.indexOf(t);R.splice(n>=0?n:R.indexOf("DEFAULT"),0,e)}}}function directiveExists(e){return Object.keys(E).includes(e)}function directives(e,t,n){t=Array.from(t);if(e._x_virtualDirectives){let n=Object.entries(e._x_virtualDirectives).map((([e,t])=>({name:e,value:t})));let r=attributesOnly(n);n=n.map((e=>r.find((t=>t.name===e.name))?{name:`x-bind:${e.name}`,value:`"${e.value}"`}:e));t=t.concat(n)}let r={};let i=t.map(toTransformedAttributes(((e,t)=>r[e]=t))).filter(outNonAlpineAttributes).map(toParsedDirectives(r,n)).sort(byPriority);return i.map((t=>getDirectiveHandler(e,t)))}function attributesOnly(e){return Array.from(e).map(toTransformedAttributes()).filter((e=>!outNonAlpineAttributes(e)))}var k=false;var S=new Map;var A=Symbol();function deferHandlingDirectives(e){k=true;let t=Symbol();A=t;S.set(t,[]);let flushHandlers=()=>{while(S.get(t).length)S.get(t).shift()();S.delete(t)};let stopDeferring=()=>{k=false;flushHandlers()};e(flushHandlers);stopDeferring()}function getElementBoundUtilities(e){let t=[];let cleanup2=e=>t.push(e);let[n,r]=elementBoundEffect(e);t.push(r);let i={Alpine:K,effect:n,cleanup:cleanup2,evaluateLater:evaluateLater.bind(evaluateLater,e),evaluate:evaluate.bind(evaluate,e)};let doCleanup=()=>t.forEach((e=>e()));return[i,doCleanup]}function getDirectiveHandler(e,t){let noop=()=>{};let n=E[t.type]||noop;let[r,i]=getElementBoundUtilities(e);onAttributeRemoved(e,t.original,i);let fullHandler=()=>{if(!e._x_ignore&&!e._x_ignoreSelf){n.inline&&n.inline(e,t,r);n=n.bind(n,e,t,r);k?S.get(A).push(n):n()}};fullHandler.runCleanups=i;return fullHandler}var startingWith=(e,t)=>({name:n,value:r})=>{n.startsWith(e)&&(n=n.replace(e,t));return{name:n,value:r}};var into=e=>e;function toTransformedAttributes(e=(()=>{})){return({name:t,value:n})=>{let{name:r,value:i}=O.reduce(((e,t)=>t(e)),{name:t,value:n});r!==t&&e(r,t);return{name:r,value:i}}}var O=[];function mapAttributes(e){O.push(e)}function outNonAlpineAttributes({name:e}){return alpineAttributeRegex().test(e)}var alpineAttributeRegex=()=>new RegExp(`^${w}([^:^.]+)\\b`);function toParsedDirectives(e,t){return({name:n,value:r})=>{let i=n.match(alpineAttributeRegex());let a=n.match(/:([a-zA-Z0-9\-_:]+)/);let o=n.match(/\.[^.\]]+(?=[^\]]*$)/g)||[];let s=t||e[n]||n;return{type:i?i[1]:null,value:a?a[1]:null,modifiers:o.map((e=>e.replace(".",""))),expression:r,original:s}}}var C="DEFAULT";var R=["ignore","ref","data","id","anchor","bind","init","for","model","modelable","transition","show","if",C,"teleport"];function byPriority(e,t){let n=R.indexOf(e.type)===-1?C:e.type;let r=R.indexOf(t.type)===-1?C:t.type;return R.indexOf(n)-R.indexOf(r)}function dispatch(e,t,n={}){e.dispatchEvent(new CustomEvent(t,{detail:n,bubbles:true,composed:true,cancelable:true}))}function walk(e,t){if(typeof ShadowRoot==="function"&&e instanceof ShadowRoot){Array.from(e.children).forEach((e=>walk(e,t)));return}let n=false;t(e,(()=>n=true));if(n)return;let r=e.firstElementChild;while(r){walk(r,t,false);r=r.nextElementSibling}}function warn(e,...t){console.warn(`Alpine Warning: ${e}`,...t)}var T=false;function start(){T&&warn("Alpine has already been initialized on this page. Calling Alpine.start() more than once can cause problems.");T=true;document.body||warn("Unable to initialize. Trying to load Alpine before `` is available. Did you forget to add `defer` in Alpine's `