402 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			402 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| <!-- // Hide from older browsers
 | |
| /* $Id$ */
 | |
| /*
 | |
| # Copyright (c) 2003-2005, Jannis Hermanns (on behalf the Serendipity Developer Team)
 | |
| # All rights reserved.  See LICENSE file for licensing details
 | |
| */
 | |
| 
 | |
| /*
 | |
|     Written by chris wetherell
 | |
|     http://www.massless.org
 | |
|     chris [THE AT SIGN] massless.org
 | |
| 
 | |
|     warning: it only works for IE4+/Win and Moz1.1+
 | |
|     feel free to take it for your site
 | |
|     if there are any problems, let chris know.
 | |
| */
 | |
| 
 | |
| var thisForm;
 | |
| 
 | |
| function getMozSelection(txtarea) {
 | |
|     var selLength = txtarea.textLength;
 | |
|     var selStart = txtarea.selectionStart;
 | |
|     var selEnd = txtarea.selectionEnd;
 | |
| 
 | |
|     if (selEnd==1 || selEnd==2) {
 | |
|         selEnd=selLength;
 | |
|     }
 | |
|     return (txtarea.value).substring(selStart, selEnd);
 | |
| }
 | |
| 
 | |
| function getIESelection(txtarea) {
 | |
|     return document.selection.createRange().text;
 | |
| }
 | |
| 
 | |
| function mozWrap(txtarea, lft, rgt) {
 | |
|     var selLength = txtarea.textLength;
 | |
|     var selStart = txtarea.selectionStart;
 | |
|     var selEnd = txtarea.selectionEnd;
 | |
| 
 | |
|     if (txtarea.setSelectionRange) {
 | |
|         if (selEnd==1 || selEnd==2) selEnd=selLength;
 | |
|         var s1 = (txtarea.value).substring(0,selStart);
 | |
|         var s2 = (txtarea.value).substring(selStart, selEnd)
 | |
|         var s3 = (txtarea.value).substring(selEnd, selLength);
 | |
|         txtarea.value = s1 + lft + s2 + rgt + s3;
 | |
|     } else {
 | |
|         txtarea.value = txtarea.value + ' ' + lft + rgt + ' ';
 | |
|     }
 | |
| }
 | |
| 
 | |
| function IEWrap(txtarea, lft, rgt) {
 | |
|     strSelection = document.selection.createRange().text;
 | |
|     if (strSelection != "") {
 | |
|         document.selection.createRange().text = lft + strSelection + rgt;
 | |
|     } else {
 | |
|         txtarea.value = txtarea.value + lft + rgt;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function wrapSelection(txtarea, lft, rgt) {
 | |
|     scrollPos = false;
 | |
|     if (txtarea.scrollTop) {
 | |
|         scrollPos = txtarea.scrollTop;
 | |
|     }
 | |
| 
 | |
|     if (document.all) {
 | |
|         IEWrap(txtarea, lft, rgt);
 | |
|     } else if (document.getElementById) {
 | |
|         mozWrap(txtarea, lft, rgt);
 | |
|     }
 | |
|     
 | |
|     if (scrollPos) {
 | |
|         txtarea.focus();
 | |
|         txtarea.scrollTop = scrollPos;
 | |
|     }
 | |
| }
 | |
| 
 | |
| function wrapSelectionWithLink(txtarea) {
 | |
|     var my_link = prompt("Enter URL:","http://");
 | |
| 
 | |
|     if (document.all && getIESelection(txtarea) == "" ||
 | |
|          document.getElementById && getMozSelection(txtarea) == "") {
 | |
|         var my_desc = prompt("Enter Description", '');
 | |
|     }
 | |
| 
 | |
|     var my_title = prompt("Enter title/tooltip:", "");
 | |
| 
 | |
|     html_title = "";
 | |
|     if (my_title != "" && my_title != null) {
 | |
|         html_title = ' title="' + my_title + '"';
 | |
|     }
 | |
| 
 | |
|     if (my_link != null) {
 | |
|         lft = "<a href=\"" + my_link + "\"" + html_title + ">";
 | |
|         if (my_desc != null && my_desc != "") {
 | |
|             rgt = my_desc + "</a>";
 | |
|         } else {
 | |
|             rgt = "</a>";
 | |
|         }
 | |
|         wrapSelection(txtarea, lft, rgt);
 | |
|     }
 | |
| 
 | |
|     return;
 | |
| }
 | |
| /* end chris w. script */
 | |
| 
 | |
| function mozInsert(txtarea, str) {
 | |
|     var selLength = txtarea.textLength;
 | |
|     var selStart = txtarea.selectionStart;
 | |
|     var selEnd = txtarea.selectionEnd;
 | |
|     if (selEnd==1 || selEnd==2) {
 | |
|         selEnd=selLength;
 | |
|     }
 | |
|     var s1 = (txtarea.value).substring(0,selStart);
 | |
|     var s2 = (txtarea.value).substring(selStart, selEnd)
 | |
|     var s3 = (txtarea.value).substring(selEnd, selLength);
 | |
|     txtarea.value = s1 + str + s2 + s3;
 | |
| }
 | |
| 
 | |
| function wrapInsImage(area) {
 | |
|     var loc = prompt('Enter the Image Location: ');
 | |
|     if (!loc) {
 | |
|         return;
 | |
|     }
 | |
|     mozInsert(area,'<img src="'+ loc + '" alt="" />');
 | |
| }
 | |
| 
 | |
| /* end Better-Editor functions */
 | |
| 
 | |
| function serendipity_insImage (area) {
 | |
|     var loc = prompt('Enter the Image Location: ');
 | |
|     if (!loc) {
 | |
|         area.focus();
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     area.value = area.value + '<img src="' + loc + '" alt="" />';
 | |
|     area.focus();
 | |
| }
 | |
| 
 | |
| function serendipity_insBasic (area, tag) {
 | |
|     area.value = area.value + "<" + tag + "></" + tag + ">";
 | |
|     area.focus();
 | |
| }
 | |
| 
 | |
| function serendipity_insLink (area) {
 | |
|     var loc      = prompt('Enter URL Location: ');
 | |
|     var text     = prompt('Enter Description: ');
 | |
|     var my_title = prompt("Enter title/tooltip:", "");
 | |
| 
 | |
|     if (!loc) {
 | |
|         area.focus();
 | |
|         return;
 | |
|     }
 | |
| 
 | |
|     html_title = "";
 | |
|     if (my_title != "" && my_title != null) {
 | |
|         html_title = ' title="' + my_title + '"';
 | |
|     }
 | |
| 
 | |
|     area.value = area.value + '<a href="' + loc + '"' + html_title + '>' + (text ? text : loc) + '</a>';
 | |
|     area.focus();
 | |
| }
 | |
| 
 | |
| function serendipity_imageSelector_addToElement (str, el)
 | |
| {
 | |
|     document.getElementById(el).value = str;
 | |
|     if (document.getElementById(el).type != 'hidden' && document.getElementById(el).focus) {
 | |
|         document.getElementById(el).focus();
 | |
|     }
 | |
|     if (document.getElementById(el).onchange) {
 | |
|         document.getElementById(el).onchange();
 | |
|     }
 | |
| }
 | |
| 
 | |
| function serendipity_imageSelector_addToBody (str, textarea)
 | |
| {
 | |
| 
 | |
|     // check for FCKEditor usage
 | |
|     if (typeof(FCKeditorAPI) != 'undefined') {
 | |
| 
 | |
|         // if here the blog uses FCK editor
 | |
|         var oEditor = FCKeditorAPI.GetInstance('serendipity[' + textarea + ']') ;
 | |
| 
 | |
|         if (oEditor.EditMode == FCK_EDITMODE_WYSIWYG) {
 | |
|             // if here the editior is in WYSIWYG mode so use the insert html function
 | |
|             oEditor.InsertHtml(str);
 | |
|         } else {
 | |
|             // if here just insert the text to the textarea ( named with the value of textarea variable )
 | |
|             noWysiwygAdd( str, textarea );
 | |
|         }
 | |
|     
 | |
|     } else if(typeof(xinha_editors) != 'undefined') {
 | |
| 
 | |
|         // if here the blog uses Xinha editor
 | |
|         var oEditor;
 | |
| 
 | |
|         if (typeof(xinha_editors['serendipity[' + textarea + ']']) != 'undefined') {
 | |
|             // this is good for the two default editors (body & extended)
 | |
|             oEditor = xinha_editors['serendipity['+ textarea +']'];
 | |
|         } else if (typeof(xinha_editors[textarea]) != 'undefined') {
 | |
|             // this should work in any other cases than previous one
 | |
|             oEditor = xinha_editors[textarea];
 | |
|         } else {
 | |
|             // this is the last chance to retrieve the instance of the editor !
 | |
|             // editor has not been registered by the name of it's textarea
 | |
|             // so we must iterate over editors to find the good one
 | |
|             for (var editorName in xinha_editors) {
 | |
|                 if ('serendipity[' + textarea + ']' == xinha_editors[editorName]._textArea.name) {
 | |
|                     oEditor = xinha_editors[editorName];
 | |
|                     break;
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
| 
 | |
|         // the actual insert for the xinha editor
 | |
|         if (oEditor) {
 | |
|             if (oEditor._editMode != 'textmode') {
 | |
|                 // if here the editior is in WYSIWYG mode so use the insert html function
 | |
|                 oEditor.insertHTML(str);
 | |
|             } else {
 | |
|                 // if here just insert the text to the textarea ( named with the value of textarea variable )
 | |
|                 noWysiwygAdd(str, textarea);
 | |
|             }
 | |
|         } else {
 | |
|             noWysiwygAdd(str, textarea);
 | |
|         }
 | |
|     } else if(typeof(HTMLArea) != 'undefined') {
 | |
|         // if here the blog uses HTMLArea editor
 | |
|         var oEditor;
 | |
| 
 | |
|         if (textarea == 'body' && typeof(editorbody) != 'undefined') {
 | |
|             oEditor = editorbody;
 | |
|         } else if (textarea == 'extended' && typeof(editorextended) != 'undefined') {
 | |
|             oEditor = editorextended;
 | |
|         } else if (typeof(htmlarea_editors) != 'undefined' && typeof(htmlarea_editors[textarea]) != 'undefined') {
 | |
|             oEditor =  htmlarea_editors[textarea];
 | |
|         }
 | |
| 
 | |
|         // the actual insert for the HTMLArea editor
 | |
|         if (oEditor._editMode != 'textmode') {
 | |
|             // if here the editior is in WYSIWYG mode so use the insert html function
 | |
|             oEditor.insertHTML(str);
 | |
|         } else {
 | |
|             // if here just insert the text to the textarea ( named with the value of textarea variable )
 | |
|             noWysiwygAdd(str, textarea);
 | |
|         }
 | |
|     
 | |
|     } else if(typeof(TinyMCE) != 'undefined') {
 | |
|         // for the TinyMCE editor we do not have a text mode insert
 | |
| 
 | |
|         //tinyMCE.execCommand('mceInsertContent', false, str);
 | |
|         tinyMCE.execInstanceCommand('serendipity[' + textarea + ']', 'mceInsertContent', false, str);
 | |
|     } else  {
 | |
|         noWysiwygAdd(str, textarea);
 | |
|     }
 | |
| }
 | |
| 
 | |
| // The noWysiwygAdd JS function is the vanila serendipity_imageSelector_addToBody js function which works fine in NO WYSIWYG mode
 | |
| // NOTE: the serendipity_imageSelector_addToBody could add any valid HTML string to the textarea
 | |
| function noWysiwygAdd( str, textarea )
 | |
| {
 | |
|     // default case: no wysiwyg editor
 | |
|     eltarget = '';
 | |
|     if (document.forms['serendipityEntry'] && document.forms['serendipityEntry']['serendipity['+ textarea +']']) {
 | |
|         eltarget = document.forms['serendipityEntry']['serendipity['+ textarea +']']
 | |
|     } else if (document.forms['serendipityEntry'] && document.forms['serendipityEntry'][textarea]) {
 | |
|         eltarget = document.forms['serendipityEntry'][textarea];
 | |
|     } else {
 | |
|         eltarget = document.forms[0].elements[0];
 | |
|     }
 | |
|     
 | |
|     wrapSelection(eltarget, str, '');
 | |
|     eltarget.focus();
 | |
| }
 | |
| 
 | |
| 
 | |
| function serendipity_imageSelector_done(textarea)
 | |
| {
 | |
|     var insert = '';
 | |
|     var img = '';
 | |
|     var src = '';
 | |
|     var alt = '';
 | |
|     var title = '';
 | |
| 
 | |
|     var f = document.forms['serendipity[selForm]'].elements;
 | |
| 
 | |
|     if (f['serendipity[linkThumbnail]'] && f['serendipity[linkThumbnail]'][0].checked == true) {
 | |
|         img       = f['thumbName'].value;
 | |
|         imgWidth  = f['imgThumbWidth'].value;
 | |
|         imgHeight = f['imgThumbHeight'].value;
 | |
|     } else {
 | |
|         img       = f['imgName'].value;
 | |
|         imgWidth  = f['imgWidth'].value;
 | |
|         imgHeight = f['imgHeight'].value;
 | |
|     }
 | |
| 
 | |
|     if (f['serendipity[filename_only]']) {
 | |
|         if (f['serendipity[htmltarget]']) {
 | |
|             starget = f['serendipity[htmltarget]'].value;
 | |
|         } else {
 | |
|             starget = 'serendipity[' + textarea + ']';
 | |
|         }
 | |
| 
 | |
|         if (f['serendipity[filename_only]'].value == 'true') {
 | |
|             parent.self.opener.serendipity_imageSelector_addToElement(img, f['serendipity[htmltarget]'].value);
 | |
|             parent.self.close();
 | |
|             return true;
 | |
|         } else if (f['serendipity[filename_only]'].value == 'id') {
 | |
|             parent.self.opener.serendipity_imageSelector_addToElement(f['imgID'].value, starget);
 | |
|             parent.self.close();
 | |
|             return true;
 | |
|         } else if (f['serendipity[filename_only]'].value == 'thumb') {
 | |
|             parent.self.opener.serendipity_imageSelector_addToElement(f['thumbName'].value, starget);
 | |
|             parent.self.close();
 | |
|             return true;
 | |
|         } else if (f['serendipity[filename_only]'].value == 'big') {
 | |
|             parent.self.opener.serendipity_imageSelector_addToElement(f['imgName'].value, starget);
 | |
|             parent.self.close();
 | |
|             return true;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     alt = f['serendipity[alt]'].value.replace(/"/g, """);
 | |
|     title = f['serendipity[title]'].value.replace(/"/g, """);
 | |
|     
 | |
|     styled = false; // Templates now do this.
 | |
| 
 | |
|     imgID = 0;
 | |
|     if (f['imgID']) {
 | |
|         imgID = f['imgID'].value;
 | |
|     }
 | |
|     baseURL = '';
 | |
|     if (f['baseURL']) {
 | |
|         baseURL = f['baseURL'].value;
 | |
|     }
 | |
| 
 | |
|     floating = 'center';
 | |
|     if (f['serendipity[align]'][0].checked == true) {
 | |
|         img = "<!-- s9ymdb:" + imgID + " --><img class=\"serendipity_image_center\" width=\"" + imgWidth + "\" height=\"" + imgHeight + "\" " + (styled ? 'style="border: 0px; padding-left: 5px; padding-right: 5px;"' : '') + ' src="' + img + "\" " + (title != '' ? 'title="' + title + '"' : '') + " alt=\"" + alt + "\" />";
 | |
|     } else if (f['serendipity[align]'][1].checked == true) {
 | |
|         img = "<!-- s9ymdb:" + imgID + " --><img class=\"serendipity_image_left\" width=\"" + imgWidth + "\" height=\"" + imgHeight + "\" " + (styled ? 'style="float: left; border: 0px; padding-left: 5px; padding-right: 5px;"' : '') + ' src="' + img + "\" " + (title != '' ? 'title="' + title + '"' : '') + " alt=\"" + alt + "\" />";
 | |
|         floating = 'left';
 | |
|     } else if (f['serendipity[align]'][2].checked == true) {
 | |
|         img = "<!-- s9ymdb:" + imgID + " --><img class=\"serendipity_image_right\" width=\"" + imgWidth + "\" height=\"" + imgHeight + "\" " + (styled ? 'style="float: right; border: 0px; padding-left: 5px; padding-right: 5px;"' : '') + ' src="' + img + "\" " + (title != '' ? 'title="' + title + '"' : '') + " alt=\"" + alt + "\" />";
 | |
|         floating = 'right';
 | |
|     }
 | |
| 
 | |
|     if (f['serendipity[isLink]'][1].checked == true) {
 | |
|         if (f['serendipity[target]'].selectedIndex) {
 | |
|             targetval = f['serendipity[target]'].options[f['serendipity[target]'].selectedIndex].value;
 | |
|         } else {
 | |
|             targetval = '';
 | |
|         }
 | |
| 
 | |
|         prepend   = '';
 | |
|         ilink     = f['serendipity[url]'].value;
 | |
|         if (!targetval || targetval == 'none') {
 | |
|             itarget = '';
 | |
|         } else if (targetval == 'js') {
 | |
|             itarget = ' onclick="F1 = window.open(\'' + f['serendipity[url]'].value + '\',\'Zoom\',\''
 | |
|                     + 'height=' + (parseInt(f['imgHeight'].value) + 15) + ','
 | |
|                     + 'width='  + (parseInt(f['imgWidth'].value)  + 15) + ','
 | |
|                     + 'top='    + (screen.height - f['imgHeight'].value) /2 + ','
 | |
|                     + 'left='   + (screen.width  - f['imgWidth'].value)  /2 + ','
 | |
|                     + 'toolbar=no,menubar=no,location=no,resize=1,resizable=1,scrollbars=yes\'); return false;"';
 | |
|         } else if (targetval == '_blank') {
 | |
|             itarget = ' target="_blank"';
 | |
|         } else if (targetval == 'plugin') {
 | |
|             itarget = ' id="s9yisphref' + imgID + '" onclick="javascript:this.href = this.href + \'&serendipity[from]=\' + self.location.href;"';
 | |
|             prepend = '<a title="' + ilink + '" id="s9yisp' + imgID + '"></a>';
 | |
|             ilink   = baseURL + 'serendipity_admin_image_selector.php?serendipity[step]=showItem&serendipity[image]=' + imgID;
 | |
|         }
 | |
| 
 | |
|         insert = prepend + "<a class=\"serendipity_image_link\" " + (title != '' ? 'title="' + title + '"' : '') + " href='" + ilink + "'" + itarget + ">" + img + "</a>";
 | |
|     } else {
 | |
|         insert = img;
 | |
|     }
 | |
| 
 | |
|     if (document.getElementById('serendipity_imagecomment').value != '') {
 | |
|         comment = f['serendipity[imagecomment]'].value;
 | |
|         block = '<div class="serendipity_imageComment_' + floating + '" style="width: ' + imgWidth + 'px">'
 | |
|               +     '<div class="serendipity_imageComment_img">' + insert + '</div>'
 | |
|               +     '<div class="serendipity_imageComment_txt">' + comment + '</div>'
 | |
|               + '</div>';
 | |
|     } else {
 | |
|         block = insert;
 | |
|     }
 | |
| 
 | |
|     if (typeof(parent.self.opener.htmlarea_editors) != 'undefined' && typeof(parent.self.opener.htmlarea_editors[textarea]) != 'undefined') {
 | |
|         parent.self.opener.htmlarea_editors[textarea].surroundHTML(block, '');
 | |
|     } else if (parent.self.opener.editorref) {
 | |
|         parent.self.opener.editorref.surroundHTML(block, '');
 | |
|     } else {
 | |
|         parent.self.opener.serendipity_imageSelector_addToBody(block, textarea);
 | |
|     }
 | |
| 
 | |
|     parent.self.close();
 | |
| }
 | |
| 
 | |
| // -->
 |