Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/site
diff options
context:
space:
mode:
Diffstat (limited to 'site')
-rw-r--r--site/app/config/bootstrap.php6
-rw-r--r--site/app/config/constants.php11
-rw-r--r--site/app/controllers/addons_controller.php11
-rw-r--r--site/app/controllers/admin_controller.php2
-rw-r--r--site/app/controllers/components/amo.php3
-rw-r--r--site/app/controllers/components/developers.php10
-rw-r--r--site/app/controllers/components/editors.php134
-rw-r--r--site/app/controllers/components/email.php11
-rw-r--r--site/app/controllers/components/image.php4
-rw-r--r--site/app/controllers/developers_controller.php191
-rw-r--r--site/app/controllers/files_controller.php9
-rw-r--r--site/app/controllers/search_controller.php2
-rw-r--r--site/app/controllers/users_controller.php1
-rw-r--r--site/app/models/addon_tag.php9
-rw-r--r--site/app/models/tag.php19
-rw-r--r--site/app/models/version.php26
-rw-r--r--site/app/views/developers/addon_edit_categories.thtml2
-rw-r--r--site/app/views/developers/addon_edit_properties.thtml3
-rw-r--r--site/app/views/developers/addon_status.thtml5
-rw-r--r--site/app/views/developers/dashboard.thtml9
-rw-r--r--site/app/views/developers/uploader.thtml6
-rw-r--r--site/app/views/developers/versions_edit.thtml6
-rw-r--r--site/app/views/downloads/file.thtml4
-rw-r--r--site/app/views/editors/email/aslo/release_plain.thtml16
-rw-r--r--site/app/views/editors/email/inforequest_plain.thtml5
-rw-r--r--site/app/views/editors/email/inforequest_reply_plain.thtml5
-rw-r--r--site/app/views/editors/email/nominated/public_plain.thtml11
-rw-r--r--site/app/views/editors/email/nominated/sandbox_plain.thtml9
-rw-r--r--site/app/views/editors/email/notify_nominate_plain.thtml19
-rw-r--r--site/app/views/editors/email/notify_pending_plain.thtml19
-rw-r--r--site/app/views/editors/email/notify_super_plain.thtml23
-rw-r--r--site/app/views/editors/email/notify_update_plain.thtml5
-rw-r--r--site/app/views/editors/email/pending/public_plain.thtml9
-rw-r--r--site/app/views/editors/email/pending/sandbox_plain.thtml9
-rw-r--r--site/app/views/editors/email/superreview_plain.thtml7
-rw-r--r--site/app/views/editors/queue.thtml4
-rw-r--r--site/app/views/elements/categories.thtml4
-rw-r--r--site/app/views/elements/footer.thtml8
-rw-r--r--site/app/views/elements/header.thtml4
-rw-r--r--site/app/views/elements/install.thtml3
-rw-r--r--site/app/views/elements/search.thtml5
-rw-r--r--site/app/views/facebook/faq.thtml47
-rw-r--r--site/app/views/facebook/import.thtml4
-rw-r--r--site/app/views/facebook/install.thtml2
-rw-r--r--site/app/views/facebook/outage.thtml4
-rw-r--r--site/app/views/facebook/view.thtml4
-rw-r--r--site/app/views/layouts/ajax_with_css.thtml2
-rw-r--r--site/app/views/layouts/facebook.thtml2
-rw-r--r--site/app/views/layouts/mozilla.thtml5
-rw-r--r--site/app/views/layouts/rss.thtml2
-rw-r--r--site/app/views/pages/credits.thtml2
-rw-r--r--site/app/views/pages/robots.txt.thtml2
-rw-r--r--site/app/views/statistics/rss/summary.thtml2
-rw-r--r--site/app/views/users/delete.thtml8
-rw-r--r--site/app/views/users/edit.thtml1
-rw-r--r--site/app/webroot/AMOSearch.xml4
-rw-r--r--site/app/webroot/css/sugar.css1672
-rw-r--r--site/app/webroot/img/addon-br.pngbin287 -> 195 bytes
-rw-r--r--site/app/webroot/img/amo2009/app-icons/sugar.pngbin0 -> 9702 bytes
l---------[-rw-r--r--]site/app/webroot/img/app-icons/developers.pngbin9363 -> 9 bytes
l---------[-rw-r--r--]site/app/webroot/img/app-icons/generic.pngbin9363 -> 9 bytes
-rw-r--r--site/app/webroot/img/app-icons/sugar.pngbin0 -> 3491 bytes
-rw-r--r--site/app/webroot/img/app-icons/sugar_small.pngbin0 -> 1539 bytes
-rw-r--r--site/app/webroot/img/rustico/header/moz-com-logo.pngbin2220 -> 4725 bytes
-rw-r--r--site/app/webroot/img/slider-next-disabled.gifbin777 -> 431 bytes
-rw-r--r--site/app/webroot/img/slider-next.gifbin1292 -> 443 bytes
-rw-r--r--site/app/webroot/img/slider-prev-disabled.gifbin816 -> 428 bytes
-rw-r--r--site/app/webroot/img/slider-prev.gifbin1291 -> 436 bytes
-rw-r--r--site/app/webroot/img/sprite-alpha.pngbin22716 -> 19086 bytes
-rw-r--r--site/app/webroot/img/sprite.pngbin16886 -> 17812 bytes
-rw-r--r--site/app/webroot/img/template/moz-com-logo.pngbin2220 -> 4725 bytes
71 files changed, 2263 insertions, 149 deletions
diff --git a/site/app/config/bootstrap.php b/site/app/config/bootstrap.php
index 2b3525c..ce43a70 100644
--- a/site/app/config/bootstrap.php
+++ b/site/app/config/bootstrap.php
@@ -219,6 +219,10 @@ if (array_key_exists($buf[0],$valid_languages)) {
// Now make sure that there's a known app/layout in the second position.
if (count($buf) < 2 || !array_key_exists($buf[1], $valid_layouts)) {
+ // we are sugar
+ if (true)
+ array_splice($buf, 1, 0, "sugar");
+ else
// No app or unknown app, so we see if this is seamonkey, otherwise stick
// firefox in the place of honour and redirect.
if (array_key_exists('HTTP_USER_AGENT', $_SERVER) &&
@@ -271,7 +275,7 @@ if (in_array(LANG, $rtl_languages)) {
global $app_prettynames;
$app_prettynames = array(
- 'firefox' => ___('main_prettyname_firefox'),
+ 'sugar' => ___('main_prettyname_sugar'),
'thunderbird' => ___('main_prettyname_thunderbird'),
'sunbird' => ___('main_prettyname_sunbird'),
'seamonkey' => ___('main_prettyname_seamonkey'),
diff --git a/site/app/config/constants.php b/site/app/config/constants.php
index 705946c..dc4190a 100644
--- a/site/app/config/constants.php
+++ b/site/app/config/constants.php
@@ -150,7 +150,7 @@ define('APP_SUNBIRD', 52);
define('APP_FENNEC', 60);
global $app_shortnames; // shortnames are used in URLs
$app_shortnames = array(
- 'firefox' => APP_FIREFOX,
+ 'sugar' => APP_FIREFOX,
'thunderbird' => APP_THUNDERBIRD,
'seamonkey' => APP_SEAMONKEY,
'sunbird' => APP_SUNBIRD,
@@ -158,7 +158,7 @@ $app_shortnames = array(
);
global $app_prettynames;
$app_prettynames = array( // Overridden with L10n in bootstrap.php
- 'firefox' => "Firefox",
+ 'sugar' => "Sugar",
'thunderbird' => "Thunderbird",
'seamonkey' => "SeaMonkey",
'sunbird' => "Sunbird",
@@ -166,8 +166,6 @@ $app_prettynames = array( // Overridden with L10n in bootstrap.php
);
global $browser_apps; // browser applications; for non-browser apps, use !in_array()
$browser_apps = array(
- APP_FIREFOX,
- APP_SEAMONKEY
);
global $other_layouts; // non-app top-level layouts in URLs
// controller => header
@@ -231,10 +229,7 @@ $hybrid_categories = array(
// for very little gain.
global $app_listedtypes;
$app_listedtypes = array(
- APP_FIREFOX => array(ADDON_EXTENSION, ADDON_THEME, ADDON_DICT, ADDON_SEARCH, ADDON_PLUGIN),
- APP_THUNDERBIRD => array(ADDON_EXTENSION, ADDON_THEME, ADDON_DICT),
- APP_SEAMONKEY => array(ADDON_EXTENSION, ADDON_THEME, ADDON_DICT, ADDON_SEARCH, ADDON_PLUGIN),
- APP_SUNBIRD => array(ADDON_EXTENSION, ADDON_THEME, ADDON_DICT)
+ APP_FIREFOX => array(ADDON_EXTENSION)
);
/**
diff --git a/site/app/controllers/addons_controller.php b/site/app/controllers/addons_controller.php
index 0cca0c3..5d7e1a3 100644
--- a/site/app/controllers/addons_controller.php
+++ b/site/app/controllers/addons_controller.php
@@ -212,6 +212,9 @@ class AddonsController extends AppController
$compat_apps = $this->Version->getCompatibleApps($_latest_version);
$this->publish('compatible_apps', array_slice($compat_apps, 0, 1));
$addon_data['compatible_apps'] = $compat_apps;
+ } else {
+ $this->publish('hasversion', false);
+ $this->publish('compatible_apps', array());
}
// if the latest version is incompatible with the current app, redirect
@@ -648,7 +651,7 @@ class AddonsController extends AppController
}
// initialize pagination component
- $this->Pagination->total = $subcat_totals[$category];
+ $this->Pagination->total = isset($subcat_totals[$category]) ? $subcat_totals[$category] : 0;
$this->Pagination->sortBy = $sort_by;
$this->Pagination->direction = $sort_dir;
list($_order,$_limit,$_page) = $this->Pagination->init();
@@ -704,6 +707,10 @@ class AddonsController extends AppController
}
$type = $this->namedArgs['type'];
+ // we are sugar
+ if ($type == 'all') {
+ // pass
+ } else
// allow addontype pages only for applicable types
if (!in_array($type, $app_listedtypes[APP_ID])) {
// @TODO throw some error
@@ -830,7 +837,7 @@ class AddonsController extends AppController
$this->publish('this_tag', $this_tag);
// Build a minimal set of addon details for publishing to view.
- $_feat_ids = $this->AddonTag->getRandomAddons($category, true, 6);
+ $_feat_ids = $this->AddonTag->getRandomAddons($category, true, 6, null, $addontype=='all' ? null : $addontype);
if (count($_feat_ids) > 0) {
$_order_by = 'FIELD(Addon.id, '.implode(',', $_feat_ids).')';
} else {
diff --git a/site/app/controllers/admin_controller.php b/site/app/controllers/admin_controller.php
index 77d305c..d9ae3ec 100644
--- a/site/app/controllers/admin_controller.php
+++ b/site/app/controllers/admin_controller.php
@@ -60,7 +60,7 @@ class AdminController extends AppController
$this->Amo->clean($this->data, false);
$this->layout = 'mozilla';
- $this->pageTitle = 'Mozilla Add-ons :: Admin Control Panel';
+ $this->pageTitle = SITE_NAME.' :: Admin Control Panel';
$this->cssAdd = array('admin', 'developers');
$this->set('cssAdd', $this->cssAdd);
diff --git a/site/app/controllers/components/amo.php b/site/app/controllers/components/amo.php
index fa24b1a..92ac9ac 100644
--- a/site/app/controllers/components/amo.php
+++ b/site/app/controllers/components/amo.php
@@ -703,6 +703,9 @@ class AmoComponent extends Object {
'count' => COUNT_ADDON_PLUGIN,
);
}
+
+ // we are sugar
+ $catlist = array();
// create two sort arrays that we can use with array_multisort later
$_weights = array();
diff --git a/site/app/controllers/components/developers.php b/site/app/controllers/components/developers.php
index 15ae6b8..ceb24f8 100644
--- a/site/app/controllers/components/developers.php
+++ b/site/app/controllers/components/developers.php
@@ -231,6 +231,11 @@ class DevelopersComponent extends Object {
function detectAddontype($file) {
$extension = substr($file['name'], strrpos($file['name'], '.'));
switch ($extension) {
+ case '.xo':
+ case '.xol':
+ return ADDON_EXTENSION;
+ break;
+
case '.xpi':
// Dictionaries have a .dic file in the dictionaries directory
$zip = new Archive_Zip($file['tmp_name']);
@@ -471,6 +476,8 @@ class DevelopersComponent extends Object {
*/
function getAllowedExtensions($addontype) {
switch ($addontype) {
+ case ADDON_EXTENSION: $allowed = array('.xo', '.xol');
+ break;
case ADDON_EXTENSION: $allowed = array('.xpi');
break;
case ADDON_THEME: $allowed = array('.jar', '.xpi');
@@ -618,7 +625,8 @@ class DevelopersComponent extends Object {
$filename .= '-'.$data['Version']['version'];
- if ($data['Addon']['addontype_id'] != ADDON_SEARCH) {
+ // we are sugar
+ if (false) {
$filename .= '-';
$appString = '';
foreach ($data['appversions'] as $appversion) {
diff --git a/site/app/controllers/components/editors.php b/site/app/controllers/components/editors.php
index 2992af2..0576751 100644
--- a/site/app/controllers/components/editors.php
+++ b/site/app/controllers/components/editors.php
@@ -124,29 +124,44 @@ class EditorsComponent extends Object {
}
}
+ $releasenotes = $this->controller->Version->findById($version['Version']['id'], array('Version.releasenotes'), null, -1);
+
$emailInfo = array('name' => $addon['Translation']['name']['string'],
'id' => $this->controller->Addon->id,
'reviewer' => $session['firstname'].' '.$session['lastname'],
'email' => implode(', ', $authors),
'comments' => $data['Approval']['comments'],
- 'version' => !empty($version) ? $version['Version']['version'] : ''
+ 'version' => !empty($version) ? $version['Version']['version'] : '',
+ 'releasenotes' => $releasenotes[0]['releasenotes']
);
$this->controller->set('info', $emailInfo);
+
+ if ($data['Approval']['ActionField'] == 'public') {
+ if (SITE_RELEASE_EMAIL) {
+ $this->controller->Email->template = 'email/aslo/release';
+ $this->controller->Email->to = SITE_RELEASE_EMAIL;
+ $this->controller->Email->subject = sprintf('[RELEASE] %s-%s', $emailInfo['name'], $emailInfo['version']);
+ $this->controller->Email->send(false, SITE_RELEASE_EMAIL);
+ }
+ }
if ($data['Approval']['ActionField'] != 'superreview') {
$this->controller->Email->template = 'email/nominated/'.$data['Approval']['ActionField'];
$this->controller->Email->to = $emailInfo['email'];
- $this->controller->Email->subject = sprintf('Mozilla Add-ons: %s Nomination', $emailInfo['name']);
+ $this->controller->Email->subject = sprintf(___('editor_review_nomination_subject', 'Mozilla Add-ons: %s Nomination'), $emailInfo['name']);
}
else {
$this->controller->Email->template = 'email/superreview';
- $this->controller->Email->to = 'amo-senior-editors@mozilla.org';
+ $this->controller->Email->to = ADMIN_EMAIL;
//Doesn't need to be localized
$this->controller->Email->subject = "Super-review requested: {$emailInfo['name']}";
}
$result = $this->controller->Email->send();
+ if ($data['Approval']['ActionField'] == 'superreview')
+ $this->superNotify($emailInfo['id'], $emailInfo['version']);
+
return true;
}
@@ -251,6 +266,8 @@ class EditorsComponent extends Object {
$authors[] = $user['email'];
}
}
+
+ $releasenotes = $this->controller->Version->findById($version['Version']['id'], array('Version.releasenotes'), null, -1);
$emailInfo = array('name' => $addon['Translation']['name']['string'],
'id' => $this->controller->Addon->id,
@@ -260,22 +277,35 @@ class EditorsComponent extends Object {
'os' => $data['Approval']['os'],
'apps' => $data['Approval']['applications'],
'version' => !empty($version) ? $version['Version']['version'] : '',
- 'files' => $files
+ 'files' => $files,
+ 'releasenotes' => $releasenotes[0]['releasenotes']
);
$this->controller->set('info', $emailInfo);
+
+ if ($data['Approval']['ActionField'] == 'public') {
+ if (SITE_RELEASE_EMAIL) {
+ $this->controller->Email->template = 'email/aslo/release';
+ $this->controller->Email->to = SITE_RELEASE_EMAIL;
+ $this->controller->Email->subject = sprintf('[RELEASE] %s-%s', $emailInfo['name'], $emailInfo['version']);
+ $this->controller->Email->send(false, SITE_RELEASE_EMAIL);
+ }
+ }
if ($data['Approval']['ActionField'] != 'superreview') {
$this->controller->Email->template = 'email/pending/'.$data['Approval']['ActionField'];
$this->controller->Email->to = $emailInfo['email'];
- $this->controller->Email->subject = sprintf('Mozilla Add-ons: %s %s', $emailInfo['name'], $emailInfo['version']);
+ $this->controller->Email->subject = sprintf(___('editor_review_superreview_subject', 'Mozilla Add-ons: %s %s'), $emailInfo['name'], $emailInfo['version']);
}
else {
$this->controller->Email->template = 'email/superreview';
- $this->controller->Email->to = 'amo-senior-editors@mozilla.org';
+ $this->controller->Email->to = ADMIN_EMAIL;
//Doesn't need to be localized
$this->controller->Email->subject = "Super-review requested: {$emailInfo['name']}";
}
$result = $this->controller->Email->send();
+
+ if ($data['Approval']['ActionField'] == 'superreview')
+ $this->superNotify($emailInfo['id'], $emailInfo['version']);
return true;
}
@@ -322,7 +352,7 @@ class EditorsComponent extends Object {
$this->controller->publish('info', $emailInfo, false);
$this->controller->Email->template = 'email/inforequest';
$this->controller->Email->to = implode(', ', $authors);
- $this->controller->Email->subject = sprintf('Mozilla Add-ons: %s %s', $emailInfo['name'], $emailInfo['version']);
+ $this->controller->Email->subject = sprintf(SITE_NAME.': %s %s', $emailInfo['name'], $emailInfo['version']);
$this->controller->Email->send();
}
@@ -362,36 +392,102 @@ class EditorsComponent extends Object {
$this->controller->redirect("/editors/queue/{$listtype}");
}
+ function broadcastNotify($group, $addonid, $versionid, $exclude, $subject, $template) {
+ $session = $this->controller->Session->read('User');
+ $subscribers = array();
+
+ foreach ($this->controller->User->findAll() as $user) {
+ if ($session['id'] != $user['User']['id'] && !in_array($user, $exclude)
+ && $user['User']['notifybroadcast']
+ && $this->controller->SimpleAcl->actionAllowed($group, '*', $user))
+ $subscribers[] = $user;
+ }
+
+ if (empty($subscribers)) return;
+
+ $addon = $this->controller->Addon->getAddon($addonid);
+ $version = $this->controller->Version->findById($versionid, null, null, null, null, -1);
+
+ // send out notification email(s)
+ $emailInfo = array(
+ 'id' => $addonid,
+ 'name' => $addon['Translation']['name']['string'],
+ 'versionid' => $versionid,
+ 'version' => $version['Version']['version']
+ );
+ $this->controller->publish('info', $emailInfo, false);
+
+ $this->controller->Email->template = $template;
+ $this->controller->Email->subject = sprintf($subject, $emailInfo['name'].'-'.$emailInfo['version']);
+
+ foreach ($subscribers as &$subscriber) {
+ $this->controller->Email->to = $subscriber['User']['email'];
+ $result = $this->controller->Email->send();
+ }
+ }
+
+ function nominateNotify($addonid, $versionid) {
+ $_ids = $this->controller->EditorSubscription->getSubscribers($addonid);
+ if (empty($_ids))
+ $exclude = array();
+ else
+ $exclude = $this->controller->User->findAllById($_ids, null, null, null, null, -1);
+
+ $this->broadcastNotify('Editors', $addonid, $versionid, $exclude,
+ SITE_NAME.': %s Nomination', '../editors/email/notify_nominate');
+ }
+
+ function pendingNotify($addonid, $versionid) {
+ $this->broadcastNotify('Editors', $addonid, $versionid, array(),
+ SITE_NAME.': %s Pending update', '../editors/email/notify_pending');
+ }
+
+ function superNotify($addonid, $versionid) {
+ $this->broadcastNotify('Admin', $addonid, $versionid, array(),
+ SITE_NAME.': %s Super-review requested', '../editors/email/notify_super');
+ }
+
/**
* Notify subscribed editors of an add-on's update
* @param int $addonid ID of add-on that was updated
* @param int $versionid ID of the add-on's new version
*/
- function updateNotify($addonid, $versionid) {
+ function updateNotify($addonid, $versionid, $release_notify) {
$_ids = $this->controller->EditorSubscription->getSubscribers($addonid);
- if (empty($_ids)) return;
- $subscribers = $this->controller->User->findAllById($_ids, null, null, null, null, -1);
- $addon = $this->controller->Addon->getAddon($addonid);
+ $addon = $this->controller->Addon->findById($addonid);
$version = $this->controller->Version->findById($versionid, null, null, null, null, -1);
-
+
// send out notification email(s)
$emailInfo = array(
'id' => $addonid,
'name' => $addon['Translation']['name']['string'],
'versionid' => $versionid,
- 'version' => $version['Version']['version']
+ 'version' => $version['Version']['version'],
+ 'comments' => 'Trusted activity',
+ 'releasenotes' => SITE_URL . '/addon/' . $addonid . '#addon-advanced'
);
$this->controller->publish('info', $emailInfo, false);
$this->controller->Email->template = '../editors/email/notify_update';
- $this->controller->Email->subject = sprintf('Mozilla Add-ons: %s Updated', $emailInfo['name']);
+ $this->controller->Email->subject = sprintf(SITE_NAME.': %s Updated', $emailInfo['name']);
- foreach ($subscribers as &$subscriber) {
- $this->controller->Email->to = $subscriber['User']['email'];
- $result = $this->controller->Email->send();
- // unsubscribe user from further updates
- $this->controller->EditorSubscription->cancelUpdates($subscriber['User']['id'], $addonid);
+ if (!empty($_ids)) {
+ $subscribers = $this->controller->User->findAllById($_ids, null, null, null, null, -1);
+
+ foreach ($subscribers as &$subscriber) {
+ $this->controller->Email->to = $subscriber['User']['email'];
+ $result = $this->controller->Email->send();
+ // unsubscribe user from further updates
+ $this->controller->EditorSubscription->cancelUpdates($subscriber['User']['id'], $addonid);
+ }
+ }
+
+ if ($addon['Addon']['trusted'] == 1 && $release_notify) {
+ $this->controller->Email->template = '../editors/email/aslo/release';
+ $this->controller->Email->to = SITE_RELEASE_EMAIL;
+ $this->controller->Email->subject = sprintf('[RELEASE] %s-%s', $emailInfo['name'], $emailInfo['version']);
+ $this->controller->Email->send(false, SITE_RELEASE_EMAIL);
}
}
diff --git a/site/app/controllers/components/email.php b/site/app/controllers/components/email.php
index b62f9f7..71f20ac 100644
--- a/site/app/controllers/components/email.php
+++ b/site/app/controllers/components/email.php
@@ -10,8 +10,8 @@ class EmailComponent
/**
* Send email using SMTP Auth by default.
*/
- var $from = 'nobody@mozilla.org';
- var $fromName = 'Mozilla Add-ons';
+ var $from = NOBODY_EMAIL;
+ var $fromName = SITE_NAME;
var $sender = null;
//var $smtpUserName = 'username'; // SMTP username
//var $smtpPassword = 'password'; // SMTP password
@@ -58,7 +58,7 @@ class EmailComponent
}
- function send($html = false)
+ function send($html = false, $reply = null)
{
vendor('phpmailer'.DS.'class.phpmailer');
@@ -81,7 +81,10 @@ class EmailComponent
}
$mail->FromName = $this->fromName;
$mail->AddAddress($this->to, $this->toName );
- $mail->AddReplyTo($this->from, $this->fromName );
+ if ($reply)
+ $mail->AddReplyTo($reply);
+ else
+ $mail->AddReplyTo($this->from, $this->fromName );
$mail->CharSet = 'UTF-8';
//$mail->WordWrap = 50; // set word wrap to 50 characters
diff --git a/site/app/controllers/components/image.php b/site/app/controllers/components/image.php
index 2329f9f..b0b6992 100644
--- a/site/app/controllers/components/image.php
+++ b/site/app/controllers/components/image.php
@@ -129,7 +129,7 @@ class ImageComponent extends Object {
}
}
else {
- return "{$this->controller->base}/en-US/firefox/images/addon_icon/{$addon_id}/".strtotime($addon['Addon']['modified']);
+ return "{$this->controller->base}/en-US/".APP_SHORTNAME."/images/addon_icon/{$addon_id}/".strtotime($addon['Addon']['modified']);
}
}
@@ -200,7 +200,7 @@ class ImageComponent extends Object {
else {
// Always use en-US and firefox and append modified timestamp for
// best caching results. Serves 150-200 million. Refrigerate after serving.
- return "{$this->controller->base}/en-US/firefox/images/{$type['url']}/{$preview_id}/".strtotime($preview['Preview']['modified']);
+ return "{$this->controller->base}/en-US/".APP_SHORTNAME."/images/{$type['url']}/{$preview_id}/".strtotime($preview['Preview']['modified']);
}
}
diff --git a/site/app/controllers/developers_controller.php b/site/app/controllers/developers_controller.php
index 308ea36..f089e63 100644
--- a/site/app/controllers/developers_controller.php
+++ b/site/app/controllers/developers_controller.php
@@ -252,7 +252,7 @@ class DevelopersController extends AppController
// For non-search-engines
if ($data['Addon']['addontype_id'] != ADDON_SEARCH) {
// Make sure GUID doesn't exist already
- if ($existing = $this->Addon->findAll("Addon.guid='{$data['Addon']['guid']}'")) {
+ if (isset($data['Addon']['guid']) && ($existing = $this->Addon->findAll("Addon.guid='{$data['Addon']['guid']}'"))) {
return $this->Error->getJSONforError(sprintf(___('devcp_new_addon_error'), $data['Addon']['guid'], $this->url("/developers/versions/add/{$existing[0]['Addon']['id']}")));
}
}
@@ -339,7 +339,7 @@ class DevelopersController extends AppController
// For non-search-engines
if ($data['Addon']['addontype_id'] != ADDON_SEARCH) {
// Make sure GUID matches add-on ID
- if ($addon['Addon']['guid'] != $data['Addon']['guid']) {
+ if (!empty($data['Addon']['guid']) && $addon['Addon']['guid'] != $data['Addon']['guid']) {
return $this->Error->getJSONforError(sprintf(___('devcp_update_addon_guid_error'), $data['Addon']['guid'], $addon['Addon']['guid']));
}
}
@@ -388,7 +388,7 @@ class DevelopersController extends AppController
}
// notify subscribed editors of update (if any)
- $this->Editors->updateNotify($addon['Addon']['id'], $version_id);
+ $this->Editors->updateNotify($addon['Addon']['id'], $version_id, true);
}
elseif ($type == 'file') {
$version_id = $this->data['Version']['id'];
@@ -442,6 +442,9 @@ class DevelopersController extends AppController
$pending = $this->Addon->query("SELECT COUNT(*) AS pending FROM files WHERE status=".STATUS_PENDING." GROUP BY status");
$pendingCount = (!empty($pending[0][0]['pending']) ? ($pending[0][0]['pending'] - 1) : 0);
+ if ($data['File']['db']['status'] == STATUS_PENDING)
+ $this->Editors->pendingNotify($addon_id, $version_id);
+
return array(
'error' => 0,
'uploadtype' => $type,
@@ -453,6 +456,54 @@ class DevelopersController extends AppController
);
}
+ function _rmtree($dir) {
+ $dir = "$dir";
+
+ if ($dh = opendir($dir)) {
+ while (FALSE !== ($item = readdir($dh))) {
+ if ($item != '.' && $item != '..') {
+ $subdir = $dir . '/' . "$item";
+ if (is_dir($subdir))
+ $this->_rmtree($subdir);
+ else
+ @unlink($subdir);
+ }
+ }
+ closedir($dh);
+ @rmdir($dir);
+ }
+ }
+
+ function _unbundle($bundle, $manifest) {
+ // Extract activity.info from .xo
+ $zip = new Archive_Zip($bundle);
+ $files = $zip->listContent();
+ $first_file = $files[0]['stored_filename'];
+ $paths = split("/", $first_file, 2);
+ $activity_info_path = $paths[0].'/'.$manifest;
+ $out = array();
+
+ $tmpdir = getenv("TMPDIR");
+ if (empty($tmpdir)) $tmpdir = "/tmp";
+
+ $tmpdir = tempnam($tmpdir, 'aslo.'.getmypid().'.');
+ if (file_exists($tmpdir))
+ unlink($tmpdir);
+ if (!mkdir($tmpdir)) {
+ $out['error'] = _('devcp_error_mktmp_failed');
+ return $out;
+ }
+
+ $activity_info = $zip->extract(array('add_path' => $tmpdir, 'by_name' => array($activity_info_path)));
+ if (empty($activity_info))
+ $out['error'] = _('devcp_error_activity_info_not_found');
+ else
+ $out['manifest'] = parse_ini_file($activity_info[0]['filename']);
+
+ $this->_rmtree($tmpdir);
+ return $out;
+ }
+
/**
* Validates the file upload for all types of uploads
*/
@@ -492,6 +543,73 @@ class DevelopersController extends AppController
);
}
+ // we are sugar
+ if (true) {
+ $bundle = $addon['File']['details']['path'];
+ $pathinfo = pathinfo($bundle);
+
+ if ($pathinfo['extension'] == '.xo') {
+ $ini = $this->_unbundle($bundle, 'activity/activity.info');
+ if (isset($ini['error']))
+ return $this->Error->getJSONforError($ini['error']);
+ $ini_file = $ini['manifest'];
+
+ if (!is_array($ini_file))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_not_found'));
+ if (!isset($ini_file['name']))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_name'));
+ if (!isset($ini_file['activity_version']))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_activity_version'));
+
+ if (isset($ini_file['bundle_id']))
+ $addon['Addon']['guid'] = $ini_file['bundle_id'];
+ else if (isset($ini_file['service_name']))
+ $addon['Addon']['guid'] = $ini_file['service_name'];
+ else
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_bundle_id'));
+
+ $addon['Addon']['name'] = $ini_file['name'];
+ $addon['Addon']['summary'] = $ini_file['name'];
+ $addon['Version']['version'] = $ini_file['activity_version'];
+
+ } else {
+ $ini = $this->_unbundle($bundle, 'library/library.info');
+ if (isset($ini['error']))
+ return $this->Error->getJSONforError($ini['error']);
+ $ini_file = $ini['manifest'];
+
+ if (!is_array($ini_file))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_not_found'));
+ if (!isset($ini_file['name']))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_name'));
+ if (!isset($ini_file['long_name']))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_summary'));
+ if (!isset($ini_file['global_name']))
+ return $this->Error->getJSONforError(_('devcp_error_activity_info_missing_bundle_id'));
+
+ $addon['Addon']['name'] = $ini_file['name'];
+ $addon['Addon']['summary'] = $ini_file['long_name'];
+ $addon['Addon']['guid'] = $ini_file['global_name'];
+
+ if (!isset($this->data['Addon']['id'])) {
+ $addon['Version']['version'] = 1;
+ } else {
+ $addon_id = $this->data['Addon']['id'];
+ $_addon = $this->Addon->findById($addon_id);
+ $version = 0;
+
+ if (!empty($_addon)) {
+ foreach ($_addon['Version'] as $i) {
+ if ($i['version'] > $version) {
+ $version = $i['version'];
+ }
+ }
+ }
+
+ $addon['Version']['version'] = $version + 1;
+ }
+ }
+ } else
// Parse install.rdf file if not a search plugin
if ($addon['Addon']['addontype_id'] != ADDON_SEARCH) {
// Extract install.rdf from xpi or jar
@@ -629,6 +747,8 @@ class DevelopersController extends AppController
function _editAddonProperties($addon_id) {
// Save translations if POST data
if (!empty($this->data['Addon']) && $this->viewVars['author_role'] >= AUTHOR_ROLE_DEV) {
+ $errors = array();
+
// Split localized fields from other fields
list($localizedFields, $unlocalizedFields) = $this->Addon->splitLocalizedFields($this->data['Addon']);
@@ -673,7 +793,15 @@ class DevelopersController extends AppController
$this->Addon->id = $addon_id;
$this->Addon->saveTranslations($addon_id, $this->params['form']['data']['Addon'], $localizedFields);
- $this->Addon->save($unlocalizedFields);
+ if (!$this->Addon->save($unlocalizedFields)) {
+ foreach ($this->Addon->validationErrors as $efield => $error) {
+ switch ($efield) {
+ case 'guid':
+ $errors[$efield] = sprintf(___('devcp_error_invalid_guid'), $unlocalizedFields[$efield]);
+ break;
+ }
+ }
+ }
if (empty($errors)) {
$this->publish('success', true);
@@ -729,6 +857,17 @@ class DevelopersController extends AppController
$addon = $this->Addon->findById($addon_id);
+ // we are sugar
+ if (true) {
+ // Sugar activities only support Sugar
+ $supportedApps = array(
+ 0 => array(
+ 'Application' => array(
+ 'id' => APP_FIREFOX
+ )
+ )
+ );
+ } else
if ($addon['Addon']['addontype_id'] == ADDON_SEARCH) {
// Search engines don't have supported applications
$supportedApps = array(
@@ -778,6 +917,11 @@ class DevelopersController extends AppController
$this->publish('applications', $this->Application->getIDList());
+ // we are sugar
+ if (true) {
+ // since we have only one application_id
+ $otherTags = array();
+ } else
// The "Other" category for each application that has one
if ($addon['Addon']['addontype_id'] == ADDON_SEARCH) {
$otherTags = array(
@@ -887,7 +1031,18 @@ class DevelopersController extends AppController
$criteria['category'] = !empty($addon['Tag']);
$criteria['previews'] = !empty($previews);
$criteria['prerelease'] = !empty($addon['Addon']['prerelease']) ? false : true;
+ $criteria['application'] = !empty($versions) ? true : false;
+ if (!empty($versions)) {
+ foreach ($addon['Version'] as $version) {
+ $apps = $this->Version->getCompatibleAppIds($version['id']);
+ if (empty($apps)) {
+ $criteria['application'] = false;
+ break;
+ }
+ }
+ }
+
return $criteria;
}
@@ -906,7 +1061,7 @@ class DevelopersController extends AppController
$criteria = $this->_checkCriteria($this->viewVars['addon_id']);
// Make sure criteria is fulfilled
- if (!$criteria['name'] || !$criteria['summary'] || !$criteria['description'] || !$criteria['category']) {
+ if (!$criteria['name'] || !$criteria['summary'] || !$criteria['description'] || !$criteria['category'] || !$criteria['application']) {
return true;
}
@@ -963,7 +1118,8 @@ class DevelopersController extends AppController
// notify subscribed editors of update
global $valid_status;
$version_id = $this->Version->getVersionByAddonId($addon['Addon']['id'], $valid_status);
- $this->Editors->updateNotify($addon['Addon']['id'], $version_id);
+ $this->Editors->updateNotify($addon['Addon']['id'], $version_id, false);
+ $this->Editors->nominateNotify($addon['Addon']['id'], $version_id);
}
}
@@ -1121,8 +1277,27 @@ class DevelopersController extends AppController
$version_id = $version['Version']['id'];
$addon_id = $version['Version']['addon_id'];
+ $need_post = (!empty($this->data['Version']) && $this->viewVars['author_role'] >= AUTHOR_ROLE_DEV);
+ $error = True;
+
+ if ($need_post && !empty($this->data['Application'])) {
+ foreach ($this->data['Application'] as $application_id => $app) {
+ if (!empty($app['new']) || empty($app['delete'])) {
+ $error = False;
+ break;
+ }
+ }
+ }
+
+ if (!$need_post) {
+ // pass
+ }
+ else if ($error) {
+ $errors = array('applications' => ___('devcp_error_empty_application_list'));
+ $this->publish('errors', $errors);
+ }
// Save data if POST data
- if (!empty($this->data['Version']) && $this->viewVars['author_role'] >= AUTHOR_ROLE_DEV) {
+ else {
// Save translated fields (only releasenotes)
list($localizedFields, $unlocalizedFields) = $this->Version->splitLocalizedFields($this->data['Version']);
$this->Version->saveTranslations($version_id, $this->params['form']['data']['Version'], $localizedFields);
@@ -1389,6 +1564,8 @@ class DevelopersController extends AppController
$return['success'][] = sprintf(___('devcp_add_previews_success_replace'), $id, $name);
else
$return['success'][] = sprintf(___('devcp_add_previews_success_upload'), $name);
+
+ $this->data['Preview']['highlight'] = $previewData['highlight'];
}
else
$return['errors'][] = sprintf(___('devcp_add_previews_save_error'), $name);
diff --git a/site/app/controllers/files_controller.php b/site/app/controllers/files_controller.php
index da78b3c..694085d 100644
--- a/site/app/controllers/files_controller.php
+++ b/site/app/controllers/files_controller.php
@@ -116,6 +116,15 @@ class FilesController extends AppController
foreach ($contents as $content) {
$isJar = false;
+ if ($addontype == ADDON_EXTENSION) {
+ $paths = split("/", $content['filename'], 2);
+ $pathinfo = pathinfo($path);
+ if ($pathinfo['extension'] == '.xo')
+ $startfile = $paths[0].'/activity/activity.info';
+ else
+ $startfile = $paths[0].'/library/library.info';
+ }
+
if (substr($content['filename'], strrpos($content['filename'], '.')) == '.jar') {
$content['folder'] = 1;
$isJar = true;
diff --git a/site/app/controllers/search_controller.php b/site/app/controllers/search_controller.php
index 65e8ebd..670bc15 100644
--- a/site/app/controllers/search_controller.php
+++ b/site/app/controllers/search_controller.php
@@ -179,7 +179,7 @@ class SearchController extends AppController
$this->publish('vfuz', $vfuz);
// execute this search
- $_result_ids = $this->Search->search($_terms, $category[0], $category[1], NULL, $lver, $hver, $vfuz, $atype, $pid, $lup, $sort);
+ $_result_ids = $this->Search->search($_terms, $category[0], $category[1], NULL, $lver, $hver, $vfuz, $atype, $pid == PLATFORM_ANY ? PLATFORM_ANY : $pid+1, $lup, $sort);
if ($this->params['action'] != 'rss') {
$this->pageTitle = _('search_pagetitle').' :: '.sprintf(_('addons_home_pagetitle'), APP_PRETTYNAME);
diff --git a/site/app/controllers/users_controller.php b/site/app/controllers/users_controller.php
index b906d1e..a848e4e 100644
--- a/site/app/controllers/users_controller.php
+++ b/site/app/controllers/users_controller.php
@@ -489,6 +489,7 @@ class UsersController extends AppController
// notifications
$changed['notifycompat'] = $this->data['User']['notifycompat'];
$changed['notifyevents'] = $this->data['User']['notifyevents'];
+ $changed['notifybroadcast'] = $this->data['User']['notifybroadcast'];
// save it
$this->User->id = $sessionuser['id'];
diff --git a/site/app/models/addon_tag.php b/site/app/models/addon_tag.php
index 19cbe2e..da2ec18 100644
--- a/site/app/models/addon_tag.php
+++ b/site/app/models/addon_tag.php
@@ -60,10 +60,13 @@ class AddonTag extends AppModel
* @param string SQL order, default random
* @return array Add-on IDs that match the criteria
*/
- function getRandomAddons($tag, $recommended=false, $limit=null, $order='RAND()', $addontype=null) {
+ function getRandomAddons($tag, $recommended=false, $limit=null, $order=null, $addontype=null) {
global $valid_status;
- if (!is_array($tag)) $tag = array($tag);
+ if (is_null($order))
+ $order = 'RAND()';
+ if (!is_array($tag))
+ $tag = (strtolower($tag) == 'all') ? array() : array($tag);
if (!is_null($addontype) && !is_array($addontype)) $addontype = array($addontype);
$raw_addons = $this->query(
@@ -71,7 +74,7 @@ class AddonTag extends AppModel
."FROM addons_tags AS AddonTag "
."INNER JOIN addons AS Addon ON (AddonTag.addon_id = Addon.id)"
."WHERE "
- ."AddonTag.tag_id IN (".implode(',', $tag).') AND '
+ .(!empty($tag) ? "AddonTag.tag_id IN (".implode(',', $tag).') AND ' : '')
."AddonTag.feature = ".($recommended ? '1' : '0')." AND "
."Addon.status IN (".implode(',', $valid_status).') AND '
.'Addon.inactive = 0 '
diff --git a/site/app/models/tag.php b/site/app/models/tag.php
index 42877e1..acf70a7 100644
--- a/site/app/models/tag.php
+++ b/site/app/models/tag.php
@@ -130,5 +130,24 @@ class Tag extends AppModel
}
}
+ function beforeFind(&$queryData) {
+ $queryData = parent::beforeFind($queryData);
+
+ if (isset($queryData['conditions'])) {
+ if (is_array($queryData['conditions'])) {
+ $conditions = array();
+ foreach ($queryData['conditions'] as $i => $j)
+ if ($i != 'addontype_id')
+ $conditions[$i] = $j;
+ } else {
+ $conditions = preg_replace('/tag.addontype_id\s*=\s*[^\s]*/i', 'TRUE', $queryData['conditions']);
+ $conditions = preg_replace('/tag.addontype_id\s*in\s*\([^)]*\)/i', 'TRUE', $conditions);
+ }
+ $queryData['conditions'] = $conditions;
+
+ }
+
+ return $queryData;
+ }
}
?>
diff --git a/site/app/models/version.php b/site/app/models/version.php
index 70c7468..e323ac2 100644
--- a/site/app/models/version.php
+++ b/site/app/models/version.php
@@ -301,5 +301,31 @@ class Version extends AppModel
return $file_ids;
}
+ function save($data = null, $validate = true, $fieldList = array()) {
+ $result = parent::save($data, $validate, $fieldList);
+
+ if ($result) {
+ $versions = $this->getCompatibleApps($this->id);
+
+ if (empty($versions)) {
+ $sql = "
+ SELECT
+ a.id
+ FROM
+ appversions AS a
+ WHERE
+ a.application_id = ".SITE_APP."
+ ORDER BY
+ a.version DESC
+ LIMIT 1";
+
+ $rows = $this->query($sql);
+ $version = $rows[0]['a']['id'];
+ $this->addCompatibleApp($this->id, SITE_APP, $version, $version);
+ }
+ }
+
+ return $result;
+ }
}
?>
diff --git a/site/app/views/developers/addon_edit_categories.thtml b/site/app/views/developers/addon_edit_categories.thtml
index 4950629..c34f6f9 100644
--- a/site/app/views/developers/addon_edit_categories.thtml
+++ b/site/app/views/developers/addon_edit_categories.thtml
@@ -68,7 +68,7 @@
echo '<select name="data[Tag]['.$application_id.'][]"'.($otherSelected ? ' disabled="disabled"' : '').'>';
echo '<option value="" style="color: gray;">'.___('devcp_edit_authors_option_empty').'</option>';
foreach ($tags as $tag_id => $tag_name) {
- if ($otherTags[$application_id] == $tag_id)
+ if (!empty($otherTags[$application_id]) && $otherTags[$application_id] == $tag_id)
continue;
echo '<option value="'.$tag_id.'"';
diff --git a/site/app/views/developers/addon_edit_properties.thtml b/site/app/views/developers/addon_edit_properties.thtml
index d408527..200a782 100644
--- a/site/app/views/developers/addon_edit_properties.thtml
+++ b/site/app/views/developers/addon_edit_properties.thtml
@@ -177,8 +177,9 @@
</div>
<?php if ($this->controller->SimpleAcl->actionAllowed('Admin', 'ConfigureAnyAddon', $this->controller->Session->read('User'))): ?>
- <div class="field graybox rounded spaced" style="width: 600px;">
+ <div class="field graybox rounded spaced<?=(!empty($errors['guid']) ? ' errors' : '')?>" style="width: 600px;">
<h4><?=___('devcp_edit_properties_header_admin_settings')?></h4>
+ <?=(!empty($errors['guid']) ? '<div class="error-message">'.$errors['guid'].'</div>' : '')?>
<h5><?=___('devcp_edit_properties_header_trusted')?></h5>
<p class="smallmargin"><?=___('devcp_edit_properties_trusted')?></p>
<label class="indented"><input type="radio" name="data[Addon][trusted]" value="1" <?=($addon['Addon']['trusted'] == 1 ? 'checked="checked"' : '')?>/>&nbsp;<?=___('devcp_edit_properties_label_trusted')?></label>
diff --git a/site/app/views/developers/addon_status.thtml b/site/app/views/developers/addon_status.thtml
index eced95d..5858a28 100644
--- a/site/app/views/developers/addon_status.thtml
+++ b/site/app/views/developers/addon_status.thtml
@@ -86,7 +86,7 @@
break;
case STATUS_DISABLED:
- echo sprintf(___('devcp_addon_status_switch_disabled'), 'amo-admins@mozilla.org');
+ echo sprintf(___('devcp_addon_status_switch_disabled'), ADMIN_EMAIL);
break;
}
?>
@@ -100,10 +100,11 @@
echo '<li class="'.($criteria['summary'] ? 'pass' : 'fail').'">'.___('devcp_addon_status_criteria_summary').'</li>';
echo '<li class="'.($criteria['description'] ? 'pass' : 'fail').'">'.___('devcp_addon_status_criteria_description').'</li>';
echo '<li class="'.($criteria['category'] ? 'pass' : 'fail').'">'.___('devcp_addon_status_criteria_category').'</li>';
+ echo '<li class="'.($criteria['application'] ? 'pass' : 'fail').'">'.___('devcp_addon_status_criteria_application').'</li>';
echo '</ul>';
$completionEnabled = false;
- if ($criteria['name'] && $criteria['summary'] && $criteria['description'] && $criteria['category']) {
+ if ($criteria['name'] && $criteria['summary'] && $criteria['description'] && $criteria['category'] && $criteria['application']) {
$completionEnabled = true;
echo '<p>'.sprintf(___('devcp_addon_status_completion_enabled'), $sandbox).'</p>';
}
diff --git a/site/app/views/developers/dashboard.thtml b/site/app/views/developers/dashboard.thtml
index 2fba02b..8ea5e7e 100644
--- a/site/app/views/developers/dashboard.thtml
+++ b/site/app/views/developers/dashboard.thtml
@@ -82,7 +82,10 @@
echo '<li class="versions"><a href="'.$html->url('/developers/versions/'.$addon_id).'" class="view">'.___('devcp_dashboard_versions').'</a>';
echo '<span class="action-details">';
if (!empty($latestVersion)) {
- echo _('devcp_summary_lastversion').' '.$html->link($latestVersion['version'], '/developers/versions/edit/'.$latestVersion['id']).' ('.$this->controller->Amo->describeVersionStatus($latestVersion['File']).')';
+ echo _('devcp_summary_lastversion').' '.$html->link($latestVersion['version'], '/developers/versions/edit/'.$latestVersion['id']);
+ if (isset($latestVersion['File'])) {
+ echo ' ('.$this->controller->Amo->describeVersionStatus($latestVersion['File']).')';
+ }
if ($addon['Addon']['inactive'] != 1) {
echo '&nbsp;&middot;&nbsp;';
}
@@ -91,12 +94,14 @@
echo '<a href="'.$html->url('/developers/versions/add/'.$addon_id).'">'.___('devcp_dashboard_versions_new').'</a>';
}
echo '</span></li>';
+ // Previews
+ echo '<li class="previews"><a href="'.$html->url('/developers/previews/'.$addon_id).'" class="view">'._('devcp_actionbar_link_previews').'</a></li>';
echo '</ul>';
}
else {
// Admin Disabled Add-on
echo '<p>'.sprintf(___('devcp_dashboard_disabled_status'), '<span class ="'.STATUS_DISABLED.'">'.$statuses[STATUS_DISABLED].'</span>').'</p>';
- echo '<p>'.sprintf(___('devcp_dashboard_disabled_questions'), 'amo-admins@mozilla.org').'</p>';
+ echo '<p>'.sprintf(___('devcp_dashboard_disabled_questions'), ADMIN_EMAI).'</p>';
}
?>
</div>
diff --git a/site/app/views/developers/uploader.thtml b/site/app/views/developers/uploader.thtml
index 579d814..ec1976f 100644
--- a/site/app/views/developers/uploader.thtml
+++ b/site/app/views/developers/uploader.thtml
@@ -151,7 +151,7 @@
<div id="upload-success" class="greenbox-tr"><div class="greenbox-tl">
<?php if ($type == 'new'): ?>
<div id="addon-created-content">
- <h3><?=___('devcp_uploader_header_created')?>
+ <h3><?=___('devcp_uploader_header_created')?></h3>
<div id="created-results">
<?=sprintf(___('devcp_uploader_created_results'), 'href="'.$html->url('/developers/addon/status/').'" id="status-link"')?>
<div class="action-button-container centered"><a id="complete-link" href="<?=$html->url('/developers/addon/edit/')?>" class="action-button rounded"><?=___('devcp_uploader_button_edit')?></a></div>
@@ -163,7 +163,7 @@
<h3><?=sprintf(___('devcp_uploader_header_update_created'), '<span id="new-version-number"></span>')?></h3>
<div id="created-results">
<p><?=sprintf(___('devcp_uploader_p_update_created'), '<span id="new-file-status"></span>')?></p>
- <p id="pending-message"><?=sprintf(___('devcp_uploader_p_pending_version'), '<span id="queue-count"></span>', 'href="https://wiki.mozilla.org/Update:Editors"')?></p>
+ <p id="pending-message"><?=sprintf(___('devcp_uploader_p_pending_version'), '<span id="queue-count"></span>', 'href="'.SITE_EDITOR_WIKI.'"')?></p>
<p><?=sprintf(___('devcp_uploader_p_update_version'), '/developers/versions/edit/', '/developers/addon/status/'.$addon_id)?>
<div class="action-button-container centered"><a id="complete-link" href="<?=$html->url('/developers/versions/edit/')?>" class="action-button rounded"><?=___('devcp_uploader_button_release')?></a></div>
</div>
@@ -173,7 +173,7 @@
<h3><?=___('devcp_uploader_header_file_added')?></h3>
<div id="created-results">
<p><?=sprintf(___('devcp_uploader_file_created'), $version, '<span id="new-file-status"></span>')?></p>
- <p id="pending-message"><?=sprintf(___('devcp_uploader_p_pending_file'), '<span id="queue-count"></span>', 'href="https://wiki.mozilla.org/Update:Editors"')?></p>
+ <p id="pending-message"><?=sprintf(___('devcp_uploader_p_pending_file'), '<span id="queue-count"></span>', 'href="'.SITE_EDITOR_WIKI.'"')?></p>
<p><?=sprintf(___('devcp_uploader_p_update_file'), '/developers/versions/edit/', '/developers/addon/status/'.$addon_id)?>
</div>
</div><!-- /#file-created-content -->
diff --git a/site/app/views/developers/versions_edit.thtml b/site/app/views/developers/versions_edit.thtml
index cc6bc7f..55e8517 100644
--- a/site/app/views/developers/versions_edit.thtml
+++ b/site/app/views/developers/versions_edit.thtml
@@ -116,9 +116,11 @@
// Compatible applications (hidden for search engines)
if ($addon['Addon']['addontype_id'] != ADDON_SEARCH) {
- echo '<div class="graybox rounded spaced field">';
+ echo '<div class="graybox rounded spaced field '.(!empty($errors['applications']) ? ' errors' : '').'">';
echo '<h4>'.___('devcp_versions_edit_header_compat').'</h4>';
- echo '<p>'.sprintf(___('devcp_versions_edit_adjust'), 'href="'.$html->url('/pages/appversions').'"').'</p>';
+ if (!empty($errors['applications']))
+ echo '<div class="error-message">'.$errors['applications'].'</div>';
+ echo '<p>'.sprintf(___('devcp_versions_edit_adjust'), '/pages/appversions').'</p>';
echo '<table id="edit-versions-targetapps-table" class="pretty-table"><tbody>';
$i = 0;
diff --git a/site/app/views/downloads/file.thtml b/site/app/views/downloads/file.thtml
index d0e6ea5..ba8d45d 100644
--- a/site/app/views/downloads/file.thtml
+++ b/site/app/views/downloads/file.thtml
@@ -35,11 +35,11 @@
* the terms of any one of the MPL, the GPL or the LGPL.
*
* ***** END LICENSE BLOCK ***** */
-header("Content-type: application/x-xpinstall");
+header("Content-type: " . SITE_MIME);
if (!empty($attachment) && $attachment)
header("Content-Disposition: attachment; filename=\"{$fileName}\"");
header("Content-Length: " . filesize($fileLoc));
$html->readfile_chunked($fileLoc);
-?> \ No newline at end of file
+?>
diff --git a/site/app/views/editors/email/aslo/release_plain.thtml b/site/app/views/editors/email/aslo/release_plain.thtml
new file mode 100644
index 0000000..8e3309c
--- /dev/null
+++ b/site/app/views/editors/email/aslo/release_plain.thtml
@@ -0,0 +1,16 @@
+Url:
+<?=SITE_URL?>/addon/<?=$info['id']?>
+
+
+Release notes:
+<?=$info['releasenotes']?>
+
+
+Reviewer comments:
+<?=$info['comments']?>
+
+
+
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/email/inforequest_plain.thtml b/site/app/views/editors/email/inforequest_plain.thtml
index 6d99f11..039e8db 100644
--- a/site/app/views/editors/email/inforequest_plain.thtml
+++ b/site/app/views/editors/email/inforequest_plain.thtml
@@ -7,7 +7,8 @@ A Mozilla Add-ons Editor requested further information from you regarding versio
Please go to <?=FULL_BASE_URL.$html->url("/developers/discuss/{$info['infoid']}", true, true, false)?> to reply.
-If you have further questions, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have further questions, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
+
+<?=SITE_NAME?>
-Mozilla Add-ons
<?=SITE_URL?>
diff --git a/site/app/views/editors/email/inforequest_reply_plain.thtml b/site/app/views/editors/email/inforequest_reply_plain.thtml
index 4a3d859..75bacba 100644
--- a/site/app/views/editors/email/inforequest_reply_plain.thtml
+++ b/site/app/views/editors/email/inforequest_reply_plain.thtml
@@ -5,7 +5,8 @@
Please go to <?=FULL_BASE_URL.$html->url("/developers/discuss/{$info['infoid']}", true, true, false)?> if you would like to reply.
-If you have further questions, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have further questions, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
+
+<?=SITE_NAME?>
-Mozilla Add-ons
<?=SITE_URL?>
diff --git a/site/app/views/editors/email/nominated/public_plain.thtml b/site/app/views/editors/email/nominated/public_plain.thtml
index 15afe4f..00c4d6d 100644
--- a/site/app/views/editors/email/nominated/public_plain.thtml
+++ b/site/app/views/editors/email/nominated/public_plain.thtml
@@ -1,8 +1,8 @@
-Congratulations! Your nominated add-on, <?=$info['name']?>, has been reviewed by a Mozilla Add-ons editor who approved your add-on to be public.
+Congratulations! Your nominated, <?=$info['name']?>, has been reviewed by a <?=SITE_NAME?> editor who approved your add-on to be public.
Your most recent version (<?=$info['version']?>) has also been made public.
-You can view your public add-on now at: http://addons.mozilla.org/addon/<?=$info['id']?>
+You can view your public add-on now at: <?=SITE_URL?>/addon/<?=$info['id']?>
Review Information:
@@ -11,7 +11,8 @@ Reviewer: <?=$info['reviewer']?>
Comments: <?=$info['comments']?>
-If you have questions about this review, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have questions about this review, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
-Mozilla Add-ons
-http://addons.mozilla.org
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/email/nominated/sandbox_plain.thtml b/site/app/views/editors/email/nominated/sandbox_plain.thtml
index 61ceb37..0e72fd4 100644
--- a/site/app/views/editors/email/nominated/sandbox_plain.thtml
+++ b/site/app/views/editors/email/nominated/sandbox_plain.thtml
@@ -1,4 +1,4 @@
-Your nominated add-on, <?=$info['name']?>, has been reviewed by a Mozilla Add-ons editor who decided to retain your add-on in the sandbox.
+Your nominated add-on, <?=$info['name']?>, has been reviewed by a <?=SITE_NAME?> editor who decided to retain your add-on in the sandbox.
Review Information:
Reviewer: <?=$info['reviewer']?>
@@ -6,7 +6,8 @@ Reviewer: <?=$info['reviewer']?>
Comments: <?=$info['comments']?>
-If you have questions about this review, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have questions about this review, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
-Mozilla Add-ons
-http://addons.mozilla.org
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/email/notify_nominate_plain.thtml b/site/app/views/editors/email/notify_nominate_plain.thtml
new file mode 100644
index 0000000..1c795ee
--- /dev/null
+++ b/site/app/views/editors/email/notify_nominate_plain.thtml
@@ -0,0 +1,19 @@
+Dear editor,
+
+New activity was nominated to be public.
+
+Name: <?=$info['name']?>
+Version Number: <?=$info['version']?>
+URL: <?=FULL_BASE_URL.$html->url("/addon/{$info['id']}")?>
+Review Link: <?=FULL_BASE_URL.$html->url("/editors/review/{$info['versionid']}")?>
+
+Thanks!
+
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
+
+
+This is a broadcast notification sent to you because you requested
+a follow up email regarding your notification profile
+<?=SITE_URL?>/sugar/users/edit#profile-notifications
diff --git a/site/app/views/editors/email/notify_pending_plain.thtml b/site/app/views/editors/email/notify_pending_plain.thtml
new file mode 100644
index 0000000..4f312b3
--- /dev/null
+++ b/site/app/views/editors/email/notify_pending_plain.thtml
@@ -0,0 +1,19 @@
+Dear editor,
+
+New version of activity is arrived.
+
+Name: <?=$info['name']?>
+Version Number: <?=$info['version']?>
+URL: <?=FULL_BASE_URL.$html->url("/addon/{$info['id']}")?>
+Review Link: <?=FULL_BASE_URL.$html->url("/editors/review/{$info['versionid']}")?>
+
+Thanks!
+
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
+
+
+This is a broadcast notification sent to you because you requested
+a follow up email regarding your notification profile
+<?=SITE_URL?>/sugar/users/edit#profile-notifications
diff --git a/site/app/views/editors/email/notify_super_plain.thtml b/site/app/views/editors/email/notify_super_plain.thtml
new file mode 100644
index 0000000..ef9010e
--- /dev/null
+++ b/site/app/views/editors/email/notify_super_plain.thtml
@@ -0,0 +1,23 @@
+Dear Superheroes,
+
+An editor has requested super-review of the following add-on due to security,
+copyright, or other administrative concerns.
+
+Please open your plethora of knowledge and wield your mighty administrative
+sword of decision making in the general vicinity of:
+
+Name: <?=$info['name']?>
+Version Number: <?=$info['version']?>
+URL: <?=FULL_BASE_URL.$html->url("/addon/{$info['id']}")?>
+Review Link: <?=FULL_BASE_URL.$html->url("/editors/review/{$info['versionid']}")?>
+
+Love,
+
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
+
+
+This is a broadcast notification sent to you because you requested
+a follow up email regarding your notification profile
+<?=SITE_URL?>/sugar/users/edit#profile-notifications
diff --git a/site/app/views/editors/email/notify_update_plain.thtml b/site/app/views/editors/email/notify_update_plain.thtml
index 5694fd3..2db6392 100644
--- a/site/app/views/editors/email/notify_update_plain.thtml
+++ b/site/app/views/editors/email/notify_update_plain.thtml
@@ -13,7 +13,10 @@ Review Link: <?=FULL_BASE_URL.$html->url("/editors/review/{$info['versionid']}")
Thanks!
-Mozilla Add-ons
+
+<?=SITE_NAME?>
+
<?=SITE_URL?>
+
This is a one-time notification sent to you because you requested a follow up email regarding queue activity for <?=$info['name']?>. There is no need to unsubscribe if you don't wish to receive further mail.
diff --git a/site/app/views/editors/email/pending/public_plain.thtml b/site/app/views/editors/email/pending/public_plain.thtml
index 724c883..657692d 100644
--- a/site/app/views/editors/email/pending/public_plain.thtml
+++ b/site/app/views/editors/email/pending/public_plain.thtml
@@ -1,4 +1,4 @@
-The following files of <?=$info['name']?> <?=$info['version']?> have been made public by a Mozilla Add-ons editor:
+The following files of <?=$info['name']?> <?=$info['version']?> have been made public by a <?=SITE_NAME?> editor:
<?php
foreach ($info['files'] as $file) {
@@ -14,7 +14,8 @@ Tested on <?=$info['os']?> with <?=$info['apps']?>
Comments: <?=$info['comments']?>
-If you have questions about this review, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have questions about this review, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
-Mozilla Add-ons
-http://addons.mozilla.org
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/email/pending/sandbox_plain.thtml b/site/app/views/editors/email/pending/sandbox_plain.thtml
index c174a62..7c34917 100644
--- a/site/app/views/editors/email/pending/sandbox_plain.thtml
+++ b/site/app/views/editors/email/pending/sandbox_plain.thtml
@@ -1,4 +1,4 @@
-The following files of <?=$info['name']?> <?=$info['version']?> have been retained in the sandbox by a Mozilla Add-ons editor:
+The following files of <?=$info['name']?> <?=$info['version']?> have been retained in the sandbox by a <?=SITE_NAME?> editor:
Review Information:
@@ -9,7 +9,8 @@ Tested on <?=$info['os']?> with <?=$info['apps']?>
Comments: <?=$info['comments']?>
-If you have questions about this review, please e-mail amo-editors@mozilla.org or join #addons on irc.mozilla.org.
+If you have questions about this review, please e-mail <?=EDITOR_EMAIL?> or join <?=SITE_IRC?>.
-Mozilla Add-ons
-http://addons.mozilla.org
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/email/superreview_plain.thtml b/site/app/views/editors/email/superreview_plain.thtml
index 1579a8b..2cca9ea 100644
--- a/site/app/views/editors/email/superreview_plain.thtml
+++ b/site/app/views/editors/email/superreview_plain.thtml
@@ -4,7 +4,7 @@ An editor has requested super-review of the following add-on due to security, co
Please open your plethora of knowledge and wield your mighty administrative sword of decision making in the general vicinity of:
-<?=$info['name']?> - http://addons.mozilla.org/addon/<?=$info['id']?>
+<?=$info['name']?> - <?=SITE_URL?>/addon/<?=$info['id']?>
Review Information:
@@ -15,5 +15,6 @@ Comments: <?=$info['comments']?>
Love,
-Mozilla Add-ons
-http://addons.mozilla.org
+<?=SITE_NAME?>
+
+<?=SITE_URL?>
diff --git a/site/app/views/editors/queue.thtml b/site/app/views/editors/queue.thtml
index 8f57ed7..945ebde 100644
--- a/site/app/views/editors/queue.thtml
+++ b/site/app/views/editors/queue.thtml
@@ -126,7 +126,7 @@
echo $sortimg;
?></td>
<?php
- $apps = array('Firefox', 'Thunderbird', 'Mozilla', 'SeaMonkey', 'Sunbird');
+ $apps = array();
foreach ($apps as $app) {
echo '<td>'.$html->image('developers/'.strtolower($app).'.png', array('title' => sprintf(_('editors_queue_app_compatibility'), $app))).'</td>';
}
@@ -179,7 +179,7 @@
}
?>
<div id="helpfulLinks">
-<?=_('editors_helpful_links').': '.$html->link(_('editors_link_policy'), '/pages/policy').' | '.$html->link(_('editors_link_guide'), 'http://wiki.mozilla.org/Update:Editors')?>
+<?=_('editors_helpful_links').': '.$html->link(_('editors_link_policy'), '/pages/policy').' | '.$html->link(_('editors_link_guide'), SITE_EDITOR_WIKI)?>
</div>
</div>
<script type="text/javascript">
diff --git a/site/app/views/elements/categories.thtml b/site/app/views/elements/categories.thtml
index e7cbd53..a9e5ad8 100644
--- a/site/app/views/elements/categories.thtml
+++ b/site/app/views/elements/categories.thtml
@@ -65,7 +65,7 @@ global $hybrid_categories;
if (!empty($highlight_cat)) {
echo "<p>";
- $_url = "/browse/type:{$highlight_cat['type']}";
+ $_url = "/browse/type:all";
if ($highlight_cat['cat'] != 0) // category not empty
$_url .= "/cat:{$highlight_cat['cat']}";
@@ -91,7 +91,7 @@ global $hybrid_categories;
<?php
foreach ($AmoTags as $_tag) {
- $_url = "/browse/type:{$_tag['type']}".($_tag['cat']!=0 ? "/cat:{$_tag['cat']}" : '');
+ $_url = "/browse/type:all".($_tag['cat']!=0 ? "/cat:{$_tag['cat']}" : '');
echo '<li>'.$html->link($html->entities($_tag['name']), $_url)."</li>\n";
}
?>
diff --git a/site/app/views/elements/footer.thtml b/site/app/views/elements/footer.thtml
index 9b2f9a6..1317c1e 100644
--- a/site/app/views/elements/footer.thtml
+++ b/site/app/views/elements/footer.thtml
@@ -64,14 +64,14 @@
<?php endif; ?>
<div id="footer-legal">
- <p id="copyright"><?=_('footer_copyright')?> <span title="<?=php_uname('n')?>">&#169;</span> 2005&#8211;<?=date('Y')?> Mozilla. <?=_('footer_all_rights_reserved')?></p>
+ <p id="copyright"><?=_('footer_copyright')?> <span title="<?=php_uname('n')?>">&#169;</span> 2005&#8211;<?=date('Y')?> Mozilla, <?=date('Y')?> <?=SITE_ORG?>. <?=_('footer_all_rights_reserved')?></p>
<ul id="nav-legal">
<li><?=$html->link(_('footer_privacy_policy'), '/pages/privacy');?></li>
<li><a href="http://www.mozilla.com/<?=LANG?>/about/legal.html"><?=_('footer_legal_notices')?></a></li>
<?php if (!isset($suppressCredits) || !$suppressCredits): ?><li><?=$html->link(_('footer_credits'), '/pages/credits')?></li><?php endif; ?>
- <li><?=$html->link(___('footer_a_about'), '/pages/about')?></li>
- <li><?=$html->link('<abbr title="'.___('footer_abbr_faq').'">'.___('footer_a_faq').'</abbr>', '/pages/faq')?></li>
- <li><a href="http://blog.mozilla.com/addons"><?=___('footer_a_blog')?></a></li>
+ <li><?=$html->link(___('footer_a_about'), SITE_ABOUT)?></li>
+ <li><?=$html->link('<abbr title="'.___('footer_abbr_faq').'">'.___('footer_a_faq').'</abbr>', SITE_FAQ)?></li>
+ <li><?=$html->link(___('footer_a_blog'), SITE_BLOG)?></li>
</ul>
<p id="footer-disclaimer"><?=_('footer_disclaimer')?></p>
</div>
diff --git a/site/app/views/elements/header.thtml b/site/app/views/elements/header.thtml
index 9147b7d..770b79f 100644
--- a/site/app/views/elements/header.thtml
+++ b/site/app/views/elements/header.thtml
@@ -123,7 +123,7 @@
<?php echo $html->image('app-icons/'.LAYOUT_NAME.'.png', array('alt' => $main_header)); ?>
<?php
if (LAYOUT_NAME == 'generic' || LAYOUT_NAME == 'developers') {
- echo 'Mozilla Add-ons</a></h1>';
+ echo SITE_NAME.'</a></h1>';
if (!empty($subpagetitle)) {
echo '<h2>'.$subpagetitle.'</h2>';
}
@@ -143,7 +143,7 @@
if ($this->controller->Session->check('User')) {
$user = $this->controller->Session->read('User');
echo '<li>' . $html->link(_('header_navlink_myaccount'), '/users/edit', array('title' => $user['email'])) . '</li>' . "\n";
- echo '<li>' . $html->link(_('sidebar_navlink_developer_tools'), '/developers') . '</li>' . "\n";
+ echo '<li>' . $html->link(_('sidebar_navlink_developer_tools'), '/developers/dashboard') . '</li>' . "\n";
if ($this->controller->SimpleAcl->actionAllowed('Editors', '%', $this->controller->Session->read('User'))) {
echo '<li>' . $html->link(_('sidebar_navlink_editor_tools'), '/editors') .'</li>' . "\n";
}
diff --git a/site/app/views/elements/install.thtml b/site/app/views/elements/install.thtml
index 1f9e80a..fb0b6af 100644
--- a/site/app/views/elements/install.thtml
+++ b/site/app/views/elements/install.thtml
@@ -137,6 +137,9 @@ if (count($addonFiles) < 1) {
$_install_platform_string = "($_platform_name)";
}
}
+
+ // we are sugar
+ $_class_platform_string = "platform-ALL";
// run the right javascript action for the addon type in question
$installTriggerName = "installTrigger" . $file['id'];
diff --git a/site/app/views/elements/search.thtml b/site/app/views/elements/search.thtml
index 755af51..60cedc3 100644
--- a/site/app/views/elements/search.thtml
+++ b/site/app/views/elements/search.thtml
@@ -104,8 +104,6 @@ if (isset($this->params['url']['pid'])
// AmoAddonTypes is from controller->beforeRender()
// for now we want to get rid of Plugin and Language packs since the former
// goes to a static page and the latter is empty
-array_pop($AmoAddonTypes);
-array_pop($AmoAddonTypes);
$addon_types = array_merge(array(ADDON_ANY => ___('advanced_search_form_any_type')), $AmoAddonTypes);
if (!isset($atype)) {
$atype = ADDON_ANY;
@@ -246,12 +244,13 @@ if (!isset($category)) $category = array(0, 0);
echo "versions = new Array();\n";
foreach($versions as $application_id => $ver_array) {
echo "versions[{$application_id}] = {";
+ echo "'".___('advanced_search_form_any_version')."' : 'any',\n";
foreach ($ver_array as $version) {
if($version !="") {
echo "\"{$version}\": \"{$version}\", ";
}
}
- echo "'".___('advanced_search_form_any_version')."' : 'any' };\n";
+ echo "};\n";
}
// to get default version value set up correctly needed to do after $appid, $lver and $hver set-up above in this element
diff --git a/site/app/views/facebook/faq.thtml b/site/app/views/facebook/faq.thtml
index 80b7157..65c1ff8 100644
--- a/site/app/views/facebook/faq.thtml
+++ b/site/app/views/facebook/faq.thtml
@@ -66,57 +66,48 @@
<h1>Frequently Asked Questions</h1>
<div class="entry">
- <div class="question">What exactly is an add-on, and why should I download one?</div>
- <div class="answer">Add-ons let you Rock Your Firefox by adding new features or changing the appearance of your Firefox.
- For example, you can give your browser a whole new look with specially created themes.
- Or you can try add-ons that will enhance listening to music, simplify photo sharing, block popup ads, and more.</div>
+ <div class="question">What exactly is an activity, and why should I download one?</div>
+ <div class="answer">Activities let you Rock Your Sugar by adding new features or changing the appearance of your computer.
</div>
<div class="entry">
- <div class="question">What is the difference between putting an add-on on my favorites list and actually installing the add-on for my Firefox?</div>
- <div class="answer">Marking an add-on as a favorite lets your friends know that you use and recommend the add-on, but does not automatically install it.
- Similarly, installing an add-on does not automatically mark it as a favorite.</div>
+ <div class="question">What is the difference between putting an activities on my favorites list and actually installing the activity for my sugar?</div>
+ <div class="answer">Marking an activity as a favorite lets your friends know that you use and recommend the acttivity, but does not automatically install it.
+ Similarly, installing an aativity does not automatically mark it as a favorite.</div>
</div>
<div class="entry">
<div class="question">I want to show my favorite add-ons on my profile. How do I do this?</div>
- <div class="answer">Clicking "Add to Favorites" on an add-on's display page will add it to your favorites and make it appear in your Facebook profile.</div>
+ <div class="answer">Clicking "Add to Favorites" on an activities' display page will add it to your favorites and make it appear in your Facebook profile.</div>
</div>
<div class="entry">
- <div class="question">How do I share a cool add-on with my friends? (i.e. Can I invite people to add something?)</div>
- <div class="answer">You can use the Share button on an addon's display page to share that add-on with a specific friend or post it on your profile.
- You'll also be able to send add-ons as attachments in wall posts and messages very soon, so they can Rock their Firefox.</div>
+ <div class="question">How do I share a cool activities with my friends? (i.e. Can I invite people to add something?)</div>
+ <div class="answer">You can use the Share button on an activities's display page to share that activity with a specific friend or post it on your profile.
+ You'll also be able to send activities as attachments in wall posts and messages very soon, so they can Rock their Sugar.</div>
</div>
<div class="entry">
- <div class="question">I've installed an add-on. What's my next step to actually start using it?</div>
- <div class="answer">Once you install an add-on, you'll need to restart Firefox for it to take effect.
- If the add-on doesn't seem to have installed properly, go the Add-ons Manager in the Firefox tools menu to learn more.</div>
+ <div class="question">I've installed an activity. What's my next step to actually start using it?</div>
+ <div class="answer">If the activity doesn't seem to have installed properly, go the Activity Manager to learn more.</div>
</div>
<div class="entry">
- <div class="question">Is this application secure? Are these add-ons certified by Mozilla?</div>
- <div class="answer">The add-ons listed in Rock Your Firefox were not made by Mozilla (unless otherwise noted).
- It's best to check with the author of the add-on (listed next to each add-on description) for any support requests.</div>
+ <div class="question">Is this activity secure? Are these activities certified by Sugar Labs?</div>
+ <div class="answer">The activities listed in Rock Your Fugar were not made by Sugar Labs (unless otherwise noted).
+ It's best to check with the author of the activity (listed next to each add-on description) for any support requests.</div>
</div>
<div class="entry">
- <div class="question">Why do I need Firefox to use this Facebook application?</div>
- <div class="answer">This application lets you Rock Your Firefox!
- Only Firefox gives you the chance to customize nearly every aspect of your browser.
- Find out what Firefox add-ons your friends are using and discover new favorites on your own.</div>
+ <div class="question">Why do I need Sugar to use this Facebook application?</div>
+ <div class="answer">This application lets you Rock Your Sugar!
+ Only Firefox gives you the chance to customize nearly every aspect of your desktop.
+ Find out what Sugar activites your friends are using and discover new favorites on your own.</div>
</div>
<div class="entry">
- <div class="question">Where can I find more information about Firefox extensions and themes?</div>
- <div class="answer">You can submit and learn more about creating add-ons for Firefox at <a href="http://addons.mozilla.org">Mozilla Add-ons</a>.
- Submitting your add-on in the <a href="http://addons.mozilla.org/developers">Developer Control Panel</a> there will enable it to be listed in Rock Your Firefox.</div>
- </div>
-
- <div class="entry">
<div class="question">Where can I report a bug or enhancement request with this application?</div>
<div class="answer">If you think you've found an issue with this application, or if you'd like to request a new feature,
- please do so in Mozilla's <a href="https://bugzilla.mozilla.org/enter_bug.cgi?product=addons.mozilla.org&component=Facebook%20Application&op_sys=All&rep_platform=All">Bugzilla</a>.</div>
+ please do so in Sugar Lab's bugtracker.</div>
</div>
</div> \ No newline at end of file
diff --git a/site/app/views/facebook/import.thtml b/site/app/views/facebook/import.thtml
index 298e1bd..f7a2ad0 100644
--- a/site/app/views/facebook/import.thtml
+++ b/site/app/views/facebook/import.thtml
@@ -165,7 +165,7 @@ if ($action == 'results') {
<div class="frame">
<h1>Detect Installed Add-ons</h1>
<p>Select the add-ons below that you'd like to add to your list of favorite add-ons.<br><a href="#" onClick="document.getElementById('missing-addons').style.display=''; this.style.display='none';">Why are some of my add-ons missing?</a></p>
- <p id="missing-addons" style="display: none;">If some of your installed add-ons aren't detected, it's probably because they are not hosted on <a href="http://addons.mozilla.org">Mozilla Add-ons</a>. Only add-ons hosted on <a href="http://addons.mozilla.org">Mozilla Add-ons</a> can be detected and listed in Rock Your Firefox.</p>
+ <p id="missing-addons" style="display: none;">If some of your installed add-ons aren't detected, it's probably because they are not hosted on <a href="<?=SITE_URL?>"><?=SITE_NAME?></a>. Only add-ons hosted on <a href="<?=SITE_URL?>"><?=SITE_NAME?></a> can be detected and listed in Rock Your Sugar.</p>
<form action="<?=SITE_URL.$html->url('/facebookinstall/import/'.$fbUserSession.'/favorites')?>" method="post" id="form">
<table id="addons" width="100%">
<tr><td width="50%" valign="top">
@@ -242,4 +242,4 @@ else {
</div>
<?php
}
-?> \ No newline at end of file
+?>
diff --git a/site/app/views/facebook/install.thtml b/site/app/views/facebook/install.thtml
index 3a01bef..cb0398e 100644
--- a/site/app/views/facebook/install.thtml
+++ b/site/app/views/facebook/install.thtml
@@ -57,7 +57,7 @@ function install() {
InstallTrigger.install(params, goBack);
}
else {
- window.location = 'http://addons.mozilla.org';
+ window.location = '<?=SITE_URL?>';
}
}
diff --git a/site/app/views/facebook/outage.thtml b/site/app/views/facebook/outage.thtml
index ac1b3f7..1487dda 100644
--- a/site/app/views/facebook/outage.thtml
+++ b/site/app/views/facebook/outage.thtml
@@ -74,6 +74,6 @@
</div>
<div class="outage-alternative">
In the meantime, check out all the other great ways that you can listen to music, check the weather, upload photos, block stuff you don't like,
- and do whatever you like to do best on the web with <a href="http://addons.mozilla.org">Firefox Add-ons</a>.
+ and do whatever you like to do best on the web with <a href="<?=SITE_URL?>"><?=SITE_NAME?></a>.
</div>
-</div> \ No newline at end of file
+</div>
diff --git a/site/app/views/facebook/view.thtml b/site/app/views/facebook/view.thtml
index 2c732eb..7815839 100644
--- a/site/app/views/facebook/view.thtml
+++ b/site/app/views/facebook/view.thtml
@@ -216,7 +216,7 @@
<div class="profileActions clearfix">
<?=(!empty($addon['Translation']['privacypolicy']['string']) ? '<a href="#" clicktotoggle="privacypolicy">Privacy Policy</a>' : '')?>
<?=(!empty($addon['Translation']['homepage']['string']) ? '<a href="'.$addon['Translation']['homepage']['string'].'" target="_blank">Add-on Homepage</a>' : '')?>
- <a href="https://addons.mozilla.org/addon/<?=$addon['Addon']['id']?>">Mozilla Add-ons Listing</a>
+ <a href="<?=SSITE_URL?>/addon/<?=$addon['Addon']['id']?>"><?=SITE_NAME?></a>
</div>
<div class="header"><h2>Recommended By</h2></div>
@@ -262,4 +262,4 @@
<br>
</div> <!-- right -->
</div> <!-- two column -->
-</div> <!-- content --> \ No newline at end of file
+</div> <!-- content -->
diff --git a/site/app/views/layouts/ajax_with_css.thtml b/site/app/views/layouts/ajax_with_css.thtml
index 119b787..4b62d2b 100644
--- a/site/app/views/layouts/ajax_with_css.thtml
+++ b/site/app/views/layouts/ajax_with_css.thtml
@@ -45,7 +45,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<base target="_top">
<?=$html->css('rustico')?>
- <link rel="search" type="application/opensearchdescription+xml" href="<?=$html->url('/AMOSearch.xml', null, false)?>" title="Mozilla Add-ons" />
+ <link rel="search" type="application/opensearchdescription+xml" href="<?=$html->url('/AMOSearch.xml', null, false)?>" title="<?=SITE_NAME?>" />
<link rel="shortcut icon" href="<?=$html->url('/img/favicon.ico', null, false)?>" type="image/x-icon" />
<?php
if (!empty($cssAdd)) {
diff --git a/site/app/views/layouts/facebook.thtml b/site/app/views/layouts/facebook.thtml
index 244d981..d178e0e 100644
--- a/site/app/views/layouts/facebook.thtml
+++ b/site/app/views/layouts/facebook.thtml
@@ -91,7 +91,7 @@ if (empty($page)) {
<div class="page-footer">
Mozilla is providing links to these applications as a courtesy, and makes no representations regarding the applications or any information related there to.
- <span title="<?=php_uname('n')?>">Use</span> of this service is subject to the Mozilla <a href="https://addons.mozilla.org/en-US/firefox/pages/privacy">Privacy Policy</a> and <a href="http://www.mozilla.com/en-US/about/legal.html">Legal Notices</a>.
+ <span title="<?=php_uname('n')?>">Use</span> of this service is subject to the Mozilla <a href="<?=SSITE_URL?>/en-US/firefox/pages/privacy">Privacy Policy</a> and <a href="<?=SITE_URL?>/en-US/about/legal.html">Legal Notices</a>.
</div>
</div>
diff --git a/site/app/views/layouts/mozilla.thtml b/site/app/views/layouts/mozilla.thtml
index 380b2d0..722ef91 100644
--- a/site/app/views/layouts/mozilla.thtml
+++ b/site/app/views/layouts/mozilla.thtml
@@ -75,6 +75,7 @@
echo '<!--[if IE]>'.$html->css('ie', 'stylesheet', array('media'=>'screen,projection'))."<![endif]-->\n";
echo '<!--[if lte IE 6]>'.$html->css('ie6', 'stylesheet', array('media'=>'screen,projection'))."<![endif]-->\n";
echo $html->css('remora', 'stylesheet', array('media'=>'screen,projection'))."\n";
+ echo $html->css('sugar', 'stylesheet', array('media'=>'screen,projection'))."\n";
if (!empty($cssAdd)) {
foreach ($cssAdd as $css) {
$url = $html->css($css);
@@ -83,7 +84,7 @@
}
?>
- <link rel="search" type="application/opensearchdescription+xml" href="<?=$html->url('/AMOSearch.xml', null, false, false)?>" title="Mozilla Add-ons"/>
+ <link rel="search" type="application/opensearchdescription+xml" href="<?=$html->url('/AMOSearch.xml', null, false, false)?>" title="<?=SITE_NAME?>"/>
<?php if (isset($addon) && ($addon['Addon']['addontype_id'] == ADDON_SEARCH)) : ?>
<link rel="search" type="application/opensearchdescription+xml" href="<?=$html->urlFile($addon['Version'][0]['File'][0]['id'], $addon['Version'][0]['File'][0]['filename'])?>" locale="<?=$addon['Translation']['name']['locale']?>" title="<?=$addon['Translation']['name']['string']?>"/>
<?php endif; ?>
@@ -310,7 +311,7 @@
</head>
-<body id="mozilla-com" class="<?="html-".TEXTDIR?>">
+<body id="mozilla-com" class="<?="html-".TEXTDIR?> sugar">
<?php
if (is_object($this->controller->Config) && $this->controller->Config->getValue('site_notice') != '') {
diff --git a/site/app/views/layouts/rss.thtml b/site/app/views/layouts/rss.thtml
index e0b9232..5c449a9 100644
--- a/site/app/views/layouts/rss.thtml
+++ b/site/app/views/layouts/rss.thtml
@@ -7,7 +7,7 @@
<language><?=strtolower(LANG) ?></language>
<pubDate><?=$time->toRss(gmmktime()) ?></pubDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
- <generator>Mozilla Add-ons</generator>
+ <generator><?=SITE_NAME?></generator>
<?php echo $content_for_layout; ?>
diff --git a/site/app/views/pages/credits.thtml b/site/app/views/pages/credits.thtml
index d8d05e5..409c3c8 100644
--- a/site/app/views/pages/credits.thtml
+++ b/site/app/views/pages/credits.thtml
@@ -139,6 +139,6 @@ ksort($other_contributors);
</div>
<br/>
-<?=sprintf(_('credits_contributing'), $html->link(_('credits_contributing_wikipage'), 'http://wiki.mozilla.org/Update'))?>
+<?=sprintf(_('credits_contributing'), $html->link(_('credits_contributing_wikipage'), SITE_WIKI))?>
</div>
diff --git a/site/app/views/pages/robots.txt.thtml b/site/app/views/pages/robots.txt.thtml
index 29e090a..2f4ac9d 100644
--- a/site/app/views/pages/robots.txt.thtml
+++ b/site/app/views/pages/robots.txt.thtml
@@ -39,7 +39,7 @@
$this->layout = null;
header('Content-Type: text/plain');
?>
-# robots.txt file for Mozilla Add-ons, addons.mozilla.org
+# robots.txt file for <?=SITE_NAME?>, addons.mozilla.org
User-agent: *
<?php
/* default: allow access to all pages on prod, disallow on preview */
diff --git a/site/app/views/statistics/rss/summary.thtml b/site/app/views/statistics/rss/summary.thtml
index ffb278c..8412069 100644
--- a/site/app/views/statistics/rss/summary.thtml
+++ b/site/app/views/statistics/rss/summary.thtml
@@ -68,7 +68,7 @@ echo $this->renderElement('rss_listitem', array(
'title' => sprintf(_('statistics_rss_title_statsfordate'), strftime(_('statistics_rss_title_fulldate'))),
'url' => SITE_URL.$html->url('/statistics/addon/'.$addon['Addon']['id']),
'description' => "<![CDATA[{$summary}]]>",
- 'author' => 'Mozilla Add-ons',
+ 'author' => SITE_NAME,
'pubDate' => $time->toRss($today),
'permalink' => SITE_URL.$html->url('/statistics/addon/'.$addon['Addon']['id']).'/'.date('Ymd', $today)
));
diff --git a/site/app/views/users/delete.thtml b/site/app/views/users/delete.thtml
index 046fa9c..dbbfa5b 100644
--- a/site/app/views/users/delete.thtml
+++ b/site/app/views/users/delete.thtml
@@ -70,7 +70,7 @@
echo '</p>';
echo sprintf(___('user_del_error_addons_more_questions', 'If you '
.'have additional questions, please contact %1$s for assistance.'),
- $link->email('amo-editors@mozilla.org'));
+ $link->email(EDITOR_EMAIL));
break;
case 'checkbox':
echo $this->renderElement('notification',
@@ -91,7 +91,7 @@
'description' => sprintf(___('user_del_error_unknown', 'An unknown error occured '
.'deleting your account. Please contact %1$s with the issue and '
.'we will delete it for you. We apologize for the inconvenience.'),
- $link->email('amo-admins@mozilla.org'))));
+ $link->email(ADMIN_EMAIL));
break;
}
}
@@ -99,12 +99,12 @@
<h1><?php echo sprintf(___('user_del_header_delete_account', 'Delete User Account %s'), $useremail)?></h1>
- <p><?=___('user_del_community_sad', 'The Mozilla Add-ons community is sad to see you go.')?></p>
+ <p><?=___('user_del_community_sad', 'The Sugar Labs Activity community is sad to see you go.')?></p>
<p><?php sprintf(___('user_del_specific_problem_editors', 'If you have a '
.'specific problem we may help you with, please do not delete your account '
.'now, but contact us at %1$s and we will do our best to assist you in '
- .'solving it.'), $link->email('amo-editors@mozilla.org'))?></p>
+ .'solving it.'), $link->email(EDITOR_EMAIL))?></p>
<div class="highlight">
<h2><?=___('user_del_header_confirm_deletion', 'Confirm account deletion')?></h2>
diff --git a/site/app/views/users/edit.thtml b/site/app/views/users/edit.thtml
index 008b34a..36a1176 100644
--- a/site/app/views/users/edit.thtml
+++ b/site/app/views/users/edit.thtml
@@ -159,6 +159,7 @@ else:
<ul>
<li><label for="UserNotifycompat"><?=$html->checkbox('User/notifycompat')?>&nbsp;<?=___('user_notifications_item_compat', 'Add-on Compatibility (strongly recommended)')?></label></li>
<li><label for="UserNotifyevents"><?=$html->checkbox('User/notifyevents')?>&nbsp;<?=___('user_notifications_item_events', 'Upcoming events and contests')?></li>
+ <li><label for="UserNotifybroadcast"><?=$html->checkbox('User/notifybroadcast')?>&nbsp;<?=___('user_notifications_item_broadcast', 'Broadcast events')?></li>
</ul>
<p><?=___('user_notifications_specific_contact', 'Mozilla reserves the right to contact you individually about specific concerns with your hosted add-ons.')?></p>
diff --git a/site/app/webroot/AMOSearch.xml b/site/app/webroot/AMOSearch.xml
index 1feba30..f10422b 100644
--- a/site/app/webroot/AMOSearch.xml
+++ b/site/app/webroot/AMOSearch.xml
@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
- <ShortName>Mozilla Add-ons</ShortName>
+ <ShortName>Sugar Labs Activities</ShortName>
<Url type="text/html"
method="get"
- template="http://addons.mozilla.org/search/?q={searchTerms}">
+ template="http://activities.sugarlabs.org/search/?q={searchTerms}">
</Url>
<Image height="16" width="16">data:image/x-icon;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8%2F9hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz%0D%0AAAAN1wAADdcBQiibeAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAAKoSURB%0D%0AVDiNjZNLaJRnFIaf75vvy2UGTWr8NYkxl0IFUYkNXSSZQNWFWlxIEVy1FLLo0i4adddVXRnS4kJw%0D%0AYxci2GaRTWlSFGKFGRXNmFBF62VMO4TENBdjMv9k5p%2F%2FOy4SLzgqHs7yPc95eTlHiQjvqniPbVYR%0D%0AzuBoR%2BFQDEvId4neIPNCY945DayNVff%2F8NUvn9XXNJMv5hhKnTvYP3ymHmj%2FIMBSbmHjjP8fycxv%0D%0A%2BMEzGqtatUI1vK7R7wM4J32XUv3Li%2Fl5imGBkbtXlsMw%2FPF1jXozg3iP3aM0Z8XRBFDr1fl7Og9E%0D%0AnTguXx30p%2F6fjAIozb%2Fi6C4BdB2z6QOfH27ZUFNL0QUELs%2Ftycs4J2zdGEerCADTM1P8df3PxyUZ%0D%0AiKPF8zyGHpwGFLC6QCCRuYA4QQQ6mw4hjhYT77GN2qiBWFnV5sXc0xMAgfKx5foVYKURB2vLPbxo%0D%0AM8auODE6ws%2FfH%2B77dHtjhxp5OHzywpWf%2FIIsRk25Rq0CRFY4UVNNndkmqZFRf3YuWaYUS0aE3RP5%0D%0AMXX3%2FiCOgu3Y1WYfL90sdSDgxRoYTY5mZ2anjwC%2FAqEBdM4tMJ4dwYs1YiOGSBkYrVHqlQNxoC34%0D%0AOV8BdxK9gQ%2Bguo7bwdYdrXu92nU6nR7Pzc%2FPSXxfazTj30IpRaWpIqbX4UQoBDkWJlRwLzVeLBTy%0D%0AGs2UcUX5duzvsfPqNpvDovQhnBIdELGaWFk1hclYmLx2fxmFbNm5qXJNvdi2DQ1WAsO1P%2F5petsh%0D%0Ayf6v25gJ0nxUUUeiP531s%2FkvAcor7MDOL2pjz3JzVKpqUoMTpb8QsSqdeTT98fomjyDv8LP5aKI3%0D%0AuAgQP2orCkGAVRVMZxbQhnQJIAzkm3s3Js6GSfkEQEd4%2Bbpa8%2BTW71P1ANqoB65I93OA2DgV%2BZ%2Bo%0D%0AmgAAAABJRU5ErkJggg%3D%3D</Image>
<OutputEncoding>UTF-8</OutputEncoding>
diff --git a/site/app/webroot/css/sugar.css b/site/app/webroot/css/sugar.css
new file mode 100644
index 0000000..d254ab3
--- /dev/null
+++ b/site/app/webroot/css/sugar.css
@@ -0,0 +1,1672 @@
+/* =color -------------------------------------------------------------------------- */
+
+
+/*----------------------------------------------------------------------------
+Color CSS file for activities.sugarlabs.org
+
+Originally Created by Craig Cook - focalcurve.com
+ on December 30, 2007
+For addons.mozilla.org
+
+Modified by Josh Williams - tucson-labs.com
+
+ on April 23, 2009
+
+Color Reference - following colors from Christan Marc Smith's version of sugarlabs.org
+
+Body text (pure black): #000
+Links (dark blue): #033cd2
+Visited links (blue-gray): #748d9e
+Headings (dark blue): #2d3b58
+Box border (aqua blue): #00beff
+Special box border (dark blue): #5d6c8c
+-----------------------------------------------------------------------------*/
+
+/*** =General elements ***/
+body { background: #fff; color: #000; }
+a:link { color: #00beff; }
+a:visited { color: #748d9e; }
+a:active, a:hover, a:focus { color: #000000; }
+
+a.view { background: transparent url("../img/sprite.png?20081210") 100% -247px no-repeat; } /* arrow image */
+.html-ltr a.view:hover { background-position: 100% -301px; }
+.html-rtl a.view { background-position: 100% -486px; }
+.html-rtl a.view:hover { background-position: 100% -540px; }
+
+h3, h4, h5, h6 { color: #000; }
+
+td, th { border-bottom: 1px solid #eee; }
+thead th { color: #555; }
+
+input, button, select, textarea { color: inherit; }
+a img { border: none; }
+
+div.error-notice { background: #fffefa url("../img/warning.png") 10px 10px no-repeat; border: 1px solid #eee; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /* clear rounded corners */
+
+/*** =Site-notice ***/
+#site-notice { background: #ffe; border-bottom: 2px solid #ccc; }
+
+/*** =Access nav ***/
+#nav-access a:active, #nav-access a:focus { color: #000; background: #fff; border: 1px solid #475470; outline: 0; }
+
+/*** =Header ***/
+h4#moz a { background: #fff;} /*clears mozilla branding background */
+#branding > #moz a img {visibility: hidden;} /*clears mozilla logo */
+h4#moz a:hover, h1#moz a:active, h1#moz a:focus { background-position: 0 -51px; }
+
+/* =Page title */
+#page-title {
+ background:#fff;
+}
+#page-title p.page-intro { color: #000; }
+
+#page-title.firefox h1, #page-title.firefox h1 a { color: #bd1d01; } /* red */
+#page-title.thunderbird h1, #page-title.thunderbird h1 a { color: #0b4190; } /* blue */
+#page-title.fennec h1, #page-title.fennec h1 a { color: #0b4190; } /* blue */
+#page-title.seamonkey h1, #page-title.seamonkey h1 a { color: #3f38a3; } /* purple */
+#page-title.sunbird h1, #page-title.sunbird h1 a { color: #337b5a; } /* green */
+#page-title.generic h1, #page-title.generic h1 a { color: #bd1d01; } /* red */
+#page-title.developers h1, #page-title.developers h1 a { color: #bd1d01; } /* red */
+#page-title h2 { color: #2D3B58; }
+
+/* =User nav */
+.html-ltr #nav-user li { border-left: 1px solid #666; }
+.html-rtl #nav-user li { border-right: 1px solid #666; }
+#nav-user li:first-child { border-left: 0; }
+#nav-user li:first-child { border-right: 0; }
+
+#nav-user a:link { color: #000; }
+#nav-user a:visited { color: #666; }
+#nav-user a:hover, #nav-user a:active, #nav-user a:focus { color: #000; }
+
+/* =Other Applications */
+#other-apps { background-color: #b3deee; border: 1px solid #90c8dd; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 6px; }
+#other-apps h3 { color: #4d757b; }
+
+#other-apps.js h3 { border-bottom: 1px solid #90c8dd; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+#other-apps.js h3 { background: transparent url("../img/sprite.png?20081210") 4px -262px no-repeat; }
+.html-rtl #other-apps.js h3 { background-position: 14px -262px; }
+
+#other-apps.js h3:hover { background-color: #c5e3ee; }
+#nav-apps a { color: #1f0084; background-repeat: no-repeat; background-position: 0 50%; }
+#nav-apps a:hover, #nav-apps a:active, #nav-apps a:focus { color: #1d587f; }
+.html-ltr #other-apps.js #nav-apps #app-seamonkey a { background: url("../img/sprite-alpha.png") -465px 0 no-repeat;}
+.html-rtl #other-apps.js #nav-apps #app-seamonkey a { background: url("../img/sprite-alpha.png") -390px 0 no-repeat;}
+
+.html-ltr #other-apps.js #nav-apps #app-sunbird a { background: url("../img/sprite-alpha.png") -616px 0 no-repeat;}
+.html-rtl #other-apps.js #nav-apps #app-sunbird a { background: url("../img/sprite-alpha.png") -541px 0 no-repeat; }
+
+.html-ltr #other-apps.js #nav-apps #app-thunderbird a { background: url("../img/sprite-alpha.png") -766px 0 no-repeat; }
+.html-rtl #other-apps.js #nav-apps #app-thunderbird a { background: url("../img/sprite-alpha.png") -691px 0 no-repeat; }
+
+.html-ltr #other-apps.js #nav-apps #app-fennec a { background: url("../img/sprite-alpha.png") -766px 0 no-repeat; }
+.html-rtl #other-apps.js #nav-apps #app-fennec a { background: url("../img/sprite-alpha.png") -691px 0 no-repeat; }
+
+.html-ltr #other-apps.js #nav-apps #app-firefox a { background: url("../img/sprite-alpha.png") -321px 0 no-repeat; }
+.html-rtl #other-apps.js #nav-apps #app-firefox a { background: url("../img/sprite-alpha.png") -246px 0 no-repeat; }
+
+.html-ltr #other-apps.collapsed h3 { border-bottom: 0; background-position: 6px -320px; }
+.html-rtl #other-apps.collapsed h3 { border-bottom: 0; background-position: 16px -320px; }
+
+/*** =Search form ***/
+#advanced-search-toggle {background:none;background-color:#00beff;-moz-border-radius:2px; }
+#search-bubble-outer { background-image:none;background-color:#00beff;-moz-border-radius:2px; }
+#search-bubble-inner { background-image:none;background-color:#00beff;-moz-border-radius:2px; }
+#search-form li { color: #666; }
+#search-form #query {border:1px solid #033cd2;}
+.html-ltr #search-form #query { background: #fff url("../img/sprite.png?20081210") -974px -681px no-repeat; }
+.html-rtl #search-form #query { background: #fff url("../img/sprite.png?20081210") 100% -686px no-repeat; }
+#search-form #search-category label { color: #426a13; }
+.html-ltr #search-form #my-submit { background: url("../img/sprite-alpha.png") -120px 0 no-repeat; }
+.html-ltr #search-form #my-submit:hover { background-position: -158px 0;}
+.html-rtl #search-form #my-submit { background: url("../img/sprite-alpha.png") -120px -40px no-repeat; }
+.html-rtl #search-form #my-submit:hover { background: url("../img/sprite-alpha.png") -157px -40px no-repeat;}
+
+#advanced-search {background-color: #e6e6e6; border: 1px solid #00beff; }
+#advanced-search-toggle {margin-top:10px;background-image:none;background-color:#00beff;-moz-border-radius:2px; }
+#advanced-search-toggle div {background: none;}
+#advanced-search-toggle a {color: black; text-decoration: none; padding:1px 3px 1px 3px;}
+.html-ltr #advanced-search-toggle a.asclosed { background: url("../img/sprite.png?20081210") right -354px no-repeat;}
+.html-ltr #advanced-search-toggle a.asopen { background: url("../img/sprite.png?20081210") right -369px no-repeat;}
+.html-rtl #advanced-search-toggle a.asclosed {background: url("../img/sprite.png?20081210") -989px -354px no-repeat;}
+.html-rtl #advanced-search-toggle a.asopen { background: url("../img/sprite.png?20081210") -989px -369px no-repeat;}
+#advanced-search-toggle #toggle-outer {background: url("../img/sprite.png?20081210") right -87px no-repeat; }
+#advanced-search-toggle #toggle-inner {background: url("../img/sprite.png?20081210") -861px -87px no-repeat; }
+
+/*** =Footer ***/
+#footer { color: #888; padding: 1em 0; background: transparent url("../img/foot-bg.png") repeat-x; }
+#footer a:link, #footer a:visited { color: #777; }
+#footer a:hover, #footer a:active, #footer a:focus { color: #000; }
+
+/*** =Extra content ***/
+#content-extra .extra { border: 1px solid #00beff; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; } /* clears radius */
+
+/*** =Categories ***/
+#categories h3 { background:#00beff; border-bottom: none; }
+#categories h3 span { color: #fff; background:#00beff; }
+#categories.collapsed h3 { background-position: 0 -106px; }
+#categories.collapsed h3.open { background-position: -26px -106px; }
+
+#categories, #categories.collapsed #cat-list { background-color: #fff; border: 1px solid #00beff; } /* =clears h3 border */
+#categories, #categories.collapsed #cat-list { /* redundancy compensates for varying browser support */
+ -moz-border-radius:3px;
+ -moz-border-radius-bottomright: 0px;
+ -moz-border-radius-bottomleft: 0px;
+ -webkit-border-bottom-right-radius: 0px;
+ -webkit-border-bottom-left-radius: 0px;
+ border-bottom-right-radius: 0px;
+ border-bottom-left-radius: 0px;
+}
+#cat-list { border-top: 1px solid #fff;border-bottom: 1px solid #fff; }
+#cat-list li { border-bottom: none; }
+#cat-list a { background: #fff; }
+
+#categories a:link { color: #4e4e4e; }
+#categories a:visited { color: #777; }
+#categories a:hover, #categories a:focus { color: #1d587f; background: #78e600; }
+
+#categories a:active {
+ color:#fff;
+ background:#6e008c;
+}
+
+#categories.collapsed h3 span { background-position: -242px -106px; }
+#categories.collapsed h3:hover { color: #4f7f17; background-position: -52px -106px; }
+#categories.collapsed h3.open:hover { background-position: -78px -106px; }
+#categories.collapsed h3:hover span { background-position: -533px -106px; }
+#categories p { border-top: 1px solid #e8e6e6; }
+
+/*** =Add-on boxes ***/
+.addon { border-left: 1px solid #00beff; background: transparent url("../img/sprite.png?20081210") right -1256px no-repeat; }
+.addon .vex { background: transparent url("../img/sprite.png?20081210") right bottom no-repeat; }
+.addon .vex span { background: transparent url("../img/sprite.png?20081210") left bottom no-repeat; }
+.addon .preview-img { background: transparent url("../img/sprite.png?20081210") left -1256px no-repeat; }
+.addon .stats em { color: #d54601; }
+.addon .flag { border: 1px solid #ccc; border-width: 0 1px 1px 0; }
+#addon-listing .addon .vex { background: transparent url("../img/sprite.png?20081210") no-repeat right bottom; }
+
+/* =Secondary featured add-ons */
+.sub .irk { background: transparent url("../img/sprite.png?20081210") left -1256px no-repeat; }
+.sub .preview-img { background-image: none; }
+
+/* =Recommended add-ons */
+.rec { background-image: none; border:1px solid #00beff;border-bottom:none; }
+.rec .preview-img { background-image: none; }
+.rec .flag { color: #000; background-image: none;border-left:1px solid #00beff; }
+.rec .vex { background-image:none; }
+.rec .vex span { background-image: none; }
+
+/* =Experimental add-ons */
+.exp { background: url("../img/exp-tr.png") no-repeat right top; border-left-color: #e3c1c1; }
+.exp .preview-img { background: transparent url("../img/exp-tl.png") left top no-repeat; }
+.exp .flag { color: #900; background: #f8f8f7 url("../img/exp-flag.png") no-repeat; }
+.exp .vex { background-image: url("../img/exp-br.png"); }
+.exp .vex span { background-image: url("../img/exp-bl.png"); }
+
+/* =Listing items */
+#addon-listing .more li { border-right: 1px solid #666; }
+#addon-listing .more li:last-child { border: 0; }
+
+/*** =Install button ***/
+.install-button a { color: #333; background: #00beff; }
+.install-button a span { background-image: none; }
+.install-button a span span { background-image: none; }
+.install-button a span span span { background-image: none; }
+.install-button a span span span strong { background-image: none; }
+
+.install-button a:hover, .install-button a:focus, .install-button a:active { color: #fff; background-color: #033cd2; background-position: 100%; }
+
+/* In listings - general add-ons */
+.install-button a span,
+.install-button a span span,
+.install-button a span span span,
+.install-button a span span span strong { background-image: none; }
+
+/* In listings - experimental add-ons */
+.exp .install-button a span,
+.exp .install-button a span span,
+.exp .install-button a span span span,
+.exp .install-button a span span span strong { background-image: url("../img/installbtn-edges-exp.png"); }
+
+/* In listings - recommended add-ons */
+#addon-listing .rec .install-button a span,
+#addon-listing .rec .install-button a span span,
+#addon-listing .rec .install-button a span span span,
+#addon-listing .rec .install-button a span span span strong { background-image: none; }
+
+/* Experimental add-ons - while logged out */
+#content-main .exp-loggedout { border: 1px solid #d8d8d8; background: #fff; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+#content-main .exp-loggedout .install-button a { color: #aaa; background-color: #fff; background-position: 100% -995px; }
+#content-main .exp-loggedout .install-button a span,
+#content-main .exp-loggedout .install-button a span span,
+#content-main .exp-loggedout .install-button a span span span,
+#content-main .exp-loggedout .install-button a span span span strong { background-image: url("../img/installbtn-edges-dis.png"); }
+#content-main .exp-loggedout .install-button a:hover { background-color: #f3f3f3; background-position: 100% -1125px; }
+
+/* Unavailable add-ons */
+#content-main .install-container .not-avail { padding: 5px 10px; float: left; color: #666; border: 1px solid #00beff; background: #fff; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+/*** =Pitch ***/
+.pitch { background-color: #fff; border: 1px solid #00beff; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+.pitch h3 { color: #042253; }
+
+/*** =Landing pages ***/
+#recommended { background: #f2f8fd; border: 1px solid #00beff; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+#recommended .addon { background: #fff url("../img/landrec-tr.png") no-repeat top right; }
+#recommended .addon .preview-img { background: url("../img/landrec-tl.png") no-repeat top left; }
+#recommended .addon .vex { background-image: url("../img/landrec-br.png"); }
+#recommended .vex span { background-image: url("../img/landrec-bl.png"); }
+
+#content.landing #secondaries .exp .irk { background-image: url("../img/exp-tl.png"); }
+#content.landing #secondaries .sub .vex { background-image: url("../img/addon-br.png"); }
+#content.landing #secondaries .exp .vex { background-image: url("../img/exp-br.png"); }
+#content.landing #secondaries .exp .preview-img { background-image: none; }
+
+#content.landing .more-addons { border: 1px solid #00beff; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+.browse-list a { background: #fafafa; border: 1px solid #e8e6e6; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+.browse-list a:hover { background-color: #f1f0f0; border-color: #e1dfdf; }
+
+/*** =Dictionaries ***/
+#dictionaries { background-color: #f7fafc; border: 1px solid #eef1f3; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+#dictionaries th, #dictionaries td { border-bottom: 1px solid #eee; }
+#dictionaries tbody tr.alt th, #dictionaries tbody tr.alt td { background-color: #fff; }
+
+/*** =Detail page ***/
+.addon-cats li { border-left: 1px solid #666; }
+.addon-cats li:first-child { border-left: 0; }
+#addon-info, #addon-advanced { border: 1px solid #00beff; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+.addon-images a img { border: 1px solid #1d587f; }
+.addon-reviews li, .addon-versions li { border-top: 1px solid #00beff; }
+#addon-info .addon-reviews li { background-color: #f7fafc; border: 1px solid #eef1f3; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+#addon-advanced h5 { border-top: 1px solid #00beff; }
+
+/* =Version History Page */
+#latest-version { border: 1px solid #5d6c8c; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+div.oldversion { -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+/* =Review form */
+#form-review { background-color: #f8f8f8; border: 1px solid #e4f3fa; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+/* =reCaptchas */
+#recaptcha_image { border: 1px solid #00beff; }
+
+/* =Star rating */
+#rate-it legend span { color: #042758; }
+/*
+ul.star-rating { background: #fff; padding: 3px 5px; border: 1px solid #edbe97; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+*/
+
+/* =More add-ons */
+.more-addons h3 a.view { background: transparent url("../img/sprite.png?20081210") 100% -387px no-repeat; }
+.html-ltr .more-addons h3 a.view:hover { background-position: 100% -437px; }
+.html-rtl .more-addons h3 a.view { background-position: 100% -597px; }
+.html-rtl .more-addons h3 a.view:hover { background-position: 100% -647px; }
+
+/*** =Pagination ***/
+.pagination { background-color: #f7fafc; border: 1px solid #eef1f3; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+.pages a { border: 1px solid #fff; }
+.pages a:hover { background-color: #ccf29b; border-color: #bbde92; }
+.pages .current strong { background-color: #ccf29b; border: 1px solid #83c53f; }
+.pages .prev a { background: transparent url("../img/arr-prev.png") 0 50% no-repeat; }
+.pages .prev a:hover { background-color: #ccf29b; }
+.pages .next a { background: transparent url("../img/arr-next.png") 100% 50% no-repeat; }
+.pages .next a:hover { background-color: #ccf29b; }
+
+/*** =Listing control bar ***/
+#form-listcontrol { background: #f2f8fd; border: 1px solid #e9eff4; -moz-border-radius: 6px; -webkit-border-radius: 6px; border-radius: 6px; }
+#order-by button { color: #7598b5; background-color: #fff; border: 1px solid #89a8c1; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+#order-by button:hover { background-color: #e9eff4; color: #496377; }
+#order-by button.current, #order-by button.current:hover { background-color: #89a8c1; color: #fff; }
+#form-listcontrol #experimental label { background: #fff; border: 1px solid #933; color: #933; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+
+/*** =Thumbnail browser layout */
+#thumb-subcategories ul { -moz-border-radius-bottomleft:6px; -moz-border-radius-bottomright:6px; border-color:#00beff; border-style:solid; border-width:0pt 1px 1px; }
+#thumb-subcategories ul li { border-top:1px solid #E8E6E6; }
+
+#thumb-subcategories a:link { color: #4e4e4e; }
+#thumb-subcategories a:visited { color: #777; }
+#thumb-subcategories a:hover, #thumb-subcategories a:active, #thumb-subcategories a:focus { background: #F2F8Fd }
+#thumb-subcategories li.selected a:link, #thumb-subcategories li.selected a:visited { background-color:#89A8C1; color:#FFFFFF; }
+
+#thumb-browser .thumbs li.thumb { background: transparent url(../img/sprite.png?20081210) no-repeat scroll right -1256px; }
+#thumb-browser .thumbs li.thumb div.wrapper { background: transparent url(../img/sprite.png?20081210) no-repeat scroll left -1256px; }
+#thumb-browser .thumbs li.exp { background: transparent url(../img/exp-tr.png) no-repeat scroll right top; }
+#thumb-browser .thumbs li.exp div.wrapper { background: transparent url(../img/exp-tl.png) no-repeat scroll left top; }
+#thumb-browser .thumbs li.thumb .vex { background:transparent url(../img/sprite.png?20081210) no-repeat scroll right bottom; }
+#thumb-browser .thumbs li.thumb .vex span { background:transparent url(../img/sprite.png?20081210) no-repeat scroll left bottom; width: 10px; height: 10px; float: left;}
+#thumb-browser .thumbs li.exp .vex { background:transparent url(../img/exp-br.png) no-repeat scroll right bottom; }
+#thumb-browser .thumbs li.exp .vex span { background:transparent url(../img/exp-bl.png) no-repeat scroll left bottom; }
+
+/* =screen --------------------------------------------------------------------------------------------------------- */
+
+/*----------------------------------------------------------------------------
+Standards-Compliant Layout CSS file for Addons.mozilla.org
+Created by Craig Cook - focalcurve.com
+ on November 20, 2007
+-----------------------------------------------------------------------------*/
+
+
+/*** =Reset defaults ***/
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, code,
+del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ margin: 0;
+ padding: 0;
+ border: 0;
+}
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+table { border-collapse: separate; border-spacing: 0; }
+
+/*** =General elements ***/
+body { min-width: 770px; }
+
+ol, ul { margin-left: 2em; }
+blockquote { margin: 0 3em 1em; }
+dd { margin-left: 2em; }
+td, th { padding: 2px 6px; }
+
+a.view { padding-right: 10px; }
+button, input[type="submit"] { cursor: pointer; }
+
+h2 { margin-bottom: .5em; }
+
+div.error-notice { margin: 0; min-height: 48px; margin-bottom: 1.5em; padding: 10px 10px 0 70px; }
+
+.with-js .hide-with-js { display: none }
+.show-with-js { display: none }
+.with-js .show-with-js { display: block }
+
+/*** =Site-notice ***/
+#site-notice { width: 80%; padding: 5px 10%; }
+
+/*** =Access nav ***/
+#nav-access { position: absolute; top: -10em; margin: 0 auto; width: 100%; }
+#nav-access a:active, #nav-access a:focus { position: absolute; top: 11em; width: 18em; z-index: 2;}
+.html-ltr #nav-access a:active, .html-ltr #nav-access a:focus { left: 50%; margin-left: -8em;}
+.html-rtl #nav-access a:active, .html-rtl #nav-access a:focus { right: 50%; margin-right: -8em;}
+
+
+/*** =Header ***/
+#branding { position: relative; }
+
+h4#moz { position: absolute; top: 10px; margin: 0; z-index: 1; }
+.html-rtl h4#moz {left: 0px; }
+.html-rtl h4#moz img {position: relative; left: -10px; }
+
+h4#moz a { display: block; height: 44px; width: 100px; padding-left: 10px;}
+
+/* =Page title */
+#page-title { height: 13em; }
+
+#page-title div { max-width: 900px; margin: 0 auto;}
+.html-ltr #page-title div {padding: 25px 105px 0;}
+.html-rtl #page-title div {position:relative; left:-70px; padding: 25px 0 0 0;}
+
+#page-title h1 { position: relative; }
+.html-ltr #page-title h1 {padding: 20px 0 5px 115px; }
+.html-rtl #page-title h1 {padding: 20px 310px 5px 0; }
+
+#page-title h1 img { position: absolute; top: 0; }
+.html-ltr #page-title h1 img{left: 0;}
+.html-rtl #page-title h1 img {right: 200px;}
+
+#page-title h2 { position: relative; }
+.html-ltr #page-title h2 { margin: -5px 0 5px 175px; }
+.html-rtl #page-title h2 { margin: -5px 370px 5px 0; }
+
+#page-title p.page-intro { margin-bottom: 0; width: 42em; max-width: 650px; }
+.html-ltr #page-title p.page-intro {padding-left: 115px;}
+.html-rtl #page-title p.page-intro {padding-right: 310px;}
+
+
+/* =User nav */
+#nav-user { max-width: 900px; min-width: 770px;}
+.html-ltr #nav-user { margin: -1.75em auto 0; padding: 0 36px;margin-right:-50px;}
+.html-rtl #nav-user { margin: 0em auto 0; padding: 0 0 0 50px;}
+
+#nav-user li { display: inline;}
+.html-ltr #nav-user li { padding-left: 1em; margin-right: .5em; }
+.html-rtl #nav-user li { padding-right: 1em; margin-left: .5em; }
+
+.html-ltr #nav-user li:first-child { border-left: 0; padding-left: 0; }
+.html-rtl #nav-user li:first-child { border-right: 0; padding-right: 0;}
+
+
+/* =Other Applications */
+#other-apps { position: absolute; top: -9.65em; z-index: 5;}
+.html-ltr #other-apps {right: 50px; padding: 6px 10px 0; }
+.html-rtl #other-apps {right: 50px; padding: 6px 10px 0; }
+
+#other-apps.js { width: 12em; padding-bottom: 6px; }
+
+#other-apps h3 { float: left; margin-right: 20px; }
+
+#other-apps.js h3 { float: none; cursor: pointer; }
+.html-ltr #other-apps.js h3 {margin: -6px -10px; padding: 6px 15px 6px 20px; }
+.html-rtl #other-apps.js h3 {margin: -6px -10px; padding: 6px 15px 6px 20px; }
+
+#nav-apps { margin-top: .1em; }
+.html-ltr #nav-apps { margin-left: 0;}
+.html-rtl #nav-apps { margin-right: 0;}
+
+#nav-apps li { display: inline; }
+.html-ltr #nav-apps li { margin-right: 10px; }
+.html-rtl #nav-apps li { margin-left: 10px; }
+
+#other-apps.js #nav-apps { margin-top: 1em; }
+#other-apps.js #nav-apps li { display: block; margin-right: 0; }
+.html-ltr #other-apps.js #nav-apps li { margin-right: 0; }
+.html-rtl #other-apps.js #nav-apps li { margin-left: 0; }
+
+#other-apps.js #nav-apps a { display: block; line-height: 35px; }
+.html-ltr #other-apps.js #nav-apps a { padding-left: 40px; }
+.html-rtl #other-apps.js #nav-apps a { padding-right: 40px; }
+
+#other-apps.collapsed #nav-apps { position: absolute; }
+.html-ltr #other-apps.collapsed #nav-apps { left: -999em; }
+.html-rtl #other-apps.collapsed #nav-apps { right: -999em; }
+
+#other-apps.collapsed #nav-apps a:active, #other-apps.collapsed #nav-apps a:focus { position: absolute; top: 0; }
+.html-ltr #other-apps.collapsed #nav-apps a:active, .html-ltr #other-apps.collapsed #nav-apps a:focus { left: -999em; }
+.html-rtl #other-apps.collapsed #nav-apps a:active, .html-rtl #other-apps.collapsed #nav-apps a:focus { right: -999em; }
+
+/*** =Search form ***/
+#search-element { position: relative; width: 60%;}
+.html-ltr #search-element {left: 190px; }
+.html-rtl #search-element {left: 0}
+
+#search-bubble-inner { height: 71px; margin:0; padding: 0; width: 6px; float: left; }
+.html-ltr #standard-search { padding: 20px 4px 15px 14px;}
+.html-rtl #standard-search { padding: 20px 20px 15px 4px;}
+
+#search-bubble-outer legend { display: none; }
+#search-form ol { margin: 0; padding: 0; }
+#search-form #search-query { width: 55%; }
+
+#search-form #search-query label { display: none; } /* label is hidden by default when JS isn't available */
+
+#search-form span + label {display:none;}
+#standard-search #category {display:none;}
+
+#search-form #search-query label { position: absolute; top: 20px; }
+.html-ltr #search-form #search-query label { left: 17px; padding: .4em 5px .5em 35px; }
+.html-rtl #search-form #search-query label { right: 17px; padding: .4em 35px .5em 5px; }
+
+#search-form #query { width: 78%;}
+.html-ltr #search-form #query { padding: .3em 8px .6em 32px;}
+.html-rtl #search-form #query { padding: .3em 32px .6em 8px;}
+
+#search-form #category { width: 0%; padding: .3em 0 .2em 0; }
+#search-form #category option { min-width: 0; }
+
+#search-form #my-submit { width:37px; height: 38px; border: 0px; margin-left: 8px; }
+
+/*** =Advanced Search Form ***/
+#advanced-search { margin: -2px 0 0 0; padding: .1in .25in 0 .25in; }
+form.asclosed {display: none;}
+#search-application { padding-bottom: .1in}
+#advanced-search-toggle {position: relative; top:-4px}
+.html-ltr #advanced-search-toggle {text-align: right;}
+.html-rtl #advanced-search-toggle {text-align: left; direction: ltr;}
+#advanced-search-toggle div { width:6px; height: 6px; float: left; }
+#advanced-search-toggle #toggle-inner { padding-left: 3px;}
+.html-ltr #advanced-search-toggle #toggle-outer { margin: 0 .25in .1in 0; padding-right: 4px;}
+.html-ltr #advanced-search-toggle a { padding-right: .15in }
+.html-rtl #advanced-search-toggle #toggle-outer { margin: 0 0 .1in .25in; padding-right: 4px;}
+.html-rtl #advanced-search-toggle a { padding-left: .15in}
+
+.html-ltr #search-application td {padding-right: .1in}
+.html-rtl #search-application td {padding-left: .1in}
+.html-rtl #advanced-search td { text-align: right;}
+
+.html-ltr #search-platform {float: left; margin-bottom: 1.5em; margin-right: 1in;}
+.html-rtl #search-platform {float: right; margin-bottom: 1.5em; margin-left: 1in;}
+
+/*** =Footer ***/
+#footer { position: relative; width: 100%; clear: both; padding: 1em 0; min-width: 770px;}
+#footer-lang-form { position: relative; max-width: 900px; min-width: 770px;}
+.html-ltr #footer-lang-form {padding: 0 50px; margin: 0 auto;}
+.html-rtl #footer-lang-form {padding: 0 0 0 50px; margin: 0 0;}
+
+.html-ltr #footer-lang-form p { position: absolute; right: 50px; }
+.html-rtl #footer-lang-form p { position: absolute; left: 50px; }
+
+#footer-legal { max-width: 900px; margin: 0 auto; padding: 0 50px; min-width: 770px;}
+#copyright { margin-bottom: 0; }
+#nav-legal li { display: inline; margin-right: .5em; }
+#footer-disclaimer { margin-top: 1em; }
+
+/*** =Content layout ***/
+#content { clear: both; position: relative; padding: 1em 50px; max-width: 950px; margin: 0 auto 1em; margin-bottom: 25ex; min-width: 770px; min-height:1000px; }
+#content-main { position: relative; margin-left: 190px; min-height: 50em; }
+#content.main-page #content-main,
+#content.detail-page #content-main,
+#content.reviews-page #content-main,
+#content.versions-page #content-main { width: 60%; padding-right: 20%; }
+#content-main.full { margin-left: 0; }
+#content.detail-page #content-main.full,
+#content.reviews-page #content-main.full,
+#content.versions-page #content-main.full { width: 75%; padding-right: 25%; }
+#secondaries .sub { width: 48%; }
+#secondaries #feature3 { float: right; }
+#secondaries #feature2 { float: left; }
+
+#content #sidebar { position: absolute; left: 50px; top: 1em; width: 170px; }
+
+/*** =Extra content ***/
+#content-extra { position: absolute; right: 0; top: -124px; width: 23%; }
+
+#content-extra .extra { margin-bottom: .1em; padding: 5px 0;}
+
+#content-extra .extra p,
+#content-extra .extra ul,
+#content-extra .extra p a { padding: 0 12px;}
+#content-extra .extra li {padding:0 3px .6em 3px;}
+
+#content-extra h3 { margin-bottom: .1em; }
+.html-ltr #content-extra ul { margin: 0 ;}
+.html-rtl #content-extra ul { margin:0 0 0 0; }
+#content-extra ul li {margin: 0; padding:0;}
+#content-extra ul li span {font-size: 8pt;}
+#content-extra p.view-all { margin-bottom: .5em; }
+.html-rtl #content-extra p.view-all {margin-right: 4px}
+
+/*** =Categories ***/
+#categories { margin-bottom: 1em; position: relative; z-index: 5; }
+#categories h3 { margin: 0 -1px; padding-left: 6px; }
+#categories.collapsed h3 { padding-left: 18px; }
+#categories h3 span { display: block; padding: 8px 4px; }
+
+#categories, #categories.collapsed #cat-list { padding-bottom: 0px; }
+#categories.collapsed h3 span { text-indent: 4px; padding-left: 0; }
+#cat-list { margin-left: 0 margin-bottom:2px; }
+#cat-list li { padding:2px 3px 1px 3px; }
+#cat-list a, #cat-list span { display: block; padding: .5em 10px; }
+
+#categories.collapsed h3 { cursor: pointer; }
+#categories p { margin: 0 -1px -6px; padding: .6em 10px; }
+#categories.collapsed #cat-list { position: absolute; left: -999em; top: -999em; }
+.html-rtl #categories.collapsed #cat-list {position: absolute; left: 999em; top: -999em;}
+#categories.collapsed #cat-list.visible { margin: 0 -1px; width: 100%; left: 0; top: 3.35em; height: auto; overflow: visible; z-index: 99; }
+#categories.collapsed #cat-list a:active, #categories.collapsed #cat-list a:focus { position: absolute; left: 999em; top: 1002.4em; width: 85%; }
+#categories.collapsed #cat-list.visible a:active, #categories.collapsed #cat-list.visible a:focus { position: static; width: auto; }
+
+/*** =Content-main, general styles ***/
+#content-main p, #content-main ul, #content-main ol { margin-bottom: 1.25em; }
+#content-main li { margin-bottom: .5em; }
+#content-main li ul, #content-main li ol { margin-left: 15px; }
+
+/*** =Add-on boxes ***/
+.addon { position: relative; min-height: 160px; padding: 18px 20px 10px; margin-bottom: 1.6em; }
+.addon .vex { height: 10px; width: 100%; position: absolute; left: 0; bottom: 0;}
+.addon .vex span { display: block; height: 10px; margin-left: -1px; width: 10px; float: left;}
+.addon .name { padding-left: 44px; position: relative; }
+.addon .name img { position: absolute; left: 0; }
+.addon .author { margin: 0 0 1.25em 44px; }
+.addon .preview-img { position: absolute; left: -1px; top: 0; padding: 18px 0 0 20px; width:200px; height:150px; overflow:hidden;}
+.addon .flag { position: absolute; left: -1px; top: 0; padding: 5px 10px 3px 10px; z-index: 5; }
+.addon .baseline img.faq {margin: 0 5px 0 0; float: left;}
+.rec, .exp { min-height: 170px; }
+.rec .preview-img, .exp .preview-img { padding: 2.5em 0 0 20px; }
+.updated { font-size: 75%; color:#666; }
+
+/* =Primary featured add-on */
+.main { padding-left: 240px; min-height: 220px; }
+.main .rating { position: absolute; left: 20px; top: 180px; width: 200px; }
+.main .stats { position: absolute; left: 20px; top: 180px; width: 200px; margin-top: 2em; }
+
+/* =Secondary featured add-ons */
+.sub { position: relative; padding: 0; }
+.sub .irk { margin-left: -1px; padding: 14px 20px 8px; margin-right: 4px; }
+.sub .vex { padding: 0; left: 0; }
+.sub .name { margin-bottom: 0; }
+.sub .preview-img { position: static; padding: 0;}
+.sub .rating { position: static; width: 40%; padding-right: 10%; float: left; }
+.sub .rating img { display: block; }
+.sub .more-from { clear: both; }
+
+/* =Listing items */
+#content-main #addon-listing { margin-left: 0; }
+#addon-listing .addon { padding: 18px 240px 10px; margin-bottom: 1em; }
+#addon-listing .preview-img { position: absolute; left: -1px; top: 0;}
+#addon-listing .rating { display: inline; margin-right: 2em; }
+#addon-listing .stats { display: inline; margin-right: 2em; }
+#addon-listing .more { display: inline; margin: 0; padding: 0; }
+#addon-listing .more li { display: inline; margin: 0 10px 0 0; padding: 0 15px 0 0; }
+#addon-listing .desc { margin-top: .5em; }
+
+/*** =Install button ***/
+.install-button:after, .install-container:after {content:".";clear:both;display:block;visibility:hidden;height:0;overflow:hidden;} /* clear floats */
+.install-button a { float: left; cursor: pointer; max-width: 290px;}
+.install-button a * { display: block; float: left; position: relative; }
+.install-button a span { padding: 0 0 0 6px; }
+.install-button a span span { padding: 0 0 0 0; }
+.install-button a span span span { left: -6px; padding: 0 0 6px 0; }
+.install-button a span span span strong { right: -6px; padding: 10px 10px 0 6px; }
+.install-button a span span span strong img {padding: 0 6px 0 0;}
+
+#addon-listing .install-container { position: absolute; right: 0; top: 20px; max-width: 180px; padding: 0 15px; }
+#addon-listing .install-container .install-button { margin-bottom: .5em; float: right; }
+#addon-listing .addon p.updated { position: absolute; right: 0; bottom: 5px; max-width: 180px; padding: 0 15px; }
+
+#addon-listing .exp .exp-loggedout { float: right; }
+#addon-listing .exp .exp-loggedout .install-button { float: none; }
+
+.exp-loggedout { float: left; padding: 5px 5px 3px 8px; }
+.exp-loggedout .install-button { margin-top: 3px; margin-right: -3px; }
+#content-main .exp-loggedout p.install-button { margin-bottom: 0; }
+
+/*** =Pitch ***/
+.pitch { margin-bottom: 1em; padding: 10px; }
+.pitch h3, .pitch p { margin-bottom: 1em; }
+.html-rtl .pitch ul { padding-right: 15px;}
+.pitch h3 img { float: left; margin: -4px 10px 0 0; }
+
+/*** =Landing pages ***/
+#recommended { padding: 0 1% 10px; width: 98%; float: left; margin-bottom: 1em; }
+#recommended .addon { float: none; }
+
+#content.wide #recommended .addon { width: 20%; padding-left: 26.5%; min-width: 100px; margin-bottom: 0; }
+#content.wide #recommended .addon .preview-img { width: 45%; }
+#content.wide #recommended #feature1 { float: left; }
+#content.wide #recommended #feature2 { float: right; }
+
+#content.landing #secondaries { float: left; }
+#content.landing #secondaries .sub { float: left; width: 30.5%; margin-right: 2.5%; }
+#content.landing-with-slider #secondaries .sub { float: left; width: 31.5%; margin-right: 2.5%; }
+#content.landing-with-slider #secondaries #feature8 { margin-right: 0; }
+#content.landing #secondaries .sub .irk { padding-top: 2.2em; }
+#content.landing #secondaries .sub .vex { padding-top: 0; }
+#content.landing #secondaries .exp .preview-img { padding: 0;}
+#content.landing #secondaries .addon .preview-img { padding: 0; width:180px;}
+
+#content.landing-with-slider #secondaries .sub { float: left; width: 31.5%; margin-right: 2.5%; }
+#content.landing-with-slider #secondaries #feature8 { margin-right: 0; }
+
+/* Without a recommended box */
+#content.landing #secondaries { width: 77%; }
+#content.landing #content-extra { width: 23%; }
+#content.landing-with-slider #secondaries { width: 100%; }
+#content.landing-with-slider #content-extra { width: 25%; position: absolute; top: 0; right: 0; }
+#content.landing-with-slider #content-main { position: relative }
+#content.landing-with-slider #recommended { float: none; position: relative; left: 0%; width: 69%; }
+.html-rtl #content.landing-with-slider #recommended { float: left; }
+#content.landing-with-slider #recommended #slider .item_set .addon { float: left; width: 308px; padding-left: 240px }
+#content.landing-with-slider #recommended #slider { background-color: #fff; margin-bottom: 0 }
+
+/* When there is a recommended box...
+#content.landing #secondaries { width: 76%; padding-left: 1%; }
+#content.landing #content-extra { width: 22%; margin-right: 1%; }
+*/
+
+#content.landing #content-extra { position: static; float: right; }
+#content.landing-with-slider #content-extra { position: absolute; top:-124px;float: none; }
+#content.landing.languages #content-extra { margin-right: 0; }
+#content.landing .more-addons { margin: 0 0 1em; padding: 6px 10px 0; }
+
+#content.landing.browse #secondaries { width: 50%; }
+#content.landing.browse #secondaries .sub { width: 47%; }
+#content.landing.browse #secondaries #feature4 { margin-right: 0; }
+#content.landing.browse #content-extra { width: 47%; }
+#content.browse .more-addons h3 a.view { display: inline; }
+
+.browse-list { list-style: none; margin: 0; width: 100%; overflow: auto; }
+.browse-list li { width: 48%; margin: 0 0 3px 1%; float: left; }
+.browse-list a { display: block; padding: 3px 5px; }
+
+#content.landing.languages .sub { width: 23.75%; margin-right: 2%; float: left; }
+#content.landing.languages #feature3 { margin-right: 0; }
+
+/*** =Dictionaries ***/
+#dictionaries { margin-top: 1.5em; clear: both; padding: 10px 15px; }
+#dictionaries table { width: 100%; }
+#dictionaries th, #dictionaries td { padding: 6px 12px; }
+
+/*** =Detail page ***/
+#addon-summary { padding-left: 240px; min-height: 225px; }
+#addon-summary .name { margin-bottom: 0; }
+#addon-summary .preview-img { position: absolute; left: -1px; top: 0; padding: 18px 0 0 20px;}
+#addon-summary.exp .preview-img, #addon-summary.rec .preview-img { padding-top: 2.5em; }
+#addon-summary .rating img { display: block; }
+#addon-summary .rating { position: absolute; left: 20px; top: 180px; width: 200px; }
+#addon-summary .stats { position: absolute; left: 20px; top: 180px; width: 200px; margin-top: 3.5em; }
+
+#addon-summary .link-sharing { position: absolute; left: 105px; /*padding-left: 25px; border-left: 1px solid #cecece;*/ top: 180px; font-size: 0.7em; }
+#addon-summary .link-sharing .badge { }
+#addon-summary .link-sharing .badge .button { display: block;color: #062445; background: #7cc11c url("../img/sprite.png?20081210") -800px -730px no-repeat; }
+#addon-summary .link-sharing .badge .button a { display: block; padding: 0 8px 8px 0; background: transparent url(../img/installbtn-edges.png) no-repeat scroll right bottom; }
+#addon-summary .link-sharing .badge .button a span { display: block; text-align: center; font-weight: bold; padding: 2px 0 0 2px; background: transparent url(../img/installbtn-edges-list.png) no-repeat scroll left top; }
+
+#addon-summary .link-sharing .share-button { padding: 0; margin: 0 }
+#addon-summary .link-sharing .share-button:after, .install-container:after {content:".";clear:both;display:block;visibility:hidden;height:0;overflow:hidden;}
+#addon-summary .link-sharing .share-button a { float: left; cursor: pointer; max-width: 290px; text-decoration: none; }
+#addon-summary .link-sharing .share-button a * { display: block; float: left; position: relative; }
+#addon-summary .link-sharing .share-button a span { padding: 0 0 0 6px; }
+#addon-summary .link-sharing .share-button a span span { padding: 0 0 8px 0; }
+#addon-summary .link-sharing .share-button a span span span { left: -6px; padding: 0 0 0 0; }
+#addon-summary .link-sharing .share-button a span span span strong { width: 90px; text-align: center; right: -6px; padding: 0 18px 0 6px; }
+#addon-summary .link-sharing .share-button a span span span strong img {padding: 0 6px 0 0;}
+
+#addon-summary .link-sharing .share-button a { color: #062445; background-image:none; background-color:#00beff;}
+#addon-summary .link-sharing .share-button a span { background-image:none; }
+#addon-summary .link-sharing .share-button a span span { background-image:none; }
+#addon-summary .link-sharing .share-button a span span span { background-image:none; }
+#addon-summary .link-sharing .share-button a span span span strong { background-image:none; }
+
+#addon-summary .link-sharing .share-button a:hover, .install-button a:focus, .install-button a:active { color: #0a3b73; background-color: #00beff; background-position: -800px -860px; }
+
+#addon-summary .link-sharing .badge .counter { display: block; position: relative; padding-right: 4px; text-align: center; top: -4px; }
+
+#addon-summary .link-sharing .choices { display: none; position: absolute; z-index: 999; left: -120px; top: 12px; width: 360px; background-image:none; padding-top: 12px; }
+#addon-summary .link-sharing .choices div { margin: 0; padding: 1em; background-color: #f8f8f8; border: 1px solid #657b86; -moz-border-radius: 0px; -webkit-border-radius: 0px; border-radius: 0px; }
+#addon-summary .link-sharing .choices ul { list-style: none; margin: 0; }
+#addon-summary .link-sharing .choices ul li { width: 50%; float: left; }
+#addon-summary .link-sharing .choices ul li p { padding: 0.25em; margin: 0 0.25em 0 0 }
+#addon-summary .link-sharing .choices ul li p a { font-weight: bold; display:block; height: 20px; text-decoration: none; padding-left: 22px; background: transparent url(../img/favicons/digg.gif) left top no-repeat }
+#addon-summary .link-sharing .choices ul li.digg p a { background-image: url(../img/favicons/digg.gif); }
+#addon-summary .link-sharing .choices ul li.facebook p a { background-image: url(../img/favicons/facebook.gif); }
+#addon-summary .link-sharing .choices ul li.delicious p a { background-image: url(../img/favicons/delicious.gif); }
+#addon-summary .link-sharing .choices ul li.myspace p a { background-image: url(../img/favicons/myspace.gif); }
+#addon-summary .link-sharing .choices ul li.friendfeed p a { background-image: url(../img/favicons/friendfeed.gif); }
+#addon-summary .link-sharing .choices ul li.reddit p a { background-image: url(../img/favicons/reddit.gif); }
+
+
+.addon-cats { margin-left: 0; }
+.addon-cats li { display: inline; padding-left: 1em; margin-right: .5em; }
+.addon-cats li:first-child { padding-left: 0; }
+
+#addon-info, #addon-advanced { padding: 8px 15px; margin-bottom: 1em; }
+.html-ltr #addon_app_compatibility {position:relative; top: .6em; padding-left: 22em; font-weight:bold}
+.html-rtl #addon_app_compatibility {position:relative; top: .6em; padding-right: 22em; font-weight:bold}
+.html-ltr #addon-info .app_compat {float: left}
+.html-rtl #addon-info .app_compat {float: right}
+#addon-info h4 { font-size: 147%; }
+
+.addon-images { margin: 1em auto 1.5em; }
+.addon-images li { display: inline; margin-right: 10px; }
+.addon-images a img { margin-bottom: 10px; }
+
+#addon-advanced { position: relative; }
+#addon-advanced h5 { margin-top: 1em; }
+
+/* =Reviews Page */
+#content .addon-reviews { margin-left: 0; }
+#content .addon-reviews blockquote { margin: 0; }
+#content .addon-reviews li { padding: 8px 10px; }
+#content .addon-reviews .cite { font-size: 95%; margin-bottom: 0; }
+
+#content-extra ul.nav-addon { list-style: none; margin-left: 0; padding-left: 0; }
+
+#content .review .others-by-user { font-style: italic; display: block; margin-top: 0.5em; font-size: 0.85em }
+#content .review .others-by-user a { padding-left: 22px; }
+#content .review .others-by-user a.loading { background: transparent url(../img/ajax_loading.gif) no-repeat 2px top }
+
+#content .others-by-user-load { padding-left: 3em; }
+
+#content .review-reply { margin-left: 3em; }
+
+#content .review p.flag-thanks, #content .review-reply p.flag-thanks { font-weight: bold }
+#content .review form.flag, #content .review-reply form.flag { display: block; padding-bottom: 1em }
+#content .review form.flag label, #content .review-reply form.flag label { display: block; font-weight: bold }
+
+.with-js #content .review p.flag-thanks, .with-js #content .review-reply p.flag-thanks { display: inline }
+.with-js #content .review form.flag, .with-js #content .review-reply form.flag { display: inline }
+.with-js #content .review form.flag label, .with-js #content .review-reply form.flag label { display: none; }
+
+#content .review .flag span.loading, #content .review-reply .flag span.loading { padding-left: 22px; background: transparent url(../img/ajax_loading.gif) no-repeat 2px top }
+
+#content ul.review-flags { padding: 1em 1em 0.5em 1em; list-style-type: square }
+#content ul.review-flags li { font-weight: bold; }
+#content ul.review-flags-notes { padding: 0.25em 0.5em; list-style-type: disc }
+#content ul.review-flags-notes li { font-weight: normal; }
+#content ul.review-flags-notes .note { font-style: italic }
+
+/* =Version History Page */
+#latest-version { width: 96%; float: left; margin-bottom: 1.5em; padding: 8px 2%; }
+#latest-version h3 { float: left; }
+#latest-version .install-button { float: right; margin-bottom: 0; }
+#content .addon-versions { margin-left: 0; padding-left: 0; list-style: none; }
+#content .addon-versions li { padding: 8px 10px 0; }
+#content .addon-versions h3 { margin-bottom: .5em; }
+
+/* For romanticized version - These rules will probably go away */
+#content .version-details, #content .version-links { list-style: none; margin-left: 0; padding-left: 0; }
+#content .version-details li, #content .version-links li { padding: 0; border: 0; }
+#content .version-links li { margin-bottom: .25em; }
+#content .version-details em, #content .version-links em { font-style: normal; color: #888; }
+
+/* =Review miniform */
+#form-review { position: relative; margin-bottom: 1em; padding: 10px; }
+#form-review textarea { width: 98%; margin: 0 auto .5em; }
+#form-review #review-submit { width: 100%; clear: both; margin-top: -1.5em; }
+#form-review .disabled {background: #eee;}
+#form-review h3 {display:inline;}
+#form-review .login {display:inline; font-size: 92%;}
+#form-review .login a:link, #form-review .login a:visited {text-decoration:none;}
+.html-ltr #form-review #review-submit { float: left;}
+.html-rtl #form-review #review-submit { float: right;}
+.html-ltr #form-review #review-submit input { float: right; }
+.html-rtl #form-review #review-submit input { float: left; }
+
+/* =reCaptchas */
+#recaptcha_image { margin: .5em 0; }
+
+/* =Star rating */
+
+#rate-it {
+ margin-bottom: 1em;
+}
+
+#rate-it h4 {
+ float:left;
+ width: 6em;
+ font-size: 110%;
+}
+
+.html-rtl #form-review #rate-it h4 {
+ float:right;
+}
+
+#rate-it .stars {
+ display:block;
+ float:left;
+ width: 90px;
+ margin: 0.3em 0 0 0;
+}
+
+#form-review #rate-it .degrade {
+ margin-left: 0;
+ width: 145px;
+}
+
+#form-review #rate-it .degrade p {
+ margin: .2em 0;
+}
+
+#rate-it .rating {
+ cursor: pointer;
+ margin: 2em;
+ clear: both;
+ display: block;
+}
+#rate-it .rating:after {
+ content: '.';
+ display: block;
+ height: 0;
+ width: 0;
+ clear: both;
+ visibility: hidden;
+}
+
+#long-review .stars {
+ margin: 0;
+}
+
+#long-review .degrade {
+ margin-left: 14em;
+}
+
+#long-review .stars p {
+ margin: 0.2em 0;
+}
+
+#long-review .rating {
+ margin: 1em 0;
+}
+
+/* =Base star styles*/
+.stars input {
+ margin: 0 4px;
+}
+
+.stars {
+ zoom:1;
+}
+
+.stars .cancel,
+.stars .star{
+ float: left;
+ width: 12px;
+ height: 14px;
+ overflow: hidden;
+ text-indent: -999em;
+ cursor: pointer;
+}
+
+.html-rtl .stars .star,
+.html-rtl .stars .cancel {
+ float:right;
+}
+
+.stars .cancel a,
+.stars .cancel a {
+ background: url(../img/ratings_images.gif) no-repeat;
+}
+
+.stars .star a,
+.stars .star a {
+ background: url(../img/ratings_images.gif) no-repeat;
+}
+
+.stars.cancel a,
+.stars .star a,
+.stars .cancel a,
+.stars .star a {
+ display: block;
+ width: 100%;
+ height: 100%;
+ background-position: 0 -25px;
+ border:1 solid #FF0000;
+}
+
+.stars .cancel a,
+.stars.cancel a {
+ background-position: 0 2px;
+}
+
+.stars div.star_hover a,
+.stars div.star_hover a {
+ background-position: 0 -38px;
+}
+
+.stars div.cancel_on a,
+.stars div.cancel_on a {
+ background-position: 0 -11px;
+}
+
+.stars div.star_on a,
+.stars div.star_on a {
+ background-position: 0 -38px;
+}
+
+.stars:after {
+ content:".";clear:both;display:block;visibility:hidden;height:0;overflow:hidden;
+}
+
+/* =More add-ons */
+.more-addons { padding: 10px; }
+.more-addons h3 a.view { display: block; padding-right: 30px; padding: .2em 30px .2em 0; }
+.more-addons h4 { margin-top: 1.5em; }
+#content.landing #content-extra .more-addons ul { margin-left: 0; }
+
+/*** =Pagination ***/
+.pagination { padding: 8px 10px 0; margin-top: 1em; }
+.pages { margin: 0; float: left; }
+.pages li { display: inline; margin: 0 2px; }
+.pages a { padding: 3px 6px; }
+.pages .current strong { padding: 3px 6px; }
+.pages .prev a { padding-left: 15px; }
+.pages .next a { padding-right: 15px; }
+#content-main .pagination p.count { margin-bottom: 0; }
+.pagination p.perpage em, .pagination .perpage a { margin: 0; }
+
+/*** =Listing control bar ***/
+#form-listcontrol { position: relative; margin-bottom: 1em; padding: 8px 20% 8px 18%; }
+#form-listcontrol p, #form-listcontrol ul { margin: 0; }
+#form-listcontrol #per-page { position: absolute; top: 8px; left: 10px; padding-top: 6px; }
+#order-by li { display: inline; margin: 0 2px; }
+#order-by button { cursor: pointer; padding: 8px 2px; width: 18.5%; }
+#order-by button.current, #order-by button.current:hover { cursor: default; }
+#form-listcontrol #experimental { position: absolute; top: 8px; right: 10px; width: 140px; }
+#form-listcontrol #experimental label { display: block; cursor: pointer; padding: 4px 0 4px 30px; }
+#form-listcontrol #experimental label input { position: absolute; left: 6px; top: 20%; }
+
+
+/*** =Developer addon add agreement ***/
+#developerAgreement ul { list-style-type: disc; margin-top: 5px;}
+
+/*** =Thumbnail browser layout */
+#thumb-subcategories { position: absolute; left: 50px; top: 7.125em; width: 170px; }
+#thumb-subcategories ul { list-style-type: none; margin: 0; padding: 0; padding-bottom:6px; margin-bottom:1em; position:relative; }
+#thumb-subcategories ul li { padding-right:1px; overflow: hidden; }
+#thumb-subcategories ul li a, #thumb-subcategories ul li span { display: block; font-size: 95%; padding: .25em 10px; }
+
+#thumb-subcategories a:link, #thumb-subcategories a:visited { text-decoration: none; }
+
+#thumb-browser .thumbs { list-style-type:none; margin-left: 23%; }
+#thumb-browser .thumbs li.thumb { position: relative; width: 170px; margin-right: 10px; display: inline; float: left; text-align: center; }
+#thumb-browser .thumbs li.thumb div.wrapper { padding: 1.75em 9px 0px 9px; margin: 0 5px 0 0; }
+#thumb-browser .thumbs li.thumb div.wrapper div.item { width: 150px; }
+
+#thumb-browser .thumbs li.thumb div.img { border: 1px solid #00beff; background: #fff; height: 112px; overflow: hidden; }
+#thumb-browser .thumbs li.thumb div.img img { width: 150px; }
+#thumb-browser .thumbs li.thumb h3 { font-size: 115%; line-height: 115%; height: 2.25em; overflow: hidden; padding-top: 0.5em; margin-bottom: 0.5em; }
+#thumb-browser .thumbs li.thumb .flag { position: absolute; top: 0; left: 0; padding: 0 6px; }
+#thumb-browser .thumbs li.thumb p.meta { margin-bottom: 0; padding: 0; height: 3.5em; overflow: hidden; }
+#thumb-browser .thumbs li.thumb .vex { text-align: left; height: 8px; }
+#thumb-browser .thumbs li.thumb .vex span { display:block; height: 8px; margin-left:0px; }
+
+#thumb-browser #form-listcontrol { margin-left: 20%; padding: 8px 12% 8px 15%; }
+#thumb-browser #form-listcontrol #order-by button { white-space: nowrap; width: 16.5% }
+
+#slider { margin-bottom: 18px; width: 100%; background:transparent url(../img/sprite.png?20081210) no-repeat scroll left -1256px; }
+#slider .inner { background:transparent url(../img/sprite.png?20081210) no-repeat scroll right -1256px; width: 100%; }
+#slider .viewport { position: relative; width: 100%; overflow: hidden; }
+#slider .item_set { width: 6000px; }
+#slider .item_set .addon { float: left; width: 308px; }
+#slider .item_set li.addon { list-style: none; }
+#slider .item_set .addon .preview-img { background: transparent url(../img/sprite.png?20081210) no-repeat 1px -1256px }
+#slider .item_set .addon { background: none; border-left: none }
+#slider .item_set .addon .install-container { height: 85px; }
+#slider .item_set .addon .install-button { padding-top: 1.75em; padding-left: .5em; }
+#slider .item_set .addon .exp-loggedout .install-button { padding-top: 0; padding-left: 0; }
+#slider .item_set .addon .count { border-top:1px solid #00beff; bottom:4px; height:35px; margin-left:-240px; position:absolute; }
+#slider .controls { border-top: 1px solid #00beff; width: 100%; }
+#slider .controls_inner { font-size: 140%; text-align: center; padding-top: 6px; border-left: 1px solid #00beff; border-right: 1px solid #00beff; }
+#slider .controls a { text-decoration: none; padding: 0 0.5em; }
+#slider .controls a img { border: none; vertical-align: top }
+#slider .vex { background: transparent url("../img/sprite.png?20081210") right bottom no-repeat; width: 100%; }
+.html-rtl #slider .vex { direction: ltr; }
+#slider .vex span { background: transparent url("../img/sprite.png?20081210") left bottom no-repeat; height: 10px; display: block; width: 10px; }
+
+/** Collections normal view **/
+
+#content .addon-listing .date-added {
+ margin: 0;
+ float: right;
+}
+
+#content .coll-addon .preview-img {
+ margin: 0;
+}
+
+.collections .nav {
+ list-style-type: none;
+ margin: 0;
+ padding: 0;
+ float: right;
+}
+
+.collections .nav:after {
+ float: left;
+}
+
+.collections .nav li {
+ float: left;
+ margin: 5px;
+}
+
+.collections .collections-web li.coll-addon {
+ margin: 0;
+}
+
+/* bandwagon collections: interactive collections template */
+.collections p.amo-plug {
+ float: right;
+ -moz-border-radius: 0px;
+ border: 1px solid #d8dcdf;
+ padding: 5px;
+}
+
+.collections #content-main h1 {
+ font-size: 200%;
+}
+
+.collections .cat-name {
+ margin-left: .3em;
+}
+
+.collections .cat-header h3 {
+ background: transparent url(../img/fyf/triangle-right.png) scroll no-repeat left 5px;
+ padding-left: 20px;
+ margin-right: .4em;
+}
+
+.collections .cat-header.selected h3 {
+ background: transparent url(../img/fyf/triangle-down.png) scroll no-repeat left 5px;
+}
+
+.collections #content-main .cat-header p {
+ margin: 0;
+ margin-left: 20px;
+ padding-right: 5px;
+}
+
+.collections ul.addon-listing {
+ padding: 0;
+ margin: 0;
+}
+
+.collections ul.addon-install-listing {
+ max-height: 30em;
+ overflow: auto;
+}
+
+.collections li.list-addon:after,.collections .coll-addon .preview-img:after,.collections .nav:after,#collectionform:after {
+ content: '.';
+ clear: both;
+ display: block;
+ line-height: 0;
+ visibility: hidden;
+ width: 0;
+ height: 0;
+}
+
+.collections li.coll-addon {
+ margin: .2em 2em .2em 2em;
+ padding: .5em 0;
+ border-top: 1px solid #ccc;
+}
+
+.collections li.inst-addon {
+ margin: .5em 0;
+ padding: .5em;
+}
+
+.collections .coll-addon .preview-img {
+ max-width: 12em;
+ float: left;
+ clear: both;
+}
+
+.collections .coll-addon .preview-img img {
+ float: left;
+ clear: both;
+ margin: .5em 1em 0 0;
+ max-width: 12em;
+ max-height: 9em;
+}
+
+.collections .list-addon h4 {
+ color: #2d3b58;
+ font-size: 140%;
+}
+
+.collections .inst-addon .desc h4 {
+ width: auto;
+ float: none;
+}
+
+.collections .list-addon .desc {
+ width: 81%;
+ margin: .2em 0 0 0;
+ float: left;
+}
+
+.collections .list-addon img.icon {
+ float: left;
+ margin-right: .5em;
+ vertical-align: middle;
+}
+
+.collections .inst-addon .desc {
+ float: left;
+ width: auto;
+ margin: 0;
+}
+
+.collections .inst-addon .desc p {
+ font-size: 90%;
+ float: left;
+}
+
+.collections .coll-addon h4 a {
+ text-decoration: none;
+}
+
+.collections .list-addon .add-button,.collections .coll-addon .done-box {
+ -moz-border-radius: 7px;
+ padding: 5px 10px;
+ float: right;
+}
+
+.collections .list-addon .add-button,.collections .coll-addon .done-box {
+ min-width: 160px;
+}
+
+.collections .list-addon .done-box {
+ display: none;
+ clear: right;
+}
+
+.collections .list-addon .add-button {
+ background: transparent url(../img/installbtn-bg.png) repeat-x top left;
+}
+
+.collections .coll-addon .add-button {
+ font-weight: bold;
+}
+
+.collections .inst-addon .add-button {
+ margin: 1em 1em 0 2em;
+ min-width: 15%;
+}
+
+.collections .add-button .add,.collections .add-button input {
+ vertical-align: middle;
+ cursor: pointer;
+}
+
+.collections .add-button .add {
+ color: #062445;
+}
+
+.collections .add-button.upgrade {
+ background: #fff;
+ border: 1px solid #d8dcdf;
+ font-size: 125%;
+}
+
+.collections #content-main .add-button p {
+ margin: 0;
+ font-weight: normal;
+}
+
+.collections .done-box {
+ margin-top: .5em;
+ border: 1px solid #d8dcdf;
+}
+
+.collections .installsubmit {
+ margin: 1em 0;
+ float: right;
+}
+
+.collections .installsubmit input {
+ font-size: 120%;
+ margin: 0 .5em;
+}
+
+.collections .faq {
+ float: right;
+ text-align: right;
+}
+/* jqModal base Styling courtesy of Brice Burgess <bhb@iceburg.net> */
+
+/* The Window's CSS z-index value is respected (takes priority). If none is supplied,
+ the Window's z-index value will be set to 3000 by default (via jqModal.js). */
+.jqmWindow {
+ display: none;
+ position: fixed;
+ top: 17%;
+ left: 50%;
+ margin-left: -400px;
+ width: 800px;
+ background-color: #efefef;
+ color: #333;
+ border: 1px solid black;
+ padding: 12px;
+}
+
+.jqmOverlay {
+ background-color: #000;
+}
+
+
+
+/* Background iframe styling for IE6. Prevents ActiveX bleed-through (<select> form elements, etc.) */
+* iframe.jqm {
+ position: absolute;
+ top: 0;
+ left: 0;
+ z-index: -1;
+ width: expression(this.parentNode.offsetWidth+'px');
+ height: expression(this.parentNode.offsetHeight+'px');
+}
+* html .jqmWindow {
+ position: absolute;
+ top: expression((document.documentElement.scrollTop || document.body.scrollTop)+Math.round(17 *(document.documentElement.offsetHeight || document.body.clientHeight) / 100)+'px');
+}
+
+/*----------------------------------------------------------------------------
+=Typography CSS file originally for Addons.mozilla.org
+Created by Craig Cook - focalcurve.com
+ on December 30, 2007
+
+ Hacking for Sugarlabs.org April 24th, 2009
+ by Josh Williams tucson-labs.com
+-----------------------------------------------------------------------------*/
+
+/*** =Reset defaults ***/
+html, body, div, span, object, iframe,
+h1, h2, h3, h4, h5, h6, p, blockquote, pre,
+a, abbr, acronym, address, code,
+del, dfn, em, img, q, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend,
+table, caption, tbody, tfoot, thead, tr, th, td {
+ font-weight: inherit;
+ font-style: inherit;
+ font-size: 100%;
+ font-family: inherit;
+ vertical-align: baseline;
+}
+
+/* Tables still need 'cellspacing="0"' in the markup. */
+caption, th, td { text-align: left; font-weight:400; }
+
+/* Remove possible quote marks (") from <q>, <blockquote>. */
+blockquote:before, blockquote:after, q:before, q:after { content: ""; }
+blockquote, q { quotes: "" ""; }
+
+form ol, form ul { list-style: none; }
+input, button, select, textarea { font-family: inherit; font-size: inherit; color: inherit; }
+
+/*** =General elements ***/
+body { font: 62.5%/1.6 Verdana, "Trebuchet MS", sans-serif; }
+a:link { text-decoration: none; }
+
+h1, h2, h3, h4, h5, h6, caption, #rate-it legend { font-family: "Trebuchet MS", Helvetica, "Helvetica Neue", Arial, sans-serif; }
+
+h2 { font-weight: bold; font-size: 140%; }
+h3, caption { font-size: 140%; }
+h4, #rate-it legend { font-size: 125%; }
+
+dt { font-weight: bold; }
+thead th { font-size: 95%; }
+
+/*** =Site-notice ***/
+#site-notice { font-size: 110%; }
+
+/*** =Access nav ***/
+#nav-access { list-style: none; font-size: 115%; }
+#nav-access a:active, #nav-access a:focus { text-align: center; }
+
+/*** =Header ***/
+h4#moz { font-weight: bold; font-size: 130%; }
+
+/* =Page title */
+#page-title h1 { font-weight: bold; font-size: 300%; line-height:.1; }
+#page-title h1 a { text-decoration: none; }
+#page-title h2 { font-size: 220%; }
+#page-title p.page-intro { line-height: 1.25; font-size: 125%; font-weight: bold; }
+
+/* =User nav */
+#nav-user { text-align: right; font-size: 115%; }
+#nav-user a:link, #nav-user a:visited { color:#00beff;text-decoration: none; }
+#nav-user a:hover, #nav-user a:active, #nav-user a:focus { color:#6e008c;text-decoration: none; }
+
+/* =Other Applications */
+#other-apps h3 { font-size: 100%; }
+#nav-apps { list-style: none; font: bold 110% "Trebuchet MS", Helvetica, "Helvetica Neue", Arial, sans-serif; }
+#other-apps.js #nav-apps { font-size: 130%; }
+#nav-apps a { text-decoration: none; }
+
+/*** =Search form ***/
+#search-form { font-size: 100%; }
+#search-form #search-query label, #search-form #query, #search-form #category { font-size: 150%; }
+#search-form #search-category { white-space: nowrap; }
+
+#search-query label {color:#AFAFAF;}
+
+#search-query label:active {color:#333;}
+
+/*** =Footer ***/
+#nav-legal { list-style: none; }
+#footer-disclaimer { text-align: center; }
+
+/*** =Content ***/
+#content { font-size: 120%; }
+
+/*** =Extra content ***/
+#content-extra h3 { font-size: 130%; }
+#content-extra .nav-addon h3 { font-size: 130%; }
+#content-extra ul { font-size: 98%; }
+#content-extra p.view-all { text-align: right; }
+
+/*** =Categories ***/
+#categories h3 { font-size: 120%; }
+#cat-list { list-style: none; }
+#categories a:link, #categories a:visited { text-decoration: none; }
+#categories p { line-height: 1.4; }
+
+/*** =Add-on boxes ***/
+.addon .name { font-size: 180%; line-height: 1.2; font-weight: normal; }
+.addon .author { font-size: 100%; }
+.addon .name a, .addon .author a { text-decoration: none;border-bottom:none; }
+.addon .name a:hover, .addon .author a:hover { text-decoration: none; }
+.addon .rating, .addon .stats, .addon .updated { font-size: 95%; }
+.addon .stats em { font-style: normal; }
+.addon .more-from { font-size: 90%; }
+.addon .flag { /*text-transform: uppercase;*/ font-size: 100%; line-height: 1; }
+
+/* =Primary featured add-on */
+.main .name { font-size: 200%; }
+
+/* =Secondary featured add-ons */
+.sub .name { font-size: 150%; }
+.sub .preview-img { text-align: center; }
+.sub .desc { font-size: 98%; }
+
+/* =Listing items */
+#addon-listing { list-style: none; }
+#addon-listing .author { font-size: 100%; }
+#addon-listing .more { list-style: none; font-size: 95%; }
+
+/*** =Install button ***/
+.install-button { font: bold 120% "Trebuchet MS", Helvetica, "Helvetica Neue", Arial, sans-serif; }
+.install-button a { text-decoration: none; }
+.exp-loggedout { font-size: 90%; }
+.exp-loggedout .install-button a { font-size: 110%; text-align: left; }
+
+/*** =Pitch ***/
+.pitch h3 { font-size: 100%; font-weight: bold; line-height: 1.2; }
+.pitch h3 a { text-decoration: none; }
+.pitch p { font-size: 95%; }
+
+/*** =Landing pages ***/
+#recommended .name { font-size: 160%; }
+#content.landing #secondaries .sub .flag { font-size: 95%; }
+#content.landing .more-addons h3 { font-size: 130%; }
+#content.landing .more-addons ul { list-style: none; }
+#content.browse .more-addons h3 { text-align: center; }
+.browse-list a { text-decoration: none; font-weight: bold; }
+#dictionaries tbody th { font-weight: bold; }
+
+/*** =Detail page ***/
+#addon-summary .name { font-size: 200%; }
+.addon-cats { list-style: none; font-size: 95%; }
+.addon-cats a:link { text-decoration: none; }
+.addon-cats a:hover, .addon-cats a:active, .addon-cats a:focus { text-decoration: underline; }
+.addon-images, .addon-reviews { list-style: none; }
+.addon-images a img { vertical-align: top; }
+.addon-reviews .cite { font-size: 95%; }
+
+/* =Review form */
+#form-review #review-submit { font-size: 90%; }
+
+/* =reCaptchas */
+#recaptcha_whatsthis { font-size: 90% }
+
+/* =Star rating */
+/*ul.star-rating { list-style: none; }*/
+
+/* =More add-ons */
+.more-addons h3 { line-height: 1.3; }
+.more-addons h3 a.view { text-decoration: none; }
+.more-addons h4 { font-size: 100%; }
+
+/*** =Pagination ***/
+.pages { list-style: none; text-align: left; }
+.pagination p.count, .pagination p.perpage { text-align: right; }
+
+/*** =Listing control bar ***/
+#form-listcontrol { font-family: "Trebuchet MS", Helvetica, "Helvetica Neue", sans-serif; }
+#form-listcontrol #per-page { font-size: 110%; font-weight: bold; }
+#order-by button { text-align: center; }
+#form-listcontrol #experimental label { font-size: 95%; line-height: 1.1; }
+
+
+
+
+
+/* =sugar overides -------------------------------------------------------------------------- */
+
+
+
+body {
+font-family: "Helvetica neue", Arial, Helvetica, 'Liberation Sans', FreeSans, sans-serif;
+}
+
+/* =headings -------------------------------------------------------------------------- */
+
+#page-title div h1 {
+ padding-bottom:0;
+ font-size:200%;
+}
+
+#page-title h1 a img {
+display:auto;
+position:absolute;
+top:10px;
+left:0px;
+}
+
+h1, h2, h3, h4, h5, h6, caption, #rate-it legend {
+font-family: "Helvetica neue", Arial, Helvetica, 'Liberation Sans', FreeSans, sans-serif;
+}
+
+#categories h3 span {
+ font-weight:bold;
+ font-size:130%;
+ color:#fff;
+}
+
+div#page-title div #h1 a img {
+ xmargin-left:20px;
+}
+
+
+/* =layout -------------------------------------------------------------------------- */
+
+
+#content-main {
+
+}
+
+#content-main {
+ position: relative;
+ margin-top:20px;
+ margin-left: 150px;
+ min-height: 50em;
+}
+
+.html-ltr #search-element {
+ left:150px;
+}
+
+#content #sidebar {
+ position:absolute;
+ left:50px;
+ top:1em;
+ width:170px;
+}
+
+#branding {
+position: relative;
+padding: 1em 100px 1em 0;
+max-width: 950px;
+margin: 0 auto;
+ min-width: 770px;
+}
+
+#content {
+clear: both;
+position: relative;
+padding: 1em 50px;
+max-width: 950px;
+margin: 0 auto 1em;
+margin-bottom: 25ex;
+min-width: 770px; min-height:1000px; }
+
+#page-title { height: 12em; margin-top:14px;}
+
+#page-title div {
+ xsbackground:#efefef;
+ xposition:relative;
+ xmax-width:760px;
+}
+
+/* =misc -------------------------------------------------------------------------- */
+
+ul, ul ul {
+ list-style:none;
+}
+
+li a, .pitch li a, #recs li a, li ul li a,
+.viewport a,
+li a:visited, .pitch li a:visited, #recs li a:visited,li ul li a:visited {
+ font-size:120%;
+ text-decoration:none;
+ border-bottom:1px solid;
+}
+
+#installTrigger1 {
+ background:#78E600;
+ border-bottom:none;
+}
+
+#installTrigger1:hover {
+ background:#6e008c;
+}
+
+.viewport li h4 a:hover {
+ text-decoration:none;
+}
+
+.naked li a, .naked li a:visited {
+ border-bottom:none;
+}
+
+#sidebar #categories .pitch ul.naked li {
+ border-bottom:none;
+}
+
+#sidebar #categories .pitch ul.naked li a {
+ border-bottom:none;
+}
+
+#sidebar #categories .pitch ul.naked li a img {
+ border-bottom:none;
+}
+
+#cat-list li a {
+ border-bottom:1px solid #dbdbdb;
+}
+
+#content-main > h3 {
+ font-size:150%;
+ font-weight:bold;
+ padding:.5em;
+ padding-left:1.3em;
+ border:1px solid #00beff;
+ border-bottom:none;
+}
+
+#content-extra h3 {
+ border:none;
+}
+
+#recs h3 {
+ margin-bottom:.6em;
+ padding:12px;
+ border-bottom:1px solid #00beff;
+}
+
+#recs p + h3 {
+ margin-bottom:auto;
+ border-bottom:none;
+}
+
+#recs ul li {
+ padding-left:0;
+xbackground:transparent url(../img/sprite.png?20081210) no-repeat scroll 100% -387px;
+}
+
+#branding > #moz {visibility: hidden;}
+#page-title {background: none;}
+#other-apps {visibility: hidden;}
+#content #sidebar {position:absolute;left:15px;}
+#content-main {margin-left:150px;}
+.html-ltr #search-element {left:150px;}
+.html-ltr #page-title h1 img {left:-90px;bottom:-5px;}
+
+
+
+
+ \ No newline at end of file
diff --git a/site/app/webroot/img/addon-br.png b/site/app/webroot/img/addon-br.png
index 677e90d..46cade0 100644
--- a/site/app/webroot/img/addon-br.png
+++ b/site/app/webroot/img/addon-br.png
Binary files differ
diff --git a/site/app/webroot/img/amo2009/app-icons/sugar.png b/site/app/webroot/img/amo2009/app-icons/sugar.png
new file mode 100644
index 0000000..275c767
--- /dev/null
+++ b/site/app/webroot/img/amo2009/app-icons/sugar.png
Binary files differ
diff --git a/site/app/webroot/img/app-icons/developers.png b/site/app/webroot/img/app-icons/developers.png
index 96b6919..3764319 100644..120000
--- a/site/app/webroot/img/app-icons/developers.png
+++ b/site/app/webroot/img/app-icons/developers.png
Binary files differ
diff --git a/site/app/webroot/img/app-icons/generic.png b/site/app/webroot/img/app-icons/generic.png
index 96b6919..3764319 100644..120000
--- a/site/app/webroot/img/app-icons/generic.png
+++ b/site/app/webroot/img/app-icons/generic.png
Binary files differ
diff --git a/site/app/webroot/img/app-icons/sugar.png b/site/app/webroot/img/app-icons/sugar.png
new file mode 100644
index 0000000..09a8698
--- /dev/null
+++ b/site/app/webroot/img/app-icons/sugar.png
Binary files differ
diff --git a/site/app/webroot/img/app-icons/sugar_small.png b/site/app/webroot/img/app-icons/sugar_small.png
new file mode 100644
index 0000000..20eae85
--- /dev/null
+++ b/site/app/webroot/img/app-icons/sugar_small.png
Binary files differ
diff --git a/site/app/webroot/img/rustico/header/moz-com-logo.png b/site/app/webroot/img/rustico/header/moz-com-logo.png
index cb0ba06..2a3347c 100644
--- a/site/app/webroot/img/rustico/header/moz-com-logo.png
+++ b/site/app/webroot/img/rustico/header/moz-com-logo.png
Binary files differ
diff --git a/site/app/webroot/img/slider-next-disabled.gif b/site/app/webroot/img/slider-next-disabled.gif
index 32f0541..5f57e2c 100644
--- a/site/app/webroot/img/slider-next-disabled.gif
+++ b/site/app/webroot/img/slider-next-disabled.gif
Binary files differ
diff --git a/site/app/webroot/img/slider-next.gif b/site/app/webroot/img/slider-next.gif
index 04ca93d..c2c01e2 100644
--- a/site/app/webroot/img/slider-next.gif
+++ b/site/app/webroot/img/slider-next.gif
Binary files differ
diff --git a/site/app/webroot/img/slider-prev-disabled.gif b/site/app/webroot/img/slider-prev-disabled.gif
index beb0132..aebbe4c 100644
--- a/site/app/webroot/img/slider-prev-disabled.gif
+++ b/site/app/webroot/img/slider-prev-disabled.gif
Binary files differ
diff --git a/site/app/webroot/img/slider-prev.gif b/site/app/webroot/img/slider-prev.gif
index ad583b9..dc0d167 100644
--- a/site/app/webroot/img/slider-prev.gif
+++ b/site/app/webroot/img/slider-prev.gif
Binary files differ
diff --git a/site/app/webroot/img/sprite-alpha.png b/site/app/webroot/img/sprite-alpha.png
index 8894ac5..7be132b 100644
--- a/site/app/webroot/img/sprite-alpha.png
+++ b/site/app/webroot/img/sprite-alpha.png
Binary files differ
diff --git a/site/app/webroot/img/sprite.png b/site/app/webroot/img/sprite.png
index 7506210..72c0b3f 100644
--- a/site/app/webroot/img/sprite.png
+++ b/site/app/webroot/img/sprite.png
Binary files differ
diff --git a/site/app/webroot/img/template/moz-com-logo.png b/site/app/webroot/img/template/moz-com-logo.png
index cb0ba06..2a3347c 100644
--- a/site/app/webroot/img/template/moz-com-logo.png
+++ b/site/app/webroot/img/template/moz-com-logo.png
Binary files differ