home *** CD-ROM | disk | FTP | other *** search
/ GameStar 2005 October / Gamestar_77_2005-10_dvd.iso / Programy / nsb-install-8-0.exe / chrome / browser.jar / content / browser / bookmarks / addBookmark2.js < prev    next >
Encoding:
JavaScript  |  2005-07-29  |  10.4 KB  |  300 lines

  1.  
  2. /**
  3.  * Add Bookmark Dialog. 
  4.  * ====================
  5.  * 
  6.  * This is a generic bookmark dialog that allows for bookmark addition
  7.  * and folder selection. It can be opened with various parameters that 
  8.  * result in appearance/purpose differences and initial state. 
  9.  * 
  10.  * Use: Open with 'openDialog', with the flags 
  11.  *        'centerscreen,chrome,dialog=no,resizable=yes'
  12.  * 
  13.  * Parameters: 
  14.  *   Apart from the standard openDialog parameters, this dialog can 
  15.  *   be passed additional information, which gets mapped to the 
  16.  *   window.arguments array:
  17.  * 
  18.  *   XXXben - it would be cleaner just to take this dialog take an
  19.  *            object so items don't need to be passed in a particular
  20.  *            order.
  21.  * 
  22.  *   window.arguments[0]: Bookmark Name. The value to be prefilled
  23.  *                        into the "Name: " field (if visible).
  24.  *   window.arguments[1]: Bookmark URL: The location of the bookmark.
  25.  *                        The value to be filled in the "Location: "
  26.  *                        field (if visible).
  27.  *   window.arguments[2]: Bookmark Folder. The RDF Resource URI of the
  28.  *                        folder that this bookmark should be created in.
  29.  *   window.arguments[3]: Bookmark Charset. The charset that should be
  30.  *                        used when adding a bookmark to the specified
  31.  *                        URL. (Usually the charset of the current 
  32.  *                        document when launching this window). 
  33.  *   window.arguments[4]: The mode of operation. See notes for details.
  34.  *   window.arguments[5]: If the mode is "addGroup", this is an array
  35.  *                        of objects with name, URL and charset
  36.  *                        properties, one for each group member.
  37.  *   window.arguments[6]: If the bookmark should become a web panel.
  38.  *   window.arguments[7]: A suggested keyword for the bookmark. If this
  39.  *                        argument is supplied, the keyword row is made
  40.  *                        visible.
  41.  *   window.arguments[8]: Whether or not a keyword is required to add
  42.  *                        the bookmark.
  43.  *   window.arguments[9]: PostData to be saved with this bookmark, 
  44.  *                        in the format a string of name=value pairs
  45.  *                        separated by CRLFs.
  46.  *   window.arguments[10]: feed URL for Livemarks (turns bookmark
  47.  *                         into Livemark)
  48.  *   window.arguments[11]: The flag to specify whether it is invoked 
  49.  *                         by the multibar Add Bookmark button
  50.  */
  51.  
  52. var gSelectedFolder;
  53. var gName;
  54. var gKeyword;
  55. var gKeywordRow;
  56. var gExpander;
  57. var gMenulist;
  58. var gBookmarksTree;
  59. var gGroup;
  60. var gKeywordRequired;
  61. var gSuggestedKeyword;
  62. var gRequiredFields = [];
  63. var gPostData;
  64.  
  65. var WSucks;
  66.  
  67. function Startup()
  68. {
  69.   initServices();
  70.   initBMService();
  71.   gName = document.getElementById("name");
  72.   gRequiredFields.push(gName);
  73.   gKeywordRow = document.getElementById("keywordRow");
  74.   gKeyword = document.getElementById("keyword");
  75.   gGroup = document.getElementById("addgroup");
  76.   gExpander = document.getElementById("expander");
  77.   gMenulist = document.getElementById("select-menu");
  78.   gBookmarksTree = document.getElementById("folder-tree");
  79.   gName.value = window.arguments[0];
  80.   gName.select();
  81.   gName.focus();
  82.   gSuggestedKeyword = window.arguments[7];
  83.   gKeywordRequired = window.arguments[8];
  84.   if (!gSuggestedKeyword && !gKeywordRequired) {
  85.     gKeywordRow.hidden = true;
  86.   } else {
  87.     if (gSuggestedKeyword)
  88.       gKeyword.value = gSuggestedKeyword;
  89.     if (gKeywordRequired)
  90.       gRequiredFields.push(gKeyword);
  91.   }
  92.   sizeToContent();
  93.   onFieldInput();
  94.   gSelectedFolder = RDF.GetResource(gMenulist.selectedItem.id);
  95.   // set the Personal Toolbar Folder as the default folder?
  96.   if(window.arguments[11]) {
  97.       var nodes = gMenulist.firstChild.childNodes;
  98.       var btf = BMSVC.getBookmarksToolbarFolder().Value;
  99.       for(var i =0; i < nodes.length; i ++){
  100.           if(nodes.item(i).id == btf) {
  101.               gMenulist.selectedItem = nodes.item(i);
  102.               break;
  103.           }
  104.       }
  105.       gSelectedFolder = RDF.GetResource(gMenulist.selectedItem.id);
  106.   }
  107.   // set another default
  108.   if(window.arguments[4] == "addGroup,group") {
  109.       gGroup.setAttribute("checked", true);
  110.   }
  111.   gExpander.setAttribute("tooltiptext", gExpander.getAttribute("tooltiptextdown"));
  112.   gPostData = window.arguments[9];
  113.  
  114.   WSucks = parseInt(gBookmarksTree.getAttribute("height"));
  115.   if (!WSucks)
  116.     WSucks = 150;
  117.  
  118.   // fix no more persisted class attribute in old profiles
  119.   var localStore = RDF.GetDataSource("rdf:local-store");
  120.   var rAttribute = RDF.GetResource("class");
  121.   var rElement   = RDF.GetResource("chrome://browser/content/bookmarks/addBookmark2.xul#expander");
  122.   var rDialog    = RDF.GetResource("chrome://browser/content/bookmarks/addBookmark2.xul");
  123.   var rPersist   = RDF.GetResource(NC_NS+"persist");
  124.   
  125.   var rOldValue = localStore.GetTarget(rElement, rAttribute, true);
  126.   if (rOldValue) {
  127.     localStore.Unassert(rElement, rAttribute, rOldValue, true);
  128.     localStore.Unassert(rDialog, rPersist, rElement, true);
  129.     gExpander.setAttribute("class", "down");
  130.   }
  131.  
  132. function onFieldInput()
  133. {
  134.   var ok = document.documentElement.getButton("accept");
  135.   ok.disabled = false;
  136.   for (var i = 0; i < gRequiredFields.length; ++i) {
  137.     if (gRequiredFields[i].value == "") {
  138.       ok.disabled = true;
  139.       return;
  140.     }
  141.   }
  142. }
  143.  
  144. function onOK()
  145. {
  146.  
  147.   RDFC.Init(BMDS, gSelectedFolder);
  148.  
  149.   var url, rSource;
  150.   var livemarkFeed = window.arguments[10];
  151.   if (gGroup && gGroup.checked) {
  152.     rSource = BMDS.createFolder(gName.value);
  153.     const groups = window.arguments[5];
  154.     for (var i = 0; i < groups.length; ++i) {
  155.       url = getNormalizedURL(groups[i].url);
  156.       BMDS.createBookmarkInContainer(groups[i].name, url, gKeyword.value, null,
  157.                                      groups[i].charset, gPostData, rSource, -1);
  158.     }
  159.     insertBookmarkSelection(rSource);
  160.            
  161.   } else if (gGroup && (gGroup.checked == false) && (window.arguments[4] == "addGroup,group")) {
  162.  
  163.     const agroup = window.arguments[5];
  164.     for (var i = 0; i < agroup.length; ++i) {
  165.       url = getNormalizedURL(agroup[i].url);
  166.       rSource = BMDS.createBookmark(agroup[i].name, url, null, null, agroup[i].charset, gPostData);
  167.       insertBookmarkSelection(rSource);
  168.     }
  169.   
  170.   } else if (livemarkFeed != null) {
  171.     url = getNormalizedURL(window.arguments[1]);
  172.     rSource = BMDS.createLivemark(gName.value, url, livemarkFeed, null);
  173.     insertBookmarkSelection(rSource);
  174.   } else {
  175.     url = getNormalizedURL(window.arguments[1]);
  176.     rSource = BMDS.createBookmark(gName.value, url, gKeyword.value, null, window.arguments[3], gPostData);
  177.     insertBookmarkSelection(rSource);
  178.   }
  179.  
  180. /*
  181.   var selection = BookmarksUtils.getSelectionFromResource(rSource);
  182.   var target    = BookmarksUtils.getTargetFromFolder(gSelectedFolder);
  183.   BookmarksUtils.insertAndCheckSelection("newbookmark", selection, target);
  184. */
  185.   
  186.   if (window.arguments[6] && rSource) {
  187.     // Assert that we're a web panel.
  188.     BMDS.Assert(rSource, RDF.GetResource(NC_NS+"WebPanel"),
  189.                 RDF.GetLiteral("true"), true);
  190.   }
  191.   
  192.   // in insertSelection, the ds flush is delayed. It will never be performed,
  193.   // since this dialog is destroyed before.
  194.   // We have to flush manually
  195.   var remoteDS = BMDS.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
  196.   remoteDS.Flush();
  197. }
  198.  
  199.  
  200. // MERC - JCH: Needed for adding a bookmark
  201. function insertBookmarkSelection(rSource)
  202. {
  203.   var selection = BookmarksUtils.getSelectionFromResource(rSource);
  204.   var target    = BookmarksUtils.getTargetFromFolder(gSelectedFolder);
  205.   BookmarksUtils.insertAndCheckSelection("newbookmark", selection, target);
  206. }
  207.  
  208. function getNormalizedURL(url)
  209. {
  210.   // Check to see if the item is a local directory path, and if so, convert
  211.   // to a file URL so that aggregation with rdf:files works
  212.   try {
  213.     const kLF = Components.classes["@mozilla.org/file/local;1"]
  214.                           .createInstance(Components.interfaces.nsILocalFile);
  215.     kLF.initWithPath(url);
  216.     if (kLF.exists()) {
  217.       var ioService = Components.classes["@mozilla.org/network/io-service;1"]
  218.                                 .getService(Components.interfaces.nsIIOService);
  219.       var fileHandler = ioService.getProtocolHandler("file")
  220.                                  .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
  221.  
  222.       url = fileHandler.getURLSpecFromFile(kLF);
  223.     }
  224.   }
  225.   catch (e) {
  226.   }
  227.  
  228.   return url;
  229. }
  230.  
  231. function selectMenulistFolder(aEvent)
  232. {
  233.   gSelectedFolder = RDF.GetResource(aEvent.target.id);
  234.   if (!gBookmarksTree.collapsed)
  235.     selectFolder(gSelectedFolder);
  236. }
  237.  
  238. function selectTreeFolder()
  239. {
  240.   var resource = gBookmarksTree.currentResource;
  241.   if (resource == gSelectedFolder)
  242.     return;
  243.   gSelectedFolder = resource;
  244.   var menuitem = document.getElementById(gSelectedFolder.Value);
  245.   gMenulist.selectedItem = menuitem;
  246.   if (!menuitem)
  247.     gMenulist.label = BookmarksUtils.getProperty(gSelectedFolder, NC_NS+"Name");
  248. }
  249.  
  250. function selectFolder(aFolder)
  251. {
  252.   gBookmarksTree.treeBoxObject.selection.selectEventsSuppressed = true;
  253.   gBookmarksTree.treeBoxObject.selection.clearSelection();
  254.   gBookmarksTree.selectResource(aFolder);
  255.   var index = gBookmarksTree.currentIndex;
  256.   gBookmarksTree.treeBoxObject.ensureRowIsVisible(index);
  257.   gBookmarksTree.treeBoxObject.selection.selectEventsSuppressed = false;
  258. }
  259.  
  260. function expandTree()
  261. {
  262.   setFolderTreeHeight();
  263.   var willCollapse = !gBookmarksTree.collapsed;
  264.   gExpander.setAttribute("class",willCollapse?"down":"up");
  265.   gExpander.setAttribute("tooltiptext", gExpander.getAttribute("tooltiptext"+(willCollapse?"down":"up")));
  266.   if (willCollapse) {
  267.     document.documentElement.buttons = "accept,cancel";
  268.     WSucks = gBookmarksTree.boxObject.height;
  269.   } else {
  270.     document.documentElement.buttons = "accept,cancel,extra2";
  271.     if (!gBookmarksTree.treeBoxObject.view.isContainerOpen(0))
  272.       gBookmarksTree.treeBoxObject.view.toggleOpenState(0);
  273.     selectFolder(gSelectedFolder);
  274.     gBookmarksTree.focus();
  275.   }
  276.   gBookmarksTree.collapsed = willCollapse;
  277.   resizeTo(window.outerWidth, window.outerHeight+(willCollapse?-WSucks:+WSucks));
  278. }
  279.  
  280. function setFolderTreeHeight()
  281. {
  282.   var isCollapsed = gBookmarksTree.collapsed;
  283.   if (!isCollapsed)
  284.     gBookmarksTree.setAttribute("height", gBookmarksTree.boxObject.height);
  285. }
  286.  
  287. function newFolder()
  288. {
  289.   gBookmarksTree.focus();
  290.   // we should use goDoCommand, but the current way of inserting
  291.   // resources do not insert in folders.
  292.   //goDoCommand("cmd_bm_newfolder");
  293.   var target = BookmarksUtils.getTargetFromFolder(gSelectedFolder);
  294.   var folder = BookmarksCommand.createNewFolder(target);
  295.   if (!BMSVC.isBookmarkedResource(folder))
  296.     return; // new folder cancelled
  297.   selectFolder(folder);
  298. }
  299.