neerajdotname-javascript_lab 0.0.10 → 0.0.11

Sign up to get free protection for your applications and to get access to all the features.
data/History.txt CHANGED
@@ -1,3 +1,6 @@
1
+ === 0.0.10 2009-06-18
2
+
3
+ * added the feature to validate JSON data structure
1
4
 
2
5
  === 0.0.10 2009-06-17
3
6
 
data/README.markdown CHANGED
@@ -2,6 +2,7 @@
2
2
 
3
3
  This is a gem to quickly try out javascript code without worrying about including the right javascript library.
4
4
  Also one can get to the source code of the javascript library.
5
+ Added the ability to validate JSON data structure.
5
6
 
6
7
  == How to use it
7
8
 
@@ -14,5 +14,9 @@ module JavascriptLab
14
14
  erb :index
15
15
  end
16
16
 
17
+ get '/validate_json' do
18
+ erb :validate_json
19
+ end
20
+
17
21
  end
18
22
  end
@@ -8,5 +8,5 @@ require 'javascript_lab/view_helpers'
8
8
  require 'javascript_lab/app'
9
9
 
10
10
  module JavascriptLab
11
- VERSION = '0.0.10'
11
+ VERSION = '0.0.11'
12
12
  end
@@ -31,3 +31,16 @@ var processForm = function(){
31
31
 
32
32
  return false;
33
33
  };
34
+
35
+ var verifyJsonForm = function(){
36
+ clear_log();
37
+ try {
38
+ var json_input = document.lab.json_input.value.javascript_lab_trim();
39
+ var json_encoded = $.evalJSON(json_input);
40
+ error_log('Valid JSON');
41
+ }catch(e){
42
+ var error_text = 'Error: ' + e.name + ' ' + e.message;
43
+ error_log(error_text);
44
+ }
45
+ return false;
46
+ };
@@ -0,0 +1,156 @@
1
+ /*
2
+ * jQuery JSON Plugin
3
+ * version: 1.0 (2008-04-17)
4
+ *
5
+ * This document is licensed as free software under the terms of the
6
+ * MIT License: http://www.opensource.org/licenses/mit-license.php
7
+ *
8
+ * Brantley Harris technically wrote this plugin, but it is based somewhat
9
+ * on the JSON.org website's http://www.json.org/json2.js, which proclaims:
10
+ * "NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.", a sentiment that
11
+ * I uphold. I really just cleaned it up.
12
+ *
13
+ * It is also based heavily on MochiKit's serializeJSON, which is
14
+ * copywrited 2005 by Bob Ippolito.
15
+ */
16
+
17
+ (function($) {
18
+ function toIntegersAtLease(n)
19
+ // Format integers to have at least two digits.
20
+ {
21
+ return n < 10 ? '0' + n : n;
22
+ }
23
+
24
+ Date.prototype.toJSON = function(date)
25
+ // Yes, it polutes the Date namespace, but we'll allow it here, as
26
+ // it's damned usefull.
27
+ {
28
+ return this.getUTCFullYear() + '-' +
29
+ toIntegersAtLease(this.getUTCMonth()) + '-' +
30
+ toIntegersAtLease(this.getUTCDate());
31
+ };
32
+
33
+ var escapeable = /["\\\x00-\x1f\x7f-\x9f]/g;
34
+ var meta = { // table of character substitutions
35
+ '\b': '\\b',
36
+ '\t': '\\t',
37
+ '\n': '\\n',
38
+ '\f': '\\f',
39
+ '\r': '\\r',
40
+ '"' : '\\"',
41
+ '\\': '\\\\'
42
+ };
43
+
44
+ $.quoteString = function(string)
45
+ // Places quotes around a string, inteligently.
46
+ // If the string contains no control characters, no quote characters, and no
47
+ // backslash characters, then we can safely slap some quotes around it.
48
+ // Otherwise we must also replace the offending characters with safe escape
49
+ // sequences.
50
+ {
51
+ if (escapeable.test(string))
52
+ {
53
+ return '"' + string.replace(escapeable, function (a)
54
+ {
55
+ var c = meta[a];
56
+ if (typeof c === 'string') {
57
+ return c;
58
+ }
59
+ c = a.charCodeAt();
60
+ return '\\u00' + Math.floor(c / 16).toString(16) + (c % 16).toString(16);
61
+ }) + '"';
62
+ }
63
+ return '"' + string + '"';
64
+ };
65
+
66
+ $.toJSON = function(o, compact)
67
+ {
68
+ var type = typeof(o);
69
+
70
+ if (type == "undefined")
71
+ return "undefined";
72
+ else if (type == "number" || type == "boolean")
73
+ return o + "";
74
+ else if (o === null)
75
+ return "null";
76
+
77
+ // Is it a string?
78
+ if (type == "string")
79
+ {
80
+ return $.quoteString(o);
81
+ }
82
+
83
+ // Does it have a .toJSON function?
84
+ if (type == "object" && typeof o.toJSON == "function")
85
+ return o.toJSON(compact);
86
+
87
+ // Is it an array?
88
+ if (type != "function" && typeof(o.length) == "number")
89
+ {
90
+ var ret = [];
91
+ for (var i = 0; i < o.length; i++) {
92
+ ret.push( $.toJSON(o[i], compact) );
93
+ }
94
+ if (compact)
95
+ return "[" + ret.join(",") + "]";
96
+ else
97
+ return "[" + ret.join(", ") + "]";
98
+ }
99
+
100
+ // If it's a function, we have to warn somebody!
101
+ if (type == "function") {
102
+ throw new TypeError("Unable to convert object of type 'function' to json.");
103
+ }
104
+
105
+ // It's probably an object, then.
106
+ var ret = [];
107
+ for (var k in o) {
108
+ var name;
109
+ type = typeof(k);
110
+
111
+ if (type == "number")
112
+ name = '"' + k + '"';
113
+ else if (type == "string")
114
+ name = $.quoteString(k);
115
+ else
116
+ continue; //skip non-string or number keys
117
+
118
+ var val = $.toJSON(o[k], compact);
119
+ if (typeof(val) != "string") {
120
+ // skip non-serializable values
121
+ continue;
122
+ }
123
+
124
+ if (compact)
125
+ ret.push(name + ":" + val);
126
+ else
127
+ ret.push(name + ": " + val);
128
+ }
129
+ return "{" + ret.join(", ") + "}";
130
+ };
131
+
132
+ $.compactJSON = function(o)
133
+ {
134
+ return $.toJSON(o, true);
135
+ };
136
+
137
+ $.evalJSON = function(src)
138
+ // Evals JSON that we know to be safe.
139
+ {
140
+ return eval("(" + src + ")");
141
+ };
142
+
143
+ $.secureEvalJSON = function(src)
144
+ // Evals JSON in a way that is *more* secure.
145
+ {
146
+ var filtered = src;
147
+ filtered = filtered.replace(/\\["\\\/bfnrtu]/g, '@');
148
+ filtered = filtered.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']');
149
+ filtered = filtered.replace(/(?:^|:|,)(?:\s*\[)+/g, '');
150
+
151
+ if (/^[\],:{}\s]*$/.test(filtered))
152
+ return eval("(" + src + ")");
153
+ else
154
+ throw new SyntaxError("Error parsing JSON, source is not valid.");
155
+ };
156
+ })(jQuery);
data/views/layout.erb CHANGED
@@ -3,10 +3,18 @@
3
3
  <meta content='text/html; charset=utf-8' http-equiv='Content-Type' />
4
4
  <title>javascript_lab - a javascript editor and tester tool</title>
5
5
  <link href='/stylesheets/style.css' media='screen' rel='stylesheet' type='text/css' />
6
+
7
+ <% if request.fullpath == '/validate_json' %>
8
+ <script src='/javascripts/jquery-1.3.2.js' type='text/javascript'></script>
9
+ <script src='/javascripts/jquery.json-1.3.js' type='text/javascript'></script>
10
+ <% end %>
11
+
6
12
  <script src='/javascripts/app.js' type='text/javascript'></script>
13
+
7
14
  <% if params[:j] %>
8
15
  <script src='/javascripts/<%=params[:j]%>.js' type='text/javascript'></script>
9
16
  <% end %>
17
+
10
18
  </head>
11
19
  <body>
12
20
  <div id='container'>
@@ -19,12 +27,22 @@
19
27
  <ul class='nav'>
20
28
  <li><a href="http://neeraj.name">Gem author</a></li>
21
29
  <li><a href="http://github.com/neerajdotname/javascript_lab">source code</a></li>
22
- </ul>
30
+ </ul>
23
31
  </div>
24
32
  <div style='clear:both;'></div>
25
33
  </div>
26
34
 
27
35
  <div id='main'>
36
+ <div>
37
+ <div style='float:right;'>
38
+ <% if request.fullpath == '/validate_json' %>
39
+ <a href='/'>Home</a>
40
+ <% else %>
41
+ <a href='/validate_json'>validate JSON</a>
42
+ <% end %>
43
+ </p>
44
+ <div style='clear:both;'></div>
45
+ </div>
28
46
  <%= yield %>
29
47
  </div>
30
48
  </div>
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: neerajdotname-javascript_lab
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.10
4
+ version: 0.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Neeraj Singh
@@ -80,6 +80,7 @@ files:
80
80
  - public/javascripts/prototype-1.5.1.js
81
81
  - public/javascripts/prototype-1.5.js
82
82
  - public/javascripts/app.js
83
+ - public/javascripts/jquery.json-1.3.js
83
84
  - views/style.sass
84
85
  - views/index.erb
85
86
  - views/layout.erb