judojs 0.9.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 (44) hide show
  1. data/LICENSE.markdown +29 -0
  2. data/bin/jpm +52 -0
  3. data/bin/judojs +52 -0
  4. data/lib/judojs/command.rb +136 -0
  5. data/lib/judojs/configuration.rb +77 -0
  6. data/lib/judojs/dependencies.rb +14 -0
  7. data/lib/judojs/helpers.rb +16 -0
  8. data/lib/judojs/jpm.rb +62 -0
  9. data/lib/judojs/project.rb +193 -0
  10. data/lib/judojs.rb +31 -0
  11. data/repository/jquery/1.1.4.js +2508 -0
  12. data/repository/jquery/1.2.6.js +32 -0
  13. data/repository/jquery/1.3.2.js +19 -0
  14. data/repository/jquery/1.4.2.js +154 -0
  15. data/repository/jquery/latest.js +1 -0
  16. data/repository/judojs/core/existence.js +41 -0
  17. data/repository/judojs/core/extend.js +22 -0
  18. data/repository/judojs/core/judo.js +26 -0
  19. data/repository/judojs/tests/index.html +21 -0
  20. data/repository/judojs/tests/judojs.test.js +109 -0
  21. data/repository/judojs/tests/judojs.utilities.test.js +149 -0
  22. data/repository/judojs/utilities/all.js +2 -0
  23. data/repository/judojs/utilities/array.js +34 -0
  24. data/repository/judojs/utilities/string.js +66 -0
  25. data/repository/modernizr/1.5.js +28 -0
  26. data/repository/modernizr/latest.js +1 -0
  27. data/repository/selectivizr/1.0.js +5 -0
  28. data/repository/selectivizr/latest.js +1 -0
  29. data/tests/fixtures/global.js +6 -0
  30. data/tests/fixtures/global.module.js +3 -0
  31. data/tests/fixtures/judojs.conf +5 -0
  32. data/tests/fixtures/myapplication.js +90 -0
  33. data/tests/fixtures/test.elements.js +4 -0
  34. data/tests/fixtures/test.js +2 -0
  35. data/tests/fixtures/test.model.js +3 -0
  36. data/tests/fixtures/test.module.js +12 -0
  37. data/tests/fixtures/update.judojs.conf +4 -0
  38. data/tests/fixtures/updated.myapplication.js +27 -0
  39. data/tests/fixtures/utilities.js +100 -0
  40. data/tests/jpm_test.rb +10 -0
  41. data/tests/judo_test.rb +12 -0
  42. data/tests/project_test.rb +91 -0
  43. data/tests/update_test.rb +70 -0
  44. metadata +165 -0
@@ -0,0 +1,149 @@
1
+ module("array utility tests");
2
+
3
+ test("can test for emptiness", function() {
4
+ expect(4);
5
+
6
+ ok([].is_empty(), "[].is_empty() is true");
7
+ equals(['one', 'two', 'three'].is_empty(), false, "['one', 'two', 'three'].is_empty()");
8
+ ok(['one', 'two', 'three'].not_empty(), "['one', 'two', 'three'].not_empty() is false");
9
+ equals([].not_empty(), false, "[].not_empty() is false");
10
+ });
11
+
12
+ test("can iterate over each element", function() {
13
+ expect(7);
14
+
15
+ var iteration_count = 0;
16
+ var test_array_values = [];
17
+ var test_array_indices = [];
18
+
19
+ ['one', 'two', 'three'].each(function(value, index) {
20
+ iteration_count++;
21
+ test_array_values.push(value);
22
+ test_array_indices.push(index);
23
+ });
24
+
25
+ equals(test_array_values[0], 'one', 'value at index 0 is correct');
26
+ equals(test_array_values[1], 'two', 'value at index 1 is correct');
27
+ equals(test_array_values[2], 'three', 'value at index 2 is correct');
28
+
29
+ equals(test_array_indices[0], 0, 'first index is correct');
30
+ equals(test_array_indices[1], 1, 'second index is correct');
31
+ equals(test_array_indices[2], 2, 'third index is correct');
32
+
33
+ equals(iteration_count, 3, 'made only three iterations');
34
+ });
35
+
36
+ test("can test if an array contains an element", function() {
37
+ var array = ['one', 'two', 'three'];
38
+ var string = 'hello';
39
+ var object = {
40
+ name: 'some object'
41
+ };
42
+ var number = 45;
43
+ var date = new Date();
44
+
45
+ var test_array = [array, string, object, number, date];
46
+
47
+ ok(test_array.contains(array), 'array.contains(array)');
48
+ ok(test_array.contains(string), 'array.contains(string)');
49
+ ok(test_array.contains(object), 'array.contains(object)');
50
+ ok(test_array.contains(number), 'array.contains(number)');
51
+ ok(test_array.contains(date), 'array.contains(date)');
52
+ equals(test_array.contains('not in there'), false, 'non-existent value is false');
53
+ });
54
+
55
+ test("can shuffle an array", function() {
56
+ var array = [1, 2, 3, 4, 5, 6, 7, 8, 9];
57
+ ok(array != [1, 2, 3, 4, 5, 6, 7, 8, 9], "array is shuffled");
58
+ same(array, [1, 2, 3, 4, 5, 6, 7, 8, 9], 'array is not altered');
59
+ });
60
+
61
+ module("string utility tests");
62
+
63
+ test("can test for emptiness", function() {
64
+ ok(''.is_empty(), "''.is_empty() is true");
65
+ equals('hey there'.is_empty(), false, "'hey there'.is_empty() is false");
66
+ ok('hey there'.not_empty(), "'hey there'.not_empty() is false");
67
+ equals(''.not_empty(), false, "''.not_empty() is false");
68
+ });
69
+
70
+ test('can test for number', function() {
71
+ equals('34'.is_number(), true, "34 is a number");
72
+ equals('0.5'.is_number(), true, ".5 is a number");
73
+ equals('-34'.is_number(), true, '-34 is a number');
74
+ equals('-0.5'.is_number(), true, '-.05 is a number');
75
+ equals('hello'.is_number(), false, 'hello is not a number');
76
+ });
77
+
78
+ test('can trim a string', function() {
79
+ equals(' hello '.trim(), 'hello', "' hello '.trim()");
80
+ equals(' hello '.ltrim(), 'hello ', "' hello '.ltrim()");
81
+ equals(' hello '.rtrim(), ' hello', "' hello '.rtrim()");
82
+ });
83
+
84
+ test("can iterate over each character", function() {
85
+ var iteration_count = 0;
86
+ var test_chars = [];
87
+ var test_indices = [];
88
+ '123'.each(function(character, index) {
89
+ test_chars.push(character);
90
+ test_indices.push(index);
91
+ iteration_count++;
92
+ });
93
+
94
+ equals(test_chars[0], '1', 'first character of 123 is 1');
95
+ equals(test_chars[1], '2', 'second character of 123 is 2');
96
+ equals(test_chars[2], '3', 'second character of 123 is 3');
97
+
98
+ equals(test_indices[0], 0, 'first index is correct');
99
+ equals(test_indices[1], 1, 'second index is correct');
100
+ equals(test_indices[2], 2, 'third index is correct');
101
+
102
+ equals(iteration_count, 3, 'made only three iterations');
103
+ });
104
+
105
+ test('can capitalize a string', function() {
106
+ equals('hello world'.capitalize(), 'Hello world', 'capitalized string correctly');
107
+ });
108
+
109
+ test('can reverse a string', function() {
110
+ equals('hello world'.reverse(), 'dlrow olleh', 'reversed string correctly');
111
+ equals('satan oscillate my metallic sonatas'.reverse(), 'satanos cillatem ym etallicso natas', 'fucking palindromes, how do they work?');
112
+ });
113
+
114
+ test("can convert to number", function() {
115
+ var whole_number = '32';
116
+ var decimal = '0.08';
117
+ var negative_number = '-32';
118
+ var negative_float = '-0.08';
119
+
120
+ same(whole_number.to_n(), 32, "whole_number.to_n() is 32");
121
+ same(decimal.to_n(), 0.08, "decimal.to_n() is 0.08");
122
+ same(negative_number.to_n(), -32, "negative_number.to_n() is -32");
123
+ same(negative_float.to_n(), -0.08, "negative_float.to_n() -0.08");
124
+ });
125
+
126
+ test("can pluck a string", function() {
127
+ equals('one, two, three'.pluck(','), 'one two three', "'one, two, three'.pluck(',')");
128
+ });
129
+
130
+ test("can single space a string", function() {
131
+ var hard_space = 'one two  three   four    five     six';
132
+ var soft_space = 'one two three four five six';
133
+ var mixed_space = 'one two   three   four    five     six';
134
+
135
+ equals(hard_space.single_space(), 'one two three four five six', 'correctly spaced  ');
136
+ equals(soft_space.single_space(), 'one two three four five six', "correctly spaced soft spaces");
137
+ equals(mixed_space.single_space(), 'one two three four five six', "correctly spaced mixed spaces");
138
+ });
139
+
140
+ test("can compress a string", function() {
141
+ var string = "satan\n\t oscillate\n\t my\n\t metallic\n sonatas";
142
+ same(string.compress(), 'satanoscillatemymetallicsonatas', "string is compressed correctly");
143
+ });
144
+
145
+ test("can shuffle a string", function() {
146
+ var string = 'Hello World';
147
+ ok('Hello World' != string.shuffle(), "string is shuffled");
148
+ same(string, 'Hello World', 'array is not altered');
149
+ });
@@ -0,0 +1,2 @@
1
+ //= require "array.js"
2
+ //= require "string.js"
@@ -0,0 +1,34 @@
1
+ Array.method('is_empty', function() {
2
+ return (this.length < 1) ? true : false;
3
+ });
4
+
5
+ Array.method('not_empty', function() {
6
+ return (this.length > 0) ? true : false;
7
+ });
8
+
9
+ Array.method('each', function(callback) {
10
+ try {
11
+ if(doesNotExist(callback)) {
12
+ throw new SyntaxError("Array.each(callback): callback is undefined");
13
+ }
14
+
15
+ for (var i = 0; i < this.length; i++) {
16
+ var args = [this[i], i];
17
+ callback.apply(this, args);
18
+ }
19
+ }
20
+ catch(error) {
21
+ alert(error.message);
22
+ }
23
+ });
24
+
25
+ Array.method('contains', function(suspect) {
26
+ var matches = [];
27
+ this.each(function(value, index) {
28
+ if(value === suspect) {
29
+ matches.push(index);
30
+ }
31
+ });
32
+
33
+ return matches.not_empty() ? matches : false;
34
+ });
@@ -0,0 +1,66 @@
1
+ String.method('is_empty', function() {
2
+ return (this == '') ? true : false;
3
+ });
4
+
5
+ String.method('not_empty', function() {
6
+ return (this == '') ? false : true;
7
+ });
8
+
9
+ String.method('is_number', function() {
10
+ var pattern = /^(\.|-)?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
11
+ return pattern.test(this);
12
+ });
13
+
14
+ String.method('trim', function() {
15
+ return this.replace(/^\s+|\s+$/g, "");
16
+ });
17
+
18
+ String.method('ltrim', function() {
19
+ return this.replace(/^\s+/,"");
20
+ });
21
+
22
+ String.method('rtrim', function() {
23
+ return this.replace(/\s+$/,"");
24
+ });
25
+
26
+ String.method('each', function(callback) {
27
+ try {
28
+ if(doesNotExist(callback)) {
29
+ throw new SyntaxError("String.each(callback): callback is undefined");
30
+ }
31
+
32
+ for (var i = 0; i < this.length; i++) {
33
+ var args = [this.charAt(i), i];
34
+ callback.apply(this, args);
35
+ }
36
+ }
37
+ catch(error) {
38
+ alert(error.message);
39
+ }
40
+ });
41
+
42
+ String.method('capitalize', function() {
43
+ return this.substr(0, 1).toUpperCase() + this.substr(1);
44
+ });
45
+
46
+ String.method('reverse', function() {
47
+ return this.split('').reverse().join('');
48
+ });
49
+
50
+ String.method('to_n', function() {
51
+ return parseFloat(this);
52
+ });
53
+
54
+ String.method('pluck', function(needle) {
55
+ var pattern = new RegExp(needle, 'g');
56
+ return this.replace(pattern, '');
57
+ });
58
+
59
+ String.method('single_space', function() {
60
+ var no_hard_spaces = this.replace(/\&nbsp\;/g, ' ');
61
+ return no_hard_spaces.replace(/\s+/g, ' ');
62
+ });
63
+
64
+ String.method('compress', function() {
65
+ return this.replace(/\s+/g, '');
66
+ });
@@ -0,0 +1,28 @@
1
+ /*!
2
+ * Modernizr JavaScript library 1.5
3
+ * http://www.modernizr.com/
4
+ *
5
+ * Copyright (c) 2009-2010 Faruk Ates - http://farukat.es/
6
+ * Dual-licensed under the BSD and MIT licenses.
7
+ * http://www.modernizr.com/license/
8
+ *
9
+ * Featuring major contributions by
10
+ * Paul Irish - http://paulirish.com
11
+ */
12
+ window.Modernizr=function(i,e,I){function C(a,b){for(var c in a)if(m[a[c]]!==I&&(!b||b(a[c],D)))return true}function r(a,b){var c=a.charAt(0).toUpperCase()+a.substr(1);return!!C([a,"Webkit"+c,"Moz"+c,"O"+c,"ms"+c,"Khtml"+c],b)}function P(){j[E]=function(a){for(var b=0,c=a.length;b<c;b++)J[a[b]]=!!(a[b]in n);return J}("autocomplete autofocus list placeholder max min multiple pattern required step".split(" "));j[Q]=function(a){for(var b=0,c,h=a.length;b<h;b++){n.setAttribute("type",a[b]);if(c=n.type!==
13
+ "text"){n.value=K;/tel|search/.test(n.type)||(c=/url|email/.test(n.type)?n.checkValidity&&n.checkValidity()===false:n.value!=K)}L[a[b]]=!!c}return L}("search tel url email datetime date month week time datetime-local number range color".split(" "))}var j={},s=e.documentElement,D=e.createElement("modernizr"),m=D.style,n=e.createElement("input"),E="input",Q=E+"types",K=":)",M=Object.prototype.toString,y=" -o- -moz- -ms- -webkit- -khtml- ".split(" "),d={},L={},J={},N=[],u=function(){var a={select:"input",
14
+ change:"input",submit:"form",reset:"form",error:"img",load:"img",abort:"img"},b={};return function(c,h){var t=arguments.length==1;if(t&&b[c])return b[c];h=h||document.createElement(a[c]||"div");c="on"+c;var g=c in h;if(!g&&h.setAttribute){h.setAttribute(c,"return;");g=typeof h[c]=="function"}h=null;return t?(b[c]=g):g}}(),F={}.hasOwnProperty,O;O=typeof F!=="undefined"&&typeof F.call!=="undefined"?function(a,b){return F.call(a,b)}:function(a,b){return b in a&&typeof a.constructor.prototype[b]==="undefined"};
15
+ d.canvas=function(){return!!e.createElement("canvas").getContext};d.canvastext=function(){return!!(d.canvas()&&typeof e.createElement("canvas").getContext("2d").fillText=="function")};d.geolocation=function(){return!!navigator.geolocation};d.crosswindowmessaging=function(){return!!i.postMessage};d.websqldatabase=function(){var a=!!i.openDatabase;if(a)try{a=!!openDatabase("testdb","1.0","html5 test db",2E5)}catch(b){a=false}return a};d.indexedDB=function(){return!!i.indexedDB};d.hashchange=function(){return u("hashchange",
16
+ i)&&(document.documentMode===I||document.documentMode>7)};d.historymanagement=function(){return!!(i.history&&history.pushState)};d.draganddrop=function(){return u("drag")&&u("dragstart")&&u("dragenter")&&u("dragover")&&u("dragleave")&&u("dragend")&&u("drop")};d.websockets=function(){return"WebSocket"in i};d.rgba=function(){m.cssText="background-color:rgba(150,255,150,.5)";return(""+m.backgroundColor).indexOf("rgba")!==-1};d.hsla=function(){m.cssText="background-color:hsla(120,40%,100%,.5)";return(""+
17
+ m.backgroundColor).indexOf("rgba")!==-1};d.multiplebgs=function(){m.cssText="background:url(//:),url(//:),red url(//:)";return/(url\s*\(.*?){3}/.test(m.background)};d.backgroundsize=function(){return r("backgroundSize")};d.borderimage=function(){return r("borderImage")};d.borderradius=function(){return r("borderRadius","",function(a){return(""+a).indexOf("orderRadius")!==-1})};d.boxshadow=function(){return r("boxShadow")};d.opacity=function(){var a=y.join("opacity:.5;")+"";m.cssText=a;return(""+m.opacity).indexOf("0.5")!==
18
+ -1};d.cssanimations=function(){return r("animationName")};d.csscolumns=function(){return r("columnCount")};d.cssgradients=function(){var a=("background-image:"+y.join("gradient(linear,left top,right bottom,from(#9f9),to(white));background-image:")+y.join("linear-gradient(left top,#9f9, white);background-image:")).slice(0,-17);m.cssText=a;return(""+m.backgroundImage).indexOf("gradient")!==-1};d.cssreflections=function(){return r("boxReflect")};d.csstransforms=function(){return!!C(["transformProperty",
19
+ "WebkitTransform","MozTransform","OTransform","msTransform"])};d.csstransforms3d=function(){var a=!!C(["perspectiveProperty","WebkitPerspective","MozPerspective","OPerspective","msPerspective"]);if(a){var b=document.createElement("style"),c=e.createElement("div");b.textContent="@media ("+y.join("transform-3d),(")+"modernizr){#modernizr{height:3px}}";e.getElementsByTagName("head")[0].appendChild(b);c.id="modernizr";s.appendChild(c);a=c.offsetHeight===3;b.parentNode.removeChild(b);c.parentNode.removeChild(c)}return a};
20
+ d.csstransitions=function(){return r("transitionProperty")};d.fontface=function(){var a;if(/*@cc_on@if(@_jscript_version>=5)!@end@*/0)a=true;else{var b=e.createElement("style"),c=e.createElement("span"),h,t=false,g=e.body,o,w;b.textContent="@font-face{font-family:testfont;src:url('data:font/ttf;base64,AAEAAAAMAIAAAwBAT1MvMliohmwAAADMAAAAVmNtYXCp5qrBAAABJAAAANhjdnQgACICiAAAAfwAAAAEZ2FzcP//AAMAAAIAAAAACGdseWYv5OZoAAACCAAAANxoZWFk69bnvwAAAuQAAAA2aGhlYQUJAt8AAAMcAAAAJGhtdHgGDgC4AAADQAAAABRsb2NhAIQAwgAAA1QAAAAMbWF4cABVANgAAANgAAAAIG5hbWUgXduAAAADgAAABPVwb3N03NkzmgAACHgAAAA4AAECBAEsAAUAAAKZAswAAACPApkCzAAAAesAMwEJAAACAAMDAAAAAAAAgAACbwAAAAoAAAAAAAAAAFBmRWQAAAAgqS8DM/8zAFwDMwDNAAAABQAAAAAAAAAAAAMAAAADAAAAHAABAAAAAABGAAMAAQAAAK4ABAAqAAAABgAEAAEAAgAuqQD//wAAAC6pAP///9ZXAwAAAAAAAAACAAAABgBoAAAAAAAvAAEAAAAAAAAAAAAAAAAAAAABAAIAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEACoAAAAGAAQAAQACAC6pAP//AAAALqkA////1lcDAAAAAAAAAAIAAAAiAogAAAAB//8AAgACACIAAAEyAqoAAwAHAC6xAQAvPLIHBADtMrEGBdw8sgMCAO0yALEDAC88sgUEAO0ysgcGAfw8sgECAO0yMxEhESczESMiARDuzMwCqv1WIgJmAAACAFUAAAIRAc0ADwAfAAATFRQWOwEyNj0BNCYrASIGARQGKwEiJj0BNDY7ATIWFX8aIvAiGhoi8CIaAZIoN/43KCg3/jcoAWD0JB4eJPQkHh7++EY2NkbVRjY2RgAAAAABAEH/+QCdAEEACQAANjQ2MzIWFAYjIkEeEA8fHw8QDxwWFhwWAAAAAQAAAAIAAIuYbWpfDzz1AAsEAAAAAADFn9IuAAAAAMWf0i797/8zA4gDMwAAAAgAAgAAAAAAAAABAAADM/8zAFwDx/3v/98DiAABAAAAAAAAAAAAAAAAAAAABQF2ACIAAAAAAVUAAAJmAFUA3QBBAAAAKgAqACoAWgBuAAEAAAAFAFAABwBUAAQAAgAAAAEAAQAAAEAALgADAAMAAAAQAMYAAQAAAAAAAACLAAAAAQAAAAAAAQAhAIsAAQAAAAAAAgAFAKwAAQAAAAAAAwBDALEAAQAAAAAABAAnAPQAAQAAAAAABQAKARsAAQAAAAAABgAmASUAAQAAAAAADgAaAUsAAwABBAkAAAEWAWUAAwABBAkAAQBCAnsAAwABBAkAAgAKAr0AAwABBAkAAwCGAscAAwABBAkABABOA00AAwABBAkABQAUA5sAAwABBAkABgBMA68AAwABBAkADgA0A/tDb3B5cmlnaHQgMjAwOSBieSBEYW5pZWwgSm9obnNvbi4gIFJlbGVhc2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgT3BlbiBGb250IExpY2Vuc2UuIEtheWFoIExpIGdseXBocyBhcmUgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTCB2ZXJzaW9uIDMuYmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhTGlnaHRiYWVjMmE5MmJmZmU1MDMyIC0gc3Vic2V0IG9mIEZvbnRGb3JnZSAyLjAgOiBKdXJhIExpZ2h0IDogMjMtMS0yMDA5YmFlYzJhOTJiZmZlNTAzMiAtIHN1YnNldCBvZiBKdXJhIExpZ2h0VmVyc2lvbiAyIGJhZWMyYTkyYmZmZTUwMzIgLSBzdWJzZXQgb2YgSnVyYUxpZ2h0aHR0cDovL3NjcmlwdHMuc2lsLm9yZy9PRkwAQwBvAHAAeQByAGkAZwBoAHQAIAAyADAAMAA5ACAAYgB5ACAARABhAG4AaQBlAGwAIABKAG8AaABuAHMAbwBuAC4AIAAgAFIAZQBsAGUAYQBzAGUAZAAgAHUAbgBkAGUAcgAgAHQAaABlACAAdABlAHIAbQBzACAAbwBmACAAdABoAGUAIABPAHAAZQBuACAARgBvAG4AdAAgAEwAaQBjAGUAbgBzAGUALgAgAEsAYQB5AGEAaAAgAEwAaQAgAGcAbAB5AHAAaABzACAAYQByAGUAIAByAGUAbABlAGEAcwBlAGQAIAB1AG4AZABlAHIAIAB0AGgAZQAgAEcAUABMACAAdgBlAHIAcwBpAG8AbgAgADMALgBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQBMAGkAZwBoAHQAYgBhAGUAYwAyAGEAOQAyAGIAZgBmAGUANQAwADMAMgAgAC0AIABzAHUAYgBzAGUAdAAgAG8AZgAgAEYAbwBuAHQARgBvAHIAZwBlACAAMgAuADAAIAA6ACAASgB1AHIAYQAgAEwAaQBnAGgAdAAgADoAIAAyADMALQAxAC0AMgAwADAAOQBiAGEAZQBjADIAYQA5ADIAYgBmAGYAZQA1ADAAMwAyACAALQAgAHMAdQBiAHMAZQB0ACAAbwBmACAASgB1AHIAYQAgAEwAaQBnAGgAdABWAGUAcgBzAGkAbwBuACAAMgAgAGIAYQBlAGMAMgBhADkAMgBiAGYAZgBlADUAMAAzADIAIAAtACAAcwB1AGIAcwBlAHQAIABvAGYAIABKAHUAcgBhAEwAaQBnAGgAdABoAHQAdABwADoALwAvAHMAYwByAGkAcAB0AHMALgBzAGkAbAAuAG8AcgBnAC8ATwBGAEwAAAAAAgAAAAAAAP+BADMAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAQACAQIAEQt6ZXJva2F5YWhsaQ==')}";
21
+ e.getElementsByTagName("head")[0].appendChild(b);c.setAttribute("style","font:99px _,arial,helvetica;position:absolute;visibility:hidden");if(!g){g=s.appendChild(e.createElement("fontface"));t=true}c.innerHTML="........";c.id="fonttest";g.appendChild(c);h=c.offsetWidth*c.offsetHeight;c.style.font="99px testfont,_,arial,helvetica";a=h!==c.offsetWidth*c.offsetHeight;var v=function(){if(g.parentNode){a=j.fontface=h!==c.offsetWidth*c.offsetHeight;s.className=s.className.replace(/(no-)?fontface\b/,"")+
22
+ (a?" ":" no-")+"fontface"}};setTimeout(v,75);setTimeout(v,150);addEventListener("load",function(){v();(w=true)&&o&&o(a);setTimeout(function(){t||(g=c);g.parentNode.removeChild(g);b.parentNode.removeChild(b)},50)},false)}j._fontfaceready=function(p){w||a?p(a):(o=p)};return a||h!==c.offsetWidth};d.video=function(){var a=e.createElement("video"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('video/ogg; codecs="theora"');b.h264=a.canPlayType('video/mp4; codecs="avc1.42E01E"');b.webm=a.canPlayType('video/webm; codecs="vp8, vorbis"')}return b};
23
+ d.audio=function(){var a=e.createElement("audio"),b=!!a.canPlayType;if(b){b=new Boolean(b);b.ogg=a.canPlayType('audio/ogg; codecs="vorbis"');b.mp3=a.canPlayType("audio/mpeg;");b.wav=a.canPlayType('audio/wav; codecs="1"');b.m4a=a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")}return b};d.localStorage=function(){return"localStorage"in i&&i.localStorage!==null};d.sessionStorage=function(){try{return"sessionStorage"in i&&i.sessionStorage!==null}catch(a){return false}};d.webworkers=function(){return!!i.Worker};
24
+ d.applicationCache=function(){var a=i.applicationCache;return!!(a&&typeof a.status!="undefined"&&typeof a.update=="function"&&typeof a.swapCache=="function")};d.svg=function(){return!!e.createElementNS&&!!e.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect};d.smil=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg","animate")))};d.svgclippaths=function(){return!!e.createElementNS&&/SVG/.test(M.call(e.createElementNS("http://www.w3.org/2000/svg",
25
+ "clipPath")))};for(var z in d)if(O(d,z))N.push(((j[z.toLowerCase()]=d[z]())?"":"no-")+z.toLowerCase());j[E]||P();j.addTest=function(a,b){a=a.toLowerCase();if(!j[a]){b=!!b();s.className+=" "+(b?"":"no-")+a;j[a]=b;return j}};m.cssText="";D=n=null;(function(){var a=e.createElement("div");a.innerHTML="<elem></elem>";return a.childNodes.length!==1})()&&function(a,b){function c(f,k){if(o[f])o[f].styleSheet.cssText+=k;else{var l=t[G],q=b[A]("style");q.media=f;l.insertBefore(q,l[G]);o[f]=q;c(f,k)}}function h(f,
26
+ k){for(var l=new RegExp("\\b("+w+")\\b(?!.*[;}])","gi"),q=function(B){return".iepp_"+B},x=-1;++x<f.length;){k=f[x].media||k;h(f[x].imports,k);c(k,f[x].cssText.replace(l,q))}}for(var t=b.documentElement,g=b.createDocumentFragment(),o={},w="abbr|article|aside|audio|canvas|command|datalist|details|figure|figcaption|footer|header|hgroup|keygen|mark|meter|nav|output|progress|section|source|summary|time|video",v=w.split("|"),p=[],H=-1,G="firstChild",A="createElement";++H<v.length;){b[A](v[H]);g[A](v[H])}g=
27
+ g.appendChild(b[A]("div"));a.attachEvent("onbeforeprint",function(){for(var f,k=b.getElementsByTagName("*"),l,q,x=new RegExp("^"+w+"$","i"),B=-1;++B<k.length;)if((f=k[B])&&(q=f.nodeName.match(x))){l=new RegExp("^\\s*<"+q+"(.*)\\/"+q+">\\s*$","i");g.innerHTML=f.outerHTML.replace(/\r|\n/g," ").replace(l,f.currentStyle.display=="block"?"<div$1/div>":"<span$1/span>");l=g.childNodes[0];l.className+=" iepp_"+q;l=p[p.length]=[f,l];f.parentNode.replaceChild(l[1],l[0])}h(b.styleSheets,"all")});a.attachEvent("onafterprint",
28
+ function(){for(var f=-1,k;++f<p.length;)p[f][1].parentNode.replaceChild(p[f][0],p[f][1]);for(k in o)t[G].removeChild(o[k]);o={};p=[]})}(this,e);j._enableHTML5=true;j._version="1.5";s.className=s.className.replace(/\bno-js\b/,"")+" js";s.className+=" "+N.join(" ");return j}(this,this.document);
@@ -0,0 +1 @@
1
+ //= require "1.5"
@@ -0,0 +1,5 @@
1
+ /*
2
+ selectivizr v1.0.0 - (c) Keith Clark, freely distributable under the terms of the MIT license.
3
+ selectivizr.com
4
+ */
5
+ (function(x){function K(a){return a.replace(L,o).replace(M,function(b,e,c){b=c.split(",");c=0;for(var g=b.length;c<g;c++){var j=N(b[c].replace(O,o).replace(P,o))+t,f=[];b[c]=j.replace(Q,function(d,k,l,i,h){if(k){if(f.length>0){d=f;var u;h=j.substring(0,h).replace(R,n);if(h==n||h.charAt(h.length-1)==t)h+="*";try{u=v(h)}catch(da){}if(u){h=0;for(l=u.length;h<l;h++){i=u[h];for(var y=i.className,z=0,S=d.length;z<S;z++){var q=d[z];if(!RegExp("(^|\\s)"+q.className+"(\\s|$)").test(i.className))if(q.b&&(q.b===true||q.b(i)===true))y=A(y,q.className,true)}i.className=y}}f=[]}return k}else{if(k=l?T(l):!B||B.test(i)?{className:C(i),b:true}:null){f.push(k);return"."+k.className}return d}})}return e+b.join(",")})}function T(a){var b=true,e=C(a.slice(1)),c=a.substring(0,5)==":not(",g,j;if(c)a=a.slice(5,-1);var f=a.indexOf("(");if(f>-1)a=a.substring(0,f);if(a.charAt(0)==":")switch(a.slice(1)){case "root":b=function(d){return c?d!=D:d==D};break;case "target":if(p==8){b=function(d){function k(){var l=location.hash,i=l.slice(1);return c?l==""||d.id!=i:l!=""&&d.id==i}x.attachEvent("onhashchange",function(){r(d,e,k())});return k()};break}return false;case "checked":b=function(d){U.test(d.type)&&d.attachEvent("onpropertychange",function(){event.propertyName=="checked"&&r(d,e,d.checked!==c)});return d.checked!==c};break;case "disabled":c=!c;case "enabled":b=function(d){if(V.test(d.tagName)){d.attachEvent("onpropertychange",function(){event.propertyName=="$disabled"&&r(d,e,d.a===c)});w.push(d);d.a=d.disabled;return d.disabled===c}return a==":enabled"?c:!c};break;case "focus":g="focus";j="blur";case "hover":if(!g){g="mouseenter";j="mouseleave"}b=function(d){d.attachEvent("on"+(c?j:g),function(){r(d,e,true)});d.attachEvent("on"+(c?g:j),function(){r(d,e,false)});return c};break;default:if(!W.test(a))return false;break}return{className:e,b:b}}function C(a){return E+"-"+(p==6&&X?Y++:a.replace(Z,function(b){return b.charCodeAt(0)}))}function N(a){return a.replace(F,o).replace($,t)}function r(a,b,e){var c=a.className;b=A(c,b,e);if(b!=c){a.className=b;a.parentNode.className+=n}}function A(a,b,e){var c=RegExp("(^|\\s)"+b+"(\\s|$)"),g=c.test(a);return e?g?a:a+t+b:g?a.replace(c,o).replace(F,o):a}function G(a,b){if(/^https?:\/\//i.test(a))return b.substring(0,b.indexOf("/",8))==a.substring(0,a.indexOf("/",8))?a:null;if(a.charAt(0)=="/")return b.substring(0,b.indexOf("/",8))+a;var e=b.split("?")[0];if(a.charAt(0)!="?"&&e.charAt(e.length-1)!="/")e=e.substring(0,e.lastIndexOf("/")+1);return e+a}function H(a){if(a){s.open("GET",a,false);s.send();return(s.status==200?s.responseText:n).replace(aa,n).replace(ba,function(b,e,c){return H(G(c,a))})}return n}function ca(){var a,b;a=m.getElementsByTagName("BASE");for(var e=a.length>0?a[0].href:m.location.href,c=0;c<m.styleSheets.length;c++){b=m.styleSheets[c];if(b.href!=n)if(a=G(b.href,e))b.cssText=K(H(a))}w.length>0&&setInterval(function(){for(var g=0,j=w.length;g<j;g++){var f=w[g];if(f.disabled!==f.a)if(f.disabled){f.disabled=false;f.a=true;f.disabled=true}else f.a=f.disabled}},250)}if(!/*@cc_on!@*/true){var m=document,D=m.documentElement,s=function(){if(x.XMLHttpRequest)return new XMLHttpRequest;try{return new ActiveXObject("Microsoft.XMLHTTP")}catch(a){return null}}(),p=/MSIE ([\d])/.exec(navigator.userAgent)[1];if(!(m.compatMode!="CSS1Compat"||p<6||p>8||!s)){var I={NW:"*.Dom.select",DOMAssistant:"*.$",Prototype:"$$",YAHOO:"*.util.Selector.query",MooTools:"$$",Sizzle:"*",jQuery:"*",dojo:"*.query"},v,w=[],Y=0,X=true,E="slvzr",J=E+"DOMReady",aa=/(\/\*[^*]*\*+([^\/][^*]*\*+)*\/)\s*/g,ba=/@import\s*url\(\s*(["'])?(.*?)\1\s*\)[\w\W]*?;/g,W=/^:(empty|(first|last|only|nth(-last)?)-(child|of-type))$/,L=/:(:first-(?:line|letter))/g,M=/(^|})\s*([^\{]*?[\[:][^{]+)/g,Q=/([ +~>])|(:[a-z-]+(?:\(.*?\)+)?)|(\[.*?\])/g,R=/(:not\()?:(hover|enabled|disabled|focus|checked|target|active|visited|first-line|first-letter)\)?/g,Z=/[^\w-]/g,V=/^(INPUT|SELECT|TEXTAREA|BUTTON)$/,U=/^(checkbox|radio)$/,B=p==8?/[\$\^]=(['"])\1/:p==7?/[\$\^*]=(['"])\1/:null,O=/([(\[+~])\s+/g,P=/\s+([)\]+~])/g,$=/\s+/g,F=/^\s*((?:[\S\s]*\S)?)\s*$/,n="",t=" ",o="$1";m.write("<script id="+J+" defer src='//:'><\/script>");m.getElementById(J).onreadystatechange=function(){if(this.readyState=="complete"){a:{var a;for(var b in I)if(x[b]&&(a=eval(I[b].replace("*",b)))){v=a;break a}v=false}if(v){ca();this.parentNode.removeChild(this)}}}}}})(this);
@@ -0,0 +1 @@
1
+ //= require "1.0"
@@ -0,0 +1,6 @@
1
+
2
+ MyApplication.addModule('Global');Array.method('is_empty',function(){return(this.length<1)?true:false;});Array.method('not_empty',function(){return(this.length>0)?true:false;});Array.method('each',function(callback){try{if(doesNotExist(callback)){throw new SyntaxError("Array.each(callback): callback is undefined");}
3
+ for(var i=0;i<this.length;i++){var args=[this[i],i];callback.apply(this,args);}}
4
+ catch(error){alert(error.message);}});Array.method('contains',function(suspect){var matches=[];this.each(function(value,index){if(value===suspect){matches.push(index);}});return matches.not_empty()?matches:false;});String.method('is_empty',function(){return(this=='')?true:false;});String.method('not_empty',function(){return(this=='')?false:true;});String.method('is_number',function(){var pattern=/^(\.|-)?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;return pattern.test(this);});String.method('trim',function(){return this.replace(/^\s+|\s+$/g,"");});String.method('ltrim',function(){return this.replace(/^\s+/,"");});String.method('rtrim',function(){return this.replace(/\s+$/,"");});String.method('each',function(callback){try{if(doesNotExist(callback)){throw new SyntaxError("String.each(callback): callback is undefined");}
5
+ for(var i=0;i<this.length;i++){var args=[this.charAt(i),i];callback.apply(this,args);}}
6
+ catch(error){alert(error.message);}});String.method('capitalize',function(){return this.substr(0,1).toUpperCase()+this.substr(1);});String.method('reverse',function(){return this.split('').reverse().join('');});String.method('to_n',function(){return parseFloat(this);});String.method('pluck',function(needle){var pattern=new RegExp(needle,'g');return this.replace(pattern,'');});String.method('single_space',function(){var no_hard_spaces=this.replace(/\&nbsp\;/g,' ');return no_hard_spaces.replace(/\s+/g,' ');});String.method('compress',function(){return this.replace(/\s+/g,'');});
@@ -0,0 +1,3 @@
1
+ MyApplication.addModule('Global');
2
+
3
+ //= require <judo/utilities/all>
@@ -0,0 +1,5 @@
1
+ project_path: /Volumes/Storage/Development/judojs/tests/js/
2
+ asset_root: /Volumes/Storage/Development/judojs/tests/js/
3
+ name: MyApplication
4
+ output: expanded
5
+ autoload: []
@@ -0,0 +1,90 @@
1
+ //-- Judo Tue Nov 02 20:43:51 -0500 2010 --//
2
+ if (exists === undefined) {
3
+ var exists = function(variable) {
4
+ return (variable === undefined) ? false : true;
5
+ };
6
+ }
7
+
8
+ if (!exists(doesNotExist)) {
9
+ var doesNotExist = function(variable) {
10
+ return (variable === undefined) ? true : false;
11
+ };
12
+ }
13
+
14
+ if (doesNotExist(isTypeof)) {
15
+ var isTypeof = function(type, variable) {
16
+ try {
17
+ if (doesNotExist(type)) {
18
+ throw new SyntaxError("isTypeof(Type, variable): type is undefined");
19
+ }
20
+ if (doesNotExist(variable)) {
21
+ throw new SyntaxError("isTypeof(Type, variable): variable is undefined");
22
+ }
23
+
24
+ return (variable.constructor == type) ? true : false;
25
+ }
26
+ catch(error) {
27
+ alert(error.message);
28
+ }
29
+ };
30
+ }
31
+
32
+ if (doesNotExist(isNumber)) {
33
+ var isNumber = function(suspect) {
34
+ if(isTypeof(Number, suspect)) {
35
+ return true;
36
+ }
37
+ else {
38
+ var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
39
+ return pattern.test(suspect);
40
+ }
41
+ };
42
+ }
43
+
44
+ if (doesNotExist(Function.prototype['method'])) {
45
+ Function.prototype.method = function(name, func) {
46
+ try {
47
+ if (doesNotExist(name)) {
48
+ throw new SyntaxError("Object.method(name, func): name is undefined");
49
+ }
50
+ if (doesNotExist(func)) {
51
+ throw new SyntaxError("Object.method(name, func): func is undefined");
52
+ }
53
+
54
+ if (doesNotExist(this.prototype[name])) {
55
+ this.prototype[name] = func;
56
+ return this;
57
+ }
58
+ }
59
+ catch(error) {
60
+ alert(error.message);
61
+ }
62
+ };
63
+ }
64
+
65
+ var JudoModule = function() {};
66
+ JudoModule.method('actions', function() {});
67
+ JudoModule.method('run', function() {
68
+ this.actions();
69
+ });
70
+
71
+ var JudoApplication = function() {};
72
+
73
+ JudoApplication.method('addModule', function(name) {
74
+ try {
75
+ if (doesNotExist(name)) {
76
+ throw new SyntaxError("JudoApplication.addModule(name): name is undefined");
77
+ }
78
+
79
+ if (exists(this[name])) {
80
+ throw new SyntaxError("JudoApplication.addModule(name): '" + name + "' already declared");
81
+ }
82
+
83
+ this[name] = new JudoModule();
84
+ }
85
+ catch(error) {
86
+ alert(error.message);
87
+ }
88
+ });
89
+
90
+ var MyApplication = new JudoApplication();
@@ -0,0 +1,4 @@
1
+ $(document).ready(function() {
2
+ MyApplication.TestModule.test_id = $('#test-element-with-id');
3
+ console.log(MyApplication.TestModule.test_id);
4
+ });
@@ -0,0 +1,2 @@
1
+
2
+ MyApplication.addModule('TestModule');$(document).ready(function(){MyApplication.TestModule.test_id=$('#test-element-with-id');console.log(MyApplication.TestModule.test_id);});MyApplication.test_model={some_data_member:'some data value'};MyApplication.TestModule.actions=function(){console.log(MyApplication.TestModule.test_id.html());};$(document).ready(function(){MyApplication.TestModule.run();});
@@ -0,0 +1,3 @@
1
+ MyApplication.test_model = {
2
+ some_data_member: 'some data value'
3
+ };
@@ -0,0 +1,12 @@
1
+ MyApplication.addModule('TestModule');
2
+
3
+ //= require "../elements/test.elements.js"
4
+ //= require "../models/test.model.js"
5
+
6
+ MyApplication.TestModule.actions = function() {
7
+ console.log(MyApplication.TestModule.test_id.html());
8
+ };
9
+
10
+ $(document).ready(function(){
11
+ MyApplication.TestModule.run();
12
+ });
@@ -0,0 +1,4 @@
1
+ project_path: /Volumes/Storage/Development/judo/tests/js/
2
+ name: MyApplication
3
+ output: compressed
4
+ autoload: ["<judo/utilities/all>"]
@@ -0,0 +1,27 @@
1
+
2
+ if(exists===undefined){var exists=function(variable){return(variable===undefined)?false:true;};}
3
+ if(!exists(doesNotExist)){var doesNotExist=function(variable){return(variable===undefined)?true:false;};}
4
+ if(doesNotExist(isTypeof)){var isTypeof=function(type,variable){try{if(doesNotExist(type)){throw new SyntaxError("isTypeof(Type, variable): type is undefined");}
5
+ if(doesNotExist(variable)){throw new SyntaxError("isTypeof(Type, variable): variable is undefined");}
6
+ return(variable.constructor==type)?true:false;}
7
+ catch(error){document.write(error.message);}};}
8
+ if(doesNotExist(isNumber)){var isNumber=function(suspect){if(isTypeof(Number,suspect)){return true;}
9
+ else{var pattern=/^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;return pattern.test(suspect);}};}
10
+ if(doesNotExist(die)){var die=function(last_words){if(doesNotExist(last_words)){lastwords=''}
11
+ document.write(lastwords)};}
12
+ if(doesNotExist(Object.prototype['method'])){Object.prototype.method=function(name,func){try{if(doesNotExist(name)){throw new SyntaxError("Object.method(name, func): name is undefined");}
13
+ if(doesNotExist(func)){throw new SyntaxError("Object.method(name, func): func is undefined");}
14
+ if(doesNotExist(this.prototype[name])){this.prototype[name]=func;return this;}}
15
+ catch(error){document.write(error.message);}};}
16
+ if(doesNotExist(Object.prototype['clone'])){Object.method('clone',function(){if(typeof this!=='object'||this===null){return this;}
17
+ if(this instanceof Node||this instanceof NodeList||this instanceof NamedNodeMap){die('You cannot clone a Node, Nodelist or NamedNodeMap');}
18
+ var clone=isTypeof(Array,this)?[]:{};for(var prop in this){if(this.hasOwnProperty(prop)){clone[prop]=this[prop];}}
19
+ return clone;});}
20
+ var JudoModule=function(){};JudoModule.method('actions',function(){});JudoModule.method('run',function(){this.actions();});var JudoApplication=function(){};JudoApplication.method('addModule',function(name){try{if(doesNotExist(name)){throw new SyntaxError("JudoApplication.addModule(name): name is undefined");}
21
+ if(exists(this[name])){throw new SyntaxError("JudoApplication.addModule(name): '"+name+"' already declared");}
22
+ this[name]=new JudoModule();}
23
+ catch(error){document.write(error.message);}});var Judo::Configuration=new JudoApplication();Array.method('is_empty',function(){return(this.length<1)?true:false;});Array.method('not_empty',function(){return(this.length>0)?true:false;});Array.method('each',function(callback){try{if(doesNotExist(callback)){throw new SyntaxError("Array.each(callback): callback is undefined");}
24
+ for(var i=0;i<this.length;i++){var args=[this[i],i];callback.apply(this,args);}}
25
+ catch(error){document.write(error.message);}});Array.method('contains',function(suspect){var matches=[];this.each(function(value,index){if(value===suspect){matches.push(index);}});return matches.not_empty()?matches:false;});Array.method('shuffle',function(){var clone=this.clone();for(var j,x,i=clone.length;i;j=parseInt(Math.random()*i),x=clone[--i],clone[i]=clone[j],clone[j]=x);return clone;});String.method('is_empty',function(){return(this=='')?true:false;});String.method('not_empty',function(){return(this=='')?false:true;});String.method('is_number',function(){var pattern=/^(\.|-)?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;return pattern.test(this);});String.method('trim',function(){return this.replace(/^\s+|\s+$/g,"");});String.method('ltrim',function(){return this.replace(/^\s+/,"");});String.method('rtrim',function(){return this.replace(/\s+$/,"");});String.method('each',function(callback){try{if(doesNotExist(callback)){throw new SyntaxError("String.each(callback): callback is undefined");}
26
+ for(var i=0;i<this.length;i++){var args=[this.charAt(i),i];callback.apply(this,args);}}
27
+ catch(error){document.write(error.message);}});String.method('capitalize',function(){return this.substr(0,1).toUpperCase()+this.substr(1);});String.method('reverse',function(){return this.split('').reverse().join('');});String.method('to_n',function(){return parseFloat(this);});String.method('pluck',function(needle){var pattern=new RegExp(needle,'g');return this.replace(pattern,'');});String.method('single_space',function(){var no_hard_spaces=this.replace(/\&nbsp\;/g,' ');return no_hard_spaces.replace(/\s+/g,' ');});String.method('compress',function(){return this.replace(/\s+/g,'');});String.method('shuffle',function(){return this.split('').shuffle().join('');})
@@ -0,0 +1,100 @@
1
+ Array.method('is_empty', function() {
2
+ return (this.length < 1) ? true : false;
3
+ });
4
+
5
+ Array.method('not_empty', function() {
6
+ return (this.length > 0) ? true : false;
7
+ });
8
+
9
+ Array.method('each', function(callback) {
10
+ try {
11
+ if(doesNotExist(callback)) {
12
+ throw new SyntaxError("Array.each(callback): callback is undefined");
13
+ }
14
+
15
+ for (var i = 0; i < this.length; i++) {
16
+ var args = [this[i], i];
17
+ callback.apply(this, args);
18
+ }
19
+ }
20
+ catch(error) {
21
+ alert(error.message);
22
+ }
23
+ });
24
+
25
+ Array.method('contains', function(suspect) {
26
+ var matches = [];
27
+ this.each(function(value, index) {
28
+ if(value === suspect) {
29
+ matches.push(index);
30
+ }
31
+ });
32
+
33
+ return matches.not_empty() ? matches : false;
34
+ });
35
+ String.method('is_empty', function() {
36
+ return (this == '') ? true : false;
37
+ });
38
+
39
+ String.method('not_empty', function() {
40
+ return (this == '') ? false : true;
41
+ });
42
+
43
+ String.method('is_number', function() {
44
+ var pattern = /^(\.|-)?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
45
+ return pattern.test(this);
46
+ });
47
+
48
+ String.method('trim', function() {
49
+ return this.replace(/^\s+|\s+$/g, "");
50
+ });
51
+
52
+ String.method('ltrim', function() {
53
+ return this.replace(/^\s+/,"");
54
+ });
55
+
56
+ String.method('rtrim', function() {
57
+ return this.replace(/\s+$/,"");
58
+ });
59
+
60
+ String.method('each', function(callback) {
61
+ try {
62
+ if(doesNotExist(callback)) {
63
+ throw new SyntaxError("String.each(callback): callback is undefined");
64
+ }
65
+
66
+ for (var i = 0; i < this.length; i++) {
67
+ var args = [this.charAt(i), i];
68
+ callback.apply(this, args);
69
+ }
70
+ }
71
+ catch(error) {
72
+ alert(error.message);
73
+ }
74
+ });
75
+
76
+ String.method('capitalize', function() {
77
+ return this.substr(0, 1).toUpperCase() + this.substr(1);
78
+ });
79
+
80
+ String.method('reverse', function() {
81
+ return this.split('').reverse().join('');
82
+ });
83
+
84
+ String.method('to_n', function() {
85
+ return parseFloat(this);
86
+ });
87
+
88
+ String.method('pluck', function(needle) {
89
+ var pattern = new RegExp(needle, 'g');
90
+ return this.replace(pattern, '');
91
+ });
92
+
93
+ String.method('single_space', function() {
94
+ var no_hard_spaces = this.replace(/\&nbsp\;/g, ' ');
95
+ return no_hard_spaces.replace(/\s+/g, ' ');
96
+ });
97
+
98
+ String.method('compress', function() {
99
+ return this.replace(/\s+/g, '');
100
+ });
data/tests/jpm_test.rb ADDED
@@ -0,0 +1,10 @@
1
+ require 'test/unit'
2
+ require '../lib/judojs.rb'
3
+
4
+ class PackageManagerTest < Test::Unit::TestCase
5
+
6
+ def test_can_import_package
7
+ Judojs::PackageManager.import('somefile')
8
+ end
9
+
10
+ end
@@ -0,0 +1,12 @@
1
+ require 'test/unit'
2
+ require '../lib/judojs.rb'
3
+
4
+ class TC_TestProject < Test::Unit::TestCase
5
+
6
+ def test_directories
7
+ assert_equal('/Volumes/Storage/Development/judojs/lib', Judojs.lib_directory, 'Judojs.lib_directory is set correctly')
8
+ assert_equal('/Volumes/Storage/Development/judojs', Judojs.base_directory, 'Judojs.base_directory is set correctly')
9
+ assert_equal('/Volumes/Storage/Development/judojs/tests', Judojs.root_directory,'Judojs.root_directory is set correctly')
10
+ end
11
+
12
+ end