Skip to content

Instantly share code, notes, and snippets.

@blrun
Created February 27, 2016 21:36
Show Gist options
  • Save blrun/77b31dd612817065032a to your computer and use it in GitHub Desktop.
Save blrun/77b31dd612817065032a to your computer and use it in GitHub Desktop.
제로보드4 WYSIWYG 에디터 모드 전환 관련 수정 자바스크립트 소스...
var pattern = /(\[\w+\_code\:\d+\{[^}]*?\}\]|\[\/\w+\_code\])/gi;
var pattern2 = /\[\/\w+\_code\]/gi;
var matchArray, e_use_html;
var iePattern = /<br[^>]*?><(P|DIV|\/PRE|HR|LI|OL|O:P|UL|TABLE|TBODY|TR|TD|TH|CENTER|H1|H2|H3|H4|FORM|SCRIPT|\/SCRIPT)([^>]*?)>/gi;
var iePattern2 = /<(HR|SCRIPT|\/SCRIPT)([^>]*?)>\s*?<br[^>]*?>/gi;
var iePattern3 = / (?:\r\n|\r|\n)/g;
var ffPattern = /<br[^>]*?><(TBODY|TR|TD)([^>]*?)>/gi;
function htmlspecialchars_encode(str){
str = str.replace(/&amp;/g,'&amp;amp;');
str = str.replace(/&#039;/g,'&amp;#039;');
str = str.replace(/&quot;/g,'&amp;quot;');
str = str.replace(/&nbsp;/g,'&amp;nbsp;');
str = str.replace(/&lt;/g,'&amp;lt;').replace(/&gt;/g,'&amp;gt;');
str = str.replace(/</g,'&lt;').replace(/>/g,'&gt;');
str = str.replace(/\'/g,'&#039;');
str = str.replace(/\"/g,'&quot;');
return str;
}
function htmlspecialchars_decode(str){
str = str.replace(/&quot;/g,'\"');
str = str.replace(/&#039;/g,'\'');
str = str.replace(/&lt;/g,'<').replace(/&gt;/g,'>');
str = str.replace(/&amp;lt;/g,'&lt;').replace(/&amp;gt;/g,'&gt;');
str = str.replace(/&amp;nbsp;/g,'&nbsp;');
str = str.replace(/&amp;quot;/g,'&quot;');
str = str.replace(/&amp;#039;/g,'&#039;');
str = str.replace(/&amp;/g,'&');
return str;
}
function brAddFix(str,use_html) {
if(use_html < 2) {
if(typeof window.getSelection != "undefined") //FF
{
str = str.replace(/\n/g,"<br />");
str = str.replace(ffPattern,"<$1$2>");
}
else if(typeof document.selection != "Control") //IE
{
str = str.replace(/\n/g,"<br />");
str = str.replace(iePattern,"<$1$2>");
str = str.replace(iePattern2,"<$1$2>");
str = str.replace(iePattern3,"");
}
}
return str;
}
function brRemove(str,use_html) {
if(use_html < 2) {
str = str.replace(/<br \/>|<br>/gi,"\n");
str = str.replace(iePattern3,"\n");
}
return str;
}
function pRemove(str,use_html) {
if(use_html < 2) {
if(re2.exec(uAgent) != null) { //IE8
str = str.replace(/<\/p>|<\/div>/gi,"");
str = str.replace(/<p>\n|<div>\n/gi,"\n");
str = str.replace(/<p>|<div>/gi,"");
} else { //Chrome & Opera
str = str.replace(/<p>\n<\/p>|<div>\n<\/div>/gi,"\n");
str = str.replace(/\n<\/p>|\n<\/div>/gi,"\n");
str = str.replace(/<\/p>|<\/div>/gi,"\n");
str = str.replace(/\n<p>|\n<div>/gi,"\n");
str = str.replace(/<p>|<div>/gi,"\n");
str = str.replace(/<span[^>]*?>|<\/span>/gi,"");
}
str = str.replace(/&nbsp;/g," ");
}
return str;
}
function eRemove(temp,str,use_html) {
// Chrome & Opera 에서 끝 </div> 태그 제거하는 루틴
var len1, len2;
if(use_html < 2 && re2.exec(uAgent) == null) {
if(temp.match(/<div[^>]*?>/gi) == null)
len1 = 0;
else
len1 = temp.match(/<div[^>]*?>/gi).length;
if(temp.match(/<\/div>/gi) == null)
len2 = 0;
else
len2 = temp.match(/<\/div>/gi).length;
while(len1 < len2) {
str = str.replace(/<\/div>$/gi,"");
if(temp.match(/<div[^>]*?>/gi) == null)
len1 = 0;
else
len1 = temp.match(/<div[^>]*?>/gi).length;
if(temp.match(/<\/div>/gi) == null)
len2 = 0;
else
len2 = temp.match(/<\/div>/gi).length;
}
}
return str;
}
function memo2memoi(str){
if(sw_edit_use == "write")
e_use_html = parseInt(document.getElementById("use_html").value);
else
e_use_html = parseInt(document.getElementById("use_html2").value);
var memo = "", temp, pt = 0;
if(str.match(pattern) == null) {
memo = brAddFix(str,e_use_html);
} else {
while((matchArray = pattern.exec(str)) != null){
temp = str.substring(pt,matchArray.index);
if(pattern2.test(matchArray[0]) == true) {
temp = htmlspecialchars_encode(temp);
temp = brAddFix(temp,e_use_html);
} else {
temp = brAddFix(temp,e_use_html);
}
memo += temp + matchArray[0];
pt = matchArray.index + matchArray[0].length;
}
temp = str.substring(pt)
memo += brAddFix(temp,e_use_html);
}
if(e_use_html < 2) {
memo = memo.replace(/ /g,'&nbsp;&nbsp;');
memo = memo.replace(/\t/g,'&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;');
}
return memo;
}
function memoi2memo(str){
if(sw_edit_use == "write")
e_use_html = parseInt(document.getElementById("use_html").value);
else
e_use_html = parseInt(document.getElementById("use_html2").value);
var memo = "", memo2 = "", temp, pt = 0;
if(e_use_html < 2) {
str = str.replace(/&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;/g,'\t');
str = str.replace(/&nbsp;&nbsp;/g,' ');
}
if(str.match(pattern) == null) {
memo = brRemove(str,e_use_html);
} else {
while((matchArray = pattern.exec(str)) != null){
temp = str.substring(pt,matchArray.index);
if(pattern2.test(matchArray[0]) == true) {
temp = brRemove(temp,e_use_html);
temp = pRemove(temp,e_use_html);
temp = htmlspecialchars_decode(temp);
} else {
temp = brRemove(temp,e_use_html);
memo2 += temp;
}
memo += temp + matchArray[0];
pt = matchArray.index + matchArray[0].length;
}
temp = str.substring(pt);
memo2 += temp;
temp = eRemove(memo2,temp,e_use_html);
memo += brRemove(temp,e_use_html);
}
return memo;
}
function ChangeEditMode(mode)
{
if(mode == "html")
{
edit_tag_yn = "Y";
var doc = memoiW.document.open("text/html", "replace");
doc.write(default_source + memo2memoi(memoE.value));
doc.close();
memoiE.style.display = "block";
memoE.style.display = "none";
selectionObj.m_selection = null;
memoiW.focus();
}
else
{
edit_tag_yn = "N";
memoE.value = memoi2memo(memoiW.document.body.innerHTML);
memoiE.style.display = "none";
memoE.style.display = "block";
memoE.focus();
}
if(edit_yn == "Y")
{
btnStyc();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment