Mercurial > hg > extraction-interface
comparison js/taggingtext.js @ 47:886f43b26ee2 extractapp
move/remove develop folder
author | Zoe Hong <zhong@mpiwg-berlin.mpg.de> |
---|---|
date | Tue, 17 Mar 2015 10:54:13 +0100 |
parents | |
children | b2c1fae5cf6a |
comparison
equal
deleted
inserted
replaced
46:b3ca5d2b4d3f | 47:886f43b26ee2 |
---|---|
1 // === for taggingtext.php === | |
2 var stringBeforeChange=""; | |
3 var stringBeforeChangeStack = []; | |
4 var lastAddTag=""; | |
5 | |
6 window.onbeforeunload = function() { | |
7 return "Are you sure?"; | |
8 }; | |
9 | |
10 | |
11 /* | |
12 $(document).on("mouseup", function (e) { | |
13 e.stopPropagation(); | |
14 $('.questionMarkClass').remove(); | |
15 $('.tagItemDivClass').remove(); | |
16 alert("Remove"); | |
17 }); | |
18 | |
19 | |
20 $(document).on("click", '.questionMarkClass', function (e) { | |
21 e.stopPropagation(); | |
22 }); | |
23 */ | |
24 function tagTime() { | |
25 saveUndoText(); | |
26 var el = document.getElementById("editable-area"); | |
27 var str="" + el.innerHTML; | |
28 | |
29 var regexText=/(<?php echo $wordlistArray[0][2]; ?>)(○?)(一|二|三|四|五|六|七|八|九)?(○?)(十)?(○?)(一|二|三|四|五|六|七|八|九|元|十)(○?)(年)/g; | |
30 var replaceText="<time>$1$2$3$4$5$6$7$8$9</time>"; | |
31 var matchedCount = str.match(regexText).length; | |
32 str = str.replace(regexText, replaceText); | |
33 | |
34 var regexText=/(?!(>))(<?php echo $wordlistArray[0][2]; ?>)/g; | |
35 var replaceText="<time>$1$2</time>"; | |
36 matchedCount += str.match(regexText).length; | |
37 el.innerHTML = str.replace(regexText, replaceText); | |
38 | |
39 var regexText=/(一|二|三|四|五|六|七|八|九)?(○?)(十)?(○?)(一|二|三|四|五|六|七|八|九|元|十)(○?)(年)(?!(<))/g; | |
40 var replaceText="<time>$1$2$3$4$5$6$7</time>"; | |
41 matchedCount += str.match(regexText).length; | |
42 el.innerHTML = str.replace(regexText, replaceText); | |
43 | |
44 alert( "Tagged "+matchedCount+" entities!" ); | |
45 } | |
46 | |
47 function removeTagNewDiv( eventObject, tagName, tagObject ) { | |
48 saveUndoText(); | |
49 var newdiv = document.createElement("div"); | |
50 newdiv.id = "questionMarkId"; | |
51 newdiv.setAttribute("class", "questionMarkClass"); | |
52 newdiv.style.cssText = 'top:'+eventObject.pageY+'; left:'+eventObject.pageX+'; position:absolute; background-color: white; border:1px solid black; padding: 5px'; | |
53 newdiv.innerHTML = "Tag: "+tagName+"<br>Value: "+tagObject.text()+"<br>"; | |
54 | |
55 | |
56 var newbutton = $('<button>Remove this</button>').mouseup(function (e2) { | |
57 var textKeep = $(this).parent().parent().html(); | |
58 var regexText=/<div(.*?)<\/div>/g; | |
59 var replaceText=""; | |
60 textKeep = textKeep.replace(regexText, replaceText); | |
61 | |
62 $(this).parent().parent().replaceWith( textKeep ); | |
63 }); | |
64 newbutton.appendTo(newdiv); | |
65 | |
66 var newbutton = $('<button>Remove this(with newline)</button>').mouseup(function (e2) { | |
67 var textKeep = $(this).parent().parent().html(); | |
68 var regexText=/<div(.*?)<\/div>/g; | |
69 var replaceText=""; | |
70 textKeep = textKeep.replace(regexText, replaceText); | |
71 | |
72 var newLineBefore = $(this).parent().parent().prev(); | |
73 if ( newLineBefore.prop("tagName") == "BR" ) { | |
74 $(this).parent().parent().prev().replaceWith( ); | |
75 } | |
76 $(this).parent().parent().replaceWith( textKeep ); | |
77 }); | |
78 newbutton.appendTo(newdiv); | |
79 | |
80 var newbutton = $('<button>Remove all</button>').mouseup(function (e2) { | |
81 var textKeep = $(this).parent().parent().html(); | |
82 var regexText=/<div(.*?)<\/div>/g; | |
83 var replaceText=""; | |
84 textKeep = textKeep.replace(regexText, replaceText); | |
85 | |
86 $(this).parent().parent().replaceWith( textKeep ); | |
87 | |
88 var el = document.getElementById("editable-area"); | |
89 var regexText=new RegExp("<"+tagName+">("+textKeep+")</"+tagName+">", "g"); | |
90 var replaceText="$1"; | |
91 var str="" + el.innerHTML; | |
92 | |
93 if ( str.match(regexText)==null ) { | |
94 alert( "Removed 1 entity!" ); | |
95 } else { | |
96 alert( "Removed "+(parseInt(str.match(regexText).length)+1)+" entities!" ); | |
97 } | |
98 el.innerHTML = str.replace(regexText, replaceText); | |
99 }); | |
100 newbutton.appendTo(newdiv); | |
101 | |
102 var newbutton = $('<button>Remove all(with newline)</button>').mouseup(function (e2) { | |
103 var textKeep = $(this).parent().parent().html(); | |
104 var regexText=/<div(.*?)<\/div>/g; | |
105 var replaceText=""; | |
106 textKeep = textKeep.replace(regexText, replaceText); | |
107 | |
108 $(this).parent().remove(); | |
109 | |
110 var el = document.getElementById("editable-area"); | |
111 var regexText=new RegExp("<br><"+tagName+">("+textKeep+")</"+tagName+">", "g"); | |
112 var replaceText="$1"; | |
113 var str="" + el.innerHTML; | |
114 | |
115 alert( "Removed "+str.match(regexText).length+" entities!" ); | |
116 el.innerHTML = str.replace(regexText, replaceText); | |
117 }); | |
118 newbutton.appendTo(newdiv); | |
119 | |
120 tagObject.append(newdiv); | |
121 } | |
122 | |
123 | |
124 | |
125 function removeTagTitle( range, container ) { | |
126 saveUndoText(); | |
127 range.deleteContents(); | |
128 | |
129 lastAddTag = $('#RemoveTitletagType').val(); | |
130 | |
131 var stringtemp = container.innerHTML; | |
132 | |
133 if ( $('#RemoveTitletagName').val() == "" ) { | |
134 var regexText="<"+lastAddTag+">〈(.*?)〉</"+lastAddTag+">"; | |
135 var replaceText=""; | |
136 stringtemp = stringtemp.replace(new RegExp(regexText, "g"), replaceText); | |
137 | |
138 var regexText="<"+lastAddTag+">(.*?)</"+lastAddTag+">"; | |
139 var replaceText="$1"; | |
140 stringtemp = stringtemp.replace(new RegExp(regexText, "g"), replaceText); | |
141 } else { | |
142 var regexText="<"+lastAddTag+">〈"+$('#RemoveTitletagName').val()+"〉</"+lastAddTag+">"; | |
143 var replaceText=""; | |
144 stringtemp = stringtemp.replace(new RegExp(regexText, "g"), replaceText); | |
145 | |
146 var regexText="<"+lastAddTag+">("+$('#RemoveTitletagName').val()+")</"+lastAddTag+">"; | |
147 var replaceText="$1"; | |
148 stringtemp = stringtemp.replace(new RegExp(regexText, "g"), replaceText); | |
149 } | |
150 | |
151 var newdiv = document.createElement("aaaa"); | |
152 newdiv.innerHTML = stringtemp; | |
153 range.insertNode(newdiv); | |
154 | |
155 var el = document.getElementById("editable-area"); | |
156 | |
157 var regexText=/<aaaa>/gi; | |
158 var replaceText=''; | |
159 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
160 | |
161 var regexText=/<\/aaaa>/gi; | |
162 var replaceText=''; | |
163 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
164 | |
165 $('.tagItemDivClass').remove(); | |
166 } | |
167 | |
168 function addTagTitle( range, container ) { | |
169 saveUndoText(); | |
170 lastAddTag = $('#TitletagType').val(); | |
171 var tag = "<"+$('#TitletagType').val()+">〈"+$('#TitletagName').val()+"〉</"+$('#TitletagType').val()+">"; | |
172 range.deleteContents(); | |
173 var stringtemp = container.innerHTML; | |
174 | |
175 var regexText=/<br>/g; | |
176 var replaceText="<br>"+tag; | |
177 stringtemp = stringtemp.replace(regexText, replaceText); | |
178 | |
179 var newdiv = document.createElement("aaaa"); | |
180 newdiv.innerHTML = tag+stringtemp; | |
181 range.insertNode(newdiv); | |
182 | |
183 var el = document.getElementById("editable-area"); | |
184 | |
185 | |
186 var regexText=/<aaaa>/gi; | |
187 var replaceText=''; | |
188 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
189 | |
190 var regexText=/<\/aaaa>/gi; | |
191 var replaceText=''; | |
192 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
193 | |
194 $('.tagItemDivClass').remove(); | |
195 } | |
196 | |
197 function cleanUpTextArea() { | |
198 var el = document.getElementById("editable-area"); | |
199 | |
200 var regexText=/<div>/gi; | |
201 var replaceText='<br>'; | |
202 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
203 | |
204 var regexText=/<\/div>/gi; | |
205 var replaceText=''; | |
206 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
207 | |
208 | |
209 var regexText=/<span style="(.*?)">/gi; | |
210 var replaceText=''; | |
211 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
212 | |
213 var regexText=/<\/span>/gi; | |
214 var replaceText=''; | |
215 el.innerHTML = el.innerHTML.replace(regexText, replaceText); | |
216 } | |
217 | |
218 function Undo() { | |
219 if ( stringBeforeChangeStack.length > 0 ) { | |
220 var el = document.getElementById("editable-area"); | |
221 el.innerHTML = stringBeforeChangeStack.pop(); | |
222 } else { | |
223 var el = document.getElementById("buttonUndo"); | |
224 el.disabled = true; | |
225 } | |
226 } | |
227 | |
228 function saveUndoText() { | |
229 var el = document.getElementById("editable-area"); | |
230 //stringBeforeChange = el.innerHTML; | |
231 stringBeforeChangeStack.push(el.innerHTML); | |
232 var el = document.getElementById("buttonUndo"); | |
233 el.disabled = false; | |
234 } | |
235 | |
236 function editText() { | |
237 var el = document.getElementById("editable-area"); | |
238 if ( $("#editTextId").html() == "Edit the text" ) { | |
239 saveUndoText(); | |
240 el.contentEditable = true; | |
241 $("button").attr("disabled", true); | |
242 $("#editTextId").attr("disabled", false); | |
243 $("#editTextId").html("Edit completed!"); | |
244 } else { | |
245 el.contentEditable = false; | |
246 cleanUpTextArea(); | |
247 $("button").attr("disabled", false); | |
248 $("#editTextId").html("Edit the text"); | |
249 } | |
250 } | |
251 | |
252 | |
253 function saveText(section_id) { | |
254 var el = document.getElementById("editable-area"); | |
255 $.ajax({ | |
256 url : './'+section_id, | |
257 async : false, | |
258 type : 'POST', | |
259 data : 'func=SaveFullText'+'&text='+encodeURIComponent(el.innerHTML)+'&filename='+section_id, | |
260 // data : 'func=SaveFullText'+'&text='+el.innerHTML+'&filename='+section_id | |
261 success: function (e) { | |
262 alert("Saved!"); | |
263 }, | |
264 error: function (e) { | |
265 alert("Haven't saved!"); | |
266 } | |
267 }).done(function(result) { | |
268 }); | |
269 | |
270 | |
271 } | |
272 | |
273 | |
274 | |
275 function preg_quote (str, delimiter) { | |
276 // http://kevin.vanzonneveld.net | |
277 // + original by: booeyOH | |
278 // + improved by: Ates Goral (http://magnetiq.com) | |
279 // + improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net) | |
280 // + bugfixed by: Onno Marsman | |
281 // + improved by: Brett Zamir (http://brett-zamir.me) | |
282 // * example 1: preg_quote("$40"); | |
283 // * returns 1: '\$40' | |
284 // * example 2: preg_quote("*RRRING* Hello?"); | |
285 // * returns 2: '\*RRRING\* Hello\?' | |
286 // * example 3: preg_quote("\\.+*?[^]$(){}=!<>|:"); | |
287 // * returns 3: '\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:' | |
288 return (str + '').replace(new RegExp('[.\\\\+*?\\[\\^\\]$(){}=!<>|:\\' + (delimiter || '') + '-]', 'g'), '\\$&'); | |
289 } | |
290 | |
291 function replaceRegex() { | |
292 saveUndoText(); | |
293 | |
294 var startPage = $('#regexPageStart2').val(); | |
295 var endPage = $('#regexPageEnd2').val(); | |
296 var el = document.getElementById("editable-area"); | |
297 var str="" + el.innerHTML; | |
298 | |
299 var regexText=document.getElementById("regexText").value; | |
300 var replaceText=document.getElementById("replaceText").value; | |
301 var str="" + el.innerHTML; | |
302 | |
303 if ( startPage == "" ) { | |
304 alert( "Tagged "+str.match(new RegExp(regexText, "g")).length+" entities!" ); | |
305 el.innerHTML = str.replace(new RegExp(regexText, "g"), replaceText); | |
306 } else { | |
307 var regexText2="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】"; | |
308 var partString = ""+str.match(new RegExp(regexText2, "g")); | |
309 alert(partString); | |
310 | |
311 alert( "Tagged "+partString.match(new RegExp(regexText, "g")).length+" entities!" ); | |
312 var resultString = partString.replace(new RegExp(regexText, "g"), replaceText); | |
313 | |
314 str="" + el.innerHTML; | |
315 el.innerHTML = str.replace(new RegExp(regexText, "g"), resultString); | |
316 } | |
317 | |
318 //document.styleSheets[0].addRule("tag001", "color:green;") | |
319 } | |
320 | |
321 | |
322 //Tagging Items | |
323 function getSelected() { | |
324 if(window.getSelection) { | |
325 return window.getSelection(); | |
326 } else if (document.getSelection) { | |
327 return document.getSelection(); | |
328 } else { | |
329 var selection = document.selection && document.selection.createRange(); | |
330 if(selection.text) { | |
331 return selection.text; | |
332 } | |
333 return false; | |
334 } | |
335 return false; | |
336 } | |
337 | |
338 function tagStringWithTag( stringValue, tag ) { | |
339 saveUndoText(); | |
340 var el = document.getElementById("editable-area"); | |
341 var regexText="("+String(stringValue)+")"; | |
342 if ( tag=="person") { | |
343 var replaceText="<br><"+tag+">$1</"+tag+">"; | |
344 } else { | |
345 var replaceText="<"+tag+">$1</"+tag+">"; | |
346 } | |
347 var str="" + el.innerHTML; | |
348 | |
349 $('.tagItemDivClass').remove(); | |
350 alert( "Tagged "+str.match(new RegExp(regexText, "g")).length+" entities!" ); | |
351 el.innerHTML = str.replace(new RegExp(regexText, "g"), replaceText); | |
352 } | |
353 | |
354 | |
355 function tagwithtitle( range, stringSelection ) { | |
356 saveUndoText(); | |
357 range.deleteContents(); | |
358 //var newdiv = document.createElement("br"); | |
359 //range.insertNode(newdiv); | |
360 range.insertNode(document.createTextNode("〈"+stringSelection+"〉")); | |
361 var newdiv = document.createElement("br"); | |
362 range.insertNode(newdiv); | |
363 | |
364 $('.tagItemDivClass').remove(); | |
365 } | |
366 | |
367 function tagNameWithLastName() { | |
368 saveUndoText(); | |
369 var el = document.getElementById("editable-area"); | |
370 var regexText=/(○|】|^)(王|李|張|趙|劉|陳|楊|吳|黃|黄|朱|孫|郭|胡|呂|高|宋|徐|程|林|鄭|范|何|韓|曹|馬|許|田|馮|杜|周|曾|汪|蘇|董|方|蔡|梁|石|謝|賈|薛|彭|崔|唐|潘|鄧|史|錢|侯|魏|羅|葉|沈|孟|姚|傅|丁|章|蕭|蔣|盧|陸|袁|晁|譚|邵|歐陽|孔|詹|俞|尹|廖|閻|洪|夏|雷|葛|文|柳|陶|毛|丘|龔|蒲|邢|郝|龐|安|裴|折|施|游|金|鄒|湯|虞|嚴|鍾)([^○(舉人|縣人|歲貢|間任)]{1,3}|○[^○])(?=(○|$))/g; | |
371 var replaceText="$1<br><person>$2$3</person>$4"; | |
372 var str="" + el.innerHTML; | |
373 | |
374 alert( "Tagged "+str.match(regexText).length+" entities!" ); | |
375 el.innerHTML = str.replace(regexText, replaceText); | |
376 } | |
377 | |
378 function tagNameWithLastName2() { | |
379 saveUndoText(); | |
380 var el = document.getElementById("editable-area"); | |
381 var regexText="(○|】|^)("+$('#surname').val()+")([^○(舉人|縣人|歲貢|間任)]{1,3}|○[^○])(?=(○|$))"; | |
382 var replaceText="$1<br><person>$2$3</person>$4"; | |
383 var str="" + el.innerHTML; | |
384 | |
385 alert( "Tagged "+str.match(new RegExp(regexText, "g")).length+" entities!" ); | |
386 el.innerHTML = str.replace(new RegExp(regexText, "g"), replaceText); | |
387 } | |
388 | |
389 function tagBiogAddr() { | |
390 saveUndoText(); | |
391 var el = document.getElementById("editable-area"); | |
392 var str="" + el.innerHTML; | |
393 | |
394 var regexText=/(○)([^○]{1,6})(○?)(人)/g; | |
395 var replaceText="$1<biog_addr>$2</biog_addr>$3$4"; | |
396 el.innerHTML = str.replace(regexText, replaceText); | |
397 | |
398 alert( "Tagged "+str.match(regexText).length+" entities!" ); | |
399 } | |
400 | |
401 function smartRegexNew() { | |
402 $('#smartRegexPopUpDiv').css("display", "block"); | |
403 $('#smartRegexPopUpDiv').css("background-color", "White"); | |
404 $('#smartRegexPopUpDiv').css("width", "400px"); | |
405 $('#smartRegexPopUpDiv').css("height", "300px"); | |
406 $('#smartRegexPopUpDiv').css("top", "170px"); | |
407 $('#smartRegexPopUpDiv').css("left", "-400px"); | |
408 $('#smartRegexPopUpDiv').css("border", "1px solid black"); | |
409 $('#smartRegexPopUpDiv').css("padding", "5px"); | |
410 | |
411 $('#smartRegexPopUpAdd').attr("disabled", false); | |
412 $('#smartRegexPopUpEdit').attr("disabled", "disabled"); | |
413 $('#smartRegexPopUpDel').attr("disabled", "disabled"); | |
414 $('#smartRegexPopUpBack').attr("disabled", "disabled"); | |
415 $('#smartRegexPopUpFor').attr("disabled", "disabled"); | |
416 } | |
417 | |
418 function replaceSmartClose() { | |
419 $('#smartRegexPopUpDiv').css("display", "none"); | |
420 $("#smartRegexPopUpSelectWord").val("NULL"); | |
421 $("#smartRegexPopUpText").val(""); | |
422 $("#smartRegexPopUpName").val(""); | |
423 } | |
424 | |
425 function replaceSmartEdit(){ | |
426 thisObject = $('#smartRegexPopUpDiv').attr("editID"); | |
427 | |
428 $('#smartRegexShowDiv > #'+thisObject).attr("class", "span_"+$("#smartRegexPopUpSelectTag").val()); | |
429 $('#smartRegexShowDiv > #'+thisObject).attr("regexText", $("#smartRegexPopUpText").val()); | |
430 $('#smartRegexShowDiv > #'+thisObject).attr("regexReplace", $("#smartRegexPopUpSelectTag").val()); | |
431 $('#smartRegexShowDiv > #'+thisObject).text($("#smartRegexPopUpName").val()); // smartRgextPopUpName.val() is the name of this regex | |
432 | |
433 } | |
434 | |
435 function replaceSmartDel() { | |
436 thisObject = $('#smartRegexPopUpDiv').attr("editID"); | |
437 $('#smartRegexShowDiv > #'+thisObject).remove(); | |
438 } | |
439 | |
440 function replaceSmartFor() { | |
441 thisObject = $('#smartRegexPopUpDiv').attr("editID"); | |
442 //var wahaha = $('#'+thisObject).clone(); | |
443 //var hahawa = $('#'+thisObject).next(); | |
444 //$('#'+thisObject).remove(); | |
445 //wahaha.insertAfter(hahawa); | |
446 $('#smartRegexShowDiv > #'+thisObject).insertAfter( $('#'+thisObject).next() ); | |
447 } | |
448 | |
449 function replaceSmartBack() { | |
450 thisObject = $('#smartRegexPopUpDiv').attr("editID"); | |
451 //var wahaha = $('#'+thisObject).clone(); | |
452 //var hahawa = $('#'+thisObject).prev(); | |
453 //$('#'+thisObject).remove(); | |
454 //wahaha.insertBefore(hahawa); | |
455 $('#smartRegexShowDiv > #'+thisObject).insertBefore( $('#'+thisObject).prev() ); | |
456 } | |
457 | |
458 function replaceSmartAdd() { | |
459 var newdiv = document.createElement("span"); | |
460 newdiv.innerHTML = " "+$("#smartRegexPopUpName").val()+" "; | |
461 $(newdiv).css("border", "1px solid black"); | |
462 $(newdiv).css("width", "100px"); | |
463 | |
464 $(newdiv).attr("class", "span_"+$("#smartRegexPopUpSelectTag").val()); | |
465 $(newdiv).attr("id", "span_"+$("#smartRegexPopUpName").val()); | |
466 $(newdiv).attr("regexText", $("#smartRegexPopUpText").val()); | |
467 $(newdiv).attr("regexReplace", $("#smartRegexPopUpSelectTag").val()); | |
468 | |
469 $('#smartRegexShowDiv').append(newdiv); | |
470 | |
471 replaceSmartClose(); | |
472 } | |
473 | |
474 $(document).on("click", '#smartRegexShowDiv > span', function (e) { | |
475 | |
476 $('#smartRegexPopUpDiv').css("display", "block"); | |
477 $('#smartRegexPopUpDiv').css("background-color", "White"); | |
478 $('#smartRegexPopUpDiv').css("width", "400px"); | |
479 $('#smartRegexPopUpDiv').css("height", "300px"); | |
480 $('#smartRegexPopUpDiv').css("top", "100px"); | |
481 $('#smartRegexPopUpDiv').css("left", "-400px"); | |
482 $('#smartRegexPopUpDiv').css("border", "1px solid black"); | |
483 //$('#smartRegexPopUpDiv').css("padding", "5px"); | |
484 | |
485 | |
486 $('#smartRegexPopUpDiv').attr("editID", $(this).attr("id")); | |
487 | |
488 | |
489 var _id = $(this).attr("id"); | |
490 var aa = document.getElementById(_id); | |
491 var name = aa.textContent; | |
492 | |
493 $('#smartRegexPopUpName').val(name); | |
494 // $('#smartRegexPopUpName').val($(this).html()); | |
495 // why there is a <span i="transmark"></span> inbetween? | |
496 | |
497 | |
498 $('#smartRegexPopUpText').val($(this).attr("regexText")); | |
499 $('#smartRegexPopUpSelectTag').val($(this).attr("regexReplace")); | |
500 | |
501 $('#smartRegexPopUpAdd').attr("disabled", "disabled"); | |
502 $('#smartRegexPopUpEdit').attr("disabled", false); | |
503 $('#smartRegexPopUpDel').attr("disabled", false); | |
504 $('#smartRegexPopUpBack').attr("disabled", false); | |
505 $('#smartRegexPopUpFor').attr("disabled", false); | |
506 }); | |
507 | |
508 function smartRegexEmpty() { | |
509 $('#smartRegexShowDiv').html(""); | |
510 } | |
511 | |
512 function replaceSmartRunWithBr() { | |
513 | |
514 var replaceSmartRegexString = ""; | |
515 var replaceSmartReplaceString = ""; | |
516 var count=1; | |
517 | |
518 saveUndoText(); | |
519 | |
520 $('#smartRegexShowDiv').children('span').each(function () { | |
521 replaceSmartRegexString += "(" + $(this).attr("regexText") + ")"; | |
522 if ( $(this).attr("regexReplace") == "notag" || $(this).attr("regexReplace") == "NOTAG") { | |
523 replaceSmartReplaceString += "$" + count; | |
524 } else if ( $(this).attr("regexReplace") == "title" ) { | |
525 replaceSmartReplaceString += "<br>〈" + "$" + count + "〉<br>"; | |
526 } else { | |
527 // with <br> before | |
528 replaceSmartReplaceString += "<br><" + $(this).attr("regexReplace") + ">" + "$" + count + "</"+ $(this).attr("regexReplace") +">"; | |
529 } | |
530 count++; | |
531 }); | |
532 | |
533 | |
534 var startPage = $('#regexPageStart').val(); | |
535 var endPage = $('#regexPageEnd').val(); | |
536 var el = document.getElementById("editable-area"); | |
537 var str="" + el.innerHTML; | |
538 | |
539 if ( startPage == "" ) { | |
540 alert( "Tagged "+str.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
541 el.innerHTML = str.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
542 } else { | |
543 var regexText="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】"; | |
544 var partString = ""+str.match(new RegExp(regexText, "g")); | |
545 alert(partString); | |
546 | |
547 alert( "Tagged "+partString.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
548 var resultString = partString.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
549 | |
550 str="" + el.innerHTML; | |
551 el.innerHTML = str.replace(new RegExp(regexText, "g"), resultString); | |
552 } | |
553 } | |
554 | |
555 function replaceSmartRun() { | |
556 | |
557 var replaceSmartRegexString = ""; | |
558 var replaceSmartReplaceString = ""; | |
559 var count=1; | |
560 | |
561 saveUndoText(); | |
562 | |
563 $('#smartRegexShowDiv').children('span').each(function () { | |
564 replaceSmartRegexString += "(" + $(this).attr("regexText") + ")"; | |
565 if ( $(this).attr("regexReplace") == "notag" || $(this).attr("regexReplace") == "NOTAG" ) { | |
566 replaceSmartReplaceString += "$" + count; | |
567 } else if ( $(this).attr("regexReplace") == "title" ) { | |
568 replaceSmartReplaceString += "<br>〈" + "$" + count + "〉<br>"; | |
569 } else { | |
570 replaceSmartReplaceString += "<" + $(this).attr("regexReplace") + ">" + "$" + count + "</"+ $(this).attr("regexReplace") +">"; | |
571 } | |
572 count++; | |
573 }); | |
574 | |
575 | |
576 var startPage = $('#regexPageStart').val(); | |
577 var endPage = $('#regexPageEnd').val(); | |
578 var el = document.getElementById("editable-area"); | |
579 var str="" + el.innerHTML; | |
580 | |
581 if ( startPage == "" ) { | |
582 alert( "Tagged "+str.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
583 el.innerHTML = str.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
584 } else { | |
585 var regexText="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】"; | |
586 var partString = ""+str.match(new RegExp(regexText, "g")); | |
587 alert(partString); | |
588 | |
589 alert( "Tagged "+partString.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
590 var resultString = partString.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
591 | |
592 str="" + el.innerHTML; | |
593 el.innerHTML = str.replace(new RegExp(regexText, "g"), resultString); | |
594 } | |
595 } | |
596 | |
597 function replaceSmartRunSpace() { | |
598 | |
599 var replaceSmartRegexString = ""; | |
600 var replaceSmartReplaceString = ""; | |
601 var count=1; | |
602 saveUndoText(); | |
603 | |
604 $('#smartRegexShowDiv').children('span').each(function () { | |
605 //alert($(this).attr("regexText")); | |
606 replaceSmartRegexString += "(" + $(this).attr("regexText") + ")(○*)"; | |
607 if ( $(this).attr("regexReplace") == "notag" || $(this).attr("regexReplace") == "NOTAG") { | |
608 replaceSmartReplaceString += "$" + count; | |
609 } else if ( $(this).attr("regexReplace") == "title" ) { | |
610 replaceSmartReplaceString += "<br>〈" + "$" + count + "〉<br>"; | |
611 } else { | |
612 replaceSmartReplaceString += "<" + $(this).attr("regexReplace") + ">" + "$" + count + "</"+ $(this).attr("regexReplace") +">"; | |
613 } | |
614 count++; | |
615 replaceSmartReplaceString += "$" + count; | |
616 count++; | |
617 }); | |
618 | |
619 var startPage = $('#regexPageStart').val(); | |
620 var endPage = $('#regexPageEnd').val(); | |
621 var el = document.getElementById("editable-area"); | |
622 var str="" + el.innerHTML; | |
623 | |
624 if ( startPage == "" ) { | |
625 alert( "Tagged "+str.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
626 el.innerHTML = str.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
627 } else { | |
628 var regexText="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】"; | |
629 var partString = ""+str.match(new RegExp(regexText, "g")); | |
630 alert(partString); | |
631 | |
632 alert( "Tagged "+partString.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
633 var resultString = partString.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
634 | |
635 str="" + el.innerHTML; | |
636 el.innerHTML = str.replace(new RegExp(regexText, "g"), resultString); | |
637 } | |
638 | |
639 //alert( "Tagged "+str.match(new RegExp(replaceSmartRegexString, "g")).length+" entities!" ); | |
640 //el.innerHTML = str.replace(new RegExp(replaceSmartRegexString, "g"), replaceSmartReplaceString); | |
641 } | |
642 | |
643 function smartRegexSave(topic_id) { | |
644 console.log("topic_id"+topic_id); | |
645 var name=prompt("Please enter this Regex name",RegexLoadedName); | |
646 | |
647 if (name!=null){ | |
648 $.ajax({ | |
649 type : 'POST', | |
650 url : './TaggingText', | |
651 async : false, | |
652 data : 'func=SmartRegexSave'+'&text='+encodeURIComponent($('#smartRegexShowDiv').html())+'&filename='+name+'&topic_id='+topic_id, | |
653 error: function (result) { | |
654 alert("Error"); | |
655 }, | |
656 success: function (result) { | |
657 var obj = jQuery.parseJSON(result); | |
658 | |
659 if (obj == "ErrorDB") { | |
660 alert("Error when saving to database!!"); | |
661 | |
662 } else if (obj == "ForceSave") { | |
663 var retVal = confirm("You will over write the previous regex file. Do you want to proceed?"); | |
664 | |
665 if( retVal == true ){ | |
666 // update regex file | |
667 $.ajax({ | |
668 type : 'POST', | |
669 url : './TaggingText', | |
670 async : false, | |
671 data : 'func=SmartRegexSave'+'&text='+encodeURIComponent($('#smartRegexShowDiv').html())+'&filename='+name+'&topic_id='+topic_id+'&forcesave=1', | |
672 error: function (result) { | |
673 alert("Error"); | |
674 }, | |
675 success: function (result) { | |
676 alert("Update regex file."); | |
677 } | |
678 }); | |
679 }else{ | |
680 alert("You have not saved the regex file."); | |
681 } | |
682 | |
683 } else { | |
684 alert("Saved!"); | |
685 } | |
686 } | |
687 }).done(function(result) { | |
688 }); | |
689 } | |
690 } | |
691 | |
692 function smartRegexLoad(topic_id) { | |
693 $('#load_regex_div').html(""); | |
694 $('#load_regex_div').css("display", "block"); | |
695 $('#load_regex_div').css("border", "1px solid black"); | |
696 $('#load_regex_div').css("background-color", "White"); | |
697 $('#load_regex_div').css("width", "300px"); | |
698 $('#load_regex_div').css("height", "70px"); | |
699 $('#load_regex_div').css("top", "100px"); | |
700 $('#load_regex_div').css("left", "-300px"); | |
701 | |
702 var newselect = document.createElement("select"); | |
703 newselect.id = "loadRegexSelect"; | |
704 | |
705 $.ajax({ | |
706 type: 'POST', | |
707 url: './TaggingText', | |
708 dataType: 'json', | |
709 data: "func=SmartRegexLoad&topic_id="+topic_id, | |
710 //cache: false, | |
711 success: function (data) { | |
712 $.each(data, function(index, element) { | |
713 // index is the filename (without '.txt') | |
714 // element is the content in the file | |
715 newselect.innerHTML += "<option value=\""+index+"\">"+index+"</option>\n"; | |
716 //alert(index); | |
717 //alert(element); | |
718 var newdiv = document.createElement("div"); | |
719 $(newdiv).css("display", "none"); | |
720 $(newdiv).html(element); | |
721 | |
722 $(newdiv).attr("id", "div_"+index); | |
723 $('#load_regex_div').append(newdiv); | |
724 }); | |
725 | |
726 | |
727 }, | |
728 error: function (data) { | |
729 console.log("SmartRegexLoad fails"); | |
730 } | |
731 | |
732 }); | |
733 | |
734 /* | |
735 $.ajax({ | |
736 type: 'POST', | |
737 url: '../models/_extractapp_func.php', | |
738 dataType: 'json', | |
739 data: "func=SmartRegexLoad", | |
740 //cache: false, | |
741 success: function (data) { | |
742 $.each(data, function(index, element) { | |
743 newselect.innerHTML += "<option value=\""+index+"\">"+index+"</option>\n"; | |
744 //alert(index); | |
745 //alert(element); | |
746 var newdiv = document.createElement("div"); | |
747 $(newdiv).css("display", "none"); | |
748 $(newdiv).html(element); | |
749 $(newdiv).attr("id", "div_"+index); | |
750 $('#load_regex_div').append(newdiv); | |
751 }); | |
752 | |
753 }, | |
754 error: function (data) { | |
755 console.log("SmartRegexLoad fails"); | |
756 } | |
757 | |
758 }); | |
759 */ | |
760 | |
761 $('#load_regex_div').append(newselect); | |
762 var newbutton = document.createElement("button"); | |
763 $(newbutton).html("Load"); | |
764 $(newbutton).addClass("btn btn-info"); | |
765 $(newbutton).attr("onclick", "loadRegexAdd()"); | |
766 $('#load_regex_div').append(newbutton); | |
767 var newbutton = document.createElement("button"); | |
768 $(newbutton).html("Close"); | |
769 $(newbutton).addClass("btn btn-default"); | |
770 $(newbutton).attr("onclick", "$('#load_regex_div').css(\"display\", \"none\");"); | |
771 $('#load_regex_div').append(newbutton); | |
772 } | |
773 | |
774 var RegexLoadedName = ""; | |
775 function loadRegexAdd() { | |
776 RegexLoadedName = $('#loadRegexSelect').val(); | |
777 var divName = "#div_"+RegexLoadedName; | |
778 var name = $(divName).html(); | |
779 $('#smartRegexShowDiv').html(name ); | |
780 $('#load_regex_div').css("display", "none"); | |
781 } | |
782 // === | |
783 | |
784 | |
785 // === for editwordlist.php === | |
786 function addNewList() { | |
787 var el = document.getElementById("listNameText"); | |
788 $.ajax({ | |
789 //url : '../../models/_extractapp_func.php', | |
790 url : './Editwordlist', | |
791 async : false, | |
792 type : 'POST', | |
793 data : 'func=AddNewList'+'&text='+el.value, | |
794 success: function (e) { | |
795 alert("Added!"); | |
796 document.location.reload(true); | |
797 }, | |
798 error: function (e) { | |
799 console.log("error when add new list"); | |
800 alert("Haven't added new list!!"); | |
801 } | |
802 }).done(function(result) { | |
803 | |
804 }); | |
805 } | |
806 | |
807 function saveWordlist(id ) { | |
808 var el = document.getElementById("editable-area"); | |
809 $.ajax({ | |
810 url : './Editwordlist', | |
811 async : false, | |
812 type : 'POST', | |
813 data : 'func=SaveWordlist'+'&text='+el.innerHTML+'&filename='+id, | |
814 success: function (e) { | |
815 alert("Saved!"); | |
816 }, | |
817 error: function (e) { | |
818 alert("Haven't saved!"); | |
819 } | |
820 }).done(function(result) { | |
821 | |
822 }); | |
823 | |
824 } | |
825 | |
826 function editWordlistText( id ) { | |
827 var el = document.getElementById("editable-area"); | |
828 el.contentEditable = true; | |
829 } | |
830 | |
831 function replaceRegex() { | |
832 var el = document.getElementById("editable-area"); | |
833 var regexText=document.getElementById("regexText").value; | |
834 var replaceText=document.getElementById("replaceText").value; | |
835 var str="" + el.innerHTML; | |
836 el.innerHTML = str.replace(new RegExp(regexText, "g"), replaceText); | |
837 } | |
838 | |
839 function showListContent( id ) { | |
840 var xhr = new XMLHttpRequest(); | |
841 xhr.onreadystatechange = process; | |
842 xhr.open("POST", "../data/wordlist/"+id+".txt?t=" + Math.random(), true); | |
843 // TODO: should show the latest wordlist file. eg. id_timestamp.txt, rather than open the original id.txt file | |
844 | |
845 | |
846 xhr.send(); | |
847 | |
848 function process() { | |
849 if (xhr.readyState == 4) { | |
850 var el = document.getElementById("editable-area"); | |
851 var str = xhr.responseText | |
852 var regexText=/\n/g; | |
853 var replaceText="<br>\n"; | |
854 el.innerHTML = str.replace(regexText, replaceText); | |
855 | |
856 document.getElementById("button-area").innerHTML= | |
857 "<form action=\"javascript:void(0);\"> \ | |
858 <fieldset><legend>Edit:</legend> \ | |
859 <button id=\"buttonEditText\" onclick=\"editWordlistText("+id+")\" style=\"height: 30px; width: 220px\">Edit the text</button></br> \ | |
860 <button id=\"buttonSaveText\" onclick=\"saveWordlist("+id+")\" style=\"height: 30px; width: 220px\">Save the text</button> \ | |
861 </fieldset> \ | |
862 <fieldset><legend>Replace By Regex:</legend> \ | |
863 Regex: <input type=\"text\" size=\"30\" id=\"regexText\"></br> \ | |
864 Replace: <input type=\"text\" size=\"30\" id=\"replaceText\"><br> \ | |
865 <button onclick=\"replaceRegex()\">Replace!</button> \ | |
866 </fieldset> \ | |
867 </form>"; | |
868 } | |
869 } | |
870 } | |
871 | |
872 // ============ | |
873 | |
874 // === for edittaglist.php === | |
875 function editTaglist(topic_id) { | |
876 var form = document.createElement("form"); | |
877 form.setAttribute("method", "post"); | |
878 form.setAttribute("action", "./EditTaglist"); | |
879 form.setAttribute("target", "_blank"); | |
880 | |
881 var hiddenField = document.createElement("input"); | |
882 hiddenField.setAttribute("name", "topic_id"); | |
883 hiddenField.setAttribute("value", topic_id); | |
884 form.appendChild(hiddenField); | |
885 | |
886 if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) { | |
887 document.body.appendChild(form); | |
888 form.submit(); | |
889 } else { | |
890 form.submit(); // works under IE and Chrome, but not FF | |
891 } | |
892 } | |
893 | |
894 | |
895 // ============ | |
896 // | |
897 | |
898 |