efront 3.5.0 → 3.5.4
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.
- package/apps/pivot/api.yml +1 -1
- package/apps/pivot/share/edit.html +10 -0
- package/apps/pivot/share/edit.js +16 -0
- package/apps/pivot/share/list.js +19 -7
- package/coms/zimoli/alert.js +3 -3
- package/coms/zimoli/autodragchildren.js +96 -116
- package/coms/zimoli/button.js +5 -0
- package/coms/zimoli/button.less +6 -2
- package/coms/zimoli/color.js +128 -84
- package/coms/zimoli/colorpad.js +2 -4
- package/coms/zimoli/data.js +3 -3
- package/coms/zimoli/drag.js +2 -1
- package/coms/zimoli/getGenerator.js +6 -1
- package/coms/zimoli/image.less +2 -0
- package/coms/zimoli/menu.js +1 -0
- package/coms/zimoli/on.js +18 -0
- package/coms/zimoli/render.js +4 -2
- package/coms/zimoli/table.html +1 -1
- package/coms/zimoli/table.js +9 -1
- package/coms/zimoli/table.less +16 -8
- package/coms/zimoli/view.less +4 -3
- package/package.json +1 -1
- package/public/efront.js +1 -1
package/apps/pivot/api.yml
CHANGED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
function main({ fields, item }) {
|
|
2
|
+
var page = view();
|
|
3
|
+
page.innerHTML = edit;
|
|
4
|
+
renderWithDefaults(page, {
|
|
5
|
+
fields,
|
|
6
|
+
close() {
|
|
7
|
+
return remove(page);
|
|
8
|
+
},
|
|
9
|
+
save() {
|
|
10
|
+
return data.from("share", { opt: item ? 'update' : 'create', data: this.data }).loading_promise;
|
|
11
|
+
},
|
|
12
|
+
data: Object.assign({}, item)
|
|
13
|
+
});
|
|
14
|
+
drag.on(page.firstChild, page);
|
|
15
|
+
return page;
|
|
16
|
+
}
|
package/apps/pivot/share/list.js
CHANGED
|
@@ -1,23 +1,35 @@
|
|
|
1
1
|
var fields = refilm`
|
|
2
2
|
路径/path
|
|
3
|
-
|
|
3
|
+
挂载点/name
|
|
4
|
+
`;
|
|
5
|
+
var options = [
|
|
6
|
+
{
|
|
4
7
|
name: "删除",
|
|
5
8
|
do(e) {
|
|
6
|
-
|
|
7
|
-
alert("暂不支持删除!");
|
|
9
|
+
data.from('share', { opt: 'delete', item: e });
|
|
8
10
|
}
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "修改",
|
|
14
|
+
do(e) {
|
|
15
|
+
popup('/share/edit', { fields, item: e });
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
];
|
|
11
19
|
console.log(fields)
|
|
12
20
|
function main() {
|
|
13
21
|
var page = div();
|
|
14
22
|
page.innerHTML = list;
|
|
15
|
-
var a = data.from("share", a => {
|
|
23
|
+
var a = data.from("share", { opt: 'list' }, a => {
|
|
16
24
|
if (a) return a.map(b => ({ path: b }));
|
|
17
25
|
});
|
|
18
26
|
renderWithDefaults(page, {
|
|
19
27
|
data: a,
|
|
20
|
-
fields
|
|
28
|
+
fields: fields.concat({
|
|
29
|
+
name: "操作",
|
|
30
|
+
type: 'button',
|
|
31
|
+
options,
|
|
32
|
+
}),
|
|
21
33
|
});
|
|
22
34
|
console.log(a)
|
|
23
35
|
return page;
|
package/coms/zimoli/alert.js
CHANGED
|
@@ -86,6 +86,16 @@ var bindTarget = function (index, element) {
|
|
|
86
86
|
};
|
|
87
87
|
|
|
88
88
|
var hooka = function (matcher, move, event, targetChild, isMovingSource) {
|
|
89
|
+
var dragbox = this.dragbox;
|
|
90
|
+
if (dragbox instanceof Function) {
|
|
91
|
+
dragbox = dragbox.call(this);
|
|
92
|
+
if (dragbox && !getTargetIn(dragbox, event.target)) return;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
dragbox = this;
|
|
96
|
+
}
|
|
97
|
+
var that = this;
|
|
98
|
+
|
|
89
99
|
var draggingSourceOpacity = isMovingSource !== false ? 0 : 1;
|
|
90
100
|
|
|
91
101
|
var recover = function (element) {
|
|
@@ -130,41 +140,89 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
|
|
|
130
140
|
}
|
|
131
141
|
var targetBox, saved_opacity, saved_filter, moveMargin, moveChildren;
|
|
132
142
|
var previousElements, followedElements, rebuildTargets, scroll;
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
143
|
+
var that = this;
|
|
144
|
+
var draginit = function () {
|
|
145
|
+
that.setAttribute('dragchildren', '');
|
|
146
|
+
if (targetBox) addClass(targetBox, 'dropping');
|
|
147
|
+
if (getTargetIn(dragbox, targetChild)) {
|
|
148
|
+
targetBox = targetChild.parentNode;
|
|
149
|
+
previousElements = getPreviousElementSiblings(targetChild);
|
|
150
|
+
followedElements = getFollowedElementSiblings(targetChild);
|
|
151
|
+
saved_filter = targetBox.style.filter;
|
|
152
|
+
saved_opacity = targetBox.style.opacity;
|
|
153
|
+
rebuildTargets = function () { };
|
|
154
|
+
[moveMargin, moveChildren, scroll] = getMoveFuncs(targetChild);
|
|
155
|
+
moveChildren = moveChildren.bind(null, targetBox, previousElements, followedElements, moveMargin, recover);
|
|
156
|
+
} else {
|
|
157
|
+
previousElements = [];
|
|
158
|
+
followedElements = [];
|
|
159
|
+
moveChildren = () => { };
|
|
160
|
+
rebuildTargets = function () {
|
|
161
|
+
var temp = matcher(drag.target);
|
|
162
|
+
if (temp === targetBox) return;
|
|
163
|
+
if (previousElements) previousElements.map(recover);
|
|
164
|
+
if (followedElements) followedElements.map(recover);
|
|
165
|
+
if (targetBox) {
|
|
166
|
+
removeClass(targetBox, "dropping");
|
|
167
|
+
}
|
|
168
|
+
targetBox = temp;
|
|
169
|
+
if (!targetBox) {
|
|
170
|
+
previousElements = [];
|
|
171
|
+
followedElements = [];
|
|
172
|
+
moveChildren = () => { };
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
addClass(targetBox, "dropping");
|
|
176
|
+
previousElements = [].slice.call(targetBox.children, 0).reverse();
|
|
157
177
|
followedElements = [];
|
|
158
|
-
moveChildren = ()
|
|
159
|
-
|
|
178
|
+
[moveMargin, moveChildren, scroll] = getMoveFuncs(previousElements[0]);
|
|
179
|
+
moveChildren = moveChildren.bind(null, targetBox, previousElements, followedElements, moveMargin, recover);
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
};
|
|
183
|
+
var dragfire = function () {
|
|
184
|
+
that.removeAttribute('dragchildren');
|
|
185
|
+
removeClass(targetBox, "dropping");
|
|
186
|
+
var dst, appendSibling, delta;
|
|
187
|
+
var src = previousElements.length;
|
|
188
|
+
if (previousElements.length && previousElements[0].moved) for (var cx = 1, dx = previousElements.length + 1; cx < dx; cx++) {
|
|
189
|
+
if (!previousElements[cx]) {
|
|
190
|
+
dst = 0;
|
|
191
|
+
delta = 0;
|
|
192
|
+
appendSibling = appendChild.before;
|
|
193
|
+
} else if (!previousElements[cx].moved) {
|
|
194
|
+
dst = previousElements.length - cx;
|
|
195
|
+
delta = -1;
|
|
196
|
+
appendSibling = appendChild.after;
|
|
197
|
+
break;
|
|
160
198
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
if (followedElements.length && followedElements[0].moved) for (var cx = 1, dx = followedElements.length + 1; cx < dx; cx++) {
|
|
202
|
+
if (!followedElements[cx]) {
|
|
203
|
+
dst = followedElements.length + previousElements.length;
|
|
204
|
+
delta = 0;
|
|
205
|
+
appendSibling = appendChild.after;
|
|
206
|
+
} else if (!followedElements[cx].moved) {
|
|
207
|
+
dst = previousElements.length + cx;
|
|
208
|
+
delta = 1;
|
|
209
|
+
appendSibling = appendChild.before;
|
|
210
|
+
break;
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (appendSibling) {
|
|
214
|
+
var children = targetBox.children;
|
|
215
|
+
var srcElement = children[src];
|
|
216
|
+
var dstElement = children[dst + delta];
|
|
217
|
+
src = bindTarget(src, srcElement);
|
|
218
|
+
dst = bindTarget(dst, dstElement);
|
|
219
|
+
isFunction(move) && move(src, dst, dst + delta, appendSibling, targetBox);
|
|
220
|
+
if (srcElement === children[src] && dstElement === children[dst + delta] && srcElement && dstElement) appendSibling(dstElement, srcElement);
|
|
221
|
+
} else if (isMovingSource === false) {
|
|
222
|
+
move(previousElements.length, previousElements.length, previousElements.length, null, targetBox);
|
|
223
|
+
}
|
|
224
|
+
};
|
|
225
|
+
|
|
168
226
|
var offall = function () {
|
|
169
227
|
offmousup();
|
|
170
228
|
offtouchend();
|
|
@@ -190,8 +248,8 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
|
|
|
190
248
|
|
|
191
249
|
// 修改margin无效的情况
|
|
192
250
|
function dragclone() {
|
|
251
|
+
draginit();
|
|
193
252
|
rebuildTargets();
|
|
194
|
-
if (targetBox) addClass(targetBox, 'dropping');
|
|
195
253
|
var _previousElements = previousElements.map(cloneCell);
|
|
196
254
|
var _followedElements = followedElements.map(cloneCell);
|
|
197
255
|
previousElements.splice(0, previousElements.length);
|
|
@@ -204,109 +262,33 @@ var hooka = function (matcher, move, event, targetChild, isMovingSource) {
|
|
|
204
262
|
var offall = function () {
|
|
205
263
|
offdragmove();
|
|
206
264
|
offdragend();
|
|
207
|
-
removeClass(targetBox, "dropping");
|
|
208
265
|
};
|
|
209
266
|
var offdragend = on("dragend")(targetChild, function () {
|
|
210
267
|
offall();
|
|
268
|
+
dragfire();
|
|
211
269
|
css(targetBox, { opacity: saved_opacity, filter: saved_filter });
|
|
212
270
|
remove(previousElements);
|
|
213
271
|
remove(followedElements);
|
|
214
|
-
var dst, appendSibling, delta;
|
|
215
|
-
var src = previousElements.length;
|
|
216
|
-
if (previousElements.length && previousElements[0].moved) for (var cx = 1, dx = previousElements.length + 1; cx < dx; cx++) {
|
|
217
|
-
if (!previousElements[cx]) {
|
|
218
|
-
dst = 0;
|
|
219
|
-
delta = 0;
|
|
220
|
-
appendSibling = appendChild.before;
|
|
221
|
-
} else if (!previousElements[cx].moved) {
|
|
222
|
-
dst = previousElements.length - cx;
|
|
223
|
-
delta = -1;
|
|
224
|
-
appendSibling = appendChild.after;
|
|
225
|
-
break;
|
|
226
|
-
}
|
|
227
|
-
}
|
|
228
|
-
|
|
229
|
-
if (followedElements.length && followedElements[0].moved) for (var cx = 1, dx = followedElements.length + 1; cx < dx; cx++) {
|
|
230
|
-
if (!followedElements[cx]) {
|
|
231
|
-
dst = followedElements.length + previousElements.length;
|
|
232
|
-
delta = 0;
|
|
233
|
-
appendSibling = appendChild.after;
|
|
234
|
-
} else if (!followedElements[cx].moved) {
|
|
235
|
-
dst = previousElements.length + cx;
|
|
236
|
-
delta = 1;
|
|
237
|
-
appendSibling = appendChild.before;
|
|
238
|
-
break;
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
272
|
previousElements.map(recover);
|
|
242
273
|
followedElements.map(recover);
|
|
243
|
-
if (appendSibling) {
|
|
244
|
-
var children = targetBox.children;
|
|
245
|
-
var srcElement = children[src];
|
|
246
|
-
var dstElement = children[dst + delta];
|
|
247
|
-
src = bindTarget(src, srcElement);
|
|
248
|
-
dst = bindTarget(dst, dstElement);
|
|
249
|
-
isFunction(move) && move(src, dst, dst + delta, appendSibling, targetBox);
|
|
250
|
-
if (srcElement === children[src] && dstElement === children[dst + delta] && srcElement && dstElement) appendSibling(dstElement, srcElement);
|
|
251
|
-
} else if (isMovingSource === false) {
|
|
252
|
-
move(previousElements.length, previousElements.length, previousElements.length, null, targetBox);
|
|
253
|
-
}
|
|
254
274
|
});
|
|
255
275
|
var offdragmove = on("dragmove")(targetChild, dragmove);
|
|
256
276
|
}
|
|
257
277
|
// 仅修改Margin就可以实现拖拽效果
|
|
258
278
|
function draglist() {
|
|
279
|
+
draginit();
|
|
259
280
|
rebuildTargets();
|
|
260
|
-
if (targetBox) addClass(targetBox, 'dropping');
|
|
261
281
|
autoScroll();
|
|
262
282
|
var offall = function () {
|
|
263
283
|
cancelScroll();
|
|
264
284
|
offdragmove();
|
|
265
285
|
offdragend();
|
|
266
|
-
if (targetBox) removeClass(targetBox, "dropping");
|
|
267
286
|
};
|
|
268
287
|
var offdragend = on("dragend")(targetChild, function () {
|
|
269
288
|
offall();
|
|
270
|
-
|
|
271
|
-
var src = previousElements.length;
|
|
272
|
-
if (previousElements.length && previousElements[0].moved) for (var cx = 1, dx = previousElements.length + 1; cx < dx; cx++) {
|
|
273
|
-
if (!previousElements[cx]) {
|
|
274
|
-
dst = 0;
|
|
275
|
-
delta = 0;
|
|
276
|
-
appendSibling = appendChild.before;
|
|
277
|
-
} else if (!previousElements[cx].moved) {
|
|
278
|
-
dst = previousElements.length - cx;
|
|
279
|
-
delta = -1;
|
|
280
|
-
appendSibling = appendChild.after;
|
|
281
|
-
break;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
if (followedElements.length && followedElements[0].moved) for (var cx = 1, dx = followedElements.length + 1; cx < dx; cx++) {
|
|
286
|
-
if (!followedElements[cx]) {
|
|
287
|
-
dst = followedElements.length + previousElements.length;
|
|
288
|
-
delta = 0;
|
|
289
|
-
appendSibling = appendChild.after;
|
|
290
|
-
} else if (!followedElements[cx].moved) {
|
|
291
|
-
dst = previousElements.length + cx;
|
|
292
|
-
delta = 1;
|
|
293
|
-
appendSibling = appendChild.before;
|
|
294
|
-
break;
|
|
295
|
-
}
|
|
296
|
-
}
|
|
289
|
+
dragfire();
|
|
297
290
|
previousElements.map(e => moveMargin(e, false));
|
|
298
291
|
followedElements.map(e => moveMargin(e, false));
|
|
299
|
-
if (appendSibling) {
|
|
300
|
-
var children = targetBox.children;
|
|
301
|
-
var srcElement = children[src];
|
|
302
|
-
var dstElement = children[dst + delta];
|
|
303
|
-
src = bindTarget(src, srcElement);
|
|
304
|
-
dst = bindTarget(dst, dstElement);
|
|
305
|
-
isFunction(move) && move(src, dst, dst + delta, appendSibling, targetBox);
|
|
306
|
-
if (srcElement === children[src] && dstElement === children[dst + delta] && srcElement && dstElement) appendSibling(dstElement, srcElement);
|
|
307
|
-
} else if (isMovingSource === false) {
|
|
308
|
-
move(previousElements.length, previousElements.length, previousElements.length, null, targetBox);
|
|
309
|
-
}
|
|
310
292
|
});
|
|
311
293
|
var offdragmove = on("dragmove")(targetChild, dragmove);
|
|
312
294
|
}
|
|
@@ -320,9 +302,7 @@ var hookEvent = function (matcher, move, event) {
|
|
|
320
302
|
if (event.target === this) return;
|
|
321
303
|
var targetChild = getTargetIn(matcher, event.target, false);
|
|
322
304
|
if (!targetChild) return;
|
|
323
|
-
|
|
324
|
-
if (dragbox instanceof Function) dragbox = dragbox.call(this);
|
|
325
|
-
hooka.call(dragbox || this, matcher, move, event, targetChild);
|
|
305
|
+
hooka.call(this, matcher, move, event, targetChild);
|
|
326
306
|
};
|
|
327
307
|
function addhook() {
|
|
328
308
|
var mousedownEvent, targetElement, callback, matcher, dropid, allowdrops;
|
package/coms/zimoli/button.js
CHANGED
|
@@ -95,6 +95,11 @@ function button(texter, type) {
|
|
|
95
95
|
if (_texter.tagName) {
|
|
96
96
|
var button = _texter;
|
|
97
97
|
if (button.childNodes.length) {
|
|
98
|
+
if (button.childNodes.length === 1 && button.childNodes[0].nodeType !== 1) {
|
|
99
|
+
_texter = createElement(_label);
|
|
100
|
+
_texter.appendChild(button.childNodes[0]);
|
|
101
|
+
button.appendChild(_texter);
|
|
102
|
+
}
|
|
98
103
|
appendChild.before(button.childNodes[0], tracker);
|
|
99
104
|
} else {
|
|
100
105
|
appendChild(button, tracker);
|
package/coms/zimoli/button.less
CHANGED
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
overflow: hidden;
|
|
19
19
|
outline: none;
|
|
20
20
|
}
|
|
21
|
-
|
|
21
|
+
>.label{
|
|
22
|
+
position: relative;
|
|
23
|
+
}
|
|
22
24
|
|
|
23
25
|
@keyframes busy-loading {
|
|
24
26
|
0% {
|
|
@@ -139,9 +141,11 @@
|
|
|
139
141
|
margin-left: -2px;
|
|
140
142
|
height: 200%;
|
|
141
143
|
background: #fff9;
|
|
144
|
+
background: inherit;
|
|
145
|
+
opacity: 0.9;
|
|
142
146
|
border-left: 1px #fff3 solid;
|
|
143
147
|
border-right: 3px #fff6 solid;
|
|
144
|
-
animation: ltr
|
|
148
|
+
animation: ltr 2s linear 0s infinite;
|
|
145
149
|
}
|
|
146
150
|
|
|
147
151
|
}
|
package/coms/zimoli/color.js
CHANGED
|
@@ -3,61 +3,92 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
var { min, max, sin, cos, round, sqrt, random, PI, abs = a => a < 0 ? -a : a } = Math;
|
|
6
|
-
|
|
6
|
+
var [v_r, v_g, v_b] = [.299, .587, .114];
|
|
7
7
|
|
|
8
8
|
var rgb4v = function (r, g, b, v) {
|
|
9
|
-
|
|
10
|
-
return
|
|
9
|
+
var d = v - rgb2v(r, g, b);
|
|
10
|
+
return [r + d, g + d, b + d];
|
|
11
11
|
};
|
|
12
12
|
|
|
13
|
-
var trim3v = function (r, g, b) {
|
|
14
|
-
do {
|
|
15
|
-
var rest = 0;
|
|
16
|
-
var count = 1;
|
|
17
|
-
if (r >= 255) rest += (r - 255) * .299, r = 255, count -= .299;
|
|
18
|
-
if (g >= 255) rest += (g - 255) * .587, g = 255, count -= .587;
|
|
19
|
-
if (b >= 255) rest += (b - 255) * .114, b = 255, count -= .114;
|
|
20
|
-
if (count > 0.01 && rest > 0) {
|
|
21
|
-
rest = rest / count;
|
|
22
|
-
if (r < 255) r += rest;
|
|
23
|
-
if (g < 255) g += rest;
|
|
24
|
-
if (b < 255) b += rest;
|
|
25
|
-
}
|
|
26
|
-
} while (rest > 0);
|
|
27
|
-
do {
|
|
28
|
-
var rest = 0;
|
|
29
|
-
var count = 1;
|
|
30
|
-
if (r <= 0) rest += r * .299, r = 0, count -= .299;
|
|
31
|
-
if (g <= 0) rest += g * .587, g = 0, count -= .587;
|
|
32
|
-
if (b <= 0) rest += b * .114, b = 0, count -= .114;
|
|
33
|
-
if (count > 0.01 && rest > 0) {
|
|
34
|
-
rest = rest / count;
|
|
35
|
-
if (r > 0) r += rest;
|
|
36
|
-
if (g > 0) g += rest;
|
|
37
|
-
if (b > 0) b += rest;
|
|
38
|
-
}
|
|
39
|
-
} while (rest > 0);
|
|
40
13
|
|
|
14
|
+
|
|
15
|
+
var rgb4h = function (r, g, b, h) {
|
|
16
|
+
var [p, q, s] = [r, g, b].sort();
|
|
17
|
+
var m = s - p;
|
|
18
|
+
h = (h % 360 + 360) % 360;
|
|
19
|
+
if (h < 60) {
|
|
20
|
+
r = s;
|
|
21
|
+
g = p + m * h / 60;
|
|
22
|
+
b = p;
|
|
23
|
+
}
|
|
24
|
+
else if (h < 120) {
|
|
25
|
+
r = p + m * (120 - h) / 60;
|
|
26
|
+
g = s;
|
|
27
|
+
b = p;
|
|
28
|
+
}
|
|
29
|
+
else if (h < 180) {
|
|
30
|
+
r = p;
|
|
31
|
+
g = s;
|
|
32
|
+
b = p + m * (h - 120) / 60
|
|
33
|
+
}
|
|
34
|
+
else if (h < 240) {
|
|
35
|
+
r = p;
|
|
36
|
+
g = p + m * (240 - h) / 60;
|
|
37
|
+
b = s;
|
|
38
|
+
}
|
|
39
|
+
else if (h < 300) {
|
|
40
|
+
r = p + m * (h - 240) / 60;
|
|
41
|
+
g = p;
|
|
42
|
+
b = s;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
r = s;
|
|
46
|
+
g = p;
|
|
47
|
+
b = p + m * (360 - h) / 60;
|
|
48
|
+
}
|
|
41
49
|
return [r, g, b];
|
|
42
|
-
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
var rgb2h = function (r, g, b) {
|
|
54
|
+
var m = max(r, g, b);
|
|
55
|
+
var n = min(r, g, b);
|
|
56
|
+
var h;
|
|
57
|
+
if (m === n) h = 0;
|
|
58
|
+
else if (m === r) {
|
|
59
|
+
if (g >= b) {
|
|
60
|
+
h = 60 * (g - b) / (m - n);
|
|
61
|
+
} else {
|
|
62
|
+
h = 360 + 60 * (g - b) / (m - n);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
else if (m === g) {
|
|
66
|
+
h = 120 + 60 * (b - r) / (m - n);
|
|
67
|
+
}
|
|
68
|
+
else if (m === b) {
|
|
69
|
+
h = 240 + 60 * (r - g) / (m - n);
|
|
70
|
+
|
|
71
|
+
}
|
|
72
|
+
return h;
|
|
73
|
+
};
|
|
43
74
|
|
|
44
75
|
var rgb2s = function (r, g, b) {
|
|
45
|
-
var m =
|
|
76
|
+
var m = min(r, g, b);
|
|
46
77
|
if (m) {
|
|
47
78
|
r -= m;
|
|
48
79
|
g -= m;
|
|
49
80
|
b -= m;
|
|
50
81
|
}
|
|
51
|
-
return
|
|
82
|
+
return max(r, g, b) / 255;
|
|
52
83
|
};
|
|
53
84
|
var rgb4s = function (r, g, b, s) {
|
|
54
|
-
var m =
|
|
85
|
+
var m = min(r, g, b);
|
|
55
86
|
if (m) {
|
|
56
87
|
r -= m;
|
|
57
88
|
g -= m;
|
|
58
89
|
b -= m;
|
|
59
90
|
}
|
|
60
|
-
s = s * 255 / (
|
|
91
|
+
s = s * 255 / (max(r, g, b) || 1);
|
|
61
92
|
if (s) {
|
|
62
93
|
r *= s;
|
|
63
94
|
g *= s;
|
|
@@ -70,37 +101,45 @@ var rgb4s = function (r, g, b, s) {
|
|
|
70
101
|
function rotate_rgb(RGBA, theta) {
|
|
71
102
|
var [r, g, b, a] = RGBA;
|
|
72
103
|
if (isNaN(theta)) return [r, g, b, a];
|
|
104
|
+
var h = rgb2h(r, g, b);
|
|
73
105
|
var s = rgb2s(r, g, b);
|
|
74
106
|
var v = rgb2v(r, g, b);
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
var
|
|
81
|
-
var
|
|
82
|
-
var
|
|
83
|
-
var
|
|
84
|
-
var
|
|
85
|
-
var
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
green
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
107
|
+
h += theta * 180 / Math.PI;
|
|
108
|
+
[r, g, b] = rgb4h(r, g, b, h);
|
|
109
|
+
[r, g, b] = rgb4s(r, g, b, s);
|
|
110
|
+
[r, g, b] = rgb4v(r, g, b, v);
|
|
111
|
+
return [r, g, b];
|
|
112
|
+
// var s = rgb2s(r, g, b);
|
|
113
|
+
// var v = rgb2v(r, g, b);
|
|
114
|
+
// var u = sqrt(3) / 3;
|
|
115
|
+
// var pu = 1 / 3;
|
|
116
|
+
// var cosa = cos(theta);
|
|
117
|
+
// var sina = sin(theta);
|
|
118
|
+
// var vera = 1 - cosa;
|
|
119
|
+
// var red = (cosa + pu * vera) * r + (pu * vera - u * sina) * g + (pu * vera + u * sina) * b;
|
|
120
|
+
// var green = (pu * vera + u * sina) * r + (cosa + pu * vera) * g + (pu * vera - u * sina) * b;
|
|
121
|
+
// var blue = (pu * vera - u * sina) * r + (pu * vera + u * sina) * g + (cosa + pu * vera) * b;
|
|
122
|
+
// var m = mode([red, green, blue]);
|
|
123
|
+
// var _min = min(red, green, blue);
|
|
124
|
+
// var d = [m - red, m - green, m - blue]
|
|
125
|
+
// if (_min < 0) {
|
|
126
|
+
// var index = red < 0 ? 0 : green < 0 ? 1 : 2;
|
|
127
|
+
// var [dr, dg, db] = single(d, -_min / d[index]);
|
|
128
|
+
// } else {
|
|
129
|
+
// var _max = max(red, green, blue);
|
|
130
|
+
// if (_max > 255) {
|
|
131
|
+
// var index = red > 255 ? 0 : green > 255 ? 1 : 2;
|
|
132
|
+
// var [dr, dg, db] = single(d, (255 - _max) / d[index]);
|
|
133
|
+
// } else {
|
|
134
|
+
// var dr, dg, db = dr = dg = 0;
|
|
135
|
+
// }
|
|
136
|
+
// }
|
|
137
|
+
// red += dr;
|
|
138
|
+
// green += dg;
|
|
139
|
+
// blue += db;
|
|
140
|
+
// [red, green, blue] = rgb4s(red, green, blue, s);
|
|
141
|
+
// [red, green, blue] = rgb4v(red, green, blue, v);
|
|
142
|
+
// return [red, green, blue, a];
|
|
104
143
|
}
|
|
105
144
|
// 对比度
|
|
106
145
|
function contrast_rgb(RGBA, ratio) {
|
|
@@ -226,22 +265,24 @@ function single(c, u) {
|
|
|
226
265
|
return [r * u, g * u, b * u];
|
|
227
266
|
}
|
|
228
267
|
function angle(c1, c2) {
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
c1 =
|
|
232
|
-
c2 =
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
var
|
|
236
|
-
var
|
|
237
|
-
var
|
|
238
|
-
var
|
|
239
|
-
var
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
}
|
|
268
|
+
var theta = rgb2h(c2[0], c2[1], c2[2]) - rgb2h(c1[0], c1[1], c1[2]);
|
|
269
|
+
if (theta < 0) theta += 360;
|
|
270
|
+
// c1 = parse(c1);
|
|
271
|
+
// c2 = parse(c2);
|
|
272
|
+
// c1 = normal(c1);
|
|
273
|
+
// c2 = normal(c2);
|
|
274
|
+
// var [r1, g1, b1] = single(c1);
|
|
275
|
+
// var [r2, g2, b2] = single(c2);
|
|
276
|
+
// var c = [g1 * b2 - g2 * b1, b1 * r2 - b2 * r1, r1 * g2 - r2 * g1];
|
|
277
|
+
// var d = r1 * r2 + g1 * g2 + b1 * b2;
|
|
278
|
+
// var e = c[0] > 0 ? mode(c) : -mode(c);
|
|
279
|
+
// var theta = Math.asin(e > 1 ? 1 : e < -1 ? -1 : e);
|
|
280
|
+
// var phi = Math.acos(d > 1 ? 1 : d < -1 ? -1 : d);
|
|
281
|
+
// if (theta < 0) {
|
|
282
|
+
// theta = Math.PI * 2 - phi;
|
|
283
|
+
// } else {
|
|
284
|
+
// theta = phi;
|
|
285
|
+
// }
|
|
245
286
|
return theta;
|
|
246
287
|
}
|
|
247
288
|
function equal(c1, c2) {
|
|
@@ -274,10 +315,10 @@ var colorDesigner = {
|
|
|
274
315
|
contrast: 1
|
|
275
316
|
};
|
|
276
317
|
var rgb2v = function (r, g, b) {
|
|
277
|
-
r *=
|
|
278
|
-
g *=
|
|
279
|
-
b *=
|
|
280
|
-
return
|
|
318
|
+
r *= v_r;
|
|
319
|
+
g *= v_g;
|
|
320
|
+
b *= v_b;
|
|
321
|
+
return r + g + b;
|
|
281
322
|
};
|
|
282
323
|
var v2rgb = function (v, r, g, b) {
|
|
283
324
|
var t = r + g + b || 1;
|
|
@@ -321,6 +362,9 @@ extend(color, {
|
|
|
321
362
|
contrast(color, ratio) {
|
|
322
363
|
return doWith(contrast_rgb, color, ratio);
|
|
323
364
|
},
|
|
365
|
+
rgb2h,
|
|
366
|
+
rgb4h,
|
|
367
|
+
rgb4s,
|
|
324
368
|
rgb2v,
|
|
325
369
|
rgb4v,
|
|
326
370
|
rgb2s,
|