1// DokuWikiのWikiスタイル書体補完スクリプト 2// Wiki-Style Script 3// hGcl_Wiki_Style.js 4// version 2.1 5// 2019 / 01 / 11 6// 7// 2019 ひぃ(Hir)/ワタアメ 8// Twitter : @Hir_gca 9// 10// 使用方法 11// htmlファイルの<head>~</head>内に 12// このスクリプトファイルを呼び出す構文を書いてください。 13// 下記の関数は読み込みが完了した時に実行されます。 14// ※補足(この行の文責:HokkaidoPerson[北海道ゆっくり放送]):このプラグインでは何もしなくてもスクリプトが自動的に読み込まれます。 15// 16// \//と入力すると「//」と出力します。 17// ://は変換されません 18// 19// **太字**、//斜体//、__下線付き__、''等幅''がご利用頂けます 20// 21// 22// $[hdcolor $\HTMLの色コード$\$]~$[/hdcolor$]は<font color="HTMLの色コード">~</font>と同じ働きをします。 23// (<textarea>~</textarea>間と<pre>~</pre>間には適用されません) 24// ※補足(この行の文責:HokkaidoPerson[北海道ゆっくり放送]):上記に加え、クラス「wss-nowiki-section」「diff」、及び<form>~</form>間にも適用されません。 25// 26// 27// 利用規約 28// ・本条文は日本語のもと解釈されます。 29// ・著作者(ひぃ(Hir)/ワタアメ)は予告なく本条文を変更できるものとします。 30// ・本スクリプトを使用した際に起こった損害につきましては、当方では一切責任をとりかねます。 31// ・権利詐称、無断転載、無断販売については厳禁です。 32// ・改変しての二次配布につきましては、この文章を含めた上記の文すべてを説明書または本スクリプトファイルに 33// 必ず記述してください。 34// 35// 36// [Translated and supplemented by HokkaidoPerson] 37// The script to complement DokuWiki syntax 38// Wiki-Style Script 39// hGcl_Wiki_Style.js 40// version 2.1 41// 2019 / 01 / 11 42// 43// 2019 Hir/wataame 44// Twitter : @Hir_gca 45// 46// How to Use 47// Call this script in <head>-</head> of html files. 48// The following functions will be run when the browser completed loading pages. 49// * In this plugin, the script will be loaded without doing anything special. 50// 51// "\// " will be "//" 52// "://" won't be converted. 53// 54// **Bold**, //italic//, __underlined__, ''monospaced'' characters available. 55// 56// 57// $[hdcolor $\HTML color code$\$]~$[/hdcolor$] equals to <font color="HTML color code">~</font> 58// (Unavailable in <textarea>-</textarea>, <pre>-</pre>, <form>~</form>, and the class "wss-nowiki-section" and "diff") 59// 60// 61// The license 62// ・This license is interpreted in Japanese above. 63// ・An author of this script, Hir/wataame, can change this license without notice. 64// ・The author won't foot the bill for your loss when you use this script. 65// ・Fabricating the rights of this script, and unauthorized copying and selling this script are strictly prohibited. 66// ・When you'll distribute forks of this script, you must write all these sentences including this license on manuals or the script files you'll distribute. 67// 68// 69 70// 自動実行用 / To run the functions automatically 71document.addEventListener("DOMContentLoaded", wikiStyle); 72 73 74// 変換用テーブル / Tables for converting 75var StyleArray = new Array( 76 '//', // 斜体 / Italic 77 '**', // 太字 / Bold 78 '__', // 下線 / Underlined 79 '\'\'' // 等幅 / Monospaced 80); 81var ConvertArray = new Array( 82 'em', // 斜体 / Italic 83 'strong', // 太字 / Bold 84 'u', // 下線 / Underlined 85 'code' // 等幅 / Monospaced 86); 87 88function wikiStyle(){ 89 var bodyInnerHTML = document.body.innerHTML; 90 var HeaderSplit; 91 var result; 92 var k; 93 94 // textareaタグのデータを保持する / Preserve datas in <textarea> 95 var TextareaBoxs = document.getElementsByTagName('textarea'); 96 var TextareaStrs = new Array(TextareaBoxs.length); 97 98 for(k=0;k<TextareaBoxs.length;k++){ 99 TextareaStrs[k] = TextareaBoxs[k].innerHTML; 100 } 101 102 // preタグのデータを保持する / Preserve datas in <pre> 103 var PreBoxs = document.getElementsByTagName('pre'); 104 var PreStrs = new Array(PreBoxs.length); 105 106 for(k=0;k<PreBoxs.length;k++){ 107 PreStrs[k] = PreBoxs[k].innerHTML; 108 } 109 110 // wss-nowiki-selectionクラスのデータを保持する / Preserve datas in the class "wss-nowiki-section" 111 var WSSNoWikiBoxs = document.getElementsByClassName('wss-nowiki-section'); 112 var WSSNoWikiStrs = new Array(WSSNoWikiBoxs.length); 113 114 for(k=0;k<WSSNoWikiBoxs.length;k++){ 115 WSSNoWikiStrs[k] = WSSNoWikiBoxs[k].innerHTML; 116 } 117 118 // diffクラスのデータを保持する / Preserve datas in the class "diff" 119 var DiffBoxs = document.getElementsByClassName('diff'); 120 var DiffStrs = new Array(DiffBoxs.length); 121 122 for(k=0;k<DiffBoxs.length;k++){ 123 DiffStrs[k] = DiffBoxs[k].innerHTML; 124 } 125 126 // formタグのデータを保持する / Preserve datas in <form> 127 var FormBoxs = document.getElementsByTagName('form'); 128 var FormStrs = new Array(FormBoxs.length); 129 130 for(k=0;k<FormBoxs.length;k++){ 131 FormStrs[k] = FormBoxs[k].innerHTML; 132 } 133 134 // とりあえずbody全体の$[、$]、$\を<、>、'に変換する / Well, let's convert $[, $], and $\ to <, >, and ' in the whole body tag 135 HeaderSplit = bodyInnerHTML.split('$\\'); 136 bodyInnerHTML = HeaderSplit[0]; 137 for(k=1;k<HeaderSplit.length;k++){ 138 bodyInnerHTML += '\'' + HeaderSplit[k]; 139 } 140 HeaderSplit = bodyInnerHTML.split('$['); 141 bodyInnerHTML = HeaderSplit[0]; 142 for(k=1;k<HeaderSplit.length;k++){ 143 bodyInnerHTML += '<' + HeaderSplit[k]; 144 } 145 HeaderSplit = bodyInnerHTML.split('$]'); 146 bodyInnerHTML = HeaderSplit[0]; 147 for(k=1;k<HeaderSplit.length;k++){ 148 bodyInnerHTML += '>' + HeaderSplit[k]; 149 } 150 151 //変換して生成された<hdcolor>、</hdcolor>を更に変換 / Then convert <hdcolor> and </hdcolor> generated by the script above 152 HeaderSplit = bodyInnerHTML.split('<hdcolor'); 153 bodyInnerHTML = HeaderSplit[0]; 154 for(k=1;k<HeaderSplit.length;k++){ 155 bodyInnerHTML += '<font color=' + HeaderSplit[k]; 156 } 157 HeaderSplit = bodyInnerHTML.split('</hdcolor'); 158 bodyInnerHTML = HeaderSplit[0]; 159 for(k=1;k<HeaderSplit.length;k++){ 160 bodyInnerHTML += '</font' + HeaderSplit[k]; 161 } 162 163 HeaderSplit = bodyInnerHTML.split('://'); 164 bodyInnerHTML = HeaderSplit[0]; 165 for(k=1;k<HeaderSplit.length;k++){ 166 bodyInnerHTML += ':\\//' + HeaderSplit[k]; 167 } 168 169 bodyInnerHTML = bodyInnerHTML.replace("/\".+__.+\"/g","\0001\0001"); 170 for(i=0;i<StyleArray.length;i++){ 171 if(i == 2) continue; 172 HeaderSplit = bodyInnerHTML.split('\\' + StyleArray[i]); 173 bodyInnerHTML = HeaderSplit[0]; 174 for(k=1;k<HeaderSplit.length;k++){ 175 bodyInnerHTML += '⁥⁥' + HeaderSplit[k]; 176 } 177 178 HeaderSplit = bodyInnerHTML.split(StyleArray[i]); 179 result = HeaderSplit[0]; 180 181 for(k=1;k<HeaderSplit.length;k++){ 182 result += '<' + (k%2==0?'/':'') + ConvertArray[i] + '>' + HeaderSplit[k]; 183 } 184 bodyInnerHTML = result; 185 186 HeaderSplit = bodyInnerHTML.split('⁥⁥'); 187 bodyInnerHTML = HeaderSplit[0]; 188 for(k=1;k<HeaderSplit.length;k++){ 189 bodyInnerHTML += StyleArray[i] + HeaderSplit[k]; 190 } 191 } 192 193 document.body.innerHTML = bodyInnerHTML; 194 195 TagsUnder(); 196 197 // textareaタグのデータを戻す / Restore datas in <textarea> 198 for(k=0;k<TextareaBoxs.length;k++){ 199 TextareaBoxs[k].innerHTML = TextareaStrs[k]; 200 } 201 202 // preタグのデータを戻す / Restore datas in <pre> 203 for(k=0;k<PreBoxs.length;k++){ 204 PreBoxs[k].innerHTML = PreStrs[k]; 205 } 206 207 // wss-nowiki-selectionクラスのデータを戻す / Restore datas in the class "wss-nowiki-section" 208 for(k=0;k<WSSNoWikiBoxs.length;k++){ 209 WSSNoWikiBoxs[k].innerHTML = WSSNoWikiStrs[k]; 210 } 211 212 // diffクラスのデータを戻す / Restore datas in the class "diff" 213 for(k=0;k<DiffBoxs.length;k++){ 214 DiffBoxs[k].innerHTML = DiffStrs[k]; 215 } 216 217 // formタグのデータを戻す / Restore datas in <form> 218 for(k=0;k<FormBoxs.length;k++){ 219 FormBoxs[k].innerHTML = FormStrs[k]; 220 } 221} 222 223function TagsUnder(){ 224 var bodyInnerHTML = document.body.innerHTML; 225 var Headers; 226 var i; 227 var j; 228 var k; 229 var HeaderSplit; 230 var result; 231 232 for(i=1;i<=6;i++){ 233 Headers = document.getElementsByTagName('h' + i); 234 for(j=0;j<Headers.length;j++){ 235 result = Headers[j].innerHTML; 236 237 HeaderSplit = result.split(StyleArray[2]); 238 result = HeaderSplit[0]; 239 240 for(k=1;k<HeaderSplit.length;k++){ 241 result += '<' + (k%2==0?'/':'') + ConvertArray[2] + '>' + HeaderSplit[k]; 242 } 243 244 Headers[j].innerHTML = result; 245 } 246 Headers = document.getElementsByClassName('level' + i); 247 for(j=0;j<Headers.length;j++){ 248 result = Headers[j].innerHTML; 249 250 HeaderSplit = result.split(StyleArray[2]); 251 result = HeaderSplit[0]; 252 253 for(k=1;k<HeaderSplit.length;k++){ 254 result += '<' + (k%2==0?'/':'') + ConvertArray[2] + '>' + HeaderSplit[k]; 255 } 256 257 Headers[j].innerHTML = result; 258 } 259 } 260 Headers = document.getElementsByTagName('p'); 261 for(j=0;j<Headers.length;j++){ 262 result = Headers[j].innerHTML; 263 264 HeaderSplit = result.split(StyleArray[2]); 265 result = HeaderSplit[0]; 266 267 for(k=1;k<HeaderSplit.length;k++){ 268 result += '<' + (k%2==0?'/':'') + ConvertArray[2] + '>' + HeaderSplit[k]; 269 } 270 271 Headers[j].innerHTML = result; 272 } 273} 274