'use strict'; var cls = require('./class'); var dom = require('./dom'); var toInt = exports.toInt = function (x) { return parseInt(x, 10) || 0; }; var clone = exports.clone = function (obj) { if (!obj) { return null; } else if (obj.constructor === Array) { return obj.map(clone); } else if (typeof obj === 'object') { var result = {}; for (var key in obj) { result[key] = clone(obj[key]); } return result; } else { return obj; } }; exports.extend = function (original, source) { var result = clone(original); for (var key in source) { result[key] = clone(source[key]); } return result; }; exports.isEditable = function (el) { return dom.matches(el, "input,[contenteditable]") || dom.matches(el, "select,[contenteditable]") || dom.matches(el, "textarea,[contenteditable]") || dom.matches(el, "button,[contenteditable]"); }; exports.removePsClasses = function (element) { var clsList = cls.list(element); for (var i = 0; i < clsList.length; i++) { var className = clsList[i]; if (className.indexOf('ps-') === 0) { cls.remove(element, className); } } }; exports.outerWidth = function (element) { return toInt(dom.css(element, 'width')) + toInt(dom.css(element, 'paddingLeft')) + toInt(dom.css(element, 'paddingRight')) + toInt(dom.css(element, 'borderLeftWidth')) + toInt(dom.css(element, 'borderRightWidth')); }; exports.startScrolling = function (element, axis) { cls.add(element, 'ps-in-scrolling'); if (typeof axis !== 'undefined') { cls.add(element, 'ps-' + axis); } else { cls.add(element, 'ps-x'); cls.add(element, 'ps-y'); } }; exports.stopScrolling = function (element, axis) { cls.remove(element, 'ps-in-scrolling'); if (typeof axis !== 'undefined') { cls.remove(element, 'ps-' + axis); } else { cls.remove(element, 'ps-x'); cls.remove(element, 'ps-y'); } }; exports.env = { isWebKit: 'WebkitAppearance' in document.documentElement.style, supportsTouch: (('ontouchstart' in window) || window.DocumentTouch && document instanceof window.DocumentTouch), supportsIePointer: window.navigator.msMaxTouchPoints !== null };