| /* |
| MIT License http://www.opensource.org/licenses/mit-license.php |
| Author Tobias Koppers @sokra |
| */ |
| var path = require('path'); |
| |
| var loaderUtils = require("loader-utils"); |
| var validateOptions = require('schema-utils'); |
| |
| module.exports = function () {}; |
| |
| module.exports.pitch = function (request) { |
| if (this.cacheable) this.cacheable(); |
| |
| var options = loaderUtils.getOptions(this) || {}; |
| |
| validateOptions(require('./options.json'), options, 'Style Loader (Useable)'); |
| |
| options.hmr = typeof options.hmr === 'undefined' ? true : options.hmr; |
| |
| // The variable is needed, because the function should be inlined. |
| // If is just stored it in options, JSON.stringify will quote |
| // the function and it would be just a string at runtime |
| var insertInto; |
| |
| if (typeof options.insertInto === "function") { |
| insertInto = options.insertInto.toString(); |
| } |
| |
| // We need to check if it a string, or variable will be "undefined" |
| // and the loader crashes |
| if (typeof options.insertInto === "string") { |
| insertInto = '"' + options.insertInto + '"'; |
| } |
| |
| var hmr = [ |
| // Hot Module Replacement |
| "if(module.hot) {", |
| " var lastRefs = module.hot.data && module.hot.data.refs || 0;", |
| "", |
| " if(lastRefs) {", |
| " exports.ref();", |
| " if(!content.locals) {", |
| " refs = lastRefs;", |
| " }", |
| " }", |
| "", |
| " if(!content.locals) {", |
| " module.hot.accept();", |
| " }", |
| "", |
| " module.hot.dispose(function(data) {", |
| " data.refs = content.locals ? 0 : refs;", |
| "", |
| " if(dispose) {", |
| " dispose();", |
| " }", |
| " });", |
| "}" |
| ].join("\n"); |
| |
| return [ |
| "var refs = 0;", |
| "var dispose;", |
| "var content = require(" + loaderUtils.stringifyRequest(this, "!!" + request) + ");", |
| "var options = " + JSON.stringify(options) + ";", |
| "options.insertInto = " + insertInto + ";", |
| "", |
| "if(typeof content === 'string') content = [[module.id, content, '']];", |
| // Export CSS Modules |
| "if(content.locals) exports.locals = content.locals;", |
| "", |
| "exports.use = exports.ref = function() {", |
| " if(!(refs++)) {", |
| " dispose = require(" + loaderUtils.stringifyRequest(this, "!" + path.join(__dirname, "lib", "addStyles.js")) + ")(content, options);", |
| " }", |
| "", |
| " return exports;", |
| "};", |
| "", |
| "exports.unuse = exports.unref = function() {", |
| " if(refs > 0 && !(--refs)) {", |
| " dispose();", |
| " dispose = null;", |
| " }", |
| "};", |
| options.hmr ? hmr : "" |
| ].join("\n"); |
| }; |