Initial commit
authorDaniel Bainton <daniel.bainton@movial.com>
Wed, 18 Mar 2009 12:12:10 +0000 (14:12 +0200)
committerDaniel Bainton <daniel.bainton@movial.com>
Wed, 18 Mar 2009 12:12:10 +0000 (14:12 +0200)
47 files changed:
.gitignore [new file with mode: 0644]
LICENSE [new file with mode: 0644]
README [new file with mode: 0644]
application.ini [new file with mode: 0644]
chrome/branding/about.png [new file with mode: 0644]
chrome/branding/brand.dtd [new file with mode: 0644]
chrome/branding/brand.properties [new file with mode: 0644]
chrome/branding/callithrix.ico [new file with mode: 0644]
chrome/branding/icon16.png [new file with mode: 0644]
chrome/branding/icon48.png [new file with mode: 0644]
chrome/branding/icon64.png [new file with mode: 0644]
chrome/chrome.manifest [new file with mode: 0644]
chrome/content/about.xhtml [new file with mode: 0644]
chrome/content/bookmarkProperties.js [new file with mode: 0644]
chrome/content/bookmarkProperties.xul [new file with mode: 0644]
chrome/content/bookmarks.js [new file with mode: 0644]
chrome/content/bookmarks.xul [new file with mode: 0644]
chrome/content/callithrix.js [new file with mode: 0644]
chrome/content/callithrix.xul [new file with mode: 0644]
chrome/content/downloadsOverlay.xml [new file with mode: 0644]
chrome/content/downloadsOverlay.xul [new file with mode: 0644]
chrome/content/settings.js [new file with mode: 0644]
chrome/content/settings.xul [new file with mode: 0644]
chrome/locale/en-US/bookmarks.dtd [new file with mode: 0644]
chrome/locale/en-US/bookmarks.properties [new file with mode: 0644]
chrome/locale/en-US/callithrix.dtd [new file with mode: 0644]
chrome/locale/en-US/callithrix.properties [new file with mode: 0644]
chrome/locale/en-US/preferences.properties [new file with mode: 0644]
chrome/locale/en-US/settings.dtd [new file with mode: 0644]
chrome/locale/en-US/settings.properties [new file with mode: 0644]
chrome/skin/bookmarks.css [new file with mode: 0644]
chrome/skin/callithrix.css [new file with mode: 0644]
chrome/skin/downloadsOverlay.css [new file with mode: 0644]
chrome/skin/icons/icon_add_favorite_30x30.png [new file with mode: 0644]
chrome/skin/icons/icon_back_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_back_disabled_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_bookmarks_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_favorite_added_30x30.png [new file with mode: 0644]
chrome/skin/icons/icon_forward_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_forward_disabled_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_go_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_home_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_refresh_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_settings_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_stop_36x36.png [new file with mode: 0644]
chrome/skin/icons/icon_test_36x36_alpha_blended.png [new file with mode: 0644]
defaults/preferences/prefs.js [new file with mode: 0644]

diff --git a/.gitignore b/.gitignore
new file mode 100644 (file)
index 0000000..b25c15b
--- /dev/null
@@ -0,0 +1 @@
+*~
diff --git a/LICENSE b/LICENSE
new file mode 100644 (file)
index 0000000..bc8f037
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,567 @@
+                          MOZILLA PUBLIC LICENSE
+                                Version 1.1
+
+                              ---------------
+
+1. Definitions.
+
+     1.0.1. "Commercial Use" means distribution or otherwise making the
+     Covered Code available to a third party.
+
+     1.1. "Contributor" means each entity that creates or contributes to
+     the creation of Modifications.
+
+     1.2. "Contributor Version" means the combination of the Original
+     Code, prior Modifications used by a Contributor, and the Modifications
+     made by that particular Contributor.
+
+     1.3. "Covered Code" means the Original Code or Modifications or the
+     combination of the Original Code and Modifications, in each case
+     including portions thereof.
+
+     1.4. "Electronic Distribution Mechanism" means a mechanism generally
+     accepted in the software development community for the electronic
+     transfer of data.
+
+     1.5. "Executable" means Covered Code in any form other than Source
+     Code.
+
+     1.6. "Initial Developer" means the individual or entity identified
+     as the Initial Developer in the Source Code notice required by Exhibit
+     A.
+
+     1.7. "Larger Work" means a work which combines Covered Code or
+     portions thereof with code not governed by the terms of this License.
+
+     1.8. "License" means this document.
+
+     1.8.1. "Licensable" means having the right to grant, to the maximum
+     extent possible, whether at the time of the initial grant or
+     subsequently acquired, any and all of the rights conveyed herein.
+
+     1.9. "Modifications" means any addition to or deletion from the
+     substance or structure of either the Original Code or any previous
+     Modifications. When Covered Code is released as a series of files, a
+     Modification is:
+          A. Any addition to or deletion from the contents of a file
+          containing Original Code or previous Modifications.
+
+          B. Any new file that contains any part of the Original Code or
+          previous Modifications.
+
+     1.10. "Original Code" means Source Code of computer software code
+     which is described in the Source Code notice required by Exhibit A as
+     Original Code, and which, at the time of its release under this
+     License is not already Covered Code governed by this License.
+
+     1.10.1. "Patent Claims" means any patent claim(s), now owned or
+     hereafter acquired, including without limitation, method, process,
+     and apparatus claims, in any patent Licensable by grantor.
+
+     1.11. "Source Code" means the preferred form of the Covered Code for
+     making modifications to it, including all modules it contains, plus
+     any associated interface definition files, scripts used to control
+     compilation and installation of an Executable, or source code
+     differential comparisons against either the Original Code or another
+     well known, available Covered Code of the Contributor's choice. The
+     Source Code can be in a compressed or archival form, provided the
+     appropriate decompression or de-archiving software is widely available
+     for no charge.
+
+     1.12. "You" (or "Your") means an individual or a legal entity
+     exercising rights under, and complying with all of the terms of, this
+     License or a future version of this License issued under Section 6.1.
+     For legal entities, "You" includes any entity which controls, is
+     controlled by, or is under common control with You. For purposes of
+     this definition, "control" means (a) the power, direct or indirect,
+     to cause the direction or management of such entity, whether by
+     contract or otherwise, or (b) ownership of more than fifty percent
+     (50%) of the outstanding shares or beneficial ownership of such
+     entity.
+
+2. Source Code License.
+
+     2.1. The Initial Developer Grant.
+     The Initial Developer hereby grants You a world-wide, royalty-free,
+     non-exclusive license, subject to third party intellectual property
+     claims:
+          (a) under intellectual property rights (other than patent or
+          trademark) Licensable by Initial Developer to use, reproduce,
+          modify, display, perform, sublicense and distribute the Original
+          Code (or portions thereof) with or without Modifications, and/or
+          as part of a Larger Work; and
+
+          (b) under Patents Claims infringed by the making, using or
+          selling of Original Code, to make, have made, use, practice,
+          sell, and offer for sale, and/or otherwise dispose of the
+          Original Code (or portions thereof).
+
+          (c) the licenses granted in this Section 2.1(a) and (b) are
+          effective on the date Initial Developer first distributes
+          Original Code under the terms of this License.
+
+          (d) Notwithstanding Section 2.1(b) above, no patent license is
+          granted: 1) for code that You delete from the Original Code; 2)
+          separate from the Original Code; or 3) for infringements caused
+          by: i) the modification of the Original Code or ii) the
+          combination of the Original Code with other software or devices.
+
+     2.2. Contributor Grant.
+     Subject to third party intellectual property claims, each Contributor
+     hereby grants You a world-wide, royalty-free, non-exclusive license
+
+          (a) under intellectual property rights (other than patent or
+          trademark) Licensable by Contributor, to use, reproduce, modify,
+          display, perform, sublicense and distribute the Modifications
+          created by such Contributor (or portions thereof) either on an
+          unmodified basis, with other Modifications, as Covered Code
+          and/or as part of a Larger Work; and
+
+          (b) under Patent Claims infringed by the making, using, or
+          selling of Modifications made by that Contributor either alone
+          and/or in combination with its Contributor Version (or portions
+          of such combination), to make, use, sell, offer for sale, have
+          made, and/or otherwise dispose of: 1) Modifications made by that
+          Contributor (or portions thereof); and 2) the combination of
+          Modifications made by that Contributor with its Contributor
+          Version (or portions of such combination).
+
+          (c) the licenses granted in Sections 2.2(a) and 2.2(b) are
+          effective on the date Contributor first makes Commercial Use of
+          the Covered Code.
+
+          (d) Notwithstanding Section 2.2(b) above, no patent license is
+          granted: 1) for any code that Contributor has deleted from the
+          Contributor Version; 2) separate from the Contributor Version;
+          3) for infringements caused by: i) third party modifications of
+          Contributor Version or ii) the combination of Modifications made
+          by that Contributor with other software (except as part of the
+          Contributor Version) or other devices; or 4) under Patent Claims
+          infringed by Covered Code in the absence of Modifications made by
+          that Contributor.
+
+3. Distribution Obligations.
+
+     3.1. Application of License.
+     The Modifications which You create or to which You contribute are
+     governed by the terms of this License, including without limitation
+     Section 2.2. The Source Code version of Covered Code may be
+     distributed only under the terms of this License or a future version
+     of this License released under Section 6.1, and You must include a
+     copy of this License with every copy of the Source Code You
+     distribute. You may not offer or impose any terms on any Source Code
+     version that alters or restricts the applicable version of this
+     License or the recipients' rights hereunder. However, You may include
+     an additional document offering the additional rights described in
+     Section 3.5.
+
+     3.2. Availability of Source Code.
+     Any Modification which You create or to which You contribute must be
+     made available in Source Code form under the terms of this License
+     either on the same media as an Executable version or via an accepted
+     Electronic Distribution Mechanism to anyone to whom you made an
+     Executable version available; and if made available via Electronic
+     Distribution Mechanism, must remain available for at least twelve (12)
+     months after the date it initially became available, or at least six
+     (6) months after a subsequent version of that particular Modification
+     has been made available to such recipients. You are responsible for
+     ensuring that the Source Code version remains available even if the
+     Electronic Distribution Mechanism is maintained by a third party.
+
+     3.3. Description of Modifications.
+     You must cause all Covered Code to which You contribute to contain a
+     file documenting the changes You made to create that Covered Code and
+     the date of any change. You must include a prominent statement that
+     the Modification is derived, directly or indirectly, from Original
+     Code provided by the Initial Developer and including the name of the
+     Initial Developer in (a) the Source Code, and (b) in any notice in an
+     Executable version or related documentation in which You describe the
+     origin or ownership of the Covered Code.
+
+     3.4. Intellectual Property Matters
+          (a) Third Party Claims.
+          If Contributor has knowledge that a license under a third party's
+          intellectual property rights is required to exercise the rights
+          granted by such Contributor under Sections 2.1 or 2.2,
+          Contributor must include a text file with the Source Code
+          distribution titled "LEGAL" which describes the claim and the
+          party making the claim in sufficient detail that a recipient will
+          know whom to contact. If Contributor obtains such knowledge after
+          the Modification is made available as described in Section 3.2,
+          Contributor shall promptly modify the LEGAL file in all copies
+          Contributor makes available thereafter and shall take other steps
+          (such as notifying appropriate mailing lists or newsgroups)
+          reasonably calculated to inform those who received the Covered
+          Code that new knowledge has been obtained.
+
+          (b) Contributor APIs.
+          If Contributor's Modifications include an application programming
+          interface and Contributor has knowledge of patent licenses which
+          are reasonably necessary to implement that API, Contributor must
+          also include this information in the LEGAL file.
+
+          (c) Representations.
+          Contributor represents that, except as disclosed pursuant to
+          Section 3.4(a) above, Contributor believes that Contributor's
+          Modifications are Contributor's original creation(s) and/or
+          Contributor has sufficient rights to grant the rights conveyed by
+          this License.
+
+     3.5. Required Notices.
+     You must duplicate the notice in Exhibit A in each file of the Source
+     Code. If it is not possible to put such notice in a particular Source
+     Code file due to its structure, then You must include such notice in a
+     location (such as a relevant directory) where a user would be likely
+     to look for such a notice. If You created one or more Modification(s)
+     You may add your name as a Contributor to the notice described in
+     Exhibit A. You must also duplicate this License in any documentation
+     for the Source Code where You describe recipients' rights or ownership
+     rights relating to Covered Code. You may choose to offer, and to
+     charge a fee for, warranty, support, indemnity or liability
+     obligations to one or more recipients of Covered Code. However, You
+     may do so only on Your own behalf, and not on behalf of the Initial
+     Developer or any Contributor. You must make it absolutely clear than
+     any such warranty, support, indemnity or liability obligation is
+     offered by You alone, and You hereby agree to indemnify the Initial
+     Developer and every Contributor for any liability incurred by the
+     Initial Developer or such Contributor as a result of warranty,
+     support, indemnity or liability terms You offer.
+
+     3.6. Distribution of Executable Versions.
+     You may distribute Covered Code in Executable form only if the
+     requirements of Section 3.1-3.5 have been met for that Covered Code,
+     and if You include a notice stating that the Source Code version of
+     the Covered Code is available under the terms of this License,
+     including a description of how and where You have fulfilled the
+     obligations of Section 3.2. The notice must be conspicuously included
+     in any notice in an Executable version, related documentation or
+     collateral in which You describe recipients' rights relating to the
+     Covered Code. You may distribute the Executable version of Covered
+     Code or ownership rights under a license of Your choice, which may
+     contain terms different from this License, provided that You are in
+     compliance with the terms of this License and that the license for the
+     Executable version does not attempt to limit or alter the recipient's
+     rights in the Source Code version from the rights set forth in this
+     License. If You distribute the Executable version under a different
+     license You must make it absolutely clear that any terms which differ
+     from this License are offered by You alone, not by the Initial
+     Developer or any Contributor. You hereby agree to indemnify the
+     Initial Developer and every Contributor for any liability incurred by
+     the Initial Developer or such Contributor as a result of any such
+     terms You offer.
+
+     3.7. Larger Works.
+     You may create a Larger Work by combining Covered Code with other code
+     not governed by the terms of this License and distribute the Larger
+     Work as a single product. In such a case, You must make sure the
+     requirements of this License are fulfilled for the Covered Code.
+
+4. Inability to Comply Due to Statute or Regulation.
+
+     If it is impossible for You to comply with any of the terms of this
+     License with respect to some or all of the Covered Code due to
+     statute, judicial order, or regulation then You must: (a) comply with
+     the terms of this License to the maximum extent possible; and (b)
+     describe the limitations and the code they affect. Such description
+     must be included in the LEGAL file described in Section 3.4 and must
+     be included with all distributions of the Source Code. Except to the
+     extent prohibited by statute or regulation, such description must be
+     sufficiently detailed for a recipient of ordinary skill to be able to
+     understand it.
+
+5. Application of this License.
+
+     This License applies to code to which the Initial Developer has
+     attached the notice in Exhibit A and to related Covered Code.
+
+6. Versions of the License.
+
+     6.1. New Versions.
+     Netscape Communications Corporation ("Netscape") may publish revised
+     and/or new versions of the License from time to time. Each version
+     will be given a distinguishing version number.
+
+     6.2. Effect of New Versions.
+     Once Covered Code has been published under a particular version of the
+     License, You may always continue to use it under the terms of that
+     version. You may also choose to use such Covered Code under the terms
+     of any subsequent version of the License published by Netscape. No one
+     other than Netscape has the right to modify the terms applicable to
+     Covered Code created under this License.
+
+     6.3. Derivative Works.
+     If You create or use a modified version of this License (which you may
+     only do in order to apply it to code which is not already Covered Code
+     governed by this License), You must (a) rename Your license so that
+     the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape",
+     "MPL", "NPL" or any confusingly similar phrase do not appear in your
+     license (except to note that your license differs from this License)
+     and (b) otherwise make it clear that Your version of the license
+     contains terms which differ from the Mozilla Public License and
+     Netscape Public License. (Filling in the name of the Initial
+     Developer, Original Code or Contributor in the notice described in
+     Exhibit A shall not of themselves be deemed to be modifications of
+     this License.)
+
+7. DISCLAIMER OF WARRANTY.
+
+     COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS,
+     WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
+     WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF
+     DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING.
+     THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE
+     IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT,
+     YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE
+     COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
+     OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF
+     ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER.
+
+8. TERMINATION.
+
+     8.1. This License and the rights granted hereunder will terminate
+     automatically if You fail to comply with terms herein and fail to cure
+     such breach within 30 days of becoming aware of the breach. All
+     sublicenses to the Covered Code which are properly granted shall
+     survive any termination of this License. Provisions which, by their
+     nature, must remain in effect beyond the termination of this License
+     shall survive.
+
+     8.2. If You initiate litigation by asserting a patent infringement
+     claim (excluding declatory judgment actions) against Initial Developer
+     or a Contributor (the Initial Developer or Contributor against whom
+     You file such action is referred to as "Participant") alleging that:
+
+     (a) such Participant's Contributor Version directly or indirectly
+     infringes any patent, then any and all rights granted by such
+     Participant to You under Sections 2.1 and/or 2.2 of this License
+     shall, upon 60 days notice from Participant terminate prospectively,
+     unless if within 60 days after receipt of notice You either: (i)
+     agree in writing to pay Participant a mutually agreeable reasonable
+     royalty for Your past and future use of Modifications made by such
+     Participant, or (ii) withdraw Your litigation claim with respect to
+     the Contributor Version against such Participant. If within 60 days
+     of notice, a reasonable royalty and payment arrangement are not
+     mutually agreed upon in writing by the parties or the litigation claim
+     is not withdrawn, the rights granted by Participant to You under
+     Sections 2.1 and/or 2.2 automatically terminate at the expiration of
+     the 60 day notice period specified above.
+
+     (b) any software, hardware, or device, other than such Participant's
+     Contributor Version, directly or indirectly infringes any patent, then
+     any rights granted to You by such Participant under Sections 2.1(b)
+     and 2.2(b) are revoked effective as of the date You first made, used,
+     sold, distributed, or had made, Modifications made by that
+     Participant.
+
+     8.3. If You assert a patent infringement claim against Participant
+     alleging that such Participant's Contributor Version directly or
+     indirectly infringes any patent where such claim is resolved (such as
+     by license or settlement) prior to the initiation of patent
+     infringement litigation, then the reasonable value of the licenses
+     granted by such Participant under Sections 2.1 or 2.2 shall be taken
+     into account in determining the amount or value of any payment or
+     license.
+
+     8.4. In the event of termination under Sections 8.1 or 8.2 above,
+     all end user license agreements (excluding distributors and resellers)
+     which have been validly granted by You or any distributor hereunder
+     prior to termination shall survive termination.
+
+9. LIMITATION OF LIABILITY.
+
+     UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT
+     (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL
+     DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE,
+     OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR
+     ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY
+     CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL,
+     WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER
+     COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN
+     INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF
+     LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY
+     RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW
+     PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE
+     EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO
+     THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU.
+
+10. U.S. GOVERNMENT END USERS.
+
+     The Covered Code is a "commercial item," as that term is defined in
+     48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer
+     software" and "commercial computer software documentation," as such
+     terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48
+     C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995),
+     all U.S. Government End Users acquire Covered Code with only those
+     rights set forth herein.
+
+11. MISCELLANEOUS.
+
+     This License represents the complete agreement concerning subject
+     matter hereof. If any provision of this License is held to be
+     unenforceable, such provision shall be reformed only to the extent
+     necessary to make it enforceable. This License shall be governed by
+     California law provisions (except to the extent applicable law, if
+     any, provides otherwise), excluding its conflict-of-law provisions.
+     With respect to disputes in which at least one party is a citizen of,
+     or an entity chartered or registered to do business in the United
+     States of America, any litigation relating to this License shall be
+     subject to the jurisdiction of the Federal Courts of the Northern
+     District of California, with venue lying in Santa Clara County,
+     California, with the losing party responsible for costs, including
+     without limitation, court costs and reasonable attorneys' fees and
+     expenses. The application of the United Nations Convention on
+     Contracts for the International Sale of Goods is expressly excluded.
+     Any law or regulation which provides that the language of a contract
+     shall be construed against the drafter shall not apply to this
+     License.
+
+12. RESPONSIBILITY FOR CLAIMS.
+
+     As between Initial Developer and the Contributors, each party is
+     responsible for claims and damages arising, directly or indirectly,
+     out of its utilization of rights under this License and You agree to
+     work with Initial Developer and Contributors to distribute such
+     responsibility on an equitable basis. Nothing herein is intended or
+     shall be deemed to constitute any admission of liability.
+
+13. MULTIPLE-LICENSED CODE.
+
+     Initial Developer may designate portions of the Covered Code as
+     "Multiple-Licensed". "Multiple-Licensed" means that the Initial
+     Developer permits you to utilize portions of the Covered Code under
+     Your choice of the NPL or the alternative licenses, if any, specified
+     by the Initial Developer in the file described in Exhibit A.
+
+EXHIBIT A -Mozilla Public License.
+
+     ``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 Initial Developer of the Original Code is ________________________.
+     Portions created by ______________________ are Copyright (C) ______
+     _______________________. All Rights Reserved.
+
+     Contributor(s): ______________________________________.
+
+     Alternatively, the contents of this file may be used under the terms
+     of the _____ license (the "[___] License"), in which case the
+     provisions of [______] License are applicable instead of those
+     above. If you wish to allow use of your version of this file only
+     under the terms of the [____] License and not to allow others to use
+     your version of this file under the MPL, indicate your decision by
+     deleting the provisions above and replace them with the notice and
+     other provisions required by the [___] License. If you do not delete
+     the provisions above, a recipient may use your version of this file
+     under either the MPL or the [___] License."
+
+     [NOTE: The text of this Exhibit A may differ slightly from the text of
+     the notices in the Source Code files of the Original Code. You should
+     use the text of this Exhibit A rather than the text found in the
+     Original Code Source Code for Your Modifications.]
+
+     ----------------------------------------------------------------------
+
+     AMENDMENTS
+
+     The Netscape Public License Version 1.1 ("NPL") consists of the
+     Mozilla Public License Version 1.1 with the following Amendments,
+     including Exhibit A-Netscape Public License. Files identified with
+     "Exhibit A-Netscape Public License" are governed by the Netscape
+     Public License Version 1.1.
+
+     Additional Terms applicable to the Netscape Public License.
+          I. Effect.
+          These additional terms described in this Netscape Public
+          License -- Amendments shall apply to the Mozilla Communicator
+          client code and to all Covered Code under this License.
+
+          II. "Netscape's Branded Code" means Covered Code that Netscape
+          distributes and/or permits others to distribute under one or more
+          trademark(s) which are controlled by Netscape but which are not
+          licensed for use under this License.
+
+          III. Netscape and logo.
+          This License does not grant any rights to use the trademarks
+          "Netscape", the "Netscape N and horizon" logo or the "Netscape
+          lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript",
+          "Smart Browsing" even if such marks are included in the Original
+          Code or Modifications.
+
+          IV. Inability to Comply Due to Contractual Obligation.
+          Prior to licensing the Original Code under this License, Netscape
+          has licensed third party code for use in Netscape's Branded Code.
+          To the extent that Netscape is limited contractually from making
+          such third party code available under this License, Netscape may
+          choose to reintegrate such code into Covered Code without being
+          required to distribute such code in Source Code form, even if
+          such code would otherwise be considered "Modifications" under
+          this License.
+
+          V. Use of Modifications and Covered Code by Initial Developer.
+               V.1. In General.
+               The obligations of Section 3 apply to Netscape, except to
+               the extent specified in this Amendment, Section V.2 and V.3.
+
+               V.2. Other Products.
+               Netscape may include Covered Code in products other than the
+               Netscape's Branded Code which are released by Netscape
+               during the two (2) years following the release date of the
+               Original Code, without such additional products becoming
+               subject to the terms of this License, and may license such
+               additional products on different terms from those contained
+               in this License.
+
+               V.3. Alternative Licensing.
+               Netscape may license the Source Code of Netscape's Branded
+               Code, including Modifications incorporated therein, without
+               such Netscape Branded Code becoming subject to the terms of
+               this License, and may license such Netscape Branded Code on
+               different terms from those contained in this License.
+
+          VI. Litigation.
+          Notwithstanding the limitations of Section 11 above, the
+          provisions regarding litigation in Section 11(a), (b) and (c) of
+          the License shall apply to all disputes relating to this License.
+
+     EXHIBIT A-Netscape Public License.
+
+          "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): ______________________________________.
+
+          Alternatively, the contents of this file may be used under the
+          terms of the _____ license (the "[___] License"), in which case
+          the provisions of [______] License are applicable  instead of
+          those above. If you wish to allow use of your version of this
+          file only under the terms of the [____] License and not to allow
+          others to use your version of this file under the NPL, indicate
+          your decision by deleting the provisions above and replace  them
+          with the notice and other provisions required by the [___]
+          License. If you do not delete the provisions above, a recipient
+          may use your version of this file under either the NPL or the
+          [___] License."
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..6a719c7
--- /dev/null
+++ b/README
@@ -0,0 +1,22 @@
+About
+=====
+
+Callithrix is a simple, slimline browser user interface designed for Linux based Mobile Internet Devices (MID). It is designed for small screens: it has only few buttons, large enough for the user to touch with his finger and the functionalities are stripped down to the minimum set necessary for basic browsing experience.
+
+The name Callithrix is a latin word meaning the genus of Marmosets, new world monkeys which are small, lightweight and appealing, all characteristics this browser aims to have.
+
+The browser uses the XULRunner runtime environment with the Gecko layout engine.
+
+
+Callithrix was developed by Movial Creative Technologies Inc. <http://www.movial.com/> and is released under the Mozilla Public License which is included in the LICENSE file.
+
+Developers:
+- Paula Hellemaa <paula.hellemaa@movial.com>
+- Daniel Bainton <daniel.bainton@movial.com>
+
+UI design:
+- Kalle Karinen <kalle.karinen@movial.com>
+
+Logo:
+- Antti Rita <antti.rita@movial.com>
+
diff --git a/application.ini b/application.ini
new file mode 100644 (file)
index 0000000..3aafc2c
--- /dev/null
@@ -0,0 +1,76 @@
+; ***** 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 Movial Callithrix.
+;
+; The Initial Developer of the Original Code is
+; Movial Creative Technologies Inc.
+;
+; Portions created by the Initial Developer are Copyright (C) 2009
+; the Movial Creative Technologies Inc. <http://www.movial.com/>.
+; All Rights Reserved.
+;
+; Contributor(s):
+;
+; 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 *****
+
+[App]
+;
+; This field specifies your organization's name.  This field is recommended,
+; but optional.
+Vendor=Movial
+;
+; This field specifies your application's name.  This field is required.
+Name=Callithrix
+;
+; This field specifies your application's version.  This field is optional.
+Version=0.5
+;
+; This field specifies your application's build ID (timestamp).  This field is
+; required.
+BuildID=20090311
+;
+; This field specifies a compact copyright notice for your application.  This
+; field is optional.
+Copyright=Copyright © 2009 Movial Creative Technologies Inc.
+
+;
+; This ID is just an example.  Every XUL app ought to have it's own unique ID.
+; You can use the microsoft "guidgen" or "uuidgen" tools, or go on
+; irc.mozilla.org and /msg botbot uuid.  This field is optional.
+ID=callithrix@movial.com
+
+[Gecko]
+;
+; This field is required.  It specifies the minimum Gecko version that this
+; application requires.  Specifying 1.8 matches all releases with a version
+; prefixed by 1.8 (e.g., 1.8a4, 1.8b, 1.8.2).
+MinVersion=1.9
+;
+; This field is optional.  It specifies the maximum Gecko version that this
+; application requires.  It should be specified if your application uses
+; unfrozen interfaces.  Specifying 1.8 matches all releases with a version
+; prefixed by 1.8 (e.g., 1.8a4, 1.8b, 1.8.2).
+MaxVersion=1.9.1
diff --git a/chrome/branding/about.png b/chrome/branding/about.png
new file mode 100644 (file)
index 0000000..af09cb2
Binary files /dev/null and b/chrome/branding/about.png differ
diff --git a/chrome/branding/brand.dtd b/chrome/branding/brand.dtd
new file mode 100644 (file)
index 0000000..d7091ba
--- /dev/null
@@ -0,0 +1,3 @@
+<!ENTITY  brandShortName        "Callithrix">
+<!ENTITY  brandFullName         "Callithrix">            
+<!ENTITY  vendorShortName       "Movial">
diff --git a/chrome/branding/brand.properties b/chrome/branding/brand.properties
new file mode 100644 (file)
index 0000000..29571ee
--- /dev/null
@@ -0,0 +1,3 @@
+brandShortName=Callithrix
+brandFullName=Callithrix
+vendorShortName=Movial
diff --git a/chrome/branding/callithrix.ico b/chrome/branding/callithrix.ico
new file mode 100644 (file)
index 0000000..4dbd21a
Binary files /dev/null and b/chrome/branding/callithrix.ico differ
diff --git a/chrome/branding/icon16.png b/chrome/branding/icon16.png
new file mode 100644 (file)
index 0000000..5c6656b
Binary files /dev/null and b/chrome/branding/icon16.png differ
diff --git a/chrome/branding/icon48.png b/chrome/branding/icon48.png
new file mode 100644 (file)
index 0000000..aab73c6
Binary files /dev/null and b/chrome/branding/icon48.png differ
diff --git a/chrome/branding/icon64.png b/chrome/branding/icon64.png
new file mode 100644 (file)
index 0000000..75d56c8
Binary files /dev/null and b/chrome/branding/icon64.png differ
diff --git a/chrome/chrome.manifest b/chrome/chrome.manifest
new file mode 100644 (file)
index 0000000..b6ba0e0
--- /dev/null
@@ -0,0 +1,8 @@
+content callithrix content/\r
+locale branding en-US branding/\r
+content branding branding/
+locale callithrix en-US locale/en-US/\r
+skin callithrix classic skin/\r
+overlay chrome://mozapps/content/downloads/downloads.xul chrome://callithrix/content/downloadsOverlay.xul
+style chrome://mozapps/content/downloads/downloads.css chrome://callithrix/content/downloadsOverlay.css
+override chrome://global/content/about.xhtml chrome://callithrix/content/about.xhtml
diff --git a/chrome/content/about.xhtml b/chrome/content/about.xhtml
new file mode 100644 (file)
index 0000000..9ea322c
--- /dev/null
@@ -0,0 +1,103 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
+  "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd" [
+<!ENTITY % brandDTD SYSTEM "chrome://branding/locale/brand.dtd" >
+%brandDTD;
+<!ENTITY % aboutDTD SYSTEM "chrome://global/locale/about.dtd" >
+%aboutDTD;
+<!ENTITY % globalDTD SYSTEM "chrome://global/locale/global.dtd">
+%globalDTD;
+]>
+
+<!-- ***** 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 Communicator client code, released
+   - March 31, 1998.
+   -
+   - The Initial Developer of the Original Code is
+   - Netscape Communications Corporation.
+   - Portions created by the Initial Developer are Copyright (C) 1998-1999
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributor(s):
+   -   Henrik Gemal <mozilla@gemal.dk>
+   -   Daniel Veditz <dveditz@netscape.com>
+   -   Alexey Chernyak <alexeyc@bigfoot.com>
+   -   Steffen Wilberg <steffen.wilberg@web.de>
+   -
+   - 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 ***** -->
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+  <title>About:</title>
+  <link rel="stylesheet" href="chrome://global/skin/about.css" type="text/css"/>
+</head>
+
+<body dir="&locale.dir;">
+<div id="aboutPageContainer">
+  <div id="aboutLogoContainer">
+    <a id="vendorURL" href="http://sandbox.movial.com/wiki/index.php/Callithrix">
+      <img src="about:logo" alt="&brandShortName;"/>
+<p id="version">&about.version; 0.5</p>
+    </a>
+  </div>
+
+  <ul id="aboutPageList">
+    <li>&about.copy.beforeLink; <a href="about:credits">&about.copy.linkTitle;</a> &about.copy.afterLink;</li>
+    <li>&about.license.beforeLink; <a href="about:license">&about.license.linkTitle;</a> &about.license.afterLink;</li>
+    <!-- Release notes link removed pending fix for bug 349985
+    <li>&about.relnotes.beforeLink; <a id="releaseNotesURL" href="">&about.relnotes.linkTitle;</a> &about.relnotes.afterLink;</li>
+    -->
+    <li>&about.buildconfig.beforeLink; <a href="about:buildconfig">&about.buildconfig.linkTitle;</a> &about.buildconfig.afterLink;</li>
+    <script type="application/javascript">
+      // get release notes URL from prefs
+      try {
+        var formatter = Components.classes["@mozilla.org/toolkit/URLFormatterService;1"]
+                                  .getService(Components.interfaces.nsIURLFormatter);
+        var releaseNotesURL = formatter.formatURLPref("app.releaseNotesURL");
+        var relnotes = document.getElementById("releaseNotesURL");
+        relnotes.setAttribute("href", releaseNotesURL);
+
+        var vendorURL = formatter.formatURLPref("app.vendorURL");
+        var vendor = document.getElementById("vendorURL");
+        vendor.setAttribute("href", vendorURL);
+      }
+      catch (ex) { /* no release notes and vendor URL for you without bug 349985 being fixed */ }
+
+      var ua = navigator.userAgent;
+      if (ua) {
+        var list = document.getElementById("aboutPageList");
+        var listItem = list.appendChild(document.createElement("li"));
+        listItem.appendChild(document.createTextNode("&about.buildIdentifier;"));
+        listItem.appendChild(document.createTextNode(ua));
+      }
+    </script>
+  </ul>
+
+</div>
+</body>
+</html>
diff --git a/chrome/content/bookmarkProperties.js b/chrome/content/bookmarkProperties.js
new file mode 100644 (file)
index 0000000..1a46371
--- /dev/null
@@ -0,0 +1,52 @@
+  var gBookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
+                      .getService(Components.interfaces.nsINavBookmarksService);
+  var gItem = null;
+  var gTitle = null;
+  var gUri = null;
+  var gTitlefield = null;
+  var gUrlfield = null;
+
+// Initialises the values in the fields
+function Init()
+{
+  var gBookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
+                      .getService(Components.interfaces.nsINavBookmarksService);
+  gItem = window.arguments[0];
+  gTitle = gBookmarksService.getItemTitle(gItem);
+  gUri =  gBookmarksService.getBookmarkURI(gItem).spec;
+  gTitlefield =  document.getElementById("name");
+  gUrlfield = document.getElementById("url");
+
+  gTitlefield.value = gTitle ? gTitle : "";
+  gUrlfield.value = gUri ? gUri : "";
+  document.title = document.title.replace(/\*\*bm_title\*\*/gi, gTitle);
+
+  sizeToContent();
+  gTitlefield.focus();
+  gTitlefield.select();
+}
+
+// When ok is pressed
+function Commit()
+{
+  var changed = false;
+
+  if (gTitlefield.value != gTitle)
+    gBookmarksService.setItemTitle(gItem, gTitlefield.value);
+
+  if (gUrlfield.value != gUri & gUrlfield.value != "") {
+    var ioService = Components.classes["@mozilla.org/network/io-service;1"]  
+                              .getService(Components.interfaces.nsIIOService);  
+    var newURI = ioService.newURI(gUrlfield.value, null, null);  
+    gBookmarksService.changeBookmarkURI(gItem, newURI);
+  }
+
+  window.close();
+  return true;
+}
+
+// When cancel is pressed
+function Cancel()
+{
+  return true;
+}
diff --git a/chrome/content/bookmarkProperties.xul b/chrome/content/bookmarkProperties.xul
new file mode 100644 (file)
index 0000000..98a3049
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0"?> <!-- -*- Mode: SGML; indent-tabs-mode: nil; -*- -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+
+<!DOCTYPE dialog [
+<!ENTITY % bookmarksDTD SYSTEM "chrome://callithrix/locale/bookmarks.dtd">\r
+%bookmarksDTD;\r
+]>
+
+<dialog id="bmPropsWindow" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+        title="&properties.window.title;"
+        onload="Init()" style="width: 30em;"
+        ondialogaccept="return Commit();"
+        ondialogcancel="return Cancel();">
+
+  <script type="application/x-javascript" src="chrome://global/content/globalOverlay.js"/>
+  <script type="application/x-javascript" src="chrome://callithrix/content/bookmarks.js"/>
+  <script type="application/x-javascript" src="chrome://callithrix/content/bookmarkProperties.js"/>
+
+  <vbox id="description-box" hidden="true">
+    <separator class="thin"/>
+    <hbox align="start">
+      <image class="message-icon"/>
+      <separator class="thin" orient="vertical"/>
+      <description id="bookmarkDescription" flex="1"/>
+    </hbox>
+    <separator class="thin"/>
+  </vbox>
+  <vbox class="box-padded">
+    <grid>
+      <columns>
+        <column />
+        <column flex="1"/>
+      </columns>
+      <rows>
+        <row align="center">
+          <label value="&properties.name.label;" control="name"/>
+          <textbox id="name" />
+        </row>
+        <row id="locationrow" align="center">
+          <label value="&properties.location.label;" control="url"/>
+          <textbox id="url" />
+        </row>
+      </rows>
+    </grid>
+    <separator/>
+  </vbox>
+
+</dialog>
diff --git a/chrome/content/bookmarks.js b/chrome/content/bookmarks.js
new file mode 100644 (file)
index 0000000..07221f8
--- /dev/null
@@ -0,0 +1,434 @@
+/* ***** 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 Movial Callithrix.
+
+   The Initial Developer of the Original Code is
+   Movial Creative Technologies Inc.
+
+   Portions created by the Initial Developer are Copyright (C) 2009
+   the Initial Developer. All Rights Reserved.
+
+   Contributors:
+
+   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 NPL, 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 NPL, the GPL or the LGPL.
+
+   ***** END LICENSE BLOCK ***** */
+
+var gBookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
+                      .getService(Components.interfaces.nsINavBookmarksService);
+var gHistoryService = Components.classes["@mozilla.org/browser/nav-history-service;1"]
+                      .getService(Components.interfaces.nsINavHistoryService);
+var gAtomService = Components.classes["@mozilla.org/atom-service;1"]
+                     .getService(Components.interfaces.nsIAtomService);
+var gLockAtoms = [gAtomService.getAtom("default"), gAtomService.getAtom("user"), gAtomService.getAtom("locked")];
+
+var gBookmarkHash = {};
+var gBookmarkArray = [];
+var gBookmarkView = gBookmarkArray; // share the JS array
+var gFastIndex = 0;
+var gSortedColumn = "nameCol";
+var gSortFunction = null;
+var gSortDirection = 1; // 1 is ascending; -1 is descending
+
+
+// find the index in gBookmarkView of a bookmark object
+// or -1 if it does not exist in the filtered view
+function getViewIndexOfBookmark(bookmark)
+{
+  var low = -1, high = gBookmarkView.length;
+  var index = (low + high) >> 1;
+  while (index > low) {
+    var mid = gBookmarkView[index];
+    if (mid == bookmark)
+      return index;
+    if (gSortFunction(mid, bookmark) < 0)
+      low = index;
+    else
+      high = index;
+    index = (low + high) >> 1;
+  }
+  return -1;
+}
+
+// find the index in gBookmarkArray of a bookmark object
+// either one that was looked up in gBookmarkHash
+// or in case it was moved after sorting
+function getIndexOfBookmark(bookmark)
+{
+  var low = -1, high = gFastIndex;
+  var index = (low + high) >> 1;
+  while (index > low) {
+    var mid = gBookmarkArray[index];
+    if (mid == bookmark)
+      return index;
+    if (gSortFunction(mid, bookmark) < 0)
+      low = index;
+    else
+      high = index;
+    index = (low + high) >> 1;
+  }
+
+  for (index = gFastIndex; index < gBookmarkArray.length; ++index)
+    if (gBookmarkArray[index] == bookmark)
+      break;
+  return index;
+}
+
+function getNearestIndexOfBookmark(bookmark)
+{
+  var low = -1, high = gFastIndex;
+  var index = (low + high) >> 1;
+  while (index > low) {
+    if (gSortFunction(gBookmarkArray[index], bookmark) < 0)
+      low = index;
+    else
+      high = index;
+    index = (low + high) >> 1;
+  }
+  return high;
+}
+
+var view = {
+  get rowCount() { return gBookmarkView.length; },
+  getCellText : function(index, col) {
+    if (!(index in gBookmarkView))
+      return "";
+
+    return gBookmarkView[index][col.id];
+  },
+  getRowProperties : function(index, prop) {},
+  getCellProperties : function(index, col, prop) {
+    if (index in gBookmarkView)
+      prop.AppendElement(gLockAtoms[gBookmarkView[index].lockCol]);
+  },
+  getColumnProperties : function(col, prop) {},
+  treebox : null,
+  selection : null,
+  isContainer : function(index) { return false; },
+  isContainerOpen : function(index) { return false; },
+  isContainerEmpty : function(index) { return false; },
+  isSorted : function() { return true; },
+  canDrop : function(index, orientation) { return false; },
+  drop : function(row, orientation) {},
+  setTree : function(out) { this.treebox = out; },
+  getParentIndex: function(rowIndex) { return -1; },
+  hasNextSibling: function(rowIndex, afterIndex) { return false; },
+  getLevel: function(index) { return 1; },
+  getImageSrc: function(row, col) { return ""; },
+  toggleOpenState : function(index) {},
+  cycleHeader: function(col) {
+    var index = this.selection.currentIndex;
+    if (col.id == gSortedColumn)
+      gSortDirection = -gSortDirection;
+    if (col.id == gSortedColumn && gFastIndex == gBookmarkArray.length) {
+      gBookmarkArray.reverse();
+      if (gBookmarkView != gBookmarkArray)
+        gBookmarkView.reverse();
+      if (index >= 0)
+        index = gBookmarkView.length - index - 1;
+    }
+    else {
+      var bookmark = null;
+      if (index >= 0) {
+        if (gBookmarkArray != gBookmarkView)
+          index = gBookmarkView.length - index - 1;
+        else
+          bookmark = gBookmarkArray[index];
+      }
+      var old = document.getElementById(gSortedColumn);
+      old.setAttribute("sortDirection", "");
+      gBookmarkArray.sort(gSortFunction = gSortFunctions[col.id]);
+      if (gBookmarkView != gBookmarkArray) {
+        if (col.id == gSortedColumn)
+          gBookmarkView.reverse();
+        else
+          gBookmarkView.sort(gSortFunction);
+      }
+      gSortedColumn = col.id;
+      if (bookmark)
+        index = getIndexOfBookmark(bookmark);
+    }
+    col.element.setAttribute("sortDirection", gSortDirection > 0 ? "ascending" : "descending");
+    this.treebox.invalidate();
+    if (index >= 0) {
+      this.selection.select(index);
+      this.treebox.ensureRowIsVisible(index);
+    }
+    gFastIndex = gBookmarkArray.length;
+  },
+  selectionChanged : function() {},
+  cycleCell: function(row, col) {},
+  isEditable: function(row, col) { return false; },
+  isSelectable: function(row, col) { return false; },
+  setCellValue: function(row, col, value) {},
+  setCellText: function(row, col, value) {},
+  performAction: function(action) {},
+  performActionOnRow: function(action, row) {},
+  performActionOnCell: function(action, row, col) {},
+  isSeparator: function(index) { return false; }
+};
+
+var gBookmarkListener = {
+  onBeginUpdateBatch: function() {},
+  onEndUpdateBatch: function() {},
+  onItemAdded: function(aItemId, aFolder, aIndex) {
+    reloadBookmarks();
+  },
+  onItemRemoved: function(aItemId, aFolder, aIndex) {
+    reloadBookmarks();
+  },
+  onItemChanged: function(aBookmarkId, aProperty, aIsAnnotationProperty, aValue) {
+    reloadBookmarks();
+  },
+  onItemVisited: function(aBookmarkId, aVisitID, time) {},
+  onItemMoved: function(aItemId, aOldParent, aOldIndex, aNewParent, aNewIndex) {},
+};
+
+function bookmarkObject(bookmarkName, bookmarkIndex)
+{
+  this.bookmarkCol = bookmarkName;
+}
+bookmarkObject.prototype =
+{
+  nameCol: "",
+  locationCol: "",
+  dateCol: false
+};
+
+// Remove the listener and view when closing
+function CloseBookmarks ()
+{
+  gBookmarksService.removeObserver(gBookmarkListener);
+  var bookmarkTree = document.getElementById("bookmarkTree");
+  bookmarkTree.view = null;
+}
+
+// Occupy the view tree with the bookmarks
+function loadBookmarks()
+{
+  gBookmarkHash = {};
+  gBookmarkArray = [];
+  gBookmarkView = gBookmarkArray; // share the JS array
+  gFastIndex = 0;
+  gSortedColumn = "nameCol";
+  gSortFunction = null;
+  gSortDirection = 1; // 1 is ascending; -1 is descending
+
+  var options = gHistoryService.getNewQueryOptions();
+  var query = gHistoryService.getNewQuery();
+
+  query.setFolders([gBookmarksService.unfiledBookmarksFolder], 1);
+  var bookmarkResults = gHistoryService.executeQuery(query, options).root;
+
+  bookmarkResults.containerOpen = true;
+
+  for (var i = 0; i < bookmarkResults.childCount; ++i) 
+  {
+    var node = bookmarkResults.getChild(i);
+    var bookmark = new bookmarkObject(node.itemId);
+
+    gBookmarkHash[node.itemId] = bookmark;
+    gBookmarkArray[gBookmarkArray.length] = bookmark;
+
+    bookmark.nameCol = node.title;
+    bookmark.locationCol = node.uri;
+    var date = new Date(node.dateAdded / 1000);
+    bookmark.dateCol = date.toLocaleDateString();
+  }
+
+  bookmarkResults.containerOpen = false;
+
+  var descending = document.getElementsByAttribute("sortDirection", "descending");
+  if (descending.item(0)) {
+    gSortedColumn = descending[0].id;
+    gSortDirection = -1;
+  }
+  else {
+    var ascending = document.getElementsByAttribute("sortDirection", "ascending");
+    if (ascending.item(0))
+      gSortedColumn = ascending[0].id;
+    else
+      document.getElementById(gSortedColumn).setAttribute("sortDirection", "ascending");
+  }
+  gSortFunction = gSortFunctions[gSortedColumn];
+  gBookmarkArray.sort(gSortFunction);
+  gFastIndex = gBookmarkArray.length;
+}
+
+// Initial showing of the bookmarks window
+function ShowBookmarks()
+{
+  loadBookmarks()
+
+  gBookmarksService.addObserver(gBookmarkListener, false);
+
+  var bookmarkTree = document.getElementById("bookmarkTree");
+  bookmarkTree.view = view;
+
+  var textbox = document.getElementById("textbox");
+  if (textbox.value)
+    // somebody seems to already have tried to apply a filter
+    FilterBookmarks();
+  textbox.focus();
+}
+
+// Open the edit bookmark dialog
+function OpenEditDialog()
+{
+  var bookmarkCol = view.selection.currentIndex < 0 ? null : gBookmarkView[view.selection.currentIndex].bookmarkCol;
+  var instantApply = getBoolPref("browser.preferences.instantApply", false);
+  var features = "chrome,titlebar,centerscreen" + (instantApply ? ",dialog=no" : ",modal");
+  openDialog("chrome://callithrix/content/bookmarkProperties.xul", "Edit", features, bookmarkCol);
+}
+
+// Delete the selected bookmark
+function DeleteBookmark ()
+{
+  var bookmarkCol = view.selection.currentIndex < 0 ? null : gBookmarkView[view.selection.currentIndex].bookmarkCol;
+  gBookmarksService.removeItem(bookmarkCol);
+}
+
+// Clear the bookmarks filter text
+function ClearFilter ()
+{
+  document.getElementById("textbox").value = "";
+  FilterBookmarks();
+}
+
+// Filter the bookmarks according to the string in the textbox
+function FilterBookmarks ()
+{
+  var substring = document.getElementById("textbox").value;
+  if (substring != "")
+    document.getElementById("clearfilter").removeAttribute("disabled");
+  else
+    document.getElementById("clearfilter").setAttribute("disabled", "true");
+  var rex;
+  // Check for "/regex/[i]"
+  if (substring.charAt(0) == '/') {
+    var r = substring.match(/^\/(.*)\/(i?)$/);
+    try {
+      rex = RegExp(r[1], r[2]);
+    }
+    catch (e) {
+      return; // Do nothing on incomplete or bad RegExp
+    }
+  }
+
+  var bookmarkCol = view.selection.currentIndex < 0 ? null : gBookmarkView[view.selection.currentIndex].nameCol;
+  var oldlen = gBookmarkView.length;
+  gBookmarkView = gBookmarkArray;
+  if (substring) {
+    gBookmarkView = [];
+    if (!rex)
+      rex = RegExp(substring.replace(/([^* \w])/g, "\\$1").replace(/^\*+/, "")
+                            .replace(/\*+/g, ".*"), "i");
+    for (var i = 0; i < gBookmarkArray.length; ++i)
+      if (rex.test(gBookmarkArray[i].nameCol + ";" + gBookmarkArray[i].locationCol + ";" + gBookmarkArray[i].dateCol))
+        gBookmarkView.push(gBookmarkArray[i]);
+    if (gFastIndex < gBookmarkArray.length)
+      gBookmarkView.sort(gSortFunction);
+  }
+  view.treebox.invalidate();
+  view.treebox.rowCountChanged(oldlen, gBookmarkView.length - oldlen);
+  gotoBookmark(bookmarkCol);
+  if (!bookmarkCol)
+  {
+    document.getElementById("deleteButton").setAttribute("disabled", "true");
+    document.getElementById("editButton").setAttribute("disabled", "true");
+  }
+}
+
+// Reload the bookmarks after a change
+function reloadBookmarks ()
+{
+  loadBookmarks();
+  var bookmarkTree = document.getElementById("bookmarkTree");
+  bookmarkTree.view = view;
+  gotoBookmark(null);
+  FilterBookmarks();
+}
+
+// Select a bookmark in the view
+function gotoBookmark(bookmark)
+{
+  // make sure the bookmark exists and is displayed in the current view
+  var index = bookmark in gBookmarkHash ? getViewIndexOfBookmark(gBookmarkHash[bookmark]) : -1;
+  if (index >= 0) {
+    view.selection.select(index);
+    view.treebox.ensureRowIsVisible(index);
+  } else {
+    view.selection.clearSelection();
+    view.selection.currentIndex = -1;
+  }
+}
+
+// Sorting functions for the columns
+function nameColSortFunction(x, y)
+{
+  if (x.nameCol > y.nameCol)
+    return gSortDirection;
+  if (x.nameCol < y.nameCol) 
+    return -gSortDirection;
+  return 0;
+}
+function locationColSortFunction(x, y)
+{
+  if (x.locationCol > y.locationCol)
+    return gSortDirection;
+  if (x.locationCol < y.locationCol) 
+    return -gSortDirection;
+  return nameColSortFunction(x, y);
+}
+function dateColSortFunction(x, y)
+{
+  if (x.dateCol > y.dateCol)
+    return gSortDirection;
+  if (x.dateCol < y.dateCol) 
+    return -gSortDirection;
+  return nameColSortFunction(x, y);
+}
+const gSortFunctions =
+{
+  nameCol: nameColSortFunction, 
+  locationCol: locationColSortFunction,
+  dateCol: dateColSortFunction 
+};
+
+// Open the selected bookmark in the parent browser and close the bookmark window
+function OpenBookmark ()
+{
+  var parent = Components.classes['@mozilla.org/appshell/window-mediator;1']
+                         .getService(Components.interfaces.nsIWindowMediator)
+                         .getMostRecentWindow("navigator:browser");
+  parent.document.getElementById("browser")
+    .loadURI(gBookmarkView[view.selection.currentIndex].locationCol, null, null);
+  window.close();
+}
+
+// For debugging
+function p(i) {
+//  dump(i + "\n");
+}
+
diff --git a/chrome/content/bookmarks.xul b/chrome/content/bookmarks.xul
new file mode 100644 (file)
index 0000000..e7984a0
--- /dev/null
@@ -0,0 +1,95 @@
+<?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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+   -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://callithrix/skin/bookmarks.css" type="text/css"?>
+
+<!DOCTYPE window SYSTEM "chrome://callithrix/locale/bookmarks.dtd">
+
+<window id="bookmarks"
+        xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" 
+        title="&window.title;"
+        windowtype="Preferences:BookmarksManager"
+        width="750"
+        height="500"
+        onunload="CloseBookmarks();"
+        onload="ShowBookmarks();">
+
+<script src="chrome://callithrix/content/callithrix.js"/>
+<script src="chrome://callithrix/content/bookmarks.js"/>
+
+<keyset>
+  <key keycode="VK_ENTER" oncommand="OpenBookmark();"/>
+  <key keycode="VK_RETURN" oncommand="OpenBookmark();"/>
+</keyset>
+
+<hbox id="filterRow" align="center">
+  <label value="&filterPrefs.label;" control="textbox"/>
+  <textbox id="textbox" flex="1" type="timed" timeout="500" oncommand="FilterBookmarks();"/>
+  <button id="clearfilter" label="&showAll.label;"
+          oncommand="ClearFilter();" disabled="true"/>
+</hbox>
+
+<tree id="bookmarkTree" flex="1" seltype="single" 
+      enableColumnDrag="true" context="bookmarkContext" 
+      onselect="document.getElementById('deleteButton').removeAttribute('disabled');
+                document.getElementById('editButton').removeAttribute('disabled');">
+  <treecols>
+    <treecol id="nameCol" label="&nameColumn.label;" flex="5"
+             class="sortDirectionIndicator"
+             persist="hidden width ordinal sortDirection"/>
+    <splitter class="tree-splitter" />
+    <treecol id="locationCol" label="&locationColumn.label;" flex="3"
+             class="sortDirectionIndicator"
+             persist="hidden width ordinal sortDirection"/>
+    <splitter class="tree-splitter" />
+    <treecol id="dateCol" label="&dateColumn.label;" flex="1"
+             class="sortDirectionIndicator"
+             persist="hidden width ordinal sortDirection"/>
+  </treecols>
+
+  <treechildren id="bookmarkTreeBody" ondblclick="if (event.button == 0) OpenBookmark();"/>
+</tree>
+
+<hbox id="buttonRow" align="right">
+  <button id="editButton" label="&editButton.label;" disabled="true" onclick="OpenEditDialog();"/>
+  <button id="deleteButton" label="&deleteButton.label;" disabled="true" onclick="DeleteBookmark();"/>
+  <button id="closeButton" label="&closeButton.label;" onclick="window.close();"/>
+</hbox>
+
+</window>
diff --git a/chrome/content/callithrix.js b/chrome/content/callithrix.js
new file mode 100644 (file)
index 0000000..3340443
--- /dev/null
@@ -0,0 +1,357 @@
+/* ***** 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 Movial Callithrix.
+
+   The Initial Developer of the Original Code is
+   Movial Creative Technologies Inc.
+
+   Portions created by the Initial Developer are Copyright (C) 2009
+   the Initial Developer. All Rights Reserved.
+
+   Contributors:
+
+   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 NPL, 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 NPL, the GPL or the LGPL.
+
+   ***** END LICENSE BLOCK ***** */
+
+
+var gWebProgressListener = null;
+var gBrowser = null;
+var gURLBar = null;
+var gPrefService = null;
+var gBookmarksService = Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
+                      .getService(Components.interfaces.nsINavBookmarksService);
+var gCallithrixBundle;
+var gFavIconThrobberDeck = null;
+var gGoStopDeck = null;
+var gFavIcon = null
+
+
+// nsIWebProgressListener implementation to monitor activity in the browser.
+function WebProgressListener() {}
+WebProgressListener.prototype = {
+  _requestsStarted: 0,
+  _requestsFinished: 0,
+
+  // We need to advertize that we support weak references.  This is done simply
+  // by saying that we QI to nsISupportsWeakReference. XPConnect will take
+  // care of actually implementing that interface on our behalf.
+  QueryInterface: function(iid) {
+    if (iid.equals(Components.interfaces.nsIWebProgressListener) ||
+        iid.equals(Components.interfaces.nsISupportsWeakReference) ||
+        iid.equals(Components.interfaces.nsISupports))
+      return this;
+
+    throw Components.results.NS_ERROR_NO_INTERFACE;
+  },
+
+  // This method is called to indicate state changes.
+  onStateChange: function(webProgress, request, stateFlags, status) {
+    const WPL = Components.interfaces.nsIWebProgressListener;
+
+    if (stateFlags & WPL.STATE_START && webProgress.isLoadingDocument) {
+      if (gGoStopDeck.getAttribute("selectedIndex") == 0)
+        gGoStopDeck.setAttribute("selectedIndex", "1");
+      if (gFavIconThrobberDeck.getAttribute("selectedIndex") == 0) {
+        gFavIconThrobberDeck.setAttribute("selectedIndex", "1");
+        gFavIcon.removeAttribute("src");
+      }
+    }
+
+    else if (stateFlags & WPL.STATE_STOP && !webProgress.isLoadingDocument) {
+      if (gGoStopDeck.getAttribute("selectedIndex") == 1)
+        gGoStopDeck.setAttribute("selectedIndex", "0");
+      if (gFavIconThrobberDeck.getAttribute("selectedIndex") == 1)
+        gFavIconThrobberDeck.setAttribute("selectedIndex", "0");
+      if (!gFavIcon.hasAttribute("src")) {
+        var favURL = gBrowser.currentURI.prePath + "/favicon.ico"
+        gFavIcon.setAttribute("src", favURL);
+      }
+
+      gBrowser.contentWindow.focus();
+    }
+  }, 
+
+
+  // This method is called to indicate progress changes for the currently
+  // loading page.
+  onProgressChange: function(webProgress, request, curSelf, maxSelf,
+                             curTotal, maxTotal) {
+    if (this._requestsStarted == 1) {}
+  },
+
+  // This method is called to indicate a change to the current location.
+  onLocationChange: function(webProgress, request, location) {
+    gURLBar.value = location.spec;
+
+    var webNavigation = gBrowser.webNavigation;
+    var back = document.getElementById("back-button");
+    var forward = document.getElementById("forward-button");
+
+    // setting attributes is expensive, let's avoid that if the value hasn't changed
+    var backDisabled = back.hasAttribute("disabled");
+    var forwardDisabled = forward.hasAttribute("disabled");
+    if (backDisabled == webNavigation.canGoBack) {
+      if (backDisabled)
+        back.removeAttribute("disabled");
+      else
+        back.setAttribute("disabled", true);
+    }
+
+    if (forwardDisabled == webNavigation.canGoForward) {
+      if (forwardDisabled)
+        forward.removeAttribute("disabled");
+      else
+        forward.setAttribute("disabled", true);
+    }
+
+    var starButton = document.getElementById("star-button");
+    // FIXME: isBookmarked is buggy and returns true even after
+    //        the bookmark url has been changed
+    if (gBookmarksService.isBookmarked(location))
+    {
+      starButton.setAttribute("bookmarked", true);
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("already_bookmarked"));
+    }
+    else
+    {
+      starButton.removeAttribute("bookmarked");
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("bookmark_this"));
+    }
+  },
+
+  // This method is called to indicate status changes for the currently
+  // loading page. The message is already formatted for display.
+  onStatusChange: function(webProgress, request, status, message) {},
+
+  // This method is called when the security state of the browser changes.
+  onSecurityChange: function(webProgress, request, state) {
+    const WPL = Components.interfaces.nsIWebProgressListener;
+  }
+};
+
+
+// Listens for changes in bookmarks.
+var gBookmarkListener = {
+  onBeginUpdateBatch: function() {},
+  onEndUpdateBatch: function() {},
+
+  // Updates the star button when a bookmark is added.
+  onItemAdded: function(aItemId, aFolder, aIndex) {
+    if (gBookmarksService.isBookmarked(gBrowser.currentURI))
+    {
+      var starButton = document.getElementById("star-button");
+      starButton.setAttribute("bookmarked", true);
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("already_bookmarked"));
+    }
+  },
+
+  // Updates the star button when a bookmark is removed.
+  onItemRemoved: function(aItemId, aFolder, aIndex) {
+    if (!gBookmarksService.isBookmarked(gBrowser.currentURI))
+    {
+      var starButton = document.getElementById("star-button");
+      starButton.removeAttribute("bookmarked");
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("bookmark_this"));
+    }
+  },
+  onItemChanged: function(aBookmarkId, aProperty, aIsAnnotationProperty, aValue) {
+  // FIXME: isBookmarked is buggy and returns true even after
+  //        the bookmark url has been changed
+    if (gBookmarksService.isBookmarked(gBrowser.currentURI))
+    {
+      var starButton = document.getElementById("star-button");
+      starButton.setAttribute("bookmarked", true);
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("already_bookmarked"));
+    }
+               else
+    {
+      var starButton = document.getElementById("star-button");
+      starButton.removeAttribute("bookmarked");
+      starButton.setAttribute("tooltiptext", gCallithrixBundle.getString("bookmark_this"));
+    }
+  },
+  onItemVisited: function(aBookmarkId, aVisitID, time) {},
+  onItemMoved: function(aItemId, aOldParent, aOldIndex, aNewParent, aNewIndex) {},
+};
+
+
+// Loads the URI given in urlbar.
+function handleURLBarCommand() {
+  gBrowser.loadURI(gURLBar.value, null, null);
+}
+
+
+// Called when callithrix is loaded.
+function InitCallithrix() {
+  gWebProgressListener = new WebProgressListener();
+  gBrowser = document.getElementById("browser");
+  gBrowser.addProgressListener(gWebProgressListener,
+    Components.interfaces.nsIWebProgress.NOTIFY_ALL);
+
+  gFavIconThrobberDeck = document.getElementById('favicon-throbber-deck');
+  gFavIcon = document.getElementById("favicon");
+  gGoStopDeck = document.getElementById("go-stop-deck");
+  gURLBar = document.getElementById("urlbar");
+
+  var whereURI;
+
+  if (window.arguments && window.arguments[0]) {
+    var cmdLine = window.arguments[0].QueryInterface(
+        Components.interfaces.nsICommandLine);
+    if (cmdLine.length == 1) {
+      whereURI = cmdLine.resolveURI(cmdLine.getArgument(0));
+      if (whereURI) 
+        whereURI = whereURI.spec;
+    }
+  }
+
+  gPrefService = Components.classes["@mozilla.org/preferences-service;1"]
+                        .getService(Components.interfaces.nsIPrefBranch2);
+   try {
+     // Check for and use a default homepage
+     if (gPrefService.getIntPref("browser.startup.page") == 1)
+       whereURI = gPrefService.getCharPref("browser.startup.homepage");
+     else 
+       whereURI = "about:blank";
+   } catch (e) { whereURI = "about:blank" }
+
+  if (whereURI) {
+    setTimeout(function() { gBrowser.loadURI(whereURI, null, null, false); }, 10);
+  }
+
+  gCallithrixBundle = document.getElementById("callithrixBundle");
+
+  addEventListener("DOMLinkAdded", linkAdded, true);
+  gBookmarksService.addObserver(gBookmarkListener, false);
+
+  p("callithrix loaded\n");
+}
+
+
+// Returns to previous page in browsing history.
+function back() {
+  gBrowser.stop();
+  gBrowser.goBack();
+}
+
+
+// Goes to the next page in browsing history.
+function forward() {
+  gBrowser.stop();
+  gBrowser.goForward();
+}
+
+
+// Loads the user's homepage to browser window.
+function goHome() {
+  gPrefService = Components.classes["@mozilla.org/preferences-service;1"]
+                        .getService(Components.interfaces.nsIPrefBranch2);
+  var whereURI;
+  try {
+    // Check for and use a default homepage
+    if (gPrefService.getIntPref("browser.startup.page"))
+       whereURI = gPrefService.getCharPref("browser.startup.homepage");
+    else
+       whereURI = "about:blank";
+   } catch (e) { whereURI = "about:blank" }
+   gBrowser.setAttribute("homepage", whereURI);
+
+   gBrowser.goHome();
+}
+
+
+// Gets the value of a bool preference from the preference service. 
+function getBoolPref ( prefname, def )
+{
+  try { 
+    var pref = Components.classes["@mozilla.org/preferences-service;1"]
+                       .getService(Components.interfaces.nsIPrefBranch);
+    return pref.getBoolPref(prefname);
+  }
+  catch(er) {
+    return def;
+  }
+}
+
+
+// Sets FavIcon link if found.
+function linkAdded(aEvent) {
+  var link = aEvent.originalTarget;
+  if (!link || !link.href)
+    return;
+
+  if (/\bicon\b/i(link.rel)) {
+    gFavIcon.setAttribute("src", link.href);
+  }
+
+}
+
+
+// Add the current page as a bookmark.
+function addBookmark ()
+{
+  // FIXME: isBookmarked is buggy and returns true even after
+  //        the bookmark url has been changed
+  if (!gBookmarksService.isBookmarked(gBrowser.currentURI))
+  {
+    var title;
+    if (gBrowser.contentTitle)
+      title = gBrowser.contentTitle;
+    else
+      title = gBrowser.currentURI.spec;
+
+    gBookmarksService.insertBookmark(gBookmarksService.unfiledBookmarksFolder,
+                 gBrowser.currentURI, gBookmarksService.DEFAULT_INDEX, title);
+    p("bookmark '" + gBrowser.currentURI.spec + "' added");
+  }
+  else
+    p("bookmark '" + gBrowser.currentURI.spec + "' already exists");
+}
+
+
+// Opens the settings window.
+function openSettings(paneID) {
+  p("open settings");
+  var instantApply = getBoolPref("browser.preferences.instantApply", false);
+  var features = "chrome,titlebar,centerscreen" + (instantApply ? ",dialog=no" : ",modal");
+  openDialog("chrome://callithrix/content/settings.xul",
+               "Settings", features, paneID);
+}
+
+
+// Opens the bookmark manager window.
+function openBookmarks(paneID) {
+  p("open bookmarks");
+  var features = "chrome,titlebar,centerscreen,modal";
+  openDialog("chrome://callithrix/content/bookmarks.xul", features, paneID);
+}
+
+
+// For debugging.
+function p(i) {
+//  dump(i + "\n");
+}
+
+
diff --git a/chrome/content/callithrix.xul b/chrome/content/callithrix.xul
new file mode 100644 (file)
index 0000000..4003ead
--- /dev/null
@@ -0,0 +1,119 @@
+<?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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+   -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
+<?xml-stylesheet href="chrome://callithrix/skin/callithrix.css" type="text/css"?>
+
+<!-- import dtd-files -->
+<!DOCTYPE window [
+<!ENTITY % browserDTD SYSTEM "chrome://callithrix/locale/callithrix.dtd" >
+%browserDTD;
+]>
+
+
+<window
+  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+  xmlns:html="http://www.w3.org/1999/xhtml"
+  id="callithrix" title="Callithrix"
+  width="800" height="480"
+  persist="screenX screenY width height sizemode"
+        onload="InitCallithrix();"
+  windowtype="navigator:browser">
+
+  <!-- load scripts -->
+  <script src="chrome://callithrix/content/callithrix.js" type="application/x-javascript" />
+
+  <stringbundle id="callithrixBundle" src="chrome://callithrix/locale/callithrix.properties"/>
+
+  <keyset>
+    <key id="toggle-fullscreen" keycode="VK_F6" oncommand="toggleFullscreen(); "/>
+    <key id="increase" keycode="VK_F7" oncommand="zoomIn();" />
+    <key id="decrease" keycode="VK_F8" oncommand="zoomOut();" />
+    <key id="back" keycode="VK_ESCAPE" oncommand="stepBack();" />
+  </keyset>
+
+
+<toolbox>
+  <toolbar>
+    <toolbarbutton id="back-button" oncommand="back(event);"/>
+    <toolbarbutton id="forward-button" oncommand="forward(event);"/>
+    <toolbarbutton id="refresh-button" oncommand="gBrowser.reload();"/>
+    <toolbarbutton id="bookmarks-button" oncommand="openBookmarks();"/>
+    <toolbarbutton id="settings-button" oncommand="openSettings();"/>
+    <toolbarbutton id="home-button" oncommand="goHome();"/>
+
+    <toolbaritem id="urlbar-container" align="center" flex="400"
+                 class="chromeclass-location">
+      <hbox id="urlbar-button-box" flex="1">
+        <!-- FIXME: enablehistory seems to be broken on XULRunner 1.9.1  -->
+        <textbox id="urlbar" flex="1"
+          type="autocomplete"
+          autocompletesearch="history"
+          autocompletepopup="PopupAutoComplete"
+          completeselectedindex="true"
+          tabscrolling="true"
+          showcommentcolumn="true"
+          enablehistory="true"
+          oninput="gBrowser.userTypedValue = this.value;"
+          ontextentered="return handleURLBarCommand(param);"
+          ontextreverted="return handleURLBarRevert();">
+          <deck id="favicon-throbber-deck" selectedIndex="1">
+              <image id="favicon" />
+              <image id="throbber" />
+            </deck>
+         <hbox id="urlbar-icons">
+              <image id="star-button" onclick="addBookmark();"/>
+         </hbox>
+        </textbox>
+      </hbox>
+    </toolbaritem>
+
+    <deck id="go-stop-deck" selectedIndex="0">
+      <toolbarbutton id="go-button" onclick="handleURLBarCommand();" />
+      <toolbarbutton id="stop-button" oncommand="gBrowser.stop();" />
+    </deck>
+
+  </toolbar>
+</toolbox>
+
+
+<!-- content -->
+<browser flex="1" id="browser" src="about:blank" type="content-primary" hidden="false" />
+
+</window>
diff --git a/chrome/content/downloadsOverlay.xml b/chrome/content/downloadsOverlay.xml
new file mode 100644 (file)
index 0000000..6d15b2c
--- /dev/null
@@ -0,0 +1,360 @@
+<?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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+   -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<!DOCTYPE bindings [
+  <!ENTITY % downloadDTD SYSTEM "chrome://mozapps/locale/downloads/downloads.dtd" >
+  %downloadDTD;
+]>
+
+<bindings id="downloadBindings"
+          xmlns="http://www.mozilla.org/xbl"
+          xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+          xmlns:xbl="http://www.mozilla.org/xbl">
+
+  <binding id="download-base" extends="chrome://global/content/bindings/richlistbox.xml#richlistitem">
+    <resources>
+      <stylesheet src="chrome://callithrix/content/downloadsOverlay.css"/>
+    </resources>
+    <implementation>
+      <property name="paused">
+        <getter>
+        <![CDATA[
+          return parseInt(this.getAttribute("state")) == Components.interfaces.nsIDownloadManager.DOWNLOAD_PAUSED;
+        ]]>
+        </getter>
+      </property>
+      <property name="openable">
+        <getter>
+        <![CDATA[
+          return parseInt(this.getAttribute("state")) == Components.interfaces.nsIDownloadManager.DOWNLOAD_FINISHED;
+        ]]>
+        </getter>
+      </property>
+      <property name="inProgress">
+        <getter>
+        <![CDATA[
+          var state = parseInt(this.getAttribute("state"));
+          const dl = Components.interfaces.nsIDownloadManager;
+          return state == dl.DOWNLOAD_NOTSTARTED || 
+                 state == dl.DOWNLOAD_QUEUED ||
+                 state == dl.DOWNLOAD_DOWNLOADING || 
+                 state == dl.DOWNLOAD_PAUSED ||
+                 state == dl.DOWNLOAD_SCANNING;
+        ]]>
+        </getter>
+      </property>
+      <property name="removable">
+        <getter>
+        <![CDATA[
+          var state = parseInt(this.getAttribute("state"));
+          const dl = Components.interfaces.nsIDownloadManager;
+          return state == dl.DOWNLOAD_FINISHED || 
+                 state == dl.DOWNLOAD_CANCELED || 
+                 state == dl.DOWNLOAD_BLOCKED_PARENTAL || 
+                 state == dl.DOWNLOAD_BLOCKED_POLICY || 
+                 state == dl.DOWNLOAD_DIRTY || 
+                 state == dl.DOWNLOAD_FAILED;
+        ]]>
+        </getter>
+      </property>
+      <property name="buttons">
+        <getter>
+        <![CDATA[
+          var startEl = document.getAnonymousNodes(this);
+          if (!startEl.length)
+            startEl = [this];
+
+          const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
+          return startEl[0].getElementsByTagNameNS(XULNS, "button");
+        ]]>
+        </getter>
+      </property>
+    </implementation>
+  </binding>
+  
+  <binding id="download-starting" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:label xbl:inherits="value=target,tooltiptext=target"
+                     crop="center" class="name"/>
+          <xul:progressmeter mode="normal" value="0" flex="1"
+                             anonid="progressmeter"/>
+          <xul:label value="&starting.label;" class="status"/>
+          <xul:spacer flex="1"/>
+        </xul:vbox>
+        <xul:vbox pack="center">
+          <xul:button class="cancel button" tooltiptext="&cmd.cancel.label;"
+                      cmd="cmd_cancel" ondblclick="event.stopPropagation();"
+                      oncommand="performCommand('cmd_cancel', this);"/>
+        </xul:vbox>
+      </xul:hbox>
+    </content>  
+  </binding>
+  
+  <binding id="download-downloading" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1" class="downloadContentBox">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox flex="1">
+          <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="2" class="name"/>
+          <xul:hbox>
+            <xul:vbox flex="1">
+              <xul:progressmeter mode="normal" value="0" flex="1"
+                                 anonid="progressmeter"
+                                 xbl:inherits="value=progress,mode=progressmode"/>
+            </xul:vbox>
+            <xul:button class="pause button" tooltiptext="&cmd.pause.label;"
+                        cmd="cmd_pause" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_pause', this);"/>
+            <xul:button class="cancel button" tooltiptext="&cmd.cancel.label;"
+                        cmd="cmd_cancel" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_cancel', this);"/>
+          </xul:hbox>
+          <xul:label xbl:inherits="value=status,tooltiptext=statusTip" flex="1"
+                     crop="right" class="status"/>
+          <xul:spacer flex="1"/>
+        </xul:vbox>
+      </xul:hbox>
+    </content>
+  </binding>
+  
+  <binding id="download-paused" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox flex="1">
+          <xul:label xbl:inherits="value=target,tooltiptext=target"
+                     crop="center" flex="2" class="name"/>
+          <xul:hbox>
+            <xul:vbox flex="1">
+              <xul:progressmeter mode="normal" value="0" flex="1"
+                                 anonid="progressmeter"
+                                 xbl:inherits="value=progress,mode=progressmode"/>
+            </xul:vbox>
+            <xul:button class="resume button" tooltiptext="&cmd.resume.label;"
+                        cmd="cmd_resume" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_resume', this);"/>
+            <xul:button class="cancel button" tooltiptext="&cmd.cancel.label;"
+                        cmd="cmd_cancel" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_cancel', this);"/>
+          </xul:hbox>
+          <xul:label xbl:inherits="value=status,tooltiptext=statusTip" flex="1"
+                     crop="right" class="status"/>
+          <xul:spacer flex="1"/>
+        </xul:vbox>
+      </xul:hbox>
+    </content>
+  </binding>
+  
+  <binding id="download-done" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>  
+  </binding>
+  
+  <binding id="download-canceled" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+            <xul:button class="retry button" tooltiptext="&cmd.retry.label;"
+                        cmd="cmd_retry" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_retry', this);"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>  
+  </binding>
+  
+  <binding id="download-failed" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+            <xul:button class="retry button" tooltiptext="&cmd.retry.label;"
+                        cmd="cmd_retry" ondblclick="event.stopPropagation();"
+                        oncommand="performCommand('cmd_retry', this);"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>  
+  </binding>
+
+  <binding id="download-blocked-parental" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon blockedIcon"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>
+  </binding>
+
+  <binding id="download-blocked-policy" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon blockedIcon"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>
+  </binding>
+
+  <binding id="download-scanning" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon" validate="always"
+                     xbl:inherits="src=image"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="2" class="name"/>
+          <xul:hbox>
+            <xul:vbox flex="1">
+              <xul:progressmeter mode="undetermined" flex="1" />
+            </xul:vbox>
+          </xul:hbox>
+          <xul:label value="&scanning.label;" class="status"/>
+          <xul:spacer flex="1"/>
+        </xul:vbox>
+      </xul:hbox>
+    </content>  
+  </binding>
+
+  <binding id="download-dirty" extends="chrome://callithrix/content/downloadsOverlay.xml#download-base">
+    <content>
+      <xul:hbox flex="1">
+        <xul:vbox pack="center">
+          <xul:image class="downloadTypeIcon blockedIcon"/>
+        </xul:vbox>
+        <xul:vbox pack="start" flex="1">
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=target,tooltiptext=target"
+                       crop="center" flex="1" class="name"/>
+            <xul:label xbl:inherits="value=dateTime,tooltiptext=dateTimeTip"
+                       class="dateTime"/>
+          </xul:hbox>
+          <xul:hbox align="center" flex="1">
+            <xul:label xbl:inherits="value=status,tooltiptext=statusTip"
+                       crop="end" flex="1" class="status"/>
+          </xul:hbox>
+        </xul:vbox>
+      </xul:hbox>
+    </content>
+  </binding>
+
+</bindings>
diff --git a/chrome/content/downloadsOverlay.xul b/chrome/content/downloadsOverlay.xul
new file mode 100644 (file)
index 0000000..eeb0447
--- /dev/null
@@ -0,0 +1,59 @@
+<?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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+   -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin/" type="text/css"?> 
+<?xml-stylesheet href="chrome://callithrix/skin/downloadsOverlay.css"?>
+
+<!--
+     Here we use the downloadsOverlay.css 
+     which in turn uses the downloadsOverlay.xml
+     in which we changed the mini-buttons to normal ones
+     so that they are easier to touch with fingers 
+-->
+
+<overlay xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+  <window id="downloadManager" persist="">
+
+    <richlistbox id="downloadView">
+    </richlistbox>
+  </window>
+
+</overlay>
+
diff --git a/chrome/content/settings.js b/chrome/content/settings.js
new file mode 100644 (file)
index 0000000..bf9e85b
--- /dev/null
@@ -0,0 +1,370 @@
+/* ***** 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 Movial Callithrix.
+
+   The Initial Developer of the Original Code is
+   Movial Creative Technologies Inc.
+
+   Portions created by the Initial Developer are Copyright (C) 2009
+   the Initial Developer. All Rights Reserved.
+
+   Contributors:
+
+   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 NPL, 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 NPL, the GPL or the LGPL.
+
+   ***** END LICENSE BLOCK ***** */
+
+
+var gSettingsPane = {
+
+  // STARTUP AND HOMEPAGE
+
+  /**
+   * Preferences:
+   *
+   * browser.startup.homepage
+   * - the user's home page, as a string; if the home page is a set of tabs,
+   *   this will be those URLs separated by the pipe character "|"
+   * browser.startup.page
+   * - what page(s) to show when the user starts the application, as an integer:
+   *     0: a blank page
+   *     1: the home page (as set by the browser.startup.homepage pref)
+   *     2: the last page the user visited (DEPRECATED)
+   *     3: windows and tabs from the last session (a.k.a. session restore)
+   *   The deprecated option is not exposed in UI; however, if the user has it
+   *   selected and doesn't change the UI for this preference, the deprecated
+   *   option is preserved.
+   */
+
+  /**
+   * Sets the home page to the currently displayed page (or frontmost tab,
+   * if the most recent browser window contains multiple tabs), updating 
+   * preference window UI to reflect this.
+   */
+  setHomePageToCurrent: function ()
+  {
+    var win;
+    if (document.documentElement.instantApply) {
+      // If we're in instant-apply mode, use the most recent browser window
+      var wm = Components.classes["@mozilla.org/appshell/window-mediator;1"]
+                         .getService(Components.interfaces.nsIWindowMediator);
+      win = wm.getMostRecentWindow("navigator:browser");
+    }
+    else
+      win = window.opener;
+
+    if (win) {
+      var homePage = document.getElementById("browser.startup.homepage");
+      var browser = win.document.getElementById("content");
+
+      var newVal = browser.browsers[0].currentURI.spec;
+      if (browser.browsers.length > 1) {
+        // XXX using dangerous "|" joiner!
+        for (var i = 1; i < browser.browsers.length; i++)
+          newVal += "|" + browser.browsers[i].currentURI.spec;
+      }
+
+      homePage.value = newVal;
+    }
+  },
+
+
+  // DOWNLOADS
+
+  /*
+   * Preferences:
+   * 
+   * browser.download.useDownloadDir
+   *     true if downloads are saved to a default location with no UI shown
+   *     false if the user should always be asked where to save files
+   * browser.download.dir
+   * - the last directory to which a download was saved
+   * browser.download.downloadDir
+   * - the current default download location
+   * browser.download.folderList
+   *     0 if the desktop is the default download location,
+   *     1 if the downloads folder is the default download location,
+   *     2 if the default download location is elsewhere;
+   * - used to display special UI when the default location is the Desktop or
+   *   the Downloads folder in Download Manager UI and in the file field in
+   *   preferences
+   */
+
+
+  /**
+   * Enables/disables the folder field and Browse button based on whether a
+   * default download directory is being used.
+   */
+  readUseDownloadDir: function ()
+  {
+    var downloadFolder = document.getElementById("downloadFolder");
+    var chooseFolder = document.getElementById("chooseFolder");
+    var preference = document.getElementById("browser.download.useDownloadDir");
+    downloadFolder.disabled = !preference.value;
+    chooseFolder.disabled = !preference.value;
+
+    // don't override the preference's value in UI
+    return undefined;
+  },
+
+  /**
+   * Displays a file picker in which the user can choose the location where
+   * downloads are automatically saved, updating preferences and UI in
+   * response to the choice, if one is made.
+   */
+  chooseFolder: function ()
+  {
+    const nsIFilePicker = Components.interfaces.nsIFilePicker;
+    var fp = Components.classes["@mozilla.org/filepicker;1"]
+                       .createInstance(nsIFilePicker);
+    var settingsBundle = document.getElementById("settingsBundle");
+    var title = settingsBundle.getString("chooseDownloadFolderTitle");
+    fp.init(window, title, nsIFilePicker.modeGetFolder);
+
+    const nsILocalFile = Components.interfaces.nsILocalFile;
+    var customDirPref = document.getElementById("browser.download.dir");
+    if (customDirPref.value)
+      fp.displayDirectory = customDirPref.value;
+    fp.appendFilters(nsIFilePicker.filterAll);
+    if (fp.show() == nsIFilePicker.returnOK) {
+      var file = fp.file.QueryInterface(nsILocalFile);
+      var currentDirPref = document.getElementById("browser.download.downloadDir");
+      customDirPref.value = currentDirPref.value = file;
+      var folderListPref = document.getElementById("browser.download.folderList");
+      folderListPref.value = this._folderToIndex(file);
+    }
+  },
+
+  /**
+   * Initializes the download folder widget based on the folder as stored in
+   * preferences.
+   */
+  readDownloadDirPref: function ()
+  {
+    var folderListPref = document.getElementById("browser.download.folderList");
+    var settingsBundle = document.getElementById("settingsBundle");
+    var downloadFolder = document.getElementById("downloadFolder");
+    var customDirPref = document.getElementById("browser.download.dir");
+    var customIndex = customDirPref.value ? this._folderToIndex(customDirPref.value) : 0;
+
+    if (folderListPref.value == 0 || customIndex == 0)
+      downloadFolder.label = settingsBundle.getString("desktopFolderName");
+    else if (folderListPref.value == 1 || customIndex == 1)
+      downloadFolder.label = settingsBundle.getString("myDownloadsFolderName");
+    else
+      downloadFolder.label = this._getDisplayNameOfFile(customDirPref.value);
+
+    var ios = Components.classes["@mozilla.org/network/io-service;1"]
+                        .getService(Components.interfaces.nsIIOService);
+    var fph = ios.getProtocolHandler("file")
+                 .QueryInterface(Components.interfaces.nsIFileProtocolHandler);
+    var currentDirPref = document.getElementById("browser.download.downloadDir");
+    var downloadDir = currentDirPref.value || this._indexToFolder(folderListPref.value);
+
+    try {
+      var urlspec = fph.getURLSpecFromFile(downloadDir);
+      downloadFolder.image = "moz-icon://" + urlspec + "?size=16";
+    } catch(e) {}
+
+    // don't override the preference's value in UI
+    return undefined;
+  },
+
+  /**
+   * Determines the type of the given folder.
+   *
+   * @param   aFolder
+   *          the folder whose type is to be determined
+   * @returns integer
+   *          0 if aFolder is the Desktop or is unspecified,
+   *          1 if aFolder is the Downloads folder,
+   *          2 otherwise
+   */
+  _folderToIndex: function (aFolder)
+  {
+    if (!aFolder || aFolder.equals(this._getDownloadsFolder("Desktop")))
+      return 0;
+    else if (aFolder.equals(this._getDownloadsFolder("Downloads")))
+      return 1;
+    return 2;
+  },
+
+  /**
+   * Returns the Downloads folder.  If aFolder is "Desktop", then the Downloads
+   * folder returned is the desktop folder; otherwise, it is a folder whose name
+   * indicates that it is a download folder and whose path is as determined by
+   * the XPCOM directory service from aFolder.
+   *
+   * @throws if aFolder is not "Desktop" or "Downloads"
+   */
+  _getDownloadsFolder: function (aFolder)
+  {
+    var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"]
+                                .getService(Components.interfaces.nsIProperties);
+    var dir = fileLocator.get(this._getSpecialFolderKey(aFolder),
+                              Components.interfaces.nsILocalFile);
+    if (aFolder != "Desktop")
+      dir.append("My Downloads");
+
+    return dir;
+  },
+
+  /**
+   * Gets the platform-specific key to be fed to the directory service for the
+   * given special folder.
+   *
+   * @param   aFolder
+   *          either of the strings "Desktop" or "Downloads"
+   * @returns the platform-specific key for the location, which may be used with
+   *          the XPCOM directory service
+   */
+  _getSpecialFolderKey: function (aFolderType)
+  {
+    if (aFolderType == "Desktop")
+      return "Desk";
+
+    if (aFolderType == "Downloads")
+      return "Home";
+
+      throw "ASSERTION FAILED: folder type should be 'Desktop' or 'Downloads'";
+  },
+
+  /**
+   * Returns the textual path of a folder in readable form.
+   */
+  _getDisplayNameOfFile: function (aFolder)
+  {
+    return aFolder ? aFolder.path : "";
+  },
+
+  /**
+   * Converts an integer into the corresponding folder.
+   *
+   * @param   aIndex
+   *          an integer
+   * @returns the Desktop folder if aIndex == 0,
+   *          the Downloads folder if aIndex == 1,
+   *          the folder stored in browser.download.dir otherwise
+   */
+  _indexToFolder: function (aIndex)
+  {
+    switch (aIndex) {
+      case 0:
+        return this._getDownloadsFolder("Desktop");
+      case 1:
+        return this._getDownloadsFolder("Downloads");
+    }
+
+    var customDirPref = document.getElementById("browser.download.dir");
+    return customDirPref.value;
+  },
+
+  /**
+   * Returns the value for the browser.download.folderList preference determined
+   * from the current value of browser.download.downloadDir.
+   */
+  writeFolderList: function ()
+  {
+    var currentDirPref = document.getElementById("browser.download.downloadDir");
+    return this._folderToIndex(currentDirPref.value);
+  },
+
+
+  // PROXY
+
+  /*
+   * Preferences:
+   *   
+   * network.proxy.type
+   * - controls what kind of proxy to use
+   *     0 direct connection, no proxy (Default)
+   *     1 manual proxy configuration
+   *     4 auto-detect proxy settings
+   * network.proxy.(protocol) 
+   * - possible protocols: http, ftp, ssl, socks, gopher
+   * - The proxy server to use for the given protocol. 
+   * - network.proxy.type must be set to 1 for this preference to take effect. 
+   * network.proxy.(protocol)_port
+   * - possible protocols: http, ftp, ssl, socks, gopher
+   * - specifies the port to use for the proxy server for the given protocol.
+   * network.proxy.no_proxies_on
+   * - list of sites or domains that should not be accessed via the proxy server.
+   * - composed of either domain elements or IPv4 address elements.
+   * - elements are separated by either a space (" ") or a comma (",")
+   * - default: localhost, 127.0.0.1
+   * network.proxy.share_proxy_settings
+   * -  this setting should always be true in callithrix
+   *      true if the HTTP proxy defined should be used as the proxy 
+   *           for SSL, FTP, SOCKS, and Gopher protocols..
+   *      false if the proxies for different protocols are set separately
+   */
+
+  /**
+   * Sets the proxy server and port settings to http protocol
+   */
+  proxyTypeChanged: function ()
+  {
+    var proxyTypePref = document.getElementById("network.proxy.type");
+
+    // Update http
+    var httpProxyURLPref = document.getElementById("network.proxy.http");
+    httpProxyURLPref.disabled = proxyTypePref.value != 1;
+    var httpProxyPortPref = document.getElementById("network.proxy.http_port");
+    httpProxyPortPref.disabled = proxyTypePref.value != 1;
+
+    // Now update the other protocols
+    this.updateProtocolPrefs();
+
+    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
+    shareProxiesPref.disabled = proxyTypePref.value != 1;
+
+    var noProxiesPref = document.getElementById("network.proxy.no_proxies_on");
+    noProxiesPref.disabled = proxyTypePref.value != 1;
+
+    return undefined;
+  },
+
+  /**
+   * Updates the proxy server and port settings to ssl, ftp, socks and gopher protocols. 
+   */
+  updateProtocolPrefs: function ()
+  {
+    var proxyTypePref = document.getElementById("network.proxy.type");
+    var shareProxiesPref = document.getElementById("network.proxy.share_proxy_settings");
+    var proxyPrefs = ["ssl", "ftp", "socks", "gopher"];
+    for (var i = 0; i < proxyPrefs.length; ++i) {
+      var proxyServerURLPref = document.getElementById("network.proxy." + proxyPrefs[i]);
+      var proxyPortPref = document.getElementById("network.proxy." + proxyPrefs[i] + "_port");
+
+      proxyServerURLPref.value = document.getElementById("network.proxy.http").value;
+      proxyPortPref.value = document.getElementById("network.proxy.http_port").value;
+
+      proxyServerURLPref.updateElements();
+      proxyPortPref.updateElements();
+      proxyServerURLPref.disabled = proxyTypePref.value != 1 || shareProxiesPref.value;
+      proxyPortPref.disabled = proxyServerURLPref.disabled;
+    }
+    return undefined;
+  }
+};
diff --git a/chrome/content/settings.xul b/chrome/content/settings.xul
new file mode 100644 (file)
index 0000000..9536ec1
--- /dev/null
@@ -0,0 +1,227 @@
+<?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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+   -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<?xml-stylesheet href="chrome://global/skin/global.css"?>
+<?xml-stylesheet href="chrome://mozapps/content/preferences/preferences.css"?>
+
+<!-- import dtd-files --> \r
+<!DOCTYPE window [\r
+<!ENTITY % settingsDTD SYSTEM "chrome://callithrix/locale/settings.dtd">\r
+%settingsDTD;\r
+]>
+
+
+<prefwindow id="SettingsDialog" windowtype="window:type"
+            xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+            title="&settingsDialog.title;"
+            style="width: &window.width; !important;">
+
+  <script src="chrome://callithrix/content/settings.js"/>
+  <script src="chrome://callithrix/content/connection.js"/>
+
+  <prefpane id="SettingsDialogPane">
+
+    <preferences>
+
+      <!-- Startup & Homepage -->
+      <preference id="browser.startup.page"
+                  name="browser.startup.page"
+                  type="int"/>
+      <preference id="browser.startup.homepage"
+                  name="browser.startup.homepage"
+                  type="wstring"/>
+
+      <!-- Downloads -->
+      <preference id="browser.download.useDownloadDir"
+                  name="browser.download.useDownloadDir"
+                  type="bool"/>
+      <preference id="browser.download.dir"
+                  name="browser.download.dir"
+                  type="file"
+                  onchange="gSettingsPane.readDownloadDirPref();"/>
+      <preference id="browser.download.downloadDir"
+                  name="browser.download.downloadDir"
+                  type="file"/>
+      <preference id="browser.download.folderList"
+                  name="browser.download.folderList"
+                  type="int"/>
+
+      <!-- Proxy -->
+      <preference id="network.proxy.type"
+                  name="network.proxy.type"
+                  type="int"
+                  onchange="gSettingsPane.proxyTypeChanged();"/>
+      <preference id="network.proxy.http"
+                  name="network.proxy.http"
+                  type="string"/>
+      <preference id="network.proxy.http_port"
+                  name="network.proxy.http_port"
+                  type="int"/>
+      <preference id="network.proxy.ftp"
+                  name="network.proxy.ftp"
+                  type="string"/>
+      <preference id="network.proxy.ftp_port"
+                  name="network.proxy.ftp_port"
+                  type="int"/>
+      <preference id="network.proxy.ssl"
+                  name="network.proxy.ssl"
+                  type="string"/>
+      <preference id="network.proxy.ssl_port"
+                  name="network.proxy.ssl_port"
+                  type="int"/>
+      <preference id="network.proxy.socks"
+                  name="network.proxy.socks"
+                  type="string"/>
+      <preference id="network.proxy.socks_port"
+                  name="network.proxy.socks_port"
+                  type="int"/>
+      <preference id="network.proxy.gopher"
+                  name="network.proxy.gopher"
+                  type="string"/>
+      <preference id="network.proxy.gopher_port"
+                  name="network.proxy.gopher_port"
+                  type="int"/>
+      <preference id="network.proxy.no_proxies_on"
+                  name="network.proxy.no_proxies_on"
+                  type="string"/>
+      <preference id="network.proxy.share_proxy_settings"
+                  name="network.proxy.share_proxy_settings"
+                  type="bool"/>
+    </preferences>
+
+
+    <stringbundle id="settingsBundle" src="chrome://callithrix/locale/settings.properties"/>
+    <stringbundle id="brandBundle" src="chrome://branding/locale/brand.properties"/>
+
+    <!-- Startup & Homepage -->
+    <groupbox id="startupGroup">
+      <caption label="&startup.label;" />
+
+      <vbox>
+        <label value="&startupPage.label;" control="browserStartupPage"/>
+        <radiogroup id="browserStartupPage" preference="browser.startup.page"
+                    onsyncfrompreference="">
+          <radio id="startupBlank" value="0" label="&startupBlankPage.label;"/>
+          <radio id="startupCustom" value="1" label="&startupHomePage.label;"/>
+        </radiogroup>
+        <grid class="indent" flex="1">
+          <columns>
+            <column/>
+            <column flex="1"/>
+          </columns>
+          <rows>
+            <row align="center">
+              <label value="&location.label;" control="browserHomePage"/>
+              <hbox align="center">
+                <textbox id="browserHomePage" class="padded" flex="1"
+                         type="autocomplete" autocompletesearch="history"
+                         preference="browser.startup.homepage"  />
+              </hbox>
+            </row>
+          </rows>
+        </grid>
+      </vbox>
+    </groupbox>
+
+
+    <!-- Downloads -->
+    <groupbox id="downloadsGroup">
+      <caption label="&downloads.label;"/>
+
+      <radiogroup id="saveWhere"
+                  preference="browser.download.useDownloadDir"
+                  onsyncfrompreference="return gSettingsPane.readUseDownloadDir();">
+        <hbox id="saveToRow">
+          <radio id="saveTo" value="true"
+                 label="&saveTo.label;"
+                 xmlns:aaa="http://www.w3.org/2005/07/aaa"
+                 aaa:labelledby="saveTo downloadFolder"/>
+          <filefield id="downloadFolder" flex="1"
+                     preference="browser.download.folderList"
+                     preference-editable="true"
+                     onsyncfrompreference="return gSettingsPane.readDownloadDirPref();"
+                     onsynctopreference="return gSettingsPane.writeFolderList()"/>
+          <button id="chooseFolder" oncommand="gSettingsPane.chooseFolder();"
+                  label="&chooseFolderWin.label;"
+                  preference="browser.download.folderList"
+                  onsynctopreference="return gSettingsPane.writeFolderList();"/>
+        </hbox>
+        <radio id="alwaysAsk" value="false"
+               label="&alwaysAsk.label;"/>
+      </radiogroup>
+    </groupbox>
+
+
+    <!-- Proxy -->
+    <groupbox id="ConnectionsGroup">
+      <caption label="&proxyTitle.label;"/>
+
+      <radiogroup id="networkProxyType" preference="network.proxy.type"
+                  onsyncfrompreference="return gSettingsPane.proxyTypeChanged();">
+        <radio value="0" label="&directTypeRadio.label;"/>
+        <radio value="4" label="&WPADTypeRadio.label;" />
+        <radio value="1" label="&manualTypeRadio.label;" />
+        <grid class="indent" flex="1">
+          <columns>
+            <column/>
+            <column flex="1"/>
+          </columns>
+          <rows>
+            <row align="center">
+              <hbox pack="end">
+                <label value="&proxy.label;" control="networkProxyHTTP"/>
+              </hbox>
+              <hbox align="center">
+                <textbox id="networkProxyHTTP" flex="1" preference="network.proxy.http"
+                         onsyncfrompreference="return gSettingsPane.updateProtocolPrefs();"/>
+                <label value="&port.label;"
+                       control="networkProxyHTTP_Port"/>
+                <textbox id="networkProxyHTTP_Port" size="5" preference="network.proxy.http_port" 
+                         onsyncfrompreference="return gSettingsPane.updateProtocolPrefs();"/>
+              </hbox>
+            </row>
+          </rows>
+        </grid>
+      </radiogroup>
+    </groupbox>
+
+
+  </prefpane>
+</prefwindow>
+
diff --git a/chrome/locale/en-US/bookmarks.dtd b/chrome/locale/en-US/bookmarks.dtd
new file mode 100644 (file)
index 0000000..8c25148
--- /dev/null
@@ -0,0 +1,55 @@
+<!-- ***** 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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+        -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<!ENTITY window.title               "Bookmarks">
+
+<!ENTITY filterPrefs.label          "Filter:">
+<!ENTITY showAll.label              "Show All">
+
+<!-- Columns -->
+<!ENTITY nameColumn.label           "Bookmark Name">
+<!ENTITY locationColumn.label       "Location">
+<!ENTITY dateColumn.label           "Added">
+
+<!ENTITY editButton.label           "Edit">
+<!ENTITY deleteButton.label         "Delete">
+<!ENTITY closeButton.label          "Close">
+
+<!-- Properties dialog -->
+<!ENTITY properties.window.title    "Properties for &quot;**bm_title**&quot;">
+<!ENTITY properties.name.label      "Name:">
+<!ENTITY properties.location.label  "Location:">
diff --git a/chrome/locale/en-US/bookmarks.properties b/chrome/locale/en-US/bookmarks.properties
new file mode 100644 (file)
index 0000000..6041f9d
--- /dev/null
@@ -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 Movial Callithrix.
+#
+# The Initial Developer of the Original Code is
+# Movial Creative Technologies Inc.
+#
+# Portions created by the Initial Developer are Copyright (C) 2009
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# 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 *****
+
+already_bookmarked=Already bookmarked
+bookmark_this=Bookmark this page
diff --git a/chrome/locale/en-US/callithrix.dtd b/chrome/locale/en-US/callithrix.dtd
new file mode 100644 (file)
index 0000000..37cf833
--- /dev/null
@@ -0,0 +1,7 @@
+<!ENTITY backButton.label "Back">
+<!ENTITY forwardButton.label  "Forward">
+<!ENTITY refreshStopButton.refresh.label "Reload">
+<!ENTITY refreshStopButton.stop.label "Stop">
+<!ENTITY settingsButton.label "Settings">
+<!ENTITY bookmarksButton.label "Bookmarks">
+<!ENTITY newTabButton.label "New Tab">
diff --git a/chrome/locale/en-US/callithrix.properties b/chrome/locale/en-US/callithrix.properties
new file mode 100644 (file)
index 0000000..6041f9d
--- /dev/null
@@ -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 Movial Callithrix.
+#
+# The Initial Developer of the Original Code is
+# Movial Creative Technologies Inc.
+#
+# Portions created by the Initial Developer are Copyright (C) 2009
+# the Initial Developer. All Rights Reserved.
+#
+# Contributor(s):
+#
+# 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 *****
+
+already_bookmarked=Already bookmarked
+bookmark_this=Bookmark this page
diff --git a/chrome/locale/en-US/preferences.properties b/chrome/locale/en-US/preferences.properties
new file mode 100644 (file)
index 0000000..9887178
--- /dev/null
@@ -0,0 +1,117 @@
+#### Main
+
+blankpage=(blank page)
+# LOCALIZATION NOTE: bookmarkjoiner is used to separate bookmark names when
+#                    multiple bookmarks have been chosen as a home page and
+#                    their names must be displayed.  (Note that there is a
+#                    trailing space in the value defined below.)
+bookmarkjoiner=, 
+choosehomepage=Choose Home Page
+choosebookmark=%brand% can set your home page to a site you have already added to your Bookmarks. Select a Bookmark below and click OK.
+choosefile=Choose a file
+
+#### Content
+
+addReader=Add New Reader...
+
+#### Security
+
+# LOCALIZATION NOTE: phishBefore uses %S to represent the name of the provider
+#                    whose privacy policy must be accepted (for enabling
+#                    check-every-page-as-I-load-it phishing protection).
+phishBeforeText=Selecting this option will send the address of web pages you are viewing to %S. To continue, please review and accept the following terms of service.
+
+setMasterPassword=Set Master Password...
+setMasterPassword_accesskey=M
+changeMasterPassword=Change Master Password...
+changeMasterPassword_accesskey=M
+
+#### Fonts
+
+labelDefaultFont=Default (%S)
+
+#### Permissions Manager
+
+cookiepermissionstext=You can specify which web sites are always or never allowed to use cookies.  Type the exact address of the site you want to manage and then click Block, Allow for Session, or Allow.
+cookiepermissionstitle=Exceptions - Cookies
+addonspermissionstext=You can specify which web sites are allowed to install add-ons. Type the exact address of the site you want to allow and then click Allow.
+addons_permissions_title=Allowed Sites - Add-ons Installation
+popuppermissionstext=You can specify which web sites are allowed to open popup windows. Type the exact address of the site you want to allow and then click Allow.
+popuppermissionstitle=Allowed Sites - Popups
+imagepermissionstext=You can specify which web sites are allowed to load images. Type the exact address of the site you want to manage and then click Block or Allow.
+imagepermissionstitle=Exceptions - Images
+invalidURI=Please enter a valid hostname
+invalidURITitle=Invalid Hostname Entered
+
+#### Master Password
+
+password_not_set=(not set)
+failed_pw_change=Unable to change Master Password.
+incorrect_pw=You did not enter the correct current Master Password. Please try again.
+pw_change_ok=Master Password successfully changed.
+pw_erased_ok=You have deleted your Master Password. 
+pw_not_wanted=Warning! You have decided not to use a Master Password.
+pw_empty_warning=Your stored web and email passwords, form data, and private keys will not be protected.
+pw_change2empty_in_fips_mode=You are currently in FIPS mode. FIPS requires a non-empty Master Password.
+pw_change_success_title=Password Change Succeeded
+pw_change_failed_title=Password Change Failed
+pw_remove_button=Remove
+
+#### Fonts
+
+# LOCALIZATION NOTE: Next two strings are for language name representations with
+#   and without the region.
+#   e.g. languageRegionCodeFormat : "French/Canada  [fr-ca]" languageCodeFormat : "French  [fr]"
+#   %1$S = language name, %2$S = region name, %3$S = language-region code
+languageRegionCodeFormat=%1$S/%2$S  [%3$S]
+#   %1$S = language name, %2$S = language-region code
+languageCodeFormat=%1$S  [%2$S]
+
+# LOCALIZATION NOTE: dpi stands for 'dots per inch'
+fontScalingResolutionFormat=%S dpi
+
+#### Downloads
+
+desktopFolderName=Desktop
+myDownloadsFolderName=My Downloads
+chooseDownloadFolderTitle=Choose Download Folder:
+
+#### Download Actions
+
+extensionNone=(NONE)
+removeButtonSingle=Remove Action
+removeButtonMultiple=Remove Actions
+removeTitleSingle=Remove Action
+removeTitleMultiple=Remove Actions
+removeMessageSingle=The selected Action will no longer be performed when files of the affected types are downloaded. Are you sure you want to remove this Action?
+removeMessageMultiple=The selected Actions will no longer be performed when files of the affected types are downloaded. Are you sure you want to remove these Actions?
+fileEnding=%S file
+saveToDisk=Save to Disk
+openWith=Open with %S
+actionsFiltered=The following Actions match your search:
+actionsAll=Automatically perform the associated Action with each of the following file types:
+
+
+#### Change Action
+
+extensionStringFormat=%S, %S
+downloadHelperNoneSelected=None Selected
+pluginHelperNoneAvailable=None Available
+fpTitleChooseApp=Select Helper Application
+fpTitleChooseDL=Select Download Folder
+
+#### Cookie Viewer
+
+hostColon=Host:
+domainColon=Domain:
+forSecureOnly=Encrypted connections only
+forAnyConnection=Any type of connection
+AtEndOfSession = at end of session
+can=Allow
+canSession=Allow for Session
+cannot=Block
+noCookieSelected=<no cookie selected>
+cookiesAll=The following cookies are stored on your computer:
+cookiesFiltered=The following cookies match your search:
+removeCookies=Remove Cookies
+removeCookie=Remove Cookie
diff --git a/chrome/locale/en-US/settings.dtd b/chrome/locale/en-US/settings.dtd
new file mode 100644 (file)
index 0000000..9bb424f
--- /dev/null
@@ -0,0 +1,65 @@
+<!-- ***** 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 Movial Callithrix.
+   -
+   - The Initial Developer of the Original Code is
+   - Movial Creative Technologies Inc.
+        -
+   - Portions created by the Initial Developer are Copyright (C) 2009
+   - the Initial Developer. All Rights Reserved.
+   -
+   - Contributors:
+   -
+   - 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 NPL, 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 NPL, the GPL or the LGPL.
+   -
+   - ***** END LICENSE BLOCK ***** -->
+
+<!-- General -->
+<!ENTITY  settingsDialog.title      "Settings">
+<!ENTITY  window.width               "37em">
+
+<!-- Startup & Homepage settings -->
+<!ENTITY  startup.label             "Startup">
+<!ENTITY  startupPage.label         "When Callithrix starts: ">
+<!ENTITY  startupBlankPage.label    "Show a blank page">
+<!ENTITY  startupHomePage.label     "Show my home page">
+<!ENTITY  location.label            "Home Page">
+
+<!-- Download settings -->
+<!ENTITY downloads.label            "Downloads">
+<!ENTITY saveTo.label               "Save files to">
+<!ENTITY chooseFolderWin.label      "Browse...">
+<!ENTITY alwaysAsk.label            "Always ask me where to save files">
+
+<!-- Proxy settings -->
+<!ENTITY  proxyTitle.label           "Configure Proxy to Access the Internet">
+<!ENTITY  directTypeRadio.label      "Direct connection to the Internet">
+<!ENTITY  WPADTypeRadio.label        "Auto-detect proxy settings for this network">
+<!ENTITY  manualTypeRadio.label      "Manual proxy configuration:">
+<!ENTITY  proxy.label                "Proxy:">
+<!ENTITY  port.label                 "Port:">
+
+
+
+
diff --git a/chrome/locale/en-US/settings.properties b/chrome/locale/en-US/settings.properties
new file mode 100644 (file)
index 0000000..cf6d865
--- /dev/null
@@ -0,0 +1,42 @@
+#### Main
+
+blankpage=(blank page)
+# LOCALIZATION NOTE: bookmarkjoiner is used to separate bookmark names when
+#                    multiple bookmarks have been chosen as a home page and
+#                    their names must be displayed.  (Note that there is a
+#                    trailing space in the value defined below.)
+bookmarkjoiner=, 
+choosehomepage=Choose Home Page
+choosebookmark=%brand% can set your home page to a site you have already added to your Bookmarks. Select a Bookmark below and click OK.
+choosefile=Choose a file
+
+#### Downloads
+
+desktopFolderName=Desktop
+myDownloadsFolderName=My Downloads
+chooseDownloadFolderTitle=Choose Download Folder:
+
+#### Download Actions
+
+extensionNone=(NONE)
+removeButtonSingle=Remove Action
+removeButtonMultiple=Remove Actions
+removeTitleSingle=Remove Action
+removeTitleMultiple=Remove Actions
+removeMessageSingle=The selected Action will no longer be performed when files of the affected types are downloaded. Are you sure you want to remove this Action?
+removeMessageMultiple=The selected Actions will no longer be performed when files of the affected types are downloaded. Are you sure you want to remove these Actions?
+fileEnding=%S file
+saveToDisk=Save to Disk
+openWith=Open with %S
+actionsFiltered=The following Actions match your search:
+actionsAll=Automatically perform the associated Action with each of the following file types:
+
+
+#### Change Action
+
+extensionStringFormat=%S, %S
+downloadHelperNoneSelected=None Selected
+pluginHelperNoneAvailable=None Available
+fpTitleChooseApp=Select Helper Application
+fpTitleChooseDL=Select Download Folder
+
diff --git a/chrome/skin/bookmarks.css b/chrome/skin/bookmarks.css
new file mode 100644 (file)
index 0000000..08b7d4b
--- /dev/null
@@ -0,0 +1,33 @@
+
+@import url("chrome://global/skin/");
+@namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");
+
+
+#bookmarkTreeBody::-moz-tree-cell-text(user)
+{
+  font-weight: bold;
+}
+
+#bookmarkTreeBody::-moz-tree-cell-text(locked)
+{
+  font-style: italic;
+}
+
+#bookmarkTree 
+{  
+  margin-top: 5px;
+  margin-bottom: 5px;
+  font-size: 18px;
+}
+
+#filterRow
+{
+  margin-top: 5px;
+  font-size: 18px;
+}
+
+button
+{
+  font-size: 18px;
+}
+
diff --git a/chrome/skin/callithrix.css b/chrome/skin/callithrix.css
new file mode 100644 (file)
index 0000000..e999920
--- /dev/null
@@ -0,0 +1,68 @@
+toolbarbutton {
+  cursor: pointer;
+}
+
+#back-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_back_36x36.png");
+}
+#back-button[disabled] {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_back_disabled_36x36.png");
+}
+
+#forward-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_forward_36x36.png");
+}
+#forward-button[disabled] {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_forward_disabled_36x36.png");
+}
+
+#refresh-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_refresh_36x36.png");
+}
+
+#settings-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_settings_36x36.png");
+}
+
+#bookmarks-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_bookmarks_36x36.png");
+}
+
+#home-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_home_36x36.png");
+}
+
+#urlbar-container {
+  -moz-box-orient: horizontal;
+  -moz-box-align: stretch;
+  font-size: 20px;
+}
+
+#favicon, #throbber {
+  -moz-margin-start: 2px;
+  width: 16px;
+  height: 16px;
+}
+
+#throbber {
+  list-style-image: url("chrome://global/skin/throbber/Throbber-small.gif");
+}
+
+#star-button {
+  -moz-margin-end: 2px;
+  list-style-image: url("chrome://callithrix/skin/icons/icon_add_favorite_30x30.png");
+  cursor: pointer;
+}
+#star-button[bookmarked] {
+  -moz-margin-end: 2px;
+  list-style-image: url("chrome://callithrix/skin/icons/icon_favorite_added_30x30.png");
+  cursor: default;
+}
+
+#go-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_go_36x36.png");
+}
+
+#stop-button {
+  list-style-image: url("chrome://callithrix/skin/icons/icon_stop_36x36.png");
+}
diff --git a/chrome/skin/downloadsOverlay.css b/chrome/skin/downloadsOverlay.css
new file mode 100644 (file)
index 0000000..9f9f5cc
--- /dev/null
@@ -0,0 +1,46 @@
+richlistitem[type="download"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-starting');
+  -moz-box-orient: vertical;
+}
+
+richlistitem[type="download"][state="0"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-downloading');
+}
+
+richlistitem[type="download"][state="1"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-done');
+}
+
+richlistitem[type="download"][state="2"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-failed');
+}
+
+richlistitem[type="download"][state="3"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-canceled');
+}
+
+richlistitem[type="download"][state="4"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-paused');
+}
+
+richlistitem[type="download"][state="6"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-blocked-parental');
+}
+
+richlistitem[type="download"][state="7"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-scanning');
+}
+
+richlistitem[type="download"][state="8"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-dirty');
+}
+
+richlistitem[type="download"][state="9"] {
+  -moz-binding: url('chrome://callithrix/content/downloadsOverlay.xml#download-blocked-policy');
+}
+
+/* Only focus buttons in the selected item*/
+richlistitem[type="download"]:not([selected="true"]) button {
+  -moz-user-focus: none;
+}
+
diff --git a/chrome/skin/icons/icon_add_favorite_30x30.png b/chrome/skin/icons/icon_add_favorite_30x30.png
new file mode 100644 (file)
index 0000000..5e7097b
Binary files /dev/null and b/chrome/skin/icons/icon_add_favorite_30x30.png differ
diff --git a/chrome/skin/icons/icon_back_36x36.png b/chrome/skin/icons/icon_back_36x36.png
new file mode 100644 (file)
index 0000000..60859e5
Binary files /dev/null and b/chrome/skin/icons/icon_back_36x36.png differ
diff --git a/chrome/skin/icons/icon_back_disabled_36x36.png b/chrome/skin/icons/icon_back_disabled_36x36.png
new file mode 100644 (file)
index 0000000..d9a478d
Binary files /dev/null and b/chrome/skin/icons/icon_back_disabled_36x36.png differ
diff --git a/chrome/skin/icons/icon_bookmarks_36x36.png b/chrome/skin/icons/icon_bookmarks_36x36.png
new file mode 100644 (file)
index 0000000..777349e
Binary files /dev/null and b/chrome/skin/icons/icon_bookmarks_36x36.png differ
diff --git a/chrome/skin/icons/icon_favorite_added_30x30.png b/chrome/skin/icons/icon_favorite_added_30x30.png
new file mode 100644 (file)
index 0000000..959c9f6
Binary files /dev/null and b/chrome/skin/icons/icon_favorite_added_30x30.png differ
diff --git a/chrome/skin/icons/icon_forward_36x36.png b/chrome/skin/icons/icon_forward_36x36.png
new file mode 100644 (file)
index 0000000..0dac6a1
Binary files /dev/null and b/chrome/skin/icons/icon_forward_36x36.png differ
diff --git a/chrome/skin/icons/icon_forward_disabled_36x36.png b/chrome/skin/icons/icon_forward_disabled_36x36.png
new file mode 100644 (file)
index 0000000..2ee5da4
Binary files /dev/null and b/chrome/skin/icons/icon_forward_disabled_36x36.png differ
diff --git a/chrome/skin/icons/icon_go_36x36.png b/chrome/skin/icons/icon_go_36x36.png
new file mode 100644 (file)
index 0000000..b4146f7
Binary files /dev/null and b/chrome/skin/icons/icon_go_36x36.png differ
diff --git a/chrome/skin/icons/icon_home_36x36.png b/chrome/skin/icons/icon_home_36x36.png
new file mode 100644 (file)
index 0000000..c74d8a6
Binary files /dev/null and b/chrome/skin/icons/icon_home_36x36.png differ
diff --git a/chrome/skin/icons/icon_refresh_36x36.png b/chrome/skin/icons/icon_refresh_36x36.png
new file mode 100644 (file)
index 0000000..b11dfc3
Binary files /dev/null and b/chrome/skin/icons/icon_refresh_36x36.png differ
diff --git a/chrome/skin/icons/icon_settings_36x36.png b/chrome/skin/icons/icon_settings_36x36.png
new file mode 100644 (file)
index 0000000..dc3dcaf
Binary files /dev/null and b/chrome/skin/icons/icon_settings_36x36.png differ
diff --git a/chrome/skin/icons/icon_stop_36x36.png b/chrome/skin/icons/icon_stop_36x36.png
new file mode 100644 (file)
index 0000000..7dd6164
Binary files /dev/null and b/chrome/skin/icons/icon_stop_36x36.png differ
diff --git a/chrome/skin/icons/icon_test_36x36_alpha_blended.png b/chrome/skin/icons/icon_test_36x36_alpha_blended.png
new file mode 100644 (file)
index 0000000..cc7c402
Binary files /dev/null and b/chrome/skin/icons/icon_test_36x36_alpha_blended.png differ
diff --git a/defaults/preferences/prefs.js b/defaults/preferences/prefs.js
new file mode 100644 (file)
index 0000000..129db2a
--- /dev/null
@@ -0,0 +1,62 @@
+pref("toolkit.defaultChromeURI", "chrome://callithrix/content/callithrix.xul");\r
+pref("browser.chromeURL", "chrome://callithrix/content/callithrix.xul");\r
+\r
+// no disk cache\r
+pref("browser.cache.disk.enable", false);\r
+pref("browser.cache.disk.capacity", 0);\r
+\r
+// small memory cache\r
+pref("browser.cache.memory.enable", true);\r
+pref("browser.cache.memory.capacity", 512);\r
+\r
+// no ssl disk cache\r
+pref("browser.cache.disk_cache_ssl", false);\r
+\r
+// Some session history\r
+pref("browser.sessionhistory.max_entries", 3);\r
+\r
+// Fastback caching - if this pref is negative, then we calculate the number\r
+// of content viewers to cache based on the amount of available memory.\r
+pref("browser.sessionhistory.max_total_viewers", 0);\r
+\r
+// Focus ring\r
+pref("browser.display.focus_ring_width",     1);\r
+pref("browser.display.focus_ring_on_anything", false);\r
+\r
+// Scrolling\r
+pref("toolkit.scrollbox.smoothScroll", true);\r
+pref("toolkit.scrollbox.scrollIncrement", 20);\r
+pref("toolkit.scrollbox.clickToScroll.scrollDelay", 150);\r
+\r
+// Enable http compression: comment this out in case of problems with 1.1\r
+// NOTE: support for "compress" has been disabled per bug 196406.\r
+pref("network.http.accept-encoding" ,"gzip,deflate");\r
+\r
+pref("network.http.pipelining"      , false);\r
+pref("network.http.pipelining.ssl"  , true); // enable pipelining over SSL\r
+pref("network.http.proxy.pipelining", false);\r
+\r
+// Max number of requests in the pipeline\r
+pref("network.http.pipelining.maxrequests" , 4);\r
+\r
+// enables the prefetch service (i.e., prefetching of <link rel="next"> URLs).\r
+pref("network.prefetch-next", true);\r
+\r
+// Zoom prefs\r
+pref("browser.zoom.full", false);\r
+pref("zoom.minPercent", 50);\r
+pref("zoom.maxPercent", 300);\r
+pref("toolkit.zoomManager.zoomValues", ".5,.75,1,1.25,1.5,2,3");\r
+\r
+// The "unresponsive script" dialog, we don't want it\r
+pref("dom.max_script_run_time", 0);\r
+\r
+pref("browser.shell.checkDefaultBrowser", false);\r
+\r
+pref("signed.applets.codebase_principal_support", true);\r
+pref("capability.principal.codebase.p0.granted", "UniversalXPConnect UniversalBrowserRead UniversalBrowserWrite UniversalPreferencesRead UniversalPreferencesWrite UniversalFileRead");\r
+pref("capability.principal.codebase.p0.id", "file://");\r
+pref("capability.principal.codebase.p0.subjectName", "");\r
+\r
+pref("network.proxy.share_proxy_settings", true);\r
+pref("browser.download.manager.retention", 2);\r