-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
1f2e67f
commit 78c6240
Showing
17 changed files
with
484 additions
and
123 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
72 changes: 72 additions & 0 deletions
72
packages/pos/simulator/plugins/app/includes/eventCollector.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
/** | ||
* This file overrides the default add/remove event listeners to collect possible loose ones | ||
* when unlisten them when the current app closes. | ||
*/ | ||
|
||
export default AppManager => { | ||
const originalAddEventListener = EventTarget.prototype.addEventListener; | ||
const originalRemoveEventListener = EventTarget.prototype.removeEventListener; | ||
|
||
EventTarget.prototype.addEventListener = function addEventListener( | ||
type, | ||
fn, | ||
capture, | ||
) { | ||
originalAddEventListener.call(this, type, fn, capture); | ||
|
||
const currentApp = AppManager.getCurrentApp(); | ||
|
||
/** Only collect events if there's an app running */ | ||
if (currentApp && currentApp.runtime) { | ||
const targetConstructor = this.constructor.name; | ||
|
||
if ( | ||
targetConstructor === 'Window' || | ||
targetConstructor === 'HTMLDocument' | ||
) { | ||
const { collectedEvents } = currentApp.runtime; | ||
if (!collectedEvents[targetConstructor]) { | ||
collectedEvents[targetConstructor] = {}; | ||
} | ||
|
||
if (!collectedEvents[targetConstructor][type]) { | ||
collectedEvents[targetConstructor][type] = []; | ||
} | ||
|
||
collectedEvents[targetConstructor][type].push(fn); | ||
} | ||
} | ||
}; | ||
|
||
EventTarget.prototype.removeEventListener = function addEventListener( | ||
type, | ||
fn, | ||
) { | ||
originalRemoveEventListener.call(this, type, fn); | ||
|
||
const currentApp = AppManager.getCurrentApp(); | ||
|
||
/** Only remove collected events if an app is opened */ | ||
if (currentApp && currentApp.runtime) { | ||
const targetConstructor = this.constructor.name; | ||
|
||
if ( | ||
targetConstructor === 'Window' || | ||
targetConstructor === 'HTMLDocument' | ||
) { | ||
const { collectedEvents } = currentApp.runtime; | ||
if (collectedEvents[targetConstructor][type]) { | ||
const fnIndex = collectedEvents[targetConstructor][type].indexOf(fn); | ||
|
||
if (fnIndex > -1) { | ||
collectedEvents[targetConstructor][type].splice(fnIndex, 1); | ||
} | ||
|
||
if (!collectedEvents[targetConstructor][type].length) { | ||
delete collectedEvents[targetConstructor][type]; | ||
} | ||
} | ||
} | ||
} | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
export default Registry => { | ||
const initDate = new Date(); | ||
|
||
const time = { | ||
hours: String(initDate.getHours()).padStart(2, '0'), | ||
minutes: String(initDate.getMinutes()).padStart(2, '0'), | ||
}; | ||
|
||
Registry.getCurrentTime = () => time; | ||
|
||
const timer = () => { | ||
let hours = Number.parseInt(time.hours, 10); | ||
let minutes = Number.parseInt(time.minutes, 10); | ||
|
||
minutes++; | ||
if (minutes === 60) { | ||
hours++; | ||
if (hours === 24) { | ||
hours = 0; | ||
} | ||
minutes = 0; | ||
} | ||
|
||
time.hours = String(hours).padStart(2, '0'); | ||
time.minutes = String(minutes).padStart(2, '0'); | ||
|
||
Registry.fire('clock', time.hours, time.minutes); | ||
|
||
return timer; | ||
}; | ||
|
||
setTimeout( | ||
() => setInterval(timer(), 60000), | ||
(60 - initDate.getSeconds()) * 1000, | ||
); | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,46 @@ | ||
import { log } from '../../../libs/utils.js'; | ||
|
||
export default Registry => { | ||
/** Data */ | ||
Registry.get = keyPath => { | ||
if (keyPath === undefined) { | ||
return Registry._data; | ||
} | ||
|
||
const keys = keyPath.replace(/\[(\d+)\]/g, '.$1').split('.'); | ||
let value = Registry._data[keys[0]]; | ||
for (let i = 1; i < keys.length; i++) { | ||
value = value[keys[i]]; | ||
} | ||
return value; | ||
}; | ||
|
||
Registry.set = (keyPath, value, fireSignal = true) => { | ||
if (keyPath === undefined) { | ||
return; | ||
} | ||
|
||
const keys = keyPath.replace(/\[(\d+)\]/g, '.$1').split('.'); | ||
const lastKey = keys.pop(); | ||
|
||
if (__DEBUG_LVL__ >= 2 && __BROWSER__) { | ||
log(`"${keyPath}" = ${JSON.stringify(value)}`); | ||
} | ||
|
||
// If not a nested keyPath | ||
if (keys[0] === undefined) { | ||
Registry._data[lastKey] = value; | ||
return; | ||
} | ||
|
||
let object = Registry._data[keys[0]]; | ||
for (let i = 1; i < keys.length; i++) { | ||
object = object[keys[i]]; | ||
} | ||
object[lastKey] = value; | ||
|
||
if (fireSignal) { | ||
Registry.settingsChanged(Registry._data); | ||
} | ||
}; | ||
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,62 +1,32 @@ | ||
/** | ||
* This file is the boilerplate for the simulator core driver; | ||
* */ | ||
import { log } from '../../libs/utils.js'; | ||
import Signal from '../../libs/signal.js'; | ||
import extendDriver from '../../../drivers/extend.js'; | ||
|
||
const RegistryManager = extendDriver({ | ||
_booted: false, | ||
_data: {}, | ||
}); | ||
import initClock from './includes/clock.js'; | ||
import initData from './includes/data.js'; | ||
|
||
Signal.register(RegistryManager, ['settingsChanged']); | ||
const RegistryManager = extendDriver( | ||
{ | ||
_version: '2.5.0', | ||
_clock: { hours: null, min: null }, | ||
_booted: false, | ||
_data: {}, | ||
}, | ||
initClock, | ||
initData, | ||
); | ||
|
||
RegistryManager.setBoot = isBooted => { | ||
if (RegistryManager._booted) return; | ||
RegistryManager._booted = isBooted; | ||
}; | ||
|
||
RegistryManager.get = keyPath => { | ||
if (keyPath === undefined) { | ||
return RegistryManager._data; | ||
} | ||
|
||
const keys = keyPath.replace(/\[(\d+)\]/g, '.$1').split('.'); | ||
let value = RegistryManager._data[keys[0]]; | ||
for (let i = 1; i < keys.length; i++) { | ||
value = value[keys[i]]; | ||
} | ||
return value; | ||
}; | ||
|
||
RegistryManager.set = (keyPath, value, fireSignal = true) => { | ||
if (keyPath === undefined) { | ||
return; | ||
} | ||
Signal.register(RegistryManager, ['settingsChanged', 'clock']); | ||
|
||
const keys = keyPath.replace(/\[(\d+)\]/g, '.$1').split('.'); | ||
const lastKey = keys.pop(); | ||
|
||
if (__DEBUG_LVL__ >= 2 && __BROWSER__) { | ||
log(`"${keyPath}" = ${JSON.stringify(value)}`); | ||
} | ||
|
||
// If not a nested keyPath | ||
if (keys[0] === undefined) { | ||
RegistryManager._data[lastKey] = value; | ||
RegistryManager.setBoot = isBooted => { | ||
if (RegistryManager._booted) { | ||
return; | ||
} | ||
|
||
let object = RegistryManager._data[keys[0]]; | ||
for (let i = 1; i < keys.length; i++) { | ||
object = object[keys[i]]; | ||
} | ||
object[lastKey] = value; | ||
|
||
if (fireSignal) { | ||
RegistryManager.settingsChanged(RegistryManager._data); | ||
} | ||
RegistryManager._booted = isBooted; | ||
}; | ||
|
||
RegistryManager.getVersion = () => RegistryManager._version; | ||
|
||
export default RegistryManager; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.