diff --git a/chrome/background.html b/chrome/background.html index 4d6bec36..884d0e4f 100644 --- a/chrome/background.html +++ b/chrome/background.html @@ -1120,6 +1120,9 @@ settings.reblogLinks = getSetting("MissingE_dashLinksToTabs_reblogLinks",0); settings.editLinks = getSetting("MissingE_dashLinksToTabs_editLinks",0); break; + case "blockNotes": + settings.blocked = getSetting("MissingE_blockNotes_blocked",'{}'); + break; case "replyReplies": settings.showAvatars = getSetting("MissingE_replyReplies_showAvatars",1); settings.smallAvatars = getSetting("MissingE_replyReplies_smallAvatars",1); @@ -1541,6 +1544,20 @@ else activeScripts.timestamps = false; } + if (sender.tab.url == request.url && + MissingE.isTumblrURL(sender.tab.url, + ["dashboard", + "blog", + "likes", + "tagged", + "messages"])) { + if (getSetting("MissingE_blockNotes_enabled",1) == 1) { + activeScripts.blockNotes = true; + chrome.tabs.executeScript(sender.tab.id, {file: "core/blockNotes/blockNotes.js"}); + } + else + activeScripts.blockNotes = false; + } if (sender.tab.url == request.url && MissingE.isTumblrURL(sender.tab.url, ["dashboard", diff --git a/core/blockNotes/blockNotes.js b/core/blockNotes/blockNotes.js new file mode 100644 index 00000000..057f1043 --- /dev/null +++ b/core/blockNotes/blockNotes.js @@ -0,0 +1,158 @@ +/* + * 'Missing e' Extension + * + * Copyright 2011, Jeremy Cutler + * Released under the GPL version 3 licence. + * SEE: license/GPL-LICENSE.txt + * + * This file is part of 'Missing e'. + * + * 'Missing e' is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 'Missing e' is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with 'Missing e'. If not, see . + */ + +/*global extension, jQuery, MissingE */ + +(function($){ + +MissingE.packages.blockNotes = { + hideNotification: function(item) { + var i = $(item); + if(i.hasClass('first_notification')) { + var e = i.next('.notification'); + if(e.hasClass('last_notification')) { + e.removeClass('last_notification'); + e.addClass('single_notification'); + } else { + e.addClass('first_notification'); + } + } + if(i.hasClass('last_notification')) { + var e = i.prev('.notification'); + if(e.hasClass('first_notification')) { + e.removeClass('first_notification'); + e.addClass('single_notification'); + } else { + e.addClass('last_notification'); + } + } + + i.hide(); + }, + + loadNotification: function(item) { + var lang = $('html').attr('lang'); + + //Only operate on notifications + if (item.tagName === "LI" && $(item).hasClass("notification")) { + var index; + var links = $(item).find('a'); + //Ensure it is a "like" notification + links.each(function(i,e) { + if($(e).html() == 'post') { //Kind of hackish + index = i; + return false; + } + }); + if(index == undefined) + return false; + + $(item).find('.block').html('block user'); //Make more explicit + + //Find post ID from link url + var url = links.get(index).href; + var postId = url.split('/')[4]; + + //Add postId to notification + $(item).addClass('MissingE_blockNotes_'+postId); + + //Build "block notes" link + var newlink = $('').addClass('block') + .addClass('MissingE_blockNotes') + .attr('MissingE_blockNotes_id',postId) + .attr('MissingE_blockNotes_link',url) + .attr('MissingE_blockNotes_text',links.get(index+1).innerHTML) + .html('block notes'); + + $(item).append(newlink); + + if(MissingE.packages.blockNotes.settings['blocked'].hasOwnProperty(postId)) //If already blocked + MissingE.packages.blockNotes.hideNotification(item); + } + }, + + updateBlocked: function() { + if (extension.isFirefox || + extension.isSafari) { + extension.sendRequest("change-setting", {name: 'MissingE_blockNotes_blocked', val: JSON.stringify(MissingE.packages.blockNotes.settings['blocked'])}); + } + else { + extension.backupVal('MissingE_blockNotes_blocked', JSON.stringify(MissingE.packages.blockNotes.settings['blocked']) ); + } + }, + + run: function() { + $('#posts li.notification').each(function(){ + MissingE.packages.blockNotes.loadNotification(this); + }); + + extension.addAjaxListener(function(type,list) { + if (type === 'notes') { return; } + $.each(list, function(i,val) { + MissingE.packages.blockNotes.loadNotification($('#'+val).get(0)); + }); + }); + + $('body').delegate('.MissingE_blockNotes','click',function(event) { + MissingE.packages.blockNotes.settings['blocked'][$(this).attr('MissingE_blockNotes_id')] = {'text': $(this).attr('MissingE_blockNotes_text'), 'link': $(this).attr('MissingE_blockNotes_link') }; + $('.MissingE_blockNotes_' + $(this).attr('MissingE_blockNotes_id')).each(function(i,e) { MissingE.packages.blockNotes.hideNotification(e); }); + MissingE.packages.blockNotes.updateBlocked(); + }); + }, + + init: function() { + $('head').append(''); + extension.sendRequest("settings", {component: "blockNotes"}, + function(response) { + if (response.component === "blockNotes") { + var i; + MissingE.packages.blockNotes.settings = {}; + for (i in response) { + if (response.hasOwnProperty(i) && + i !== "component") { + if(i === 'blocked') { + MissingE.packages.blockNotes.settings[i] = JSON.parse(response[i]); + } else { + MissingE.packages.blockNotes.settings[i] = response[i]; + } + } + } + MissingE.packages.blockNotes.run(); + } + }); + } +}; + +if (extension.isChrome || + extension.isFirefox) { + MissingE.packages.blockNotes.init(); +} + +}(jQuery)); diff --git a/core/options.html b/core/options.html index 8a54b641..af12733e 100644 --- a/core/options.html +++ b/core/options.html @@ -325,6 +325,22 @@ +
  • +
    +
    +
    Block Notes
    +

    Allows you to block notes for specific posts. Useful if your dashboard is being flooded after your post goes viral.

    +

    Blocked Notes:

    + +
    +
    +
    +
    +
    +
    + +
    +
  • diff --git a/core/options.js b/core/options.js index 80f5e086..90f9ccfc 100644 --- a/core/options.js +++ b/core/options.js @@ -200,6 +200,7 @@ MissingE.utilities.options = { "dashLinksToTabs", "safeDash", "timestamps", + "blockNotes", "magnifier", "betterReblogs", "gotoDashPost", @@ -250,6 +251,31 @@ MissingE.utilities.options = { MissingE.utilities.options.loadCheck(frm,'MissingE_sidebarTweaks_followingLink',0); frm.MissingE_sidebarTweaks_retries.value = MissingE.utilities.options.getStorage('MissingE_sidebarTweaks_retries',MissingE.defaultRetries); } + else if (v == "blockNotes") { + var blocked = JSON.parse(MissingE.utilities.options.getStorage('MissingE_blockNotes_blocked','{}')); + var even = 0; + for( var key in blocked ) { + if( blocked.hasOwnProperty(key) ) { + $('#blockNotes_options .options_table').append( + $('') + .attr('id','blockNotes_row_'+key) + .addClass((even ? 'even' : 'odd')) + .html('' + blocked[key]['text'] + 'Unblock') + ); + even = (even + 1) % 2; + } + } + $('body').delegate(".blockNotes_unblock","click",function(event) { + var fields = $(this).attr("id").split("_"); + var key = fields[fields.length - 1]; + $('#blockNotes_row_'+key).hide(); + var blocked = JSON.parse(MissingE.utilities.options.getStorage('MissingE_blockNotes_blocked','{}')); + if( blocked.hasOwnProperty(key) ) { + delete blocked[key]; + MissingE.utilities.options.setStorage('MissingE_blockNotes_blocked',JSON.stringify(blocked)); + } + }); + } else if (v == "dashLinksToTabs") { MissingE.utilities.options.loadCheck(frm,'MissingE_dashLinksToTabs_newPostTabs',1); MissingE.utilities.options.loadCheck(frm,'MissingE_dashLinksToTabs_sidebar',0); diff --git a/firefox/missinge/lib/main.js b/firefox/missinge/lib/main.js index 455edad4..f7e6d3de 100644 --- a/firefox/missinge/lib/main.js +++ b/firefox/missinge/lib/main.js @@ -129,6 +129,7 @@ var componentList = ["dashboardTweaks", "dashLinksToTabs", "safeDash", "timestamps", + "blockNotes", "magnifier", "betterReblogs", "gotoDashPost", @@ -180,6 +181,7 @@ function getAllSettings(getStale) { settings.MissingE_dashLinksToTabs_editLinks = getSetting("extensions.MissingE.dashLinksToTabs.editLinks",0); settings.MissingE_timestamps_retries = getSetting("extensions.MissingE.timestamps.retries",MissingE.defaultRetries); settings.MissingE_timestamps_format = getSetting("extensions.MissingE.timestamps.format",MissingE.defaultFormat); + settings.MissingE_blockNotes_blocked = getSetting("extensions.MissingE.blockNotes.blocked",'{}'); settings.MissingE_postingTweaks_photoReplies = getSetting("extensions.MissingE.postingTweaks.photoReplies",1); settings.MissingE_postingTweaks_addUploader = getSetting("extensions.MissingE.postingTweaks.addUploader",1); settings.MissingE_postingTweaks_quickButtons = getSetting("extensions.MissingE.postingTweaks.quickButtons",1); @@ -1332,6 +1334,9 @@ function handleMessage(message, myWorker) { settings.defaultTags = settings.defaultTags.replace(/, /g,',').split(','); } break; + case "blockNotes": + settings.blocked = getSetting("extensions.MissingE.blockNotes.blocked",'{}'); + break; case "postCrushes_fill": case "postCrushes": settings.prefix = getSetting("extensions.MissingE.postCrushes.prefix","Tumblr Crushes:"); @@ -1611,6 +1616,20 @@ function handleMessage(message, myWorker) { else activeScripts.postingTweaks = false; } + if (!message.isFrame && + MissingE.isTumblrURL(message.url, + ["dashboard", + "blog", + "likes", + "tagged", + "messages"])) { + if (getSetting("extensions.MissingE.blockNotes.enabled",1) == 1) { + injectScripts.push(data.url("core/blockNotes/blockNotes.js")); + activeScripts.blockNotes = true; + } + else + activeScripts.blockNotes = false; + } if (!message.isFrame && MissingE.isTumblrURL(message.url, ["reblog"])) { if (getSetting("extensions.MissingE.betterReblogs.enabled",1) == 1) { diff --git a/missinge.safariextension/Info.plist b/missinge.safariextension/Info.plist index ef921722..6874aabb 100644 --- a/missinge.safariextension/Info.plist +++ b/missinge.safariextension/Info.plist @@ -78,6 +78,7 @@ core/replyReplies/replyReplies_fill.js core/safeDash/safeDash.js core/timestamps/timestamps.js + core/blockNotes/blockNotes.js core/massEditor/massEditor.js core/postingTweaks/postingTweaks_post.js core/common/zindexFix.js diff --git a/missinge.safariextension/Settings.plist b/missinge.safariextension/Settings.plist index 2cc1a70b..8e8058c4 100644 --- a/missinge.safariextension/Settings.plist +++ b/missinge.safariextension/Settings.plist @@ -130,6 +130,16 @@ Type Hidden + + DefaultValue + 1 + Key + MissingE_blockNotes_enabled + Title + + Type + Hidden + DefaultValue 1 @@ -550,6 +560,16 @@ Type Hidden + + DefaultValue + {} + Key + MissingE_blockNotes_blocked + Title + + Type + Hidden + DefaultValue 1 diff --git a/missinge.safariextension/Settings.plist.template b/missinge.safariextension/Settings.plist.template index 8af4565d..ad670e42 100644 --- a/missinge.safariextension/Settings.plist.template +++ b/missinge.safariextension/Settings.plist.template @@ -130,6 +130,16 @@ Type Hidden + + DefaultValue + 1 + Key + MissingE_blockNotess_enabled + Title + + Type + Hidden + DefaultValue 1 @@ -550,6 +560,16 @@ Type Hidden + + DefaultValue + {} + Key + MissingE_blockNotes_blocked + Title + + Type + Hidden + DefaultValue 1 diff --git a/missinge.safariextension/global.html b/missinge.safariextension/global.html index d7fc6639..50f08103 100644 --- a/missinge.safariextension/global.html +++ b/missinge.safariextension/global.html @@ -34,6 +34,7 @@ "dashLinksToTabs", "safeDash", "timestamps", + "blockNotes", "magnifier", "betterReblogs", "gotoDashPost", @@ -1175,6 +1176,7 @@ settings.MissingE_dashLinksToTabs_editLinks = getSetting("MissingE_dashLinksToTabs_editLinks",0); settings.MissingE_timestamps_retries = getSetting("MissingE_timestamps_retries",MissingE.defaultRetries); settings.MissingE_timestamps_format = getSetting("MissingE_timestamps_format",MissingE.defaultFormat); + settings.MissingE_blockNotes_blocked = getSetting("MissingE_timestamps_format",'{}'); settings.MissingE_postingTweaks_photoReplies = getSetting("MissingE_postingTweaks_photoReplies",1); settings.MissingE_postingTweaks_addUploader = getSetting("MissingE_postingTweaks_addUploader",1); settings.MissingE_postingTweaks_quickButtons = getSetting("MissingE_postingTweaks_quickButtons",1); @@ -1259,6 +1261,9 @@ settings.randomQueue = getSetting("MissingE_dashboardTweaks_randomQueue",0); settings.sortableNotes = getSetting("MissingE_dashboardTweaks_sortableNotes",1); break; + case "blockNotes": + settings.blocked = getSetting("MissingE_blockNotes_blocked",'{}'); + break; case "dashLinksToTabs": settings.newPostTabs = getSetting("MissingE_dashLinksToTabs_newPostTabs",1); settings.sidebar = getSetting("MissingE_dashLinksToTabs_sidebar",0); @@ -1562,6 +1567,19 @@ else activeScripts.timestamps = false; } + if (!request.message.isFrame && + MissingE.isTumblrURL(request.message.url, + ["dashboard", + "blog", + "likes", + "tagged", + "messages"])) { + if (getSetting("MissingE_blockNotes_enabled",1) == 1) { + activeScripts.blockNotes = true; + } + else + activeScripts.blockNotes = false; + } if (!request.message.isFrame && MissingE.isTumblrURL(request.message.url, ["dashboard",