ubuntu-it QuickReply Enhanced Editor

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

当前为 2015-08-20 提交的版本,查看 最新版本

  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 201508200938
  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: 'quote',
  56. name: 'Cita'
  57. }, {
  58. code: 'url',
  59. name: 'URL'
  60. }, {
  61. code: 'wiki',
  62. name: 'Wiki'
  63. }];
  64. jQuery('input[name="show_qr"]').click(function(){
  65. var previewBtn = $('<input class="button2" type="submit" value="Anteprima" name="preview" tabindex="8" accesskey="a">');
  66. previewBtn.click(function(){
  67. var action = $(this).parents('form').attr('action');
  68. $(this).parents('form').attr('action', action+'#preview');
  69. });
  70. jQuery('.submit-buttons').append(previewBtn);
  71. jQuery('#message-box').each(function() {
  72. var $buttons = $('<div id="buttons"></div>');
  73. $(this).prepend($buttons);
  74. var $textarea = $('.inputbox', this);
  75. $.each(buttons, function(i, button) {
  76. var $btn = $('<button type="button">' + button.name + '</button>');
  77. $buttons.append($btn);
  78. $btn.click(function(e) {
  79. e.preventDefault();
  80. var textarea = $textarea[0];
  81. var scrollTop = textarea.scrollTop;
  82. var selection = $textarea.selection();
  83.  
  84. var val = $textarea.val();
  85. var pre = val.substring(0, selection.start);
  86. var code = button.code;
  87. var text = selection.text || '';
  88. if( code === 'url' ){
  89. code += '=' + prompt("Inserire l'URL");
  90. if( text.length === 0 ){
  91. text += prompt("Inserire il testo");
  92. }
  93. }
  94. var bbcode = '[' + code + ']' + text + '[/' + button.code + ']';
  95. var post = val.substring(selection.end);
  96.  
  97. var newSelectionStart = selection.start + 2 + button.code.length;
  98. var newSelectionStop = newSelectionStart + selection.text.length;
  99. $textarea.val(pre + bbcode + post);
  100. textarea.selectionStart = newSelectionStart;
  101. textarea.selectionEnd = newSelectionStop;
  102. textarea.focus();
  103. textarea.scrollTop = scrollTop;
  104.  
  105. });
  106. });
  107. });
  108. });