Ignore:
Timestamp:
2013-02-27T16:43:04+13:00 (11 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

File:
1 edited

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                                    {
Note: See TracChangeset for help on using the changeset viewer.