| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| (Empty) | |
| 1 /* | |
| 2 * This file is part of Adblock Plus <http://adblockplus.org/>, | |
| 3 * Copyright (C) 2006-2013 Eyeo GmbH | |
| 4 * | |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | |
| 6 * it under the terms of the GNU General Public License version 3 as | |
| 7 * published by the Free Software Foundation. | |
| 8 * | |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 12 * GNU General Public License for more details. | |
| 13 * | |
| 14 * You should have received a copy of the GNU General Public License | |
| 15 * along with Adblock Plus. If not, see <http://www.gnu.org/licenses/>. | |
| 16 */ | |
| 17 | |
| 18 /* Mock Start */ | |
| 19 var Messages = { | |
| 20 "firstRun_feature_betterSurfing": "Enjoy the web without annoying ads", | |
| 21 "firstRun_feature_videoAds": "Watch videos without commercial interruptions", | |
| 22 "firstRun_features_heading": "With Adblock Plus you can:", | |
| 23 "firstRun_share1": "Do you think Adblock Plus is worth sharing? Please do!", | |
| 24 "firstRun_share2": "Adblock Plus is free and open source. Please support us:", | |
| 25 "firstRun_share2_donate": "Donate", | |
| 26 "firstRun_share2_or": "or", | |
| 27 "firstRun_title_install": "Adblock Plus has been installed" | |
| 28 }; | |
| 29 | |
| 30 var AdblockPlus = { | |
| 31 require: function() | |
| 32 { | |
| 33 return { | |
| 34 Filter: { | |
| 35 fromText: function() | |
| 36 { | |
| 37 return { | |
| 38 matches: function() | |
| 39 { | |
| 40 return true; | |
| 41 } | |
| 42 }; | |
| 43 } | |
| 44 }, | |
| 45 Prefs: { | |
| 46 documentation_link: "https://adblockplus.org/redirect?link=%LINK%&lang=% LANG%" | |
| 47 }, | |
| 48 Utils: { | |
| 49 appLocale: "en" | |
| 50 } | |
| 51 }; | |
| 52 }, | |
| 53 getMessage: function(key) | |
| 54 { | |
| 55 return Messages[key] || "[" + key + "]"; | |
| 56 } | |
| 57 }; | |
| 58 /* Mock End */ | |
| 59 | |
| 60 var require = AdblockPlus.require; | |
| 61 var Prefs = require("prefs").Prefs; | |
| 62 var Utils = require("utils").Utils; | |
| 63 var Filter = require("filterClasses").Filter; | |
| 64 | |
| 65 function addListener(object, type, listener, useCapture) | |
|
Felix Dahlke
2013/07/11 11:11:14
Since you're always passing useCapture=false, I gu
Thomas Greiner
2013/07/12 10:52:52
Done.
| |
| 66 { | |
| 67 if ("addEventListener" in object) | |
| 68 object.addEventListener(type, listener, useCapture); | |
| 69 else | |
| 70 { | |
| 71 object.attachEvent("on" + type, function() | |
| 72 { | |
| 73 listener(event); | |
| 74 }); | |
| 75 } | |
| 76 } | |
| 77 | |
| 78 function removeListener(object, type, listener) | |
| 79 { | |
| 80 if ("removeEventListener" in object) | |
| 81 object.removeEventListener(type, listener); | |
| 82 else | |
| 83 object.detachEvent(type, listener); | |
| 84 } | |
| 85 | |
| 86 function openSharePopup(url) | |
| 87 { | |
| 88 var iframe = document.getElementById("share-popup"); | |
| 89 var glassPane = document.getElementById("glass-pane"); | |
| 90 var popupMessageReceived = false; | |
| 91 | |
| 92 var popupMessageListener = function(event) | |
| 93 { | |
| 94 var originFilter = Filter.fromText("||adblockplus.org^"); | |
| 95 if (!originFilter.matches(event.origin, "OTHER", null, null)) | |
| 96 return; | |
| 97 | |
| 98 var data = JSON.parse(event.data); | |
| 99 iframe.width = data.width; | |
| 100 iframe.height = data.height; | |
| 101 popupMessageReceived = true; | |
| 102 // all IE versions require the use of detachEvent for message event to work | |
| 103 window.detachEvent("onmessage", popupMessageListener); | |
| 104 }; | |
| 105 // all IE versions require the use of attachEvent for message event to work | |
| 106 window.attachEvent("onmessage", popupMessageListener); | |
|
Felix Dahlke
2013/07/11 11:11:14
So you're not using addEventListener here because
Thomas Greiner
2013/07/12 10:52:52
Done.
| |
| 107 | |
| 108 var timeout = 125; | |
|
Felix Dahlke
2013/07/11 11:11:14
I think the timeout calculating here is a bit more
Thomas Greiner
2013/07/12 10:52:52
Done.
| |
| 109 var popupLoadListener = function() | |
| 110 { | |
| 111 if (popupMessageReceived) | |
| 112 { | |
| 113 iframe.className = "visible"; | |
| 114 | |
| 115 var popupCloseListener = function() | |
| 116 { | |
| 117 iframe.className = glassPane.className = ""; | |
| 118 removeListener(document, "click", popupCloseListener); | |
| 119 }; | |
| 120 addListener(document, "click", popupCloseListener, false); | |
| 121 } | |
| 122 else | |
| 123 { | |
| 124 if (timeout > 2000) | |
| 125 { | |
| 126 glassPane.className = ""; | |
| 127 removeListener(window, "message", popupMessageListener); | |
| 128 } | |
| 129 else | |
| 130 { | |
| 131 timeout *= 2; | |
| 132 setTimeout(popupLoadListener, timeout); | |
| 133 } | |
| 134 } | |
| 135 | |
| 136 removeListener(iframe, "load", popupLoadListener); | |
| 137 }; | |
| 138 addListener(iframe, "load", popupLoadListener, false); | |
| 139 | |
| 140 iframe.src = url; | |
| 141 glassPane.className = "visible"; | |
| 142 } | |
| 143 | |
| 144 function initSocialLinks(variant) | |
| 145 { | |
| 146 // Share popup doesn't work in <IE9 so don't show it | |
| 147 if (/MSIE [6-8]/.test(navigator.appVersion)) | |
| 148 return; | |
| 149 | |
| 150 var networks = ["twitter", "facebook", "gplus"]; | |
| 151 networks.forEach(function(network) | |
| 152 { | |
| 153 var link = document.getElementById("share-" + network + "-" + variant); | |
| 154 addListener(link, "click", function(e) | |
| 155 { | |
| 156 e.preventDefault(); | |
| 157 openSharePopup(getDocLink("share-" + network) + "&variant=" + variant); | |
| 158 }, false); | |
| 159 }); | |
| 160 } | |
| 161 | |
| 162 function getDocLink(page) | |
| 163 { | |
| 164 return Prefs.documentation_link | |
| 165 .replace(/%LINK%/g, page) | |
| 166 .replace(/%LANG%/g, Utils.appLocale); | |
| 167 } | |
| 168 | |
| 169 function initTranslations() | |
| 170 { | |
| 171 // Map message ID to HTML element ID | |
| 172 var mapping = { | |
| 173 "title-main": "firstRun_title_install", | |
| 174 "i18n-features-heading": "firstRun_features_heading", | |
| 175 "i18n-feature-betterSurfing": "firstRun_feature_betterSurfing", | |
| 176 "i18n-feature-videoAds": "firstRun_feature_videoAds", | |
| 177 "share-text1": "firstRun_share1", | |
| 178 "share-text2": "firstRun_share2", | |
| 179 "share-donate": "firstRun_share2_donate", | |
| 180 "share2-connection": "firstRun_share2_or" | |
| 181 }; | |
| 182 | |
| 183 document.title = AdblockPlus.getMessage("firstRun_title_install"); | |
| 184 for (var i in mapping) | |
| 185 { | |
| 186 var element = document.getElementById(i); | |
| 187 element.innerText = AdblockPlus.getMessage(mapping[i]); | |
| 188 } | |
| 189 } | |
| 190 | |
| 191 function init() | |
| 192 { | |
| 193 // Choose a share text variant randomly | |
| 194 var variant = Math.floor(Math.random() * 2) + 1; | |
| 195 var classList = document.documentElement.className.split(" "); | |
| 196 classList.push("share-variant-" + variant); | |
| 197 document.documentElement.className = classList.join(" "); | |
| 198 | |
| 199 initTranslations(); | |
| 200 initSocialLinks(variant); | |
| 201 | |
| 202 var donateLink = document.getElementById("share-donate"); | |
| 203 donateLink.href = getDocLink("donate") + "&variant=" + variant; | |
| 204 } | |
| 205 | |
| 206 addListener(window, "load", init, false); | |
| OLD | NEW |