| Left: | ||
| Right: |
| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * This file is part of Adblock Plus <http://adblockplus.org/>, | 2 * This file is part of Adblock Plus <http://adblockplus.org/>, |
| 3 * Copyright (C) 2006-2013 Eyeo GmbH | 3 * Copyright (C) 2006-2013 Eyeo GmbH |
| 4 * | 4 * |
| 5 * Adblock Plus is free software: you can redistribute it and/or modify | 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 | 6 * it under the terms of the GNU General Public License version 3 as |
| 7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
| 8 * | 8 * |
| 9 * Adblock Plus is distributed in the hope that it will be useful, | 9 * Adblock Plus is distributed in the hope that it will be useful, |
| 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| (...skipping 15 matching lines...) Expand all Loading... | |
| 26 var highlightedElementsBoxShadows = null; | 26 var highlightedElementsBoxShadows = null; |
| 27 var highlightedElementsBGColors = null; | 27 var highlightedElementsBGColors = null; |
| 28 var clickHideFiltersDialog = null; | 28 var clickHideFiltersDialog = null; |
| 29 var lastRightClickEvent = null; | 29 var lastRightClickEvent = null; |
| 30 | 30 |
| 31 // Highlight elements according to selector string. This would include | 31 // Highlight elements according to selector string. This would include |
| 32 // all elements that would be affected by proposed filters. | 32 // all elements that would be affected by proposed filters. |
| 33 function highlightElements(selectorString) { | 33 function highlightElements(selectorString) { |
| 34 if(highlightedElementsSelector) | 34 if(highlightedElementsSelector) |
| 35 unhighlightElements(); | 35 unhighlightElements(); |
| 36 | 36 |
| 37 var highlightedElements = document.querySelectorAll(selectorString); | 37 var highlightedElements = document.querySelectorAll(selectorString); |
| 38 highlightedElementsSelector = selectorString; | 38 highlightedElementsSelector = selectorString; |
| 39 highlightedElementsBoxShadows = new Array(); | 39 highlightedElementsBoxShadows = new Array(); |
| 40 highlightedElementsBGColors = new Array(); | 40 highlightedElementsBGColors = new Array(); |
| 41 | 41 |
| 42 for(var i = 0; i < highlightedElements.length; i++) { | 42 for(var i = 0; i < highlightedElements.length; i++) { |
| 43 highlightedElementsBoxShadows[i] = highlightedElements[i].style.getPropertyV alue("-webkit-box-shadow"); | 43 highlightedElementsBoxShadows[i] = highlightedElements[i].style.getPropertyV alue("-webkit-box-shadow"); |
| 44 highlightedElementsBGColors[i] = highlightedElements[i].style.backgroundColo r; | 44 highlightedElementsBGColors[i] = highlightedElements[i].style.backgroundColo r; |
| 45 highlightedElements[i].style.setProperty("-webkit-box-shadow", "inset 0px 0p x 5px #fd6738"); | 45 highlightedElements[i].style.setProperty("-webkit-box-shadow", "inset 0px 0p x 5px #fd6738"); |
| 46 highlightedElements[i].style.backgroundColor = "#f6e1e5"; | 46 highlightedElements[i].style.backgroundColor = "#f6e1e5"; |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 73 t += elt.offsetTop; | 73 t += elt.offsetTop; |
| 74 } | 74 } |
| 75 return [l, t]; | 75 return [l, t]; |
| 76 } | 76 } |
| 77 | 77 |
| 78 // Adds an overlay to an element, which is probably a Flash object | 78 // Adds an overlay to an element, which is probably a Flash object |
| 79 function addElementOverlay(elt) { | 79 function addElementOverlay(elt) { |
| 80 // If this element is enclosed in an object tag, we prefer to block that inste ad | 80 // If this element is enclosed in an object tag, we prefer to block that inste ad |
| 81 if(!elt) | 81 if(!elt) |
| 82 return null; | 82 return null; |
| 83 | 83 |
| 84 // If element doesn't have at least one of class name, ID or URL, give up | 84 // If element doesn't have at least one of class name, ID or URL, give up |
| 85 // because we don't know how to construct a filter rule for it | 85 // because we don't know how to construct a filter rule for it |
| 86 var url = getElementURL(elt); | 86 var url = getElementURL(elt); |
| 87 if(!elt.className && !elt.id && !url) | 87 if(!elt.className && !elt.id && !url) |
| 88 return; | 88 return; |
| 89 var thisStyle = getComputedStyle(elt, null); | 89 var thisStyle = getComputedStyle(elt, null); |
| 90 var overlay = document.createElement('div'); | 90 var overlay = document.createElement('div'); |
| 91 overlay.prisoner = elt; | 91 overlay.prisoner = elt; |
| 92 overlay.prisonerURL = url; | 92 overlay.prisonerURL = url; |
| 93 overlay.className = "__adblockplus__overlay"; | 93 overlay.className = "__adblockplus__overlay"; |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 128 // view of what's going to be blocked | 128 // view of what's going to be blocked |
| 129 clickHideFiltersDialog.onmouseout = function() | 129 clickHideFiltersDialog.onmouseout = function() |
| 130 { | 130 { |
| 131 if (clickHideFiltersDialog) | 131 if (clickHideFiltersDialog) |
| 132 clickHideFiltersDialog.style.setProperty("opacity", "0.7"); | 132 clickHideFiltersDialog.style.setProperty("opacity", "0.7"); |
| 133 } | 133 } |
| 134 clickHideFiltersDialog.onmouseover = function() | 134 clickHideFiltersDialog.onmouseover = function() |
| 135 { | 135 { |
| 136 if (clickHideFiltersDialog) | 136 if (clickHideFiltersDialog) |
| 137 clickHideFiltersDialog.style.setProperty("opacity", "1.0"); | 137 clickHideFiltersDialog.style.setProperty("opacity", "1.0"); |
| 138 } | 138 } |
| 139 | 139 |
| 140 document.body.appendChild(clickHideFiltersDialog); | 140 document.body.appendChild(clickHideFiltersDialog); |
| 141 } | 141 } |
| 142 | 142 |
| 143 // Turn on the choose element to create filter thing | 143 // Turn on the choose element to create filter thing |
| 144 function clickHide_activate() { | 144 function clickHide_activate() { |
| 145 if(document == null) | 145 if(document == null) |
| 146 return; | 146 return; |
| 147 | 147 |
| 148 // If we are already selecting, abort now | 148 // If we are already selecting, abort now |
| 149 if (clickHide_activated || clickHideFiltersDialog) | 149 if (clickHide_activated || clickHideFiltersDialog) |
| 150 clickHide_deactivate(); | 150 clickHide_deactivate(); |
| 151 | 151 |
| 152 // Add overlays for elements with URLs so user can easily click them | 152 // Add overlays for elements with URLs so user can easily click them |
| 153 var elts = document.querySelectorAll('object,embed,img,iframe'); | 153 var elts = document.querySelectorAll('object,embed,img,iframe'); |
| 154 for(var i=0; i<elts.length; i++) | 154 for(var i=0; i<elts.length; i++) |
| 155 addElementOverlay(elts[i]); | 155 addElementOverlay(elts[i]); |
| 156 | 156 |
| 157 clickHide_activated = true; | 157 clickHide_activated = true; |
| 158 document.addEventListener("mouseover", clickHide_mouseOver, false); | 158 document.addEventListener("mouseover", clickHide_mouseOver, false); |
| 159 document.addEventListener("mouseout", clickHide_mouseOut, false); | 159 document.addEventListener("mouseout", clickHide_mouseOut, false); |
| 160 document.addEventListener("click", clickHide_mouseClick, false); | 160 document.addEventListener("click", clickHide_mouseClick, false); |
| 161 document.addEventListener("keyup", clickHide_keyUp, false); | 161 document.addEventListener("keydown", clickHide_keyDown, false); |
| 162 } | 162 } |
| 163 | 163 |
| 164 // Called when user has clicked on something and we are waiting for confirmation | 164 // Called when user has clicked on something and we are waiting for confirmation |
| 165 // on whether the user actually wants these filters | 165 // on whether the user actually wants these filters |
| 166 function clickHide_rulesPending() { | 166 function clickHide_rulesPending() { |
| 167 clickHide_activated = false; | 167 clickHide_activated = false; |
| 168 document.removeEventListener("mouseover", clickHide_mouseOver, false); | 168 document.removeEventListener("mouseover", clickHide_mouseOver, false); |
| 169 document.removeEventListener("mouseout", clickHide_mouseOut, false); | 169 document.removeEventListener("mouseout", clickHide_mouseOut, false); |
| 170 document.removeEventListener("click", clickHide_mouseClick, false); | 170 document.removeEventListener("click", clickHide_mouseClick, false); |
| 171 document.removeEventListener("keyup", clickHide_keyUp, false); | 171 document.removeEventListener("keydown", clickHide_keyDown, false); |
| 172 } | 172 } |
| 173 | 173 |
| 174 // Turn off click-to-hide | 174 // Turn off click-to-hide |
| 175 function clickHide_deactivate() | 175 function clickHide_deactivate() |
| 176 { | 176 { |
| 177 if (clickHideFiltersDialog) | 177 if (clickHideFiltersDialog) |
| 178 { | 178 { |
| 179 document.body.removeChild(clickHideFiltersDialog); | 179 document.body.removeChild(clickHideFiltersDialog); |
| 180 clickHideFiltersDialog = null; | 180 clickHideFiltersDialog = null; |
| 181 } | 181 } |
| 182 | 182 |
| 183 if(currentElement) { | 183 if(currentElement) { |
| 184 currentElement.removeEventListener("contextmenu", clickHide_elementClickHand ler, false); | 184 currentElement.removeEventListener("contextmenu", clickHide_elementClickHand ler, false); |
| 185 unhighlightElements(); | 185 unhighlightElements(); |
| 186 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxSha dow); | 186 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxSha dow); |
| 187 currentElement.style.backgroundColor = currentElement_backgroundColor; | 187 currentElement.style.backgroundColor = currentElement_backgroundColor; |
| 188 currentElement = null; | 188 currentElement = null; |
| 189 clickHideFilters = null; | 189 clickHideFilters = null; |
| 190 } | 190 } |
| 191 unhighlightElements(); | 191 unhighlightElements(); |
| 192 | 192 |
| 193 clickHide_activated = false; | 193 clickHide_activated = false; |
| 194 clickHide_filters = null; | 194 clickHide_filters = null; |
| 195 if(!document) | 195 if(!document) |
| 196 return; // This can happen inside a nuked iframe...I think | 196 return; // This can happen inside a nuked iframe...I think |
| 197 document.removeEventListener("mouseover", clickHide_mouseOver, false); | 197 document.removeEventListener("mouseover", clickHide_mouseOver, false); |
| 198 document.removeEventListener("mouseout", clickHide_mouseOut, false); | 198 document.removeEventListener("mouseout", clickHide_mouseOut, false); |
| 199 document.removeEventListener("click", clickHide_mouseClick, false); | 199 document.removeEventListener("click", clickHide_mouseClick, false); |
| 200 document.removeEventListener("keyup", clickHide_keyUp, false); | 200 document.removeEventListener("keydown", clickHide_keyDown, false); |
| 201 | 201 |
| 202 // Remove overlays | 202 // Remove overlays |
| 203 // For some reason iterating over the array returend by getElementsByClassName () doesn't work | 203 // For some reason iterating over the array returend by getElementsByClassName () doesn't work |
| 204 var elt; | 204 var elt; |
| 205 while(elt = document.querySelector('.__adblockplus__overlay')) | 205 while(elt = document.querySelector('.__adblockplus__overlay')) |
| 206 elt.parentNode.removeChild(elt); | 206 elt.parentNode.removeChild(elt); |
| 207 } | 207 } |
| 208 | 208 |
| 209 function clickHide_elementClickHandler(ev) { | 209 function clickHide_elementClickHandler(ev) { |
| 210 ev.preventDefault(); | 210 ev.preventDefault(); |
| 211 ev.stopPropagation(); | 211 ev.stopPropagation(); |
| 212 clickHide_mouseClick(ev); | 212 clickHide_mouseClick(ev); |
| 213 } | 213 } |
| 214 | 214 |
| 215 // Hovering over an element so highlight it | 215 // Hovering over an element so highlight it |
| 216 function clickHide_mouseOver(e) { | 216 function clickHide_mouseOver(e) |
| 217 if(clickHide_activated == false) | 217 { |
| 218 if (clickHide_activated == false) | |
| 218 return; | 219 return; |
| 219 | 220 |
| 220 if(e.target.id || e.target.className || e.target.src) { | 221 var target = e.target; |
| 221 currentElement = e.target; | 222 while (target.parentNode && !(target.id || target.className || target.src)) |
| 222 currentElement_boxShadow = e.target.style.getPropertyValue("-webkit-box-shad ow"); | 223 target = target.parentNode; |
| 223 currentElement_backgroundColor = e.target.style.backgroundColor; | 224 if (target == document.documentElement || target == document.body) |
| 224 e.target.style.setProperty("-webkit-box-shadow", "inset 0px 0px 5px #d6d84b" ); | 225 target = null; |
| 225 e.target.style.backgroundColor = "#f8fa47"; | |
| 226 | 226 |
| 227 // TODO: save old context menu | 227 if (target && target instanceof HTMLElement) |
| 228 e.target.addEventListener("contextmenu", clickHide_elementClickHandler, fals e); | 228 { |
| 229 currentElement = target; | |
| 230 currentElement_boxShadow = target.style.getPropertyValue("-webkit-box-shadow "); | |
| 231 currentElement_backgroundColor = target.style.backgroundColor; | |
| 232 target.style.setProperty("-webkit-box-shadow", "inset 0px 0px 5px #d6d84b"); | |
| 233 target.style.backgroundColor = "#f8fa47"; | |
| 234 | |
| 235 target.addEventListener("contextmenu", clickHide_elementClickHandler, false) ; | |
| 229 } | 236 } |
| 230 } | 237 } |
| 231 | 238 |
| 232 // No longer hovering over this element so unhighlight it | 239 // No longer hovering over this element so unhighlight it |
| 233 function clickHide_mouseOut(e) { | 240 function clickHide_mouseOut(e) |
| 234 if(!clickHide_activated || !currentElement) | 241 { |
| 242 if (!clickHide_activated || !currentElement) | |
| 235 return; | 243 return; |
| 236 | 244 |
| 237 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShado w); | 245 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShado w); |
| 238 currentElement.style.backgroundColor = currentElement_backgroundColor; | 246 currentElement.style.backgroundColor = currentElement_backgroundColor; |
| 239 | 247 |
| 240 // TODO: restore old context menu | |
| 241 currentElement.removeEventListener("contextmenu", clickHide_elementClickHandle r, false); | 248 currentElement.removeEventListener("contextmenu", clickHide_elementClickHandle r, false); |
| 242 } | 249 } |
| 243 | 250 |
| 244 // Selects the currently hovered-over filter | 251 // Selects the currently hovered-over filter or cancels selection |
| 245 function clickHide_keyUp(e) { | 252 function clickHide_keyDown(e) |
| 246 // Ctrl+Shift+E | 253 { |
| 247 if(e.ctrlKey && e.shiftKey && e.keyCode == 69) | 254 if (!e.ctrlKey && !e.altKey && !e.shiftKey && e.keyCode == 13 /*DOM_VK_ENTER*/ ) |
|
Thomas Greiner
2013/12/18 11:17:12
Different sources mention different codes. Does it
Wladimir Palant
2013/12/18 11:39:57
Sure. The comment is wrong however, I meant VK_RET
| |
| 248 clickHide_mouseClick(e); | 255 clickHide_mouseClick(e); |
| 256 else if (!e.ctrlKey && !e.altKey && !e.shiftKey && e.keyCode == 27 /*DOM_VK_ES CAPE*/) | |
| 257 { | |
| 258 clickHide_deactivate(); | |
| 259 e.preventDefault(); | |
| 260 e.stopPropagation(); | |
| 261 } | |
| 249 } | 262 } |
| 250 | 263 |
| 251 // When the user clicks, the currentElement is the one we want. | 264 // When the user clicks, the currentElement is the one we want. |
| 252 // We should have ABP rules ready for when the | 265 // We should have ABP rules ready for when the |
| 253 // popup asks for them. | 266 // popup asks for them. |
| 254 function clickHide_mouseClick(e) { | 267 function clickHide_mouseClick(e) |
| 255 if(!currentElement || !clickHide_activated) | 268 { |
| 269 if (!currentElement || !clickHide_activated) | |
| 256 return; | 270 return; |
| 257 | 271 |
| 258 var elt = currentElement; | 272 var elt = currentElement; |
| 259 var url = null; | 273 var url = null; |
| 260 if(currentElement.className && currentElement.className == "__adblockplus__ove rlay") { | 274 if (currentElement.className && currentElement.className == "__adblockplus__ov erlay") |
| 275 { | |
| 261 elt = currentElement.prisoner; | 276 elt = currentElement.prisoner; |
| 262 url = currentElement.prisonerURL; | 277 url = currentElement.prisonerURL; |
| 263 } else if(elt.src) { | 278 } |
| 279 else if (elt.src) | |
| 264 url = elt.src; | 280 url = elt.src; |
| 265 } | |
| 266 | 281 |
| 267 // Only normalize when the element contains a URL (issue 328.) | 282 // Only normalize when the element contains a URL (issue 328.) |
| 268 // The URL is not always normalized, so do it here | 283 // The URL is not always normalized, so do it here |
| 269 if(url) | 284 if (url) |
| 270 url = normalizeURL(relativeToAbsoluteUrl(url)); | 285 url = normalizeURL(relativeToAbsoluteUrl(url)); |
| 271 | 286 |
| 272 // Construct filters. The popup will retrieve these. | 287 // Construct filters. The popup will retrieve these. |
| 273 // Only one ID | 288 // Only one ID |
| 274 var elementId = elt.id ? elt.id.split(' ').join('') : null; | 289 var elementId = elt.id ? elt.id.split(' ').join('') : null; |
| 275 // Can have multiple classes, and there might be extraneous whitespace | 290 // Can have multiple classes, and there might be extraneous whitespace |
| 276 var elementClasses = null; | 291 var elementClasses = null; |
| 277 if(elt.className) { | 292 if (elt.className) |
| 278 elementClasses = elt.className.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '' ).split(' '); | 293 elementClasses = elt.className.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '' ).split(' '); |
| 279 } | 294 |
| 280 clickHideFilters = new Array(); | 295 clickHideFilters = new Array(); |
| 281 selectorList = new Array(); | 296 selectorList = new Array(); |
| 282 if(elementId) { | 297 if (elementId) |
| 298 { | |
| 283 clickHideFilters.push(document.domain + "###" + elementId); | 299 clickHideFilters.push(document.domain + "###" + elementId); |
| 284 selectorList.push("#" + elementId); | 300 selectorList.push("#" + elementId); |
| 285 } | 301 } |
| 286 if(elementClasses) { | 302 if (elementClasses) |
| 287 for(var i = 0; i < elementClasses.length; i++) { | 303 { |
| 304 for(var i = 0; i < elementClasses.length; i++) | |
| 305 { | |
| 288 clickHideFilters.push(document.domain + "##." + elementClasses[i]); | 306 clickHideFilters.push(document.domain + "##." + elementClasses[i]); |
| 289 selectorList.push("." + elementClasses[i]); | 307 selectorList.push("." + elementClasses[i]); |
| 290 } | 308 } |
| 291 } | 309 } |
| 292 if(url) { | 310 if (url) |
| 311 { | |
| 293 clickHideFilters.push(relativeToAbsoluteUrl(url)); | 312 clickHideFilters.push(relativeToAbsoluteUrl(url)); |
| 294 selectorList.push(elt.localName + '[src="' + url + '"]'); | 313 selectorList.push(elt.localName + '[src="' + url + '"]'); |
| 295 } | 314 } |
| 296 | 315 |
| 297 // Show popup | 316 // Show popup |
| 298 clickHide_showDialog(e.clientX, e.clientY, clickHideFilters); | 317 clickHide_showDialog(e.clientX, e.clientY, clickHideFilters); |
| 299 | 318 |
| 300 // Set background color in case it got selected using context menu | 319 // Set background color in case it got selected using context menu |
| 301 if (typeof currentElement_backgroundColor == "undefined") | 320 if (typeof currentElement_backgroundColor == "undefined") |
| 302 currentElement_backgroundColor = currentElement.style.backgroundColor; | 321 currentElement_backgroundColor = currentElement.style.backgroundColor; |
| 303 | 322 |
| 304 // Highlight the unlucky elements | 323 // Highlight the unlucky elements |
| 305 // Restore currentElement's box-shadow and bgcolor so that highlightElements w on't save those | 324 // Restore currentElement's box-shadow and bgcolor so that highlightElements w on't save those |
| 306 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShado w); | 325 currentElement.style.setProperty("-webkit-box-shadow", currentElement_boxShado w); |
| 307 currentElement.style.backgroundColor = currentElement_backgroundColor; | 326 currentElement.style.backgroundColor = currentElement_backgroundColor; |
| 308 // Highlight the elements specified by selector in yellow | 327 // Highlight the elements specified by selector in yellow |
| 309 highlightElements(selectorList.join(",")); | 328 highlightElements(selectorList.join(",")); |
| 310 // Now, actually highlight the element the user clicked on in red | 329 // Now, actually highlight the element the user clicked on in red |
| 311 currentElement.style.setProperty("-webkit-box-shadow", "inset 0px 0px 5px #fd1 708"); | 330 currentElement.style.setProperty("-webkit-box-shadow", "inset 0px 0px 5px #fd1 708"); |
| 312 currentElement.style.backgroundColor = "#f6a1b5"; | 331 currentElement.style.backgroundColor = "#f6a1b5"; |
| 332 | |
| 333 // Make sure the browser doesn't handle this click | |
| 334 e.preventDefault(); | |
| 335 e.stopPropagation(); | |
| 313 } | 336 } |
| 314 | 337 |
| 315 // Extracts source URL from an IMG, OBJECT, EMBED, or IFRAME | 338 // Extracts source URL from an IMG, OBJECT, EMBED, or IFRAME |
| 316 function getElementURL(elt) { | 339 function getElementURL(elt) { |
| 317 // Check children of object nodes for "param" nodes with name="movie" that spe cify a URL | 340 // Check children of object nodes for "param" nodes with name="movie" that spe cify a URL |
| 318 // in value attribute | 341 // in value attribute |
| 319 var url; | 342 var url; |
| 320 if(elt.localName.toUpperCase() == "OBJECT" && !(url = elt.getAttribute("data") )) { | 343 if(elt.localName.toUpperCase() == "OBJECT" && !(url = elt.getAttribute("data") )) { |
| 321 // No data attribute, look in PARAM child tags for a URL for the swf file | 344 // No data attribute, look in PARAM child tags for a URL for the swf file |
| 322 var params = elt.querySelectorAll("param[name=\"movie\"]"); | 345 var params = elt.querySelectorAll("param[name=\"movie\"]"); |
| 323 // This OBJECT could contain an EMBED we already nuked, in which case there' s no URL | 346 // This OBJECT could contain an EMBED we already nuked, in which case there' s no URL |
| 324 if(params[0]) | 347 if(params[0]) |
| 325 url = params[0].getAttribute("value"); | 348 url = params[0].getAttribute("value"); |
| 326 else { | 349 else { |
| 327 params = elt.querySelectorAll("param[name=\"src\"]"); | 350 params = elt.querySelectorAll("param[name=\"src\"]"); |
| 328 if(params[0]) | 351 if(params[0]) |
| 329 url = params[0].getAttribute("value"); | 352 url = params[0].getAttribute("value"); |
| 330 } | 353 } |
| 331 } else if(!url) { | 354 } else if(!url) { |
| 332 url = elt.getAttribute("src") || elt.getAttribute("href"); | 355 url = elt.getAttribute("src") || elt.getAttribute("href"); |
| 333 } | 356 } |
| 334 return url; | 357 return url; |
| 335 } | 358 } |
| 336 | 359 |
| 337 // Converts relative to absolute URL | 360 // Converts relative to absolute URL |
| 338 // e.g.: foo.swf on http://example.com/whatever/bar.html | 361 // e.g.: foo.swf on http://example.com/whatever/bar.html |
| 339 // -> http://example.com/whatever/foo.swf | 362 // -> http://example.com/whatever/foo.swf |
| 340 function relativeToAbsoluteUrl(url) | 363 function relativeToAbsoluteUrl(url) |
| 341 { | 364 { |
| 342 // If URL is already absolute, don't mess with it | 365 // If URL is already absolute, don't mess with it |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 470 url = url.replace(/^\s+/, "").replace(/\s+$/, ""); | 493 url = url.replace(/^\s+/, "").replace(/\s+$/, ""); |
| 471 if (!/^(https?|ftp):/.test(url)) | 494 if (!/^(https?|ftp):/.test(url)) |
| 472 return; | 495 return; |
| 473 | 496 |
| 474 ext.backgroundPage.sendMessage({ | 497 ext.backgroundPage.sendMessage({ |
| 475 type: "add-subscription", | 498 type: "add-subscription", |
| 476 title: title, | 499 title: title, |
| 477 url: url | 500 url: url |
| 478 }); | 501 }); |
| 479 }, true); | 502 }, true); |
| 480 | 503 |
| 481 ext.onMessage.addListener(function(msg, sender, sendResponse) | 504 ext.onMessage.addListener(function(msg, sender, sendResponse) |
| 482 { | 505 { |
| 483 switch (msg.type) | 506 switch (msg.type) |
| 484 { | 507 { |
| 485 case "get-clickhide-state": | 508 case "get-clickhide-state": |
| 486 sendResponse({active: clickHide_activated}); | 509 sendResponse({active: clickHide_activated}); |
| 487 break; | 510 break; |
| 488 case "clickhide-activate": | 511 case "clickhide-activate": |
| 489 clickHide_activate(); | 512 clickHide_activate(); |
| 490 break; | 513 break; |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 563 | 586 |
| 564 clickHide_deactivate(); | 587 clickHide_deactivate(); |
| 565 } | 588 } |
| 566 break; | 589 break; |
| 567 default: | 590 default: |
| 568 sendResponse({}); | 591 sendResponse({}); |
| 569 break; | 592 break; |
| 570 } | 593 } |
| 571 }); | 594 }); |
| 572 } | 595 } |
| OLD | NEW |