Новичок
Профиль
Группа: Участник
Сообщений: 42
Регистрация: 5.7.2007
Репутация: нет Всего: 1
|
Собствено вопрос такой.... Есть редактор..... написаный не так давно, писал сам.... но не все... не которые момент не то что бы переняты.... а написаны по примеру.... И так в нем есть часть кода которая фиксит текст при событии onsubmit в коде написано все Устроено так что есть у нас поле textarea при подключении сценария оно заменяет DOM методом другим.... перенимаецо от туда id и все.... Пишем мы в другом textarea которое создали после существующего, при событии onsubmit данные передаюцо в нормальное поле.... Регулярные выражения сразу же меняют весь bb-code на html код и все тому подобное!!!! На сколько безопастно такое метод использования рег выражений????? | Код | function txnEngine_bbCode(){}; var txnDoc = document,count = 0,toolbar,editor,src_icons="/theme/icons/",add_buttons,wWidth; var named_colors = {'#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige', '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown', '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue', '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod', '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen', '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue', '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue', '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen', '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey', '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory', '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue', '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen', '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey', '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon', '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue', '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin', '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid', '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff', '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue', '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver', '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen', '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet', '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen' };
var font_name = ["Tahoma","Arial Black","sans-serif","Helvetica","Arial","Geneva","Verdana","serif","Times New Roman","Courier","Courier New"]; //Симуляция insertAdjacentElement если браузер не поддерживает его по умолчанию (в IE встроен) if(typeof(HTMLElement) !="undefined" && !HTMLElement.prototype.insertAdjacentElement){ HTMLElement.prototype.insertAdjacentElement = function(where,insertNode){ switch(where){ case"beforeBegin": this.parentNode.insertBefore(insertNode,this); break; case"afterBegin": this.insertBefore(insertNode,this.firstChild); break; case"beforeEnd": this.appendChild(insertNode); break; case"afterEnd": if(this.nextSibling){ this.parentNode.insertBefore(insertNode,this.nextSibling); }else{ this.parentNode.appendChild(insertNode); } break; } } //симуляция insertAdjacentHTML если браузер не поддерживает его по умолчанию (в IE встроен) HTMLElement.prototype.insertAdjacentHTML = function (where,insertHTML){ var owDoc = this.ownerDocument.createRange(); owDoc.setStartBefore(this); var parsedHTML = owDoc.createContextualFragment(insertHTML); this.insertAdjacentElement(where,parsedHTML); } };
txnEngine_bbCode.prototype = { init:function(settings){ this.settings = settings; this.MSIE = (navigator.appName == "Microsoft Internet Explorer"); this.isOpera = (navigator.userAgent.indexOf("Opera") !=-1); this.isMoz = (navigator.userAgent.indexOf("Mozilla") !=-1); this.isGecko = (navigator.userAgent.indexOf("Gecko") !=-1); var elm = txnDoc.getElementById(this.settings["editor_id"]); elm.style.display = 'none'; this.documentBaseUrl = window.location.href; this.documentBaseUrl = this.documentBaseUrl.substring(0, this.documentBaseUrl.lastIndexOf('/')); txnDoc.write("<link href=\""+this.documentBaseUrl+"/theme/css/editor_style.css\" rel=\"stylesheet\" type=\"text/css\" />"); toolbar = "<table style=\"width:"+elm.offsetWidth+"\" border=0 class=\"toolbar\" cellpadding=0 cellspacing=0><tr>"; add_buttons = settings["toolbar_buttons"]; for(i in add_buttons){ count++; switch(add_buttons[i]){ default: if(add_buttons[i] !="size" && add_buttons[i] !="family" && add_buttons[i] !="color"){ toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>"; } break; case"img": toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertImage('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>"; break; case"url": toolbar +="<td align=\""+this.settings["position"]+"\"><img src=\""+this.documentBaseUrl+src_icons+add_buttons[i]+".gif\" class=\"buttons\" onClick=\"txnBBcode.insertUrl('"+add_buttons[i]+"','"+this.settings["editor_id"]+"');\" border=0></td>"; break; } } toolbar+="</tr></table>"; toolbar2 = "<table style=\"width:"+elm.offsetWidth+"\" border=0 class=\"toolbar\" cellpadding=0 cellspacing=0><tr>"; for(i in add_buttons){ count++; switch(add_buttons[i]){ case"size": toolbar2+="<td align=\""+this.settings["position"]+"\"><select name=\"size\" onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option> - Font Size - </option><option value=\"8pt\">1 (8pt)</option><option value=\"10pt\">2 (10pt)</option><option value=\"12pt\">3 (12pt)</option><option value=\"14pt\">4 (14pt)</option><option value=\"18pt\">5 (18pt)</option><option value=\"24pt\">6 (24pt)</option><option value=\"36pt\">7 (36pt)</option></select></td>"; break; case"family": toolbar2+="<td align=\""+this.settings["position"]+"\"><select onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option>- Font Name -</option>"; for(i in font_name){ toolbar2+="<option value=\""+font_name[i]+"\">"+font_name[i]+"</option>"; } toolbar2+="</select></td>"; break; case"color": toolbar2+="<td align=\""+this.settings["position"]+"\"><select onChange=\"txnBBcode.insertCode('"+add_buttons[i]+"','"+this.settings["editor_id"]+"',this.options[selectedIndex].value);\"><option>- Font Color -</option>"; for(i in named_colors){ toolbar2+="<option style=\"color:"+i+"\" value=\""+i+"\">"+named_colors[i]+"</option>"; } toolbar2+="</select></td>"; break; } if(count == 12){ toolbar2+="</tr><tr>"; } } toolbar2+="</tr></table>";
editor = txnDoc.createElement("textarea"); editor.setAttribute("id","txnEngine"+this.settings["editor_id"]); editor.setAttribute("wrap","soft"); editor.setAttribute("rows",elm.rows); editor.setAttribute("cols",elm.cols); editor.className = "txnBBcodeEditor"; elm.insertAdjacentElement("afterEnd",editor); elm.insertAdjacentHTML("afterEnd",toolbar+toolbar2); if(this.MSIE || this.isOpera){ for(var idX =0;idX<txnDoc.forms.length;idX++){ txnDoc.forms[idX].attachEvent("onsubmit",function(){txnBBcode.updateArea(settings["editor_id"]);}); } }else if(this.isMoz || this.isGecko){ for(var idX =0;idX<txnDoc.forms.length;idX++){ txnDoc.forms[idX].addEventListener('submit',function OnSumbmit() { txnBBcode.updateArea(settings["editor_id"]);}, true); } } }, insertCode:function(code,editor_id,value){ var editor = txnDoc.getElementById("txnEngine"+editor_id);var ltag,rtag; switch(code){ case "color": ltag = '[color='+value+']'; rtag = '[/color]'; break; case"size": ltag = '[size='+value+']'; rtag = '[/size]'; break; case"family": ltag = '[family='+value+']'; rtag = '[/family]'; break; case"font": ltag = '[font='+value+']'; rtag = '[/font]'; break; case"hr": ltag = '[hr]'; rtag = ''; break; case"list": ltag = '\t[*]'; rtag = ''; break; default: ltag = '['+code+']'; rtag = '[/'+code+']'; break; } this.inserInstanceSelect(ltag,rtag,editor); }, updateArea:function(editor_id){ if(this.MSIE){ txnDoc.getElementById(editor_id).value = this.fixText(txnDoc.getElementById("txnEngine"+editor_id).innerHTML); }else{ txnDoc.getElementById(editor_id).value = this.fixText(txnDoc.getElementById("txnEngine"+editor_id).value); return; } }, fixText:function(text){ function rep(re,str){ text = text.replace(re,str); }; rep(/\[b\](.*?)\[\/b\]/gi,"<b>$1</b>"); rep(/\[i\](.*?)\[\/i\]/gi,"<i>$1</i>"); rep(/\[u\](.*?)\[\/u\]/gi,"<u>$1</u>"); rep(/\[hr\]/gi,"<hr>"); rep(/\[list\]\n\[\/list\]/gi,""); rep(/\[\*\]/g,"<li>"); rep(/\[s\](.*?)\[\/s\]/gi,"<strike>$1</strike>"); rep(/\[left\](.*?)\[\/left\]/gi,"<div align=left>$1</div>"); rep(/\[center\](.*?)\[\/center\]/gi,"<div align=center>$1</div>"); rep(/\[right\](.*?)\[\/right\]/gi,"<div align=right>$1</div>"); rep(/\[justify\](.*?)\[\/justify\]/gi,"<div align=justify>$1</div>"); rep(/\[color=(\#[A-Z0-9]{6}|[a-z]+)\](.*?)\[\/color\]/gi,"<span style=\"color:$1\">$2</span>"); rep(/\[size=([0-9a-z]+)\](.*?)\[\/size\]/gi,"<span style=\"font-size:$1\">$2</span>"); rep(/\[family=([A-Za-z ]+)\](.*?)\[\/family\]/gi,"<span style=\"font-family:$1\">$2</span>"); rep(/\[url=([\w]+?:\/\/[\w\#$%&~\/.\-;:=,?@\[\]+]*?)\]([^?\n\r\t].*?)\[\/url\]/gi,"<a href=\"$1\" target=\"_balnk\">$2</a>"); rep(/\[img=([\w]+?:\/\/[\w\#$%&~\/.\-;:=,?@\[\]+]*?|[\w\#$%&~\/.\-;:=,?@\[\]+]*?) alt=([a-zA-Zа-яА-Я0-9\_\-\. ]+)\]/gi,"<img src=\"$1\" border=\"0\" alt=\"$2\" title=\"$2\" />"); rep(/\r/gi,"<br>"); rep(/\r\n/gi,"<br><br>"); rep(/<DIV.*align=left.*>(.*?)<\/DIV>/gi,"$1"); rep(/\[quote\](.*?)\[\/quote\]/gi,"<table cellspacing=\"0\" cellpadding=\"0\" width=\"100%\" border=\"0\" style=\"border: #2666B9 1px dashed;padding:6px;\"><tr><td style=\"background: #FAA9CF;text-align: left;vertical-align: middle;padding-left:6px;\">Цитата...</td></tr><tr><td style=\"background: #FADAA5;text-align: left;vertical-align: top;height:30;padding:6px;\">$1</td></tr></table>"); if(text.indexOf("scipt") !=-1 || text.indexOf("/scipt") !=-1 || text.indexOf("applet") !=-1 || text.indexOf("<?") !=-1 || text.indexOf("<%") !=-1 || text.indexOf("'") !=-1 || text.indexOf("textarea") !=-1){ rep(/\</gi,"<"); rep(/\>/gi,">"); rep(/\&/gi,"&"); rep(/\"/gi,"""); } return text; }, inserInstanceSelect:function(tagS,tagE,editor){ var editor = editor; editor.focus(); if(txnDoc.selection){ var textNodes = txnDoc.selection.createRange(); var selText=textNodes.text? 0 :-tagE.length; textNodes.text=tagS+textNodes.text+tagE; textNodes.move('character',selText); textNodes.select(); }else{ if(typeof(editor.selectionStart)!="undefined"){ var beforeNode = editor.selectionStart; var afterNode = editor.selectionEnd; textBefore = editor.value.substring(0,beforeNode); textNode = editor.value.substring(beforeNode,afterNode); textAfter = editor.value.substring(afterNode); editor.value = textBefore+tagS+textNode+tagE+textAfter; //editor.value = setSelectionRange(beforeNode,beforeNode); }else{ editor.value = editor.value + textNode; } } }, insertUrl:function(code,editor_id){ var link_url='',ltag,rtag,editor = txnDoc.getElementById("txnEngine"+editor_id); link_url = prompt("Введите адрес ссылки:","http://"); if(!link_url) return alert("Вы не ввели адрес"); switch(code){ case"url": ltag = '[url='+link_url+']'; rtag = '[/url]'; break; } this.inserInstanceSelect(ltag,rtag,editor); }, insertImage:function(code,editor_id){ var path_img='',alt='',ltag,rtag,editor = txnDoc.getElementById("txnEngine"+editor_id); path_img = prompt("Введите путь к картинке:","http://"); alt = prompt("Введите альтернативный текст:",""); if(!alt || !path_img) return alert("Вы ввели один из не верных параметров"); switch(code){ case"img": ltag = '[img='+path_img+' alt='+alt+']'; rtag = ''; break; } this.inserInstanceSelect(ltag,rtag,editor); } }
var txnBBcode = new txnEngine_bbCode();
|
Добавлено через 2 минуты и 24 секундывот продолжение сама страница | Код | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Untitled</title> <script language="JavaScript" src="txnEngine.js" type="text/javascript"></script> </head> <body> <form action="http://prime/pos.php" method="post"> <textarea id="text" name="text1" cols="50" rows="10">dsdsds</textarea> <script> txnBBcode.init({ "editor_id" : "text", "position" : "center", "toolbar_buttons" : ["b","i","u","s","left","center","right","justify","url","img","quote","hr","list","size","family","color"] }); </script> <input type="Submit" value="Ñîõðàíèòü"> </form> </body> </html>
|
|