/Sandbox/scripts/sandbox.js

https://github.com/jsref/JavaScriptClass · JavaScript · 209 lines · 170 code · 17 blank · 22 comment · 10 complexity · d9820f147641f5217f77d640cc8cb9a3 MD5 · raw file

  1. //========================================================
  2. // Get text
  3. //========================================================
  4. function getText() {
  5. return $('#tarText').val();
  6. }
  7. function setText(sText) {
  8. return $('#tarText').val(sText);
  9. }
  10. //========================================================
  11. // String utility
  12. //========================================================
  13. function indentLength(sLine) {
  14. var match = sLine.match(/^(\s*)/);
  15. if (match === null) {
  16. return 0
  17. }
  18. return match[1].length;
  19. }
  20. function minIndentLength(sLines) {
  21. var lines = sLines.split('\n');
  22. var min;
  23. $.each(lines, function(i, each) {
  24. var length = indentLength(each);
  25. if (!min || length < min) {
  26. min = length;
  27. }
  28. });
  29. return min;
  30. }
  31. //========================================================
  32. // Multi-line String functions
  33. //========================================================
  34. function replaceCr(sLines, sReplacement) {
  35. var result = sLines.replace(/\n/g, sReplacement);
  36. return "'" + result + "'";
  37. }
  38. function mainLines(sLines) {
  39. var length = minIndentLength(sLines);
  40. var lines = sLines.split('\n');
  41. var trimmed = lines.map(function(each) {
  42. return each.slice(length);
  43. });
  44. var notSpaceStart = /^\S/;
  45. var noSpace = trimmed.filter(function(each) {
  46. return notSpaceStart.test(each);
  47. });
  48. var alphaStart = /^\w/;
  49. var alpha = noSpace.filter(function(each) {
  50. return alphaStart.test(each);
  51. });
  52. var result = alpha.join('\n');
  53. return result;
  54. }
  55. function arrayOfLines(sLines) {
  56. var lines = sLines.split('\n');
  57. var result = '[';
  58. lines.forEach(function(each, i) {
  59. if (i !== 0) {
  60. result += ",";
  61. }
  62. result += "\n '" + each + "'"
  63. });
  64. result += '\n]';
  65. return result;
  66. }
  67. //========================================================
  68. // Evaluate lines
  69. //========================================================
  70. function spaces(i) {
  71. var result = '';
  72. while (result.length < i) {
  73. result += ' ';
  74. }
  75. return result;
  76. }
  77. function upToResult(sLine) {
  78. var index = sLine.search(/\/\/=>/);
  79. return (index > -1) ? sLine.slice(0, index) : sLine;
  80. }
  81. function evaluateLines(sLines) {
  82. var max = 0, code = '', display = '';
  83. var lines = sLines.split('\n').map(function(each) {
  84. return upToResult(each).trimRight();
  85. });
  86. lines = lines.filter(function(each) {
  87. return each.length > 0;
  88. });
  89. lines.forEach(function(each) {
  90. max = Math.max(max, each.length);
  91. });
  92. lines.forEach(function(each, i) {
  93. var pad = max + 2 - each.length;
  94. code += each + '\n';
  95. if (i > 0) {
  96. display += '\n';
  97. }
  98. display += each;
  99. try {
  100. var result = eval(code);
  101. if (result !== undefined) {
  102. display += spaces(pad) + '//=> ' + result;
  103. }
  104. } catch (error) {
  105. }
  106. });
  107. return display;
  108. }
  109. //========================================================
  110. // AJAX
  111. //========================================================
  112. //
  113. // See http://api.jquery.com/jQuery.getJSON/
  114. //
  115. function showAjaxResult(sUrl) {
  116. function handleResponse(oData, sTextStatus, oJqXHR) {
  117. sTextStatus = sTextStatus || 'NO TEXTSTATUS';
  118. var ajaxResult = {
  119. oData: oData,
  120. sStatus: sTextStatus
  121. };
  122. var printResult = jsDump.parse(ajaxResult);
  123. setText(printResult);
  124. }
  125. function handleError(oData, sTextStatus, oJqXHR) {
  126. sTextStatus = sTextStatus || 'NO TEXTSTATUS';
  127. var ajaxResult = {
  128. oData: oData,
  129. sStatus: sTextStatus
  130. };
  131. var printResult = jsDump.parse(ajaxResult);
  132. setText(printResult);
  133. }
  134. $.ajax({
  135. url: sUrl,
  136. success: handleResponse,
  137. error: handleError
  138. });
  139. }
  140. function showAjaxResult2(sUrl) {
  141. function handleResponse(oData, sTextStatus, oJqXHR) {
  142. sTextStatus = sTextStatus || 'NO TEXTSTATUS';
  143. var ajaxResult = {
  144. oData: oData,
  145. sStatus: sTextStatus
  146. };
  147. var printResult = jsDump.parse(ajaxResult);
  148. setText(printResult);
  149. }
  150. $.getJSON(sUrl, handleResponse);
  151. }
  152. //========================================================
  153. // Attach code to buttons
  154. //========================================================
  155. function bindButtons() {
  156. $('#btnEvaluateLines').click(function() {
  157. var result = evaluateLines(getText());
  158. setText(result);
  159. });
  160. $('#btnBreakString').click(function() {
  161. var result = replaceCr(getText(), '\\n');
  162. setText(result);
  163. });
  164. $('#btnBreakStringPlus').click(function() {
  165. var result = replaceCr(getText(), "\\n' +\n'");
  166. setText(result);
  167. });
  168. $('#btnBreakStringSlash').click(function() {
  169. var result = replaceCr(getText(), ' /\n');
  170. setText(result);
  171. });
  172. $('#btnPrettyPrint').click(function() {
  173. //must put parentheses around the text before eval to handle objects
  174. var evalResult = eval('(' + getText() + ')');
  175. var printResult = jsDump.parse(evalResult);
  176. setText(printResult);
  177. });
  178. $('#btnStackOverflow').click(function() {
  179. showAjaxResult('http://api.stackoverflow.com/1.0/stats');
  180. });
  181. $('#btnStackOverflow2').click(function() {
  182. showAjaxResult2('http://api.stackoverflow.com/1.0/stats?jsonp=?');
  183. });
  184. $('#btnStackOverflowStan').click(function() {
  185. showAjaxResult2('http://stackoverflow.com/users/flair/346711.json?callback=?');
  186. });
  187. $('#btnClear').hover(function() {
  188. setText('CLEARING...');
  189. }, function() {
  190. setText('');
  191. });
  192. }