Changeset 26966

Show
Ignore:
Timestamp:
26.02.2013 16:39:06 (7 years ago)
Author:
sjm84
Message:

Implemented undo functionality

Location:
main/trunk/greenstone3/web/interfaces/default/js
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/debug_scripts.js

    r26924 r26966  
    248248            } 
    249249        }); 
     250         
     251        undoButton = $("<input type=\"button\" value=\"Undo\">"); 
     252        undoButton.click(function() 
     253        { 
     254            if(_isVisualEditor) 
     255            { 
     256                _vEditor.undo(); 
     257            } 
     258            else 
     259            { 
     260                _editor.undo(); 
     261            } 
     262        }); 
    250263 
    251264        var clear = $("<span>"); 
     
    259272        buttonDiv.append(_saveButton); 
    260273        buttonDiv.append(_swapEditorButton); 
     274        buttonDiv.append(undoButton); 
    261275 
    262276        _mainDiv.append(toolBarDiv); 
  • main/trunk/greenstone3/web/interfaces/default/js/visual-xml-editor.js

    r26927 r26966  
    2828    _overList.freeSpaces = new Array(); 
    2929     
     30    var _transactions = new Array(); 
     31     
    3032    this.getXML = function() 
    3133    { 
    3234        return _xml; 
     35    } 
     36     
     37    this.undo = function() 
     38    { 
     39        if(_transactions.length > 0) 
     40        { 
     41            var t = _transactions.pop(); 
     42            //Undo an added element 
     43            if(t.type == "addElem") 
     44            { 
     45                $(t.vElem.data("parentVEElement").getXMLNode()).remove(); 
     46                t.vElem.remove(); 
     47                resizeAll(); 
     48            } 
     49            //Undo a removed or moved element 
     50            else if(t.type == "remMvElem") 
     51            { 
     52                var parent = t.vElemParent; 
     53                var pos = t.vElemPos; 
     54                var elem = t.vElem; 
     55                if(pos == 0) 
     56                { 
     57                    parent.prepend(elem); 
     58                    $(parent.parent().data("parentVEElement").getXMLNode()).prepend(elem.data("parentVEElement").getXMLNode()); 
     59                } 
     60                else if(pos == parent.children(".veElement").length - 1) 
     61                { 
     62                    parent.children(".veElement").eq(pos - 1).after(elem); 
     63                    $(parent.children(".veElement").eq(pos - 1).data("parentVEElement").getXMLNode()).after(elem.data("parentVEElement").getXMLNode()); 
     64                } 
     65                else 
     66                { 
     67                    parent.children(".veElement").eq(pos).before(elem); 
     68                    $(parent.children(".veElement").eq(pos).data("parentVEElement").getXMLNode()).before(elem.data("parentVEElement").getXMLNode()); 
     69                } 
     70                resizeAll(); 
     71            } 
     72            //Undo an added attribute 
     73            else if(t.type == "addAttr") 
     74            { 
     75                if(t.row) 
     76                { 
     77                    t.row.remove(); 
     78                } 
     79            } 
     80            //Undo a removed or edited attribute 
     81            else if(t.type == "editAttr") 
     82            { 
     83                t.elem.removeAttribute(t.newName); 
     84                t.elem.setAttribute(t.name, t.value); 
     85                if(t.row) 
     86                { 
     87                    t.row.children("td").eq(0).text(t.name); 
     88                    t.row.children("td").eq(1).text(t.value); 
     89                } 
     90            } 
     91            //Undo a removed or edited attribute 
     92            else if(t.type == "remAttr") 
     93            { 
     94                t.elem.setAttribute(t.name, t.value); 
     95                if(t.rowParent) 
     96                { 
     97                    t.rowParent.append(t.row); 
     98                } 
     99            } 
     100            //Undo edited text 
     101            else if(t.type == "editText") 
     102            { 
     103                t.elem.nodeValue = t.value; 
     104                if(t.vElem) 
     105                { 
     106                    t.vElem.text(t.value); 
     107                } 
     108            } 
     109        } 
    33110    } 
    34111     
     
    391468            link.click(function() 
    392469            { 
    393                 var nameCell = cell.parent().children("td").eq(0); 
    394                 var valueCell = cell.parent().children("td").eq(1); 
     470                var nameCell = _row.children("td").eq(0); 
     471                var valueCell = _row.children("td").eq(1); 
    395472                if(link.text() == "edit") 
    396473                { 
     
    433510                    _xmlElem.setAttribute(name, value); 
    434511                     
     512                    _transactions.push({type:"editAttr", elem:_xmlElem, row:_row, newName:name, name:_name, value:_value}); 
     513                     
    435514                    _name = name; 
    436515                    _value = value; 
     
    447526            link.click(function() 
    448527            { 
     528                _transactions.push({type:"remAttr", elem:_xmlElem, row:_row, rowParent:_row.parent(), name:_name, value:_value}); 
    449529                _xmlElem.removeAttribute(_name); 
    450                 _row.remove(); 
     530                _row.detach();   
    451531            }); 
    452532            cell.append(link); 
     
    609689                "stop":function(event, ui) 
    610690                { 
     691                    var transactionType = (_div.data("toolbar")) ? "addElem" : "remMvElem"; 
    611692                    _div.data("dragging", false); 
    612693                    _div.data("toolbar", false); 
     
    649730                            $(xmlNode).append(_xmlNode); 
    650731                        } 
     732                        _transactions.push({type:transactionType, vElemParent:_origDDParent, vElemPos:_origDDPosition, vElem:_div}); 
    651733                    } 
    652734                } 
     
    726808                { 
    727809                    var newAtt = new VEAttribute(null, _xmlNode, "", ""); 
    728                     attributeTable.append(newAtt.getAsTableRow()); 
     810                    var row = newAtt.getAsTableRow(); 
     811                    attributeTable.append(row); 
     812                    _transactions.push({type:"addAttr", row:row}) 
    729813                }); 
    730814                _infoDiv.append(addButton); 
     
    748832                    if(editButton.text() == "edit text") 
    749833                    { 
     834                        nodeText.data("prevTextValue", nodeText.text()); 
    750835                        var textArea = $("<textarea>"); 
    751836                        textArea.val(nodeText.text()); 
     
    756841                    else 
    757842                    { 
     843                        _transactions.push({type:"editText", elem:_xmlNode, vElem: nodeText, value:nodeText.data("prevTextValue")}); 
    758844                        var textArea = nodeText.find("textarea"); 
    759845                        var newValue = textArea.val();