UNPKG

data-ws-hooks

Version:

Hooks html tags to js actions by using custom data attributes. Bootsratp style. Specifically useful for easily handling click events.

2 lines (1 loc) 9.72 kB
!function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,(function(r){return o(e[i][1][r]||r)}),p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}({1:[function(require,module,exports){window.wsGlobals=window.wsGlobals||{},window.wsGlobals.DataHooks=require("./index").DataHooks},{"./index":2}],2:[function(require,module,exports){const resolvePath=require("object-resolve-path"),DATA_ATTRIBUTE_NAMES_onClick="data-ws-onclick",DATA_ATTRIBUTE_NAMES_tabData="data-ws-tab",DATA_ATTRIBUTE_NAMES_toggleHiddenButton="data-ws-toggle-hidden-button",DATA_ATTRIBUTE_NAMES_toggleHiddenData="data-ws-toggle-hidden-data",DATA_ATTRIBUTE_NAMES_srcHook="data-ws-src";class GenericDomHooks{static initAll(){GenericDomHooks.setDataOnClickHooks(),GenericDomHooks.setSrcHooks(),GenericDomHooks.setTabSelectorsHooks(),GenericDomHooks.setToggleHiddenHooks()}static setDataOnClickHooks(){let attributeName=DATA_ATTRIBUTE_NAMES_onClick,wsGlobals=window.wsGlobals||{};document.querySelectorAll("["+attributeName+"]").forEach((el=>{el.addEventListener("click",(ev=>{if(ev.currentTarget instanceof Element){let value=ev.currentTarget.getAttribute(attributeName);if(value.includes(":")){let parts=value.split(":"),action=parts[0],name=parts[1];if("hideClass"==action&&name)GenericDomHooks.hideClass(name);else if("copy"==action){let target;if(name){if(name.includes("#")){let parts=name.split("#")[1].split(":");target=document.getElementById(parts[0])}}else target=ev.currentTarget;target&&GenericDomHooks.copyInputValue(target)}}else{let valueFunction;try{valueFunction=resolvePath(wsGlobals,value)||resolvePath(window,value)}catch(e){valueFunction=null}valueFunction&&valueFunction instanceof Function&&valueFunction(ev.currentTarget)}}}))}))}static setSrcHooks(){let attributeName=DATA_ATTRIBUTE_NAMES_srcHook;window.wsGlobals;document.querySelectorAll("["+attributeName+"]").forEach((el=>{let src=el.getAttribute(attributeName);el.setAttribute("src",src)}))}static hideClass(className){document.querySelectorAll("."+className).forEach((el=>{if(el instanceof Element){let style=(el.getAttribute("style")||"")+";display:none";el.setAttribute("style",style)}}))}static setTabSelectorsHooks(){function onTabSelected(tabName){let tabSelectors=document.getElementsByClassName("tab-selector");for(const tabSelector of tabSelectors)tabSelector.getAttribute(DATA_ATTRIBUTE_NAMES_tabData)==tabName?tabSelector.className="tab-selector selected":tabSelector.className="tab-selector";let tabSections=document.getElementsByClassName("tab-section");for(const tab of tabSections)tab.getAttribute(DATA_ATTRIBUTE_NAMES_tabData)==tabName?tab.className="tab-section":tab.className="tab-section hidden"}let tabSelectors=document.getElementsByClassName("tab-selector");for(const tabSelector of tabSelectors)tabSelector.addEventListener("click",(function(e){onTabSelected(tabSelector.getAttribute(DATA_ATTRIBUTE_NAMES_tabData))}))}static setToggleHiddenHooks(){let buttonAttributeName=DATA_ATTRIBUTE_NAMES_toggleHiddenButton,dataAttributeName=DATA_ATTRIBUTE_NAMES_toggleHiddenData;document.querySelectorAll("["+buttonAttributeName+"]").forEach((el=>{el.addEventListener("click",(ev=>{if(ev.currentTarget instanceof Element){let value=ev.currentTarget.getAttribute(buttonAttributeName);document.querySelectorAll("["+dataAttributeName+"='"+value+"']").forEach((elData=>{elData instanceof Element&&(elData.classList.contains("hidden")?elData.classList.remove("hidden"):elData.classList.add("hidden"))}))}}))}))}static copyInputValue(target,text){let el=target,value=text;if(!text){if(value=el.value,!value){if("input"!=target.tagName.toLowerCase()&&(el=target.querySelector("input")),!el)return;value=el.value}if("✅ Copied successfully"==value)return}this.copyToClipboard(value,(isSuccess=>{isSuccess&&(el.value="✅ Copied successfully",setTimeout((()=>{el.value=value}),1e3))}))}static async copyToClipboard(txt,ondone){try{return await navigator.clipboard.writeText(txt),ondone&&ondone(!0),!0}catch(err){return ondone&&ondone(!1),!1}}}GenericDomHooks.initAll(),exports.DataHooks=GenericDomHooks},{"object-resolve-path":3}],3:[function(require,module,exports){var Path=require("./path");module.exports=function(o,path){if("string"!=typeof path)throw new TypeError("path must be a string");if("object"!=typeof o)throw new TypeError("object must be passed");var pathObj=Path.get(path);if(!pathObj.valid)throw new Error("path is not a valid object path");return pathObj.getValueFrom(o)}},{"./path":4}],4:[function(require,module,exports){function noop(){}var hasEval=function(){if("undefined"!=typeof chrome&&chrome.app&&chrome.app.runtime)return!1;if("undefined"!=typeof navigator&&navigator.getDeviceStorage)return!1;try{return new Function("","return true;")()}catch(ex){return!1}}();function isIndex(s){return+s==s>>>0&&""!==s}function isObject(obj){return obj===Object(obj)}var createObject="__proto__"in{}?function(obj){return obj}:function(obj){var proto=obj.__proto__;if(!proto)return obj;var newObject=Object.create(proto);return Object.getOwnPropertyNames(obj).forEach((function(name){Object.defineProperty(newObject,name,Object.getOwnPropertyDescriptor(obj,name))})),newObject};var identRegExp=new RegExp("^[$_a-zA-Z]+[$_a-zA-Z0-9]*$");function isIdent(s){return identRegExp.test(s)}var constructorIsPrivate={};function Path(parts,privateToken){if(privateToken!==constructorIsPrivate)throw Error("Use Path.get to retrieve path objects");for(var i=0;i<parts.length;i++)this.push(String(parts[i]));hasEval&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn())}var pathCache={};function formatAccessor(key){return isIndex(key)?"["+key+"]":'["'+key.replace(/"/g,'\\"')+'"]'}function getPathCharType(char){if(void 0===char)return"eof";var code=char.charCodeAt(0);switch(code){case 91:case 93:case 46:case 34:case 39:case 48:return char;case 95:case 36:return"ident";case 32:case 9:case 10:case 13:case 160:case 65279:case 8232:case 8233:return"ws"}return 97<=code&&code<=122||65<=code&&code<=90?"ident":49<=code&&code<=57?"number":"else"}Path.get=function(pathString){if(pathString instanceof Path)return pathString;if(null!=pathString&&0!=pathString.length||(pathString=""),"string"!=typeof pathString){if(isIndex(pathString.length))return new Path(pathString,constructorIsPrivate);pathString=String(pathString)}if(path=pathCache[pathString])return path;var parts=function(path){var c,newChar,key,type,transition,action,typeMap,keys=[],index=-1,mode="beforePath",actions={push:function(){void 0!==key&&(keys.push(key),key=void 0)},append:function(){void 0===key?key=newChar:key+=newChar}};function maybeUnescapeQuote(){if(!(index>=path.length)){var nextChar=path[index+1];return"inSingleQuote"==mode&&"'"==nextChar||"inDoubleQuote"==mode&&'"'==nextChar?(index++,newChar=nextChar,actions.append(),!0):void 0}}for(;mode;)if(index++,"\\"!=(c=path[index])||!maybeUnescapeQuote()){if(type=getPathCharType(c),"error"==(transition=(typeMap=pathStateMachine[mode])[type]||typeMap.else||"error"))return;if(mode=transition[0],action=actions[transition[1]]||noop,newChar=void 0===transition[2]?c:transition[2],action(),"afterPath"===mode)return keys}}(pathString);if(!parts)return invalidPath;var path=new Path(parts,constructorIsPrivate);return pathCache[pathString]=path,path},Path.prototype=createObject({__proto__:[],valid:!0,toString:function(){for(var pathString="",i=0;i<this.length;i++){var key=this[i];isIdent(key)?pathString+=i?"."+key:key:pathString+=formatAccessor(key)}return pathString},getValueFrom:function(obj,directObserver){for(var i=0;i<this.length;i++){if(null==obj)return;obj=obj[this[i]]}return obj},iterateObjects:function(obj,observe){for(var i=0;i<this.length;i++){if(i&&(obj=obj[this[i-1]]),!isObject(obj))return;observe(obj,this[i])}},compiledGetValueFromFn:function(){var str="",pathString="obj";str+="if (obj != null";for(var key,i=0;i<this.length-1;i++)str+=" &&\n "+(pathString+=isIdent(key=this[i])?"."+key:formatAccessor(key))+" != null";return str+=")\n",str+=" return "+(pathString+=isIdent(key=this[i])?"."+key:formatAccessor(key))+";\nelse\n return undefined;",new Function("obj",str)},setValueFrom:function(obj,value){if(!this.length)return!1;for(var i=0;i<this.length-1;i++){if(!isObject(obj))return!1;obj=obj[this[i]]}return!!isObject(obj)&&(obj[this[i]]=value,!0)}});var pathStateMachine={beforePath:{ws:["beforePath"],ident:["inIdent","append"],"[":["beforeElement"],eof:["afterPath"]},inPath:{ws:["inPath"],".":["beforeIdent"],"[":["beforeElement"],eof:["afterPath"]},beforeIdent:{ws:["beforeIdent"],ident:["inIdent","append"]},inIdent:{ident:["inIdent","append"],0:["inIdent","append"],number:["inIdent","append"],ws:["inPath","push"],".":["beforeIdent","push"],"[":["beforeElement","push"],eof:["afterPath","push"]},beforeElement:{ws:["beforeElement"],0:["afterZero","append"],number:["inIndex","append"],"'":["inSingleQuote","append",""],'"':["inDoubleQuote","append",""]},afterZero:{ws:["afterElement","push"],"]":["inPath","push"]},inIndex:{0:["inIndex","append"],number:["inIndex","append"],ws:["afterElement"],"]":["inPath","push"]},inSingleQuote:{"'":["afterElement"],eof:["error"],else:["inSingleQuote","append"]},inDoubleQuote:{'"':["afterElement"],eof:["error"],else:["inDoubleQuote","append"]},afterElement:{ws:["afterElement"],"]":["inPath","push"]}},invalidPath=new Path("",constructorIsPrivate);invalidPath.valid=!1,invalidPath.getValueFrom=invalidPath.setValueFrom=function(){},module.exports=Path},{}]},{},[1]);