Subversion Repositories Sites.tela-botanica.org

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

// Barre de raccourcis
// derive du:
// bbCode control by subBlue design : www.subBlue.com

// Startup variables
var theSelection = false;

// Check for Browser & Platform for PC & IE specific bits
// More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html
var clientPC = navigator.userAgent.toLowerCase(); // Get client info
var clientVer = parseInt(navigator.appVersion); // Get browser version

var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
                && (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
                && (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;

var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);


function barre_raccourci(debut,fin,champ) {
        var txtarea = champ;

        txtarea.focus();
        donotinsert = false;
        theSelection = false;
        bblast = 0;

        if ((clientVer >= 4) && is_ie && is_win)
        {
                theSelection = document.selection.createRange().text; // Get text selection
                if (theSelection) {

                        while (theSelection.substring(theSelection.length-1, theSelection.length) == ' ')
                        {
                                theSelection = theSelection.substring(0, theSelection.length-1);
                                fin = fin + " ";
                        }
                        if (theSelection.substring(0,1) == '{' && debut.substring(0,1) == '{')
                        {
                                debut = debut + " ";
                        }
                        if (theSelection.substring(theSelection.length-1, theSelection.length) == '}' && fin.substring(0,1) == '}')
                        {
                                fin = " " + fin;
                        }

                        // Add tags around selection
                        document.selection.createRange().text = debut + theSelection + fin;
                        txtarea.focus();
                        theSelection = '';
                        return;
                }
        }
        else if (txtarea.selectionEnd && (txtarea.selectionEnd - txtarea.selectionStart > 0))
        {
                mozWrap(txtarea, debut, fin);
                return;
        }
}

function barre_demande(debut,milieu,fin,affich,champ) {
        var inserer = prompt(affich);

        if (inserer != null) {
                if (inserer == "") {inserer = "xxx"; }

                barre_raccourci(debut, milieu+inserer+fin, champ);
        }
}

function barre_inserer(text,champ) {
        var txtarea = champ;
        
        if (txtarea.createTextRange && txtarea.caretPos) {
                var caretPos = txtarea.caretPos;
                caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? caretPos.text + text + ' ' : caretPos.text + text;
                txtarea.focus();
        } else {
                //txtarea.value  += text;
                //txtarea.focus();
                mozWrap(txtarea, '', text);
                return;
        }
}


// D'apres Nicolas Hoizey 
function barre_tableau(toolbarfield)
{
        var txtarea = toolbarfield;
        txtarea.focus();
        var cols = prompt("Nombre de colonnes du tableau :", "");
        var rows = prompt("Nombre de lignes du tableau :", "");
        if (cols != null && rows != null) {
                var tbl = '';
                var ligne = '|';
                var entete = '|';
                for(i = 0; i < cols; i++) {
                        ligne = ligne + ' valeur |';
                        entete = entete + ' {{entete}} |';
                }
                for (i = 0; i < rows; i++) {
                        tbl = tbl + ligne + '\n';
                }
                if (confirm('Voulez vous ajouter une ligne d\'en-tĂȘte ?')) {
                        tbl = entete + '\n' + tbl;
                }
                if ((clientVer >= 4) && is_ie && is_win) {
                        var str = document.selection.createRange().text;
                        var sel = document.selection.createRange();
                        sel.text = str + '\n\n' + tbl + '\n\n';
                } else {
                        mozWrap(txtarea, '', "\n\n" + tbl + "\n\n");
                }
        }
        return;
}



// Shows the help messages in the helpline window
function helpline(help, champ) {
        champ.value = help;
}


function setCaretToEnd (input) {
  setSelectionRange(input, input.value.length, input.value.length);
}


function setSelectionRange(input, selectionStart, selectionEnd) {
  if (input.setSelectionRange) {
    input.focus();
    input.setSelectionRange(selectionStart, selectionEnd);
  }
  else if (input.createTextRange) {
    var range = input.createTextRange();
    range.collapse(true);
    range.moveEnd('character', selectionEnd);
    range.moveStart('character', selectionStart);
    range.select();
  }
}

// From http://www.massless.org/mozedit/
function mozWrap(txtarea, open, close)
{
        var selLength = txtarea.textLength;
        var selStart = txtarea.selectionStart;
        var selEnd = txtarea.selectionEnd;
        if (selEnd == 1 || selEnd == 2)
                selEnd = selLength;
        var selTop = txtarea.scrollTop;

        // Raccourcir la selection par double-clic si dernier caractere est espace      
        if (selEnd - selStart > 0 && (txtarea.value).substring(selEnd-1,selEnd) == ' ') selEnd = selEnd-1;
        
        var s1 = (txtarea.value).substring(0,selStart);
        var s2 = (txtarea.value).substring(selStart, selEnd)
        var s3 = (txtarea.value).substring(selEnd, selLength);

        // Eviter melange bold-italic-intertitre
        if ((txtarea.value).substring(selEnd,selEnd+1) == '}' && close.substring(0,1) == "}") close = close + " ";
        if ((txtarea.value).substring(selEnd-1,selEnd) == '}' && close.substring(0,1) == "}") close = " " + close;
        if ((txtarea.value).substring(selStart-1,selStart) == '{' && open.substring(0,1) == "{") open = " " + open;
        if ((txtarea.value).substring(selStart,selStart+1) == '{' && open.substring(0,1) == "{") open = open + " ";

        txtarea.value = s1 + open + s2 + close + s3;
        selDeb = selStart + open.length;
        selFin = selEnd + close.length;
        window.setSelectionRange(txtarea, selDeb, selFin);
        txtarea.scrollTop = selTop;
        txtarea.focus();
        
        return;
}

// Insert at Claret position. Code from
// http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130
     function storeCaret (textEl) {
       if (textEl.createTextRange) 
         textEl.caretPos = document.selection.createRange().duplicate();
     }