ninjs 0.13.8 → 0.14.0

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