editor.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  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 setSelection(textId, SelectionRange) {
  24. ctrl = document.getElementById(textId);
  25. if (ctrl.setSelectionRange) {
  26. ctrl.focus();
  27. ctrl.setSelectionRange(SelectionRange.start, SelectionRange.end);
  28. } else if (ctrl.createTextRange) {
  29. var range = ctrl.createTextRange();
  30. range.collapse(true);
  31. range.moveStart('character', SelectionRange.start);
  32. range.moveEnd('character', SelectionRange.end);
  33. range.select();
  34. }
  35. }
  36. function _makeWrap(textId, myRange, wrap_start, wrap_end) {
  37. var ctrl = document.getElementById(textId);
  38. var text = ctrl.value;
  39. var startText = text.substring(0, myRange.start) + wrap_start;
  40. var middleText = text.substring(myRange.start, myRange.end);
  41. var endText = wrap_end + text.substring(myRange.end);
  42. ctrl.value = startText + middleText + endText;
  43. setSelection(textId, new SelectionRange(startText.length, startText.length + middleText.length));
  44. }
  45. function makeWrap(textId, wrap_start, wrap_end) {
  46. _makeWrap(textId, getSelection(textId), wrap_start, wrap_end);
  47. }
  48. function _makeReplace(textId, myRange, replacement) {
  49. var ctrl = document.getElementById(textId);
  50. var text = ctrl.value;
  51. var startText = text.substring(0, myRange.start);
  52. var middleText = text.substring(myRange.start, myRange.end);
  53. var endText = text.substring(myRange.end);
  54. ctrl.value = text.substring(0, myRange.start) + replacement + text.substring(myRange.end);
  55. setSelection(textId, new SelectionRange(startText.length + middleText.length, startText.length + middleText.length));
  56. }
  57. function makeReplace(textId, replacement) {
  58. _makeReplace(textId, getSelection(textId), replacement);
  59. }
  60. // Nice editor functionality
  61. $(function() {
  62. $('.editor-tools').fadeIn(600);
  63. function get_textarea(obj) {
  64. return $(obj).parent().parent().parent().parent().find('textarea');
  65. }
  66. $('.editor-bold').click(function() {
  67. ta = get_textarea(this).attr('id');
  68. makeWrap(ta, '**', '**');
  69. return false;
  70. });
  71. $('.editor-emphasis').click(function() {
  72. ta = get_textarea(this).attr('id');
  73. makeWrap(ta, '_', '_');
  74. return false;
  75. });
  76. $('.editor-link').click(function() {
  77. ta = get_textarea(this).attr('id');
  78. var link_url = $.trim(prompt(ed_lang_enter_link_url));
  79. if (link_url.length > 0) {
  80. link_url = link_url.toLowerCase();
  81. 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;
  82. if (!pattern.test(link_url)) {
  83. if (link_url.indexOf("http://") != 0 && link_url.indexOf("https://") != 0 && link_url.indexOf("ftp://") != 0) {
  84. link_url = "http://" + link_url;
  85. }
  86. }
  87. var link_label = $.trim(prompt(ed_lang_enter_link_label));
  88. if (link_label.length > 0) {
  89. makeReplace(ta, '[' + link_label + '](' + link_url + ')');
  90. } else {
  91. makeReplace(ta, '<' + link_url + '>');
  92. }
  93. }
  94. return false;
  95. });
  96. $('.editor-image').click(function() {
  97. ta = get_textarea(this).attr('id');
  98. var image_url = $.trim(prompt(ed_lang_enter_image_url));
  99. if (image_url.length > 0) {
  100. var image_label = $.trim(prompt(ed_lang_enter_image_label));
  101. if (image_label.length > 0) {
  102. makeReplace(ta, '![' + image_label + '](' + image_url + ')');
  103. }
  104. }
  105. return false;
  106. });
  107. $('.editor-hr').click(function() {
  108. ta = get_textarea(this).attr('id');
  109. makeReplace(ta, '\r\n\r\n- - - - -\r\n\r\n');
  110. return false;
  111. });
  112. });