parent
a22ac3edd2
commit
f2d3f1eeb7
@ -0,0 +1,25 @@ |
|||||||
|
export class Tag { |
||||||
|
triggers: string[] = []; |
||||||
|
tagName: string; |
||||||
|
filterType: TagFilterType; |
||||||
|
|
||||||
|
constructor(triggers: string[], tagName: string, filterType: TagFilterType) { |
||||||
|
let trigger: string; for (trigger of triggers) { |
||||||
|
this.triggers.push( |
||||||
|
trigger.trim().startsWith("-") ? trigger.trim() : `-${trigger.trim()}` |
||||||
|
); |
||||||
|
} |
||||||
|
|
||||||
|
this.tagName = tagName; |
||||||
|
this.filterType = filterType; |
||||||
|
}; |
||||||
|
|
||||||
|
public addTrigger(trigger: string): Tag { |
||||||
|
this.triggers.push( |
||||||
|
trigger.trim().startsWith("-") ? trigger.trim() : `-${trigger.trim()}` |
||||||
|
); |
||||||
|
return this; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
type TagFilterType = "append" | "toggle" | "listAppend"; |
@ -0,0 +1,63 @@ |
|||||||
|
import {Tag} from "./tag"; |
||||||
|
|
||||||
|
export {Tag}; |
||||||
|
export class TagFilter { |
||||||
|
tags: Tag[]; |
||||||
|
triggers: Map<String, String>; |
||||||
|
filterTypes: Map<String, TagFilterType>; |
||||||
|
|
||||||
|
constructor(tags: Tag[]) { |
||||||
|
this.tags = tags; |
||||||
|
this.triggers = new Map<String, String>(); |
||||||
|
this.filterTypes = new Map<String, TagFilterType>(); |
||||||
|
let tag: Tag; |
||||||
|
for (tag of this.tags) { |
||||||
|
let trigger: string; for (trigger of tag.triggers) { |
||||||
|
this.triggers.set(trigger, tag.tagName); |
||||||
|
} |
||||||
|
if (!this.filterTypes.has(tag.tagName)) {this.filterTypes.set(tag.tagName, tag.filterType);} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public test(text: string): object { |
||||||
|
var filtered: object = {}; |
||||||
|
var reading: string = null; |
||||||
|
var filterType: TagFilterType; |
||||||
|
var ticks = {}; |
||||||
|
|
||||||
|
let words = text.trim().split(/\s+/g); |
||||||
|
let word: string; for (word of words) { |
||||||
|
if (word.startsWith('-') && word.length > 1 && this.triggers.has(word.trim())) { |
||||||
|
filterType = this.filterTypes.get(this.triggers.get(word.trim())); |
||||||
|
reading = !['append', 'listAppend'].includes(filterType) ? null : word.trim(); |
||||||
|
if (!reading) {filtered[`${this.triggers.get(word.trim())}`] = true;} |
||||||
|
else {filtered[`${this.triggers.get(reading)}`] = filterType == 'append' ? '' : Array.isArray(filtered[`${this.triggers.get(reading)}`]) ? filtered[`${this.triggers.get(reading)}`] : [];} |
||||||
|
if (filterType == "listAppend") { |
||||||
|
if (ticks[`${this.triggers.get(word.trim())}`] && ticks[`${this.triggers.get(word.trim())}`].length) {filtered[`${this.triggers.get(word.trim())}`].push(ticks[`${this.triggers.get(word.trim())}`]);} |
||||||
|
ticks[`${this.triggers.get(word.trim())}`] = ''; |
||||||
|
} |
||||||
|
} |
||||||
|
else if (reading) { |
||||||
|
if (filterType == "listAppend") {ticks[`${this.triggers.get(reading)}`] += ` ${word}`;} |
||||||
|
else {filtered[`${this.triggers.get(reading)}`] = `${filtered[`${this.triggers.get(reading)}`]} ${word}`;} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
let tick: string; for (tick of Object.keys(ticks)) { |
||||||
|
if (ticks[tick].length) {filtered[tick].push(ticks[tick]);} |
||||||
|
} |
||||||
|
|
||||||
|
let key: string; for (key of Object.keys(filtered)) { |
||||||
|
if (typeof filtered[key] == 'string') {filtered[key] = filtered[key].trim();} |
||||||
|
else if (Array.isArray(filtered[key])) { |
||||||
|
let subkey: string; for (subkey of filtered[key]) { |
||||||
|
filtered[key][filtered[key].indexOf(subkey)] = subkey.trim(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return filtered; |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
type TagFilterType = "append" | "toggle" | "listAppend"; |
@ -0,0 +1,9 @@ |
|||||||
|
export declare class Tag { |
||||||
|
triggers: string[]; |
||||||
|
tagName: string; |
||||||
|
filterType: TagFilterType; |
||||||
|
constructor(triggers: string[], tagName: string, filterType: TagFilterType); |
||||||
|
addTrigger(trigger: string): Tag; |
||||||
|
} |
||||||
|
declare type TagFilterType = "append" | "toggle" | "listAppend"; |
||||||
|
export {}; |
@ -0,0 +1,21 @@ |
|||||||
|
"use strict"; |
||||||
|
Object.defineProperty(exports, "__esModule", { value: true }); |
||||||
|
exports.Tag = void 0; |
||||||
|
class Tag { |
||||||
|
constructor(triggers, tagName, filterType) { |
||||||
|
this.triggers = []; |
||||||
|
let trigger; |
||||||
|
for (trigger of triggers) { |
||||||
|
this.triggers.push(trigger.trim().startsWith("-") ? trigger.trim() : `-${trigger.trim()}`); |
||||||
|
} |
||||||
|
this.tagName = tagName; |
||||||
|
this.filterType = filterType; |
||||||
|
} |
||||||
|
; |
||||||
|
addTrigger(trigger) { |
||||||
|
this.triggers.push(trigger.trim().startsWith("-") ? trigger.trim() : `-${trigger.trim()}`); |
||||||
|
return this; |
||||||
|
} |
||||||
|
; |
||||||
|
} |
||||||
|
exports.Tag = Tag; |
@ -0,0 +1,10 @@ |
|||||||
|
import { Tag } from "./tag"; |
||||||
|
export { Tag }; |
||||||
|
export declare class TagFilter { |
||||||
|
tags: Tag[]; |
||||||
|
triggers: Map<String, String>; |
||||||
|
filterTypes: Map<String, TagFilterType>; |
||||||
|
constructor(tags: Tag[]); |
||||||
|
test(text: string): object; |
||||||
|
} |
||||||
|
declare type TagFilterType = "append" | "toggle" | "listAppend"; |
@ -0,0 +1,77 @@ |
|||||||
|
"use strict"; |
||||||
|
Object.defineProperty(exports, "__esModule", { value: true }); |
||||||
|
exports.TagFilter = exports.Tag = void 0; |
||||||
|
const tag_1 = require("./tag"); |
||||||
|
Object.defineProperty(exports, "Tag", { enumerable: true, get: function () { return tag_1.Tag; } }); |
||||||
|
class TagFilter { |
||||||
|
constructor(tags) { |
||||||
|
this.tags = tags; |
||||||
|
this.triggers = new Map(); |
||||||
|
this.filterTypes = new Map(); |
||||||
|
let tag; |
||||||
|
for (tag of this.tags) { |
||||||
|
let trigger; |
||||||
|
for (trigger of tag.triggers) { |
||||||
|
this.triggers.set(trigger, tag.tagName); |
||||||
|
} |
||||||
|
if (!this.filterTypes.has(tag.tagName)) { |
||||||
|
this.filterTypes.set(tag.tagName, tag.filterType); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
test(text) { |
||||||
|
var filtered = {}; |
||||||
|
var reading = null; |
||||||
|
var filterType; |
||||||
|
var ticks = {}; |
||||||
|
let words = text.trim().split(/\s+/g); |
||||||
|
let word; |
||||||
|
for (word of words) { |
||||||
|
if (word.startsWith('-') && word.length > 1 && this.triggers.has(word.trim())) { |
||||||
|
filterType = this.filterTypes.get(this.triggers.get(word.trim())); |
||||||
|
reading = !['append', 'listAppend'].includes(filterType) ? null : word.trim(); |
||||||
|
if (!reading) { |
||||||
|
filtered[`${this.triggers.get(word.trim())}`] = true; |
||||||
|
} |
||||||
|
else { |
||||||
|
filtered[`${this.triggers.get(reading)}`] = filterType == 'append' ? '' : Array.isArray(filtered[`${this.triggers.get(reading)}`]) ? filtered[`${this.triggers.get(reading)}`] : []; |
||||||
|
} |
||||||
|
if (filterType == "listAppend") { |
||||||
|
if (ticks[`${this.triggers.get(word.trim())}`] && ticks[`${this.triggers.get(word.trim())}`].length) { |
||||||
|
filtered[`${this.triggers.get(word.trim())}`].push(ticks[`${this.triggers.get(word.trim())}`]); |
||||||
|
} |
||||||
|
ticks[`${this.triggers.get(word.trim())}`] = ''; |
||||||
|
} |
||||||
|
} |
||||||
|
else if (reading) { |
||||||
|
if (filterType == "listAppend") { |
||||||
|
ticks[`${this.triggers.get(reading)}`] += ` ${word}`; |
||||||
|
} |
||||||
|
else { |
||||||
|
filtered[`${this.triggers.get(reading)}`] = `${filtered[`${this.triggers.get(reading)}`]} ${word}`; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
let tick; |
||||||
|
for (tick of Object.keys(ticks)) { |
||||||
|
if (ticks[tick].length) { |
||||||
|
filtered[tick].push(ticks[tick]); |
||||||
|
} |
||||||
|
} |
||||||
|
let key; |
||||||
|
for (key of Object.keys(filtered)) { |
||||||
|
if (typeof filtered[key] == 'string') { |
||||||
|
filtered[key] = filtered[key].trim(); |
||||||
|
} |
||||||
|
else if (Array.isArray(filtered[key])) { |
||||||
|
let subkey; |
||||||
|
for (subkey of filtered[key]) { |
||||||
|
filtered[key][filtered[key].indexOf(subkey)] = subkey.trim(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return filtered; |
||||||
|
} |
||||||
|
; |
||||||
|
} |
||||||
|
exports.TagFilter = TagFilter; |
@ -0,0 +1,11 @@ |
|||||||
|
{ |
||||||
|
"compilerOptions": { |
||||||
|
"module": "commonjs", |
||||||
|
"lib": ["es2017", "es6", "dom"], |
||||||
|
"target": "es2017", |
||||||
|
"declaration": true, |
||||||
|
"outDir": "./" |
||||||
|
}, |
||||||
|
"include": ["src/**/*"], |
||||||
|
"exclude": [] |
||||||
|
} |
Loading…
Reference in new issue