123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204 |
- /*! sass.js - v0.11.1 (f286436) - built 2019-10-20
- providing libsass 3.6.2 (4da7c4bd)
- via emscripten 1.38.31 (040e49a)
- */
- (function (root, factory) {
- "use strict";
- if (typeof define === "function" && define.amd) {
- define([], factory);
- } else if (typeof exports === "object") {
- module.exports = factory();
- } else {
- root.Sass = factory();
- }
- }(this, function () {/*global document*/
- // identify the path sass.js is located at in case we're loaded by a simple
- // <script src="path/to/sass.js"></script>
- // this path can be used to identify the location of
- // * sass.worker.js from sass.js
- // * libsass.js.mem from sass.sync.js
- // see https://github.com/medialize/sass.js/pull/32#issuecomment-103142214
- // see https://github.com/medialize/sass.js/issues/33
- var SASSJS_RELATIVE_PATH = (function () {
- "use strict";
- // in Node things are rather simple
- var hasDir = typeof __dirname !== "undefined";
- if (hasDir) {
- return __dirname;
- }
- // we can only run this test in the browser,
- // so make sure we actually have a DOM to work with.
- if (typeof document === "undefined" || !document.getElementsByTagName) {
- return null;
- }
- // http://www.2ality.com/2014/05/current-script.html
- var currentScript = document.currentScript || (function () {
- var scripts = document.getElementsByTagName("script");
- return scripts[scripts.length - 1];
- })();
- var path = currentScript && currentScript.src;
- if (!path) {
- return null;
- }
- // [worker] make sure we're not running in some concatenated thing
- if (path.slice(-8) === "/sass.js") {
- return path.slice(0, -8);
- }
- // [sync] make sure we're not running in some concatenated thing
- if (path.slice(-13) === "/sass.sync.js") {
- return path.slice(0, -13);
- }
- return null;
- })() || ".";
- /*global Worker, SASSJS_RELATIVE_PATH*/
- "use strict";
- var noop = function () {
- };
- var slice = [].slice;
- // defined upon first Sass.initialize() call
- var globalWorkerUrl;
- function Sass(workerUrl) {
- if (!workerUrl && !globalWorkerUrl) {
- /*jshint laxbreak:true */
- throw new Error(
- "Sass needs to be initialized with the URL of sass.worker.js - "
- + "either via Sass.setWorkerUrl(url) or by new Sass(url)"
- );
- /*jshint laxbreak:false */
- }
- if (!globalWorkerUrl) {
- globalWorkerUrl = workerUrl;
- }
- // bind all functions
- // we're doing this because we used to have a single hard-wired instance that allowed
- // [].map(Sass.removeFile) and we need to maintain that for now (at least until 1.0.0)
- for (var key in this) {
- if (typeof this[key] === "function") {
- this[key] = this[key].bind(this);
- }
- }
- this._callbacks = {};
- this._worker = new Worker(workerUrl || globalWorkerUrl);
- this._worker.addEventListener("message", this._handleWorkerMessage, false);
- }
- // allow setting the workerUrl before the first Sass instance is initialized,
- // where registering the global workerUrl would've happened automatically
- Sass.setWorkerUrl = function (workerUrl) {
- globalWorkerUrl = workerUrl;
- };
- Sass.style = {
- nested: 0,
- expanded: 1,
- compact: 2,
- compressed: 3
- };
- Sass.comments = {
- "none": 0,
- "default": 1
- };
- Sass.prototype = {
- style: Sass.style,
- comments: Sass.comments,
- destroy: function () {
- this._worker && this._worker.terminate();
- this._worker = null;
- this._callbacks = {};
- this._importer = null;
- },
- _handleWorkerMessage: function (event) {
- if (event.data.command) {
- this[event.data.command](event.data.args);
- }
- this._callbacks[event.data.id] && this._callbacks[event.data.id](event.data.result);
- delete this._callbacks[event.data.id];
- },
- _dispatch: function (options, callback) {
- if (!this._worker) {
- throw new Error("Sass worker has been terminated");
- }
- options.id = "cb" + Date.now() + Math.random();
- this._callbacks[options.id] = callback;
- this._worker.postMessage(options);
- },
- _importerInit: function (args) {
- // importer API done callback pushing results
- // back to the worker
- var done = function done(result) {
- this._worker.postMessage({
- command: "_importerFinish",
- args: [result]
- });
- }.bind(this);
- try {
- this._importer(args[0], done);
- } catch (e) {
- done({error: e.message});
- throw e;
- }
- },
- importer: function (importerCallback, callback) {
- if (typeof importerCallback !== "function" && importerCallback !== null) {
- throw new Error("importer callback must either be a function or null");
- }
- // callback is executed in the main EventLoop
- this._importer = importerCallback;
- // tell worker to activate importer callback
- this._worker.postMessage({
- command: "importer",
- args: [Boolean(importerCallback)]
- });
- callback && callback();
- }
- };
- var commands = "writeFile readFile listFiles removeFile clearFiles lazyFiles preloadFiles options compile compileFile";
- commands.split(" ").forEach(function (command) {
- Sass.prototype[command] = function () {
- var callback = slice.call(arguments, -1)[0];
- var args = slice.call(arguments, 0, -1);
- if (typeof callback !== "function") {
- args.push(callback);
- callback = noop;
- }
- this._dispatch({
- command: command,
- args: args
- }, callback);
- };
- });
- // automatically set the workerUrl in case we're loaded by a simple
- // <script src="path/to/sass.js"></script>
- // see https://github.com/medialize/sass.js/pull/32#issuecomment-103142214
- Sass.setWorkerUrl(SASSJS_RELATIVE_PATH + "/sass.worker.js");
- return Sass;
- }));
|