web-atoms-core
Version:
186 lines • 7.68 kB
JavaScript
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
(function (factory) {
if (typeof module === "object" && typeof module.exports === "object") {
var v = factory(require, exports);
if (v !== undefined) module.exports = v;
}
else if (typeof define === "function" && define.amd) {
define(["require", "exports", "../../core/AtomBinder", "../../core/StringHelper", "../../di/TypeKey"], factory);
}
})(function (require, exports) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var AtomBinder_1 = require("../../core/AtomBinder");
var StringHelper_1 = require("../../core/StringHelper");
var TypeKey_1 = require("../../di/TypeKey");
var emptyPrototype = Object.getPrototypeOf({});
var AtomStyle = /** @class */ (function () {
function AtomStyle(styleSheet, parent, name) {
this.styleSheet = styleSheet;
this.parent = parent;
this.name = name;
this.defaults = {};
this.isBuilt = false;
this.init();
}
AtomStyle.prototype.getDefaultStyle = function (forKey) {
return this.defaults[TypeKey_1.TypeKey.get(forKey)];
};
AtomStyle.prototype.createNamedStyle = function (c, name) {
var style = this[name] = new (c)(this.styleSheet, this, this.name + "-" + name);
style.build();
return style;
};
AtomStyle.prototype.createStyle = function (tc, c, name) {
this.defaults = this.defaults || {};
var newStyle = new (c)(this.styleSheet, this, this.name + "-" + name);
var key = TypeKey_1.TypeKey.get(tc);
this.defaults[key] = newStyle;
newStyle.build();
return this[name] = newStyle;
};
AtomStyle.prototype.getBaseProperty = function (tc, name) {
var c = tc;
do {
c = Object.getPrototypeOf(c);
if (!c) {
throw new Error("No property descriptor found for " + name);
}
var pd = Object.getOwnPropertyDescriptor(c.prototype, name);
if (!pd) {
continue;
}
return pd.get.apply(this);
} while (true);
};
AtomStyle.prototype.toStyle = function (pairs) {
pairs = pairs || {};
var self = this;
for (var key in self) {
if (/^(isBuilt|constructor|name|parent|styleSheet|defaults|theme|styleElement)$/.test(key)) {
continue;
}
if (/^\_/.test(key)) {
continue;
}
var element = self[key];
// if it is nested style
if (element instanceof AtomStyle) {
pairs = element.toStyle(pairs);
continue;
}
// if it is class
var c = element;
if (c && typeof c === "object") {
if (emptyPrototype === Object.getPrototypeOf(c)) {
pairs = this.createStyleText(key, pairs, c);
}
continue;
}
}
return pairs;
};
AtomStyle.prototype.toFullName = function (n) {
return this.name + "-" + StringHelper_1.StringHelper.fromCamelToHyphen(n);
};
AtomStyle.prototype.build = function () {
if (this.isBuilt) {
return;
}
this.isBuilt = true;
this.styleSheet.pushUpdate();
var self = this;
var _loop_1 = function (key) {
if (/^(isBuilt|constructor|name|parent|styleSheet|defaults|theme|styleElement)$/.test(key)) {
return "continue";
}
if (/^\_\$\_/.test(key)) {
return "continue";
}
var element = self[key];
if (element instanceof AtomStyle) {
element.build();
return "continue";
}
var c = element;
if (c && typeof c === "object") {
if (emptyPrototype === Object.getPrototypeOf(c)) {
var pv_1 = AtomBinder_1.AtomBinder.getPropertyDescriptor(this_1, key);
if (!pv_1.get) {
return "continue";
}
var fullName_1 = this_1.toFullName(key);
var descriptor = {
get: function () {
return __assign(__assign({}, pv_1.get.apply(this)), { className: fullName_1, toString: function () { return fullName_1; } });
}, configurable: true, enumerable: true
};
Object.defineProperty(this_1, key, descriptor);
}
}
};
var this_1 = this;
for (var key in self) {
_loop_1(key);
}
this.isBuilt = true;
};
AtomStyle.prototype.init = function () {
// empty...
};
AtomStyle.prototype.registerExternalStyleSheet = function (s) {
var wa = this.styleSheet.app;
wa.installStyleSheet(s);
};
AtomStyle.prototype.createStyleText = function (name, pairs, styles) {
var styleList = [];
for (var key in styles) {
if (styles.hasOwnProperty(key)) {
if (/^(\_\$\_|className$|toString$)/i.test(key)) {
continue;
}
var element = styles[key];
if (element === undefined || element === null) {
continue;
}
var keyName = StringHelper_1.StringHelper.fromCamelToHyphen(key);
if (key === "subclasses") {
for (var subclassKey in element) {
if (element.hasOwnProperty(subclassKey)) {
var ve = element[subclassKey];
pairs = this.createStyleText("" + name + subclassKey, pairs, ve);
}
}
}
else {
if (element.url) {
styleList.push(keyName + ": url(" + element + ")");
}
else {
styleList.push(keyName + ": " + element);
}
}
}
}
var cname = StringHelper_1.StringHelper.fromCamelToHyphen(name);
var styleClassName = this.name + "-" + cname;
pairs[styleClassName] = "{ " + styleList.join(";\r\n") + " }";
// styles.className = styleClassName;
// styles.toString = () => styleClassName;
return pairs;
};
return AtomStyle;
}());
exports.AtomStyle = AtomStyle;
});
//# sourceMappingURL=AtomStyle.js.map