Changeset 27218


Ignore:
Timestamp:
04/18/13 13:15:34 (8 years ago)
Author:
sjm84
Message:

Added back, forwards and current selection buttons, also various improvements and fixes

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

Legend:

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

    r27166 r27218  
    77    //The this variable
    88    var _greenbug = this;
     9   
     10    //Template tracker class
     11    var TemplateTracker = function()
     12    {
     13        var templates = new Array();
     14        var currentIndex = -1;
     15
     16        this.push = function(object)
     17        {
     18            if(currentIndex < templates.length - 1 && templates.length > 0)
     19            {
     20                templates.splice(currentIndex + 1, templates.length - 1 - currentIndex);
     21            }
     22            templates[++currentIndex] = object;
     23
     24            _forwardButton.button("option", "disabled", true);
     25            if(templates.length > 1)
     26            {
     27                _backButton.button("option", "disabled", false);
     28            }
     29        }
     30
     31        this.next = function()
     32        {
     33            if(currentIndex == templates.length - 1)
     34            {
     35                return;
     36            }
     37
     38            if(currentIndex + 1 == templates.length - 1)
     39            {
     40                _forwardButton.button("option", "disabled", true);
     41            }
     42            _backButton.button("option", "disabled", false);
     43
     44            return templates[++currentIndex];
     45        }
     46
     47        this.previous = function()
     48        {
     49            if(currentIndex == 0)
     50            {
     51                return;
     52            }
     53
     54            if(currentIndex - 1 == 0)
     55            {
     56                _backButton.button("option", "disabled", true);
     57            }
     58            _forwardButton.button("option", "disabled", false);
     59
     60            return templates[--currentIndex];
     61        }
     62       
     63        this.peekPrevious = function()
     64        {
     65            if(currentIndex == 0)
     66            {
     67                return;
     68            }
     69
     70            return templates[currentIndex - 1];
     71        }
     72
     73        this.peekNext = function()
     74        {
     75            if(currentIndex == templates.length - 1)
     76            {
     77                return;
     78            }
     79
     80            return templates[currentIndex + 1];
     81        }
     82    }
     83
     84    var _templateTracker = new TemplateTracker();
    985
    1086    //Debugger state-keeping variables
     
    1591    var _editModeText = false;
    1692    var _fromSelection = false;
    17     var _selectedTemplate;
    1893    var _selectedInfoContainers = new Array();
    1994
     
    29104    var _editor;
    30105    var _editingDiv;
     106    var _xmlStatusBar;
     107   
     108    //Buttons
     109    var _backButton;
     110    var _forwardButton;
     111    var _currentSelectionButton;
    31112    var _enableSelectorButton;
    32113    var _closeEditorButton;
    33     var _xmlStatusBar;
    34114    var _saveButton;
    35115    var _swapEditorButton;
     
    95175        }
    96176    }
     177   
     178    var changeToSelectedElement = function(templateIndex, templateList)
     179    {
     180        _templateSelector.children("select").empty();
     181       
     182        for(var i = 0; i < templateList.length; i++)
     183        {
     184            _templateSelector.children("select").append($(templateList[i]).clone(true));
     185        }
     186
     187        if(templateIndex === undefined)
     188        {
     189            _templateSelector.find("option").first().trigger("change", [true]);
     190        }
     191        else
     192        {
     193            _templateSelector.find("option").filter(function(){return $(this).data("index") == templateIndex}).first().trigger("change", [true]);
     194        }
     195        return;
     196    }
     197   
     198    var createNavButtons = function(buttonDiv)
     199    {
     200        var navButtonHolder = $("<div>").css("float", "left");
     201
     202        var backForwardFunction = function(e)
     203        {
     204            var template;
     205            if($(e.target).attr("id") == "veBack")
     206            {
     207                template = _templateTracker.previous();
     208            }
     209            else
     210            {
     211                template = _templateTracker.next();
     212            }
     213           
     214            if(!template)
     215            {
     216                return;
     217            }
     218
     219            _fileSelector.find("option").filter(function(){return $(this).data("index") == template.fileIndex}).prop("selected", true);
     220
     221            changeToSelectedElement(template.templateIndex, template.list);
     222        }
     223       
     224        _backButton = $("<button>Back button</button>").attr("id", "veBack");
     225        _backButton.click(backForwardFunction);
     226        _styleFunctions.push(function(){_backButton.button({icons:{primary:"ui-icon-triangle-1-w"}, text:false, disabled:true})});
     227   
     228        _forwardButton = $("<button>Forward button</button>").attr("id", "veForwards");
     229        _forwardButton.click(backForwardFunction);
     230        _styleFunctions.push(function(){_forwardButton.button({icons:{primary:"ui-icon-triangle-1-e"}, text:false, disabled:true})});
     231
     232        //Changes the template list to what is currently selected
     233        _currentSelectionButton = $("<button>Current selection button</button>");
     234        _currentSelectionButton.click(function()
     235        {
     236            _fileSelector.find("option").eq(0).prop("selected", true);
     237            changeToSelectedElement(undefined, _selectedInfoContainers);
     238           
     239            var selectedCopy = new Array();
     240            for(var i = 0; i < _selectedInfoContainers.length; i++)
     241            {
     242                selectedCopy[i] = _selectedInfoContainers[i];
     243            }
     244           
     245            _templateTracker.push({fileIndex:-1, templateIndex:0, list:selectedCopy});
     246        });
     247        _styleFunctions.push(function(){_currentSelectionButton.button({icons:{primary:"ui-icon-pencil"}, text:false, disabled:true})});
     248       
     249        navButtonHolder.append(_backButton);
     250        navButtonHolder.append(_forwardButton);
     251        navButtonHolder.append(_currentSelectionButton);
     252        buttonDiv.append(navButtonHolder);
     253    }
    97254
    98255    //Create the area where the buttons are stored
    99     var createButtonDiv = function(buttonDiv)
     256    var createControlButtons = function(buttonDiv)
    100257    {
    101258        //Used to enable the selector to get the templates of a particular area of the page
     
    112269            _enableSelectorButton.button("option", "disabled", true);
    113270        });
    114         _styleFunctions.push(function(){_enableSelectorButton.button({icons:{primary:"ui-icon-power"}})});
     271        _styleFunctions.push(function(){_enableSelectorButton.button({icons:{primary:"ui-icon-pencil"}})});
    115272
    116273        //Used to minimise/restore the editor
     
    316473        _templateSelector.append($("<span>Templates: <span>"));
    317474        var templateSelectBox = $("<select>").append("<option>-- No templates --</option>");
    318         templateSelectBox.change(function()
     475        templateSelectBox.change(function(e, triggered)
    319476        {
    320477            var selected = templateSelectBox.find(":selected");
     
    323480            {
    324481                changeFunction();
     482            }
     483
     484            if(!triggered)
     485            {
     486                _templateTracker.push({fileIndex:_fileSelector.find(":selected").data("index"), templateIndex:selected.data("index"), list:templateSelectBox.children("option").clone(true)});
    325487            }
    326488        });
     
    341503            var list = eval(listString);
    342504
    343             var selectBox = $("<select>");
    344             selectBox.append($("<option>-- Select a file --</option>", {value:"none"}));
     505            var fileSelectBox = $("<select>");
     506            fileSelectBox.append($("<option>-- Select a file --</option>").data("index", -1));
    345507            _fileSelector.addClass("ui-state-default");
    346508            _fileSelector.addClass("ui-corner-all");
    347509            _fileSelector.append("<span>Files: </span>");
    348             _fileSelector.append(selectBox);
    349            
    350             var currentSelectionOption = $("<option>[Current selection]</option>");
    351             currentSelectionOption.val("currentSelection");
    352             selectBox.append(currentSelectionOption);
     510            _fileSelector.append(fileSelectBox);
    353511           
    354512            for(var i = 0; i < list.length; i++)
    355513            {
    356514                var item = list[i];
    357                 var option = $("<option>" + item.path + " (" + item.location + ")</option>", {value:item.path});
     515                var option = $("<option>" + item.path + " (" + item.location + ")</option>").data("index", i);
    358516                option.data("fileItem", item);
    359                 selectBox.append(option);
    360             }
    361 
    362             selectBox.change(function()
    363             {
    364                 var selectedItem = selectBox.find(":selected");
    365 
    366                 if(selectedItem.val() == "currentSelection")
    367                 {
    368                     _templateSelector.children("select").empty();
    369                     for(var i = 0; i < _selectedInfoContainers.length; i++)
    370                     {
    371                         var currentContainer = _selectedInfoContainers[i];
    372                         _templateSelector.children("select").append(currentContainer);
    373                     }
    374                     _templateSelector.children("select").children().first().trigger("change");
    375                     return;
    376                 }
     517                fileSelectBox.append(option);
     518            }
     519
     520            fileSelectBox.change(function()
     521            {
     522                var selectedItem = fileSelectBox.find(":selected");
    377523               
    378524                if(!selectedItem.data("fileItem"))
     
    393539                    if(templateList.length == 0)
    394540                    {
    395                         _templateSelector.children("select").append("<option>-- No templates --</option>");
     541                        _templateSelector.children("select").append($("<option>-- No templates --</option>").data("index", -1));
    396542                    }
    397543
    398544                    for(var i = 0; i < templateList.length; i++)
    399545                    {
    400                         var fileName = selectedItem.data("fileItem").path;
     546                        var filename = selectedItem.data("fileItem").path;
    401547                        var location = selectedItem.data("fileItem").location;
    402548                        var namespace = templateList[i].namespace;
     
    418564                        _elements.push(infoContainer);
    419565
    420                         addChangeEventToInfoContainer(infoContainer, fileName, location, nodename, namespace, name, match);
     566                        addChangeEventToInfoContainer(infoContainer, filename, location, nodename, namespace, name, match);
    421567
    422568                        if(name && name.length > 0)
     
    429575                        }
    430576
     577                        infoContainer.data("index", i);
    431578                        _templateSelector.children("select").append(infoContainer);
    432579                    }
     
    465612        var buttonDiv = $("<div>");
    466613        toolBarDiv.append(buttonDiv);
    467         createButtonDiv(buttonDiv);
     614        createNavButtons(buttonDiv);
     615        createControlButtons(buttonDiv);
    468616        createFileAndTemplateSelectors(buttonDiv);
    469617        createXMLStatusBar(buttonDiv);
     
    508656
    509657    //Change the current template in the XML and Visual editor
    510     this.changeCurrentTemplate = function(location, fileName, nodename, namespace, name, match)
    511     {
     658    this.changeCurrentTemplate = function(location, filename, nodename, namespace, name, match)
     659    {
     660        _currentFileName = filename;
     661        _currentLocation = location;
     662        _currentNodename = nodename;
     663        _currentNamespace = namespace;
     664        _currentName = name;
     665        _currentMatch = match;
     666   
    512667        var responseName = "requestedNameTemplate";
    513668
    514         var url = gs.xsltParams.library_name + "?a=g&rt=r&s=GetXMLTemplateFromFile&s1.fileName=" + fileName + "&s1.interfaceName=" + gs.xsltParams.interface_name + "&s1.siteName=" + gs.xsltParams.site_name + "&s1.collectionName=" + gs.cgiParams.c + "&s1.locationName=" + location + "&s1.namespace=" + namespace + "&s1.nodename=" + nodename;
     669        var url = gs.xsltParams.library_name + "?a=g&rt=r&s=GetXMLTemplateFromFile&s1.fileName=" + filename + "&s1.interfaceName=" + gs.xsltParams.interface_name + "&s1.siteName=" + gs.xsltParams.site_name + "&s1.collectionName=" + gs.cgiParams.c + "&s1.locationName=" + location + "&s1.namespace=" + namespace + "&s1.nodename=" + nodename;
    515670        if(match && match.length > 0){url += "&s1.match=" + match; responseName = "requestedMatchTemplate";}
    516671        if(name && name.length > 0){url += "&s1.name=" + name;}
     
    541696
    542697            _editingDiv.empty();
    543             _editingDiv.append($("<p>Location: " + location + " <br/>Filename: " + fileName + "</p>"));
     698            _editingDiv.append($("<p>Location: " + location + " <br/>Filename: " + filename + "</p>"));
    544699            _editingDiv.append(_textEditor);
    545700
     
    551706
    552707            _vEditor.setFileLocation(location);
    553             _vEditor.setFileName(fileName);
     708            _vEditor.setFileName(filename);
    554709
    555710            if(!_isVisualEditor)
     
    587742
    588743    //Store the function that is called when this template is selected from the list
    589     var addChangeEventToInfoContainer = function(infoContainer, fileName, location, nodename, namespace, name, match)
     744    var addChangeEventToInfoContainer = function(infoContainer, filename, location, nodename, namespace, name, match)
    590745    {
    591746        infoContainer.data("changeFunction", function()
    592747        {
    593             if(_selectedTemplate)
    594             {
    595                 _selectedTemplate.css("border", _selectedTemplate.prevBorder);
    596             }
    597             _selectedTemplate = infoContainer;
    598             _selectedTemplate.prevBorder = _selectedTemplate.css("border");
    599             _selectedTemplate.css("border", "red 1px solid");
    600 
    601             _currentFileName = fileName;
    602             _currentLocation = location;
    603             _currentNodename = nodename;
    604             _currentNamespace = namespace;
    605             _currentName = name;
    606             _currentMatch = match;
    607 
    608             _greenbug.changeCurrentTemplate(location, fileName, nodename, namespace, name, match);
     748            _greenbug.changeCurrentTemplate(location, filename, nodename, namespace, name, match);
    609749        });
    610750    }
     
    614754    {
    615755        var location;
    616         var fileName;
     756        var filename;
    617757        //Use the filepath to work out where this file is from
    618758        if(filepath.search(/[\/\\]interfaces[\/\\]/) != -1)
    619759        {
    620760            location = "interface";
    621             fileName = filepath.replace(/.*[\/\\]transform[\/\\]/, "");
     761            filename = filepath.replace(/.*[\/\\]transform[\/\\]/, "");
    622762        }
    623763        else if(filepath.search(/[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]etc[\/\\]/) != -1)
    624764        {
    625765            location = "collectionConfig";
    626             fileName = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]etc[\/\\]/, "");
     766            filename = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]etc[\/\\]/, "");
    627767        }
    628768        else if(filepath.search(/[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]transform[\/\\]/) != -1)
    629769        {
    630770            location = "collection";
    631             fileName = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]transform[\/\\]/, "");
     771            filename = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]collect[\/\\].*[\/\\]transform[\/\\]/, "");
    632772        }
    633773        else if(filepath.search(/[\/\\]sites[\/\\].*[\/\\]transform[\/\\]/) != -1)
    634774        {
    635775            location = "site";
    636             fileName = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]transform[\/\\]/, "");
     776            filename = filepath.replace(/.*[\/\\]sites[\/\\].*[\/\\]transform[\/\\]/, "");
    637777        }
    638778       
    639         return {location:location, filename:fileName};
     779        return {location:location, filename:filename};
    640780    }
    641781
     
    647787            if(_debugOn)
    648788            {
     789                e.stopPropagation();
    649790                $("a").off("click");
    650791                _debugOn = false;
    651792                _pauseSelector = true;
    652793                _enableSelectorButton.button("option", "disabled", false);
    653                 _templateSelector.children("select").trigger("change");
    654                 _fileSelector.children("select").val("currentSelection");
    655                 e.stopPropagation();
     794                _templateSelector.children("select").trigger("change", [true]);
     795                _fileSelector.children("select").val("none");
     796               
     797                var selectedCopy = new Array();
     798                for(var i = 0; i < _selectedInfoContainers.length; i++)
     799                {
     800                    selectedCopy[i] = _selectedInfoContainers[i];
     801                }
     802               
     803                _currentSelectionButton.button("option", "disabled", false);
     804               
     805                _templateTracker.push({fileIndex:-1, list:selectedCopy, templateIndex:0});
    656806            }
    657807        });
     
    718868                        infoContainer.text(match);
    719869                    }
    720                    
     870
     871                    _templateSelector.children("select").append(infoContainer);
     872                    infoContainer.data("index", infoContainer.index());
    721873                    _selectedInfoContainers.push(infoContainer.clone(true));
    722 
    723                     _templateSelector.children("select").append(infoContainer);
    724874                });
    725875               
  • main/trunk/greenstone3/web/interfaces/default/js/visual-xml-editor.js

    r27163 r27218  
    277277    var retrieveGSLIBTemplates = function(callback)
    278278    {
    279         var url = gs.xsltParams.library_name + "?a=g&rt=r&s=GetTemplateListFromFile&s1.locationName=interface&s1.interfaceName=" + gs.xsltParams.interface_name + "&s1.fileName=gslib.xsl";
    280 
    281         $.ajax(url)
    282         .success(function(response)
    283         {
    284             startIndex = response.search("<templateList>") + "<templateList>".length;
    285             endIndex = response.search("</templateList>");
    286 
    287             if(startIndex == "<templateList>".length - 1)
     279        if($(document).data("gslibList"))
     280        {
     281            _elemList["gslib"] = $(document).data("gslibList");
     282           
     283            if(callback)
     284            {
     285                callback();
     286            }
     287        }
     288        else
     289        {
     290            var url = gs.xsltParams.library_name + "?a=g&rt=r&s=GetTemplateListFromFile&s1.locationName=interface&s1.interfaceName=" + gs.xsltParams.interface_name + "&s1.fileName=gslib.xsl";
     291
     292            $.ajax(url)
     293            .success(function(response)
     294            {
     295                startIndex = response.search("<templateList>") + "<templateList>".length;
     296                endIndex = response.search("</templateList>");
     297
     298                if(startIndex == "<templateList>".length - 1)
     299                {
     300                    console.log("Error retrieving GSLIB templates");
     301                    return;
     302                }
     303
     304                var listString = response.substring(startIndex, endIndex);
     305                var list = eval(listString.replace(/&quot;/g, "\""));
     306                var modifiedList = new Array();
     307
     308                for(var i = 0; i < list.length; i++)
     309                {
     310                    var current = list[i];
     311                    if(current.name)
     312                    {
     313                        modifiedList.push(current.name);
     314                    }
     315                }
     316               
     317                _elemList["gslib"] = modifiedList;
     318                $(document).data("gslibList", modifiedList);
     319               
     320                if(callback)
     321                {
     322                    callback();
     323                }
     324            })
     325            .error(function()
    288326            {
    289327                console.log("Error retrieving GSLIB templates");
    290                 return;
    291             }
    292 
    293             var listString = response.substring(startIndex, endIndex);
    294             var list = eval(listString.replace(/&quot;/g, "\""));
    295             var modifiedList = new Array();
    296 
    297             for(var i = 0; i < list.length; i++)
    298             {
    299                 var current = list[i];
    300                 if(current.name)
    301                 {
    302                     modifiedList.push(current.name);
    303                 }
    304             }
    305 
    306             _elemList["gslib"] = modifiedList;
    307 
    308             if(callback)
    309             {
    310                 callback();
    311             }
    312         })
    313         .error(function()
    314         {
    315             console.log("Error retrieving GSLIB templates");
    316         });
     328            });
     329        }
    317330    }
    318331
     
    328341
    329342            var tab = $("<li>");
    330             var tabLink = $("<a>", {"href":"#ve" + key});
     343            var tabLink = $("<a>", {"href":document.URL + "#ve" + key});
    331344            tabLink.css({"font-size":"0.9em", "padding":"5px"});
    332345            tabLink.text(key);
     
    353366
    354367        var otherTab = $("<li>");
    355         var otherTabLink = $("<a>", {"href":"#veother"});
     368        var otherTabLink = $("<a>", {"href":document.URL + "#veother"});
    356369        otherTabLink.css({"font-size":"0.9em", "padding":"5px"});
    357370        otherTabLink.text("other");
Note: See TracChangeset for help on using the changeset viewer.