Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/site/app/webroot/js/addons.js
diff options
context:
space:
mode:
Diffstat (limited to 'site/app/webroot/js/addons.js')
-rw-r--r--site/app/webroot/js/addons.js873
1 files changed, 18 insertions, 855 deletions
diff --git a/site/app/webroot/js/addons.js b/site/app/webroot/js/addons.js
index ec3b2f6..2f23003 100644
--- a/site/app/webroot/js/addons.js
+++ b/site/app/webroot/js/addons.js
@@ -122,17 +122,8 @@ function fixPlatformLinks(versionID, name) {
// hide incompatible installs
var others = installs.not(".platform-ALL,.platform-"+platform);
others.hide();
- others.each(function() {
- var expParents = $(this).parents('.exp-loggedout, .exp-confirmed');
- if ($(expParents).length)
- $(expParents).hide();
- else
- $(this).hide();
- });
-
-
+
if (installs.length == others.length) {
- outer.find(".exp-loggedout").hide();
outer.append($('<p class="not-avail"></p>').append(sprintf(addOnNotAvailableForPlatform, name, platform)));
}
@@ -206,21 +197,10 @@ function addCompatibilityHints(addonID, versionID, fromVer, toVer, showVersionLi
cloned.hide();
outer.after(cloned);
- // wrap and gray out buttons
- // skip experimental confirmation dialogs
- $(links).each(function () {
-
- var exp_confirm = $(this).parents('.exp-loggedout');
- if (exp_confirm.length) {
- $(exp_confirm).find('.exp-confirm-install').hide();
- return;
- }
-
- // gray out button
- var mydiv = document.createElement('div');
- mydiv.setAttribute('class', 'exp-loggedout');
- outer.wrapInner(mydiv);
- });
+ // gray out button
+ var mydiv = document.createElement('div');
+ mydiv.setAttribute('class', 'exp-loggedout');
+ outer.wrapInner(mydiv);
// remove link
var url = links.attr('href');
@@ -229,8 +209,6 @@ function addCompatibilityHints(addonID, versionID, fromVer, toVer, showVersionLi
links.removeAttr("title");
links.css('cursor', 'default');
links.parent().css('float', 'none');
- // freeze button
- links.attr('frozen', 'true');
// determine "all versions" page url
if (url.indexOf('downloads') > 0)
@@ -273,7 +251,6 @@ function removeCompatibilityHint(versionID) {
orig.prev().remove();
// show original buttons
orig.attr('id', 'install-'+versionID);
-
orig.show();
return true;
@@ -331,184 +308,6 @@ function emailLink(obj, lp, hp) {
cont.replaceChild(a, cont.lastChild);
}
-var translation_box = {
- switchLocale: function(tab, locale) {
- var translationBox = $(tab).parent().parent().parent();
- if (translationBox.find('.translation-deletelocale').size() > 0) {
- return;
- }
- translationBox.find('.selected').removeClass('selected');
- $(tab).addClass('selected');
- translationBox.find('.' + locale).addClass('selected');
- this.checkDeleteButton(translationBox);
- translationBox.find('.translation-area .input.selected').trigger('onchange');
- translationBox.find('.' + locale).focus();
- },
-
- checkDeleteButton: function(translationBox) {
- var defaultLocale = translationBox.find('.translation-area').attr('defaultLocale');
- var selectedLocale = translationBox.find('.translation-tab.selected').text();
- if (selectedLocale == defaultLocale || selectedLocale == '') {
- translationBox.find('.translation-button.remove').hide();
- }
- else {
- translationBox.find('.translation-button.remove').show();
- }
- },
-
- checkLength: function(field, max) {
- var translationBox = $(field).parent().parent();
- translationBox.find('.translation-maxlength.selected span').text(field.value.length);
-
- if (field.value.length > max) {
- translationBox.find('.translation-maxlength.selected').addClass('over');
- translationBox.addClass('errors');
- }
- else {
- translationBox.find('.translation-maxlength.selected').removeClass('over');
-
- if (translationBox.find('.translation-area .over').size() == 0) {
- translationBox.removeClass('errors');
- }
- }
- },
-
- addTab: function(button) {
- var translationBox = $(button).parent().parent().parent();
- if (translationBox.find('.translation-deletelocale').size() > 0) {
- return;
- }
-
- if (translationBox.find('.translation-tab').hasClass('new')) {
- translationBox.find('.selected').removeClass('selected');
- translationBox.find('.new').addClass('selected');
- return;
- }
-
- var tab = '<div class="translation-tab selected new" onclick="translation_box.switchLocale(this, \'new\');"></div>';
- translationBox.find('.selected').removeClass('selected');
- translationBox.find('.translation-tabs').append(tab);
- translationBox.find('.translation-area').append($('.translation-newlocale-container').html());
-
- // Remove existing translations from available dropdown
- translationBox.find('.translation-tab:not(.new)').each(function(index, item) {
- translationBox.find('.translation-newlocale select option[value="' + $(item).text() + '"]').remove();
- });
- this.checkDeleteButton(translationBox);
- },
-
- addLocale: function(button, addToAll) {
- var translationBox = $(button).parent().parent().parent().parent().parent();
- var thisBox = translationBox;
- if (addToAll == true) {
- translationBox = translationBox.parent();
- }
-
- var locale = thisBox.find('select').val();
- var localeName = thisBox.find('select option:selected').text();
-
- var tab = '<div class="translation-tab selected" title="' + localeName + '" onclick="translation_box.switchLocale(this, \'' + locale + '\');">' + locale + '</div>';
-
- translationBox.find('.input.' + locale + '.deleted').remove();
- translationBox.find('.translation-area:not(:has(.' + locale + '))').each(function(index, item) {
- var itemID = $(item).attr('itemID');
- var field = 'data[' + $(item).attr('table') + ']' + (itemID != null ? '[' + itemID + ']' : '') + '[' + $(item).attr('field') + '][' + locale + ']';
- $(item).parent().find('.selected').removeClass('selected');
-
- var fieldType = $(item).find('.input')[0].tagName.toLowerCase();
- var style = $(item).find('.input').attr('style');
-
- if (fieldType == 'textarea') {
- var fieldHTML = '<textarea class="input ' + locale + ' selected" name="' + field + '" style="' + style + '"';
- var maxLength = $(item).find('.input').attr('maxLength');
- if (maxLength) {
- fieldHTML += ' maxLength="' + maxLength + '" onkeyup="translation_box.checkLength(this, ' + maxLength + ');" onchange="translation_box.checkLength(this, ' + maxLength + ');"';
- var afterHTML = '<div class="translation-maxlength ' + locale + ' selected">' + $(item).find('.translation-maxlength').html() + '</div>';
- }
- fieldHTML += '></textarea>';
- }
- else if (fieldType == 'input') {
- var fieldHTML = '<input type="text" class="input ' + locale + ' selected" value="" name="' + field + '" style="' + style + '" />';
- var afterHTML = '';
- }
- $(item).append(fieldHTML).append(afterHTML);
- translationBox.find('.translation-area .input.selected').trigger('onchange');
-
- $(item).parent().find('.translation-tabs').append(tab);
- });
-
- thisBox.find('.new').remove();
- this.checkDeleteButton(translationBox);
- thisBox.find('.translation-area .selected').focus();
- },
-
- confirmRemove: function(button) {
- var translationBox = $(button).parent().parent().parent();
-
- if (translationBox.find('.translation-deletelocale').size() > 0) {
- return;
- }
-
- translationBox.find('.translation-area .input.selected').hide();
-
- translationBox.find('.translation-area .input:first').before($('.translation-deletelocale-container').html());
- translationBox.find('.translation-deletelocale').css('width', translationBox.css('width'));
- },
-
- removeLocale: function(button) {
- var translationBox = $(button).parent().parent().parent().parent().parent();
- var locale = translationBox.find('.translation-row .selected').text();
- translationBox.find('.translation-tab:contains(' + locale + ')').remove();
- translationBox.find('.translation-area .input.' + locale).val('');
- translationBox.find('.translation-area .input.' + locale).addClass('deleted');
- translationBox.find('.translation-area .input.' + locale).removeClass('selected');
-
- translationBox.find('.translation-maxlength.' + locale).remove();
-
- translationBox.find('.translation-deletelocale').remove();
- translationBox.find('.translation-area .input').removeClass('confirm-delete');
-
- var defaultLocale = translationBox.find('.translation-area').attr('defaultLocale');
- translationBox.find('.translation-tab:contains(' + defaultLocale + ')').addClass('selected');
- translationBox.find('.translation-area .' + defaultLocale).addClass('selected');
- this.checkDeleteButton(translationBox);
- },
-
- cancelRemove: function(button) {
- var translationBox = $(button).parent().parent().parent().parent().parent();
- translationBox.find('.translation-deletelocale').remove();
- translationBox.find('.translation-area .input').removeClass('confirm-delete');
- translationBox.find('.translation-area .input.selected').show();
- translationBox.find('.translation-area .input.selected').focus();
- },
-
- cancelAdd: function(button) {
- var translationBox = $(button).parent().parent().parent().parent().parent();
- translationBox.find('.translation-tabs .new').remove();
- translationBox.find('.translation-newlocale').remove();
-
- var defaultLocale = translationBox.find('.translation-area').attr('defaultLocale');
- translationBox.find('.translation-tab:contains(' + defaultLocale + ')').addClass('selected');
- translationBox.find('.translation-area .' + defaultLocale).addClass('selected');
- this.checkDeleteButton(translationBox);
- },
-
- showHelp: function(button) {
- var translationBox = $(button).parent().parent();
- if (translationBox.prev('.translation-help').size() > 0) {
- return;
- }
- translationBox.before($('.translation-help-container').html());
- translationBox.prev('.translation-help').slideDown('slow');
- },
-
- hideHelp: function(button) {
- var helpBox = $(button).parent().parent().parent().parent();
- helpBox.slideUp('normal', function() {
- helpBox.remove();
- });
- }
-};
/**
* sprintf() implementation for Javascript
@@ -603,6 +402,7 @@ function sprintf()
return str;
}
+
/*
### jQuery Star Rating Plugin v2.0 - 2008-03-12 ###
By Diego A, http://www.fyneworks.com, diego@fyneworks.com
@@ -671,7 +471,7 @@ $.fn.rating = function(settings) {
// loop through each matched element
- var radioButtons = $(this).find('input[type=radio]');
+ var radioButtons = $(this).find('input[@type=radio]');
$(this).empty();
$(this).removeClass('degrade');
@@ -1065,76 +865,6 @@ $.fn.collection = function(options) {
})(jQuery);
/*# AVOID COLLISIONS #*/
-function confirmExpInstall(div) {
- $(div).removeClass('exp-loggedout');
- $(div).addClass('exp-confirmed');
- var bt = $(div).find('.install-button a');
-
- var href = $(bt).attr('href');
- if (href && href.match(/(policy|\.xml|\.xpi|\.jar)/)) {
- if (href.match(/collection_id/)) {
- href += '&confirmed';
- } else {
- href += '?confirmed';
- }
- $(bt).attr('href', href);
- }
-
- var tmp = $(bt).attr('engineURL');
- if (tmp && tmp.match(/\.xml/)) {
- if (tmp.match(/collection_id/)) {
- tmp += "&confirmed";
- } else {
- tmp += "?confirmed";
- }
- $(bt).attr('engineURL', tmp);
- }
-
- $(bt).removeAttr('frozen');
-}
-
-function unconfirmExpInstall(div) {
- $(div).removeClass('exp-confirmed');
- $(div).addClass('exp-loggedout');
- var bt = $(div).find('.install-button a');
-
- var href = $(bt).attr('href');
- if (href) {
- href = href.replace(/\?confirmed/, '').replace(/&confirmed/,'');
- $(bt).attr('href', href);
- }
- var tmp = $(bt).attr('engineURL');
- if (tmp) {
- tmp = tmp.replace(/\?confirmed/, '').replace(/&confirmed/,'');
- $(bt).attr('engineURL', tmp);
- }
-
- $(bt).attr('frozen', 'true');
-}
-
-$(document).ready(function() {
- $('.exp-confirm-install input').each(function () {
- var div = $(this).parents('.exp-loggedout, .exp-confirmed');
- if (this.checked)
- confirmExpInstall(div);
- else
- unconfirmExpInstall(div);
- });
- $('.exp-confirm-install input').change(function (e) {
- var div = $(this).parents('.exp-loggedout, .exp-confirmed');
- if (this.checked) {
- confirmExpInstall(div);
- } else {
- unconfirmExpInstall(div);
- }
- });
-});
-function initExpConfirm(versionId) {
- var outer = $('#install-'+ versionId);
- $(outer).find('.exp-confirm-install').show();
- $(outer).find('.exp-loggedout .install-button').show();
-}
-
/**
* jQuery rollover reveal widget
* lorchard@mozilla.com
@@ -1172,8 +902,7 @@ function initExpConfirm(versionId) {
var option_defaults = {
reveal_delay: 250,
- dismiss_delay: 1000,
- enable_rollover: true
+ dismiss_delay: 500
};
return {
@@ -1185,22 +914,21 @@ function initExpConfirm(versionId) {
var that = this;
this.options = $.extend({}, option_defaults, options);
- this.root = $(el);
- this.to_reveal = this.root.find('.to-reveal');
+ // Assign a unique ID to the element if none found.
+ if (!el.id) el.id = 'el-' +
+ (new Date()).getTime() + '-' +
+ parseInt(1000 * Math.random());
+
+ this.root = '#'+el.id;
+ this.to_reveal = $(this.root_id).find('.to-reveal');
// Wire up the event handlers for significant elements of
// the widget.
- this.root
+ $(this.root)
.find('.activator')
.click(function() { that.toggle(); return false; })
- .mouseover(function() {
- if (!that.options.enable_rollover) return;
- that.schedule('reveal'); that.cancel('dismiss');
- })
- .mouseout(function() {
- if (!that.options.enable_rollover) return;
- that.cancel('reveal'); that.schedule('dismiss');
- })
+ .mouseover(function() { that.schedule('reveal'); that.cancel('dismiss'); })
+ .mouseout(function() { that.cancel('reveal'); that.schedule('dismiss'); })
.end()
.find('.to-reveal')
.mouseover(function() { that.cancel('dismiss'); })
@@ -1263,568 +991,3 @@ function initExpConfirm(versionId) {
}();
})(jQuery);
-
-/**
- * jQuery utility for PHP's nl2br equivalent in JavaScript,
- * along with the inverse method br2nl
- * fwenzel@mozilla.com
- */
-;if(jQuery) (function($){
- $.nl2br = function(input) {
- return input.replace(/\n/g, '<br/>');
- }
- $.br2nl = function(input) {
- return input.replace(RegExp('<br\s*/?>', 'g'), "\n");
- }
-})(jQuery);
-
-/**
- * jQuery plugin to delay execution of a callback by x milliseconds
- * fwenzel@mozilla.com
- */
-;if(jQuery) (function($){
- $.fn.delay = function(msec, callback) {
- return this.each(function() {
- $(this).animate({opacity: 1.0}, msec, callback);
- });
- }
-})(jQuery);
-
-/**
- * jQuery plugin to fade out, then remove an element
- * fwenzel@mozilla.com
- */
-;if(jQuery) (function($){
- $.fn.fadeRemove = function() {
- return this.each(function() {
- $(this).fadeOut('normal', function(){
- $(this).remove();
- });
- });
- }
-})(jQuery);
-
-
-// make a call to Urchin, for tracking download button clicks
-function urchinDownloadTrackingEvent(path_to_download) {
- urchinTracker(path_to_download); // actual
-// alert(path_to_download); // debug
-}
-
-// attach a mousedown handler for Urchin, see urchinDownloadTrackingEvent()
-function installButtonAttachUrchin(button) {
- // don't attach urchin to buttons that just link to a EULA page
- if($(button).attr('isEULAPageLink')) return false;
-
- $(button).mousedown(function (e) {
- if ($(this).attr('frozen') == 'true') return false;
- urchinDownloadTrackingEvent($(this).attr('href'));
- });
-}
-
-// attach javascript install methods to an install button
-// e.g. install(), addEngine()
-function installButtonAttachInstallMethod(button) {
-
- var method = $(button).attr('jsInstallMethod');
-
- $(button).click(function (e) {
- if ($(this).attr('frozen') == 'true') return false;
-
- if (method == 'browser_app_addon_install')
- return install(e, $(this).attr('addonName'), $(this).attr('addonIcon'), $(this).attr('addonHash'));
- else if (method == 'search_engine_install')
- return addEngine($(this).attr('engineURL'));
- });
-}
-
-$(document).ready(function() {
- $('p.install-button a').each(function () {
- installButtonAttachUrchin(this);
- installButtonAttachInstallMethod(this);
- });
-});
-
-/**
- * bandwagon: fire a custom refresh event for bandwagon extension
- * @return void
- */
-function bandwagonRefreshEvent() {
- var bandwagonSubscriptionsRefreshEvent = document.createEvent("Events");
- bandwagonSubscriptionsRefreshEvent.initEvent("bandwagonRefresh", true, false);
- document.dispatchEvent(bandwagonSubscriptionsRefreshEvent);
-}
-
-/** Collections edit page **/
-var collections_edit = {
- /**
- * initialize collections edit page
- */
- init: function() {
- $('#coll-edit .jsonly').show();
-
- this.tabs_init();
- this.nickname_init();
- this.icon_init();
- this.user_init();
- this.addon_init();
- this.addon_comment_init();
-
- $('#delete-coll').click(function(){ // delete button
- $(this).hide();
- $('#delete-confirm').show();
- });
- $('#delete-coll-noscript').change(function() {
- if ($(this).is(':checked')) {
- $('#delete-warning').fadeIn();
- $('#submitbutton').val(collections_edit_submit_deletecollection);
- } else {
- $('#delete-warning').fadeOut();
- $('#submitbutton').val(collections_edit_submit);
- }
- });
- $('#saved_success').delay(10000, function(){$(this).fadeRemove()}); // "saved" success message
- },
-
- /**
- * initialize tabbed layout
- */
- tabs_init: function() {
- $("#coll-edit > ul")
- .tabs()
- .bind('tabsselect', function(e, ui, tab) {
- window.location.hash = '#'+$(tab.panel).attr('id');
- });
- },
-
- /**
- * initialize nickname check UI
- */
- nickname_init: function() {
- this.nickname_old = $('#CollectionNickname').val(); // save original nickname
- $('#nick-avail').click(this.nickname_check);
- $('#CollectionNickname')
- .blur(this.nickname_check)
- .keypress(function(e) {
- if (e.which == KEYCODE_ENTER) {
- collections_edit.nickname_check();
- e.preventDefault();
- }
- })
- .keyup(function(e) {
- if (e.which!=KEYCODE_ENTER) {
- collections_edit.nickname_checked = false;
- collections_edit.nickname_showButton();
- }
- });
- },
- /**
- * check if a nickname is already taken
- */
- nickname_check: function() {
- if (collections_edit.nickname_checked)
- return true;
- else
- collections_edit.nickname_checked = true;
-
- var name = $.trim($('#CollectionNickname').val());
- $('#CollectionNickname').val(name);
- if (name == collections_edit.nickname_old) { // nickname unchanged
- collections_edit.nickname_showLabel('available');
- return true;
- }
- if (name.length > 0) {
- $('#CollectionNickname').siblings('img').show();
- $.getJSON(jsonURL+'/nickname', {nickname: name}, function(data) {
- $('#CollectionNickname').siblings('img').hide();
- $('#nick-avail').hide();
- if (data.nickname) $('#CollectionNickname').val(data.nickname);
- if (data.error) {
- var msg = $('<span class="error">'+data.error_message+'</span>');
- msg.insertAfter($('#CollectionNickname'));
- msg.delay(3000, function() {
- $(this).fadeRemove();
- collections_edit.nickname_checked = false;
- collections_edit.nickname_showButton();
- });
- $('#CollectionNickname').select();
- } else {
- collections_edit.nickname_showLabel(data.taken ? 'taken' : 'available');
- }
- });
- } else {
- $('#nick-avail')
- .hide()
- .siblings('span').hide();
- }
- return true;
- },
- /**
- * show nickname check result
- */
- nickname_showLabel: function(classname) {
- $('#nick-avail')
- .hide()
- .siblings('span').hide()
- .filter('.'+classname).show();
- },
- /**
- * show/hide button to initiate nickname check
- */
- nickname_showButton: function() {
- $('#nick-avail').siblings('span').hide();
- if ($('#CollectionNickname').val().length > 0) {
- $('#nick-avail').show();
- } else {
- $('#nick-avail').hide();
- }
- },
-
- /**
- * Initialize icon upload UI
- */
- icon_init: function() {
- $('#icon_replace').click(this.icon_replace);
- $('#icon_remove').click(this.icon_delete);
- $('#icon>a.cancel').click(this.icon_reset);
- this.icon_reset();
- },
- /**
- * initialize/reset icon upload UI
- */
- icon_reset: function() {
- var icondiv = $('#icon');
- if (icondiv.children('img').length == 0) return false;
- icondiv.children('input:file,.toberemoved,.cancel').hide();
- icondiv.children('.replaceremove').show();
- $('#IconDelete').remove();
- return false;
- },
- /**
- * remove icon
- */
- icon_delete: function() {
- var icondiv = $('#icon');
- if (icondiv.children('img').length == 0) return false;
- icondiv.children('input:file,.replaceremove').hide();
- icondiv.children('.cancel,.toberemoved').show();
- if ($('#IconDelete').length == 0)
- icondiv.append('<input type="hidden" id="IconDelete" name="data[Icon][delete]" value="1"/>');
- return false;
- },
- /**
- * replace an existing icon
- */
- icon_replace: function() {
- var icondiv = $('#icon');
- if (icondiv.children('img').length == 0) return false;
- icondiv.children('input:file,.cancel').show();
- icondiv.children('.replaceremove,.toberemoved').hide();
- return false;
- },
-
- /**
- * initialize addon-related UI
- */
- addon_init: function() {
- $('#addonname').autocomplete(collURL+'/addonLookup', {
- minChars: 2,
- max: 0,
- formatItem: function(row) { return '<img src="' + row[2] + '"/>&nbsp;' + row[0]; },
- formatResult: function(row) { return row[0]+' ['+row[1]+']'; },
- extraParams: { timestamp: null }
- });
- $('#addonname').keypress(function(e){
- if (e.which == KEYCODE_ENTER) {
- $('#addon-add').click();
- return false;
- }
- return true;
- });
-
- $('#addon-add').click(function() {
- var name = /\[(\d+)\]/.exec($('#addonname').val());
- if (undefined == name || name.length != 2) return false;
- collections_edit.addon_add(name[1]);
- return true;
- }); // button
- },
- /**
- * show an add-on in the UI
- */
- addon_show: function(id, name, iconurl, date, publisher, comment, editable, ontop) {
- var div = $('<div class="coll-addon" id="addon-'+id+'"/>');
- var tpl = $('#addon-new'); // template
-
- var idfield = tpl.children('input:hidden').clone();
- idfield.val(id);
- div.append(idfield);
-
- var p = tpl.children('p').clone();
- p.find('img').attr('src', iconurl);
- p.find('.name').text(name);
- p.find('.added').html(sprintf(p.find('.added').text(), date, publisher));
- div.append(p);
- if (editable) div.append(tpl.children('.removeaddon').clone(true));
- if (!ontop) {
- $('#currentaddons').append(div);
- } else {
- $('#currentaddons #addon-new').after(div);
- }
- collections_edit.addon_comment_show(id, comment, editable);
- $('#currentaddons').show();
- },
- /**
- * add a new add-on to this collection
- */
- addon_add: function(id) {
- $.post(jsonURL+'/addon/add', {
- sessionCheck: $('#collections>div.hsession>input[name=sessionCheck]').val(),
- collection_id: collection_id,
- addon_id: id
- }, function(data) {
- if (data.error) {
- var msg = $('<span class="error">'+data.error_message+'</span>');
- $('#addon-add').after(msg);
- msg.delay(2000, function(){ $(this).fadeRemove(); });
- $('#addonname').select();
- } else {
- collections_edit.addon_show(data.id, data.name, data.iconURL,
- data.date, data.publisher, '', 1, 1);
- $('#addonname').val('');
- }
- return true;
- }, 'json');
- },
- /**
- * remove an add-on from the collection
- */
- addon_delete: function() {
- var idstring = $(this).parent().attr('id');
- var id = idstring.substr(idstring.lastIndexOf('-')+1);
- $.post(jsonURL+'/addon/del', {
- sessionCheck: $('#collections>div.hsession>input[name=sessionCheck]').val(),
- collection_id: collection_id,
- addon_id: id
- }, function(data) {
- if (data.error) {
- alert(data.error_message);
- } else {
- $('#addon-'+data.id).fadeRemove();
- if ($('#currentaddons').children('div:visible').length==0) $('#currentaddons').hide();
- }
- return true;
- }, 'json');
- return false;
- },
-
- /**
- * initialize comment-related UI
- */
- addon_comment_init: function() {
- var tpl = $('#addon-new');
- tpl.children('a.removeaddon').click(this.addon_delete);
- tpl.children('a.addlink').click(this.addon_comment_add);
- tpl.find('a.editlink').click(this.addon_comment_edit);
- tpl.find('a.deletelink').click(function() {
- var container = $(this).parent().parent();
- var idstring = container.attr('id');
- var addonid = idstring.substr(idstring.lastIndexOf('-')+1);
- collections_edit.addon_comment_save(addonid, '');
- return false;
- });
- tpl.find('.editbox>input:button').click(function() { // save
- var comment = $(this).siblings('textarea').val();
- var container = $(this).parent().parent();
- var idstring = container.attr('id');
- var addonid = idstring.substr(idstring.lastIndexOf('-')+1);
- collections_edit.addon_comment_save(addonid, comment);
- return false;
- });
- },
- /**
- * show a publisher comment in the UI
- */
- addon_comment_show: function(addonid, comment, editable) {
- var div = $('#addon-'+addonid);
- var tpl = $('#addon-new');
- if (comment.length > 0) {
- div.append(tpl.children('blockquote').clone().html($.nl2br(comment)));
- if (editable) div.append(tpl.children('.editdelete').clone(true));
- } else {
- if (editable) div.append(tpl.children('.addlink').clone(true));
- }
- },
- /**
- * add a new publisher comment in the UI
- */
- addon_comment_add: function() {
- var editbox = $('#addon-new>.editbox').clone(true);
- $(this).parent().append(editbox);
- $(this).remove();
- editbox.children('textarea').focus();
- return false;
- },
- /**
- * edit an existing publisher comment in the UI
- */
- addon_comment_edit: function() {
- var comment = $(this).parent().siblings('blockquote');
- var editbox = $('#addon-new>.editbox').clone(true);
- editbox.children('textarea').html($.br2nl(comment.html()));
- $(this).parent().parent().append(editbox);
- $(this).parent().remove();
- comment.remove();
- editbox.children('textarea').select();
- return false;
- },
- /**
- * save/remove a publisher comment
- */
- addon_comment_save: function(addonid, comment) {
- $.post(jsonURL+'/addon/savecomment', {
- sessionCheck: $('#collections>div.hsession>input[name=sessionCheck]').val(),
- collection_id: collection_id,
- addon_id: addonid,
- comment: comment
- }, function(data) {
- var addonid = /addon_id=(\d+)/.exec(this.data)[1];
- var container = $('#addon-'+addonid);
- if (data.error) {
- var msg = $('<div class="error">'+data.error_message+'</div>');
- container.append(msg);
- msg.delay(2000, function(){ $(this).fadeRemove(); });
- } else {
- container.children('blockquote,.addlink,.editdelete,.editbox').remove();// wipe old UI
- collections_edit.addon_comment_show(addonid, data.comment, true); // show comment
- }
- return true;
- }, 'json');
- },
-
- /**
- * initialize user-related UI
- */
- user_init: function() {
- $('#publishers>input:text,#managers>input:text').keypress(function(e) {
- if (e.which == KEYCODE_ENTER) {
- $(this).siblings('input:button').click();
- return false;
- }
- return true;
- });
- $('#publishers>input:button,#managers>input:button').click(collections_edit.user_check);
- },
- /**
- * add a user to this collection
- */
- user_check: function() {
- var role = $(this).parent().attr('id');
- var email = $('#'+role+'>:text').val();
- if (email.length==0) return;
-
- $(this).siblings('img').show();
- $.post(jsonURL+'/user/add', {
- sessionCheck: $('#collections>div.hsession>input[name=sessionCheck]').val(),
- collection_id: collection_id,
- role: role,
- email: email
- }, function(data) {
- var role = /role=(\w+)/.exec(this.data)[1];
- $('#'+role+'>img').hide();
- if (data.error) {
- var msg = $('<li class="error">'+data.error_message+'</li>');
- $('#'+role+'>ul').append(msg);
- msg.delay(2000, function(){ $(this).fadeRemove(); });
- $('#'+role+'>input:text').select();
- } else {
- collections_edit.user_add(role, data.id, data.email);
- $('#'+role+'>input:text').val('').focus();
- }
- return true;
- }, 'json');
- },
- /**
- * show a user in this collection's user list
- */
- user_add: function(role, id, email) {
- $('#'+role).siblings('input:radio[value=0]').attr('checked', 'checked');
- $('#'+role+'>ul').append('<li>'
- +'<input type="hidden" name="'+role+'[]" value="'+id+'"/>'
- +email+' <a href="#" onclick="collections_edit.user_remove(this);return false;">Remove</a>'
- +'</li>');
- },
- /**
- * remove a user from this collection
- */
- user_remove: function(link) {
- var id = $(link).siblings('input:hidden').val();
- $.post(jsonURL+'/user/del', {
- sessionCheck: $('#collections>div.hsession>input[name=sessionCheck]').val(),
- role: $(link).parent().parent().parent().attr('id'),
- collection_id: collection_id,
- user_id: id
- }, function(data) {
- var role = /role=(\w+)/.exec(this.data)[1];
- if (data.error) {
- var msg = $('<li class="error">'+data.error_message+'</li>');
- $('#'+role+'>ul').append(msg);
- msg.delay(2000, function(){ $(this).fadeRemove(); });
- $('#'+role+'>input:text').select();
- } else {
- $('#'+role+' input:hidden[value='+data.id+']').parent().fadeRemove();
- }
- return true;
- }, 'json');
- }
-}
-
-/** Addons Display page */
-var addons_display = {
- /**
- * initialization
- */
- init: function(options) {
- this.options = options;
- $('.stars').rating({readOnly:(!options.loggedIn)});
- $('.rollover-reveal').rolloverReveal({ enable_rollover: false });
-
- $('#coll_publish input:submit').click(this.coll_publish);
- },
-
- /**
- * publish an add-on to a collection
- */
- coll_publish: function() {
- var coll_uuid = $('#coll_publish option:selected').val();
- if (!coll_uuid)
- return false;
- else if (coll_uuid == 'new')
- return true;
- var addon_id = $('#coll_publish input[name=\'data[addon_id]\']').val();
-
- $.post(addons_display.options.jsonURL+'/addon/add', {
- sessionCheck: $('#coll_publish div.hsession>input[name=sessionCheck]').val(),
- collection_uuid: coll_uuid,
- addon_id: addon_id
- }, function(data) {
- if (data.error) {
- var msg = $('<div class="error">'+data.error_message+'</div>');
- $('#coll_publish>input:submit').after(msg);
- msg.delay(3000, function(){ $(this).fadeRemove(); });
- } else {
- var coll_uuid = $('#coll_publish option:selected');
- var msg = $('<div>'
- +sprintf(addons_display_collection_publish_success,
- data.name, '<a href="'
- +addons_display.options.collViewURL+coll_uuid.val()
- +'">'+coll_uuid.text()+'</a>')
- +'</div>');
- $('#coll_publish input:submit').after(msg);
- msg.delay(10000, function(){ $(this).fadeRemove(); });
- coll_uuid.remove();
- }
- }, 'json');
- return false;
- }
-}