# ***** BEGIN LICENSE BLOCK ***** # Version: MPL 1.1/GPL 2.0/LGPL 2.1 # # The contents of this file are subject to the Mozilla 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/MPL/ # # 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 the Places Menupopup View. # # The Initial Developer of the Original Code is Google Inc. # Portions created by the Initial Developer are Copyright (C) 2005-2006 # the Initial Developer. All Rights Reserved. # # Contributor(s): # Annie Sullivan # Ben Goodger # # Alternatively, the contents of this file may be used under the terms of # either the GNU General Public License Version 2 or later (the "GPL"), or # the GNU Lesser General Public License Version 2.1 or later (the "LGPL"), # in which case the provisions of the GPL or the LGPL are applicable instead # of those above. If you wish to allow use of your version of this file only # under the terms of either the GPL or the LGPL, and not to allow others to # use your version of this file under the terms of the MPL, indicate your # decision by deleting the provisions above and replace them with the notice # and other provisions required by the GPL or the LGPL. If you do not delete # the provisions above, a recipient may use your version of this file under # the terms of any one of the MPL, the GPL or the LGPL. # # ***** END LICENSE BLOCK ***** null null -1 -1 0) --this._endMarker; } // If no static items were found at the beginning, remove all items before // the static items at the end. if (this._startMarker == -1) { var end = (this._endMarker == -1) ? this.childNodes.length - 1 : this._endMarker - 1; for (var i = end; i >=0; i--) { this.removeChild(this.childNodes[i]); if (this._endMarker > 0) --this._endMarker; } } //LOG("KIDS = " + this.childNodes.length); ]]> 0) { for (var i = 0; i < cc; ++i) { var child = this._resultNode.getChild(i); var element = null; if (PlacesController.nodeIsURI(child) || noSubmenus) { element = document.createElementNS(XULNS, "menuitem"); element.setAttribute("label", child.title); element.setAttribute("url", child.uri); element.setAttribute("statustext", child.uri); element.className = "menuitem-iconic bookmark-item"; } else if (PlacesController.nodeIsSeparator(child)) { element = document.createElementNS(XULNS, "menuseparator"); } else if (PlacesController.nodeIsContainer(child)) { element = document.createElementNS(XULNS, "menu"); element.setAttribute("type", "menu"); element.setAttribute("container", "true"); element.setAttribute("label", child.title); if (PlacesController.nodeIsLivemarkContainer(child)) { element.setAttribute("livemark", "true"); var folder = asFolder(child).folderId; var bms = Cc["@mozilla.org/browser/nav-bookmarks-service;1"]. getService(Ci.nsINavBookmarksService); var lms = Cc["@mozilla.org/browser/livemark-service;1"]. getService(Ci.nsILivemarkService); var siteURI = lms.getSiteURI(folder); if (siteURI) { element.setAttribute("siteURI", siteURI.spec); } } var popup = document.createElementNS(XULNS, "menupopup"); popup.setAttribute("type", "places"); element.appendChild(popup); #ifndef XP_MACOSX // No context menus on menus on Mac // The context menu is set here instead of in the xbl constructor // because it doesn't get initialized properly if set in the constructor. popup.setAttribute("context", "placesContext"); #endif popup._result = this._result; popup._resultNode = child; element.className = "menu-iconic bookmark-item"; #ifdef XP_MACOSX // If this is a child of the bookmarks menubar, we have to manually attach // its xbl binding, because it's not a dom node and the style rules don't // get applied correctly. if (needsBindingAttachment) { const MENU_URI = "chrome://browser/content/places/menu.xml#places-menupopup"; document.addBinding(popup, MENU_URI); } #endif } // else if (nodeIsQuery) ... add menu to build kids if (element) { element.node = child; // Add the new element to the menu. If there is static content at // the end of the menu, add the element before that. Otherwise, // just add to the end. if (this._endMarker != -1) this.insertBefore(element, this.childNodes[this._endMarker++]); else this.appendChild(element); } if (child.icon) element.setAttribute("image", child.icon.spec); } } else { // This menu is empty. If there is no static content, add // an element to show it is empty. if (this._startMarker == -1 && this._endMarker == -1) { var bundle = document.getElementById("placeBundle"); var label = bundle.getString("bookmarksMenuEmptyFolder"); var element = null; element = document.createElementNS(XULNS, "menuitem"); element.setAttribute("label", label); element.setAttribute("disabled", true); this.appendChild(element); } } // Reset the container to the same state it was in before the function was called. this._resultNode.containerOpen = wasOpen; ]]> 0 ViewConfig.GENERIC_DROP_TYPES ViewConfig.GENERIC_DROP_TYPES false false false if (event.target == this) { this.onPopupShowing(); } if (event.target == this) { if (PlacesController.nodeIsContainer(this._resultNode)) { this._resultNode.QueryInterface(Ci.nsINavHistoryContainerResultNode); this._resultNode.containerOpen = false; } // The autoopened attribute is set for folders which have been // automatically opened when dragged over. Turn off this attribute // when the folder closes because it is no longer applicable. this.removeAttribute("autoopened"); }