From 15238e13918a019bdc020c3eeafa5e01c810bbf1 Mon Sep 17 00:00:00 2001 From: Aleksey Lim Date: Thu, 11 Jun 2009 11:59:20 +0000 Subject: Fake v2 production branch --- diff --git a/.gitignore b/.gitignore index 35df78d..3d7607e 100644 --- a/.gitignore +++ b/.gitignore @@ -29,5 +29,3 @@ site/app/webroot/js/__utm.min.js site/app/webroot/js/jquery.addons.min.js site/vendors/product-details - -site/app/messages.po diff --git a/aslo/config-local.php b/aslo/config-local.php index dbf5d80..c67035c 100644 --- a/aslo/config-local.php +++ b/aslo/config-local.php @@ -1,5 +1,6 @@ diff --git a/aslo/config.php b/aslo/config.php index 59f5083..8cd816a 100644 --- a/aslo/config.php +++ b/aslo/config.php @@ -245,6 +245,10 @@ define('SITE_IRC', '#sugar on chat.freenode.net'); define('SITE_RELEASE_EMAIL', 'sugar-devel@lists.sugarlabs.org'); +define('SITE_RELEASE_EMAIL', 'sugar-devel@lists.sugarlabs.org'); + +define('SITE_RELEASE_EMAIL', 'sugar-devel@lists.sugarlabs.org'); + define('ADMIN_EMAIL', 'aslo-admins@sugarlabs.org'); define('EDITOR_EMAIL', 'aslo-editors@sugarlabs.org'); define('NOBODY_EMAIL', 'addons@sugarlabs.org'); @@ -256,4 +260,15 @@ define('SITE_APP', 19); // 1 define('ADDON_ACTIVITY', '1'); define('ADDON_CONTENT', '2'); + +// backward compatibility with AMO +define('ADDON_EXTENSION', '100'); +define('ADDON_THEME', '200'); +define('ADDON_DICT', '300'); +define('ADDON_SEARCH', '400'); +define('ADDON_LPAPP', '500'); +define('ADDON_LPADDON', '600'); +define('ADDON_PLUGIN', '700'); +define('ADDON_API', '800'); // not actually a type but used to identify extensions + themes + ?> diff --git a/aslo/po/aslo.pot b/aslo/po/aslo.pot index ea6f8c1..15a1d7b 100644 --- a/aslo/po/aslo.pot +++ b/aslo/po/aslo.pot @@ -16,11 +16,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. %1$s is the URL to the logo image -#: views/layouts/amo2009.thtml:242 -msgid "header_main_header_with_logo" -msgstr "\"Add-ons\" Activities" - #: controllers/developers_controller.php:445 msgid "devcp_error_mktmp_failed" msgstr "Internal problem while unpackaging bundle" @@ -1581,11 +1576,21 @@ msgstr "" "must be directed to the appropriate software vendor." #: models/addontype.php:85 -msgid "general_addontype_extension" +msgid "general_addontype_activity" msgstr "Activity" -msgid "general_addontype_extension_plural" -msgstr "Activities" +#: models/addontype.php:87 +msgid "general_addontype_content" +msgstr "Content" + +#: models/addontype.php:99 +msgid "general_addontype_lpaddon" +msgstr "Language Pack (Activity)" + +#. Plural in this context means many of the add-on type +#: models/addontype.php:125 +msgid "general_addontype_lpaddon_plural" +msgstr "Language Packs (Activity)" #. %1$s is the application name. Example: Firefox #: views/elements/header.thtml:111 views/elements/header.thtml:122 diff --git a/aslo/po/en.po b/aslo/po/en.po index ea6f8c1..15a1d7b 100644 --- a/aslo/po/en.po +++ b/aslo/po/en.po @@ -16,11 +16,6 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -#. %1$s is the URL to the logo image -#: views/layouts/amo2009.thtml:242 -msgid "header_main_header_with_logo" -msgstr "\"Add-ons\" Activities" - #: controllers/developers_controller.php:445 msgid "devcp_error_mktmp_failed" msgstr "Internal problem while unpackaging bundle" @@ -1581,11 +1576,21 @@ msgstr "" "must be directed to the appropriate software vendor." #: models/addontype.php:85 -msgid "general_addontype_extension" +msgid "general_addontype_activity" msgstr "Activity" -msgid "general_addontype_extension_plural" -msgstr "Activities" +#: models/addontype.php:87 +msgid "general_addontype_content" +msgstr "Content" + +#: models/addontype.php:99 +msgid "general_addontype_lpaddon" +msgstr "Language Pack (Activity)" + +#. Plural in this context means many of the add-on type +#: models/addontype.php:125 +msgid "general_addontype_lpaddon_plural" +msgstr "Language Packs (Activity)" #. %1$s is the application name. Example: Firefox #: views/elements/header.thtml:111 views/elements/header.thtml:122 diff --git a/aslo/sql/sugar-stub-data.sql b/aslo/sql/sugar-stub-data.sql index 749b4ba..5c13fd4 100644 --- a/aslo/sql/sugar-stub-data.sql +++ b/aslo/sql/sugar-stub-data.sql @@ -20,23 +20,22 @@ INSERT INTO `users` (`id`, `email`, `password`, `firstname`, `lastname`, `nickna (2, 'editor@sugarlabs.org', '098f6bcd4621d373cade4e832627b4f6', 'editor', 'editor', 'editor', 0, 1, 'http://wiki.sugarlabs.org', '', now(), now(), NULL), (3, 'developer@sugarlabs.org', '098f6bcd4621d373cade4e832627b4f6', 'developer', 'developer', 'developer', 0, 1, 'http://wiki.sugarlabs.org', '', now(), now(), NULL); --- Create Sugar application, 1 -DELETE from applications; +-- Create Sugar application, 19 insert into applications values -(1, '{3ca105e0-2280-4897-99a0-c277d1b733d2}', 50000, NULL, '', 50001, 1, now(), now()) +(19, '{3ca105e0-2280-4897-99a0-c277d1b733d2}', 50000, NULL, '', 50001, 1, now(), now()) ; INSERT INTO tags (id, name, description, addontype_id, application_id, created, modified, weight) VALUES -(100, 50002, 50003, 1, 1, now(), now(), 0), -(101, 50004, 50005, 1, 1, now(), now(), 0), -(102, 50006, 50007, 1, 1, now(), now(), 0), -(103, 50008, 50009, 1, 1, now(), now(), 0), -(104, 50010, 50011, 1, 1, now(), now(), 0) +(100, 50002, 50003, 1, 19, now(), now(), 0), +(101, 50004, 50005, 1, 19, now(), now(), 0), +(102, 50006, 50007, 1, 19, now(), now(), 0), +(103, 50008, 50009, 1, 19, now(), now(), 0), +(104, 50010, 50011, 1, 19, now(), now(), 0) ; INSERT INTO `appversions` (`id`, `application_id`, `version`, `created`, `modified`) VALUES -(100, 1, '0.82', now(), now()), -(101, 1, '0.84', now(), now()) +(100, 19, '0.82', now(), now()), +(101, 19, '0.84', now(), now()) ; INSERT INTO `platforms` (`id`, `name`, `shortname`, `icondata`, `icontype`, `created`, `modified`) VALUES @@ -54,7 +53,7 @@ INSERT INTO `translations` (`id`, `locale`, `localized_string`, `created`, `modi (119, 'en-US', 'mips', now(), now()), (120, 'en-US', 'ARM', now(), now()), (121, 'en-US', 'arm', now(), now()), -(50000, 'en-US', 'Sugar Platform', now(), now()), +(50000, 'en-US', 'Sugar', now(), now()), (50001, 'en-US', 'sugar', now(), now()), (50002, 'en-US', 'Games', now(), now()), (50003, 'en-US', 'games', now(), now()), diff --git a/bandwagon/build.sh b/bandwagon/build.sh index e76a01a..3846059 100755 --- a/bandwagon/build.sh +++ b/bandwagon/build.sh @@ -1,9 +1,7 @@ #!/bin/sh -mkdir -p chrome; [ -f bandwagon.xpi ] && rm bandwagon.xpi; -[ -f chrome/bandwagon.jar ] && rm chrome/bandwagon.jar; +[ -f bandwagon.jar ] && rm bandwagon.jar; zip -r0 bandwagon.jar content locale skin -x \*.svn/* -x \*.zip -x \*.db -x \*.xcf -x \*.\*~ -x \*.DS_Store; -mv bandwagon.jar chrome/ -zip -r9 bandwagon.xpi chrome.manifest install.rdf defaults/ chrome/ components/ -x \*.svn/* -x \*.DS_Store; +zip -r9 bandwagon.xpi chrome.manifest install.rdf defaults/ bandwagon.jar components/ -x \*.svn/* -x \*.DS_Store; printf "build finished.\n"; diff --git a/bandwagon/chrome.manifest b/bandwagon/chrome.manifest index 1567fdf..99d2cf5 100644 --- a/bandwagon/chrome.manifest +++ b/bandwagon/chrome.manifest @@ -1,35 +1,6 @@ -content bandwagon jar:chrome/bandwagon.jar!/content/ - -#locale bandwagon ar jar:chrome/bandwagon.jar!/locale/ar/ -locale bandwagon ca jar:chrome/bandwagon.jar!/locale/ca/ -locale bandwagon cs jar:chrome/bandwagon.jar!/locale/cs/ -locale bandwagon da jar:chrome/bandwagon.jar!/locale/da/ -locale bandwagon de jar:chrome/bandwagon.jar!/locale/de/ -locale bandwagon el-GR jar:chrome/bandwagon.jar!/locale/el-GR/ -locale bandwagon en-US jar:chrome/bandwagon.jar!/locale/en-US/ -locale bandwagon es-ES jar:chrome/bandwagon.jar!/locale/es-ES/ -locale bandwagon fa jar:chrome/bandwagon.jar!/locale/fa/ -locale bandwagon fr jar:chrome/bandwagon.jar!/locale/fr/ -locale bandwagon fy-NL jar:chrome/bandwagon.jar!/locale/fy-NL/ -locale bandwagon he jar:chrome/bandwagon.jar!/locale/he/ -locale bandwagon id jar:chrome/bandwagon.jar!/locale/id/ -locale bandwagon it jar:chrome/bandwagon.jar!/locale/it/ -#locale bandwagon ja jar:chrome/bandwagon.jar!/locale/ja/ -locale bandwagon nl jar:chrome/bandwagon.jar!/locale/nl/ -locale bandwagon pl jar:chrome/bandwagon.jar!/locale/pl/ -locale bandwagon pt-BR jar:chrome/bandwagon.jar!/locale/pt-BR/ -locale bandwagon pt-PT jar:chrome/bandwagon.jar!/locale/pt-PT/ -locale bandwagon ro jar:chrome/bandwagon.jar!/locale/ro/ -locale bandwagon ru jar:chrome/bandwagon.jar!/locale/ru/ -locale bandwagon sk jar:chrome/bandwagon.jar!/locale/sk/ -locale bandwagon sq jar:chrome/bandwagon.jar!/locale/sq/ -locale bandwagon sv-SE jar:chrome/bandwagon.jar!/locale/sv-SE/ -#locale bandwagon uk jar:chrome/bandwagon.jar!/locale/uk/ -locale bandwagon vi jar:chrome/bandwagon.jar!/locale/vi/ -locale bandwagon zh-CN jar:chrome/bandwagon.jar!/locale/zh-CN/ -locale bandwagon zh-TW jar:chrome/bandwagon.jar!/locale/zh-TW/ - -skin bandwagon classic/1.0 jar:chrome/bandwagon.jar!/skin/ +content bandwagon jar:bandwagon.jar!/content/ +locale bandwagon en-US jar:bandwagon.jar!/locale/en-US/ +skin bandwagon classic/1.0 jar:bandwagon.jar!/skin/ overlay chrome://browser/content/browser.xul chrome://bandwagon/content/ui/overlays/browserOverlay.xul overlay chrome://mozapps/content/extensions/extensions.xul chrome://bandwagon/content/ui/overlays/extensionsOverlay.xul @@ -39,13 +10,3 @@ override chrome://bandwagon/skin/browserOverlay.css chrome://bandwagon/skin/p override chrome://bandwagon/skin/browserOverlay.css chrome://bandwagon/skin/platform/mac/browserOverlay.css os=Darwin override chrome://bandwagon/skin/browserOverlay.css chrome://bandwagon/skin/platform/xp/browserOverlay.css os=WINNT osversion<=5.1 override chrome://bandwagon/skin/browserOverlay.css chrome://bandwagon/skin/platform/vista/browserOverlay.css os=WINNT osversion>=6 - -override chrome://bandwagon/skin/settingsIcons.css chrome://bandwagon/skin/platform/linux/settingsIcons.css os=Linux -override chrome://bandwagon/skin/settingsIcons.css chrome://bandwagon/skin/platform/mac/settingsIcons.css os=Darwin -override chrome://bandwagon/skin/settingsIcons.css chrome://bandwagon/skin/platform/xp/settingsIcons.css os=WINNT osversion<=5.1 -override chrome://bandwagon/skin/settingsIcons.css chrome://bandwagon/skin/platform/vista/settingsIcons.css os=WINNT osversion>=6 - -override chrome://bandwagon/skin/extensionsOverlayIcons.css chrome://bandwagon/skin/platform/linux/extensionsOverlayIcons.css os=Linux -override chrome://bandwagon/skin/extensionsOverlayIcons.css chrome://bandwagon/skin/platform/mac/extensionsOverlayIcons.css os=Darwin -override chrome://bandwagon/skin/extensionsOverlayIcons.css chrome://bandwagon/skin/platform/xp/extensionsOverlayIcons.css os=WINNT osversion<=5.1 -override chrome://bandwagon/skin/extensionsOverlayIcons.css chrome://bandwagon/skin/platform/vista/extensionsOverlayIcons.css os=WINNT osversion>=6 diff --git a/bandwagon/components/bandwagon-service.js b/bandwagon/components/bandwagon-service.js index 3e22c3b..8c484cd 100644 --- a/bandwagon/components/bandwagon-service.js +++ b/bandwagon/components/bandwagon-service.js @@ -59,31 +59,13 @@ const nsIFile = Ci.nsIFile; const nsIObserverService = Ci.nsIObserverService; const nsICookieManager = Ci.nsICookieManager; + var Bandwagon; var bandwagonService; -var gEmGUID; -var gUninstallObserverInited = false; - -/* Restore settings added or changed by the extension: - * - extension preferences - * - logins stored in the Login Manager? - */ -function cleanupSettings() -{ - // Cleanup preferences - var prefs = Components.classes["@mozilla.org/preferences-service;1"] - .getService(Components.interfaces.nsIPrefBranch); - try { - prefs.deleteBranch("extensions.bandwagon"); - } - catch(e) {} -} - function BandwagonService() { this.wrappedJSObject = this; - gEmGUID = "sharing@addons.mozilla.org"; } BandwagonService.prototype = { @@ -94,7 +76,6 @@ BandwagonService.prototype = { _service: null, _collectionUpdateObservers: [], _collectionListChangeObservers: [], - _authenticationStatusChangeObservers: [], _storageConnection: null, _collectionFactory: null, _collectionUpdateTimer: null, @@ -121,8 +102,6 @@ BandwagonService.prototype = { Bandwagon.Logger.info("Initializing Bandwagon"); - this._initAMOHost(); - // init rpc service this._service = new Bandwagon.RPC.Service(); @@ -131,6 +110,7 @@ BandwagonService.prototype = { this._service.registerObserver(this._getServiceDocumentObserver); this.registerCollectionUpdateObserver(this._collectionUpdateObserver); + // init sqlite storage (also creating tables in sqlite if needed). create factory objects. this._initStorage(); @@ -143,60 +123,14 @@ BandwagonService.prototype = { this.firstrun(); } - // storage initialized, tables created - open the collections and service document - - this._initCollections(); - - // start the update timer + // storage initialized, tables created - open the collections - this._initUpdateTimer(); - - // observe when the app shuts down so we can uninit - - ObserverService.getService(nsIObserverService).addObserver(this._bwObserver, "quit-application", false); - - // kick off the auto-publish functionality - - this.autopublishExtensions(); - - this._initialized = true; - - Bandwagon.Logger.info("Bandwagon has been initialized"); - }, - - /** - * Update "constants" to reflect amo_host in preferences - */ - _initAMOHost: function() - { - var amoHost = Bandwagon.Preferences.getPreference("amo_host"); - - Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_DOCUMENT = Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_DOCUMENT.replace("%%AMO_HOST%%", amoHost); - Bandwagon.LOGINPANE_DO_NEW_ACCOUNT = Bandwagon.LOGINPANE_DO_NEW_ACCOUNT.replace("%%AMO_HOST%%", amoHost); - Bandwagon.COLLECTIONSPANE_DO_SUBSCRIBE_URL = Bandwagon.COLLECTIONSPANE_DO_SUBSCRIBE_URL.replace("%%AMO_HOST%%", amoHost); - Bandwagon.COLLECTIONSPANE_DO_NEW_COLLECTION_URL = Bandwagon.COLLECTIONSPANE_DO_NEW_COLLECTION_URL.replace("%%AMO_HOST%%", amoHost); - Bandwagon.FIRSTRUN_LANDING_PAGE = Bandwagon.FIRSTRUN_LANDING_PAGE.replace("%%AMO_HOST%%", amoHost); - Bandwagon.AMO_AUTH_COOKIE_HOST = Bandwagon.AMO_AUTH_COOKIE_HOST.replace("%%AMO_HOST%%", amoHost); - }, - - _initCollections: function() - { var storageCollections = this._collectionFactory.openCollections(); for (var id in storageCollections) { this.collections[id] = storageCollections[id]; this.collections[id].setAllNotified(); - - if (this.collections[id].isLocalAutoPublisher()) - { - this.collections[id].autoPublishExtensions = Bandwagon.Preferences.getPreference("local.autopublisher.publish.extensions"); - this.collections[id].autoPublishThemes = Bandwagon.Preferences.getPreference("local.autopublisher.publish.themes"); - this.collections[id].autoPublishDicts = Bandwagon.Preferences.getPreference("local.autopublisher.publish.dictionaries"); - this.collections[id].autoPublishLangPacks = Bandwagon.Preferences.getPreference("local.autopublisher.publish.language.packs"); - this.collections[id].autoPublishDisabled = !Bandwagon.Preferences.getPreference("local.autopublisher.only.publish.enabled"); - } - Bandwagon.Logger.debug("opened collection from storage: " + id); } @@ -208,10 +142,9 @@ BandwagonService.prototype = { // no service document in storage, we never had it or we've lost it - go fetch it this.updateCollectionsList(); } - }, - _initUpdateTimer: function() - { + // start the update timer + this._bwObserver = { observe: function(aSubject, aTopic, aData) @@ -230,19 +163,27 @@ BandwagonService.prototype = { this._collectionUpdateTimer = Timer.createInstance(nsITimer); this._collectionUpdateTimer.init( this._bwObserver, - (Bandwagon.Preferences.getPreference("debug")?120*1000:Bandwagon.COLLECTION_UPDATE_TIMER_DELAY*1000), + (Bandwagon.Preferences.getPreference("debug")?30*1000:Bandwagon.COLLECTION_UPDATE_TIMER_DELAY*1000), nsITimer.TYPE_REPEATING_SLACK ); + + // observe when the app shuts down so we can uninit + + ObserverService.getService(nsIObserverService).addObserver(this._bwObserver, "quit-application", false); + + // kick off the auto-publish functionality + + this._autopublishExtensions(); + + this._initialized = true; + + Bandwagon.Logger.info("Bandwagon has been initialized"); }, uninit: function() { this._collectionUpdateTimer = null; this.commitAll(); - this._service = null; - this._collectionFactory = null; - Bandwagon = null; - bandwagonService = null; }, getLocalAutoPublisher: function() @@ -258,10 +199,8 @@ BandwagonService.prototype = { return null; }, - autopublishExtensions: function(callback) + _autopublishExtensions: function() { - Bandwagon.Logger.debug("in autopublishExtensions()"); - var localAutoPublisher = bandwagonService.getLocalAutoPublisher(); if (localAutoPublisher == null) @@ -270,74 +209,12 @@ BandwagonService.prototype = { return; } - var internalCallback = function(event) - { - if (!event.isError()) - { - bandwagonService._notifyCollectionUpdateObservers(localAutoPublisher); - } - - if (callback) - { - callback(event); - } - } - var installedExtensions = Bandwagon.Util.getInstalledExtensions(); var autopublishedExtensions = Bandwagon.Preferences.getPreferenceList("autopublished.extensions"); var willAutopublishExtensions = []; for (var i=0; i 0) { for (var i=0; i0?false:true); } @@ -602,6 +534,8 @@ Bandwagon.Factory.CollectionFactory.prototype._commitCollectionLink = function(c { statement.reset(); } + + } Bandwagon.Factory.CollectionFactory.prototype._commitAddon = function(collection, addon) diff --git a/bandwagon/content/scripts/model/addon.js b/bandwagon/content/scripts/model/addon.js index abf4634..5ef72b9 100644 --- a/bandwagon/content/scripts/model/addon.js +++ b/bandwagon/content/scripts/model/addon.js @@ -83,27 +83,10 @@ Bandwagon.Model.Addon.INSTALL_NO_ADDON_IS_FOR_OLDER_VERSION = 2; Bandwagon.Model.Addon.INSTALL_NO_UPGRADE_TO_USE_THIS_VERSION = 3; Bandwagon.Model.Addon.INSTALL_NO_MUST_DOWNLOAD_BETA = 4; Bandwagon.Model.Addon.INSTALL_NO_NOT_COMPATIBLE_OS = 5; -Bandwagon.Model.Addon.INSTALL_NO_IS_EXPERIMENTAL = 6; - -Bandwagon.Model.Addon.STATUS_PUBLIC = 4; -Bandwagon.Model.Addon.STATUS_SANDBOX = 1; Bandwagon.Model.Addon.prototype.canInstall = function(env) { - // chec is the extension experimental - - if (this.status == Bandwagon.Model.Addon.STATUS_SANDBOX) - { - var details = - { - type: Bandwagon.Model.Addon.INSTALL_NO_IS_EXPERIMENTAL, - requiredVersion: "" - }; - - return details; - } - - // check is the extension compatible with this os + // check is the extension compatible with this os if (!this.getInstaller(env.os)) { @@ -298,8 +281,8 @@ Bandwagon.Model.Addon.prototype.unserialize = function(xaddon) if (!comment0Author.match(/\w/)) comment0Author = "Unknown"; - //if (comment0Comment.match(/\w/)) - this.comments.push({comment: comment0Comment, author: comment0Author}); + if (comment0Comment.match(/\w/)) + this.comments.push({comment: comment0Comment, author: comment0Author}); } diff --git a/bandwagon/content/scripts/model/collection.js b/bandwagon/content/scripts/model/collection.js index c156198..27a20e7 100644 --- a/bandwagon/content/scripts/model/collection.js +++ b/bandwagon/content/scripts/model/collection.js @@ -59,11 +59,7 @@ Bandwagon.Model.Collection = function() this.showNotifications = -1; // default is to use global setting this.addonsPerPage = -1; // default is to use global setting - this.autoPublishExtensions = true; - this.autoPublishThemes = true; - this.autoPublishDicts = true; - this.autoPublishLangPacks = true; - this.autoPublishDisabled = false; + //this.preview = false; this.status = this.STATUS_NEW; this.type = this.TYPE_NORMAL; @@ -175,7 +171,7 @@ Bandwagon.Model.Collection.prototype.isLocalAutoPublisher = function() if (this.name == "") return false; - return (this.Bandwagon.Preferences.getPreference("local.autopublisher") == this.resourceURL); + return (this.Bandwagon.Preferences.getPreference("local.autopublisher") == this.name); } Bandwagon.Model.Collection.prototype.toString = function() @@ -193,7 +189,8 @@ Bandwagon.Model.Collection.prototype.equals = function(other) Bandwagon.Model.Collection.prototype.unserialize = function(xcollection) { - var baseURL = xcollection.@xmlbase.toString(); + var xmlns = new Namespace('http://www.w3.org/XML/1998/namespace'); + var baseURL = xcollection.@xmlns::base.toString(); //this.resourceURL = baseURL + "/" + xcollection.attribute("href").toString(); @@ -226,23 +223,10 @@ Bandwagon.Model.Collection.prototype.unserialize = function(xcollection) { this.addons[addon.guid] = addon; } - - this.addons[addon.guid].seen = true; - } - } - - for (var id in this.addons) - { - if (this.addons[id].seen != true) - { - delete this.addons[id]; - continue; } - - this.addons[id].seen = false; } - var linkBaseURL = xcollection.links.@xmlbase.toString(); + var linkBaseURL = xcollection.links.@xmlns::base.toString(); for each (var xlink in xcollection.links.link) { diff --git a/bandwagon/content/scripts/model/serviceDocument.js b/bandwagon/content/scripts/model/serviceDocument.js index fc29a50..9d96780 100644 --- a/bandwagon/content/scripts/model/serviceDocument.js +++ b/bandwagon/content/scripts/model/serviceDocument.js @@ -46,7 +46,8 @@ Bandwagon.Model.ServiceDocument = function() Bandwagon.Model.ServiceDocument.prototype.unserialize = function(xsharing) { - var baseURL = xsharing.@xmlbase.toString(); + var xmlns = new Namespace('http://www.w3.org/XML/1998/namespace'); + var baseURL = xsharing.@xmlns::base.toString(); // resource urls @@ -73,7 +74,6 @@ Bandwagon.Model.ServiceDocument.prototype.unserialize = function(xsharing) collection.addonsResourceURL = baseURL + "/" + xcollection.addons.attribute("href").toString(); - if (collection.subscribed) - this.collections.push(collection); + this.collections.push(collection); } } diff --git a/bandwagon/content/scripts/prefs.js b/bandwagon/content/scripts/prefs.js index 85862db..9485753 100644 --- a/bandwagon/content/scripts/prefs.js +++ b/bandwagon/content/scripts/prefs.js @@ -139,7 +139,7 @@ Bandwagon.Preferences.notifyObservers = function(data) .notifyObservers(null, "nsPref:changed", data); } -Bandwagon.Preferences.getGlobalPreference = function(name, failSilently) +Bandwagon.Preferences.getGlobalPreference = function(name) { var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]. getService(Components.interfaces.nsIPrefService); @@ -162,42 +162,19 @@ Bandwagon.Preferences.getGlobalPreference = function(name, failSilently) { val = prefSvc.getCharPref(name); } - else if (failSilently == undefined || failSilently == false) + else { - Bandwagon.Logger.error("Invalid pref: " + name); + Bandwagon.Logger.error("Invalid pref: " + name); } } catch (e) { - if (failSilently == undefined || failSilently == false) - Bandwagon.Logger.error(e); - + Bandwagon.Logger.error(e); return null; } return val; -} - -Bandwagon.Preferences.addGlobalObserver = function(observer, branchName) -{ - var prefService = Components.classes["@mozilla.org/preferences-service;1"] - .getService(Components.interfaces.nsIPrefService); - - var branch = prefService.getBranch(branchName); - branch.QueryInterface(Components.interfaces.nsIPrefBranch2); - - branch.addObserver("", observer, false); -} - -Bandwagon.Preferences.removeGlobalObserver = function(observer, branchName) -{ - var prefService = Components.classes["@mozilla.org/preferences-service;1"] - .getService(Components.interfaces.nsIPrefService); - - var branch = prefService.getBranch(branchName); - branch.QueryInterface(Components.interfaces.nsIPrefBranch2); - branch.removeObserver("", observer); } Bandwagon.Preferences._getPrefService = function() diff --git a/bandwagon/content/scripts/rpc/constants.js b/bandwagon/content/scripts/rpc/constants.js index 3676bed..37b1836 100644 --- a/bandwagon/content/scripts/rpc/constants.js +++ b/bandwagon/content/scripts/rpc/constants.js @@ -37,7 +37,7 @@ Bandwagon.RPC.Constants = new function() { - this.BANDWAGON_RPC_SERVICE_DOCUMENT = "https://%%AMO_HOST%%/en-US/firefox/api/1.3/sharing/"; + this.BANDWAGON_RPC_SERVICE_DOCUMENT = "https://bandwagon.stage.mozilla.com/en-US/firefox/api/1.3/sharing"; this.BANDWAGON_RPC_ENABLE_CACHE_BUSTER = 1; @@ -48,10 +48,6 @@ Bandwagon.RPC.Constants = new function() this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_REMOVE_ADDON_FROM_COLLECTION_COMPLETE = 500; this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_NEW_COLLECTION_COMPLETE = 600; this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_DELETE_COLLECTION_COMPLETE = 700; - this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_GET_AUTH_DOCUMENT_COMPLETE = 800; - this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_UNSUBSCRIBE_FROM_COLLECTION_COMPLETE = 900; - this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_SUBSCRIBE_TO_COLLECTION_COMPLETE = 1000; - this.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_UPDATE_COLLECTION_COMPLETE = 1100; // xhr layer constants diff --git a/bandwagon/content/scripts/rpc/event.js b/bandwagon/content/scripts/rpc/event.js index ae8e165..a388f3a 100644 --- a/bandwagon/content/scripts/rpc/event.js +++ b/bandwagon/content/scripts/rpc/event.js @@ -39,16 +39,16 @@ Bandwagon.RPC.Event = function(type, result, response) { this.Bandwagon = Bandwagon; - // public instance variables + // public instance variables this._type = type; - this._result = result; - this._response = response; + this._result = result; + this._response = response; this.error = null; } Bandwagon.RPC.Event.prototype.isError = function() { - return this._result != this.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_SUCCESS; + return this._result != this.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_SUCCESS; } Bandwagon.RPC.Event.prototype.setError = function(error) diff --git a/bandwagon/content/scripts/rpc/net.js b/bandwagon/content/scripts/rpc/net.js index 7a2c2a8..21b7475 100644 --- a/bandwagon/content/scripts/rpc/net.js +++ b/bandwagon/content/scripts/rpc/net.js @@ -53,11 +53,18 @@ Bandwagon.RPC.Net = function(Bandwagon, Components) this._queryString = ''; this._postData = ''; this._type = null; - this._headers = {}; this._request = null; this._logger = null; + /* + this.release = function() { + this._request = null; + this.onComplete = null; + this.logger = null; + } + */ + this.finished = function(result, response, request) { this._logger.debug('Bandwagon.RPC.Net.finished: ' + this.id + ': finished'); @@ -65,11 +72,11 @@ Bandwagon.RPC.Net = function(Bandwagon, Components) this.onComplete(this, result, response, this._type, request); }; - this.failed = function(errorCode, errorMessage, data) + this.failed = function(errorCode, errorMessage) { this._logger.debug('Bandwagon.RPC.Net.failed: ' + this.id + ': failed'); this.status = this.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_FINISHED; - var response = {errorCode: errorCode, errorMessage: errorMessage, data: data}; + var response = {errorCode: errorCode, errorMessage: errorMessage}; this.onComplete(this, this.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_FAILURE, response, this._type, null); }; @@ -107,15 +114,14 @@ Bandwagon.RPC.Net = function(Bandwagon, Components) try { + // parse xml here instead, put in response var var xmlStr = rpcnetrequest.responseText; - // dave@briks: The following hacks are workarounds for E4X - // bugs/features. If anyone knows the dark secrets of namespace - // support in e4x please let me know! - + // workaround for E4X bugs/features xmlStr = xmlStr.replace(/^<\?xml\s+version\s*=\s*(["'])[^\1]+\1[^?]*\?>/, ""); // bug 336551 - xmlStr = xmlStr.replace(/xmlns="http:\/\/addons.mozilla.org\/"/gi, ""); - xmlStr = xmlStr.replace(/xml:base=/gi, "xmlbase="); + + //default xml namespace = 'http://addons.mozilla.org/'; + xmlStr = xmlStr.replace(/xmlns="http:\/\/addons.mozilla.org\/"/, ""); response = new XML(xmlStr); @@ -145,7 +151,7 @@ Bandwagon.RPC.Net = function(Bandwagon, Components) else { // application error (bad xml) - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_XML, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_XML, lastErr); return; } } @@ -154,53 +160,54 @@ Bandwagon.RPC.Net = function(Bandwagon, Components) try { - lastErr = (response.attribute("reason")?response.attribute("reason"):"?"); + // TODO what form does bandwagon rpc error take? + lastErr = response.message; rpcnet._logger.debug('Bandwagon.RPC.Net.send.onreadystatechange: ' + rpcnet.id + ": completed, response error message = '" + lastErr + "'"); } catch (e) { - rpcnet._logger.debug('Bandwagon.RPC.Net.send.onreadystatechange: ' + rpcnet.id + ": have an error status code (" + status + "), but there is no error message in the XML response"); + rpcnet._logger.debug('Bandwagon.RPC.Net.send.onreadystatechange: ' + rpcnet.id + ": have an error status code, but there is no error message in the XML response"); lastErr = null; } if (status == 400) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_REQUEST, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_REQUEST, lastErr); return; } else if (status == 401) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_UNAUTHORIZED, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_UNAUTHORIZED, lastErr); return; } - else if (status == 403) + else if (status == 403) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_FORBIDDEN, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_FORBIDDEN, lastErr); return; } else if (status == 404) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_NOT_FOUND, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_NOT_FOUND, lastErr); return; } else if (status == 409) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_CONFLICT, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_CONFLICT, lastErr); return; } else if (status == 422) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_CONTEXT, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_BAD_CONTEXT, lastErr); return; } else if (status == 500) { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_INTERNAL_SERVER_ERROR, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_INTERNAL_SERVER_ERROR, lastErr); return; } else { - rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_CRITICAL_ERROR, lastErr, response); + rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_CRITICAL_ERROR, lastErr); return; } }; @@ -227,7 +234,7 @@ Bandwagon.RPC.Net.prototype.setPostData = function(args) for (var i in args) { - this._postData += this.Bandwagon.Util.encodeURL(i) + '=' + this.Bandwagon.Util.encodeURL(args[i]) + '&'; + this._postData += encodeURIComponent(i) + '=' + encodeURIComponent(args[i]) + '&'; } if ('&' == this._postData.charAt(this._postData.length-1)) @@ -242,7 +249,7 @@ Bandwagon.RPC.Net.prototype.setArguments = function(args) for (var i in args) { - this._queryString += this.Bandwagon.Util.encodeURL(i) + '=' + this.Bandwagon.Util.encodeURL(args[i]) + '&'; + this._queryString += encodeURIComponent(i) + '=' + encodeURIComponent(args[i]) + '&'; } if ('&' == this._queryString.charAt(this._queryString.length-1)) @@ -261,10 +268,6 @@ Bandwagon.RPC.Net.prototype.setMethod = function(method) { this._method = 'DELETE'; } - else if (method == 'PUT') - { - this._method = 'PUT'; - } else { this._method = 'GET'; @@ -273,11 +276,6 @@ Bandwagon.RPC.Net.prototype.setMethod = function(method) this._method = method; } -Bandwagon.RPC.Net.prototype.setHeader = function(header, value) -{ - this._headers[header] = value; -} - Bandwagon.RPC.Net.prototype.setCredentials = function(username, password) { this._basicAuthUsername = username; @@ -296,18 +294,12 @@ Bandwagon.RPC.Net.prototype.send = function() if (!rpcnetrequest) { rpcnet.failed(rpcnet.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_ERROR_XHR_CREATE); } - rpcnetrequest.mozBackgroundRequest = true; - var postData = null; var url = rpcnet._url; - if (('POST' == rpcnet._method || 'PUT' == rpcnet._method) - && rpcnet._postData.length > 0) - { + if ('POST' == rpcnet._method && rpcnet._postData.length > 0) { postData = rpcnet._postData; - } - else if (rpcnet._queryString && (rpcnet._queryString.length > 0)) - { + } else if (rpcnet._queryString && (rpcnet._queryString.length > 0)) { url += "?" + rpcnet._queryString; } @@ -329,16 +321,11 @@ Bandwagon.RPC.Net.prototype.send = function() rpcnetrequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); } - for (var header in rpcnet._headers) - { - //rpcnet._logger.debug('Bandwagon.RPC.Net.send: ' + rpcnet.id + ': adding custom header ' + header + ': ' + rpcnet._headers[header]); - rpcnetrequest.setRequestHeader(header, rpcnet._headers[header]); - } - + /* not needed for now if ('' != rpcnet._basicAuthUsername) { - rpcnet._logger.debug('Bandwagon.RPC.Net.send: using credentials for ' + rpcnet._basicAuthUsername); rpcnetrequest.setRequestHeader('Authorization', 'Basic ' + btoa(rpcnet._basicAuthUsername + ':' + rpcnet._basicAuthPassword)); } + */ rpcnetrequest.setRequestHeader("If-Modified-Since", "Sat, 1 Jan 2005 00:00:00 GMT"); diff --git a/bandwagon/content/scripts/rpc/service.js b/bandwagon/content/scripts/rpc/service.js index 83c562e..9251f59 100644 --- a/bandwagon/content/scripts/rpc/service.js +++ b/bandwagon/content/scripts/rpc/service.js @@ -61,9 +61,8 @@ Bandwagon.RPC.Service = function() if (result == service.Bandwagon.RPC.Constants.BANDWAGON_RPC_NET_FAILURE) { // response is error code - service._logger.debug("Bandwagon.RPC.Service: complete is error with error code: " + response.errorCode + ", message: " + response.errorMessage); + service._logger.debug("Bandwagon.RPC.Service: complete is error with error code: " + response.errorCode + ", message: " + response.errorMessage) event.error = new service.Bandwagon.RPC.Error(response.errorCode, response.errorMessage); - event._response = response.data; } // CALLBACK TYPE 1: if we have a callback, call it @@ -101,9 +100,9 @@ Bandwagon.RPC.Service = function() } } } - }; + }; - this.rpcSend = function(type, callback, action, method, data, url, credentials) + this.rpcSend = function(type, callback, action, method, data, url) { var service = this; @@ -125,11 +124,6 @@ Bandwagon.RPC.Service = function() { rpcnet.setMethod("DELETE"); } - else if (method == "PUT") - { - rpcnet.setMethod("PUT"); - rpcnet.setPostData(data); - } else { rpcnet.setMethod("GET"); @@ -143,13 +137,7 @@ Bandwagon.RPC.Service = function() } rpcnet.setArguments(data); - } - - rpcnet.setHeader("X-API-Auth", service.Bandwagon.Preferences.getPreference(service.Bandwagon.PREF_AUTH_TOKEN)); - if (credentials) - { - rpcnet.setCredentials(credentials.login, credentials.password); } rpcnet.onComplete = function(rpc, result, response, type) { service.rpcComplete(rpc, result, response, type, callback); }; @@ -216,70 +204,9 @@ Bandwagon.RPC.Service.prototype.unregisterObserver = function(observerId) * Bandwagon Protocol Methods Below Here */ -Bandwagon.RPC.Service.prototype.authenticate = function(login, password, callback) -{ - var service = this; - - this._logger.debug("Bandwagon.RPC.Service.authenticate: getting auth token for user '" + login + "'"); - - var internalCallback2 = function(event) - { - if (event.isError()) - { - service._logger.info("Bandwagon.RPC.Service.authenticate: authentication failed"); - } - else - { - event.authToken = event.getData().attribute("value"); - - if (!event.authToken.match(/.*\w.*/)) - { - // invalid auth token (bug 496612) - service._logger.error("Bandwagon.RPC.Service.authenticate: invalid auth token: '" + event.authToken + "'"); - - event._result = service.Bandwagon.RPC.Constants.BANDWAGON_RPC_SERVICE_ERROR_UNEXPECTED_XML; - } - else - { - service._logger.debug("Bandwagon.RPC.Service.authenticate: have an auth token: " + event.authToken); - - service.Bandwagon.Preferences.setPreference(service.Bandwagon.PREF_AUTH_TOKEN, event.authToken); - } - } - - if (callback) - { - callback(event); - } - } - - var internalCallback1 = function(event) - { - if (event && event.authURL) - { - service._logger.debug("Bandwagon.RPC.Service.authenticate: using authURL = " + event.authURL); - - service.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_GET_AUTH_DOCUMENT_COMPLETE, - internalCallback2, - event.authURL, - "POST", - null, - null, - {login: login, password: password} - ); - } - else if (callback) - { - callback(event); - } - } - - this.getServiceDocument(internalCallback1); -} - Bandwagon.RPC.Service.prototype.getServiceDocument = function(callback) { - var service = this; + var service = this; this._logger.debug("Bandwagon.RPC.Service.getServiceDocument: getting service document for logged in user"); @@ -287,23 +214,6 @@ Bandwagon.RPC.Service.prototype.getServiceDocument = function(callback) { if (event.isError()) { - // in the case of unauthorized access, we are given the href to the auth resource - event.authURL = ""; - - try - { - event.authURL = event.getData().attribute("href"); - } - catch (e) {} - - if (event.authURL != "") - { - service._logger.debug("Bandwagon.RPC.Service.getServiceDocument: is error, but have an authURL = " + event.authURL); - } - else - { - service._logger.debug("Bandwagon.RPC.Service.getServiceDocument: is error and there is no authURL"); - } } else { @@ -391,12 +301,6 @@ Bandwagon.RPC.Service.prototype.newCollection = function(collection, callback) else { collection.unserialize(event.getData()); - - collection.resourceURL = event.getData().@xmlbase.toString(); - collection.addonsResourceURL = event.getData().@xmlbase.toString() + event.getData().addons.attribute("href").toString(); - - service._logger.debug("Bandwagon.RPC.Service.newCollection: create new autopub collection with resourceURL = " + collection.resourceURL); - collection.status = collection.STATUS_LOADED; } @@ -436,110 +340,39 @@ Bandwagon.RPC.Service.prototype.deleteCollection = function(collection, callback null); } -Bandwagon.RPC.Service.prototype.unsubscribeFromCollection = function(collection, callback) +/** OBSOLETE +Bandwagon.RPC.Service.prototype.subscribeCollection = function(collection, callback) { - var service = this; - - this._logger.debug("Bandwagon.RPC.Service.unsubscribeFromCollection: unsubscribing from collection '" + collection.toString() + "' ..."); - - if (collection == null) - { - if (callback) - callback(new this.Bandwagon.RPC.Event()); - - return; - } + Bandwagon.Logger.debug("Bandwagon.RPC.Service.subscribeCollection: TBD"); - var data = { - "subscribed": "no" - }; + // TODO - this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_UNSUBSCRIBE_FROM_COLLECTION_COMPLETE, - callback, - collection.resourceURL, - "PUT", - data); + if (callback) + callback(new this.Bandwagon.RPC.Event()); } +*/ -Bandwagon.RPC.Service.prototype.subscribeToCollection = function(collection, callback) +/** OBSOLETE +Bandwagon.RPC.Service.prototype.unsubscribeCollection = function(collection, callback) { - var service = this; - - this._logger.debug("Bandwagon.RPC.Service.subscribeToCollection: subscribing to collection '" + collection.toString() + "' ..."); - - if (collection == null) - { - if (callback) - callback(new this.Bandwagon.RPC.Event()); - - return; - } + Bandwagon.Logger.debug("Bandwagon.RPC.Service.unsubscribeCollection: TBD"); - var data = { - "subscribed": "yes" - }; + // TODO - this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_SUBSCRIBE_TO_COLLECTION_COMPLETE, - callback, - collection.resourceURL, - "PUT", - data); + if (callback) + callback(new this.Bandwagon.RPC.Event()); } +*/ -Bandwagon.RPC.Service.prototype.updateCollectionDetails = function(collection, callback) +Bandwagon.RPC.Service.prototype.removeAddonFromCollection = function(guid, collection, callback) { var service = this; - this._logger.debug("Bandwagon.RPC.Service.updateCollectionDetails: updating collection details for '" + collection.toString() + "' ..."); - - if (collection == null) + if (guid.substring(0,1) == "{") { - if (callback) - callback(new this.Bandwagon.RPC.Event()); - - return; + guid = guid.substring(1, guid.length-2); } - collection.status = collection.STATUS_LOADING; - - var data = { - "name": collection.name, - "description": collection.description, - "listed": (collection.listed?"1":"0"), - "subscribed": (collection.subscribed?"yes":"no") - }; - - var internalCallback = function(event) - { - if (event.isError()) - { - collection.status = collection.STATUS_LOADERROR; - } - else - { - collection.unserialize(event.getData()); - collection.status = collection.STATUS_LOADED; - } - - event.collection = collection; - - if (callback) - { - callback(event); - } - } - - this.rpcSend(service.Bandwagon.RPC.Constants.BANDWAGON_RPC_EVENT_TYPE_BANDWAGON_RPC_UPDATE_COLLECTION_COMPLETE, - internalCallback, - collection.resourceURL, - "PUT", - data); -} - -Bandwagon.RPC.Service.prototype.removeAddonFromCollection = function(guid, collection, callback) -{ - var service = this; - Bandwagon.Logger.debug("Bandwagon.RPC.Service.removeAddonFromCollection: extension.guid = '" + guid + "', collection = '" + collection.resourceURL); var internalCallback = function(event) @@ -595,8 +428,6 @@ Bandwagon.RPC.Service.prototype.shareToEmail = function(extension, emailAddress, return; } - personalNote = personalNote.replace("\n", "\r", "gi"); - var data = { "guid": extension.guid, "to": emailAddress, diff --git a/bandwagon/content/scripts/util.js b/bandwagon/content/scripts/util.js index 58b41f8..8044f31 100644 --- a/bandwagon/content/scripts/util.js +++ b/bandwagon/content/scripts/util.js @@ -37,10 +37,6 @@ Bandwagon.Util = new function() {} -Bandwagon.Util._extensionManager = null; -Bandwagon.Util._rdfService = null; -Bandwagon.Util._extensionsDataSource == null; - Bandwagon.Util.getMainWindow = function() { return window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) @@ -243,101 +239,16 @@ Bandwagon.Util.getCookie = function(host, name) return null; } -Bandwagon.Util._initExtensionServices = function() -{ - if (Bandwagon.Util._extensionManager == null) - { - this._extensionManager = Components.classes["@mozilla.org/extensions/manager;1"] - .getService(Components.interfaces.nsIExtensionManager); - } - - if (Bandwagon.Util._rdfService == null) - { - this._rdfService = Components.classes["@mozilla.org/rdf/rdf-service;1"] - .getService(Components.interfaces.nsIRDFService); - } - - var getURLSpecFromFile = function(file) - { - var ioServ = Components.classes["@mozilla.org/network/io-service;1"] - .getService(Components.interfaces.nsIIOService); - var fph = ioServ.getProtocolHandler("file") - .QueryInterface(Components.interfaces.nsIFileProtocolHandler); - return fph.getURLSpecFromFile(file); - } - - var getDir = function(key, pathArray) - { - var fileLocator = Components.classes["@mozilla.org/file/directory_service;1"] - .getService(Components.interfaces.nsIProperties); - var dir = fileLocator.get(key, Components.interfaces.nsILocalFile); - for (var i=0; i - - - - - - - - - - + + + + + + + @@ -137,7 +134,6 @@ - @@ -154,10 +150,7 @@ - - - - + @@ -251,6 +244,13 @@ + + @@ -313,24 +324,12 @@ - - - - - - @@ -347,47 +346,31 @@ this.iconURL = addon.icon; this.thumbnailURL = addon.thumbnail; this.authors = addon.authors; + //this.category = (addon.category?addon.category:"Unknown"); this.dateAdded = addon.dateAdded; this.read = addon.read; if (addon.comments.length > 0) { - if (addon.comments[0].comment.match(/\w/)) - { - this.comment = addon.comments[0]; - } - - this.addedBy = addon.comments[0].author; - if (addon.comments[0].comment == "") // it seems each addon will have an empty comment if none was made - { - document.getAnonymousElementByAttribute(this, 'anonid', 'commenticon').setAttribute("collapsed", true); - if (document.getAnonymousElementByAttribute(this, 'anonid', 'commentbox')) // expanded only - document.getAnonymousElementByAttribute(this, 'anonid', 'commentbox').setAttribute("collapsed", true); - } + this.comment = addon.comments[0]; } else { - document.getAnonymousElementByAttribute(this, 'anonid', 'commenticon').setAttribute("collapsed", true); - if (document.getAnonymousElementByAttribute(this, 'anonid', 'commentbox')) // expanded only - document.getAnonymousElementByAttribute(this, 'anonid', 'commentbox').setAttribute("collapsed", true); + if (document.getAnonymousElementByAttribute(this, 'anonid', 'commentdesc')) + { + document.getAnonymousElementByAttribute(this, 'anonid', 'commentdesc').style.collapsed = true; + document.getAnonymousElementByAttribute(this, 'anonid', 'commentauthor').style.collapsed = true; + } } - this.invalidateCompatibilityCheck(); - this.invalidatePublishButton(); - ]]> - - + var canInstall = addon.canInstall(Bandwagon.Util.getHostEnvironmentInfo()); + this.showVersionHelper(canInstall.type, canInstall.requiredVersion); - - - @@ -415,13 +398,6 @@ if (document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefox') && document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning')) { - var container = document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning'); - - while (container.hasChildNodes()) - { - container.removeChild(container.firstChild); - } - if (type == Bandwagon.Model.Addon.INSTALL_YES) { document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefox').disabled = false; @@ -429,34 +405,17 @@ } else { - if (type == Bandwagon.Model.Addon.INSTALL_NO_IS_EXPERIMENTAL) - { - var msg; - - try - { - msg = this._stringBundle.getString("bandwagon.addon.isexperimental"); - } - catch (e) - { - msg = this._stringBundle.getString("bandwagon.addon.olderversionsoffirefox"); - } - - document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild( - document.createTextNode(msg)); - } - else if (type == Bandwagon.Model.Addon.INSTALL_NO_ADDON_IS_FOR_OLDER_VERSION) + if (type == Bandwagon.Model.Addon.INSTALL_NO_ADDON_IS_FOR_OLDER_VERSION) { document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild( document.createTextNode(this._stringBundle.getString("bandwagon.addon.olderversionsoffirefox"))); } else if (type == Bandwagon.Model.Addon.INSTALL_NO_UPGRADE_TO_USE_THIS_VERSION) { - var atffwl = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "xul:label"); - atffwl.className = "text-link"; - atffwl.setAttribute("value", this._stringBundle.getFormattedString("bandwagon.addon.upgradetofirefoxn1", [version])); + var atffwl = document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarninglink'); + atffwl.value = this._stringBundle.getFormattedString("bandwagon.addon.upgradetofirefoxn1", [version]); + atffwl.collapsed = false; atffwl.addEventListener("click", function() { Bandwagon.Controller.CollectionsPane.doUpgradeToFirefoxN(version); }, true); - document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild(atffwl); document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild( document.createTextNode(this._stringBundle.getString("bandwagon.addon.upgradetofirefoxn2"))); @@ -466,9 +425,9 @@ document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild( document.createTextNode(this._stringBundle.getFormattedString("bandwagon.addon.requiresfirefoxbeta1", [version]))); - var atffwl = document.createElementNS("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul", "xul:label"); - atffwl.className = "text-link"; - atffwl.setAttribute("value", this._stringBundle.getFormattedString("bandwagon.addon.requiresfirefoxbeta2", [version])); + var atffwl = document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarninglink'); + atffwl.value = this._stringBundle.getFormattedString("bandwagon.addon.requiresfirefoxbeta2", [version]); + atffwl.collapsed = false; atffwl.addEventListener("click", function() { Bandwagon.Controller.CollectionsPane.doDownloadFirefoxNBeta(version); }, true); document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').appendChild(atffwl); @@ -481,13 +440,11 @@ document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefoxwarning').collapsed = false; - var isExtensionsCheckCompatibility = Bandwagon.Preferences.getGlobalPreference("extensions.checkCompatibility", true); + var isExtensionsCheckCompatibility = Bandwagon.Preferences.getGlobalPreference("extensions.checkCompatibility"); var isAllowIncompatibleInstall = Bandwagon.Preferences.getPreference("allow.incompatible.install"); if ((isExtensionsCheckCompatibility != null && isExtensionsCheckCompatibility == false) - && (isAllowIncompatibleInstall != null && isAllowIncompatibleInstall == true) - && (this.addon.getInstaller(Bandwagon.Util.getHostEnvironmentInfo().os)) - ) + && (isAllowIncompatibleInstall != null && isAllowIncompatibleInstall == true)) { document.getAnonymousElementByAttribute(this, 'anonid', 'addtofirefox').disabled = false; } @@ -559,32 +516,23 @@ - + - - - - - - - + + + + - - - - - - + @@ -632,7 +581,6 @@ - @@ -743,7 +691,6 @@ if (collection.__containsCurrentlySelectedExtension) { - elemWritableCollection.setAttribute("type", "checkbox"); elemWritableCollection.setAttribute("checked", "true"); elemWritableCollection.setAttribute("autocheck", "false"); elemWritableCollection.addEventListener("command", callbackRemove, true); diff --git a/bandwagon/content/ui/collectionsPaneController.js b/bandwagon/content/ui/collectionsPaneController.js index af2933f..b145aae 100644 --- a/bandwagon/content/ui/collectionsPaneController.js +++ b/bandwagon/content/ui/collectionsPaneController.js @@ -50,8 +50,8 @@ Bandwagon.Controller.CollectionsPane = new function() this.elemBandwagonCollectionDescription = null; this.elemBandwagonCollectionsNotification = null; this.elemBandwagonCollectionDeck = null; + this.elemBandwagonCollectionHeader = null; this.stringBundle = null; - this.loginInProcess = false; //this.previewNotificationVal = "bandwagon-collection-preview"; } @@ -72,6 +72,7 @@ Bandwagon.Controller.CollectionsPane.init = function() this.elemBandwagonCollectionDescription = document.getElementById("bandwagon-collection-description"); this.elemBandwagonCollectionsNotification = document.getElementById("bandwagon-collections-notification"); this.elemBandwagonCollectionDeck = document.getElementById("bandwagon-collection-deck"); + this.elemBandwagonCollectionHeader = document.getElementById("bandwagon-collection-header"); Bandwagon.Controller.CollectionsPane._repopulateCollectionsList(); Bandwagon.Controller.CollectionsPane.invalidate(); @@ -81,11 +82,8 @@ Bandwagon.Controller.CollectionsPane.init = function() bandwagonService.registerCollectionUpdateObserver(Bandwagon.Controller.CollectionsPane.collectionUpdateObserver); bandwagonService.registerCollectionListChangeObserver(Bandwagon.Controller.CollectionsPane.collectionListChangeObserver); - bandwagonService.registerAuthenticationStatusChangeObserver(Bandwagon.Controller.CollectionsPane.authenticationStatusChangeObserver); Bandwagon.Preferences.addObserver(Bandwagon.Controller.CollectionsPane.prefObserver); - Bandwagon.Preferences.addGlobalObserver(Bandwagon.Controller.CollectionsPane.prefObserver, "extensions.bandwagon.allow.incompatible."); - Components.classes["@mozilla.org/observer-service;1"].getService(Components.interfaces.nsIObserverService).addObserver(Bandwagon.Controller.CollectionsPane.prefObserver, "nsPref:changed", false); } @@ -103,10 +101,7 @@ Bandwagon.Controller.CollectionsPane.onViewSelect = function() if (elemsAddonExpanded && elemsAddonExpanded[0]) { - try - { - Bandwagon.Controller.CollectionsPane.elemBandwagonAddons.ensureElementIsVisible(elemsAddonExpanded[0]); - } catch (e) {} + Bandwagon.Controller.CollectionsPane.elemBandwagonAddons.ensureElementIsVisible(elemsAddonExpanded[0]); } } } @@ -134,10 +129,8 @@ Bandwagon.Controller.CollectionsPane.uninit = function() bandwagonService.unregisterCollectionUpdateObserver(Bandwagon.Controller.CollectionsPane.collectionUpdateObserver); bandwagonService.unregisterCollectionListChangeObserver(Bandwagon.Controller.CollectionsPane.collectionListChangeObserver); - bandwagonService.unregisterAuthenticationStatusChangeObserver(Bandwagon.Controller.CollectionsPane.authenticationStatusChangeObserver); Bandwagon.Preferences.removeObserver(Bandwagon.Controller.CollectionsPane.prefObserver); - Bandwagon.Preferences.removeGlobalObserver(Bandwagon.Controller.CollectionsPane.prefObserver, "extensions.bandwagon.allow.incompatible."); // now is a good time to save collections to storage if (Bandwagon.COMMIT_NOW) @@ -154,8 +147,7 @@ Bandwagon.Controller.CollectionsPane.invalidate = function() Bandwagon.Controller.CollectionsPane.elemBandwagonButtonViewSite.disabled = true; //Bandwagon.Controller.CollectionsPane.elemBandwagonButtonUpdate.disabled = true; Bandwagon.Controller.CollectionsPane.elemBandwagonButtonRemove.disabled = true; - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionTitle.collapsed = true; - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.collapsed = true; + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionHeader.collapsed = true; Bandwagon.Controller.CollectionsPane._repopulateAddonsList(null); @@ -166,8 +158,7 @@ Bandwagon.Controller.CollectionsPane.invalidate = function() Bandwagon.Controller.CollectionsPane.elemBandwagonButtonViewSite.disabled = false; //Bandwagon.Controller.CollectionsPane.elemBandwagonButtonUpdate.disabled = false; Bandwagon.Controller.CollectionsPane.elemBandwagonButtonRemove.disabled = false; - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionTitle.collapsed = false; - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.collapsed = false; + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionHeader.collapsed = false; var collection = Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.collection; @@ -194,14 +185,16 @@ Bandwagon.Controller.CollectionsPane._invalidateExtensionsDeck = function() { var elemsBandwagonCollection = Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.getElementsByTagName("bandwagonCollection"); - if (!bandwagonService.isAuthenticated() || this.loginInProcess == true) - { - Bandwagon.Controller.CollectionsPane.elemBandwagonExtensionsDeck.selectedIndex = 2; - window.setTimeout(function() { document.getElementById("login").focus(); }, 200); - } - else if (elemsBandwagonCollection.length == 0) + if (elemsBandwagonCollection.length == 0) { - Bandwagon.Controller.CollectionsPane.elemBandwagonExtensionsDeck.selectedIndex = 1; + if (!bandwagonService.isAMOAuthenticated()) + { + Bandwagon.Controller.CollectionsPane.elemBandwagonExtensionsDeck.selectedIndex = 2; + } + else + { + Bandwagon.Controller.CollectionsPane.elemBandwagonExtensionsDeck.selectedIndex = 1; + } } else { @@ -265,17 +258,21 @@ Bandwagon.Controller.CollectionsPane.collectionUpdateObserver = function(collect if (Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem && collection.equals(Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.collection)) { Bandwagon.Controller.CollectionsPane._repopulateAddonsList(collection); + + /* OBSOLETE + // if this is a just arrived collection preview, show the notification box + if (collection.preview) + { + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.notificationsHidden = false; + setTimeout(Bandwagon.Controller.CollectionsPane._createPreviewNotification, 200); + } + */ } } Bandwagon.Controller.CollectionsPane.invalidate(); } -Bandwagon.Controller.CollectionsPane.authenticationStatusChangeObserver = function() -{ - Bandwagon.Controller.CollectionsPane._invalidateExtensionsDeck(); -} - Bandwagon.Controller.CollectionsPane.doUpdateAll = function(event) { Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDeck.selectedIndex = 1; @@ -290,52 +287,10 @@ Bandwagon.Controller.CollectionsPane.doSubscribe = function(event) Bandwagon.Controller.CollectionsPane.doLogin = function(event) { - var uname = document.getElementById("login").value; - var pwd = document.getElementById("password").value; - - // Some client side checking for blank login details - if (!uname || uname == "" || !uname.match(/.*\w.*/) || - !pwd || pwd == "" || !pwd.match(/.*\w.*/)) - { - document.getElementById("auth-error").textContent = Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("login.error"); - document.getElementById("auth-error").collapsed = false; - return; - } - - this.loginInProcess = true; - - document.getElementById("auth-button").disabled = true; - document.getElementById("auth-spinner").style.visibility = "visible"; - document.getElementById("auth-error").collapsed = true; - - var callback2 = function(event) - { - document.getElementById("auth-button").disabled = false; - document.getElementById("auth-spinner").style.visibility = "hidden"; - document.getElementById("password").value = ""; - Bandwagon.Controller.CollectionsPane.loginInProcess = false; - Bandwagon.Controller.CollectionsPane._invalidateExtensionsDeck(); - } - - var callback1 = function(event) - { - if (event.isError()) - { - // show err - document.getElementById("auth-error").textContent = Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("login.error"); - document.getElementById("auth-error").collapsed = false; - document.getElementById("auth-button").disabled = false; - document.getElementById("auth-spinner").style.visibility = "hidden"; - } - else - { - bandwagonService.updateCollectionsList(callback2); - } - } - - bandwagonService.authenticate(uname, pwd, callback1); + Bandwagon.Controller.CollectionsPane._openLocalizedURL(Bandwagon.COLLECTIONSPANE_DO_LOGIN_URL); } + Bandwagon.Controller.CollectionsPane.doSettings = function(event) { var prefSvc = Components.classes["@mozilla.org/preferences-service;1"]. @@ -395,36 +350,29 @@ Bandwagon.Controller.CollectionsPane.doUnsubscribe = function(event) var collection = Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.collection; + if (collection == null || !collection.links["unsubscribe"]) + return; + + Bandwagon.Controller.CollectionsPane._openURL(collection.links["unsubscribe"]); +} + +/** OBSOLETE +Bandwagon.Controller.CollectionsPane.doRemove = function(event) +{ + if (Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem == null) + return; + + var collection = Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.collection; + if (collection == null) return; - var promptService = Components.classes["@mozilla.org/embedcomp/prompt-service;1"].getService(Components.interfaces.nsIPromptService); - var check = {value: false}; - var flags = promptService.BUTTON_POS_0 * promptService.BUTTON_TITLE_IS_STRING + promptService.BUTTON_POS_1 * promptService.BUTTON_TITLE_IS_STRING; - var button = promptService.confirmEx( - window, - Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("unsubscribe.confirm.title"), - Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("unsubscribe.confirm.label"), - flags, - Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("unsubscribe.confirm.button0"), - Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("unsubscribe.confirm.button1"), - null, - null, - check); - - if (button == 0) - { - var callback = function(event) - { - if (event.isError()) - { - window.alert(Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("unsubscribe.error")); - } - } + bandwagonService.unlinkCollection(collection); - bandwagonService.unsubscribeFromCollection(collection, callback); - } + if (!collection.preview) + bandwagonService.unsubscribe(collection); } +*/ Bandwagon.Controller.CollectionsPane.doShowCollection = function() { @@ -441,11 +389,11 @@ Bandwagon.Controller.CollectionsPane.doShowCollection = function() // misc. ui - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionTitle.textContent = (collection?(collection.name?collection.name:collection.resourceURL):""); + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionTitle.setAttribute("value", (collection?(collection.name?collection.name:collection.resourceURL):"")); if (collection && collection.description != "") { - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.textContent = collection.description; + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.setAttribute("value", collection.description); Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.removeAttribute("collsaped"); } else @@ -453,7 +401,20 @@ Bandwagon.Controller.CollectionsPane.doShowCollection = function() Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionDescription.setAttribute("collapsed", true); } - Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.notificationsHidden = true; + /** OBSOLETE + // collection preview notification box + if (collection && collection.preview && collection.status != collection.STATUS_LOADING) + { + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.notificationsHidden = false; + + // this needs to be in a seperate thread + setTimeout(Bandwagon.Controller.CollectionsPane._createPreviewNotification, 500); + } + else + */ + { + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.notificationsHidden = true; + } // show items @@ -584,13 +545,13 @@ Bandwagon.Controller.CollectionsPane.doAddToFirefox = function() var params = []; params[addon.name] = installer; - // TODO do some user feedback here? + // TODO do some user collectionback here? var callback = function(url, status) { Bandwagon.Logger.info("Finished installing '" + url + "'; status = " + status); - // TODO some user feedback here? + // TODO some user collectionback here? } InstallTrigger.install(params, callback); @@ -610,6 +571,99 @@ Bandwagon.Controller.CollectionsPane.doDownloadFirefoxNBeta = function(version) Bandwagon.Controller.CollectionsPane._openURL("http://www.mozilla.com/en-US/firefox/all-beta.html"); } +/** OBSOLETE +Bandwagon.Controller.CollectionsPane.doShowCollectionPreview = function(collectionURL) +{ + // this is executed when the browser overlay controller opens the EM window to subscribe to a new collection. + // i.e. after a custom bandwagonSubscribe is detected and handled + + Bandwagon.Logger.debug("In Bandwagon.Controller.CollectionsPane.doShowCollectionPreview() with collectionURL = " + collectionURL); + + // check if we already have this collection + + if (bandwagonService.collections[collectionURL]) + { + var collection = bandwagonService.collections[collectionURL]; + Bandwagon.Controller.CollectionsPane.preferredCollection = collection; + //Bandwagon.Controller.CollectionsPane._selectCollection(collection); + setTimeout(function() { Bandwagon.Controller.CollectionsPane._selectCollection(collection); }, 500); + return; + } + + // add and select the collection + + var collection = bandwagonService.addPreviewCollection(collectionURL); + //collection.status = collection.STATUS_LOADING; + + Bandwagon.Controller.CollectionsPane.preferredCollection = collection; + setTimeout(function() { Bandwagon.Controller.CollectionsPane._selectCollection(collection); }, 500); +} +*/ + +/** OBSOLETE +Bandwagon.Controller.CollectionsPane._createPreviewNotification = function() +{ + if (!Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.getNotificationWithValue(Bandwagon.Controller.CollectionsPane.previewNotificationVal)) + { + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.appendNotification + ( + Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("collectionspane.this.is.only.a.preview"), + Bandwagon.Controller.CollectionsPane.previewNotificationVal, + null, + Bandwagon.Controller.CollectionsPane.elemBandwagonCollectionsNotification.PRIORITY_WARNING_MEDIUM, + [ + { + accessKey: Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("collectionspane.dont.subscribe.accesskey"), + callback: Bandwagon.Controller.CollectionsPane.doCollectionPreviewDontSubscribe, + label: Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("collectionspane.dont.subscribe"), + popup: null + }, + { + accessKey: Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("collectionspane.subscribe.accesskey"), + callback: Bandwagon.Controller.CollectionsPane.doCollectionPreviewSubscribe, + label: Bandwagon.Controller.ExtensionsOverlay.stringBundle.getString("collectionspane.subscribe"), + popup: null + } + ] + ); + } +} +*/ + +/** OBSOLETE +Bandwagon.Controller.CollectionsPane.doCollectionPreviewDontSubscribe = function() +{ + Bandwagon.Logger.debug("in Bandwagon.Controller.CollectionsPane.doCollectionPreviewDontSubscribe()"); + + Bandwagon.Controller.CollectionsPane.preferredCollection = null; + + Bandwagon.Controller.CollectionsPane.doRemove(); +} +*/ + +/** OBSOLETE +Bandwagon.Controller.CollectionsPane.doCollectionPreviewSubscribe = function() +{ + Bandwagon.Logger.debug("in Bandwagon.Controller.CollectionsPane.doCollectionPreviewSubscribe()"); + + if (Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem == null) + return; + + var collection = Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.collection; + + if (collection == null) + return; + + bandwagonService.subscribe(collection); + + if (Bandwagon.COMMIT_NOW) + bandwagonService.commit(collection); + + Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectedItem.preview = false; + Bandwagon.Controller.CollectionsPane.doShowCollection(); +} +*/ + /** * Refreshes the collection pane */ @@ -635,24 +689,8 @@ Bandwagon.Controller.CollectionsPane.prefObserver = if (data.match(/addonsperpage/)) { - Bandwagon.Logger.debug("In prefObserver; addonsperpage has changed"); - Bandwagon.Controller.CollectionsPane.refresh(); } - else if (data.match(/checkCompatibility/) || data.match(/install/)) - { - Bandwagon.Logger.debug("In prefObserver; checkCompatibility has changed"); - - if (Bandwagon.Controller.CollectionsPane.elemBandwagonAddons.selectedItem != null) - { - var elemsAddonExpanded = Bandwagon.Controller.CollectionsPane.elemBandwagonAddons.getElementsByTagName("bandwagonAddonExpanded"); - - if (elemsAddonExpanded && elemsAddonExpanded[0]) - { - elemsAddonExpanded[0].invalidateCompatibilityCheck(); - } - } - } } } @@ -692,12 +730,9 @@ Bandwagon.Controller.CollectionsPane._selectCollection = function(collection) return false; } - try - { - Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectItem(elemBandwagonCollection); - Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.ensureElementIsVisible(elemBandwagonCollection); - Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.focus(); - } catch (e) {} + Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.selectItem(elemBandwagonCollection); + Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.ensureElementIsVisible(elemBandwagonCollection); + Bandwagon.Controller.CollectionsPane.elemBandwagonCollections.focus(); return true; } @@ -802,20 +837,10 @@ Bandwagon.Controller.CollectionsPane._repopulateAddonsList = function(collection // repopulate with collection items + var addonsPerPage = bandwagonService.getAddonsPerPage(collection); const XULNS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"; - var addonsToDisplay; - - if (Bandwagon.ENABLE_PAGINATION) - { - addonsToDisplay = Math.max(bandwagonService.getAddonsPerPage(collection), addonsSorted.length); - } - else - { - addonsToDisplay = addonsSorted.length; - } - - for (var i=0; i - - - - - - - - + + - - + + + flex="1"/> - - - - - - - - - - - &loginheading.label; - - - - - - - - - - - - - - - - - -

- - -
-

- -

+ +

See the support section to find out where to get assistance for this add-on.

'.sprintf(___('addons_display_review_see_support'), '#support').'

'; - } - ?> -

Review Guidelines'), $html->url('/pages/review_guide')) ?>

-
- - - - - + else: + echo '

'.sprintf(_('addons_display_review_see_support'), + '#support').'

'; + endif; + } + ?> +

Review Guidelines'), $html->url('/pages/review_guide')) /* @partial, 6/25/08 */ ?>

+ + + -
+
- link(sprintf(_('addons_display_see_all_addons'),$tag['Translation']['name']['string']), '/browse/' . "type:" . $tag['Tag']['addontype_id'] . '/' . "cat:" . $tag['Tag']['id'], array('class' => 'more-info')) . "\n"; + '.$html->link(sprintf(_('addons_display_see_all_addons'),$tag['Translation']['name']['string']), '/browse/' . "type:" . $tag['Tag']['addontype_id'] . '/' . "cat:" . $tag['Tag']['id'], array('class'=>'view')) . ''."\n"; + } } - } - ?> - - 1): ?> -

linkUsersFromModel($addon['User'], 0));?> -

-
-
    - 3) { - echo '
    '; - echo ''; - echo ''; - echo '
    '; - } else { - echo $this->renderElement('addon_author_addons', array('tag' => 'li')); - } ?> -
-
- - -
- + 1): ?> +

linkUsersFromModel($addon['User'], 0));?> +

+
    + 3) { + echo '
    '; + echo ''; + echo ''; + echo '
    '; + } else { + echo $this->renderElement('addon_author_addons', array('tag' => 'li')); + } + ?> +
+ -
-

+
+ - -

- -
    - -
  • collection($_coll)?>
  • - - 0): ?> -
  • - -
  • - - -
- - -
-
-

- link(___('addons_display_collection_whatsthis'), '/collections/')?> - hiddenSession() ?> - - - -
-
- +
+ + + + +renderElement('sidebar')?> + +renderElement('app_chooser')?> diff --git a/site/app/views/addons/home.thtml b/site/app/views/addons/home.thtml index 7d79eb0..0443155 100644 --- a/site/app/views/addons/home.thtml +++ b/site/app/views/addons/home.thtml @@ -24,7 +24,6 @@ * Frederic Wenzel * Mike Morgan * Wil Clouser - * l.m.orchard * * 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 @@ -39,142 +38,198 @@ * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ - -// Pass a CSS class for the body tag up to the layout. -$this->viewVars['bodyclass'] = 'home'; ?> - - link('amo2009/home.js') ?> -viewVars['head_extra'] = ob_get_clean() ?> - - - - -
    - -
  • number_format($stats_downloaded, 0) - )?>
  • - - -
  • number_format($stats_inuse, 0) - )?>
  • - -
-viewVars['header_extra'] = ob_get_clean() ?> - - - -
+
- renderElement('amo2009/search')?> +renderElement('search')?> - - renderElement('amo2009/teaser_collections', array( - 'teaser_collection_promos' => $teaser_collection_promos, - 'promoted_collections' => $promoted_collections - ))?> - +
+ +

-

-
- diff --git a/site/app/views/addons/plugins.thtml b/site/app/views/addons/plugins.thtml index c6c2a64..e1426c3 100644 --- a/site/app/views/addons/plugins.thtml +++ b/site/app/views/addons/plugins.thtml @@ -41,101 +41,120 @@ * We will most likely move to a dynamic version of this page pulling from the database. */ -$this->layout='amo2009'; - ?> - -
- renderElement('amo2009/search')?> - -