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.
- package/README.md +160 -158
- package/bin/bitwrench.js +3 -0
- package/dist/bitwrench-code-edit.cjs.js +639 -0
- package/dist/bitwrench-code-edit.es5.js +875 -0
- package/dist/bitwrench-code-edit.es5.min.js +15 -0
- package/dist/bitwrench-code-edit.esm.js +628 -0
- package/dist/bitwrench-code-edit.esm.min.js +15 -0
- package/dist/bitwrench-code-edit.umd.js +645 -0
- package/dist/bitwrench-code-edit.umd.min.js +15 -0
- package/dist/bitwrench.cjs.js +6983 -0
- package/dist/bitwrench.cjs.min.js +62 -0
- package/dist/bitwrench.css +5100 -0
- package/dist/bitwrench.es5.js +8446 -0
- package/dist/bitwrench.es5.min.js +31 -0
- package/dist/bitwrench.esm.js +6981 -0
- package/dist/bitwrench.esm.min.js +62 -0
- package/dist/bitwrench.umd.js +6989 -0
- package/dist/bitwrench.umd.min.js +62 -0
- package/dist/builds.json +127 -0
- package/dist/sri.json +18 -0
- package/package.json +86 -24
- package/readme.html +288 -0
- package/src/bitwrench-code-edit.js +627 -0
- package/src/bitwrench-color-utils.js +311 -0
- package/src/bitwrench-component-base.js +736 -0
- package/src/bitwrench-components-inline.js +374 -0
- package/src/bitwrench-components-v2.js +1879 -0
- package/src/bitwrench-components.js +610 -0
- package/src/bitwrench-styles.js +3240 -0
- package/src/bitwrench.js +3367 -0
- package/src/cli/convert.js +205 -0
- package/src/cli/index.js +122 -0
- package/src/cli/inject.js +55 -0
- package/src/cli/layout-default.js +142 -0
- package/src/generate-css.js +381 -0
- package/src/vendor/quikdown.js +654 -0
- package/src/version.js +16 -0
- package/.eslintrc.json +0 -27
- package/.github/workflows/codeql-analysis.yml +0 -72
- package/.travis.yml +0 -34
- package/bitwrench.css +0 -92
- package/bitwrench.js +0 -3348
- package/bitwrench.js_sri.txt +0 -1
- package/bitwrench.min.js +0 -1
- package/bitwrench.min.js_sri.txt +0 -1
- package/bitwrench_ESM.js +0 -3207
- package/bitwrench_ESM.js_sri.txt +0 -1
- package/bitwrench_ESM.min.js +0 -1
- package/bitwrench_ESM.min.js_sri.txt +0 -1
- package/dev/bitwrench-todo.md +0 -215
- package/dev/css-arrows.md +0 -23
- package/dev/docStringDev.js +0 -124
- package/dev/docStringParseDev.js +0 -171
- package/dev/example11-load-mjs-page.html +0 -17
- package/dev/figures.html +0 -37
- package/dev/html_gen.js +0 -349
- package/dev/htmld.md +0 -250
- package/dev/htmldev.html +0 -45
- package/dev/index-old.html +0 -87
- package/dev/misc-notes.md +0 -21
- package/dev/norm.css +0 -30
- package/dev/notes.md +0 -2
- package/dev/pageData.mjs +0 -69
- package/dev/sizes.html +0 -49
- package/dev/universal-js-module.js +0 -37
- package/examples/example1.html +0 -78
- package/examples/example10.html +0 -84
- package/examples/example11.html +0 -17
- package/examples/example12.html +0 -18
- package/examples/example2.html +0 -44
- package/examples/example3.html +0 -50
- package/examples/example4.html +0 -22
- package/examples/example5.html +0 -82
- package/examples/example6.html +0 -128
- package/examples/example7.html +0 -91
- package/examples/example8.html +0 -27
- package/examples/example9.html +0 -102
- package/examples/examplePageData12.mjs +0 -73
- package/examples/pageData.mjs +0 -69
- package/examples/pico.min.css +0 -5
- package/icon/bitwrench-dark-tall.png +0 -0
- package/icon/bitwrench-dark.png +0 -0
- package/icon/bitwrench-icon-lt-grey.png +0 -0
- package/icon/bitwrench-icon.vsd +0 -0
- package/icon/bitwrench-logo-dark.png +0 -0
- package/icon/bitwrench-logo-full.png +0 -0
- package/icon/bitwrench-logo-green.png +0 -0
- package/icon/bitwrench-logo-grey.png +0 -0
- package/icon/bitwrench-logo-white.png +0 -0
- package/icon/bitwrench-logos-colors.png +0 -0
- package/icon/bitwrench-thick-logo.png +0 -0
- package/icon/bitwrench-thick-teal/android-chrome-192x192.png +0 -0
- package/icon/bitwrench-thick-teal/android-chrome-512x512.png +0 -0
- package/icon/bitwrench-thick-teal/apple-touch-icon.png +0 -0
- package/icon/bitwrench-thick-teal/browserconfig.xml +0 -9
- package/icon/bitwrench-thick-teal/favicon-16x16.png +0 -0
- package/icon/bitwrench-thick-teal/favicon-32x32.png +0 -0
- package/icon/bitwrench-thick-teal/favicon.ico +0 -0
- package/icon/bitwrench-thick-teal/mstile-144x144.png +0 -0
- package/icon/bitwrench-thick-teal/mstile-150x150.png +0 -0
- package/icon/bitwrench-thick-teal/mstile-310x150.png +0 -0
- package/icon/bitwrench-thick-teal/mstile-310x310.png +0 -0
- package/icon/bitwrench-thick-teal/mstile-70x70.png +0 -0
- package/icon/bitwrench-thick-teal/site.webmanifest +0 -19
- package/icon/bitwrench-thick-teal.ico +0 -0
- package/icon/bitwrench-thick-teal.svg +0 -44
- package/icon/bitwrench-thick-teal.zip +0 -0
- package/icon/favicon-test.html +0 -20
- package/icon/logos-test.PNG +0 -0
- package/images/bitwrench-512x512.png +0 -0
- package/images/bitwrench-logo-med.png +0 -0
- package/images/bitwrench-thick-logo.png +0 -0
- package/images/bitwrench-thick-logo.svg +0 -64
- package/images/bitwrench-thick-teal.ico +0 -0
- package/images/favicon.ico +0 -0
- package/index.html +0 -282
- package/instr_tmp/bitwrench.js +0 -1350
- package/karma.conf.js +0 -140
- package/makefile +0 -21
- package/quick-docs.html +0 -206
- package/test/bitwrench_test.js +0 -1255
- package/test/karma-test.js +0 -1081
- package/tools/bw_deprecatedNames.js +0 -19
- package/tools/bwconsole.js +0 -20
- package/tools/createSimpleHTMLPage.js +0 -41
- package/tools/emitreadme.sh +0 -4
- package/tools/export-bw-default-css.js +0 -41
- package/tools/umd2ModuleHack.js +0 -32
- package/tools/update-bw-package.js +0 -36
- package/tools/updatereadme.js +0 -34
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
</head>
|
|
5
|
-
<body class="bw-def-page-setup bw-font-sans-serif">
|
|
6
|
-
|
|
7
|
-
<script type="module">
|
|
8
|
-
import bw from '../bitwrench_ESM.js';
|
|
9
|
-
window.bw = bw;
|
|
10
|
-
import {htmlData} from './pageData.mjs';
|
|
11
|
-
bw.DOMInsertElement("body",bw.html(htmlData),true);
|
|
12
|
-
|
|
13
|
-
bw.DOMInsertElement("head",bw.html(bw.htmlFavicon("\u266C","teal"))); // insert a favicon on the top tab of the page, "X" for a single letter
|
|
14
|
-
bw.DOMInsertElement("head",bw.html({t:"title",c:"Bitwrench HTML Gen "})); // insert a page title on the browser tab
|
|
15
|
-
</script>
|
|
16
|
-
</body>
|
|
17
|
-
</html>
|
package/dev/figures.html
DELETED
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html>
|
|
3
|
-
<script src="https://unpkg.com/bitwrench/bitwrench.js"></script>
|
|
4
|
-
<body class="bw-def-page-setup">
|
|
5
|
-
|
|
6
|
-
<h1>The figure and figcaption element</h1>
|
|
7
|
-
This demo shows use of html figure elements...<br>
|
|
8
|
-
<div style="display:inline-block">
|
|
9
|
-
<figure style="width:500px; ">
|
|
10
|
-
<img src="../images/bitwrench-512x512.png" alt="Image Alt Text" style="width:100%">
|
|
11
|
-
<figcaption id="x1">Fig.1 - Sample Image weij we owjroiew jroiew joiwewjrwe</figcaption>
|
|
12
|
-
</figure>
|
|
13
|
-
<figure style="width:200px">
|
|
14
|
-
<img src="../images/bitwrench-512x512.png" alt="Image Alt Text" style="width:100%">
|
|
15
|
-
<figcaption>Fig.1 - Sample Image</figcaption>
|
|
16
|
-
</figure>
|
|
17
|
-
<figure style="width:200px; ">
|
|
18
|
-
<figcaption>Fig.1 - Sample Image</figcaption>
|
|
19
|
-
<img src="../images/bitwrench-512x512.png" alt="Image Alt Text" style="width:100%">
|
|
20
|
-
|
|
21
|
-
</figure>
|
|
22
|
-
<figure style="width:200px">
|
|
23
|
-
<img src="../images/bitwrench-512x512.png" alt="Image Alt Text" style="width:100%">
|
|
24
|
-
<figcaption>Fig.1 - Sample Image</figcaption>
|
|
25
|
-
</figure>
|
|
26
|
-
</div>
|
|
27
|
-
End of the figures..
|
|
28
|
-
|
|
29
|
-
<script>
|
|
30
|
-
bw.DOM("#x1",bw.htmlTabs([["tab1","content1"],["tab2",`<figure style="width:200px; ">
|
|
31
|
-
<figcaption>Fig.1 - Sample Image</figcaption>
|
|
32
|
-
<img src="../images/bitwrench-512x512.png" alt="Image Alt Text" style="width:100%">
|
|
33
|
-
|
|
34
|
-
</figure>`],["tab3","content3"]]));
|
|
35
|
-
</script>
|
|
36
|
-
</body>
|
|
37
|
-
</html>
|
package/dev/html_gen.js
DELETED
|
@@ -1,349 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
//assumes proper node form
|
|
5
|
-
bw.htmlNodeRender(x) {
|
|
6
|
-
s = bw.toa(x,"string",x,)
|
|
7
|
-
return s;
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
//====================================
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
bw.htmlRender = function(htmlData, opts) {
|
|
14
|
-
/**
|
|
15
|
-
must be of form
|
|
16
|
-
t ==> tag (string)
|
|
17
|
-
a ==> attrib {}
|
|
18
|
-
c ==> content [] content can be string | node (other values converted to string)
|
|
19
|
-
o ==> options {}
|
|
20
|
-
|
|
21
|
-
htmldict
|
|
22
|
-
{
|
|
23
|
-
tag: "tagValue",
|
|
24
|
-
attrib : {},
|
|
25
|
-
content : [], // each member must be: string or htmlDict or null. other values cast to string.
|
|
26
|
-
options : {},
|
|
27
|
-
|
|
28
|
-
}
|
|
29
|
-
*/
|
|
30
|
-
|
|
31
|
-
var html = "";
|
|
32
|
-
|
|
33
|
-
var _atr = function(k,v,o){ // to do handle "smart" attributes ==> class : ["class1", "class2"] ==> style : bw.makeCSS()
|
|
34
|
-
var val=v,ok = _to(o.overide)=="undefined" ? k : ok;
|
|
35
|
-
switch(ok) {
|
|
36
|
-
case "style" :
|
|
37
|
-
val = bw.makeCSS(val,{pretty:false});
|
|
38
|
-
break;
|
|
39
|
-
default :
|
|
40
|
-
if (bw.to(v)=="array")
|
|
41
|
-
val = val.join(" ");
|
|
42
|
-
val = val.toString();
|
|
43
|
-
}
|
|
44
|
-
return k+"="+"\""+val.replace("\"","\\\"")+"\"";
|
|
45
|
-
}
|
|
46
|
-
var _s = function(n,c){return Array(n+1).join(c);}
|
|
47
|
-
ind_s = ddict.o.pretty ? Array(ddict.s.level * ddict.o.pretty_indent ).join(ddict.o.pretty_space) : ""; // not ==> we're not trying to render this space just make it pretty for inspection
|
|
48
|
-
ind_c = ddict.o.pretty ? Array((ddict.s.level+1) * ddict.o.pretty_indent ).join(ddict.o.pretty_space) : ""; // not ==> we're not trying to render this space just make it pretty for inspection
|
|
49
|
-
ind_e = ddict.o.pretty ? "\n" : "";
|
|
50
|
-
|
|
51
|
-
var _clsTag = function(t,c) {
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
try {
|
|
55
|
-
var i,atrk=[],_a=[],k,v;
|
|
56
|
-
for (i in ddict.a)
|
|
57
|
-
if (ddict.hasOwnProperty(i)) atrk.push(i);
|
|
58
|
-
atrk = atrk.sort(function(x)bw.naturalCompare);
|
|
59
|
-
for (i=0; i<atrk.length; i++) {
|
|
60
|
-
k=artk[i]; v=ddict[k];
|
|
61
|
-
if (v=null) { _a.push(k); continue;}
|
|
62
|
-
_a.push(_fatr(k,v));
|
|
63
|
-
}
|
|
64
|
-
_a = _a.join(" ");
|
|
65
|
-
_a = ((_a.length>0) ? " ": "") + _a;
|
|
66
|
-
|
|
67
|
-
html += ind_s + "<" +ddict.t + _a+">";
|
|
68
|
-
html += ddict.c.map((function(x){
|
|
69
|
-
var s = _to(x) == "object" ? bw.htmlFromDict(x) : x.toString();
|
|
70
|
-
return ind_c+s;
|
|
71
|
-
}
|
|
72
|
-
).join((ddict.pretty?"\n":""));
|
|
73
|
-
html += ind_e + "</" +ddict.t +">";
|
|
74
|
-
|
|
75
|
-
}
|
|
76
|
-
catch(e) {
|
|
77
|
-
logd(e);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
//=====old=====
|
|
82
|
-
//==================================================
|
|
83
|
-
/**
|
|
84
|
-
*/
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
bw.html_fc = function(x) {
|
|
89
|
-
var i,n = { t: "div", a: {}, c: "", o: {}}; // default html dict format
|
|
90
|
-
var m = "";
|
|
91
|
-
switch (_to(x)) {
|
|
92
|
-
case "null" :
|
|
93
|
-
case "undefined" :
|
|
94
|
-
n = x;
|
|
95
|
-
break;
|
|
96
|
-
case "object":
|
|
97
|
-
[["tag","t"],["attrib","a"],["content","c"],["options","o"]].forEach(function(z){ n[z[1]]= z[0] in x ? x[z[0]] : n[z[1]];});
|
|
98
|
-
for (i in n) { // we only copy those fields we care about..
|
|
99
|
-
n[i] = (i in x) ? x[i] : n[i]; // need to handle complicated types: t:"", a:{}, c:"" | []
|
|
100
|
-
if (bw.isnu(n[i])) {
|
|
101
|
-
n = null; // force entire object to be null or undefined
|
|
102
|
-
m = "HTML gen err: bad object";
|
|
103
|
-
break;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
break;
|
|
107
|
-
case "array":
|
|
108
|
-
var idx = [[],["c"], ["t","c"], ["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]];
|
|
109
|
-
m = (x.length > 5) ? 5 : x.length;
|
|
110
|
-
for (i=0; i< m; i++) {
|
|
111
|
-
bw.logd(idx[m][i] + ":" + x[i]);
|
|
112
|
-
n[idx[m][i]] = x[i];
|
|
113
|
-
}
|
|
114
|
-
for (i in n)
|
|
115
|
-
if (bw.isnu(n[i])) {
|
|
116
|
-
n = null;
|
|
117
|
-
m = "HTML gen err: bad array";
|
|
118
|
-
break;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
break;
|
|
122
|
-
case "function":
|
|
123
|
-
var opts = {};
|
|
124
|
-
n = bw.html_fc2(x(),opts); // evaluate and convert...
|
|
125
|
-
break;
|
|
126
|
-
default: // string, number, Date, bool, Regex
|
|
127
|
-
n.c =x.toString();
|
|
128
|
-
}
|
|
129
|
-
return n;
|
|
130
|
-
};
|
|
131
|
-
|
|
132
|
-
bw.htmlExt = function(data, opts) {
|
|
133
|
-
var dopts = {
|
|
134
|
-
tagClose: "auto",
|
|
135
|
-
contentHTMLSafe : "false", // convert content node chars to htmlSafe equivalents e.g. " " ==>
|
|
136
|
-
|
|
137
|
-
pretty: "true",
|
|
138
|
-
indStr : " ", // only used in pretty set to true. can be "\t" etc
|
|
139
|
-
indFixed: "", //
|
|
140
|
-
|
|
141
|
-
maxdepthAllowed : 50
|
|
142
|
-
|
|
143
|
-
};
|
|
144
|
-
dopts = optsCopy(dopts,opts);
|
|
145
|
-
var state = {
|
|
146
|
-
cdepth : 0, // curdepth
|
|
147
|
-
cbreadth : 0, // curbreadth (e.g. content[3])
|
|
148
|
-
maxdepth : 0,
|
|
149
|
-
ncount : 0, // num nodes rendered
|
|
150
|
-
errors : [] // trapped erors
|
|
151
|
-
}
|
|
152
|
-
var ret = ["",state];
|
|
153
|
-
var htmlRenderNode = function(d,o,s) { // assumes
|
|
154
|
-
var h="", n = htmlNorm(d,o,s) // get it in dict form
|
|
155
|
-
|
|
156
|
-
}
|
|
157
|
-
{
|
|
158
|
-
var hd = (function(){return {t:"div",a:{},c:[],{o:tagClose:"auto"}}})();
|
|
159
|
-
|
|
160
|
-
//emit tagOpen
|
|
161
|
-
// indFixed + ?pretty|indstr + <tag + atr() + tagselfclose>
|
|
162
|
-
// for i=0.. hd.c.length
|
|
163
|
-
// if c[i] == object | function :
|
|
164
|
-
// cbreadth++
|
|
165
|
-
// convert
|
|
166
|
-
// else
|
|
167
|
-
// (emit) indFixed + ?pretty|indstr c[i].toString()
|
|
168
|
-
|
|
169
|
-
}
|
|
170
|
-
return ret;
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
//=======================================
|
|
174
|
-
/*
|
|
175
|
-
state has levels, node, nodecount info
|
|
176
|
-
*/
|
|
177
|
-
bw.HTMLNorm = function(x,state) {
|
|
178
|
-
|
|
179
|
-
function bwHTMLNode () {this.t="div"; this.a={}; this.c=[]; this.o={};}
|
|
180
|
-
function bwError (v,x) {this.value=v; this.msg = typeof x == "undefined" ? "error" : x;}
|
|
181
|
-
|
|
182
|
-
var i,n = new bwHTMLNode(); // default html dict format
|
|
183
|
-
var m = "";
|
|
184
|
-
switch (_to(x)) {
|
|
185
|
-
case "null" :
|
|
186
|
-
case "undefined" :
|
|
187
|
-
n = new bwError(x,"HTML Node error : "+_to(x));
|
|
188
|
-
break;
|
|
189
|
-
case "object":
|
|
190
|
-
[["tag","t"],["attrib","a"],["content","c"],["options","o"]].forEach(function(z){ n[z[1]]= z[0] in x ? x[z[0]] : n[z[1]];});
|
|
191
|
-
for (i in n) { // we only copy those fields we care about..
|
|
192
|
-
n[i] = (i in x) ? x[i] : n[i]; // need to handle complicated types: t:"", a:{}, c:"" | []
|
|
193
|
-
if (bw.isnu(n[i])) {
|
|
194
|
-
n = null; // force entire object to be null or undefined
|
|
195
|
-
m = "HTML gen err: bad object";
|
|
196
|
-
break;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
break;
|
|
200
|
-
case "array":
|
|
201
|
-
var idx = [[],["c"], ["t","c"], ["t","a","c"],["t","a","c","o"],["t","a","c","o","s"]];
|
|
202
|
-
m = (x.length > 5) ? 5 : x.length;
|
|
203
|
-
for (i=0; i< m; i++) {
|
|
204
|
-
//console.log(idx[m][i] + ":" + x[i]);
|
|
205
|
-
n[idx[m][i]] = x[i];
|
|
206
|
-
}
|
|
207
|
-
for (i in n)
|
|
208
|
-
if (bw.isnu(n[i])) {
|
|
209
|
-
n = null;
|
|
210
|
-
m = "HTML gen err: bad array";
|
|
211
|
-
break;
|
|
212
|
-
}
|
|
213
|
-
|
|
214
|
-
break;
|
|
215
|
-
case "function":
|
|
216
|
-
var opts = {};
|
|
217
|
-
n = bw.html_fc2(x(),opts); // evaluate and convert...
|
|
218
|
-
n = _to(n)=="function" ? new bwError(n.toString(),"HTML Node error: function returned a function") : n;
|
|
219
|
-
break;
|
|
220
|
-
default: // string, number, Date, bool, Regex ==> will be come just plain rendered content later
|
|
221
|
-
n.c =x.toString();
|
|
222
|
-
}
|
|
223
|
-
return n;
|
|
224
|
-
};
|
|
225
|
-
//**********************************************************
|
|
226
|
-
//**********************************************************
|
|
227
|
-
bw.htmlMod20200215 = function (d,options) {
|
|
228
|
-
/**
|
|
229
|
-
bw.html(data)
|
|
230
|
-
|
|
231
|
-
takes data of one of these exact forms:
|
|
232
|
-
|
|
233
|
-
string
|
|
234
|
-
array: ["div", content]
|
|
235
|
-
array: ["div",{attribute dict},content]
|
|
236
|
-
array: ["div",{attribute dict},content, options]
|
|
237
|
-
dict: {tag:"div", atr: {attribute dict}, "content": content}
|
|
238
|
-
content can be string or array
|
|
239
|
-
|
|
240
|
-
and creates an HTML string wich can be used to generate DOM elements such as
|
|
241
|
-
document.getELementById("theID").innerHTML = buildHTMLObjString(data).
|
|
242
|
-
|
|
243
|
-
content can be nested
|
|
244
|
-
|
|
245
|
-
d is string or an array ["tag".{attributs dict},content] or dict of this form
|
|
246
|
-
tag, atr, content (also allow short hand t,a,c)
|
|
247
|
-
tag or t = string --> "div"
|
|
248
|
-
atr or a = dict --> {"style" : "width=40;height=50", "class" : "foo bar"}
|
|
249
|
-
content or c = [] or string. if array each element must be either string or dict of this form.
|
|
250
|
-
if any element is a function it will be evaluated in place with no params.
|
|
251
|
-
|
|
252
|
-
*/
|
|
253
|
-
var dopts = {
|
|
254
|
-
pretty : false,
|
|
255
|
-
indent : 0,
|
|
256
|
-
indentStr : " "
|
|
257
|
-
};
|
|
258
|
-
dopts = optsCopy(dopts,options);
|
|
259
|
-
|
|
260
|
-
var outFn = function(s,opts) {
|
|
261
|
-
var w = Array(opts["indent"]).join(opts["indentStr"]);
|
|
262
|
-
var we = Array(opts["indent"]-1).join(opts["indentStr"]);
|
|
263
|
-
return opts["pretty"] ? "\n"+w+ s + "\n" +we: s;
|
|
264
|
-
};
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
dopts["indent"]++;
|
|
268
|
-
|
|
269
|
-
var s="", t="div",a={},c=[],i;
|
|
270
|
-
|
|
271
|
-
switch (_to(d)) {
|
|
272
|
-
case "date":
|
|
273
|
-
case "number":
|
|
274
|
-
s=String(d); // eslint-disable-line no-fallthrough
|
|
275
|
-
case "string":
|
|
276
|
-
s=d;
|
|
277
|
-
return outFn(s,dopts); // Note return statement here...
|
|
278
|
-
break; // eslint-disable-line no-unreachable
|
|
279
|
-
case "function" :
|
|
280
|
-
s = bw.html(d(),dopts);
|
|
281
|
-
break;
|
|
282
|
-
case "array":
|
|
283
|
-
|
|
284
|
-
if ((_to(d[0]) == "undefined") || d.length != 3)
|
|
285
|
-
return "";
|
|
286
|
-
t = _to(d[0]) != "undefined" ? d[0] :t;
|
|
287
|
-
a = _to(d[1]) != "undefined" ? d[1] :a;
|
|
288
|
-
c = _to(d[2]) != "undefined" ? d[2] :c;
|
|
289
|
-
t = _to(t) == "function" ? t() :t;
|
|
290
|
-
a = _to(a) == "function" ? a() :a;
|
|
291
|
-
c = _to(c) == "function" ? c() :c;
|
|
292
|
-
c = _to(c) != "array" ? [c] :c;
|
|
293
|
-
break;
|
|
294
|
-
case "object":
|
|
295
|
-
t = _to(d["t"]) == "function" ? d["t"]() : t;
|
|
296
|
-
t = _to(d["tag"]) == "function" ? d["tag"]() : t;
|
|
297
|
-
t = _to(d["t"]) == "string" ? d["t"] : t;
|
|
298
|
-
t = _to(d["tag"]) == "string" ? d["tag"] : t;
|
|
299
|
-
|
|
300
|
-
a = _to(d["a"]) == "function" ? d["a"]() : a;
|
|
301
|
-
a = _to(d["atr"]) == "function" ? d["atr"]() : a;
|
|
302
|
-
a = _to(d["a"]) == "object" ? d["a"] : a;
|
|
303
|
-
a = _to(d["atr"]) == "object" ? d["atr"] : a;
|
|
304
|
-
switch (_to(d["c"])) {
|
|
305
|
-
case "function" :
|
|
306
|
-
c = d["content"](); break;
|
|
307
|
-
case "array" :
|
|
308
|
-
c = d["content"]; break;
|
|
309
|
-
default:
|
|
310
|
-
c = [d["content"]];
|
|
311
|
-
}
|
|
312
|
-
switch (_to(d["c"])) {
|
|
313
|
-
case "function" :
|
|
314
|
-
c = d["c"](); break;
|
|
315
|
-
case "array" :
|
|
316
|
-
c = d["c"]; break;
|
|
317
|
-
default:
|
|
318
|
-
c = [d["c"]];
|
|
319
|
-
}
|
|
320
|
-
break;
|
|
321
|
-
default:
|
|
322
|
-
bw.log("bw.html:: error in type");
|
|
323
|
-
}
|
|
324
|
-
|
|
325
|
-
s+= "<" + t ;
|
|
326
|
-
for (i in a) {
|
|
327
|
-
s+=" "+ String(i)+"=\"" + String(a[i]) +"\"";
|
|
328
|
-
}
|
|
329
|
-
s+= ">";
|
|
330
|
-
//console.log(t,a,c);
|
|
331
|
-
for (i=0; i<c.length; i++) {
|
|
332
|
-
var _c = "";
|
|
333
|
-
|
|
334
|
-
switch(_to(c[i])) {
|
|
335
|
-
case "function":
|
|
336
|
-
_c = c[i](); // eslint-disable-line no-fallthrough
|
|
337
|
-
case "object": // eslint-disable-line no-fallthrough
|
|
338
|
-
case "array" :
|
|
339
|
-
_c = bw.html(c[i],dopts);
|
|
340
|
-
break;
|
|
341
|
-
default:
|
|
342
|
-
_c = String (c[i]);
|
|
343
|
-
}
|
|
344
|
-
s+= _c;
|
|
345
|
-
}
|
|
346
|
-
s+= "</" + t + ">";
|
|
347
|
-
|
|
348
|
-
return outFn(s,dopts);
|
|
349
|
-
};
|
package/dev/htmld.md
DELETED
|
@@ -1,250 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
dataStack = []
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
start:
|
|
7
|
-
|
|
8
|
-
node = bw.HtmlNode(data, {atomic:"raw"})
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
if (node == "atomic")
|
|
12
|
-
html += indent + node
|
|
13
|
-
else
|
|
14
|
-
switch (node.t, node.c)
|
|
15
|
-
|
|
16
|
-
case node.t isvoidTag():
|
|
17
|
-
|
|
18
|
-
case node.c isEmpty
|
|
19
|
-
|
|
20
|
-
default
|
|
21
|
-
html += indent + tag
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
//=================
|
|
26
|
-
```html
|
|
27
|
-
<div foo="bar"> ["<"+n.t, ">", "</"+n.t+">"]
|
|
28
|
-
content
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<meta foo="bar" /> ["<"+n.t, "/>", ""]
|
|
32
|
-
|
|
33
|
-
<link href="./place/to/get" /> ["<"+n.t, "/>", ""]
|
|
34
|
-
|
|
35
|
-
<div> ["<"+n.t, ">", "</"+n.t+">"]
|
|
36
|
-
<div id="123"> ["<"+n.t, ">", "</"+n.t+">"]
|
|
37
|
-
this is the content
|
|
38
|
-
</div>
|
|
39
|
-
<div id="123"> ["<"+n.t, ">", "</"+n.t+">"]
|
|
40
|
-
this is the content2
|
|
41
|
-
</div>
|
|
42
|
-
</div>
|
|
43
|
-
|
|
44
|
-
<div>
|
|
45
|
-
<div id="123">this is the content</div>
|
|
46
|
-
</div>
|
|
47
|
-
|
|
48
|
-
//=============
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
//if f() ==> resolve to "" | node
|
|
52
|
-
|
|
53
|
-
var n= bw.HTMLNode(data);
|
|
54
|
-
|
|
55
|
-
if _to(n.node) == "function" {
|
|
56
|
-
n = bw.htmlNode(n.node());
|
|
57
|
-
n = _toa(n.ntype,["BW_HTMLNode","string"],n,""); // if its still not a content we just need to punt it.
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
var h = [];
|
|
61
|
-
|
|
62
|
-
if n.ntype == "string"
|
|
63
|
-
h.push(n.node.toString())
|
|
64
|
-
else
|
|
65
|
-
crend = function(c){ return c!= "array"}
|
|
66
|
-
|
|
67
|
-
h = ["<",n.tag, a{}];
|
|
68
|
-
|
|
69
|
-
auto:
|
|
70
|
-
if node.isVoidTag
|
|
71
|
-
// <tag a{} /> # content is not rendered for void tags # ["<",n.t , a{}, "/>" ]
|
|
72
|
-
h.push( "/>");
|
|
73
|
-
break;
|
|
74
|
-
|
|
75
|
-
all:
|
|
76
|
-
none:
|
|
77
|
-
//<tag a{}> .... </tag> # h=["<",n.t , a{}, crend() , "</", n.t, ">"]
|
|
78
|
-
h.push(">");
|
|
79
|
-
for (i in c)
|
|
80
|
-
h.push(htmlEmit(c[i]).html)
|
|
81
|
-
if ( opts.tagClose == "all" )
|
|
82
|
-
h.push( "</",n.t,">");
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
state.nodeCount++
|
|
86
|
-
html = h.join("");
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
bw.htmlRender = function (data,opts,state) {
|
|
90
|
-
dopts= {
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
dopts = optsCopy(dopts,opts);
|
|
95
|
-
|
|
96
|
-
}
|
|
97
|
-
{
|
|
98
|
-
c: "foo" ==>
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
bw.htmlNode(data, opts)
|
|
102
|
-
{
|
|
103
|
-
opts {
|
|
104
|
-
convertAtomicToNode : true | false, // if true, converts atomic to a span element e.g. "foo" ==> {t:"span",c:["foo"]}
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
return {
|
|
108
|
-
node: HTMLNode | string | function
|
|
109
|
-
isHTMLVoidTag : true | false, // returns true if tag is "meta" or "br" etc
|
|
110
|
-
isAtomic : true | false, // returns true if input data was not a proper node.
|
|
111
|
-
error : false | string
|
|
112
|
-
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
//===========================
|
|
117
|
-
|
|
118
|
-
// ===================================================================================
|
|
119
|
-
bw.htmlEmit = function(htmlData, opts, state) {
|
|
120
|
-
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
//global options:
|
|
124
|
-
pretty (true | false) (default: true) attempts to make HTML pretty (human readable) if false it will be as compact as possible
|
|
125
|
-
pretty_space (if pretty == true) (default: " ") this is the stirng used as the indent string but one could make it "\t" or " " etc.
|
|
126
|
-
pretty_indent (if pretty == true) a fixed indent to provide to every line of html
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
tagClose : ("auto" | closeempty | all | none) whether to close a tag. default is "auto"
|
|
131
|
-
"auto" : will apply smart rules to tag closing. e.g. html void elements such as br are not closed
|
|
132
|
-
"closeempty" : all void elements are now self closed (e.g. are self closed ==> <meta /> or <br />)
|
|
133
|
-
"all" : tags are forced closed with </tagname> ==> can be useful for xml type generation
|
|
134
|
-
"none" : tags are not closed at all
|
|
135
|
-
|
|
136
|
-
all options can be overridden via local node
|
|
137
|
-
|
|
138
|
-
*/
|
|
139
|
-
var html = "",stats={};
|
|
140
|
-
var dopts = {
|
|
141
|
-
pretty : true,
|
|
142
|
-
pretty_space: " ",
|
|
143
|
-
pretty_indent: "", //fixed indent when pretty pass as " " etc
|
|
144
|
-
htmlEscContent : false // change spaces, /n /t to html equivalents
|
|
145
|
-
}
|
|
146
|
-
dopts = optsCopy(dopts,opts);
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
state = bw.toa(state,"object",state, {
|
|
150
|
-
levelCount : 0,
|
|
151
|
-
levelMax : 0,
|
|
152
|
-
nodeCount : 0
|
|
153
|
-
});
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
var _s = function(n){return dopts.pretty_indent+ Array(n+1).join(dopts.pretty_space);} // generate indents for pretty
|
|
157
|
-
|
|
158
|
-
var _atr = function(k,v,o){ // to do handle "smart" attributes ==> class : ["class1", "class2"] ==> style : bw.makeCSS()
|
|
159
|
-
var val=v,ok = "atr_def"in o ? "none" : k;
|
|
160
|
-
if (v==null)
|
|
161
|
-
return k;
|
|
162
|
-
switch(ok) {
|
|
163
|
-
case "style" :
|
|
164
|
-
val = bw.makeCSS(val,{pretty:false});
|
|
165
|
-
break;
|
|
166
|
-
default :
|
|
167
|
-
if (bw.to(v)=="array")
|
|
168
|
-
val = val.join(" ");
|
|
169
|
-
val = val.toString();
|
|
170
|
-
}
|
|
171
|
-
return k+"="+"\""+val.replace("\"","\\\"")+"\"";
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
var _cls = function(n) { // takes BW HTML node
|
|
175
|
-
var r=["","</"+n.t+">"] // r[0] is whether to include closing slash on start tag, r[1] is whether to include closing tag
|
|
176
|
-
var ce = _to(n.c)!="array" ? true : ((n.c.length ==0) ? true : false);
|
|
177
|
-
// o.tagClose==auto && _isv(t)==true ==> ,
|
|
178
|
-
// _isv(t)==false ==> , </t>
|
|
179
|
-
// o.tagClose==closeEmpty && _isv(t)==true ==> /,
|
|
180
|
-
// _isv(t)==false ==> , </t>
|
|
181
|
-
|
|
182
|
-
// o.tagClose==none ==> ,
|
|
183
|
-
// o.tagClose==all ==> , </t>
|
|
184
|
-
r = bw.choice(n.o.tagClose,
|
|
185
|
-
{
|
|
186
|
-
"auto" : (function(){return (n.isVoidTag) ? ["",""] : ["","</"+n.t+">"];}) (),
|
|
187
|
-
"closeEmpty" : (function(){return (n.isVoidTag) ? ["/",""] : ["","</"+n.t+">"];}) (),
|
|
188
|
-
"none" : ["",""]
|
|
189
|
-
},r);
|
|
190
|
-
console.log("cls:",r);
|
|
191
|
-
return r;
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
var ind_s = dopts.pretty ? _s(state.levelCount) : ""; // not ==> we're not trying to render this space just make it pretty for inspection
|
|
195
|
-
var ind_c = dopts.pretty ? _s(state.levelCount+1) : ""; // not ==> we're not trying to render this space just make it pretty for inspection
|
|
196
|
-
var ind_e = dopts.pretty ? "\n" : "";
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
try {
|
|
200
|
-
var i,atrk=[],_a=[],k,v, nx = bw.htmlNode(htmlData);
|
|
201
|
-
switch (nx.ntype) {
|
|
202
|
-
case "BW_HTMLNode":
|
|
203
|
-
{
|
|
204
|
-
var node = nx.node;
|
|
205
|
-
for (i in node.a)
|
|
206
|
-
if (node.a.hasOwnProperty(i)) atrk.push(i);
|
|
207
|
-
atrk = atrk.sort(bw.naturalCompare);
|
|
208
|
-
for (i=0; i<atrk.length; i++) {
|
|
209
|
-
k=atrk[i]; v=node.a[k];
|
|
210
|
-
console.log(k,v)
|
|
211
|
-
_a.push(_atr(k,v,node.o));
|
|
212
|
-
}
|
|
213
|
-
_a = _a.join(" ");
|
|
214
|
-
_a = ((_a.length>0) ? " ": "") + _a;
|
|
215
|
-
console.log( _a, node,nx, ind_s,ind_c,ind_e);
|
|
216
|
-
if ("atomic" == nx[1]) {
|
|
217
|
-
html += ind_c+node.c[0] + ind_e;
|
|
218
|
-
}
|
|
219
|
-
else {
|
|
220
|
-
//console.log(state.levelCount, state.nodeCount,_a)
|
|
221
|
-
html += ind_s + "<" +node.t + _a+ _cls(node)[0]+">";
|
|
222
|
-
html += node.c.map(function(x){
|
|
223
|
-
state.levelCount++;
|
|
224
|
-
state.levelMax += state.levelMax < state.levelCount ? 1 : 0;
|
|
225
|
-
var s = bw.htmlEmit(x,dopts,state).html;
|
|
226
|
-
state.levelCount--;
|
|
227
|
-
return s;
|
|
228
|
-
}
|
|
229
|
-
).join((dopts.pretty?"\n":""));
|
|
230
|
-
html += ind_e + _cls(node)[1] +(dopts.pretty?"\n":"");
|
|
231
|
-
}
|
|
232
|
-
}
|
|
233
|
-
break;
|
|
234
|
-
case "function" :
|
|
235
|
-
var z = bw.htmlEmit(nx.node());
|
|
236
|
-
html += z.html;
|
|
237
|
-
break;
|
|
238
|
-
default :
|
|
239
|
-
html += node.node;
|
|
240
|
-
}
|
|
241
|
-
state.nodeCount ++;
|
|
242
|
-
//console.log(html);
|
|
243
|
-
}
|
|
244
|
-
catch(e) {
|
|
245
|
-
console.log(htmlData,node,e);
|
|
246
|
-
bw.logd(e);
|
|
247
|
-
}
|
|
248
|
-
|
|
249
|
-
return {html:html, stats: state}
|
|
250
|
-
}
|