| Index: lib/snippets.js |
| =================================================================== |
| --- a/lib/snippets.js |
| +++ b/lib/snippets.js |
| @@ -16,53 +16,69 @@ |
| */ |
| "use strict"; |
| /** |
| * @fileOverview Snippets implementation. |
| */ |
| +const {EventEmitter} = require("./events"); |
| const {Filter} = require("./filterClasses"); |
| const singleCharacterEscapes = new Map([ |
| ["n", "\n"], ["r", "\r"], ["t", "\t"] |
| ]); |
| let filters = new Set(); |
| /** |
| * Container for snippet filters |
| * @class |
| */ |
| -let Snippets = { |
| +let Snippets = Object.assign(new EventEmitter(), { |
| /** |
| * Removes all known filters |
| */ |
| clear() |
| { |
| + if (filters.size == 0) |
| + return; |
| + |
| filters.clear(); |
| + |
| + this.emit("snippets.filtersCleared"); |
| }, |
| /** |
| * Add a new snippet filter |
| * @param {SnippetFilter} filter |
| */ |
| add(filter) |
| { |
| + let {size} = filters; |
| + |
| filters.add(filter.text); |
| + |
| + if (size != filters.size) |
| + this.emit("snippets.filterAdded", filter); |
| }, |
| /** |
| * Removes a snippet filter |
| * @param {SnippetFilter} filter |
| */ |
| remove(filter) |
| { |
| + let {size} = filters; |
| + |
| filters.delete(filter.text); |
| + |
| + if (size != filters.size) |
| + this.emit("snippets.filterRemoved", filter); |
| }, |
| /** |
| * Returns a list of all scripts active on a particular domain |
| * @param {string} domain |
| * @return {string[]} |
| */ |
| getScriptsForDomain(domain) |
| @@ -71,17 +87,17 @@ |
| for (let text of filters) |
| { |
| let filter = Filter.fromText(text); |
| if (filter.isActiveOnDomain(domain)) |
| result.push(filter.script); |
| } |
| return result; |
| } |
| -}; |
| +}); |
| exports.Snippets = Snippets; |
| /** |
| * Parses a script and returns a list of all its commands and their arguments |
| * @param {string} script |
| * @return {Array.<string[]>} |
| */ |