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.
- package/.eslintignore +2 -0
- package/.eslintrc.js +4 -3
- package/.travis.yml +24 -11
- package/karma.conf.js +77 -87
- package/lib/spyne.esm.js +15 -0
- package/lib/spyne.esm.js.map +1 -0
- package/lib/spyne.js +248 -248
- package/lib/spyne.umd.js +3 -0
- package/lib/spyne.umd.js.LICENSE.txt +16 -0
- package/package.json +48 -27
- package/rollup.config.js +26 -0
- package/src/spyne/channels/channel-fetch-class.js +39 -43
- package/src/spyne/channels/channel-payload-class.js +61 -74
- package/src/spyne/channels/channel-proxy.js +25 -26
- package/src/spyne/channels/channel.js +141 -149
- package/src/spyne/channels/channels-config.js +46 -47
- package/src/spyne/channels/channels-map.js +61 -65
- package/src/spyne/channels/spyne-channel-lifecycle.js +12 -12
- package/src/spyne/channels/spyne-channel-route.js +241 -250
- package/src/spyne/channels/spyne-channel-ui.js +213 -75
- package/src/spyne/channels/spyne-channel-window.js +157 -157
- package/src/spyne/spyne-app.js +32 -19
- package/src/spyne/spyne-plugins.js +55 -70
- package/src/spyne/spyne.js +23 -23
- package/src/spyne/utils/channel-config-validator.js +10 -10
- package/src/spyne/utils/channel-fetch-util.js +72 -55
- package/src/spyne/utils/channel-payload-filter.js +89 -100
- package/src/spyne/utils/deep-merge.js +31 -29
- package/src/spyne/utils/frp-tools.js +108 -92
- package/src/spyne/utils/gc.js +6 -6
- package/src/spyne/utils/mixins/base-core-mixins.js +17 -15
- package/src/spyne/utils/mixins/base-streams-mixins.js +9 -9
- package/src/spyne/utils/route-channel-updater.js +23 -29
- package/src/spyne/utils/safe-clone.js +40 -58
- package/src/spyne/utils/sanitize-html.js +35 -0
- package/src/spyne/utils/security-policy.js +11 -0
- package/src/spyne/utils/spyne-app-properties.js +110 -114
- package/src/spyne/utils/spyne-logger.js +4 -11
- package/src/spyne/utils/spyne-plugins-methods.js +38 -63
- package/src/spyne/utils/spyne-trait.js +33 -33
- package/src/spyne/utils/spyne-utils-channel-route-url.js +229 -153
- package/src/spyne/utils/spyne-utils-channel-route.js +128 -138
- package/src/spyne/utils/spyne-utils-channel-window.js +39 -39
- package/src/spyne/utils/viewstream-animations.js +12 -12
- package/src/spyne/utils/viewstream-observables.js +45 -45
- package/src/spyne/views/dom-element-template.js +111 -114
- package/src/spyne/views/dom-element.js +82 -84
- package/src/spyne/views/view-stream-broadcaster.js +66 -62
- package/src/spyne/views/view-stream-element.js +105 -106
- package/src/spyne/views/view-stream-payload.js +25 -27
- package/src/spyne/views/view-stream-selector.js +157 -163
- package/src/spyne/views/view-stream.js +416 -640
- package/src/tests/channels/channel-dom.test.js +15 -15
- package/src/tests/channels/channel-fetch.test.js +51 -62
- package/src/tests/channels/channel-payload-class.test.js +50 -63
- package/src/tests/channels/channel-payload-filter.test.js +133 -193
- package/src/tests/channels/channel-route.test.js +102 -112
- package/src/tests/channels/channel-stream-item.test.js +19 -19
- package/src/tests/channels/channel-ui.test.js +15 -27
- package/src/tests/channels/channel-util-dom.test.js +31 -31
- package/src/tests/channels/channel.test.js +20 -25
- package/src/tests/channels/route-utils.test.js +61 -66
- package/src/tests/channels/url-utils.test.js +151 -151
- package/src/tests/channels/view-stream-broadcaster.test.js +7 -7
- package/src/tests/import.test.js +5 -5
- package/src/tests/index.js +6 -7
- package/src/tests/index.test.js +6 -8
- package/src/tests/mocks/channel-payload-data.js +218 -220
- package/src/tests/mocks/enhancer.test.js +5 -5
- package/src/tests/mocks/payload-ui.js +87 -90
- package/src/tests/mocks/routes-data.js +264 -266
- package/src/tests/mocks/spyne-docs.mocks.js +3 -3
- package/src/tests/mocks/template-renderer.mocks.js +47 -47
- package/src/tests/mocks/utils-data.js +78 -79
- package/src/tests/mocks/viewstream-internal-payload.mocks.js +50 -50
- package/src/tests/mocks/window-events-arr.js +1 -1
- package/src/tests/package-json.spec.test.js +9 -0
- package/src/tests/spyne-app.test.js +15 -18
- package/src/tests/spyne-plugin.test.js +16 -20
- package/src/tests/utils/channel-action-filter.test.js +84 -86
- package/src/tests/utils/channel-data-packet-generator.unused.js +62 -86
- package/src/tests/utils/channel-fetch-util.test.js +64 -66
- package/src/tests/utils/frp-tools.test.js +19 -19
- package/src/tests/utils/plugins-methods.test.js +31 -55
- package/src/tests/utils/security.test.js +10 -0
- package/src/tests/utils/spyne-app-properties.test.js +4 -8
- package/src/tests/views/dom-el-selectors.test.js +112 -119
- package/src/tests/views/dom-el-template-proxy.test.js +7 -0
- package/src/tests/views/dom-el-template.test.js +186 -156
- package/src/tests/views/dom-el.test.js +58 -56
- package/src/tests/views/view-stream-enhancer-loader.test.js +2 -2
- package/src/tests/views/view-stream-enhancer.test.js +11 -11
- package/src/tests/views/view-stream.test.js +22 -33
- package/webpack.config.js +76 -67
- package/docs/-_%20Solves%20equations%20of%20the%20form%20a%20_%20x%20=%20b.html +0 -487
- package/docs/DomItem.html +0 -298
- package/docs/DomItem_DomItem.html +0 -314
- package/docs/ViewStream.html +0 -2249
- package/docs/ViewStream_ViewStream.html +0 -503
- package/docs/custom/css/jsdoc-viewstream.css +0 -377
- package/docs/custom/layout.tmpl +0 -47
- package/docs/dom-item.js.html +0 -213
- package/docs/fonts/OpenSans-Bold-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Bold-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Bold-webfont.woff +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-BoldItalic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-BoldItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Italic-webfont.svg +0 -1830
- package/docs/fonts/OpenSans-Italic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Light-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Light-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Light-webfont.woff +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.eot +0 -0
- package/docs/fonts/OpenSans-LightItalic-webfont.svg +0 -1835
- package/docs/fonts/OpenSans-LightItalic-webfont.woff +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.eot +0 -0
- package/docs/fonts/OpenSans-Regular-webfont.svg +0 -1831
- package/docs/fonts/OpenSans-Regular-webfont.woff +0 -0
- package/docs/global.html +0 -548
- package/docs/index-custom.html +0 -79
- package/docs/index.html +0 -82
- package/docs/jsdoc.config.json +0 -22
- package/docs/scripts/linenumber.js +0 -25
- package/docs/scripts/prettify/Apache-License-2.0.txt +0 -202
- package/docs/scripts/prettify/lang-css.js +0 -2
- package/docs/scripts/prettify/prettify.js +0 -28
- package/docs/styles/jsdoc-default.css +0 -358
- package/docs/styles/prettify-jsdoc.css +0 -111
- package/docs/styles/prettify-tomorrow.css +0 -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=
|
|
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
|
-
|
|
47
|
-
|
|
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
|
-
|
|
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
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
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
|
-
|
|
69
|
-
|
|
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
|
-
|
|
76
|
-
|
|
77
|
-
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window)
|
|
85
|
-
|
|
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
|
-
|
|
91
|
-
const orientationStr = '(orientation: portrait)'
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
['innerWidth', 'innerHeight', 'outerWidth', 'outerHeight'], window)
|
|
95
|
-
payload
|
|
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
|
-
|
|
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
|
-
|
|
104
|
-
|
|
105
|
-
|
|
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('
|
|
105
|
+
return SpyneUtilsChannelWindow.createDomObservableFromEvent('wheel',
|
|
113
106
|
SpyneChannelWindow.getMouseWheelMapFn.bind(this))
|
|
114
|
-
|
|
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
|
-
|
|
124
|
-
|
|
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
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
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
|
|
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
|
|
158
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
182
|
+
const obs$Arr = config.events
|
|
195
183
|
|
|
196
184
|
const addWindowEventToArr = str => {
|
|
197
|
-
|
|
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
|
|
197
|
+
config.listenForMediaQueries = checkIfObjIsNotEmptyOrNil(
|
|
210
198
|
config.mediaQueries) || checkIfObjIsNotEmptyOrNil(
|
|
211
|
-
|
|
199
|
+
config.mediaQueries)
|
|
212
200
|
|
|
213
201
|
// =========================================
|
|
214
202
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
257
|
-
//console.log("ARR IS ",{arr});
|
|
258
|
-
|
|
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
|
-
'
|
|
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
|
-
|
|
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
|
-
|
|
343
|
-
config = config || {};
|
|
344
|
-
config = deepMerge(this.domChannelConfig, config);
|
|
348
|
+
scrollElement = scrollElement || el
|
|
345
349
|
|
|
346
|
-
|
|
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
|
-
|
|
353
|
-
|
|
354
|
-
|
|
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
|
}
|
package/src/spyne/spyne-app.js
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
|
-
import {ChannelsMap} from './channels/channels-map'
|
|
2
|
-
import {ViewStream} from './views/view-stream'
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
38
|
-
|
|
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.
|
|
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:
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|