/** * @param {object} oDictionary Object containing properties as keys and its values as captions * @return void * * @copyright Amiro.CMS. All rights reserved. Changes are not allowed. */ function amiDictionary(oDictionary){ /** * @var {object} */ this.oDictionary = typeof(oDictionary) == 'object' ? oDictionary : {}; /** * Set single caption * * @param {string} key * @param {string} caption * @return void */ this.set = function(key, caption){ this.oDictionary[key] = caption; } /** * Append only new captions to dictionary * * @param {object} oDictionary Object containing properties as keys and its values as captions * @return void */ this.append = function(oDictionary){ for(var key in oDictionary){ if(typeof(this.oDictionary[key]) == 'undefined'){ this.oDictionary[key] = oDictionary[key]; } } } /** * Append new captions, override obsolete * * @param {object} oDictionary Object containing properties as keys and its values as captions * @return void */ this.megre = function(oDictionary){ for(var key in oDictionary){ this.oDictionary[key] = oDictionary[key]; } } /** * Get caption by key * * @param {string} key * @return {string} | null */ this.get = function(key){ if(typeof(this.oDictionary[key]) == 'undefined'){ if(typeof(console) == 'object' && typeof(console.warn) == 'function'){ // firebug debugging console.warn("Undefined dictionary key '" + key + "'"); console.trace(); } return null; }else{ return this.oDictionary[key]; } } /** * Parse caption specified by key using variables * * @param {string} key * @param {object} oVariables Object containing properties as keys and its values as captions * @return {string} | null */ this.parse = function(key, oVariables){ var caption = this.get(key); if(caption){ for(var variable in oVariables){ caption = caption.replace('_' + variable + '_', oVariables[variable]); } } return caption; } } /** * Amiro.CMS text editor * * @param {string} Global variable name * @param {amiDictionary} oDictionary * * Textarea editor with pseudo codes and preview support * @version 1.0. Last changes: 25/05/2010 * @copyright Amiro.CMS. All rights reserved. Changes are not allowed. */ function amiroTEdit(varName, oDictionary){ this.isInitialized = false; this.currentMode = 'editor'; this.varName = varName; this.editorId = ''; this.idPreviewDiv = 'amiroTEdDivPreview'; this.previewButtonObj = undefined; this.editorObj = false; this.oDictionary = (oDictionary == undefined ? {} : oDictionary); this.isIE = true; this.useNoIndex = false; this.fontHeight = 15; this.regTextAreaResizeY = 0; this.editorModeCode = false; this.updatePreviewMode = ''; this.allowedImages = []; this.bAllowURLs = true; this.aTags = { 'empty' : ['', ''], 'bold' : ['[B]', '[/B]'], 'indent' : ['[INDENT]', '[/INDENT]'], 'code' : ['[CODE]', '[/CODE]'], 'italic' : ['[I]', '[/I]'], 'underlined' : ['[U]', '[/U]'], 'quote' : ['[Q]', '[Q="#\#value#\#"]', '[/Q]'], 'align:left' : ['[LEFT]', '[/LEFT]'], 'align:right' : ['[RIGHT]', '[/RIGHT]'], 'align:center' : ['[CENTER]', '[/CENTER]'], 'align:justify': ['[JUSTIFY]', '[/JUSTIFY]'], 'ulist' : ['[LIST]', '\n[/LIST]'], 'ulist_item' : ['\n[*]', ''], 'addlink' : ['[URL="#\#value#\#"]', '[/URL]'], 'addimg' : ['[IMG]', '[/IMG]'], 'font_family' : ['[FONT="#\#value#\#"]', '[/FONT]'], 'font_size' : ['[SIZE="#\#value#\#"]', '[/SIZE]'], 'font_color' : ['[COLOR="#\#value#\#"]', '[/COLOR]'], 'smile' : ['', ''] }; this.usedFonts = ['Times New Roman','Georgia','Arial','Arial Black','Arial Narrow','Book Antiqua','Comic Sans MS','Courier New','Lucida Concole','Tahoma','Verdana']; this.maxTextSize = 7; this.usedColors = ['Black','Sienna','DarkOliveGreen','DarkGreen','DarkSlateBlue','Navy','Indigo','DarkSlateGray','DarkRed','DarkOrange','Olive','Green','Teal','Blue','SlateGray','DimGray','Red','SandyBrown','YellowGreen','SeaGreen','MediumTurquoise','RoyalBlue','Purple','Gray','Magenta','Orange','Yellow','Lime','Cyan','DeepSkyBlue','DarkOrchid','Silver','Pink','Wheat','LemonChiffon','PaleGreen','PaleTurquoise','LightBlue','Plum','White']; this.smilesPath = 'base'; this.baseSmiles = [new Array('smile.gif', 'Smile', ':)'),new Array('laugh.gif', 'Laugh', ':D'),new Array('frown.gif', 'Frown', ':('),new Array('wink.gif', 'Wink', ';)'),new Array('blush.gif', 'Blush', ':blush:'),new Array('eek.gif', 'Eek', ':eek:'),new Array('pardon.gif', 'Pardon', ':pardon:'),new Array('cry.gif', 'Cry', ':cry:'),new Array('cool.gif', 'Cool', ':cool:'),new Array('angry.gif', 'Angry', ':angry:'),new Array('finger_up.gif', 'Thumbs up', ':finger_up:'),new Array('finger_down.gif', 'Thumbs down', ':finger_down:'),new Array('rose.gif', 'Rose', ':rose:')]; this.allSmiles = []; this.allSmilesTitles = {'': ''}; this.smilesCopyright = ''; this.baseHref = typeof(frontBaseHref) != 'undefined' ? frontBaseHref : (typeof(editorBaseHref) != 'undefined' ? editorBaseHref : ''); window.bbEditorBaseHref = this.baseHref; this.init = function(){ userAgent = navigator.userAgent.toLowerCase(); this.isIE = userAgent.indexOf('msie') != -1 && userAgent.indexOf('opera') == -1 && typeof(window.opera) == 'undefined'; if(typeof(this.oDictionary) != 'object' || this.oDictionary.length == 0){ this.oDictionary = new amiDictionary({ 'bold': 'Bold', 'italic': 'Italic', 'underline': 'Underline', 'quote': 'Quote', 'align_left': 'Align left', 'align_center': 'Align center', 'align_right': 'Align right', 'justify': 'Justify', 'insert_list': 'Insert list', 'insert_link': 'Insert link', 'delete_link': 'Delete link', 'insert_image': 'Insert image', 'font': 'Font', 'size': 'Size', 'color': 'Color', 'more': 'more', 'insert_code': 'Insert code', 'indent': 'Indent', 'outdent': 'Outdent', 'preview': 'Preview', 'hide_preview': 'Hide preview', 'update_preview': 'Update preview', 'warn_message_length': 'Message to short!', 'warn_invalid_image_url': 'Invalid image URL!', 'warn_image_url_internal_links_forbidden': 'Images from this site are forbidden!', 'warn_image_url_external_links_forbidden': 'Images from other sites are forbidden!', 'prompt_enter_list_element': 'Enter list element', 'prompt_enter_next_list_element': 'Enter list element or leave field empty to finish', 'prompt_enter_url': 'Enter URL', 'prompt_enter_image_url': 'Enter image URL', 'warn_urls_reg_only': 'Using URLs forbidden for unregistered users.' }); } for(i = 0; i < this.baseSmiles.length; i++){ this.allSmilesTitles[this.baseSmiles[i][0]] = this.baseSmiles[i][1]; } for(i = 0; i < this.allSmiles.length; i++){ this.allSmilesTitles[this.allSmiles[i][0]] = this.allSmiles[i][1]; } } this.setUseNoindex = function(noindexState){ this.useNoIndex = noindexState; } this.setFontHeight = function(fontHeight){ this.fontHeight = fontHeight; } this.procAction = function(action, subaction){ var res = false; if(this.isInitialized){ if(this._procAction(action, subaction)){ res = true; } } return res; } this._procAction = function(action, subaction){ var success = false; switch(action){ case 'bold': case 'italic': case 'underlined': case 'code': case 'indent': this._boundSelectionWithTags(this.aTags[action]); success = true; break; case 'outdent': var selTxt = this._getSelectedText(); if(selTxt != '' && selTxt.indexOf('[INDENT]') != -1 && selTxt.indexOf('[/INDENT]') != -1){ selTxt = selTxt.replace(/\[INDENT\]((.|\r|\n)*?)\[\/INDENT\]/g, '$1'); this._boundSelectionWithTags(this.aTags['empty'], selTxt); success = true; } break; case 'quote': if(typeof(subaction) == "undefined"){ subaction = ""; } var selTxt = this._getSelectedText(); var tmpTags = [subaction.length == 0 ? this.aTags['quote'][0] : this.aTags['quote'][1], this.aTags['quote'][2]]; subaction = subaction.replace(/<[a-zA-Z\/].*?>/g, ''); selTxt = selTxt.replace(/<[a-zA-Z\/].*?>/g, ''); tmpTags[0] = tmpTags[0].replace(/#\#value#\#/g, subaction.replace(/"/g, '"')); this._boundSelectionWithTags(tmpTags, selTxt); success = true; break; case 'align': if(subaction != undefined && this.aTags['align:'+subaction]){ this._boundSelectionWithTags(this.aTags['align:'+subaction]); success = true; } break; case 'ulist': var selTxt = this._getSelectedText(); if(selTxt != ''){ this._procSelectionList(selTxt); }else{ this._boundSelectionWithTags(this.aTags['ulist']); var listLine = ''; listLine = prompt(this.oDictionary.get('prompt_enter_list_element'), ''); while(listLine != '' && listLine != null){ this._boundSelectionWithTags(this.aTags['ulist_item'], listLine, true); listLine = prompt(this.oDictionary.get('prompt_enter_next_list_element'), ''); } } success = true; break; case 'addlink': if(this.bAllowURLs){ urlLine = prompt(this.oDictionary.get('prompt_enter_url'), 'http://'); if(urlLine != '' && urlLine != null){ var selTxt = this._getSelectedText(); var tmpTags = [this.aTags['addlink'][0], this.aTags['addlink'][1]]; tmpTags[0] = tmpTags[0].replace(/#\#value#\#/g, urlLine.replace(/"/g, '"')); selTxt = selTxt == '' ? urlLine : selTxt; this._boundSelectionWithTags(tmpTags, selTxt); success = true; } }else{ alert(this.oDictionary.get('warn_urls_reg_only')); } break; case 'dellink': var selTxt = this._getSelectedText(); if(selTxt != '' && selTxt.indexOf('[URL') != -1 && selTxt.indexOf('[/URL]') != -1){ selTxt = selTxt.replace(/\[URL=\".*?\"\]/g, ''); selTxt = selTxt.replace(/\[\/URL\]/g, ''); this._boundSelectionWithTags(this.aTags['empty'], selTxt); success = true; } break; case 'addimg': var urlLine = 'http://'; do { urlLine = prompt(this.oDictionary.get('prompt_enter_image_url'), urlLine); askURL = urlLine != null; if (askURL) { urlLine = urlLine.replace(/^(.*?)\?.*$/, '$1'); if (urlLine != '') { var allowedImages = this.allowedImages; var re = /^https?\:\/\/([^\/]+)(\/[^\?]*)(\?.*)?/; re.exec(urlLine); if (RegExp.$2 == '' || RegExp.$1 == '') { alert(this.oDictionary.get('warn_invalid_image_url')); } else if (allowedImages.indexOf('internal_links') < 0 && urlLine.indexOf(this.baseHref) == 0) { alert(this.oDictionary.get('warn_image_url_internal_links_forbidden')); } else if (allowedImages.indexOf('external_links') < 0 && urlLine.indexOf(this.baseHref) != 0) { alert(this.oDictionary.get('warn_image_url_external_links_forbidden')); } else { var tmpTags = [this.aTags['addimg'][0], this.aTags['addimg'][1]]; this._boundSelectionWithTags(tmpTags, urlLine); success = true; askURL = false; } } } } while (askURL); break; case 'font_family': case 'font_size': case 'font_color': if(subaction != undefined && subaction != ''){ var tmpTags = [this.aTags[action][0], this.aTags[action][1]]; tmpTags[0] = tmpTags[0].replace(/#\#value#\#/g, subaction); this._boundSelectionWithTags(tmpTags); success = true; } break; case 'smile': if(subaction != undefined){ this._boundSelectionWithTags(this.aTags['smile'], subaction, true); success = true; } break; } this.updatePreviewButton(); return success; } this._boundSelectionWithTags = function(pTags, text, setPointerToEnd){ if(pTags[0] == undefined) pTags[0] = ''; if(pTags[1] == undefined) pTags[1] = ''; if(text == undefined) text = this._getSelectedText(); this._replaceSelection(pTags[0]+text+pTags[1], pTags[0].length, pTags[1].length, setPointerToEnd); } this._procSelectionList = function(text){ // Try to understand next regexp ;-). From start of string any not empty string which does not start from [/?LIST] or [*] text = text.replace(/(^|\n)(?!(\r?\n)|(\[\/?LIST\])|(\[\*\]))/g, this.aTags['ulist_item'][0]); this._boundSelectionWithTags(this.aTags['ulist'], text); } this._calcMultiLineTextLen = function(text){ if(this.isIE){ text = text.replace(/\r/g, ''); } return text.length; } this._getSelectedText = function(){ var text = ''; this.editorObj.focus(); if(document.selection && document.selection.createRange()){ var sRange = document.selection.createRange(); text = sRange.text; }else if(typeof(this.editorObj.selectionStart) != undefined){ var sStart = parseInt(this.editorObj.selectionStart); var sEnd = parseInt(this.editorObj.selectionEnd); text = this.editorObj.value; text = text.substr(sStart, sEnd-sStart); } return text; } this._replaceSelection = function(newText, newSelDl, newSelDr, setPointerToEnd){ this.editorObj.focus(); if(document.selection && document.selection.createRange()){ var sRange = document.selection.createRange(); sRange.text = newText.replace(/\r?\n/g, '\r\n'); if(setPointerToEnd) sRange.moveStart('character', -newSelDr); else sRange.moveStart('character', -this._calcMultiLineTextLen(newText)+newSelDl); sRange.moveEnd('character', -newSelDr); sRange.select(); }else if(typeof(this.editorObj.selectionStart) != undefined){ var sStart = parseInt(this.editorObj.selectionStart); var sEnd = parseInt(this.editorObj.selectionEnd); var sTop = this.editorObj.scrollTop; var sText = this.editorObj.value; this.editorObj.value = sText.substr(0, sStart)+newText+sText.substr(sEnd); if(setPointerToEnd) this.editorObj.selectionStart = sStart+newText.length-newSelDr; else this.editorObj.selectionStart = sStart+newSelDl; this.editorObj.selectionEnd = sStart+newText.length-newSelDr; this.editorObj.scrollTop = sTop; } } this.regTextAreaResize = function(clientY){ this.regTextAreaResizeY = clientY; globalATEObj = this; document.onmousemove = handleMouseMove; document.onmouseup = releaseMouseMoveHandler; return false; } this.handleMouseMove = function(clientY){ if(this.regTextAreaResizeY > 0){ var reqHeight = this.editorObj.offsetHeight-this.regTextAreaResizeY+clientY; if(reqHeight > 50){ this.editorObj.style.height = reqHeight; this.regTextAreaResizeY = clientY; } } return false; } this._HTMLSpecialChars = function(taValue){ taValue = taValue.replace(/&/g, '&'); taValue = taValue.replace(/"/g, '"'); taValue = taValue.replace(//g, '>'); return taValue; } this.getHTMLContent = function(cutLongURL){ var smilesPath = this.baseHref + '_mod_files/smiles/' + this.smilesPath + '/'; var specSmiles = {";)":"wink", ":)":"smile", ":D":"laugh", ":(":"frown"}; var localUseNoIndex = this.useNoIndex; var fontHeight = this.fontHeight; taValue = this._HTMLSpecialChars(this.editorObj.value); taValue = taValue.replace(/\r?\n/g, '
\r\n'); taValue = taValue.replace(/\[(\/?)(B|I|U)\]/gi, '<$1$2>'); window.amiSimpleEditorCodes = []; taValue = taValue.replace(/\[CODE\]((?:.|\r|\n)*?)\[\/CODE\]/gi, function(allstr, tagContent){ tagContent = tagContent.replace(/
/gi, ''); var nlCount = 1; var nlPos = tagContent.indexOf('\n'); while(nlPos != -1){ nlCount++; nlPos = tagContent.indexOf('\n', nlPos+1); } if(nlCount > 10) nlCount = 10; var codeKey = window.amiSimpleEditorCodes.length; window.amiSimpleEditorCodes[codeKey] = tagContent; return '
CodeId_'+codeKey+'
'; }); taValue = taValue.replace(/\[Q\]/gi, '
'); taValue = taValue.replace(/\[Q="(.*?)"\]/gi, '
$1:
'); taValue = taValue.replace(/\[(\/?)(INDENT|Q)\]/gi, '<$1BLOCKQUOTE>'); taValue = taValue.replace(/\[(LEFT|RIGHT|CENTER|JUSTIFY)\]/gi, '

'); taValue = taValue.replace(/\[\/(LEFT|RIGHT|CENTER|JUSTIFY)\]/gi, '

'); taValue = taValue.replace(/\[LIST\]/gi, ''); taValue = taValue.replace(/\[\*\]/gi, '
  • '); taValue = taValue.replace(/\[FONT="(.*?)"\]/gi, function(allstr, fontName){return ''}); taValue = taValue.replace(/\[(COLOR|SIZE)="(.*?)"\]/gi, function(allstr, tagParam, paramValue){return ''}); taValue = taValue.replace(/\[\/(FONT|SIZE|COLOR)\]/gi, ''); var urlMaxLength = typeof(cutLongURL) == 'undefined' ? 0 : 50; taValue = taValue.replace(/\[URL="(.*?)"\]((?:.|\r|\n)*?)\[\/URL\]/gi, function(allstr, url, linkContent){ var curUseNoIndex = localUseNoIndex; var curUrl = _tagsParamReplace(url, false); if(curUseNoIndex && (!curUrl.match(/^https?:\/\//i) || (window.bbEditorBaseHref.length > 0 && curUrl.indexOf(window.bbEditorBaseHref) >= 0))) curUseNoIndex = false; var attributes = ''; linkContent = _trim(linkContent); var noTagsLinkContent = _trim(_stripTags(linkContent).replace(/\"/g, '"')); if ((urlMaxLength > 0) && (noTagsLinkContent.length > urlMaxLength)) { attributes = ' title="' + noTagsLinkContent + '"'; linkContent = noTagsLinkContent.substr(0, urlMaxLength - 8 - 3) + '...' + noTagsLinkContent.substr(noTagsLinkContent.length - 8); } return (curUseNoIndex ? '' : '')+''+linkContent+''+(curUseNoIndex ? '' : ''); }); var allSmilesTitles = this.allSmilesTitles; taValue = taValue.replace(/\[IMG\](.*?)\[\/IMG\]/gi, function(allstr, url){return ''}); taValue = taValue.replace(/(;\)|:\)|:D|:\()/g, function(allstr, smile){var imgName = specSmiles[smile]+'.gif'; return ''}); taValue = taValue.replace(/\:([a-z\_]{1,20})\:/gi, function(allstr, smile){var imgName = smile+'.gif'; return ''}); taValue = taValue.replace(/((?:)|(?:))/gi, function(allstr, pTagContent){ pTagContent = pTagContent.replace(/http(s?)\:/gi, 'htBREAKtp$1:'); pTagContent = pTagContent.replace(/www/gi, 'wBREAKwBREAKw'); return pTagContent; }); taValue = taValue.replace(/(https?:\/\/www\.|https?:\/\/|www\.)(?:[a-z0-9\-]+\.)+[a-z]{2,8}[^ \r\n\t'"><]*/gi, function(allstr, prefx){ var curUseNoIndex = localUseNoIndex; var curUrl = _tagsParamReplace(allstr); if(prefx.toLowerCase() == 'www.'){ curUrl = 'http://' + curUrl; } if(curUseNoIndex && (!curUrl.match(/^https?:\/\//i) || (window.bbEditorBaseHref.length > 0 && curUrl.indexOf(window.bbEditorBaseHref) >= 0))) curUseNoIndex = false; return (curUseNoIndex ? '' : '')+''+allstr+''+(curUseNoIndex ? '' : ''); }); taValue = taValue.replace(/((?:)|(?:))/gi, function(allstr, pTagContent){ pTagContent = pTagContent.replace(/wBREAKwBREAKw/gi, 'www'); pTagContent = pTagContent.replace(/htBREAKtp(s?):/gi, 'http$1:'); return pTagContent; }); taValue = taValue.replace(/(]*?>)CodeId_(\d+)(<\/PRE>)/g, function(allstr, preStart, codeId, preEnd){ var result = preStart; if(window.amiSimpleEditorCodes[codeId]){ result += window.amiSimpleEditorCodes[codeId]; } result += preEnd; return result; }); window.amiSimpleEditorCodes = []; return taValue; } this.fromHTMLContent = function(taValue){ var smilesPath = '_mod_files/smiles/' + this.smilesPath + '/'; var specSmiles = {"wink":";)", "smile":":)", "laugh":":D", "frown":":("}; // Make single line string taValue = taValue.replace(/\r?\n?\r?\n?/gi, '\r\n'); taValue = taValue.replace(/\\([rn])/gi, '[_spec_rpl_val_$1]'); taValue = taValue.replace(/\r?\n/g, '\\n'); // Replace simple elements taValue = taValue.replace(/<(\/?)PRE.*?>/gi, '[$1CODE]'); taValue = taValue.replace(/<(\/?)(B|I|U)(?:>|[^a-z].*?>)/gi, '[$1$2]'); taValue = taValue.replace(/<(\/?)UL.*?>/gi, '[$1LIST]'); taValue = taValue.replace(//gi, '[*]'); taValue = taValue.replace(/<\/LI.*?>/gi, ''); // Replace images and smiles taValue = taValue.replace(/]*?src=((?:"|').*?(?:"|')|[^\s]*).*?>/gi, function(allstr, tagUrl){ var tagUrl = tagUrl.replace(/^('|")(.*?)\1$/g, '$2'); var pathPos = tagUrl.indexOf(smilesPath); if(pathPos >= 0){ var dotPos = tagUrl.indexOf(".", pathPos+smilesPath.length); if(dotPos >= 0){ var startPos = pathPos+smilesPath.length; var smileName = tagUrl.substr(startPos, dotPos-startPos); if(specSmiles[smileName] != undefined){ return specSmiles[smileName]; }else return ':'+smileName+':'; } } return '[IMG]'+tagUrl+'[/IMG]';} ); // Replace nested elements var replaceType = ['align', 'font', 'url', 'blockquote']; for(var i = 0; i < replaceType.length; i++){ var checkLen = 0; do{ checkLen = taValue.length; if(replaceType[i] == 'align') taValue = taValue.replace(/^(.*)]*?align=(?:"|')?(right|left|center|justify)(?:"|')?.*?>(.*?)<\/p(?:>|[^a-z].*?>)/i, '$1[$2]$3[/$2]'); else if(replaceType[i] == 'font') taValue = taValue.replace(/^(.*)]*?(face|size|color)=((?:"|').*?(?:"|')|[^\s>]*).*?>(.*?)<\/font.*?>/i, function(allstr, textStart, tagName, tagValue, tagContent){var tagTag = (tagName.toLowerCase() == "face" ? "FONT" : tagName.toUpperCase()); tagValue = tagValue.replace(/^('|")(.*?)\1$/g, '$2'); return textStart+'['+tagTag+'="'+tagValue+'"]'+tagContent+'[/'+tagTag+']';}); else if(replaceType[i] == 'url') { taValue = taValue.replace(/^(.*)]*?)href=((?:"|').*?(?:"|')|[^\s>]*)(.*?)>(.*?)<\/a(?:>|[^a-z].*?>)/i, function(allstr, textStart, tagParams1, tagUrl, tagParams2, tagContent){ var tagUrl = tagUrl.replace(/^('|")(.*?)\1$/g, '$2'); urlContent = tagContent; if(aParts = (tagParams1 + " " + tagParams2).match(/[^a-z]title="([^"]+)"/i)){ urlContent = aParts[1].replace(/"/mg, '"').replace(/ /mg, '\n').replace(/ /mg, '\r'); } return textStart + '[URL="' + tagUrl + '"]' + urlContent + '[/URL]'; }); } else if(replaceType[i] == 'blockquote'){ taValue = taValue.replace(/^(.*)(?:\[B\](.*?):\[\/B\]\\n)?(.*?)<\/BLOCKQUOTE>/i, function(allstr, tagBefore, tagInner, qAuthor, tagContent){ var isQuote = (tagInner.indexOf('edQuote') >= 0); var hasAuthor = (typeof(qAuthor) != "undefined" && qAuthor.length > 0); if(isQuote){ var startTag = '[Q'+(hasAuthor ? '="'+qAuthor+'"' : '')+']'; return tagBefore+startTag+tagContent+'[/Q]'; }else{ return tagBefore+'[INDENT]'+(hasAuthor ? qAuthor : '')+tagContent+'[/INDENT]'; } }); } }while(checkLen != taValue.length); } // Replace HTML base chars taValue = taValue.replace(/</gi, '<'); taValue = taValue.replace(/>/gi, '>'); taValue = taValue.replace(/®/gi, '®'); taValue = taValue.replace(/©/gi, '©'); taValue = taValue.replace(/«/gi, '«'); taValue = taValue.replace(/»/gi, '»'); taValue = taValue.replace(/–/gi, '–'); taValue = taValue.replace(/—/gi, '—'); taValue = taValue.replace(/€/gi, '€'); // Make multiline string taValue = taValue.replace(/\\n/g, '\r\n'); taValue = taValue.replace(/\[\_spec\_rpl\_val\_([rn])\]/gi, '\\$1'); return taValue; } this.createEditor = function(taWidth, taHeight, taValueName, taValue, isValueHTML, idPreviewDiv){ if (typeof(isValueHTML) != undefined) { var re = /(|<\/noindex>)/gi; taValue = taValue.replace(re, ''); } this.editorId = 'id'+taValueName; var i = 0; var usedFonts = ''; for(i = 0; i < this.usedFonts.length; i++){ usedFonts += ''; } var usedSizes = ''; for(i = 1; i <= this.maxTextSize; i++){ usedSizes += ''; } var usedColors = ''; for(i = 0; i < this.usedColors.length; i++){ usedColors += ''; } var baseSmiles = ''; for(i = 0; i < this.baseSmiles.length; i++){ baseSmiles += ''; } var allSmiles = baseSmiles; for(i = 0; i < this.allSmiles.length; i++){ allSmiles += ''; } var contentPreviewDiv = ''; if(typeof(idPreviewDiv) != "undefined"){ this.idPreviewDiv = idPreviewDiv; }else{ this.idPreviewDiv = 'amiroTEdDivPreview'; contentPreviewDiv = '
    '; } var allowedImages = this.allowedImages; document.writeln( '
    ' + contentPreviewDiv + '
    ' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + '' + (allowedImages.length ? '' : '') + '' + '' + '' + '' + '' + '' + '' + '' + '
    ' + '
    ' + baseSmiles + (allSmiles.length > baseSmiles.length ? ''+this.oDictionary.get('more')+'' + '
    ' + '' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' + '
    ' ); this.editorObj = document.getElementById(this.editorId); this.isInitialized = true; } this.insertContent = function(taValue, actionType, isValueHTML, subaction, addon){ if (typeof(isValueHTML) != undefined) { var re = /(|<\/noindex>)/gi; taValue = taValue.replace(re, ''); } this.setMode('editor'); if(typeof(addon) != "undefined" && actionType == "bold"){ taValue = "[B]"+taValue+"[/B]"+addon; this._replaceSelection(typeof(isValueHTML) == undefined || !isValueHTML ? taValue : this.fromHTMLContent(taValue), 0, 0, true); }else{ this._replaceSelection(typeof(isValueHTML) == undefined || !isValueHTML ? taValue : this.fromHTMLContent(taValue), 0, 0); if(actionType != 'undefined' && (actionType == 'quote' || actionType == 'bold' || actionType == 'italic' || actionType == 'underlined')){ this.procAction(actionType, subaction); } } } this.setMode = function(mode){ if(mode == 'editor' && !this.updatePreviewMode){ document.getElementById('amiroTEdDivPreview').style.display = 'none'; this.currentMode = 'editor'; if(this.editorModeCode.length > 0){ eval(this.editorModeCode); } }else if(mode == 'preview' || this.updatePreviewMode){ var content = this.getHTMLContent(1); if (content.length) { document.getElementById('amiroTEdDivPreview').style.display = 'block'; document.getElementById('amiroTEdDivPreview').innerHTML = content; this.currentMode = 'preview'; if (this.updatePreviewMode) { this.previewButtonObj.value = this.oDictionary.get('hide_preview'); } this.updatePreviewMode = false; } } if (typeof(amiroTEditOnSwitchMode) == 'function') { amiroTEditOnSwitchMode(this.currentMode); } } this.switchMode = function(){ if(this.currentMode == 'editor'){ this.setMode('preview'); }else{ this.setMode('editor'); } } this.stopEvent = function(evt){ if(typeof(evt.stopPropagation) == "function"){ evt.stopPropagation(); evt.preventDefault(); return evt; }else{ window.event.returnValue = false; window.event.cancelBubble = true; return window.event; } } this.procKeyPress = function(evt){ if(evt.ctrlKey && evt.keyCode != 17){ switch(evt.keyCode){ case 66 /*B*/: this.procAction('bold'); return this.stopEvent(evt); break; case 73 /*I*/: this.procAction('italic'); return this.stopEvent(evt); break; case 85 /*U*/: this.procAction('underlined'); return this.stopEvent(evt); break; } }else if(!evt.ctrlKey && !evt.altKey){ this.updatePreviewButton(); } } this.procKeyUp = function() { if (this.currentMode == 'preview' && this.contentLength() < 2) { this.updatePreviewMode = false; this.previewButtonOnClick(); alert(this.oDictionary.get('warn_message_length')); } } this.contentLength = function(){ var contentData = this.editorObj.value; contentData = contentData.replace(/[ \t\r\n]/g, ''); var replaceType = ['q']; for(var i = 0; i < replaceType.length; i++){ var checkLen = 0; do{ checkLen = contentData.length; if(replaceType[i] == 'q'){ contentData = contentData.replace(/^(.*)\[Q[^\]]*?\](.*?)\[\/Q\]/i, '$1'); } }while(checkLen != contentData.length); } contentData = contentData.replace(/\[.*?\]/g, ''); return contentData.length; } this.previewButtonOnClick = function(btn) { if (btn != undefined) { this.previewButtonObj = btn; } else { btn = this.previewButtonObj; } if (this.currentMode == 'preview') { btn.value = this.oDictionary.get('preview'); txtEd.setMode('editor'); } else if (this.contentLength() < 2) { alert(this.oDictionary.get('warn_message_length')); this.editorObj.focus(); } else { btn.value = this.oDictionary.get('hide_preview'); txtEd.setMode('preview'); } return false; } this.updatePreviewButton = function(){ if (this.currentMode == 'preview' && this.previewButtonObj != undefined) { this.previewButtonObj.value = this.oDictionary.get('update_preview'); this.updatePreviewMode = true; } } this.checkURLUsage = function(){ var res = this.bAllowURLs || !this.getHTMLContent().match(/]+HREF=/gi); if(!res){ alert(this.oDictionary.get('warn_urls_reg_only')); } return res; } this.init(); } function handleMouseMove(evt){ if(typeof(globalATEObj) == 'object') return globalATEObj.handleMouseMove(evt == undefined ? window.event.clientY : evt.pageY); else return false; } function releaseMouseMoveHandler(){ document.onmousemove = null; document.onmouseup = null; return false; } function _tagsParamReplace(param, doCheckImage){ var res = param.replace(/&/, '&'); do{ var prevLength = res.length; res = res.replace(/^\s*javascript\:/, ''); }while(res.length != prevLength); if(doCheckImage){ var test = res.replace(/^ *(.*?) *$/i, '$1').toLowerCase(); if(test.indexOf('/_admin/') >= 0){ res = ''; }else{ var isRelativeAddress = (test.search(/^https?:\/\//) == -1); var isLocalAddress = false; if(!isRelativeAddress){ test = test.replace(/^https:\/\//, 'http://'); var localURL = window.bbEditorBaseHref; if(localURL != '' && test.indexOf(localURL) == 0){ isLocalAddress = true; } } if((isRelativeAddress || isLocalAddress) && test.search(/^[^?]*\.(jpg|png|gif|jpeg|swf)$/) == -1){ res = ''; } } } return res; } function _stripTags(str) { return str.replace(/<\/?[^\s^>]+[^>]*?>/gi, ''); } function _trim(str) { return str.replace(/^\s+/mg, '').replace(/\s+$/mg, ''); }