Bug #249967 --> Polish the RSS UI. Localize various dialogs. Re-design the subscription UI.

Add a feed properties dialog. If you try to open the subscription UI multiple times, we'll only open
one window now.
This commit is contained in:
scott%scott-macgregor.org 2004-07-06 17:25:12 +00:00
Родитель 62316f5751
Коммит 9865d0f530
12 изменённых файлов: 389 добавлений и 122 удалений

Просмотреть файл

@ -0,0 +1,53 @@
/* -*- Mode: Java; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/* ***** 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 Mozilla Mail Code.
*
* Contributor(s):
* Scott MacGregor <mscott@mozilla.org>
*
* Alternatively, the contents of this file may be used under the terms of
* either of 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 ***** */
function onLoad()
{
if (window.arguments[0].feedName)
document.getElementById('feedName').value = window.arguments[0].feedName;
if (window.arguments[0].feedLocation)
document.getElementById('feedLocation').value = window.arguments[0].feedLocation;
}
function onOk()
{
// eventually, add some validation code to make sure they've entered a location and a name
// before trying to create a feed entry...
window.arguments[0].feedName = document.getElementById('feedName').value;
window.arguments[0].feedLocation = document.getElementById('feedLocation').value
window.arguments[0].result = true;
return true;
}

Просмотреть файл

@ -0,0 +1,77 @@
<?xml version="1.0"?>
<!-- ***** 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 News and Blogs Feed Properties UI.
Contributor(s):
Scott MacGregor <mscott@mozilla.org>
Alternatively, the contents of this file may be used under the terms of
either of 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 ***** -->
<?xml-stylesheet href="chrome://messenger/skin/" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger-newsblog/locale/feed-properties.dtd">
<dialog id="feedPropertyDialog"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="&window.title;"
style="width: 27em;"
buttons="accept,cancel"
onload="onLoad();"
ondialogaccept="return onOk();">
<script type="application/x-javascript" src="feed-properties.js"/>
<grid flex="1">
<columns>
<column/>
<column flex="1"/>
</columns>
<rows>
<row>
<label value="&feedName.label;" accesskey="&feedName.accesskey;" control="feedName"/>
<hbox>
<textbox flex="1" id="feedName"/>
<spacer flex="4"/>
</hbox>
</row>
<row>
<separator class="thin"/>
</row>
<row>
<label value="&feedLocation.label;" accesskey="&feedLocation.accesskey;" control="feedLocation"/>
<textbox id="feedLocation"/>
</row>
<!-- Eventually we'll add a folder picker here to pick the folder associated with the feed -->
</rows>
</grid>
</dialog>

Просмотреть файл

@ -23,41 +23,56 @@ function doLoad() {
tree.builder.rebuild();
}
// opens the feed properties dialog
// optionally, pass in the name and
function openFeedEditor(feedProperties)
{
window.openDialog('feed-properties.xul', 'feedproperties', 'modal,titlebar,chrome,center', feedProperties);
return feedProperties;
}
function doAdd() {
var url = window.prompt("Location:", "");
if (url == null)
var userAddedFeed = false;
var feedProperties = { feedName: "", feedLocation: "", result: userAddedFeed};
feedProperties = openFeedEditor(feedProperties);
// if the user hit cancel, exit without doing anything
if (!feedProperties.result)
return;
if (!feedProperties.feedLocation)
return;
const DEFAULT_FEED_TITLE = "feed title";
const DEFAULT_FEED_URL = "feed location";
feed = new Feed(url || DEFAULT_FEED_URL);
feed = new Feed(feedProperties.feedLocation || DEFAULT_FEED_URL);
feed.download(false, false);
if (!feed.title)
feed.title = DEFAULT_FEED_TITLE;
if (!feedProperties.feedName)
feedProperties.feedName = DEFAULT_FEED_TITLE;
var server = getIncomingServer();
var folder;
try {
//var folder = server.rootMsgFolder.FindSubFolder(feed.name);
folder = server.rootMsgFolder.getChildNamed(feed.name);
folder = server.rootMsgFolder.getChildNamed(feedProperties.feedName);
}
catch(e) {
// If we're here, it's probably because the folder doesn't exist yet,
// so create it.
debug("folder for new feed " + feed.title + " doesn't exist; creating");
debug("creating " + feed.name + "as child of " + server.rootMsgFolder + "\n");
server.rootMsgFolder.createSubfolder(feed.name, getMessageWindow());
folder = server.rootMsgFolder.FindSubFolder(feed.name);
debug("folder for new feed " + feedProperties.feedName + " doesn't exist; creating");
debug("creating " + feedProperties.feedName + "as child of " + server.rootMsgFolder + "\n");
server.rootMsgFolder.createSubfolder(feedProperties.feedName, getMessageWindow());
folder = server.rootMsgFolder.FindSubFolder(feedProperties.feedName);
var msgdb = folder.getMsgDatabase(null);
var folderInfo = msgdb.dBFolderInfo;
folderInfo.setCharPtrProperty("feedUrl", feed.url);
folderInfo.setCharPtrProperty("feedUrl", feedProperties.feedLocation);
}
// XXX This should be something like "subscribe to feed".
dump ("feed name = " + feed.name + "\n");
addFeed(feed.url, feed.title, null, folder);
dump ("feed name = " + feedProperties.feedName + "\n");
addFeed(feedProperties.feedLocation, feedProperties.feedName, null, folder);
// XXX Maybe we can combine this with the earlier download?
feed.download();
}
@ -77,10 +92,14 @@ function doEdit() {
old_url =
old_url ? old_url.QueryInterface(Components.interfaces.nsIRDFLiteral).Value : "";
new_title = window.prompt("Title:", old_title);
if (new_title == null)
var userModifiedFeed = false;
var feedProperties = { feedName: old_title, feedLocation: old_url, result: userModifiedFeed};
feedProperties = openFeedEditor(feedProperties);
if (!feedProperties.result) // did the user cancel?
return;
else if (new_title != old_title) {
if (feedProperties.feedName != old_title) {
var server = getIncomingServer();
var msgWindow = getMessageWindow();
@ -95,7 +114,7 @@ function doEdit() {
} catch(e) {}
var new_folder;
try {
new_folder = server.rootMsgFolder.getChildNamed(new_title);
new_folder = server.rootMsgFolder.getChildNamed(feedProperties.feedName);
new_folder = new_folder.QueryInterface(Components.interfaces.nsIMsgFolder);
} catch(e) {}
@ -132,36 +151,33 @@ function doEdit() {
// whether they are or not (and perhaps even then), better to leave
// the old folder as it is and merely create a new folder.
//old_folder.rename(new_title, msgWindow);
server.rootMsgFolder.createSubfolder(new_title, msgWindow);
server.rootMsgFolder.createSubfolder(feedProperties.feedName, msgWindow);
}
else if (new_folder) {
// Do nothing, as everything is as it should be.
}
else {
// Neither old nor new folders exist, so just create the new one.
server.rootMsgFolder.createSubfolder(new_title, msgWindow);
server.rootMsgFolder.createSubfolder(feedProperties.feedName, msgWindow);
}
updateTitle(item.id, new_title);
updateTitle(item.id, feedProperties.feedName);
}
new_url = window.prompt("Location:", old_url);
if (new_url == null) {
if (!feedProperties.feedLocation) {
// The user cancelled the edit, but not until after potentially changing
// the title, so despite the cancellation we should still redownload
// the feed if the title has changed.
if (new_title != old_title) {
feed = new Feed(old_url, null, new_title);
feed = new Feed(old_url, null, feedProperties.feedName);
feed.download();
}
return;
}
else if (new_url != old_url)
updateURL(item.id, new_url);
else if (feedProperties.feedLocation != old_url)
updateURL(item.id, feedProperties.feedLocation);
feed = new Feed(new_url, null, new_title);
feed = new Feed(feedProperties.feedLocation, null, feedProperties.feedName);
feed.download();
//tree.builder.rebuild();
}
function doRemove() {

Просмотреть файл

@ -1,73 +1,115 @@
<?xml-stylesheet href="edittree.css" type="text/css"?>
<?xml version="1.0"?>
<!-- ***** 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 Thunderbird RSS Integration code.
Contributor(s):
Myk Melez <myk@melez.com>
David Bienvenu <bienvenu@nventure.com>
Scott MacGregor <mscott@mozilla.org>
Alternatively, the contents of this file may be used under the terms of
either of 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 ***** -->
<?xml-stylesheet href="chrome://messenger/skin/" type="text/css"?>
<?xml-stylesheet href="chrome://messenger-newsblog/skin/subscriptions.css" type="text/css"?>
<!DOCTYPE dialog SYSTEM "chrome://messenger-newsblog/locale/newsblog.dtd">
<window id="subscriptionsDialog"
title="newsBlogSubscriptions.label"
<dialog id="subscriptionsDialog"
title="&newsBlogSubscriptions.label;"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
width="400"
height="400"
style="width: 44em; height: 20em;"
persist="width height"
buttons="accept"
onload="doLoad();"
flex="1"
windowtype="mail:3pane">
windowtype="Mail:News-BlogSubscriptions"
flex="1">
<script type="application/x-javascript" src="utils.js" />
<script type="application/x-javascript" src="file-utils.js" />
<script type="application/x-javascript" src="debug-utils.js" />
<script type="application/x-javascript" src="subscriptions.js" />
<script type="application/x-javascript" src="Feed.js" />
<script type="application/x-javascript" src="FeedItem.js" />
<script type="application/x-javascript" src="utils.js" />
<script type="application/x-javascript" src="file-utils.js" />
<script type="application/x-javascript" src="debug-utils.js" />
<script type="application/x-javascript" src="subscriptions.js" />
<script type="application/x-javascript" src="Feed.js" />
<script type="application/x-javascript" src="FeedItem.js" />
<!-- The global Mozilla scripts that implement drag-and-drop support -->
<!--
<script src="chrome://global/content/nsDragAndDrop.js"/>
<script src="chrome://global/content/nsTransferable.js"/>
-->
<!-- The global Mozilla scripts that implement drag-and-drop support -->
<!--
<script src="chrome://global/content/nsDragAndDrop.js"/>
<script src="chrome://global/content/nsTransferable.js"/>
-->
<hbox flex="1">
<tree id="subscriptions" flex="1" seltype="single"
datasources="rdf:null"
style="width: 100%"
ref="urn:forumzilla:root"
onselect="this.treeBoxObject.view.selectionChanged();"
ondraggesture="//nsDragAndDrop.startDrag(event, subscriptionsDragDropObserver);"
ondragover="//nsDragAndDrop.dragOver(event, subscriptionsDragDropObserver);"
ondragdrop="//nsDragAndDrop.drop(event, subscriptionsDragDropObserver);">
<template>
<rule>
<conditions>
<content uri="?root" />
<triple subject="?root" predicate="urn:forumzilla:feeds" object="?feeds" />
<member container="?feeds" child="?feed" />
</conditions>
<bindings>
<binding subject="?feed" predicate="http://purl.org/dc/elements/1.1/title" object="?title" />
<binding subject="?feed" predicate="http://purl.org/dc/elements/1.1/identifier" object="?url" />
</bindings>
<action>
<treechildren flex="1">
<treeitem uri="?feed">
<treerow>
<treecell src="" label="?title"/>
<treecell src="" label="?url"/>
</treerow>
</treeitem>
</treechildren>
</action>
</rule>
</template>
<treecols>
<treecol id="subs-name-column" flex="1" label="Name" primary="true" />
<treecol id="subs-url-column" flex="1" label="Location" hidden="false" />
</treecols>
</tree>
<vbox>
<button label="Add" oncommand="doAdd();" />
<button label="Edit" oncommand="doEdit();" />
<button label="Remove" oncommand="doRemove();" />
<spring flex="1"/>
<button label="Done" oncommand="window.close();" />
</vbox>
</hbox>
<description>&subscriptionDesc.label;</description>
</window>
<separator class="thin"/>
<hbox flex="1">
<tree id="subscriptions" flex="1" seltype="single" hidecolumnpicker="true"
datasources="rdf:null"
style="width: 100%"
ref="urn:forumzilla:root"
onselect="this.treeBoxObject.view.selectionChanged();"
ondraggesture="//nsDragAndDrop.startDrag(event, subscriptionsDragDropObserver);"
ondragover="//nsDragAndDrop.dragOver(event, subscriptionsDragDropObserver);"
ondragdrop="//nsDragAndDrop.drop(event, subscriptionsDragDropObserver);">
<template>
<rule>
<conditions>
<content uri="?root"/>
<triple subject="?root" predicate="urn:forumzilla:feeds" object="?feeds"/>
<member container="?feeds" child="?feed"/>
</conditions>
<bindings>
<binding subject="?feed" predicate="http://purl.org/dc/elements/1.1/title" object="?title"/>
<binding subject="?feed" predicate="http://purl.org/dc/elements/1.1/identifier" object="?url"/>
</bindings>
<action>
<treechildren flex="1">
<treeitem uri="?feed">
<treerow>
<treecell src="" label="?title"/>
<treecell src="" label="?url"/>
</treerow>
</treeitem>
</treechildren>
</action>
</rule>
</template>
<treecols>
<treecol id="subs-name-column" flex="1" label="&feedNameTreeCol.label;" primary="true"/>
<splitter class="tree-splitter"/>
<treecol id="subs-url-column" flex="3" label="&locationTreeCol.label;" hidden="false"/>
</treecols>
</tree>
<vbox>
<button label="&addButton.label;" accesskey="&addButton.accesskey;" oncommand="doAdd();"/>
<button label="&editButton.label;" accesskey="&editButton.accesskey;" oncommand="doEdit();"/>
<button label="&deleteButton.label;" accesskey="&deleteButton.accesskey;" oncommand="doRemove();"/>
</vbox>
</hbox>
</dialog>

Просмотреть файл

@ -1,29 +1,38 @@
<?xml version="1.0"?>
<!DOCTYPE overlay SYSTEM "chrome://messenger-newsblog/locale/newsblog.dtd">
<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript">
function openSubscriptionsDialog() {
window.openDialog("chrome://messenger-newsblog/content/subscriptions.xul",
"",
"centerscreen,resizable=yes");
//check for an existing subscriptions window and focus it.
const kWindowMediatorContractID = "@mozilla.org/appshell/window-mediator;1";
const kWindowMediatorIID = Components.interfaces.nsIWindowMediator;
const kWindowMediator = Components.classes[kWindowMediatorContractID].getService(kWindowMediatorIID);
var lastSubscriptionWindow = kWindowMediator.getMostRecentWindow("Mail:News-BlogSubscriptions");
if (lastSubscriptionWindow)
lastSubscriptionWindow.focus();
else
window.openDialog("chrome://messenger-newsblog/content/subscriptions.xul", "",
"centerscreen,resizable=yes");
}
</script>
<menupopup id="taskPopup">
<menuitem id="newsAndBlogsCmd"
label="&newsBlogMenu.label;"
insertbefore="menu_preferences"
accesskey="e"
accesskey="&newsBlogMenu.accesskey;"
oncommand="openSubscriptionsDialog();"/>
</menupopup>
<toolbarpalette id="MailToolbarPalette">
<toolbarbutton id="button-newsandblogs"
label="News &amp; Blogs"
tooltiptext="manage news and blog feeds"
label="&newsBlogMenu.label;"
tooltiptext="&newsBlogMenu.tooltip;"
oncommand="openSubscriptionsDialog();"/>
</toolbarpalette>

Просмотреть файл

@ -1,17 +1,20 @@
newsblog.jar:
* content/messenger-newsblog/toolbar-icon.xul (content/toolbar-icon.xul)
* content/messenger-newsblog/forumzilla.xul (content/forumzilla.xul)
* content/messenger-newsblog/forumzilla.js (content/forumzilla.js)
* content/messenger-newsblog/subscriptions.xul (content/subscriptions.xul)
* content/messenger-newsblog/edittree.xml (content/edittree.xml)
* content/messenger-newsblog/debug-utils.js (content/debug-utils.js)
* content/messenger-newsblog/Feed.js (content/Feed.js)
* content/messenger-newsblog/FeedItem.js (content/FeedItem.js)
* content/messenger-newsblog/file-utils.js (content/file-utils.js)
* content/messenger-newsblog/subscriptions.js (content/subscriptions.js)
* content/messenger-newsblog/utils.js (content/utils.js)
* content/messenger-newsblog/contents.rdf (content/contents.rdf)
* content/messenger-newsblog/forumzilla.xul (content/forumzilla.xul)
* content/messenger-newsblog/forumzilla.js (content/forumzilla.js)
* content/messenger-newsblog/subscriptions.xul (content/subscriptions.xul)
* content/messenger-newsblog/edittree.xml (content/edittree.xml)
* content/messenger-newsblog/debug-utils.js (content/debug-utils.js)
* content/messenger-newsblog/Feed.js (content/Feed.js)
* content/messenger-newsblog/FeedItem.js (content/FeedItem.js)
* content/messenger-newsblog/file-utils.js (content/file-utils.js)
* content/messenger-newsblog/subscriptions.js (content/subscriptions.js)
* content/messenger-newsblog/utils.js (content/utils.js)
* content/messenger-newsblog/feed-properties.xul (content/feed-properties.xul)
* content/messenger-newsblog/feed-properties.js (content/feed-properties.js)
* content/messenger-newsblog/contents.rdf (content/contents.rdf)
newsblog.jar:
locale/en-US/messenger-newsblog/newsblog.dtd (locale/newsblog.dtd)
* locale/en-US/messenger-newsblog/contents.rdf (locale/contents.rdf)
locale/en-US/messenger-newsblog/newsblog.dtd (locale/newsblog.dtd)
locale/en-US/messenger-newsblog/feed-properties.dtd (locale/feed-properties.dtd)
* locale/en-US/messenger-newsblog/contents.rdf (locale/contents.rdf)

Просмотреть файл

@ -0,0 +1,10 @@
<!-- Feed Properties Dialog -->
<!ENTITY window.title "News Feed Properties">
<!ENTITY feedName.label "Name: ">
<!ENTITY feedName.accesskey "N">
<!ENTITY feedLocation.label "Location URL: ">
<!ENTITY feedLocation.accesskey "L">

Просмотреть файл

@ -1,2 +1,22 @@
<!ENTITY newsBlogMenu.label "Feeds...">
<!ENTITY newsBlogSubscriptions.label "Feeds">
<!-- Tools Window Overlay -->
<!ENTITY newsBlogMenu.label "News Feed Subscriptions...">
<!ENTITY newsBlogMenu.accesskey "b">
<!-- customizeable toolbar button -->
<!ENTITY newsBlogMenu.label "News &amp; Blogs">
<!ENTITY newsBlogMenu.tooltip "Manage news and blog feeds">
<!-- Subscription Dialog -->
<!ENTITY newsBlogSubscriptions.label "News Feed Subscriptions">
<!ENTITY subscriptionDesc.label "Manage your News &amp; Blogs feeds.">
<!ENTITY feedNameTreeCol.label "Name">
<!ENTITY locationTreeCol.label "Location">
<!ENTITY addButton.label "Add">
<!ENTITY addButton.accesskey "A">
<!ENTITY editButton.label "Edit">
<!ENTITY editButton.accesskey "E">
<!ENTITY deleteButton.label "Delete">
<!ENTITY deleteButton.accesskey "D">
<!ENTITY feedNameTreeCol.label "Name">

Просмотреть файл

Просмотреть файл

@ -1,6 +0,0 @@
#button-newsandblogs {
-moz-box-orient:vertical;
/* from http://www.aaa-clipart.com/data/icons/mail/mail1.gif */
list-style-image: url("chrome://messenger-newsblog/content/icon.gif");
}

Просмотреть файл

@ -0,0 +1,4 @@
classic.jar:
skin/classic/messenger-newsblog/forumzilla.css (forumzilla.css)
skin/classic/messenger-newsblog/subscriptions.css (subscriptions.css)
skin/classic/messenger-newsblog/contents.rdf

Просмотреть файл

@ -0,0 +1,39 @@
/* ***** 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 RSS News & Blogs subscription style rules.
*
* Contributor(s):
* Myk Melez <myk@melez.com>
* Scott MacGregor <mscott@mozilla.org>
*
* Alternatively, the contents of this file may be used under the terms of
* either of 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 ***** */
/* ::::: Subscription UI icons :::::: */
treechildren::-moz-tree-image(subs-name-column) {
margin-right: 2px;
list-style-image: url("chrome://messenger/skin/icons/folder-closed.png");
}