home *** CD-ROM | disk | FTP | other *** search
-
- // XXX MAKE SURE that the "url" field is LAST!
- // This is important for what happens if/when the URL itself is changed.
- // Ask rjc@netscape.com if you want to know why exactly this is.
-
- // This is the set of fields that are visible in the window.
- var gFields;
-
- // ...and this is a parallel array that contains the RDF properties
- // that they are associated with.
- var gProperties;
-
- var Bookmarks;
- var gBookmarkURL;
-
- function showDescription()
- {
- initServices();
- initBMService();
-
- gBookmarkURL = window.arguments[0];
- var resource = RDF.GetResource(gBookmarkURL);
-
- // Check the description
- var primaryType = BookmarksUtils.resolveType(resource);
- var description = BookmarksUtils.getLocaleString("description_"+primaryType);
-
- var newBookmarkFolder = BookmarksUtils.getNewBookmarkFolder();
- var newSearchFolder = BookmarksUtils.getNewSearchFolder();
-
- if (resource == newBookmarkFolder && resource == newSearchFolder)
- description = description+" "+BookmarksUtils.getLocaleString("description_NewBookmarkAndSearchFolder")
- else if (resource == newBookmarkFolder )
- description = description+" "+BookmarksUtils.getLocaleString("description_NewBookmarkFolder")
- else if (resource == newSearchFolder)
- description = description+" "+BookmarksUtils.getLocaleString("description_NewSearchFolder");
-
- var textNode = document.createTextNode(description);
- document.getElementById("bookmarkDescription").appendChild(textNode);
-
- }
-
- function Init()
- {
- // This is the set of fields that are visible in the window.
- gFields = ["name", "shortcut", "description", "url"];
-
- // ...and this is a parallel array that contains the RDF properties
- // that they are associated with.
-
- gProperties = [NC_NS + "Name",
- NC_NS + "ShortcutURL",
- NC_NS + "Description",
- NC_NS + "URL"];
-
- Bookmarks = RDF.GetDataSource("rdf:bookmarks");
-
- var x;
- var resource = RDF.GetResource(gBookmarkURL);
- // Initialize the properties panel by copying the values from the
- // RDF graph into the fields on screen.
-
- for (var i = 0; i < gFields.length; ++i) {
- var field = document.getElementById(gFields[i]);
-
- var value = Bookmarks.GetTarget(resource, RDF.GetResource(gProperties[i]), true);
-
- if (value)
- value = value.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
-
- if (value) //make sure were aren't stuffing null into any fields
- field.value = value;
- }
-
- var propsWindow = document.getElementById("bmPropsWindow");
- var nameNode = document.getElementById("name");
- var title = propsWindow.getAttribute("title");
- title = title.replace(/\*\*bm_title\*\*/gi, nameNode.value);
- propsWindow.setAttribute("title", title);
-
- // check bookmark schedule
- var scheduleArc = RDF.GetResource("http://home.netscape.com/WEB-rdf#Schedule");
- value = Bookmarks.GetTarget(resource, scheduleArc, true);
-
- if (value) {
- value = value.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;
-
- if (value) {
- var values = value.split("|");
- if (values.length == 4) {
- // get day range
- var days = values[0];
- var dayNode = document.getElementById("dayRange");
- var dayItems = dayNode.childNodes[0].childNodes;
- for (x=0; x < dayItems.length; ++x) {
- if (dayItems[x].getAttribute("value") == days) {
- dayNode.selectedItem = dayItems[x];
- break;
- }
- }
-
- // get hour range
- var hours = values[1].split("-");
- var startHour = "";
- var endHour = "";
-
- if (hours.length == 2) {
- startHour = hours[0];
- endHour = hours[1];
- }
-
- // set start hour
- var startHourNode = document.getElementById("startHourRange");
- var startHourItems = startHourNode.childNodes[0].childNodes;
- for (x=0; x < startHourItems.length; ++x) {
- if (startHourItems[x].getAttribute("value") == startHour) {
- startHourNode.selectedItem = startHourItems[x];
- break;
- }
- }
-
- // set end hour
- var endHourNode = document.getElementById("endHourRange");
- var endHourItems = endHourNode.childNodes[0].childNodes;
- for (x=0; x < endHourItems.length; ++x) {
- if (endHourItems[x].getAttribute("value") == endHour) {
- endHourNode.selectedItem = endHourItems[x];
- break;
- }
- }
-
- // get duration
- var duration = values[2];
- var durationNode = document.getElementById("duration");
- durationNode.value = duration;
-
- // get notification method
- var method = values[3];
- if (method.indexOf("icon") >= 0)
- document.getElementById("bookmarkIcon").checked = true;
-
- if (method.indexOf("sound") >= 0)
- document.getElementById("playSound").checked = true;
-
- if (method.indexOf("alert") >= 0)
- document.getElementById("showAlert").checked = true;
-
- if (method.indexOf("open") >= 0)
- document.getElementById("openWindow").checked = true;
- }
- }
- }
-
- // if its a container, disable some things
- var isContainerFlag = RDFCU.IsContainer(Bookmarks, RDF.GetResource(gBookmarkURL));
- if (!isContainerFlag) {
- // XXX To do: the "RDFCU.IsContainer" call above only works for RDF sequences;
- // if its not a RDF sequence, we should to more checking to see if
- // the item in question is really a container of not. A good example
- // of this is the "File System" container.
- }
-
- if (isContainerFlag) {
- // If it is a folder, it has no URL or Keyword
- document.getElementById("locationrow").setAttribute("hidden", "true");
- document.getElementById("shortcutrow").setAttribute("hidden", "true");
- }
-
- if (gBookmarkURL.substr(0, 7).toLowerCase() != "http://" &&
- gBookmarkURL.substr(0, 8).toLowerCase() != "https://") {
- // only allow scheduling of http/https URLs
- document.getElementById("ScheduleTab").setAttribute("hidden", "true");
- document.getElementById("NotifyTab").setAttribute("hidden", "true");
- }
-
- sizeToContent();
-
- // Set up the enabled of controls on the scheduling panels
- dayRangeChange(document.getElementById("dayRange"));
-
- // set initial focus
- nameNode.focus();
- nameNode.select();
-
- }
-
-
- function Commit()
- {
- var changed = false;
-
- // Grovel through the fields to see if any of the values have
- // changed. If so, update the RDF graph and force them to be saved
- // to disk.
- for (var i = 0; i < gFields.length; ++i) {
- var field = document.getElementById(gFields[i]);
-
- if (field) {
- // Get the new value as a literal, using 'null' if the value is empty.
- var newvalue = field.value;
-
- var oldvalue = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
- RDF.GetResource(gProperties[i]),
- true);
-
- if (oldvalue)
- oldvalue = oldvalue.QueryInterface(Components.interfaces.nsIRDFLiteral);
-
- if (newvalue && gProperties[i] == (NC_NS + "ShortcutURL")) {
- // shortcuts are always lowercased internally
- newvalue = newvalue.toLowerCase();
- }
- else if (newvalue && gProperties[i] == (NC_NS + "URL")) {
- // we're dealing with the URL attribute;
- // if a scheme isn't specified, use "http://"
- if (newvalue.indexOf(":") < 0)
- newvalue = "http://" + newvalue;
- }
-
- if (newvalue)
- newvalue = RDF.GetLiteral(newvalue);
-
- if (updateAttribute(gProperties[i], oldvalue, newvalue)) {
- // Update gBookmarkURL if the url changed
- if (newvalue && gProperties[i] == NC_NS + "URL")
- gBookmarkURL = newvalue.Value;
-
- changed = true;
- }
- }
- }
-
- // Update bookmark schedule if necessary;
- // if the tab was removed, just skip it
- var scheduleTab = document.getElementById("ScheduleTab");
- if (scheduleTab) {
- var scheduleRes = "http://home.netscape.com/WEB-rdf#Schedule";
- oldvalue = Bookmarks.GetTarget(RDF.GetResource(gBookmarkURL),
- RDF.GetResource(scheduleRes), true);
- newvalue = "";
- var dayRangeNode = document.getElementById("dayRange");
- var dayRange = dayRangeNode.selectedItem.getAttribute("value");
-
- if (dayRange) {
- var startHourRangeNode = document.getElementById("startHourRange");
- var startHourRange = startHourRangeNode.selectedItem.getAttribute("value");
-
- var endHourRangeNode = document.getElementById("endHourRange");
- var endHourRange = endHourRangeNode.selectedItem.getAttribute("value");
-
- if (parseInt(startHourRange) > parseInt(endHourRange)) {
- var temp = startHourRange;
- startHourRange = endHourRange;
- endHourRange = temp;
- }
-
- var duration = document.getElementById("duration").value;
- if (!duration) {
- alert(BookmarksUtils.getLocaleString("pleaseEnterADuration"));
- return false;
- }
-
- var methods = [];
- if (document.getElementById("bookmarkIcon").checked)
- methods.push("icon");
- if (document.getElementById("playSound").checked)
- methods.push("sound");
- if (document.getElementById("showAlert").checked)
- methods.push("alert");
- if (document.getElementById("openWindow").checked)
- methods.push("open");
-
- if (methods.length == 0) {
- alert(BookmarksUtils.getLocaleString("pleaseSelectANotification"));
- return false;
- }
-
- var method = methods.join(); // join string in array with ","
-
- newvalue = dayRange + "|" + startHourRange + "-" + endHourRange + "|" + duration + "|" + method;
- }
-
- if (newvalue)
- newvalue = RDF.GetLiteral(newvalue);
-
- if (updateAttribute(scheduleRes, oldvalue, newvalue))
- changed = true;
- }
-
- if (changed) {
- var remote = Bookmarks.QueryInterface(Components.interfaces.nsIRDFRemoteDataSource);
- if (remote)
- remote.Flush();
- }
-
- window.close();
- return true;
- }
-
- function updateAttribute(prop, oldvalue, newvalue)
- {
- var changed = false;
-
- if (prop && (oldvalue || newvalue) && oldvalue != newvalue) {
-
- if (oldvalue && !newvalue) {
- Bookmarks.Unassert(RDF.GetResource(gBookmarkURL),
- RDF.GetResource(prop),
- oldvalue);
- }
- else if (!oldvalue && newvalue) {
- Bookmarks.Assert(RDF.GetResource(gBookmarkURL),
- RDF.GetResource(prop),
- newvalue,
- true);
- }
- else /* if (oldvalue && newvalue) */ {
- Bookmarks.Change(RDF.GetResource(gBookmarkURL),
- RDF.GetResource(prop),
- oldvalue,
- newvalue);
- }
-
- changed = true;
- }
-
- return changed;
- }
-
- function setEndHourRange()
- {
- // Get the values of the start-time and end-time as ints
- var startHourRangeNode = document.getElementById("startHourRange");
- var startHourRange = startHourRangeNode.selectedItem.getAttribute("value");
- var startHourRangeInt = parseInt(startHourRange);
-
- var endHourRangeNode = document.getElementById("endHourRange");
- var endHourRange = endHourRangeNode.selectedItem.getAttribute("value");
- var endHourRangeInt = parseInt(endHourRange);
-
- var endHourItemNode = endHourRangeNode.firstChild.firstChild;
-
- var index = 0;
-
- // disable all those end-times before the start-time
- for (; index < startHourRangeInt; ++index) {
- endHourItemNode.setAttribute("disabled", "true");
- endHourItemNode = endHourItemNode.nextSibling;
- }
-
- // update the selected value if it's out of the allowed range
- if (startHourRangeInt >= endHourRangeInt)
- endHourRangeNode.selectedItem = endHourItemNode;
-
- // make sure all the end-times after the start-time are enabled
- for (; index < 24; ++index) {
- endHourItemNode.removeAttribute("disabled");
- endHourItemNode = endHourItemNode.nextSibling;
- }
- }
-
- function dayRangeChange (aMenuList)
- {
- var controls = ["startHourRange", "endHourRange", "duration", "bookmarkIcon",
- "showAlert", "openWindow", "playSound", "durationSubLabel",
- "durationLabel", "startHourRangeLabel", "endHourRangeLabel"];
- for (var i = 0; i < controls.length; ++i)
- document.getElementById(controls[i]).disabled = !aMenuList.value;
- }
-
-
-