dothtml 5.2.6 → 5.2.8

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 (55) hide show
  1. package/lib/arg-callback-obj.js +64 -0
  2. package/lib/arg-callback-obj.js.map +1 -0
  3. package/lib/built-in-components/nav-link.js +24 -0
  4. package/lib/built-in-components/nav-link.js.map +1 -0
  5. package/lib/built-in-components/router.js +282 -0
  6. package/lib/built-in-components/router.js.map +1 -0
  7. package/lib/component.js +329 -0
  8. package/lib/component.js.map +1 -0
  9. package/lib/dot-util.js +62 -0
  10. package/lib/dot-util.js.map +1 -0
  11. package/lib/dot.js +1096 -0
  12. package/lib/dot.js.map +1 -0
  13. package/lib/dothtml.js +36 -2
  14. package/lib/dothtml.js.map +1 -1
  15. package/lib/err.js +26 -0
  16. package/lib/err.js.map +1 -0
  17. package/lib/event-bus.js +37 -0
  18. package/lib/event-bus.js.map +1 -0
  19. package/lib/i-dot.js +3 -0
  20. package/lib/i-dot.js.map +1 -0
  21. package/lib/node-polyfill.js +14 -0
  22. package/lib/node-polyfill.js.map +1 -0
  23. package/lib/observable-array.js +274 -0
  24. package/lib/observable-array.js.map +1 -0
  25. package/lib/styling/css-types.ts/css-angle.js +22 -0
  26. package/lib/styling/css-types.ts/css-angle.js.map +1 -0
  27. package/lib/styling/css-types.ts/css-color.js +824 -0
  28. package/lib/styling/css-types.ts/css-color.js.map +1 -0
  29. package/lib/styling/css-types.ts/css-complex.js +23 -0
  30. package/lib/styling/css-types.ts/css-complex.js.map +1 -0
  31. package/lib/styling/css-types.ts/css-data-type.js +9 -0
  32. package/lib/styling/css-types.ts/css-data-type.js.map +1 -0
  33. package/lib/styling/css-types.ts/css-filter.js +121 -0
  34. package/lib/styling/css-types.ts/css-filter.js.map +1 -0
  35. package/lib/styling/css-types.ts/css-length.js +24 -0
  36. package/lib/styling/css-types.ts/css-length.js.map +1 -0
  37. package/lib/styling/css-types.ts/css-number.js +17 -0
  38. package/lib/styling/css-types.ts/css-number.js.map +1 -0
  39. package/lib/styling/css-types.ts/css-percentage.js +13 -0
  40. package/lib/styling/css-types.ts/css-percentage.js.map +1 -0
  41. package/lib/styling/css-types.ts/css-transform.js +183 -0
  42. package/lib/styling/css-types.ts/css-transform.js.map +1 -0
  43. package/lib/styling/css-types.ts/css-unknown.js +17 -0
  44. package/lib/styling/css-types.ts/css-unknown.js.map +1 -0
  45. package/lib/styling/css-types.ts/css-url.js +45 -0
  46. package/lib/styling/css-types.ts/css-url.js.map +1 -0
  47. package/lib/styling/i-dotcss.js +3 -0
  48. package/lib/styling/i-dotcss.js.map +1 -0
  49. package/lib/styling/style-builder.js +815 -0
  50. package/lib/styling/style-builder.js.map +1 -0
  51. package/lib/styling/unit-function-tables.js +27 -0
  52. package/lib/styling/unit-function-tables.js.map +1 -0
  53. package/package.json +9 -7
  54. package/readme.md +4 -0
  55. package/lib/dothtml.js.LICENSE.txt +0 -1
package/lib/dot.js ADDED
@@ -0,0 +1,1096 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ exports.ATTRIBUTE_MODE = exports.SELECTOR_MODE = void 0;
30
+ const event_bus_1 = __importDefault(require("./event-bus"));
31
+ const style_builder_1 = __importStar(require("./styling/style-builder"));
32
+ const err_1 = __importDefault(require("./err"));
33
+ const dot_util_1 = require("./dot-util");
34
+ const component_1 = __importDefault(require("./component"));
35
+ const arg_callback_obj_1 = require("./arg-callback-obj");
36
+ const observable_array_1 = __importDefault(require("./observable-array"));
37
+ const dot = (function (targetSelector) {
38
+ //console.log(targetSelector);
39
+ var targets = targetSelector ? (typeof targetSelector == "string" ? document.querySelectorAll(targetSelector)
40
+ : (targetSelector instanceof Element || targetSelector instanceof Node ? [targetSelector]
41
+ : ((targetSelector instanceof NodeList || (targetSelector instanceof Array) && targetSelector[0] && (targetSelector[0] instanceof Element || targetSelector[0] instanceof Node)) ? targetSelector
42
+ : [])))
43
+ : [];
44
+ //console.log(targets);
45
+ var newDot = new DotDocument();
46
+ if (targets.length > 0) {
47
+ newDot.__document = targets[0];
48
+ }
49
+ dot["__selectionMode"] = exports.SELECTOR_MODE;
50
+ return newDot;
51
+ });
52
+ const DOCEL = "DOTHTML-DOCUMENT";
53
+ const DEFEL = "DOTHTML-DEFER";
54
+ var _anonFuncCounter = 0;
55
+ function ext(name, method) {
56
+ _p[name] = dot[name] = method;
57
+ }
58
+ // Deletes one element (and not its children).
59
+ // Used by _p.empty and _p.remove.
60
+ function deleteElement(element) {
61
+ var deleted = null;
62
+ var dc = element["__dothtml_component"];
63
+ if (dc) {
64
+ // var d = dc.deleting;
65
+ dc.deleting && dc.deleting();
66
+ dc["__$el"] = null;
67
+ deleted = dc.deleted;
68
+ }
69
+ if (element.parentNode)
70
+ element.parentNode.removeChild(element);
71
+ deleted && deleted.apply(dc);
72
+ }
73
+ function _conditionalBlock(T, totalCondition, allConditions, contentCallback) {
74
+ var startTextNode = document.createTextNode("");
75
+ var endTextNode = document.createTextNode("");
76
+ //var cb = {f:contentCallback,startNode:startTextNode, endNode:endTextNode,condition:totalCondition};
77
+ var cb = new arg_callback_obj_1.ConditionalArgCallback(startTextNode, endTextNode, contentCallback, totalCondition);
78
+ dot["__currentArgCallback"].push(cb);
79
+ var renderContent = totalCondition();
80
+ T = T._appendOrCreateDocument(startTextNode);
81
+ for (var i = 0; i < allConditions.length; i++)
82
+ allConditions[i]();
83
+ cb.lastValue = renderContent;
84
+ if (renderContent)
85
+ T = T._appendOrCreateDocument(contentCallback);
86
+ T = T._appendOrCreateDocument(endTextNode);
87
+ dot["__currentArgCallback"].pop();
88
+ return T;
89
+ }
90
+ function attachEvent(el, ev, val, a3) {
91
+ if (el.addEventListener)
92
+ el.addEventListener(ev, val, a3 || false);
93
+ else
94
+ el.attachEvent("on" + ev, val); //compatibility with old browsers.
95
+ }
96
+ function createElement(tag) {
97
+ ext(tag, function (c) { return this.el(tag, c); });
98
+ }
99
+ ;
100
+ function createAttribute(attribute, alias) {
101
+ _p[alias || attribute] = function (value) { return this.attr(attribute, value); };
102
+ }
103
+ ;
104
+ // Selection Mode enum.
105
+ exports.SELECTOR_MODE = 1;
106
+ exports.ATTRIBUTE_MODE = 2;
107
+ // TODO: this might need to go in just the right place.
108
+ // dotReady(dot, _p, _D);
109
+ // Dot document object.
110
+ // Formerly _D
111
+ var DotDocument = (function (document, classPrefix) {
112
+ // Private vars.
113
+ this.__document = document;
114
+ this.__lastNode = document ? document.lastChild : null;
115
+ this.__if = null;
116
+ this.__pendingCalls = []; //Allows you to set parent attributes from children.
117
+ this.__anonAttrFuncs = {}; //Only to be used by top-level dot object.
118
+ this.__classPrefix = classPrefix || 0;
119
+ this.__classedElements = [];
120
+ this.__selectionMode = exports.SELECTOR_MODE;
121
+ });
122
+ // Prototype for the dot document object.
123
+ var _p = DotDocument.prototype;
124
+ var allTags = [
125
+ "a",
126
+ "aside",
127
+ "abbr",
128
+ "address",
129
+ "area",
130
+ "article",
131
+ "audio",
132
+ "b",
133
+ "bdi",
134
+ "bdo",
135
+ "blockQuote",
136
+ "body",
137
+ "br",
138
+ "button",
139
+ "canvas",
140
+ "caption",
141
+ "cite",
142
+ "code",
143
+ "col",
144
+ "colGroup",
145
+ "content",
146
+ "data",
147
+ "dataList",
148
+ "dd",
149
+ "del",
150
+ "details",
151
+ "dfn",
152
+ "dialog",
153
+ "div",
154
+ "dl",
155
+ "dt",
156
+ "em",
157
+ "embed",
158
+ "fieldSet",
159
+ "figCaption",
160
+ "figure",
161
+ "footer",
162
+ "form",
163
+ "h1",
164
+ "h2",
165
+ "h3",
166
+ "h4",
167
+ "h5",
168
+ "h6",
169
+ "header",
170
+ "hr",
171
+ "i",
172
+ "iFrame",
173
+ "img",
174
+ "input",
175
+ "ins",
176
+ "kbd",
177
+ "keyGen",
178
+ "label",
179
+ "legend",
180
+ "li",
181
+ "main",
182
+ "map",
183
+ "mark",
184
+ "menu",
185
+ "menuItem",
186
+ "meter",
187
+ "nav",
188
+ "object",
189
+ "ol",
190
+ "optGroup",
191
+ "option",
192
+ "output",
193
+ "p",
194
+ "param",
195
+ "pre",
196
+ "progress",
197
+ "q",
198
+ "rp",
199
+ "rt",
200
+ "ruby",
201
+ "s",
202
+ "samp",
203
+ "section",
204
+ "select",
205
+ "small",
206
+ "source",
207
+ "span",
208
+ "strong",
209
+ "svg",
210
+ "sub",
211
+ "summary",
212
+ "sup",
213
+ "table",
214
+ "tBody",
215
+ "td",
216
+ "textArea",
217
+ "tFoot",
218
+ "th",
219
+ "tHead",
220
+ "time",
221
+ "tr",
222
+ "track",
223
+ "u",
224
+ "ul",
225
+ "var",
226
+ "video",
227
+ "wbr"
228
+ ];
229
+ var allAttributes = [
230
+ "accept",
231
+ "accessKey",
232
+ "action",
233
+ "align",
234
+ "aLink",
235
+ "alt",
236
+ "archive",
237
+ "autoComplete",
238
+ "autoFocus",
239
+ "autoPlay",
240
+ "autoSave",
241
+ "axis",
242
+ "background",
243
+ "bgColor",
244
+ "border",
245
+ "buffered",
246
+ "cellPadding",
247
+ "cellSpacing",
248
+ "challenge",
249
+ "char",
250
+ "charOff",
251
+ "checked",
252
+ // "cite", //*
253
+ //"class",
254
+ "classId",
255
+ "clear",
256
+ "codeBase",
257
+ "codeType",
258
+ "color",
259
+ "cols",
260
+ "colSpan",
261
+ "compact",
262
+ "contentEditable",
263
+ "contextMenu",
264
+ "controls",
265
+ "coords",
266
+ "dateTime",
267
+ "declare",
268
+ "default",
269
+ //"data", //*
270
+ "dir",
271
+ "dirName",
272
+ "disabled",
273
+ "download",
274
+ "draggable",
275
+ "dropZone",
276
+ "encType",
277
+ "face",
278
+ "font",
279
+ "fontFace",
280
+ "fontFaceFormat",
281
+ "fontFaceName",
282
+ "fontFaceSrc",
283
+ "fontFaceUri",
284
+ "fontSpecification",
285
+ "for",
286
+ "foreignObject",
287
+ // "form", //*
288
+ "formAction",
289
+ "frame",
290
+ "frameBorder",
291
+ "headers",
292
+ "height",
293
+ "hidden",
294
+ "high",
295
+ "hRef",
296
+ "hRefLang",
297
+ "hSpace",
298
+ "icon",
299
+ "id",
300
+ "images",
301
+ "isMap",
302
+ "itemProp",
303
+ "keyType",
304
+ "kind",
305
+ // "label", //*
306
+ "lang",
307
+ "list",
308
+ "longDesc",
309
+ "loop",
310
+ "low",
311
+ "manifest",
312
+ "marginHeight",
313
+ "marginWidth",
314
+ "max",
315
+ "maxLength",
316
+ "media",
317
+ "metadata",
318
+ "method",
319
+ "min",
320
+ "missingGlyph",
321
+ "multiple",
322
+ "muted",
323
+ "name",
324
+ "noHRef",
325
+ "noResize",
326
+ "noShade",
327
+ "noValidate",
328
+ "nowrap",
329
+ "open",
330
+ "optimum",
331
+ "pattern",
332
+ "ping",
333
+ "placeholder",
334
+ "poster",
335
+ "preload",
336
+ "prompt",
337
+ "radioGroup",
338
+ "readOnly",
339
+ "rel",
340
+ "required",
341
+ "rev",
342
+ "reversed",
343
+ "rows",
344
+ "rowSpan",
345
+ "rules",
346
+ "sandbox",
347
+ "scope",
348
+ "scrolling",
349
+ "seamless",
350
+ "selected",
351
+ "shape",
352
+ "size",
353
+ "sizes",
354
+ // "span", //*
355
+ "spellCheck",
356
+ "src",
357
+ "srcDoc",
358
+ "srcLang",
359
+ "srcSet",
360
+ "standby",
361
+ "start",
362
+ "step",
363
+ // "summary", //*
364
+ "style",
365
+ "tabIndex",
366
+ "target",
367
+ "title",
368
+ "type",
369
+ "useMap",
370
+ "vAlign",
371
+ "value",
372
+ "valueType",
373
+ "width",
374
+ "wrap"
375
+ //"dataA", //Special explicit
376
+ //"citeA",
377
+ //"formA",
378
+ //"labelA",
379
+ //"spanA",
380
+ //"summaryA"
381
+ ];
382
+ var specialAttributes = [
383
+ ["quoteCite", "cite"],
384
+ ["objectData", "data"],
385
+ ["whichForm", "form"],
386
+ ["trackLabel", "label"],
387
+ ["colSpan", "span"],
388
+ ["tableSummary", "summary"],
389
+ ["optionLabel", "label"],
390
+ ["acceptCharset", "accept-charset"],
391
+ ];
392
+ var allEventAttr = [
393
+ "onAbort",
394
+ "onBlur",
395
+ "onChange",
396
+ "onInput",
397
+ "onCanPlay",
398
+ "onCantPlayThrough",
399
+ "onClick",
400
+ "onCopy",
401
+ "onContextMenu",
402
+ "onCueChange",
403
+ "onCut",
404
+ "onDblClick",
405
+ "onDrag",
406
+ "onDragEnd",
407
+ "onDragEnter",
408
+ "onDragLeave",
409
+ "onDragOver",
410
+ "onDragStart",
411
+ "onDrop",
412
+ "onDurationChange",
413
+ "onEmptied",
414
+ "onEnded",
415
+ "onError",
416
+ "onFocus",
417
+ "onHashChange",
418
+ "onInvalid",
419
+ "onKeyDown",
420
+ "onKeyPress",
421
+ "onKeyUp",
422
+ "onLoad",
423
+ "onLoadedData",
424
+ "onLoadedMetadata",
425
+ "onLoadStart",
426
+ "onMouseDown",
427
+ "onMouseEnter",
428
+ "onMouseMove",
429
+ "onMouseOut",
430
+ "onMouseOver",
431
+ "onMouseUp",
432
+ "onMouseWheel",
433
+ "onOffline",
434
+ "onOnline",
435
+ "onPageHide",
436
+ "onPagePaste",
437
+ "onPageShow",
438
+ "onPause",
439
+ "onPlay",
440
+ "onPlaying",
441
+ "onPopState",
442
+ "onProgress",
443
+ "onRateChange",
444
+ "onReset",
445
+ "onResize",
446
+ "onScroll",
447
+ "onSearch",
448
+ "onSeeked",
449
+ "onSeeking",
450
+ "onSelect",
451
+ "onStalled",
452
+ "onStorage",
453
+ "onSubmit",
454
+ "onSuspend",
455
+ "onTimeUpdate",
456
+ "onToggle",
457
+ "onUnload",
458
+ "onVolumeChange",
459
+ "onWaiting",
460
+ "onWheel",
461
+ ];
462
+ var i;
463
+ for (i in allTags)
464
+ createElement(allTags[i]);
465
+ for (i in allAttributes)
466
+ createAttribute(allAttributes[i]);
467
+ for (i in specialAttributes) {
468
+ createAttribute(specialAttributes[i][1], specialAttributes[i][0]);
469
+ }
470
+ for (i in allEventAttr)
471
+ createAttribute(allEventAttr[i]);
472
+ ext("as", function (dotElement) {
473
+ return this;
474
+ });
475
+ ext("_getNewDocument", function () {
476
+ return document.createElement(DOCEL);
477
+ });
478
+ ext("_getAnInstance", function () {
479
+ if (this.__document || this.__pendingCalls.length > 0)
480
+ return this;
481
+ else {
482
+ var d = new DotDocument(null, this.__classPrefix);
483
+ d.__if = this.__if;
484
+ return d;
485
+ }
486
+ ;
487
+ });
488
+ ext("_getLastChildOrNull", function () {
489
+ if (this.__document && this.__document.lastChild)
490
+ return this.__document.lastChild;
491
+ return null;
492
+ });
493
+ //I'm not sure if this is supported anymore.
494
+ ext("getLast", function () {
495
+ return this._getLastChildOrNull();
496
+ });
497
+ ext("getCurrent", function () {
498
+ let last;
499
+ switch (dot["__selectionMode"]) {
500
+ case exports.SELECTOR_MODE: {
501
+ last = this.__document;
502
+ break;
503
+ }
504
+ case exports.ATTRIBUTE_MODE: {
505
+ last = this.getLast() || this.__document;
506
+ break;
507
+ }
508
+ }
509
+ return last;
510
+ });
511
+ _p.toString = function () {
512
+ if (this.__document)
513
+ return this.__document.innerHTML;
514
+ else
515
+ return "";
516
+ };
517
+ _p.ref = function (name) {
518
+ let l = this.getLast();
519
+ let gl = dot_util_1.GlobalComponentStack.length;
520
+ if (l && gl > 0) {
521
+ let c = dot_util_1.GlobalComponentStack[gl - 1];
522
+ c.$refs[name] = l;
523
+ }
524
+ return this;
525
+ };
526
+ //before is passed in so that attributes can be associated with before's sibling, instead of inheritingParent, the default.
527
+ ext("_evalContent", function (content, pendingCalls) {
528
+ if (content == null || content == undefined)
529
+ return null;
530
+ if (typeof content === "string" || typeof content === "number" || typeof content === "boolean") { //Raw data
531
+ let nDot = new DotDocument(this._getNewDocument(), this.__classPrefix);
532
+ nDot.__document.innerHTML = content;
533
+ return nDot.__document.childNodes;
534
+ }
535
+ else if (content instanceof Node)
536
+ return content;
537
+ else if (Object.prototype.toString.call(content) === '[object Array]') { //Array
538
+ let nDot = new DotDocument(this._getNewDocument(), this.__classPrefix);
539
+ for (let i = 0; i < content.length; i++) {
540
+ nDot._appendOrCreateDocument(content[i]);
541
+ }
542
+ if (nDot.__document)
543
+ return nDot.__document.childNodes;
544
+ }
545
+ else if ((0, dot_util_1.isF)(content)) //Function to evaluate
546
+ {
547
+ return this._evalContent(content(), pendingCalls);
548
+ }
549
+ else if (content instanceof component_1.default) {
550
+ return this._evalContent(component_1.default.build(content));
551
+ }
552
+ else if (content instanceof DotDocument) { //DOT
553
+ for (let i = 0; i < content["__pendingCalls"].length; i++) {
554
+ pendingCalls.push(content["__pendingCalls"][i]);
555
+ }
556
+ let cp = this.__classPrefix;
557
+ for (let i in content["__classedElements"]) {
558
+ let el = content["__classedElements"][i];
559
+ if (!cp) {
560
+ this["__classedElements"].push(el);
561
+ }
562
+ else {
563
+ el.className = "dot-" + (0, dot_util_1.str)(cp, 16) + "-" + el.className;
564
+ }
565
+ }
566
+ if (content["__document"])
567
+ return content["__document"].childNodes; //Return all the nodes in here.
568
+ }
569
+ return null;
570
+ });
571
+ ext("_appendOrCreateDocument", function (content, parentEl, beforeNode) {
572
+ var T = this;
573
+ // Validation
574
+ ;
575
+ ;
576
+ ;
577
+ if (parentEl && beforeNode && isNaN(beforeNode) && beforeNode.parentNode != parentEl)
578
+ throw "beforeNode is not in parentEl.";
579
+ // Find the parent, or create one.
580
+ //Note: the stuff with setting parentEl to beforeNode's parent is due to a very strange bug where this.__document gets set to some phantom document when the wait function is used inside a div like so: DOT.div(DOT.wait(100, "hello!")); Try it. )
581
+ parentEl = parentEl || (beforeNode && isNaN(beforeNode) ? beforeNode.parentNode : null) || T.__document || T._getNewDocument();
582
+ if (!isNaN(beforeNode)) {
583
+ beforeNode = parentEl.childNodes[beforeNode];
584
+ //;;; if(!beforeNode) throw "beforeNode not found."; // TODO: reenable this and investigate why it breaks.
585
+ }
586
+ // nd is a dot wrapper for parentEl (allows us to do dot ops on it).
587
+ var nd = T.__document === parentEl ? T : new DotDocument(parentEl, T.__classPrefix);
588
+ nd.__if = T.__if;
589
+ var pendingCalls = []; //This will populate with pending calls.
590
+ // Evaluate the content. This does not add it to the DOM pet.
591
+ var eContent;
592
+ var cf = (0, dot_util_1.isF)(content);
593
+ // If it's a function, we need to consider
594
+ //if(cf) dot.__currentArgCallback.push({f:content,e:parentEl})
595
+ if (cf)
596
+ dot["__currentArgCallback"].push(new arg_callback_obj_1.ContentArgCallback(parentEl, content));
597
+ try {
598
+ eContent = nd._evalContent(content, /*parentEl, beforeNode,*/ pendingCalls);
599
+ }
600
+ finally {
601
+ if (cf)
602
+ dot["__currentArgCallback"].pop();
603
+ }
604
+ // Pending calls are calls included in the dot element which didn't get consumed and must be propagated up.
605
+ // This usually includes attributes and waits.
606
+ for (var i = 0; i < pendingCalls.length; i++) {
607
+ var call = pendingCalls[i];
608
+ //Three possibilities.
609
+ //1. Use the pending call against the last sibling element, if one exists.
610
+ //2. Otherwise, use it on the current parent, if it's ready.
611
+ //3. Otherwise, save it as a pending call right here. // Don't think this ever happens.
612
+ var pendingCallTarget = (beforeNode ? (beforeNode.previousSibling || parentEl /*Since lastChild will be a timeout*/) : null /*1*/) || parentEl.lastChild /*2*/ || parentEl;
613
+ if (pendingCallTarget && pendingCallTarget.tagName != "DOCUMENT") {
614
+ if (call.type == "attr") {
615
+ if (!(0, dot_util_1.isF)(call.params[0])) {
616
+ pendingCallTarget.setAttribute(call.name, call.params[0]);
617
+ }
618
+ else {
619
+ // TODO: how do we know it's a valid event?
620
+ let newName = call.name;
621
+ attachEvent(pendingCallTarget, newName, call.params[0], call.arg3);
622
+ }
623
+ }
624
+ else if (call.type == "wait") {
625
+ call.callback();
626
+ }
627
+ }
628
+ else {
629
+ nd.__pendingCalls.push(call); /*3*/
630
+ }
631
+ }
632
+ // Append content to the current document.
633
+ if (eContent !== null && eContent !== undefined) {
634
+ if (eContent instanceof NodeList) {
635
+ //for(var i = 0; i < eContent.length; i++){
636
+ while (eContent.length > 0) {
637
+ if (beforeNode)
638
+ parentEl.insertBefore(eContent[0], beforeNode);
639
+ else
640
+ parentEl.appendChild(eContent[0]);
641
+ }
642
+ }
643
+ else {
644
+ if (beforeNode)
645
+ parentEl.insertBefore(eContent, beforeNode);
646
+ else
647
+ parentEl.appendChild(eContent);
648
+ }
649
+ }
650
+ return nd;
651
+ //return this;
652
+ });
653
+ ext("el", function (tag, content) {
654
+ var T = this;
655
+ var ne = document.createElement(tag);
656
+ var nDoc = T.__document || T._getNewDocument();
657
+ nDoc.appendChild(ne);
658
+ if (content)
659
+ T._appendOrCreateDocument(content, ne);
660
+ var ret = T.__document === nDoc ? T : new DotDocument(nDoc, T.__classPrefix);
661
+ if (content && content instanceof DotDocument)
662
+ for (var i in content["__classedElements"])
663
+ ret.__classedElements.push(content["__classedElements"][i]);
664
+ dot["__selectionMode"] = exports.ATTRIBUTE_MODE;
665
+ return ret;
666
+ });
667
+ ext("h", function (content) {
668
+ var T = this;
669
+ var hDoc = T._getNewDocument();
670
+ var hDot = new DotDocument(hDoc, T.__classPrefix);
671
+ //if(typeof content === "string" || typeof content === "number" || typeof content === "boolean") hDoc.innerHTML = content; //Raw data
672
+ hDot._appendOrCreateDocument(content);
673
+ var nDoc = T.__document || T._getNewDocument();
674
+ while (hDoc.childNodes.length > 0) {
675
+ nDoc.appendChild(hDoc.childNodes[0]);
676
+ }
677
+ return T.__document === nDoc ? T : new DotDocument(nDoc, T.__classPrefix);
678
+ });
679
+ ext("t", function (content) {
680
+ var textNode = document.createTextNode(content);
681
+ var nDoc = this.__document || this._getNewDocument();
682
+ nDoc.appendChild(textNode);
683
+ return new DotDocument(nDoc, this.__classPrefix);
684
+ });
685
+ ext("attr", function (attr, value, arg3) {
686
+ var T = this;
687
+ if ((0, dot_util_1.isF)(value)) { // events.
688
+ if (attr.indexOf("on") == 0 && allEventAttr.indexOf(attr) != -1) {
689
+ attr = attr.substring(2).toLowerCase();
690
+ }
691
+ else {
692
+ // Unrecognized event.
693
+ dot["__anonAttrFuncs"][_anonFuncCounter] = (value);
694
+ value = "dot.__anonAttrFuncs[" + (_anonFuncCounter++) + "](arguments[0]);";
695
+ // attr = attr.substring(2);
696
+ }
697
+ }
698
+ if (T.__document) {
699
+ var cn = T.__document.childNodes;
700
+ var last = cn[cn.length - 1];
701
+ if (last && last.setAttribute) {
702
+ if (!(0, dot_util_1.isF)(value)) {
703
+ // Objects (except for the css builder :/)
704
+ if (typeof value == "object" && !(value instanceof style_builder_1._Builder)) {
705
+ var originalValue = value;
706
+ var valueSetter = function () {
707
+ var str = "";
708
+ (0, dot_util_1.eachK)(originalValue, function (k, v) {
709
+ v = (0, dot_util_1.isF)(v) ? v() : v;
710
+ if (!v)
711
+ return;
712
+ str += " " + k;
713
+ });
714
+ return str.substring(1);
715
+ };
716
+ //dot.__currentArgCallback.push({f:valueSetter,e:parentEl,a:attr})
717
+ dot["__currentArgCallback"].push(new arg_callback_obj_1.AttrArgCallback(last, attr, valueSetter));
718
+ value = valueSetter();
719
+ dot["__currentArgCallback"].pop();
720
+ }
721
+ var eValue = last.getAttribute(attr); //Appends the new value to any existing value.
722
+ if (!eValue)
723
+ eValue = "";
724
+ else
725
+ eValue += " ";
726
+ last.setAttribute(attr, eValue + (value === undefined ? attr : value)); //||attr is for self-explaining attributes
727
+ }
728
+ else {
729
+ attachEvent(last, attr, value, arg3);
730
+ }
731
+ }
732
+ }
733
+ else {
734
+ // TODO: should probably remove pending calls. This has turned out to be an anti-pattern.
735
+ var pD = T._getAnInstance();
736
+ //if(!pD.__pendingCalls.length > 0) pD.__pendingCalls = [];
737
+ pD.__pendingCalls.push({ type: "attr", name: attr, params: [value], arg3: arg3 });
738
+ return pD;
739
+ }
740
+ return T;
741
+ });
742
+ ext("_appendSetElement", function (targetId, appendMode) {
743
+ var T = this;
744
+ if (!targetId) {
745
+ (0, err_1.default)("A", targetId);
746
+ return T;
747
+ }
748
+ var destination = document.getElementById(targetId);
749
+ if (!destination) {
750
+ (0, err_1.default)("F", targetId);
751
+ return T;
752
+ }
753
+ if (T.__document) {
754
+ if (!appendMode)
755
+ destination.innerHTML = "";
756
+ while (T.__document.childNodes.length > 0)
757
+ destination.appendChild(T.__document.childNodes[0]);
758
+ }
759
+ return T;
760
+ });
761
+ ext("iterate", function (iterations, callback) {
762
+ var target = this;
763
+ // var copycontent = null;
764
+ // Not sure what this was used for before the TS port.
765
+ // var content = callback;
766
+ // if(content instanceof DotDocument) {
767
+ // copycontent = content.__document.cloneNode(true);
768
+ // }
769
+ for (var i = 0; i < iterations; i++) {
770
+ let content = null;
771
+ if ((0, dot_util_1.isF)(callback))
772
+ content = callback(i);
773
+ // if(copycontent) content.__document = copycontent.cloneNode(true);
774
+ target = target._appendOrCreateDocument(content);
775
+ }
776
+ return target;
777
+ });
778
+ ext("each", function (array, callback, forceNoDeferred) {
779
+ var target = this;
780
+ if ((0, dot_util_1.isF)(array)) {
781
+ if (!forceNoDeferred) {
782
+ return target.defer(function (v) {
783
+ v.each(array, callback, true);
784
+ });
785
+ }
786
+ // console.log(this.__document);
787
+ var func = array;
788
+ //target = target._appendOrCreateDocument();
789
+ // dot.__currentArgCallback.push({f:callback,d:target});
790
+ dot["__currentArgCallback"].push(new arg_callback_obj_1.ArrayArgCallback(target, callback));
791
+ try {
792
+ array = func();
793
+ }
794
+ finally {
795
+ dot["__currentArgCallback"].pop();
796
+ }
797
+ }
798
+ if (array instanceof Array || array instanceof observable_array_1.default) {
799
+ for (var i = 0; i < array.length; i++) {
800
+ target = target._appendOrCreateDocument(callback(array[i], i));
801
+ }
802
+ }
803
+ else {
804
+ var keys = Object.keys(array);
805
+ for (var i = 0; i < keys.length; i++) {
806
+ var k = keys[i];
807
+ target = target._appendOrCreateDocument(callback(array[k], k));
808
+ }
809
+ }
810
+ return target;
811
+ });
812
+ //SVG
813
+ //_p.svg = function(){ERR("S")};
814
+ //Data is a special attribute.
815
+ _p.customData = function (suffix, value) {
816
+ return this.attr("data-" + suffix, value);
817
+ };
818
+ _p.class = function (value) {
819
+ var cp = this.__classPrefix;
820
+ // This handles legitimate class prefixes. If we are dealing with a compted class list, each class list name is prefixed.
821
+ if (cp) {
822
+ var prefix = "dot-" + (0, dot_util_1.str)(cp, 16) + "-";
823
+ if (typeof value == "string")
824
+ value = prefix + value;
825
+ else if (typeof value == "object") {
826
+ var v2 = {};
827
+ (0, dot_util_1.eachK)(value, function (k, v) {
828
+ v2[prefix + k] = v;
829
+ });
830
+ value = v2;
831
+ }
832
+ }
833
+ else {
834
+ var el = this.getLast();
835
+ el && this.__classedElements.push(el);
836
+ }
837
+ return this.attr("class", value);
838
+ };
839
+ _p.play = function () {
840
+ let last = this.getCurrent();
841
+ last.play && last.play();
842
+ return this;
843
+ };
844
+ _p.pause = function (resetTime) {
845
+ let last = this.getCurrent();
846
+ last.pause && last.pause();
847
+ if (resetTime)
848
+ last.currentTime = 0;
849
+ return this;
850
+ };
851
+ _p.stop = function () {
852
+ return this.pause(true);
853
+ };
854
+ /**
855
+ * Sets the value of an input or texterea.
856
+ * @param {string} value - The value to be set.
857
+ */
858
+ _p.setVal = function (value) {
859
+ let last = this.getCurrent();
860
+ if (!last)
861
+ return this;
862
+ // console.log("CHECKVALUE", value);
863
+ //if ( typeof value === "number" ) val += "";
864
+ if (Array.isArray && Array.isArray(value) || !Array.isArray && value.join) {
865
+ value = value.join("");
866
+ }
867
+ else if (value == null) {
868
+ value = "";
869
+ }
870
+ if (last.type == "checkbox") {
871
+ last.checked = value ? true : false;
872
+ }
873
+ else if (last.type == "radio") {
874
+ last.checked = value ? true : false;
875
+ }
876
+ else if (last.tagName == "OPTION") {
877
+ last.selected = value ? true : false;
878
+ }
879
+ else {
880
+ // console.log("UPDATING VALUE!!", value, last, last.value);
881
+ last.value = value;
882
+ // console.log("UPDATED!!", value, last, last.value);
883
+ }
884
+ return this;
885
+ };
886
+ _p.getVal = function () {
887
+ var element = this.__lastNode || this.__document;
888
+ if (!element || element.nodeType !== 1)
889
+ return undefined;
890
+ if (element["type"] == "checkbox") {
891
+ return element["checked"] ? true : false;
892
+ }
893
+ else if (element["type"] == "radio") {
894
+ return element["checked"] ? true : false;
895
+ }
896
+ else if (element.tagName == "OPTION") {
897
+ return element["selected"] ? true : false;
898
+ }
899
+ else {
900
+ return element["value"];
901
+ }
902
+ };
903
+ ext("when", function (condition, contentCallback, ar) {
904
+ var T = this._getAnInstance();
905
+ if ((0, dot_util_1.isF)(condition)) {
906
+ if (!ar)
907
+ ar = T.__conditionalArray = [condition];
908
+ var l = ar.length - 1;
909
+ var totalCondition = function () {
910
+ for (var i = 0; i < l; i++) {
911
+ if (!!ar[i]()) {
912
+ return false;
913
+ }
914
+ }
915
+ return !!condition();
916
+ };
917
+ T = _conditionalBlock(T, totalCondition, ar, contentCallback);
918
+ // ar.push(condition);
919
+ }
920
+ else {
921
+ // Old:
922
+ if (!!condition) {
923
+ T = T._appendOrCreateDocument((0, dot_util_1.isF)(contentCallback) ? contentCallback() : contentCallback);
924
+ T.__if = true;
925
+ }
926
+ else {
927
+ T.__if = false;
928
+ }
929
+ }
930
+ return T;
931
+ });
932
+ ext("otherwiseWhen", function (condition, callback) {
933
+ if ((0, dot_util_1.isF)(condition)) {
934
+ var ar = this.__conditionalArray;
935
+ if (!ar)
936
+ (0, err_1.default)("MC");
937
+ //var l = ar.length - 1;
938
+ // var newCondition = function(){
939
+ // for(var i = 0; i <= l; i++){
940
+ // if(ar[i]()) return false;
941
+ // }
942
+ // return !!condition();
943
+ // }
944
+ ar.push(condition);
945
+ return this.when(condition, callback, ar);
946
+ }
947
+ else {
948
+ if (!this.__if) {
949
+ return this.when(condition, callback);
950
+ }
951
+ }
952
+ return this;
953
+ });
954
+ ext("otherwise", function (callback) {
955
+ var ar = this.__conditionalArray;
956
+ if (ar) {
957
+ //var l = ar.length - 1;
958
+ var newCondition = function () {
959
+ return true;
960
+ };
961
+ ar.push(newCondition);
962
+ return this.when(newCondition, callback, ar);
963
+ }
964
+ else if (!this.__if) {
965
+ this.__if = null;
966
+ return this._getAnInstance()._appendOrCreateDocument(callback);
967
+ }
968
+ return this;
969
+ });
970
+ ext("script", function (callback) {
971
+ var last = this.getLast();
972
+ (0, dot_util_1.sT)(function () { callback(last); }, 0);
973
+ return this;
974
+ });
975
+ ext("wait", function (timeout, callback) {
976
+ var timeoutDot = this.el(DEFEL);
977
+ var timeoutNode = timeoutDot.__document.lastChild;
978
+ (0, dot_util_1.sT)(() => {
979
+ timeoutDot._appendOrCreateDocument(callback, null, timeoutNode);
980
+ timeoutNode.parentElement.removeChild(timeoutNode);
981
+ }, timeout);
982
+ return timeoutDot;
983
+ // Ideally something like this:
984
+ //return this.defer(function(d){d.h(callback)}, timeout);
985
+ });
986
+ ext("defer", function (callback) {
987
+ if (!(0, dot_util_1.isF)(callback))
988
+ (0, err_1.default)("XF", "defer");
989
+ var deferDot = this.el(DEFEL);
990
+ var deferNode = deferDot.__document.lastChild;
991
+ (0, dot_util_1.sT)(() => {
992
+ callback(dot(deferNode.parentElement));
993
+ deferNode.parentElement.removeChild(deferNode);
994
+ }, 0);
995
+ return deferDot;
996
+ });
997
+ ext("empty", function () {
998
+ if (this.__document) {
999
+ // Build a queue of items to remove.
1000
+ var queue = [this.__document];
1001
+ var firstQ = true;
1002
+ var stack = [];
1003
+ while (queue.length > 0) {
1004
+ var current = queue.shift();
1005
+ if (current.childNodes.length > 0) {
1006
+ for (var i = 0; i < current.childNodes.length; i++) {
1007
+ queue.push(current.childNodes[i]);
1008
+ }
1009
+ }
1010
+ !firstQ && stack.push(current);
1011
+ firstQ = false;
1012
+ }
1013
+ while (stack.length > 0) {
1014
+ deleteElement(stack.pop());
1015
+ }
1016
+ }
1017
+ // Drop all the other nodes (like text)
1018
+ // Text seems to get deleted even without this code :).
1019
+ //while (this.__document.firstChild) {
1020
+ // this.__document.removeChild(this.__document.firstChild);
1021
+ //}
1022
+ return this;
1023
+ });
1024
+ ext("remove", function () {
1025
+ this.empty();
1026
+ deleteElement(this.__document);
1027
+ });
1028
+ ext("scopeClass", function (prefix, content) {
1029
+ if (prefix == null) {
1030
+ prefix = dot_util_1.ClassPrefix.next;
1031
+ }
1032
+ var T = this;
1033
+ //T.__classPrefix = prefix || classPrefix.next;
1034
+ //doc.__oldClassPrefix.push(prefix);
1035
+ T.__classPrefix = prefix;
1036
+ var ret = T.h(content);
1037
+ T.__classPrefix = 0;
1038
+ //doc.__oldClassPrefix.pop();
1039
+ //T.__classPrefix = oldCp;
1040
+ return ret;
1041
+ });
1042
+ _p.bindTo = function (prop) {
1043
+ let lastProp = dot["__lastProp"];
1044
+ let lastIndex = dot["__lastIndex"];
1045
+ let lastComponent = dot["__lastComponent"];
1046
+ let last = this.getLast();
1047
+ //var noListener = true;
1048
+ let _value = lastComponent.props[lastProp];
1049
+ if (lastIndex != null && lastIndex != undefined)
1050
+ _value = _value[lastIndex];
1051
+ let ret = this.setVal(_value);
1052
+ // Binding from the input to the prop.
1053
+ attachEvent(last, "change", function (e) { lastComponent.props[lastProp] = dot(last).as(dot.input).getVal(); });
1054
+ lastComponent["__propContainer"].bindings[lastProp].push({
1055
+ element: last
1056
+ });
1057
+ //var noListener = false;
1058
+ return ret;
1059
+ };
1060
+ // ext("resetScopeClass", function(){
1061
+ // ClassPrefix.reset();
1062
+ // });
1063
+ dot.resetScopeClass = function () {
1064
+ dot_util_1.ClassPrefix.reset();
1065
+ return this;
1066
+ };
1067
+ // _p.bindTo = function(binding){
1068
+ // var last = this.getLast();
1069
+ // //var noListener = true;
1070
+ // var ret = this.setVal(binding.value);
1071
+ // attachEvent(last, "change", function(e){binding.value = this.getVal();})
1072
+ // binding.subscribe(last);
1073
+ // //var noListener = false;
1074
+ // return ret;
1075
+ // }
1076
+ // export DotDocument;
1077
+ dot.css = style_builder_1.default;
1078
+ dot.bus = event_bus_1.default;
1079
+ // dot.component = addComponent;
1080
+ // TODO: might remove this in v4+
1081
+ // dot.removeComponent = removeComponent;
1082
+ //Fill in all the other fields.
1083
+ //if(Object.create) dot.prototype = Object.create(_p);
1084
+ // dot.prototype.constructor = dot;
1085
+ dot["__currentArgCallback"] = [];
1086
+ dot["__document"] = null;
1087
+ dot["__if"] = null;
1088
+ dot["__pendingCalls"] = [];
1089
+ dot["__anonAttrFuncs"] = {};
1090
+ // TODO: these may already exist?
1091
+ //dot.data = DotDocument.prototype.data;
1092
+ //dot.dataA = DotDocument.prototype.dataA;
1093
+ //dot.cite = DotDocument.prototype.cite;
1094
+ //dot.form = DotDocument.prototype.form;
1095
+ exports.default = dot;
1096
+ //# sourceMappingURL=dot.js.map