bitwrench 1.2.16 → 2.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (130) hide show
  1. package/README.md +160 -158
  2. package/bin/bitwrench.js +3 -0
  3. package/dist/bitwrench-code-edit.cjs.js +639 -0
  4. package/dist/bitwrench-code-edit.es5.js +875 -0
  5. package/dist/bitwrench-code-edit.es5.min.js +15 -0
  6. package/dist/bitwrench-code-edit.esm.js +628 -0
  7. package/dist/bitwrench-code-edit.esm.min.js +15 -0
  8. package/dist/bitwrench-code-edit.umd.js +645 -0
  9. package/dist/bitwrench-code-edit.umd.min.js +15 -0
  10. package/dist/bitwrench.cjs.js +6983 -0
  11. package/dist/bitwrench.cjs.min.js +62 -0
  12. package/dist/bitwrench.css +5100 -0
  13. package/dist/bitwrench.es5.js +8446 -0
  14. package/dist/bitwrench.es5.min.js +31 -0
  15. package/dist/bitwrench.esm.js +6981 -0
  16. package/dist/bitwrench.esm.min.js +62 -0
  17. package/dist/bitwrench.umd.js +6989 -0
  18. package/dist/bitwrench.umd.min.js +62 -0
  19. package/dist/builds.json +127 -0
  20. package/dist/sri.json +18 -0
  21. package/package.json +86 -24
  22. package/readme.html +288 -0
  23. package/src/bitwrench-code-edit.js +627 -0
  24. package/src/bitwrench-color-utils.js +311 -0
  25. package/src/bitwrench-component-base.js +736 -0
  26. package/src/bitwrench-components-inline.js +374 -0
  27. package/src/bitwrench-components-v2.js +1879 -0
  28. package/src/bitwrench-components.js +610 -0
  29. package/src/bitwrench-styles.js +3240 -0
  30. package/src/bitwrench.js +3367 -0
  31. package/src/cli/convert.js +205 -0
  32. package/src/cli/index.js +122 -0
  33. package/src/cli/inject.js +55 -0
  34. package/src/cli/layout-default.js +142 -0
  35. package/src/generate-css.js +381 -0
  36. package/src/vendor/quikdown.js +654 -0
  37. package/src/version.js +16 -0
  38. package/.eslintrc.json +0 -27
  39. package/.github/workflows/codeql-analysis.yml +0 -72
  40. package/.travis.yml +0 -34
  41. package/bitwrench.css +0 -92
  42. package/bitwrench.js +0 -3348
  43. package/bitwrench.js_sri.txt +0 -1
  44. package/bitwrench.min.js +0 -1
  45. package/bitwrench.min.js_sri.txt +0 -1
  46. package/bitwrench_ESM.js +0 -3207
  47. package/bitwrench_ESM.js_sri.txt +0 -1
  48. package/bitwrench_ESM.min.js +0 -1
  49. package/bitwrench_ESM.min.js_sri.txt +0 -1
  50. package/dev/bitwrench-todo.md +0 -215
  51. package/dev/css-arrows.md +0 -23
  52. package/dev/docStringDev.js +0 -124
  53. package/dev/docStringParseDev.js +0 -171
  54. package/dev/example11-load-mjs-page.html +0 -17
  55. package/dev/figures.html +0 -37
  56. package/dev/html_gen.js +0 -349
  57. package/dev/htmld.md +0 -250
  58. package/dev/htmldev.html +0 -45
  59. package/dev/index-old.html +0 -87
  60. package/dev/misc-notes.md +0 -21
  61. package/dev/norm.css +0 -30
  62. package/dev/notes.md +0 -2
  63. package/dev/pageData.mjs +0 -69
  64. package/dev/sizes.html +0 -49
  65. package/dev/universal-js-module.js +0 -37
  66. package/examples/example1.html +0 -78
  67. package/examples/example10.html +0 -84
  68. package/examples/example11.html +0 -17
  69. package/examples/example12.html +0 -18
  70. package/examples/example2.html +0 -44
  71. package/examples/example3.html +0 -50
  72. package/examples/example4.html +0 -22
  73. package/examples/example5.html +0 -82
  74. package/examples/example6.html +0 -128
  75. package/examples/example7.html +0 -91
  76. package/examples/example8.html +0 -27
  77. package/examples/example9.html +0 -102
  78. package/examples/examplePageData12.mjs +0 -73
  79. package/examples/pageData.mjs +0 -69
  80. package/examples/pico.min.css +0 -5
  81. package/icon/bitwrench-dark-tall.png +0 -0
  82. package/icon/bitwrench-dark.png +0 -0
  83. package/icon/bitwrench-icon-lt-grey.png +0 -0
  84. package/icon/bitwrench-icon.vsd +0 -0
  85. package/icon/bitwrench-logo-dark.png +0 -0
  86. package/icon/bitwrench-logo-full.png +0 -0
  87. package/icon/bitwrench-logo-green.png +0 -0
  88. package/icon/bitwrench-logo-grey.png +0 -0
  89. package/icon/bitwrench-logo-white.png +0 -0
  90. package/icon/bitwrench-logos-colors.png +0 -0
  91. package/icon/bitwrench-thick-logo.png +0 -0
  92. package/icon/bitwrench-thick-teal/android-chrome-192x192.png +0 -0
  93. package/icon/bitwrench-thick-teal/android-chrome-512x512.png +0 -0
  94. package/icon/bitwrench-thick-teal/apple-touch-icon.png +0 -0
  95. package/icon/bitwrench-thick-teal/browserconfig.xml +0 -9
  96. package/icon/bitwrench-thick-teal/favicon-16x16.png +0 -0
  97. package/icon/bitwrench-thick-teal/favicon-32x32.png +0 -0
  98. package/icon/bitwrench-thick-teal/favicon.ico +0 -0
  99. package/icon/bitwrench-thick-teal/mstile-144x144.png +0 -0
  100. package/icon/bitwrench-thick-teal/mstile-150x150.png +0 -0
  101. package/icon/bitwrench-thick-teal/mstile-310x150.png +0 -0
  102. package/icon/bitwrench-thick-teal/mstile-310x310.png +0 -0
  103. package/icon/bitwrench-thick-teal/mstile-70x70.png +0 -0
  104. package/icon/bitwrench-thick-teal/site.webmanifest +0 -19
  105. package/icon/bitwrench-thick-teal.ico +0 -0
  106. package/icon/bitwrench-thick-teal.svg +0 -44
  107. package/icon/bitwrench-thick-teal.zip +0 -0
  108. package/icon/favicon-test.html +0 -20
  109. package/icon/logos-test.PNG +0 -0
  110. package/images/bitwrench-512x512.png +0 -0
  111. package/images/bitwrench-logo-med.png +0 -0
  112. package/images/bitwrench-thick-logo.png +0 -0
  113. package/images/bitwrench-thick-logo.svg +0 -64
  114. package/images/bitwrench-thick-teal.ico +0 -0
  115. package/images/favicon.ico +0 -0
  116. package/index.html +0 -282
  117. package/instr_tmp/bitwrench.js +0 -1350
  118. package/karma.conf.js +0 -140
  119. package/makefile +0 -21
  120. package/quick-docs.html +0 -206
  121. package/test/bitwrench_test.js +0 -1255
  122. package/test/karma-test.js +0 -1081
  123. package/tools/bw_deprecatedNames.js +0 -19
  124. package/tools/bwconsole.js +0 -20
  125. package/tools/createSimpleHTMLPage.js +0 -41
  126. package/tools/emitreadme.sh +0 -4
  127. package/tools/export-bw-default-css.js +0 -41
  128. package/tools/umd2ModuleHack.js +0 -32
  129. package/tools/update-bw-package.js +0 -36
  130. package/tools/updatereadme.js +0 -34
@@ -1 +0,0 @@
1
- TQznzllBQGFVQPXeAYwPZsqupW+aGVLMtZ3vZau5G7Tayvm9VZjTpX5yAvIw3Ngc
@@ -1 +0,0 @@
1
- export let bw=(()=>{var bw={};bw.exportName="bw";bw.exportModuleType="AMD";bw.choice=function(x,choices,def){var z=x in choices?choices[x]:def;return _to(z)=="function"?z(x):z};bw.jsonClone=function(x){return JSON.parse(JSON.stringify(x))};bw.typeOf=function(x,baseTypeOnly){if(x===null)return"null";var y=typeof x=="undefined"?"undefined":{}.toString.call(x).match(/\s([a-zA-Z]+)/)[1].toLocaleLowerCase();if(y!="object"&&y!="function")return y;if(baseTypeOnly==true)return y;var r=y;try{r=x.constructor.name.toLocaleLowerCase()==y.toLocaleLowerCase()?y:x.constructor.name}catch(e){}if(r=="object"){if(x["_is_BW_HTMLNode"]==true)r="BW_HTMLNode"}return r};var _to=bw.typeOf;bw.to=_to;bw.typeAssign=function(a,typeString,trueValue,falseValue){if(["string","array"].indexOf(_to(typeString))==-1)typeString="notValidType";if(_to(typeString)=="string")typeString=[typeString];return typeString.indexOf(_to(a))>=0?trueValue:falseValue};var _toa=bw.toa=bw.typeAssign;bw.typeConvert=function(a,typeString,trueValue,falseValue){if(["string","array"].indexOf(_to(typeString))==-1)typeString="notValidType";if(_to(typeString)=="string")typeString=[typeString];return typeString.indexOf(_to(a))>=0?_to(trueValue)=="function"?trueValue(a):trueValue:_to(falseValue)=="function"?falseValue(a):falseValue};var _toc=bw.tc=bw.typeConvert;var optsCopy=function(dopts,opts){if(_to(opts)=="object"&&_to(dopts)=="object"){var i;for(i in opts){if(_to(opts[i])=="object"||_to(dopts[i])=="object"){var j;for(j in opts[i])dopts[i][j]=opts[i][j]}else dopts[i]=opts[i]}}return dopts};bw._oc=optsCopy;bw.arrayUniq=function(x){if(_to(x)!="array")return[];return x.filter(function(v,i,arr){return arr.indexOf(v)==i})};bw.arrayBinA=function(a,b){if(_to(a)!="array"||_to(b)!=="array")return[];return bw.arrayUniq(a.filter(function(n){return b.indexOf(n)!==-1}))};bw.arrayBNotInA=function(a,b){if(_to(a)!="array"||_to(b)!=="array")return[];return bw.arrayUniq(b.filter(function(n){return a.indexOf(n)<0}))};bw.DOMIsElement=function(el){var r=false;try{if(_to(el)=="undefined")return r;if(bw.isNodeJS()==false||typeof Element=="function")r=el instanceof Element}catch(e){r=typeof HTMLElement==="object"?el instanceof HTMLElement:el&&typeof el==="object"&&el!==null&&el.nodeType===1&&typeof el.nodeName==="string";bw.logd(e.toString())}return r};var _isEl=bw.DOMIsElement;bw.DOMGetElements=function(el,type){var r=[],a=[],i;if(bw.isNodeJS()==false){if(_isEl(el))return[el];if(_to(el)=="string"){type=_toa(type,"string",type,"auto");el.trim();if(type=="auto")type=bw.choice(el[0],{".":"className","#":"id"},"tagName");type=type.toLowerCase();switch(type){case"id":el=el[0]=="#"?el.substring(1,el.length):el;a=document.getElementById(el);a=_toa(a,"null",[],[a]);break;case"classname":el=el[0]=="."?el.substring(1,el.length):el;a=document.getElementsByClassName(el);break;case"tagname":a=document.getElementsByTagName(el);break;case"name":a=document.getElementsByName(el);break;case"css":a=document.querySelectorAll(el);break;default:a=document.querySelectorAll(el)}for(i in a)r.push(a[i])}}return r.filter(function(x){return _isEl(x)})};bw.DOMSetElements=function(domElement,param){var els=bw.DOMGetElements(domElement);if(els==[])bw.log("dom element not found");var i,l,e,ef=function(x,p){bw.log(x,p)};for(l=0;l<els.length;l++){e=els[l];switch(_to(param)){case"array":try{for(i=0;i<param.length;i++)e[param[i][0]]=param[i][1]}catch(d){ef(d,param)}break;case"object":try{for(i in param)e[i]=param[i]}catch(d){ef(d,param)}break;case"string":try{e.innerHTML=param}catch(d){ef(d,param)}break;case"function":try{param(e)}catch(d){ef(d,param)}break;default:break}}return els};bw.DOM=bw.DOMSetElements;bw.DOMInsertElement=function(parentEl,htmldata,putFirst){var el=null;if(bw.isNodeJS()==false){if(bw.DOMIsElement(htmldata))el=htmldata;else{el=document.createElement("div");el.innerHTML=bw.html(htmldata);el=el.firstChild}if(parentEl){parentEl=bw.DOM(parentEl)[0];if(putFirst){parentEl.insertBefore(el,parentEl.firstChild)}else parentEl.appendChild(el)}}return el};bw.DOMIns=bw.DOMInsertElement;bw.htmlToElement=function(htmldata){var el=null;if(bw.isNodeJS()==false){if(bw.DOMIsElement(htmldata))el=htmldata;else{el=document.createElement("div");el.innerHTML=bw.html(htmldata);el=el.firstChild}}return el};bw.DOMReplaceElement=function(oldEl,newEl){if(bw.isNodeJS()==false){var e=bw.DOM(oldEl)[0];return e.parentNode.replaceChild(bw.htmlToElement(newEl),e)}return null};bw.colorInterp=function(x,in0,in1,colors,stretch){var c=_toa(colors,"array",colors,["#000","#fff"]);c=c.length==0?["#000","#fff"]:c;if(c.length==1)return c[0];c=c.map(function(x){return bw.colorParse(x)});var a=bw.mapScale(x,in0,in1,0,c.length-1,{clip:true,expScale:stretch});var i=bw.clip(Math.floor(a),0,c.length-2);var r=a-i;var _f=function(x){return bw.mapScale(r,0,1,c[i][x],c[i+1][x],{clip:true})};return[_f(0),_f(1),_f(2),_f(3),"rgb"]};bw.colorHslToRgb=function(h,s,l,a,rnd){if(_to(h)=="array"){s=h[1];l=h[2];a=h[3];h=h[0]}var _fn=rnd==false?function(x){return x}:function(x){return bw.clip(Math.round(x),0,255)};var r,g,b,c,x,m;h=(h+360)%360;h/=60;if(h<0)h=6- -h%6;h%=6;s=Math.max(0,Math.min(1,s/100));l=Math.max(0,Math.min(1,l/100));c=(1-Math.abs(2*l-1))*s;x=c*(1-Math.abs(h%2-1));if(h<1){r=c;g=x;b=0}else if(h<2){r=x;g=c;b=0}else if(h<3){r=0;g=c;b=x}else if(h<4){r=0;g=x;b=c}else if(h<5){r=x;g=0;b=c}else{r=c;g=0;b=x}m=l-c/2;r=(r+m)*255;g=(g+m)*255;b=(b+m)*255;return[_fn(r),_fn(g),_fn(b),a,"rgb"]};bw.colorRgbToHsl=function(r,g,b,a,rnd){if(_to(r)=="array"){g=r[1];b=r[2];a=r[3];r=r[0]}r/=255,g/=255,b/=255;var max=Math.max(r,g,b),min=Math.min(r,g,b);var h,s,l=(max+min)/2;if(max==min){h=s=0}else{var d=max-min;s=l>.5?d/(2-max-min):d/(max+min);switch(max){case r:h=(g-b)/d+(g<b?6:0);break;case g:h=(b-r)/d+2;break;case b:h=(r-g)/d+4;break}h/=6}var _fn=rnd==false?function(x){return x}:function(x){return Math.round(x)};return[_fn(h*360),_fn(s*100),_fn(l*100),a,"hsl"]};bw.colorParse=function(s,defAlpha){defAlpha=_toa(defAlpha,"number",defAlpha,255);var r=[0,0,0,defAlpha,"rgb"];if(_to(s)=="array"){var p,df=[0,0,0,255,"rgb"];for(p=0;p<s.length;p++)df[p]=s[p];s=String(df[4])+"("+String(df[0])+","+String(df[1])+","+String(df[2])+","+String(df[3])+")"}s=String(s).replace(/\s/g,"");var reT=/\s*(#|hsl|rgb|yuv|hsv){1}([a-f|A-F|0-9|,().\t ]*)/gim;var i,j=0,x=reT.exec(s);if(_to(x)=="array"&&x.length>=3){r[4]=x[1]=="#"?"rgb":x;if(x[1]=="#"){switch(x[2].length){case 3:case 4:for(i=0;i<x[2].length;i++)r[i]=parseInt(x[2][i]+x[2][i],16);break;case 6:case 8:for(i=0;i<x[2].length;i+=2)r[j++]=parseInt(x[2][i]+x[2][i+1],16);break;default:bw.logd("bw.parseColor bad input "+s)}}else{r[4]=x[1].toLocaleLowerCase();if(x[2][0]=="("&&x[2][x[2].length-1]==")"){var v=x[2].substring(1,x[2].length-1);v=v.split(",");switch(v.length){case 3:case 4:for(i=0;i<v.length;i++)r[i]=Number(v[i]);break;default:bw.logd("bw.parseColor bad input : "+s)}}else{bw.logd("bw.parseColor bad input : "+s)}}}return r};bw.colorToRGBHex=function(c,format){var r="#00000000";var ph=function(x){var y=bw.clip(Math.round(x),0,255).toString(16);return y.length==1?"0"+y:y};c=bw.colorParse(c);switch(c[4]){case"rgb":r="#"+ph(c[0])+ph(c[1])+ph(c[2]);if(!(format=="auto"&&c[3]==255))r+=ph(c[3]);break;case"hsl":r=bw.colorToRGBHex(bw.colorHslToRgb(c));break;default:bw.logd("colorToRGBHex : unsupported format"+c[4])}return r};bw.colorConvertColorSpace=function(c,space,rnd){c=bw.colorParse(c);if(space==c[4])return c;switch(c[4]){case"rgb":break;case"hsl":c=bw.colorHslToRgb(c[0],c[1],c[2],c[3],rnd);break;default:bw.logd("colorConvertColorSpace: unsupported color format")}switch(space){case"rgb":break;case"hsl":c=bw.colorRgbToHsl(c[0],c[1],c[2],c[3],rnd);break;default:bw.logd("colorConvertColorSpace: unsupported color format")}return c};var _logdata=[];bw.log=function(value,msg,opts){var dopts={clear:false,saveMethod:"raw"};dopts=optsCopy(dopts,opts);if(dopts["clear"]==true||dopts["clear"]=="clear-only"){_logdata=[["Time-stamp (ms)"," Value "," Message "]];var ct=new Date;_logdata.push([0,ct.getTime()," log started at "+ct.toString()])}msg=_toa(msg,"undefined","",String(msg));value=dopts["saveMethod"]=="raw"?value:JSON.stringify(value);if(_to(value)!="undefined"&&dopts["clear"]!="clear-only")_logdata.push([(new Date).getTime()-_logdata[1][1],value,msg]);return _logdata.length-1};bw.log("","",{clear:"clear-only"});bw.logd=function(){var logdargs="bwlogd"in bw.bwargs?bw.bwargs["bwlogd"].split(","):[];if(logdargs.indexOf("none")<0){var i=0;var _a=[];for(i=0;i<arguments.length;i++)_a.push(arguments[i]);bw.log(_a,"bw.logd: "+bw.bwargs["bwlogd"])}};bw.logExport=function(opts){var dopts={format:"raw"};dopts=optsCopy(dopts,opts);var _ld=_logdata;if(dopts["format"]=="HTML"){return bw.makeHTMLTableStr(_ld,{sortable:true})}if(dopts["format"]=="text"){return _ld.map(function(x){return x.map(function(y){return bw.padString(y.toString(),16,"left")}).join("\t")}).join("\n")}return _ld};bw.setCookie=function(cname,cvalue,exdays){var d=new Date;d.setTime(d.getTime()+exdays*24*60*60*1e3);var expires="expires="+d.toUTCString();document.cookie=cname+"="+cvalue+"; "+expires};bw.getCookie=function(cname,defaultValue){var name=cname+"=";var ca=document.cookie.split(";");for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==" ")c=c.substring(1);if(c.indexOf(name)==0)return c.substring(name.length,c.length)}return defaultValue};bw.getURLParam=function(key,defaultValue){if(bw.isNodeJS()==true||typeof window!="object")return defaultValue;try{if(window.location.href){return bw.URLParamParse(window.location.href,key,defaultValue)}}catch(e){bw.log(e)}return defaultValue};bw.URLHash=function(url,defValue){if(_to(url)=="undefined")url=typeof window=="object"?window.location.href:"";var r=url.split(/#+/);return url.includes("#")?r[r.length-1]:defValue};bw.URLParamParse=function(url,key,defValue,allowHash){try{var hs=function(u){var x=u.split(/^.*\?+/);return x.length==2?x[1]:""};var sh=function(u,b){return b==true?u:u.split(/#+/)[0]};var params={},parts=sh(hs(url),allowHash).split("&");for(var i=0;i<parts.length;i++){var e=parts[i].split("=");if(!e[0])continue;params[decodeURIComponent(e[0])]=_to(e[1])=="string"?decodeURIComponent(e[1].replace("#","%23")):true}if(_to(key)=="undefined")return params;return params.hasOwnProperty(key)?params[key]:defValue}catch(e){bw.log(e);return defValue}};bw.URLParamPack=function(simpleDict,inclQuestion){var k,s=[];if(_to(simpleDict)=="object"){for(k in simpleDict){s.push([encodeURIComponent(k)+"="+encodeURIComponent(simpleDict[k].toString())])}s=s.join("&")}else s="";return(inclQuestion?"?":"")+s};bw.htmlSafeStr=function(str){var c={"<":"&lt;",">":"&gt;","&":"&amp;",'"':"&quot;","'":"&#039;","#":"&#035;","\\\\":"","\n":"<br>","\t":"&nbsp;&nbsp;&nbsp;&nbsp;"};return str.toString().replace(new RegExp("["+Object.keys(c).join("")+"]","gm"),function(s){return c[s]})};bw.htmlFavicon=function(iconStr,color){iconStr=iconStr?iconStr:"🔧";var c=bw.to(color)=="string"?color:"black";return bw.html({t:"link",a:{href:"data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='0.9em' font-size='90' style='fill:"+c+"'>"+iconStr+"</text></svg>",rel:"icon"}})};bw.htmlJSON=function(json,pwrap){function f(json){json=JSON.stringify(json,undefined,2);if(typeof json!="string"){json=JSON.stringify(json,undefined,2)}json=json.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;");return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g,function(match){var sty="color: darkorange;";if(/^"/.test(match)){if(/:$/.test(match)){sty="color:red"}else{sty="color:purple"}}else if(/true|false/.test(match)){sty="color:grey"}else if(/null/.test(match)){sty="color:black"}else sty="color:green";return'<span style="'+sty+'">'+match+"</span>"})}pwrap=_toa(pwrap,"undefined","white-space:pre-wrap;","");return"<pre style='"+pwrap+"'>"+f(json)+"</pre>"};bw.makeCSS=function(cssData,options){var dopts={emitStyleTag:false,atr:{},pretty:false};dopts=optsCopy(dopts,options);var s="\n";var tb=function(a){a=String(a).trim();a=(a[0]=="{"?" ":" {")+a;a+=(a[a.length]=="}"?"":"}")+"\n";return a};try{switch(_to(cssData)){case"string":s+=cssData+"\n";break;case"array":var i;for(i=0;i<cssData.length;i++){var j=cssData[i];switch(_to(j)){case"string":s+=j+"\n";break;case"array":if(j.length==1&&_to(j[0])=="string"){s+=j[0]+"\n";break}if(j.length==2){var _name=j[0],_rule=j[1],_ruleOutput="";if(_to(_name)=="array"){s+=_name.join(", ")}else{s+=String(_name)}switch(_to(_rule)){case"array":_ruleOutput=_rule.join("; ")+";";break;case"object":{var x;for(x in _rule){_ruleOutput+=x+": "+_rule[x]+"; "}}break;case"string":default:_ruleOutput=_rule}s+=tb(_ruleOutput)+"\n"}break;default:}}break;default:s=""}}catch(e){bw.logd(e)}if(dopts["emitStyleTag"]){s=bw.html(["style",dopts["atr"],s])}s.replace(/\n+/g,"\n").replace(/s+/g," ");return s};bw.makeCSSRule=function(cssData,options){var dopts={emitStyleTag:false,atr:{},pretty:true};dopts=optsCopy(dopts,options);var k,d,v=[],s="",sp=dopts.pretty?" ":"",cr=dopts.pretty?"\n":"";try{if(_to(cssData)=="array"){k=cssData[0],d=cssData[1];s+=_toa(k,"array",k,[k.toString()]).join(","+sp)+cr;for(k in d){v.push([sp+sp+k+":"+sp+cssData[1][k]+";"+sp+cr])}s+="{"+cr+v.join("")+"}"+cr}}catch(e){bw.logd(e)}return s};bw.htmlIsVoidTag=function(tag){return" area base br col command embed hr img input keygen link meta param source track wbr ".search(" "+String(tag).trim().toLowerCase()+" ")>=0};bw.htmlNode=function(x,opts){var err="",dopts={functionExec:true,atomic2span:false};dopts=optsCopy(dopts,opts);var isv=bw.htmlIsVoidTag;var isnu=function(x){return bw.toa(x,["null","undefined"],true,false)};var HTMLNode=function BW_HTMLNode(){this.t="div";this.a={};this.c=[];this.o={tagClose:"auto"};this._is_BW_HTMLNode=true};var i,n=new HTMLNode;switch(bw.to(x)){case"null":case"undefined":n="";err="error: html node content is "+bw.to(x);break;case"object":[["tag","t"],["attrib","a"],["content","c"],["options","o"]].forEach(function(z){n[z[1]]=z[0]in x?x[z[0]]:n[z[1]]});for(i in n){n[i]=i in x?x[i]:n[i];if(isnu(n[i])){n="";err="Error HTMLNode : a field is null or undefined";break}}break;case"BW_HTMLNode":for(i in x){n[i]=x[i]}break;case"array":var idx=[[],["c"],["t","c"],["t","a","c"],["t","a","c","o"]];var m=x.length>4?4:x.length;for(i=0;i<m;i++){n[idx[m][i]]=x[i]}for(i in n)if(isnu(n[i])){n="";err="Error HTMLNode : bad array array input";break}break;case"function":var h;if(dopts.functionExec){h=bw.htmlNode(x(),dopts);n=h.node;err=h.error}else n=h;break;default:if(dopts.atomic2span){n.c=[x.toString()];n.t="span"}else n=x.toString()}var r={node:n,ntype:bw.typeOf(n),error:err,isVoidTag:bw.typeOf(n)=="BW_HTMLNode"?isv(n.t):false};return r};bw.htmlEmit=function(htmlData,opts,state){var dopts={tagClose:"inherit",htmlEscContent:false};state=bw.toa(state,["undefined","null"],{nodesCnt:0,levelCnt:0,levelMax:0},state);dopts=optsCopy(dopts,opts);var _atr=function(n){var as=[],k,v,vr;for(k in n.a){v=n.a[k];if(v==null){as.push(k);continue}if(k.search(/^on/)>=0){if(bw.to(v)=="function"){if(n.o["atrOnEventRegister"]==false){vr=String(v())}else{vr=bw.funcGetDispatchStr(bw.funcRegister(v),"this")}}else{vr="";try{vr=v.toString()}catch(e){vr=String(v)}}}else{switch(k){case"style":if(_to(v)=="string")vr=v.toString();else vr=bw.makeCSSRule(["",v],{pretty:false}).trim().replace(/^{/,"").replace(/}$/,"").trim();break;default:if(bw.to(v)=="array")vr=v.join(" ");vr=v.toString()}}as.push(k+"="+'"'+vr.replace('"','\\"')+'"')}as=as.join(" ");return(as.length>0?" ":"")+as+(as.length>0?" ":"")};var h=[],n=bw.htmlNode(htmlData);if(_to(n.node)=="function"){n=bw.htmlNode(n.node());n=_toa(n.ntype,["BW_HTMLNode","string"],n,"")}state.nodesCnt++;if(n.ntype!="BW_HTMLNode"){h.push(dopts.htmlEscContent?bw.htmlSafeStr(n.node.toString()):n.node.toString())}else{if(n.node.t!="")h.push("<",n.node.t,_atr(n.node));var tagClose=dopts.tagClose!="inherit"?dopts.tagClose:n.node.o.tagClose;switch(tagClose){case"auto":if(n.isVoidTag){h.push("/>");break}case"all":default:if(n.node.t!="")h.push(">");var i,x;if(bw.typeOf(n.node.c)!="array"){state.levelCnt++;state.levelMax=state.levelCnt>state.levelMax?state.levelCnt:state.levelMax;x=bw.htmlEmit(n.node.c,dopts,state);state.levelCnt--;h.push(x.html)}else{for(i in n.node.c){state.levelCnt++;state.levelMax=state.levelCnt>state.levelMax?state.levelCnt:state.levelMax;x=bw.htmlEmit(n.node.c[i],dopts,state);state.levelCnt--;h.push(x.html)}}if(tagClose!="none"){if(n.node.t!="")h.push("</",n.node.t,">")}}}var html=h.join("");return{html:html,state:state}};bw.html=function(data,options){return bw.htmlEmit(data,options).html};bw.htmla=function(listData,options){if(_to(listData)!="array")return bw.html(listData,options);return listData.map(function(x){return bw.html(x,options)}).join("")};bw.htmlList=function(listData,listType,atr,atri){if(_to(listData)!="array")return"";if(listData.length<1)return"";atr=_toa(atr,"object",atr,{});atri=_toa(atr,"object",atr,{});var lc=listData.map(function(x){return bw.html(["li",atri,x])});listType=["ul","ol"].indexOf(listType)==-1?"ol":listType;return bw.html({t:listType,a:atr,c:lc})};bw.openFullScreen=function(){var elem=document.documentElement;if(elem.requestFullscreen){elem.requestFullscreen()}else if(elem.mozRequestFullScreen){elem.mozRequestFullScreen()}else if(elem.webkitRequestFullscreen){elem.webkitRequestFullscreen()}else if(elem.msRequestFullscreen){elem.msRequestFullscreen()}};bw.classStrAddDel=function(classData,classesToAdd,classesToDel){var tnorm=function(x){x=bw.toa(x,"undefined",[],x);return bw.to(x)=="array"?x:x.toString().trim().split(/\s+/gi)};var c=tnorm(classData);var ca=tnorm(classesToAdd);var cd=tnorm(classesToDel);return bw.arrayBNotInA(cd,c.concat(ca)).join(" ").trim().replace(/\s+/gi," ")};bw.classStrToggle=function(classData,classesToToggle){var tnorma=function(x){x=bw.toa(x,"undefined",[],x);return bw.to(x)=="array"?x:x.toString().trim().split(/\s+/gi)};var c=tnorma(classData);var t=tnorma(classesToToggle);return bw.classStrAddDel(classData,bw.arrayBNotInA(c,t),bw.arrayBinA(c,t))};bw.htmlTabs=function(tabData,opts){if(_to(tabData)!="array")return"";if(tabData.length<1)return"";var dopts={atr:{class:""},tab_atr:{class:""},tabc_atr:{class:""},indent:"",pretty:false};dopts=optsCopy(dopts,opts);var ti=tabData.map(function(x){return["li",{class:"bw-tab-item",onclick:"bw.selectTabContent(this)"},x[0]]});var tc=tabData.map(function(x){return["div",{class:"bw-tab-content"},x[1]]});ti[0][1]["class"]=bw.classStrAddDel(ti[0][1]["class"],"bw-tab-active");tc[0][1]["class"]=bw.classStrAddDel(tc[0][1]["class"],"bw-show");dopts["atr"]["class"]=bw.classStrAddDel(dopts["atr"]["class"],"bw-tab-container");dopts["tab_atr"]["class"]=bw.classStrAddDel(dopts["tab_atr"]["class"],"bw-tab-item-list");dopts["tabc_atr"]["class"]=bw.classStrAddDel(dopts["tabc_atr"]["class"],"bw-tab-content-list");return bw.html({t:"div",a:dopts["atr"],c:[["ul",dopts["tab_atr"],ti],["div",dopts["tabc_atr"],tc]]})};bw.htmlTable=function(data,opts){if(_to(data)!="array"||data.length<1)return"";var dopts={useFirstRowAsHeaders:true,useDefaultStyle:true,atr:{},thead_atr:{},th_atr:{},tbody_atr:{},tr_atr:{},td_atr:{},caption:"",sortable:false};var i=0,head="",body="",r,_hs=bw.html;dopts=optsCopy(dopts,opts);if(dopts.useDefaultStyle){dopts.atr["class"]="bw-table bw-table-stripe"}if(dopts.sortable==true){dopts.th_atr["onclick"]="bw.sortTableDispatch(this)";if("class"in dopts.th_atr)dopts.th_atr["class"]+=dopts.th_atr["class"].split(/[ ]+/).indexOf("bw-table-sort-xxa")<0?" bw-table-sort-xxa":"";else dopts.th_atr["class"]="bw-table-sort-xxa"}else{if(_to(dopts.sortable)=="function"){var sfid=bw.funcRegister(dopts.sortable);dopts.th_atr["onclick"]=bw.funcGetDispatchStr(sfid,"this")}}if(dopts["useFirstRowAsHeaders"]){head=data[0].map(function(x){return _hs({t:"th",a:dopts.th_atr,c:x})}).join("");head=_hs({t:"tr",a:dopts.tr_atr,c:head});i=1}else i=0;head=bw.html({t:"thead",a:dopts.thead_atr,c:head});for(;i<data.length;i++){r=data[i].map(function(x){return _hs({t:"td",a:dopts.td_atr,c:x})}).join("");body+=_hs({t:"tr",a:dopts.tr_atr,c:r})}body=bw.html({t:"tbody",a:dopts.tbody_atr,c:body});dopts.caption=dopts.caption==""?"":_hs({t:"caption",a:{},c:dopts.caption});return _hs({t:"table",a:dopts.atr,c:[dopts.caption,head,body]})};bw.htmlAccordian=function(data,opts){var s="";if(_to(data)!=="array")return s;var dopts={atr:{class:"bw-accordian-container"},atr_h:{onclick:"bw.DOMClassToggle(this.nextSibling,'bw-hide')",class:"bw-thm-light"},atr_c:{class:"bw-hide"}};dopts=optsCopy(dopts,opts);dopts.atr_h["onclick"]="bw.DOMClassToggle(this.nextSibling,'bw-hide')";s=data.map(function(x){var a=dopts["atr_c"],show;show=x.length>2&&x[2].show==true;if(a["class"]){a["class"]=show?bw.classStrAddDel(a["class"],"","bw-hide"):bw.classStrAddDel(a["class"],"bw-hide")}else a["class"]=show?"":"bw-hide";return bw.html({t:"div",a:dopts["atr_h"],c:[x[0]]})+bw.html({t:"div",a:a,c:[x[1]]})}).join("");s=bw.html({t:"div",a:dopts["atr"],c:[s]});return s};bw.htmlSign=function(content,opts){var dopts={atr:{style:{"font-weight":"700","font-size":"7em"}},escContent:false};dopts=optsCopy(dopts,opts);content=dopts.escContent!=false?bw.htmlSafeStr(content):content;var c={a:{class:"bw-sign"},c:[{c:{a:dopts.atr,c:[content]}}]};return bw.html(c)};bw.getFile=function(fname,callback_fn,options){var dops={parser:"raw"};dops=optsCopy(dops,options);if(_to(fname)!="string"){return"invalid filename"}var prs=dops["parser"]=="JSON"?JSON.parse:function(s){return s};if(bw.isNodeJS()==true){var fs=require("fs");fs.readFile(fname,"utf8",function(err,data){if(err)throw err;callback_fn(prs(data))})}else{var x=new XMLHttpRequest;x.overrideMimeType("application/json");x.open("GET",fname,true);x.onreadystatechange=function(){if(x.readyState==4&&x.status=="200"){callback_fn(prs(x.responseText))}};x.send(null)}return"BW_OK"};bw.getJSONFile=function(fname,callback_fn){return bw.getFile(fname,callback_fn,{parser:"JSON"})};bw.copyToClipboard=function(data){if(bw.isNodeJS())return;var listener=function(e){e.clipboardData.setData("text/html",data);e.clipboardData.setData("text/plain",data);e.preventDefault()};document.addEventListener("copy",listener);document.execCommand("copy");document.removeEventListener("copy",listener)};bw.saveClientFile=function(fname,data){if(bw.isNodeJS()){var fs=require("fs");fs.writeFile(fname,data,function(err){if(err)return bw.log(err);bw.log("error saving ",fname,data)})}else{var saveData=function(){var a=document.createElement("a");document.body.appendChild(a);a.style="display: none";return function(data,fname){var json=JSON.stringify(data),blob=new Blob([json],{type:"octet/stream"}),url=window.URL.createObjectURL(blob);a.href=url;a.download=fname;a.click();window.URL.revokeObjectURL(url)}}();saveData(data,fname)}};var gBWTime=(new Date).getTime();bw.clearTimer=function(message){gBWTime=(new Date).getTime();if(_to(message)!="undefined")bw.logd(String(message));return gBWTime};bw.readTimer=function(message){var ct=(new Date).getTime();if(_to(message)!="undefined")bw.logd(String(message));return ct-gBWTime};bw.clearTimer();bw.setIntervalX=function(callback,delay,number_of_repetitions){var x=0;var intervalID=setInterval(function(){callback(x);if(++x>=number_of_repetitions){clearInterval(intervalID)}},delay)};bw.repeatUntil=function(testFn,successFn,failFn,delay,maxReps,lastFn){var _count=0;if(typeof testFn!="function")return"err";if(typeof delay!="number")delay=250;if(typeof maxReps!="number")maxReps=1;var _testFn=testFn;var _successFn=typeof successFn=="function"?successFn:function(){};var _failFn=typeof failFn=="function"?failFn:function(){};var _lastFn=typeof lastFn=="function"?lastFn:function(){};var _f=function(){var success=_testFn();if(true==success){_successFn();_lastFn(true,_count)}else{_failFn();if(_count>=maxReps){_lastFn(success,_count)}else{_count++;window.setTimeout(_f,delay)}}};_f()};bw.naturalCompare=function(as,bs){var a,b,a1,b1,i=0,L,rx=/(\d+)|(\D+)/g,rd=/\d/;if(isFinite(as)&&isFinite(bs))return Math.sign(as-bs);a=String(as).toLocaleLowerCase();b=String(bs).toLocaleLowerCase();if(a===b)return as>bs?1:0;if(!(rd.test(a)&&rd.test(b)))return a>b?1:-1;a=a.match(rx);b=b.match(rx);L=a.length>b.length?b.length:a.length;while(i<L){a1=a[i];b1=b[i++];if(a1!==b1){if(isFinite(a1)&&isFinite(b1)){if(a1.charAt(0)==="0")a1="."+a1;if(b1.charAt(0)==="0")b1="."+b1;return a1-b1}else return a1>b1?1:-1}}return Math.sign(a.length-b.length)};bw.sortHTMLTable=function(table,col,dir,sortFunction){var rows,switching,i,x,y,shouldSwitch;var sortF=_to(sortFunction)=="function"?sortFunction:bw.naturalCompare;table=bw.DOM(table)[0];dir=dir==true||dir=="up"?true:false;switching=true;col=_to(col)=="number"?col:0;while(switching){switching=0;rows=table.getElementsByTagName("TR");for(i=1;i<rows.length-1;i++){shouldSwitch=0;x=rows[i].getElementsByTagName("TD")[col].innerHTML;y=rows[i+1].getElementsByTagName("TD")[col].innerHTML;shouldSwitch=dir?sortF(x,y,col)>0:sortF(x,y,col)<0;if(shouldSwitch)break}if(shouldSwitch){rows[i].parentNode.insertBefore(rows[i+1],rows[i]);switching=true}}};bw.sortTableDispatch=function(item,fn){var i;item=bw.DOM(item)[0];if(_to(item).substr(0,4)!="html")return false;var index=0,dir;var cols=item.parentElement.getElementsByTagName("th");for(i=0;i<cols.length;i++){if(cols[i]==item){index=i;dir=bw.DOMClass(cols[i],"bw-table-sort-upa");if(dir){bw.DOMClass(cols[i],"bw-table-sort-upa","bw-table-sort-dna")}else{if(bw.DOMClass(cols[i],"bw-table-sort-dna")){bw.DOMClass(cols[i],"bw-table-sort-dna","bw-table-sort-upa")}else bw.DOMClass(cols[i],"bw-table-sort-xxa","bw-table-sort-upa")}}else{bw.DOMClass(cols[i],"bw-table-sort-upa","");bw.DOMClass(cols[i],"bw-table-sort-dna","");bw.DOMClass(cols[i],"bw-table-sort-xxa","bw-table-sort-xxa")}}bw.sortHTMLTable(item.parentElement.parentElement.parentElement,index,dir,fn)};var _fnRegistry={};var _fnIDCounter=0;bw.funcRegister=function(fn,forceName){var fnID="class_bwfn_"+_fnIDCounter;_fnIDCounter++;fnID=_to(forceName)=="string"?forceName:fnID;fnID.trim();_fnRegistry[fnID]=fn;return fnID};bw.funcUnregister=function(fnID){if(fnID in _fnRegistry)delete _fnRegistry[fnID]};bw.funcGetById=function(fnID,errFn){fnID=String(fnID);if(fnID in _fnRegistry)return _fnRegistry[fnID];else{var _id=fnID;return _to(errFn)=="function"?errFn:function(){bw.log(_id,"bw.funcGetById(): unregistered fn error")}}};bw.funcGetDispatchStr=function(fnID,argstring){switch(_to(argstring)){case"string":case"number":argstring=String(argstring);break;case"array":argstring=argstring.join(",");break;case"function":argstring=argstring();break;default:argstring=""}return"bw.funcGetById('"+fnID+"')("+argstring+")"};bw.funcGetRegistry=function(){return _fnRegistry};bw.loremIpsum=function(numChars,startSpot,startWithCapitalLetter){startSpot=_to(startSpot)!="number"?0:Math.round(startSpot);var l="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. ";startSpot=startSpot%l.length;l=l.substring(startSpot,l.length)+l.substring(0,startSpot);if(_to(numChars)!="number")numChars=l.length;var i=numChars,s="";while(i>0){s+=i<l.length?l.substring(0,i):l;i-=l.length}if(s[s.length-1]==" ")s=s.substring(0,s.length-1)+".";if(startWithCapitalLetter!=false){var c=s[0].toUpperCase();c=c.match(/[A-Z]/)?c:"M";s=c+s.substring(1,s.length)}return s};bw.docString=function(s,options){var dopts={docType:"jsdoc",delims:["/**","*/"],parseJSDocParams:false,dropLeadin:false};dopts=optsCopy(dopts,options);var _es=function(str){return str.replace(/(?=[\\^$*+?.()|{}[\]])/g,"\\")};dopts["delims"]=bw.choice(dopts["docType"],{jsdoc:["/**","*/"],python:['"""','"""'],jspy:['/**"""','"""*/']},dopts["delims"]);var c=_to(s)=="function"?s.toString():String(s);var r=[];try{var re=new RegExp(_es(dopts["delims"][0])+"\\s*\\n*([^\\*]|(\\*(?!\\/)))*"+_es(dopts["delims"][1]),"ig");r=c.match(re)}catch(e){bw.log(String(e))}if(_to(r)=="array"){r=r.map(function(x){return x.substring(dopts["delims"][0].length,x.length-dopts["delims"][1].length)});r=dopts["dropLeadin"]==true?r.map(function(x){return x.split(/[\n\r]/).map(function(y){return bw.trim(y,"left")+"\n"})}):r}else r=[];return r};bw.docStringParseLine=function(s){var r={source:s,field:"",types:"",name:"",description:""};var a=s.replace(/^\s*(\/\*\*?)?|(\*\/)?\s*$/gi,"");a=a.replace(/^\s*\**\s*/,"");if(a.charAt(0)=="@"){var e,x;var t=bw.trim;e=/^@([A-Za-z0-9_<>[\]]*)/i;x=a.match(e);if(x!=null){r["field"]=t(x[1])}else return r;a=a.replace(e,"");e=/^\s*\{([A-Za-z0-9_|\s,.\-+!@#$%^&*()=[\]]*)\}/i;x=a.match(e);if(x!=null){r["types"]=t(x[1])}a=a.replace(e,"");e=/^\s*([\S]*)/i;x=a.match(e);if(x!=null){r["description"]=t(x[1])}a=a.replace(e,"");e=/^\s*([\S]*)/i;x=a.match(e);if(x!=null){r["name"]=t(x[1])}a=a.replace(e,"");if(r["name"].match(/^\s*-+\s*/)!=null){r["name"]=r["description"];r["description"]=t(a)}else{r["description"]=r["description"]+" "+r["name"]+" "+t(a);r["name"]=""}}return r};bw.docStringParse=function(s){s=bw.docString(s)[0];var a=s.split("\n");var i,r=[bw.docStringParseLine(a[0])];for(i=1;i<a.length;i++){var l=bw.docStringParseLine(a[i]);if(l["field"]==""){if(r[r.length-1]["field"]==""){r[r.length-1]["source"]+=l["source"]}else r[r.length-1]["description"]+=l["source"]}else r.push(l)}return r};bw.isHexStr=function(str,allowChars){if(_to(str)=="string"){str=str.replace(new RegExp("["+allowChars+"]","g"),"");var isHexReg=new RegExp("^[0-9A-Fa-f]{"+str.length+"}$");return isHexReg.test(str)==true?str.length:false}return false};bw.__monkey_patch_is_nodejs__=new function(){var _t="ignore";this.set=function(x){_t=_toa(x,"boolean",x,"ignore")};this.get=function(){return _t};return this};bw.isNodeJS=function(){if(bw.__monkey_patch_is_nodejs__.get()!="ignore")return bw.__monkey_patch_is_nodejs__.get();return(typeof module!=="undefined"&&module.exports)!==false};bw.fixNum=function(num,digits){num=Number(num);if(isNaN(num))return NaN;digits=_to(digits)=="number"?digits:3;num*=Math.pow(10,digits);num=num>0?Math.floor(num):Math.ceil(num);num/=Math.pow(10,digits);return num};bw.multiArray=function(value,dims){var v=function(){return _to(value)=="function"?value():value};dims=_to(dims)=="number"?[dims]:dims;var _array=function(a,dim){if(dim<dims.length){for(var i=0;i<dims[dim];i++){a[i]=dim==dims.length-1?v():_array([],dim+1)}return a}};return _array([],0)};bw.clip=function(data,min,max){var l=min<max?min:max;var h=max>min?max:min;if(_to(data)=="array"){return data.map(function(x){return x<l?l:x>h?h:x})}else return data<l?l:data>h?h:data};bw.mapScale=function(x,in0,in1,out0,out1,options){var dopts={clip:true,expScale:false};dopts=optsCopy(dopts,options);if(in0==in1)return x;out0=_toa(out0,"number",out0,0);out1=_toa(out1,"number",out1,1);var ms=function(z){if(dopts["expScale"]){var y=(z-(in1+in0)/2)/(in1-in0)*dopts["expScale"];z=(out1-out0)*(1/(1+Math.exp(-y)))+out0}else z=(z-in0)/(in1-in0)*(out1-out0)+out0;if(dopts["clip"])z=bw.clip(z,out0,out1);return z};if(_to(x)=="number")return ms(x);return x.map(ms)};bw.padNum=function(x,width,options){var dopts={pad:" "};dopts=optsCopy(dopts,options);x=String(x);return x.length>=width?x:new Array(width-x.length+1).join(dopts["pad"])+x};bw.trim=function(s,dir){var t=bw.choice(dir,{left:/^[\s\uFEFF\xA0\n]+/g,right:/[\s\uFEFF\xA0\n]+$/g,none:/(?!)/},/^[\s\uFEFF\xA0\n]+|[\s\uFEFF\xA0\n]+$/g);return String(_toa(s,"undefined","",s)).replace(t,"")};bw.padString=function(s,width,dir,options){var dopts={pad:" ",trimDir:"both"};dopts=optsCopy(dopts,options);s=String(s);var x=bw.trim(s,dopts["trimDir"]);var p=width>x.length?width-x.length+1:0;var q=bw.choice(dir,{left:[p,0],right:[0,p],center:[Math.round(p/2),p-Math.round(p/2)+1]},[0,0]);return new Array(q[0]).join(dopts["pad"])+x+new Array(q[1]).join(dopts["pad"])};bw.random=function(rangeBegin,rangeEnd,options){rangeBegin=_to(rangeBegin)=="number"?rangeBegin:0;rangeEnd=_to(rangeEnd)=="number"?rangeEnd:100;var dopts={setType:"int",dims:false};dopts=optsCopy(dopts,options);var _rnd=function(){var n=0;dopts.setType=["int","float","number"].indexOf(dopts.setType)==-1?"int":dopts.setType;if(rangeEnd<rangeBegin){rangeBegin^=rangeEnd;rangeEnd^=rangeBegin;rangeBegin^=rangeEnd}n=Math.random()*(rangeEnd-rangeBegin)+rangeBegin;return dopts.setType=="int"?Math.round(n):n};if(_to(dopts["dims"])=="array"||_to(dopts["dims"])=="number")return bw.multiArray(_rnd,dopts["dims"]);return _rnd()};bw.prandom=function(rangeBegin,rangeEnd,seed,options){rangeBegin=_to(rangeBegin)=="number"?rangeBegin:0;rangeEnd=_to(rangeEnd)=="number"?rangeEnd:100;var dopts={setType:"int",dims:false};dopts=optsCopy(dopts,options);var _cseed=seed;var _rnd=function(){var n=0;dopts.setType=["int","float","number"].indexOf(dopts.setType)==-1?"int":dopts.setType;if(rangeEnd<rangeBegin){rangeBegin^=rangeEnd;rangeEnd^=rangeBegin;rangeBegin^=rangeEnd}n=(bw.hashFnv32a("start string",_cseed)&65535)/65536*(rangeEnd-rangeBegin)+rangeBegin;_cseed=dopts.setType=="int"?Math.round(n):n;return dopts.setType=="int"?Math.round(n):n};if(_to(dopts["dims"])=="array"||_to(dopts["dims"])=="number")return bw.multiArray(_rnd,dopts["dims"]);return _rnd()};bw.hashFnv32a=function(str,seed,returnHexStr){var i,l,hval=typeof seed=="undefined"?2166136261:seed;for(i=0,l=str.length;i<l;i++){hval^=str.charCodeAt(i);hval+=(hval<<1)+(hval<<4)+(hval<<7)+(hval<<8)+(hval<<24)}if(returnHexStr){return("0000000"+(hval>>>0).toString(16)).substr(-8)}return hval>>>0};bw.CSSMakeTheme=function(color){var c=bw.colorRgbToHsl(bw.colorParse(color));var p="bw-theme-";var thm=["l5","l4","l3","l2","l1","d1","d2","d3","d4","d5"].map(function(x){return p+x});var im=" !important";thm=thm.map(function(x,i){return[x,[["color",(i<5?"#000":"#fff")+im],["background-color",c+im]]]});return thm};bw.CSSSimpleStyles=function(appendToHead,options){var dopts={globals:false,id:"bw-default-styles",exportCSS:false,colorset:{color:"#000","background-color":"#ddd",active:"#222"},pretty:false,themes:[[".bw-thm-light",{color:"#020202 !important;","background-color":"#e2e2e2 !important;"}],[".bw-thm-dark",{color:"#e2e2e2 !important;","background-color":"#020202 !important;"}]]};var s="\n",i;var _r=bw.fixNum;var rl=bw.makeCSSRule;dopts=optsCopy(dopts,options);var defs={defGlobals:{"box-sizing":"border-box"},defContainer:{height:"100%",width:"90%",margin:"0 auto","padding-left":"2%","padding-right":"2%",left:"0",top:"1%","box-sizing":"border-box"},defFontSerif:{"font-family":"Times New Roman, Times, serif"},defFontSansSerif:{"font-family":"Arial, Helvetica, sans-serif"}};if(dopts["globals"]=="load"){s+=rl([["html","body"],defs.defContainer]);s+=rl(["*"+defs.defFontSansSerif])}var d=[["*",defs.defGlobals],[".bw-def-page-setup",defs.defContainer],[".bw-font-serif",defs.defFontSerif],[".bw-font-sans-serif",defs.defFontSansSerif],"\n",[".bw-left",{"text-align":"left"}],[".bw-right",{"text-align":"right"}],[".bw-center",{"text-align":"center",margin:"0 auto"}],[".bw-justify",{"text-align":"justify"}],[".bw-code",{"font-family":"monospace","white-space":"pre-wrap"}],[".bw-pad1",{"padding-left":"1%","padding-right":"1%"}],"\n",[".bw-table",{"border-collapse":"collapse","border-spacing":"0",border:"1px solid #444"}],[".bw-table th",{"background-color":"#bbb",padding:"4px",border:"1px solid #444"}],[".bw-table td",{padding:"4px",border:"1px solid #444"}],[".bw-table-stripe tr:nth-child(even)",{"background-color":"#f0f0f0"}],[".bw-table tr td:first-child",{"font-weight":"700"}],[".bw-table-border-round",{"border-radius":"2px"}],[".bw-table-sort-upa::after",{content:'"\\2191"'}],[".bw-table-sort-dna::after",{content:'"\\2193"'}],[".bw-table-sort-xxa::after",{content:'"\\00a0"'}],"\n",[".bw-tab-item-list",{margin:0,"padding-inline-start":0}],[".bw-tab-item",{display:"inline","padding-top":"0.75em","padding-left":"0.75em","padding-right":"0.75em","border-top-right-radius":"7px","border-top-left-radius":"7px"}],[".bw-tab-active",{"font-weight":"700"}],[".bw-tab:hover",{cursor:"pointer","font-weight":700}],[".bw-tab-content-list",{margin:0,"padding-top":"0.0em"}],[".bw-tab-content",{display:"none","border-radius":0}],[".bw-tab-content, .bw-tab-active",{"background-color":"#ddd",padding:"0.5em"}],"\n",[".bw-accordian-container > div",{padding:"0.5em"}],"\n",[".bw-container",{margin:"0 auto"}],[".bw-row",{width:"100%",display:"block"}],['.bw-row [class^="bw-col"]',{float:"left"}],[".bw-row::after",{content:'""',display:"table",clear:"both"}],[".bw-box-1",{"padding-top":"10px","padding-bottom":"10px","border-radius":"8px"}],"\n",[".bw-sign",{position:"inherit",display:"table",height:"100%",width:"100%"}],[".bw-sign > div",{display:"table-cell","vertical-align":"middle"}],[".bw-sign > div > div",{"text-align":"center"}],"\n",[".bw-hide",{display:"none"}],[".bw-show",{display:"block"}]];[1,2,3,4,5,6].map(function(x){d.push([".bw-h"+x,{"font-size":_r(3.2*Math.pow(.85,x+1))+"rem"}])});d.push("\n");for(var k=1;k<=12;k++)d.push([".bw-col-"+k,{width:_r(k*100/12)+"%"}]);d.push("\n");s+=d.map(function(x){return rl(x,{pretty:dopts.pretty})}).join("\n")+"\n";d.push("\n");for(i in dopts["colorset"]){s+=".bw-color-"+i+" {"+i+":"+dopts["colorset"][i]+"}\n"}d.push("\n");bw.makeCSS(dopts["themes"]);for(i=0;i<dopts["themes"].length;i++){s+=rl(dopts["themes"][i])}var m="@media only screen and (min-width: ";s+=m+"540px) {.bw-def-page-setup {width: 96%;}}\n";s+=m+"720px) {.bw-def-page-setup {width: 92%;}}\n";s+=m+"960px) {.bw-def-page-setup {width: 88%;}}\n";s+=m+"1100px){.bw-def-page-setup {width: 86%;}}\n";s+=m+"1600px){.bw-def-page-setup {width: 84%;}}\n";if(bw.isNodeJS()==false){var h=bw.DOM("head")[0];var el=document.createElement("style");el.id=dopts["id"];el.textContent=s;if(appendToHead&&document.getElementById(dopts["id"])==null)h.appendChild(el)}if(dopts["exportCSS"])s=bw.html(["style",{id:dopts["id"]},"\n/**\n bitwrench basic css styles\n version: "+bw.version()["version"]+"\n */"+s]);return s};bw.CSSSimpleThemes=function(d,appendToHead){var s="",xs={};var def=[{css:[["*",{"background-color":"#333",color:"#ddd","font-family":"sans-serif","box-sizing":"border-box"}],["body",{"margin-top":"1%"}],["th",{"background-color":"#555"}],["tbody tr:nth-child(even)",{"background-color":"#f0f0f0"}],[["table","td","th"],{"border-collapse":"collapse",border:"1px solid #ddd"}],[["td","th"],{padding:"4px"}],[["div","body","button","table","input"],{"border-radius":"2px"}]]},{css:[["*",{"background-color":"#f8f8f8",color:"#111","font-family":"sans-serif","box-sizing":"border-box"}],["body",{"margin-top":"1%"}],["th",{"background-color":"#ddd"}],["tbody tr:nth-child(even)",{"background-color":"#ddd"}],[["table","td","th"],{"border-collapse":"collapse",border:"1px solid #111"}],[["td","th"],{padding:"4px"}],[["div","body","button","table","input"],{"border-radius":"2px"}]]}];xs=bw.choice(_to(d),{object:d,number:d>=0&&d<def.length?def[d].css:def[0].css},def[0].css);s=xs.map(function(y){return bw.makeCSSRule(y,{pretty:false})}).join("\n");if(appendToHead!=false){var hs=bw.DOM("bw-simple-theme-styles");if(hs.length==0){var h=bw.DOM("head")[0];var el=document.createElement("style");el.id="bw-simple-theme-styles";el.textContent=s;h.appendChild(el)}else{hs.textContent=s}}return s};bw.selectTabContent=function(item,target){item=bw.DOM(item)[0];if(_to(item).substr(0,4)!="html")return false;document.gx=item;var i,j,index=0;var cols=item.parentNode.getElementsByTagName("li");for(i=0;i<cols.length;i++){if(cols[i]==item){index=i;cols[i].className=bw.classStrAddDel(cols[i].className,"bw-tab-active")}else{cols[i].className=bw.classStrAddDel(cols[i].className,"","bw-tab-active")}}var tcols=[];for(i=0;i<item.parentNode.parentNode.children.length;i++){if(item.parentNode.parentNode.children[i].className.trim().split(/\s+/).indexOf("bw-tab-content-list")>=0){for(j=0;j<item.parentNode.parentNode.children[i].children.length;j++){if(item.parentNode.parentNode.children[i].children[j].className.trim().split(/\s+/).indexOf("bw-tab-content")>=0)tcols.push(item.parentNode.parentNode.children[i].children[j])}}}if(tcols.length<=0)return false;target=_to(target)=="undefined"?tcols[index]:target;target=_to(target)=="string"?bw.DOM(target)[0]:target;for(i=0;i<tcols.length;i++){if(tcols[i]==target)tcols[i].className=bw.classStrAddDel(tcols[i].className,"bw-show");else tcols[i].className=bw.classStrAddDel(tcols[i].className,"","bw-show")}return true};bw.DOMClass=function(el,key,replace){var r=false,elems,x,j;elems=bw.DOM(el);if(elems.length<=0)return r;for(j=0;j<elems.length;j++){x=elems[j];try{var c=x.className.split(/[ ]+/);var i=c.indexOf(key);if(i>=0)r=true;if(_to(replace)=="string"&&c.indexOf(replace)==-1){if(i==-1)c.push(replace);else{if(replace.length>0)c[i]=replace;else c.splice(i,1)}x.className=c.join(" ").trim();r=true}}catch(e){bw.log(e)}}return r};bw.DOMClassToggle=function(el,className){var x,i,elems=bw.DOM(el),r=false;for(i=0;i<elems.length;i++){x=elems[i];try{r=bw.DOMClass(x,className);if(r)bw.DOMClass(x,className,"");else bw.DOMClass(x,className,className)}catch(e){bw.log(e)}}return!r};bw.version=function(){var v={version:"1.2.16",about:"bitwrench is a simple library of miscellaneous Javascript helper functions for common web design tasks.",copy:"(c) M A Chatterjee deftio (at) deftio (dot) com",url:"http://github.com/deftio/bitwrench",license:"BSD-2-Clause"};return v};bw.bwargs={enableUJURLArgs:"true"};var parseArgs=function(s){var args={};if(typeof s=="string"&&s!=""){s=s.split(";");var j;for(j in s){var k=s[j].split(":");args[k[0]]=k[1]}}return args};var getArgs=function(){if(bw.isNodeJS()==false){var els=bw.DOM("script");var i,a,b;for(i in els){try{var el=els[i];if(el.hasOwnProperty("src")!=false)break;var s=String(el.getAttribute("src"));var f="bitwrench.js";if(s.toLocaleLowerCase().substring(s.length-f.length,s.length)==f.toLocaleLowerCase()){s=_to(s)=="string"?el.getAttribute("bwargs"):[""];s=_to(s)=="string"?el.getAttribute("data-bwargs"):s;a=parseArgs(s);for(b in a)bw.bwargs[b]=a[b]}}catch(e){}}if(bw.bwargs["enableUJURLArgs"]=="true"){a=parseArgs(bw.getURLParam("bwargs",""));for(b in a)bw.bwargs[b]=a[b]}}};getArgs();var loadStyles=bw.bwargs["bw-load-styles"]!="false";var loadStyleBasics=bw.typeAssign(bw.bwargs["bw-load-style-basics"],"string",bw.bwargs["bw-load-style-basics"],"load");bw.CSSSimpleStyles(loadStyles,{globals:loadStyleBasics});bw.funcRegister(bw.log,"bw_log");return bw})();export default bw;
@@ -1 +0,0 @@
1
- +A6LC4JP1SeHmo0YDu1zktwZGnFcYLlC0lhyQTBR7QJnYyQ3XvshydFpF8396qP5
@@ -1,215 +0,0 @@
1
- # bitwrench.js todo list
2
- (c) 2012-2019 manu chatterjee
3
- deftio (at) deftio (dot) com
4
-
5
- This list is used for internal ideas, housekeeping, checklists and notes
6
-
7
- ## features
8
- [x] typeOf
9
- [x] getURLParam fails test case where URL param contains # character
10
- [x] bw.html formelry buildHTMLObjecStr (note rename)
11
- add pretty print option (prettyPrint : true) --> adds tabbed || space beginning, \n in output for readability.
12
- [x] makeHTMLTable (also add sort, style examples)
13
- [ ] support adding column headers to makeHTMLTable as option ==> {header_content: [,,,]}
14
- [x] makeHTMLTabs()
15
- [x] makeHTMLList() ==> bulleted or numerical list
16
- [x] table HTML sort support (needs alpha num fix)
17
- [x] get/save cookie
18
- [x] save/store file
19
- make params for JSON, CSV, function(provide parser), raw
20
- [x] typeOf
21
- [ ] prettyPrintJSON with stylizble CSS
22
- settable tab widths (use padding:<width><units>)
23
- allow prettyPrint of functions and member-functions
24
- allow functions to print correctly
25
- [o] find/set css class name on supplied element (bw.markElement) clean this up
26
- [ ] encode/decode var info in to a CSS classname (see spannit.js)
27
- [ ] find classes by encoded var name (returns array of hits)
28
- note bw.markElement does some of this
29
- [x] xformScaleSig #sigmoidal scale, linear, constrain (mapScale can do this)
30
- [0] xformScalePow #power scale ==> remove
31
- [ ] interp [NN,Lin, Cos] for arrays (e.g. simple resample, any # of dims)
32
- [x] clip
33
- [x] setIntervalX // rename repeatN() ?
34
- [*] repeatUntil --> needs usability clean up
35
- [x] randomNum in (x,y, float_or_int)
36
- [x] pseudoRandom gen (prandom())
37
- [ ] sha256 (can be used of psuedoRandom gen)
38
- [x] multidim array quick generator
39
- [x] loremIpsum quick generator
40
- [x] bwSimpleStyles
41
- [x] bwSimpleThemes -- note it should work on the examples / docs page w/o problems
42
- use args (a.g. bwargs-loadSimpleTheme:themeIndex;
43
- [x] docString()
44
- support jsdoc style comments, export as JSON or prettyHTML
45
- allow man style export e.g. doc string params ==> array of vars [] ==> nice text output
46
- [x] simple logging control to a stream (e.g. bw.log(...) with settable function)
47
- [x] isHexStr
48
- [ ] graphMatrixAsImage (use canvas, also allow export as png)
49
- [ ] save canvas as data:url (show example with save as button)
50
- [x] color conversions, interpolate colors (used in themes, graphMatrix)
51
- [x] command line processing via <script bwargs="arg1:val1;arg2:val2"> # also works from URL param, can be disabled here as well
52
- [ ] simple boolean search of text object. (TBD: jado and frabjousmix support this)
53
- [x] pad strings (used in logExport({exportFormat:"text"}))
54
- [ ] bitwrench-server.js / bitwrench-server.php / bitwrench-server.py - simple server for receiving JSON encoded data
55
- [x] in options (bw.html) allow non-closed tags e.g. bw.html(["meta",{keywords:"foo, bar"},null,{tagClose:false}]) // default is tagClose:true
56
- [x] in options (bw.html) allow attribs with no value e.g. bw.html(["special tag", {type:"javascript", specialTag:null},null])
57
- [x] in options (bw.html) null for content means no content e.g.g <tag></tag>
58
- [ ] in makeCSS (pretty:false) remove "\n"
59
- [ ] makeCSS, makeCSSRule ==> CSS CSSRuleEmit
60
-
61
- ## packaging and todo
62
- [x] build script # currently using gnu make --> migrated to just using NPM
63
- [ ] build script should fail building new package if either lint or tests fail (e.g. make script exit conditional)
64
- [x] README.md
65
- [o] index.html should be auto-gen'd from README.md (but include bitwrench.js)
66
- [x] npm register
67
- [x] npm install
68
- [x] minify (yes, using uglifyjs)
69
- [ ] tests, coverage -- make sure all functions get tested
70
- [x] linting - JSHint or ESLint
71
- [x] "use strict";
72
- [ ] api ref docs
73
- [ ] examples
74
- [ ] pure JSON page generation
75
- [ ] example of using YAML instead of JSON (use yamljs in example but not in bw)
76
- [x] dir structure
77
- [x] license
78
- [x] github
79
- [x] deftio.com/bitwrench pages ==> move to deftio/opensource/bitwrench ?
80
- [x] build notes
81
- [x] rename to bitwrench
82
- [x] npm release (already an npm package)
83
- [ ] support inline logo for example favicons: <img src="data:image/png;base64,base64encoded images" />
84
- [x] full UMD support (cjs / require / AMD / import / browser)
85
-
86
- ## Issues and clean up
87
- * bw.bwSimpleThemes has cosmetic issues
88
- * repeatUntil usabilitiy issues
89
- * make internal function for commonly used:
90
- a = bw.typeOf(a) == "type" ? true_value : false_value
91
- ==>
92
- _toa(a,typeString | [typeString1, typeString2]) ==> {if true ... false}
93
- * in buildHTMLObjectString() add paramter{"pretty" : false} // if set to true inserts "\n" and "\t" at appropriate points in output for readability
94
- * fix attribute values to escape "". e.g. {style: "background-image: url('/path/to/image') "} <<-- shown single quotes, needs to support double quotes.
95
- * converge all makeHTML functions to have simple names (see list below). could drop "make" so HTML, HTMLList, HTMLCard, HTMLTable, HTMLPage
96
- ** makeHTML /// currently called buildHTMLObjectStr()
97
- ** makeHTMLTabs
98
- ** makeHTMLList(data_array1d, options)
99
- * ordered vs unordered
100
- ** makeHTMLCard (see w3 schools)
101
- ** makeHTMLAccordian
102
- ** makeHTMLTable
103
- ** makeHTMLPage
104
- ** makeHTMLFooter
105
- ** makeHTMLHeader
106
- * converge file operations
107
- ** fileLoadJSON also csv
108
- ** fileSaveJSON also csv
109
- ** fileLoad
110
- ** fileSave
111
- * converge function registration operations
112
- ** funcGetID
113
- ** funcRegister
114
- ** funcUnRegister
115
- ** funcGetDispatchStr
116
- * converge numeric operations
117
- ** mapScale ==> numInterp
118
- ** random ==> random
119
- ** clip ==> numClip
120
- ** fixNum ==> numFix
121
- ** multiArray ==> numMultiArray
122
- ** numHash32
123
- * converge color operations
124
- ** colorInterp
125
- ** colorParse ==> bwformat [c0,c1,c2,alpha,model] // model can be "rgb" | "hsl"
126
- ** colorToRGBHex
127
- ** colorRBGToHSL
128
- * add disolving bw.logd on all catch (e) {}
129
- * add attribute "text/css" to <style></style> export functions
130
- * arrows on sortTable
131
- * bw-table-sort-upa bw-table-sort-dna bw-table-sort-xxa // arrows mark-element is in cycle xx--> upa --> dna --> xx
132
- * bw-table-sort-up bw-table-sort-dn bw-table-sort-xx // no arrows or display just sorts. mark-elment is in cycle xx-->up-->dn-->xx
133
- * need to add this as option to sortable in sortTable
134
- * tree accordian (eg explorer)
135
- indented divs with show / hide
136
- * makeThemes directory (?)
137
- * add bw.logd(values) // bw.debug log (adds to regular bw.log) but
138
- TODO: transpose .logd and .log names --> more readable e.g. bw.log acts like console.log
139
- * is dissolving via bw.logdControl
140
- bw.logd joins all args like console.log
141
- bw.logd can be turned on
142
- bw.logdControl("on") // on
143
- bw.logdControl("off") // don't log
144
- bw.logd() // return current on/off status
145
- all messages are writtend with "bw.logd" as message type. use bw.log() for custom messages
146
- * takes same style params as console.log (e.g. ...)
147
- *
148
- * polyfils needed ==> consider jado pull in
149
- array.indexOf
150
- array.map
151
- array.filter
152
- array.reduce
153
- array.forEach
154
- atob / btoa (base64)
155
- string.trim ==> bw.trim()
156
-
157
-
158
-
159
- ## future
160
- consider merging spannit.js in to bitwrench
161
-
162
- ```javascript
163
- //useful for table code, other stuff
164
- element.className.replace("name", "new-name");
165
- //e.g. el.className.replace("bw-active", "bw-none");
166
- el.className.replace("bw-col", "bw-none");
167
-
168
- ```
169
-
170
- ## doc notes:
171
- document how to "mannually" set up tabs
172
- make sure bw doesn't try to "append to head" any code if in nodejs
173
-
174
-
175
- ## Themes
176
- ```javascript
177
-
178
- makeBasicTheme(colors{}) {
179
- color.light.primary
180
- color.light.background
181
-
182
- color.dark.primary
183
- color.dark.background
184
-
185
- color.border
186
- color.
187
-
188
- color.hover.primary
189
- color.hover.background
190
- color.hover.border
191
-
192
-
193
- var bthem =
194
- `
195
- .w3-theme-light {color:#000 !important; background-color:#f2f9fe !important}
196
- .bw-theme-dark {color:#fff !important; background-color:#074b83 !important}
197
- .bw-theme-action {color:#fff !important; background-color:#074b83 !important}
198
-
199
- .bw-theme {color:#fff !important; background-color:#2196f3 !important}
200
- .bw-text-theme {color:#2196f3 !important}
201
- .bw-border-theme {border-color:#2196f3 !important}
202
-
203
- .bw-hover-theme:hover {color:#fff !important; background-color:#2196f3 !important}
204
- .bw-hover-text-theme:hover {color:#2196f3 !important}
205
- .bw-hover-border-theme:hover {border-color:#2196f3 !important}
206
- `
207
- }
208
-
209
- ```
210
-
211
-
212
- ================================
213
- testing
214
- log
215
- logd
package/dev/css-arrows.md DELETED
@@ -1,23 +0,0 @@
1
- //=============================================
2
- //arrows for table sort (needs js to be fixed)
3
- ``` css
4
- .bw-table-sort-upa::after {
5
- content: "\2191";
6
- }
7
-
8
- .bw-table-sort-dna::after {
9
- content: "\2193";
10
- }
11
-
12
- .bw-table-sort-xxa::after {
13
- content: "\00a0";
14
- }
15
- .bw-table-sort-up::after {
16
- }
17
-
18
- .bw-table-sort-dn::after {
19
- }
20
-
21
- .bw-table-sort-xx::after {
22
- }
23
- ```
@@ -1,124 +0,0 @@
1
- #!/bin/sh
2
- ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
3
-
4
- //The above shenbang allows running on systems whether nodejs exec is called 'node'
5
- //or called 'nodejs' which is common on many debian systems such as Ubuntu.
6
-
7
- //more traditional shebang would be:
8
- //#!/usr/bin/env node
9
-
10
- //begin actual javascript below
11
-
12
- var fs = require('fs');
13
- var bw = require('../bitwrench.js')["bw"];
14
-
15
- var tests = [
16
- function() {
17
- /**
18
- s1
19
- abc
20
- def
21
- ghi
22
- @wejo
23
- */
24
- var x;
25
- /* s1 not a docstring
26
- */
27
-
28
- /** s1 another docsting
29
- */
30
- return true;
31
- },
32
-
33
- function() {
34
-
35
- /*
36
- @description
37
- not a docstring
38
- */
39
- var y=1; // var y=1, not a valid docstring
40
- /**
41
- s2
42
- abc
43
- def
44
- ghi
45
- @wejo
46
- */
47
- var x =2;
48
- x = (3>4) ? x : 2;
49
-
50
- /** s2 another docsting */
51
- return x+y;
52
- },
53
- "/** this is a simple string */",
54
- "/* not a valid doc string*/",
55
- "not a valid doc string",
56
- "// not a valid docstring"
57
-
58
- ];
59
-
60
-
61
- var outs = function(x,o) {
62
- var y = typeof(x) != "string" ? x.toString() : x;
63
- return "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"+bw.docString(y,o).join("\n..................\n")+"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
64
- }
65
-
66
- console.log("started ... ")
67
- tests.forEach(function(x){console.log(outs(x))})
68
-
69
- tests.forEach(function(x){console.log(outs(x,{}))})
70
- //======
71
- //test docStringParse()
72
- console.log("\n|||||||||||||||||||||||||||||||||||||\n")
73
-
74
- //http://usejsdoc.org/tags-param.html
75
- //Test cases
76
- //Name only
77
- function sayHello1(somebody) {
78
- /**
79
- * @param somebody
80
- */
81
- alert('Hello ' + somebody);
82
- }
83
-
84
- //Name and type
85
- function sayHello2(somebody) {
86
- /**
87
- * @param {string} somebody
88
- */
89
- alert('Hello ' + somebody);
90
- }
91
-
92
- //Name, type, and description
93
- function sayHello3(somebody) {
94
- /**
95
- * @param {string} somebody Somebody's name.
96
- */
97
- alert('Hello ' + somebody);
98
- }
99
-
100
- //You can add a hyphen before the description to make it more readable. Be sure to include a space before and after the hyphen.
101
- //Name, type, and description, with a hyphen before the description
102
- function sayHello4(somebody) {
103
- /**
104
- * @param {string} somebody - Somebody's name.
105
- */
106
- alert('Hello ' + somebody);
107
- }
108
-
109
- var testCasesParse = [
110
- sayHello1.toString(),
111
- sayHello2.toString(),
112
- sayHello3.toString(),
113
- sayHello4.toString()
114
- ]
115
-
116
- var outp = function(x,o) {
117
- var y = typeof(x) != "string" ? x.toString() : x;
118
- return "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n"+(bw.docString(y,o).forEach(function(z){return bw.parseJsDocString(z)}).join ("|")).join("\n..................\n")+"\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
119
- }
120
- //console.log(outp(bw.parseJsDocString))
121
-
122
- //any issues here..
123
- console.log("\n"+bw.logExport({"format":"text"}));
124
-
@@ -1,171 +0,0 @@
1
- #!/bin/sh
2
- ':' //; exec "$(command -v nodejs || command -v node)" "$0" "$@"
3
-
4
- //The above shenbang allows running on systems whether nodejs exec is called 'node'
5
- //or called 'nodejs' which is common on many debian systems such as Ubuntu.
6
-
7
- //more traditional shebang would be:
8
- //#!/usr/bin/env node
9
-
10
- //begin actual javascript below
11
-
12
- "use strict";
13
- var fs = require('fs');
14
- var bw = require('../bitwrench.js')["bw"];
15
-
16
- /*
17
-
18
- this is a comment with no @
19
- * this is a comment with no @ (note begins with *)
20
-
21
- @param foo
22
- * @param foo
23
-
24
- @param {type,type2} description starts here
25
- @param {type,type2} name - description starts here
26
-
27
- */
28
-
29
- console.log("started ... ")
30
- //======
31
- //test docStringParse()
32
- console.log("\n|||||||||||||||||||||||||||||||||||||\n")
33
-
34
- //http://usejsdoc.org/tags-param.html
35
- //Test cases
36
- //Name only
37
- function sayHello1(somebody) {
38
- /**
39
- * @param somebody
40
- */
41
- alert('Hello ' + somebody);
42
- }
43
-
44
- //Name and type
45
- function sayHello2(somebody) {
46
- /**
47
- * @param {string} somebody
48
- */
49
- alert('Hello ' + somebody);
50
- }
51
-
52
- //Name, type, and description
53
- function sayHello3(somebody) {
54
- /**
55
- * @param {string} somebody Somebody's name.
56
- */
57
- alert('Hello ' + somebody);
58
- }
59
-
60
- //You can add a hyphen before the description to make it more readable. Be sure to include a space before and after the hyphen.
61
- //Name, type, and description, with a hyphen before the description
62
- function sayHello4(somebody) {
63
- /**
64
- * @param {string} somebody - Somebody's name.
65
- */
66
- alert('Hello ' + somebody);
67
- }
68
-
69
- function sayHello5(somebody) {
70
- /**
71
- This is a simple description which shoud be hanlded by the parser eventhough it doesn;t have an @param type d
72
- declaration in it.
73
- */
74
- }
75
- var testCasesParse = [
76
- sayHello1.toString(),
77
- sayHello2.toString(),
78
- sayHello3.toString(),
79
- sayHello4.toString(),
80
- ]
81
-
82
- var outp = function(z,opts) {
83
- var i,s = "\n>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>\n";
84
- for (i=0; i<z.length; i++) { // for each test case
85
- z.forEach(function(x){return bw.docStringParse(x,opts)}).join ("|");
86
- }
87
- s+= "\n<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<\n";
88
- }
89
- //console.log(outp(bw.parseJsDocString))
90
- var testCaseParse2 = [
91
- " @param", // {field: "@param", "types" :"", "fieldName" :"", "description" :""}
92
- " @field d1 d2 d3 d4", //
93
- " @param {type1 } d1 d2 d3 d4", //
94
- " @param2 {type1, type2} d1 d2 d3", //
95
- " @param {type} name - d1 d2 d3", //
96
- " this is just a desctription line" //
97
- ]
98
-
99
- var fn = function(s) {
100
- var r={"source":s, "field" : "", "types":"", "name" :"", "description" : ""};
101
- var a = s.replace(/^\s*(\/\*\*?)?|(\*\/)?\s*$/ig,"") // remove the comment markers if still there "/** my comment */"" ==> "my comment"
102
- a = a.replace(/^\s*\**\s*/,""); // remove any cruft at beginning of line " * @myParam {}....." ==> "@myParam {}....."
103
- if (a.charAt(0) == "@") { // if we have hit a @fieldname parameter we start parsing.
104
- // ([str, regex, fieldStr, result{}]) ==> ([str, regex, fieldStr, result{}]) ::> ([str,result{},fieldStr,regex])
105
- var _tok = function(x){
106
- var m = x[0].match(x[1]);
107
- if (m != null) {x[4][3]=m[1];}
108
- x[0] = x[0].replace(x[1],"");
109
- return x;
110
- }
111
- //r = [[e,f],[e,f],[e,f],[e,f]].reduce(,_tok);
112
-
113
- var e,x;
114
- var t = bw.trim;
115
- e =/^@([A-Za-z0-9_<>[\]]*)/i;
116
- x = a.match(e);
117
- if (x != null) {r["field"] = t(x[1])} else return r; // didn't match... opt out here
118
- a = a.replace(e,"");
119
-
120
- e = /^\s*\{([A-Za-z0-9_|\s,.\-+!@#$%^&*()=[\]]*)\}/i;
121
- x = a.match(e);
122
- if (x != null) {r["types"]=t(x[1]);} // types is optional..
123
- a = a.replace(e,"");
124
-
125
- e = /^\s*([\S]*)/i;
126
- x = a.match(e);
127
- if (x != null) {r["description"]=t(x[1]);} //
128
- a = a.replace(e,"");
129
-
130
- e = /^\s*([\S]*)/i;
131
- x = a.match(e);
132
- if (x != null) {r["name"]=t(x[1]);} //
133
- a = a.replace(e,"");
134
-
135
- // descrpition ==> name: "" description : "description"
136
- // description we we ==> name: "" description : "description we we "
137
- // name - description we we ==> name: "name" descrpition : "description we we"
138
- // - description we we ==> name: "" description : "description we we"
139
- if (r["name"].match(/^\s*-+\s*/) != null) {
140
- r["name"] = r["description"];
141
- r["description"] = t(a);
142
- } else {
143
- r["description"] = r["description"]+" "+r["name"]+" "+t(a);
144
- r["name"] ="";
145
- }
146
- }
147
- return r;
148
- }
149
-
150
- var testFn = function(t) {
151
- var i;
152
- for (i in t) {
153
- console.log("\n +++++++++++++++++++++++++\n");
154
- var x = fn(t[i]);
155
- console.log(x);
156
- console.log("\n -------------------------\n");
157
- }
158
- }
159
- testFn(testCaseParse2);
160
- //outp(testCaseParse2);//any issues here..
161
- bw.log("end-time");
162
- console.log("\n"+bw.logExport({"format":"text"}));
163
-
164
- /*
165
-
166
- s = getline()
167
- trim()
168
- trim leading * ==> "\*?\s+"
169
-
170
-
171
- */