diff views/Extractapp/TaggingText.php @ 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/views/Extractapp/TaggingText.php	Tue Mar 17 10:54:13 2015 +0100
@@ -0,0 +1,1110 @@
+<?php
+// --- initialize config file and input text ---
+$stringInput = $viewmodel['stringInput'];
+$wordlistArray = $viewmodel['wordlistArray'];
+$taglistArray = $viewmodel['taglistArray'];
+$section_id = $viewmodel['section_id'];
+$topiclistArray = $viewmodel['topiclistArray'];
+$default_topic_id = $viewmodel['default_topic_id'];
+$topic_name = $viewmodel['topic_name'];
+$topic_tag = $viewmodel['topic_tag'];
+$info = $viewmodel['info']; 
+$messages = $viewmodel['messages'];
+
+$taglist_infile = $viewmodel['taglist_infile'];
+$book_meta = $viewmodel['book_meta'];
+
+
+?>
+
+<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">
+
+// not use this for now
+function _showTagColor(up_to_date) {
+    var taglistArray = "";
+    if (up_to_date) {
+        taglistArray = JSON.parse('<?php echo json_encode($taglistArray) ?>');
+    } else {
+        taglistArray = JSON.parse('<?php echo json_encode($taglist_infile) ?>');
+    }
+
+
+    for (var i = 0; i < taglistArray.length; i++) {
+        var taglistValue = taglistArray[i];
+        
+        $(taglistValue[2]).css('color', taglistValue[3]);
+        /*var element = document.querySelectorAll(taglistValue[2]);
+        for (var j = 0; j < element.length; j++) {
+            element[j].style.color = taglistValue[3];
+        }
+        */
+    }
+}
+
+// TODO: Popup to proceeding the saving situations
+function handleFileVersionConflict() {
+    var info = JSON.parse('<?php echo json_encode($info) ?>');
+    console.log("currentFileId="+info['current_fileId']);
+    
+    if (info['current_fileId'] != 0 && info['current_fileId'] != info['file_id']){
+        // -- there might be conflicts between different version
+        alert("Someone edited this file and saved before you.");
+        return;
+
+        var retVal = confirm('There were something happened/someone editing in the between of time.\nDo you want to force saving? (There might be conflicts between two versions.)');
+        if( retVal == true ){
+            // TODO: force saving with currentFileId
+            alert("You do the force saving!");
+            //saveTextToLGService();
+
+        }else{
+            var loadLastest = confirm("Do you want to reload for the lastest version? (Your current editing will lost.)");
+            
+            console.log("loadLastest="+loadLastest);
+            /*
+            var form = document.createElement("form");
+            form.setAttribute("method", "post");
+            form.setAttribute("action", "./TaggingText");  // hand to controller
+            form.setAttribute("target", "_blank");  
+
+            var topic_id = JSON.parse('<?php echo json_encode($default_topic_id) ?>');
+
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "topic");
+            hiddenField.setAttribute("value", topic_id);
+            form.appendChild(hiddenField);
+
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "func");
+            hiddenField.setAttribute("value", "Reload");  // reload
+            form.appendChild(hiddenField);
+
+            _postForContineTagging(form);
+
+            alert("You will reload the latest version.");   
+            */
+            /*
+            if (loadLastest == true) {
+                // TODO: reload page with the currentFileId
+                console.log('loadLastest is true');
+                $.ajax({
+                    type : 'POST',
+                    url : './TaggingText',
+                    async : false,
+                    data : 'func=Reload',
+                    success: function (result) {
+                        //var lastest_editing = jQuery.parseJSON(result); 
+                        console.log("lastest_editing string:"+result);
+                        // change text to the new one
+                        //var el = document.getElementById("editable-area");
+                        //el.innerHTML = lastest_editing;
+                        //alert("Reload the page!");
+                    },
+                    error: function (result) {
+                        alert("Reload Fails!");
+                    }
+                }).done(function(result) {
+                    // reload page
+                    //document.location.reload(true);
+
+                });
+
+            } else {
+                alert("Just a reminder, there is a new version for this branch.");
+            }
+            */
+            
+        }
+
+    }
+    return;
+    
+}
+
+<?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(){
+    
+    // --- for sidebar--- 
+    //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);
+        el.stop().animate({'top':finaldestination},0);
+    });
+
+    //--- for popups ---
+    //run once
+    var el=$('#popups');
+    var originalelpos=el.offset().top; // take it where it originally is on the page
+    
+    //run on scroll
+    $(window).scroll(function(){
+        var el = $('#popups'); // important! (local)
+        var elpos = el.offset().top; // take current situation
+        var windowpos = $(window).scrollTop();
+        var finaldestination = windowpos+originalelpos;
+        //el.stop().animate({'top':finaldestination},500);
+        el.stop().animate({'top':finaldestination},0);
+    });
+
+    // --- handle old version taglist ---
+    var _GET = JSON.parse('<?php echo json_encode($_GET) ?>');
+    if (_GET['id']) {
+        // === This case should only be possible for developing on local machine ==== 
+        var info = JSON.parse('<?php echo json_encode($info) ?>');
+        var redirectUrl = "http://localhost:1080/extraction-interface/Extractapp/TaggingText";
+        var section_id = info['section_id'];
+
+        var form = $('<form action="' + redirectUrl + '" method="post">' +
+            '<input type="hidden" name="sectionId" value="'+section_id+'" />' +
+            '</form>');
+            $('body').append(form);
+            $(form).submit();
+    } 
+       
+
+        // --- TODO: check if taglist in file is up-to-date ---
+        /*
+        var taglist_infile = JSON.parse('<?php echo json_encode($taglist_infile) ?>');
+        if (taglist_infile != "") {
+            // TODO: pop up to ask if load the latest taglist
+            var retVal = confirm("Tag list in file is not up-to-date. \nDo you want to load file with new tag list?");
+            if( retVal == true ){
+                // use $taglisArray
+                alert("Load file with new tag list.");
+            }else{
+                // use $taglist_infile as $taglistArray
+                <?php 
+                // $taglistArray = $taglist_infile; 
+                ?>
+                alert("You are viewing the file with old version of tag list. Please use the up-to-date taglist.");
+            }
+            //_showTagColor(retVal);
+            <?php $taglist_infile = ""; ?>
+        }
+        */
+    
+    var info = JSON.parse('<?php echo json_encode($info) ?>');
+
+    // the first time to this section. without branch_id and file_id
+    if (info['file_id'] == 0) {  // or info['branch_id'] == 0, means new file
+        $( "#saveTextToLGService_id").text( "Create(Save) Branch to LGService" );
+
+    }
+
+
+    handleFileVersionConflict();
+
+
+    /*
+    // Popup choosing topic if first time to this section. without branch_id
+    if (info['file_id'] == 0) {  // or info['branch_id'] == 0, means new file
+        // ask to choose topic
+        $.ajax({
+
+        });
+        var popup = document.getElementById('popup-window');
+
+        // alert('choose topic!');
+    }
+    */
+    
+
+
+});
+$(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';
+        
+        newdiv.style.backgroundColor = "white";
+        newdiv.style.zIndex = 2;
+
+        //console.log(selection.getRangeAt(0).cloneContents());
+        if ( container.innerHTML.indexOf( "br" ) != -1 ) {
+            var newselect = document.createElement("select");
+            newselect.id = "TitletagType";
+            
+
+            console.log(JSON.parse('<?php echo json_encode($taglistArray) ?>'));
+
+            <?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>";
+            }
+
+            console.log(" container innerHTML: "+ container.innerHTML );
+
+            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 {
+ 			// for pop up window on edit-area for tag list
+            newdiv.innerHTML = "Tag: "+String(selection)+"<br>";
+            
+            <?php 
+            foreach ( $taglistArray as $taglistValue ) {
+
+                if ($taglistValue[2] == $topic_tag) {
+                	echo "newdiv.innerHTML += \"<button accesskey=\\\"1\\\" onclick=\\\"tagwithOnlytag( range, '\"+String(selection)+\"', '".$taglistValue[2]."2' )\\\">[TopicTag]Tag as:".$taglistValue[1]."(necessary for this topic!)</button>\";\n";
+                    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 onclick=\\\"tagStringWithTag( '\"+String(selection)+\"', '".$taglistValue[2]."' )\\\">Tag as:".$taglistValue[1]."(ALL)</button></br>\";\n";
+                    
+                    /*
+                    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";
+            		*/
+                    break;
+            	}
+            }
+            ?>
+
+            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] == $topic_tag) { 
+                		// pass
+                	} 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";
+                    } 
+
+                }
+            ?>
+        }
+
+        //$('#tagItemDivId').addClass();  // tagItemDivId is newdiv's id
+        $('body').append(newdiv);
+        
+        $('#TitletagType').val(lastAddTag);
+
+    }
+    //e.stopPropagation();
+});
+
+
+// === for exporttable.php ===
+function exportTable( range, container ) {
+    //MsgBox("enter function");
+    var form = document.createElement("form");
+    form.setAttribute("method", "post");
+    form.setAttribute("action", "./ExportTable");
+    form.setAttribute("target", "_blank");
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "content");
+    hiddenField.setAttribute("value", container.innerHTML);
+    form.appendChild(hiddenField);
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "sectionid");
+    hiddenField.setAttribute("value", "<?php echo $section_id; ?>");
+    form.appendChild(hiddenField);
+    
+    var hiddenField2 = document.createElement("input");      
+    hiddenField2.setAttribute("name", "topic");
+    hiddenField2.setAttribute("value", topic_id);
+    form.appendChild(hiddenField2);
+
+    var info = JSON.parse( '<?php echo json_encode($info) ?>');
+
+    if (info) {
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "bookId");
+    hiddenField.setAttribute("value", info['book_id']);
+    form.appendChild(hiddenField);   
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "bookName");
+    hiddenField.setAttribute("value", info['book_name']);
+    form.appendChild(hiddenField);   
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "sectionName");
+    hiddenField.setAttribute("value", info['section_name']);
+    form.appendChild(hiddenField);
+
+    };
+
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+}
+
+function exportPage(topic_id) {
+    var startPage = $('#exportPageStart').val();
+    var endPage = $('#exportPageEnd').val();
+
+    var el = document.getElementById("editable-area");
+    var str="" + el.innerHTML;
+
+    var regexText="【<a([^<>]*?)>"+startPage+"</a>】(.*?)【<a([^<>]*?)>"+endPage+"</a>】";
+    
+    var form = document.createElement("form");
+    form.setAttribute("method", "post");
+    form.setAttribute("action", "./ExportTable");
+    form.setAttribute("target", "_blank");
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "content");
+    hiddenField.setAttribute("value", str.match(new RegExp(regexText, "g")));
+    form.appendChild(hiddenField);
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "topic");
+    hiddenField.setAttribute("value", topic_id);
+    form.appendChild(hiddenField);
+
+    _postForContineTagging(form);
+   
+
+    /*
+    var section_id = JSON.parse('<?php echo json_encode($section_id) ?>');
+    console.log("section_id: "+section_id+", topic_id: "+topic_id);
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "sectionId");
+    hiddenField.setAttribute("value", section_id);
+    form.appendChild(hiddenField);   
+ 
+    var info = JSON.parse( '<?php echo json_encode($info) ?>');
+
+    if (info) {
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "bookId");
+        hiddenField.setAttribute("value", info['book_id']);
+        form.appendChild(hiddenField);   
+
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "bookName");
+        hiddenField.setAttribute("value", info['book_name']);
+        form.appendChild(hiddenField);   
+        
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "sectionName");
+        hiddenField.setAttribute("value", info['section_name']);
+        form.appendChild(hiddenField);
+
+    };
+
+
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+    */
+}
+
+
+
+
+function exportAll(topic_id) {
+    var el = document.getElementById("editable-area");
+    var str= "" + el.innerHTML;
+    var form = document.createElement("form");
+    form.setAttribute("method", "post");
+    form.setAttribute("action", "./ExportTable");//+section_id);  // hand to controller
+    form.setAttribute("target", "_blank");
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "content");
+    hiddenField.setAttribute("value", str);
+    form.appendChild(hiddenField);
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "topic");
+    hiddenField.setAttribute("value", topic_id);
+    form.appendChild(hiddenField);
+
+    _postForContineTagging(form);
+/*
+    var section_id = JSON.parse('<?php echo json_encode($section_id) ?>');
+    console.log("section_id: "+section_id+", topic_id: "+topic_id);
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "sectionId");
+    hiddenField.setAttribute("value", section_id);
+    form.appendChild(hiddenField);   
+
+    var info = JSON.parse( '<?php echo json_encode($info) ?>');
+
+    if (info) {
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "bookId");
+    hiddenField.setAttribute("value", info['book_id']);
+    form.appendChild(hiddenField);   
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "bookName");
+    hiddenField.setAttribute("value", info['book_name']);
+    form.appendChild(hiddenField);   
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "sectionName");
+    hiddenField.setAttribute("value", info['section_name']);
+    form.appendChild(hiddenField);
+
+    };
+    
+
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+    */
+
+}
+// ===========
+
+
+function tagwithOnlytag( range, stringSelection, tag ) {
+    saveUndoText();
+    var topic_tag = JSON.parse('<?php echo json_encode($topic_tag) ?>');
+    var topic_tag2 = topic_tag+"2";
+
+    range.deleteContents();
+
+
+    if ( tag==topic_tag2) {
+        var newdiv = document.createElement(topic_tag);
+        newdiv.innerHTML = stringSelection;
+        range.insertNode(newdiv);
+        var newdiv = document.createElement("br");
+        range.insertNode(newdiv);
+
+    } else {
+        var newdiv = document.createElement(tag);
+        newdiv.innerHTML = stringSelection;
+        range.insertNode(newdiv);
+    }
+
+    /*
+    if ( tag=="person2") {
+        var newdiv = document.createElement("person");
+        newdiv.innerHTML = stringSelection;
+        range.insertNode(newdiv);
+        var newdiv = document.createElement("br");
+        range.insertNode(newdiv);
+    } else if (tag=="object2") {
+        var newdiv = document.createElement("object");
+        newdiv.innerHTML = stringSelection;
+        range.insertNode(newdiv);
+        var newdiv = document.createElement("br");
+        range.insertNode(newdiv);
+
+    } else {
+        var newdiv = document.createElement(tag);
+        newdiv.innerHTML = stringSelection;
+        range.insertNode(newdiv);
+    }
+    */
+
+    $('.tagItemDivClass').remove();
+}
+
+
+
+
+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;")
+}
+
+
+
+function saveTextToLGService() {
+
+    var info = JSON.parse('<?php echo json_encode($info) ?>');
+    var topic_id = JSON.parse('<?php echo json_encode($default_topic_id) ?>');
+
+    // if this is a new branch, ask for label
+    if (info['branch_id'] == 0) {
+        //var label = prompt("Please enter your label for this new branch", "section"+info['section_id']);
+        var today = new Date();
+        var dd = today.getDate();
+        var mm = today.getMonth()+1; //January is 0!
+        var yyyy = today.getFullYear();
+
+        if(dd<10) {
+            dd='0'+dd
+        } 
+        if(mm<10) {
+            mm='0'+mm
+        } 
+        today = dd+'/'+mm+'/'+yyyy;
+        var label = prompt("Please enter your label for this new branch", today);
+        while (label == null) {
+            alert("You haven't saved your editing.");
+            return;
+            // label = prompt("Please enter your label for this new branch (not empty)", "section"+info['section_id']);
+        }    
+    };
+    
+    var form = document.createElement("form");
+    form.setAttribute("method", "post");
+    form.setAttribute("action", "./TaggingText");  // hand to controller
+    form.setAttribute("target", "_self");
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "func");
+    hiddenField.setAttribute("value", "SaveFullTextToLGService");
+    form.appendChild(hiddenField); 
+    
+
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "label");
+    hiddenField.setAttribute("value", label);
+    form.appendChild(hiddenField);
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "topic_id");
+    hiddenField.setAttribute("value", topic_id);
+    form.appendChild(hiddenField); 
+
+    _postForContineTagging(form);
+
+    console.log("complete saving to LGService");
+
+    
+    /*
+
+    if (info) {
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "fileId");
+        hiddenField.setAttribute("value", info['file_id']);
+        form.appendChild(hiddenField);
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "branchId");
+        hiddenField.setAttribute("value", info['branch_id']);
+        form.appendChild(hiddenField);
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "userId");
+        hiddenField.setAttribute("value", info['user_id']);
+        form.appendChild(hiddenField);
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "sectionId");
+        hiddenField.setAttribute("value", info['section_id']);
+        form.appendChild(hiddenField);
+
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "bookId");
+        hiddenField.setAttribute("value", info['book_id']);
+        form.appendChild(hiddenField);
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "sectionName");
+        hiddenField.setAttribute("value", info['section_name']);
+        form.appendChild(hiddenField);
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "bookName");
+        hiddenField.setAttribute("value", info['book_name']);
+        form.appendChild(hiddenField);
+
+    }
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "text");
+    var el = document.getElementById("editable-area");
+    //var text = encodeURIComponent(el.innerHTML);
+    var text = el.innerHTML;
+    hiddenField.setAttribute("value", text);
+    form.appendChild(hiddenField);
+
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+    */
+}
+
+
+
+function chooseTopic(default_topic_id) {
+    var t = JSON.parse( '<?php echo json_encode($topiclistArray) ?>' );
+    var info = JSON.parse('<?php echo json_encode($info) ?>');
+
+    $('#load_topic_div').html("");
+    $('#load_topic_div').css("display", "block");
+    
+    $('#load_topic_div').css("border", "1px solid black");
+    $('#load_topic_div').css("background-color", "White");
+    $('#load_topic_div').css("width", "150px");
+    $('#load_topic_div').css("height", "50px");
+    $('#load_topic_div').css("top", "20px");
+    $('#load_topic_div').css("left", "-150px");
+    
+
+    var topic_select = document.createElement("select");
+    topic_select.id = "loadTopiclist";
+    var selected_topic = t[0];
+    topic_select.onchange = function(){
+
+    	selected_topic = topic_select.options[topic_select.selectedIndex];
+    	console.log(selected_topic.text);
+
+    	var topic_id = selected_topic.value;
+
+		var form = document.createElement("form");
+        form.setAttribute("method", "post");
+        form.setAttribute("action", "./TaggingText");  // hand to controller
+        form.setAttribute("target", "_self");
+
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "topic");
+        hiddenField.setAttribute("value", topic_id);
+        form.appendChild(hiddenField);
+
+        var hiddenField = document.createElement("input");      
+        hiddenField.setAttribute("name", "func");
+        hiddenField.setAttribute("value", "ContinueTagging");
+        form.appendChild(hiddenField);
+    
+	    _postForContineTagging(form);
+           
+    };
+
+
+    //Create and append the options
+	for (var i = 0; i < t.length; i++) {
+		console.log(t[i]['id']+","+t[i]['name']);
+    	var option = document.createElement("option");
+    	option.value = t[i]['id'];
+	    option.text = t[i]['name'];
+	    if (option.value == default_topic_id) {
+	    	option.selected = true;
+	    };
+	    topic_select.appendChild(option);
+	}
+
+    $('#load_topic_div').append(topic_select);
+
+    var newbutton = document.createElement("button");
+    $(newbutton).html("Close");
+    $(newbutton).addClass("btn btn-xs btn-default");
+    $(newbutton).attr("onclick", "$('#load_topic_div').css(\"display\", \"none\");");
+    $('#load_topic_div').append(newbutton);
+  
+}
+
+// --- for config tags in topic ---
+function _postForContineTagging(form) {
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "text");
+    var el = document.getElementById("editable-area");
+    var text = el.innerHTML;
+    hiddenField.setAttribute("value", text);
+    form.appendChild(hiddenField);
+
+    // pass taglist
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "taglistArray");
+    var taglistObj = JSON.parse('<?php echo json_encode($taglist_infile) ?>');
+    if (!taglistObj) {
+        taglistObj = JSON.parse('<?php echo json_encode($taglistArray) ?>');
+    }
+    taglistArray = JSON.stringify(taglistObj);
+    hiddenField.setAttribute("value", taglistArray);
+    form.appendChild(hiddenField);
+
+    // pass book_meta
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "book_meta");
+    var book_metaObj = JSON.parse('<?php echo json_encode($book_meta) ?>');
+    book_metaArray = JSON.stringify(book_metaObj);
+    hiddenField.setAttribute("value", book_metaArray);
+    form.appendChild(hiddenField);    
+
+
+    var info = JSON.parse( '<?php echo json_encode($info) ?>');
+
+    if (info) {
+        // TODO: different field info array based on fileId(branchId) existing or not
+        if (info['file_id']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "fileId");
+            hiddenField.setAttribute("value", info['file_id']);
+            form.appendChild(hiddenField);
+        };
+        if (info['branch_id']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "branchId");
+            hiddenField.setAttribute("value", info['branch_id']);
+            form.appendChild(hiddenField);
+        };
+        if (info['user_id']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "userId");
+            hiddenField.setAttribute("value", info['user_id']);
+            form.appendChild(hiddenField);
+        };
+        if (info['section_id']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "sectionId");
+            hiddenField.setAttribute("value", info['section_id']);
+            form.appendChild(hiddenField);
+        };
+        if (info['book_id']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "bookId");
+            hiddenField.setAttribute("value", info['book_id']);
+            form.appendChild(hiddenField);
+        };
+        if (info['section_name']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "sectionName");
+            hiddenField.setAttribute("value", info['section_name']);
+            form.appendChild(hiddenField);
+        };
+        if (info['book_name']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "bookName");
+            hiddenField.setAttribute("value", info['book_name']);
+            form.appendChild(hiddenField);
+        };
+        if (info['current_fileId']) {
+            var hiddenField = document.createElement("input");      
+            hiddenField.setAttribute("name", "currentFileId");
+            hiddenField.setAttribute("value", info['current_fileId']);
+            form.appendChild(hiddenField);
+        };
+
+    }
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+
+}
+
+function configTagsInTopic(topic_id) {
+    var form = document.createElement("form");
+    
+    form.setAttribute("method", "post");
+    form.setAttribute("action", "./ConfigTagsInTopic");  // hand to controller
+    form.setAttribute("target", "_blank");
+    
+    var hiddenField = document.createElement("input");      
+    hiddenField.setAttribute("name", "topic");
+    hiddenField.setAttribute("value", topic_id);
+    form.appendChild(hiddenField);
+
+    _postForContineTagging(form);
+    
+    /*
+    if(navigator.userAgent.toLowerCase().indexOf('firefox') > -1) {
+        document.body.appendChild(form);
+        form.submit();
+    } else {
+        form.submit(); // works under IE and Chrome, but not FF  
+    }
+    */
+        
+}
+
+
+
+$(document).on("change", '#smartRegexPopUpSelectWord', function (e) {
+
+<?php
+    foreach ( $wordlistArray as $wordlistValue ) {
+        echo "if ( $('#smartRegexPopUpSelectWord').val() == \"".$wordlistValue[0]."\") {";
+        echo "$('#smartRegexPopUpText').val(\"".$wordlistValue[2]."\");";
+        echo "}";
+    }
+?>
+});
+
+
+
+</script>
+ 
+<div id="dialog-form" title="config tags for topic" style="position:fixed; top: 30px; ">
+</div>
+
+
+<p class="bg-info" style="margin:10 30 10 30; max-width:1250"> <?php echo $messages; ?> </p>
+
+<table width="1270" border="1" style="margin:10 30 10 30;">
+    <tr>
+        <td width="980" style="padding:0 5 0 5; margin: 0 5 0 5;">
+            <div id="editable-area" class="area" style="max-width: 980"><?php echo $stringInput; ?></div>
+        </td>
+        <td width="290" valign="top">
+            <div id="popups" style="position:absolute; width:300px; ">
+                <div id="load_topic_div" style="position: absolute; display: none; z-index:2"></div>
+                <div id="load_regex_div" style="position: absolute; display: none; z-index:2;"></div>
+                <div id="smartRegexPopUpDiv" style="position: absolute; display: none; z-index:2">
+                    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()" class="btn btn-info" style="">Add</button>
+                    <button id="smartRegexPopUpEdit" onclick="replaceSmartEdit()" class="btn btn-success" style="">Edit/Update</button>
+                    <button id="smartRegexPopUpDel" onclick="replaceSmartDel()" class="btn btn-danger" style="">Delete</button>
+                    <button id="smartRegexPopUpBack" onclick="replaceSmartBack()" class="btn btn-default" style=""><<</button>
+                    <button id="smartRegexPopUpFor" onclick="replaceSmartFor()" class="btn btn-default" style="">>></button>
+                    <button onclick="replaceSmartClose()" class="btn btn-default" style="">Close</button>
+                </div>
+            </div>
+
+            <div id="follow-scroll" style="position:absolute; height:680px; overflow:scroll; margin:0 5 15 5; max-width:270px">
+                <form action="javascript:void(0);">   
+                    <fieldset>
+                        <legend><h5 class="text-success"> Config Topic: </h5></legend>
+                        <div> current topic is <?php echo $topic_name; ?> 
+                            <button onclick="chooseTopic(<?php echo $default_topic_id; ?>)" class="btn btn-xs btn-default">Change</button>
+                        </div>
+                        <button onclick="configTagsInTopic(<?php echo $default_topic_id;?>)" class="btn btn-sm btn-default" style="">Manage Tags in topic</button></br>
+                    </fieldset>
+
+                    <fieldset>
+                        <legend><h5 class="text-success"> Replace By <i><b>Smart Regex</b></i>©: </h5></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: 100px">Run</button>
+                        <button onclick="replaceSmartRunWithBr()" style="height: 30px; width: 100px">Run(with Br)</button></br>
+                        <button onclick="replaceSmartRunSpace()" style="height: 30px; width: 220px">Run(Allow space between Group)</button></br>
+                        <button onclick="smartRegexSave(<?php echo $default_topic_id; ?>)" style="height: 30px; width: 70px">Save</button>
+                        <button onclick="smartRegexLoad(<?php echo $default_topic_id; ?>)" style="height: 30px; width: 70px">Load</button>
+                        <button onclick="smartRegexEmpty()" style="height: 30px; width: 70px">Clear</button></br>
+                        <!--
+                        <button id="example" type="button" class="btn btn-sm btn-default" data-toggle="popover">Load</button>
+                        -->
+                    </fieldset>
+                    
+                    <fieldset>
+                        <legend><h5 class="text-success"> Tag by rule:</h5></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><h5 class="text-success"> Edit:</h5></legend>
+
+                        <button onclick="saveTextToLGService()" id="saveTextToLGService_id" style="height: 30px; width: 220px">Save to LGService</button></br>
+                    
+                        <!--<button onclick="cleanUpTextArea()" style="height: 30px; width: 220px">Reform the text</button></br>-->
+                        <!-- save text in local. replaced by saveTextToLGService, which is also saving on copy in local in development stage -->
+                        <!-- 
+                        <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')" style="height: 30px; width: 220px">Manage Word List</button></br>
+                        <!--
+                        <button onclick="window.open('./EditTaglist')" style="height: 30px; width: 220px">Manage Tag List</button></br>
+                        -->
+                        <button onclick="editTaglist(<?php echo $default_topic_id; ?>)" style="height: 30px; width: 220px">Manage Tag List</button></br>
+                    </fieldset>
+                    
+                    <fieldset>
+                        <legend><h5 class="text-success"> Export:</h5></legend>
+                        Page: <input type="text" size="5" id="exportPageStart">to<input type="text" size="5" id="exportPageEnd"><br>
+                        <button onclick="exportPage(<?php echo $default_topic_id;?>)" style="height: 30px; width: 220px">Export</button></br>
+                        <button onclick="exportAll(<?php echo $default_topic_id;?>)" style="height: 30px; width: 220px">Export All</button></br>
+                    </fieldset>
+                
+                    <fieldset>
+                        <legend><h5 class="text-success"> Replace By <i><b>Regex</b></i>: </h5></legend>
+                        Range: <input type="text" size="5" id="regexPageStart2">to<input type="text" size="5" id="regexPageEnd2"><br>
+                        Regex: <input type="text" size="23" id="regexText"></br>
+                        Replace: <input type="text" size="23" id="replaceText"><br>
+                        <button onclick="replaceSmartRegex()">Replace!</button>
+                    </fieldset>
+                </form>
+            </div>
+        </td>
+    </tr>
+
+</table>
+
+
+
+
+</body>
+
+</html>