uki 1.1.1 → 1.1.2

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.
Files changed (144) hide show
  1. data/VERSION +1 -1
  2. data/bin/uki +1 -1
  3. data/frameworks/uki/README.rdoc +1 -1
  4. data/frameworks/uki/examples/core-examples/controls/controls.js +6 -6
  5. data/frameworks/uki/examples/core-examples/flow/flow.js +4 -4
  6. data/frameworks/uki/examples/core-examples/linearGradient/gradient.svg +11 -0
  7. data/frameworks/uki/examples/core-examples/linearGradient/linearGradient.js +87 -0
  8. data/frameworks/uki/examples/core-examples/popup/popup.js +23 -10
  9. data/frameworks/uki/examples/core-examples/resizeToContents/resizeToContents.js +12 -1
  10. data/frameworks/uki/examples/core-examples/slider/slider.js +1 -1
  11. data/frameworks/uki/examples/core-examples/splitPaneExtended/splitPaneExtended.js +1 -1
  12. data/frameworks/uki/examples/core-examples/table/table.js +19 -2
  13. data/frameworks/uki/examples/core-examples/wave/wave-theme.js +1 -1
  14. data/frameworks/uki/examples/core-examples/wave/wave.js +1 -1
  15. data/frameworks/uki/examples/more-examples/radioButton/radioButton.js +3 -3
  16. data/frameworks/uki/examples/more-examples/select/select.js +35 -0
  17. data/frameworks/uki/examples/touch-examples/scrollPane/scrollPane.js +53 -0
  18. data/frameworks/uki/spec/unit/background.spec.js +1 -1
  19. data/frameworks/uki/spec/unit/selector.spec.js +28 -12
  20. data/frameworks/uki/spec/unit/utils.spec.js +14 -0
  21. data/frameworks/uki/src/uki-core.js +3 -1
  22. data/frameworks/uki/src/uki-core/after.js +57 -0
  23. data/frameworks/uki/src/uki-core/attachment.js +15 -6
  24. data/frameworks/uki/src/uki-core/background.js +4 -3
  25. data/frameworks/uki/src/uki-core/background/css.js +1 -0
  26. data/frameworks/uki/src/uki-core/background/cssBox.js +5 -3
  27. data/frameworks/uki/src/uki-core/background/linearGradient.js +112 -0
  28. data/frameworks/uki/src/uki-core/background/multi.js +2 -2
  29. data/frameworks/uki/src/uki-core/background/rows.js +1 -0
  30. data/frameworks/uki/src/uki-core/background/sliced9.js +5 -2
  31. data/frameworks/uki/src/uki-core/builder.js +5 -4
  32. data/frameworks/uki/src/uki-core/collection.js +18 -13
  33. data/frameworks/uki/src/uki-core/dom/browser.js +114 -0
  34. data/frameworks/uki/src/uki-core/dom/event.js +3 -0
  35. data/frameworks/uki/src/uki-core/image.js +1 -26
  36. data/frameworks/uki/src/uki-core/selector.js +5 -0
  37. data/frameworks/uki/src/uki-core/theme.js +24 -23
  38. data/frameworks/uki/src/uki-core/theme/template.js +1 -1
  39. data/frameworks/uki/src/uki-core/uki.js +7 -4
  40. data/frameworks/uki/src/uki-core/utils.js +51 -26
  41. data/frameworks/uki/src/uki-core/view.js +6 -3
  42. data/frameworks/uki/src/uki-core/view/base.js +16 -1
  43. data/frameworks/uki/src/uki-core/view/container.js +15 -5
  44. data/frameworks/uki/src/uki-core/view/focusable.js +17 -4
  45. data/frameworks/uki/src/uki-core/view/observable.js +15 -2
  46. data/frameworks/uki/src/uki-core/view/styleable.js +4 -11
  47. data/frameworks/uki/src/uki-data/ajax.js +4 -30
  48. data/frameworks/uki/src/uki-data/json.js +191 -0
  49. data/frameworks/uki/src/uki-data/localStore.js +37 -0
  50. data/frameworks/uki/src/uki-data/model.js +1 -1
  51. data/frameworks/uki/src/uki-more.js +4 -0
  52. data/frameworks/uki/src/uki-more/more/background.js +2 -0
  53. data/frameworks/uki/src/uki-more/more/color.js +168 -0
  54. data/frameworks/uki/src/uki-more/more/utils.js +5 -12
  55. data/frameworks/uki/src/uki-more/more/view.js +3 -1
  56. data/frameworks/uki/src/uki-more/more/view/form.js +30 -0
  57. data/frameworks/uki/src/uki-more/more/view/hTile.js +59 -0
  58. data/frameworks/uki/src/uki-more/more/view/nativeButton.js +3 -0
  59. data/frameworks/uki/src/uki-more/more/view/nativeCheckbox.js +38 -0
  60. data/frameworks/uki/src/uki-more/more/view/nativeControl.js +40 -0
  61. data/frameworks/uki/src/uki-more/more/view/nativeInput.js +78 -0
  62. data/frameworks/uki/src/uki-more/more/view/nativeSelect.js +29 -0
  63. data/frameworks/uki/src/uki-more/more/view/radioButton.js +1 -1
  64. data/frameworks/uki/src/uki-more/more/view/select-theme.js +55 -0
  65. data/frameworks/uki/src/uki-more/more/view/select.js +208 -0
  66. data/frameworks/uki/src/uki-theme/airport.js +145 -88
  67. data/frameworks/uki/src/uki-theme/airport/i/table/a-down.png +0 -0
  68. data/frameworks/uki/src/uki-theme/airport/i/table/a-up.png +0 -0
  69. data/frameworks/uki/src/uki-touch.js +2 -0
  70. data/frameworks/uki/src/uki-touch/touch.js +1 -0
  71. data/frameworks/uki/src/uki-touch/touch/const.js +24 -0
  72. data/frameworks/uki/src/uki-touch/touch/setup.js +52 -0
  73. data/frameworks/uki/src/uki-touch/touch/view.js +4 -0
  74. data/frameworks/uki/src/uki-touch/touch/view/scrollPane.js +505 -0
  75. data/frameworks/uki/src/uki-touch/touch/view/scrollableList.js +27 -0
  76. data/frameworks/uki/src/uki-view/view/box.js +9 -0
  77. data/frameworks/uki/src/uki-view/view/button.js +36 -1
  78. data/frameworks/uki/src/uki-view/view/checkbox.js +32 -3
  79. data/frameworks/uki/src/uki-view/view/flow.js +37 -9
  80. data/frameworks/uki/src/uki-view/view/image.js +14 -1
  81. data/frameworks/uki/src/uki-view/view/label.js +72 -11
  82. data/frameworks/uki/src/uki-view/view/list.js +143 -13
  83. data/frameworks/uki/src/uki-view/view/list/render.js +1 -0
  84. data/frameworks/uki/src/uki-view/view/popup.js +46 -2
  85. data/frameworks/uki/src/uki-view/view/radio.js +19 -4
  86. data/frameworks/uki/src/uki-view/view/scrollPane.js +91 -33
  87. data/frameworks/uki/src/uki-view/view/slider.js +67 -54
  88. data/frameworks/uki/src/uki-view/view/splitPane.js +102 -9
  89. data/frameworks/uki/src/uki-view/view/table.js +59 -2
  90. data/frameworks/uki/src/uki-view/view/table/column.js +45 -17
  91. data/frameworks/uki/src/uki-view/view/table/header.js +40 -12
  92. data/frameworks/uki/src/uki-view/view/table/render.js +4 -0
  93. data/frameworks/uki/src/uki-view/view/textField.js +75 -21
  94. data/frameworks/uki/src/uki-view/view/toolbar.js +16 -0
  95. data/lib/uki/builder.rb +1 -1
  96. data/lib/uki/include_js.rb +2 -2
  97. data/lib/uki/project.rb +14 -14
  98. data/templates/index.html.erb +2 -2
  99. data/templates/myapp.js.erb +2 -2
  100. data/uki.gemspec +34 -48
  101. metadata +44 -47
  102. data/frameworks/uki/src/uki-core/dom/nativeLayout.js +0 -18
  103. data/frameworks/uki/src/uki-theme/airport/i/button/down-c.gif +0 -0
  104. data/frameworks/uki/src/uki-theme/airport/i/button/down-c.png +0 -0
  105. data/frameworks/uki/src/uki-theme/airport/i/button/down-h.gif +0 -0
  106. data/frameworks/uki/src/uki-theme/airport/i/button/down-h.png +0 -0
  107. data/frameworks/uki/src/uki-theme/airport/i/button/down-m.png +0 -0
  108. data/frameworks/uki/src/uki-theme/airport/i/button/down-v.png +0 -0
  109. data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-c.png +0 -0
  110. data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-h.png +0 -0
  111. data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-m.png +0 -0
  112. data/frameworks/uki/src/uki-theme/airport/i/button/focusRing-v.png +0 -0
  113. data/frameworks/uki/src/uki-theme/airport/i/button/focusRing.png +0 -0
  114. data/frameworks/uki/src/uki-theme/airport/i/button/hover-c.gif +0 -0
  115. data/frameworks/uki/src/uki-theme/airport/i/button/hover-c.png +0 -0
  116. data/frameworks/uki/src/uki-theme/airport/i/button/hover-h.gif +0 -0
  117. data/frameworks/uki/src/uki-theme/airport/i/button/hover-h.png +0 -0
  118. data/frameworks/uki/src/uki-theme/airport/i/button/hover-m.png +0 -0
  119. data/frameworks/uki/src/uki-theme/airport/i/button/hover-v.png +0 -0
  120. data/frameworks/uki/src/uki-theme/airport/i/button/hover.png +0 -0
  121. data/frameworks/uki/src/uki-theme/airport/i/button/normal-c.gif +0 -0
  122. data/frameworks/uki/src/uki-theme/airport/i/button/normal-c.png +0 -0
  123. data/frameworks/uki/src/uki-theme/airport/i/button/normal-h.gif +0 -0
  124. data/frameworks/uki/src/uki-theme/airport/i/button/normal-h.png +0 -0
  125. data/frameworks/uki/src/uki-theme/airport/i/button/normal-m.png +0 -0
  126. data/frameworks/uki/src/uki-theme/airport/i/button/normal-v.png +0 -0
  127. data/frameworks/uki/src/uki-theme/airport/i/button/normal.png +0 -0
  128. data/frameworks/uki/src/uki-theme/airport/i/panel/dark-h.gif +0 -0
  129. data/frameworks/uki/src/uki-theme/airport/i/panel/dark-h.png +0 -0
  130. data/frameworks/uki/src/uki-theme/airport/i/panel/dark-m.png +0 -0
  131. data/frameworks/uki/src/uki-theme/airport/i/panel/dark.png +0 -0
  132. data/frameworks/uki/src/uki-theme/airport/i/popup/normal.png +0 -0
  133. data/frameworks/uki/src/uki-theme/airport/i/shadow/large-c.png +0 -0
  134. data/frameworks/uki/src/uki-theme/airport/i/shadow/large-h.png +0 -0
  135. data/frameworks/uki/src/uki-theme/airport/i/shadow/large-m.png +0 -0
  136. data/frameworks/uki/src/uki-theme/airport/i/shadow/large-v.png +0 -0
  137. data/frameworks/uki/src/uki-theme/airport/i/shadow/large.png +0 -0
  138. data/frameworks/uki/src/uki-theme/airport/i/slider/bar-m.gif +0 -0
  139. data/frameworks/uki/src/uki-theme/airport/i/slider/bar-m.png +0 -0
  140. data/frameworks/uki/src/uki-theme/airport/i/slider/bar-v.gif +0 -0
  141. data/frameworks/uki/src/uki-theme/airport/i/slider/bar-v.png +0 -0
  142. data/frameworks/uki/src/uki-theme/airport/i/slider/bar.png +0 -0
  143. data/frameworks/uki/src/uki-theme/airport/i/slider/focus.png +0 -0
  144. data/frameworks/uki/src/uki-theme/airport/i/slider/handle.gif +0 -0
@@ -0,0 +1,191 @@
1
+ include('data.js');
2
+
3
+ // JSON2 library, source: http://www.JSON.org/js.html
4
+ // Most modern browsers already support this natively, but mobile
5
+ // browsers often don't, hence this implementation
6
+ // Relevant APIs:
7
+ // JSON.stringify(value, replacer, space)
8
+
9
+ var JSON = (window && window.JSON) ? window.JSON : {};
10
+ if (!JSON.stringify) {
11
+ (function () {
12
+ function f(n) {
13
+ return n < 10 ? '0' + n : n;
14
+ }
15
+ if (typeof Date.prototype.toJSON !== 'function') {
16
+
17
+ Date.prototype.toJSON = function (key) {
18
+
19
+ return isFinite(this.valueOf()) ?
20
+ this.getUTCFullYear() + '-' +
21
+ f(this.getUTCMonth() + 1) + '-' +
22
+ f(this.getUTCDate()) + 'T' +
23
+ f(this.getUTCHours()) + ':' +
24
+ f(this.getUTCMinutes()) + ':' +
25
+ f(this.getUTCSeconds()) + 'Z' : null;
26
+ };
27
+
28
+ String.prototype.toJSON =
29
+ Number.prototype.toJSON =
30
+ Boolean.prototype.toJSON = function (key) {
31
+ return this.valueOf();
32
+ };
33
+ }
34
+
35
+ var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
36
+ escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g,
37
+ gap, indent,
38
+ meta = {
39
+ '\b': '\\b',
40
+ '\t': '\\t',
41
+ '\n': '\\n',
42
+ '\f': '\\f',
43
+ '\r': '\\r',
44
+ '"' : '\\"',
45
+ '\\': '\\\\'
46
+ },
47
+ rep;
48
+
49
+ function quote(string) {
50
+ escapable.lastIndex = 0;
51
+ return escapable.test(string) ?
52
+ '"' + string.replace(escapable, function (a) {
53
+ var c = meta[a];
54
+ return typeof c === 'string' ? c :
55
+ '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
56
+ }) + '"' :
57
+ '"' + string + '"';
58
+ }
59
+
60
+
61
+ function str(key, holder) {
62
+ var i, k, v, length, mind = gap, partial, value = holder[key];
63
+
64
+ if (value && typeof value === 'object' &&
65
+ typeof value.toJSON === 'function') {
66
+ value = value.toJSON(key);
67
+ }
68
+
69
+ if (typeof rep === 'function') {
70
+ value = rep.call(holder, key, value);
71
+ }
72
+
73
+ switch (typeof value) {
74
+ case 'string':
75
+ return quote(value);
76
+ case 'number':
77
+ return isFinite(value) ? String(value) : 'null';
78
+ case 'boolean':
79
+ case 'null':
80
+ return String(value);
81
+ case 'object':
82
+ if (!value) {
83
+ return 'null';
84
+ }
85
+
86
+ gap += indent;
87
+ partial = [];
88
+
89
+ if (Object.prototype.toString.apply(value) === '[object Array]') {
90
+ length = value.length;
91
+ for (i = 0; i < length; i += 1) {
92
+ partial[i] = str(i, value) || 'null';
93
+ }
94
+
95
+ v = partial.length === 0 ? '[]' :
96
+ gap ? '[\n' + gap +
97
+ partial.join(',\n' + gap) + '\n' +
98
+ mind + ']' :
99
+ '[' + partial.join(',') + ']';
100
+ gap = mind;
101
+ return v;
102
+ }
103
+
104
+ if (rep && typeof rep === 'object') {
105
+ length = rep.length;
106
+ for (i = 0; i < length; i += 1) {
107
+ k = rep[i];
108
+ if (typeof k === 'string') {
109
+ v = str(k, value);
110
+ if (v) {
111
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
112
+ }
113
+ }
114
+ }
115
+ } else {
116
+ for (k in value) {
117
+ if (Object.hasOwnProperty.call(value, k)) {
118
+ v = str(k, value);
119
+ if (v) {
120
+ partial.push(quote(k) + (gap ? ': ' : ':') + v);
121
+ }
122
+ }
123
+ }
124
+ }
125
+
126
+ v = partial.length === 0 ? '{}' :
127
+ gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' +
128
+ mind + '}' : '{' + partial.join(',') + '}';
129
+ gap = mind;
130
+ return v;
131
+ }
132
+ }
133
+
134
+ if (typeof JSON.stringify !== 'function') {
135
+ JSON.stringify = function (value, replacer, space) {
136
+ var i;
137
+ gap = '';
138
+ indent = '';
139
+ if (typeof space === 'number') {
140
+ for (i = 0; i < space; i += 1) {
141
+ indent += ' ';
142
+ }
143
+ } else if (typeof space === 'string') {
144
+ indent = space;
145
+ }
146
+
147
+ rep = replacer;
148
+ if (replacer && typeof replacer !== 'function' &&
149
+ (typeof replacer !== 'object' ||
150
+ typeof replacer.length !== 'number')) {
151
+ throw new Error('JSON.stringify');
152
+ }
153
+
154
+ return str('', {'': value});
155
+ };
156
+ }
157
+ }());
158
+ }
159
+
160
+
161
+ uki.extend(uki, {
162
+
163
+ parseJSON: function(data) {
164
+ if ( typeof data !== "string" || !data ) {
165
+ return null;
166
+ }
167
+
168
+ // Make sure leading/trailing whitespace is removed (IE can't handle it)
169
+ data = uki.trim( data );
170
+
171
+ // Make sure the incoming data is actual JSON
172
+ // Logic borrowed from http://json.org/json2.js
173
+ if ( /^[\],:{}\s]*$/.test(data.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, "@")
174
+ .replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, "]")
175
+ .replace(/(?:^|:|,)(?:\s*\[)+/g, "")) ) {
176
+
177
+ // Try to use the native JSON parser first
178
+ return window.JSON && window.JSON.parse ?
179
+ window.JSON.parse( data ) :
180
+ (new Function("return " + data))();
181
+
182
+ } else {
183
+ throw "Invalid JSON: " + data;
184
+ }
185
+ },
186
+
187
+ stringifyJSON: function(arg) {
188
+ // for uki-like method naming convenicnce only
189
+ return JSON.stringify(arg);
190
+ }
191
+ });
@@ -0,0 +1,37 @@
1
+ include('json.js');
2
+
3
+ /**
4
+ * Stores/retrieves an object in localStorage (if available) otherwise as cookie
5
+ *
6
+ * @author rsaccon
7
+ * @param {string} key
8
+ * @param {object} value
9
+ * @param {string} path
10
+ * @returns {object}
11
+ */
12
+ uki.localStore = function(key, value, path) {
13
+ if (('localStorage' in window) && window.localStorage !== null) {
14
+ var name = "prefs";
15
+ if (value === undefined) {
16
+ return localStorage[key];
17
+ } else {
18
+ localStorage[key] = value;
19
+ };
20
+ } else {
21
+ if (value === undefined) {
22
+ var result;
23
+ if (result = new RegExp("(?:^|; )" +key+ "=([^;]*)").exec(document.cookie)) {
24
+ return uki.parseJSON(unescape(result[1]));
25
+ } else return false;
26
+ } else {
27
+ var date = new Date();
28
+ // set expiration to far-future (one year)
29
+ date.setTime(date.getTime()+(365*24*60*60*1000));
30
+ document.cookie = [
31
+ key , '=' , escape(uki.stringifyJSON(value)),
32
+ '; expires=', date.toUTCString(),
33
+ '; path=', path || '/'
34
+ ].join("");
35
+ }
36
+ }
37
+ };
@@ -4,7 +4,7 @@ include('observable.js');
4
4
  *
5
5
  * @example
6
6
  * myModel = uki.newClass(uki.data.Model, function() {
7
- * uki.data.model.addField(this, ['name', 'age', 'sex']);
7
+ * uki.data.model.addFields(this, ['name', 'age', 'sex']);
8
8
  * })
9
9
  *
10
10
  * var m = new myModel({ age: 22, name: 'Jonh Smith', sex: 'm' })
@@ -1,4 +1,8 @@
1
+ include('uki-more/more/utils.js');
1
2
  include('uki-more/more/view/treeList.js');
2
3
  include('uki-more/more/view/toggleButton.js');
3
4
  include('uki-more/more/view/radioButton.js');
4
5
  include('uki-more/more/view/splitTable.js');
6
+ include('uki-more/more/view/form.js');
7
+ include('uki-more/more/view/select.js');
8
+ include('uki-more/more/view/select-theme.js');
@@ -0,0 +1,2 @@
1
+ include('../more.js');
2
+ uki.more.background = {};
@@ -0,0 +1,168 @@
1
+ include('../more.js');
2
+
3
+ (function() {
4
+
5
+ function rgbToHSL(r, g, b) {
6
+ r /= 255; g /= 255; b /= 255;
7
+ var max = Math.max(r, g, b), min = Math.min(r, g, b);
8
+ var h, s, l = (max + min) / 2;
9
+
10
+ if (max == min){
11
+ h = s = 0; // achromatic
12
+ } else {
13
+ var d = max - min;
14
+ s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
15
+ switch(max) {
16
+ case r: h = (g - b) / d + (g < b ? 6 : 0); break;
17
+ case g: h = (b - r) / d + 2; break;
18
+ case b: h = (r - g) / d + 4; break;
19
+ }
20
+ h /= 6;
21
+ }
22
+ return [h, s, l];
23
+ }
24
+
25
+ function filter(val) {
26
+ return (val < 0 || isNaN(val)) ? 0 : ((val > 255) ? 255 : val);
27
+ }
28
+
29
+ function modify(val, diff) {
30
+ var result = val;
31
+ if (!isNaN(val)) result += diff;
32
+ if (result < 0) result = 0;
33
+ if (result > 1) result = 1;
34
+ return result;
35
+ }
36
+
37
+ function hslToHexString(h, s, l) {
38
+ var r, g, b;
39
+
40
+ if(s == 0){
41
+ r = g = b = l; // achromatic
42
+ }else{
43
+ function hue2rgb(p, q, t){
44
+ if(t < 0) t += 1;
45
+ if(t > 1) t -= 1;
46
+ if(t < 1/6) return p + (q - p) * 6 * t;
47
+ if(t < 1/2) return q;
48
+ if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
49
+ return p;
50
+ }
51
+
52
+ var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
53
+ var p = 2 * l - q;
54
+ r = hue2rgb(p, q, h + 1/3);
55
+ g = hue2rgb(p, q, h);
56
+ b = hue2rgb(p, q, h - 1/3);
57
+ }
58
+
59
+ r = Math.round(r * 255).toString(16);
60
+ g = Math.round(g * 255).toString(16);
61
+ b = Math.round(b * 255).toString(16);
62
+
63
+ if (r.length == 1) r = '0' + r;
64
+ if (g.length == 1) g = '0' + g;
65
+ if (b.length == 1) b = '0' + b;
66
+
67
+ return '#' + r + g + b;
68
+ }
69
+
70
+
71
+ /**
72
+ * Creates a HSL color from a hex string or numerical [0..255] RGB args
73
+ *
74
+ * @author rsaccon
75
+ * @param {Number | string} Red component or color hex string
76
+ * @param {Number} arg1 Green component
77
+ * @param {Number} arg1 Blue component
78
+ * @constructor
79
+ */
80
+ var Color = uki.more.Color = function(arg1, arg2, arg3) {
81
+ var r=255, g=255, b=255;
82
+
83
+ if (arguments.length == 1) {
84
+
85
+ function process(bits){
86
+ return [
87
+ parseInt(bits[1], 16),
88
+ parseInt(bits[2], 16),
89
+ parseInt(bits[3], 16)
90
+ ];
91
+ }
92
+
93
+ var bits = /^(\w{2})(\w{2})(\w{2})$/.exec(arg1);
94
+
95
+ if (bits) {
96
+ var channels = process(bits);
97
+ r = filter(channels[0]);
98
+ g = filter(channels[1]);
99
+ b = filter(channels[2]);
100
+ }
101
+ } else if (arguments.length == 3) {
102
+ r = filter(arg1);
103
+ g = filter(arg2);
104
+ b = filter(arg3);
105
+ }
106
+
107
+ var hsl = rgbToHSL(r, g, b);
108
+ this.hue = hsl[0];
109
+ this.saturation = hsl[1];
110
+ this.luminance = hsl[2];
111
+ };
112
+
113
+ Color.prototype = /** @lends uki.more.Color.prototype */ {
114
+ /**
115
+ * Base color
116
+ *
117
+ * @author rsaccon
118
+ * @returns {string} Color as hex string
119
+ */
120
+ base: function() {
121
+ return hslToHexString(this.hue, this.saturation, this.luminance);
122
+ },
123
+
124
+ /**
125
+ * Increseases the lightness of the Base color
126
+ *
127
+ * @author rsaccon
128
+ * @param {Number} val allowed values: [0.0 .. 1.0]
129
+ * @returns {string} Color as hex string
130
+ */
131
+ lighten: function(val) {
132
+ return hslToHexString(this.hue, this.saturation, modify(this.luminance, val));
133
+ },
134
+
135
+ /**
136
+ * Decreseases the lightness of the Base color
137
+ *
138
+ * @author rsaccon
139
+ * @param {Number} val allowed values: [0.0 .. 1.0]
140
+ * @returns {string} Color as hex string
141
+ */
142
+ darken: function(val) {
143
+ this.lighten(-1 * val);
144
+ },
145
+
146
+ /**
147
+ * Increseases the saturation of the Base color
148
+ *
149
+ * @author rsaccon
150
+ * @param {Number} val allowed values: [0.0 .. 1.0]
151
+ * @returns {string} Color as hex string
152
+ */
153
+ saturate: function(val) {
154
+ return hslToHexString(this.hue, modify(this.saturation, val), this.luminance);
155
+ },
156
+
157
+ /**
158
+ * Decreseases the saturation of the Base color
159
+ *
160
+ * @author rsaccon
161
+ * @param {Number} val allowed values: [0.0 .. 1.0]
162
+ * @returns {string} Color as hex string
163
+ */
164
+ desaturate: function(val) {
165
+ this.saturate(-1 * val);
166
+ }
167
+ };
168
+ })();
@@ -2,19 +2,12 @@ include('../more.js');
2
2
 
3
3
  uki.more.utils = {
4
4
  range: function (from, to) {
5
- var result = new Array(to - from);
6
- for (var idx = 0; from <= to; from++, idx++) {
5
+ var result = new Array(to - from), idx = 0;
6
+ for (; from <= to; from++, idx++) {
7
7
  result[idx] = from;
8
8
  };
9
9
  return result;
10
- },
11
-
12
- binarySearch: function (array, value) {
13
- var low = 0, high = array.length, mid;
14
- while (low < high) {
15
- mid = (low + high) >> 1;
16
- array[mid] < value ? low = mid + 1 : high = mid;
17
- }
18
- return low;
19
10
  }
20
- };
11
+ };
12
+
13
+ uki.extend(uki, uki.more.utils);