You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
239 lines
6.5 KiB
239 lines
6.5 KiB
"use strict"; |
|
|
|
exports.__esModule = true; |
|
exports["default"] = void 0; |
|
|
|
var _util = require("../util"); |
|
|
|
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); } } |
|
|
|
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } |
|
|
|
var cloneNode = function cloneNode(obj, parent) { |
|
if (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; |
|
|
|
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 = /*#__PURE__*/function () { |
|
function Node(opts) { |
|
if (opts === void 0) { |
|
opts = {}; |
|
} |
|
|
|
Object.assign(this, opts); |
|
this.spaces = this.spaces || {}; |
|
this.spaces.before = this.spaces.before || ''; |
|
this.spaces.after = this.spaces.after || ''; |
|
} |
|
|
|
var _proto = Node.prototype; |
|
|
|
_proto.remove = function remove() { |
|
if (this.parent) { |
|
this.parent.removeChild(this); |
|
} |
|
|
|
this.parent = undefined; |
|
return this; |
|
}; |
|
|
|
_proto.replaceWith = function replaceWith() { |
|
if (this.parent) { |
|
for (var index in arguments) { |
|
this.parent.insertBefore(this, arguments[index]); |
|
} |
|
|
|
this.remove(); |
|
} |
|
|
|
return this; |
|
}; |
|
|
|
_proto.next = function next() { |
|
return this.parent.at(this.parent.index(this) + 1); |
|
}; |
|
|
|
_proto.prev = function prev() { |
|
return this.parent.at(this.parent.index(this) - 1); |
|
}; |
|
|
|
_proto.clone = function clone(overrides) { |
|
if (overrides === void 0) { |
|
overrides = {}; |
|
} |
|
|
|
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. |
|
*/ |
|
; |
|
|
|
_proto.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. |
|
*/ |
|
; |
|
|
|
_proto.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. |
|
*/ |
|
; |
|
|
|
_proto.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) |
|
*/ |
|
; |
|
|
|
_proto.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; |
|
}; |
|
|
|
_proto.stringifyProperty = function stringifyProperty(name) { |
|
return this.raws && this.raws[name] || this[name]; |
|
}; |
|
|
|
_proto.valueToString = function valueToString() { |
|
return String(this.stringifyProperty("value")); |
|
}; |
|
|
|
_proto.toString = function toString() { |
|
return [this.rawSpaceBefore, this.valueToString(), 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; |