59 lines
1.8 KiB
JavaScript
59 lines
1.8 KiB
JavaScript
var CSSOM = {
|
|
/**
|
|
* Creates and configures a new CSSOM instance with the specified options.
|
|
*
|
|
* @param {Object} opts - Configuration options for the CSSOM instance
|
|
* @param {Object} [opts.globalObject] - Optional global object to be assigned to CSSOM objects prototype
|
|
* @returns {Object} A new CSSOM instance with the applied configuration
|
|
* @description
|
|
* This method creates a new instance of CSSOM and optionally
|
|
* configures CSSStyleSheet with a global object reference. When a globalObject is provided
|
|
* and CSSStyleSheet exists on the instance, it creates a new CSSStyleSheet constructor
|
|
* using a factory function and assigns the globalObject to its prototype's __globalObject property.
|
|
*/
|
|
setup: function (opts) {
|
|
var instance = Object.create(this);
|
|
if (opts.globalObject) {
|
|
if (instance.CSSStyleSheet) {
|
|
var factoryCSSStyleSheet = createFunctionFactory(instance.CSSStyleSheet);
|
|
var CSSStyleSheet = factoryCSSStyleSheet();
|
|
CSSStyleSheet.prototype.__globalObject = opts.globalObject;
|
|
|
|
instance.CSSStyleSheet = CSSStyleSheet;
|
|
}
|
|
}
|
|
return instance;
|
|
}
|
|
};
|
|
|
|
function createFunctionFactory(fn) {
|
|
return function() {
|
|
// Create a new function that delegates to the original
|
|
var newFn = function() {
|
|
return fn.apply(this, arguments);
|
|
};
|
|
|
|
// Copy prototype chain
|
|
Object.setPrototypeOf(newFn, Object.getPrototypeOf(fn));
|
|
|
|
// Copy own properties
|
|
for (var key in fn) {
|
|
if (Object.prototype.hasOwnProperty.call(fn, key)) {
|
|
newFn[key] = fn[key];
|
|
}
|
|
}
|
|
|
|
// Clone the .prototype object for constructor-like behavior
|
|
if (fn.prototype) {
|
|
newFn.prototype = Object.create(fn.prototype);
|
|
}
|
|
|
|
return newFn;
|
|
};
|
|
}
|
|
|
|
//.CommonJS
|
|
module.exports = CSSOM;
|
|
///CommonJS
|
|
|