aurelia-bootstrap
Version:
Bootstrap components written in Aurelia.
131 lines (102 loc) • 4 kB
JavaScript
/* */
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;
}
});