@gogocat/data-bind 1.11.0 → 2.0.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.
Files changed (274) hide show
  1. package/.editorconfig +14 -14
  2. package/.vscode/launch.json +12 -12
  3. package/CONFIGURATION.md +294 -0
  4. package/REACTIVE_MODE.md +553 -0
  5. package/README.md +266 -829
  6. package/babel.config.json +30 -0
  7. package/dist/js/_escape.d.ts +14 -0
  8. package/dist/js/_escape.d.ts.map +1 -0
  9. package/dist/js/applyBinding.d.ts +11 -0
  10. package/dist/js/applyBinding.d.ts.map +1 -0
  11. package/dist/js/attrBinding.d.ts +12 -0
  12. package/dist/js/attrBinding.d.ts.map +1 -0
  13. package/dist/js/binder.d.ts +67 -0
  14. package/dist/js/binder.d.ts.map +1 -0
  15. package/dist/js/changeBinding.d.ts +19 -0
  16. package/dist/js/changeBinding.d.ts.map +1 -0
  17. package/dist/js/commentWrapper.d.ts +39 -0
  18. package/dist/js/commentWrapper.d.ts.map +1 -0
  19. package/dist/js/config.d.ts +55 -0
  20. package/dist/js/config.d.ts.map +1 -0
  21. package/dist/js/createBindingOption.d.ts +32 -0
  22. package/dist/js/createBindingOption.d.ts.map +1 -0
  23. package/dist/js/createEventBinding.d.ts +10 -0
  24. package/dist/js/createEventBinding.d.ts.map +1 -0
  25. package/dist/js/cssBinding.d.ts +15 -0
  26. package/dist/js/cssBinding.d.ts.map +1 -0
  27. package/dist/js/dataBind.js +2772 -2519
  28. package/dist/js/dataBind.min.js +8 -1
  29. package/dist/js/dataBind.min.js.map +1 -1
  30. package/dist/js/domWalker.d.ts +9 -0
  31. package/dist/js/domWalker.d.ts.map +1 -0
  32. package/dist/js/forOfBinding.d.ts +12 -0
  33. package/dist/js/forOfBinding.d.ts.map +1 -0
  34. package/dist/js/hoverBinding.d.ts +13 -0
  35. package/dist/js/hoverBinding.d.ts.map +1 -0
  36. package/dist/js/ifBinding.d.ts +12 -0
  37. package/dist/js/ifBinding.d.ts.map +1 -0
  38. package/dist/js/index.d.ts +10 -0
  39. package/dist/js/index.d.ts.map +1 -0
  40. package/dist/js/modelBinding.d.ts +12 -0
  41. package/dist/js/modelBinding.d.ts.map +1 -0
  42. package/dist/js/postProcess.d.ts +3 -0
  43. package/dist/js/postProcess.d.ts.map +1 -0
  44. package/dist/js/pubSub.d.ts +11 -0
  45. package/dist/js/pubSub.d.ts.map +1 -0
  46. package/dist/js/reactiveProxy.d.ts +28 -0
  47. package/dist/js/reactiveProxy.d.ts.map +1 -0
  48. package/dist/js/renderForOfBinding.d.ts +8 -0
  49. package/dist/js/renderForOfBinding.d.ts.map +1 -0
  50. package/dist/js/renderIfBinding.d.ts +22 -0
  51. package/dist/js/renderIfBinding.d.ts.map +1 -0
  52. package/dist/js/renderIteration.d.ts +16 -0
  53. package/dist/js/renderIteration.d.ts.map +1 -0
  54. package/dist/js/renderTemplate.d.ts +14 -0
  55. package/dist/js/renderTemplate.d.ts.map +1 -0
  56. package/dist/js/renderTemplatesBinding.d.ts +19 -0
  57. package/dist/js/renderTemplatesBinding.d.ts.map +1 -0
  58. package/dist/js/showBinding.d.ts +13 -0
  59. package/dist/js/showBinding.d.ts.map +1 -0
  60. package/dist/js/switchBinding.d.ts +13 -0
  61. package/dist/js/switchBinding.d.ts.map +1 -0
  62. package/dist/js/textBinding.d.ts +13 -0
  63. package/dist/js/textBinding.d.ts.map +1 -0
  64. package/dist/js/types/_escape.d.ts +14 -0
  65. package/dist/js/types/_escape.d.ts.map +1 -0
  66. package/dist/js/types/applyBinding.d.ts +11 -0
  67. package/dist/js/types/applyBinding.d.ts.map +1 -0
  68. package/dist/js/types/attrBinding.d.ts +12 -0
  69. package/dist/js/types/attrBinding.d.ts.map +1 -0
  70. package/dist/js/types/binder.d.ts +67 -0
  71. package/dist/js/types/binder.d.ts.map +1 -0
  72. package/dist/js/types/changeBinding.d.ts +19 -0
  73. package/dist/js/types/changeBinding.d.ts.map +1 -0
  74. package/dist/js/types/commentWrapper.d.ts +39 -0
  75. package/dist/js/types/commentWrapper.d.ts.map +1 -0
  76. package/dist/js/types/config.d.ts +55 -0
  77. package/dist/js/types/config.d.ts.map +1 -0
  78. package/dist/js/types/createBindingOption.d.ts +32 -0
  79. package/dist/js/types/createBindingOption.d.ts.map +1 -0
  80. package/dist/js/types/createEventBinding.d.ts +10 -0
  81. package/dist/js/types/createEventBinding.d.ts.map +1 -0
  82. package/dist/js/types/cssBinding.d.ts +15 -0
  83. package/dist/js/types/cssBinding.d.ts.map +1 -0
  84. package/dist/js/types/domWalker.d.ts +9 -0
  85. package/dist/js/types/domWalker.d.ts.map +1 -0
  86. package/dist/js/types/forOfBinding.d.ts +12 -0
  87. package/dist/js/types/forOfBinding.d.ts.map +1 -0
  88. package/dist/js/types/hoverBinding.d.ts +13 -0
  89. package/dist/js/types/hoverBinding.d.ts.map +1 -0
  90. package/dist/js/types/ifBinding.d.ts +12 -0
  91. package/dist/js/types/ifBinding.d.ts.map +1 -0
  92. package/dist/js/types/index.d.ts +10 -0
  93. package/dist/js/types/index.d.ts.map +1 -0
  94. package/dist/js/types/modelBinding.d.ts +12 -0
  95. package/dist/js/types/modelBinding.d.ts.map +1 -0
  96. package/dist/js/types/postProcess.d.ts +3 -0
  97. package/dist/js/types/postProcess.d.ts.map +1 -0
  98. package/dist/js/types/pubSub.d.ts +11 -0
  99. package/dist/js/types/pubSub.d.ts.map +1 -0
  100. package/dist/js/types/reactiveProxy.d.ts +28 -0
  101. package/dist/js/types/reactiveProxy.d.ts.map +1 -0
  102. package/dist/js/types/renderForOfBinding.d.ts +8 -0
  103. package/dist/js/types/renderForOfBinding.d.ts.map +1 -0
  104. package/dist/js/types/renderIfBinding.d.ts +22 -0
  105. package/dist/js/types/renderIfBinding.d.ts.map +1 -0
  106. package/dist/js/types/renderIteration.d.ts +16 -0
  107. package/dist/js/types/renderIteration.d.ts.map +1 -0
  108. package/dist/js/types/renderTemplate.d.ts +14 -0
  109. package/dist/js/types/renderTemplate.d.ts.map +1 -0
  110. package/dist/js/types/renderTemplatesBinding.d.ts +19 -0
  111. package/dist/js/types/renderTemplatesBinding.d.ts.map +1 -0
  112. package/dist/js/types/showBinding.d.ts +13 -0
  113. package/dist/js/types/showBinding.d.ts.map +1 -0
  114. package/dist/js/types/switchBinding.d.ts +13 -0
  115. package/dist/js/types/switchBinding.d.ts.map +1 -0
  116. package/dist/js/types/textBinding.d.ts +13 -0
  117. package/dist/js/types/textBinding.d.ts.map +1 -0
  118. package/dist/js/types/types.d.ts +111 -0
  119. package/dist/js/types/types.d.ts.map +1 -0
  120. package/dist/js/types/util.d.ts +119 -0
  121. package/dist/js/types/util.d.ts.map +1 -0
  122. package/dist/js/types.d.ts +111 -0
  123. package/dist/js/types.d.ts.map +1 -0
  124. package/dist/js/util.d.ts +119 -0
  125. package/dist/js/util.d.ts.map +1 -0
  126. package/eslint.config.js +124 -0
  127. package/examples/DBMONSTER_COMPARISON.md +123 -0
  128. package/examples/afterRenderDemo.html +119 -0
  129. package/examples/bootstrap/css/animate.css +1579 -1579
  130. package/examples/bootstrap/css/bootstrap.min.css +6 -6
  131. package/examples/bootstrap/css/homeservices.css +378 -390
  132. package/examples/bootstrap/css/open-iconic.css +511 -511
  133. package/examples/bootstrap/fonts/open-iconic.svg +543 -543
  134. package/examples/bootstrap/js/compMessageDialog.js +20 -19
  135. package/examples/bootstrap/js/compSearchBar.js +12 -19
  136. package/examples/bootstrap/js/compSearchResults.js +50 -46
  137. package/examples/bootstrap/js/featureAdsResult.json +65 -65
  138. package/examples/bootstrap/js/searchResult.json +57 -57
  139. package/examples/bootstrap.html +343 -332
  140. package/examples/css/baseTodo.css +141 -141
  141. package/examples/css/dbMonsterStyles.css +27 -27
  142. package/examples/css/indexTodo.css +374 -374
  143. package/examples/dbmonsterForOfReactive.html +40 -0
  144. package/examples/dbmonsterReact.html +19 -0
  145. package/examples/forOfBindingSimpleDebug.html +45 -0
  146. package/examples/form.html +20 -4
  147. package/examples/globalConfig.html +131 -0
  148. package/examples/js/afterRenderDemo.js +190 -0
  149. package/examples/js/appTodo.js +46 -46
  150. package/examples/js/attrBindingDemo.js +2 -2
  151. package/examples/js/dbMonApp.js +24 -26
  152. package/examples/js/dbMonAppReact.jsx +79 -0
  153. package/examples/js/dbMonAppReactive.js +28 -0
  154. package/examples/js/fiberDemo.js +4 -4
  155. package/examples/js/filtersDemo.js +8 -8
  156. package/examples/js/forOfDemo.js +7 -9
  157. package/examples/js/forOfDemoComplex.js +44 -17
  158. package/examples/js/form.js +44 -12
  159. package/examples/js/globalConfig.js +117 -0
  160. package/examples/js/ifBindingDemo.js +16 -16
  161. package/examples/js/reactiveDemo.js +119 -0
  162. package/examples/js/switchBindingDemo.js +8 -8
  163. package/examples/react-dbmonster/dist/bundle.js +43 -0
  164. package/examples/react-dbmonster/package-lock.json +537 -0
  165. package/examples/react-dbmonster/package.json +16 -0
  166. package/examples/react-dbmonster/src/index.jsx +80 -0
  167. package/examples/reactiveDemo.html +127 -0
  168. package/examples/refreshRateTest.html +75 -75
  169. package/index.html +841 -0
  170. package/package.json +31 -34
  171. package/rollup.config.js +79 -36
  172. package/src/{_escape.js → _escape.ts} +19 -17
  173. package/src/applyBinding.ts +179 -0
  174. package/src/{attrBinding.js → attrBinding.ts} +14 -13
  175. package/src/binder.ts +289 -0
  176. package/src/changeBinding.ts +93 -0
  177. package/src/{commentWrapper.js → commentWrapper.ts} +33 -30
  178. package/src/config.ts +107 -0
  179. package/src/createBindingOption.ts +91 -0
  180. package/src/createEventBinding.ts +88 -0
  181. package/src/{cssBinding.js → cssBinding.ts} +13 -11
  182. package/src/{domWalker.js → domWalker.ts} +44 -30
  183. package/src/{forOfBinding.js → forOfBinding.ts} +4 -3
  184. package/src/hoverBinding.ts +84 -0
  185. package/src/{ifBinding.js → ifBinding.ts} +14 -12
  186. package/src/index.ts +53 -0
  187. package/src/{modelBinding.js → modelBinding.ts} +11 -9
  188. package/src/postProcess.ts +22 -0
  189. package/src/{pubSub.js → pubSub.ts} +24 -15
  190. package/src/reactiveProxy.ts +285 -0
  191. package/src/{renderForOfBinding.js → renderForOfBinding.ts} +55 -33
  192. package/src/{renderIfBinding.js → renderIfBinding.ts} +45 -20
  193. package/src/renderIteration.ts +53 -0
  194. package/src/renderTemplate.ts +165 -0
  195. package/src/renderTemplatesBinding.ts +73 -0
  196. package/src/{showBinding.js → showBinding.ts} +4 -3
  197. package/src/{switchBinding.js → switchBinding.ts} +18 -15
  198. package/src/{textBinding.js → textBinding.ts} +5 -4
  199. package/src/types.ts +124 -0
  200. package/src/util.ts +810 -0
  201. package/test/css/reporter.css +9 -9
  202. package/test/fixtures/dataBindBootstrap.html +2 -2
  203. package/test/fixtures/formBindings.html +9 -1
  204. package/test/globals.d.ts +19 -0
  205. package/test/helpers/testHelper.js +46 -11
  206. package/test/mocks/featureAdsResult.json +65 -65
  207. package/test/mocks/searchResult.json +57 -57
  208. package/test/specs/{attrBinding.spec.js → attrBinding.spec.ts} +103 -106
  209. package/test/specs/{binder.spec.js → binder.spec.ts} +29 -27
  210. package/test/specs/blurBinding.spec.ts +60 -0
  211. package/test/specs/chainableUse.spec.ts +125 -0
  212. package/test/specs/clickBinding.spec.ts +194 -0
  213. package/test/specs/{cssBinding.spec.js → cssBinding.spec.ts} +72 -79
  214. package/test/specs/{dataBindBootstrap.spec.js → dataBindBootstrap.spec.ts} +332 -313
  215. package/test/specs/{filter.spec.js → filter.spec.ts} +75 -76
  216. package/test/specs/{forOfBinding.spec.js → forOfBinding.spec.ts} +208 -219
  217. package/test/specs/formBinding.spec.ts +272 -0
  218. package/test/specs/ifBinding.spec.ts +165 -0
  219. package/test/specs/{nestedComponent.spec.js → nestedComponent.spec.ts} +88 -88
  220. package/test/specs/reactiveProxy.spec.ts +465 -0
  221. package/test/specs/{showBinding.spec.js → showBinding.spec.ts} +148 -149
  222. package/test/specs/{switchBinding.spec.js → switchBinding.spec.ts} +172 -173
  223. package/test/specs/templateBinding.spec.ts +273 -0
  224. package/test/specs/{textBinding.spec.js → textBinding.spec.ts} +47 -48
  225. package/test/tsconfig.json +31 -0
  226. package/test-output.txt +200 -0
  227. package/test-reactive.html +224 -0
  228. package/tsconfig.json +28 -0
  229. package/vendors/lodash.custom.js +4577 -4577
  230. package/vendors/lodash.custom.min.js +45 -45
  231. package/vitest.config.js +27 -0
  232. package/.eslintrc.js +0 -1
  233. package/.grunt/grunt-contrib-jasmine/boot.js +0 -161
  234. package/.grunt/grunt-contrib-jasmine/dist/js/dataBind.js +0 -9
  235. package/.grunt/grunt-contrib-jasmine/grunt-template-jasmine-istanbul/reporter.js +0 -23
  236. package/.grunt/grunt-contrib-jasmine/jasmine-html.js +0 -853
  237. package/.grunt/grunt-contrib-jasmine/jasmine.css +0 -271
  238. package/.grunt/grunt-contrib-jasmine/jasmine.js +0 -9761
  239. package/.grunt/grunt-contrib-jasmine/jasmine_favicon.png +0 -0
  240. package/.grunt/grunt-contrib-jasmine/json2.js +0 -489
  241. package/.grunt/grunt-contrib-jasmine/reporter.js +0 -107
  242. package/coverage/coverage.json +0 -1
  243. package/coverage/lcov/lcov-report/base.css +0 -213
  244. package/coverage/lcov/lcov-report/index.html +0 -93
  245. package/coverage/lcov/lcov-report/js/dataBind.js.html +0 -6596
  246. package/coverage/lcov/lcov-report/js/index.html +0 -93
  247. package/coverage/lcov/lcov-report/prettify.css +0 -1
  248. package/coverage/lcov/lcov-report/prettify.js +0 -1
  249. package/coverage/lcov/lcov-report/sort-arrow-sprite.png +0 -0
  250. package/coverage/lcov/lcov-report/sorter.js +0 -158
  251. package/coverage/lcov/lcov.info +0 -1991
  252. package/eslintrc.json +0 -40
  253. package/examples/bootstrap/js/bootstrap.min.js +0 -6
  254. package/examples/bootstrap/js/popper.min.js +0 -5
  255. package/examples/bootstrap/js/searchSuggestion.js +0 -58
  256. package/examples/bootstrap/js/typeahead.jquery.js +0 -1538
  257. package/gruntfile.js +0 -92
  258. package/gulpfile.js +0 -32
  259. package/src/binder.js +0 -422
  260. package/src/changeBinding.js +0 -57
  261. package/src/config.js +0 -65
  262. package/src/createBindingOption.js +0 -66
  263. package/src/createEventBinding.js +0 -46
  264. package/src/eventSystem.js +0 -46
  265. package/src/hoverBinding.js +0 -57
  266. package/src/index.js +0 -26
  267. package/src/renderTemplate.js +0 -128
  268. package/src/util.js +0 -648
  269. package/test/specs/blurBinding.spec.js +0 -57
  270. package/test/specs/formBinding.spec.js +0 -292
  271. package/test/specs/ifBinding.spec.js +0 -169
  272. package/test/specs/templateBinding.spec.js +0 -117
  273. package/vendors/jasmine-jquery.js +0 -841
  274. package/vendors/jquery-3.2.1.min.js +0 -4
@@ -1,66 +0,0 @@
1
- import {
2
- bindingUpdateConditions,
3
- } from './config';
4
- import {extend} from './util';
5
- /**
6
- * createBindingOption
7
- * @param {string} condition
8
- * @param {object} opt
9
- * @description
10
- * generate binding update option object by condition
11
- * @return {object} updateOption
12
- */
13
- function createBindingOption(condition = '', opt = {}) {
14
- const visualBindingOptions = {
15
- templateBinding: false,
16
- textBinding: true,
17
- cssBinding: true,
18
- ifBinding: true,
19
- showBinding: true,
20
- modelBinding: true,
21
- attrBinding: true,
22
- forOfBinding: true,
23
- switchBinding: true,
24
- };
25
- const eventsBindingOptions = {
26
- changeBinding: true,
27
- clickBinding: true,
28
- dblclickBinding: true,
29
- blurBinding: true,
30
- focusBinding: true,
31
- hoverBinding: true,
32
- submitBinding: true,
33
- };
34
- // this is visualBindingOptions but everything false
35
- // concrete declear for performance purpose
36
- const serverRenderedOptions = {
37
- templateBinding: false,
38
- textBinding: false,
39
- cssBinding: false,
40
- ifBinding: false,
41
- showBinding: false,
42
- modelBinding: false,
43
- attrBinding: false,
44
- forOfBinding: false,
45
- switchBinding: false,
46
- };
47
- let updateOption = {};
48
-
49
- switch (condition) {
50
- case bindingUpdateConditions.serverRendered:
51
- updateOption = extend({}, eventsBindingOptions, serverRenderedOptions, opt);
52
- break;
53
- case bindingUpdateConditions.init:
54
- // flag templateBinding to true to render tempalte(s)
55
- opt.templateBinding = true;
56
- updateOption = extend({}, visualBindingOptions, eventsBindingOptions, opt);
57
- break;
58
- default:
59
- // when called again only update visualBinding options
60
- updateOption = extend({}, visualBindingOptions, opt);
61
- }
62
-
63
- return updateOption;
64
- }
65
-
66
- export default createBindingOption;
@@ -1,46 +0,0 @@
1
- import {
2
- getFormData,
3
- getViewModelValue,
4
- resolveViewModelContext,
5
- resolveParamList,
6
- } from './util';
7
-
8
- const createEventBinding = ({
9
- cache = {},
10
- forceRender = false,
11
- type = '',
12
- viewModel = {},
13
- }) => {
14
- const handlerName = cache.dataKey;
15
- let paramList = cache.parameters;
16
- let viewModelContext;
17
- const APP = viewModel.APP || viewModel.$root.APP;
18
-
19
- if (!type || !handlerName || (!forceRender && !APP.$rootElement.contains(cache.el))) {
20
- return;
21
- }
22
-
23
- const handlerFn = getViewModelValue(viewModel, handlerName);
24
-
25
- if (typeof handlerFn === 'function') {
26
- viewModelContext = resolveViewModelContext(viewModel, handlerName);
27
- paramList = paramList ? resolveParamList(viewModel, paramList) : [];
28
-
29
- const handlerWrap = (e) => {
30
- let formData;
31
- let args = [];
32
- if (type === 'submit') {
33
- formData = getFormData(e.currentTarget);
34
- args = [e, e.currentTarget, formData].concat(paramList);
35
- } else {
36
- args = [e, e.currentTarget].concat(paramList);
37
- }
38
- handlerFn.apply(viewModelContext, args);
39
- };
40
-
41
- cache.el.removeEventListener(type, handlerWrap, false);
42
- cache.el.addEventListener(type, handlerWrap, false);
43
- }
44
- };
45
-
46
- export default createEventBinding;
@@ -1,46 +0,0 @@
1
- // https://yiochen.github.io/blog/post/weakmap-event-system/
2
- // usage:
3
- // attach listener to button
4
- // eventSystem.on(button, 'click', clickHandler);
5
- // eventSystem.trigger(button, 'click');
6
-
7
- const eventSystem = {
8
- wm: new WeakMap(),
9
- on(target, event, listener) {
10
- let listeners = this.wm.get(target);
11
- if (listeners === undefined) {
12
- listeners = {};
13
- }
14
- let listenersForEvent = listeners[event];
15
- if (listenersForEvent === undefined) {
16
- listenersForEvent = new Set();
17
- }
18
- listenersForEvent.add(listener);
19
- listeners[event] = listenersForEvent;
20
- this.wm.add(target, listeners);
21
- },
22
-
23
- off(target, event, listener) {
24
- const listeners = this.wm.get(target);
25
- if (!listeners) return;
26
- const listenersForEvent = listeners[event];
27
- if (!listenersForEvent) return;
28
- listenersForEvent.delete(handler);
29
- },
30
-
31
- trigger(target, event) {
32
- const listeners = this.wm.get(target);
33
- if (!listeners) return;
34
- const listenersForEvent = listeners[event];
35
- if (!listenersForEvent) return;
36
- // TODO: check what is listenersForEvent
37
- // handlers should be listeners or listenersForEvent
38
- for (const handler of handlers) {
39
- // we use a setTimeout here because we want event triggering to be asynchronous.
40
- // setTimeout(handler, 0, event, target);
41
- handler(event, target);
42
- }
43
- },
44
- };
45
-
46
- export default eventSystem;
@@ -1,57 +0,0 @@
1
- /* eslint-disable no-invalid-this */
2
- import {bindingDataReference} from './config';
3
- import {
4
- getViewModelValue,
5
- resolveViewModelContext,
6
- resolveParamList,
7
- } from './util';
8
-
9
- /**
10
- * blurBinding
11
- * DOM decleartive on blur event binding
12
- * event handler bind to viewModel method according to the DOM attribute
13
- * @param {object} cache
14
- * @param {object} viewModel
15
- * @param {object} bindingAttrs
16
- * @param {boolean} forceRender
17
- */
18
- const hoverBinding = (cache, viewModel, bindingAttrs, forceRender) => {
19
- const handlerName = cache.dataKey;
20
- let paramList = cache.parameters;
21
- const inHandlerName = bindingDataReference.mouseEnterHandlerName;
22
- const outHandlerName = bindingDataReference.mouseLeaveHandlerName;
23
- let viewModelContext;
24
- const APP = viewModel.APP || viewModel.$root.APP;
25
-
26
- cache.elementData = cache.elementData || {};
27
-
28
- // TODO: check what is APP.$rootElement.contains(cache.el)
29
- if (!handlerName || (!forceRender && !APP.$rootElement.contains(cache.el))) {
30
- return;
31
- }
32
-
33
- const handlers = getViewModelValue(viewModel, handlerName);
34
-
35
- if (handlers && typeof handlers[inHandlerName] === 'function' && typeof handlers[outHandlerName] === 'function') {
36
- viewModelContext = resolveViewModelContext(viewModel, handlerName);
37
- paramList = paramList ? resolveParamList(viewModel, paramList) : [];
38
-
39
- function onMouseEnterHandler(e) {
40
- const args = [e, cache.el].concat(paramList);
41
- handlers[inHandlerName].apply(viewModelContext, args);
42
- }
43
-
44
- function onMouseLeaveHandler(e) {
45
- const args = [e, cache.el].concat(paramList);
46
- handlers[outHandlerName].apply(viewModelContext, args);
47
- }
48
-
49
- cache.el.removeEventListener('mouseenter', onMouseEnterHandler, false);
50
- cache.el.removeEventListener('mouseleave', onMouseLeaveHandler, false);
51
-
52
- cache.el.addEventListener('mouseenter', onMouseEnterHandler, false);
53
- cache.el.addEventListener('mouseleave', onMouseLeaveHandler, false);
54
- }
55
- };
56
-
57
- export default hoverBinding;
package/src/index.js DELETED
@@ -1,26 +0,0 @@
1
- import * as config from './config';
2
- import {extend} from './util';
3
- import {Binder} from './binder';
4
-
5
- const isSupportPromise = typeof window['Promise'] === 'function';
6
-
7
- let bindingAttrs = config.bindingAttrs;
8
-
9
- const use = (settings = {}) => {
10
- if (settings.bindingAttrs) {
11
- bindingAttrs = extend({}, settings.bindingAttrs);
12
- }
13
- };
14
-
15
- const init = ($rootElement, viewModel = null) => {
16
- if (!isSupportPromise) {
17
- return console.warn('Browser not support Promise');
18
- }
19
- return new Binder($rootElement, viewModel, bindingAttrs);
20
- };
21
-
22
- export default {
23
- use: use,
24
- init: init,
25
- version: '@version@',
26
- };
@@ -1,128 +0,0 @@
1
- import {dataIndexAttr} from './config';
2
- import {
3
- createHtmlFragment,
4
- emptyElement,
5
- getViewModelPropValue,
6
- parseStringToJson,
7
- } from './util';
8
-
9
- let $domFragment = null;
10
- let $templateRoot = null;
11
- let nestTemplatesCount = 0;
12
-
13
- /**
14
- * getTemplateString
15
- * @description get Template tag innerHTML string
16
- * @param {string} id
17
- * @return {string} rendered html string
18
- */
19
- const getTemplateString = (id) => {
20
- const templateElement = document.getElementById(id);
21
-
22
- return templateElement ? templateElement.innerHTML : '';
23
- };
24
-
25
- /**
26
- * renderTemplate
27
- * @description
28
- * get template setting from DOM attribute then call compileTemplate
29
- * to render and append to target DOM
30
- * @param {object} cache
31
- * @param {object} viewModel
32
- * @param {object} bindingAttrs
33
- * @param {object} elementCache
34
- */
35
- const renderTemplate = (cache, viewModel, bindingAttrs, elementCache) => {
36
- const settings = typeof cache.dataKey === 'string' ? parseStringToJson(cache.dataKey) : cache.dataKey;
37
- let viewData = settings.data;
38
- const isAppend = settings.append;
39
- const isPrepend = settings.prepend;
40
- let $currentElement;
41
-
42
- cache.dataKey = settings;
43
-
44
- viewData = (typeof viewData === 'undefined' || viewData === '$root') ?
45
- viewModel :
46
- getViewModelPropValue(viewModel, {
47
- dataKey: settings.data,
48
- parameters: cache.parameters,
49
- });
50
-
51
- if (!viewData) {
52
- return;
53
- }
54
-
55
- const $element = cache.el;
56
- const $index = typeof viewModel.$index !== 'undefined' ? viewModel.$index : $element.getAttribute(dataIndexAttr);
57
-
58
- if (typeof $index !== 'undefined') {
59
- viewData.$index = $index;
60
- }
61
-
62
- $domFragment = $domFragment || document.createDocumentFragment();
63
-
64
- $templateRoot = $templateRoot || $element;
65
-
66
- const htmlString = getTemplateString(settings.id);
67
-
68
- const htmlFragment = createHtmlFragment(htmlString);
69
-
70
- // append rendered html
71
- if (!$domFragment.childNodes.length) {
72
- // domFragment should be empty in first run
73
- $currentElement = $domFragment; // copy of $domFragment for later find nested template check
74
- $domFragment.appendChild(htmlFragment);
75
- } else {
76
- // during recursive run keep append to current fragment
77
- $currentElement = $element; // reset to current nested template element
78
- if (!isAppend && !isPrepend) {
79
- $currentElement = emptyElement($currentElement);
80
- }
81
- if (isPrepend) {
82
- $currentElement.insertBefore(htmlFragment, $currentElement.firstChild);
83
- } else {
84
- $currentElement.appendChild(htmlFragment);
85
- }
86
- }
87
-
88
- // check if there are nested template then recurisive render them
89
- const $nestedTemplates = $currentElement.querySelectorAll('[' + bindingAttrs.tmp + ']');
90
-
91
- const nestedTemplatesLength = $nestedTemplates.length;
92
-
93
- if (nestedTemplatesLength) {
94
- nestTemplatesCount += nestedTemplatesLength;
95
-
96
- for (let i=0; i < nestedTemplatesLength; i+=1) {
97
- const thisTemplateCache = {
98
- el: $nestedTemplates[i],
99
- dataKey: $nestedTemplates[i].getAttribute(bindingAttrs.tmp),
100
- };
101
- elementCache[bindingAttrs.tmp].push(thisTemplateCache);
102
- // recursive template render
103
- renderTemplate(thisTemplateCache, viewModel, bindingAttrs, elementCache);
104
- nestTemplatesCount -= 1;
105
- }
106
- }
107
-
108
- // no more nested tempalted to render, start to append $domFragment into $templateRoot
109
- if (nestTemplatesCount === 0) {
110
- // append to DOM once
111
- if (!isAppend && !isPrepend) {
112
- $templateRoot = emptyElement($templateRoot);
113
- }
114
- if (isPrepend) {
115
- $templateRoot.insertBefore($domFragment, $templateRoot.firstChild);
116
- } else {
117
- $templateRoot.appendChild($domFragment);
118
- }
119
- // clear cached fragment
120
- $domFragment = $templateRoot = null;
121
- // trigger callback if provided
122
- if (typeof viewModel.afterTemplateRender === 'function') {
123
- viewModel.afterTemplateRender(viewData);
124
- }
125
- }
126
- };
127
-
128
- export default renderTemplate;