Avatar

insert_link Function overworked (Features)

by Micha ⌂, Sunday, November 01, 2009, 12:17 (5288 days ago)
edited by Micha, Sunday, November 01, 2009, 12:22

Hello,

I overworked the insert_link function, see the changes in the code mentioned below. I add a simple feature: If the user selects a "valid" URI, I show this URI in the first prompt-box as suggestion (and not in the second one).

You can try it out in my forum.

Best regards
Micha

 
function insert_link(id,link_text,link_target)
 {
  var link_text = decodeURIComponent(link_text);
  var link_target = decodeURIComponent(link_target);
  //RegExp zum Pruefen auf eine "gueltige" URI, das geht vll noch besser...
  var regExp = new RegExp(/http:\/\/[a-zA-Z0-9-.][a-zA-Z0-9-.]+(S+)?/);
  if(document.selection) // for IE
   {
    var str = document.selection.createRange().text;
    document.getElementById(id).focus();
    var sel = document.selection.createRange();
 // Pruefung, ob markierter Text bereits eine valide URI ist
 // Wenn true, dann schlage diese in Prompt-Box vor
 // ansonsten geben default "http://" aus
 var insert_link = (regExp.test(sel.text))?prompt(link_target, sel.text):prompt(link_target,'http://');
 
 // Verlasse die Funktion, wenn der Nutzer abgebrochen hat, keinen Text
 // eingegeben hat oder das default "http://" lediglich enthalten ist
 if (!insert_link || insert_link == '' || insert_link == 'http://')
  return;
 
 // Wurde kein Text markiert oder eine valide URI eingegeben, dann biete 
 // dem Nutzer die Moeglichkeit, einen Linktext einzugeben (optional)
    if(sel.text=='' || regExp.test(sel.text)) var str = prompt(link_text,'');
    if(insert_link && str!=null)
     {
      if(str!='')
       {
        sel.text = "[link=" + insert_link + "]" + str + "[/link]";
       }
      else
       {
        sel.text = "[link]" + insert_link + "[/link]";
       }
     }
    return;
   }
  else if((typeof document.getElementById(id).selectionStart) != 'undefined') // Mozilla
   {
    var txtarea = document.getElementById(id);
    var selLength = txtarea.textLength;
    var selStart = txtarea.selectionStart;
    var selEnd = txtarea.selectionEnd;
    var oldScrollTop = txtarea.scrollTop;
    var s1 = (txtarea.value).substring(0,selStart);
    var s2 = (txtarea.value).substring(selStart, selEnd);
    var s3 = (txtarea.value).substring(selEnd, selLength);
 
 // Pruefung, ob markierter Text bereits eine valide URI ist
 // Wenn true, dann schlage diese in Prompt-Box vor
 // ansonsten geben default "http://" aus
 var insert_link = (regExp.test(s2))?prompt(link_target, s2):prompt(link_target,'http://');
 
 // Verlasse die Funktion, wenn der Nutzer abgebrochen hat, keinen Text
 // eingegeben hat oder das default "http://" lediglich enthalten ist
 if (!insert_link || insert_link == '' || insert_link == 'http://')
  return;
 
 // Wurde kein Text markiert oder eine valide URI eingegeben, dann biete 
 // dem Nutzer die Moeglichkeit, einen Linktext einzugeben (optional)
    if(selEnd-selStart==0 || regExp.test(s2))
     {
      var s2 = prompt(link_text,'');
      var no_selection = true;
     }
    if(insert_link && s2!=null)
     {
      if(s2!='')
       {
        txtarea.value = s1 + '[link=' + insert_link + ']' + s2 + '[/link]' + s3;
        var codelength = 14 + insert_link.length + s2.length;
       }
      else
       {
        txtarea.value = s1 + '[link]' + insert_link + '[/link]' + s3;
        var codelength = 13 + insert_link.length;
       }
      if(no_selection) txtarea.selectionStart = s1.length + codelength;
      else txtarea.selectionStart = s1.length;
      txtarea.selectionEnd = s1.length + codelength;
      txtarea.scrollTop = oldScrollTop;
      txtarea.focus();
      return;
     }
   }
  else insert(id,'[link=http://www.domain.tld/]Link[/link]');
 }
 

--
applied-geodesy.org - OpenSource Least-Squares Adjustment Software for Geodetic Sciences


Complete thread:

 RSS Feed of thread