/* * The contents of this file are subject to the Netscape Public * License Version 1.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is Mozilla Communicator client code, released * March 31, 1998. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998-1999 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * Ben "Count XULula" Goodger */ function BuildJSEAttributeNameList() { gDialog.AddJSEAttributeNameList.removeAllItems(); // Get events specific to current element var elementName = gElement.localName.toLowerCase(); if (elementName in gJSAttr) { var attNames = gJSAttr[elementName]; var i; var popup; var sep; if (attNames && attNames.length) { // Since we don't allow user-editable JS events yet (but we will soon) // simply remove the JS tab to not allow adding JS events if (attNames[0] == "noJSEvents") { var tab = document.getElementById("tabJSE"); if (tab) tab.parentNode.removeChild(tab); return; } for (i = 0; i < attNames.length; i++) gDialog.AddJSEAttributeNameList.appendItem(attNames[i], attNames[i]); popup = gDialog.AddJSEAttributeNameList.firstChild; if (popup) { sep = document.createElementNS(XUL_NS, "menuseparator"); if (sep) popup.appendChild(sep); } } } // Always add core JS events unless we aborted above for (i = 0; i < gCoreJSEvents.length; i++) { if (gCoreJSEvents[i] == "-") { if (!popup) popup = gDialog.AddJSEAttributeNameList.firstChild; sep = document.createElementNS(XUL_NS, "menuseparator"); if (popup && sep) popup.appendChild(sep); } else gDialog.AddJSEAttributeNameList.appendItem(gCoreJSEvents[i], gCoreJSEvents[i]); } gDialog.AddJSEAttributeNameList.selectedIndex = 0; // Use current name and value of first tree item if it exists onSelectJSETreeItem(); } // build attribute list in tree form from element attributes function BuildJSEAttributeTable() { var nodeMap = gElement.attributes; if (nodeMap.length > 0) { var added = false; for (var i = 0; i < nodeMap.length; i++) { if( CheckAttributeNameSimilarity( nodeMap[i].nodeName, JSEAttrs ) ) continue; // repeated or non-JS handler, ignore this one and go to next if( !IsEventHandler( nodeMap[i].nodeName ) ) continue; // attribute isn't an event handler. var name = nodeMap[i].nodeName.toLowerCase(); var value = gElement.getAttribute(nodeMap[i].nodeName); if (AddTreeItem( name, value, "JSEAList", JSEAttrs )) // add item to tree added = true; } // Select first item if (added) gDialog.AddJSEAttributeTree.selectedIndex = 0; } } // check to see if given string is an event handler. function IsEventHandler( which ) { var handlerName = which.toLowerCase(); var firstTwo = handlerName.substring(0,2); if (firstTwo == "on") return true; else return false; } function onSelectJSEAttribute() { if(!gDoOnSelectTree) return; gDialog.AddJSEAttributeValueInput.value = GetAndSelectExistingAttributeValue(gDialog.AddJSEAttributeNameList.label, "JSEAList"); } function onSelectJSETreeItem() { var tree = gDialog.AddJSEAttributeTree; if (tree && tree.treeBoxObject.selection.count) { // Select attribute name in list gDialog.AddJSEAttributeNameList.value = GetTreeItemAttributeStr(getSelectedItem(tree)); // Set value input to that in tree (no need to update this in the tree) gUpdateTreeValue = false; gDialog.AddJSEAttributeValueInput.value = GetTreeItemValueStr(getSelectedItem(tree)); gUpdateTreeValue = true; } } function onInputJSEAttributeValue() { if (gUpdateTreeValue) { var name = TrimString(gDialog.AddJSEAttributeNameList.label); var value = TrimString(gDialog.AddJSEAttributeValueInput.value); // Update value in the tree list // Since we have a non-editable menulist, // we MUST automatically add the event attribute if it doesn't exist if (!UpdateExistingAttribute( name, value, "JSEAList" ) && value) AddTreeItem( name, value, "JSEAList", JSEAttrs ); } } function editJSEAttributeValue(targetCell) { if (IsNotTreeHeader(targetCell)) gDialog.AddJSEAttributeValueInput.inputField.select(); } function UpdateJSEAttributes() { var JSEAList = document.getElementById("JSEAList"); var i; // remove removed attributes for (i = 0; i < JSERAttrs.length; i++) { var name = JSERAttrs[i]; if (gElement.hasAttribute(name)) doRemoveAttribute(name); } // Add events for (i = 0; i < JSEAList.childNodes.length; i++) { var item = JSEAList.childNodes[i]; // set the event handler doSetAttribute( GetTreeItemAttributeStr(item), GetTreeItemValueStr(item) ); } } function RemoveJSEAttribute() { var treechildren = gDialog.AddJSEAttributeTree.lastChild; // This differs from HTML and CSS panels: // We reselect after removing, because there is not // editable attribute name input, so we can't clear that // like we do in other panels var newIndex = gDialog.AddJSEAttributeTree.selectedIndex; // We only allow 1 selected item if (gDialog.AddJSEAttributeTree.treeBoxObject.selection.count) { var item = getSelectedItem(gDialog.AddJSEAttributeTree); // Name is the text of the treecell var attr = GetTreeItemAttributeStr(item); // remove the item from the attribute array if (newIndex >= (JSEAttrs.length-1)) newIndex--; // remove the item from the attribute array JSERAttrs[JSERAttrs.length] = attr; RemoveNameFromAttArray(attr, JSEAttrs); // Remove the item from the tree treechildren.removeChild (item); // Reselect an item gDialog.AddJSEAttributeTree.selectedIndex = newIndex; } }