insert_link Function overworked (Features)
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