| // copied from js-beautify/js/lib/beautify-css.js |
| // version: 1.11.0 |
| /* AUTO-GENERATED. DO NOT MODIFY. */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| |
| |
| CSS Beautifier |
| --------------- |
| |
| Written by Harutyun Amirjanyan, (amirjanyan@gmail.com) |
| |
| Based on code initially developed by: Einar Lielmanis, <einar@beautifier.io> |
| https://beautifier.io/ |
| |
| Usage: |
| css_beautify(source_text); |
| css_beautify(source_text, options); |
| |
| The options are (default in brackets): |
| indent_size (4) — indentation size, |
| indent_char (space) — character to indent with, |
| selector_separator_newline (true) - separate selectors with newline or |
| not (e.g. "a,\nbr" or "a, br") |
| end_with_newline (false) - end with a newline |
| newline_between_rules (true) - add a new line after every css rule |
| space_around_selector_separator (false) - ensure space around selector separators: |
| '>', '+', '~' (e.g. "a>b" -> "a > b") |
| e.g |
| |
| css_beautify(css_source_text, { |
| 'indent_size': 1, |
| 'indent_char': '\t', |
| 'selector_separator': ' ', |
| 'end_with_newline': false, |
| 'newline_between_rules': true, |
| 'space_around_selector_separator': true |
| }); |
| */ |
| |
| // http://www.w3.org/TR/CSS21/syndata.html#tokenization |
| // http://www.w3.org/TR/css3-syntax/ |
| |
| var legacy_beautify_css = |
| /******/ (function(modules) { // webpackBootstrap |
| /******/ // The module cache |
| /******/ var installedModules = {}; |
| /******/ |
| /******/ // The require function |
| /******/ function __webpack_require__(moduleId) { |
| /******/ |
| /******/ // Check if module is in cache |
| /******/ if(installedModules[moduleId]) { |
| /******/ return installedModules[moduleId].exports; |
| /******/ } |
| /******/ // Create a new module (and put it into the cache) |
| /******/ var module = installedModules[moduleId] = { |
| /******/ i: moduleId, |
| /******/ l: false, |
| /******/ exports: {} |
| /******/ }; |
| /******/ |
| /******/ // Execute the module function |
| /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); |
| /******/ |
| /******/ // Flag the module as loaded |
| /******/ module.l = true; |
| /******/ |
| /******/ // Return the exports of the module |
| /******/ return module.exports; |
| /******/ } |
| /******/ |
| /******/ |
| /******/ // expose the modules object (__webpack_modules__) |
| /******/ __webpack_require__.m = modules; |
| /******/ |
| /******/ // expose the module cache |
| /******/ __webpack_require__.c = installedModules; |
| /******/ |
| /******/ // define getter function for harmony exports |
| /******/ __webpack_require__.d = function(exports, name, getter) { |
| /******/ if(!__webpack_require__.o(exports, name)) { |
| /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); |
| /******/ } |
| /******/ }; |
| /******/ |
| /******/ // define __esModule on exports |
| /******/ __webpack_require__.r = function(exports) { |
| /******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { |
| /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); |
| /******/ } |
| /******/ Object.defineProperty(exports, '__esModule', { value: true }); |
| /******/ }; |
| /******/ |
| /******/ // create a fake namespace object |
| /******/ // mode & 1: value is a module id, require it |
| /******/ // mode & 2: merge all properties of value into the ns |
| /******/ // mode & 4: return value when already ns object |
| /******/ // mode & 8|1: behave like require |
| /******/ __webpack_require__.t = function(value, mode) { |
| /******/ if(mode & 1) value = __webpack_require__(value); |
| /******/ if(mode & 8) return value; |
| /******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; |
| /******/ var ns = Object.create(null); |
| /******/ __webpack_require__.r(ns); |
| /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); |
| /******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); |
| /******/ return ns; |
| /******/ }; |
| /******/ |
| /******/ // getDefaultExport function for compatibility with non-harmony modules |
| /******/ __webpack_require__.n = function(module) { |
| /******/ var getter = module && module.__esModule ? |
| /******/ function getDefault() { return module['default']; } : |
| /******/ function getModuleExports() { return module; }; |
| /******/ __webpack_require__.d(getter, 'a', getter); |
| /******/ return getter; |
| /******/ }; |
| /******/ |
| /******/ // Object.prototype.hasOwnProperty.call |
| /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; |
| /******/ |
| /******/ // __webpack_public_path__ |
| /******/ __webpack_require__.p = ""; |
| /******/ |
| /******/ |
| /******/ // Load entry module and return exports |
| /******/ return __webpack_require__(__webpack_require__.s = 15); |
| /******/ }) |
| /************************************************************************/ |
| /******/ ([ |
| /* 0 */, |
| /* 1 */, |
| /* 2 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| function OutputLine(parent) { |
| this.__parent = parent; |
| this.__character_count = 0; |
| // use indent_count as a marker for this.__lines that have preserved indentation |
| this.__indent_count = -1; |
| this.__alignment_count = 0; |
| this.__wrap_point_index = 0; |
| this.__wrap_point_character_count = 0; |
| this.__wrap_point_indent_count = -1; |
| this.__wrap_point_alignment_count = 0; |
| |
| this.__items = []; |
| } |
| |
| OutputLine.prototype.clone_empty = function() { |
| var line = new OutputLine(this.__parent); |
| line.set_indent(this.__indent_count, this.__alignment_count); |
| return line; |
| }; |
| |
| OutputLine.prototype.item = function(index) { |
| if (index < 0) { |
| return this.__items[this.__items.length + index]; |
| } else { |
| return this.__items[index]; |
| } |
| }; |
| |
| OutputLine.prototype.has_match = function(pattern) { |
| for (var lastCheckedOutput = this.__items.length - 1; lastCheckedOutput >= 0; lastCheckedOutput--) { |
| if (this.__items[lastCheckedOutput].match(pattern)) { |
| return true; |
| } |
| } |
| return false; |
| }; |
| |
| OutputLine.prototype.set_indent = function(indent, alignment) { |
| if (this.is_empty()) { |
| this.__indent_count = indent || 0; |
| this.__alignment_count = alignment || 0; |
| this.__character_count = this.__parent.get_indent_size(this.__indent_count, this.__alignment_count); |
| } |
| }; |
| |
| OutputLine.prototype._set_wrap_point = function() { |
| if (this.__parent.wrap_line_length) { |
| this.__wrap_point_index = this.__items.length; |
| this.__wrap_point_character_count = this.__character_count; |
| this.__wrap_point_indent_count = this.__parent.next_line.__indent_count; |
| this.__wrap_point_alignment_count = this.__parent.next_line.__alignment_count; |
| } |
| }; |
| |
| OutputLine.prototype._should_wrap = function() { |
| return this.__wrap_point_index && |
| this.__character_count > this.__parent.wrap_line_length && |
| this.__wrap_point_character_count > this.__parent.next_line.__character_count; |
| }; |
| |
| OutputLine.prototype._allow_wrap = function() { |
| if (this._should_wrap()) { |
| this.__parent.add_new_line(); |
| var next = this.__parent.current_line; |
| next.set_indent(this.__wrap_point_indent_count, this.__wrap_point_alignment_count); |
| next.__items = this.__items.slice(this.__wrap_point_index); |
| this.__items = this.__items.slice(0, this.__wrap_point_index); |
| |
| next.__character_count += this.__character_count - this.__wrap_point_character_count; |
| this.__character_count = this.__wrap_point_character_count; |
| |
| if (next.__items[0] === " ") { |
| next.__items.splice(0, 1); |
| next.__character_count -= 1; |
| } |
| return true; |
| } |
| return false; |
| }; |
| |
| OutputLine.prototype.is_empty = function() { |
| return this.__items.length === 0; |
| }; |
| |
| OutputLine.prototype.last = function() { |
| if (!this.is_empty()) { |
| return this.__items[this.__items.length - 1]; |
| } else { |
| return null; |
| } |
| }; |
| |
| OutputLine.prototype.push = function(item) { |
| this.__items.push(item); |
| var last_newline_index = item.lastIndexOf('\n'); |
| if (last_newline_index !== -1) { |
| this.__character_count = item.length - last_newline_index; |
| } else { |
| this.__character_count += item.length; |
| } |
| }; |
| |
| OutputLine.prototype.pop = function() { |
| var item = null; |
| if (!this.is_empty()) { |
| item = this.__items.pop(); |
| this.__character_count -= item.length; |
| } |
| return item; |
| }; |
| |
| |
| OutputLine.prototype._remove_indent = function() { |
| if (this.__indent_count > 0) { |
| this.__indent_count -= 1; |
| this.__character_count -= this.__parent.indent_size; |
| } |
| }; |
| |
| OutputLine.prototype._remove_wrap_indent = function() { |
| if (this.__wrap_point_indent_count > 0) { |
| this.__wrap_point_indent_count -= 1; |
| } |
| }; |
| OutputLine.prototype.trim = function() { |
| while (this.last() === ' ') { |
| this.__items.pop(); |
| this.__character_count -= 1; |
| } |
| }; |
| |
| OutputLine.prototype.toString = function() { |
| var result = ''; |
| if (this.is_empty()) { |
| if (this.__parent.indent_empty_lines) { |
| result = this.__parent.get_indent_string(this.__indent_count); |
| } |
| } else { |
| result = this.__parent.get_indent_string(this.__indent_count, this.__alignment_count); |
| result += this.__items.join(''); |
| } |
| return result; |
| }; |
| |
| function IndentStringCache(options, baseIndentString) { |
| this.__cache = ['']; |
| this.__indent_size = options.indent_size; |
| this.__indent_string = options.indent_char; |
| if (!options.indent_with_tabs) { |
| this.__indent_string = new Array(options.indent_size + 1).join(options.indent_char); |
| } |
| |
| // Set to null to continue support for auto detection of base indent |
| baseIndentString = baseIndentString || ''; |
| if (options.indent_level > 0) { |
| baseIndentString = new Array(options.indent_level + 1).join(this.__indent_string); |
| } |
| |
| this.__base_string = baseIndentString; |
| this.__base_string_length = baseIndentString.length; |
| } |
| |
| IndentStringCache.prototype.get_indent_size = function(indent, column) { |
| var result = this.__base_string_length; |
| column = column || 0; |
| if (indent < 0) { |
| result = 0; |
| } |
| result += indent * this.__indent_size; |
| result += column; |
| return result; |
| }; |
| |
| IndentStringCache.prototype.get_indent_string = function(indent_level, column) { |
| var result = this.__base_string; |
| column = column || 0; |
| if (indent_level < 0) { |
| indent_level = 0; |
| result = ''; |
| } |
| column += indent_level * this.__indent_size; |
| this.__ensure_cache(column); |
| result += this.__cache[column]; |
| return result; |
| }; |
| |
| IndentStringCache.prototype.__ensure_cache = function(column) { |
| while (column >= this.__cache.length) { |
| this.__add_column(); |
| } |
| }; |
| |
| IndentStringCache.prototype.__add_column = function() { |
| var column = this.__cache.length; |
| var indent = 0; |
| var result = ''; |
| if (this.__indent_size && column >= this.__indent_size) { |
| indent = Math.floor(column / this.__indent_size); |
| column -= indent * this.__indent_size; |
| result = new Array(indent + 1).join(this.__indent_string); |
| } |
| if (column) { |
| result += new Array(column + 1).join(' '); |
| } |
| |
| this.__cache.push(result); |
| }; |
| |
| function Output(options, baseIndentString) { |
| this.__indent_cache = new IndentStringCache(options, baseIndentString); |
| this.raw = false; |
| this._end_with_newline = options.end_with_newline; |
| this.indent_size = options.indent_size; |
| this.wrap_line_length = options.wrap_line_length; |
| this.indent_empty_lines = options.indent_empty_lines; |
| this.__lines = []; |
| this.previous_line = null; |
| this.current_line = null; |
| this.next_line = new OutputLine(this); |
| this.space_before_token = false; |
| this.non_breaking_space = false; |
| this.previous_token_wrapped = false; |
| // initialize |
| this.__add_outputline(); |
| } |
| |
| Output.prototype.__add_outputline = function() { |
| this.previous_line = this.current_line; |
| this.current_line = this.next_line.clone_empty(); |
| this.__lines.push(this.current_line); |
| }; |
| |
| Output.prototype.get_line_number = function() { |
| return this.__lines.length; |
| }; |
| |
| Output.prototype.get_indent_string = function(indent, column) { |
| return this.__indent_cache.get_indent_string(indent, column); |
| }; |
| |
| Output.prototype.get_indent_size = function(indent, column) { |
| return this.__indent_cache.get_indent_size(indent, column); |
| }; |
| |
| Output.prototype.is_empty = function() { |
| return !this.previous_line && this.current_line.is_empty(); |
| }; |
| |
| Output.prototype.add_new_line = function(force_newline) { |
| // never newline at the start of file |
| // otherwise, newline only if we didn't just add one or we're forced |
| if (this.is_empty() || |
| (!force_newline && this.just_added_newline())) { |
| return false; |
| } |
| |
| // if raw output is enabled, don't print additional newlines, |
| // but still return True as though you had |
| if (!this.raw) { |
| this.__add_outputline(); |
| } |
| return true; |
| }; |
| |
| Output.prototype.get_code = function(eol) { |
| this.trim(true); |
| |
| // handle some edge cases where the last tokens |
| // has text that ends with newline(s) |
| var last_item = this.current_line.pop(); |
| if (last_item) { |
| if (last_item[last_item.length - 1] === '\n') { |
| last_item = last_item.replace(/\n+$/g, ''); |
| } |
| this.current_line.push(last_item); |
| } |
| |
| if (this._end_with_newline) { |
| this.__add_outputline(); |
| } |
| |
| var sweet_code = this.__lines.join('\n'); |
| |
| if (eol !== '\n') { |
| sweet_code = sweet_code.replace(/[\n]/g, eol); |
| } |
| return sweet_code; |
| }; |
| |
| Output.prototype.set_wrap_point = function() { |
| this.current_line._set_wrap_point(); |
| }; |
| |
| Output.prototype.set_indent = function(indent, alignment) { |
| indent = indent || 0; |
| alignment = alignment || 0; |
| |
| // Next line stores alignment values |
| this.next_line.set_indent(indent, alignment); |
| |
| // Never indent your first output indent at the start of the file |
| if (this.__lines.length > 1) { |
| this.current_line.set_indent(indent, alignment); |
| return true; |
| } |
| |
| this.current_line.set_indent(); |
| return false; |
| }; |
| |
| Output.prototype.add_raw_token = function(token) { |
| for (var x = 0; x < token.newlines; x++) { |
| this.__add_outputline(); |
| } |
| this.current_line.set_indent(-1); |
| this.current_line.push(token.whitespace_before); |
| this.current_line.push(token.text); |
| this.space_before_token = false; |
| this.non_breaking_space = false; |
| this.previous_token_wrapped = false; |
| }; |
| |
| Output.prototype.add_token = function(printable_token) { |
| this.__add_space_before_token(); |
| this.current_line.push(printable_token); |
| this.space_before_token = false; |
| this.non_breaking_space = false; |
| this.previous_token_wrapped = this.current_line._allow_wrap(); |
| }; |
| |
| Output.prototype.__add_space_before_token = function() { |
| if (this.space_before_token && !this.just_added_newline()) { |
| if (!this.non_breaking_space) { |
| this.set_wrap_point(); |
| } |
| this.current_line.push(' '); |
| } |
| }; |
| |
| Output.prototype.remove_indent = function(index) { |
| var output_length = this.__lines.length; |
| while (index < output_length) { |
| this.__lines[index]._remove_indent(); |
| index++; |
| } |
| this.current_line._remove_wrap_indent(); |
| }; |
| |
| Output.prototype.trim = function(eat_newlines) { |
| eat_newlines = (eat_newlines === undefined) ? false : eat_newlines; |
| |
| this.current_line.trim(); |
| |
| while (eat_newlines && this.__lines.length > 1 && |
| this.current_line.is_empty()) { |
| this.__lines.pop(); |
| this.current_line = this.__lines[this.__lines.length - 1]; |
| this.current_line.trim(); |
| } |
| |
| this.previous_line = this.__lines.length > 1 ? |
| this.__lines[this.__lines.length - 2] : null; |
| }; |
| |
| Output.prototype.just_added_newline = function() { |
| return this.current_line.is_empty(); |
| }; |
| |
| Output.prototype.just_added_blankline = function() { |
| return this.is_empty() || |
| (this.current_line.is_empty() && this.previous_line.is_empty()); |
| }; |
| |
| Output.prototype.ensure_empty_line_above = function(starts_with, ends_with) { |
| var index = this.__lines.length - 2; |
| while (index >= 0) { |
| var potentialEmptyLine = this.__lines[index]; |
| if (potentialEmptyLine.is_empty()) { |
| break; |
| } else if (potentialEmptyLine.item(0).indexOf(starts_with) !== 0 && |
| potentialEmptyLine.item(-1) !== ends_with) { |
| this.__lines.splice(index + 1, 0, new OutputLine(this)); |
| this.previous_line = this.__lines[this.__lines.length - 2]; |
| break; |
| } |
| index--; |
| } |
| }; |
| |
| module.exports.Output = Output; |
| |
| |
| /***/ }), |
| /* 3 */, |
| /* 4 */, |
| /* 5 */, |
| /* 6 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| function Options(options, merge_child_field) { |
| this.raw_options = _mergeOpts(options, merge_child_field); |
| |
| // Support passing the source text back with no change |
| this.disabled = this._get_boolean('disabled'); |
| |
| this.eol = this._get_characters('eol', 'auto'); |
| this.end_with_newline = this._get_boolean('end_with_newline'); |
| this.indent_size = this._get_number('indent_size', 4); |
| this.indent_char = this._get_characters('indent_char', ' '); |
| this.indent_level = this._get_number('indent_level'); |
| |
| this.preserve_newlines = this._get_boolean('preserve_newlines', true); |
| this.max_preserve_newlines = this._get_number('max_preserve_newlines', 32786); |
| if (!this.preserve_newlines) { |
| this.max_preserve_newlines = 0; |
| } |
| |
| this.indent_with_tabs = this._get_boolean('indent_with_tabs', this.indent_char === '\t'); |
| if (this.indent_with_tabs) { |
| this.indent_char = '\t'; |
| |
| // indent_size behavior changed after 1.8.6 |
| // It used to be that indent_size would be |
| // set to 1 for indent_with_tabs. That is no longer needed and |
| // actually doesn't make sense - why not use spaces? Further, |
| // that might produce unexpected behavior - tabs being used |
| // for single-column alignment. So, when indent_with_tabs is true |
| // and indent_size is 1, reset indent_size to 4. |
| if (this.indent_size === 1) { |
| this.indent_size = 4; |
| } |
| } |
| |
| // Backwards compat with 1.3.x |
| this.wrap_line_length = this._get_number('wrap_line_length', this._get_number('max_char')); |
| |
| this.indent_empty_lines = this._get_boolean('indent_empty_lines'); |
| |
| // valid templating languages ['django', 'erb', 'handlebars', 'php'] |
| // For now, 'auto' = all off for javascript, all on for html (and inline javascript). |
| // other values ignored |
| this.templating = this._get_selection_list('templating', ['auto', 'none', 'django', 'erb', 'handlebars', 'php'], ['auto']); |
| } |
| |
| Options.prototype._get_array = function(name, default_value) { |
| var option_value = this.raw_options[name]; |
| var result = default_value || []; |
| if (typeof option_value === 'object') { |
| if (option_value !== null && typeof option_value.concat === 'function') { |
| result = option_value.concat(); |
| } |
| } else if (typeof option_value === 'string') { |
| result = option_value.split(/[^a-zA-Z0-9_\/\-]+/); |
| } |
| return result; |
| }; |
| |
| Options.prototype._get_boolean = function(name, default_value) { |
| var option_value = this.raw_options[name]; |
| var result = option_value === undefined ? !!default_value : !!option_value; |
| return result; |
| }; |
| |
| Options.prototype._get_characters = function(name, default_value) { |
| var option_value = this.raw_options[name]; |
| var result = default_value || ''; |
| if (typeof option_value === 'string') { |
| result = option_value.replace(/\\r/, '\r').replace(/\\n/, '\n').replace(/\\t/, '\t'); |
| } |
| return result; |
| }; |
| |
| Options.prototype._get_number = function(name, default_value) { |
| var option_value = this.raw_options[name]; |
| default_value = parseInt(default_value, 10); |
| if (isNaN(default_value)) { |
| default_value = 0; |
| } |
| var result = parseInt(option_value, 10); |
| if (isNaN(result)) { |
| result = default_value; |
| } |
| return result; |
| }; |
| |
| Options.prototype._get_selection = function(name, selection_list, default_value) { |
| var result = this._get_selection_list(name, selection_list, default_value); |
| if (result.length !== 1) { |
| throw new Error( |
| "Invalid Option Value: The option '" + name + "' can only be one of the following values:\n" + |
| selection_list + "\nYou passed in: '" + this.raw_options[name] + "'"); |
| } |
| |
| return result[0]; |
| }; |
| |
| |
| Options.prototype._get_selection_list = function(name, selection_list, default_value) { |
| if (!selection_list || selection_list.length === 0) { |
| throw new Error("Selection list cannot be empty."); |
| } |
| |
| default_value = default_value || [selection_list[0]]; |
| if (!this._is_valid_selection(default_value, selection_list)) { |
| throw new Error("Invalid Default Value!"); |
| } |
| |
| var result = this._get_array(name, default_value); |
| if (!this._is_valid_selection(result, selection_list)) { |
| throw new Error( |
| "Invalid Option Value: The option '" + name + "' can contain only the following values:\n" + |
| selection_list + "\nYou passed in: '" + this.raw_options[name] + "'"); |
| } |
| |
| return result; |
| }; |
| |
| Options.prototype._is_valid_selection = function(result, selection_list) { |
| return result.length && selection_list.length && |
| !result.some(function(item) { return selection_list.indexOf(item) === -1; }); |
| }; |
| |
| |
| // merges child options up with the parent options object |
| // Example: obj = {a: 1, b: {a: 2}} |
| // mergeOpts(obj, 'b') |
| // |
| // Returns: {a: 2} |
| function _mergeOpts(allOptions, childFieldName) { |
| var finalOpts = {}; |
| allOptions = _normalizeOpts(allOptions); |
| var name; |
| |
| for (name in allOptions) { |
| if (name !== childFieldName) { |
| finalOpts[name] = allOptions[name]; |
| } |
| } |
| |
| //merge in the per type settings for the childFieldName |
| if (childFieldName && allOptions[childFieldName]) { |
| for (name in allOptions[childFieldName]) { |
| finalOpts[name] = allOptions[childFieldName][name]; |
| } |
| } |
| return finalOpts; |
| } |
| |
| function _normalizeOpts(options) { |
| var convertedOpts = {}; |
| var key; |
| |
| for (key in options) { |
| var newKey = key.replace(/-/g, "_"); |
| convertedOpts[newKey] = options[key]; |
| } |
| return convertedOpts; |
| } |
| |
| module.exports.Options = Options; |
| module.exports.normalizeOpts = _normalizeOpts; |
| module.exports.mergeOpts = _mergeOpts; |
| |
| |
| /***/ }), |
| /* 7 */, |
| /* 8 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| var regexp_has_sticky = RegExp.prototype.hasOwnProperty('sticky'); |
| |
| function InputScanner(input_string) { |
| this.__input = input_string || ''; |
| this.__input_length = this.__input.length; |
| this.__position = 0; |
| } |
| |
| InputScanner.prototype.restart = function() { |
| this.__position = 0; |
| }; |
| |
| InputScanner.prototype.back = function() { |
| if (this.__position > 0) { |
| this.__position -= 1; |
| } |
| }; |
| |
| InputScanner.prototype.hasNext = function() { |
| return this.__position < this.__input_length; |
| }; |
| |
| InputScanner.prototype.next = function() { |
| var val = null; |
| if (this.hasNext()) { |
| val = this.__input.charAt(this.__position); |
| this.__position += 1; |
| } |
| return val; |
| }; |
| |
| InputScanner.prototype.peek = function(index) { |
| var val = null; |
| index = index || 0; |
| index += this.__position; |
| if (index >= 0 && index < this.__input_length) { |
| val = this.__input.charAt(index); |
| } |
| return val; |
| }; |
| |
| // This is a JavaScript only helper function (not in python) |
| // Javascript doesn't have a match method |
| // and not all implementation support "sticky" flag. |
| // If they do not support sticky then both this.match() and this.test() method |
| // must get the match and check the index of the match. |
| // If sticky is supported and set, this method will use it. |
| // Otherwise it will check that global is set, and fall back to the slower method. |
| InputScanner.prototype.__match = function(pattern, index) { |
| pattern.lastIndex = index; |
| var pattern_match = pattern.exec(this.__input); |
| |
| if (pattern_match && !(regexp_has_sticky && pattern.sticky)) { |
| if (pattern_match.index !== index) { |
| pattern_match = null; |
| } |
| } |
| |
| return pattern_match; |
| }; |
| |
| InputScanner.prototype.test = function(pattern, index) { |
| index = index || 0; |
| index += this.__position; |
| |
| if (index >= 0 && index < this.__input_length) { |
| return !!this.__match(pattern, index); |
| } else { |
| return false; |
| } |
| }; |
| |
| InputScanner.prototype.testChar = function(pattern, index) { |
| // test one character regex match |
| var val = this.peek(index); |
| pattern.lastIndex = 0; |
| return val !== null && pattern.test(val); |
| }; |
| |
| InputScanner.prototype.match = function(pattern) { |
| var pattern_match = this.__match(pattern, this.__position); |
| if (pattern_match) { |
| this.__position += pattern_match[0].length; |
| } else { |
| pattern_match = null; |
| } |
| return pattern_match; |
| }; |
| |
| InputScanner.prototype.read = function(starting_pattern, until_pattern, until_after) { |
| var val = ''; |
| var match; |
| if (starting_pattern) { |
| match = this.match(starting_pattern); |
| if (match) { |
| val += match[0]; |
| } |
| } |
| if (until_pattern && (match || !starting_pattern)) { |
| val += this.readUntil(until_pattern, until_after); |
| } |
| return val; |
| }; |
| |
| InputScanner.prototype.readUntil = function(pattern, until_after) { |
| var val = ''; |
| var match_index = this.__position; |
| pattern.lastIndex = this.__position; |
| var pattern_match = pattern.exec(this.__input); |
| if (pattern_match) { |
| match_index = pattern_match.index; |
| if (until_after) { |
| match_index += pattern_match[0].length; |
| } |
| } else { |
| match_index = this.__input_length; |
| } |
| |
| val = this.__input.substring(this.__position, match_index); |
| this.__position = match_index; |
| return val; |
| }; |
| |
| InputScanner.prototype.readUntilAfter = function(pattern) { |
| return this.readUntil(pattern, true); |
| }; |
| |
| InputScanner.prototype.get_regexp = function(pattern, match_from) { |
| var result = null; |
| var flags = 'g'; |
| if (match_from && regexp_has_sticky) { |
| flags = 'y'; |
| } |
| // strings are converted to regexp |
| if (typeof pattern === "string" && pattern !== '') { |
| // result = new RegExp(pattern.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), flags); |
| result = new RegExp(pattern, flags); |
| } else if (pattern) { |
| result = new RegExp(pattern.source, flags); |
| } |
| return result; |
| }; |
| |
| InputScanner.prototype.get_literal_regexp = function(literal_string) { |
| return RegExp(literal_string.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')); |
| }; |
| |
| /* css beautifier legacy helpers */ |
| InputScanner.prototype.peekUntilAfter = function(pattern) { |
| var start = this.__position; |
| var val = this.readUntilAfter(pattern); |
| this.__position = start; |
| return val; |
| }; |
| |
| InputScanner.prototype.lookBack = function(testVal) { |
| var start = this.__position - 1; |
| return start >= testVal.length && this.__input.substring(start - testVal.length, start) |
| .toLowerCase() === testVal; |
| }; |
| |
| module.exports.InputScanner = InputScanner; |
| |
| |
| /***/ }), |
| /* 9 */, |
| /* 10 */, |
| /* 11 */, |
| /* 12 */, |
| /* 13 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| function Directives(start_block_pattern, end_block_pattern) { |
| start_block_pattern = typeof start_block_pattern === 'string' ? start_block_pattern : start_block_pattern.source; |
| end_block_pattern = typeof end_block_pattern === 'string' ? end_block_pattern : end_block_pattern.source; |
| this.__directives_block_pattern = new RegExp(start_block_pattern + / beautify( \w+[:]\w+)+ /.source + end_block_pattern, 'g'); |
| this.__directive_pattern = / (\w+)[:](\w+)/g; |
| |
| this.__directives_end_ignore_pattern = new RegExp(start_block_pattern + /\sbeautify\signore:end\s/.source + end_block_pattern, 'g'); |
| } |
| |
| Directives.prototype.get_directives = function(text) { |
| if (!text.match(this.__directives_block_pattern)) { |
| return null; |
| } |
| |
| var directives = {}; |
| this.__directive_pattern.lastIndex = 0; |
| var directive_match = this.__directive_pattern.exec(text); |
| |
| while (directive_match) { |
| directives[directive_match[1]] = directive_match[2]; |
| directive_match = this.__directive_pattern.exec(text); |
| } |
| |
| return directives; |
| }; |
| |
| Directives.prototype.readIgnored = function(input) { |
| return input.readUntilAfter(this.__directives_end_ignore_pattern); |
| }; |
| |
| |
| module.exports.Directives = Directives; |
| |
| |
| /***/ }), |
| /* 14 */, |
| /* 15 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| var Beautifier = __webpack_require__(16).Beautifier, |
| Options = __webpack_require__(17).Options; |
| |
| function css_beautify(source_text, options) { |
| var beautifier = new Beautifier(source_text, options); |
| return beautifier.beautify(); |
| } |
| |
| module.exports = css_beautify; |
| module.exports.defaultOptions = function() { |
| return new Options(); |
| }; |
| |
| |
| /***/ }), |
| /* 16 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| var Options = __webpack_require__(17).Options; |
| var Output = __webpack_require__(2).Output; |
| var InputScanner = __webpack_require__(8).InputScanner; |
| var Directives = __webpack_require__(13).Directives; |
| |
| var directives_core = new Directives(/\/\*/, /\*\//); |
| |
| var lineBreak = /\r\n|[\r\n]/; |
| var allLineBreaks = /\r\n|[\r\n]/g; |
| |
| // tokenizer |
| var whitespaceChar = /\s/; |
| var whitespacePattern = /(?:\s|\n)+/g; |
| var block_comment_pattern = /\/\*(?:[\s\S]*?)((?:\*\/)|$)/g; |
| var comment_pattern = /\/\/(?:[^\n\r\u2028\u2029]*)/g; |
| |
| function Beautifier(source_text, options) { |
| this._source_text = source_text || ''; |
| // Allow the setting of language/file-type specific options |
| // with inheritance of overall settings |
| this._options = new Options(options); |
| this._ch = null; |
| this._input = null; |
| |
| // https://developer.mozilla.org/en-US/docs/Web/CSS/At-rule |
| this.NESTED_AT_RULE = { |
| "@page": true, |
| "@font-face": true, |
| "@keyframes": true, |
| // also in CONDITIONAL_GROUP_RULE below |
| "@media": true, |
| "@supports": true, |
| "@document": true |
| }; |
| this.CONDITIONAL_GROUP_RULE = { |
| "@media": true, |
| "@supports": true, |
| "@document": true |
| }; |
| |
| } |
| |
| Beautifier.prototype.eatString = function(endChars) { |
| var result = ''; |
| this._ch = this._input.next(); |
| while (this._ch) { |
| result += this._ch; |
| if (this._ch === "\\") { |
| result += this._input.next(); |
| } else if (endChars.indexOf(this._ch) !== -1 || this._ch === "\n") { |
| break; |
| } |
| this._ch = this._input.next(); |
| } |
| return result; |
| }; |
| |
| // Skips any white space in the source text from the current position. |
| // When allowAtLeastOneNewLine is true, will output new lines for each |
| // newline character found; if the user has preserve_newlines off, only |
| // the first newline will be output |
| Beautifier.prototype.eatWhitespace = function(allowAtLeastOneNewLine) { |
| var result = whitespaceChar.test(this._input.peek()); |
| var isFirstNewLine = true; |
| |
| while (whitespaceChar.test(this._input.peek())) { |
| this._ch = this._input.next(); |
| if (allowAtLeastOneNewLine && this._ch === '\n') { |
| if (this._options.preserve_newlines || isFirstNewLine) { |
| isFirstNewLine = false; |
| this._output.add_new_line(true); |
| } |
| } |
| } |
| return result; |
| }; |
| |
| // Nested pseudo-class if we are insideRule |
| // and the next special character found opens |
| // a new block |
| Beautifier.prototype.foundNestedPseudoClass = function() { |
| var openParen = 0; |
| var i = 1; |
| var ch = this._input.peek(i); |
| while (ch) { |
| if (ch === "{") { |
| return true; |
| } else if (ch === '(') { |
| // pseudoclasses can contain () |
| openParen += 1; |
| } else if (ch === ')') { |
| if (openParen === 0) { |
| return false; |
| } |
| openParen -= 1; |
| } else if (ch === ";" || ch === "}") { |
| return false; |
| } |
| i++; |
| ch = this._input.peek(i); |
| } |
| return false; |
| }; |
| |
| Beautifier.prototype.print_string = function(output_string) { |
| this._output.set_indent(this._indentLevel); |
| this._output.non_breaking_space = true; |
| this._output.add_token(output_string); |
| }; |
| |
| Beautifier.prototype.preserveSingleSpace = function(isAfterSpace) { |
| if (isAfterSpace) { |
| this._output.space_before_token = true; |
| } |
| }; |
| |
| Beautifier.prototype.indent = function() { |
| this._indentLevel++; |
| }; |
| |
| Beautifier.prototype.outdent = function() { |
| if (this._indentLevel > 0) { |
| this._indentLevel--; |
| } |
| }; |
| |
| /*_____________________--------------------_____________________*/ |
| |
| Beautifier.prototype.beautify = function() { |
| if (this._options.disabled) { |
| return this._source_text; |
| } |
| |
| var source_text = this._source_text; |
| var eol = this._options.eol; |
| if (eol === 'auto') { |
| eol = '\n'; |
| if (source_text && lineBreak.test(source_text || '')) { |
| eol = source_text.match(lineBreak)[0]; |
| } |
| } |
| |
| |
| // HACK: newline parsing inconsistent. This brute force normalizes the this._input. |
| source_text = source_text.replace(allLineBreaks, '\n'); |
| |
| // reset |
| var baseIndentString = source_text.match(/^[\t ]*/)[0]; |
| |
| this._output = new Output(this._options, baseIndentString); |
| this._input = new InputScanner(source_text); |
| this._indentLevel = 0; |
| this._nestedLevel = 0; |
| |
| this._ch = null; |
| var parenLevel = 0; |
| |
| var insideRule = false; |
| // This is the value side of a property value pair (blue in the following ex) |
| // label { content: blue } |
| var insidePropertyValue = false; |
| var enteringConditionalGroup = false; |
| var insideAtExtend = false; |
| var insideAtImport = false; |
| var topCharacter = this._ch; |
| var whitespace; |
| var isAfterSpace; |
| var previous_ch; |
| |
| while (true) { |
| whitespace = this._input.read(whitespacePattern); |
| isAfterSpace = whitespace !== ''; |
| previous_ch = topCharacter; |
| this._ch = this._input.next(); |
| if (this._ch === '\\' && this._input.hasNext()) { |
| this._ch += this._input.next(); |
| } |
| topCharacter = this._ch; |
| |
| if (!this._ch) { |
| break; |
| } else if (this._ch === '/' && this._input.peek() === '*') { |
| // /* css comment */ |
| // Always start block comments on a new line. |
| // This handles scenarios where a block comment immediately |
| // follows a property definition on the same line or where |
| // minified code is being beautified. |
| this._output.add_new_line(); |
| this._input.back(); |
| |
| var comment = this._input.read(block_comment_pattern); |
| |
| // Handle ignore directive |
| var directives = directives_core.get_directives(comment); |
| if (directives && directives.ignore === 'start') { |
| comment += directives_core.readIgnored(this._input); |
| } |
| |
| this.print_string(comment); |
| |
| // Ensures any new lines following the comment are preserved |
| this.eatWhitespace(true); |
| |
| // Block comments are followed by a new line so they don't |
| // share a line with other properties |
| this._output.add_new_line(); |
| } else if (this._ch === '/' && this._input.peek() === '/') { |
| // // single line comment |
| // Preserves the space before a comment |
| // on the same line as a rule |
| this._output.space_before_token = true; |
| this._input.back(); |
| this.print_string(this._input.read(comment_pattern)); |
| |
| // Ensures any new lines following the comment are preserved |
| this.eatWhitespace(true); |
| } else if (this._ch === '@') { |
| this.preserveSingleSpace(isAfterSpace); |
| |
| // deal with less propery mixins @{...} |
| if (this._input.peek() === '{') { |
| this.print_string(this._ch + this.eatString('}')); |
| } else { |
| this.print_string(this._ch); |
| |
| // strip trailing space, if present, for hash property checks |
| var variableOrRule = this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g); |
| |
| if (variableOrRule.match(/[ :]$/)) { |
| // we have a variable or pseudo-class, add it and insert one space before continuing |
| variableOrRule = this.eatString(": ").replace(/\s$/, ''); |
| this.print_string(variableOrRule); |
| this._output.space_before_token = true; |
| } |
| |
| variableOrRule = variableOrRule.replace(/\s$/, ''); |
| |
| if (variableOrRule === 'extend') { |
| insideAtExtend = true; |
| } else if (variableOrRule === 'import') { |
| insideAtImport = true; |
| } |
| |
| // might be a nesting at-rule |
| if (variableOrRule in this.NESTED_AT_RULE) { |
| this._nestedLevel += 1; |
| if (variableOrRule in this.CONDITIONAL_GROUP_RULE) { |
| enteringConditionalGroup = true; |
| } |
| // might be less variable |
| } else if (!insideRule && parenLevel === 0 && variableOrRule.indexOf(':') !== -1) { |
| insidePropertyValue = true; |
| this.indent(); |
| } |
| } |
| } else if (this._ch === '#' && this._input.peek() === '{') { |
| this.preserveSingleSpace(isAfterSpace); |
| this.print_string(this._ch + this.eatString('}')); |
| } else if (this._ch === '{') { |
| if (insidePropertyValue) { |
| insidePropertyValue = false; |
| this.outdent(); |
| } |
| this.indent(); |
| this._output.space_before_token = true; |
| this.print_string(this._ch); |
| |
| // when entering conditional groups, only rulesets are allowed |
| if (enteringConditionalGroup) { |
| enteringConditionalGroup = false; |
| insideRule = (this._indentLevel > this._nestedLevel); |
| } else { |
| // otherwise, declarations are also allowed |
| insideRule = (this._indentLevel >= this._nestedLevel); |
| } |
| if (this._options.newline_between_rules && insideRule) { |
| if (this._output.previous_line && this._output.previous_line.item(-1) !== '{') { |
| this._output.ensure_empty_line_above('/', ','); |
| } |
| } |
| this.eatWhitespace(true); |
| this._output.add_new_line(); |
| } else if (this._ch === '}') { |
| this.outdent(); |
| this._output.add_new_line(); |
| if (previous_ch === '{') { |
| this._output.trim(true); |
| } |
| insideAtImport = false; |
| insideAtExtend = false; |
| if (insidePropertyValue) { |
| this.outdent(); |
| insidePropertyValue = false; |
| } |
| this.print_string(this._ch); |
| insideRule = false; |
| if (this._nestedLevel) { |
| this._nestedLevel--; |
| } |
| |
| this.eatWhitespace(true); |
| this._output.add_new_line(); |
| |
| if (this._options.newline_between_rules && !this._output.just_added_blankline()) { |
| if (this._input.peek() !== '}') { |
| this._output.add_new_line(true); |
| } |
| } |
| } else if (this._ch === ":") { |
| if ((insideRule || enteringConditionalGroup) && !(this._input.lookBack("&") || this.foundNestedPseudoClass()) && !this._input.lookBack("(") && !insideAtExtend && parenLevel === 0) { |
| // 'property: value' delimiter |
| // which could be in a conditional group query |
| this.print_string(':'); |
| if (!insidePropertyValue) { |
| insidePropertyValue = true; |
| this._output.space_before_token = true; |
| this.eatWhitespace(true); |
| this.indent(); |
| } |
| } else { |
| // sass/less parent reference don't use a space |
| // sass nested pseudo-class don't use a space |
| |
| // preserve space before pseudoclasses/pseudoelements, as it means "in any child" |
| if (this._input.lookBack(" ")) { |
| this._output.space_before_token = true; |
| } |
| if (this._input.peek() === ":") { |
| // pseudo-element |
| this._ch = this._input.next(); |
| this.print_string("::"); |
| } else { |
| // pseudo-class |
| this.print_string(':'); |
| } |
| } |
| } else if (this._ch === '"' || this._ch === '\'') { |
| this.preserveSingleSpace(isAfterSpace); |
| this.print_string(this._ch + this.eatString(this._ch)); |
| this.eatWhitespace(true); |
| } else if (this._ch === ';') { |
| if (parenLevel === 0) { |
| if (insidePropertyValue) { |
| this.outdent(); |
| insidePropertyValue = false; |
| } |
| insideAtExtend = false; |
| insideAtImport = false; |
| this.print_string(this._ch); |
| this.eatWhitespace(true); |
| |
| // This maintains single line comments on the same |
| // line. Block comments are also affected, but |
| // a new line is always output before one inside |
| // that section |
| if (this._input.peek() !== '/') { |
| this._output.add_new_line(); |
| } |
| } else { |
| this.print_string(this._ch); |
| this.eatWhitespace(true); |
| this._output.space_before_token = true; |
| } |
| } else if (this._ch === '(') { // may be a url |
| if (this._input.lookBack("url")) { |
| this.print_string(this._ch); |
| this.eatWhitespace(); |
| parenLevel++; |
| this.indent(); |
| this._ch = this._input.next(); |
| if (this._ch === ')' || this._ch === '"' || this._ch === '\'') { |
| this._input.back(); |
| } else if (this._ch) { |
| this.print_string(this._ch + this.eatString(')')); |
| if (parenLevel) { |
| parenLevel--; |
| this.outdent(); |
| } |
| } |
| } else { |
| this.preserveSingleSpace(isAfterSpace); |
| this.print_string(this._ch); |
| this.eatWhitespace(); |
| parenLevel++; |
| this.indent(); |
| } |
| } else if (this._ch === ')') { |
| if (parenLevel) { |
| parenLevel--; |
| this.outdent(); |
| } |
| this.print_string(this._ch); |
| } else if (this._ch === ',') { |
| this.print_string(this._ch); |
| this.eatWhitespace(true); |
| if (this._options.selector_separator_newline && !insidePropertyValue && parenLevel === 0 && !insideAtImport) { |
| this._output.add_new_line(); |
| } else { |
| this._output.space_before_token = true; |
| } |
| } else if ((this._ch === '>' || this._ch === '+' || this._ch === '~') && !insidePropertyValue && parenLevel === 0) { |
| //handle combinator spacing |
| if (this._options.space_around_combinator) { |
| this._output.space_before_token = true; |
| this.print_string(this._ch); |
| this._output.space_before_token = true; |
| } else { |
| this.print_string(this._ch); |
| this.eatWhitespace(); |
| // squash extra whitespace |
| if (this._ch && whitespaceChar.test(this._ch)) { |
| this._ch = ''; |
| } |
| } |
| } else if (this._ch === ']') { |
| this.print_string(this._ch); |
| } else if (this._ch === '[') { |
| this.preserveSingleSpace(isAfterSpace); |
| this.print_string(this._ch); |
| } else if (this._ch === '=') { // no whitespace before or after |
| this.eatWhitespace(); |
| this.print_string('='); |
| if (whitespaceChar.test(this._ch)) { |
| this._ch = ''; |
| } |
| } else if (this._ch === '!' && !this._input.lookBack("\\")) { // !important |
| this.print_string(' '); |
| this.print_string(this._ch); |
| } else { |
| this.preserveSingleSpace(isAfterSpace); |
| this.print_string(this._ch); |
| } |
| } |
| |
| var sweetCode = this._output.get_code(eol); |
| |
| return sweetCode; |
| }; |
| |
| module.exports.Beautifier = Beautifier; |
| |
| |
| /***/ }), |
| /* 17 */ |
| /***/ (function(module, exports, __webpack_require__) { |
| |
| "use strict"; |
| /*jshint node:true */ |
| /* |
| |
| The MIT License (MIT) |
| |
| Copyright (c) 2007-2018 Einar Lielmanis, Liam Newman, and contributors. |
| |
| Permission is hereby granted, free of charge, to any person |
| obtaining a copy of this software and associated documentation files |
| (the "Software"), to deal in the Software without restriction, |
| including without limitation the rights to use, copy, modify, merge, |
| publish, distribute, sublicense, and/or sell copies of the Software, |
| and to permit persons to whom the Software is furnished to do so, |
| subject to the following conditions: |
| |
| The above copyright notice and this permission notice shall be |
| included in all copies or substantial portions of the Software. |
| |
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
| EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
| MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
| NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
| BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
| ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
| CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| SOFTWARE. |
| */ |
| |
| |
| |
| var BaseOptions = __webpack_require__(6).Options; |
| |
| function Options(options) { |
| BaseOptions.call(this, options, 'css'); |
| |
| this.selector_separator_newline = this._get_boolean('selector_separator_newline', true); |
| this.newline_between_rules = this._get_boolean('newline_between_rules', true); |
| var space_around_selector_separator = this._get_boolean('space_around_selector_separator'); |
| this.space_around_combinator = this._get_boolean('space_around_combinator') || space_around_selector_separator; |
| |
| } |
| Options.prototype = new BaseOptions(); |
| |
| |
| |
| module.exports.Options = Options; |
| |
| |
| /***/ }) |
| /******/ ]); |
| |
| export var css_beautify = legacy_beautify_css; |