UNPKG

aurelia-bootstrap

Version:
131 lines (102 loc) 4 kB
/* */ define(['exports', 'aurelia-templating', 'aurelia-loader', 'aurelia-dependency-injection', 'aurelia-path', 'aurelia-pal'], function (exports, _aureliaTemplating, _aureliaLoader, _aureliaDependencyInjection, _aureliaPath, _aureliaPal) { 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); exports._createCSSResource = _createCSSResource; function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var cssUrlMatcher = /url\((?!['"]data)([^)]+)\)/gi; function fixupCSSUrls(address, css) { if (typeof css !== 'string') { throw new Error('Failed loading required CSS file: ' + address); } return css.replace(cssUrlMatcher, function (match, p1) { var quote = p1.charAt(0); if (quote === '\'' || quote === '"') { p1 = p1.substr(1, p1.length - 2); } return 'url(\'' + (0, _aureliaPath.relativeToFile)(p1, address) + '\')'; }); } var CSSResource = function () { function CSSResource(address) { this.address = address; this._scoped = null; this._global = false; this._alreadyGloballyInjected = false; } CSSResource.prototype.initialize = function initialize(container, target) { this._scoped = new target(this); }; CSSResource.prototype.register = function register(registry, name) { if (name === 'scoped') { registry.registerViewEngineHooks(this._scoped); } else { this._global = true; } }; CSSResource.prototype.load = function load(container) { var _this = this; return container.get(_aureliaLoader.Loader).loadText(this.address).catch(function (err) { return null; }).then(function (text) { text = fixupCSSUrls(_this.address, text); _this._scoped.css = text; if (_this._global) { _this._alreadyGloballyInjected = true; _aureliaPal.DOM.injectStyles(text); } }); }; return CSSResource; }(); var CSSViewEngineHooks = function () { function CSSViewEngineHooks(owner) { this.owner = owner; this.css = null; } CSSViewEngineHooks.prototype.beforeCompile = function beforeCompile(content, resources, instruction) { if (instruction.targetShadowDOM) { _aureliaPal.DOM.injectStyles(this.css, content, true); } else if (_aureliaPal.FEATURE.scopedCSS) { var styleNode = _aureliaPal.DOM.injectStyles(this.css, content, true); styleNode.setAttribute('scoped', 'scoped'); } else if (!this.owner._alreadyGloballyInjected) { _aureliaPal.DOM.injectStyles(this.css); this.owner._alreadyGloballyInjected = true; } }; return CSSViewEngineHooks; }(); function _createCSSResource(address) { var _dec, _class; var ViewCSS = (_dec = (0, _aureliaTemplating.resource)(new CSSResource(address)), _dec(_class = function (_CSSViewEngineHooks) { _inherits(ViewCSS, _CSSViewEngineHooks); function ViewCSS() { return _possibleConstructorReturn(this, _CSSViewEngineHooks.apply(this, arguments)); } return ViewCSS; }(CSSViewEngineHooks)) || _class); return ViewCSS; } });