|
|
- 'use strict';
-
- exports.__esModule = true;
-
- var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
-
- var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
-
- var _util = require('../util');
-
- function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
-
- var cloneNode = function cloneNode(obj, parent) {
- if ((typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || obj === null) {
- return obj;
- }
-
- var cloned = new obj.constructor();
-
- for (var i in obj) {
- if (!obj.hasOwnProperty(i)) {
- continue;
- }
- var value = obj[i];
- var type = typeof value === 'undefined' ? 'undefined' : _typeof(value);
-
- if (i === 'parent' && type === 'object') {
- if (parent) {
- cloned[i] = parent;
- }
- } else if (value instanceof Array) {
- cloned[i] = value.map(function (j) {
- return cloneNode(j, cloned);
- });
- } else {
- cloned[i] = cloneNode(value, cloned);
- }
- }
-
- return cloned;
- };
-
- var Node = function () {
- function Node() {
- var opts = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- _classCallCheck(this, Node);
-
- Object.assign(this, opts);
- this.spaces = this.spaces || {};
- this.spaces.before = this.spaces.before || '';
- this.spaces.after = this.spaces.after || '';
- }
-
- Node.prototype.remove = function remove() {
- if (this.parent) {
- this.parent.removeChild(this);
- }
- this.parent = undefined;
- return this;
- };
-
- Node.prototype.replaceWith = function replaceWith() {
- if (this.parent) {
- for (var index in arguments) {
- this.parent.insertBefore(this, arguments[index]);
- }
- this.remove();
- }
- return this;
- };
-
- Node.prototype.next = function next() {
- return this.parent.at(this.parent.index(this) + 1);
- };
-
- Node.prototype.prev = function prev() {
- return this.parent.at(this.parent.index(this) - 1);
- };
-
- Node.prototype.clone = function clone() {
- var overrides = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
-
- var cloned = cloneNode(this);
- for (var name in overrides) {
- cloned[name] = overrides[name];
- }
- return cloned;
- };
-
- /**
- * Some non-standard syntax doesn't follow normal escaping rules for css.
- * This allows non standard syntax to be appended to an existing property
- * by specifying the escaped value. By specifying the escaped value,
- * illegal characters are allowed to be directly inserted into css output.
- * @param {string} name the property to set
- * @param {any} value the unescaped value of the property
- * @param {string} valueEscaped optional. the escaped value of the property.
- */
-
-
- Node.prototype.appendToPropertyAndEscape = function appendToPropertyAndEscape(name, value, valueEscaped) {
- if (!this.raws) {
- this.raws = {};
- }
- var originalValue = this[name];
- var originalEscaped = this.raws[name];
- this[name] = originalValue + value; // this may trigger a setter that updates raws, so it has to be set first.
- if (originalEscaped || valueEscaped !== value) {
- this.raws[name] = (originalEscaped || originalValue) + valueEscaped;
- } else {
- delete this.raws[name]; // delete any escaped value that was created by the setter.
- }
- };
-
- /**
- * Some non-standard syntax doesn't follow normal escaping rules for css.
- * This allows the escaped value to be specified directly, allowing illegal
- * characters to be directly inserted into css output.
- * @param {string} name the property to set
- * @param {any} value the unescaped value of the property
- * @param {string} valueEscaped the escaped value of the property.
- */
-
-
- Node.prototype.setPropertyAndEscape = function setPropertyAndEscape(name, value, valueEscaped) {
- if (!this.raws) {
- this.raws = {};
- }
- this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
- this.raws[name] = valueEscaped;
- };
-
- /**
- * When you want a value to passed through to CSS directly. This method
- * deletes the corresponding raw value causing the stringifier to fallback
- * to the unescaped value.
- * @param {string} name the property to set.
- * @param {any} value The value that is both escaped and unescaped.
- */
-
-
- Node.prototype.setPropertyWithoutEscape = function setPropertyWithoutEscape(name, value) {
- this[name] = value; // this may trigger a setter that updates raws, so it has to be set first.
- if (this.raws) {
- delete this.raws[name];
- }
- };
-
- /**
- *
- * @param {number} line The number (starting with 1)
- * @param {number} column The column number (starting with 1)
- */
-
-
- Node.prototype.isAtPosition = function isAtPosition(line, column) {
- if (this.source && this.source.start && this.source.end) {
- if (this.source.start.line > line) {
- return false;
- }
- if (this.source.end.line < line) {
- return false;
- }
- if (this.source.start.line === line && this.source.start.column > column) {
- return false;
- }
- if (this.source.end.line === line && this.source.end.column < column) {
- return false;
- }
- return true;
- }
- return undefined;
- };
-
- Node.prototype.stringifyProperty = function stringifyProperty(name) {
- return this.raws && this.raws[name] || this[name];
- };
-
- Node.prototype.toString = function toString() {
- return [this.rawSpaceBefore, String(this.stringifyProperty("value")), this.rawSpaceAfter].join('');
- };
-
- _createClass(Node, [{
- key: 'rawSpaceBefore',
- get: function get() {
- var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.before;
- if (rawSpace === undefined) {
- rawSpace = this.spaces && this.spaces.before;
- }
- return rawSpace || "";
- },
- set: function set(raw) {
- (0, _util.ensureObject)(this, "raws", "spaces");
- this.raws.spaces.before = raw;
- }
- }, {
- key: 'rawSpaceAfter',
- get: function get() {
- var rawSpace = this.raws && this.raws.spaces && this.raws.spaces.after;
- if (rawSpace === undefined) {
- rawSpace = this.spaces.after;
- }
- return rawSpace || "";
- },
- set: function set(raw) {
- (0, _util.ensureObject)(this, "raws", "spaces");
- this.raws.spaces.after = raw;
- }
- }]);
-
- return Node;
- }();
-
- exports.default = Node;
- module.exports = exports['default'];
|