ubuntu-it QuickReply Enhanced Editor

Aggiunge alcune delle funzionalità dell'editor completo alla risposta rapida

当前为 2017-05-30 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name ubuntu-it QuickReply Enhanced Editor
  3. // @description Aggiunge alcune delle funzionalità dell'editor completo alla risposta rapida
  4. // @namespace ubuntu-it
  5. // @include http*://forum.ubuntu-it.org/viewtopic.php?*
  6. // @version 0.201705301605
  7. // @grant none
  8. // ==/UserScript==
  9.  
  10.  
  11. (function($, window) {
  12. $.fn.selection = function() {
  13. var doc = window.doc;
  14. var element = this[0];
  15. var selection = {};
  16. if (window.getSelection) {
  17. /* except IE */
  18. selection.start = element.selectionStart;
  19. selection.end = element.selectionEnd;
  20. selection.text = element.value.slice(selection.start, selection.end);
  21. } else if (doc.selection) {
  22. /* for IE */
  23. element.focus();
  24. var range = doc.selection.createRange(),
  25. range2 = doc.body.createTextRange();
  26. selection.text = range.text;
  27. try {
  28. range2.moveToElementText(element);
  29. range2.setEndPoint('StartToStart', range);
  30. } catch (e) {
  31. range2 = element.createTextRange();
  32. range2.setEndPoint('StartToStart', range);
  33. }
  34. selection.start = element.value.length - range2.text.length;
  35. selection.end = selection.start + range.text.length;
  36. }
  37. return selection;
  38. }
  39. })(jQuery, window);
  40.  
  41. //Pulsanti da inserire nell'editor
  42. var buttons = [{
  43. code: 'b',
  44. name: '<strong>B</strong>'
  45. }, {
  46. code: 'u',
  47. name: '<span style="text-decoration: underline;">u</span>'
  48. }, {
  49. code: 'i',
  50. name: '<i>i</i>'
  51. }, {
  52. code: 'code',
  53. name: 'Codice'
  54. }, {
  55. code: 'img',
  56. name: 'IMG'
  57. }, {
  58. code: 'quote',
  59. name: 'Cita'
  60. }, {
  61. code: 'url',
  62. name: 'URL'
  63. }, {
  64. code: 'wiki',
  65. name: 'Wiki'
  66. }, {
  67. code: 'forum',
  68. name: 'Forum'
  69. }];
  70. jQuery('input[name="show_qr"]').click(function(){
  71. var previewBtn = $('<input class="button2" type="submit" value="Anteprima" name="preview" tabindex="8" accesskey="a">');
  72. previewBtn.click(function(){
  73. var action = $(this).parents('form').attr('action');
  74. $(this).parents('form').attr('action', action+'#preview');
  75. });
  76. jQuery('.submit-buttons').append(previewBtn);
  77. jQuery('#message-box').each(function() {
  78. var $buttons = $('<div id="buttons"></div>');
  79. $(this).prepend($buttons);
  80. var $textarea = $('.inputbox', this);
  81. $.each(buttons, function(i, button) {
  82. var $btn = $('<button type="button">' + button.name + '</button>');
  83. $buttons.append($btn);
  84. $btn.click(function(e) {
  85. e.preventDefault();
  86. function exec($textarea,codeOpen, text,codeClose){
  87. var textarea = $textarea[0];
  88. var scrollTop = textarea.scrollTop;
  89. var selection = $textarea.selection();
  90. var val = $textarea.val();
  91. var pre = val.substring(0, selection.start);
  92. var bbcode = '[' + codeOpen + ']' + text + '[/' + codeClose + ']';
  93. var post = val.substring(selection.end);
  94.  
  95. var newSelectionStart = selection.start + 2 + codeClose.length;
  96. var newSelectionStop = newSelectionStart + selection.text.length;
  97. $textarea.val(pre + bbcode + post);
  98. textarea.selectionStart = newSelectionStart;
  99. textarea.selectionEnd = newSelectionStop;
  100. textarea.focus();
  101. textarea.scrollTop = scrollTop;
  102. }
  103.  
  104. var codeOpen = button.code;
  105. var codeClose = button.code;
  106. var selection = $textarea.selection();
  107. var text = selection.text || '';
  108. switch(codeOpen){
  109. case 'url':
  110. codeOpen += '=' + prompt("Inserire l'URL");
  111. if( text.length === 0 ){
  112. text = prompt("Inserire il testo");
  113. }
  114. exec($textarea,codeOpen,text,codeClose);
  115. break;
  116. case 'forum':
  117. var url = prompt("Inserire l'URL");
  118. var tid = 0;
  119. if( url.match(/t=[\d]+/) ){
  120. tid = url.match(/t=([\d]+)/)[1];
  121. }else if( url.match(/^[\d]+$/) ){
  122. tid = url;
  123. }
  124. if( tid>0 ){
  125. url = 'http://forum.ubuntu-it.org/viewtopic.php?t='+tid;
  126. }
  127. jQuery.get(url,function(res){
  128. var text = jQuery('h2:first',res).text()
  129. codeOpen = 'url='+url;
  130. codeClose = 'url';
  131. exec($textarea,codeOpen,text,codeClose);
  132. });
  133. break;
  134. default:
  135. exec($textarea,codeOpen,text,codeClose);
  136. break;
  137. }
  138.  
  139. });
  140. });
  141. });
  142. });