editor.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. // Basic editor functions
  2. function storeCaret(ftext) {
  3. if (ftext.createTextRange) {
  4. ftext.caretPos = document.selection.createRange().duplicate();
  5. }
  6. }
  7. function SelectionRange(start, end) {
  8. this.start = start;
  9. this.end = end;
  10. }
  11. function getSelection(textId) {
  12. ctrl = document.getElementById(textId);
  13. if (document.selection) {
  14. ctrl.focus();
  15. var range = document.selection.createRange();
  16. var length = range.text.length;
  17. range.moveStart('character', -ctrl.value.length);
  18. return new SelectionRange(range.text.length - length, range.text.length);
  19. } else if (ctrl.selectionStart || ctrl.selectionStart == '0') {
  20. return new SelectionRange(ctrl.selectionStart, ctrl.selectionEnd);
  21. }
  22. }
  23. function getSelectionText(textId) {
  24. var ctrl = document.getElementById(textId);
  25. var text = ctrl.value;
  26. myRange = getSelection(textId);
  27. return $.trim(text.substring(myRange.start, myRange.end));
  28. }
  29. function setSelection(textId, SelectionRange) {
  30. ctrl = document.getElementById(textId);
  31. if (ctrl.setSelectionRange) {
  32. ctrl.focus();
  33. ctrl.setSelectionRange(SelectionRange.start, SelectionRange.end);
  34. } else if (ctrl.createTextRange) {
  35. var range = ctrl.createTextRange();
  36. range.collapse(true);
  37. range.moveStart('character', SelectionRange.start);
  38. range.moveEnd('character', SelectionRange.end);
  39. range.select();
  40. }
  41. }
  42. function _makeWrap(textId, myRange, wrap_start, wrap_end) {
  43. var ctrl = document.getElementById(textId);
  44. var text = ctrl.value;
  45. var startText = text.substring(0, myRange.start) + wrap_start;
  46. var middleText = text.substring(myRange.start, myRange.end);
  47. var endText = wrap_end + text.substring(myRange.end);
  48. ctrl.value = startText + middleText + endText;
  49. setSelection(textId, new SelectionRange(startText.length, startText.length + middleText.length));
  50. }
  51. function makeWrap(textId, wrap_start, wrap_end) {
  52. _makeWrap(textId, getSelection(textId), wrap_start, wrap_end);
  53. }
  54. function _makeReplace(textId, myRange, replacement) {
  55. var ctrl = document.getElementById(textId);
  56. var text = ctrl.value;
  57. var startText = text.substring(0, myRange.start);
  58. var middleText = text.substring(myRange.start, myRange.end);
  59. var endText = text.substring(myRange.end);
  60. ctrl.value = text.substring(0, myRange.start) + replacement + text.substring(myRange.end);
  61. setSelection(textId, new SelectionRange(startText.length + middleText.length, startText.length + middleText.length));
  62. }
  63. function makeReplace(textId, replacement) {
  64. _makeReplace(textId, getSelection(textId), replacement);
  65. }
  66. // Nice editor functionality
  67. $(function() {
  68. $('.editor-tools').fadeIn(600);
  69. function get_textarea(obj) {
  70. return $(obj).parent().parent().parent().parent().find('textarea');
  71. }
  72. $('.editor-bold').click(function() {
  73. ta = get_textarea(this).attr('id');
  74. makeWrap(ta, '**', '**');
  75. return false;
  76. });
  77. $('.editor-emphasis').click(function() {
  78. ta = get_textarea(this).attr('id');
  79. makeWrap(ta, '*', '*');
  80. return false;
  81. });
  82. $('.editor-link').click(function() {
  83. ta = get_textarea(this).attr('id');
  84. var link_url = $.trim(prompt(ed_lang_enter_link_url));
  85. if (link_url.length > 0) {
  86. link_url = link_url.toLowerCase();
  87. var pattern = /^(("[\w-+\s]+")|([\w-+]+(?:\.[\w-+]+)*)|("[\w-+\s]+")([\w-+]+(?:\.[\w-+]+)*))(@((?:[\w-+]+\.)*\w[\w-+]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][\d]\.|1[\d]{2}\.|[\d]{1,2}\.))((25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\.){2}(25[0-5]|2[0-4][\d]|1[\d]{2}|[\d]{1,2})\]?$)/i;
  88. if (!pattern.test(link_url)) {
  89. if (link_url.indexOf("http://") != 0 && link_url.indexOf("https://") != 0 && link_url.indexOf("ftp://") != 0) {
  90. link_url = "http://" + link_url;
  91. }
  92. }
  93. var link_label = $.trim(prompt(ed_lang_enter_link_label, $.trim(getSelectionText(get_textarea(this).attr('id')))));
  94. if (link_label.length > 0) {
  95. makeReplace(ta, '[' + link_label + '](' + link_url + ')');
  96. } else {
  97. makeReplace(ta, '<' + link_url + '>');
  98. }
  99. }
  100. return false;
  101. });
  102. $('.editor-image').click(function() {
  103. ta = get_textarea(this).attr('id');
  104. var image_url = $.trim(prompt(ed_lang_enter_image_url, $.trim(getSelectionText(get_textarea(this).attr('id')))));
  105. if (image_url.length > 0) {
  106. var image_label = $.trim(prompt(ed_lang_enter_image_label));
  107. if (image_label.length > 0) {
  108. makeReplace(ta, '![' + image_label + '](' + image_url + ')');
  109. } else {
  110. makeReplace(ta, '!(' + image_url + ')');
  111. }
  112. }
  113. return false;
  114. });
  115. $('.editor-hr').click(function() {
  116. ta = get_textarea(this).attr('id');
  117. makeReplace(ta, '\r\n\r\n- - - - -\r\n\r\n');
  118. return false;
  119. });
  120. });