ninjs 0.13.8 → 0.14.0

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 (37) hide show
  1. data/VERSION +1 -1
  2. data/bin/ninjs +2 -1
  3. data/lib/ninjs/command.rb +1 -1
  4. data/lib/ninjs/generator.rb +14 -10
  5. data/lib/ninjs/project.rb +7 -4
  6. data/ninjs.gemspec +20 -7
  7. data/repository/ninjs/core/application.js +24 -43
  8. data/repository/ninjs/core/dom.js +139 -0
  9. data/repository/ninjs/core/existence.js +121 -277
  10. data/repository/ninjs/core/extend.js +35 -77
  11. data/repository/ninjs/core/module.js +101 -116
  12. data/repository/ninjs/core/nin.js +7 -4
  13. data/repository/ninjs/tests/application.test.js +24 -0
  14. data/repository/ninjs/tests/array.utilities.test.js +55 -0
  15. data/repository/ninjs/tests/existence.test.js +64 -0
  16. data/repository/ninjs/tests/extension.test.js +38 -0
  17. data/repository/ninjs/tests/index.html +11 -5
  18. data/repository/ninjs/tests/module.test.js +75 -0
  19. data/repository/ninjs/tests/qspec.js +26 -0
  20. data/repository/ninjs/tests/{ninjs.utilities.test.js → string.utilities.test.js} +14 -66
  21. data/spec/cli_spec.rb +159 -0
  22. data/spec/command_spec.rb +226 -2
  23. data/spec/fixtures/compressed.myapp.js +40 -20
  24. data/spec/fixtures/myapp.initial.js +383 -488
  25. data/spec/fixtures/myapp.js +379 -484
  26. data/spec/fixtures/mymodule.alias.module.js +10 -0
  27. data/spec/fixtures/mymodule.dependencies.module.js +13 -0
  28. data/spec/fixtures/mymodule.elements.js +5 -0
  29. data/spec/fixtures/mymodule.model.js +3 -0
  30. data/spec/fixtures/mymodule.module.js +10 -0
  31. data/spec/fixtures/nin.js +428 -0
  32. data/spec/generator_spec.rb +58 -10
  33. data/spec/project_spec.rb +11 -7
  34. metadata +59 -9
  35. data/repository/ninjs/tests/ninjs.test.js +0 -188
  36. data/repository/ninjs/tests/qunit/qunit.css +0 -197
  37. data/repository/ninjs/tests/qunit/qunit.js +0 -1415
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.13.8
1
+ 0.14.0
data/bin/ninjs CHANGED
@@ -83,7 +83,7 @@ help = {
83
83
  command = ARGV[0]
84
84
 
85
85
  options = {
86
- :alias => false,
86
+ :alias => nil,
87
87
  :elements => false,
88
88
  :model => false,
89
89
  :help => false,
@@ -171,6 +171,7 @@ case command
171
171
  }
172
172
 
173
173
  Ninjs::Command.generate({
174
+ :project => Ninjs::Project.new,
174
175
  :type => type,
175
176
  :name => name,
176
177
  :alias => als,
data/lib/ninjs/command.rb CHANGED
@@ -3,7 +3,7 @@ module Ninjs
3
3
  def watch
4
4
  require "fssm"
5
5
 
6
- project_path = File.expand_path(Dir.getwd)
6
+ project_path = File.expand_path Dir.getwd
7
7
  raise "ninjs.conf was not located in #{project_path}" unless File.exists? "#{project_path}/ninjs.conf"
8
8
 
9
9
  puts Ninjs::Notification.log "Ninjs are watching for changes. Press Ctrl-C to stop."
@@ -5,7 +5,7 @@ module Ninjs
5
5
 
6
6
  def initialize(config)
7
7
  @type = config[:type]
8
- @project = Ninjs::Project.new
8
+ @project = config[:project]
9
9
  @name = config[:name]
10
10
  @module_name = config[:name].gsub(/^_/, '')
11
11
  @alias = config[:alias].nil? ? false : true
@@ -21,14 +21,18 @@ module Ninjs
21
21
  end
22
22
 
23
23
  def generate_module_file
24
+ module_content = Array.new
25
+ module_content << "(function(#{@app_name if @alias}) {\n"
26
+ module_content << "\tvar mod = #{@app_name}.add_module('#{@name}');\n\n"
27
+ module_content << %Q{\t//= require "../elements/#{@name.downcase}.elements"\n} if @dependencies[:elements] || @type === 'elements'
28
+ module_content << %Q{\t//= require "../models/#{@name.downcase}.model"\n\n} if @dependencies[:model] || @type === 'model'
29
+ module_content << "\t#{@app_name}.#{@module_name}.actions = function() {\n\t\t\n\t};\n\n"
30
+ module_content << "\t#{@app_name}.#{@module_name}.run();\n"
31
+ module_content << "\n})(#{@project.config.name if @alias});"
32
+
33
+
24
34
  File.open "#{@project.root}/#{@dest}/#{@name}.module.js", "w" do |file|
25
- file << "(function(#{@app_name if @alias}) {\n"
26
- file << "\tvar self = #{@app_name}.add_module('#{@name}');\n\n"
27
- file << %Q(\t//= require "../elements/#{@name.downcase}.elements"\n\n) if @dependencies[:elements] || @type === 'elements'
28
- file << %Q(\t//= require "../models/#{@name.downcase}.model"\n\n) if @dependencies[:model] || @type === 'model'
29
- file << "\t#{@app_name}.#{@module_name}.actions = function() {\n\n\t};\n\n"
30
- file << "\t#{@app_name}.#{@module_name}.run();\n"
31
- file << "})(#{@project.config.name});" if @alias
35
+ file << module_content.join('')
32
36
  puts Ninjs::Notification.added "created #{@name.downcase}.module.js"
33
37
  end unless File.exists? "#{@project.root}/#{@dest}/#{@name}.module.js"
34
38
 
@@ -37,7 +41,7 @@ module Ninjs
37
41
 
38
42
  def generate_elements_file
39
43
  File.open("#{@project.root}/elements/#{@module_name}" + ".elements.js", "w") do |file|
40
- file << "#{@app_name}.#{@module_name}.elements({\n\n});"
44
+ file << %Q{\tmod.dom.ready(function() {\n\t\t#{@app_name}.#{@module_name}.elements({\n\t\t\t\n\t\t});\n\t});\n}
41
45
  puts Ninjs::Notification.added "created #{@module_name}.elements.js"
42
46
  end unless File.exists? "#{@project.root}/elements/#{@module_name}.elements.js"
43
47
 
@@ -46,7 +50,7 @@ module Ninjs
46
50
 
47
51
  def generate_model_file
48
52
  File.open "#{@project.root}/models/#{@module_name}.model.js", "w" do |file|
49
- file << "#{@app_name}.#{@module_name}.set_data({\n\t\n});"
53
+ file << %Q{\t#{@app_name}.#{@module_name}.set_data({\n\t\t\n\t});\n}
50
54
  puts Ninjs::Notification.added "created #{@module_name}.model.js"
51
55
  end unless File.exists? "#{@project.root}/models/#{@module_name}.model.js"
52
56
 
data/lib/ninjs/project.rb CHANGED
@@ -75,10 +75,13 @@ module Ninjs
75
75
 
76
76
  def import_test_files
77
77
  FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/index.html", "#{@root}/tests"
78
- FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/ninjs.test.js", "#{@root}/tests"
79
- FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/ninjs.utilities.test.js", "#{@root}/tests"
80
- FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/qunit/qunit.js", "#{@root}/tests/qunit"
81
- FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/qunit/qunit.css", "#{@root}/tests/qunit"
78
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/application.test.js", "#{@root}/tests"
79
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/array.utilities.test.js", "#{@root}/tests"
80
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/existence.test.js", "#{@root}/tests"
81
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/extension.test.js", "#{@root}/tests"
82
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/module.test.js", "#{@root}/tests"
83
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/qspec.js", "#{@root}/tests"
84
+ FileUtils.cp "#{Ninjs::BASE_DIR}/repository/ninjs/tests/string.utilities.test.js", "#{@root}/tests"
82
85
  end
83
86
 
84
87
  def update
data/ninjs.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{ninjs}
8
- s.version = "0.13.8"
8
+ s.version = "0.14.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Dayton Nolan"]
12
- s.date = %q{2011-06-02}
12
+ s.date = %q{2011-06-05}
13
13
  s.default_executable = %q{ninjs}
14
14
  s.description = %q{Ninjs is a ruby application and small javascript framework that helps you build clean, modular javascript applications. Ninjs encourages "Good Parts" best practices and the Crockford school Module pattern (http://www.crockford.com/). The ninjs command line application is an automatic compiler, written in ruby, and based on the Sprockets library (http://getsprockets.org/).}
15
15
  s.email = %q{daytonn@gmail.com}
@@ -122,6 +122,7 @@ Gem::Specification.new do |s|
122
122
  "repository/ninjs/core/.extend.pdoc.yaml",
123
123
  "repository/ninjs/core/.nin.pdoc.yaml",
124
124
  "repository/ninjs/core/application.js",
125
+ "repository/ninjs/core/dom.js",
125
126
  "repository/ninjs/core/existence.js",
126
127
  "repository/ninjs/core/extend.js",
127
128
  "repository/ninjs/core/module.js",
@@ -187,11 +188,14 @@ Gem::Specification.new do |s|
187
188
  "repository/ninjs/docs/search/VariablesT.html",
188
189
  "repository/ninjs/docs/styles/main.css",
189
190
  "repository/ninjs/extensions/jquery.elements.js",
191
+ "repository/ninjs/tests/application.test.js",
192
+ "repository/ninjs/tests/array.utilities.test.js",
193
+ "repository/ninjs/tests/existence.test.js",
194
+ "repository/ninjs/tests/extension.test.js",
190
195
  "repository/ninjs/tests/index.html",
191
- "repository/ninjs/tests/ninjs.test.js",
192
- "repository/ninjs/tests/ninjs.utilities.test.js",
193
- "repository/ninjs/tests/qunit/qunit.css",
194
- "repository/ninjs/tests/qunit/qunit.js",
196
+ "repository/ninjs/tests/module.test.js",
197
+ "repository/ninjs/tests/qspec.js",
198
+ "repository/ninjs/tests/string.utilities.test.js",
195
199
  "repository/ninjs/utilities/all.js",
196
200
  "repository/ninjs/utilities/array.js",
197
201
  "repository/ninjs/utilities/cookie.js",
@@ -267,6 +271,7 @@ Gem::Specification.new do |s|
267
271
  "repository/syntaxhighlighter/shBrushXml.js",
268
272
  "repository/syntaxhighlighter/shCore.js",
269
273
  "repository/syntaxhighlighter/shLegacy.js",
274
+ "spec/cli_spec.rb",
270
275
  "spec/command_spec.rb",
271
276
  "spec/configuration_spec.rb",
272
277
  "spec/dependencies_spec.rb",
@@ -285,7 +290,13 @@ Gem::Specification.new do |s|
285
290
  "spec/fixtures/hello.module.js",
286
291
  "spec/fixtures/myapp.initial.js",
287
292
  "spec/fixtures/myapp.js",
293
+ "spec/fixtures/mymodule.alias.module.js",
294
+ "spec/fixtures/mymodule.dependencies.module.js",
295
+ "spec/fixtures/mymodule.elements.js",
296
+ "spec/fixtures/mymodule.model.js",
297
+ "spec/fixtures/mymodule.module.js",
288
298
  "spec/fixtures/new.ninjs.conf",
299
+ "spec/fixtures/nin.js",
289
300
  "spec/fixtures/ninjs.conf",
290
301
  "spec/generator_spec.rb",
291
302
  "spec/helpers_spec.rb",
@@ -299,9 +310,10 @@ Gem::Specification.new do |s|
299
310
  s.licenses = ["MIT"]
300
311
  s.require_paths = ["lib"]
301
312
  s.rubyforge_project = %q{nowarning}
302
- s.rubygems_version = %q{1.5.2}
313
+ s.rubygems_version = %q{1.3.7}
303
314
  s.summary = %q{ninjs is a command line application to help you write clean, modular javascript applications.}
304
315
  s.test_files = [
316
+ "spec/cli_spec.rb",
305
317
  "spec/command_spec.rb",
306
318
  "spec/configuration_spec.rb",
307
319
  "spec/dependencies_spec.rb",
@@ -315,6 +327,7 @@ Gem::Specification.new do |s|
315
327
  ]
316
328
 
317
329
  if s.respond_to? :specification_version then
330
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
318
331
  s.specification_version = 3
319
332
 
320
333
  if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
@@ -1,47 +1,28 @@
1
- /*
2
- File: application.js
3
-
4
- Class: NinjsApplication
5
- An NinjsApplication object serves as your application's namespace and includes a utility to add modules to the application object.
1
+ window.NinjsApplication = function(base_url, tests_path) {
2
+ if(is_defined(tests_path)) {
3
+ this.tests_path = tests_path;
4
+ }
6
5
 
7
- See Also:
8
- <NinjsModule>
9
- */
6
+ if(is_defined(base_url)) {
7
+ this.site_url = function(path) {
8
+ var path = path || '';
9
+ return base_url + path;
10
+ };
11
+ }
12
+ };
10
13
 
11
- var NinjsApplication = function(base_url, tests_path) {
12
- if(is_defined(tests_path)) {
13
- this.tests_path = tests_path;
14
- }
15
-
16
- if(is_defined(base_url)) {
17
- this.site_url = function(path) {
18
- var path = path || '';
19
- return base_url + path;
20
- };
21
- }
22
- };
14
+ NinjsApplication.method('add_module', function(name) {
15
+ if (is_undefined(name)) {
16
+ throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
17
+ }
23
18
 
24
- /*
25
- Method: add_module
26
- Adds a NinjsModule to the application.
27
-
28
- Parameters:
29
- name - the name of the module
30
-
31
- > myapp.add_module('my_module');
32
- */
33
- NinjsApplication.method('add_module', function(name) {
34
- if (is_undefined(name)) {
35
- throw new SyntaxError("NinjsApplication.add_module(name): name is undefined");
36
- }
19
+ if (is_defined(this[name])) {
20
+ throw new SyntaxError("NinjsApplication.add_module(name): '" + name + "' already declared");
21
+ }
37
22
 
38
- if (is_defined(this[name])) {
39
- throw new SyntaxError("NinjsApplication.add_module(name): '" + name + "' already declared");
40
- }
41
-
42
- if (this.name === name) {
43
- throw new SyntaxError("NinjsApplication.add_module(name): a module cannot have the same name as the application");
44
- }
45
-
46
- return this[name] = new NinjsModule(name);
47
- });
23
+ if (this.name === name) {
24
+ throw new SyntaxError("NinjsApplication.add_module(name): a module cannot have the same name as the application");
25
+ }
26
+
27
+ return this[name] = new NinjsModule(name);
28
+ });
@@ -0,0 +1,139 @@
1
+ var userAgent = navigator.userAgent;
2
+ var browser = {
3
+ agent: userAgent,
4
+ mozilla: (/mozilla/.test(userAgent.toLowerCase())) && (!/(compatible|webkit)/.test(userAgent.toLowerCase())),
5
+ webkit: /webkit/.test(userAgent.toLowerCase()),
6
+ firefox: /firefox/.test(userAgent.toLowerCase()),
7
+ chrome: /webkit/.test(userAgent.toLowerCase()),
8
+ safari: /safari/.test(userAgent.toLowerCase()),
9
+ opera: /opera/.test(userAgent.toLowerCase()),
10
+ msie: (/msie/.test(userAgent.toLowerCase())) && (!/opera/.test( userAgent.toLowerCase() ))
11
+ };
12
+
13
+ var readyBound = false;
14
+ var isReady = false;
15
+ var readyList = [];
16
+
17
+ function domReady() {
18
+ if (!isReady) {
19
+ isReady = true;
20
+ if (readyList) {
21
+ for(var fn = 0; fn < readyList.length; fn++) {
22
+ readyList[fn].call(window, []);
23
+ }
24
+ readyList = [];
25
+ }
26
+ }
27
+ }
28
+
29
+ // From Simon Willison. A safe way to fire onload w/o screwing up everyone else.
30
+ function addLoadEvent(func) {
31
+ var oldonload = window.onload;
32
+ if (typeof window.onload != 'function') {
33
+ window.onload = func;
34
+ } else {
35
+ window.onload = function() {
36
+ if (oldonload) {
37
+ oldonload();
38
+ }
39
+ func();
40
+ }
41
+ }
42
+ };
43
+
44
+ // does the heavy work of working through the browsers idiosyncracies (let's call them that) to hook onload.
45
+ function bindReady() {
46
+ if (readyBound) {
47
+ return;
48
+ }
49
+
50
+ readyBound = true;
51
+
52
+ // Mozilla, Opera (see further below for it) and webkit nightlies currently support this event
53
+ if (document.addEventListener && !browser.opera) {
54
+ // Use the handy event callback
55
+ document.addEventListener("DOMContentLoaded", domReady, false);
56
+ }
57
+
58
+ // If IE is used and is not in a frame
59
+ // Continually check to see if the document is ready
60
+ if (browser.msie && window == top) (function(){
61
+ if (isReady) return;
62
+ try {
63
+ // If IE is used, use the trick by Diego Perini
64
+ // http://javascript.nwbox.com/IEContentLoaded/
65
+ document.documentElement.doScroll("left");
66
+ } catch(error) {
67
+ setTimeout(arguments.callee, 0);
68
+ return;
69
+ }
70
+ // and execute any waiting functions
71
+ domReady();
72
+ })();
73
+
74
+ if (browser.opera) {
75
+ document.addEventListener( "DOMContentLoaded", function () {
76
+ if (isReady) return;
77
+ for (var i = 0; i < document.styleSheets.length; i++)
78
+ if (document.styleSheets[i].disabled) {
79
+ setTimeout( arguments.callee, 0 );
80
+ return;
81
+ }
82
+ // and execute any waiting functions
83
+ domReady();
84
+ }, false);
85
+ }
86
+
87
+ if (browser.safari) {
88
+ var numStyles;
89
+ (function(){
90
+ if (isReady) return;
91
+ if (document.readyState != "loaded" && document.readyState != "complete") {
92
+ setTimeout( arguments.callee, 0 );
93
+ return;
94
+ }
95
+ if (numStyles === undefined) {
96
+ var links = document.getElementsByTagName("link");
97
+ for (var i=0; i < links.length; i++) {
98
+ if (links[i].getAttribute('rel') == 'stylesheet') {
99
+ numStyles++;
100
+ }
101
+ }
102
+ var styles = document.getElementsByTagName("style");
103
+ numStyles += styles.length;
104
+ }
105
+ if (document.styleSheets.length != numStyles) {
106
+ setTimeout( arguments.callee, 0 );
107
+ return;
108
+ }
109
+
110
+ // and execute any waiting functions
111
+ domReady();
112
+ })();
113
+ }
114
+
115
+ // A fallback to window.onload, that will always work
116
+ addLoadEvent(domReady);
117
+ };
118
+
119
+ window.NinjsDOM = function() {
120
+ this.cached_selectors = {};
121
+ };
122
+
123
+ // This is the public function that people can use to hook up ready.
124
+ NinjsDOM.method('ready', function(fn, args) {
125
+ // Attach the listeners
126
+ bindReady();
127
+
128
+ // If the DOM is already ready
129
+ if (isReady) {
130
+ // Execute the function immediately
131
+ fn.call(window, []);
132
+ }
133
+ else {
134
+ // Add the function to the wait list
135
+ readyList.push( function() { return fn.call(window, []); } );
136
+ }
137
+ });
138
+
139
+ bindReady();
@@ -1,277 +1,121 @@
1
- /* File: existence.js */
2
- if (is_defined === undefined) {
3
- /*
4
- Function: is_defined
5
- Checks if a variable is undefined. This is a convenience method to enhance clarity in your conditions.
6
-
7
- Parameters:
8
- suspect - suspect variable to test
9
-
10
- Returns:
11
- bool
12
-
13
- See Also:
14
-
15
- <is_undefined>
16
- */
17
- var is_defined = function(suspect) {
18
- return ((suspect === undefined) || (suspect === null)) ? false : true;
19
- };
20
- }
21
-
22
- if (!is_defined(is_undefined)) {
23
- /*
24
- Function: is_undefined
25
- Checks if a variable is defined. This is a convenience method to enhance clarity in your conditions.
26
-
27
- Parameters:
28
- suspect - suspect variable to test
29
-
30
- Returns:
31
- bool
32
-
33
- See Also:
34
-
35
- <is_defined>
36
- */
37
- var is_undefined = function(suspect) {
38
- return (suspect === undefined) ? true : false;
39
- };
40
- }
41
-
42
- if (is_undefined(is_typeof)) {
43
- /*
44
- Function: is_typeof
45
- Strict type checking by comparing constructors.
46
- (Pro Javascript Techniques, John Resig, Apress p.24 Listing 2-8: Example of using the constructor property to determine the type of an object http://amzn.to/fTsDRg)
47
- Parameters:
48
- type - The type you expect (ie. String, Number, Array (note: without quotes): is_typeof(String, 'hello'): // true)
49
- suspect - The suspect variable to check against type
50
-
51
- Returns:
52
- bool
53
-
54
- See Also:
55
- <is_numeric>,
56
- <is_string>,
57
- <is_array>,
58
- <is_number>,
59
- <is_date>,
60
- <is_bool>,
61
- <is_regex>
62
- */
63
- var is_typeof = function(type, suspect) {
64
- if (is_undefined(type)) {
65
- throw new SyntaxError("is_typeof(Type, suspect): type is undefined");
66
- }
67
- if (is_undefined(suspect)) {
68
- throw new SyntaxError("is_typeof(Type, suspect): suspect is undefined");
69
- }
70
-
71
- return (suspect.constructor == type) ? true : false;
72
- };
73
- }
74
-
75
- if (is_undefined(is_numeric)) {
76
- /*
77
- Function: is_numeric
78
- Determine if the suspect string represents a numeric value.
79
- (JavaScript: The Good Parts, Douglas Crockford, O'Reilly p.69 Chapter 7: Regular Expressions An Example)
80
- Parameters:
81
- suspect - variable to check for numeric value
82
-
83
- Returns:
84
- bool
85
-
86
- See Also:
87
- <is_number>
88
- */
89
- var is_numeric = function(suspect) {
90
- if(is_typeof(Number, suspect)) {
91
- return true;
92
- }
93
- else {
94
- var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
95
- return pattern.test(suspect);
96
- }
97
- };
98
- }
99
-
100
- if (is_undefined(is_string)) {
101
- /*
102
- Function: is_string
103
- Determine the suspect is a String. This is a proxy method for is_typeof(String, suspect).
104
-
105
- Parameters:
106
- suspect - supect variable to test
107
-
108
- Returns:
109
- bool
110
-
111
- See Also:
112
- <is_typeof>,
113
- <is_numeric>,
114
- <is_array>,
115
- <is_number>,
116
- <is_date>,
117
- <is_bool>,
118
- <is_regex>
119
- */
120
- var is_string = function(suspect) {
121
- return is_typeof(String, suspect);
122
- };
123
- }
124
-
125
- if (is_undefined(is_array)) {
126
- /*
127
- Function: is_array
128
- Determine if the suspect is an Array. This is a proxy method for is_typeof(Array, suspect).
129
-
130
- Parameters:
131
- suspect - suspect variable to test
132
-
133
- Returns:
134
- bool
135
-
136
- See Also:
137
- <is_typeof>,
138
- <is_numeric>,
139
- <is_string>,
140
- <is_number>,
141
- <is_date>,
142
- <is_bool>,
143
- <is_regex>
144
- */
145
- var is_array = function(suspect) {
146
- return is_typeof(Array, suspect);
147
- };
148
- }
149
-
150
- if (is_undefined(is_number)) {
151
- /*
152
- Function: is_number
153
- Determines if the suspect is a Number. This is a proxy method for is_typeof(Number, suspect).
154
-
155
- Parameters:
156
- suspect - suspect variable to test
157
-
158
- Returns:
159
- bool
160
-
161
- See Also:
162
- <is_typeof>,
163
- <is_numeric>,
164
- <is_string>,
165
- <is_array>,
166
- <is_date>,
167
- <is_bool>,
168
- <is_regex>
169
- */
170
- var is_number = function(suspect) {
171
- return is_typeof(Number, suspect);
172
- };
173
- }
174
-
175
- if (is_undefined(is_date)) {
176
- /*
177
- Function: is_date
178
- Determines if the suspect is a Date. This is a proxy method for is_typeof(Date, suspect).
179
-
180
- Parameters:
181
- suspect - suspect variable to test
182
-
183
- Returns:
184
- bool
185
-
186
- See Also:
187
- <is_typeof>,
188
- <is_numeric>,
189
- <is_string>,
190
- <is_array>,
191
- <is_number>,
192
- <is_bool>,
193
- <is_regex>
194
- */
195
- var is_date = function(suspect) {
196
- return is_typeof(Date, suspect);
197
- };
198
- }
199
-
200
- if (is_undefined(is_bool)) {
201
- /*
202
- Function: is_bool
203
- Determines if the suspect is a Boolean. This is a proxy method for is_typeof(Boolean, suspect).
204
-
205
- Parameters:
206
- suspect - suspect variable to test
207
-
208
- Returns:
209
- bool
210
-
211
- See Also:
212
- <is_typeof>,
213
- <is_numeric>,
214
- <is_string>,
215
- <is_array>,
216
- <is_number>,
217
- <is_regex>
218
- */
219
- var is_bool = function(suspect) {
220
- return is_typeof(Boolean, suspect);
221
- };
222
- }
223
-
224
- if (is_undefined(is_regex)) {
225
- /*
226
- Function: is_regex
227
- Determines if the suspect is a RegExp. This is a proxy method for is_typeof(RegExp, suspect).
228
-
229
- Parameters:
230
- suspect - suspect variable to test
231
-
232
- Returns:
233
- bool
234
-
235
- See Also:
236
- <is_typeof>,
237
- <is_numeric>,
238
- <is_string>,
239
- <is_array>,
240
- <is_number>,
241
- <is_bool>
242
- */
243
- var is_regex = function(suspect) {
244
- return is_typeof(RegExp, suspect);
245
- };
246
- }
247
-
248
-
249
- if (is_undefined(is_empty)) {
250
- /*
251
- Function: is_empty
252
- Determined if the suspect's length is less than one.
253
-
254
- Parameters:
255
- suspect - suspect variable to test
256
-
257
- Returns: bool
258
- */
259
- var is_empty = function(suspect) {
260
- return suspect.length === 0;
261
- };
262
- }
263
-
264
- if (is_undefined(is_not_empty)) {
265
- /*
266
- Function: is_not_empty
267
- Determined if the suspect's length is greater than one.
268
-
269
- Parameters:
270
- suspect - suspect variable to test
271
-
272
- Returns: bool
273
- */
274
- var is_not_empty = function(suspect) {
275
- return suspect.length >= 1;
276
- };
277
- }
1
+ if (window.is_defined === undefined) {
2
+ window.is_defined = function(suspect) {
3
+ return ((suspect === undefined) || (suspect === null)) ? false : true;
4
+ };
5
+ }
6
+
7
+ if (!is_defined(window.is_undefined)) {
8
+ window.is_undefined = function(suspect) {
9
+ return (suspect === undefined) ? true : false;
10
+ };
11
+ }
12
+
13
+ if (is_undefined(window.is_typeof)) {
14
+ window.is_typeof = function(type, suspect) {
15
+ if (is_undefined(type)) {
16
+ throw new SyntaxError("is_typeof(Type, suspect): type is undefined");
17
+ }
18
+ if (is_undefined(suspect)) {
19
+ throw new SyntaxError("is_typeof(Type, suspect): suspect is undefined");
20
+ }
21
+
22
+ return (suspect.constructor == type) ? true : false;
23
+ };
24
+ }
25
+
26
+ if (is_undefined(window.is_numeric)) {
27
+ window.is_numeric = function(suspect) {
28
+ if(is_typeof(Number, suspect)) {
29
+ return true;
30
+ }
31
+ else {
32
+ var pattern = /^-?\d+(?:\.\d*)?(?:e[+\-]?\d+)?$/i;
33
+ return pattern.test(suspect);
34
+ }
35
+ };
36
+ }
37
+
38
+ if (is_undefined(window.is_string)) {
39
+ window.is_string = function(suspect) {
40
+ return is_typeof(String, suspect);
41
+ };
42
+ }
43
+
44
+ if (is_undefined(window.is_array)) {
45
+ window.is_array = function(suspect) {
46
+ return is_typeof(Array, suspect);
47
+ };
48
+ }
49
+
50
+ if (is_undefined(window.is_number)) {
51
+ window.is_number = function(suspect) {
52
+ return is_typeof(Number, suspect);
53
+ };
54
+ }
55
+
56
+ if (is_undefined(window.is_date)) {
57
+ window.is_date = function(suspect) {
58
+ return is_typeof(Date, suspect);
59
+ };
60
+ }
61
+
62
+ if (is_undefined(window.is_bool)) {
63
+ window.is_bool = function(suspect) {
64
+ return is_typeof(Boolean, suspect);
65
+ };
66
+ }
67
+
68
+ if (is_undefined(window.is_regex)) {
69
+ window.is_regex = function(suspect) {
70
+ return is_typeof(RegExp, suspect);
71
+ };
72
+ }
73
+
74
+
75
+ if (is_undefined(window.is_empty)) {
76
+ window.is_empty = function(suspect) {
77
+ return suspect.length === 0;
78
+ };
79
+ }
80
+
81
+ if (is_undefined(window.is_not_empty)) {
82
+ window.is_not_empty = function(suspect) {
83
+ return suspect.length >= 1;
84
+ };
85
+ }
86
+
87
+ if (is_undefined(Function.prototype['method'])) {
88
+ Function.prototype.method = function(name, func) {
89
+ if (is_undefined(name)) {
90
+ throw new SyntaxError("Object.method(name, func): name is undefined");
91
+ }
92
+
93
+ if (is_undefined(func)) {
94
+ throw new SyntaxError("Object.method(name, func): func is undefined");
95
+ }
96
+
97
+ if (is_undefined(this.prototype[name])) {
98
+ this.prototype[name] = func;
99
+ return this;
100
+ }
101
+ };
102
+ }
103
+
104
+ if (is_undefined(window.unless)) {
105
+ window.unless = function(expression, callback, fallback) {
106
+ if (is_undefined(expression)) {
107
+ throw new SyntaxError("unless(expression, callback[, fallback]): expression is undefined");
108
+ }
109
+
110
+ if (is_undefined(callback)) {
111
+ throw new SyntaxError("unless(expression, callback[, fallback]): callback is undefined");
112
+ }
113
+
114
+ if (!expression) {
115
+ callback.call(this);
116
+ }
117
+ else if (is_defined(fallback)) {
118
+ fallback.call(this);
119
+ }
120
+ };
121
+ }