2016-09-21 11:44:11 +00:00
|
|
|
import * as plugins from './lik.plugins'
|
2016-07-21 22:16:45 +00:00
|
|
|
|
|
|
|
/**
|
2016-09-21 11:44:11 +00:00
|
|
|
* allows you to easily keep track of a bunch of strings
|
2016-07-21 22:16:45 +00:00
|
|
|
*/
|
2016-07-23 02:39:42 +00:00
|
|
|
|
2016-09-21 11:44:11 +00:00
|
|
|
export interface ITriggerFunction {
|
2017-08-27 18:01:06 +00:00
|
|
|
(): boolean
|
2016-07-23 02:39:42 +00:00
|
|
|
}
|
|
|
|
|
2016-07-21 22:16:45 +00:00
|
|
|
export class Stringmap {
|
2017-08-27 18:01:06 +00:00
|
|
|
private _stringArray: string[] = []
|
|
|
|
private _triggerUntilTrueFunctionArray: ITriggerFunction[] = []
|
|
|
|
constructor() { }
|
|
|
|
/**
|
|
|
|
* add a string to the Stringmap
|
|
|
|
*/
|
|
|
|
addString (stringArg: string) {
|
|
|
|
this._stringArray.push(stringArg)
|
|
|
|
this.notifyTrigger()
|
|
|
|
}
|
2016-07-21 22:16:45 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* like addString, but accepts an array of strings
|
|
|
|
*/
|
|
|
|
addStringArray (stringArrayArg: string[]) {
|
|
|
|
for (let stringItem of stringArrayArg) {
|
|
|
|
this.addString(stringItem)
|
2016-09-21 11:51:37 +00:00
|
|
|
}
|
2017-08-27 18:01:06 +00:00
|
|
|
}
|
2016-09-21 11:51:37 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* removes a string from Stringmap
|
|
|
|
*/
|
|
|
|
removeString (stringArg: string) {
|
|
|
|
for (let keyArg in this._stringArray) {
|
|
|
|
if (this._stringArray[ keyArg ] === stringArg) {
|
|
|
|
this._stringArray.splice(parseInt(keyArg), 1)
|
|
|
|
}
|
2016-07-23 02:39:42 +00:00
|
|
|
}
|
2017-08-27 18:01:06 +00:00
|
|
|
this.notifyTrigger()
|
|
|
|
}
|
2016-07-23 02:39:42 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* wipes the Stringmap
|
|
|
|
*/
|
|
|
|
wipe () {
|
|
|
|
this._stringArray = []
|
|
|
|
this.notifyTrigger()
|
|
|
|
}
|
2016-07-21 22:16:45 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* check if string is in Stringmap
|
|
|
|
*/
|
|
|
|
checkString (stringArg: string): boolean {
|
|
|
|
return this._stringArray.indexOf(stringArg) !== -1
|
|
|
|
}
|
2016-07-22 12:59:09 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* checks stringPresence with minimatch
|
|
|
|
*/
|
|
|
|
checkMinimatch (miniMatchStringArg: string): boolean {
|
|
|
|
let foundMatch: boolean = false
|
|
|
|
for (let stringItem of this._stringArray) {
|
|
|
|
if (plugins.minimatch(stringItem, miniMatchStringArg)) {
|
|
|
|
foundMatch = true
|
|
|
|
}
|
2016-09-21 11:44:11 +00:00
|
|
|
}
|
2017-08-27 18:01:06 +00:00
|
|
|
return foundMatch
|
|
|
|
}
|
2016-07-22 12:59:09 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* checks if the Stringmap is empty
|
|
|
|
*/
|
|
|
|
checkIsEmpty () {
|
|
|
|
return (this._stringArray.length === 0)
|
|
|
|
}
|
2016-07-23 02:39:42 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* gets a cloned copy of the current string Array
|
|
|
|
*/
|
|
|
|
getStringArray () {
|
|
|
|
return plugins.lodash.cloneDeep(this._stringArray)
|
|
|
|
}
|
2016-09-21 11:44:11 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
// trigger registering
|
2016-07-23 02:39:42 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* register a new trigger
|
|
|
|
*/
|
|
|
|
registerUntilTrue (functionArg: ITriggerFunction, doFunctionArg) {
|
|
|
|
this._triggerUntilTrueFunctionArray.push(
|
|
|
|
() => {
|
|
|
|
let result = functionArg()
|
|
|
|
if (result === true) {
|
|
|
|
doFunctionArg()
|
|
|
|
}
|
|
|
|
return result
|
|
|
|
}
|
|
|
|
)
|
|
|
|
this.notifyTrigger()
|
|
|
|
}
|
2017-09-21 20:54:22 +00:00
|
|
|
|
2017-08-27 18:01:06 +00:00
|
|
|
/**
|
|
|
|
* notifies triggers
|
|
|
|
*/
|
|
|
|
private notifyTrigger () {
|
|
|
|
let filteredArray = this._triggerUntilTrueFunctionArray.filter((functionArg) => {
|
|
|
|
return !functionArg()
|
|
|
|
})
|
|
|
|
this._triggerUntilTrueFunctionArray = filteredArray
|
|
|
|
}
|
2016-09-21 11:44:11 +00:00
|
|
|
|
|
|
|
}
|