nyoibo 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
+ })();