vue-editify 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,136 +1,136 @@
1
- <template>
2
- <div class="editify-link">
3
- <div class="editify-link-label">{{ $editTrans('linkAddress') }}</div>
4
- <input @focus="handleInputFocus" @blur="handleInputBlur" :placeholder="$editTrans('linkTextEnterPlaceholder')" v-model.trim="linkText" type="text" />
5
- <input @focus="handleInputFocus" @blur="handleInputBlur" :placeholder="$editTrans('linkUrlEnterPlaceholder')" v-model.trim="linkUrl" type="url" />
6
- <div class="editify-link-footer">
7
- <Checkbox v-model="newOpen" :label="$editTrans('newWindowOpen')" :color="color" :size="10"></Checkbox>
8
- <div class="editify-link-operations">
9
- <span :style="{ color: color }" @click="insertLink">{{ $editTrans('insertLink') }}</span>
10
- </div>
11
- </div>
12
- </div>
13
- </template>
14
- <script>
15
- import Checkbox from '../base/Checkbox'
16
- export default {
17
- name: 'InsertLink',
18
- emits: ['insert'],
19
- inject: ['$editTrans'],
20
- props: {
21
- //主题色
22
- color: {
23
- type: String,
24
- default: ''
25
- },
26
- //预置的链接文本值
27
- text: {
28
- type: String,
29
- default: ''
30
- }
31
- },
32
- data() {
33
- return {
34
- //链接地址
35
- linkUrl: '',
36
- //链接文本
37
- linkText: '',
38
- //是否新窗口打开
39
- newOpen: false
40
- }
41
- },
42
- watch: {
43
- text: {
44
- immediate: true,
45
- handler: function (newValue) {
46
- this.linkText = newValue
47
- }
48
- }
49
- },
50
- components: {
51
- Checkbox
52
- },
53
- methods: {
54
- //输入框获取焦点
55
- handleInputFocus(e) {
56
- if (this.color) {
57
- e.currentTarget.style.borderColor = this.color
58
- }
59
- },
60
- //输入框失去焦点
61
- handleInputBlur(e) {
62
- e.currentTarget.style.borderColor = ''
63
- },
64
- //插入链接
65
- insertLink() {
66
- this.$emit('insert', this.linkText, this.linkUrl, this.newOpen)
67
- }
68
- }
69
- }
70
- </script>
71
- <style lang="less" scoped>
72
- .editify-link {
73
- display: block;
74
- width: 280px;
75
- padding: 10px 14px;
76
-
77
- .editify-link-label {
78
- display: block;
79
- text-align: left;
80
- margin-bottom: 10px;
81
- font-size: @font-size;
82
- color: @font-color;
83
- }
84
-
85
- input {
86
- appearance: none;
87
- -webkit-appearance: none;
88
- -moz-appearance: none;
89
- display: block;
90
- width: 100%;
91
- margin: 0 0 10px 0;
92
- padding: 4px 2px;
93
- border: none;
94
- font-size: @font-size;
95
- color: @font-color;
96
- border-bottom: 1px solid @border-color;
97
- line-height: 1.5;
98
- transition: border-color 500ms;
99
- background-color: transparent;
100
- outline: none;
101
- box-sizing: border-box;
102
-
103
- &::-webkit-input-placeholder,
104
- &::placeholder {
105
- color: @font-color-disabled;
106
- font-family: inherit;
107
- font-size: inherit;
108
- vertical-align: middle;
109
- }
110
- }
111
-
112
- .editify-link-footer {
113
- display: flex;
114
- justify-content: space-between;
115
- align-items: center;
116
- width: 100%;
117
-
118
- .editify-link-operations {
119
- display: flex;
120
- justify-content: flex-start;
121
- align-items: center;
122
-
123
- & > span {
124
- cursor: pointer;
125
- opacity: 0.8;
126
- transition: all 200ms;
127
- font-size: @font-size;
128
-
129
- &:hover {
130
- opacity: 1;
131
- }
132
- }
133
- }
134
- }
135
- }
136
- </style>
1
+ <template>
2
+ <div class="editify-link">
3
+ <div class="editify-link-label">{{ $editTrans('linkAddress') }}</div>
4
+ <input @focus="handleInputFocus" @blur="handleInputBlur" :placeholder="$editTrans('linkTextEnterPlaceholder')" v-model.trim="linkText" type="text" />
5
+ <input @focus="handleInputFocus" @blur="handleInputBlur" :placeholder="$editTrans('linkUrlEnterPlaceholder')" v-model.trim="linkUrl" type="url" />
6
+ <div class="editify-link-footer">
7
+ <Checkbox v-model="newOpen" :label="$editTrans('newWindowOpen')" :color="color" :size="10"></Checkbox>
8
+ <div class="editify-link-operations">
9
+ <span :style="{ color: color }" @click="insertLink">{{ $editTrans('insertLink') }}</span>
10
+ </div>
11
+ </div>
12
+ </div>
13
+ </template>
14
+ <script>
15
+ import Checkbox from '../base/Checkbox'
16
+ export default {
17
+ name: 'InsertLink',
18
+ emits: ['insert'],
19
+ inject: ['$editTrans'],
20
+ props: {
21
+ //主题色
22
+ color: {
23
+ type: String,
24
+ default: ''
25
+ },
26
+ //预置的链接文本值
27
+ text: {
28
+ type: String,
29
+ default: ''
30
+ }
31
+ },
32
+ data() {
33
+ return {
34
+ //链接地址
35
+ linkUrl: '',
36
+ //链接文本
37
+ linkText: '',
38
+ //是否新窗口打开
39
+ newOpen: false
40
+ }
41
+ },
42
+ watch: {
43
+ text: {
44
+ immediate: true,
45
+ handler: function (newValue) {
46
+ this.linkText = newValue
47
+ }
48
+ }
49
+ },
50
+ components: {
51
+ Checkbox
52
+ },
53
+ methods: {
54
+ //输入框获取焦点
55
+ handleInputFocus(e) {
56
+ if (this.color) {
57
+ e.currentTarget.style.borderColor = this.color
58
+ }
59
+ },
60
+ //输入框失去焦点
61
+ handleInputBlur(e) {
62
+ e.currentTarget.style.borderColor = ''
63
+ },
64
+ //插入链接
65
+ insertLink() {
66
+ this.$emit('insert', this.linkText, this.linkUrl, this.newOpen)
67
+ }
68
+ }
69
+ }
70
+ </script>
71
+ <style lang="less" scoped>
72
+ .editify-link {
73
+ display: block;
74
+ width: 280px;
75
+ padding: 10px 14px;
76
+
77
+ .editify-link-label {
78
+ display: block;
79
+ text-align: left;
80
+ margin-bottom: 10px;
81
+ font-size: @font-size;
82
+ color: @font-color;
83
+ }
84
+
85
+ input {
86
+ appearance: none;
87
+ -webkit-appearance: none;
88
+ -moz-appearance: none;
89
+ display: block;
90
+ width: 100%;
91
+ margin: 0 0 10px 0;
92
+ padding: 4px 2px;
93
+ border: none;
94
+ font-size: @font-size;
95
+ color: @font-color;
96
+ border-bottom: 1px solid @border-color;
97
+ line-height: 1.5;
98
+ transition: border-color 500ms;
99
+ background-color: transparent;
100
+ outline: none;
101
+ box-sizing: border-box;
102
+
103
+ &::-webkit-input-placeholder,
104
+ &::placeholder {
105
+ color: @font-color-disabled;
106
+ font-family: inherit;
107
+ font-size: inherit;
108
+ vertical-align: middle;
109
+ }
110
+ }
111
+
112
+ .editify-link-footer {
113
+ display: flex;
114
+ justify-content: space-between;
115
+ align-items: center;
116
+ width: 100%;
117
+
118
+ .editify-link-operations {
119
+ display: flex;
120
+ justify-content: flex-start;
121
+ align-items: center;
122
+
123
+ & > span {
124
+ cursor: pointer;
125
+ opacity: 0.8;
126
+ transition: all 200ms;
127
+ font-size: @font-size;
128
+
129
+ &:hover {
130
+ opacity: 1;
131
+ }
132
+ }
133
+ }
134
+ }
135
+ }
136
+ </style>
@@ -1,157 +1,157 @@
1
- <template>
2
- <div class="editify-table">
3
- <table>
4
- <tr v-for="row in tableGrids">
5
- <td :class="{ inside: column.inside }" v-for="column in row" @mouseenter="changeTableSize(column)" @click="createTable(column)">
6
- <span></span>
7
- </td>
8
- </tr>
9
- </table>
10
- <div class="editify-table-footer">
11
- <span v-if="specification">{{ specification.x }} x {{ specification.y }}</span>
12
- <span v-else>{{ $editTrans('insertTable') }}</span>
13
- </div>
14
- </div>
15
- </template>
16
- <script>
17
- export default {
18
- name: 'InsertTable',
19
- emits: ['insert'],
20
- inject: ['$editTrans'],
21
- props: {
22
- //主题色
23
- color: {
24
- type: String,
25
- default: ''
26
- },
27
- //最大行数
28
- maxRows: {
29
- type: Number,
30
- default: 10
31
- },
32
- //最大列数
33
- maxColumns: {
34
- type: Number,
35
- default: 10
36
- }
37
- },
38
- data() {
39
- return {
40
- tableGrids: this.getTableGrids()
41
- }
42
- },
43
- computed: {
44
- //表格规格
45
- specification() {
46
- return this.tableGrids
47
- .flat()
48
- .filter(item => {
49
- return item.inside
50
- })
51
- .sort((a, b) => {
52
- if (a.x > b.x && a.y > b.y) {
53
- return -1
54
- }
55
- if (a.x > b.x) {
56
- return -1
57
- }
58
- if (a.y > b.y) {
59
- return -1
60
- }
61
- return 1
62
- })[0]
63
- }
64
- },
65
- methods: {
66
- //确认创立表格
67
- createTable(data) {
68
- this.$emit('insert', data.x, data.y)
69
- },
70
- //改变表格大小
71
- changeTableSize(data) {
72
- for (let i in this.tableGrids) {
73
- const grid = this.tableGrids[i]
74
- for (let j in grid) {
75
- if (grid[j].x <= data.x && grid[j].y <= data.y) {
76
- this.tableGrids[i][j].inside = true
77
- } else {
78
- this.tableGrids[i][j].inside = false
79
- }
80
- }
81
- }
82
- },
83
- //获取表格
84
- getTableGrids() {
85
- const grids = []
86
- for (let i = 1; i <= this.maxRows; i++) {
87
- let row = []
88
- for (let j = 1; j <= this.maxColumns; j++) {
89
- row.push({
90
- x: i,
91
- y: j,
92
- inside: false //是否被选中
93
- })
94
- }
95
- grids.push(row)
96
- }
97
- return grids
98
- }
99
- }
100
- }
101
- </script>
102
- <style lang="less" scoped>
103
- .editify-table {
104
- display: block;
105
- position: relative;
106
- padding: 10px 10px 32px 10px;
107
- box-sizing: border-box;
108
-
109
- table {
110
- border: 1px solid @border-color;
111
- margin: 0;
112
- padding: 0;
113
- border-collapse: collapse;
114
-
115
- tr {
116
- margin: 0;
117
- padding: 0;
118
-
119
- td {
120
- margin: 0;
121
- padding: 0;
122
- border: 1px solid @border-color;
123
-
124
- span {
125
- display: block;
126
- width: 15px;
127
- height: 15px;
128
- }
129
-
130
- &:hover {
131
- cursor: pointer;
132
- }
133
-
134
- &.inside {
135
- background-color: @background-darker;
136
- }
137
- }
138
- }
139
- }
140
-
141
- .editify-table-footer {
142
- text-align: center;
143
- color: @font-color-light;
144
- line-height: 1;
145
- font-size: 12px;
146
- position: absolute;
147
- padding: 0 10px;
148
- bottom: 10px;
149
- left: 0;
150
- width: 100%;
151
- overflow: hidden;
152
- text-overflow: ellipsis;
153
- white-space: nowrap;
154
- box-sizing: border-box;
155
- }
156
- }
157
- </style>
1
+ <template>
2
+ <div class="editify-table">
3
+ <table>
4
+ <tr v-for="row in tableGrids">
5
+ <td :class="{ inside: column.inside }" v-for="column in row" @mouseenter="changeTableSize(column)" @click="createTable(column)">
6
+ <span></span>
7
+ </td>
8
+ </tr>
9
+ </table>
10
+ <div class="editify-table-footer">
11
+ <span v-if="specification">{{ specification.x }} x {{ specification.y }}</span>
12
+ <span v-else>{{ $editTrans('insertTable') }}</span>
13
+ </div>
14
+ </div>
15
+ </template>
16
+ <script>
17
+ export default {
18
+ name: 'InsertTable',
19
+ emits: ['insert'],
20
+ inject: ['$editTrans'],
21
+ props: {
22
+ //主题色
23
+ color: {
24
+ type: String,
25
+ default: ''
26
+ },
27
+ //最大行数
28
+ maxRows: {
29
+ type: Number,
30
+ default: 10
31
+ },
32
+ //最大列数
33
+ maxColumns: {
34
+ type: Number,
35
+ default: 10
36
+ }
37
+ },
38
+ data() {
39
+ return {
40
+ tableGrids: this.getTableGrids()
41
+ }
42
+ },
43
+ computed: {
44
+ //表格规格
45
+ specification() {
46
+ return this.tableGrids
47
+ .flat()
48
+ .filter(item => {
49
+ return item.inside
50
+ })
51
+ .sort((a, b) => {
52
+ if (a.x > b.x && a.y > b.y) {
53
+ return -1
54
+ }
55
+ if (a.x > b.x) {
56
+ return -1
57
+ }
58
+ if (a.y > b.y) {
59
+ return -1
60
+ }
61
+ return 1
62
+ })[0]
63
+ }
64
+ },
65
+ methods: {
66
+ //确认创立表格
67
+ createTable(data) {
68
+ this.$emit('insert', data.x, data.y)
69
+ },
70
+ //改变表格大小
71
+ changeTableSize(data) {
72
+ for (let i in this.tableGrids) {
73
+ const grid = this.tableGrids[i]
74
+ for (let j in grid) {
75
+ if (grid[j].x <= data.x && grid[j].y <= data.y) {
76
+ this.tableGrids[i][j].inside = true
77
+ } else {
78
+ this.tableGrids[i][j].inside = false
79
+ }
80
+ }
81
+ }
82
+ },
83
+ //获取表格
84
+ getTableGrids() {
85
+ const grids = []
86
+ for (let i = 1; i <= this.maxRows; i++) {
87
+ let row = []
88
+ for (let j = 1; j <= this.maxColumns; j++) {
89
+ row.push({
90
+ x: i,
91
+ y: j,
92
+ inside: false //是否被选中
93
+ })
94
+ }
95
+ grids.push(row)
96
+ }
97
+ return grids
98
+ }
99
+ }
100
+ }
101
+ </script>
102
+ <style lang="less" scoped>
103
+ .editify-table {
104
+ display: block;
105
+ position: relative;
106
+ padding: 10px 10px 32px 10px;
107
+ box-sizing: border-box;
108
+
109
+ table {
110
+ border: 1px solid @border-color;
111
+ margin: 0;
112
+ padding: 0;
113
+ border-collapse: collapse;
114
+
115
+ tr {
116
+ margin: 0;
117
+ padding: 0;
118
+
119
+ td {
120
+ margin: 0;
121
+ padding: 0;
122
+ border: 1px solid @border-color;
123
+
124
+ span {
125
+ display: block;
126
+ width: 15px;
127
+ height: 15px;
128
+ }
129
+
130
+ &:hover {
131
+ cursor: pointer;
132
+ }
133
+
134
+ &.inside {
135
+ background-color: @background-darker;
136
+ }
137
+ }
138
+ }
139
+ }
140
+
141
+ .editify-table-footer {
142
+ text-align: center;
143
+ color: @font-color-light;
144
+ line-height: 1;
145
+ font-size: 12px;
146
+ position: absolute;
147
+ padding: 0 10px;
148
+ bottom: 10px;
149
+ left: 0;
150
+ width: 100%;
151
+ overflow: hidden;
152
+ text-overflow: ellipsis;
153
+ white-space: nowrap;
154
+ box-sizing: border-box;
155
+ }
156
+ }
157
+ </style>