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.
@@ -1,4 +1,4 @@
1
1
  ./aapi/ authorization:
2
2
  login: options /::login-:a
3
3
  run: options /:::run
4
- share: options /::share
4
+ share: options /::share-:opt
@@ -0,0 +1,10 @@
1
+ <div head>修改</div>
2
+ <div body>
3
+ <form>
4
+ <field -repeat="f in fields" -src="[f,data]"></field>
5
+ </form>
6
+ </div>
7
+ <div foot>
8
+ <button white @click="close()">取消</button>
9
+ <button @click="save()"> 保存 </button>
10
+ </div>
@@ -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
+ }
@@ -1,23 +1,35 @@
1
1
  var fields = refilm`
2
2
  路径/path
3
- 操作 btn ${[{
3
+ 挂载点/name
4
+ `;
5
+ var options = [
6
+ {
4
7
  name: "删除",
5
8
  do(e) {
6
- console.log(e)
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;
@@ -1,8 +1,8 @@
1
1
  var styles = {
2
- blue: "#2a53cd",
2
+ blue: "#2a83cd",
3
3
  green: "#228B22",
4
- orange: "#dd6a16",
5
- red: "#dc352e"
4
+ orange: "#fdca86",
5
+ red: "#cc352e"
6
6
  };
7
7
  styles.success = styles.pass = styles.green;
8
8
  styles.info = styles.blue;
@@ -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
- if (getTargetIn(this, targetChild)) {
134
- targetBox = targetChild.parentNode;
135
- previousElements = getPreviousElementSiblings(targetChild);
136
- followedElements = getFollowedElementSiblings(targetChild);
137
- saved_filter = targetBox.style.filter;
138
- saved_opacity = targetBox.style.opacity;
139
- rebuildTargets = function () { };
140
- [moveMargin, moveChildren, scroll] = getMoveFuncs(targetChild);
141
- moveChildren = moveChildren.bind(null, targetBox, previousElements, followedElements, moveMargin, recover);
142
- } else {
143
- previousElements = [];
144
- followedElements = [];
145
- moveChildren = () => { };
146
- rebuildTargets = function () {
147
- var temp = matcher(drag.target);
148
- if (temp === targetBox) return;
149
- if (previousElements) previousElements.map(recover);
150
- if (followedElements) followedElements.map(recover);
151
- if (targetBox) {
152
- removeClass(targetBox, "dropping");
153
- }
154
- targetBox = temp;
155
- if (!targetBox) {
156
- previousElements = [];
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
- return;
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
- addClass(targetBox, "dropping");
162
- previousElements = [].slice.call(targetBox.children, 0).reverse();
163
- followedElements = [];
164
- [moveMargin, moveChildren, scroll] = getMoveFuncs(previousElements[0]);
165
- moveChildren = moveChildren.bind(null, targetBox, previousElements, followedElements, moveMargin, recover);
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
- var dst, appendSibling, delta;
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
- var dragbox = this.dragbox;
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;
@@ -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);
@@ -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 3s linear 1s infinite;
148
+ animation: ltr 2s linear 0s infinite;
145
149
  }
146
150
 
147
151
  }
@@ -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
- v = v - rgb2v(r, g, b);
10
- return trim3v(r + v, g + v, b + v);
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 = Math.min(r, g, b);
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 Math.max(r, g, b) / 255;
82
+ return max(r, g, b) / 255;
52
83
  };
53
84
  var rgb4s = function (r, g, b, s) {
54
- var m = Math.min(r, g, b);
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 / (Math.max(r, g, b) || 1);
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
- var u = sqrt(3) / 3;
76
- var pu = 1 / 3;
77
- var cosa = cos(theta);
78
- var sina = sin(theta);
79
- var vera = 1 - cosa;
80
- var red = (cosa + pu * vera) * r + (pu * vera - u * sina) * g + (pu * vera + u * sina) * b;
81
- var green = (pu * vera + u * sina) * r + (cosa + pu * vera) * g + (pu * vera - u * sina) * b;
82
- var blue = (pu * vera - u * sina) * r + (pu * vera + u * sina) * g + (cosa + pu * vera) * b;
83
- var m = mode([red, green, blue]);
84
- var _min = min(red, green, blue);
85
- var d = [m - red, m - green, m - blue]
86
- if (_min < 0) {
87
- var index = red < 0 ? 0 : green < 0 ? 1 : 2;
88
- var [dr, dg, db] = single(d, -_min / d[index]);
89
- } else {
90
- var _max = max(red, green, blue);
91
- if (_max > 255) {
92
- var index = red > 255 ? 0 : green > 255 ? 1 : 2;
93
- var [dr, dg, db] = single(d, (255 - _max) / d[index]);
94
- } else {
95
- var dr, dg, db = dr = dg = 0;
96
- }
97
- }
98
- red += dr;
99
- green += dg;
100
- blue += db;
101
- [red, green, blue] = rgb4s(red, green, blue, s);
102
- [red, green, blue] = rgb4v(red, green, blue, v);
103
- return [red, green, blue, a];
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
- c1 = parse(c1);
230
- c2 = parse(c2);
231
- c1 = normal(c1);
232
- c2 = normal(c2);
233
- var [r1, g1, b1] = single(c1);
234
- var [r2, g2, b2] = single(c2);
235
- var c = [g1 * b2 - g2 * b1, b1 * r2 - b2 * r1, r1 * g2 - r2 * g1];
236
- var d = r1 * r2 + g1 * g2 + b1 * b2;
237
- var e = c[0] > 0 ? mode(c) : -mode(c);
238
- var theta = Math.asin(e > 1 ? 1 : e < -1 ? -1 : e);
239
- var phi = Math.acos(d > 1 ? 1 : d < -1 ? -1 : d);
240
- if (theta < 0) {
241
- theta = Math.PI * 2 - phi;
242
- } else {
243
- theta = phi;
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 *= .299;
278
- g *= .587;
279
- b *= .114;
280
- return Math.max(r, g, b) / .587;
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,