spyne 0.19.1 → 0.20.1

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 (132) hide show
  1. package/.eslintignore +2 -0
  2. package/.eslintrc.js +4 -3
  3. package/.travis.yml +24 -11
  4. package/karma.conf.js +77 -87
  5. package/lib/spyne.esm.js +15 -0
  6. package/lib/spyne.esm.js.map +1 -0
  7. package/lib/spyne.js +248 -248
  8. package/lib/spyne.umd.js +3 -0
  9. package/lib/spyne.umd.js.LICENSE.txt +16 -0
  10. package/package.json +48 -27
  11. package/rollup.config.js +26 -0
  12. package/src/spyne/channels/channel-fetch-class.js +39 -43
  13. package/src/spyne/channels/channel-payload-class.js +61 -74
  14. package/src/spyne/channels/channel-proxy.js +25 -26
  15. package/src/spyne/channels/channel.js +141 -149
  16. package/src/spyne/channels/channels-config.js +46 -47
  17. package/src/spyne/channels/channels-map.js +61 -65
  18. package/src/spyne/channels/spyne-channel-lifecycle.js +12 -12
  19. package/src/spyne/channels/spyne-channel-route.js +241 -250
  20. package/src/spyne/channels/spyne-channel-ui.js +213 -75
  21. package/src/spyne/channels/spyne-channel-window.js +157 -157
  22. package/src/spyne/spyne-app.js +32 -19
  23. package/src/spyne/spyne-plugins.js +55 -70
  24. package/src/spyne/spyne.js +23 -23
  25. package/src/spyne/utils/channel-config-validator.js +10 -10
  26. package/src/spyne/utils/channel-fetch-util.js +72 -55
  27. package/src/spyne/utils/channel-payload-filter.js +89 -100
  28. package/src/spyne/utils/deep-merge.js +31 -29
  29. package/src/spyne/utils/frp-tools.js +108 -92
  30. package/src/spyne/utils/gc.js +6 -6
  31. package/src/spyne/utils/mixins/base-core-mixins.js +17 -15
  32. package/src/spyne/utils/mixins/base-streams-mixins.js +9 -9
  33. package/src/spyne/utils/route-channel-updater.js +23 -29
  34. package/src/spyne/utils/safe-clone.js +40 -58
  35. package/src/spyne/utils/sanitize-html.js +35 -0
  36. package/src/spyne/utils/security-policy.js +11 -0
  37. package/src/spyne/utils/spyne-app-properties.js +110 -114
  38. package/src/spyne/utils/spyne-logger.js +4 -11
  39. package/src/spyne/utils/spyne-plugins-methods.js +38 -63
  40. package/src/spyne/utils/spyne-trait.js +33 -33
  41. package/src/spyne/utils/spyne-utils-channel-route-url.js +229 -153
  42. package/src/spyne/utils/spyne-utils-channel-route.js +128 -138
  43. package/src/spyne/utils/spyne-utils-channel-window.js +39 -39
  44. package/src/spyne/utils/viewstream-animations.js +12 -12
  45. package/src/spyne/utils/viewstream-observables.js +45 -45
  46. package/src/spyne/views/dom-element-template.js +111 -114
  47. package/src/spyne/views/dom-element.js +82 -84
  48. package/src/spyne/views/view-stream-broadcaster.js +66 -62
  49. package/src/spyne/views/view-stream-element.js +105 -106
  50. package/src/spyne/views/view-stream-payload.js +25 -27
  51. package/src/spyne/views/view-stream-selector.js +157 -163
  52. package/src/spyne/views/view-stream.js +416 -640
  53. package/src/tests/channels/channel-dom.test.js +15 -15
  54. package/src/tests/channels/channel-fetch.test.js +51 -62
  55. package/src/tests/channels/channel-payload-class.test.js +50 -63
  56. package/src/tests/channels/channel-payload-filter.test.js +133 -193
  57. package/src/tests/channels/channel-route.test.js +102 -112
  58. package/src/tests/channels/channel-stream-item.test.js +19 -19
  59. package/src/tests/channels/channel-ui.test.js +15 -27
  60. package/src/tests/channels/channel-util-dom.test.js +31 -31
  61. package/src/tests/channels/channel.test.js +20 -25
  62. package/src/tests/channels/route-utils.test.js +61 -66
  63. package/src/tests/channels/url-utils.test.js +151 -151
  64. package/src/tests/channels/view-stream-broadcaster.test.js +7 -7
  65. package/src/tests/import.test.js +5 -5
  66. package/src/tests/index.js +6 -7
  67. package/src/tests/index.test.js +6 -8
  68. package/src/tests/mocks/channel-payload-data.js +218 -220
  69. package/src/tests/mocks/enhancer.test.js +5 -5
  70. package/src/tests/mocks/payload-ui.js +87 -90
  71. package/src/tests/mocks/routes-data.js +264 -266
  72. package/src/tests/mocks/spyne-docs.mocks.js +3 -3
  73. package/src/tests/mocks/template-renderer.mocks.js +47 -47
  74. package/src/tests/mocks/utils-data.js +78 -79
  75. package/src/tests/mocks/viewstream-internal-payload.mocks.js +50 -50
  76. package/src/tests/mocks/window-events-arr.js +1 -1
  77. package/src/tests/package-json.spec.test.js +9 -0
  78. package/src/tests/spyne-app.test.js +15 -18
  79. package/src/tests/spyne-plugin.test.js +16 -20
  80. package/src/tests/utils/channel-action-filter.test.js +84 -86
  81. package/src/tests/utils/channel-data-packet-generator.unused.js +62 -86
  82. package/src/tests/utils/channel-fetch-util.test.js +64 -66
  83. package/src/tests/utils/frp-tools.test.js +19 -19
  84. package/src/tests/utils/plugins-methods.test.js +31 -55
  85. package/src/tests/utils/security.test.js +10 -0
  86. package/src/tests/utils/spyne-app-properties.test.js +4 -8
  87. package/src/tests/views/dom-el-selectors.test.js +112 -119
  88. package/src/tests/views/dom-el-template-proxy.test.js +7 -0
  89. package/src/tests/views/dom-el-template.test.js +186 -156
  90. package/src/tests/views/dom-el.test.js +58 -56
  91. package/src/tests/views/view-stream-enhancer-loader.test.js +2 -2
  92. package/src/tests/views/view-stream-enhancer.test.js +11 -11
  93. package/src/tests/views/view-stream.test.js +22 -33
  94. package/webpack.config.js +76 -67
  95. package/docs/-_%20Solves%20equations%20of%20the%20form%20a%20_%20x%20=%20b.html +0 -487
  96. package/docs/DomItem.html +0 -298
  97. package/docs/DomItem_DomItem.html +0 -314
  98. package/docs/ViewStream.html +0 -2249
  99. package/docs/ViewStream_ViewStream.html +0 -503
  100. package/docs/custom/css/jsdoc-viewstream.css +0 -377
  101. package/docs/custom/layout.tmpl +0 -47
  102. package/docs/dom-item.js.html +0 -213
  103. package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
  104. package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
  105. package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
  106. package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
  107. package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
  108. package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
  109. package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
  110. package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
  111. package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
  112. package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
  113. package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
  114. package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
  115. package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
  116. package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
  117. package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
  118. package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
  119. package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
  120. package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
  121. package/docs/global.html +0 -548
  122. package/docs/index-custom.html +0 -79
  123. package/docs/index.html +0 -82
  124. package/docs/jsdoc.config.json +0 -22
  125. package/docs/scripts/linenumber.js +0 -25
  126. package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
  127. package/docs/scripts/prettify/lang-css.js +0 -2
  128. package/docs/scripts/prettify/prettify.js +0 -28
  129. package/docs/styles/jsdoc-default.css +0 -358
  130. package/docs/styles/prettify-jsdoc.css +0 -111
  131. package/docs/styles/prettify-tomorrow.css +0 -132
  132. package/docs/view-stream.js.html +0 -767
@@ -1,16 +1,13 @@
1
- import { Channel } from './channel';
2
- import { checkIfObjIsNotEmptyOrNil } from '../utils/frp-tools';
3
- import {SpyneAppProperties} from '../utils/spyne-app-properties';
4
- import { SpyneUtilsChannelWindow } from '../utils/spyne-utils-channel-window';
5
- import { merge } from 'rxjs';
6
- import { map, debounceTime, skipWhile } from 'rxjs/operators';
7
- import {curry, pick, partialRight, mapObjIndexed, apply} from 'ramda';
8
- import {deepMerge} from '../utils/deep-merge';
9
-
10
- const rMap = require('ramda').map;
1
+ import { Channel } from './channel'
2
+ import { checkIfObjIsNotEmptyOrNil } from '../utils/frp-tools'
3
+ import { SpyneAppProperties } from '../utils/spyne-app-properties'
4
+ import { SpyneUtilsChannelWindow } from '../utils/spyne-utils-channel-window'
5
+ import { merge } from 'rxjs'
6
+ import { map, debounceTime, skipWhile } from 'rxjs/operators'
7
+ import { curry, pick, partialRight, mapObjIndexed, apply, map as rMap } from 'ramda'
8
+ import { deepMerge } from '../utils/deep-merge'
11
9
 
12
10
  export class SpyneChannelWindow extends Channel {
13
-
14
11
  /**
15
12
  * @module SpyneChannelWindow
16
13
  * @type core
@@ -34,229 +31,218 @@ export class SpyneChannelWindow extends Channel {
34
31
  *
35
32
  *
36
33
  */
37
- constructor(CHANNEL_NAME="CHANNEL_WINDOW") {
38
- super(CHANNEL_NAME);
39
- this.bindStaticMethods();
40
- this.currentScrollY=0;
41
-
34
+ constructor(CHANNEL_NAME = 'CHANNEL_WINDOW') {
35
+ super(CHANNEL_NAME)
36
+ this.bindStaticMethods()
37
+ this.currentScrollY = 0
42
38
  }
43
39
 
44
40
  initializeStream() {
45
- this.domChannelConfig = SpyneAppProperties.config.channels.WINDOW;
46
- let obs$Arr = this.getActiveObservables();
47
- let dom$ = merge(...obs$Arr);
48
- this.dom$ = dom$;
41
+ this.domChannelConfig = SpyneAppProperties.config.channels.WINDOW
42
+ const obs$Arr = this.getActiveObservables()
43
+ const dom$ = merge(...obs$Arr)
44
+ this.dom$ = dom$
49
45
  dom$.subscribe(p => {
50
- let { action, payload, srcElement, event } = p;
51
- this.sendChannelPayload(action, payload, srcElement, event);
52
- });
46
+ const { action, payload, srcElement, event } = p
47
+ this.sendChannelPayload(action, payload, srcElement, event)
48
+ })
53
49
  }
54
50
 
55
-
56
-
57
-
58
51
  static getMouseWheelMapFn(event) {
59
- let action = this.channelActions.CHANNEL_WINDOW_MOUSEWHEEL_EVENT;
60
- let scrollDir = event.deltaY <= 0 ? 'up' : 'down';
61
- let { deltaX, deltaY, deltaZ } = event;
62
- let payload = { scrollDir, deltaX, deltaY, deltaZ };
63
- let srcElement = event.srcElement;
64
- return { action, payload, srcElement, event };
52
+ const action = this.channelActions.CHANNEL_WINDOW_WHEEL_EVENT
53
+ const scrollDir = event.deltaY <= 0 ? 'up' : 'down'
54
+ const { deltaX, deltaY, deltaZ } = event
55
+ const payload = { scrollDir, deltaX, deltaY, deltaZ }
56
+ const srcElement = event.srcElement
57
+ return { action, payload, srcElement, event }
65
58
  }
66
59
 
67
60
  static createCurriedGenericEvent(actionStr) {
68
- let action = `CHANNEL_WINDOW_${actionStr.toUpperCase()}_EVENT`;
69
- let curryFn = curry(SpyneChannelWindow.mapGenericEvent);
70
- return curryFn(action);
61
+ const action = `CHANNEL_WINDOW_${actionStr.toUpperCase()}_EVENT`
62
+ const curryFn = curry(SpyneChannelWindow.mapGenericEvent)
63
+ return curryFn(action)
71
64
  }
72
65
 
73
66
  static mapGenericEvent(actn, event) {
74
67
  // console.log("map generic event ",actn);
75
- let action = actn;
76
- let payload = event;
77
- let srcElement = event.srcElement;
78
- return { action, payload, srcElement, event };
68
+ const action = actn
69
+ const payload = event
70
+ const srcElement = event.srcElement
71
+ return { action, payload, srcElement, event }
79
72
  }
80
73
 
81
74
  static getResizeMapFn(event) {
82
- let action = this.channelActions.CHANNEL_WINDOW_RESIZE_EVENT;
83
- let payload = pick(
84
- ['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window);
85
- let srcElement = event.srcElement;
86
- return { action, payload, srcElement, event };
75
+ const action = this.channelActions.CHANNEL_WINDOW_RESIZE_EVENT
76
+ const payload = pick(
77
+ ['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window)
78
+ const srcElement = event.srcElement
79
+ return { action, payload, srcElement, event }
87
80
  }
88
81
 
89
82
  static getOrientationMapFn(event) {
90
- let action = this.channelActions.CHANNEL_WINDOW_ORIENTATION_EVENT;
91
- const orientationStr = '(orientation: portrait)';
92
- let isPortraitBool = window.matchMedia(orientationStr).matches;
93
- let payload = pick(
94
- ['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window);
95
- payload['orientation'] = isPortraitBool === true
83
+ const action = this.channelActions.CHANNEL_WINDOW_ORIENTATION_EVENT
84
+ const orientationStr = '(orientation: portrait)'
85
+ const isPortraitBool = window.matchMedia(orientationStr).matches
86
+ const payload = pick(
87
+ ['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window)
88
+ payload.orientation = isPortraitBool === true
96
89
  ? 'portrait'
97
- : 'landscape';
98
- let srcElement = event.srcElement;
99
- return { action, payload, srcElement, event };
90
+ : 'landscape'
91
+ const srcElement = event.srcElement
92
+ return { action, payload, srcElement, event }
100
93
  }
101
94
 
102
95
  getMediaQueryMapFn(event) {
103
- let action = this.channelActions.CHANNEL_WINDOW_MEDIA_QUERY_EVENT;
104
- let payload = pick(['matches', 'media', 'mediaQueryName'], event);
105
- let srcElement = event.srcElement;
106
- return { action, payload, srcElement, event };
96
+ const action = this.channelActions.CHANNEL_WINDOW_MEDIA_QUERY_EVENT
97
+ const payload = pick(['matches', 'media', 'mediaQueryName'], event)
98
+ const srcElement = event.srcElement
99
+ return { action, payload, srcElement, event }
107
100
  }
108
101
 
109
102
  createMouseWheelObservable(config) {
110
- const debounceT = config.debounceMSTimeForScroll;
103
+ const debounceT = config.debounceMSTimeForScroll
111
104
 
112
- return SpyneUtilsChannelWindow.createDomObservableFromEvent('mousewheel',
105
+ return SpyneUtilsChannelWindow.createDomObservableFromEvent('wheel',
113
106
  SpyneChannelWindow.getMouseWheelMapFn.bind(this))
114
- .pipe(
107
+ .pipe(
115
108
  debounceTime(debounceT)
116
- );
109
+ )
117
110
  }
118
111
 
119
- static getScrollData(){
120
- let currentScrollY = 0;
112
+ static getScrollData() {
113
+ let currentScrollY = 0
121
114
 
122
- const getScrollData = (scrollY)=>{
123
- let scrollDistance = currentScrollY - scrollY
124
- let scrollDir = scrollDistance >= 0 ? 'up' : 'down';
125
- currentScrollY = scrollY;
126
- return {scrollY, scrollDistance, scrollDir};
127
- };
128
- return getScrollData;
115
+ const getScrollData = (scrollY) => {
116
+ const scrollDistance = currentScrollY - scrollY
117
+ const scrollDir = scrollDistance >= 0 ? 'up' : 'down'
118
+ currentScrollY = scrollY
119
+ return { scrollY, scrollDistance, scrollDir }
120
+ }
121
+ return getScrollData
129
122
  }
130
123
 
131
- static getScrollY(scrollElement){
132
- return scrollElement.pageYOffset !== undefined ? scrollElement.pageYOffset : scrollElement.scrollTop;
124
+ static getScrollY(scrollElement) {
125
+ return scrollElement.pageYOffset !== undefined ? scrollElement.pageYOffset : scrollElement.scrollTop
133
126
  }
134
127
 
135
-
136
128
  static getScrollMapFn(event, interval, action, scrollDataFn, scrollElement) {
137
- let scrollY = SpyneChannelWindow.getScrollY(scrollElement);
138
- let payload = scrollDataFn(scrollY);
139
- let {scrollDistance} = payload;
140
- let srcElement = event.srcElement;
141
- return { action, payload, srcElement, scrollDistance, event };
129
+ const scrollY = SpyneChannelWindow.getScrollY(scrollElement)
130
+ const payload = scrollDataFn(scrollY)
131
+ const { scrollDistance } = payload
132
+ const srcElement = event.srcElement
133
+ return { action, payload, srcElement, scrollDistance, event }
142
134
  }
143
135
 
144
- createScrollObservable(config, scrollElement=window, isPassive = true) {
145
- const skipWhenDirIsMissing = evt => evt.scrollDistance === 0;
146
- const dTime = config.debounceMSTimeForScroll;
147
-
148
- const element = scrollElement;
149
-
150
-
151
- const isWindow = scrollElement === window;
136
+ createScrollObservable(config, scrollElement = window, isPassive = true) {
137
+ const skipWhenDirIsMissing = evt => evt.scrollDistance === 0
138
+ const dTime = config.debounceMSTimeForScroll
152
139
 
153
- const scrollElForVals = config.scrollElForVals !== undefined ? config.scrollElForVals : scrollElement;
154
- const action = isWindow ? 'CHANNEL_WINDOW_SCROLL_EVENT' : 'CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT';
140
+ const element = scrollElement
155
141
 
142
+ const isWindow = scrollElement === window
156
143
 
157
- const scrollDataFn =SpyneChannelWindow.getScrollData();
158
- // console.log("SCROLL ELEMENT ",action,scrollElement, scrollElForVals);
159
- const scrollMapFn =partialRight(SpyneChannelWindow.getScrollMapFn, [action, scrollDataFn, scrollElForVals, isPassive, element]).bind(this);
160
-
161
- // console.log("createScrollObservable ", {scrollMapFn, scrollDataFn, action, config, scrollElement, element})
144
+ const scrollElForVals = config.scrollElForVals !== undefined ? config.scrollElForVals : scrollElement
145
+ const action = isWindow ? 'CHANNEL_WINDOW_SCROLL_EVENT' : 'CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT'
162
146
 
147
+ const scrollDataFn = SpyneChannelWindow.getScrollData()
148
+ // console.log("SCROLL ELEMENT ",action,scrollElement, scrollElForVals);
149
+ const scrollMapFn = partialRight(SpyneChannelWindow.getScrollMapFn, [action, scrollDataFn, scrollElForVals, isPassive, element]).bind(this)
163
150
 
151
+ // console.log("createScrollObservable ", {scrollMapFn, scrollDataFn, action, config, scrollElement, element})
164
152
 
165
153
  return SpyneUtilsChannelWindow.createDomObservableFromEvent('scroll',
166
- scrollMapFn, isPassive, element)
154
+ scrollMapFn, isPassive, element)
167
155
  .pipe(
168
156
  debounceTime(dTime),
169
157
  skipWhile(skipWhenDirIsMissing),
170
- map(p=>{
171
- const newScrollY = SpyneChannelWindow.getScrollY(element);
172
- p.payload['scrollDistanceAbs'] = Math.abs(this.currentScrollY-newScrollY);
173
- this.currentScrollY=newScrollY;
174
- return p;
158
+ map(p => {
159
+ const newScrollY = SpyneChannelWindow.getScrollY(element)
160
+ p.payload.scrollDistanceAbs = Math.abs(this.currentScrollY - newScrollY)
161
+ this.currentScrollY = newScrollY
162
+ return p
175
163
  })
176
- );
164
+ )
177
165
  }
178
166
 
179
167
  createOrientationObservable(config) {
180
168
  // console.log("add orientation");orientationchange
181
169
  return SpyneUtilsChannelWindow.createDomObservableFromEvent('orientationchange',
182
- SpyneChannelWindow.getOrientationMapFn.bind(this));
170
+ SpyneChannelWindow.getOrientationMapFn.bind(this))
183
171
  }
184
172
 
185
173
  createResizeObservable(config) {
186
- const dTime = config.debounceMSTimeForResize;
174
+ const dTime = config.debounceMSTimeForResize
187
175
  // console.log('resize this ', this);
188
176
 
189
177
  return SpyneUtilsChannelWindow.createDomObservableFromEvent('resize',
190
- SpyneChannelWindow.getResizeMapFn.bind(this)).pipe(debounceTime(dTime));
178
+ SpyneChannelWindow.getResizeMapFn.bind(this)).pipe(debounceTime(dTime))
191
179
  }
192
180
 
193
181
  getEventsFromConfig(config = this.domChannelConfig) {
194
- let obs$Arr = config.events;
182
+ const obs$Arr = config.events
195
183
 
196
184
  const addWindowEventToArr = str => {
197
- let mapFn = SpyneChannelWindow.createCurriedGenericEvent(str);
198
- return SpyneUtilsChannelWindow.createDomObservableFromEvent(str, mapFn);
199
- };
185
+ const mapFn = SpyneChannelWindow.createCurriedGenericEvent(str)
186
+ return SpyneUtilsChannelWindow.createDomObservableFromEvent(str, mapFn)
187
+ }
200
188
 
201
- return rMap(addWindowEventToArr, obs$Arr);
189
+ return rMap(addWindowEventToArr, obs$Arr)
202
190
  }
203
191
 
204
192
  getActiveObservables(config = this.domChannelConfig) {
205
- let obs$Arr = [];
193
+ let obs$Arr = []
206
194
 
207
195
  // CHECK TO ADD MEDIA QUERY OBSERVABLE
208
196
  // ==========================================
209
- config['listenForMediaQueries'] = checkIfObjIsNotEmptyOrNil(
197
+ config.listenForMediaQueries = checkIfObjIsNotEmptyOrNil(
210
198
  config.mediaQueries) || checkIfObjIsNotEmptyOrNil(
211
- config.mediqQueries);
199
+ config.mediaQueries)
212
200
 
213
201
  // =========================================
214
202
 
215
- let methods = {
216
- 'listenForResize': this.createResizeObservable.bind(this),
217
- 'listenForOrientation': this.createOrientationObservable.bind(this),
218
- 'listenForScroll': this.createScrollObservable.bind(this),
219
- 'listenForMouseWheel': this.createMouseWheelObservable.bind(this)
220
- };
203
+ const methods = {
204
+ listenForResize: this.createResizeObservable.bind(this),
205
+ listenForOrientation: this.createOrientationObservable.bind(this),
206
+ listenForScroll: this.createScrollObservable.bind(this),
207
+ listenForWheel: this.createMouseWheelObservable.bind(this)
208
+ }
221
209
 
222
210
  const addObservableToArr = (method, key, i) => {
223
- const addObsBool = config[key];
211
+ const addObsBool = config[key]
224
212
  if (addObsBool) {
225
- obs$Arr.push(method(config));
226
- } else {
227
-
213
+ obs$Arr.push(method(config))
228
214
  }
229
- };
215
+ }
230
216
 
231
- mapObjIndexed(addObservableToArr, methods);
217
+ mapObjIndexed(addObservableToArr, methods)
232
218
 
233
219
  // 'listenForMediaQueries' : this.getMediaQueryObservable.bind(this)
234
- this.checkForMediaQueries(config.listenForMediaQueries);
220
+ this.checkForMediaQueries(config.listenForMediaQueries)
235
221
 
236
- let eventsArr = this.getEventsFromConfig(config);
237
- obs$Arr = obs$Arr.concat(eventsArr);
222
+ const eventsArr = this.getEventsFromConfig(config)
223
+ obs$Arr = obs$Arr.concat(eventsArr)
238
224
 
239
- return obs$Arr;
225
+ return obs$Arr
240
226
  }
241
227
 
242
228
  checkForMediaQueries(bool) {
243
229
  const sendMQStream = p => {
244
- let { action, payload, srcElement, event } = p;
230
+ const { action, payload, srcElement, event } = p
245
231
  this.sendChannelPayload(action, payload, srcElement, event,
246
- this.observer$);
247
- };
232
+ this.observer$)
233
+ }
248
234
 
249
235
  if (bool === true) {
250
236
  this.getMediaQueryObservable(this.domChannelConfig)
251
- .subscribe(sendMQStream);
237
+ .subscribe(sendMQStream)
252
238
  }
253
239
  }
254
240
 
255
241
  getMediaQueryObservable(config) {
256
- let arr = this.createMergedObsFromObj(config);
257
- //console.log("ARR IS ",{arr});
258
- let obs$ = apply(merge, arr);
259
- return obs$.pipe(map(this.getMediaQueryMapFn.bind(this)));
242
+ const arr = this.createMergedObsFromObj(config)
243
+ // console.log("ARR IS ",{arr});
244
+ const obs$ = apply(merge, arr)
245
+ return obs$.pipe(map(this.getMediaQueryMapFn.bind(this)))
260
246
  }
261
247
 
262
248
  addRegisteredActions() {
@@ -280,6 +266,7 @@ export class SpyneChannelWindow extends Channel {
280
266
  'CHANNEL_WINDOW_COMPOSITIONUPDATE_EVENT',
281
267
  'CHANNEL_WINDOW_COPY_EVENT',
282
268
  'CHANNEL_WINDOW_CUT_EVENT',
269
+ 'CHANNEL_WINDOW_DBLCLICK_EVENT',
283
270
  'CHANNEL_WINDOW_DEVICECHANGE_EVENT',
284
271
  'CHANNEL_WINDOW_DEVICELIGHT_EVENT',
285
272
  'CHANNEL_WINDOW_DEVICEMOTION_EVENT',
@@ -289,14 +276,27 @@ export class SpyneChannelWindow extends Channel {
289
276
  'CHANNEL_WINDOW_DOMATTRMODIFIED_EVENT',
290
277
  'CHANNEL_WINDOW_DOMCHARACTERDATAMODIFIED_EVENT',
291
278
  'CHANNEL_WINDOW_DOMCONTENTLOADED_EVENT',
279
+ 'CHANNEL_WINDOW_DOMCONTENTLOADED_EVENT',
292
280
  'CHANNEL_WINDOW_DOMELEMENTNAMECHANGED_EVENT',
281
+ 'CHANNEL_WINDOW_DRAGEND_EVENT',
282
+ 'CHANNEL_WINDOW_DRAGENTER_EVENT',
283
+ 'CHANNEL_WINDOW_DRAGLEAVE_EVENT',
284
+ 'CHANNEL_WINDOW_DRAGOVER_EVENT',
285
+ 'CHANNEL_WINDOW_DRAGSTART_EVENT',
286
+ 'CHANNEL_WINDOW_DRAG_EVENT',
287
+ 'CHANNEL_WINDOW_DROP_EVENT',
288
+ 'CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT',
293
289
  'CHANNEL_WINDOW_ERROR_EVENT',
294
290
  'CHANNEL_WINDOW_FOCUSIN_EVENT',
295
291
  'CHANNEL_WINDOW_FOCUS_EVENT',
296
292
  'CHANNEL_WINDOW_FULLSCREENCHANGE_EVENT',
297
293
  'CHANNEL_WINDOW_FULLSCREENERROR_EVENT',
298
- 'CHANNEL_WINDOW_KEYUP_EVENT',
294
+ 'CHANNEL_WINDOW_HASHCHANGE_EVENT',
295
+ 'CHANNEL_WINDOW_INPUT_EVENT',
296
+ 'CHANNEL_WINDOW_INVALID_EVENT',
299
297
  'CHANNEL_WINDOW_KEYDOWN_EVENT',
298
+ 'CHANNEL_WINDOW_KEYPRESS_EVENT',
299
+ 'CHANNEL_WINDOW_KEYUP_EVENT',
300
300
  'CHANNEL_WINDOW_LOAD_EVENT',
301
301
  'CHANNEL_WINDOW_MEDIA_QUERY_EVENT',
302
302
  'CHANNEL_WINDOW_MESSAGE_EVENT',
@@ -314,15 +314,18 @@ export class SpyneChannelWindow extends Channel {
314
314
  'CHANNEL_WINDOW_ORIENTATION_EVENT',
315
315
  'CHANNEL_WINDOW_PAGEHIDE_EVENT',
316
316
  'CHANNEL_WINDOW_PAGESHOW_EVENT',
317
+ 'CHANNEL_WINDOW_PASTE_EVENT',
317
318
  'CHANNEL_WINDOW_POPSTATE_EVENT',
319
+ 'CHANNEL_WINDOW_POPSTATE_EVENT',
320
+ 'CHANNEL_WINDOW_PROGRESSEVENTS_EVENT',
318
321
  'CHANNEL_WINDOW_RESET_EVENT',
319
322
  'CHANNEL_WINDOW_RESIZE_EVENT',
320
- 'CHANNEL_WINDOW_ELEMENT_SCROLL_EVENT',
321
323
  'CHANNEL_WINDOW_SCROLL_ELEMENT_ADDED_EVENT',
322
- ['CHANNEL_WINDOW_SET_ELEMENT_TO_SCROLL_EVENT', 'onSetElementToScroll'],
323
324
  'CHANNEL_WINDOW_SCROLL_EVENT',
324
325
  'CHANNEL_WINDOW_SCROLL_LOCK_EVENT',
325
- ['CHANNEL_WINDOW_SCROLL_LOCK_EVENT', 'onScrollLockEvent'],
326
+ ['CHANNEL_WINDOW_SCROLL_LOCK_EVENT', 'onScrollLockEvent'],
327
+ ['CHANNEL_WINDOW_SET_ELEMENT_TO_SCROLL_EVENT', 'onSetElementToScroll'],
328
+ 'CHANNEL_WINDOW_STORAGE_EVENT',
326
329
  'CHANNEL_WINDOW_SUBMIT_EVENT',
327
330
  'CHANNEL_WINDOW_TRANSITIONCANCEL_EVENT',
328
331
  'CHANNEL_WINDOW_TRANSITIONEND_EVENT',
@@ -330,37 +333,34 @@ export class SpyneChannelWindow extends Channel {
330
333
  'CHANNEL_WINDOW_TRANSITIONSTART_EVENT',
331
334
  'CHANNEL_WINDOW_UNLOAD_EVENT',
332
335
  'CHANNEL_WINDOW_WHEEL_EVENT'
333
- ];
336
+ ]
334
337
  }
335
338
 
336
- onScrollLockEvent(e){
339
+ onScrollLockEvent(e) {
337
340
  // DEPRECATED -- MOVED TO spyne-plugin-scroll-lock;
338
341
  }
339
342
 
340
- onSetElementToScroll(e){
343
+ onSetElementToScroll(e) {
344
+ let { config, el, scrollElement } = e.payload
345
+ config = config || {}
346
+ config = deepMerge(this.domChannelConfig, config)
341
347
 
342
- let {config, el, scrollElement} = e.payload;
343
- config = config || {};
344
- config = deepMerge(this.domChannelConfig, config);
348
+ scrollElement = scrollElement || el
345
349
 
346
- scrollElement = scrollElement || el;
347
-
348
- const action = "CHANNEL_WINDOW_SCROLL_ELEMENT_ADDED_EVENT";
349
- this.sendChannelPayload(action, {el}, el);
350
+ const action = 'CHANNEL_WINDOW_SCROLL_ELEMENT_ADDED_EVENT'
351
+ this.sendChannelPayload(action, { el }, el)
350
352
 
351
353
  this.createScrollObservable(config, scrollElement)
352
- .subscribe(p => {
353
- let { action, payload, srcElement, event } = p;
354
- this.sendChannelPayload(action, payload, srcElement, event);
355
- });
356
-
357
-
354
+ .subscribe(p => {
355
+ const { action, payload, srcElement, event } = p
356
+ this.sendChannelPayload(action, payload, srcElement, event)
357
+ })
358
358
  }
359
359
 
360
360
  bindStaticMethods() {
361
361
  this.createMediaQueryHandler = SpyneUtilsChannelWindow.createMediaQueryHandler.bind(
362
- this);
362
+ this)
363
363
  this.createMergedObsFromObj = SpyneUtilsChannelWindow.createMergedObsFromObj.bind(
364
- this);
364
+ this)
365
365
  }
366
366
  }
@@ -1,9 +1,11 @@
1
- import {ChannelsMap} from './channels/channels-map';
2
- import {ViewStream} from './views/view-stream';
3
- import {SpyneAppProperties} from './utils/spyne-app-properties';
4
- import {deepMerge} from './utils/deep-merge';
5
- const _channels = new ChannelsMap();
6
- const version = '0.19.1';
1
+ import { ChannelsMap } from './channels/channels-map'
2
+ import { ViewStream } from './views/view-stream'
3
+ import { SpyneUtilsChannelRoute } from './utils/spyne-utils-channel-route'
4
+ import { SpyneAppProperties } from './utils/spyne-app-properties'
5
+ import { sanitizeHTMLConfigure } from './utils/sanitize-html'
6
+
7
+ const _channels = new ChannelsMap()
8
+ const version = '0.20.1'
7
9
 
8
10
  class SpyneApplication {
9
11
  /**
@@ -30,18 +32,17 @@ class SpyneApplication {
30
32
  constructor() {
31
33
  this.version = version
32
34
 
33
- //console.log('spyne app created')
34
-
35
-
35
+ // console.log('spyne app created')
36
36
  }
37
- get channels(){
38
- return _channels;
37
+
38
+ get channels() {
39
+ return _channels
39
40
  }
40
41
 
41
- init(config = {}, testMode=false) {
42
- //this.channels = new ChannelsMap();
42
+ init(config = {}, testMode = false) {
43
+ // this.channels = new ChannelsMap();
43
44
  /*!
44
- * Spyne 0.19.1
45
+ * Spyne 0.20.1
45
46
  * https://spynejs.org
46
47
  *
47
48
  * @license Copyright 2017-2021, Frank Batista, Relevant Context, LLC. All rights reserved.
@@ -53,6 +54,8 @@ class SpyneApplication {
53
54
  /* eslint-disable */
54
55
 
55
56
 
57
+
58
+
56
59
  if(SpyneAppProperties.initialized === true){
57
60
  if (testMode){
58
61
  return 'The Spyne Application has already been initialized!';
@@ -62,19 +65,26 @@ class SpyneApplication {
62
65
  return
63
66
  }
64
67
 
65
-
68
+ //const imgPath = IMG_PATH || undefined;
69
+ const imgPath = (typeof IMG_PATH !== 'undefined') ? IMG_PATH : undefined;
66
70
  let defaultConfig = {
67
71
  scrollLock: false,
68
72
  scrollLockX: 31,
69
73
  scrollLockY: 0,
70
- debug: true,
74
+ debug: false,
75
+ strict: false,
76
+ baseHref: undefined,
77
+ IMG_PATH: imgPath,
78
+ pluginMethods:{
79
+
80
+ },
71
81
  plugins:{
72
82
 
73
83
  },
74
84
  tmp: {},
75
85
  channels: {
76
86
  WINDOW: {
77
- mediqQueries: {
87
+ mediaQueries: {
78
88
 
79
89
  },
80
90
  events: [],
@@ -82,6 +92,7 @@ class SpyneApplication {
82
92
  listenForOrientation: true,
83
93
  listenForScroll: false,
84
94
  listenForMouseWheel: false,
95
+ listenForWheel: false,
85
96
  debounceMSTimeForResize: 200,
86
97
  debounceMSTimeForScroll: 150
87
98
  },
@@ -101,11 +112,12 @@ class SpyneApplication {
101
112
  }
102
113
  };
103
114
  if (config !== undefined) {
104
- config = SpyneAppProperties.initialize(defaultConfig, config, _channels);
115
+ const routeUtils = SpyneUtilsChannelRoute;
116
+ config = SpyneAppProperties.initialize(defaultConfig, config, _channels, routeUtils);
117
+ //console.log("SPYNE APP PROPS ",SpyneAppProperties);
105
118
  //window.Spyne = this;
106
119
  //window.Spyne['config'] = deepMerge(defaultConfig, config)
107
120
  }
108
-
109
121
  this.pluginsFn = SpyneAppProperties.getPluginsMethodObj(config['pluginMethods']);
110
122
  this.getChannelActions = (str) => _channels.getChannelActions(str);
111
123
  this.registerChannel = (val) => _channels.registerStream(val);
@@ -120,6 +132,7 @@ class SpyneApplication {
120
132
  window.Spyne = {version};
121
133
  }
122
134
 
135
+ sanitizeHTMLConfigure(SpyneAppProperties.config);
123
136
 
124
137
  }
125
138