nyoibo 0.0.1

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.
@@ -0,0 +1,929 @@
1
+ // Copyright 2007-2009 futomi http://www.html5.jp/
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+ //
15
+ // progress.js v1.0.1
16
+
17
+ /* -------------------------------------------------------------------
18
+ * define objects (name space) for this library.
19
+ * ----------------------------------------------------------------- */
20
+ if( typeof html5jp == 'undefined' ) {
21
+ html5jp = new Object();
22
+ }
23
+
24
+ (function () {
25
+
26
+ /* -------------------------------------------------------------------
27
+ * constructor
28
+ * ----------------------------------------------------------------- */
29
+ html5jp.progress = function (id, p) {
30
+ if( ! id ) { return; }
31
+ var pnode = document.getElementById(id);
32
+ if(! pnode) { return; }
33
+ if( ! pnode.nodeName.match(/^DIV$/i) ) { return; }
34
+ var nodes = {};
35
+ nodes.parent = pnode;
36
+ /* -------------------------------------------------------------------
37
+ * default settings
38
+ * ----------------------------------------------------------------- */
39
+ var dp = {
40
+ full: 100, // value of 100%
41
+ from: 0, // value of start point
42
+ to: 0, // value of end point
43
+ animation: 5, // animation speed
44
+ nd: 0, //number of decimals
45
+ width: 300, // width of progress bar (pixel)
46
+ height: 12, //height of progress bar (pixel)
47
+ // styles of frame
48
+ frm_bgc: "#cccccc", // backgroundColor
49
+ frm_bdtc: null, // borderTopColor
50
+ frm_bdrc: null, // borderRightColor
51
+ frm_bdbc: null, // borderBottomColor
52
+ frm_bdlc: null, // borderLeftColor
53
+ frm_bdw: "1px", // borderWidth
54
+ // styles of bar
55
+ bar_bgc: "#039ab2", // backgroundColor
56
+ bar_bdtc: null, // borderTopColor
57
+ bar_bdrc: null, // borderRightColor
58
+ bar_bdbc: null, // borderBottomColor
59
+ bar_bdlc: null, // borderLeftColor
60
+ bar_bdw: "1px", // borderWidth
61
+ // styles of percentage
62
+ per_shw: true,
63
+ per_ftc: "white", // color
64
+ per_ftf: "Arial,sans-serif", // fontFamily
65
+ per_fts: "11px", // fontSize
66
+ // styles of percentage shadow
67
+ per_sd: true,
68
+ per_sdc: "#101010", // color
69
+ // gradation
70
+ gradation: true
71
+ };
72
+ /* -------------------------------
73
+ * initialize parameters
74
+ * ----------------------------- */
75
+ if( typeof(p) == "undefined" ) { p = {}; }
76
+ for( var k in dp ) {
77
+ if( typeof(p[k]) == "undefined" ) {
78
+ p[k] = dp[k];
79
+ }
80
+ }
81
+ // value of 100%
82
+ p.full = parseFloat(p.full);
83
+ // value of start point
84
+ p.from = parseFloat(p.from);
85
+ if( p.from < 0 ) {
86
+ p.from = 0;
87
+ } else if( p.from > p.full ) {
88
+ p.from = p.full;
89
+ }
90
+
91
+ // value of end point
92
+ p.to = parseFloat(p.to);
93
+ if( p.to < 0 ) {
94
+ p.to = 0;
95
+ } else if( p.to > p.full ) {
96
+ p.to = p.full;
97
+ }
98
+ // animation speed
99
+ p.animation = parseFloat(p.animation);
100
+ if( p.animation < 0 ) {
101
+ p.animation = 0;
102
+ } else if( p.animation > 10 ) {
103
+ p.animation = 10;
104
+ }
105
+ // number of decimals
106
+ p.nd = parseFloat(p.nd);
107
+ if( p.nd < 0 ) {
108
+ p.nd = 0;
109
+ } else if( p.nd > 8 ) {
110
+ p.nd = 8;
111
+ }
112
+ // width of progress bar
113
+ p.width = parseFloat(p.width);
114
+ if( p.width < 10 ) {
115
+ p.width = 10;
116
+ } else if( p.width > 2400 ) {
117
+ p.width = 2400;
118
+ }
119
+ // height of progress bar
120
+ p.height = parseFloat(p.height);
121
+ if( p.height < 5 ) {
122
+ p.height = 5;
123
+ } else if( p.height > 500 ) {
124
+ p.height = 500;
125
+ }
126
+ // boolean parameters
127
+ var boolean_params = ["per_shw", "per_sd", "gradation"];
128
+ for( var i=0; i<boolean_params.length; i++ ) {
129
+ var k = boolean_params[i];
130
+ if( typeof(p[k]) == "string" ) {
131
+ if(p[k] == "true") {
132
+ p[k] = true;
133
+ } else if(p[k] == "false") {
134
+ p[k] = false;
135
+ }
136
+ } else if( typeof(p[k]) != "boolean" ) {
137
+ p[k] = dp[k];
138
+ }
139
+ }
140
+ // current value
141
+ p.val = p.to;
142
+ // current percentage
143
+ p.per = p.to * 100 / p.full;
144
+ /* -------------------------------
145
+ * save initialize parameters
146
+ * ----------------------------- */
147
+ var initp = {};
148
+ for( var k in p ) {
149
+ var v = p[k];
150
+ initp[k] = v;
151
+ }
152
+ //
153
+ this.p = p;
154
+ this.initp = initp;
155
+ this.nodes = nodes;
156
+
157
+ };
158
+
159
+ /* -------------------------------------------------------------------
160
+ * prototypes
161
+ * ----------------------------------------------------------------- */
162
+ var proto = html5jp.progress.prototype;
163
+
164
+ /* -------------------------------------------------------------------
165
+ * public methods
166
+ * ----------------------------------------------------------------- */
167
+ proto.get_val = function() {
168
+ return this.p.val;
169
+ };
170
+
171
+ proto.get_per = function() {
172
+ return parseInt( this.p.per * Math.pow(10, this.p.nd) ) / Math.pow(10, this.p.nd);
173
+ };
174
+
175
+ proto.set_val = function(val) {
176
+ val = parseFloat(val);
177
+ var current = this.get_val();
178
+ if(current != val) {
179
+ this.incr( val - current );
180
+ }
181
+ }
182
+
183
+ proto.set_param = function(k, v) {
184
+ if( typeof(k) == "undefined" || ! k ) { return; }
185
+ if( typeof(this.p[k]) == "undefined" ) { return; }
186
+ if( ! /^(animation|nd)$/.test(k) ) { return; }
187
+ if( typeof(v) == "undefined" || v == null ) { return; }
188
+ // animation speed
189
+ if(k == "animation") {
190
+ v = parseFloat(v);
191
+ if( v < 0 ) {
192
+ v = 0;
193
+ } else if( v > 10 ) {
194
+ v = 10;
195
+ }
196
+ // number of decimals
197
+ } else if(k == "nd") {
198
+ v = parseFloat(v);
199
+ if( v < 0 ) {
200
+ v = 0;
201
+ } else if( v > 8 ) {
202
+ v = 8;
203
+ }
204
+ }
205
+ //
206
+ this.p[k] = v;
207
+ };
208
+
209
+ proto.incr = function(num) {
210
+ if( ! num ) { return; }
211
+ num = parseFloat(num);
212
+ if(num == 0) { return; }
213
+ this.p.from = this.p.val;
214
+ this.p.val += num;
215
+ if(this.p.val < 0) {
216
+ this.p.val = 0;
217
+ } else if(this.p.val > this.p.full) {
218
+ this.p.val = this.p.full;
219
+ }
220
+ this.p.to = this.p.val;
221
+ this.p.per = this._set_per();
222
+ this._draw_bar();
223
+ return this.p.val;
224
+ };
225
+
226
+ proto.decr = function(num) {
227
+ if( ! num ) { return; }
228
+ num = parseFloat(num);
229
+ if(num == 0) { return; }
230
+ this.p.from = this.p.val;
231
+ this.p.val -= num;
232
+ if(this.p.val < 0) {
233
+ this.p.val = 0;
234
+ } else if(this.p.val > this.p.full) {
235
+ this.p.val = this.p.full;
236
+ }
237
+ this.p.to = this.p.val;
238
+ this.p.per = this._set_per();
239
+ this._draw_bar();
240
+ return this.p.val;
241
+ };
242
+
243
+ proto.draw = function() {
244
+ var p = this.p;
245
+ var nodes = this.nodes;
246
+ var pnode = nodes.parent;
247
+ // clear child nodes
248
+ this._clear();
249
+ // create div element for the frame
250
+ nodes.frm = this._create_frame_div_node();
251
+ pnode.appendChild(nodes.frm);
252
+ // create div element for the bar
253
+ nodes.bar = this._create_bar_div_node();
254
+ nodes.frm.appendChild(nodes.bar);
255
+ // create div element for the percentage display box
256
+ if(p.per_shw == true) {
257
+ nodes.per = this._create_per_div_node();
258
+ this._draw_per(50);
259
+ var per_size = this._get_box_size(nodes.per);
260
+ // define a position of the percentage display box
261
+ p.per_left = ( ( p.width + parseInt(p.bar_bdw) * 2 ) / 2 ) - ( per_size.w / 2);
262
+ p.per_top = ( ( p.height + parseInt(p.bar_bdw) * 2 ) / 2 ) - ( per_size.h / 2);
263
+ nodes.per.style.left = p.per_left + "px";
264
+ nodes.per.style.top = p.per_top + "px";
265
+ // create div element for the percentage shadow display box
266
+ if(p.per_sd == true) {
267
+ this._create_per_shadow();
268
+ }
269
+ nodes.frm.appendChild(nodes.per);
270
+ }
271
+ // draw the bar
272
+ this._draw_bar();
273
+ };
274
+
275
+ proto.reset = function() {
276
+ for( var k in this.initp ) {
277
+ var v = this.initp[k];
278
+ this.p[k] = v;
279
+ }
280
+ this.draw();
281
+ };
282
+
283
+ /* -------------------------------------------------------------------
284
+ * private methods
285
+ * ----------------------------------------------------------------- */
286
+
287
+ proto._create_per_shadow = function() {
288
+ var p = this.p;
289
+ if(p.per_shw != true) { return ;}
290
+ var nodes = this.nodes;
291
+ nodes.persd = [];
292
+ var dif = [ [ 0, 1], [ 0, -1], [ 1, 0], [ 1, 1], [ 1, -1], [-1, 0], [-1, 1], [-1, -1] ];
293
+ for(var j=0; j<8; j++) {
294
+ var sd = nodes.per.cloneNode(true);
295
+ sd.style.margin = "0px";
296
+ sd.style.padding = "0px";
297
+ sd.style.position = "absolute";
298
+ sd.style.color = p.per_sdc;
299
+ sd.style.fontFamily = p.per_ftf;
300
+ sd.style.fontSize = p.per_fts;
301
+ sd.style.left = (p.per_left + dif[j][0]) + "px";
302
+ sd.style.top = (p.per_top + dif[j][1]) + "px";
303
+ nodes.frm.appendChild(sd);
304
+ nodes.persd.push(sd);
305
+ }
306
+ };
307
+
308
+ proto._create_per_div_node = function() {
309
+ var p = this.p;
310
+ if(p.per_shw != true) { return ;}
311
+ var el = this._create_div_node();
312
+ el.style.position = "absolute";
313
+ el.style.color = p.per_ftc;
314
+ el.style.fontFamily = p.per_ftf;
315
+ el.style.fontSize = p.per_fts;
316
+ return el;
317
+ };
318
+
319
+ proto._create_bar_div_node = function() {
320
+ var p = this.p;
321
+ var el = this._create_div_node();
322
+ el.style.borderWidth = p.bar_bdw;
323
+ el.style.borderStyle = "solid";
324
+ var w = p.width;
325
+ var h = p.height;
326
+ if(document.uniqueID && document.compatMode == "BackCompat") {
327
+ w += ( parseInt(p.bar_bdw) * 2 );
328
+ h += ( parseInt(p.bar_bdw) * 2 );
329
+ }
330
+ el.style.width = w + "px";
331
+ el.style.height = h + "px";
332
+ el.style.position = "absolute";
333
+ el.style.left = "-" + p.width + "px";
334
+ el.style.top = "0px";
335
+ el.style.fontSize = "1px";
336
+ // calculate border color of the bar
337
+ var bar_rgb = this._conv_color_to_rgb(p.bar_bgc);
338
+ var bar_border_rgb1 = this._lighten_rgb(bar_rgb, 0.25);
339
+ var bar_border_rgb2 = this._lighten_rgb(bar_rgb, -0.25);
340
+ var bar_border_color1 = this._conv_rgb_to_css(bar_border_rgb1);
341
+ var bar_border_color2 = this._conv_rgb_to_css(bar_border_rgb2);
342
+ if(p.bar_bdtc == null) {
343
+ el.style.borderTopColor = bar_border_color1;
344
+ } else {
345
+ el.style.borderTopColor = p.bar_bdtc;
346
+ }
347
+ if(p.bar_bdrc == null) {
348
+ el.style.borderRightColor = bar_border_color2; // borderRightColor
349
+ } else {
350
+ el.style.borderRightColor = p.bar_bdrc;
351
+ }
352
+ if(p.bar_bdbc == null) {
353
+ el.style.borderBottomColor = bar_border_color2; // borderBottomColor
354
+ } else {
355
+ el.style.borderBottomColor = p.bar_bdbc;
356
+ }
357
+ if(p.bar_bdlc == null) {
358
+ el.style.borderLeftColor = bar_border_color1; // borderLeftColor
359
+ } else {
360
+ el.style.borderLeftColor = p.bar_bdlc;
361
+ }
362
+ //gradation
363
+ if(p.gradation == true) {
364
+ var rgb = this._conv_color_to_rgb(p.bar_bgc);
365
+ var rgb1 = this._lighten_rgb(rgb, -0.15);
366
+ var rgb2 = this._lighten_rgb(rgb, 0.15);
367
+ var canvas = document.createElement("CANVAS");
368
+ if ( canvas && canvas.getContext ) {
369
+ var color1 = this._conv_rgb_to_css(rgb1);
370
+ var color2 = this._conv_rgb_to_css(rgb2);
371
+ // draw by CANVAS
372
+ var ctx = canvas.getContext('2d');
373
+ canvas.style.margin = "0px";
374
+ canvas.style.padding = "0px";
375
+ canvas.width = w;
376
+ canvas.height = h;
377
+ el.appendChild(canvas);
378
+ ctx.beginPath();
379
+ var grad = ctx.createLinearGradient(0, 0, 0, h);
380
+ grad.addColorStop(0, color2);
381
+ grad.addColorStop(0.4, p.bar_bgc);
382
+ grad.addColorStop(1, color1);
383
+ ctx.fillStyle = grad;
384
+ ctx.rect(0, 0, w, h);
385
+ ctx.fill();
386
+ } else if(document.uniqueID) {
387
+ // for Internet Explorer
388
+ var color1 = this._conv_rgb_to_css_hex(rgb1);
389
+ var color2 = this._conv_rgb_to_css_hex(rgb2);
390
+ el.style.filter = "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=" + color2 + ",EndColorStr=" + color1 + ")";
391
+ } else {
392
+ el.style.backgroundColor = p.bar_bgc;
393
+ }
394
+ } else {
395
+ el.style.backgroundColor = p.bar_bgc;
396
+ }
397
+ //
398
+ return el;
399
+ };
400
+
401
+ proto._create_frame_div_node = function() {
402
+ var p = this.p;
403
+ var el = this._create_div_node();
404
+ var w = p.width + parseInt(p.bar_bdw) * 2;
405
+ var h = p.height + parseInt(p.bar_bdw) * 2;
406
+ if(document.uniqueID && document.compatMode == "BackCompat") {
407
+ w += parseInt(p.frm_bdw) * 2;
408
+ h += parseInt(p.frm_bdw) * 2;
409
+ }
410
+ el.style.width = w + "px";
411
+ el.style.height = h + "px";
412
+ el.style.position = "relative";
413
+ el.style.overflow = "hidden";
414
+ el.style.borderWidth = p.frm_bdw;
415
+ el.style.borderStyle = "solid";
416
+ // calculate border color of the frame
417
+ var frm_rgb = this._conv_color_to_rgb(p.frm_bgc);
418
+ var frm_border_rgb = this._lighten_rgb(frm_rgb, -0.25);
419
+ var frm_border_color = this._conv_rgb_to_css(frm_border_rgb);
420
+ if(p.frm_bdtc == null) {
421
+ el.style.borderTopColor = frm_border_color;
422
+ } else {
423
+ el.style.borderTopColor = p.frm_bdtc;
424
+ }
425
+ if(p.frm_bdrc == null) {
426
+ el.style.borderRightColor = frm_border_color;
427
+ } else {
428
+ el.style.borderRightColor = p.frm_bdrc;
429
+ }
430
+ if(p.frm_bdbc == null) {
431
+ el.style.borderBottomColor = frm_border_color;
432
+ } else {
433
+ el.style.borderBottomColor = p.frm_bdbc;
434
+ }
435
+ if(p.frm_bdlc == null) {
436
+ el.style.borderLeftColor = frm_border_color;
437
+ } else {
438
+ el.style.borderLeftColor = p.frm_bdlc;
439
+ }
440
+ //gradation
441
+ if(p.gradation == true) {
442
+ var rgb = this._conv_color_to_rgb(p.frm_bgc);
443
+ var rgb1 = this._lighten_rgb(rgb, 0.15);
444
+ var rgb2 = this._lighten_rgb(rgb, -0.15);
445
+ var canvas = document.createElement("CANVAS");
446
+ if ( canvas && canvas.getContext ) {
447
+ var color1 = this._conv_rgb_to_css(rgb1);
448
+ var color2 = this._conv_rgb_to_css(rgb2);
449
+ // draw by CANVAS
450
+ var ctx = canvas.getContext('2d');
451
+ canvas.style.margin = "0px";
452
+ canvas.style.padding = "0px";
453
+ canvas.width = w;
454
+ canvas.height = h;
455
+ el.appendChild(canvas);
456
+ ctx.beginPath();
457
+ var grad = ctx.createLinearGradient(0, 0, 0, h);
458
+ grad.addColorStop(0, color2);
459
+ grad.addColorStop(0.4, p.frm_bgc);
460
+ grad.addColorStop(1, color1);
461
+ ctx.fillStyle = grad;
462
+ ctx.rect(0, 0, w, h);
463
+ ctx.fill();
464
+ } else if(document.uniqueID) {
465
+ // draw by VML for Internet Explorer
466
+ var color1 = this._conv_rgb_to_css_hex(rgb1);
467
+ var color2 = this._conv_rgb_to_css_hex(rgb2);
468
+ el.style.filter = "progid:DXImageTransform.Microsoft.Gradient(GradientType=0,StartColorStr=" + color2 + ",EndColorStr=" + color1 + ")";
469
+ } else {
470
+ el.style.backgroundColor = p.frm_bgc;
471
+ }
472
+ } else {
473
+ el.style.backgroundColor = p.frm_bgc;
474
+ }
475
+ //
476
+ return el;
477
+ }
478
+
479
+ proto._create_div_node = function() {
480
+ var node = document.createElement("DIV");
481
+ node.style.margin = "0px";
482
+ node.style.padding = "0px";
483
+ return node;
484
+ };
485
+
486
+ proto._clear = function() {
487
+ var pnode = this.nodes.parent;
488
+ while (pnode.firstChild) {
489
+ pnode.removeChild(pnode.firstChild);
490
+ }
491
+ };
492
+
493
+ proto._draw_per = function(per) {
494
+ if(this.p.per_shw != true) { return ;}
495
+ if( ! per ) {
496
+ per = this.p.per;
497
+ }
498
+ var nd = this.p.nd;
499
+ per = parseInt( per * Math.pow(10, nd) ) / Math.pow(10, nd);
500
+ var cap = per + "%";
501
+ if( this.nodes.persd ) {
502
+ for( var i=0; i<this.nodes.persd.length; i++ ) {
503
+ this.nodes.persd[i].innerHTML = cap;
504
+ }
505
+ }
506
+ this.nodes.per.innerHTML = cap;
507
+ };
508
+
509
+ proto._set_per = function() {
510
+ this.p.per = this._calc_per(this.p.val);
511
+ this._draw_per();
512
+ return this.p.per;
513
+ };
514
+
515
+ proto._calc_per = function(val) {
516
+ if( isNaN(val) ) { val = 0; }
517
+ var ful = this.p.full;
518
+ var per = val * 100 / ful;
519
+ if( per > 100 ) { per = 100; }
520
+ return per;
521
+ };
522
+
523
+ proto._draw_bar_static = function(per) {
524
+ this.nodes.bar.style.left = "-" + ( this.p.width * (100 - per) / 100 ) + "px";
525
+ this._draw_per(per);
526
+ }
527
+
528
+ proto._draw_bar = function() {
529
+ var speed = this.p.animation;
530
+ var from = this.p.from;
531
+ var to = this.p.to;
532
+ if( speed <= 0 || speed > 10 || from == to ) {
533
+ this._draw_bar_static(this.p.per);
534
+ } else {
535
+ var per1 = this._calc_per(this.p.from);
536
+ var per2 = this.p.per;
537
+ var _this = this;
538
+ var fn = function() {
539
+ var dif = 0.1 * _this.p.animation;
540
+ if(per1 < per2) {
541
+ per1 += dif;
542
+ if(per1 > per2) {
543
+ per1 = per2;
544
+ }
545
+ } else {
546
+ per1 -= dif;
547
+ if(per1 < per2) {
548
+ per1 = per2;
549
+ }
550
+ }
551
+ _this._draw_bar_static(per1);
552
+ if(per1 != per2) {
553
+ setTimeout(fn, 10 );
554
+ }
555
+ }
556
+ fn();
557
+ }
558
+ };
559
+
560
+ proto._get_box_size = function(el) {
561
+ var visible = el.style.visible;
562
+ el.style.visible = "hidden";
563
+ this.nodes.frm.appendChild( el );
564
+ var o = {
565
+ w: el.offsetWidth,
566
+ h: el.offsetHeight
567
+ };
568
+ this.nodes.frm.removeChild(el);
569
+ el.style.visible = visible;
570
+ return o;
571
+ }
572
+
573
+ proto._conv_rgb_to_css = function(rgb) {
574
+ if( typeof(rgb.a) == "undefined" ) {
575
+ return "rgb(" + rgb.r + "," + rgb.g + "," + rgb.b + ")";
576
+ } else {
577
+ return "rgba(" + rgb.r + "," + rgb.g + "," + rgb.b + "," + rgb.a + ")";
578
+ }
579
+ };
580
+
581
+ proto._conv_rgb_to_css_hex = function(rgb) {
582
+ var r = rgb.r.toString(16);
583
+ var g = rgb.g.toString(16);
584
+ var b = rgb.b.toString(16);
585
+ if( r.length == 1 ) { r = "0" + r; }
586
+ if( g.length == 1 ) { g = "0" + g; }
587
+ if( b.length == 1 ) { b = "0" + b; }
588
+ return "#" + r + g + b;
589
+ };
590
+
591
+ proto._lighten_rgb = function(rgb, gain_rate) {
592
+ // convert rgb to yuv
593
+ var yuv = this._rgb_to_yuv(rgb);
594
+ // compute the luma (Y') information
595
+ var luma = yuv.y + gain_rate * 256;
596
+ yuv.y = luma;
597
+ return this._yuv_to_rgb(yuv);
598
+ };
599
+
600
+ proto._conv_color_to_rgb = function(color) {
601
+ /* color name mapping */
602
+ var color_name_map = {
603
+ aliceblue : "#F0F8FF",
604
+ antiquewhite : "#FAEBD7",
605
+ aqua : "#00FFFF",
606
+ aquamarine : "#7FFFD4",
607
+ azure : "#F0FFFF",
608
+ beige : "#F5F5DC",
609
+ bisque : "#FFE4C4",
610
+ black : "#000000",
611
+ blanchedalmond : "#FFEBCD",
612
+ blue : "#0000FF",
613
+ blueviolet : "#8A2BE2",
614
+ brass : "#B5A642",
615
+ brown : "#A52A2A",
616
+ burlywood : "#DEB887",
617
+ cadetblue : "#5F9EA0",
618
+ chartreuse : "#7FFF00",
619
+ chocolate : "#D2691E",
620
+ coolcopper : "#D98719",
621
+ copper : "#BF00DF",
622
+ coral : "#FF7F50",
623
+ cornflower : "#BFEFDF",
624
+ cornflowerblue : "#6495ED",
625
+ cornsilk : "#FFF8DC",
626
+ crimson : "#DC143C",
627
+ cyan : "#00FFFF",
628
+ darkblue : "#00008B",
629
+ darkbrown : "#DA0B00",
630
+ darkcyan : "#008B8B",
631
+ darkgoldenrod : "#B8860B",
632
+ darkgray : "#A9A9A9",
633
+ darkgreen : "#006400",
634
+ darkkhaki : "#BDB76B",
635
+ darkmagenta : "#8B008B",
636
+ darkolivegreen : "#556B2F",
637
+ darkorange : "#FF8C00",
638
+ darkorchid : "#9932CC",
639
+ darkred : "#8B0000",
640
+ darksalmon : "#E9967A",
641
+ darkseagreen : "#8FBC8F",
642
+ darkslateblue : "#483D8B",
643
+ darkslategray : "#2F4F4F",
644
+ darkturquoise : "#00CED1",
645
+ darkviolet : "#9400D3",
646
+ deeppink : "#FF1493",
647
+ deepskyblue : "#00BFFF",
648
+ dimgray : "#696969",
649
+ dodgerblue : "#1E90FF",
650
+ feldsper : "#FED0E0",
651
+ firebrick : "#B22222",
652
+ floralwhite : "#FFFAF0",
653
+ forestgreen : "#228B22",
654
+ fuchsia : "#FF00FF",
655
+ gainsboro : "#DCDCDC",
656
+ ghostwhite : "#F8F8FF",
657
+ gold : "#FFD700",
658
+ goldenrod : "#DAA520",
659
+ gray : "#808080",
660
+ green : "#008000",
661
+ greenyellow : "#ADFF2F",
662
+ honeydew : "#F0FFF0",
663
+ hotpink : "#FF69B4",
664
+ indianred : "#CD5C5C",
665
+ indigo : "#4B0082",
666
+ ivory : "#FFFFF0",
667
+ khaki : "#F0E68C",
668
+ lavender : "#E6E6FA",
669
+ lavenderblush : "#FFF0F5",
670
+ lawngreen : "#7CFC00",
671
+ lemonchiffon : "#FFFACD",
672
+ lightblue : "#ADD8E6",
673
+ lightcoral : "#F08080",
674
+ lightcyan : "#E0FFFF",
675
+ lightgoldenrodyellow : "#FAFAD2",
676
+ lightgreen : "#90EE90",
677
+ lightgrey : "#D3D3D3",
678
+ lightpink : "#FFB6C1",
679
+ lightsalmon : "#FFA07A",
680
+ lightseagreen : "#20B2AA",
681
+ lightskyblue : "#87CEFA",
682
+ lightslategray : "#778899",
683
+ lightsteelblue : "#B0C4DE",
684
+ lightyellow : "#FFFFE0",
685
+ lime : "#00FF00",
686
+ limegreen : "#32CD32",
687
+ linen : "#FAF0E6",
688
+ magenta : "#FF00FF",
689
+ maroon : "#800000",
690
+ mediumaquamarine : "#66CDAA",
691
+ mediumblue : "#0000CD",
692
+ mediumorchid : "#BA55D3",
693
+ mediumpurple : "#9370DB",
694
+ mediumseagreen : "#3CB371",
695
+ mediumslateblue : "#7B68EE",
696
+ mediumspringgreen : "#00FA9A",
697
+ mediumturquoise : "#48D1CC",
698
+ mediumvioletred : "#C71585",
699
+ midnightblue : "#191970",
700
+ mintcream : "#F5FFFA",
701
+ mistyrose : "#FFE4E1",
702
+ moccasin : "#FFE4B5",
703
+ navajowhite : "#FFDEAD",
704
+ navy : "#000080",
705
+ oldlace : "#FDF5E6",
706
+ olive : "#808000",
707
+ olivedrab : "#6B8E23",
708
+ orange : "#FFA500",
709
+ orangered : "#FF4500",
710
+ orchid : "#DA70D6",
711
+ palegoldenrod : "#EEE8AA",
712
+ palegreen : "#98FB98",
713
+ paleturquoise : "#AFEEEE",
714
+ palevioletred : "#DB7093",
715
+ papayawhip : "#FFEFD5",
716
+ peachpuff : "#FFDAB9",
717
+ peru : "#CD853F",
718
+ pink : "#FFC0CB",
719
+ plum : "#DDA0DD",
720
+ powderblue : "#B0E0E6",
721
+ purple : "#800080",
722
+ red : "#FF0000",
723
+ richblue : "#0CB0E0",
724
+ rosybrown : "#BC8F8F",
725
+ royalblue : "#4169E1",
726
+ saddlebrown : "#8B4513",
727
+ salmon : "#FA8072",
728
+ sandybrown : "#F4A460",
729
+ seagreen : "#2E8B57",
730
+ seashell : "#FFF5EE",
731
+ sienna : "#A0522D",
732
+ silver : "#C0C0C0",
733
+ skyblue : "#87CEEB",
734
+ slateblue : "#6A5ACD",
735
+ slategray : "#708090",
736
+ snow : "#FFFAFA",
737
+ springgreen : "#00FF7F",
738
+ steelblue : "#4682B4",
739
+ tan : "#D2B48C",
740
+ teal : "#008080",
741
+ thistle : "#D8BFD8",
742
+ tomato : "#FF6347",
743
+ turquoise : "#40E0D0",
744
+ violet : "#EE82EE",
745
+ wheat : "#F5DEB3",
746
+ white : "#FFFFFF",
747
+ whitesmoke : "#F5F5F5",
748
+ yellow : "#FFFF00",
749
+ yellowgreen : "#9ACD32"
750
+ };
751
+ if( /^[a-zA-Z]+$/.test(color) && color_name_map[color] ) {
752
+ color = color_name_map[color];
753
+ }
754
+ var rgb = {};
755
+ var m;
756
+ if( m = color.match( /rgb\(\s*(\d+)\,\s*(\d+)\,\s*(\d+)\s*\)/ ) ) {
757
+ rgb.r = parseInt(m[1], 10);
758
+ rgb.g = parseInt(m[2], 10);
759
+ rgb.b = parseInt(m[3], 10);
760
+ rgb.a = 1;
761
+ } else if( m = color.match( /rgba\(\s*(\d+)\,\s*(\d+)\,\s*(\d+),\s*(\d+)\s*\)/ ) ) {
762
+ rgb.r = parseInt(m[1], 10);
763
+ rgb.g = parseInt(m[2], 10);
764
+ rgb.b = parseInt(m[3], 10);
765
+ rgb.a = parseInt(m[4], 10);
766
+ } else if( m = color.match( /\#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})$/ ) ) {
767
+ rgb.r = parseInt(m[1], 16);
768
+ rgb.g = parseInt(m[2], 16);
769
+ rgb.b = parseInt(m[3], 16);
770
+ rgb.a = 1;
771
+ } else if( m = color.match( /\#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])$/ ) ) {
772
+ rgb.r = parseInt(m[1]+m[1], 16);
773
+ rgb.g = parseInt(m[2]+m[2], 16);
774
+ rgb.b = parseInt(m[3]+m[3], 16);
775
+ rgb.a = 1;
776
+ } else if( color == "transparent" ) {
777
+ rgb.r = 255;
778
+ rgb.g = 255;
779
+ rgb.b = 255;
780
+ rgb.a = 1;
781
+ } else {
782
+ return null;
783
+ }
784
+ /* for Safari */
785
+ if( rgb.r == 0 && rgb.g == 0 && rgb.b == 0 && rgb.a == 0 ) {
786
+ rgb.r = 255;
787
+ rgb.g = 255;
788
+ rgb.b = 255;
789
+ rgb.a = 1;
790
+ }
791
+ /* */
792
+ return rgb;
793
+ };
794
+
795
+ proto._rgb_to_yuv = function(rgb) {
796
+ var yuv = {
797
+ y: parseInt( 0.299 * rgb.r + 0.587 * rgb.g + 0.114 * rgb.b ),
798
+ u: parseInt( -0.169 * rgb.r - 0.3316 * rgb.g + 0.500 * rgb.b ),
799
+ v: parseInt( 0.500 * rgb.r - 0.4186 * rgb.g - 0.0813 * rgb.b )
800
+ };
801
+ return yuv;
802
+ };
803
+
804
+ proto._yuv_to_rgb = function(yuv) {
805
+ var rgb = {
806
+ r: parseInt( yuv.y + 1.402 * yuv.v ),
807
+ g: parseInt( yuv.y - 0.714 * yuv.v - 0.344 * yuv.u ),
808
+ b: parseInt( yuv.y + 1.772 * yuv.u )
809
+ };
810
+ for( var k in rgb ) {
811
+ if(rgb[k] > 255) {
812
+ rgb[k] = 255;
813
+ } else if(rgb[k] < 0) {
814
+ rgb[k] = 0;
815
+ }
816
+ }
817
+ return rgb;
818
+ };
819
+
820
+ /* -------------------------------------------------------------------
821
+ * for static drawing by class attributes
822
+ * ----------------------------------------------------------------- */
823
+
824
+ _add_event_listener(window, "load", _static_init);
825
+
826
+ function _static_init() {
827
+ var elms = _get_elements_by_class_name(document, "html5jp-progress");
828
+ for( var i=0; i<elms.length; i++ ) {
829
+ var elm = elms.item(i);
830
+ if( ! /^DIV$/i.test(elm.nodeName) ) { continue; }
831
+ var id = elm.id;
832
+ if( ! id ) { continue; }
833
+ var p = {};
834
+ var m = elm.className.match(/\[([^\]]+)\]/);
835
+ if(m && m[1]) {
836
+ var parts = m[1].split(";");
837
+ for( var j=0; j<parts.length; j++ ) {
838
+ var pair = parts[j];
839
+ if(pair == "") { continue; }
840
+ var m2 = pair.match(/^([a-zA-Z0-9\-\_]+)\:([a-zA-Z0-9\-\_\#\(\)\,\.]+)$/);
841
+ if( ! m2 ) { continue; }
842
+ var k = m2[1];
843
+ var v = m2[2];
844
+ p[k] = v;
845
+ }
846
+ }
847
+ var o = new html5jp.progress(id, p);
848
+ o.draw();
849
+ }
850
+ }
851
+
852
+ function _add_event_listener(elm, type, func) {
853
+ if(! elm) { return false; }
854
+ if(elm.addEventListener) {
855
+ elm.addEventListener(type, func, false);
856
+ } else if(elm.attachEvent) {
857
+ elm['e'+type+func] = func;
858
+ elm[type+func] = function(){elm['e'+type+func]( window.event );}
859
+ elm.attachEvent( 'on'+type, elm[type+func] );
860
+ } else {
861
+ return false;
862
+ }
863
+ return true;
864
+ }
865
+
866
+ function _get_elements_by_class_name(element, classNames) {
867
+ if(element.getElementsByClassName) {
868
+ return element.getElementsByClassName(classNames);
869
+ }
870
+ /* split a string on spaces */
871
+ var split_a_string_on_spaces = function(string) {
872
+ string = string.replace(/^[\t\s]+/, "");
873
+ string = string.replace(/[\t\s]+$/, "");
874
+ var tokens = string.split(/[\t\s]+/);
875
+ return tokens;
876
+ };
877
+ var tokens = split_a_string_on_spaces(classNames);
878
+ var tn = tokens.length;
879
+ var nodes = element.all ? element.all : element.getElementsByTagName("*");
880
+ var n = nodes.length;
881
+ var array = new Array();
882
+ if( tn > 0 ) {
883
+ if( document.evaluate ) {
884
+ var contains = new Array();
885
+ for(var i=0; i<tn; i++) {
886
+ contains.push('contains(concat(" ",@class," "), " '+ tokens[i] + '")');
887
+ }
888
+ var xpathExpression = "/descendant::*[" + contains.join(" and ") + "]";
889
+ var iterator = document.evaluate(xpathExpression, element, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
890
+ var inum = iterator.snapshotLength;
891
+ for( var i=0; i<inum; i++ ) {
892
+ var elm = iterator.snapshotItem(i);
893
+ if( elm != element ) {
894
+ array.push(iterator.snapshotItem(i));
895
+ }
896
+ }
897
+ } else {
898
+ for(var i=0; i<n; i++) {
899
+ var elm = nodes.item(i);
900
+ if( elm.className == "" ) { continue; }
901
+ var class_list = split_a_string_on_spaces(elm.className);
902
+ var class_name = class_list.join(" ");
903
+ var f = true;
904
+ for(var j=0; j<tokens.length; j++) {
905
+ var re = new RegExp('(^|\\s)' + tokens[j] + '(\\s|$)')
906
+ if( ! re.test(class_name) ) {
907
+ f = false;
908
+ break;
909
+ }
910
+ }
911
+ if(f == true) {
912
+ array.push(elm);
913
+ }
914
+ }
915
+ }
916
+ }
917
+ /* add item(index) method to the array as if it behaves such as a NodeList interface. */
918
+ array.item = function(index) {
919
+ if(array[index]) {
920
+ return array[index];
921
+ } else {
922
+ return null;
923
+ }
924
+ };
925
+ //
926
+ return array;
927
+ }
928
+
929
+ })();