diff develop/views/Extractapp/taggingtext.php @ 6:63e08b98032f

rewrite extraction interface into PHP MVC architecture. (Although js hasn't been rewritten into MVC, it's fitted into the current PHP MVC architecture.) - The root of the new PHP MVC is at 'develop/'. - extraction interface is called "Extractapp" with several action, eg TaggingText, EditWordlist, EditTaglist, ExportTable.
author Zoe Hong <zhong@mpiwg-berlin.mpg.de>
date Thu, 05 Feb 2015 16:07:53 +0100
parents
children da10158c6d0a
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/develop/views/Extractapp/taggingtext.php	Thu Feb 05 16:07:53 2015 +0100
@@ -0,0 +1,315 @@
+<?php
+// --- initialize config file and input text ---
+$stringInput = $viewmodel['stringInput'];
+$wordlistArray = $viewmodel['wordlistArray'];
+$taglistArray = $viewmodel['taglistArray'];
+$section_id = $viewmodel['section_id'];
+
+?>
+
+<html>
+<head>
+<title></title>
+
+<style>
+dynasty
+{
+	color:red;
+}
+nianhao
+{
+	color:blue;
+}
+name
+{
+	color:orange;
+}
+#editable-area {
+	line-height:160%;
+	letter-spacing:1.5px;
+	font-size:21px;
+}
+
+
+<?php
+// color on the tags
+foreach ( $taglistArray as $taglistValue ) {
+	echo $taglistValue[2]."\n{\ncolor:".$taglistValue[3]."\n}\n";
+	
+	echo ".span_".$taglistValue[2]."\n{\nbackground-color:".$taglistValue[3]."\n}\n";
+}
+
+?>
+</style>
+
+
+</head>
+
+<body>
+
+<script type="text/javascript">
+
+<?php 
+foreach ( $taglistArray as $taglistValue ) {
+	echo '$(document).on("click", "'.$taglistValue[2].'", function (e) {'."\n";
+	echo "\t".'if ( $(this).prop("tagName").toLowerCase() != "'.$taglistValue[2].'" ) return 0;'."\n";
+	echo "\t".'if ( $("#editTextId").html() != "Edit the text" ) return 0;'."\n";
+	echo "\tremoveTagNewDiv( e, \"".$taglistValue[2]."\", $(this) );\n";
+	echo "});\n";
+}
+?>
+
+$(document).ready(function(){
+    //run once
+    var el=$('#follow-scroll');
+    var originalelpos=el.offset().top; // take it where it originally is on the page
+
+    //run on scroll
+    $(window).scroll(function(){
+        var el = $('#follow-scroll'); // important! (local)
+        var elpos = el.offset().top; // take current situation
+        var windowpos = $(window).scrollTop();
+        var finaldestination = windowpos+originalelpos;
+        el.stop().animate({'top':finaldestination},500);
+    });
+});
+$(document).on("click", "name", function (e) {
+
+    if ( $("#editTextId").html() != "Edit the text" ) return 0;
+    if ( $(this).prop("tagName").toLowerCase() != "name" ) return 0;
+    
+    removeTagNewDiv( e, "name", $(this) );
+});
+
+$(document).on("mouseup", '#editable-area', function (e) {
+    $('.questionMarkClass').remove();
+    $('.tagItemDivClass').remove();
+   
+    if ( $("#editTextId").html() != "Edit the text" ) return 0;
+
+    var selection = getSelected();
+    range = getSelected().getRangeAt(0);
+    
+    container = document.createElement("div");
+    container.appendChild(selection.getRangeAt(0).cloneContents());
+
+    if(selection && (selection = new String(selection).replace(/^\s+|\s+$/g,''))) {
+    
+    	var newdiv = document.createElement("div");
+        newdiv.id = "tagItemDivId";
+        newdiv.setAttribute("class", "tagItemDivClass");
+        newdiv.style.cssText = 'top:'+e.pageY+'; left:'+e.pageX+'; position:absolute; background-color: white; border:1px solid black; padding: 5px';
+        
+        //console.log(selection.getRangeAt(0).cloneContents());
+        if ( container.innerHTML.indexOf( "br" ) != -1 ) {
+            var newselect = document.createElement("select");
+            newselect.id = "TitletagType";
+            <?php 
+                foreach ( $taglistArray as $taglistValue ) {
+                    echo "newselect.innerHTML += \"<option value='".$taglistValue[2]."'>".$taglistValue[1]."</option>\";\n";
+                }
+            ?>
+            newdiv.appendChild(newselect);
+            
+            //matchValue =  .match();
+            myRegexp = new RegExp("〈(.*?)〉", "g")
+            matchValue = myRegexp.exec(String(selection));
+            
+            if ( matchValue != null ) {
+                newdiv.innerHTML += "<input id=\"TitletagName\" value=\""+ matchValue[1] +"\"></br>";
+            } else {
+                newdiv.innerHTML += "<input id=\"TitletagName\" value=\"\"></br>";
+            }
+            newdiv.innerHTML += "<button onclick=\"addTagTitle( range, container )\">Add Title Tag To Each Line</button></br>";
+            
+            newdiv.innerHTML += "<button onclick=\"exportTable( range, container )\">Export As A Table</button></br></br>";
+            
+            var newselect = document.createElement("select");
+            newselect.id = "RemoveTitletagType";
+            <?php 
+                foreach ( $taglistArray as $taglistValue ) {
+                    echo "newselect.innerHTML += \"<option value='".$taglistValue[2]."'>".$taglistValue[1]."</option>\";\n";
+                }
+            ?>
+            newdiv.appendChild(newselect);
+            
+            newdiv.innerHTML += "<input id=\"RemoveTitletagName\" value=\"\"></br>";
+            newdiv.innerHTML += "<button onclick=\"removeTagTitle( range, container )\">Remove</button></br>";
+        } else {
+            newdiv.innerHTML = "Tag: "+String(selection)+"<br>";
+            
+            newdiv.innerHTML += "<button accesskey=\"2\" onclick=\"tagwithtitle( range, '"+String(selection)+"' )\">Tag As Title</button></br>";
+            
+            <?php 
+                foreach ( $taglistArray as $taglistValue ) {
+                    if ( $taglistValue[2] == "person") {
+                        echo "newdiv.innerHTML += \"<button accesskey=\\\"1\\\" onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(No BR)</button>\";\n";
+                        echo "newdiv.innerHTML += \"<button accesskey=\\\"1\\\" onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."2' )\\\">Tag as:".$taglistValue[1]."</button>\";\n";
+                        echo "newdiv.innerHTML += \"<button onclick=\\\"tagStringWithTag( '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(ALL)</button></br>\";\n";
+                    } else if ($taglistValue[2] == "post_time") {
+                        echo "newdiv.innerHTML += \"<button accesskey=\\\"3\\\" onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."</button>\";\n";
+                        echo "newdiv.innerHTML += \"<button onclick=\\\"tagStringWithTag( '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(ALL)</button></br>\";\n";
+                    } else if ($taglistValue[2] == "office") {
+                        echo "newdiv.innerHTML += \"<button accesskey=\\\"4\\\" onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."</button>\";\n";
+                        echo "newdiv.innerHTML += \"<button onclick=\\\"tagStringWithTag( '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(ALL)</button></br>\";\n";
+                    } else {
+                        echo "newdiv.innerHTML += \"<button onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."</button>\";\n";
+                        echo "newdiv.innerHTML += \"<button onclick=\\\"tagStringWithTag( '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(ALL)</button></br>\";\n";
+                    }               
+                }
+            ?>
+        }
+        $('body').append(newdiv);
+        
+        $('#TitletagType').val(lastAddTag);
+    }
+    //e.stopPropagation();
+});
+
+
+
+function replaceSmartRegex() {
+    saveUndoText();
+    var startPage = $('#regexPageStart2').val();
+    var endPage = $('#regexPageEnd2').val();
+    
+    var el = document.getElementById("editable-area");
+    var regexText=document.getElementById("regexText").value;
+    
+    <?php 
+    foreach ( $wordlistArray as $wordlistValue ) {
+        echo "\tvar regexText1=\"List ".$wordlistValue[1]."\";\n";
+        echo "\tregexText1 = preg_quote(regexText1);\n";
+        echo "\tvar replaceText1=\"".$wordlistValue[2]."\";\n";
+        echo "\tregexText = regexText.replace(new RegExp(regexText1, \"g\"), replaceText1);\n\n";
+    }
+    ?>
+    
+    var replaceText=document.getElementById("replaceText").value;
+    var str="" + el.innerHTML;
+    
+    if ( startPage == "" ) {
+        alert( "Tagged "+str.match(new RegExp(regexText, "g")).length+" entities!" );
+        el.innerHTML = str.replace(new RegExp(regexText, "g"), replaceText);
+    } else {
+        var regexText2="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】";
+        var partString = ""+str.match(new RegExp(regexText2, "g"));
+        alert(partString);
+        
+        alert( "Tagged "+partString.match(new RegExp(regexText, "g")).length+" entities!" );
+        var resultString = partString.replace(new RegExp(regexText, "g"), replaceText);
+        
+        str="" + el.innerHTML;
+        el.innerHTML = str.replace(new RegExp(regexText2, "g"), resultString);
+    }
+    //document.styleSheets[0].addRule("tag001", "color:green;")
+}
+
+
+
+
+$(document).on("change", '#smartRegexPopUpSelectWord', function (e) {
+<?php
+    foreach ( $wordlistArray as $wordlistValue ) {
+        echo "if ( $('#smartRegexPopUpSelectWord').val() == \"".$wordlistValue[0]."\") {";
+        echo "$('#smartRegexPopUpText').val(\"".$wordlistValue[2]."\");";
+        echo "}";
+    }
+?>
+});
+
+
+</script>
+
+<table width="1250" border="1">
+	<tr>
+		<td width="980">
+			<div id="editable-area" class="area" style="max-width: 980"><?php echo $stringInput; ?></div>
+		</td>
+		<td width="270" valign="top">
+			<div id="follow-scroll" style="position:absolute; width: 220" width="220">
+				<div id="load_regex_div" style="position: absolute; display: none"></div>
+				<div id="smartRegexPopUpDiv" style="position: absolute; display: none">
+					Name: <input id="smartRegexPopUpName"></input><br><br>
+					Word List: 
+					<select id="smartRegexPopUpSelectWord">
+					<option value="NULL" selected>無</option>
+					<?php
+						foreach ( $wordlistArray as $wordlistValue ) {
+							echo "<option value=\"".$wordlistValue[0]."\">".$wordlistValue[1]."</option>\n";
+						}
+					?>
+					</select>
+					<br>
+					OR (USE "|" TO SEPARATE WORDS):<br>
+					<TEXTAREA id="smartRegexPopUpText" COLS=30 ROWS=4></TEXTAREA><br><br>
+					Tag:
+					<select id="smartRegexPopUpSelectTag">
+					<?php
+						foreach ( $taglistArray as $taglistValue ) {
+							echo "<option value=\"".$taglistValue[2]."\">".$taglistValue[1]."</option>\n";
+						}
+						echo "<option value=\"title\">Title</option>\n";
+					?>
+					<option value="NOTAG">不標記</option>
+					</select><br>
+					<button id="smartRegexPopUpAdd" onclick="replaceSmartAdd()" style="height: 30px; width: 50px">Add</button>
+					<button id="smartRegexPopUpEdit" onclick="replaceSmartEdit()" style="height: 30px; width: 50px">Edit</button>
+					<button id="smartRegexPopUpDel" onclick="replaceSmartDel()" style="height: 30px; width: 50px">Delete</button>
+					<button id="smartRegexPopUpBack" onclick="replaceSmartBack()" style="height: 30px; width: 50px"><<</button>
+					<button id="smartRegexPopUpFor" onclick="replaceSmartFor()" style="height: 30px; width: 50px">>></button>
+					<button onclick="replaceSmartClose()" style="height: 30px; width: 50px">Close</button>
+				</div>
+				<form action="javascript:void(0);">
+					<fieldset>
+						<legend>Replace By <i><b>Smart Regex</b></i>©:</legend>
+						<div id="smartRegexShowDiv"></div><br>
+						<button onclick="smartRegexNew()" style="height: 30px; width: 220px">Add Regex Group</button></br>
+						Range: <input type="text" size="5" id="regexPageStart">to<input type="text" size="5" id="regexPageEnd"><br>
+						<button onclick="replaceSmartRun()" style="height: 30px; width: 220px">Run</button></br>
+						<button onclick="replaceSmartRunSpace()" style="height: 30px; width: 220px">Run(Allow space between Group)</button></br>
+						<button onclick="smartRegexSave()" style="height: 30px; width: 70px">Save</button>
+						<button onclick="smartRegexLoad(<?php echo $section_id;?>)" style="height: 30px; width: 70px">Load</button>
+						<button onclick="smartRegexEmpty()" style="height: 30px; width: 70px">Clear</button></br>
+					</fieldset>
+					
+					<fieldset>
+						<legend>Tag by rule:</legend>
+						<button onclick="tagNameWithLastName()" style="height: 30px; width: 220px">Tag Word Begin With Surname</button></br>
+						<button onclick="tagNameWithLastName2()" style="height: 30px; width: 170px">Tag Word Begin With</button><input type="text" size="2" id="surname"></br>
+						<!--<button onclick="tagTime()" style="height: 30px; width: 220px">Tag Time</button></br>-->
+						<!--<button onclick="tagBiogAddr()" style="height: 30px; width: 220px">Tag BiogAddr</button></br>-->
+						<button onclick="Undo()" style="height: 30px; width: 220px" id="buttonUndo" disabled="true">Undo</button>
+					</fieldset>
+					
+					<fieldset>
+						<legend>Edit:</legend>
+						<!--<button onclick="cleanUpTextArea()" style="height: 30px; width: 220px">Reform the text</button></br>-->
+						<button onclick="saveText(<?php echo $section_id; ?>)" style="height: 30px; width: 220px">Save the text</button></br>
+						<button onclick="editText()" id="editTextId" style="height: 30px; width: 220px">Edit the text</button></br>
+						</br>
+						<button onclick="window.open('../EditWordlist/<?php echo $section_id;?>')" style="height: 30px; width: 220px">Manage Word List</button></br>
+						<button onclick="window.open('../EditTaglist/<?php echo $section_id;?>')" style="height: 30px; width: 220px">Manage Tag List</button></br>
+					</fieldset>
+					
+					<fieldset>
+						<legend>Export:</legend>
+						Page: <input type="text" size="5" id="exportPageStart">to<input type="text" size="5" id="exportPageEnd"><br>
+						<button onclick="exportPage()" style="height: 30px; width: 220px">Export</button></br>
+						<button onclick="exportAll(<?php echo $section_id;?>)" style="height: 30px; width: 220px">Export All</button></br>
+					</fieldset>
+					
+					<fieldset>
+						<legend>Replace By <i><b>Regex</b></i>:</legend>
+						Range: <input type="text" size="5" id="regexPageStart2">to<input type="text" size="5" id="regexPageEnd2"><br>
+						Regex: <input type="text" size="30" id="regexText"></br>
+						Replace: <input type="text" size="30" id="replaceText"><br>
+						<button onclick="replaceSmartRegex()">Replace!</button>
+					</fieldset>
+				</form>
+			</div>
+		</td>
+	</tr>
+</table>
+</body>
+</html>