用Javascript 把 HTML 转换为dokuwiki语法

试了几个dokuwiki上的所见即所得编辑器(WYSIWYG),都不太理想。就想到做一个程序,能把HTML 语法转换为dokuwiki的语法。

编辑器我用的是CKEditor,看这里:如何在网页中嵌入CKEditor。Dokuwiki的语法看这里

 

首先先处理一下提交上来的数据

<html>
<body>
<head>

</head>
<?php

$code = $_POST['editor'];
$code=stripslashes($code);
echo $code;
?>
<script type="text/javascript" src ="wiki.js"></script>

</body>
</html> 

用 stripslashes 把提交上来的数据里多余的"\"去掉,然后在调用一个 Javascript 文件,处理dokuwiki语法

处理<h1>,<h2>,<h3>,<h4>,<h5> 标签

var headers = ["h1","h2","h3","h4","h5"];
for(j=0; j < headers.length; ++j){

	var str = headers[j];
	replaceHead(str);
}
function replaceHead(header) {

	var h = document.getElementsByTagName(header);
	var p = document.createElement("p");

	for (i=0; i< h.length; ++i) {

		if(header == "h1") {

			p.innerHTML = '====== ' +  h[i].innerHTML + ' ======';
		} else if(header == "h2") {

			p.innerHTML = '===== ' +  h[i].innerHTML + ' =====';
		} else if(header == "h3") {

			p.innerHTML = '==== ' +  h[i].innerHTML + ' ====';
		} else if(header == "h4") {

			p.innerHTML = '=== ' +  h[i].innerHTML + ' ===';
		} else if(header == "h5") {

			p.innerHTML = '== ' +  h[i].innerHTML + ' ===';
		}
		h[i].parentNode.replaceChild(p, h[i]);
	}

}

把<h>标签替换为相应的等号

替换<ul>和<ol>

function replaceList(){

	var ul = document.getElementsByTagName("ul");
	var ol = document.getElementsByTagName("ol");
	var items = ul[0].getElementsByTagName("li");
	var itemsOL = ol[0].getElementsByTagName("li");
	ul[0].style.listStyle = "none";
	ul[0].style.padding = "0px";
	ol[0].style.listStyle = "none";
	ol[0].style.padding = "0px";
	for(i = 0; i < items.length; ++i){

		items[i].innerHTML = "&nbsp;&nbsp;* " + items[i].innerHTML;
	}
	for(j = 0; j < itemsOL.length; ++j){

		itemsOL[j].innerHTML = "&nbsp;&nbsp;- " + itemsOL[j].innerHTML;
	}
}

这里主要用了CSS 改变了列表的显示样式。

处理链接和图片

function replaceImage(){

	var img = document.getElementsByTagName("img");
	var i = 0;
	for (i = 0; i < img.length;){

		var span = document.createElement("span");
		span.innerHTML = "{{" + img[i].src + "?nolink}}"
		img[i].parentNode.replaceChild(span, img[i]);
	}
}
function replaceLink(){

	var a = document.getElementsByTagName("a");
	var i = 0;
	for (i = 0; i < a.length;){

		var span = document.createElement("span");
		span.innerHTML = "[[" + a[i].href + "|" + a[i].innerHTML + "]]"
		a[i].parentNode.replaceChild(span, a[i]);
	}

}

处理文字标签

CKEditor 分别用<strong>, <em>, <u>, <strike>表示粗体,斜体,下划线和删除号。

function replaceTxtFormat(){

	var txtFormats = ["strong","em","u","strike"];
	var i,j;
	for (i = 0; i < txtFormats.length; ++i){

		var txt = document.getElementsByTagName(txtFormats[i]);

		for(j=0; j < txt.length;){
			var span = document.createElement("span");

			if(txtFormats[i] == "strong"){

				span.innerHTML = "**" + txt[j].innerHTML + "**";
			} else if(txtFormats[i] == "em"){

				span.innerHTML = "//" + txt[j].innerHTML + "//";
			} else if(txtFormats[i] == "u") {

				span.innerHTML = "__" + txt[j].innerHTML + "__";
			} else if(txtFormats[i] == "strike") {

				span.innerHTML = "&lt;del&gt;" + txt[j].innerHTML + "&lt;/del&gt;";
			}

			txt[j].parentNode.replaceChild(span, txt[j]);
		}
	}

}

目前只做了这么几个基本语法的转换,以后有空继续更新

无觅相关文章插件

  1. No comments yet.

  1. No trackbacks yet.