Skip to content
Snippets Groups Projects
Commit 118c370f authored by Volker Schukai's avatar Volker Schukai :alien:
Browse files

#33

parent 437c7d19
No related branches found
No related tags found
No related merge requests found
...@@ -6,7 +6,8 @@ ...@@ -6,7 +6,8 @@
import {Monster} from '../namespace.js'; import {Monster} from '../namespace.js';
import {Base} from '../types/base.js'; import {Base} from '../types/base.js';
import {validateString, validatePrimitive, validateFunction, validateInteger} from '../types/validate.js'; import {getGlobal} from "../types/global.js";
import {validateString, validatePrimitive, validateFunction, validateInteger, validateObject} from '../types/validate.js';
import {isObject, isString, isArray} from '../types/is.js'; import {isObject, isString, isArray} from '../types/is.js';
import {ID} from '../types/id.js'; import {ID} from '../types/id.js';
import {clone} from "../util/clone.js"; import {clone} from "../util/clone.js";
...@@ -138,14 +139,24 @@ class Transformer extends Base { ...@@ -138,14 +139,24 @@ class Transformer extends Base {
* *
* @param {string} name * @param {string} name
* @param {function} callback * @param {function} callback
* @param {object} context
* @returns {Transformer} * @returns {Transformer}
* @throws {TypeError} value is not a string * @throws {TypeError} value is not a string
* @throws {TypeError} value is not a function * @throws {TypeError} value is not a function
*/ */
setCallback(name, callback) { setCallback(name, callback, context) {
validateString(name) validateString(name)
validateFunction(callback) validateFunction(callback)
this.callbacks.set(name, callback);
if(context!==undefined) {
validateObject(context);
}
this.callbacks.set(name, {
callback: callback,
context: context,
});
return this; return this;
} }
...@@ -297,18 +308,21 @@ function transform(value) { ...@@ -297,18 +308,21 @@ function transform(value) {
let callback; let callback;
let callbackName = args.shift(); let callbackName = args.shift();
let context = getGlobal();
if (isObject(value) && value.hasOwnProperty(callbackName)) { if (isObject(value) && value.hasOwnProperty(callbackName)) {
callback = value[callbackName]; callback = value[callbackName];
} else if (this.callbacks.has(callbackName)) { } else if (this.callbacks.has(callbackName)) {
callback = this.callbacks.get(callbackName); let s = this.callbacks.get(callbackName);
callback = s?.['callback'];
context = s?.['context'];
} else if (typeof window === 'object' && window.hasOwnProperty(callbackName)) { } else if (typeof window === 'object' && window.hasOwnProperty(callbackName)) {
callback = window[callbackName]; callback = window[callbackName];
} }
validateFunction(callback); validateFunction(callback);
args.unshift(value); args.unshift(value);
return callback(...args); return callback.call(context, ...args);
case 'plain': case 'plain':
case 'plaintext': case 'plaintext':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment