md-iview 1.0.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (118) hide show
  1. package/README.md +2 -0
  2. package/package.json +116 -0
  3. package/src/components/libs/util.js +117 -0
  4. package/src/components/md-error-page/403.less +92 -0
  5. package/src/components/md-error-page/403.vue +34 -0
  6. package/src/components/md-error-page/404.less +60 -0
  7. package/src/components/md-error-page/404.vue +34 -0
  8. package/src/components/md-error-page/500.less +73 -0
  9. package/src/components/md-error-page/500.vue +36 -0
  10. package/src/components/md-error-page/demo/index.less +22 -0
  11. package/src/components/md-error-page/demo/index.vue +97 -0
  12. package/src/components/md-form-item/index.js +3 -0
  13. package/src/components/md-icon/icon.vue +77 -0
  14. package/src/components/md-icon/icons.js +5 -0
  15. package/src/components/md-icon/index.js +11 -0
  16. package/src/components/md-icon/style/index.less +1 -0
  17. package/src/components/md-loading/index.js +55 -0
  18. package/src/components/md-loading/index.vue +53 -0
  19. package/src/components/md-loading/md-loading.js +38 -0
  20. package/src/components/md-print/demo/index.vue +260 -0
  21. package/src/components/md-print/index.js +123 -0
  22. package/src/components/md-rich-editor/index.vue +69 -0
  23. package/src/components/md-rich-editor/module/image-extend/index.js +216 -0
  24. package/src/components/md-scroll-bar/demo/index.vue +102 -0
  25. package/src/components/md-scroll-bar/index.js +3 -0
  26. package/src/components/md-scroll-bar/index.less +90 -0
  27. package/src/components/md-scroll-bar/index.vue +250 -0
  28. package/src/components/md-select/index.js +7 -0
  29. package/src/components/md-select/select.vue +841 -0
  30. package/src/components/md-shrinkable-menu/components/sidebarMenu.vue +167 -0
  31. package/src/components/md-shrinkable-menu/components/sidebarMenuShrink.vue +119 -0
  32. package/src/components/md-shrinkable-menu/demo/data/cachePage.js +1 -0
  33. package/src/components/md-shrinkable-menu/demo/data/currentPath.js +9 -0
  34. package/src/components/md-shrinkable-menu/demo/data/menu.js +575 -0
  35. package/src/components/md-shrinkable-menu/demo/data/menu2.js +1017 -0
  36. package/src/components/md-shrinkable-menu/demo/data/pageTagsList.js +153 -0
  37. package/src/components/md-shrinkable-menu/demo/index.less +297 -0
  38. package/src/components/md-shrinkable-menu/demo/index.vue +285 -0
  39. package/src/components/md-shrinkable-menu/index.vue +112 -0
  40. package/src/components/md-shrinkable-menu/sidebar.vue +195 -0
  41. package/src/components/md-shrinkable-menu/styles/menu.less +5 -0
  42. package/src/components/md-shrinkable-menu/styles/sidebar.less +363 -0
  43. package/src/components/md-split-pane/demo/index.vue +101 -0
  44. package/src/components/md-split-pane/index.js +3 -0
  45. package/src/components/md-split-pane/index.less +93 -0
  46. package/src/components/md-split-pane/index.vue +230 -0
  47. package/src/components/md-table/action-tooltip.vue +45 -0
  48. package/src/components/md-table/can-edit-v2.vue +823 -0
  49. package/src/components/md-table/can-edit.vue +723 -0
  50. package/src/components/md-table/custom-cell.vue +71 -0
  51. package/src/components/md-table/date-picker-cell-v2.vue +48 -0
  52. package/src/components/md-table/date-picker-cell.vue +39 -0
  53. package/src/components/md-table/demo/data/search.js +67 -0
  54. package/src/components/md-table/demo/data/table2csv.js +200 -0
  55. package/src/components/md-table/demo/data/table2excel.js +239 -0
  56. package/src/components/md-table/demo/data/table_data.js +251 -0
  57. package/src/components/md-table/demo/editable-table.vue +144 -0
  58. package/src/components/md-table/demo/exportable-table.vue +124 -0
  59. package/src/components/md-table/demo/widgets/header-search.vue +88 -0
  60. package/src/components/md-table/drop-down-cell-v2.vue +87 -0
  61. package/src/components/md-table/drop-down-cell.vue +81 -0
  62. package/src/components/md-table/editable-expand.vue +143 -0
  63. package/src/components/md-table/expand.vue +97 -0
  64. package/src/components/md-table/index.vue +53 -0
  65. package/src/components/md-table/iview-table/cell.vue +99 -0
  66. package/src/components/md-table/iview-table/expand.js +21 -0
  67. package/src/components/md-table/iview-table/export-csv.js +76 -0
  68. package/src/components/md-table/iview-table/header.js +16 -0
  69. package/src/components/md-table/iview-table/index.js +2 -0
  70. package/src/components/md-table/iview-table/mixin.js +31 -0
  71. package/src/components/md-table/iview-table/table-body.vue +101 -0
  72. package/src/components/md-table/iview-table/table-head.vue +311 -0
  73. package/src/components/md-table/iview-table/table-tr.vue +31 -0
  74. package/src/components/md-table/iview-table/table.vue +1026 -0
  75. package/src/components/md-table/iview-table/util.js +93 -0
  76. package/src/components/md-table/libs/table2excel.js +100 -0
  77. package/src/components/md-table/select-cell-v2.vue +64 -0
  78. package/src/components/md-table/select-cell.vue +46 -0
  79. package/src/components/md-table/table.less +76 -0
  80. package/src/components/md-toolbar/index.vue +171 -0
  81. package/src/components/md-tree/index.js +2 -0
  82. package/src/components/md-tree/node.vue +238 -0
  83. package/src/components/md-tree/render.js +17 -0
  84. package/src/components/md-tree/tree.vue +241 -0
  85. package/src/components/utilities/can.js +35 -0
  86. package/src/directives/index.js +34 -0
  87. package/src/directives/resize.js +27 -0
  88. package/src/directives/scroll.js +27 -0
  89. package/src/directives/style/bg-color.js +23 -0
  90. package/src/directives/style/color.js +23 -0
  91. package/src/directives/style/font-size.js +23 -0
  92. package/src/directives/style/height.js +23 -0
  93. package/src/directives/style/lineHeight.js +23 -0
  94. package/src/directives/style/margin.js +48 -0
  95. package/src/directives/style/opacity.js +23 -0
  96. package/src/directives/style/padding.js +48 -0
  97. package/src/directives/style/width.js +24 -0
  98. package/src/index.js +442 -0
  99. package/src/locale/lang.js +5 -0
  100. package/src/mixins/colorable.js +51 -0
  101. package/src/style/color/bezierEasing.less +110 -0
  102. package/src/style/color/colorPalette.less +75 -0
  103. package/src/style/color/colors.less +146 -0
  104. package/src/style/color/tinyColor.less +1184 -0
  105. package/src/style/common.less +72 -0
  106. package/src/style/components/_ripple.less +60 -0
  107. package/src/style/components/_shrinkable-menu.less +46 -0
  108. package/src/style/components/_toolbar.less +96 -0
  109. package/src/style/components/index.less +3 -0
  110. package/src/style/components/rich-editor.less +6 -0
  111. package/src/style/index.less +10 -0
  112. package/src/style/theme.less +155 -0
  113. package/src/utils/color.js +46 -0
  114. package/src/utils/console.js +105 -0
  115. package/src/utils/load.js +79 -0
  116. package/src/utils/mask.js +139 -0
  117. package/src/utils/mixins.js +5 -0
  118. package/src/utils/validate.js +271 -0
@@ -0,0 +1,238 @@
1
+ <template>
2
+ <collapse-transition :appear="appear">
3
+ <ul :class="classes" :draggable="draggable"
4
+ @dragover="allowDrop($event)"
5
+ @dragstart="handleDrag($event,data)"
6
+ @drop="handleDrop($event,data)">
7
+ <li>
8
+ <span :class="arrowClasses" @click="handleExpand">
9
+ <Icon v-if="showArrow" :type="arrowType" :custom="customArrowType" :size="arrowSize"/>
10
+ <Icon v-if="showLoading" type="ios-loading" class="ivu-load-loop"/>
11
+ </span>
12
+ <Checkbox
13
+ v-if="showCheckbox"
14
+ :value="data.checked"
15
+ :indeterminate="data.indeterminate"
16
+ :disabled="data.disabled || data.disableCheckbox"
17
+ @click.native.prevent="handleCheck"></Checkbox>
18
+ <Render v-if="data.render" :render="data.render" :data="data" :node="node"></Render>
19
+ <Render v-else-if="isParentRender" :render="parentRender" :data="data" :node="node"></Render>
20
+ <span v-else :class="titleClasses" @click="handleSelect">{{ data.title }}</span>
21
+ <Tree-node
22
+ v-if="data.expand"
23
+ :appear="appearByClickArrow"
24
+ v-for="(item, i) in children"
25
+ :key="i"
26
+ :data="item"
27
+ :multiple="multiple"
28
+ :show-checkbox="showCheckbox"
29
+ :children-key="childrenKey"
30
+ >
31
+ </Tree-node>
32
+ </li>
33
+ </ul>
34
+ </collapse-transition>
35
+ </template>
36
+ <script>
37
+ /* import Checkbox from '../checkbox/checkbox.vue';
38
+ import Icon from '../icon/icon.vue';*/
39
+ import Render from './render';
40
+ // import CollapseTransition from '../base/collapse-transition';
41
+ import CollapseTransition from 'iview/src/components/base/collapse-transition'
42
+ import Emitter from 'iview/src/mixins/emitter';
43
+ import {findComponentUpward} from 'iview/src/utils/assist';
44
+
45
+ const prefixCls = 'ivu-tree';
46
+
47
+ export default {
48
+ name: 'TreeNode',
49
+ mixins: [Emitter],
50
+ inject: ['TreeInstance', 'draggable'],
51
+ // components: { Checkbox, Icon, CollapseTransition, Render },
52
+ components: {CollapseTransition, Render},
53
+ props: {
54
+ data: {
55
+ type: Object,
56
+ default() {
57
+ return {};
58
+ }
59
+ },
60
+ multiple: {
61
+ type: Boolean,
62
+ default: false
63
+ },
64
+ childrenKey: {
65
+ type: String,
66
+ default: 'children'
67
+ },
68
+ showCheckbox: {
69
+ type: Boolean,
70
+ default: false
71
+ },
72
+ appear: {
73
+ type: Boolean,
74
+ default: false
75
+ }
76
+ },
77
+ data() {
78
+ return {
79
+ prefixCls: prefixCls,
80
+ appearByClickArrow: false
81
+ };
82
+ },
83
+ computed: {
84
+ classes() {
85
+ return [
86
+ `${prefixCls}-children`
87
+ ];
88
+ },
89
+ selectedCls() {
90
+ return [
91
+ {
92
+ [`${prefixCls}-node-selected`]: this.data.selected
93
+ }
94
+ ];
95
+ },
96
+ arrowClasses() {
97
+ return [
98
+ `${prefixCls}-arrow`,
99
+ {
100
+ [`${prefixCls}-arrow-disabled`]: this.data.disabled,
101
+ [`${prefixCls}-arrow-open`]: this.data.expand
102
+ }
103
+ ];
104
+ },
105
+ titleClasses() {
106
+ return [
107
+ `${prefixCls}-title`,
108
+ {
109
+ [`${prefixCls}-title-selected`]: this.data.selected
110
+ }
111
+ ];
112
+ },
113
+ showArrow() {
114
+ return (this.data[this.childrenKey] && this.data[this.childrenKey].length) || ('loading' in this.data && !this.data.loading);
115
+ },
116
+ showLoading() {
117
+ return 'loading' in this.data && this.data.loading;
118
+ },
119
+ isParentRender() {
120
+ const Tree = findComponentUpward(this, 'Tree');
121
+ return Tree && Tree.render;
122
+ },
123
+ parentRender() {
124
+ const Tree = findComponentUpward(this, 'Tree');
125
+ if (Tree && Tree.render) {
126
+ return Tree.render;
127
+ } else {
128
+ return null;
129
+ }
130
+ },
131
+ node() {
132
+ const Tree = findComponentUpward(this, 'Tree');
133
+ if (Tree) {
134
+ // 将所有的 node(即flatState)和当前 node 都传递
135
+ return [Tree.flatState, Tree.flatState.find(item => item.nodeKey === this.data.nodeKey)];
136
+ } else {
137
+ return [];
138
+ }
139
+ },
140
+ children() {
141
+ return this.data[this.childrenKey];
142
+ },
143
+ // 3.4.0, global setting customArrow 有值时,arrow 赋值空
144
+ arrowType() {
145
+ let type = 'ios-arrow-forward';
146
+
147
+ if (this.$IVIEW) {
148
+ if (this.$IVIEW.tree.customArrow) {
149
+ type = '';
150
+ } else if (this.$IVIEW.tree.arrow) {
151
+ type = this.$IVIEW.tree.arrow;
152
+ }
153
+ }
154
+ return type;
155
+ },
156
+ // 3.4.0, global setting
157
+ customArrowType() {
158
+ let type = '';
159
+
160
+ if (this.$IVIEW) {
161
+ if (this.$IVIEW.tree.customArrow) {
162
+ type = this.$IVIEW.tree.customArrow;
163
+ }
164
+ }
165
+ return type;
166
+ },
167
+ // 3.4.0, global setting
168
+ arrowSize() {
169
+ let size = '';
170
+
171
+ if (this.$IVIEW) {
172
+ if (this.$IVIEW.tree.arrowSize) {
173
+ size = this.$IVIEW.tree.arrowSize;
174
+ }
175
+ }
176
+ return size;
177
+ }
178
+ },
179
+ methods: {
180
+ allowDrop (e) {
181
+ e.preventDefault()
182
+ },
183
+ handleDrag(e, item) {
184
+ e.dataTransfer.setData('nodeKey', item.nodeKey);
185
+ e.stopPropagation()
186
+ },
187
+ handleDrop(e, item) {
188
+ const dragKey = parseInt(e.dataTransfer.getData('nodeKey'));
189
+ this.TreeInstance.dragAndDrop(item, dragKey, item.nodeKey);
190
+ e.stopPropagation();
191
+ },
192
+ handleExpand() {
193
+ const item = this.data;
194
+ if (item.disabled) return;
195
+
196
+ // Vue.js 2.6.9 对 transition 的 appear 进行了调整,导致 iView 初始化时无动画,加此方法来判断通过点击箭头展开时,加 appear,否则初始渲染时 appear 为 false
197
+ this.appearByClickArrow = true;
198
+
199
+ // async loading
200
+ if (item[this.childrenKey].length === 0) {
201
+ const tree = findComponentUpward(this, 'Tree');
202
+ if (tree && tree.loadData) {
203
+ this.$set(this.data, 'loading', true);
204
+ tree.loadData(item, children => {
205
+ this.$set(this.data, 'loading', false);
206
+ if (children.length) {
207
+ this.$set(this.data, this.childrenKey, children);
208
+ this.$nextTick(() => this.handleExpand());
209
+ }
210
+ });
211
+ return;
212
+ }
213
+ }
214
+
215
+ if (item[this.childrenKey] && item[this.childrenKey].length) {
216
+ this.$set(this.data, 'expand', !this.data.expand);
217
+ this.dispatch('Tree', 'toggle-expand', this.data);
218
+ }
219
+ },
220
+ handleSelect() {
221
+ if (this.data.disabled) return;
222
+ if (this.TreeInstance.showCheckbox && this.TreeInstance.checkDirectly) {
223
+ this.handleCheck();
224
+ } else {
225
+ this.dispatch('Tree', 'on-selected', this.data.nodeKey);
226
+ }
227
+ },
228
+ handleCheck() {
229
+ if (this.data.disabled) return;
230
+ const changes = {
231
+ checked: !this.data.checked && !this.data.indeterminate,
232
+ nodeKey: this.data.nodeKey
233
+ };
234
+ this.dispatch('Tree', 'on-check', changes);
235
+ }
236
+ }
237
+ };
238
+ </script>
@@ -0,0 +1,17 @@
1
+ export default {
2
+ name: 'RenderCell',
3
+ functional: true,
4
+ props: {
5
+ render: Function,
6
+ data: Object,
7
+ node: Array
8
+ },
9
+ render: (h, ctx) => {
10
+ const params = {
11
+ root: ctx.props.node[0],
12
+ node: ctx.props.node[1],
13
+ data: ctx.props.data
14
+ };
15
+ return ctx.props.render(h, params);
16
+ }
17
+ };
@@ -0,0 +1,241 @@
1
+ <template>
2
+ <div :class="prefixCls">
3
+ <Tree-node
4
+ v-for="(item, i) in stateTree"
5
+ :key="i"
6
+ :data="item"
7
+ visible
8
+ :multiple="multiple"
9
+ :show-checkbox="showCheckbox"
10
+ :children-key="childrenKey"
11
+ >
12
+ </Tree-node>
13
+ <div :class="[prefixCls + '-empty']" v-if="!stateTree.length">{{ localeEmptyText }}</div>
14
+ </div>
15
+ </template>
16
+ <script>
17
+ import TreeNode from './node.vue';
18
+ import Emitter from 'iview/src/mixins/emitter';
19
+ import Locale from 'iview/src/mixins/locale';
20
+
21
+ const prefixCls = 'ivu-tree';
22
+
23
+ export default {
24
+ name: 'Tree',
25
+ mixins: [Emitter, Locale],
26
+ components: {TreeNode},
27
+ provide() {
28
+ return {TreeInstance: this, draggable: this.draggable};
29
+ },
30
+ props: {
31
+ draggable: {
32
+ type: Boolean,
33
+ default: false
34
+ },
35
+ allowGetParentNode: {
36
+ type: Boolean,
37
+ default: false
38
+ },
39
+ data: {
40
+ type: Array,
41
+ default() {
42
+ return [];
43
+ }
44
+ },
45
+ multiple: {
46
+ type: Boolean,
47
+ default: false
48
+ },
49
+ showCheckbox: {
50
+ type: Boolean,
51
+ default: false
52
+ },
53
+ checkStrictly: {
54
+ type: Boolean,
55
+ default: false
56
+ },
57
+ // 当开启 showCheckbox 时,如果开启 checkDirectly,select 将强制转为 check 事件
58
+ checkDirectly: {
59
+ type: Boolean,
60
+ default: false
61
+ },
62
+ emptyText: {
63
+ type: String
64
+ },
65
+ childrenKey: {
66
+ type: String,
67
+ default: 'children'
68
+ },
69
+ loadData: {
70
+ type: Function
71
+ },
72
+ render: {
73
+ type: Function
74
+ },
75
+
76
+ },
77
+ data() {
78
+ return {
79
+ prefixCls: prefixCls,
80
+ stateTree: this.data,
81
+ flatState: [],
82
+ };
83
+ },
84
+ watch: {
85
+ data: {
86
+ deep: true,
87
+ handler() {
88
+ this.stateTree = this.data;
89
+ this.flatState = this.compileFlatState();
90
+ this.rebuildTree();
91
+ }
92
+ }
93
+ },
94
+ computed: {
95
+ localeEmptyText() {
96
+ if (typeof this.emptyText === 'undefined') {
97
+ return this.t('i.tree.emptyText');
98
+ } else {
99
+ return this.emptyText;
100
+ }
101
+ },
102
+ },
103
+ methods: {
104
+ dragAndDrop(item, dragKey, dropKey) {
105
+ let dragNode = JSON.parse(JSON.stringify(this.flatState[dragKey]));
106
+ if (item[this.childrenKey] && item[this.childrenKey].length) {
107
+ dragNode.parent = item.nodeKey;
108
+ }
109
+ let childrenKey = this.childrenKey;
110
+ let flattenChildren = (node, /*parent*/) =>{
111
+ if (node[childrenKey]) {
112
+ node[childrenKey] = node[childrenKey].filter(child => child.nodeKey !== dragKey)
113
+ if(node[childrenKey].length<=0) {
114
+ this.$delete(node, 'expand');
115
+ }
116
+ node[childrenKey].forEach(child => flattenChildren(child, node));
117
+ }
118
+ }
119
+ this.stateTree.forEach(rootNode => {
120
+ flattenChildren(rootNode);
121
+ });
122
+ console.log(this.stateTree);
123
+ item[this.childrenKey] = item[this.childrenKey]||[]
124
+ item[this.childrenKey].push(dragNode.node);
125
+ this.$set(item, 'expand', true);
126
+
127
+ this.$emit('on-drag-drop', dragKey, dropKey);
128
+ },
129
+ compileFlatState() { // so we have always a relation parent/children of each node
130
+ let keyCounter = 0;
131
+ let childrenKey = this.childrenKey;
132
+ const flatTree = [];
133
+
134
+ function flattenChildren(node, parent) {
135
+ node.nodeKey = keyCounter++;
136
+ flatTree[node.nodeKey] = {node: node, nodeKey: node.nodeKey};
137
+ if (typeof parent != 'undefined') {
138
+ flatTree[node.nodeKey].parent = parent.nodeKey;
139
+ flatTree[parent.nodeKey][childrenKey].push(node.nodeKey);
140
+ }
141
+
142
+ if (node[childrenKey]) {
143
+ flatTree[node.nodeKey][childrenKey] = [];
144
+ node[childrenKey].forEach(child => flattenChildren(child, node));
145
+ }
146
+ }
147
+
148
+ this.stateTree.forEach(rootNode => {
149
+ flattenChildren(rootNode);
150
+ });
151
+ return flatTree;
152
+ },
153
+ updateTreeUp(nodeKey) {
154
+ const parentKey = this.flatState[nodeKey].parent;
155
+ if (typeof parentKey == 'undefined' || this.checkStrictly) return;
156
+
157
+ const node = this.flatState[nodeKey].node;
158
+ const parent = this.flatState[parentKey].node;
159
+ if (node.checked == parent.checked && node.indeterminate == parent.indeterminate) return; // no need to update upwards
160
+
161
+ if (node.checked == true) {
162
+ this.$set(parent, 'checked', parent[this.childrenKey].every(node => node.checked));
163
+ this.$set(parent, 'indeterminate', !parent.checked);
164
+ } else {
165
+ this.$set(parent, 'checked', false);
166
+ this.$set(parent, 'indeterminate', parent[this.childrenKey].some(node => node.checked || node.indeterminate));
167
+ }
168
+ this.updateTreeUp(parentKey);
169
+ },
170
+ rebuildTree() { // only called when `data` prop changes
171
+ const checkedNodes = this.getCheckedNodes();
172
+ checkedNodes.forEach(node => {
173
+ this.updateTreeDown(node, {checked: true});
174
+ // propagate upwards
175
+ const parentKey = this.flatState[node.nodeKey].parent;
176
+ if (!parentKey && parentKey !== 0) return;
177
+ const parent = this.flatState[parentKey].node;
178
+ const childHasCheckSetter = typeof node.checked != 'undefined' && node.checked;
179
+ if (childHasCheckSetter && parent.checked != node.checked) {
180
+ this.updateTreeUp(node.nodeKey); // update tree upwards
181
+ }
182
+ });
183
+ },
184
+
185
+ getSelectedNodes() {
186
+ /* public API */
187
+ return this.flatState.filter(obj => obj.node.selected).map(obj => obj.node);
188
+ },
189
+ getCheckedNodes() {
190
+ /* public API */
191
+ return this.flatState.filter(obj => obj.node.checked).map(obj => obj.node);
192
+ },
193
+ getCheckedAndIndeterminateNodes() {
194
+ /* public API */
195
+ return this.flatState.filter(obj => (obj.node.checked || obj.node.indeterminate)).map(obj => obj.node);
196
+ },
197
+ updateTreeDown(node, changes = {}) {
198
+ if (this.checkStrictly) return;
199
+
200
+ for (let key in changes) {
201
+ this.$set(node, key, changes[key]);
202
+ }
203
+ if (node[this.childrenKey]) {
204
+ node[this.childrenKey].forEach(child => {
205
+ this.updateTreeDown(child, changes);
206
+ });
207
+ }
208
+ },
209
+ handleSelect(nodeKey) {
210
+ const node = this.flatState[nodeKey].node;
211
+ if (!this.multiple) { // reset previously selected node
212
+ const currentSelectedKey = this.flatState.findIndex(obj => obj.node.selected);
213
+ if (currentSelectedKey >= 0 && currentSelectedKey !== nodeKey) this.$set(this.flatState[currentSelectedKey].node, 'selected', false);
214
+ }
215
+ this.$set(node, 'selected', !node.selected);
216
+
217
+ this.$emit('on-select-change', this.getSelectedNodes(), node);
218
+ },
219
+ handleCheck({checked, nodeKey}) {
220
+ const node = this.flatState[nodeKey].node;
221
+ this.$set(node, 'checked', checked);
222
+ this.$set(node, 'indeterminate', false);
223
+
224
+ this.updateTreeUp(nodeKey); // propagate up
225
+ this.updateTreeDown(node, {checked, indeterminate: false}); // reset `indeterminate` when going down
226
+
227
+ this.$emit('on-check-change', this.getCheckedNodes(), node);
228
+ }
229
+ },
230
+ created() {
231
+ this.flatState = this.compileFlatState();
232
+ this.rebuildTree();
233
+ // console.log(this.stateTree);
234
+ },
235
+ mounted() {
236
+ this.$on('on-check', this.handleCheck);
237
+ this.$on('on-selected', this.handleSelect);
238
+ this.$on('toggle-expand', node => this.$emit('on-toggle-expand', node));
239
+ }
240
+ };
241
+ </script>
@@ -0,0 +1,35 @@
1
+ export default {
2
+ name: 'Can',
3
+ functional: true,
4
+ props: {
5
+ I: String,
6
+ a: [String, Array, Object],
7
+ of: [String, Array, Object],
8
+ not: Boolean,
9
+ },
10
+ watch:{
11
+ of(to) {
12
+ this.can(this.I, to, this.not)
13
+ },
14
+ I(to) {
15
+ this.can(to, this.of || this.a, this.not)
16
+ },
17
+ },
18
+ render(h, { props, children, parent, data }) {
19
+ const action = props.I;
20
+ const subject = props.of || props.a;
21
+
22
+ if (!action) {
23
+ throw new Error('[Vue Can]: neither `I` nor `do` property exist');
24
+ }
25
+ if (!subject) {
26
+ throw new Error('[Vue Can]: neither `of` nor `a` nor `this` nor `on` property exist');
27
+ }
28
+ const hasAction = (action, subject)=>{
29
+ return action === subject || Array.isArray(subject) && subject.indexOf(action) !== -1;
30
+ }
31
+ const allowed = !!(props.not ^ hasAction(action, subject));
32
+
33
+ return allowed ? children : null;
34
+ },
35
+ };
@@ -0,0 +1,34 @@
1
+ import Resize from './resize'
2
+ import Scroll from './scroll'
3
+ import Margin from './style/margin'
4
+ import Padding from './style/padding'
5
+ import Width from './style/width'
6
+ import Height from './style/height'
7
+ import LineHeight from './style/lineHeight'
8
+ import Color from './style/color'
9
+ import BgColor from './style/bg-color'
10
+ import Opacity from './style/opacity'
11
+ import FontSize from './style/font-size'
12
+
13
+
14
+
15
+ export {
16
+ Resize,
17
+ Scroll,
18
+ Width,
19
+ Height
20
+ }
21
+
22
+ export default {
23
+ Resize,
24
+ Scroll,
25
+ Margin,
26
+ Padding,
27
+ Width,
28
+ Height,
29
+ LineHeight,
30
+ Color,
31
+ FontSize,
32
+ BgColor,
33
+ Opacity
34
+ }
@@ -0,0 +1,27 @@
1
+ function inserted(el, binding) {
2
+ const callback = binding.value
3
+ const options = binding.options || { passive: true }
4
+
5
+ window.addEventListener('resize', callback, options)
6
+ el._onResize = {
7
+ callback,
8
+ options
9
+ }
10
+
11
+ if (!binding.modifiers || !binding.modifiers.quiet) {
12
+ callback()
13
+ }
14
+ }
15
+
16
+ function unbind(el) {
17
+ if (!el._onResize) return
18
+
19
+ const { callback, options } = el._onResize
20
+ window.removeEventListener('resize', callback, options)
21
+ delete el._onResize
22
+ }
23
+
24
+ export default {
25
+ inserted,
26
+ unbind
27
+ }
@@ -0,0 +1,27 @@
1
+ function inserted(el, binding) {
2
+ const callback = binding.value;
3
+ const options = binding.options || { passive: true };
4
+ const target = binding.arg ? document.querySelector(binding.arg) : window;
5
+ if (!target) return;
6
+
7
+ target.addEventListener('scroll', callback, options);
8
+
9
+ el._onScroll = {
10
+ callback,
11
+ options,
12
+ target
13
+ }
14
+ }
15
+
16
+ function unbind(el) {
17
+ if (!el._onScroll) return;
18
+
19
+ const { callback, options, target } = el._onScroll;
20
+ target.removeEventListener('scroll', callback, options);
21
+ delete el._onScroll
22
+ }
23
+
24
+ export default {
25
+ inserted,
26
+ unbind
27
+ }
@@ -0,0 +1,23 @@
1
+ function bind(el, binding, vnode) {
2
+ const callback = binding.value;
3
+ const options = binding.options || { passive: true};
4
+ const target = binding.arg
5
+
6
+ el.style.backgroundColor = callback;
7
+ el._bgColor = {
8
+ callback,
9
+ options,
10
+ target
11
+ }
12
+ }
13
+
14
+
15
+ function unbind(el) {
16
+ if (!el._bgColor) return;
17
+ delete el._bgColor
18
+ }
19
+
20
+ export default {
21
+ bind,
22
+ unbind
23
+ }
@@ -0,0 +1,23 @@
1
+ function bind(el, binding, vnode) {
2
+ const callback = binding.value;
3
+ const options = binding.options || { passive: true};
4
+ const target = binding.arg
5
+
6
+ el.style.color = callback;
7
+ el._color = {
8
+ callback,
9
+ options,
10
+ target
11
+ }
12
+ }
13
+
14
+
15
+ function unbind(el) {
16
+ if (!el._color) return;
17
+ delete el._color
18
+ }
19
+
20
+ export default {
21
+ bind,
22
+ unbind
23
+ }
@@ -0,0 +1,23 @@
1
+ function bind(el, binding, vnode) {
2
+ const callback = binding.value;
3
+ const options = binding.options || { passive: true};
4
+ const target = binding.arg
5
+
6
+ el.style.fontSize = callback;
7
+ el._fontSize = {
8
+ callback,
9
+ options,
10
+ target
11
+ }
12
+ }
13
+
14
+
15
+ function unbind(el) {
16
+ if (!el._fontSize) return;
17
+ delete el._fontSize
18
+ }
19
+
20
+ export default {
21
+ bind,
22
+ unbind
23
+ }