editor.js 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266
  1. var imgNum=0;
  2. function loadFile(event) {
  3. var _file=document.getElementById("photo");
  4. var i=_file.value.lastIndexOf('.');
  5. var len=_file.value.length;
  6. var extEndName=_file.value.substring(i+1,len);
  7. var extName="JPG,PNG";
  8. if (imgNum > 5){ alert('仅允许上传小于6张图片'); }
  9. else {
  10. if(extName.indexOf(extEndName.toUpperCase())==-1){
  11. alert("您只能上传"+extName+"格式的文件");
  12. }else{
  13. var reader = new FileReader();
  14. reader.onload = function(){
  15. var img = '<img src="' + reader.result + '" title="">'
  16. $("#content").after(img);
  17. imgNum += 1;
  18. };
  19. reader.readAsDataURL(event.target.files[0]);
  20. };
  21. }
  22. };
  23. $(document).ready(function() {
  24. var cursorPosition = {
  25. get: function (textarea) {
  26. var rangeData = {text: "", start: 0, end: 0 };
  27. if (textarea.setSelectionRange) { // W3C
  28. textarea.focus();
  29. rangeData.start= textarea.selectionStart;
  30. rangeData.end = textarea.selectionEnd;
  31. rangeData.text = (rangeData.start != rangeData.end) ? textarea.value.substring(rangeData.start, rangeData.end): "";
  32. } else if (document.selection) { // IE
  33. textarea.focus();
  34. var i,
  35. oS = document.selection.createRange(),
  36. oR = document.body.createTextRange();
  37. oR.moveToElementText(textarea);
  38. rangeData.text = oS.text;
  39. rangeData.bookmark = oS.getBookmark();
  40. for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart("character", -1) !== 0; i ++) {
  41. if (textarea.value.charAt(i) == '\r' ) {
  42. i ++;
  43. }
  44. }
  45. rangeData.start = i;
  46. rangeData.end = rangeData.text.length + rangeData.start;
  47. }
  48. return rangeData;
  49. }
  50. };
  51. $('a#editor-a').click(function() {
  52. var tx = $("#content")[0];
  53. var result;
  54. var text;
  55. var oValue,nValue;
  56. var choice=$('#choice').val();
  57. result = cursorPosition.get(tx);
  58. if (result.text == '') {text = '链接';}
  59. else {text = result.text;}
  60. if (choice == 'Default') { text = '<a href="' + text +'" target="_blank"></a>';}
  61. else {text = '[](' + text + ')';}
  62. oValue = $("#content").val();
  63. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  64. $("#content").val(nValue);
  65. if (result.text == '') {
  66. if (choice == "Default"){start=9;end=11}
  67. else {start=3;end=5};
  68. if(tx.createTextRange){
  69. var range = tx.createTextRange();
  70. range.moveStart("character", result.start+start);
  71. range.moveEnd("character",result.start+end);
  72. range.select();
  73. }else{
  74. tx.setSelectionRange(result.start+start,result.start+end);
  75. tx.focus();
  76. }};
  77. });
  78. $('a#editor-b').click(function() {
  79. var tx = $("#content")[0];
  80. var result;
  81. var text;
  82. var oValue,nValue;
  83. var choice=$('#choice').val();
  84. result = cursorPosition.get(tx);
  85. if (result.text == '') {text = '文本';}
  86. else {text = result.text;}
  87. if (choice == 'Default') { text = '<b>' + text + '</b>';}
  88. else {text = '**' + text + '**';}
  89. oValue = $("#content").val();
  90. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  91. $("#content").val(nValue);
  92. if (result.text == '') {
  93. if (choice == "Default"){start=3;end=5}
  94. else {start=2;end=4};
  95. if(tx.createTextRange){
  96. var range = tx.createTextRange();
  97. range.moveStart("character", result.start+start);
  98. range.moveEnd("character",result.start+end);
  99. range.select();
  100. }else{
  101. tx.setSelectionRange(result.start+start,result.start+end);
  102. tx.focus();
  103. }};
  104. });
  105. $('a#editor-i').click(function() {
  106. var tx = $("#content")[0];
  107. var result;
  108. var text = "文本";
  109. var oValue,nValue;
  110. var choice=$('#choice').val();
  111. result = cursorPosition.get(tx);
  112. if (result.text == '') {text = '文本';}
  113. else {text = result.text;}
  114. if (choice == 'Default')
  115. { text = '<i>' + text + '</i>';}
  116. else {text = '*' + text + '*';}
  117. oValue = $("#content").val();
  118. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  119. $("#content").val(nValue);
  120. if (result.text == '') {
  121. if (choice == "Default"){start=3;end=5}
  122. else {start=1;end=3};
  123. if(tx.createTextRange){
  124. var range = tx.createTextRange();
  125. range.moveStart("character", result.start+start);
  126. range.moveEnd("character",result.start+end);
  127. range.select();
  128. }else{
  129. tx.setSelectionRange(result.start+start,result.start+end);
  130. tx.focus();
  131. }};
  132. });
  133. $('a#editor-bq').click(function() {
  134. var tx = $("#content")[0];
  135. var result;
  136. var text;
  137. var oValue,nValue;
  138. var choice=$('#choice').val();
  139. result = cursorPosition.get(tx);
  140. if (result.text == '') {text = '引用';}
  141. else {text = result.text;}
  142. if (choice == 'Default')
  143. { text = '<blockquote>' + text + '</blockquote>';}
  144. else {text = '\r\n> ' + text;}
  145. oValue = $("#content").val();
  146. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  147. $("#content").val(nValue);
  148. if (result.text == '') {
  149. if (choice == "Default"){start=12;end=14}
  150. else {start=3;end=5};
  151. if(tx.createTextRange){
  152. var range = tx.createTextRange();
  153. range.moveStart("character", result.start+start);
  154. range.moveEnd("character",result.start+end);
  155. range.select();
  156. }else{
  157. tx.setSelectionRange(result.start+start,result.start+end);
  158. tx.focus();
  159. }};
  160. });
  161. $('a#editor-c').click(function() {
  162. var tx = $("#content")[0];
  163. var result;
  164. var text ;
  165. var oValue,nValue;
  166. var choice=$('#choice').val();
  167. result = cursorPosition.get(tx);
  168. if (result.text == '') {text = '代码';}
  169. else {text = result.text;}
  170. if (choice == 'Default')
  171. { text = '\r\n<pre>' + text + '</pre>';}
  172. else {text = "\r\n'''\r\n" + text + "\r\n'''";}
  173. oValue = $("#content").val();
  174. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  175. $("#content").val(nValue);
  176. if (result.text == '') {
  177. if (choice == "Default"){start=6;end=8}
  178. else {start=5;end=7};
  179. if(tx.createTextRange){
  180. var range = tx.createTextRange();
  181. range.moveStart("character", result.start+start);
  182. range.moveEnd("character",result.start+end);
  183. range.select();
  184. }else{
  185. tx.setSelectionRange(result.start+start,result.start+end);
  186. tx.focus();
  187. }};
  188. });
  189. $('a#editor-h').click(function() {
  190. var tx = $("#content")[0];
  191. var result;
  192. var text;
  193. var oValue,nValue;
  194. var choice=$('#choice').val();
  195. result = cursorPosition.get(tx);
  196. if (result.text == '') {text = '标题';}
  197. else {text = result.text;}
  198. if (choice == 'Default')
  199. { text = '<h3>' + text + '</h3>';}
  200. else {text = "\r\n### " + text + "\r\n";}
  201. oValue = $("#content").val();
  202. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  203. $("#content").val(nValue);
  204. if (result.text == '') {
  205. if (choice == "Default"){start=4;end=6}
  206. else {start=5;end=7};
  207. if(tx.createTextRange){
  208. var range = tx.createTextRange();
  209. range.moveStart("character", result.start+start);
  210. range.moveEnd("character",result.start+end);
  211. range.select();
  212. }else{
  213. tx.setSelectionRange(result.start+start,result.start+end);
  214. tx.focus();
  215. }};
  216. });
  217. $('a#editor-hr').click(function() {
  218. var tx = $("#content")[0];
  219. var result;
  220. var text;
  221. var oValue,nValue;
  222. var choice=$('#choice').val();
  223. result = cursorPosition.get(tx);
  224. if (choice == 'Default')
  225. { text = '\r\n<hr>\r\n'; }
  226. else {text = '\r\n------\r\n';}
  227. oValue = $("#content").val();
  228. nValue = oValue.substring(0, result.start) + text + oValue.substring(result.end);
  229. $("#content").val(nValue);
  230. });
  231. $('button#uploadFile').click(function() {
  232. var formData = new FormData($('#uploadForm')[0]);
  233. var content=$("#content").val();
  234. var choice=$("#choice").val();
  235. var img_url;
  236. $.ajax({
  237. type: 'POST',
  238. url: '/question/uploads',
  239. data: formData,
  240. contentType: false,
  241. processData: false,
  242. dataType: 'json',
  243. error: function(XMLHttpRequest) {
  244. if (XMLHttpRequest.status == 413) {
  245. alert('文件太大');
  246. }
  247. },
  248. success: function(result) {
  249. if (choice == 'Default'){
  250. img_url = '\r\n<img src="' +'/uploads/' + result.error + '" alt="photo">\r\n';
  251. }
  252. else {
  253. img_url = '\r\n![photo](/uploads/' + result.error +') \r\n';
  254. }
  255. if (result.judge == true) {
  256. $("#content").val(content+img_url);
  257. $("#content").focus();
  258. }
  259. else {
  260. alert(result.error);
  261. }
  262. },
  263. });
  264. });
  265. })