diff options
Diffstat (limited to 'site')
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"' : '')?>/> <?=___('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 ' · '; } @@ -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')?>">©</span> 2005–<?=date('Y')?> Mozilla. <?=_('footer_all_rights_reserved')?></p> + <p id="copyright"><?=_('footer_copyright')?> <span title="<?=php_uname('n')?>">©</span> 2005–<?=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')?> <?=___('user_notifications_item_compat', 'Add-on Compatibility (strongly recommended)')?></label></li> <li><label for="UserNotifyevents"><?=$html->checkbox('User/notifyevents')?> <?=___('user_notifications_item_events', 'Upcoming events and contests')?></li> + <li><label for="UserNotifybroadcast"><?=$html->checkbox('User/notifybroadcast')?> <?=___('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 Binary files differindex 677e90d..46cade0 100644 --- a/site/app/webroot/img/addon-br.png +++ b/site/app/webroot/img/addon-br.png diff --git a/site/app/webroot/img/amo2009/app-icons/sugar.png b/site/app/webroot/img/amo2009/app-icons/sugar.png Binary files differnew file mode 100644 index 0000000..275c767 --- /dev/null +++ b/site/app/webroot/img/amo2009/app-icons/sugar.png diff --git a/site/app/webroot/img/app-icons/developers.png b/site/app/webroot/img/app-icons/developers.png Binary files differindex 96b6919..3764319 100644..120000 --- a/site/app/webroot/img/app-icons/developers.png +++ b/site/app/webroot/img/app-icons/developers.png diff --git a/site/app/webroot/img/app-icons/generic.png b/site/app/webroot/img/app-icons/generic.png Binary files differindex 96b6919..3764319 100644..120000 --- a/site/app/webroot/img/app-icons/generic.png +++ b/site/app/webroot/img/app-icons/generic.png diff --git a/site/app/webroot/img/app-icons/sugar.png b/site/app/webroot/img/app-icons/sugar.png Binary files differnew file mode 100644 index 0000000..09a8698 --- /dev/null +++ b/site/app/webroot/img/app-icons/sugar.png diff --git a/site/app/webroot/img/app-icons/sugar_small.png b/site/app/webroot/img/app-icons/sugar_small.png Binary files differnew file mode 100644 index 0000000..20eae85 --- /dev/null +++ b/site/app/webroot/img/app-icons/sugar_small.png diff --git a/site/app/webroot/img/rustico/header/moz-com-logo.png b/site/app/webroot/img/rustico/header/moz-com-logo.png Binary files differindex 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 diff --git a/site/app/webroot/img/slider-next-disabled.gif b/site/app/webroot/img/slider-next-disabled.gif Binary files differindex 32f0541..5f57e2c 100644 --- a/site/app/webroot/img/slider-next-disabled.gif +++ b/site/app/webroot/img/slider-next-disabled.gif diff --git a/site/app/webroot/img/slider-next.gif b/site/app/webroot/img/slider-next.gif Binary files differindex 04ca93d..c2c01e2 100644 --- a/site/app/webroot/img/slider-next.gif +++ b/site/app/webroot/img/slider-next.gif diff --git a/site/app/webroot/img/slider-prev-disabled.gif b/site/app/webroot/img/slider-prev-disabled.gif Binary files differindex beb0132..aebbe4c 100644 --- a/site/app/webroot/img/slider-prev-disabled.gif +++ b/site/app/webroot/img/slider-prev-disabled.gif diff --git a/site/app/webroot/img/slider-prev.gif b/site/app/webroot/img/slider-prev.gif Binary files differindex ad583b9..dc0d167 100644 --- a/site/app/webroot/img/slider-prev.gif +++ b/site/app/webroot/img/slider-prev.gif diff --git a/site/app/webroot/img/sprite-alpha.png b/site/app/webroot/img/sprite-alpha.png Binary files differindex 8894ac5..7be132b 100644 --- a/site/app/webroot/img/sprite-alpha.png +++ b/site/app/webroot/img/sprite-alpha.png diff --git a/site/app/webroot/img/sprite.png b/site/app/webroot/img/sprite.png Binary files differindex 7506210..72c0b3f 100644 --- a/site/app/webroot/img/sprite.png +++ b/site/app/webroot/img/sprite.png diff --git a/site/app/webroot/img/template/moz-com-logo.png b/site/app/webroot/img/template/moz-com-logo.png Binary files differindex cb0ba06..2a3347c 100644 --- a/site/app/webroot/img/template/moz-com-logo.png +++ b/site/app/webroot/img/template/moz-com-logo.png |