Changeset 26968

Show
Ignore:
Timestamp:
27.02.2013 16:43:04 (7 years ago)
Author:
sjm84
Message:

Implemented the ability to restrict the types of elements are allowed inside another element as well as more bug fixing

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • main/trunk/greenstone3/web/interfaces/default/js/visual-xml-editor.js

    r26967 r26968  
    3030    var _transactions = new Array(); 
    3131     
     32    var _childRestrictions =  
     33    { 
     34        gsf: 
     35        { 
     36            "choose-metadata":["gsf:metadata", "gsf:default"] 
     37        } 
     38    }; 
     39     
    3240    this.getXML = function() 
    3341    { 
     
    111119    } 
    112120     
     121    var checkRestricted = function(child, parent) 
     122    { 
     123        var pFullNodename = parent.tagName; 
     124        var cFullNodename = child.tagName; 
     125        var pNamespace; 
     126        var pNodeName; 
     127        if(pFullNodename.indexOf(":") == -1) 
     128        { 
     129            pNamespace = "no namespace"; 
     130            pNodeName = pFullNodename; 
     131        } 
     132        else 
     133        { 
     134            pNamespace = pFullNodename.substring(0, pFullNodename.indexOf(":")); 
     135            pNodeName = pFullNodename.substring(pFullNodename.indexOf(":") + 1); 
     136        } 
     137         
     138        var namespaceList = _childRestrictions[pNamespace]; 
     139        if(namespaceList) 
     140        { 
     141            var childList = namespaceList[pNodeName]; 
     142            if(childList) 
     143            { 
     144                for(var i = 0; i < childList.length; i++) 
     145                { 
     146                    if(childList[i] == cFullNodename) 
     147                    { 
     148                        return true; 
     149                    } 
     150                } 
     151                return false; 
     152            } 
     153        } 
     154         
     155        return true; 
     156    } 
     157     
    113158    var populateToolbar = function() 
    114159    { 
    115160        var elemList =  
    116161        { 
    117             keys:["html", "xsl", "gsf"], // NEED TO ADD GSLIB AT SOME POINT 
    118162            html:["a", "div", "li", "script", "span", "table", "td", "tr", "ul"], 
    119163            xsl: 
     
    133177                "interfaceText", "link", "meta-value", "metadata", "script", 
    134178                "style", "switch", "template", "text", "variable" 
    135             ], 
     179            ] 
    136180        }; 
    137181 
     
    139183        _toolboxDiv.append(tabHolder); 
    140184 
    141         for(var i = 0; i < elemList.keys.length; i++) 
    142         { 
    143             var key = elemList.keys[i]; 
     185        for(var key in elemList) 
     186        { 
    144187            var currentList = elemList[key]; 
    145188 
     
    632675                        if(overElement) 
    633676                        { 
     677                            if(overElement.getXMLNode().nodeType == 3 || !checkRestricted(_xmlNode, overElement.getXMLNode())) 
     678                            { 
     679                                return; 
     680                            } 
     681                             
    634682                            _validDropSpot = true; 
    635683                            var overDiv = overElement.getDiv(); 
     
    676724                                { 
    677725                                    _validDropElem = overChildren.eq(pos - 1); 
     726                                    //Necessary to fix a rare bug that causes pos to be off by one 
    678727                                    if(!_validDropElem.length) 
    679728                                    {