clearwater 1.0.5 → 1.1.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: aa6b6353c4de1e8dd6272920e262c8714e3a8f7cc84f95f9e5d5e12c3670e36d
4
- data.tar.gz: 8c0397967ba1396c18f56b2f132a682cbb8008c32fa8b3e15f2d57a5f20a5308
3
+ metadata.gz: 3cf3110939fbdc974a1ebe0933f4cadc0eed1712621962a8ace71b35d65b820c
4
+ data.tar.gz: 4f81952255ed6d290a3a385da192f61babe6216638e46eb254544a16855e7119
5
5
  SHA512:
6
- metadata.gz: 85140a696caf213af8ab5dff7043ec1a7b450fba6ed1363327708944198a202c8a9f56903a0ddc8686b56df4eefb3d6b890eee299d46ed3400cebdc43b090742
7
- data.tar.gz: 3b89451c02a2a7bd25474a8d15e71d416649d3221583c1da313b33223e99be5916755258ca56e77c18ff090cfdd8428e89fdad3bb96d1c243a2ab4e9ecea87e2
6
+ metadata.gz: 4acadcb97d1e450b56ad3e33ec4dae0703a9b6719fe6be8ab539e13129c82d2b2af675145b0b0cd6336f1d81bffde1f225736c85c57f6e6b7840ae7bcff91460
7
+ data.tar.gz: 0fce921bf875ab817caacd6c1118d0b59c6352f2bd7dc3aecfb66ebe3b19ed8ce5fdbd9cde69ea4792e2d2f1ac1f3333f73a3d0a58eab73eb85a56cf9baccf92
@@ -1,3 +1,3 @@
1
1
  module Clearwater
2
- VERSION = "1.0.5"
2
+ VERSION = "1.1.0"
3
3
  end
@@ -1,5 +1,6 @@
1
1
  require 'bowser/element'
2
2
  require 'clearwater/virtual_dom'
3
+ require 'clearwater/component'
3
4
 
4
5
  module Clearwater
5
6
  module BlackBoxNode
@@ -24,6 +25,8 @@ module Clearwater
24
25
  end
25
26
 
26
27
  class Renderable
28
+ attr_reader :delegate
29
+
27
30
  def initialize delegate
28
31
  @delegate = delegate
29
32
  if delegate.key
@@ -36,7 +39,9 @@ module Clearwater
36
39
  end
37
40
 
38
41
  def create_element
39
- wrap(VirtualDOM.create_element(@delegate.node))
42
+ sanitized = Clearwater::Component.sanitize_content(@delegate.node)
43
+ vnode = VirtualDOM.create_element(sanitized)
44
+ wrap(vnode)
40
45
  end
41
46
 
42
47
  %x{
@@ -48,11 +48,16 @@ module Clearwater
48
48
  if(!content.$$is_array) {
49
49
  var render = content.$render;
50
50
 
51
- if(content.$$cached_render) {
51
+ if(content.$$is_string || content.$$is_number || content == nil) {
52
+ return content;
53
+ } else if(content.$$cached_render) {
52
54
  return #{`wrapper`.new(content)};
53
55
  } else if(render && !render.$$stub) {
54
56
  return #{sanitize_content(content.render)};
57
+ } else if(content.$$is_boolean) {
58
+ return nil;
55
59
  } else {
60
+ // #{warn "Unhandled content: #{content.inspect}"};
56
61
  return content;
57
62
  }
58
63
  } else {
@@ -1,4 +1,5 @@
1
1
  require 'clearwater/virtual_dom/js/virtual_dom.js'
2
+ require 'native'
2
3
 
3
4
  module Clearwater
4
5
  module VirtualDOM
@@ -1,146 +1,23 @@
1
1
  (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.virtualDom = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
2
- var createElement = require("./vdom/create-element.js")
3
-
4
- module.exports = createElement
5
-
6
- },{"./vdom/create-element.js":14}],2:[function(require,module,exports){
7
- var diff = require("./vtree/diff.js")
8
-
9
- module.exports = diff
10
-
11
- },{"./vtree/diff.js":37}],3:[function(require,module,exports){
12
- var h = require("./virtual-hyperscript/index.js")
13
-
14
- module.exports = h
15
-
16
- },{"./virtual-hyperscript/index.js":22}],4:[function(require,module,exports){
17
- var diff = require("./diff.js")
18
- var patch = require("./patch.js")
19
- var h = require("./h.js")
20
- var create = require("./create-element.js")
21
- var VNode = require('./vnode/vnode.js')
22
- var VText = require('./vnode/vtext.js')
23
- var svg = require("./virtual-hyperscript/svg.js")
24
-
25
- module.exports = {
26
- diff: diff,
27
- patch: patch,
28
- h: h,
29
- create: create,
30
- VNode: VNode,
31
- VText: VText,
32
- svg: svg,
33
- }
34
-
35
- },{"./create-element.js":1,"./diff.js":2,"./h.js":3,"./patch.js":12,"./virtual-hyperscript/svg.js":25,"./vnode/vnode.js":33,"./vnode/vtext.js":35}],5:[function(require,module,exports){
36
- /*!
37
- * Cross-Browser Split 1.1.1
38
- * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
39
- * Available under the MIT License
40
- * ECMAScript compliant, uniform cross-browser split method
41
- */
42
-
43
- /**
44
- * Splits a string into an array of strings using a regex or string separator. Matches of the
45
- * separator are not included in the result array. However, if `separator` is a regex that contains
46
- * capturing groups, backreferences are spliced into the result each time `separator` is matched.
47
- * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
48
- * cross-browser.
49
- * @param {String} str String to split.
50
- * @param {RegExp|String} separator Regex or string to use for separating the string.
51
- * @param {Number} [limit] Maximum number of items to include in the result array.
52
- * @returns {Array} Array of substrings.
53
- * @example
54
- *
55
- * // Basic use
56
- * split('a b c d', ' ');
57
- * // -> ['a', 'b', 'c', 'd']
58
- *
59
- * // With limit
60
- * split('a b c d', ' ', 2);
61
- * // -> ['a', 'b']
62
- *
63
- * // Backreferences in result array
64
- * split('..word1 word2..', /([a-z]+)(\d+)/i);
65
- * // -> ['..', 'word', '1', ' ', 'word', '2', '..']
66
- */
67
- module.exports = (function split(undef) {
68
-
69
- var nativeSplit = String.prototype.split,
70
- compliantExecNpcg = /()??/.exec("")[1] === undef,
71
- // NPCG: nonparticipating capturing group
72
- self;
73
-
74
- self = function(str, separator, limit) {
75
- // If `separator` is not a regex, use `nativeSplit`
76
- if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
77
- return nativeSplit.call(str, separator, limit);
78
- }
79
- var output = [],
80
- flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6
81
- (separator.sticky ? "y" : ""),
82
- // Firefox 3+
83
- lastLastIndex = 0,
84
- // Make `global` and avoid `lastIndex` issues by working with a copy
85
- separator = new RegExp(separator.source, flags + "g"),
86
- separator2, match, lastIndex, lastLength;
87
- str += ""; // Type-convert
88
- if (!compliantExecNpcg) {
89
- // Doesn't need flags gy, but they don't hurt
90
- separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
91
- }
92
- /* Values for `limit`, per the spec:
93
- * If undefined: 4294967295 // Math.pow(2, 32) - 1
94
- * If 0, Infinity, or NaN: 0
95
- * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
96
- * If negative number: 4294967296 - Math.floor(Math.abs(limit))
97
- * If other: Type-convert, then use the above rules
98
- */
99
- limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1
100
- limit >>> 0; // ToUint32(limit)
101
- while (match = separator.exec(str)) {
102
- // `separator.lastIndex` is not reliable cross-browser
103
- lastIndex = match.index + match[0].length;
104
- if (lastIndex > lastLastIndex) {
105
- output.push(str.slice(lastLastIndex, match.index));
106
- // Fix browsers whose `exec` methods don't consistently return `undefined` for
107
- // nonparticipating capturing groups
108
- if (!compliantExecNpcg && match.length > 1) {
109
- match[0].replace(separator2, function() {
110
- for (var i = 1; i < arguments.length - 2; i++) {
111
- if (arguments[i] === undef) {
112
- match[i] = undef;
113
- }
114
- }
115
- });
116
- }
117
- if (match.length > 1 && match.index < str.length) {
118
- Array.prototype.push.apply(output, match.slice(1));
119
- }
120
- lastLength = match[0].length;
121
- lastLastIndex = lastIndex;
122
- if (output.length >= limit) {
123
- break;
124
- }
125
- }
126
- if (separator.lastIndex === match.index) {
127
- separator.lastIndex++; // Avoid an infinite loop
128
- }
129
- }
130
- if (lastLastIndex === str.length) {
131
- if (lastLength || !separator.test("")) {
132
- output.push("");
133
- }
134
- } else {
135
- output.push(str.slice(lastLastIndex));
136
- }
137
- return output.length > limit ? output.slice(0, limit) : output;
138
- };
139
-
140
- return self;
141
- })();
142
-
143
- },{}],6:[function(require,module,exports){
2
+ var diff = require('virtual-dom/diff')
3
+ var patch = require('virtual-dom/patch')
4
+ var h = require('virtual-dom/h')
5
+ var create = require('virtual-dom/create-element')
6
+ var VNode = require('virtual-dom/vnode/vnode')
7
+ var VText = require('virtual-dom/vnode/vtext')
8
+ var svg = require('virtual-dom/virtual-hyperscript/svg')
9
+
10
+ module.exports = {
11
+ diff: diff,
12
+ patch: patch,
13
+ h: h,
14
+ create: create,
15
+ VNode: VNode,
16
+ VText: VText,
17
+ svg: svg,
18
+ }
19
+
20
+ },{"virtual-dom/create-element":7,"virtual-dom/diff":8,"virtual-dom/h":9,"virtual-dom/patch":10,"virtual-dom/virtual-hyperscript/svg":23,"virtual-dom/vnode/vnode":31,"virtual-dom/vnode/vtext":33}],2:[function(require,module,exports){
144
21
  'use strict';
145
22
 
146
23
  var OneVersionConstraint = require('individual/one-version');
@@ -162,7 +39,28 @@ function EvStore(elem) {
162
39
  return hash;
163
40
  }
164
41
 
165
- },{"individual/one-version":8}],7:[function(require,module,exports){
42
+ },{"individual/one-version":5}],3:[function(require,module,exports){
43
+ (function (global){
44
+ var topLevel = typeof global !== 'undefined' ? global :
45
+ typeof window !== 'undefined' ? window : {}
46
+ var minDoc = require('min-document');
47
+
48
+ var doccy;
49
+
50
+ if (typeof document !== 'undefined') {
51
+ doccy = document;
52
+ } else {
53
+ doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
54
+
55
+ if (!doccy) {
56
+ doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
57
+ }
58
+ }
59
+
60
+ module.exports = doccy;
61
+
62
+ }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
63
+ },{"min-document":37}],4:[function(require,module,exports){
166
64
  (function (global){
167
65
  'use strict';
168
66
 
@@ -185,7 +83,7 @@ function Individual(key, value) {
185
83
  }
186
84
 
187
85
  }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
188
- },{}],8:[function(require,module,exports){
86
+ },{}],5:[function(require,module,exports){
189
87
  'use strict';
190
88
 
191
89
  var Individual = require('./index.js');
@@ -209,48 +107,34 @@ function OneVersion(moduleName, version, defaultValue) {
209
107
  return Individual(key, defaultValue);
210
108
  }
211
109
 
212
- },{"./index.js":7}],9:[function(require,module,exports){
213
- (function (global){
214
- var topLevel = typeof global !== 'undefined' ? global :
215
- typeof window !== 'undefined' ? window : {}
216
- var minDoc = require('min-document');
217
-
218
- if (typeof document !== 'undefined') {
219
- module.exports = document;
220
- } else {
221
- var doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'];
222
-
223
- if (!doccy) {
224
- doccy = topLevel['__GLOBAL_DOCUMENT_CACHE@4'] = minDoc;
225
- }
226
-
227
- module.exports = doccy;
228
- }
229
-
230
- }).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
231
- },{"min-document":38}],10:[function(require,module,exports){
110
+ },{"./index.js":4}],6:[function(require,module,exports){
232
111
  "use strict";
233
112
 
234
113
  module.exports = function isObject(x) {
235
114
  return typeof x === "object" && x !== null;
236
115
  };
237
116
 
238
- },{}],11:[function(require,module,exports){
239
- var nativeIsArray = Array.isArray
240
- var toString = Object.prototype.toString
117
+ },{}],7:[function(require,module,exports){
118
+ var createElement = require("./vdom/create-element.js")
241
119
 
242
- module.exports = nativeIsArray || isArray
120
+ module.exports = createElement
243
121
 
244
- function isArray(obj) {
245
- return toString.call(obj) === "[object Array]"
246
- }
122
+ },{"./vdom/create-element.js":12}],8:[function(require,module,exports){
123
+ var diff = require("./vtree/diff.js")
124
+
125
+ module.exports = diff
126
+
127
+ },{"./vtree/diff.js":35}],9:[function(require,module,exports){
128
+ var h = require("./virtual-hyperscript/index.js")
129
+
130
+ module.exports = h
247
131
 
248
- },{}],12:[function(require,module,exports){
132
+ },{"./virtual-hyperscript/index.js":20}],10:[function(require,module,exports){
249
133
  var patch = require("./vdom/patch.js")
250
134
 
251
135
  module.exports = patch
252
136
 
253
- },{"./vdom/patch.js":17}],13:[function(require,module,exports){
137
+ },{"./vdom/patch.js":15}],11:[function(require,module,exports){
254
138
  var isObject = require("is-object")
255
139
  var isHook = require("../vnode/is-vhook.js")
256
140
 
@@ -349,7 +233,7 @@ function getPrototype(value) {
349
233
  }
350
234
  }
351
235
 
352
- },{"../vnode/is-vhook.js":28,"is-object":10}],14:[function(require,module,exports){
236
+ },{"../vnode/is-vhook.js":26,"is-object":6}],12:[function(require,module,exports){
353
237
  var document = require("global/document")
354
238
 
355
239
  var applyProperties = require("./apply-properties")
@@ -383,7 +267,6 @@ function createElement(vnode, opts) {
383
267
  doc.createElementNS(vnode.namespace, vnode.tagName)
384
268
 
385
269
  var props = vnode.properties
386
- applyProperties(node, props)
387
270
 
388
271
  var children = vnode.children
389
272
 
@@ -394,10 +277,12 @@ function createElement(vnode, opts) {
394
277
  }
395
278
  }
396
279
 
280
+ applyProperties(node, props)
281
+
397
282
  return node
398
283
  }
399
284
 
400
- },{"../vnode/handle-thunk.js":26,"../vnode/is-vnode.js":29,"../vnode/is-vtext.js":30,"../vnode/is-widget.js":31,"./apply-properties":13,"global/document":9}],15:[function(require,module,exports){
285
+ },{"../vnode/handle-thunk.js":24,"../vnode/is-vnode.js":27,"../vnode/is-vtext.js":28,"../vnode/is-widget.js":29,"./apply-properties":11,"global/document":3}],13:[function(require,module,exports){
401
286
  // Maps a virtual DOM tree onto a real DOM tree in an efficient manner.
402
287
  // We don't want to read all of the DOM nodes in the tree so we use
403
288
  // the in-order tree indexing to eliminate recursion down certain branches.
@@ -484,7 +369,7 @@ function ascending(a, b) {
484
369
  return a > b ? 1 : -1
485
370
  }
486
371
 
487
- },{}],16:[function(require,module,exports){
372
+ },{}],14:[function(require,module,exports){
488
373
  var applyProperties = require("./apply-properties")
489
374
 
490
375
  var isWidget = require("../vnode/is-widget.js")
@@ -539,7 +424,7 @@ function removeNode(domNode, vNode) {
539
424
  function insertNode(parentNode, vNode, renderOptions) {
540
425
  var newNode = renderOptions.render(vNode, renderOptions)
541
426
 
542
- if (parentNode) {
427
+ if (parentNode && newNode) {
543
428
  parentNode.appendChild(newNode)
544
429
  }
545
430
 
@@ -637,13 +522,14 @@ function replaceRoot(oldRoot, newRoot) {
637
522
  return newRoot;
638
523
  }
639
524
 
640
- },{"../vnode/is-widget.js":31,"../vnode/vpatch.js":34,"./apply-properties":13,"./update-widget":18}],17:[function(require,module,exports){
525
+ },{"../vnode/is-widget.js":29,"../vnode/vpatch.js":32,"./apply-properties":11,"./update-widget":16}],15:[function(require,module,exports){
641
526
  var document = require("global/document")
642
527
  var isArray = require("x-is-array")
643
528
 
644
529
  var render = require("./create-element")
645
530
  var domIndex = require("./dom-index")
646
531
  var patchOp = require("./patch-op")
532
+ var VPatch = require("../vnode/vpatch.js")
647
533
  module.exports = patch
648
534
 
649
535
  function patch(rootNode, patches, renderOptions) {
@@ -689,8 +575,25 @@ function applyPatch(rootNode, domNode, patchList, renderOptions) {
689
575
  var newNode
690
576
 
691
577
  if (isArray(patchList)) {
578
+ var propsPatchList = [];
579
+
692
580
  for (var i = 0; i < patchList.length; i++) {
693
- newNode = patchOp(patchList[i], domNode, renderOptions)
581
+ if (patchList[i].type != VPatch.PROPS) {
582
+ newNode = patchOp(patchList[i], domNode, renderOptions)
583
+
584
+ if (domNode === rootNode) {
585
+ rootNode = newNode
586
+ }
587
+ }
588
+ else {
589
+ propsPatchList.push(patchList[i]);
590
+ }
591
+ }
592
+
593
+ // Properties like scrollTop should be set after all children have been
594
+ // patched, otherwise they wouldn't take effect.
595
+ for (var i = 0; i < propsPatchList.length; i++) {
596
+ newNode = patchOp(propsPatchList[i], domNode, renderOptions)
694
597
 
695
598
  if (domNode === rootNode) {
696
599
  rootNode = newNode
@@ -719,7 +622,7 @@ function patchIndices(patches) {
719
622
  return indices
720
623
  }
721
624
 
722
- },{"./create-element":14,"./dom-index":15,"./patch-op":16,"global/document":9,"x-is-array":11}],18:[function(require,module,exports){
625
+ },{"../vnode/vpatch.js":32,"./create-element":12,"./dom-index":13,"./patch-op":14,"global/document":3,"x-is-array":36}],16:[function(require,module,exports){
723
626
  var isWidget = require("../vnode/is-widget.js")
724
627
 
725
628
  module.exports = updateWidget
@@ -736,7 +639,7 @@ function updateWidget(a, b) {
736
639
  return false
737
640
  }
738
641
 
739
- },{"../vnode/is-widget.js":31}],19:[function(require,module,exports){
642
+ },{"../vnode/is-widget.js":29}],17:[function(require,module,exports){
740
643
  'use strict';
741
644
 
742
645
  module.exports = AttributeHook;
@@ -773,7 +676,7 @@ AttributeHook.prototype.unhook = function (node, prop, next) {
773
676
 
774
677
  AttributeHook.prototype.type = 'AttributeHook';
775
678
 
776
- },{}],20:[function(require,module,exports){
679
+ },{}],18:[function(require,module,exports){
777
680
  'use strict';
778
681
 
779
682
  var EvStore = require('ev-store');
@@ -802,7 +705,7 @@ EvHook.prototype.unhook = function(node, propertyName) {
802
705
  es[propName] = undefined;
803
706
  };
804
707
 
805
- },{"ev-store":6}],21:[function(require,module,exports){
708
+ },{"ev-store":2}],19:[function(require,module,exports){
806
709
  'use strict';
807
710
 
808
711
  module.exports = SoftSetHook;
@@ -821,7 +724,7 @@ SoftSetHook.prototype.hook = function (node, propertyName) {
821
724
  }
822
725
  };
823
726
 
824
- },{}],22:[function(require,module,exports){
727
+ },{}],20:[function(require,module,exports){
825
728
  'use strict';
826
729
 
827
730
  var isArray = require('x-is-array');
@@ -871,6 +774,20 @@ function h(tagName, properties, children) {
871
774
  props.value !== undefined &&
872
775
  !isHook(props.value)
873
776
  ) {
777
+ if(typeof props.value === 'number') {
778
+ props.value = String(props.value);
779
+ }
780
+
781
+ if (props.value !== null && typeof props.value !== 'string') {
782
+ throw UnsupportedValueType({
783
+ expected: 'String',
784
+ received: typeof props.value,
785
+ Vnode: {
786
+ tagName: tag,
787
+ properties: props
788
+ }
789
+ });
790
+ }
874
791
  props.value = softSetHook(props.value);
875
792
  }
876
793
 
@@ -937,13 +854,13 @@ function UnexpectedVirtualElement(data) {
937
854
  var err = new Error();
938
855
 
939
856
  err.type = 'virtual-hyperscript.unexpected.virtual-element';
940
- err.message = 'Unexpected virtual child passed to h().\n' +
941
- 'Expected a VNode / Vthunk / VWidget / string but:\n' +
857
+ err.message = 'Unexpected virtual DOM node passed in.\n' +
858
+ 'Expected a VNode, VText, String, Number, Clearwater::Component (or other renderable), or nil but:\n' +
942
859
  'got:\n' +
943
860
  errorString(data.foreignObject) +
944
861
  '.\n' +
945
862
  'The parent vnode is:\n' +
946
- errorString(data.parentVnode)
863
+ errorString(data.parentVnode) +
947
864
  '\n' +
948
865
  'Suggested fix: change your `h(..., [ ... ])` callsite.';
949
866
  err.foreignObject = data.foreignObject;
@@ -952,22 +869,38 @@ function UnexpectedVirtualElement(data) {
952
869
  return err;
953
870
  }
954
871
 
872
+ function UnsupportedValueType(data) {
873
+ var err = new Error();
874
+
875
+ err.type = 'virtual-hyperscript.unsupported.value-type';
876
+ err.message = 'Unexpected value type for input passed to h().\n' +
877
+ 'Expected a ' +
878
+ errorString(data.expected) +
879
+ ' but got:\n' +
880
+ errorString(data.received) +
881
+ '.\n' +
882
+ 'The vnode is:\n' +
883
+ errorString(data.Vnode);
884
+ err.Vnode = data.Vnode;
885
+
886
+ return err;
887
+ }
888
+
955
889
  function errorString(obj) {
956
890
  try {
957
- return JSON.stringify(obj, null, ' ');
891
+ if(obj.$$class) {
892
+ return obj.$inspect();
893
+ } else {
894
+ return JSON.stringify(obj, null, ' ');
895
+ }
958
896
  } catch (e) {
959
897
  return String(obj);
960
898
  }
961
899
  }
962
900
 
963
- },{"../vnode/is-thunk":27,"../vnode/is-vhook":28,"../vnode/is-vnode":29,"../vnode/is-vtext":30,"../vnode/is-widget":31,"../vnode/vnode.js":33,"../vnode/vtext.js":35,"./hooks/ev-hook.js":20,"./hooks/soft-set-hook.js":21,"./parse-tag.js":23,"x-is-array":11}],23:[function(require,module,exports){
901
+ },{"../vnode/is-thunk":25,"../vnode/is-vhook":26,"../vnode/is-vnode":27,"../vnode/is-vtext":28,"../vnode/is-widget":29,"../vnode/vnode.js":31,"../vnode/vtext.js":33,"./hooks/ev-hook.js":18,"./hooks/soft-set-hook.js":19,"./parse-tag.js":21,"x-is-array":36}],21:[function(require,module,exports){
964
902
  'use strict';
965
903
 
966
- var split = require('browser-split');
967
-
968
- var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
969
- var notClassId = /^\.|#/;
970
-
971
904
  module.exports = parseTag;
972
905
 
973
906
  function parseTag(tag, props) {
@@ -1039,7 +972,7 @@ function splitTag(tag) {
1039
972
  return parts;
1040
973
  }
1041
974
 
1042
- },{"browser-split":5}],24:[function(require,module,exports){
975
+ },{}],22:[function(require,module,exports){
1043
976
  'use strict';
1044
977
 
1045
978
  var DEFAULT_NAMESPACE = null;
@@ -1354,7 +1287,7 @@ function SVGAttributeNamespace(value) {
1354
1287
  }
1355
1288
  }
1356
1289
 
1357
- },{}],25:[function(require,module,exports){
1290
+ },{}],23:[function(require,module,exports){
1358
1291
  'use strict';
1359
1292
 
1360
1293
  var isArray = require('x-is-array');
@@ -1418,7 +1351,7 @@ function isChildren(x) {
1418
1351
  return typeof x === 'string' || isArray(x);
1419
1352
  }
1420
1353
 
1421
- },{"./hooks/attribute-hook":19,"./index.js":22,"./svg-attribute-namespace":24,"x-is-array":11}],26:[function(require,module,exports){
1354
+ },{"./hooks/attribute-hook":17,"./index.js":20,"./svg-attribute-namespace":22,"x-is-array":36}],24:[function(require,module,exports){
1422
1355
  var isVNode = require("./is-vnode")
1423
1356
  var isVText = require("./is-vtext")
1424
1357
  var isWidget = require("./is-widget")
@@ -1460,14 +1393,14 @@ function renderThunk(thunk, previous) {
1460
1393
  return renderedThunk
1461
1394
  }
1462
1395
 
1463
- },{"./is-thunk":27,"./is-vnode":29,"./is-vtext":30,"./is-widget":31}],27:[function(require,module,exports){
1396
+ },{"./is-thunk":25,"./is-vnode":27,"./is-vtext":28,"./is-widget":29}],25:[function(require,module,exports){
1464
1397
  module.exports = isThunk
1465
1398
 
1466
1399
  function isThunk(t) {
1467
1400
  return t && t.type === "Thunk"
1468
1401
  }
1469
1402
 
1470
- },{}],28:[function(require,module,exports){
1403
+ },{}],26:[function(require,module,exports){
1471
1404
  module.exports = isHook
1472
1405
 
1473
1406
  function isHook(hook) {
@@ -1476,7 +1409,7 @@ function isHook(hook) {
1476
1409
  typeof hook.unhook === "function" && !hook.hasOwnProperty("unhook"))
1477
1410
  }
1478
1411
 
1479
- },{}],29:[function(require,module,exports){
1412
+ },{}],27:[function(require,module,exports){
1480
1413
  var version = require("./version")
1481
1414
 
1482
1415
  module.exports = isVirtualNode
@@ -1485,7 +1418,7 @@ function isVirtualNode(x) {
1485
1418
  return x && x.type === "VirtualNode" && x.version === version
1486
1419
  }
1487
1420
 
1488
- },{"./version":32}],30:[function(require,module,exports){
1421
+ },{"./version":30}],28:[function(require,module,exports){
1489
1422
  var version = require("./version")
1490
1423
 
1491
1424
  module.exports = isVirtualText
@@ -1494,17 +1427,17 @@ function isVirtualText(x) {
1494
1427
  return x && x.type === "VirtualText" && x.version === version
1495
1428
  }
1496
1429
 
1497
- },{"./version":32}],31:[function(require,module,exports){
1430
+ },{"./version":30}],29:[function(require,module,exports){
1498
1431
  module.exports = isWidget
1499
1432
 
1500
1433
  function isWidget(w) {
1501
1434
  return w && w.type === "Widget"
1502
1435
  }
1503
1436
 
1504
- },{}],32:[function(require,module,exports){
1437
+ },{}],30:[function(require,module,exports){
1505
1438
  module.exports = "2"
1506
1439
 
1507
- },{}],33:[function(require,module,exports){
1440
+ },{}],31:[function(require,module,exports){
1508
1441
  var version = require("./version")
1509
1442
  var isVNode = require("./is-vnode")
1510
1443
  var isWidget = require("./is-widget")
@@ -1578,7 +1511,7 @@ function VirtualNode(tagName, properties, children, key, namespace) {
1578
1511
  VirtualNode.prototype.version = version
1579
1512
  VirtualNode.prototype.type = "VirtualNode"
1580
1513
 
1581
- },{"./is-thunk":27,"./is-vhook":28,"./is-vnode":29,"./is-widget":31,"./version":32}],34:[function(require,module,exports){
1514
+ },{"./is-thunk":25,"./is-vhook":26,"./is-vnode":27,"./is-widget":29,"./version":30}],32:[function(require,module,exports){
1582
1515
  var version = require("./version")
1583
1516
 
1584
1517
  VirtualPatch.NONE = 0
@@ -1602,7 +1535,7 @@ function VirtualPatch(type, vNode, patch) {
1602
1535
  VirtualPatch.prototype.version = version
1603
1536
  VirtualPatch.prototype.type = "VirtualPatch"
1604
1537
 
1605
- },{"./version":32}],35:[function(require,module,exports){
1538
+ },{"./version":30}],33:[function(require,module,exports){
1606
1539
  var version = require("./version")
1607
1540
 
1608
1541
  module.exports = VirtualText
@@ -1614,7 +1547,7 @@ function VirtualText(text) {
1614
1547
  VirtualText.prototype.version = version
1615
1548
  VirtualText.prototype.type = "VirtualText"
1616
1549
 
1617
- },{"./version":32}],36:[function(require,module,exports){
1550
+ },{"./version":30}],34:[function(require,module,exports){
1618
1551
  var isObject = require("is-object")
1619
1552
  var isHook = require("../vnode/is-vhook")
1620
1553
 
@@ -1674,7 +1607,7 @@ function getPrototype(value) {
1674
1607
  }
1675
1608
  }
1676
1609
 
1677
- },{"../vnode/is-vhook":28,"is-object":10}],37:[function(require,module,exports){
1610
+ },{"../vnode/is-vhook":26,"is-object":6}],35:[function(require,module,exports){
1678
1611
  var isArray = require("x-is-array")
1679
1612
 
1680
1613
  var VPatch = require("../vnode/vpatch")
@@ -2103,7 +2036,17 @@ function appendPatch(apply, patch) {
2103
2036
  }
2104
2037
  }
2105
2038
 
2106
- },{"../vnode/handle-thunk":26,"../vnode/is-thunk":27,"../vnode/is-vnode":29,"../vnode/is-vtext":30,"../vnode/is-widget":31,"../vnode/vpatch":34,"./diff-props":36,"x-is-array":11}],38:[function(require,module,exports){
2039
+ },{"../vnode/handle-thunk":24,"../vnode/is-thunk":25,"../vnode/is-vnode":27,"../vnode/is-vtext":28,"../vnode/is-widget":29,"../vnode/vpatch":32,"./diff-props":34,"x-is-array":36}],36:[function(require,module,exports){
2040
+ var nativeIsArray = Array.isArray
2041
+ var toString = Object.prototype.toString
2042
+
2043
+ module.exports = nativeIsArray || isArray
2044
+
2045
+ function isArray(obj) {
2046
+ return toString.call(obj) === "[object Array]"
2047
+ }
2048
+
2049
+ },{}],37:[function(require,module,exports){
2107
2050
 
2108
- },{}]},{},[4])(4)
2051
+ },{}]},{},[1])(1)
2109
2052
  });
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clearwater
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.5
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Gaskins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-07-05 00:00:00.000000000 Z
11
+ date: 2018-07-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal