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