UNPKG

vue-ant-patterns

Version:

vue-ant-patterns

243 lines (207 loc) 6.5 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _babelHelperVueJsxMergeProps = require('babel-helper-vue-jsx-merge-props'); var _babelHelperVueJsxMergeProps2 = _interopRequireDefault(_babelHelperVueJsxMergeProps); var _extends2 = require('babel-runtime/helpers/extends'); var _extends3 = _interopRequireDefault(_extends2); var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray'); var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2); var _vueTypes = require('ant-design-vue/lib/_util/vue-types'); var _vueTypes2 = _interopRequireDefault(_vueTypes); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; } var slice = [].slice; /* * @Author: w.pengfei * @Date: 2020-07-05 16:56:01 * @LastEditTime: 2021-05-15 18:46:03 * @Description: '' * @LastEditors: w.pengfei */ var BlurQuery = { name: 'BBlurQuery', props: { size: _vueTypes2['default'].oneOf(['small', 'large', 'default']).def('default'), prefixCls: { type: String, 'default': function _default() { return 'depot-biz-blur-query'; } }, table: { type: Object, 'default': function _default() { return {}; } } }, created: function created() {}, data: function data() { return { rawInnerHtmls: [], htmls: [], val: '', oldHTML: '' }; }, methods: { reset: function reset() { this.val = ''; this.setInitStatus(); }, getAllText: function getAllText(node) { var gets = function gets(n) { var a = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; var nodes = slice.call(n.childNodes); return nodes.reduce(function (m, ndeIt, idx, raw) { if (ndeIt.nodeType === 3) { m.push(ndeIt); } else { var tpChd = ndeIt.childNodes; if (ndeIt.nodeType === 1 && tpChd && tpChd.length) { gets(ndeIt, m); } } return m; }, a); }; return gets(node); }, getHtml: function getHtml() { var table = this.$props.table; var ele = this.getInstanceEle(); if (!ele) return; var tables = ele.querySelectorAll('table'); var tbodys = []; var aTds = []; var objCache = []; var slice = [].slice; tbodys = slice.call(tables).map(function (it) { var tbody = it.querySelectorAll('tbody'); if (tbody && tbody.length) { return tbody[0]; } return null; }).filter(function (t) { return t; }); if (!this.rawInnerHtmls || !this.rawInnerHtmls.length) { tbodys.map(function (tbody) { var trs = slice.call(tbody.querySelectorAll('tr')); trs.map(function (tr) { var tds = slice.call(tr.querySelectorAll('td')); tds.map(function (td) { objCache.push({ td: td, oHtml: td.innerHTML, isReplace: false }); }); }); }); this.rawInnerHtmls = objCache; } aTds = [].concat((0, _toConsumableArray3['default'])(this.rawInnerHtmls)); return aTds; }, setHtml: function setHtml(val) { var _this = this; var prefixCls = this.$props.prefixCls; var aTds = this.getHtml(); var cls = prefixCls + '-highlight'; aTds.map(function (it) { var td = it.td; var nTextArr = _this.getAllText(td); nTextArr.map(function (text) { var tReg = new RegExp(val, 'gi'); var isH = tReg.test(text.data); if (isH) { var s = document.createElement('span'); var dataStr = text.data; dataStr = dataStr.replace(tReg, function ($00) { return '<span class="' + cls + '">' + $00 + '</span>'; }); it.isReplace = true; s.className = 'blur-replace'; s.innerHTML = dataStr; text.parentNode.replaceChild(s, text); } }); }); }, setInitStatus: function setInitStatus() { var _this2 = this; var rawInnerHtmls = this.rawInnerHtmls; rawInnerHtmls.map(function (it) { var td = it.td, oHtml = it.oHtml, isReplace = it.isReplace; if (isReplace) { td.innerHTML = oHtml; } _this2.rawInnerHtmls = []; }); }, validateVal: function validateVal(val) { var ele = this.getInstanceEle(); if (!ele) return; var html = ''; if (!this.oldHTML) { this.oldHTML = ele.innerHTML; } html = this.oldHTML; var reg = new RegExp(val, 'gi'); return reg.test(html); }, getInstanceEle: function getInstanceEle() { var table = this.$props.table; var vnodeObj = this.$createElement('span'); var VNodeClass = vnodeObj.constructor; var ele = table.$el; if (!ele && table instanceof VNodeClass) { ele = table.elm; } return ele || null; } }, render: function render() { var _this3 = this; var h = arguments[0]; var $listenerts = this.$listenerts, val = this.val; var _$props = this.$props, table = _$props.table, prefixCls = _$props.prefixCls, size = _$props.size; var cls = '' + prefixCls; var inputProps = { props: { value: val, size: size }, on: (0, _extends3['default'])({}, $listenerts, { change: function change(e) { _this3.val = e.target.value; }, search: function search(value) { var ele = _this3.getInstanceEle(); if (!ele) return; _this3.setInitStatus(); if (ele && !value) { return; } var isContains = _this3.validateVal(value); if (ele && value && isContains) { _this3.setHtml(value); } _this3.$emit('search', value); } }) }; return h( 'div', { 'class': cls }, [h('a-input-search', (0, _babelHelperVueJsxMergeProps2['default'])([{ ref: 'inp' }, inputProps]))] ); } }; BlurQuery.install = function (Vue) { Vue.component(BlurQuery.name, BlurQuery); }; exports['default'] = BlurQuery;