luna-dom-highlighter
Version:
Highlighter for html elements
146 lines (145 loc) • 5.08 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.resetCanvasSize = exports.getPlatform = exports.pxToNum = exports.executeAfterTransition = exports.hasVerticalScrollbar = exports.measuredScrollbarWidth = exports.eventPage = exports.eventClient = exports.drag = exports.classPrefix = void 0;
var map_1 = __importDefault(require("licia/map"));
var trim_1 = __importDefault(require("licia/trim"));
var root_1 = __importDefault(require("licia/root"));
var html_1 = __importDefault(require("licia/html"));
var isNum_1 = __importDefault(require("licia/isNum"));
var contain_1 = __importDefault(require("licia/contain"));
var toNum_1 = __importDefault(require("licia/toNum"));
var detectOs_1 = __importDefault(require("licia/detectOs"));
var isHidden_1 = __importDefault(require("licia/isHidden"));
function classPrefix(name) {
var prefix = "luna-".concat(name, "-");
function processClass(str) {
return (0, map_1.default)((0, trim_1.default)(str).split(/\s+/), function (singleClass) {
if ((0, contain_1.default)(singleClass, prefix)) {
return singleClass;
}
return singleClass.replace(/[\w-]+/, function (match) { return "".concat(prefix).concat(match); });
}).join(' ');
}
return function (str) {
if (/<[^>]*>/g.test(str)) {
try {
var tree = html_1.default.parse(str);
traverseTree(tree, function (node) {
if (node.attrs && node.attrs.class) {
node.attrs.class = processClass(node.attrs.class);
}
});
return html_1.default.stringify(tree);
}
catch (e) {
return processClass(str);
}
}
return processClass(str);
};
}
exports.classPrefix = classPrefix;
function traverseTree(tree, handler) {
for (var i = 0, len = tree.length; i < len; i++) {
var node = tree[i];
handler(node);
if (node.content) {
traverseTree(node.content, handler);
}
}
}
var hasTouchSupport = 'ontouchstart' in root_1.default;
var touchEvents = {
start: 'touchstart',
move: 'touchmove',
end: 'touchend',
};
var mouseEvents = {
start: 'mousedown',
move: 'mousemove',
end: 'mouseup',
};
function drag(name) {
return hasTouchSupport ? touchEvents[name] : mouseEvents[name];
}
exports.drag = drag;
function eventClient(type, e) {
var name = type === 'x' ? 'clientX' : 'clientY';
if (e[name]) {
return e[name];
}
if (e.changedTouches) {
return e.changedTouches[0][name];
}
return 0;
}
exports.eventClient = eventClient;
function eventPage(type, e) {
var name = type === 'x' ? 'pageX' : 'pageY';
if (e[name]) {
return e[name];
}
if (e.changedTouches) {
return e.changedTouches[0][name];
}
return 0;
}
exports.eventPage = eventPage;
var scrollbarWidth;
function measuredScrollbarWidth() {
if ((0, isNum_1.default)(scrollbarWidth)) {
return scrollbarWidth;
}
if (!document) {
return 16;
}
var scrollDiv = document.createElement('div');
var innerDiv = document.createElement('div');
scrollDiv.setAttribute('style', 'display: block; width: 100px; height: 100px; overflow: scroll;');
innerDiv.setAttribute('style', 'height: 200px');
scrollDiv.appendChild(innerDiv);
document.body.appendChild(scrollDiv);
scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;
document.body.removeChild(scrollDiv);
return scrollbarWidth;
}
exports.measuredScrollbarWidth = measuredScrollbarWidth;
function hasVerticalScrollbar(el) {
return el.scrollHeight > el.offsetHeight;
}
exports.hasVerticalScrollbar = hasVerticalScrollbar;
function executeAfterTransition(el, callback) {
if ((0, isHidden_1.default)(el)) {
return callback();
}
var handler = function (e) {
var target = e.target;
if (target !== el) {
return;
}
el.removeEventListener('transitionend', handler);
callback();
};
el.addEventListener('transitionend', handler);
}
exports.executeAfterTransition = executeAfterTransition;
function pxToNum(str) {
return (0, toNum_1.default)(str.replace('px', ''));
}
exports.pxToNum = pxToNum;
function getPlatform() {
var os = (0, detectOs_1.default)();
if (os === 'os x') {
return 'mac';
}
return os;
}
exports.getPlatform = getPlatform;
function resetCanvasSize(canvas) {
canvas.width = Math.round(canvas.offsetWidth * window.devicePixelRatio);
canvas.height = Math.round(canvas.offsetHeight * window.devicePixelRatio);
}
exports.resetCanvasSize = resetCanvasSize;