Greasy Fork 还支持 简体中文。

george_script.js

george_plus

  1. // ==UserScript==
  2. // @name george_script.js
  3. // @description george_plus
  4. // @namespace akash-ted-allen/george_plus
  5. // @version 1
  6. // @match http://www.student.cs.uwaterloo.ca/~se212/george-1/ask-george/george.cgi
  7. // @match https://www.student.cs.uwaterloo.ca/~se212/george-1/ask-george/george.cgi
  8. // @grant GM_addStyle
  9. // ==/UserScript==
  10.  
  11.  
  12. /**
  13. * Created by Akash Sant, Ted Ying, Allen Wang on 14-11-21.
  14. */
  15. GM_addStyle('.ace_editor{height:300px;} textarea[name=input_script] {height:0px;width:0px;left:-100px;top:-100px;position:absolute;}');
  16.  
  17. function contentEval(source) {
  18. // Check for function input.
  19. if ('function' == typeof source) {
  20. // Execute this function with no arguments, by adding parentheses.
  21. // One set around the function, required for valid syntax, and a
  22. // second empty set calls the surrounded function.
  23. source = '(' + source + ')();'
  24. }
  25.  
  26. // Create a script node holding this source code.
  27. var script = document.createElement('script');
  28. script.setAttribute("type", "application/javascript");
  29. script.textContent = source;
  30.  
  31. // Insert the script node into the page, so it will run, and immediately
  32. // remove it to clean up.
  33. document.body.appendChild(script);
  34. document.body.removeChild(script);
  35. }
  36. contentEval(function() {
  37. function loadScript(src, cb) {
  38. var scr = document.createElement('script');
  39. scr.src = src;
  40. scr.onload = cb;
  41. document.body.appendChild(scr);
  42. }
  43. var inputs = document.getElementsByTagName('input');
  44. var input_script = document.getElementsByName('input_script')[0];
  45. var getCurrentValue = function() {};
  46. for (var i = 0; i < inputs.length; ++i)
  47. inputs[i].addEventListener('click', function() {
  48. input_script.value = getCurrentValue();
  49. });
  50. var base = 'https://csclub.uwaterloo.ca/~t2ying/build/src/';
  51. var urls = [
  52. base + 'ace.js',
  53. base + 'ext-language_tools.js',
  54. ], loaded = 0;
  55. urls.map(function(url) {
  56. loadScript(url, function() {
  57. if (++loaded == urls.length)
  58. initialize();
  59. });
  60. });
  61. function initialize() {
  62. var textarea = document.createElement('textarea');
  63. textarea.innerHTML = input_script.innerHTML;
  64. input_script.parentNode.insertBefore(textarea, input_script);
  65. textarea.setAttribute('id', 'editor');
  66. var editor = ace.edit('editor');
  67. window.editor = editor;
  68. editor.setTheme('ace/theme/chrome');
  69. editor.setBehavioursEnabled(true);
  70. editor.getSession().setMode('ace/mode/george');
  71. getCurrentValue = function() {
  72. return editor.getValue();
  73. };
  74. editor.setOptions({
  75. enableBasicAutocompletion : true,
  76. enableSnippets: true,
  77. enableLiveAutocompletion: true
  78. });
  79.  
  80. var headingPlus = document.createElement('font');
  81. headingPlus.textContent = '\t+';
  82. headingPlus.style.fontFaceName = 'fantasy';
  83. headingPlus.style.color = '#000060';
  84. var parentHeading = document.getElementsByClassName('title')[0];
  85. parentHeading.appendChild(headingPlus);
  86.  
  87. var loadFileButton = document.createElement('button');
  88. var deleteFileButton = document.createElement('button');
  89. loadFileButton.textContent = 'Load File';
  90. deleteFileButton.textContent = 'Delete File';
  91. //document.body.appendChild(loadFileButton);
  92. var parentGuest = document.getElementsByName('download_file_name')[0];
  93. document.getElementsByName('clear')[0].addEventListener('click', onClear);
  94. if (parentGuest.nextSibling) {
  95. parentGuest.parentNode.insertBefore(loadFileButton, parentGuest.nextSibling);
  96. } else {
  97. parentGuest.parentNode.appendChild(loadFileButton);
  98. }
  99. loadFileButton.addEventListener('click', onLoadSaved);
  100. parentGuest = document.getElementsByName('filename')[0];
  101. if (parentGuest.nextSibling) {
  102. parentGuest.parentNode.insertBefore(deleteFileButton, parentGuest.nextSibling);
  103. } else {
  104. parentGuest.parentNode.appendChild(deleteFileButton);
  105. }
  106. deleteFileButton.addEventListener('click', delete_saved);
  107. function save_george_progress () {
  108. if(typeof (Storage) !== "undefined") {
  109. localStorage.setItem(document.getElementsByName('download_file_name')[0].value,
  110. editor.getValue());
  111. }
  112. }
  113. function getKey(){
  114. return document.getElementsByName("download_file_name")[0].value;
  115. }
  116. function delete_saved (e) {
  117. if (e && e.preventDefault)
  118. e.preventDefault();
  119. input_script.value = localStorage.getItem(getKey());
  120. localStorage.removeItem(getKey());
  121.  
  122. }
  123. function onLoadSaved(e) {
  124. if (e && e.preventDefault)
  125. e.preventDefault();
  126. var code = localStorage.getItem(getKey());
  127. if (code !== null)
  128. setCode(code);
  129. }
  130. function onClear (e) {
  131. if (e && e.preventDefault)
  132. e.preventDefault();
  133. setCode('#u X\n\n#a X\n\n#q X\n\n');
  134. }
  135. function setCode(code) {
  136. input_script.value = code;
  137. editor.setValue(code);
  138. }
  139. document.getElementsByName('check')[0].addEventListener("click", save_george_progress);
  140.  
  141. };
  142. });