UNPKG

element-ui

Version:

A Component Library for Vue.js.

109 lines (90 loc) 2.81 kB
let scrollBarWidth; export const getScrollBarWidth = () => { if (scrollBarWidth !== undefined) return scrollBarWidth; const outer = document.createElement('div'); outer.style.visibility = 'hidden'; outer.style.width = '100px'; outer.style.position = 'absolute'; outer.style.top = '-9999px'; document.body.appendChild(outer); const widthNoScroll = outer.offsetWidth; outer.style.overflow = 'scroll'; const inner = document.createElement('div'); inner.style.width = '100%'; outer.appendChild(inner); const widthWithScroll = inner.offsetWidth; outer.parentNode.removeChild(outer); return widthNoScroll - widthWithScroll; }; export const getCell = function(event) { let cell = event.target; while (cell && cell.tagName.toUpperCase() !== 'HTML') { if (cell.tagName.toUpperCase() === 'TD') { return cell; } cell = cell.parentNode; } return null; }; export const getValueByPath = function(object, prop) { prop = prop || ''; const paths = prop.split('.'); let current = object; let result = null; for (let i = 0, j = paths.length; i < j; i++) { const path = paths[i]; if (!current) break; if (i === j - 1) { result = current[path]; break; } current = current[path]; } return result; }; const isObject = function(obj) { return obj !== null && typeof obj === 'object'; }; export const orderBy = function(array, sortKey, reverse, sortMethod) { if (typeof reverse === 'string') { reverse = reverse === 'descending' ? -1 : 1; } if (!sortKey) { return array; } const order = (reverse && reverse < 0) ? -1 : 1; // sort on a copy to avoid mutating original array return array.slice().sort(sortMethod ? function(a, b) { return sortMethod(a, b) ? order : -order; } : function(a, b) { if (sortKey !== '$key') { if (isObject(a) && '$value' in a) a = a.$value; if (isObject(b) && '$value' in b) b = b.$value; } a = isObject(a) ? getValueByPath(a, sortKey) : a; b = isObject(b) ? getValueByPath(b, sortKey) : b; return a === b ? 0 : a > b ? order : -order; }); }; export const getColumnById = function(table, columnId) { let column = null; table.columns.forEach(function(item) { if (item.id === columnId) { column = item; } }); return column; }; export const getColumnByCell = function(table, cell) { const matches = (cell.className || '').match(/el-table_[^\s]+/gm); if (matches) { return getColumnById(table, matches[0]); } return null; }; const isFirefox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1; export const mousewheel = function(element, callback) { if (element && element.addEventListener) { element.addEventListener(isFirefox ? 'DOMMouseScroll' : 'mousewheel', callback); } };