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 @@
import {Monster} from '../namespace.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 {ID} from '../types/id.js';
import {clone} from "../util/clone.js";
......@@ -138,14 +139,24 @@ class Transformer extends Base {
*
* @param {string} name
* @param {function} callback
* @param {object} context
* @returns {Transformer}
* @throws {TypeError} value is not a string
* @throws {TypeError} value is not a function
*/
setCallback(name, callback) {
setCallback(name, callback, context) {
validateString(name)
validateFunction(callback)
this.callbacks.set(name, callback);
if(context!==undefined) {
validateObject(context);
}
this.callbacks.set(name, {
callback: callback,
context: context,
});
return this;
}
......@@ -297,18 +308,21 @@ function transform(value) {
let callback;
let callbackName = args.shift();
let context = getGlobal();
if (isObject(value) && value.hasOwnProperty(callbackName)) {
callback = value[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)) {
callback = window[callbackName];
}
validateFunction(callback);
args.unshift(value);
return callback(...args);
return callback.call(context, ...args);
case 'plain':
case 'plaintext':
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment