aboutsummaryrefslogtreecommitdiff
path: root/vendors/dokuwiki/lib/scripts/textselection.js
diff options
context:
space:
mode:
Diffstat (limited to 'vendors/dokuwiki/lib/scripts/textselection.js')
-rw-r--r--vendors/dokuwiki/lib/scripts/textselection.js226
1 files changed, 0 insertions, 226 deletions
diff --git a/vendors/dokuwiki/lib/scripts/textselection.js b/vendors/dokuwiki/lib/scripts/textselection.js
deleted file mode 100644
index 39dd4cc41..000000000
--- a/vendors/dokuwiki/lib/scripts/textselection.js
+++ /dev/null
@@ -1,226 +0,0 @@
-/**
- * Text selection related functions.
- */
-
-/**
- * selection prototype
- *
- * Object that capsulates the selection in a textarea. Returned by getSelection.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function selection_class(){
- this.start = 0;
- this.end = 0;
- this.obj = null;
- this.rangeCopy = null;
- this.scroll = 0;
- this.fix = 0;
-
- this.getLength = function(){
- return this.end - this.start;
- };
-
- this.getText = function(){
- if(!this.obj) return '';
- return this.obj.value.substring(this.start,this.end);
- }
-}
-
-/**
- * Get current selection/cursor position in a given textArea
- *
- * @link http://groups.drupal.org/node/1210
- * @author Andreas Gohr <andi@splitbrain.org>
- * @link http://linebyline.blogspot.com/2006/11/textarea-cursor-position-in-internet.html
- * @returns object - a selection object
- */
-function getSelection(textArea) {
- var sel = new selection_class();
-
- sel.obj = textArea;
- sel.start = textArea.value.length;
- sel.end = textArea.value.length;
-
- textArea.focus();
- if(document.getSelection) { // Mozilla et al.
- sel.start = textArea.selectionStart;
- sel.end = textArea.selectionEnd;
- sel.scroll = textArea.scrollTop;
- } else if(document.selection) { // MSIE
- /*
- * This huge lump of code is neccessary to work around two MSIE bugs:
- *
- * 1. Selections trim newlines at the end of the code
- * 2. Selections count newlines as two characters
- */
-
- // The current selection
- sel.rangeCopy = document.selection.createRange().duplicate();
-
- var before_range = document.body.createTextRange();
- before_range.moveToElementText(textArea); // Selects all the text
- before_range.setEndPoint("EndToStart", sel.rangeCopy); // Moves the end where we need it
-
- var before_finished = false, selection_finished = false;
- var before_text, selection_text;
- // Load the text values we need to compare
- before_text = before_range.text;
- selection_text = sel.rangeCopy.text;
-
- sel.start = before_text.length;
- sel.end = sel.start + selection_text.length;
-
- // Check each range for trimmed newlines by shrinking the range by 1 character and seeing
- // if the text property has changed. If it has not changed then we know that IE has trimmed
- // a \r\n from the end.
- do {
- if (!before_finished) {
- if (before_range.compareEndPoints("StartToEnd", before_range) == 0) {
- before_finished = true;
- } else {
- before_range.moveEnd("character", -1);
- if (before_range.text == before_text) {
- sel.start += 2;
- sel.end += 2;
- } else {
- before_finished = true;
- }
- }
- }
- if (!selection_finished) {
- if (sel.rangeCopy.compareEndPoints("StartToEnd", sel.rangeCopy) == 0) {
- selection_finished = true;
- } else {
- sel.rangeCopy.moveEnd("character", -1);
- if (sel.rangeCopy.text == selection_text) {
- sel.end += 2;
- } else {
- selection_finished = true;
- }
- }
- }
- } while ((!before_finished || !selection_finished));
-
-
- // count number of newlines in str to work around stupid IE selection bug
- var countNL = function(str) {
- var m = str.split("\r\n");
- if (!m || !m.length) return 0;
- return m.length-1;
- };
- sel.fix = countNL(sel.obj.value.substring(0,sel.start));
-
- }
- return sel;
-}
-
-/**
- * Set the selection
- *
- * You need to get a selection object via getSelection() first, then modify the
- * start and end properties and pass it back to this function.
- *
- * @link http://groups.drupal.org/node/1210
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param object selection - a selection object as returned by getSelection()
- */
-function setSelection(selection){
- if(document.getSelection){ // FF
- // what a pleasure in FF ;)
- selection.obj.setSelectionRange(selection.start,selection.end);
- if(selection.scroll) selection.obj.scrollTop = selection.scroll;
- } else if(document.selection) { // IE
- selection.rangeCopy.collapse(true);
- selection.rangeCopy.moveStart('character',selection.start - selection.fix);
- selection.rangeCopy.moveEnd('character',selection.end - selection.start);
- selection.rangeCopy.select();
- }
-}
-
-/**
- * Inserts the given text at the current cursor position or replaces the current
- * selection
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- * @param string text - the new text to be pasted
- * @param objct selecttion - selection object returned by getSelection
- * @param int opts.startofs - number of charcters at the start to skip from new selection
- * @param int opts.endofs - number of characters at the end to skip from new selection
- * @param bool opts.nosel - set true if new text should not be selected
- */
-function pasteText(selection,text,opts){
- if(!opts) opts = {};
- // replace the content
-
- selection.obj.value =
- selection.obj.value.substring(0, selection.start) + text +
- selection.obj.value.substring(selection.end, selection.obj.value.length);
-
- // set new selection
- selection.end = selection.start + text.length;
-
- // modify the new selection if wanted
- if(opts.startofs) selection.start += opts.startofs;
- if(opts.endofs) selection.end -= opts.endofs;
-
- // no selection wanted? set cursor to end position
- if(opts.nosel) selection.start = selection.end;
-
- setSelection(selection);
-}
-
-
-/**
- * Format selection
- *
- * Apply tagOpen/tagClose to selection in textarea, use sampleText instead
- * of selection if there is none.
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function insertTags(textAreaID, tagOpen, tagClose, sampleText){
- var txtarea = DOKUid(textAreaID);
-
- var selection = getSelection(txtarea);
- var text = selection.getText();
- var opts;
-
- // don't include trailing space in selection
- if(text.charAt(text.length - 1) == ' '){
- selection.end--;
- text = selection.getText();
- }
-
- if(!text){
- // nothing selected, use the sample text and select it
- text = sampleText;
- opts = {
- startofs: tagOpen.length,
- endofs: tagClose.length
- };
- }else{
- // place cursor at the end
- opts = {
- nosel: true
- };
- }
-
- // surround with tags
- text = tagOpen + text + tagClose;
-
- // do it
- pasteText(selection,text,opts);
-}
-
-/**
- * Wraps around pasteText() for backward compatibility
- *
- * @author Andreas Gohr <andi@splitbrain.org>
- */
-function insertAtCarret(textAreaID, text){
- var txtarea = DOKUid(textAreaID);
- var selection = getSelection(txtarea);
- pasteText(selection,text,{nosel: true});
-}
-