summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGaming4JC <g4jc@hyperbola.info>2019-05-12 10:33:30 -0400
committerGaming4JC <g4jc@hyperbola.info>2019-05-12 10:33:30 -0400
commit817f134eb4434c19dd3cfc3f3502046de480d49a (patch)
treef3391df71b780fc21674917d23064f0d7259521e
parent0eafaf21dc057de06e49d908888ca8c97459d2ca (diff)
downloadiceweasel-uxp-817f134eb4434c19dd3cfc3f3502046de480d49a.tar.gz
Remove non-used bundled extension
-rw-r--r--extensions/moz.build4
-rw-r--r--extensions/noscript/GPL.txt339
-rw-r--r--extensions/noscript/NoScript_License.txt17
-rw-r--r--extensions/noscript/bootstrap.js64
-rw-r--r--extensions/noscript/chrome.manifest62
-rw-r--r--extensions/noscript/chrome/content/noscript/ABE.g55
-rw-r--r--extensions/noscript/chrome/content/noscript/ABE.js1540
-rw-r--r--extensions/noscript/chrome/content/noscript/ABELexer.js1378
-rw-r--r--extensions/noscript/chrome/content/noscript/ABEParser.js1466
-rw-r--r--extensions/noscript/chrome/content/noscript/ASPIdiocy.js566
-rw-r--r--extensions/noscript/chrome/content/noscript/AddressMatcher.js279
-rw-r--r--extensions/noscript/chrome/content/noscript/Bug.js21
-rw-r--r--extensions/noscript/chrome/content/noscript/ChannelReplacement.js61
-rw-r--r--extensions/noscript/chrome/content/noscript/ClearClickHandler.js1414
-rw-r--r--extensions/noscript/chrome/content/noscript/Cookie.js148
-rw-r--r--extensions/noscript/chrome/content/noscript/DNS.js374
-rw-r--r--extensions/noscript/chrome/content/noscript/DOM.js245
-rw-r--r--extensions/noscript/chrome/content/noscript/DoNotTrack.js59
-rw-r--r--extensions/noscript/chrome/content/noscript/Entities.js37
-rw-r--r--extensions/noscript/chrome/content/noscript/ExternalFilters.js728
-rw-r--r--extensions/noscript/chrome/content/noscript/FlashIdiocy.js133
-rw-r--r--extensions/noscript/chrome/content/noscript/ForcedRedirectionCallback.js59
-rw-r--r--extensions/noscript/chrome/content/noscript/FrameScript.jsm87
-rw-r--r--extensions/noscript/chrome/content/noscript/HTTPS.js405
-rw-r--r--extensions/noscript/chrome/content/noscript/IO.js53
-rw-r--r--extensions/noscript/chrome/content/noscript/IOUtil.js290
-rw-r--r--extensions/noscript/chrome/content/noscript/InjectionChecker.js1734
-rw-r--r--extensions/noscript/chrome/content/noscript/JSURL.js88
-rw-r--r--extensions/noscript/chrome/content/noscript/Lang.js17
-rw-r--r--extensions/noscript/chrome/content/noscript/MSEInterception.js98
-rw-r--r--extensions/noscript/chrome/content/noscript/Main.js4530
-rw-r--r--extensions/noscript/chrome/content/noscript/MainChild.js870
-rw-r--r--extensions/noscript/chrome/content/noscript/MainParent.js611
-rw-r--r--extensions/noscript/chrome/content/noscript/Membrane.js20
-rw-r--r--extensions/noscript/chrome/content/noscript/MimeService.js18
-rw-r--r--extensions/noscript/chrome/content/noscript/MimeServiceParent.js19
-rw-r--r--extensions/noscript/chrome/content/noscript/NoScript_License.txt17
-rw-r--r--extensions/noscript/chrome/content/noscript/PasteHandler.jsm83
-rw-r--r--extensions/noscript/chrome/content/noscript/Plugins.js30
-rw-r--r--extensions/noscript/chrome/content/noscript/Policy.js927
-rw-r--r--extensions/noscript/chrome/content/noscript/Profiler.js63
-rw-r--r--extensions/noscript/chrome/content/noscript/RequestWatchdog.js1155
-rw-r--r--extensions/noscript/chrome/content/noscript/Restartless.jsm248
-rw-r--r--extensions/noscript/chrome/content/noscript/ScriptSurrogate.js440
-rw-r--r--extensions/noscript/chrome/content/noscript/ScriptlessBGThumbs.js48
-rw-r--r--extensions/noscript/chrome/content/noscript/SiteUtils.js358
-rw-r--r--extensions/noscript/chrome/content/noscript/Strings.js37
-rw-r--r--extensions/noscript/chrome/content/noscript/SyntaxChecker.js31
-rw-r--r--extensions/noscript/chrome/content/noscript/Thread.js95
-rw-r--r--extensions/noscript/chrome/content/noscript/UISync.jsm316
-rw-r--r--extensions/noscript/chrome/content/noscript/URIValidator.js49
-rw-r--r--extensions/noscript/chrome/content/noscript/WebExt.js49
-rw-r--r--extensions/noscript/chrome/content/noscript/WebGLInterception.js64
-rw-r--r--extensions/noscript/chrome/content/noscript/WinScript.js78
-rw-r--r--extensions/noscript/chrome/content/noscript/about.xul173
-rw-r--r--extensions/noscript/chrome/content/noscript/antlr.js11
-rw-r--r--extensions/noscript/chrome/content/noscript/clearClick.js112
-rw-r--r--extensions/noscript/chrome/content/noscript/clearClick.xul58
-rw-r--r--extensions/noscript/chrome/content/noscript/defer.jsm17
-rw-r--r--extensions/noscript/chrome/content/noscript/e10sChild.js63
-rw-r--r--extensions/noscript/chrome/content/noscript/e10sIPC.js68
-rw-r--r--extensions/noscript/chrome/content/noscript/e10sParent.js101
-rw-r--r--extensions/noscript/chrome/content/noscript/e10sProcessScript.js8
-rw-r--r--extensions/noscript/chrome/content/noscript/frameScript.js3
-rw-r--r--extensions/noscript/chrome/content/noscript/html5_events98
-rw-r--r--extensions/noscript/chrome/content/noscript/iaUI.js204
-rw-r--r--extensions/noscript/chrome/content/noscript/importer.jsm30
-rw-r--r--extensions/noscript/chrome/content/noscript/loader.js73
-rw-r--r--extensions/noscript/chrome/content/noscript/noscript.js193
-rw-r--r--extensions/noscript/chrome/content/noscript/noscript.xbl18
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptBM.js127
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptBMOverlay.xul11
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptOptions.js755
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptOptions.xul469
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptOverlay-noStatusBar.xul318
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptOverlay.js2685
-rw-r--r--extensions/noscript/chrome/content/noscript/noscriptOverlay.xul318
-rw-r--r--extensions/noscript/chrome/content/noscript/tree-copy.js53
-rw-r--r--extensions/noscript/chrome/locale/ar/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ar/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ar/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/be-BY/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/be-BY/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/be-BY/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/bg-BG/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/bg-BG/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/bg-BG/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/bn-IN/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/bn-IN/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/bn-IN/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ca-AD/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ca-AD/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ca-AD/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/cs-CZ/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/cy-GB/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/cy-GB/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/cy-GB/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/da/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/da/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/da/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/de/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/de/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/de/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/el/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/el/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/el/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/en-GB/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/en-GB/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/en-GB/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/en-US/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/en-US/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/en-US/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/eo/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/eo/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/eo/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/es-AR/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/es-AR/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/es-AR/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/es-CL/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/es-CL/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/es-CL/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/es-ES/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/es-ES/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/es-ES/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/et-EE/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/et-EE/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/et-EE/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/eu/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/eu/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/eu/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/fa-IR/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/fa-IR/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/fa-IR/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/fi/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/fi/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/fi/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/fr/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/fr/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/fr/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/gl-ES/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/gl-ES/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/gl-ES/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/he-IL/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/he-IL/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/he-IL/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/hr-HR/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/hr-HR/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/hr-HR/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/hsb/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/hsb/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/hsb/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/hu-HU/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/hu-HU/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/hu-HU/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/id-ID/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/id-ID/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/id-ID/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/it/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/it/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/it/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ja-JP/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ja-JP/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ja-JP/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/kk-KZ/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/km-KH/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/km-KH/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/km-KH/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ko-KR/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ko-KR/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ko-KR/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/lt/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/lt/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/lt/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/mk-MK/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/mk-MK/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/mk-MK/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ms-MY/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ms-MY/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ms-MY/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/nb-NO/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/nb-NO/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/nb-NO/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/nl/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/nl/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/nl/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/pl/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/pl/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/pl/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/pt-BR/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/pt-BR/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/pt-BR/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/pt-PT/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/pt-PT/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/pt-PT/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ro/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ro/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ro/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/ru-RU/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/ru-RU/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/ru-RU/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/sk-SK/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/sk-SK/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/sk-SK/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/sl-SI/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/sl-SI/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/sl-SI/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/sr-RS/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/sr-RS/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/sr-RS/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/sr/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/sr/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/sr/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/sv-SE/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/sv-SE/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/sv-SE/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/te-IN/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/te-IN/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/te-IN/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/th/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/th/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/th/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/tr/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/tr/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/tr/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/uk/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/uk/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/uk/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/vi/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/vi/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/vi/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/zh-CN/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/zh-CN/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/zh-CN/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/locale/zh-TW/noscript/about.properties15
-rw-r--r--extensions/noscript/chrome/locale/zh-TW/noscript/noscript.dtd192
-rw-r--r--extensions/noscript/chrome/locale/zh-TW/noscript/noscript.properties56
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/abe16.pngbin800 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/about.css88
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/block.wavbin7587 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/browser.css322
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/clearclick16.pngbin861 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/close.pngbin1963 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/console16.pngbin756 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/content.css1
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/ef-no16.pngbin687 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/ef16.pngbin758 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/emb16.pngbin868 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/embed-no16.pngbin798 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/embed16.pngbin808 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/faq16.pngbin809 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/flash16.pngbin835 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/flash32.pngbin2092 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/folder_closed.pngbin813 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/folder_open.pngbin831 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/font.pngbin567 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/glb-emb16.pngbin1780 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/glb-no16.pngbin944 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/glb16.pngbin781 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/https16.pngbin749 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/ia.pngbin2842 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/icon24.pngbin1914 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/icon32.pngbin3053 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/icon64.pngbin9279 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/icon80.pngbin3847 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-emb16.pngbin833 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-glb16.pngbin497 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-no-emb16.pngbin978 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-no16.pngbin968 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-prt16.pngbin594 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-yes16.pngbin416 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/inactive-yu16.pngbin830 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/java16.pngbin666 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/java32.pngbin1620 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/mobile.css67
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/no-emb16.pngbin1025 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/no16.pngbin997 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/options.css46
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/prt16.pngbin847 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/redirect16.pngbin572 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/revtemp16.pngbin998 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/somelight16.pngbin913 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/somelight32.pngbin2458 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/subprt16.pngbin1001 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/temp16.pngbin853 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/unsafe-reload16.pngbin943 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/untrusted-glb16.pngbin982 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/untrusted16.pngbin1032 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/webgl16.pngbin995 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/webgl32.pngbin2451 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/xss16.pngbin1034 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/yes16.pngbin786 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/yu-emb16.pngbin904 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/yu-glb16.pngbin852 -> 0 bytes
-rw-r--r--extensions/noscript/chrome/skin/classic/noscript/yu16.pngbin841 -> 0 bytes
-rw-r--r--extensions/noscript/components/noscriptService.js15
-rw-r--r--extensions/noscript/defaults/preferences/noscript.js434
-rw-r--r--extensions/noscript/install.rdf102
-rw-r--r--extensions/noscript/mozilla.cfg13
-rw-r--r--extensions/noscript/webextension/legacy.js36
-rw-r--r--extensions/noscript/webextension/manifest.json28
304 files changed, 0 insertions, 43297 deletions
diff --git a/extensions/moz.build b/extensions/moz.build
index c4b8a45..28919c2 100644
--- a/extensions/moz.build
+++ b/extensions/moz.build
@@ -4,7 +4,3 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#DIRS += [
-# 'noscript',
-#]
-
diff --git a/extensions/noscript/GPL.txt b/extensions/noscript/GPL.txt
deleted file mode 100644
index 0a98ec0..0000000
--- a/extensions/noscript/GPL.txt
+++ /dev/null
@@ -1,339 +0,0 @@
- GNU GENERAL PUBLIC LICENSE
- Version 2, June 1991
-
- Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- Everyone is permitted to copy and distribute verbatim copies
- of this license document, but changing it is not allowed.
-
- Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software--to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Lesser General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
- GNU GENERAL PUBLIC LICENSE
- TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-
- 0. This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The "Program", below,
-refers to any such program or work, and a "work based on the Program"
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term "modification".) Each licensee is addressed as "you".
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
- 1. You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
- 2. You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
- a) You must cause the modified files to carry prominent notices
- stating that you changed the files and the date of any change.
-
- b) You must cause any work that you distribute or publish, that in
- whole or in part contains or is derived from the Program or any
- part thereof, to be licensed as a whole at no charge to all third
- parties under the terms of this License.
-
- c) If the modified program normally reads commands interactively
- when run, you must cause it, when started running for such
- interactive use in the most ordinary way, to print or display an
- announcement including an appropriate copyright notice and a
- notice that there is no warranty (or else, saying that you provide
- a warranty) and that users may redistribute the program under
- these conditions, and telling the user how to view a copy of this
- License. (Exception: if the Program itself is interactive but
- does not normally print such an announcement, your work based on
- the Program is not required to print an announcement.)
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
- 3. You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
- a) Accompany it with the complete corresponding machine-readable
- source code, which must be distributed under the terms of Sections
- 1 and 2 above on a medium customarily used for software interchange; or,
-
- b) Accompany it with a written offer, valid for at least three
- years, to give any third party, for a charge no more than your
- cost of physically performing source distribution, a complete
- machine-readable copy of the corresponding source code, to be
- distributed under the terms of Sections 1 and 2 above on a medium
- customarily used for software interchange; or,
-
- c) Accompany it with the information you received as to the offer
- to distribute corresponding source code. (This alternative is
- allowed only for noncommercial distribution and only if you
- received the program in object code or executable form with such
- an offer, in accord with Subsection b above.)
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
- 4. You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
- 5. You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
- 6. Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
- 7. If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
- 8. If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
- 9. The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and "any
-later version", you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
- 10. If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
- NO WARRANTY
-
- 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
- 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-
- END OF TERMS AND CONDITIONS
-
- How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
-
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the "copyright" line and a pointer to where the full notice is found.
-
- <one line to give the program's name and a brief idea of what it does.>
- Copyright (C) <year> <name of author>
-
- This program 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 2 of the License, or
- (at your option) any later version.
-
- This program 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 this program; if not, write to the Free Software Foundation, Inc.,
- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
- Gnomovision version 69, Copyright (C) year name of author
- Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- This is free software, and you are welcome to redistribute it
- under certain conditions; type `show c' for details.
-
-The hypothetical commands `show w' and `show c' should show the appropriate
-parts of the General Public License. Of course, the commands you use may
-be called something other than `show w' and `show c'; they could even be
-mouse-clicks or menu items--whatever suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a "copyright disclaimer" for the program, if
-necessary. Here is a sample; alter the names:
-
- Yoyodyne, Inc., hereby disclaims all copyright interest in the program
- `Gnomovision' (which makes passes at compilers) written by James Hacker.
-
- <signature of Ty Coon>, 1 April 1989
- Ty Coon, President of Vice
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Lesser General
-Public License instead of this License. \ No newline at end of file
diff --git a/extensions/noscript/NoScript_License.txt b/extensions/noscript/NoScript_License.txt
deleted file mode 100644
index ab6ab8f..0000000
--- a/extensions/noscript/NoScript_License.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-NoScript - a Firefox extension for whitelist driven safe JavaScript execution
-Copyright (C) 2004-2014 Giorgio Maone - g.maone@informaction.com
-
-This program 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 2 of the License, or
-(at your option) any later version.
-
-This program 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 this program; if not, write to the
-Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
diff --git a/extensions/noscript/bootstrap.js b/extensions/noscript/bootstrap.js
deleted file mode 100644
index 9f1235e..0000000
--- a/extensions/noscript/bootstrap.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var { utils: Cu, interfaces: Ci } = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-
-let moduleURL = `chrome://noscript/content/Restartless.jsm?${Math.random() }.${Date.now()}`;
-let customizeStyle = "chrome://noscript/skin/browser.css";
-let module = {};
-
-function startup(data, reason) {
- Cu.import(moduleURL, module);
- module.startup(data, reason === APP_STARTUP); // Do whatever initial startup stuff you need to do
-
- if (module.loadIntoWindow) {
- forEachOpenWindow(module.loadIntoWindow);
- }
- Services.wm.addListener(WindowListener);
-}
-
-function shutdown(data, reason) {
- if (reason === APP_SHUTDOWN)
- return;
-
- Services.wm.removeListener(WindowListener);
-
- if (module.unloadFromWindow) forEachOpenWindow(module.unloadFromWindow);
-
-
- module.shutdown(data);
-
- Cu.unload(moduleURL);
- Services.obs.notifyObservers(null, "chrome-flush-caches", null);
-}
-function install(data, reason) { }
-function uninstall(data, reason) { }
-
-function forEachOpenWindow(todo) // Apply a function to all open browser windows
-{
- var windows = Services.wm.getEnumerator("navigator:browser");
- while (windows.hasMoreElements())
- todo(windows.getNext().QueryInterface(Ci.nsIDOMWindow));
-}
-var WindowListener =
-{
- onOpenWindow: function(xulWindow)
- {
- var window = xulWindow.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow);
- function onWindowLoad()
- {
- window.removeEventListener("DOMContentLoad",onWindowLoad);
- let doc = window.document;
- if (doc.documentElement.getAttribute("windowtype") == "navigator:browser") {
- module.loadIntoWindow(window, true);
- } else if(window.location.href === "chrome://global/content/customizeToolbar.xul") {
- let root = doc.documentElement;
- let styleNode = doc.createProcessingInstruction("xml-stylesheet",`href="${customizeStyle}" type="text/css"`);
- doc.insertBefore(styleNode, root);
- }
- }
- window.addEventListener("DOMContentLoaded", onWindowLoad);
- },
- onCloseWindow: function(xulWindow) { },
- onWindowTitleChange: function(xulWindow, newTitle) { }
-};
diff --git a/extensions/noscript/chrome.manifest b/extensions/noscript/chrome.manifest
deleted file mode 100644
index c8cdddc..0000000
--- a/extensions/noscript/chrome.manifest
+++ /dev/null
@@ -1,62 +0,0 @@
-content noscript chrome/content/noscript/
-
-skin noscript classic/1.0 chrome/skin/classic/noscript/
-
-# Work around for breakages caused by the .NET Framework Assistant
-override chrome://dotnetassistant/content/bootstrap.xul data:text/xml,<lame/>
-
-# Localization
-locale noscript ar chrome/locale/ar/noscript/
-locale noscript be-BY chrome/locale/be-BY/noscript/
-locale noscript bg-BG chrome/locale/bg-BG/noscript/
-locale noscript bn-IN chrome/locale/bn-IN/noscript/
-locale noscript ca-AD chrome/locale/ca-AD/noscript/
-locale noscript cs-CZ chrome/locale/cs-CZ/noscript/
-locale noscript cy-GB chrome/locale/cy-GB/noscript/
-locale noscript da chrome/locale/da/noscript/
-locale noscript de chrome/locale/de/noscript/
-locale noscript el chrome/locale/el/noscript/
-locale noscript en-GB chrome/locale/en-GB/noscript/
-locale noscript en-US chrome/locale/en-US/noscript/
-locale noscript eo chrome/locale/eo/noscript/
-locale noscript es-AR chrome/locale/es-AR/noscript/
-locale noscript es-CL chrome/locale/es-CL/noscript/
-locale noscript es-ES chrome/locale/es-ES/noscript/
-locale noscript et-EE chrome/locale/et-EE/noscript/
-locale noscript eu chrome/locale/eu/noscript/
-locale noscript fa-IR chrome/locale/fa-IR/noscript/
-locale noscript fi chrome/locale/fi/noscript/
-locale noscript fr chrome/locale/fr/noscript/
-locale noscript gl-ES chrome/locale/gl-ES/noscript/
-locale noscript he-IL chrome/locale/he-IL/noscript/
-locale noscript hr-HR chrome/locale/hr-HR/noscript/
-locale noscript hsb chrome/locale/hsb/noscript/
-locale noscript hu-HU chrome/locale/hu-HU/noscript/
-locale noscript id-ID chrome/locale/id-ID/noscript/
-locale noscript it chrome/locale/it/noscript/
-locale noscript ja-JP chrome/locale/ja-JP/noscript/
-locale noscript kk-KZ chrome/locale/kk-KZ/noscript/
-locale noscript km-KH chrome/locale/km-KH/noscript/
-locale noscript ko-KR chrome/locale/ko-KR/noscript/
-locale noscript lt chrome/locale/lt/noscript/
-locale noscript mk-MK chrome/locale/mk-MK/noscript/
-locale noscript ms-MY chrome/locale/ms-MY/noscript/
-locale noscript nb-NO chrome/locale/nb-NO/noscript/
-locale noscript nl chrome/locale/nl/noscript/
-locale noscript pl chrome/locale/pl/noscript/
-locale noscript pt-BR chrome/locale/pt-BR/noscript/
-locale noscript pt-PT chrome/locale/pt-PT/noscript/
-locale noscript ro chrome/locale/ro/noscript/
-locale noscript ru-RU chrome/locale/ru-RU/noscript/
-locale noscript sk-SK chrome/locale/sk-SK/noscript/
-locale noscript sl-SI chrome/locale/sl-SI/noscript/
-locale noscript sr chrome/locale/sr/noscript/
-locale noscript sr-RS chrome/locale/sr-RS/noscript/
-locale noscript sv-SE chrome/locale/sv-SE/noscript/
-locale noscript te-IN chrome/locale/te-IN/noscript/
-locale noscript th chrome/locale/th/noscript/
-locale noscript tr chrome/locale/tr/noscript/
-locale noscript uk chrome/locale/uk/noscript/
-locale noscript vi chrome/locale/vi/noscript/
-locale noscript zh-CN chrome/locale/zh-CN/noscript/
-locale noscript zh-TW chrome/locale/zh-TW/noscript/
diff --git a/extensions/noscript/chrome/content/noscript/ABE.g b/extensions/noscript/chrome/content/noscript/ABE.g
deleted file mode 100644
index a6fe7f6..0000000
--- a/extensions/noscript/chrome/content/noscript/ABE.g
+++ /dev/null
@@ -1,55 +0,0 @@
-grammar ABE;
-
-options {
- language=JavaScript;
- output=AST;
-}
-
-tokens {
- T_ACTION;
- T_METHODS;
-}
-
-ruleset : rule* EOF ;
-rule : subject predicate+ -> subject predicate+ ;
-predicate : action methods? origin? -> T_ACTION action T_METHODS methods? origin? ;
-methods : (method+ | ALL) ;
-method : (HTTPVERB | SUB | inclusion) ;
-inclusion : INC (LPAR (INC_TYPE COMMA)* INC_TYPE? RPAR)? ;
-origin : T_FROM oresources ;
-subject : T_SITE resources ;
-oresources: (oresource+ | ALL) ;
-resources : (resource+ | ALL) ;
-oresource: resource | 'SELF' | 'SELF+' | 'SELF++' ;
-resource : REGEXP | GLOB | URI | LOCATION ;
-action : A_DENY | A_LOGOUT | A_SANDBOX | A_ACCEPT ;
-
-T_SITE : ('Site' | 'Request') ;
-T_FROM : ('f' | 'F') 'rom' ;
-A_DENY : 'Deny' ;
-A_LOGOUT : 'Logout' | 'Anon' 'ymize'? ;
-A_SANDBOX : 'Sandbox' ;
-A_ACCEPT : 'Accept' ;
-
-fragment URI_START : 'a'..'z' | '0'..'9' ;
-fragment URI_PART : 'a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '-' | '.' |
- '[' | ']' | ':' | '/' | '@' | '~' | ';' | ',' |
- '?' | '&' | '=' | '%' | '#' ;
-LOCATION : 'LOCAL' ;
-URI : URI_START URI_PART+ ;
-GLOB : (URI_START | '*' | '.') (URI_PART | '*')* ;
-REGEXP : '^' ~'\n'+ ;
-
-ALL : 'ALL' ;
-SUB : 'SUB' ;
-INC : 'INC' 'LUSION'? ;
-HTTPVERB : 'GET' | 'POST' | 'PUT' | 'HEAD' | 'PATCH' | 'DELETE' | 'TRACE' | 'OPTIONS';nsI
-INC_TYPE : 'A'..'Z' ('A'..'Z' | 'A'..'Z' '_' 'A'..'Z')+ ;
-
-
-COMMA : ',' ;
-LPAR : '(' ;
-RPAR : ')' ;
-
-WS : (' '|'\r'|'\t'|'\u000C'|'\n') {$channel=HIDDEN;} ;
-COMMENT : '#' ~'\n'* {$channel=HIDDEN;} ;
diff --git a/extensions/noscript/chrome/content/noscript/ABE.js b/extensions/noscript/chrome/content/noscript/ABE.js
deleted file mode 100644
index de4523f..0000000
--- a/extensions/noscript/chrome/content/noscript/ABE.js
+++ /dev/null
@@ -1,1540 +0,0 @@
-var org = { antlr: { runtime: { tree: {} } } }; // work-around for an antlr scoping bug
-
-INCLUDE('antlr', 'ABEParser', 'ABELexer', 'Lang');
-
-var ABE = {
- RULES_CHANGED_TOPIC: "abe:rules-changed",
- FLAG_CALLED: 0x01,
- FLAG_CHECKED: 0x02,
-
- SITE_RULESET_LIFETIME: 12 * 60 * 60000, // 12 hours
- maxSiteRulesetSize: 8192,
- maxSiteRulesetTime: 16000,
- enabled: false,
- siteEnabled: false,
- allowRulesetRedir: false,
- skipBrowserRequests: true,
-
- BROWSER_URI: IOS.newURI("chrome://browser/content/", null, null),
- LOAD_BACKGROUND: Ci.nsIChannel.LOAD_BACKGROUND,
- LOAD_INITIAL_DOCUMENT_URI: Ci.nsIChannel.LOAD_INITIAL_DOCUMENT_URI,
- SANDBOX_KEY: "abe.sandbox",
- localRulesets: [],
- _localMap: null,
- _siteRulesets: null,
-
- init: function(prefParent) {
- const ps = this.prefService = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch);
- ABEStorage.init(ps.getBranch(prefParent+ "ABE."));
- DoNotTrack.init(ps.getBranch(prefParent+ "doNotTrack."));
- },
-
- dispose() {
- ABEStorage.dispose();
- WAN.enabled = false;
- },
-
- siteMap: Object.create(null),
-
- get disabledRulesetNames() {
- return this.rulesets.filter(function(rs) { return rs.disabled; })
- .map(function(rs) { return rs.name; }).join(" ");
- },
- set disabledRulesetNames(names) {
- var rs;
- for (rs of this.rulesets) rs.disabled = false;
- if (names) try {
- for (var name of names.split(/\s+/)) {
- rs = this.localMap[name] || this.siteMap[name];
- if (rs) rs.disabled = true;
- }
- } catch(e) {}
-
- return names;
- },
-
- get localMap() {
- if (this._localMap) return this._localMap;
- this._localMap = Object.create(null);
- for (let rs of this.localRulesets) {
- this._localMap[rs.name] = rs;
- }
- return this._localMap;
- },
-
- get siteRulesets() {
- if (this._siteRulesets) return this._siteRulesets;
- this._siteRulesets = [];
- for (let name in this.siteMap) {
- let rs = this.siteMap[name];
- if (rs && !rs.empty) this._siteRulesets.push(rs);
- }
- this._siteRulesets.sort(function(r1, r2) { return r1.name > r2.name; });
- return this._siteRulesets;
- },
-
- get rulesets() {
- return this.localRulesets.concat(this.siteRulesets);
- },
-
- clear: function() {
- this.localRulesets = [];
- this.refresh();
- },
-
- refresh: function() {
- this.siteMap = Object.create(null);
- this._siteRulesets = null;
- },
-
- createRuleset: (name, source, timestamp) => new ABERuleset(name, source, timestamp || Date.now()),
-
- parse: function(name, source, timestamp) {
- try {
- var rs = typeof name === "string" ? this.createRuleset(name, source, timestamp) : name;
- if (rs.site) {
- this.putSiteRuleset(rs);
- } else {
- this.addLocalRuleset(rs);
- }
- return rs;
- } catch(e) {
- this.log(e);
- }
- return false;
- },
-
- storeRuleset: function(name, source) {
- if (this.localMap[name] === source) return false;
- ABEStorage.saveRuleset(name, source);
- ABEStorage.persist();
- ABEStorage.loadRules();
- return true;
- },
-
- addLocalRuleset: function(rs) {
- this.localRulesets.push(rs);
- this._localMap = null;
- },
-
- putSiteRuleset: function(rs) {
- this.siteMap[rs.name] = rs;
- this._siteRulesets = null;
- },
-
- restoreJSONRules: function(data) {
- if (!data.length) return;
- try {
- ABEStorage.clear();
- for (let rs of data) {
- ABEStorage.saveRuleset(rs.name, rs.source);
- }
- } catch(e) {
- ABE.log("Failed to restore configuration: " + e);
- }
- },
-
- resetDefaults: function() {
- ABEStorage.clear();
- this.clear();
- },
-
-
- checkPolicy: function(origin, destination, type) {
- try {
- return this.checkRequest(new ABERequest(new ABEPolicyChannel(origin, destination, type)));
- } catch(e) {
- ABE.log(e);
- return false;
- }
- },
-
- checkRequest: function(req) {
- if (!this.enabled)
- return false;
-
- const channel = req.channel;
- const loadFlags = channel.loadFlags;
-
- var browserReq = req.originURI.schemeIs("chrome") && !req.external;
-
- if (browserReq &&
- (
- this.skipBrowserRequests &&
- ((loadFlags & this.LOAD_BACKGROUND) ||
- !req.isDoc && req.origin == ABE.BROWSER_URI.spec && !req.window)
- )
- ) {
- if (this.consoleDump) this.log("Skipping low-level browser request for " + req.destination);
- return false;
- }
-
- if (this.localRulesets.length == 0 && !this.siteEnabled)
- return null;
-
- if (this.deferIfNeeded(req))
- return false;
-
- if (DoNotTrack.enabled) DoNotTrack.apply(req);
-
- var t;
- if (this.consoleDump) {
- this.log("Checking #" + req.serial + ": " + req.destination + " from " + req.origin + " - " + loadFlags);
- t = Date.now();
- }
-
- try {
- var res = new ABERes(req);
- var rs;
- for (rs of this.localRulesets) {
- if (this._check(rs, res)) break;
- }
-
- if (!(browserReq || res.fatal) &&
- this.siteEnabled && channel instanceof Ci.nsIHttpChannel &&
- !ABE.reqData(channel).preflght &&
- req.destinationURI.schemeIs("https") &&
- req.destinationURI.prePath != req.originURI.prePath &&
- !(this.skipBrowserRequests && req.originURI.schemeIs("chrome") && !req.window) // skip preflight for window-less browser requests
- ) {
-
- var name = this._host2name(req.destinationURI.host);
- if (!(name in this.siteMap)) {
- ABE.log("Preflight for " + req.origin + ", " + req.destination + ", " + loadFlags);
- this.downloadRuleset(name, req.destinationURI);
- }
-
- rs = this.siteMap[name];
- if (rs && Date.now() - rs.timestamp > this.SITE_RULESET_LIFETIME)
- rs = this.downloadRuleset(name, req.destinationURI);
-
- if (rs) this._check(rs, res);
- }
- } finally {
- if (this.consoleDump) this.log(req.destination + " Checked in " + (Date.now() - t));
- req.checkFlags |= this.FLAG_CHECKED;
- }
- return res.lastRuleset && res;
- },
-
- _check: function(rs, res) {
- var action = rs.check(res.request);
- if (action) {
- action = action.toLowerCase();
- let outcome = (res.request.channel instanceof ABEPolicyChannel)
- ? (action === "deny" ? ABERes.FATAL : ABERes.SKIPPED)
- : ABEActions[action](res.request);
- if (outcome !== ABERes.SKIPPED) {
- let r = rs.lastMatch;
- this.log(r);
- this.log(res.request + ' matches "' + r.lastMatch + '"');
- (res.rulesets || (res.rulesets = [])).push(rs);
- res.lastRuleset = rs;
- return res.fatal = outcome === ABERes.FATAL;
- }
- }
- return false;
- },
-
- deferIfNeeded: function(req) {
- var host = req.destinationURI.host;
- if (!(req.canDoDNS && req.deferredDNS) ||
- DNS.isIP(host) ||
- DNS.isCached(host) ||
- req.channel.redirectionLimit === 0 || req.channel.status !== 0
- )
- return false;
-
- ABE.reqData(req.channel).deferred = true;
-
- if (ChannelReplacement.runWhenPending(req.channel, function() {
- try {
-
- if (req.channel.status !== 0) return;
-
- if ((req.channel instanceof Ci.nsITransportEventSink)
- && req.isDoc && !(req.subdoc || req.dnsNotified)) try {
- Thread.asap(function() {
- if (!req.dnsNotified) {
- ABE.log("DNS notification for " + req.destination);
- req.dnsNotified = true; // unexplicable recursions have been reported...
- req.channel.onTransportStatus(null, 0x804b0003, 0, 0); // notify STATUS_RESOLVING
- }
- });
- } catch(e) {}
-
- req.replace(false, null, function(replacement) {
- ABE.log(host + " not cached in DNS, deferring ABE checks after DNS resolution for request " + req.serial);
-
- DNS.resolve(host, 0, function(dnsRecord) {
- req.dnsNotified = true; // prevents spurious notifications
- replacement.open();
- });
- });
-
- } catch(e) {
- ABE.log("Deferred ABE checks failed: " + e);
- }
- })) {
- ABE.log(req.serial + " not pending yet, will check later.")
- }
-
- return true;
- },
-
- reqData(req, remove = false) {
- return IOUtil.reqData(req, "net.noscript/ABE.channelData", remove);
- },
-
- isDeferred: function(chan) {
- return !!ABE.reqData(chan).deferred;
- },
-
- hasSiteRulesFor: function(host) {
- return this._host2Name(host) in this.siteMap;
- },
-
-
- _host2name: function(host) {
- return "." + host;
- },
-
- isSubdomain: function(parentHost, childHost) {
- if (parentHost.length > childHost.length) return false;
- parentHost = "." + parentHost;
- childHost = "." + childHost;
- return parentHost == childHost.substring(childHost.length - parentHost.length);
- },
-
- _downloading: {},
- _abeContentTypeRx: /^application\/|\babe\b|^text\/plain$/i,
- downloadRuleset: function(name, uri) {
- var host = uri.host;
-
- var downloading = this._downloading;
-
- if (host in downloading) {
- ABE.log("Already fetching rulesets for " + host);
- }
-
- var ts = Date.now();
-
- var ctrl = {
- _r: true,
- set running(v) { if (!v) delete downloading[host]; return this._r = v; },
- get running() { return this._r; },
- startTime: ts,
- maxTime: ABE.maxSiteRulesetTime
- };
-
- var elapsed;
-
- try {
- downloading[host] = true;
-
- this.log("Trying to fetch rules for " + host);
-
- uri = uri.clone();
- uri.scheme = "https";
- uri["path" in uri ? "path" : "pathQueryRef"] = "/rules.abe";
-
- var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
- xhr.mozBackgroundRequest = true;
- xhr.open("GET", uri.spec, true); // async if we can spin our own event loop
-
- var channel = xhr.channel; // need to cast
- ABE.reqData(channel).preflight = true;
-
- if (channel instanceof Ci.nsIHttpChannel && !this.allowRulesetRedir)
- channel.redirectionLimit = 0;
-
- if (channel instanceof Ci.nsICachingChannel)
- channel.loadFlags |= channel.LOAD_BYPASS_LOCAL_CACHE_IF_BUSY; // see bug 309424
-
-
- xhr.addEventListener("readystatechange", function() {
- switch(xhr.readyState) {
- case 2:
- if (xhr.status >= 400) {
- ABE.log("Early abort with status " + xhr.status + " for ruleset at " + uri.spec);
- break;
- }
- return;
- case 3:
- var size = xhr.responseText.length; // todo: use https://developer.mozilla.org/En/Using_XMLHttpRequest#Monitoring_progress
- if (size > ABE.maxSiteRulesetSize) {
- ABE.log("Ruleset at " + uri.spec + " too big: " + size + " > " + ABE.maxSiteRulesetSize);
- break;
- }
- return;
- case 4:
- // end
- ctrl.running = false;
- return;
- default: // 0, 1
- return;
- }
- xhr.abort();
- ctrl.running = false;
- }, false);
-
-
- var send = function() {
- xhr.send(null);
- return Thread.spin(ctrl);
- };
-
- if (send()) {
- var size = 0;
- try {
- size = xhr.responseText.length;
- } catch(e) {}
- ABE.log("Ruleset at " + uri.spec + " timeout: " + size + " chars received in " + ctrl.elapsed + "ms");
- xhr.abort();
- return false;
- }
-
- if (xhr.channel != channel && xhr.channel) // shouldn't happen, see updateRedirectChain()...
- this._handleDownloadRedirection(channel, xhr.channel);
-
- if (xhr.status != 200)
- throw new Error("Status: " + xhr.status);
-
- if (!this._abeContentTypeRx.test(xhr.channel.contentType))
- throw new Error("Content-type: " + xhr.channel.contentType);
-
- var source = xhr.responseText || '';
-
- elapsed = Date.now() - ts;
- if (source) ABE.log("Fetched ruleset for "+ host + " in " + elapsed + "ms");
-
- return this.parse(name, source);
- } catch(e) {
- elapsed = elapsed || Date.now() - ts;
- this.log("Can't fetch " + uri.spec + " (" + elapsed + "ms elapsed)");
- this.log(e.message);
- } finally {
- if (!(name in this.siteMap)) this.parse(name, '');
- else this.siteMap[name].timestamp = ts;
- ctrl.running = false;
- }
-
- return false;
- },
-
-
- isSandboxed(channel) {
- return ABE.reqData(channel).sandboxed;
- },
- setSandboxed(channel, sandboxed = true) {
- ABE.reqData(channel).sandboxed = sandboxed;
- },
-
- get cspHeaderValue() {
- delete this.cspHeaderValue;
- let prefs = ABEStorage.prefs;
- let delim;
- try {
- delim = prefs.getCharPref("cspHeaderDelim") || "ABE";
- } catch (e) {
- delim = `ABE${Math.random().toString().replace(".", "-")}`;
- prefs.setCharPref("cspHeaderDelim", delim);
- }
- let value = `${delim}; child-src 'self'; object-src 'none'; script-src 'none'; ${delim};`;
- return (this.cspHeaderValue = value);
- },
- enforceSandbox(channel, enforcing) {
- const CSP = "Content-Security-Policy";
- let value = this.cspHeaderValue;
- try {
- let currentPolicy = channel.getResponseHeader(CSP);
- if (currentPolicy.includes(value)) {
- if (enforcing) {
- return true;
- }
- channel.setResponseHeader(CSP, currentPolicy.replace(value, ''), false);
- return false;
- }
- } catch (e) {}
- if (enforcing) {
- try {
- channel.setResponseHeader(CSP, value, true);
- return true;
- }catch(e) {
- Cu.reportError(e);
- }
- }
- return false;
- },
- handleSandbox(channel) {
- this.enforceSandbox(channel, this.isSandboxed(channel));
- },
-
- updateRedirectChain: function(oldChannel, newChannel) {
- this._handleDownloadRedirection(oldChannel, newChannel);
-
- var redirectChain = this.getRedirectChain(oldChannel);
- redirectChain.push(oldChannel.URI);
- ABE.reqData(newChannel).redirectChain = redirectChain;
- },
-
- getRedirectChain: function(channel) {
- var rc = ABE.reqData(channel).redirectChain;
- if (!rc) {
- var origin = ABERequest.getOrigin(channel);
- rc = origin ? [origin] : [];
- rc.wrappedJSObject = rc;
- };
- return rc;
- },
-
- getOriginalOrigin: function(channel) {
- var rc = this.getRedirectChain(channel);
- return rc.length && rc[0] || null;
- },
-
- _handleDownloadRedirection: function(oldChannel, newChannel) {
- if (!ABE.reqData(oldChannel).preflight) return;
-
- var uri = oldChannel.URI;
- var newURI = newChannel.URI;
-
- if (uri.spec !== newURI.spec && // redirected, check if it same path and same domain or upper
- (uri.filePath !== newURI.filePath ||
- !(newURI.schemeIs("https") && this.isSubdomain(newURI.host, uri.host))
- )
- ) {
- var msg = "Illegal ABE rule redirection " + uri.spec + " -> " + newURI.spec;
- ABE.log(msg);
- oldChannel.cancel(NS_BINDING_ABORTED);
- throw new Error(msg);
- }
-
- ABE.reqData(oldChannel).preflight = true;
- },
-
-
- consoleDump: false,
- log: function(msg) {
- if (this.consoleDump) {
- if (msg.stack) msg = msg.message + "\n" + msg.stack;
- dump("[ABE] " + msg + "\n");
- }
- }
-}
-
-function ABERes(req) {
- this.request = req;
-}
-ABERes.SKIPPED = 0;
-ABERes.DONE = 1;
-ABERes.FATAL = 2;
-
-ABERes.prototype = {
- rulesets: null,
- lastRuleset: null,
- fatal: false
-}
-
-var ABEActions = {
- accept: function(req) {
- return ABERes.DONE;
- },
- deny: function(req) {
- IOUtil.abort(req.channel, true);
- return ABERes.FATAL;
- },
-
- _idempotentMethodsRx: /^(?:GET|HEAD|OPTIONS)$/i,
- anonymize: function(req) {
- var channel = req.channel;
- let cookie;
- try {
- cookie = channel.getRequestHeader("Cookie");
- } catch(e) {
- cookie = '';
- }
- IOUtil.anonymizeChannel(channel);
- let anonURI = IOUtil.anonymizeURI(req.destinationURI.clone(), cookie);
- let idempotent = this._idempotentMethodsRx.test(channel.requestMethod);
- if (idempotent && anonURI.spec === req.destinationURI.spec &&
- ABE.reqData(channel).anon) {// already anonymous
- return ABERes.SKIPPED;
- }
-
- req.replace(
- idempotent ? null : "GET",
- anonURI,
- function(replacement) {
- let channel = replacement.channel;
- ABE.reqData(channel).anon = true;
- IOUtil.anonymizeChannel(channel);
- replacement.open();
- },
- true
- );
-
- return ABERes.DONE;
- },
-
- sandbox: function(req) {
- ABE.setSandboxed(req.channel);
- return ABERes.DONE;
- }
-}
-
-
-function ABERuleset(name, source, timestamp) {
- this.name = name;
- this.site = name.indexOf(".") !== -1;
- this.source = source;
- this.empty = !source;
- this.timestamp = timestamp || Date.now();
- if (!this.empty) {
- try {
- // dirty hack
- var self = this;
- org.antlr.runtime.BaseRecognizer.prototype.emitErrorMessage = function(msg) {
- // we abort immediately to prevent infinite loops
- var m = msg.match(/^line (\d+)/i, msg);
- if (m) throw new Error(msg, parseInt(m[1]), self.name); // TODO: error console reporting w/ line num
- throw new Error(msg)
- };
-
- this._init(new ABEParser(new org.antlr.runtime.CommonTokenStream(
- new ABELexer(new org.antlr.runtime.ANTLRStringStream(source))))
- .ruleset().getTree());
- } catch(e) {
- if (this.errors) this.errors.push(e.message)
- else this.errors = [e.message];
- }
- }
-}
-
-ABERuleset.prototype = {
- site: false,
- empty: false,
- errors: null,
- disabled: false,
- rules: [],
- expires: 0,
-
- _init: function(tree) {
- var rule = null,
- predicate = null,
- accumulator = null,
- history = [],
- rules = [];
-
- walk(tree);
-
- if (!this.errors) this.rules = rules;
- rule = predicate = accumulator = history = null;
-
-
- function walk(tree) {
- var node, t;
- for (var j = 0, l = tree.getChildCount(); j < l; j++) {
- node = tree.getChild(j);
- examine(node);
- walk(node.getTree());
- }
- }
-
- function examine(node) {
- var t = node.getToken();
-
- switch(t.type) {
- case ABEParser.T_SITE:
- case ABEParser.EOF:
- if (rule) commit();
- if (t.type == ABEParser.T_SITE) {
- rule = { destinations: [], predicates: [] };
- accumulator = rule.destinations;
- }
- break;
- case ABEParser.T_ACTION:
- if (rule) {
- rule.predicates.push(predicate = { actions: [], methods: [], origins: [] });
- accumulator = predicate.actions;
- }
- break;
- case ABEParser.T_METHODS:
- accumulator = predicate.methods;
- break;
- case ABEParser.INC:
- if (!("inclusions" in predicate)) predicate.inclusions = [];
- break;
- case ABEParser.INC_TYPE:
- if ("inclusions" in predicate) predicate.inclusions.push(node.getText());
- break;
- break;
- case ABEParser.T_FROM:
- accumulator = predicate.origins;
- break;
- case ABEParser.COMMENT:
- case ABEParser.COMMA:
- case ABEParser.LPAR: case ABEParser.RPAR:
- break;
- default:
- if (accumulator) accumulator.push(node.getText());
- }
- }
-
- function commit() {
- rules.push(new ABERule(rule.destinations, rule.predicates));
- rule = null;
- }
- },
-
- lastMatch: null,
- check: function(req) {
- if (this.disabled) return '';
-
- var res;
- for (var r of this.rules) {
- res = r.check(req);
- if (res) {
- this.lastMatch = r;
- return res;
- }
- }
- return '';
- }
-}
-
-function ABERule(destinations, predicates) {
- this.destinations = destinations.join(" ");
- this.destination = new AddressMatcher(destinations.filter(this._destinationFilter, this).join(" "));
- this.predicates = predicates.map(ABEPredicate.create);
-}
-
-ABERule.prototype = {
- local: false,
-
- allDestinations: false,
- lastMatch: null,
- _destinationFilter: function(s) {
- switch(s) {
- case "SELF":
- return false; // this is illegal, should we throw an exception?
- case "LOCAL":
- return !(this.local = true);
- case "ALL":
- return !(this.allDestinations = true);
- }
- return true;
- },
-
- check: function(req) {
- if (!req.failed &&
- (this.allDestinations ||
- this.destination && this.destination.test(req.destination, req.canDoDNS, false) ||
- this.local && req.localDestination)
- ) {
- for (var p of this.predicates) {
- if (p.match(req)) {
- this.lastMatch = p;
- return p.action;
- }
- if (req.failed) break;
- }
- }
- return '';
- },
-
- toString: function() {
- var s = "Site " + this.destinations + "\n" + this.predicates.join("\n");
- this.toString = function() { return s; };
- return s;
- }
-}
-
-function ABEPredicate(p) {
- this.action = p.actions[0];
-
- switch(this.action) {
- case "Accept":
- this.permissive = true;
- break;
- case "Logout": case "Anon":
- this.action = 'Anonymize';
- break;
- }
-
- var methods = p.methods;
-
- if ("inclusions" in p) {
- this.inclusion = true;
-
- // rebuild method string for cosmetic reasons
- let incMethod = "INCLUSION";
- let ii = p.inclusions;
- let j = ii.length;
- if (j) {
- incMethod += "(" + ii.join(", ") + ")";
- let its = [];
- let map = this._inclusionTypesMap;
- while (j-- > 0) {
- let i = ii[j];
- if (i in map) {
- let t = map[i];
- if (typeof t === "number") its.push(t);
- else its.push.apply(its, t);
- } else its.push(0);
- }
- this.inclusionTypes = its;
- } else {
- this.inclusionTypes = null;
- }
-
- methods = p.methods.concat(incMethod);
- }
-
- this.methods = methods.join(" ");
-
- if (this.methods.length) {
- this.allMethods = false;
- var mm = p.methods.filter(this._methodFilter, this);
- if (mm.length) this.methodRx = new RegExp("^\\b(?:" + mm.join("|") + ")\\b$", "i");
- }
- this.origins = p.origins.join(" ");
- if (p.origins.length) {
- this.allOrigins = false;
- if (this.permissive) { // if Accept any, accept browser URLs
- p.origins.push("^(?:chrome|resource):");
- }
- this.origin = new AddressMatcher(p.origins.filter(this._originFilter, this).join(" "));
- }
-}
-ABEPredicate.create = function(p) { return new ABEPredicate(p); };
-ABEPredicate.prototype = {
- permissive: false,
-
- subdoc: false,
- self: false,
- sameDomain: false,
- sameBaseDomain: false,
- local: false,
-
- allMethods: true,
- allOrigins: true,
-
- methodRx: null,
- origin: null,
-
- inclusion: false,
- inclusionTypes: null,
-
- get _inclusionTypesMap() {
- delete this.__proto__._inclusionTypesMap;
- const CP = Ci.nsIContentPolicy;
- let map = {
- CSS: CP.TYPE_STYLESHEET,
- DOCUMENT: CP.TYPE_DOCUMENT, // placeholder, should never happen for inclusions
- DTD: CP.TYPE_DTD,
- FONT: CP.TYPE_FONT,
- IMAGE: [CP.TYPE_IMAGE, CP.TYPE_IMAGESET],
- MEDIA: CP.TYPE_MEDIA,
- OBJ: [CP.TYPE_OBJECT, CP.TYPE_OBJECT_SUBREQUEST],
- OBJSUB: CP.TYPE_OBJECT_SUBREQUEST,
- OTHER: [CP.TYPE_OTHER],
- SCRIPT: CP.TYPE_SCRIPT,
- SUBDOC: CP.TYPE_SUBDOCUMENT,
- UNKNOWN: CP.TYPE_OTHER,
- XHR: [CP.TYPE_XMLHTTPREQUEST, CP.TYPE_FETCH],
- };
- let mappedTypes = new Set();
- for (let k in map) {
- let v = map[k];
- if (Array.isArray(v)) {
- for (let t of v) mappedTypes.add(t);
- } else {
- mappedTypes.add(v);
- }
- }
-
- let cpTypes = Object.keys(CP).filter(k => k.startsWith("TYPE_") && !k.startsWith("TYPE_INTERNAL_"));
- for (let key of cpTypes) {
- let name = key.substring(5);
- if (!(name in map)) {
- let type = CP[key];
- map[name] = type;
- if (!mappedTypes.has(type)) map.OTHER.push(type);
- }
- }
- return (this.__proto__._inclusionTypesMap = map);
- },
-
- _methodFilter: function(m) {
- switch(m) {
- case "SUB":
- return !(this.subdoc = true);
- case "ALL":
- return !(this.allMethods = true);
- }
- return true;
- },
-
- _originFilter: function(s) {
- switch(s) {
- case "SELF":
- return !(this.self = true);
- case "SELF+":
- return !(this.sameDomain = true);
- case "SELF++":
- return !(this.sameBaseDomain = true);
- case "LOCAL":
- return !(this.local = true);
- case "ALL":
- return !(this.allOrigins = true);
- }
- return true;
- },
-
- match: function(req) {
- return (this.allMethods || this.subdoc && req.isSubdoc ||
- this.inclusion && req.isOfType(this.inclusionTypes) ||
- this.methodRx && this.methodRx.test(req.method)) &&
- (this.allOrigins ||
- this.self && req.isSelf ||
- this.sameDomain && req.isSameDomain ||
- this.sameBaseDomain && req.isSameBaseDomain ||
- (this.permissive
- ? req.matchAllOrigins(this.origin)
- : req.matchSomeOrigins(this.origin)) || this.local && req.localOrigin
- );
- },
-
- toString: function() {
- var s = this.action;
- if (this.methods) s += " " + this.methods;
- if (this.origins) s += " from " + this.origins;
- this.toString = function() { return s; };
- return s;
- }
-}
-
-function ABEPolicyChannel(origin, destination, type) {
- this.originURI = origin;
- this.URI = destination;
- this.type = type;
-}
-ABEPolicyChannel.prototype = {
- requestMethod: "GET",
- cancelled: false,
- loadFlags: 0,
- cancel: function() {
- this.cancelled = true;
- }
-}
-
-function ABERequest(channel) {
- this._init(channel);
-}
-
-ABERequest.serial = 0;
-
-ABERequest.getOrigin = function(channel) {
- let u = ABE.reqData(channel).origin;
- return (u instanceof Ci.nsIURI) ? u : null;
-},
-ABERequest.getLoadingChannel = function(window) {
- return window && ("__loadingChannel__" in window) && window.__loadingChannel__;
-},
-
-ABERequest.storeOrigin = function(channel, originURI) {
- ABE.reqData(channel).origin = originURI;
-},
-
-ABERequest.clear = function(channel, window) {
- // fille me as needed
-}
-
-ABERequest.count = 0;
-
-
-ABERequest.prototype = Lang.memoize({
- external: false,
- failed: false,
- checkFlags: 0,
- deferredDNS: true,
- replaced: false,
- dnsNotified: false,
-
- _init: function(channel) {
- this.serial = ABERequest.serial++;
- this.channel = channel;
- this.method = channel.requestMethod;
- this.destinationURI = IOUtil.unwrapURL(channel.URI);
- this.destination = this.destinationURI.spec;
- this.destinationDomain = this.destinationURI.host;
-
- this.early = channel instanceof ABEPolicyChannel;
- this.isDoc = !!(channel.loadFlags & channel.LOAD_DOCUMENT_URI);
-
- if (this.isDoc) {
- var w = this.window;
- if (w) try {
- w.__loadingChannel__ = channel;
- } catch (e) {}
- }
-
- var ou = ABERequest.getOrigin(channel);
- if (ou) {
- this.originURI = ou;
- this.origin = ou.spec;
- this.replaced = true;
- } else {
- if (this.early) ou = channel.originURI;
- else {
- let loadInfo = channel.loadInfo;
- if (loadInfo) {
- let principal = loadInfo.triggeringPrincipal || loadInfo.loadingPrincipal;
- ou = principal && (principal.URI || principal.originNoSuffix || principal.origin);
- } else {
- dump(`loadInfo is null for channel ${channel.name}\n`);
- }
- }
-
- if (ou) {
- if (ou.spec) {
- ou = IOUtil.unwrapURL(ou);
- this.origin = ou.spec;
- } else {
- this.origin = ou;
- try {
- ou = IOS.newURI(ou, null, null);
- } catch (e) {
- ou = ABE.BROWSER_URI;
- }
- }
- } else {
- ou = ABE.BROWSER_URI;
- }
-
- ABERequest.storeOrigin(channel, this.originURI = ou);
- }
- },
-
- replace: function(newMethod, newURI, callback, forceInternal) {
- new ChannelReplacement(this.channel, newURI, newMethod)
- .replace(!forceInternal && (newMethod || newURI), callback);
- return true;
- },
-
- isBrowserURI: function(uri) {
- return uri.schemeIs("chrome") || uri.schemeIs("resource") || uri.schemeIs("about") || uri.schemeIs("moz-extension");
- },
-
- isLocal: function(uri, all) {
- return DNS.isLocalURI(uri, all);
- },
-
- isOfType: function(types) {
- if (types === null) return this.type !== Ci.nsIContentPolicy.TYPE_DOCUMENT;
- return (typeof types === "number")
- ? this.type === types
- : types.indexOf(this.type) !== -1;
- },
-
- _checkLocalOrigin: function(uri) {
- try {
- return !this.failed && uri && (this.isBrowserURI(uri) || this.isLocal(uri, true)); // we cache external origins to mitigate DNS rebinding
- } catch(e) {
- ABE.log("Local origin DNS check failed for " + uri.spec + ": " + e);
- try {
- if (this.destinationURI.host == uri.host) {
- this.channel.cancel(NS_ERROR_UNKNOWN_HOST);
- this.failed = true;
- }
- } catch(e) {
- }
- return false;
- }
- },
-
- _checkSelf: function(originURI) {
- return originURI && (this.isBrowserURI(originURI) || originURI.prePath == this.destinationURI.prePath);
- },
-
- _checkSameDomain: function(originURI) {
- try {
- return originURI && this.isBrowserURI(originURI) || originURI.host == this.destinationDomain;
- } catch(e) {}
- return false;
- },
-
- _checkSameBaseDomain: function(originURI) {
- try {
- return originURI && this.isBrowserURI(originURI) || IOUtil.TLDService.getBaseDomainFromHost(originURI.host) == this.destinationBaseDomain;
- } catch(e) {}
- return false;
- },
-
- matchAllOrigins: function(matcher) {
- var canDoDNS = this.canDoDNS;
- return (canDoDNS && matcher.netMatching) ?
- this.redirectChain.every((uri) => matcher.testURI(uri, canDoDNS, true))
- : this.redirectChain.every(matcher.testURI, matcher)
- ;
- },
-
- matchSomeOrigins: function(matcher) {
- var canDoDNS = this.canDoDNS;
- return (canDoDNS && matcher.netMatching)
- ? this.redirectChain.some(uri => matcher.testURI(uri, canDoDNS, false))
- : this.redirectChain.some(matcher.testURI, matcher)
- ;
- },
-
- toString: function() {
- var s = "{" + this.method + " " + this.destination + " <<< " +
- this.redirectChain.reverse().map(function(uri) { return uri.spec; })
- .join(", ") + " - " + this.type + "}";
- this.toString = function() { return s; }
- return s;
- }
-},
-// lazy properties
-{
- canDoDNS: function() {
- return (this.channel instanceof Ci.nsIChannel) && // we want to prevent sync DNS resolution for resources we didn't already looked up
- IOUtil.canDoDNS(this.channel);
- },
- localOrigin: function() {
- return this.canDoDNS && this.redirectChain.every(this._checkLocalOrigin, this);
- },
- localDestination: function() {
- try {
- return !this.failed && this.canDoDNS && this.isLocal(this.destinationURI, false);
- } catch(e) {
- ABE.log("Local destination DNS check failed for " + this.destination + " from "+ this.origin + ": " + e);
- this.channel.cancel(NS_ERROR_UNKNOWN_HOST);
- this.failed = true;
- return false;
- }
- },
- isSelf: function() {
- return this._checkSelf(this.originURI) && this.redirectChain.every(this._checkSelf, this);
- },
- isSameDomain: function() {
- return this.isSelf || this.redirectChain.every(this._checkSameDomain, this);
- },
- isSameBaseDomain: function() {
- return this.isSameDomain || this.redirectChain.every(this._checkSameBaseDomain, this);
- },
-
- destinationBaseDomain: function() {
- try {
- return IOUtil.TLDService.getBaseDomainFromHost(this.destinationDomain);
- } catch(e) {}
- return this.destinationDomain;
- },
-
- isSubdoc: function() {
- if (this.isDoc) {
- var w = this.window;
- return (w != w.top);
- }
- var channel = this.channel;
- return !!(channel.loadFlags & channel.LOAD_CALL_CONTENT_SNIFFERS);
- },
- redirectChain: function() {
- return ABE.getRedirectChain(this.channel);
- },
-
- window: function() {
- return IOUtil.findWindow(this.channel);
- },
-
- type: function() {
- try {
- return this.early ? this.channel.type : this.channel.loadInfo.externalContentPolicyType ||
- PolicyState.extract(this.channel).contentType;
- } catch(e) {
- ABE.log("Error retrieving type of " + this.destination + ": " + e); // should happen for favicons only
- }
- return Ci.nsIContentPolicy.TYPE_OTHER;
- }
-
-}
-); // end memoize
-
-
-var ABEStorage = {
- _updating: true,
- _dirty: true,
- init: function(prefs) {
- this.prefs = prefs;
- if (!prefs.getIntPref("migration")) try {
- prefs.setIntPref("migration", 1);
- this._migrateLegacyFiles();
- } catch (e) {}
- this.loadRules();
- for (let k of prefs.getChildList("", {})) this.observe(prefs, null, k);
- prefs.addObserver("", this, true);
- },
- dispose() {
- try {
- this.prefs.removeObserver("", this, true);
- } catch (e) {
- }
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
- observe: function(prefs, topic, name) {
- if (typeof ABE === "undefined") {
- prefs.removeObserver("", this, true);
- return;
- }
- switch(name) {
- case "wanIpAsLocal":
- WAN.enabled = prefs.getBoolPref(name);
- break;
- case "wanIpCheckURL":
- WAN.checkURL = prefs.getCharPref(name);
- break;
- case "localExtras":
- DNS.localExtras = AddressMatcher.create(prefs.getCharPref(name));
- break;
- case "enabled":
- case "siteEnabled":
- case "allowRulesetRedir":
- case "skipBrowserRequests":
- ABE[name] = prefs.getBoolPref(name);
- break;
- case "disabledRulesetNames":
- ABE[name] = prefs.getCharPref(name);
- break;
- default:
- if (!this._updating && name.indexOf("rulesets.") === 0) {
- this._updating = this._dirty = true;
- Thread.asap(this.loadRules, this);
- }
- }
- },
-
- get _rulesetPrefs() { return this.prefs.getChildList("rulesets", {}); },
- clear: function() {
- const prefs = this.prefs;
- const keys = this._rulesetPrefs;
- for (let j = keys.length; j-- > 0;) {
- let k = keys[j];
- if (prefs.prefHasUserValue(k)) {
- dump("Resetting ABE ruleset " + k + "\n");
- try {
- prefs.clearUserPref(k);
- } catch(e) { dump(e + "\n") }
- }
- }
- },
-
- loadRules: function() {
- this._updating = false;
- if (!this._dirty) return;
- this._dirty = false;
-
- const keys = this._rulesetPrefs;
- keys.sort();
- const prefs = this.prefs;
- var disabled = ABE.disabledRulesetNames;
- ABE.clear();
- for (let j = 0, len = keys.length; j < len; j++) {
- let k = keys[j];
- ABE.parse(k.replace("rulesets.", ""), COMPAT.getStringPref(prefs, k));
- }
- ABE.disabledRulesetNames = disabled;
- OS.notifyObservers(ABE, ABE.RULES_CHANGED_TOPIC, null);
- },
-
- saveRuleset: function(name, source) {
- COMPAT.setStringPref(this.prefs, "rulesets." + name, source);
- },
-
- persist: function() {
- ABE.prefService.savePrefFile(null);
- },
-
- _migrateLegacyFiles: function() {
- var ret = 0;
- try {
- var dir = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
- dir.append("ABE");
- dir.append("rules");
-
- if (dir.exists()) {
-
- dump("Migrating legacy ABE ruleset files... ")
-
- var entries = dir.directoryEntries;
- while(entries.hasMoreElements()) {
- let f = entries.getNext();
- if (f instanceof Ci.nsIFile) {
- let fname = f.leafName;
- if (/^[^\.\s]*\.abe$/i.test(fname)) {
- try {
- this.saveRuleset(fname.replace(/\.abe$/i, ''), IO.readFile(f));
- ret++;
- } catch(e) {
- dump(e + "\n");
- }
- }
- }
- }
- this.persist();
- }
- dump(ret + " migrated.\n")
- } catch(e) {
- dump("Error migrating legacy ABE ruleset files: " + e + "\n");
- }
- return ret;
- }
-}
-
-var WAN = {
- IP_CHANGE_TOPIC: "abe:wan-iface-ip-changed",
- ip: null,
- ipMatcher: null,
- fingerprint: '',
- findMaxInterval: 86400000, // 1 day
- checkInterval: 14400000, // 4 hours
- fingerInterval: 900000, // 1/4 hour
- checkURL: "https://secure.informaction.com/ipecho/",
- lastFound: 0,
- lastCheck: 0,
- skipIfProxied: true,
- noResource: false,
- logging: true,
- fingerprintLogging: false,
- fingerprintUA: "Mozilla/5.0 (ABE, https://noscript.net/abe/wan)",
- fingerprintHeader: "X-ABE-Fingerprint",
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-
- log: function(msg) {
- var cs = Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService);
- return (this.log = function(msg) {
- if (this.logging) cs.logStringMessage("[ABE WAN] " + msg);
- })(msg);
-
- },
-
- _enabled: false,
- _timer: null,
- _observing: false,
- get enabled() {
- return this._enabled;
- },
- set enabled(b) {
- if (!IPC.parent) return false;
-
- if (this._timer) this._timer.cancel();
- if (b) {
- const t = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- t.initWithCallback({
- notify: function() { WAN._periodic() },
- context: null
- }, this.checkInterval, t.TYPE_REPEATING_SLACK);
- this._timer = t;
- Thread.delay(this._periodic, 1000, this, [this._enabled != b]);
- if (!this._observing) {
- this._observing = true;
- OS.addObserver(this, "network:offline-status-changed", true);
- OS.addObserver(this, "wake_notification", true);
- }
- } else {
- this._timer = this.ip = this.ipMatcher = null;
- if (this._observing) {
- this._observing = false;
- OS.removeObserver(this, "network:offline-status-changed");
- OS.removeObserver(this, "wake_notification");
- }
- }
- return (this._enabled = b);
- },
- _observingHTTP: false,
-
- observe: function(subject, topic, data) {
-
- if (!this.enabled) return;
-
- switch(topic) {
- case "wake_notification":
- if (!this._observingHTTP) OS.addObserver(this, "http-on-examine-response", true);
- return;
- case "http-on-examine-response":
- OS.removeObserver(this, "http-on-examine-response");
- this._observingHTTP = false;
- break;
- case "network:offline-status-changed":
- if (data === "online")
- break;
- default:
- return;
- }
-
- this._periodic(true);
- },
-
- _periodic: function(forceFind) {
- if (forceFind) this.lastFound = 0;
-
- var t = Date.now();
- if (forceFind ||
- t - this.lastFound > this.findMaxInterval ||
- t - this.lastCheck > this.checkInterval) {
- this.findIP(this._findCallback);
- } else if (this.fingerprint) {
- this._takeFingerprint(this.ip, this._fingerprintCallback);
- }
- this.lastCheck = t;
- },
-
- _findCallback: function(ip) {
- WAN._takeFingerprint(ip);
- },
- _fingerprintCallback: function(fingerprint, ip) {
- if (fingerprint != WAN.fingerprint) {
- WAN.log("Resource reacheable on WAN IP " + ip + " changed!");
- if (ip == WAN.ip) WAN._periodic(true);
- }
- },
-
- _takeFingerprint: function(ip, callback) {
- if (!ip) {
- this.log("Can't fingerprint a null IP");
- return;
- }
- var url = "http://" + (ip.indexOf(':') > -1 ? "[" + ip + "]" : ip);
- var xhr = this._createAnonXHR(url);
- var ch = xhr.channel;
- ch.setRequestHeader("User-Agent", this.fingerprintUA, false);
- ch.loadFlags = ch.loadFlags & ~ch.LOAD_ANONYMOUS; // prevents redirect loops on some routers
- var self = this;
- xhr.addEventListener("readystatechange", function() {
-
- if (xhr.readyState == 4) {
-
- var fingerprint = '';
- try {
- const ch = xhr.channel;
-
- if (!ch.status) fingerprint =
- xhr.status + " " + xhr.statusText + "\n" +
- (xhr.getAllResponseHeaders() + "\n" + xhr.responseText)
- .replace(/\d/g, '').replace(/\b[a-f]+\b/gi, ''); // remove decimal and hex noise
- } catch(e) {
- self.log(e);
- }
-
- if (self.fingerprintLogging)
- self.log("Fingerprint for " + url + " = " + fingerprint);
-
- if (fingerprint && /^\s*Off\s*/i.test(xhr.getResponseHeader(self.fingerprintHeader)))
- fingerprint = '';
-
- if (callback) callback(fingerprint, ip);
- self.fingerprint = fingerprint;
- }
- }, false);
- xhr.send(null);
-
- },
-
- _createAnonXHR: function(url, noproxy) {
- var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
- xhr.mozBackgroundRequest = true;
- xhr.open("GET", url, true);
- const ch = xhr.channel;
- const proxyInfo = noproxy && IOUtil.getProxyInfo(ch);
- if (!proxyInfo || proxyInfo.type == "direct" || proxyInfo.host && DNS.isLocalHost(proxyInfo.host)) {
- if ((ch instanceof Ci.nsIHttpChannel)) {
- // cleanup headers
- this._requestHeaders(ch).forEach(function(h) {
- if (h != 'Host') ch.setRequestHeader(h, '', false); // clear header
- });
- }
- ch.loadFlags = ch.LOAD_BYPASS_CACHE | ch.LOAD_ANONYMOUS;
- } else xhr = null;
- return xhr;
- },
-
- _callbacks: null,
- _finding: false,
- findIP: function(callback) {
- if (callback) (this._callbacks = this._callbacks || []).push(callback);
- if (IOS.offline) {
- this._findIPDone(null, "offline");
- return;
- }
- if (this._finding) return;
- this._finding = true;
- var sent = false;
- try {
- var xhr = this._createAnonXHR(this.checkURL,this.skipIfProxied);
- if (xhr) {
- let self = this;
- xhr.addEventListener("readystatechange", function() {
- if (xhr.readyState == 4) {
- let ip = null;
- if (xhr.status == 200) {
- ip = xhr.responseText.replace(/\s+/g, '');
- if (!/^[\da-f\.:]+$/i.test(ip)) ip = null;
- }
- self._findIPDone(ip, xhr.responseText);
- }
- }, false);
- xhr.send(null);
- this.log("Trying to detect WAN IP...");
- sent = true;
- }
- } catch(e) {
- this.log(e + " - " + e.stack)
- } finally {
- this._finding = sent;
- if (!sent) this._findIPDone(null);
- }
- },
-
- _findIPDone: function(ip) {
- let ipMatcher = AddressMatcher.create(ip);
- if (!ipMatcher) ip = null;
- if (ip) {
- try {
- if (this._callbacks) {
- for (let cb of this._callbacks) cb(ip);
- this._callbacks = null;
- }
- } catch(e) {
- this.log(e);
- }
-
- if (ip != this.ip) {
- OS.notifyObservers(this, this.IP_CHANGE_TOPIC, ip);
- }
-
- this.ip = ip;
- this.ipMatcher = ipMatcher;
- this.lastFound = Date.now();
-
- this.log("Detected WAN IP " + ip);
- } else {
- this.lastFound = 0;
- this.fingerprint = '';
- this.log("WAN IP not detected!");
- }
-
- this._finding = false;
- },
-
-
- _requestHeaders: function(ch) {
- var hh = [];
- if (ch instanceof Ci.nsIHttpChannel)
- ch.visitRequestHeaders({
- visitHeader: function(name, value) { hh.push(name); }
- });
- return hh;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/ABELexer.js b/extensions/noscript/chrome/content/noscript/ABELexer.js
deleted file mode 100644
index e4f811e..0000000
--- a/extensions/noscript/chrome/content/noscript/ABELexer.js
+++ /dev/null
@@ -1,1378 +0,0 @@
-// $ANTLR 3.1.1 ABE.g 2017-07-26 00:44:40
-
-var ABELexer = function(input, state) {
-// alternate constructor @todo
-// public ABELexer(CharStream input)
-// public ABELexer(CharStream input, RecognizerSharedState state) {
- if (!state) {
- state = new org.antlr.runtime.RecognizerSharedState();
- }
-
- (function(){
- }).call(this);
-
- this.dfa8 = new ABELexer.DFA8(this);
- this.dfa11 = new ABELexer.DFA11(this);
- ABELexer.superclass.constructor.call(this, input, state);
-
-
-};
-
-org.antlr.lang.augmentObject(ABELexer, {
- INC_TYPE: 11,
- T_FROM: 14,
- T__29: 29,
- GLOB: 17,
- HTTPVERB: 7,
- T__28: 28,
- A_LOGOUT: 21,
- A_DENY: 20,
- T_ACTION: 4,
- SUB: 8,
- T_METHODS: 5,
- EOF: -1,
- URI: 18,
- T__30: 30,
- INC: 9,
- WS: 26,
- LPAR: 10,
- COMMA: 12,
- URI_PART: 25,
- A_SANDBOX: 22,
- URI_START: 24,
- ALL: 6,
- A_ACCEPT: 23,
- REGEXP: 16,
- LOCATION: 19,
- RPAR: 13,
- T_SITE: 15,
- COMMENT: 27
-});
-
-(function(){
-var HIDDEN = org.antlr.runtime.Token.HIDDEN_CHANNEL,
- EOF = org.antlr.runtime.Token.EOF;
-org.antlr.lang.extend(ABELexer, org.antlr.runtime.Lexer, {
- INC_TYPE : 11,
- T_FROM : 14,
- T__29 : 29,
- GLOB : 17,
- HTTPVERB : 7,
- T__28 : 28,
- A_LOGOUT : 21,
- A_DENY : 20,
- T_ACTION : 4,
- SUB : 8,
- T_METHODS : 5,
- EOF : -1,
- URI : 18,
- T__30 : 30,
- INC : 9,
- WS : 26,
- LPAR : 10,
- COMMA : 12,
- URI_PART : 25,
- A_SANDBOX : 22,
- URI_START : 24,
- ALL : 6,
- A_ACCEPT : 23,
- REGEXP : 16,
- LOCATION : 19,
- RPAR : 13,
- T_SITE : 15,
- COMMENT : 27,
- getGrammarFileName: function() { return "ABE.g"; }
-});
-org.antlr.lang.augmentObject(ABELexer.prototype, {
- // $ANTLR start T__28
- mT__28: function() {
- try {
- var _type = this.T__28;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:7:7: ( 'SELF' )
- // ABE.g:7:9: 'SELF'
- this.match("SELF");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "T__28",
-
- // $ANTLR start T__29
- mT__29: function() {
- try {
- var _type = this.T__29;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:8:7: ( 'SELF+' )
- // ABE.g:8:9: 'SELF+'
- this.match("SELF+");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "T__29",
-
- // $ANTLR start T__30
- mT__30: function() {
- try {
- var _type = this.T__30;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:9:7: ( 'SELF++' )
- // ABE.g:9:9: 'SELF++'
- this.match("SELF++");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "T__30",
-
- // $ANTLR start T_SITE
- mT_SITE: function() {
- try {
- var _type = this.T_SITE;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:27:11: ( ( 'Site' | 'Request' ) )
- // ABE.g:27:13: ( 'Site' | 'Request' )
- // ABE.g:27:13: ( 'Site' | 'Request' )
- var alt1=2;
- var LA1_0 = this.input.LA(1);
-
- if ( (LA1_0=='S') ) {
- alt1=1;
- }
- else if ( (LA1_0=='R') ) {
- alt1=2;
- }
- else {
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 1, 0, this.input);
-
- throw nvae;
- }
- switch (alt1) {
- case 1 :
- // ABE.g:27:14: 'Site'
- this.match("Site");
-
-
-
- break;
- case 2 :
- // ABE.g:27:23: 'Request'
- this.match("Request");
-
-
-
- break;
-
- }
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "T_SITE",
-
- // $ANTLR start T_FROM
- mT_FROM: function() {
- try {
- var _type = this.T_FROM;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:28:11: ( ( 'f' | 'F' ) 'rom' )
- // ABE.g:28:13: ( 'f' | 'F' ) 'rom'
- if ( this.input.LA(1)=='F'||this.input.LA(1)=='f' ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
- this.match("rom");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "T_FROM",
-
- // $ANTLR start A_DENY
- mA_DENY: function() {
- try {
- var _type = this.A_DENY;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:29:11: ( 'Deny' )
- // ABE.g:29:13: 'Deny'
- this.match("Deny");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "A_DENY",
-
- // $ANTLR start A_LOGOUT
- mA_LOGOUT: function() {
- try {
- var _type = this.A_LOGOUT;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:30:11: ( 'Logout' | 'Anon' ( 'ymize' )? )
- var alt3=2;
- var LA3_0 = this.input.LA(1);
-
- if ( (LA3_0=='L') ) {
- alt3=1;
- }
- else if ( (LA3_0=='A') ) {
- alt3=2;
- }
- else {
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 3, 0, this.input);
-
- throw nvae;
- }
- switch (alt3) {
- case 1 :
- // ABE.g:30:13: 'Logout'
- this.match("Logout");
-
-
-
- break;
- case 2 :
- // ABE.g:30:24: 'Anon' ( 'ymize' )?
- this.match("Anon");
-
- // ABE.g:30:31: ( 'ymize' )?
- var alt2=2;
- var LA2_0 = this.input.LA(1);
-
- if ( (LA2_0=='y') ) {
- alt2=1;
- }
- switch (alt2) {
- case 1 :
- // ABE.g:30:31: 'ymize'
- this.match("ymize");
-
-
-
- break;
-
- }
-
-
-
- break;
-
- }
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "A_LOGOUT",
-
- // $ANTLR start A_SANDBOX
- mA_SANDBOX: function() {
- try {
- var _type = this.A_SANDBOX;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:31:11: ( 'Sandbox' )
- // ABE.g:31:13: 'Sandbox'
- this.match("Sandbox");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "A_SANDBOX",
-
- // $ANTLR start A_ACCEPT
- mA_ACCEPT: function() {
- try {
- var _type = this.A_ACCEPT;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:32:11: ( 'Accept' )
- // ABE.g:32:13: 'Accept'
- this.match("Accept");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "A_ACCEPT",
-
- // $ANTLR start URI_START
- mURI_START: function() {
- try {
- // ABE.g:34:20: ( 'a' .. 'z' | '0' .. '9' )
- // ABE.g:
- if ( (this.input.LA(1)>='0' && this.input.LA(1)<='9')||(this.input.LA(1)>='a' && this.input.LA(1)<='z') ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
-
-
-
- }
- finally {
- }
- },
- // $ANTLR end "URI_START",
-
- // $ANTLR start URI_PART
- mURI_PART: function() {
- try {
- // ABE.g:35:20: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' | '-' | '.' | '[' | ']' | ':' | '/' | '@' | '~' | ';' | ',' | '?' | '&' | '=' | '%' | '#' )
- // ABE.g:
- if ( this.input.LA(1)=='#'||(this.input.LA(1)>='%' && this.input.LA(1)<='&')||(this.input.LA(1)>=',' && this.input.LA(1)<=';')||this.input.LA(1)=='='||(this.input.LA(1)>='?' && this.input.LA(1)<='[')||this.input.LA(1)==']'||this.input.LA(1)=='_'||(this.input.LA(1)>='a' && this.input.LA(1)<='z')||this.input.LA(1)=='~' ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
-
-
-
- }
- finally {
- }
- },
- // $ANTLR end "URI_PART",
-
- // $ANTLR start LOCATION
- mLOCATION: function() {
- try {
- var _type = this.LOCATION;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:38:11: ( 'LOCAL' )
- // ABE.g:38:13: 'LOCAL'
- this.match("LOCAL");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "LOCATION",
-
- // $ANTLR start URI
- mURI: function() {
- try {
- var _type = this.URI;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:39:11: ( URI_START ( URI_PART )+ )
- // ABE.g:39:13: URI_START ( URI_PART )+
- this.mURI_START();
- // ABE.g:39:23: ( URI_PART )+
- var cnt4=0;
- loop4:
- do {
- var alt4=2;
- var LA4_0 = this.input.LA(1);
-
- if ( (LA4_0=='#'||(LA4_0>='%' && LA4_0<='&')||(LA4_0>=',' && LA4_0<=';')||LA4_0=='='||(LA4_0>='?' && LA4_0<='[')||LA4_0==']'||LA4_0=='_'||(LA4_0>='a' && LA4_0<='z')||LA4_0=='~') ) {
- alt4=1;
- }
-
-
- switch (alt4) {
- case 1 :
- // ABE.g:39:23: URI_PART
- this.mURI_PART();
-
-
- break;
-
- default :
- if ( cnt4 >= 1 ) {
- break loop4;
- }
- var eee = new org.antlr.runtime.EarlyExitException(4, this.input);
- throw eee;
- }
- cnt4++;
- } while (true);
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "URI",
-
- // $ANTLR start GLOB
- mGLOB: function() {
- try {
- var _type = this.GLOB;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:40:11: ( ( URI_START | '*' | '.' ) ( URI_PART | '*' )* )
- // ABE.g:40:13: ( URI_START | '*' | '.' ) ( URI_PART | '*' )*
- if ( this.input.LA(1)=='*'||this.input.LA(1)=='.'||(this.input.LA(1)>='0' && this.input.LA(1)<='9')||(this.input.LA(1)>='a' && this.input.LA(1)<='z') ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
- // ABE.g:40:37: ( URI_PART | '*' )*
- loop5:
- do {
- var alt5=2;
- var LA5_0 = this.input.LA(1);
-
- if ( (LA5_0=='#'||(LA5_0>='%' && LA5_0<='&')||LA5_0=='*'||(LA5_0>=',' && LA5_0<=';')||LA5_0=='='||(LA5_0>='?' && LA5_0<='[')||LA5_0==']'||LA5_0=='_'||(LA5_0>='a' && LA5_0<='z')||LA5_0=='~') ) {
- alt5=1;
- }
-
-
- switch (alt5) {
- case 1 :
- // ABE.g:
- if ( this.input.LA(1)=='#'||(this.input.LA(1)>='%' && this.input.LA(1)<='&')||this.input.LA(1)=='*'||(this.input.LA(1)>=',' && this.input.LA(1)<=';')||this.input.LA(1)=='='||(this.input.LA(1)>='?' && this.input.LA(1)<='[')||this.input.LA(1)==']'||this.input.LA(1)=='_'||(this.input.LA(1)>='a' && this.input.LA(1)<='z')||this.input.LA(1)=='~' ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
-
-
- break;
-
- default :
- break loop5;
- }
- } while (true);
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "GLOB",
-
- // $ANTLR start REGEXP
- mREGEXP: function() {
- try {
- var _type = this.REGEXP;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:41:11: ( '^' (~ '\\n' )+ )
- // ABE.g:41:13: '^' (~ '\\n' )+
- this.match('^');
- // ABE.g:41:17: (~ '\\n' )+
- var cnt6=0;
- loop6:
- do {
- var alt6=2;
- var LA6_0 = this.input.LA(1);
-
- if ( ((LA6_0>='\u0000' && LA6_0<='\t')||(LA6_0>='\u000B' && LA6_0<='\uFFFF')) ) {
- alt6=1;
- }
-
-
- switch (alt6) {
- case 1 :
- // ABE.g:41:17: ~ '\\n'
- if ( (this.input.LA(1)>='\u0000' && this.input.LA(1)<='\t')||(this.input.LA(1)>='\u000B' && this.input.LA(1)<='\uFFFF') ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
-
-
- break;
-
- default :
- if ( cnt6 >= 1 ) {
- break loop6;
- }
- var eee = new org.antlr.runtime.EarlyExitException(6, this.input);
- throw eee;
- }
- cnt6++;
- } while (true);
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "REGEXP",
-
- // $ANTLR start ALL
- mALL: function() {
- try {
- var _type = this.ALL;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:43:11: ( 'ALL' )
- // ABE.g:43:13: 'ALL'
- this.match("ALL");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "ALL",
-
- // $ANTLR start SUB
- mSUB: function() {
- try {
- var _type = this.SUB;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:44:11: ( 'SUB' )
- // ABE.g:44:13: 'SUB'
- this.match("SUB");
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "SUB",
-
- // $ANTLR start INC
- mINC: function() {
- try {
- var _type = this.INC;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:45:11: ( 'INC' ( 'LUSION' )? )
- // ABE.g:45:13: 'INC' ( 'LUSION' )?
- this.match("INC");
-
- // ABE.g:45:19: ( 'LUSION' )?
- var alt7=2;
- var LA7_0 = this.input.LA(1);
-
- if ( (LA7_0=='L') ) {
- alt7=1;
- }
- switch (alt7) {
- case 1 :
- // ABE.g:45:19: 'LUSION'
- this.match("LUSION");
-
-
-
- break;
-
- }
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "INC",
-
- // $ANTLR start HTTPVERB
- mHTTPVERB: function() {
- try {
- var _type = this.HTTPVERB;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:46:11: ( 'GET' | 'POST' | 'PUT' | 'HEAD' | 'PATCH' | 'DELETE' | 'TRACE' | 'OPTIONS' )
- var alt8=8;
- alt8 = this.dfa8.predict(this.input);
- switch (alt8) {
- case 1 :
- // ABE.g:46:13: 'GET'
- this.match("GET");
-
-
-
- break;
- case 2 :
- // ABE.g:46:21: 'POST'
- this.match("POST");
-
-
-
- break;
- case 3 :
- // ABE.g:46:30: 'PUT'
- this.match("PUT");
-
-
-
- break;
- case 4 :
- // ABE.g:46:38: 'HEAD'
- this.match("HEAD");
-
-
-
- break;
- case 5 :
- // ABE.g:46:47: 'PATCH'
- this.match("PATCH");
-
-
-
- break;
- case 6 :
- // ABE.g:46:57: 'DELETE'
- this.match("DELETE");
-
-
-
- break;
- case 7 :
- // ABE.g:46:68: 'TRACE'
- this.match("TRACE");
-
-
-
- break;
- case 8 :
- // ABE.g:46:78: 'OPTIONS'
- this.match("OPTIONS");
-
-
-
- break;
-
- }
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "HTTPVERB",
-
- // $ANTLR start INC_TYPE
- mINC_TYPE: function() {
- try {
- var _type = this.INC_TYPE;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:47:11: ( 'A' .. 'Z' ( 'A' .. 'Z' | 'A' .. 'Z' '_' 'A' .. 'Z' )+ )
- // ABE.g:47:13: 'A' .. 'Z' ( 'A' .. 'Z' | 'A' .. 'Z' '_' 'A' .. 'Z' )+
- this.matchRange('A','Z');
- // ABE.g:47:22: ( 'A' .. 'Z' | 'A' .. 'Z' '_' 'A' .. 'Z' )+
- var cnt9=0;
- loop9:
- do {
- var alt9=3;
- var LA9_0 = this.input.LA(1);
-
- if ( ((LA9_0>='A' && LA9_0<='Z')) ) {
- var LA9_2 = this.input.LA(2);
-
- if ( (LA9_2=='_') ) {
- alt9=2;
- }
-
- else {
- alt9=1;
- }
-
- }
-
-
- switch (alt9) {
- case 1 :
- // ABE.g:47:23: 'A' .. 'Z'
- this.matchRange('A','Z');
-
-
- break;
- case 2 :
- // ABE.g:47:34: 'A' .. 'Z' '_' 'A' .. 'Z'
- this.matchRange('A','Z');
- this.match('_');
- this.matchRange('A','Z');
-
-
- break;
-
- default :
- if ( cnt9 >= 1 ) {
- break loop9;
- }
- var eee = new org.antlr.runtime.EarlyExitException(9, this.input);
- throw eee;
- }
- cnt9++;
- } while (true);
-
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "INC_TYPE",
-
- // $ANTLR start COMMA
- mCOMMA: function() {
- try {
- var _type = this.COMMA;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:50:11: ( ',' )
- // ABE.g:50:13: ','
- this.match(',');
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "COMMA",
-
- // $ANTLR start LPAR
- mLPAR: function() {
- try {
- var _type = this.LPAR;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:51:11: ( '(' )
- // ABE.g:51:13: '('
- this.match('(');
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "LPAR",
-
- // $ANTLR start RPAR
- mRPAR: function() {
- try {
- var _type = this.RPAR;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:52:11: ( ')' )
- // ABE.g:52:13: ')'
- this.match(')');
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "RPAR",
-
- // $ANTLR start WS
- mWS: function() {
- try {
- var _type = this.WS;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:54:11: ( ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' ) )
- // ABE.g:54:14: ( ' ' | '\\r' | '\\t' | '\\u000C' | '\\n' )
- if ( (this.input.LA(1)>='\t' && this.input.LA(1)<='\n')||(this.input.LA(1)>='\f' && this.input.LA(1)<='\r')||this.input.LA(1)==' ' ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
- _channel=HIDDEN;
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "WS",
-
- // $ANTLR start COMMENT
- mCOMMENT: function() {
- try {
- var _type = this.COMMENT;
- var _channel = org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;
- // ABE.g:55:9: ( '#' (~ '\\n' )* )
- // ABE.g:55:11: '#' (~ '\\n' )*
- this.match('#');
- // ABE.g:55:15: (~ '\\n' )*
- loop10:
- do {
- var alt10=2;
- var LA10_0 = this.input.LA(1);
-
- if ( ((LA10_0>='\u0000' && LA10_0<='\t')||(LA10_0>='\u000B' && LA10_0<='\uFFFF')) ) {
- alt10=1;
- }
-
-
- switch (alt10) {
- case 1 :
- // ABE.g:55:15: ~ '\\n'
- if ( (this.input.LA(1)>='\u0000' && this.input.LA(1)<='\t')||(this.input.LA(1)>='\u000B' && this.input.LA(1)<='\uFFFF') ) {
- this.input.consume();
-
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- this.recover(mse);
- throw mse;}
-
-
-
- break;
-
- default :
- break loop10;
- }
- } while (true);
-
- _channel=HIDDEN;
-
-
-
- this.state.type = _type;
- this.state.channel = _channel;
- }
- finally {
- }
- },
- // $ANTLR end "COMMENT",
-
- mTokens: function() {
- // ABE.g:1:8: ( T__28 | T__29 | T__30 | T_SITE | T_FROM | A_DENY | A_LOGOUT | A_SANDBOX | A_ACCEPT | LOCATION | URI | GLOB | REGEXP | ALL | SUB | INC | HTTPVERB | INC_TYPE | COMMA | LPAR | RPAR | WS | COMMENT )
- var alt11=23;
- alt11 = this.dfa11.predict(this.input);
- switch (alt11) {
- case 1 :
- // ABE.g:1:10: T__28
- this.mT__28();
-
-
- break;
- case 2 :
- // ABE.g:1:16: T__29
- this.mT__29();
-
-
- break;
- case 3 :
- // ABE.g:1:22: T__30
- this.mT__30();
-
-
- break;
- case 4 :
- // ABE.g:1:28: T_SITE
- this.mT_SITE();
-
-
- break;
- case 5 :
- // ABE.g:1:35: T_FROM
- this.mT_FROM();
-
-
- break;
- case 6 :
- // ABE.g:1:42: A_DENY
- this.mA_DENY();
-
-
- break;
- case 7 :
- // ABE.g:1:49: A_LOGOUT
- this.mA_LOGOUT();
-
-
- break;
- case 8 :
- // ABE.g:1:58: A_SANDBOX
- this.mA_SANDBOX();
-
-
- break;
- case 9 :
- // ABE.g:1:68: A_ACCEPT
- this.mA_ACCEPT();
-
-
- break;
- case 10 :
- // ABE.g:1:77: LOCATION
- this.mLOCATION();
-
-
- break;
- case 11 :
- // ABE.g:1:86: URI
- this.mURI();
-
-
- break;
- case 12 :
- // ABE.g:1:90: GLOB
- this.mGLOB();
-
-
- break;
- case 13 :
- // ABE.g:1:95: REGEXP
- this.mREGEXP();
-
-
- break;
- case 14 :
- // ABE.g:1:102: ALL
- this.mALL();
-
-
- break;
- case 15 :
- // ABE.g:1:106: SUB
- this.mSUB();
-
-
- break;
- case 16 :
- // ABE.g:1:110: INC
- this.mINC();
-
-
- break;
- case 17 :
- // ABE.g:1:114: HTTPVERB
- this.mHTTPVERB();
-
-
- break;
- case 18 :
- // ABE.g:1:123: INC_TYPE
- this.mINC_TYPE();
-
-
- break;
- case 19 :
- // ABE.g:1:132: COMMA
- this.mCOMMA();
-
-
- break;
- case 20 :
- // ABE.g:1:138: LPAR
- this.mLPAR();
-
-
- break;
- case 21 :
- // ABE.g:1:143: RPAR
- this.mRPAR();
-
-
- break;
- case 22 :
- // ABE.g:1:148: WS
- this.mWS();
-
-
- break;
- case 23 :
- // ABE.g:1:151: COMMENT
- this.mCOMMENT();
-
-
- break;
-
- }
-
- }
-
-}, true); // important to pass true to overwrite default implementations
-
-org.antlr.lang.augmentObject(ABELexer, {
- DFA8_eotS:
- "\u000a\uffff",
- DFA8_eofS:
- "\u000a\uffff",
- DFA8_minS:
- "\u0001\u0044\u0001\uffff\u0001\u0041\u0007\uffff",
- DFA8_maxS:
- "\u0001\u0054\u0001\uffff\u0001\u0055\u0007\uffff",
- DFA8_acceptS:
- "\u0001\uffff\u0001\u0001\u0001\uffff\u0001\u0004\u0001\u0006\u0001"+
- "\u0007\u0001\u0008\u0001\u0002\u0001\u0003\u0001\u0005",
- DFA8_specialS:
- "\u000a\uffff}>",
- DFA8_transitionS: [
- "\u0001\u0004\u0002\uffff\u0001\u0001\u0001\u0003\u0006\uffff"+
- "\u0001\u0006\u0001\u0002\u0003\uffff\u0001\u0005",
- "",
- "\u0001\u0009\u000d\uffff\u0001\u0007\u0005\uffff\u0001\u0008",
- "",
- "",
- "",
- "",
- "",
- "",
- ""
- ]
-});
-
-org.antlr.lang.augmentObject(ABELexer, {
- DFA8_eot:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA8_eotS),
- DFA8_eof:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA8_eofS),
- DFA8_min:
- org.antlr.runtime.DFA.unpackEncodedStringToUnsignedChars(ABELexer.DFA8_minS),
- DFA8_max:
- org.antlr.runtime.DFA.unpackEncodedStringToUnsignedChars(ABELexer.DFA8_maxS),
- DFA8_accept:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA8_acceptS),
- DFA8_special:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA8_specialS),
- DFA8_transition: (function() {
- var a = [],
- i,
- numStates = ABELexer.DFA8_transitionS.length;
- for (i=0; i<numStates; i++) {
- a.push(org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA8_transitionS[i]));
- }
- return a;
- })()
-});
-
-ABELexer.DFA8 = function(recognizer) {
- this.recognizer = recognizer;
- this.decisionNumber = 8;
- this.eot = ABELexer.DFA8_eot;
- this.eof = ABELexer.DFA8_eof;
- this.min = ABELexer.DFA8_min;
- this.max = ABELexer.DFA8_max;
- this.accept = ABELexer.DFA8_accept;
- this.special = ABELexer.DFA8_special;
- this.transition = ABELexer.DFA8_transition;
-};
-
-org.antlr.lang.extend(ABELexer.DFA8, org.antlr.runtime.DFA, {
- getDescription: function() {
- return "46:1: HTTPVERB : ( 'GET' | 'POST' | 'PUT' | 'HEAD' | 'PATCH' | 'DELETE' | 'TRACE' | 'OPTIONS' );";
- },
- dummy: null
-});
-org.antlr.lang.augmentObject(ABELexer, {
- DFA11_eotS:
- "\u0003\uffff\u0001\u0009\u0004\uffff\u0001\u0009\u000e\uffff\u0001"+
- "\u0011\u0002\uffff\u0001\u0011\u0002\u002f\u0001\uffff\u0001\u0011\u0001"+
- "\uffff\u0001\u0011\u0001\uffff\u0001\u0011\u0001\uffff\u0009\u0011\u0001"+
- "\u003c\u0001\u002f\u0001\uffff\u0002\u0011\u0001\u0040\u0001\u0041\u0001"+
- "\u0043\u0001\u0011\u0001\u0043\u0004\u0011\u0001\u004a\u0001\uffff\u0001"+
- "\u0023\u0002\u0011\u0002\uffff\u0001\u0011\u0001\uffff\u0001\u0043\u0001"+
- "\u0011\u0001\u0043\u0002\u0011\u0001\u0052\u0001\uffff\u0001\u0011\u0001"+
- "\u0054\u0001\u0011\u0002\u0043\u0001\u0011\u0002\uffff\u0001\u0043\u0001"+
- "\uffff\u0003\u0011\u0001\u0043\u0001\u0011\u0001\u0041",
- DFA11_eofS:
- "\u005b\uffff",
- DFA11_minS:
- "\u0001\u0009\u0002\u0041\u0001\u0023\u0004\u0041\u0001\u0023\u0002"+
- "\uffff\u0006\u0041\u0006\uffff\u0001\u004c\u0002\uffff\u0001\u0042\u0002"+
- "\u0023\u0001\uffff\u0001\u004c\u0001\uffff\u0001\u0043\u0001\uffff\u0001"+
- "\u004c\u0001\uffff\u0001\u0043\u0001\u0054\u0001\u0053\u0002\u0054\u0002"+
- "\u0041\u0001\u0054\u0001\u0046\u0001\u0041\u0001\u0023\u0001\uffff\u0001"+
- "\u0045\u0004\u0041\u0001\u0054\u0001\u0041\u0001\u0043\u0001\u0044\u0001"+
- "\u0043\u0001\u0049\u0001\u002b\u0001\uffff\u0001\u0023\u0001\u0054\u0001"+
- "\u004c\u0002\uffff\u0001\u0055\u0001\uffff\u0001\u0041\u0001\u0048\u0001"+
- "\u0041\u0001\u0045\u0001\u004f\u0001\u002b\u0001\uffff\u0001\u0045\u0001"+
- "\u0041\u0001\u0053\u0002\u0041\u0001\u004e\u0002\uffff\u0001\u0041\u0001"+
- "\uffff\u0001\u0049\u0001\u0053\u0001\u004f\u0001\u0041\u0001\u004e\u0001"+
- "\u0041",
- DFA11_maxS:
- "\u0001\u007a\u0001\u0069\u0001\u0065\u0001\u007e\u0001\u0065\u0001"+
- "\u006f\u0001\u006e\u0001\u0072\u0001\u007e\u0002\uffff\u0006\u005a\u0006"+
- "\uffff\u0001\u004c\u0002\uffff\u0001\u0042\u0002\u007e\u0001\uffff\u0001"+
- "\u004c\u0001\uffff\u0001\u0043\u0001\uffff\u0001\u004c\u0001\uffff\u0001"+
- "\u0043\u0001\u0054\u0001\u0053\u0002\u0054\u0002\u0041\u0001\u0054\u0001"+
- "\u0046\u0001\u005f\u0001\u007e\u0001\uffff\u0001\u0045\u0001\u0041\u0003"+
- "\u005f\u0001\u0054\u0001\u005f\u0001\u0043\u0001\u0044\u0001\u0043\u0001"+
- "\u0049\u0001\u005f\u0001\uffff\u0001\u007e\u0001\u0054\u0001\u004c\u0002"+
- "\uffff\u0001\u0055\u0001\uffff\u0001\u005f\u0001\u0048\u0001\u005f\u0001"+
- "\u0045\u0001\u004f\u0001\u002b\u0001\uffff\u0001\u0045\u0001\u005f\u0001"+
- "\u0053\u0002\u005f\u0001\u004e\u0002\uffff\u0001\u005f\u0001\uffff\u0001"+
- "\u0049\u0001\u0053\u0001\u004f\u0001\u005f\u0001\u004e\u0001\u005f",
- DFA11_acceptS:
- "\u0009\uffff\u0001\u000c\u0001\u000d\u0006\uffff\u0001\u0012\u0001"+
- "\u0013\u0001\u0014\u0001\u0015\u0001\u0016\u0001\u0017\u0001\uffff\u0001"+
- "\u0004\u0001\u0008\u0003\uffff\u0001\u0006\u0001\uffff\u0001\u0007\u0001"+
- "\uffff\u0001\u0009\u0001\uffff\u0001\u0005\u000b\uffff\u0001\u000b\u000c"+
- "\uffff\u0001\u000f\u0003\uffff\u0001\u000e\u0001\u0010\u0001\uffff\u0001"+
- "\u0011\u0006\uffff\u0001\u0001\u0006\uffff\u0001\u0003\u0001\u0002\u0001"+
- "\uffff\u0001\u000a\u0006\uffff",
- DFA11_specialS:
- "\u005b\uffff}>",
- DFA11_transitionS: [
- "\u0002\u0015\u0001\uffff\u0002\u0015\u0012\uffff\u0001\u0015"+
- "\u0002\uffff\u0001\u0016\u0004\uffff\u0001\u0013\u0001\u0014"+
- "\u0001\u0009\u0001\uffff\u0001\u0012\u0001\uffff\u0001\u0009"+
- "\u0001\uffff\u000a\u0008\u0007\uffff\u0001\u0006\u0002\u0011"+
- "\u0001\u0004\u0001\u0011\u0001\u0007\u0001\u000c\u0001\u000e"+
- "\u0001\u000b\u0002\u0011\u0001\u0005\u0002\u0011\u0001\u0010"+
- "\u0001\u000d\u0001\u0011\u0001\u0002\u0001\u0001\u0001\u000f"+
- "\u0006\u0011\u0003\uffff\u0001\u000a\u0002\uffff\u0005\u0008"+
- "\u0001\u0003\u0014\u0008",
- "\u0004\u0011\u0001\u0017\u000f\u0011\u0001\u001a\u0005\u0011"+
- "\u0006\uffff\u0001\u0019\u0007\uffff\u0001\u0018",
- "\u001a\u0011\u000a\uffff\u0001\u0018",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0005\uffff\u0010\u001c"+
- "\u0001\uffff\u0001\u001c\u0001\uffff\u001d\u001c\u0001\uffff"+
- "\u0001\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u0011\u001c"+
- "\u0001\u001b\u0008\u001c\u0003\uffff\u0001\u001c",
- "\u0004\u0011\u0001\u001e\u0015\u0011\u000a\uffff\u0001\u001d",
- "\u000e\u0011\u0001\u0020\u000b\u0011\u0014\uffff\u0001\u001f",
- "\u000b\u0011\u0001\u0022\u000e\u0011\u0008\uffff\u0001\u0021"+
- "\u000a\uffff\u0001\u001f",
- "\u001a\u0011\u0017\uffff\u0001\u0023",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0005\uffff\u0010\u001c"+
- "\u0001\uffff\u0001\u001c\u0001\uffff\u001d\u001c\u0001\uffff"+
- "\u0001\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u001a\u001c"+
- "\u0003\uffff\u0001\u001c",
- "",
- "",
- "\u000d\u0011\u0001\u0024\u000c\u0011",
- "\u0004\u0011\u0001\u0025\u0015\u0011",
- "\u0001\u0028\u000d\u0011\u0001\u0026\u0005\u0011\u0001\u0027"+
- "\u0005\u0011",
- "\u0004\u0011\u0001\u0029\u0015\u0011",
- "\u0011\u0011\u0001\u002a\u0008\u0011",
- "\u000f\u0011\u0001\u002b\u000a\u0011",
- "",
- "",
- "",
- "",
- "",
- "",
- "\u0001\u002c",
- "",
- "",
- "\u0001\u002d",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0003\uffff\u0001\u0009"+
- "\u0001\uffff\u0010\u001c\u0001\uffff\u0001\u001c\u0001\uffff"+
- "\u001d\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u0001\u001c"+
- "\u0001\uffff\u000e\u001c\u0001\u002e\u000b\u001c\u0003\uffff"+
- "\u0001\u001c",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0003\uffff\u0001\u0009"+
- "\u0001\uffff\u0010\u001c\u0001\uffff\u0001\u001c\u0001\uffff"+
- "\u001d\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u0001\u001c"+
- "\u0001\uffff\u001a\u001c\u0003\uffff\u0001\u001c",
- "",
- "\u0001\u0030",
- "",
- "\u0001\u0031",
- "",
- "\u0001\u0032",
- "",
- "\u0001\u0033",
- "\u0001\u0034",
- "\u0001\u0035",
- "\u0001\u0036",
- "\u0001\u0037",
- "\u0001\u0038",
- "\u0001\u0039",
- "\u0001\u003a",
- "\u0001\u003b",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0003\uffff\u0001\u0009"+
- "\u0001\uffff\u0010\u001c\u0001\uffff\u0001\u001c\u0001\uffff"+
- "\u001d\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u0001\u001c"+
- "\u0001\uffff\u000c\u001c\u0001\u003d\u000d\u001c\u0003\uffff"+
- "\u0001\u001c",
- "",
- "\u0001\u003e",
- "\u0001\u003f",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u000b\u0011\u0001\u0042\u000e\u0011\u0004\uffff\u0001\u0011",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u0044",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u0045",
- "\u0001\u0046",
- "\u0001\u0047",
- "\u0001\u0048",
- "\u0001\u0049\u0015\uffff\u001a\u0011\u0004\uffff\u0001\u0011",
- "",
- "\u0001\u001c\u0001\uffff\u0002\u001c\u0003\uffff\u0001\u0009"+
- "\u0001\uffff\u0010\u001c\u0001\uffff\u0001\u001c\u0001\uffff"+
- "\u001d\u001c\u0001\uffff\u0001\u001c\u0001\uffff\u0001\u001c"+
- "\u0001\uffff\u001a\u001c\u0003\uffff\u0001\u001c",
- "\u0001\u004b",
- "\u0001\u004c",
- "",
- "",
- "\u0001\u004d",
- "",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u004e",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u004f",
- "\u0001\u0050",
- "\u0001\u0051",
- "",
- "\u0001\u0053",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u0055",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u0056",
- "",
- "",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "",
- "\u0001\u0057",
- "\u0001\u0058",
- "\u0001\u0059",
- "\u001a\u0011\u0004\uffff\u0001\u0011",
- "\u0001\u005a",
- "\u001a\u0011\u0004\uffff\u0001\u0011"
- ]
-});
-
-org.antlr.lang.augmentObject(ABELexer, {
- DFA11_eot:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA11_eotS),
- DFA11_eof:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA11_eofS),
- DFA11_min:
- org.antlr.runtime.DFA.unpackEncodedStringToUnsignedChars(ABELexer.DFA11_minS),
- DFA11_max:
- org.antlr.runtime.DFA.unpackEncodedStringToUnsignedChars(ABELexer.DFA11_maxS),
- DFA11_accept:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA11_acceptS),
- DFA11_special:
- org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA11_specialS),
- DFA11_transition: (function() {
- var a = [],
- i,
- numStates = ABELexer.DFA11_transitionS.length;
- for (i=0; i<numStates; i++) {
- a.push(org.antlr.runtime.DFA.unpackEncodedString(ABELexer.DFA11_transitionS[i]));
- }
- return a;
- })()
-});
-
-ABELexer.DFA11 = function(recognizer) {
- this.recognizer = recognizer;
- this.decisionNumber = 11;
- this.eot = ABELexer.DFA11_eot;
- this.eof = ABELexer.DFA11_eof;
- this.min = ABELexer.DFA11_min;
- this.max = ABELexer.DFA11_max;
- this.accept = ABELexer.DFA11_accept;
- this.special = ABELexer.DFA11_special;
- this.transition = ABELexer.DFA11_transition;
-};
-
-org.antlr.lang.extend(ABELexer.DFA11, org.antlr.runtime.DFA, {
- getDescription: function() {
- return "1:1: Tokens : ( T__28 | T__29 | T__30 | T_SITE | T_FROM | A_DENY | A_LOGOUT | A_SANDBOX | A_ACCEPT | LOCATION | URI | GLOB | REGEXP | ALL | SUB | INC | HTTPVERB | INC_TYPE | COMMA | LPAR | RPAR | WS | COMMENT );";
- },
- dummy: null
-});
-
-})(); \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/ABEParser.js b/extensions/noscript/chrome/content/noscript/ABEParser.js
deleted file mode 100644
index a347bc0..0000000
--- a/extensions/noscript/chrome/content/noscript/ABEParser.js
+++ /dev/null
@@ -1,1466 +0,0 @@
-// $ANTLR 3.1.1 ABE.g 2017-07-26 00:44:40
-
-var ABEParser = function(input, state) {
- if (!state) {
- state = new org.antlr.runtime.RecognizerSharedState();
- }
-
- (function(){
- }).call(this);
-
- ABEParser.superclass.constructor.call(this, input, state);
-
-
-
-
- /* @todo only create adaptor if output=AST */
- this.adaptor = new org.antlr.runtime.tree.CommonTreeAdaptor();
-
-};
-
-org.antlr.lang.augmentObject(ABEParser, {
- INC_TYPE: 11,
- T_FROM: 14,
- GLOB: 17,
- T__29: 29,
- HTTPVERB: 7,
- T__28: 28,
- A_LOGOUT: 21,
- A_DENY: 20,
- T_ACTION: 4,
- SUB: 8,
- T_METHODS: 5,
- EOF: -1,
- URI: 18,
- T__30: 30,
- INC: 9,
- WS: 26,
- LPAR: 10,
- URI_PART: 25,
- COMMA: 12,
- A_SANDBOX: 22,
- URI_START: 24,
- A_ACCEPT: 23,
- ALL: 6,
- REGEXP: 16,
- LOCATION: 19,
- RPAR: 13,
- T_SITE: 15,
- COMMENT: 27
-});
-
-(function(){
-// public class variables
-var INC_TYPE= 11,
- T_FROM= 14,
- GLOB= 17,
- T__29= 29,
- HTTPVERB= 7,
- T__28= 28,
- A_LOGOUT= 21,
- A_DENY= 20,
- T_ACTION= 4,
- SUB= 8,
- T_METHODS= 5,
- EOF= -1,
- URI= 18,
- T__30= 30,
- INC= 9,
- WS= 26,
- LPAR= 10,
- URI_PART= 25,
- COMMA= 12,
- A_SANDBOX= 22,
- URI_START= 24,
- A_ACCEPT= 23,
- ALL= 6,
- REGEXP= 16,
- LOCATION= 19,
- RPAR= 13,
- T_SITE= 15,
- COMMENT= 27;
-
-// public instance methods/vars
-org.antlr.lang.extend(ABEParser, org.antlr.runtime.Parser, {
-
- setTreeAdaptor: function(adaptor) {
- this.adaptor = adaptor;
- },
- getTreeAdaptor: function() {
- return this.adaptor;
- },
-
- getTokenNames: function() { return ABEParser.tokenNames; },
- getGrammarFileName: function() { return "ABE.g"; }
-});
-org.antlr.lang.augmentObject(ABEParser.prototype, {
-
- // inline static return class
- ruleset_return: (function() {
- ABEParser.ruleset_return = function(){};
- org.antlr.lang.extend(ABEParser.ruleset_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:13:1: ruleset : ( rule )* EOF ;
- // $ANTLR start "ruleset"
- ruleset: function() {
- var retval = new ABEParser.ruleset_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var EOF2 = null;
- var rule1 = null;
-
- var EOF2_tree=null;
-
- try {
- // ABE.g:13:11: ( ( rule )* EOF )
- // ABE.g:13:13: ( rule )* EOF
- root_0 = this.adaptor.nil();
-
- // ABE.g:13:13: ( rule )*
- loop1:
- do {
- var alt1=2;
- var LA1_0 = this.input.LA(1);
-
- if ( (LA1_0==T_SITE) ) {
- alt1=1;
- }
-
-
- switch (alt1) {
- case 1 :
- // ABE.g:13:13: rule
- this.pushFollow(ABEParser.FOLLOW_rule_in_ruleset49);
- rule1=this.rule();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, rule1.getTree());
-
-
- break;
-
- default :
- break loop1;
- }
- } while (true);
-
- EOF2=this.match(this.input,EOF,ABEParser.FOLLOW_EOF_in_ruleset52);
- EOF2_tree = this.adaptor.create(EOF2);
- this.adaptor.addChild(root_0, EOF2_tree);
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- rule_return: (function() {
- ABEParser.rule_return = function(){};
- org.antlr.lang.extend(ABEParser.rule_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:14:1: rule : subject ( predicate )+ -> subject ( predicate )+ ;
- // $ANTLR start "rule"
- rule: function() {
- var retval = new ABEParser.rule_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var subject3 = null;
- var predicate4 = null;
-
- var stream_subject=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"rule subject");
- var stream_predicate=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"rule predicate");
- try {
- // ABE.g:14:11: ( subject ( predicate )+ -> subject ( predicate )+ )
- // ABE.g:14:13: subject ( predicate )+
- this.pushFollow(ABEParser.FOLLOW_subject_in_rule65);
- subject3=this.subject();
-
- this.state._fsp--;
-
- stream_subject.add(subject3.getTree());
- // ABE.g:14:21: ( predicate )+
- var cnt2=0;
- loop2:
- do {
- var alt2=2;
- var LA2_0 = this.input.LA(1);
-
- if ( ((LA2_0>=A_DENY && LA2_0<=A_ACCEPT)) ) {
- alt2=1;
- }
-
-
- switch (alt2) {
- case 1 :
- // ABE.g:14:21: predicate
- this.pushFollow(ABEParser.FOLLOW_predicate_in_rule67);
- predicate4=this.predicate();
-
- this.state._fsp--;
-
- stream_predicate.add(predicate4.getTree());
-
-
- break;
-
- default :
- if ( cnt2 >= 1 ) {
- break loop2;
- }
- var eee = new org.antlr.runtime.EarlyExitException(2, this.input);
- throw eee;
- }
- cnt2++;
- } while (true);
-
-
-
- // AST REWRITE
- // elements: predicate, subject
- // token labels:
- // rule labels: retval
- // token list labels:
- // rule list labels:
- retval.tree = root_0;
- var stream_retval=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"token retval",retval!=null?retval.tree:null);
-
- root_0 = this.adaptor.nil();
- // 14:32: -> subject ( predicate )+
- {
- this.adaptor.addChild(root_0, stream_subject.nextTree());
- if ( !(stream_predicate.hasNext()) ) {
- throw new org.antlr.runtime.tree.RewriteEarlyExitException();
- }
- while ( stream_predicate.hasNext() ) {
- this.adaptor.addChild(root_0, stream_predicate.nextTree());
-
- }
- stream_predicate.reset();
-
- }
-
- retval.tree = root_0;
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- predicate_return: (function() {
- ABEParser.predicate_return = function(){};
- org.antlr.lang.extend(ABEParser.predicate_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:15:1: predicate : action ( methods )? ( origin )? -> T_ACTION action T_METHODS ( methods )? ( origin )? ;
- // $ANTLR start "predicate"
- predicate: function() {
- var retval = new ABEParser.predicate_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var action5 = null;
- var methods6 = null;
- var origin7 = null;
-
- var stream_methods=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"rule methods");
- var stream_action=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"rule action");
- var stream_origin=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"rule origin");
- try {
- // ABE.g:15:11: ( action ( methods )? ( origin )? -> T_ACTION action T_METHODS ( methods )? ( origin )? )
- // ABE.g:15:13: action ( methods )? ( origin )?
- this.pushFollow(ABEParser.FOLLOW_action_in_predicate83);
- action5=this.action();
-
- this.state._fsp--;
-
- stream_action.add(action5.getTree());
- // ABE.g:15:20: ( methods )?
- var alt3=2;
- var LA3_0 = this.input.LA(1);
-
- if ( ((LA3_0>=ALL && LA3_0<=INC)) ) {
- alt3=1;
- }
- switch (alt3) {
- case 1 :
- // ABE.g:15:20: methods
- this.pushFollow(ABEParser.FOLLOW_methods_in_predicate85);
- methods6=this.methods();
-
- this.state._fsp--;
-
- stream_methods.add(methods6.getTree());
-
-
- break;
-
- }
-
- // ABE.g:15:29: ( origin )?
- var alt4=2;
- var LA4_0 = this.input.LA(1);
-
- if ( (LA4_0==T_FROM) ) {
- alt4=1;
- }
- switch (alt4) {
- case 1 :
- // ABE.g:15:29: origin
- this.pushFollow(ABEParser.FOLLOW_origin_in_predicate88);
- origin7=this.origin();
-
- this.state._fsp--;
-
- stream_origin.add(origin7.getTree());
-
-
- break;
-
- }
-
-
-
- // AST REWRITE
- // elements: action, methods, origin
- // token labels:
- // rule labels: retval
- // token list labels:
- // rule list labels:
- retval.tree = root_0;
- var stream_retval=new org.antlr.runtime.tree.RewriteRuleSubtreeStream(this.adaptor,"token retval",retval!=null?retval.tree:null);
-
- root_0 = this.adaptor.nil();
- // 15:37: -> T_ACTION action T_METHODS ( methods )? ( origin )?
- {
- this.adaptor.addChild(root_0, this.adaptor.create(T_ACTION, "T_ACTION"));
- this.adaptor.addChild(root_0, stream_action.nextTree());
- this.adaptor.addChild(root_0, this.adaptor.create(T_METHODS, "T_METHODS"));
- // ABE.g:15:66: ( methods )?
- if ( stream_methods.hasNext() ) {
- this.adaptor.addChild(root_0, stream_methods.nextTree());
-
- }
- stream_methods.reset();
- // ABE.g:15:75: ( origin )?
- if ( stream_origin.hasNext() ) {
- this.adaptor.addChild(root_0, stream_origin.nextTree());
-
- }
- stream_origin.reset();
-
- }
-
- retval.tree = root_0;
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- methods_return: (function() {
- ABEParser.methods_return = function(){};
- org.antlr.lang.extend(ABEParser.methods_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:16:1: methods : ( ( method )+ | ALL ) ;
- // $ANTLR start "methods"
- methods: function() {
- var retval = new ABEParser.methods_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var ALL9 = null;
- var method8 = null;
-
- var ALL9_tree=null;
-
- try {
- // ABE.g:16:11: ( ( ( method )+ | ALL ) )
- // ABE.g:16:13: ( ( method )+ | ALL )
- root_0 = this.adaptor.nil();
-
- // ABE.g:16:13: ( ( method )+ | ALL )
- var alt6=2;
- var LA6_0 = this.input.LA(1);
-
- if ( ((LA6_0>=HTTPVERB && LA6_0<=INC)) ) {
- alt6=1;
- }
- else if ( (LA6_0==ALL) ) {
- alt6=2;
- }
- else {
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 6, 0, this.input);
-
- throw nvae;
- }
- switch (alt6) {
- case 1 :
- // ABE.g:16:14: ( method )+
- // ABE.g:16:14: ( method )+
- var cnt5=0;
- loop5:
- do {
- var alt5=2;
- var LA5_0 = this.input.LA(1);
-
- if ( ((LA5_0>=HTTPVERB && LA5_0<=INC)) ) {
- alt5=1;
- }
-
-
- switch (alt5) {
- case 1 :
- // ABE.g:16:14: method
- this.pushFollow(ABEParser.FOLLOW_method_in_methods114);
- method8=this.method();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, method8.getTree());
-
-
- break;
-
- default :
- if ( cnt5 >= 1 ) {
- break loop5;
- }
- var eee = new org.antlr.runtime.EarlyExitException(5, this.input);
- throw eee;
- }
- cnt5++;
- } while (true);
-
-
-
- break;
- case 2 :
- // ABE.g:16:24: ALL
- ALL9=this.match(this.input,ALL,ABEParser.FOLLOW_ALL_in_methods119);
- ALL9_tree = this.adaptor.create(ALL9);
- this.adaptor.addChild(root_0, ALL9_tree);
-
-
-
- break;
-
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- method_return: (function() {
- ABEParser.method_return = function(){};
- org.antlr.lang.extend(ABEParser.method_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:17:1: method : ( HTTPVERB | SUB | inclusion ) ;
- // $ANTLR start "method"
- method: function() {
- var retval = new ABEParser.method_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var HTTPVERB10 = null;
- var SUB11 = null;
- var inclusion12 = null;
-
- var HTTPVERB10_tree=null;
- var SUB11_tree=null;
-
- try {
- // ABE.g:17:11: ( ( HTTPVERB | SUB | inclusion ) )
- // ABE.g:17:13: ( HTTPVERB | SUB | inclusion )
- root_0 = this.adaptor.nil();
-
- // ABE.g:17:13: ( HTTPVERB | SUB | inclusion )
- var alt7=3;
- switch ( this.input.LA(1) ) {
- case HTTPVERB:
- alt7=1;
- break;
- case SUB:
- alt7=2;
- break;
- case INC:
- alt7=3;
- break;
- default:
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 7, 0, this.input);
-
- throw nvae;
- }
-
- switch (alt7) {
- case 1 :
- // ABE.g:17:14: HTTPVERB
- HTTPVERB10=this.match(this.input,HTTPVERB,ABEParser.FOLLOW_HTTPVERB_in_method132);
- HTTPVERB10_tree = this.adaptor.create(HTTPVERB10);
- this.adaptor.addChild(root_0, HTTPVERB10_tree);
-
-
-
- break;
- case 2 :
- // ABE.g:17:25: SUB
- SUB11=this.match(this.input,SUB,ABEParser.FOLLOW_SUB_in_method136);
- SUB11_tree = this.adaptor.create(SUB11);
- this.adaptor.addChild(root_0, SUB11_tree);
-
-
-
- break;
- case 3 :
- // ABE.g:17:31: inclusion
- this.pushFollow(ABEParser.FOLLOW_inclusion_in_method140);
- inclusion12=this.inclusion();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, inclusion12.getTree());
-
-
- break;
-
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- inclusion_return: (function() {
- ABEParser.inclusion_return = function(){};
- org.antlr.lang.extend(ABEParser.inclusion_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:18:1: inclusion : INC ( LPAR ( INC_TYPE COMMA )* ( INC_TYPE )? RPAR )? ;
- // $ANTLR start "inclusion"
- inclusion: function() {
- var retval = new ABEParser.inclusion_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var INC13 = null;
- var LPAR14 = null;
- var INC_TYPE15 = null;
- var COMMA16 = null;
- var INC_TYPE17 = null;
- var RPAR18 = null;
-
- var INC13_tree=null;
- var LPAR14_tree=null;
- var INC_TYPE15_tree=null;
- var COMMA16_tree=null;
- var INC_TYPE17_tree=null;
- var RPAR18_tree=null;
-
- try {
- // ABE.g:18:11: ( INC ( LPAR ( INC_TYPE COMMA )* ( INC_TYPE )? RPAR )? )
- // ABE.g:18:13: INC ( LPAR ( INC_TYPE COMMA )* ( INC_TYPE )? RPAR )?
- root_0 = this.adaptor.nil();
-
- INC13=this.match(this.input,INC,ABEParser.FOLLOW_INC_in_inclusion149);
- INC13_tree = this.adaptor.create(INC13);
- this.adaptor.addChild(root_0, INC13_tree);
-
- // ABE.g:18:17: ( LPAR ( INC_TYPE COMMA )* ( INC_TYPE )? RPAR )?
- var alt10=2;
- var LA10_0 = this.input.LA(1);
-
- if ( (LA10_0==LPAR) ) {
- alt10=1;
- }
- switch (alt10) {
- case 1 :
- // ABE.g:18:18: LPAR ( INC_TYPE COMMA )* ( INC_TYPE )? RPAR
- LPAR14=this.match(this.input,LPAR,ABEParser.FOLLOW_LPAR_in_inclusion152);
- LPAR14_tree = this.adaptor.create(LPAR14);
- this.adaptor.addChild(root_0, LPAR14_tree);
-
- // ABE.g:18:23: ( INC_TYPE COMMA )*
- loop8:
- do {
- var alt8=2;
- var LA8_0 = this.input.LA(1);
-
- if ( (LA8_0==INC_TYPE) ) {
- var LA8_1 = this.input.LA(2);
-
- if ( (LA8_1==COMMA) ) {
- alt8=1;
- }
-
-
- }
-
-
- switch (alt8) {
- case 1 :
- // ABE.g:18:24: INC_TYPE COMMA
- INC_TYPE15=this.match(this.input,INC_TYPE,ABEParser.FOLLOW_INC_TYPE_in_inclusion155);
- INC_TYPE15_tree = this.adaptor.create(INC_TYPE15);
- this.adaptor.addChild(root_0, INC_TYPE15_tree);
-
- COMMA16=this.match(this.input,COMMA,ABEParser.FOLLOW_COMMA_in_inclusion157);
- COMMA16_tree = this.adaptor.create(COMMA16);
- this.adaptor.addChild(root_0, COMMA16_tree);
-
-
-
- break;
-
- default :
- break loop8;
- }
- } while (true);
-
- // ABE.g:18:41: ( INC_TYPE )?
- var alt9=2;
- var LA9_0 = this.input.LA(1);
-
- if ( (LA9_0==INC_TYPE) ) {
- alt9=1;
- }
- switch (alt9) {
- case 1 :
- // ABE.g:18:41: INC_TYPE
- INC_TYPE17=this.match(this.input,INC_TYPE,ABEParser.FOLLOW_INC_TYPE_in_inclusion161);
- INC_TYPE17_tree = this.adaptor.create(INC_TYPE17);
- this.adaptor.addChild(root_0, INC_TYPE17_tree);
-
-
-
- break;
-
- }
-
- RPAR18=this.match(this.input,RPAR,ABEParser.FOLLOW_RPAR_in_inclusion164);
- RPAR18_tree = this.adaptor.create(RPAR18);
- this.adaptor.addChild(root_0, RPAR18_tree);
-
-
-
- break;
-
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- origin_return: (function() {
- ABEParser.origin_return = function(){};
- org.antlr.lang.extend(ABEParser.origin_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:19:1: origin : T_FROM oresources ;
- // $ANTLR start "origin"
- origin: function() {
- var retval = new ABEParser.origin_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var T_FROM19 = null;
- var oresources20 = null;
-
- var T_FROM19_tree=null;
-
- try {
- // ABE.g:19:11: ( T_FROM oresources )
- // ABE.g:19:13: T_FROM oresources
- root_0 = this.adaptor.nil();
-
- T_FROM19=this.match(this.input,T_FROM,ABEParser.FOLLOW_T_FROM_in_origin177);
- T_FROM19_tree = this.adaptor.create(T_FROM19);
- this.adaptor.addChild(root_0, T_FROM19_tree);
-
- this.pushFollow(ABEParser.FOLLOW_oresources_in_origin179);
- oresources20=this.oresources();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, oresources20.getTree());
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- subject_return: (function() {
- ABEParser.subject_return = function(){};
- org.antlr.lang.extend(ABEParser.subject_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:20:1: subject : T_SITE resources ;
- // $ANTLR start "subject"
- subject: function() {
- var retval = new ABEParser.subject_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var T_SITE21 = null;
- var resources22 = null;
-
- var T_SITE21_tree=null;
-
- try {
- // ABE.g:20:11: ( T_SITE resources )
- // ABE.g:20:13: T_SITE resources
- root_0 = this.adaptor.nil();
-
- T_SITE21=this.match(this.input,T_SITE,ABEParser.FOLLOW_T_SITE_in_subject189);
- T_SITE21_tree = this.adaptor.create(T_SITE21);
- this.adaptor.addChild(root_0, T_SITE21_tree);
-
- this.pushFollow(ABEParser.FOLLOW_resources_in_subject191);
- resources22=this.resources();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, resources22.getTree());
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- oresources_return: (function() {
- ABEParser.oresources_return = function(){};
- org.antlr.lang.extend(ABEParser.oresources_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:21:1: oresources : ( ( oresource )+ | ALL ) ;
- // $ANTLR start "oresources"
- oresources: function() {
- var retval = new ABEParser.oresources_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var ALL24 = null;
- var oresource23 = null;
-
- var ALL24_tree=null;
-
- try {
- // ABE.g:21:11: ( ( ( oresource )+ | ALL ) )
- // ABE.g:21:13: ( ( oresource )+ | ALL )
- root_0 = this.adaptor.nil();
-
- // ABE.g:21:13: ( ( oresource )+ | ALL )
- var alt12=2;
- var LA12_0 = this.input.LA(1);
-
- if ( ((LA12_0>=REGEXP && LA12_0<=LOCATION)||(LA12_0>=28 && LA12_0<=30)) ) {
- alt12=1;
- }
- else if ( (LA12_0==ALL) ) {
- alt12=2;
- }
- else {
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 12, 0, this.input);
-
- throw nvae;
- }
- switch (alt12) {
- case 1 :
- // ABE.g:21:14: ( oresource )+
- // ABE.g:21:14: ( oresource )+
- var cnt11=0;
- loop11:
- do {
- var alt11=2;
- var LA11_0 = this.input.LA(1);
-
- if ( ((LA11_0>=REGEXP && LA11_0<=LOCATION)||(LA11_0>=28 && LA11_0<=30)) ) {
- alt11=1;
- }
-
-
- switch (alt11) {
- case 1 :
- // ABE.g:21:14: oresource
- this.pushFollow(ABEParser.FOLLOW_oresource_in_oresources199);
- oresource23=this.oresource();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, oresource23.getTree());
-
-
- break;
-
- default :
- if ( cnt11 >= 1 ) {
- break loop11;
- }
- var eee = new org.antlr.runtime.EarlyExitException(11, this.input);
- throw eee;
- }
- cnt11++;
- } while (true);
-
-
-
- break;
- case 2 :
- // ABE.g:21:27: ALL
- ALL24=this.match(this.input,ALL,ABEParser.FOLLOW_ALL_in_oresources204);
- ALL24_tree = this.adaptor.create(ALL24);
- this.adaptor.addChild(root_0, ALL24_tree);
-
-
-
- break;
-
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- resources_return: (function() {
- ABEParser.resources_return = function(){};
- org.antlr.lang.extend(ABEParser.resources_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:22:1: resources : ( ( resource )+ | ALL ) ;
- // $ANTLR start "resources"
- resources: function() {
- var retval = new ABEParser.resources_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var ALL26 = null;
- var resource25 = null;
-
- var ALL26_tree=null;
-
- try {
- // ABE.g:22:11: ( ( ( resource )+ | ALL ) )
- // ABE.g:22:13: ( ( resource )+ | ALL )
- root_0 = this.adaptor.nil();
-
- // ABE.g:22:13: ( ( resource )+ | ALL )
- var alt14=2;
- var LA14_0 = this.input.LA(1);
-
- if ( ((LA14_0>=REGEXP && LA14_0<=LOCATION)) ) {
- alt14=1;
- }
- else if ( (LA14_0==ALL) ) {
- alt14=2;
- }
- else {
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 14, 0, this.input);
-
- throw nvae;
- }
- switch (alt14) {
- case 1 :
- // ABE.g:22:14: ( resource )+
- // ABE.g:22:14: ( resource )+
- var cnt13=0;
- loop13:
- do {
- var alt13=2;
- var LA13_0 = this.input.LA(1);
-
- if ( ((LA13_0>=REGEXP && LA13_0<=LOCATION)) ) {
- alt13=1;
- }
-
-
- switch (alt13) {
- case 1 :
- // ABE.g:22:14: resource
- this.pushFollow(ABEParser.FOLLOW_resource_in_resources214);
- resource25=this.resource();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, resource25.getTree());
-
-
- break;
-
- default :
- if ( cnt13 >= 1 ) {
- break loop13;
- }
- var eee = new org.antlr.runtime.EarlyExitException(13, this.input);
- throw eee;
- }
- cnt13++;
- } while (true);
-
-
-
- break;
- case 2 :
- // ABE.g:22:26: ALL
- ALL26=this.match(this.input,ALL,ABEParser.FOLLOW_ALL_in_resources219);
- ALL26_tree = this.adaptor.create(ALL26);
- this.adaptor.addChild(root_0, ALL26_tree);
-
-
-
- break;
-
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- oresource_return: (function() {
- ABEParser.oresource_return = function(){};
- org.antlr.lang.extend(ABEParser.oresource_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:23:1: oresource : ( resource | 'SELF' | 'SELF+' | 'SELF++' );
- // $ANTLR start "oresource"
- oresource: function() {
- var retval = new ABEParser.oresource_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var string_literal28 = null;
- var string_literal29 = null;
- var string_literal30 = null;
- var resource27 = null;
-
- var string_literal28_tree=null;
- var string_literal29_tree=null;
- var string_literal30_tree=null;
-
- try {
- // ABE.g:23:10: ( resource | 'SELF' | 'SELF+' | 'SELF++' )
- var alt15=4;
- switch ( this.input.LA(1) ) {
- case REGEXP:
- case GLOB:
- case URI:
- case LOCATION:
- alt15=1;
- break;
- case 28:
- alt15=2;
- break;
- case 29:
- alt15=3;
- break;
- case 30:
- alt15=4;
- break;
- default:
- var nvae =
- new org.antlr.runtime.NoViableAltException("", 15, 0, this.input);
-
- throw nvae;
- }
-
- switch (alt15) {
- case 1 :
- // ABE.g:23:12: resource
- root_0 = this.adaptor.nil();
-
- this.pushFollow(ABEParser.FOLLOW_resource_in_oresource227);
- resource27=this.resource();
-
- this.state._fsp--;
-
- this.adaptor.addChild(root_0, resource27.getTree());
-
-
- break;
- case 2 :
- // ABE.g:23:23: 'SELF'
- root_0 = this.adaptor.nil();
-
- string_literal28=this.match(this.input,28,ABEParser.FOLLOW_28_in_oresource231);
- string_literal28_tree = this.adaptor.create(string_literal28);
- this.adaptor.addChild(root_0, string_literal28_tree);
-
-
-
- break;
- case 3 :
- // ABE.g:23:32: 'SELF+'
- root_0 = this.adaptor.nil();
-
- string_literal29=this.match(this.input,29,ABEParser.FOLLOW_29_in_oresource235);
- string_literal29_tree = this.adaptor.create(string_literal29);
- this.adaptor.addChild(root_0, string_literal29_tree);
-
-
-
- break;
- case 4 :
- // ABE.g:23:42: 'SELF++'
- root_0 = this.adaptor.nil();
-
- string_literal30=this.match(this.input,30,ABEParser.FOLLOW_30_in_oresource239);
- string_literal30_tree = this.adaptor.create(string_literal30);
- this.adaptor.addChild(root_0, string_literal30_tree);
-
-
-
- break;
-
- }
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- resource_return: (function() {
- ABEParser.resource_return = function(){};
- org.antlr.lang.extend(ABEParser.resource_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:24:1: resource : ( REGEXP | GLOB | URI | LOCATION );
- // $ANTLR start "resource"
- resource: function() {
- var retval = new ABEParser.resource_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var set31 = null;
-
- var set31_tree=null;
-
- try {
- // ABE.g:24:11: ( REGEXP | GLOB | URI | LOCATION )
- // ABE.g:
- root_0 = this.adaptor.nil();
-
- set31=this.input.LT(1);
- if ( (this.input.LA(1)>=REGEXP && this.input.LA(1)<=LOCATION) ) {
- this.input.consume();
- this.adaptor.addChild(root_0, this.adaptor.create(set31));
- this.state.errorRecovery=false;
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- throw mse;
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- },
-
- // inline static return class
- action_return: (function() {
- ABEParser.action_return = function(){};
- org.antlr.lang.extend(ABEParser.action_return,
- org.antlr.runtime.ParserRuleReturnScope,
- {
- getTree: function() { return this.tree; }
- });
- return;
- })(),
-
- // ABE.g:25:1: action : ( A_DENY | A_LOGOUT | A_SANDBOX | A_ACCEPT );
- // $ANTLR start "action"
- action: function() {
- var retval = new ABEParser.action_return();
- retval.start = this.input.LT(1);
-
- var root_0 = null;
-
- var set32 = null;
-
- var set32_tree=null;
-
- try {
- // ABE.g:25:11: ( A_DENY | A_LOGOUT | A_SANDBOX | A_ACCEPT )
- // ABE.g:
- root_0 = this.adaptor.nil();
-
- set32=this.input.LT(1);
- if ( (this.input.LA(1)>=A_DENY && this.input.LA(1)<=A_ACCEPT) ) {
- this.input.consume();
- this.adaptor.addChild(root_0, this.adaptor.create(set32));
- this.state.errorRecovery=false;
- }
- else {
- var mse = new org.antlr.runtime.MismatchedSetException(null,this.input);
- throw mse;
- }
-
-
-
-
- retval.stop = this.input.LT(-1);
-
- retval.tree = this.adaptor.rulePostProcessing(root_0);
- this.adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
-
- }
- catch (re) {
- if (re instanceof org.antlr.runtime.RecognitionException) {
- this.reportError(re);
- this.recover(this.input,re);
- retval.tree = this.adaptor.errorNode(this.input, retval.start, this.input.LT(-1), re);
- } else {
- throw re;
- }
- }
- finally {
- }
- return retval;
- }
-
- // Delegated rules
-
-
-
-
-}, true); // important to pass true to overwrite default implementations
-
-
-
-// public class variables
-org.antlr.lang.augmentObject(ABEParser, {
- tokenNames: ["<invalid>", "<EOR>", "<DOWN>", "<UP>", "T_ACTION", "T_METHODS", "ALL", "HTTPVERB", "SUB", "INC", "LPAR", "INC_TYPE", "COMMA", "RPAR", "T_FROM", "T_SITE", "REGEXP", "GLOB", "URI", "LOCATION", "A_DENY", "A_LOGOUT", "A_SANDBOX", "A_ACCEPT", "URI_START", "URI_PART", "WS", "COMMENT", "'SELF'", "'SELF+'", "'SELF++'"],
- FOLLOW_rule_in_ruleset49: new org.antlr.runtime.BitSet([0x00008000, 0x00000000]),
- FOLLOW_EOF_in_ruleset52: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_subject_in_rule65: new org.antlr.runtime.BitSet([0x00F00000, 0x00000000]),
- FOLLOW_predicate_in_rule67: new org.antlr.runtime.BitSet([0x00F00002, 0x00000000]),
- FOLLOW_action_in_predicate83: new org.antlr.runtime.BitSet([0x000043C2, 0x00000000]),
- FOLLOW_methods_in_predicate85: new org.antlr.runtime.BitSet([0x00004002, 0x00000000]),
- FOLLOW_origin_in_predicate88: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_method_in_methods114: new org.antlr.runtime.BitSet([0x00000382, 0x00000000]),
- FOLLOW_ALL_in_methods119: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_HTTPVERB_in_method132: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_SUB_in_method136: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_inclusion_in_method140: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_INC_in_inclusion149: new org.antlr.runtime.BitSet([0x00000402, 0x00000000]),
- FOLLOW_LPAR_in_inclusion152: new org.antlr.runtime.BitSet([0x00002800, 0x00000000]),
- FOLLOW_INC_TYPE_in_inclusion155: new org.antlr.runtime.BitSet([0x00001000, 0x00000000]),
- FOLLOW_COMMA_in_inclusion157: new org.antlr.runtime.BitSet([0x00002800, 0x00000000]),
- FOLLOW_INC_TYPE_in_inclusion161: new org.antlr.runtime.BitSet([0x00002000, 0x00000000]),
- FOLLOW_RPAR_in_inclusion164: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_T_FROM_in_origin177: new org.antlr.runtime.BitSet([0x700F0040, 0x00000000]),
- FOLLOW_oresources_in_origin179: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_T_SITE_in_subject189: new org.antlr.runtime.BitSet([0x000F0040, 0x00000000]),
- FOLLOW_resources_in_subject191: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_oresource_in_oresources199: new org.antlr.runtime.BitSet([0x700F0002, 0x00000000]),
- FOLLOW_ALL_in_oresources204: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_resource_in_resources214: new org.antlr.runtime.BitSet([0x000F0002, 0x00000000]),
- FOLLOW_ALL_in_resources219: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_resource_in_oresource227: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_28_in_oresource231: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_29_in_oresource235: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_30_in_oresource239: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_set_in_resource0: new org.antlr.runtime.BitSet([0x00000002, 0x00000000]),
- FOLLOW_set_in_action0: new org.antlr.runtime.BitSet([0x00000002, 0x00000000])
-});
-
-})(); \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/ASPIdiocy.js b/extensions/noscript/chrome/content/noscript/ASPIdiocy.js
deleted file mode 100644
index 1e61f73..0000000
--- a/extensions/noscript/chrome/content/noscript/ASPIdiocy.js
+++ /dev/null
@@ -1,566 +0,0 @@
-ASPIdiocy._replace = function(match, hex) {
- const k = parseInt(hex, 16);
- const map = ASPIdiocy.map;
- if (k in map) return map[k];
- const range = ASPIdiocy._findRange(k);
- return range && range.data || String.fromCharCode(k);
-};
-
-ASPIdiocy._findRange = function(k) {
- const ranges = this.ranges;
- for (let low = 0, high = ranges.length - 1; low <= high;) {
- let i = parseInt((low + high) / 2);
- let r = ranges[i];
- let comparison = k < r.start ? 1 : k > r.end ? -1 : 0;
- if (comparison < 0) low = i + 1;
- else if (comparison > 0) high = i - 1;
- else return r;
- }
- return null;
-};
-
-ASPIdiocy.map = {
- 0x100: "\x41",
- 0x101: "\x61",
- 0x102: "\x41",
- 0x103: "\x61",
- 0x104: "\x41",
- 0x105: "\x61",
- 0x106: "\x43",
- 0x107: "\x63",
- 0x108: "\x43",
- 0x109: "\x63",
- 0x10a: "\x43",
- 0x10b: "\x63",
- 0x10c: "\x43",
- 0x10d: "\x63",
- 0x10e: "\x44",
- 0x10f: "\x64",
- 0x110: "\ufffd",
- 0x111: "\x64",
- 0x112: "\x45",
- 0x113: "\x65",
- 0x114: "\x45",
- 0x115: "\x65",
- 0x116: "\x45",
- 0x117: "\x65",
- 0x118: "\x45",
- 0x119: "\x65",
- 0x11a: "\x45",
- 0x11b: "\x65",
- 0x11c: "\x47",
- 0x11d: "\x67",
- 0x11e: "\x47",
- 0x11f: "\x67",
- 0x120: "\x47",
- 0x121: "\x67",
- 0x122: "\x47",
- 0x123: "\x67",
- 0x124: "\x48",
- 0x125: "\x68",
- 0x126: "\x48",
- 0x127: "\x68",
- 0x128: "\x49",
- 0x129: "\x69",
- 0x12a: "\x49",
- 0x12b: "\x69",
- 0x12c: "\x49",
- 0x12d: "\x69",
- 0x12e: "\x49",
- 0x12f: "\x69",
- 0x130: "\x49",
- 0x131: "\x69",
- 0x134: "\x4a",
- 0x135: "\x6a",
- 0x136: "\x4b",
- 0x137: "\x6b",
- 0x138: "\x3f",
- 0x139: "\x4c",
- 0x13a: "\x6c",
- 0x13b: "\x4c",
- 0x13c: "\x6c",
- 0x13d: "\x4c",
- 0x13e: "\x6c",
- 0x141: "\x4c",
- 0x142: "\x6c",
- 0x143: "\x4e",
- 0x144: "\x6e",
- 0x145: "\x4e",
- 0x146: "\x6e",
- 0x147: "\x4e",
- 0x148: "\x6e",
- 0x14c: "\x4f",
- 0x14d: "\x6f",
- 0x14e: "\x4f",
- 0x14f: "\x6f",
- 0x150: "\x4f",
- 0x151: "\x6f",
- 0x154: "\x52",
- 0x155: "\x72",
- 0x156: "\x52",
- 0x157: "\x72",
- 0x158: "\x52",
- 0x159: "\x72",
- 0x15a: "\x53",
- 0x15b: "\x73",
- 0x15c: "\x53",
- 0x15d: "\x73",
- 0x15e: "\x53",
- 0x15f: "\x73",
- 0x162: "\x54",
- 0x163: "\x74",
- 0x164: "\x54",
- 0x165: "\x74",
- 0x166: "\x54",
- 0x167: "\x74",
- 0x168: "\x55",
- 0x169: "\x75",
- 0x16a: "\x55",
- 0x16b: "\x75",
- 0x16c: "\x55",
- 0x16d: "\x75",
- 0x16e: "\x55",
- 0x16f: "\x75",
- 0x170: "\x55",
- 0x171: "\x75",
- 0x172: "\x55",
- 0x173: "\x75",
- 0x174: "\x57",
- 0x175: "\x77",
- 0x176: "\x59",
- 0x177: "\x79",
- 0x178: "\ufffd",
- 0x179: "\x5a",
- 0x17a: "\x7a",
- 0x17b: "\x5a",
- 0x17c: "\x7a",
- 0x17f: "\x3f",
- 0x180: "\x62",
- 0x189: "\ufffd",
- 0x197: "\x49",
- 0x19a: "\x6c",
- 0x1a1: "\x6f",
- 0x1ab: "\x74",
- 0x1ae: "\x54",
- 0x1af: "\x55",
- 0x1b0: "\x75",
- 0x1b6: "\x7a",
- 0x1c0: "\x7c",
- 0x1c3: "\x21",
- 0x1cd: "\x41",
- 0x1ce: "\x61",
- 0x1cf: "\x49",
- 0x1d0: "\x69",
- 0x1d1: "\x4f",
- 0x1d2: "\x6f",
- 0x1d3: "\x55",
- 0x1d4: "\x75",
- 0x1d5: "\x55",
- 0x1d6: "\x75",
- 0x1d7: "\x55",
- 0x1d8: "\x75",
- 0x1d9: "\x55",
- 0x1da: "\x75",
- 0x1db: "\x55",
- 0x1dc: "\x75",
- 0x1dd: "\x3f",
- 0x1de: "\x41",
- 0x1df: "\x61",
- 0x1e4: "\x47",
- 0x1e5: "\x67",
- 0x1e6: "\x47",
- 0x1e7: "\x67",
- 0x1e8: "\x4b",
- 0x1e9: "\x6b",
- 0x1ea: "\x4f",
- 0x1eb: "\x6f",
- 0x1ec: "\x4f",
- 0x1ed: "\x6f",
- 0x1f0: "\x6a",
- 0x261: "\x67",
- 0x2b9: "\x27",
- 0x2ba: "\x22",
- 0x2bb: "\x3f",
- 0x2bc: "\x27",
- 0x2c4: "\x5e",
- 0x2c5: "\x3f",
- 0x2c6: "\ufffd",
- 0x2c7: "\x3f",
- 0x2c8: "\x27",
- 0x2cb: "\x60",
- 0x2cc: "\x3f",
- 0x2cd: "\x5f",
- 0x2da: "\ufffd",
- 0x2db: "\x3f",
- 0x2dc: "\ufffd",
- 0x300: "\x60",
- 0x301: "\ufffd",
- 0x302: "\x5e",
- 0x303: "\x7e",
- 0x308: "\ufffd",
- 0x309: "\x3f",
- 0x30a: "\ufffd",
- 0x30e: "\x22",
- 0x327: "\ufffd",
- 0x37e: "\x3b",
- 0x393: "\x47",
- 0x398: "\x54",
- 0x3a3: "\x53",
- 0x3a6: "\x46",
- 0x3a9: "\x4f",
- 0x3b1: "\x61",
- 0x3b2: "\ufffd",
- 0x3b3: "\x3f",
- 0x3b4: "\x64",
- 0x3b5: "\x65",
- 0x3bc: "\ufffd",
- 0x3c0: "\x70",
- 0x3c3: "\x73",
- 0x3c4: "\x74",
- 0x3c5: "\x3f",
- 0x3c6: "\x66",
- 0x4bb: "\x68",
- 0x589: "\x3a",
- 0x66a: "\x25",
- 0x2012: "\x3f",
- 0x2017: "\x3d",
- 0x201b: "\x3f",
- 0x201f: "\x3f",
- 0x2023: "\x3f",
- 0x2024: "\ufffd",
- 0x2025: "\x3f",
- 0x2026: "\ufffd",
- 0x2030: "\ufffd",
- 0x2031: "\x3f",
- 0x2032: "\x27",
- 0x2035: "\x60",
- 0x2044: "\x2f",
- 0x2070: "\ufffd",
- 0x2074: "\x34",
- 0x2075: "\x35",
- 0x2076: "\x36",
- 0x2077: "\x37",
- 0x2078: "\x38",
- 0x207f: "\x6e",
- 0x2080: "\x30",
- 0x2081: "\x31",
- 0x2082: "\x32",
- 0x2083: "\x33",
- 0x2084: "\x34",
- 0x2085: "\x35",
- 0x2086: "\x36",
- 0x2087: "\x37",
- 0x2088: "\x38",
- 0x2089: "\x39",
- 0x20a1: "\ufffd",
- 0x20a4: "\ufffd",
- 0x20a7: "\x50",
- 0x20ac: "\ufffd",
- 0x2102: "\x43",
- 0x2107: "\x45",
- 0x210a: "\x67",
- 0x210e: "\x68",
- 0x210f: "\x3f",
- 0x2112: "\x4c",
- 0x2113: "\x6c",
- 0x2114: "\x3f",
- 0x2115: "\x4e",
- 0x211a: "\x51",
- 0x2122: "\ufffd",
- 0x2123: "\x3f",
- 0x2124: "\x5a",
- 0x2128: "\x5a",
- 0x2129: "\x3f",
- 0x212a: "\x4b",
- 0x212b: "\ufffd",
- 0x212c: "\x42",
- 0x212d: "\x43",
- 0x2130: "\x45",
- 0x2131: "\x46",
- 0x2132: "\x3f",
- 0x2133: "\x4d",
- 0x2134: "\x6f",
- 0x2205: "\ufffd",
- 0x2212: "\x2d",
- 0x2213: "\ufffd",
- 0x2214: "\x3f",
- 0x2215: "\x2f",
- 0x2216: "\x5c",
- 0x2217: "\x2a",
- 0x221a: "\x76",
- 0x221e: "\x38",
- 0x2223: "\x7c",
- 0x2229: "\x6e",
- 0x2236: "\x3a",
- 0x223c: "\x7e",
- 0x2248: "\ufffd",
- 0x2261: "\x3d",
- 0x22c5: "\ufffd",
- 0x2302: "\ufffd",
- 0x2303: "\x5e",
- 0x2310: "\ufffd",
- 0x2320: "\x28",
- 0x2321: "\x29",
- 0x2329: "\x3c",
- 0x232a: "\x3e",
- 0x2500: "\x2d",
- 0x2501: "\x3f",
- 0x2502: "\ufffd",
- 0x250c: "\x2b",
- 0x2510: "\x2b",
- 0x2514: "\x2b",
- 0x2518: "\x2b",
- 0x251c: "\x2b",
- 0x2524: "\ufffd",
- 0x252c: "\x2d",
- 0x2534: "\x2d",
- 0x253c: "\x2b",
- 0x2550: "\x2d",
- 0x2551: "\ufffd",
- 0x2580: "\ufffd",
- 0x2584: "\x5f",
- 0x2588: "\ufffd",
- 0x258c: "\ufffd",
- 0x25a0: "\ufffd",
- 0x263c: "\ufffd",
- 0x2758: "\x7c",
- 0x3000: "\x20",
- 0x3008: "\x3c",
- 0x3009: "\x3e",
- 0x301a: "\x5b",
- 0x301b: "\x5d",
- 0x30fb: "\ufffd",
- 0xff01: "\x21",
- 0xff02: "\x22",
- 0xff03: "\x23",
- 0xff04: "\x24",
- 0xff05: "\x25",
- 0xff06: "\x26",
- 0xff07: "\x27",
- 0xff08: "\x28",
- 0xff09: "\x29",
- 0xff0a: "\x2a",
- 0xff0b: "\x2b",
- 0xff0c: "\x2c",
- 0xff0d: "\x2d",
- 0xff0e: "\x2e",
- 0xff0f: "\x2f",
- 0xff10: "\x30",
- 0xff11: "\x31",
- 0xff12: "\x32",
- 0xff13: "\x33",
- 0xff14: "\x34",
- 0xff15: "\x35",
- 0xff16: "\x36",
- 0xff17: "\x37",
- 0xff18: "\x38",
- 0xff19: "\x39",
- 0xff1a: "\x3a",
- 0xff1b: "\x3b",
- 0xff1c: "\x3c",
- 0xff1d: "\x3d",
- 0xff1e: "\x3e",
- 0xff1f: "\x3f",
- 0xff20: "\x40",
- 0xff21: "\x41",
- 0xff22: "\x42",
- 0xff23: "\x43",
- 0xff24: "\x44",
- 0xff25: "\x45",
- 0xff26: "\x46",
- 0xff27: "\x47",
- 0xff28: "\x48",
- 0xff29: "\x49",
- 0xff2a: "\x4a",
- 0xff2b: "\x4b",
- 0xff2c: "\x4c",
- 0xff2d: "\x4d",
- 0xff2e: "\x4e",
- 0xff2f: "\x4f",
- 0xff30: "\x50",
- 0xff31: "\x51",
- 0xff32: "\x52",
- 0xff33: "\x53",
- 0xff34: "\x54",
- 0xff35: "\x55",
- 0xff36: "\x56",
- 0xff37: "\x57",
- 0xff38: "\x58",
- 0xff39: "\x59",
- 0xff3a: "\x5a",
- 0xff3b: "\x5b",
- 0xff3c: "\x5c",
- 0xff3d: "\x5d",
- 0xff3e: "\x5e",
- 0xff3f: "\x5f",
- 0xff40: "\x60",
- 0xff41: "\x61",
- 0xff42: "\x62",
- 0xff43: "\x63",
- 0xff44: "\x64",
- 0xff45: "\x65",
- 0xff46: "\x66",
- 0xff47: "\x67",
- 0xff48: "\x68",
- 0xff49: "\x69",
- 0xff4a: "\x6a",
- 0xff4b: "\x6b",
- 0xff4c: "\x6c",
- 0xff4d: "\x6d",
- 0xff4e: "\x6e",
- 0xff4f: "\x6f",
- 0xff50: "\x70",
- 0xff51: "\x71",
- 0xff52: "\x72",
- 0xff53: "\x73",
- 0xff54: "\x74",
- 0xff55: "\x75",
- 0xff56: "\x76",
- 0xff57: "\x77",
- 0xff58: "\x78",
- 0xff59: "\x79",
- 0xff5a: "\x7a",
- 0xff5b: "\x7b",
- 0xff5c: "\x7c",
- 0xff5d: "\x7d",
- 0xff5e: "\x7e"
-};
-
-(function() {
- function Range(start, end, data) {
- this.start = start;
- this.end = end;
- this.data = data;
- }
-
- ASPIdiocy.ranges = [
- new Range(0x80, 0xff, "\ufffd"),
- new Range(0x132, 0x133, "\x3f"),
- new Range(0x13f, 0x140, "\x3f"),
- new Range(0x149, 0x14b, "\x3f"),
- new Range(0x152, 0x153, "\ufffd"),
- new Range(0x160, 0x161, "\ufffd"),
- new Range(0x17d, 0x17e, "\ufffd"),
- new Range(0x181, 0x188, "\x3f"),
- new Range(0x18a, 0x190, "\x3f"),
- new Range(0x191, 0x192, "\ufffd"),
- new Range(0x193, 0x196, "\x3f"),
- new Range(0x198, 0x199, "\x3f"),
- new Range(0x19b, 0x19e, "\x3f"),
- new Range(0x19f, 0x1a0, "\x4f"),
- new Range(0x1a2, 0x1aa, "\x3f"),
- new Range(0x1ac, 0x1ad, "\x3f"),
- new Range(0x1b1, 0x1b5, "\x3f"),
- new Range(0x1b7, 0x1bf, "\x3f"),
- new Range(0x1c1, 0x1c2, "\x3f"),
- new Range(0x1c4, 0x1cc, "\x3f"),
- new Range(0x1e0, 0x1e3, "\x3f"),
- new Range(0x1ee, 0x1ef, "\x3f"),
- new Range(0x1f1, 0x260, "\x3f"),
- new Range(0x262, 0x2b8, "\x3f"),
- new Range(0x2bd, 0x2c3, "\x3f"),
- new Range(0x2c9, 0x2ca, "\ufffd"),
- new Range(0x2ce, 0x2d9, "\x3f"),
- new Range(0x2dd, 0x2ff, "\x3f"),
- new Range(0x304, 0x305, "\ufffd"),
- new Range(0x306, 0x307, "\x3f"),
- new Range(0x30b, 0x30d, "\x3f"),
- new Range(0x30f, 0x326, "\x3f"),
- new Range(0x328, 0x330, "\x3f"),
- new Range(0x331, 0x332, "\x5f"),
- new Range(0x333, 0x37d, "\x3f"),
- new Range(0x37f, 0x392, "\x3f"),
- new Range(0x394, 0x397, "\x3f"),
- new Range(0x399, 0x3a2, "\x3f"),
- new Range(0x3a4, 0x3a5, "\x3f"),
- new Range(0x3a7, 0x3a8, "\x3f"),
- new Range(0x3aa, 0x3b0, "\x3f"),
- new Range(0x3b6, 0x3bb, "\x3f"),
- new Range(0x3bd, 0x3bf, "\x3f"),
- new Range(0x3c1, 0x3c2, "\x3f"),
- new Range(0x3c7, 0x4ba, "\x3f"),
- new Range(0x4bc, 0x588, "\x3f"),
- new Range(0x58a, 0x669, "\x3f"),
- new Range(0x66b, 0x1fff, "\x3f"),
- new Range(0x2000, 0x2006, "\x20"),
- new Range(0x2007, 0x200f, "\x3f"),
- new Range(0x2010, 0x2011, "\x2d"),
- new Range(0x2013, 0x2014, "\ufffd"),
- new Range(0x2015, 0x2016, "\x3f"),
- new Range(0x2018, 0x201a, "\ufffd"),
- new Range(0x201c, 0x201e, "\ufffd"),
- new Range(0x2020, 0x2022, "\ufffd"),
- new Range(0x2027, 0x202f, "\x3f"),
- new Range(0x2033, 0x2034, "\x3f"),
- new Range(0x2036, 0x2038, "\x3f"),
- new Range(0x2039, 0x203a, "\ufffd"),
- new Range(0x203b, 0x2043, "\x3f"),
- new Range(0x2045, 0x206f, "\x3f"),
- new Range(0x2071, 0x2073, "\x3f"),
- new Range(0x2079, 0x207e, "\x3f"),
- new Range(0x208a, 0x20a0, "\x3f"),
- new Range(0x20a2, 0x20a3, "\x3f"),
- new Range(0x20a5, 0x20a6, "\x3f"),
- new Range(0x20a8, 0x20ab, "\x3f"),
- new Range(0x20ad, 0x2101, "\x3f"),
- new Range(0x2103, 0x2106, "\x3f"),
- new Range(0x2108, 0x2109, "\x3f"),
- new Range(0x210b, 0x210d, "\x48"),
- new Range(0x2110, 0x2111, "\x49"),
- new Range(0x2116, 0x2117, "\x3f"),
- new Range(0x2118, 0x2119, "\x50"),
- new Range(0x211b, 0x211d, "\x52"),
- new Range(0x211e, 0x2121, "\x3f"),
- new Range(0x2125, 0x2127, "\x3f"),
- new Range(0x212e, 0x212f, "\x65"),
- new Range(0x2135, 0x2204, "\x3f"),
- new Range(0x2206, 0x2211, "\x3f"),
- new Range(0x2218, 0x2219, "\ufffd"),
- new Range(0x221b, 0x221d, "\x3f"),
- new Range(0x221f, 0x2222, "\x3f"),
- new Range(0x2224, 0x2228, "\x3f"),
- new Range(0x222a, 0x2235, "\x3f"),
- new Range(0x2237, 0x223b, "\x3f"),
- new Range(0x223d, 0x2247, "\x3f"),
- new Range(0x2249, 0x2260, "\x3f"),
- new Range(0x2262, 0x2263, "\x3f"),
- new Range(0x2264, 0x2265, "\x3d"),
- new Range(0x2266, 0x2269, "\x3f"),
- new Range(0x226a, 0x226b, "\ufffd"),
- new Range(0x226c, 0x22c4, "\x3f"),
- new Range(0x22c6, 0x2301, "\x3f"),
- new Range(0x2304, 0x230f, "\x3f"),
- new Range(0x2311, 0x231f, "\x3f"),
- new Range(0x2322, 0x2328, "\x3f"),
- new Range(0x232b, 0x24ff, "\x3f"),
- new Range(0x2503, 0x250b, "\x3f"),
- new Range(0x250d, 0x250f, "\x3f"),
- new Range(0x2511, 0x2513, "\x3f"),
- new Range(0x2515, 0x2517, "\x3f"),
- new Range(0x2519, 0x251b, "\x3f"),
- new Range(0x251d, 0x2523, "\x3f"),
- new Range(0x2525, 0x252b, "\x3f"),
- new Range(0x252d, 0x2533, "\x3f"),
- new Range(0x2535, 0x253b, "\x3f"),
- new Range(0x253d, 0x254f, "\x3f"),
- new Range(0x2552, 0x255d, "\x2b"),
- new Range(0x255e, 0x2563, "\ufffd"),
- new Range(0x2564, 0x2569, "\x2d"),
- new Range(0x256a, 0x256c, "\x2b"),
- new Range(0x256d, 0x257f, "\x3f"),
- new Range(0x2581, 0x2583, "\x3f"),
- new Range(0x2585, 0x2587, "\x3f"),
- new Range(0x2589, 0x258b, "\x3f"),
- new Range(0x258d, 0x258f, "\x3f"),
- new Range(0x2590, 0x2593, "\ufffd"),
- new Range(0x2594, 0x259f, "\x3f"),
- new Range(0x25a1, 0x263b, "\x3f"),
- new Range(0x263d, 0x2757, "\x3f"),
- new Range(0x2759, 0x2fff, "\x3f"),
- new Range(0x3001, 0x3007, "\x3f"),
- new Range(0x300a, 0x300b, "\ufffd"),
- new Range(0x300c, 0x3019, "\x3f"),
- new Range(0x301c, 0x30fa, "\x3f"),
- new Range(0x30fc, 0xff00, "\x3f")
- ];
-})(); \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/AddressMatcher.js b/extensions/noscript/chrome/content/noscript/AddressMatcher.js
deleted file mode 100644
index 8607057..0000000
--- a/extensions/noscript/chrome/content/noscript/AddressMatcher.js
+++ /dev/null
@@ -1,279 +0,0 @@
-function AddressMatcher(s) {
- this.source = s;
- this.rx = this.parse(s);
-}
-AddressMatcher.create = function(s) {
- return s && new AddressMatcher(s);
-}
-
-AddressMatcher.prototype = {
- rx: null,
- networks: null,
- netMatching: false,
-
- _universal: { test: function(s) { return true; } },
-
- _specRx: /^((?:ht|f)tps?:\/*)([^\/]*)/i,
- test: function(u) {
- if (!this.rx) return false;
-
- let spec = this._specRx.exec(u);
-
- if (spec) {
- let host = spec[2];
- let atPos = host.indexOf("@");
- if (atPos > -1) {
- host = host.substring(atPos + 1);
- u = spec[1] + host + u.substring(spec[0].length);
- }
- // handle IDN
- if (host.substring(0, 4) === "xn--") {
- try {
- if (this.rx.test(spec[1] + DNS.idn.convertACEtoUTF8(host) + spec.input.substring(spec[0].length)))
- return true;
- } catch (e) {}
- }
- }
-
- return this.rx.test(u);
- },
-
- testURI: function(uri) { return this.test(uri.spec); },
-
- _networkTest: function(uri, canDoDNS, allIPs) {
- var res = this.rx && this.rx.test(uri.spec || uri);
- if (res || !canDoDNS) return res;
-
- if (!uri.spec) {
- uri = IOS.newURI(uri, null, null);
- }
- try {
- var host = uri.host
- if (!host) return false;
- if (Network.isNet(host))
- return this.testIP(host);
-
- var dnsRecord = DNS.resolve(host);
- if (dnsRecord && dnsRecord.valid)
- return allIPs ? dnsRecord.entries.every(this.testIP, this)
- : dnsRecord.entries.some(this.testIP, this);
- } catch(e) {
- dump(e + "\n");
- }
- return false;
- },
-
- testIP: function(ip) {
- return this.networks.some((n) => n.test(ip));
- },
-
- parse: function(s) {
- try {
- var universal = false;
- var rxs = s && s.split(/\s+/).map(function(p) {
- if (p === '*') {
- universal = true;
- }
-
- if (universal || !/\S+/.test(p)) return null;
-
- if (Network.isNet(p)) {
- var net;
- if (!this.netMatching) {
- this.netMatching = true;
- this.test = this.testURI = this._networkTest;
- this.networks = [net = new Network(p)];
- } else {
- this.networks.push(net = new Network(p));
- }
-
- if (p.indexOf("/") > -1 || (net.ipv4 ? net.mask < 32 : net.mask < 128))
- return null; // is a whole network, using IP for URL doesn't make sense
-
- if (p.indexOf(":") > -1)
- p = "[" + p + "]"; // prepare IPv6 URL host
- }
-
- if(!/[^\w\-\[\]/:%@;&#\?\.\*]/.test(p)) {
-
- // either simple or glob
- const hasPath = /^(?:\w+:\/\/|)[^\/]+\//.test(p);
- const hasScheme = /^[a-z][\w\-]+:(?:\/+|[^/]*\D|$)/.test(p);
-
- p = p.replace(/[\.\?\-]/g, "\\$&"); // escape special regexp chars
-
- if (!hasScheme) { // adjust for no protocol
- if (p.substring(0, 2) === '\\.') {
- // al_9x's proposed syntactic sugar to match both *.x.y and x.y
- p = "(?:[^/]+\\.)?" + p.substring(2);
- }
- p = "[a-z]\\w+://" + p;
- }
-
- if (!hasPath &&
- p.substring(p.length - 1) != ':' // unless scheme-only
- ) {
- // adjust for no path
- p += "(?::\\d+)?(?:[/\\?#]|$)";
- }
-
- if (!/\*/.test(p)) {
- // simple "starts with..." site matching
- return '^' + p;
- }
-
- // glob matching
- if (p.slice(-1) == '*') p = p.slice(0, -1); // optimize trailing *
- else if (hasPath) p += '$';
-
- return '^' + p.replace(/\*/g, '.*?').replace(/^([^\/:]+:\/*)\.\*/, "$1[^/]*");
- }
-
- return p;
- }, this).filter(function(p) { return p !== null });
-
- if (universal) {
- this.test = this._universal.test;
- return this._universal;
- }
-
- if (rxs.length !== 0) {
- try {
- return new RegExp(rxs.join("|"));
- } catch(e) {
- rxs = rxs.filter(function(p) {
- try {
- new RegExp(p);
- return true;
- } catch(e) {
- dump("Illegal regexp in AddressMatcher: " + p + " -- " + e + "\n");
- }
- return false;
- });
- if (rxs.length !== 0) {
- return new RegExp(rxs.join("|"));
- }
- }
- }
- } catch(e) {
- dump("Illegal AddressMatcher: " + s + " -- " + e + "\n");
- }
- return null;
- }
-};
-
-function Network(s) {
- this.src = s;
- var parts = s.split("/");
- var addr = parts[0];
- var smask;
-
- if (!this._isIPV4(addr))
- this.ipv4 = false;
-
- if (parts.length > 1) {
- this.mask = parseInt(parts[1]);
-
- var defMask = this.ipv4 ? 32 : 128;
-
- if (this.mask != defMask) {
- if (this.mask > defMask) this.mask = defMask;
- else {
- if (this.ipv4) this.ipv4Mask = this._maskToBits(this.mask, 32)
- else this.ipv6Mask = this._maskToBits(this.mask, 128);
- }
- }
- } else if (!this.ipv4) {
- this.mask = 128;
- }
- this.addr = this.ipv4 ? this._parseIPV4(addr) : this._parseIPV6(addr) ;
-}
-
-Network._netRx = /^(?:(?:\d+\.){1,3}\d*|[0-9a-f:]*:[0-9a-f:]*:[0-9a-f:]*)(:?\/\d{1,3})?$/i;
-Network.isNet = function(s) {
- return this._netRx.test(s);
-}
-
-Network.prototype = {
- ipv4: true,
- mask: 32,
- ipv4Mask: 0xffffffff,
- ipv6Mask: [0xffffffff, 0xffffffff, 0xffffffff, 0xffffffff],
-
- _isIPV4: function(addr) {
- return addr.indexOf(":") < 0;
- },
- _maskToBits: function(mask, length) {
- var smask = "", j = 0;
- for(; j < mask; j++) smask += "1";
- for(; j < length; j++) smask += "0";
- if (length <= 32)
- return parseInt(smask, 2);
- var ret = [];
-
- for(j = 0; j < length; j += 32) {
- ret.push(parseInt(smask.substring(j, j + 32), 2));
- }
- return ret;
- },
-
- test: function(addr) {
- addr = this.parse(addr);
- if (typeof(addr) === "number")
- return this.addr === addr;
-
- if (typeof(this.addr) === "number") return false;
- for (var j = this.addr.length; j-- > 0;) {
- if (addr[j] !== this.addr[j]) return false;
- }
- return true;
- },
-
- parse: function(addr) {
- return this._isIPV4(addr) ? this._parseIPV4(addr) : this._parseIPV6(addr);
- },
- _parseIPV6: function(addr) {
- var parts = addr.split(":");
- var s = '', c, k, dz = false;
- for (var j = 0, len = parts.length; j < len; j++) {
- c = parts[j];
- if (c.length === 0 && !dz) {
- dz = true;
- for (k = 9 - len; k-- >0;) s += "0000";
- } else {
- s += "0000".substring(c.length) + c;
- }
- }
-
- var ret = [0, 0, 0, 0];
- var pos;
- for (j = 4; j-- > 0; ) {
- pos = j * 8;
- ret[j] = parseInt(s.substring(pos, pos + 8), 16) & this.ipv6Mask[j];
- }
- return ret;
- },
- _pows: [0x1000000, 0x10000, 0x100, 1],
- _parseIPV4: function(addr) {
- var parts = addr.split(".");
- var ret = 0, byt3;
- for (var j = parts.length; j-- > 0;) {
- byt3 = parseInt(parts[j], 10);
- if (byt3) {
- if (byt3 > 255) byt3 = 255;
- ret += byt3 * this._pows[j];
- } else if (j == parts.length - 1 && parts[j] == '') {
- parts.pop();
- }
- }
- if (parts.length < 4 && this.mask == 32 && typeof (this.addr) == "undefined") {
- this.mask = parts.length * 8;
- this.ipv4Mask = this._maskToBits(this.mask, 32);
- }
- return ret & this.ipv4Mask;
- },
-
- toString: function() {
- return this.src;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/Bug.js b/extensions/noscript/chrome/content/noscript/Bug.js
deleted file mode 100644
index 5531a30..0000000
--- a/extensions/noscript/chrome/content/noscript/Bug.js
+++ /dev/null
@@ -1,21 +0,0 @@
-var Bug = {
-
-};
-
-{
- let lazy = {
- $677643: "8.0",
- $677050: ["6.0", "18.0"],
- $771655: "20",
- $789773: "19",
- }
- for (let b in lazy) {
- let v = lazy[b];
- Bug.__defineGetter__(b, function() {
- delete this[b];
- return this[b] = (typeof v[0] === "object")
- ? ns.geckoVersionCheck(v[0]) >= 0 && ns.geckoVersionCheck(v[1]) < 0
- : ns.geckoVersionCheck(v) < 0;
- });
- }
-} \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/ChannelReplacement.js b/extensions/noscript/chrome/content/noscript/ChannelReplacement.js
deleted file mode 100644
index dae16ff..0000000
--- a/extensions/noscript/chrome/content/noscript/ChannelReplacement.js
+++ /dev/null
@@ -1,61 +0,0 @@
-function ChannelReplacement(chan, newURI, newMethod) {
- return this._init(chan, newURI, newMethod);
-}
-
-ChannelReplacement.runWhenPending = function(channel, callback) {
- callback();
-};
-
-ChannelReplacement.prototype = {
- _init: function(chan, newURI, newMethod) {
- this.oldChannel = this.channel = chan;
- this.newURI = newURI || chan.URI;
- this.newMethod = newMethod;
- return this;
- },
- replace: function(realRedirect, callback) {
- let chan = this.channel;
- if (!this.newURI.equals(chan.URI)) {
- realRedirect = true;
- }
- if (this.newMethod && this.newMethod !== chan.requestMethod) {
- chan.requestMethod = this.newMethod;
- realRedirect = true;
- }
-
- let forceRedirect = !realRedirect;
- if (forceRedirect) {
- chan.redirectionLimit += 1;
- } else {
- let loadInfo = chan.loadInfo;
- if (loadInfo) {
- let type = loadInfo.externalContentPolicyType || loadInfo.contentPolicyType;
- forceRedirect = type === 11 || type === 12;
- }
- }
-
- if (forceRedirect) {
- let ncb = chan.notificationCallbacks;
- if (ncb) {
- try {
- let ces = ncb.getInterface(Ci.nsIChannelEventSink);
- if (ces) {
- INCLUDE("ForcedRedirectionCallback");
- chan.notificationCallbacks = new NCBWrapper(ncb, new CESDelegate(ces));
- }
- } catch (e) {
- // notificationCallbacks might not implement nsIChannelEventSink, e.g. in live bookmarks
- }
- }
- }
-
-
- chan.redirectTo(this.newURI);
- chan.suspend();
- if (typeof callback === "function") callback(this);
- else this.open();
- },
- open: function() {
- this.channel.resume();
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/ClearClickHandler.js b/extensions/noscript/chrome/content/noscript/ClearClickHandler.js
deleted file mode 100644
index 211c330..0000000
--- a/extensions/noscript/chrome/content/noscript/ClearClickHandler.js
+++ /dev/null
@@ -1,1414 +0,0 @@
-function ClearClickHandler(ns) {
- this.ns = ns;
-}
-
-ClearClickHandler.prototype = {
-
- uiEvents: ["mousedown", "mouseup", "click", "dblclick", "drop", "keydown", "keypress", "keyup", "blur"],
-
- rapidFire: {
- events: ["keydown", "mousedown", "mouseover"],
- quarantine: 800,
- site: null,
- ts: 0,
- mouse: false,
- lastOver: { x: 0, y: 0, site: '', ts: 0 },
-
- check: function(ev, site, ts) {
- const type = ev.type;
-
- let mouse = false, over = false;
- switch(type[0]) {
- case 'c': case 'm':
- mouse = true;
- over = type === "mouseover";
- case 'k':
- break;
-
- default:
- return false;
- }
-
- // ns.log(ev.type + " " + ev.target + "@" + site + " <- " + this.site + " -- " + ev.timeStamp)
-
- let lo = this.lastOver;
-
- if (this.mouse === mouse) {
- if (site !== this.site) {
- let contentRx = /^(?:(?:ht|f)tps?|data|javascript|feed):/i;
- if (contentRx.test(this.site) &&
- (contentRx.test(site) || !contentRx.test(ev.target.ownerDocument.defaultView.top.location.href))
- ) {
-
- if (lo.site && lo.site !== site && (ts - lo.ts) < this.quarantine) {
- let d = ev.target.ownerDocument;
- let w = d.defaultView;
- let de = d.documentElement;
- let width = de.clientWidth;
- let height = de.clientHeight;
- let top = w.mozInnerScreenY + w.scrollY + de.offsetTop;
- let left = w.mozInnerScreenX + w.scrollX + de.offsetLeft;
- // ns.log("HOVER " + ev.target + "@" + lo.site + ", " + top + ", " + left + ", " + (top + height) + ", " + (left + width) + " - " + lo.y + ", " + lo.x );
- if (lo.x > left && lo.x - left < width && lo.y > top && lo.y - top < height) {
- this.ts = ts;
- // ns.log("HOVER TS " + ts);
- }
- lo.site = '';
- }
-
- if (over) {
- if (ts - lo.ts < this.quarantine) return false;
- } else {
- if (ts - this.ts < this.quarantine) {
- if (!lo.site) this.ts = ts - this.quarantine / 2;
- return ns.getPref("clearClick.rapidFireCheck");
- }
- }
-
- }
- }
- } else this.mouse = mouse;
-
- this.site = site;
-
- if (over) {
- if (!ev.target.contentWindow) {
- lo.site = site;
- lo.ts = ts;
- let w = ev.target.ownerDocument.defaultView;
- lo.x = ev.pageX + w.mozInnerScreenX;
- lo.y = ev.pageY + w.mozInnerScreenY;
- }
- } else {
- if (mouse) {
- lo.site = '';
- }
- this.ts = ts;
- }
- return false;
- }
- },
-
- chromeInstall(window) {
- this._install(window.document, this.rapidFire.events);
- },
- chromeUninstall(window) {
- this.uninstall(window.document);
- },
-
- install(target) {
- this._install(target, this.uiEvents);
- },
-
- _install(target, events) {
- for (let et of events) {
- target.addEventListener(et, this, true);
- }
- (target._clearClickEvents || (target._clearClickEvents = [])).push(...events);
- },
-
- uninstall(target) {
- let events = target._clearClickEvents;
- try {
- for (let et of events) {
- target.removeEventListener(et, this, true);
- }
- ns.dump(`Removed [${events.join(", ")}] listener.`);
- } catch (e) {
- if (Components) Components.utils.reportError(e);
- }
- },
-
- exceptions: null,
-
- sameSiteParents: function(w) {
- const ns = this.ns;
- var site = ns.getSite(w.location.href);
- if (site == "about:blank") site = "";
- var parentSite;
- for(var p = w.parent; p != w; w = p, p = w.parent) {
- parentSite = ns.getSite(p.location.href);
- if (!site || /^(?:chrome|resource|about):/.test(parentSite)) {
- site = parentSite;
- continue;
- }
- if (site != parentSite) return false;
- }
- if (ns.consoleDump & LOG_CLEARCLICK) ns.dump("ClearClick skipping, same site parents for " + site);
- return true;
- },
-
- appliesHere: function(url) {
- const ns = this.ns;
- return ns.appliesHere(ns.clearClick, url) &&
- !(this.exceptions && this.exceptions.test(url));
- },
-
- checkSubexception: function(url) {
- return this.subexceptions && this.subexceptions.test(url);
- },
-
- _whitelist: {},
- whitelistLen: 0,
- isWhitelisted: function(w) {
-
- var l = this._whitelist[w.location.href];
- if (!l) return false;
-
- var pp = [];
- for(var p = w.parent; p != w; w = p, p = w.parent) {
- pp.push(p.location.href);
- }
- return l.indexOf(pp.join(" ")) > -1;
- },
-
- whitelist: function(w) {
- if (this.isWhitelisted(w)) return;
- var u = w.location.href;
-
- var pp = [];
- for(var p = w.parent; p != w; w = p, p = w.parent) {
- pp.push(p.location.href);
- }
-
- var l;
- if (u in this._whitelist) l = this._whitelist[u];
- else {
- l = this._whitelist[u] = [];
- this.whitelistLen++;
- }
-
- l.push(pp.join(" "));
- },
- resetWhitelist: function() {
- this._whitelist = {};
- this.whitelistLen = 0;
- },
- _embedRx: /^(?:object|embed)$/i,
- isEmbed(o) {
- return this._embedRx.test(o.tagName) &&
- !o.contentDocument && ns.getExpando(o, "site") != ns.getSite(o.ownerDocument.documentURI)
- },
-
- swallowEvent: function(ev) {
- ev.cancelBubble = true;
- ev.stopPropagation();
- ev.preventDefault();
- },
-
- _zoom: 1,
-
-
- getBox: function(o, d, w) {
- if (!d) d = o.ownerDocument;
- if (!w) w = d.defaultView;
- var c = o.getBoundingClientRect();
- var x = c.left, y = c.top; // this is relative to the view port, just like mozInnerScreen*
-
- return {
- x: x + w.scrollX, y: y + w.scrollY, // add scroll* to make it absolute
- width: c.width, height: c.height,
- screenX: w.mozInnerScreenX + x, screenY: w.mozInnerScreenY + y
- };
- },
-
-
- getBG: function(w) {
- var bg = w.document.body && w.getComputedStyle(w.document.body, '').backgroundColor || "#fff";
- return bg == "transparent" ? w != w.parent && this.getBG(w.parent) || "#fff" : bg;
- },
-
- _constrain: function(box, axys, dim, max, vp, center) {
- var d;
- var scr = "screen" + axys.toUpperCase();
- // trim bounds to take in account fancy overlay borders
- var l = box[dim];
- var n = box[axys];
-
- if (vp.frame && center && l < vp[dim]) { // expand to viewport if possible
- l = vp[dim];
- }
-
- if (l > 6) {
- var bStart = Math.floor(l * 0.1) // 20% border
- var bEnd = bStart;
- if (bStart + n > center) {
- bStart = center - n;
- } else if (l + n - center < bEnd) {
- bEnd = l + n - center;
- }
- box[dim] = (l -= (bStart + bEnd));
- box[axys] = (n += bStart);
- box[scr] += bStart;
-
- }
-
- if (l > max) {
- // resize
- if (center) {
- var halfMax = Math.round(max / 2);
- var nn = center - halfMax;
- if (nn > n && center + halfMax > n + l) nn = (n + l) - max;
- box[axys] = nn;
- box[scr] += (nn - n);
- n = nn;
- }
- l = box[dim] = max;
- }
- // slide into viewport
- var vpn = vp[axys];
- d = (n < vpn)
- ? vpn - n
- : (n + l) > (vpn + vp[dim])
- ? (vpn + vp[dim]) - (n + l)
- : 0;
-
- if (d) {
- n = (box[axys] += d);
- box[scr] += d;
- }
-
- },
-
- get canvas() {
- delete this.__proto__.canvas;
- const impl = Cc["@mozilla.org/xul/xul-document;1"].createInstance(Ci.nsIDOMDocument).implementation;
- return this.__proto__.canvas = (("createHTMLDocument" in impl)
- ? impl.createHTMLDocument("")
- : impl.createDocument(
- HTML_NS, "html", impl.createDocumentType(
- "html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd"
- ))
- ).createElementNS(HTML_NS, "canvas");
- },
-
- _semanticContainersRx: /^(?:p|quote|ul|ol|dir|pre|table)$/i,
- isSemanticContainer: function(o) { return this._semanticContainersRx.test(o.tagName) && o.ownerDocument.URL.indexOf("view-source") !== 0; },
-
- forLog: function(o) {
- return o.tagName + "/" + (o.tabIndex || 0);
- },
-
- handleEvent: function(ev) {
- if (typeof ClearClickHandler === "undefined") { // uninstalled
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, true);
- return;
- }
- const o = ev.target;
- const d = o.ownerDocument;
- if (!d) return;
-
- if (d === ev.currentTarget || // chrome source, see rapidFire installation
- ev.button || // right or middle click
- ev.keyCode && // special keys, e.g. for UI navigation
- (ev.ctrlKey || ev.metaKey || ev.altKey || ev.keyCode < 48 && ev.keyCode !== 13 && ev.keyCode !== 32)
- ) {
- this.rapidFire.ts = 0;
- // this.ns.log("Reset global event tracking");
- if (d === ev.currentTarget || ev.keyCode) return;
- }
-
-
- const w = d.defaultView;
- if (!w) return;
-
- const ns = this.ns;
-
- const top = w.top;
- const topURL = top.document.documentURI;
-
- var isEmbed;
- var ts = Date.now();
-
- if (this.rapidFire.check(ev, d.documentURIObject.prePath, ts)) {
- this.swallowEvent(ev);
- ns.log("[NoScript ClearClick] Swallowed event " + ev.type + " on " +
- d.documentURI + " (rapid fire from " + this.rapidFire.site +
- " in " + (ts - this.rapidFire.ts) + "ms)", true);
- return;
- }
-
- if (ev.type === "mouseover") return;
-
- if (!("__clearClickUnlocked" in top))
- top.__clearClickUnlocked = !this.appliesHere(topURL);
-
- if (top.__clearClickUnlocked) return;
-
- if (!("__clearClickUnlocked" in o)) {
-
- o.__clearClickUnlocked =
- o === d.documentElement || o === d.body || // key event on empty region
- this.isSemanticContainer(o) ||
- !(isEmbed = this.isEmbed(o)) && // plugin embedding?
- (w == top ||
- ("__clearClickUnlocked" in w
- ? w.__clearClickUnlocked
- : (w.__clearClickUnlocked = this.isWhitelisted(w))
- ) ||
- this.sameSiteParents(w) // cross-site document?
- ) ||
- isEmbed && ns.isClickToPlay(o) ||
- ns.getPluginExtras(o) && ns.getPref("confirmUnblock") || // Just enabled from NS placeholder after prompt?
- this.checkSubexception(isEmbed && (o.src || o.data) || w.location.href);
- }
-
- if (o.__clearClickUnlocked || w.__clearClickUnlocked) return;
-
- var p = ns.getExpando(o, "clearClickProps", {});
- var verbose = ns.consoleDump & LOG_CLEARCLICK;
- var etype = ev.type;
- if (verbose) ns.dump(o.tagName + ", " + etype + ", " + p.toSource());
-
- var obstructed, ctx, primaryEvent;
- try {
- if (etype == "blur") {
- if(/click|key/.test(p.lastEtype)) {
- if (verbose) ns.dump("ClearClick: resetting status on " + this.forLog(o) + " for " + etype);
- if (p.unlocked) p.unlocked = false;
- }
- return;
- }
- if (p.unlocked) return;
-
- ctx = /mouse|drop/.test(etype)
- && { x: ev.pageX, y: ev.pageY, debug: ev.ctrlKey && ev.button == 1 && ns.getPref("clearClick.debug") }
- || {};
- isEmbed = (typeof(isEmbed) === "boolean" ? isEmbed : this.isEmbed(o)) // && ns.isWindowlessObject(o);
- if (!(isEmbed || w.frameElement)) return;
- ctx.isEmbed = isEmbed;
- primaryEvent = /^(?:(?:mouse|key)down|drop)$/.test(etype) ||
- // submit button generates a syntethic click if any text-control receives [Enter]: we must consider this "primary"
- etype == "click" && ev.screenX == 0 && ev.screenY == 0 && ev.pageX == 0 && ev.pageY == 0 && ev.clientX == 0 && ev.clientY == 0 && ev.target.form &&
- ((ctx.box = this.getBox(ev.target, d, w)).screenX * ctx.box.screenY != 0) ||
- // allow infra-document drag operations and tabulations
- etype != "blur" && top.__clearClickDoc == d && (top.__clearClickProps.unlocked || top.__clearClickProps.lastEtype == "blur");
-
- obstructed = (primaryEvent || !("obstructed" in p))
- ? p.obstructed = this.checkObstruction(o, ctx)
- : p.obstructed; // cache for non-primary events
- } catch(e) {
- ns.dump(e);
- obstructed = true;
- } finally {
- p.lastEtype = etype;
- top.__clearClickProps = p;
- top.__clearClickDoc = d;
- }
-
- var quarantine = ts - (p.ts || 0);
-
- if (verbose) ns.dump("ClearClick: " + ev.target.tagName + " " + etype +
- "(s:{" + ev.screenX + "," + ev.screenY + "}, p:{" + ev.pageX + "," + ev.pageY + "}, c:{" + ev.clientX + "," + ev.clientY +
- ", w:" + ev.which + "}) - obstructed: " + obstructed + ", check time: " + (Date.now() - ts) + ", quarantine: " + quarantine +
- ", primary: " + primaryEvent + ", ccp:" + (top.__clearClickProps && top.__clearClickProps.toSource()));
-
- var unlocked = !obstructed && primaryEvent && quarantine > 3000;
-
- if (unlocked) {
- if (verbose) ns.dump("ClearClick: unlocking " + ev.target.tagName + " " + etype);
- p.unlocked = true;
- } else {
-
- this.swallowEvent(ev);
- ns.log("[NoScript ClearClick] Swallowed event " + etype + " on " + this.forLog(o) + " at " + w.location.href, true);
- var docShell = DOM.getDocShellForWindow(w);
- var loading = docShell && (docShell instanceof Ci.nsIWebProgress) && docShell.isLoadingDocument;
- if (!loading) {
- p.ts = ts;
- if (primaryEvent && ctx.img && ns.getPref("clearClick.prompt") && !this.prompting) {
- try {
- this.prompting = true;
- let params = {
- url: ctx.isEmbed && (o.src || o.data) || o.ownerDocument.URL,
- pageURL: w.location.href,
- topURL: topURL,
- img: ctx.img,
- locked: false,
- pageX: ev.pageX,
- pageY: ev.pageY,
- zoom: this._zoom
- };
- if (!this.showWarning(w, params)) {
- w.__clearClickUnlocked = o.__clearClickUnlocked = true
- this.whitelist(w);
- }
- } finally {
- this.prompting = false;
- }
- }
- }
- }
- },
-
- showWarningParent(window, params) {
- window.openDialog(
- "chrome://noscript/content/clearClick.xul",
- "noscriptClearClick",
- "chrome, dialog, dependent, centerscreen, modal",
- params);
- return params;
- },
- showWarning(window, params) {
- return DOM.getFrameMM(window).sendSyncMessage(IPC_MSG.CLEARCLICK_WARNING, params)[0];
- },
-
- findParentForm: function(o) {
- var ftype = Cu.getGlobalForObject(o).HTMLFormElement;
- if (!ftype) return null;
- while((o = o.parentNode)) {
- if (o instanceof ftype) return o;
- }
- return null;
- },
-
-
- rndColor: function() {
- var c = Math.round(Math.random() * 0xffffff).toString(16);
- return "#" + ("000000".substring(c.length)) + c;
- },
-
-
- maxWidth: 350,
- maxHeight: 200,
- minWidth: 160,
- minHeight: 100,
- _NO_SCROLLBARS: {w: 0, h: 0},
- computeScrollbarSizes: function(window, dElem, body) {
- var fw = window.innerWidth, fh = window.innerHeight;
-
- if (body && body.ownerDocument.compatMode == "BackCompat") {
- dElem = body;
- }
-
- var dw = dElem.clientWidth, dh = dElem.clientHeight;
- var w = Math.min(fw, dw), h = Math.min(fh, dh);
-
- var zoom = window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils).screenPixelsPerCSSPixel;
-
- return { w: (fw - w) * zoom, h: (fh - h) * zoom };
- },
-
- checkObstruction: function(o, ctx) {
- var d = o.ownerDocument;
- var w = d.defaultView;
- if (!(ctx.isEmbed || d instanceof w.HTMLDocument)) {
- o = w.frameElement;
- d = o.ownerDocument;
- w = d.defaultView;
- ctx.isEmbed = true;
- }
-
- var dElem = d.documentElement;
-
- var top = w.top;
-
- if (!DOM.getFrameMM(top)) return false; // some extensions, e.g. FoxTab, cause this
-
- var c = this.canvas;
- var gfx = c.getContext("2d");
-
- var bg = this.getBG(w);
-
- var bgStyle;
- var box, rootBox, curtain, woi;
-
- var frame, frameClass, objClass;
-
- var docPatcher = new DocPatcher(this.ns, o, w);
-
- var sheet = null;
-
- var img1 = null, img2 = null, tmpImg = null;
-
- function Snapshot(w, x, y) {
- gfx.drawWindow(w, Math.round(x), Math.round(y), c.width, c.height, bg);
- if (woi && w == top && rootBox) {
- gfx.fillStyle = bg;
- for (let b of woi)
- gfx.fillRect(b.screenX - rootBox.screenX - x, b.screenY - rootBox.screenY - y, b.width, b.height);
- }
- this.imageData = gfx.getImageData(0, 0, c.width, c.height);
- }
-
- Snapshot.prototype = {
- THRESHOLD: ns.getPref("clearClick.threshold") / 100,
- resembles: function(other) {
- if (other === null) return false;
-
- let buf1 = this.imageData.data;
- let buf2 = other.imageData.data;
- let diff = 0, eq = 0;
- const w = this.imageData.width;
- const h = this.imageData.height;
- const tot = w * h;
- const maxDiff = Math.round(tot * this.THRESHOLD);
- const minEq = tot - maxDiff;
- let resembles = true;
- resembles_loop:
- for (let x = 0; x < w; x++) {
- for (let y = 0; y < h; y++) {
- let p = (y * w + x) * 4;
- let r1 = buf1[p], r2 = buf2[p],
- g1 = buf1[++p], g2 = buf2[p],
- b1 = buf1[++p], b2 = buf2[p];
- if (r1 !== r2 || g1 !== g2 || b1 !== b2) {
- if (++diff > maxDiff) {
- resembles = false;
- break resembles_loop;
- }
- } else if (++eq > minEq) {
- break resembles_loop;
- }
- }
- }
- if (ns.consoleDump & LOG_CLEARCLICK) {
- ns.dump("Diff: " + diff + " / Tot: " + tot + "(maxDiff = " + maxDiff + ")");
- }
- return resembles;
- },
- toURL: function(imageData) {
- gfx.putImageData(imageData || this.imageData, 0, 0);
- return c.toDataURL();
- }
- }
-
- function compareSnapshots(x1, y1, x2, y2) {
- img1 = null;
- try {
- if (objClass) {
- docPatcher.clean(true);
- }
- if (curtain && !curtain.parentNode) {
- if (o.nextSibling) {
- o.parentNode.insertBefore(curtain, o.nextSibling);
- } else {
- o.parentNode.appendChild(curtain);
- }
- }
- img1 = new Snapshot(w, x1, y1);
- } catch(ex) {
- throw ex;
- } finally {
- docPatcher.clean(false);
- }
- img2 = tmpImg = new Snapshot(top, x2, y2);
- return ret && !img1.resembles(img2);
- }
-
- var sd = this._NO_SCROLLBARS;
-
- try {
-
- docPatcher.linkAlertHack(true);
- docPatcher.fbPresenceHack(true);
- docPatcher.abpTabsHack(true);
- docPatcher.trafficLightHack(true);
- try {
- docPatcher.opaque(true);
-
- var fbPresence; // hack for Facebooks's fixed positioned widget
-
- if (ctx.isEmbed) { // objects and embeds
- if (this.ns.getPref("clearClick.plugins", true)) {
- objClass = new ClassyObj(o);
- objClass.append(" __noscriptBlank__");
- docPatcher.blankPositioned(true);
- docPatcher.clean(true);
- } else {
- DOM.addClass(o, "__noscriptOpaqued__");
- }
- }
-
- if ((frame = w.frameElement)) {
- frameClass = new ClassyObj(frame);
- DOM.removeClass(frame, "__noscriptScrolling__");
- sd = this.computeScrollbarSizes(w, dElem, d.body);
-
- }
-
- let clientHeight = w.innerHeight - sd.h;
- let clientWidth = w.innerWidth - sd.w;
- // print(dElem.clientWidth + "," + dElem.clientHeight + " - " + w.innerWidth + "," + w.innerHeight);
-
- if (!ctx.isEmbed) {
- curtain = d.createElementNS(HTML_NS, "div");
- with (curtain.style) {
- top = left = "0px";
-
- width = (clientWidth + w.scrollX) + "px";
- height = (clientHeight + w.scrollY) + "px";
-
- padding = margin = borderWidth = MozOutlineWidth = "0px";
- position = "absolute";
- zIndex = DOM.maxZIndex;
-
- background = this.rndColor();
- }
- }
-
- let maxWidth = Math.max(Math.min(this.maxWidth, clientWidth), sd.w ? 0 : Math.min(this.minWidth, dElem.offsetWidth), 8);
- let maxHeight = Math.max(Math.min(this.maxHeight, clientHeight), sd.h ? 0 : Math.min(this.minHeight, dElem.offsetHeight, 8));
-
- for (;;) {
- box = this.getBox(o, d, w);
- if (box.width > 0 && box.height > 0) break;
- o = o.parentNode;
- if (!o) return false;
- }
-
- // expand to parent form if needed
- var form = o.form;
- if (frame && !ctx.isEmbed && (form || (form = this.findParentForm(o)))) {
-
- let formBox = this.getBox(form, d, w);
- if (!(formBox.width && formBox.height)) { // some idiots put <form> as first child of <table> :(
- formBox = this.getBox(form.offsetParent || form.parentNode, d, w);
- if (!(formBox.width && formBox.height)) {
- formBox = this.getBox(form.parentNode.offsetParent || o.offsetParent, d, w);
- }
- }
-
- if (formBox.width && formBox.height) {
- // form has layout, recenter to show as much as possible
- ctx.x = ctx.x || box.x + box.width; // use mouse coordinates or
- ctx.y = ctx.y || box.y + box.height; // rightmost widget position
-
- box = formBox; // the form is our new reference
-
- var delta;
-
- // move inside the viewport if needed
- if (box.x < 0) {
- box.screenX -= box.x;
- box.x = 0;
- }
- if (box.y < 0) {
- box.screenY -= box.y;
- box.y = 0;
- }
-
- // is our center out of the form?
- if (box.x + Math.min(box.width, maxWidth) < ctx.x) {
- box.width = Math.min(box.width, maxWidth);
- delta = ctx.x + 4 - box.width - box.x;
- box.x += delta;
- box.screenX += delta;
-
- }
- if (box.y + Math.min(box.height, maxHeight) < ctx.y) {
- box.height = Math.min(box.height, maxHeight);
- delta = ctx.y + 4 - box.height - box.y;
- box.y += delta;
- box.screenY += delta;
- }
-
- // recenter to the form
- ctx.x = box.x + box.width / 2;
- ctx.y = box.y + box.height / 2;
-
- o = form;
- }
- }
-
- bgStyle = dElem.style.background;
- dElem.style.background = bg;
-
- // clip, slide in viewport and trim
-
- var vp = {
- x: w.scrollX,
- y: w.scrollY + 3, // 3 pixels grace for box shadows cast from above a frame, like in the FB header
- width: Math.max(w.innerWidth - sd.w, 32),
- height: Math.max(w.innerHeight - sd.h - 3, 16), // Facebook like buttons are 20 pixel high
- frame: frame
- };
-
- var rtlOffset = 0;
-
- if (ctx.isEmbed) { // check in-page vieport
- vp.frame = null;
- vp.x = Math.max(vp.x, box.x);
- vp.y = Math.max(vp.y, box.y);
- vp.width = Math.min(vp.width, box.width);
- vp.height = Math.min(vp.height, box.height);
-
- for(let ancestor = o; ancestor = ancestor.parentNode;) {
-
- if ((ancestor.offsetWidth < box.width || ancestor.offsetHeight < box.height) &&
- w.getComputedStyle(ancestor, '').overflow != "visible") {
-
- // check if we're being fooled by some super-zoomed applet
- if (box.width / 4 <= ancestor.offsetWidth && box.height / 4 <= ancestor.offsetHeight) {
- let ancestorBox = this.getBox(ancestor, d, w);
-
- if (box.x < ancestorBox.x) {
- box.x = ancestorBox.x;
- box.screenX = ancestorBox.screenX;
- }
- if (box.y < ancestorBox.y) {
- box.y = ancestorBox.y;
- box.screenY = ancestorBox.screenY;
- }
- if (box.width + box.x > ancestorBox.width + ancestorBox.x) box.width = Math.max(this.minWidth, ancestor.clientWidth - (box.x - ancestorBox.x));
- if (box.height + box.y > ancestorBox.height + ancestorBox.y) box.height = Math.max(this.minHeight, ancestor.offsetHeight - (box.y - ancestorBox.y));
- }
- break;
- }
- }
- } else {
-
- // correct x offsets according to left scrollbars if needed
- try {
- var adaptiveScrollerSide = false;
- switch(this.ns.prefService.getIntPref("layout.scrollbar.side")) {
- case 1:
- adaptiveScrollerSide = true;
- case 0:
- if (!adaptiveScrollerSide && this.ns.prefService.getIntPref("bidi.direction") != 2)
- break;
- case 3:
- vp.x += this._scrollerCorrect(w, adaptiveScrollerSide);
- rtlOffset = this._scrollerCorrect(top, adaptiveScrollerSide);
- }
- } catch(e) {
- if (ns.consoleDump & LOG_CLEARCLICK) ns.dump(e);
- }
-
- }
-
- // clip viewport intersecting with scrolling parents
-
- const CLIP_MIN = 64;
- var clip = this._clip(o.parentNode, frame ? this.getBox(frame) : box);
- if (clip.h != 0) {
- if (vp.height + clip.h >= CLIP_MIN) vp.height += clip.h;
- else vp.height = CLIP_MIN;
- if (maxHeight + clip.h >= CLIP_MIN) maxHeight += clip.h;
- else maxHeight = CLIP_MIN;
- }
- if (clip.w != 0) {
- if (vp.width + clip.w >= CLIP_MIN) vp.width += clip.w;
- else vp.width = CLIP_MIN;
- if (maxWidth + clip.w >= CLIP_MIN) maxWidth += clip.w;
- else maxWidth = CLIP_MIN;
- }
- vp.x += clip.x;
- vp.y += clip.y;
-
- // Fit in viewport
-
- box.oX = box.x;
- box.oY = box.y;
- box.oW = box.width;
- box.oH = box.height;
-
- // print("Fitting " + box.toSource() + " in " + vp.toSource() + " - ctx " + ctx.x + ", " + ctx.y + " - max " + maxWidth + ", " + maxHeight);
-
- this._constrain(box, "x", "width", maxWidth, vp, ctx.x);
- this._constrain(box, "y", "height", maxHeight, vp, ctx.y);
- // print(box.toSource());
-
-
-
- c.width = box.width;
- c.height = box.height;
-
- woi = this.findWindowedRects(ctx.isEmbed ? o : w.frameElement);
-
- if (this.ns.consoleDump & LOG_CLEARCLICK) this.ns.dump("Snapshot at " + box.toSource() + " + " + w.pageXOffset + ", " + w.pageYOffset);
-
- if (curtain && frame) {
- dElem.appendChild(curtain);
- }
-
- img1 = new Snapshot(w, box.x, box.y);
-
- } finally {
- docPatcher.clean(false);
- }
-
-
- var rootElement = top.document.documentElement;
- rootBox = this.getBox(rootElement, top.document, top);
-
-
- var offsetY = (box.screenY - rootBox.screenY);
- var offsetX = (box.screenX - rootBox.screenX) + rtlOffset;
-
- var ret = true;
- var tmpImg;
-
- const offs = ctx.isEmbed ? [0] : [0, -1, 1, -2, 2, -3, -3];
-
- checkImage:
- for (let x of offs) {
- for (let y of offs) {
- tmpImg = new Snapshot(top, offsetX + x, offsetY + y);
- if (img1.resembles(tmpImg)) {
- ret = false;
- break checkImage;
- }
- if (!img2) img2 = tmpImg;
- }
- }
-
- if (ret && !curtain && ctx.isEmbed) {
- curtain = d.createElementNS(HTML_NS, "div");
- if (docPatcher) curtain.className = docPatcher.shownCS;
- with (curtain.style) {
- // we expand by 1 pixel in order to avoid antialias effects on the edge at zoom != 1 (GMail Flash attachment)
- top = (o.offsetTop - 1) + "px";
- left = (o.offsetLeft -1) + "px";
- width = (o.offsetWidth +2) + "px";
- height = (o.offsetHeight +2) + "px";
- position = "absolute";
- zIndex = w.getComputedStyle(o, '').zIndex;
- background = this.rndColor();
- }
-
- ret = compareSnapshots(box.x, box.y, offsetX, offsetY);
- }
-
- if (ret && ctx.isEmbed && ("x" in ctx) && c.width > this.minWidth && c.height > this.minHeight) {
- c.width = this.minWidth;
- c.height = this.minHeight;
- for (x of [Math.max(ctx.x - this.minWidth, box.oX), Math.min(ctx.x, box.oX + box.oW - this.minWidth)]) {
- for (y of [Math.max(ctx.y - this.minHeight, box.oY), Math.min(ctx.y, box.oY + box.oH - this.minHeight)]) {
- ret = compareSnapshots(x, y, offsetX + (x - box.x), offsetY + (y - box.y));
- if (!ret) {
- offsetX += (x - box.x);
- offsetY += (y - box.y);
- box.x = x;
- box.y = y;
- break;
- }
- }
- if (!ret) break;
- }
- }
-
- if (ctx.debug || this.checkCursor(ctx.isEmbed ? o : frame)) {
- ret = true;
- img2 = tmpImg;
- }
-
- if (ret) {
-
- if (curtain) {
-
- if (ctx.debug) {
-
- if (docPatcher.cleanSheet) {
- curtain.id = "curtain_" + DOM.rndId();
- docPatcher.cleanSheet += " #" + curtain.id + " { opacity: .4 !important }";
- }
-
- curtain.style.opacity = ".4"
-
- } else {
- curtain.parentNode.removeChild(curtain);
- curtain = null;
- }
- compareSnapshots(box.x, box.y, offsetX, offsetY);
- }
-
- ctx.img =
- {
- src: img1.toURL(),
- altSrc: img2.toURL(),
- width: c.width,
- height: c.height
- }
- }
-
- } finally {
- if (ctx.isEmbed) docPatcher.blankPositioned(false);
-
-
- if (curtain && curtain.parentNode) curtain.parentNode.removeChild(curtain);
- if (typeof(bgStyle) == "string") dElem.style.background = bgStyle;
-
- docPatcher.opaque(false);
- docPatcher.trafficLightHack(false);
- docPatcher.abpTabsHack(false);
- docPatcher.fbPresenceHack(false);
- docPatcher.linkAlertHack(false);
-
- if (objClass) objClass.reset();
- if (frameClass) frameClass.reset();
- }
-
- return ret;
-
- },
-
- checkCursor: function(o) {
- let w = o.ownerDocument.defaultView;
- let HTMLElement = w.HTMLElement;
- for(; o && o instanceof HTMLElement; o = o.parentNode) {
- try {
- let cursor = w.getComputedStyle(o, ':hover').cursor;
- if (cursor === "none" || cursor.indexOf("url(") !== -1) return true;
- } catch (e) {}
- }
- return w.frameElement && this.checkCursor(w.frameElement);
- },
-
- _clip: function(parent, box) {
- const MIN = 64;
-
- // backtrack all the overflow~="auto|scroll" parent elements and clip
-
- var pw = parent.ownerDocument.defaultView;
-
- var current, cbox;
- var dw = 0, dh = 0, dx = 0, dy = 0;
-
- var bx = box.screenX;
- var by = box.screenY;
- var bw = box.width;
- var bh = box.height;
-
- const ELEMENT = Ci.nsIDOMElement;
-
- while(parent) {
-
- current = parent;
- switch (pw.getComputedStyle(current, '').overflow) {
- case "auto" : case "scroll":
- cbox = this.getBox(current);
-
- d = cbox.screenY - by;
- if (d > 0) {
- dy += d;
- dh -= d;
- by += d;
- bh -= d;
- }
- d = cbox.screenX - bx;
- if (d > 0) {
- dx += d;
- dw -= d;
- bx += d;
- bw -= d;
-
- }
- d = by + bh - (cbox.screenY + current.clientHeight);
- if (d > 0) {
- if (cbox.height - current.clientHeight < 10) // compensate for miscalculated scrollbars bug
- d += 20;
- dh -= d;
- bh -= d;
- }
- d = bx + bw - (cbox.screenX + current.clientWidth);
- if (d > 0) {
- if (cbox.width - current.clientWidth < 10) // compensate for miscalculated scrollbars bug
- d += 20;
- dw -= d;
- bw -= d;
- }
- }
- parent = current.parentNode;
- if (parent instanceof ELEMENT) continue;
- parent = pw.frameElement;
- if (parent) pw = parent.ownerDocument.defaultView;
- }
-
- return { x: dx, y: dy, w: dw, h: dh };
- },
-
- _scrollerCorrect: function(w, adaptive) {
- return (adaptive && w.getComputedStyle(w.document.body || w.document.documentElement, '').direction != 'rtl')
- ? 0
- : w.innerWidth - w.document.documentElement.clientWidth;
- },
-
- _offsetParents: function(p) {
- let pp = [];
- for (; p; p = p.offsetParent) pp.push(p);
- return pp;
- },
-
- get _ignoreWindowedZ() {
- delete this.__proto__._ignoreWindowedZ;
- return this.__proto__._ignoreWindowedZ = ns.geckoVersionCheck("10.0") < 0;
- },
- findWindowedRects: function(el) {
- const tags = ["object", "embed"];
- var woi = null;
-
- while(el) {
- let d = el.ownerDocument;
- let w = d.defaultView;
- let elPP = this._offsetParents(el);
- try {
- for (let t of tags) {
- let oo = d.getElementsByTagName(t);
- for (let i = oo.length; i-- > 0;) {
- let o = oo[i];
- if (o != el && !ns.isWindowlessObject(o)) {
- let oPP = this._offsetParents(o);
- for (let j = elPP.length, k = oPP.length; j-- > 0 && k-- > 0;) {
- let p1 = elPP[j], p2 = oPP[k];
- if (p1 != p2) {
- let s1 = w.getComputedStyle(p1, '');
- let s2 = w.getComputedStyle(p2, '');
-
- if (s2.display != 'none' && s2.visibility != 'hidden' &&
- (this._ignoreWindowedZ ||
- (s2.position != 'static' &&
- (s1.position == 'static' ||
- (parseInt(s1.zIndex, 10) || 0) <= (parseInt(s2.zIndex, 10) || 0)))
- )
- ) {
- (woi || (woi = [])).push(this.getBox(o, d, w));
- }
- }
- }
- }
- }
- }
- } catch (e) {
- ns.log(e);
- }
- el = w.frameElement;
- }
- return woi;
- }
-}
-
-function ClassyObj(o) {
- this.o = o;
- if (o.hasAttribute("class")) this.c = o.className;
-}
-ClassyObj.prototype = {
- o: null,
- c: null,
- append: function(newC) {
- try {
- this.o.className = this.c ? this.c + newC : newC;
- } catch(e) {}
- },
- reset: function() {
- try {
- if (this.c == null) this.o.removeAttribute("class");
- else this.o.className = this.c;
- } catch(e) {}
- }
-}
-
-function DocPatcher(ns, o, w) {
- this.ns = ns;
- this.o = o;
- this.win = w;
- this.top = w.top;
- this.shownCS = " __noscriptShown__" + DOM.rndId();
-}
-
-DocPatcher.prototype = {
-
- collectAncestors: function(o) {
- var res = [];
- for(; o && o.hasAttribute; o = o.parentNode) res.push(new ClassyObj(o));
- return res;
- },
-
- getRect: function(o, d) {
- return (this.getRect = ("getBoundingClientRect" in o)
- ? function(o) { return o.getBoundingClientRect() }
- : function(o, d) {
- var b = d.getBoxObjectFor(o);
- var x = o.x, y = o.y;
- return {
- left: x,
- top: y,
- right: x + o.width,
- bottom: y + o.height
- };
- })(o, d)
- },
-
- collectPositioned: function(d) {
- var t = Date.now();
- const w = d.defaultView;
- const res = [];
- var s = null, p = '', n = null;
-
- const r = this.o.getBoundingClientRect();
- const top = r.top;
- const bottom = r.bottom;
- const left = r.left;
- const right = r.right;
-
- var c = '', b = null;
- var hasPos = false;
- const posn = [];
-
- const tw = d.createTreeWalker(d, Ci.nsIDOMNodeFilter.SHOW_ELEMENT, null, false);
- for (var n = null; (n = tw.nextNode());) {
- b = n.getBoundingClientRect();
- if (b.bottom < top || b.top > bottom ||
- b.right < left || b.left > right)
- continue;
-
- s = w.getComputedStyle(n, '');
- p = s.position;
- if (p == "absolute" || p == "fixed") {
- c = " __noscriptPositioned__";
- n.__noscriptPos = hasPos = true;
- posn.push(n);
- } else {
- hasPos = hasPos && n.parentNode.__noscriptPos;
- if (!hasPos) continue;
- c = '';
- n.__noscriptPos = true;
- posn.push(n);
- }
-
- if (s.backgroundImage != "none" || s.backgroundColor != "transparent") {
- c += " __noscriptBlank__";
- };
-
-
- if (c) {
- res.push(n = new ClassyObj(n));
- n.append(c);
- }
- }
-
- for (n of posn) n.__noscriptPos = false;
-
- if(ns.consoleDump & LOG_CLEARCLICK) ns.dump("DocPatcher.collectPositioned(): " + (Date.now() - t));
- return res;
- },
-
- collectOpaqued: function(o, oo) {
- if (!oo) oo = { opacity: 1, res: [] };
-
- var w = o.ownerDocument.defaultView;
-
- var opacity;
- var co = null;
- for(; o && o.hasAttribute; o = o.parentNode) {
- opacity = parseFloat(w.getComputedStyle(o, '').opacity);
- if (opacity < 1) {
- if ((oo.opacity *= opacity) < .3) return []; // too much combined transparency!
- oo.res.push(new ClassyObj(o));
- }
- }
-
- o = w.frameElement;
- return o ? this.collectOpaqued(o, oo) : oo.res;
- },
-
- forceVisible: function(co) { // TODO: I cause too much reflow, please CHECK ME!
- co.append(this.shownCS);
- },
-
- forceOpaque: function(co) {
- co.append(" __noscriptJustOpaqued__");
- },
-
- resetClass: function(co) {
- co.reset();
- },
-
- _ancestors: null,
- _cleanSheetHandle: null,
- clean: function(toggle) {
- if (toggle) {
- if (!this._ancestors) {
- this.cleanSheet = "body * { visibility: hidden !important } body ." + this.shownCS.substring(1) + " { visibility: visible !important; opacity: 1 !important }";
- this._ancestors = this.collectAncestors(this.o);
- }
- this._ancestors.forEach(this.forceVisible, this);
- this._cleanSheetHandle = this.applySheet(this.cleanSheet);
- } else if (this._ancestors) {
- this._ancestors.forEach(this.resetClass);
- this.removeSheet(this._cleanSheetHandle);
- }
- },
-
- _positioned: null,
- _blankSheetHandle: null,
- blankSheet: ".__noscriptPositioned__ * { color: white !important; border-color: white !important; }",
- blankPositioned: function(toggle) {
- if (toggle) {
- this._positioned = this.collectPositioned(this.o.ownerDocument);
- this._blankSheetHandle = this.applySheet(this.blankSheet);
- } else if (this._positioned) {
- this._positioned.forEach(this.resetClass);
- this.removeSheet(this._blankSheetHandle);
- }
- },
-
- _opaqued: null,
- opaque: function(toggle) {
- if (toggle) {
- this._opaqued = this._opaqued || this.collectOpaqued(this.o);
- this._opaqued.forEach(this.forceOpaque);
- } else if (this._opaqued) {
- this._opaqued.forEach(this.resetClass);
- }
- },
-
-
- applySheet: function(sheetHandle) {
- this.ns.updateStyleSheet(sheetHandle, true);
- return sheetHandle;
- },
- removeSheet: function(sheetHandle) {
- this.ns.updateStyleSheet(sheetHandle, false);
- },
-
- trafficLightHack: function(toggle) {
- const ID = "tll_hui_container";
- if (!(toggle && this.top.document.getElementById(ID))) return;
-
- delete this.__proto__.trafficLightHack;
- try {
- Cc["@mozilla.org/chrome/chrome-registry;1"]
- .getService(Ci.nsIChromeRegistry)
- .convertChromeURL(IOS.newURI("chrome://trafficlight/content", null, null));
- } catch(e) {
- this.__proto__.trafficLightHack = DUMMY_FUNC;
- return;
- }
- this.__proto__._trafficLightHackToogle = false;
- this.__proto__.trafficLightHack = function(toggle) {
- var w = this.top;
- var d = w.document;
- var c = d.getElementById(ID);
- if (!toggle) {
- if (this._trafficLightHackToggle) {
- c.style.visibility = "visible";
- this._trafficLightHackToggle = false;
- }
- return;
- }
- if (w.getComputedStyle(c, '').visibility !== "visible") return;
-
- for (let n of Array.push(c, c.getElementsByTagName("*"))) {
- if (n.getBoundingClientRect().bottom > 50) return;
- }
- c.style.visibility = "hidden";
- this._trafficLightHackToggle = true;
- }
- this.trafficLightHack(toggle);
- },
-
- _linkAlertBox: null,
- linkAlertHack: function(toggle) {
- try {
- var w = this.top;
- var d = w.document;
- if (toggle) {
- let box = d.getElementById("linkalert-box");
- if (!box || box.style.display) return;
- let imgs = box.getElementsByTagName("img");
- if (imgs.length > 5) return;
- for (let j = imgs.length; j-- > 0;) {
- let img = imgs[j];
- if (!/^(?:chrome:\/\/linkalert\/skin\/|(?:moz\-icon|file):\/\/)/.test(img.src) || img.naturalWidth == 0 ||
- img.offsetWidth > 32 || img.offsetHeight > 32) return;
- }
- box.style.display = "none";
- this._linkAlertBox = box;
- } else {
- if (this._linkAlertBox) {
- this._linkAlertBox.style.display = "";
- this._linkAlertBox = null;
- }
- }
- } catch (e) {}
- },
-
- _fbPresence: null,
- fbPresenceHack: function(toggle) {
- if (toggle) {
- try {
- if (this.top.location.host == "apps.facebook.com") {
- var fbPresence = this.top.document.getElementById("presence");
- if (fbPresence) {
- fbPresence._ccVisibility = fbPresence.style.visibility;
- fbPresence.style.visibility = "hidden";
- this._fbPresence = fbPresence;
- }
- }
- } catch(e) {}
- } else if (this._fbPresence) {
- this._fbPresence.style.visibility = this._fbPresence._ccVisibility;
- }
- },
-
- _abpTabs: null,
- get _abpTabsObj() {
- delete this.__proto__._abpTabsObj;
- var tobj;
- try {
- tobj = Cc["@mozilla.org/adblockplus;1"].getService().wrappedJSObject.objTabs;
- } catch(e) {
- try {
- let baseURL = Cc["@adblockplus.org/abp/private;1"].getService(Ci.nsIURI);
- let x = {};
- Cu.import(baseURL.spec + "ObjectTabs.jsm", x);
- tobj = (x.objectMouseEventHander.__parent__ || Cu.getGlobalForObject(x.objectMouseEventHander)).objTabs;
- } catch (e) {
- tobj = null;
- }
- }
- return this.__proto__._abpTabsObj = tobj;
- },
-
- abpTabsHack: function(toggle) {
- let visibleClass, hiddenClass;
- try {
- let tobj = this._abpTabsObj;
- if (tobj) {
- hiddenClass = tobj.objTabClassHidden;
- if (!hiddenClass) return;
- visibleClasses = [tobj.objTabClassVisibleTop, tobj.objTabClassVisibleBottom];
- }
- } catch(e) {
- }
- delete this.__proto__.abpTabsHack;
- this.__proto__.abpTabsHack =
- hiddenClass
- ? function(toggle) {
- try {
- let document = this.top.document;
- if (toggle) {
- let tabs = [];
- for (let c of visibleClasses) {
-
- Array.forEach(document.getElementsByClassName(c), function(t) {
- let co = new ClassyObj(t);
- t.className = hiddenClass;
- tabs.push(co);
- });
- }
- this._abpTabs = tabs;
- } else {
- for (let co of this._abpTabs) {
- co.reset();
- }
- }
- } catch(e) {
- Cu.reportError(e);
- }
- }
- : DUMMY_FUNC;
- this.abpTabsHack(toggle);
- }
-};
-
-
-["clearClick", "clearClick.exceptions", "clearClick.subexceptions"].forEach(function(p) {
- try {
- ns.syncPrefs(ns.prefs, p);
- } catch(e) {
- ns.dump(e.message + ":" + e.stack + " setting " + p + "\n");
- }
-});
diff --git a/extensions/noscript/chrome/content/noscript/Cookie.js b/extensions/noscript/chrome/content/noscript/Cookie.js
deleted file mode 100644
index db23ab5..0000000
--- a/extensions/noscript/chrome/content/noscript/Cookie.js
+++ /dev/null
@@ -1,148 +0,0 @@
-function Cookie(s, host) {
- this.parse(s, host);
-}
-Cookie.computeId = function(c) {
- return c.name + ";" + c.host + "/" + c.path;
-};
-Cookie.find = function(f) {
- var cc = Cookie.prototype.cookieManager.enumerator;
- var c;
- while (cc.hasMoreElements()) {
- if (f(c = cc.getNext())) return c;
- }
- return null;
-};
-
-Cookie.attributes = { host: 'domain', path: 'path', expires: 'expires', isHttpOnly: 'HttpOnly', isSecure: 'Secure' };
-Cookie.prototype = {
-
- name: '',
- value: '',
- source: '',
- domain: '',
- host: '',
- rawHost: '',
- path: '',
- secure: false,
- httponly: false,
- session: true,
- expires: 0,
-
- id: '',
-
-
- toString: function() {
- var c = [this['name'] + "=" + this.value];
- var v;
- const aa = Cookie.attributes;
- for (var k in aa) {
- var p = aa[k];
- v = this[k];
- switch(typeof(v)) {
- case "string":
- if (v) c.push(p + "=" + v);
- break;
- case "boolean":
- if (v) c.push(p);
- break;
- case "number":
- if (!this.isSession) c.push(p + "=" + new Date(v * 1000).toUTCString());
- break;
- }
- }
- return c.join("; ");
- },
- parse: function(s, host) {
- var p;
- if (this.source) {
- // cleanup for recycle
- for (p in this) {
- if (typeof (p) != "function") delete this[p];
- }
- }
- this.source = s;
- this.host = host;
-
- var parts = s.split(/;\s*/);
- var nv = parts.shift().split("=");
-
- this.name = nv.shift() || '';
- this.value = nv.join('=') || '';
-
- var n, v;
- for (p of parts) {
- nv = p.split("=");
- switch (n = nv[0].toLowerCase()) {
- case 'expires':
- v = Math.round(Date.parse((nv[1] || '').replace(/\-/g, ' ')) / 1000);
- break;
- case 'domain':
- case 'path':
- v = nv[1] || '';
- break;
- case 'secure':
- case 'httponly':
- v = true;
- break;
- default:
- n = 'unknown'
- }
- this[n] = v;
- }
- if (!this.expires) {
- this.session = true;
- this.expires = Math.round(new Date() / 1000) + 31536000;
- }
- if (this.domain) {
- if (!this.isDomain) this.domain = "." + this.domain;
- this.host = this.domain;
- }
- this.rawHost = this.host.replace(/^\./, '');
-
- this.id = Cookie.computeId(this);
- },
-
-
- get cookieManager() {
- delete Cookie.prototype.cookieManager;
- var cman = Cc["@mozilla.org/cookiemanager;1"]
- .getService(Ci.nsICookieManager2).QueryInterface(Ci.nsICookieManager);
- return Cookie.prototype.cookieManager = cman;
- },
- belongsTo: function(host, path) {
- if (path && this.path && path.indexOf(this.path) != 0) return false;
- if (host == this.rawHost) return true;
- var d = this.domain;
- return d && (host == d || this.isDomain && host.slice(-d.length) == d);
- },
- save: function() {
- this.save = ("cookieExists" in this.cookieManager)
- ? function() { this.cookieManager.add(this.host, this.path, this.name, this.value, this.secure, this.httponly, this.session, this.expires); }
- : function() { this.cookieManager.add(this.host, this.path, this.name, this.value, this.secure, this.session, this.expires);}
- ;
- return this.save();
- },
- exists: function() {
- var cc = this.cookieManager.enumerator;
- while(cc.hasMoreElements()) {
- if (this.sameAs(cc.getNext())) return true;
- }
- return false;
- },
-
- sameAs: function(c) {
- (c instanceof Ci.nsICookie) && (c instanceof Ci.nsICookie2);
- return Cookie.computeId(c) == this.id;
- },
-
- // nsICookie2 interface extras
- get isSecure() { return this.secure; },
- get expiry() { return this.expires; },
- get isSession() { return this.session; },
- get isHttpOnly() { return this.httponly; },
- get isDomain() { return this.domain && this.domain[0] == '.'; },
- policy: 0,
- status: 0,
- QueryInterface: XPCOMUtils.generateQI([Ci.nsICookie, Ci.nsICookie2])
-
-} \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/DNS.js b/extensions/noscript/chrome/content/noscript/DNS.js
deleted file mode 100644
index 80e9920..0000000
--- a/extensions/noscript/chrome/content/noscript/DNS.js
+++ /dev/null
@@ -1,374 +0,0 @@
-function DNSRecord(record) {
- this.ts = Date.now();
- var ttl;
- if (record) {
- try {
- this.canonicalName = record.canonicalName;
- } catch(e) {}
- this.entries = [];
-
- try {
- for (;;) this.entries.push(record.getNextAddrAsString());
- } catch(e) {
- // NS_ERROR_NOT_AVAILABLE, no more records
- // notice that hasMore() internall just calls getNextAttr(), checks for errors and resets the iterator
- }
- ttl = this.TTL;
- if (!this.entries.length) this.valid = false;
- } else {
- this.valid = false;
- }
- if (!this.valid) ttl = this.INVALID_TTL_ASYNC;
- this.expireTime = this.ts + ttl;
-}
-
-DNSRecord.prototype = {
- INVALID_TTL_ASYNC: 3000,
- INVALID_TTL_SYNC: 8000,
- TTL: 60000,
- valid: true,
- ts: 0,
- entries: [],
- canonicalName: '',
- expireTime: 0,
- refreshing: false,
- localExtras: null, // AddressMatcher object which can be added to the LOCAL resolution
-
-
- isLocal: function(all) {
- return all
- ? "everyLocal" in this
- ? this.everyLocal
- : this.everyLocal = this.entries.every(DNS.isLocalIP, DNS)
- : "someLocal" in this
- ? this.someLocal
- : this.someLocal = this.entries.some(DNS.isLocalIP, DNS)
- ;
- },
- get expired() {
- return Date.now() > this.expireTime;
- }
-
-}
-
-
-var DNS = {
-
- get logFile() {
- delete this.logFile;
- var logFile = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
- logFile.append("noscript_dns.log");
- return this.logFile = logFile;
- },
- logEnabled: false,
- log: function(msg) {
- try {
- if (!this.logStream) {
- const logFile = this.logFile;
- const logStream = Cc["@mozilla.org/network/file-output-stream;1"]
- .createInstance(Ci.nsIFileOutputStream);
- logStream.init(logFile, 0x02 | 0x08 | 0x10, 384 /*0600*/, 0 );
- this.logStream = logStream;
- const header="*** Log start at "+new Date().toGMTString()+"\n";
- this.logStream.write(header,header.length);
- }
-
- if (msg!=null) {
- msg += "\n";
- this.logStream.write(msg,msg.length);
- }
- this.logStream.flush();
- } catch(ex) {
- dump(ex.message+"\noccurred logging this message:\n"+msg);
- }
- },
-
- get _dns() {
- delete this._dns;
- return this._dns = Cc["@mozilla.org/network/dns-service;1"]
- .getService(Ci.nsIDNSService);
- },
-
- _cache: {
- CAPACITY: 400, // when we purge, we cut this to half
- _map: {__proto__: null},
- _ext: {__proto__: null},
- count: 0,
-
-
- get: function(key) {
- return key in this._map && this._map[key];
- },
- put: function(key, entry) {
- if (!(key in this._map)) {
- if (this.count >= this.CAPACITY) {
- this.purge();
- }
- }
- this._map[key] = entry;
- this.count++;
- },
- evict: function(host) {
- return (host in this._map) && (delete this._map[host]);
- },
-
- purge: function() {
- var max = this.CAPACITY / 2;
- if (this.count < max) return;
- var l = [];
- var map = this._map;
- for (var key in map) {
- l.push({ k: key, t: map[key].ts});
- }
- this._doPurge(map, l, max);
- },
-
- reset: function() {
- this._map = {__proto__: null};
- this._ext = {__proto__: null},
- this.count = 0;
- },
-
- _oldLast: function(a, b) {
- return a.t > b.t ? -1 : a.t < b.t ? 1 : 0;
- },
-
- putExt: function(host) {
- this._ext[host] = true;
- },
- isExt: function(host) {
- return host in this._ext;
- },
-
-
- _doPurge: function(map, l, max) {
- l.sort(this._oldLast);
- for (var j = l.length; j-- > max;) {
- delete map[l[j].k];
- }
- this.count -= (l.length - max);
- }
- },
-
- get idn() {
- delete this.idn;
- return this.idn = Cc["@mozilla.org/network/idn-service;1"]
- .getService(Ci.nsIIDNService);
- },
-
- _invalidRx: /[^\w\-\.]/,
- checkHostName: function(host) {
- if (this._invalidRx.test(host) && !this.isIP(host)) {
- try {
- host = this.idn.convertUTF8toACE(host);
- } catch(e) {
- return false;
- }
- return !this._invalidRx.test(host);
- }
- return true;
- },
-
- _resolving: {},
- resolve: function(host, flags, callback) {
- flags = flags || 0;
-
- var elapsed = 0, t;
- var cache = this._cache;
- var async = IOUtil.asyncNetworking || !!callback;
-
- var dnsRecord = cache.get(host);
- if (dnsRecord) {
- // cache invalidation, if needed
- if (dnsRecord.expired && !dnsRecord.refreshing) {
- if (dnsRecord.valid && !(flags & 1)) {
- // refresh async
- dnsRecord.refreshing = true;
- DNS._dns.asyncResolve(host, flags, new DNSListener(function() {
- if (DNS.logEnabled) DNS.log("Async " + host);
- cache.put(host, dnsRecord = new DNSRecord(this.record));
- }), Thread.currentQueue);
- } else {
- flags |= 1;
- }
- if (flags & 1) {
- dnsRecord = null;
- cache.evict(host);
- }
- }
- }
- if (dnsRecord) {
- if (ABE.consoleDump) ABE.log("Using cached DNS record for " + host);
- } else if (this.checkHostName(host)) {
-
- if (async) {
- var resolving = this._resolving;
-
- if (host in resolving) {
- ABE.log("Already resolving " + host);
-
- if (callback) {
- resolving[host].push(callback);
- return null;
- }
- } else resolving[host] = callback ? [callback] : [];
-
- var ctrl = {
- running: true,
- startTime: Date.now()
- };
-
- var status = Cr.NS_OK;
-
-
- var resolve = function() {
- DNS._dns.asyncResolve(host, flags, new DNSListener(function() {
- if (DNS.logEnabled) DNS.log("Async " + host);
- cache.put(host, dnsRecord = new DNSRecord(this.record));
- ctrl.running = false;
- var callbacks = resolving[host];
- delete resolving[host];
- if (ABE.consoleDump && t) {
- elapsed = Date.now() - t;
- ABE.log("Async DNS query on " + host + " done, " + elapsed + "ms, callbacks: " + (callbacks && callbacks.length));
- }
-
- if (callbacks && callbacks.length)
- for (var cb of callbacks)
- cb(dnsRecord);
-
- }), Thread.currentQueue);
- if (ABE.consoleDump) ABE.log("Waiting for DNS query on " + host);
- if (!callback) Thread.spin(ctrl);
- }
-
- if (callback) {
- t = Date.now();
- resolve();
- return null;
- }
-
- resolve();
-
- if (!Components.isSuccessCode(status)) throw status;
-
- elapsed = ctrl.elapsed || 0;
- } else {
- t = Date.now();
- if (ABE.consoleDump) ABE.log("Performing DNS query on " + host);
- if (DNS.logEnabled) DNS.log("Sync " + host);
- cache.put(host, dnsRecord = new DNSRecord(this._dns.resolve(host, flags)));
- elapsed = Date.now() - t;
- }
- } else {
- this._cache.put(host, dnsRecord = new DNSRecord(null)); // invalid host name
- }
-
- if (ABE.consoleDump) ABE.log("DNS query on " + host + " done, " + elapsed + "ms");
-
- if (callback) {
- callback(dnsRecord);
- } else {
- if (!(dnsRecord && dnsRecord.valid)) throw Cr.NS_ERROR_UNKNOWN_HOST;
- }
- return dnsRecord;
- },
-
-
-
- evict: function(host) {
- ABE.log("Removing DNS cache record for " + host);
- return this._cache.evict(host);
- },
-
- invalidate: function(host) {
- var dnsRecord = this._cache.get(host);
- if (!dnsRecord.valid) return false;
- dnsRecord.valid = false;
- dnsRecord.expireTime = 0;
- return true;
- },
-
- getCached: function(host) {
- return this._cache.get(host);
- },
-
- isCached: function(host) {
- var res = this._cache.get(host);
- return res && (res.valid || !res.expired);
- },
-
- isLocalURI: function(uri, all) {
- var host;
- try {
- host = uri.host;
- } catch(e) {
- return false;
- }
- if (!host) return true; // local file:///
- return this.isLocalHost(host, all);
- },
-
- _localDomainRx: /\.local$/i,
- isLocalHost: function(host, all, dontResolve) {
- if (host === "localhost" || this._localDomainRx.test(host)) return true;
- if (this.isIP(host)) {
- return this.isLocalIP(host);
- }
-
- if (all && this._cache.isExt(host) || dontResolve) return false;
-
- var res = this.resolve(host, 0).isLocal(all);
-
- if (!res) {
- this._cache.putExt(host);
- }
-
- return res;
- },
-
- _localIP6Rx: /^(?:::1?$|f(?:[cd]|e[c-f])[0-9a-f]*:)/i,
- get _localIPMatcher() {
- delete this._localIPMatcher;
- return this._localIPMatcher = new AddressMatcher('0. 127. 10. 169.254.0.0/16 172.16.0.0/12 192.168.0.0/16 255.255.255.255');
- },
- isLocalIP: function(addr) {
- // see https://bug354493.bugzilla.mozilla.org/attachment.cgi?id=329492 for a more verbose but incomplete (missing IPv6 ULA) implementation
- // Relevant RFCs linked at http://en.wikipedia.org/wiki/Private_network
- // Note: we omit link-local IPv6 addresses (fe80:/10) on purpose, because they're currently found in the wild as misconfigured
- // AAAA DNS records. The safest work-around is considering them external to the LAN always.
-
- return this._localIP6Rx.test(addr) ||
- this._localIPMatcher.testIP(addr = this.ip6to4(addr)) ||
- this.localExtras && this.localExtras.testIP(addr) ||
- WAN.ipMatcher && WAN.ipMatcher.testIP(addr);
- },
- _ip6to4Rx: /^2002:([A-F0-9]{2})([A-F0-9]{2}):([A-F0-9]{2})([A-F0-9]{2})|:(?:\d+\.){3}\d+$/i,
- ip6to4: function(addr) {
- let m = addr.match(this._ip6to4Rx);
- return m ? (m[1]
- ? m.slice(1).map((h) => parseInt(h, 16)).join(".")
- : m[0].substring(1)
- )
- : addr;
- },
- _ipRx: /^(?:0\.|[1-9]\d{0,2}\.){3}(?:0|[1-9]\d{0,2})$|:.*:/i, // very restrictive, rejects IPv4 hex, octal and int32
- _ipRx_permissive: /^(?:(?:\d+|0x[a-f0-9]+)\.){0,3}(?:\d+|0x[a-f0-9]+)$|:.*:/i,
- isIP: function(host) { return this._ipRx.test(host); }
-};
-
-function DNSListener(callback) {
- if (callback) this.callback = callback;
-};
-DNSListener.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIDNSListener]),
- record: null,
- status: 0,
- callback: null,
- onLookupComplete: function(req, rec, status) {
- this.record = rec;
- this.status = status;
- if (this.callback) this.callback();
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/DOM.js b/extensions/noscript/chrome/content/noscript/DOM.js
deleted file mode 100644
index 3c90aad..0000000
--- a/extensions/noscript/chrome/content/noscript/DOM.js
+++ /dev/null
@@ -1,245 +0,0 @@
-var DOM = {
-
- maxZIndex: "99999999",
-
- confirm: function(s) { // for interactive debugging purposes
- return this.mostRecentBrowserWindow.confirm(s);
- },
-
- findWindow: function(ctx) {
- if (!(ctx instanceof Ci.nsIDOMWindow)) {
- if (ctx instanceof Ci.nsIDOMDocument) {
- ctx = ctx.defaultView;
- } else if(ctx instanceof Ci.nsIDOMNode) {
- ctx = ctx.ownerDocument.defaultView;
- } else return null;
- }
- return ctx;
- },
-
- findBrowserForNode: function(ctx) {
- try {
- } catch (e) {
- }
- if (!ctx) return null;
- var bi = null;
- try {
- ctx = this.findWindow(ctx);
- if (!ctx) return null;
- try {
- ctx = Cu.lookupMethod(ctx, "top")();
- } catch(e) {
- ctx = ctx.top;
- }
- var bi = this.createBrowserIterator(this.getChromeWindow(ctx));
-
- for (var b; b = bi.next();) {
- try {
- if (b.contentWindow == ctx) return b;
- } catch(e) {}
- }
- } catch(e) {
- } finally {
- if (bi) bi.dispose();
- ctx = null;
- }
-
- return null;
- },
-
- getDocShellForWindow: function(window) {
- try {
- return window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation)
- .QueryInterface(Ci.nsIDocShell);
- } catch(e) {
- return null;
- }
- },
-
- getFrameMM(windowOrNode) {
- if (windowOrNode.ownerDocument) windowOrNode = windowOrNode.ownerDocument;
- if (windowOrNode.defaultView) windowOrNode = windowOrNode.defaultView;
- return windowOrNode.top.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDocShell)
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIContentFrameMessageManager);
- },
-
- getChromeWindow: function(window) {
- try {
- return this.getDocShellForWindow(window.top)
- .QueryInterface(Ci.nsIDocShellTreeItem).rootTreeItem
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindow).window;
- } catch(e) {
- return null;
- }
- },
-
- get windowMediator() {
- delete this.windowMediator;
- return this.windowMediator = Cc['@mozilla.org/appshell/window-mediator;1']
- .getService(Ci.nsIWindowMediator);
- },
-
- get browserWinURI() {
- let uri = this.browserWinChromeURI;
- if (!uri) return null;
- delete this.browserWinURI;
- return this.browserWinURI = uri.schemeIs("chrome")
- ? Cc["@mozilla.org/chrome/chrome-registry;1"].getService(Ci.nsIChromeRegistry).convertChromeURL(uri)
- : uri;
- },
- get browserWinChromeURI() {
- let w = this.mostRecentBrowserWindow;
- if (!w) return null;
- delete this.browserWinChromeURI;
- return this.browserWinChromeURI = w.document.documentURIObject;
- },
-
- browserWinType: 'navigator:browser',
- perWinType: function(delegate) {
- var wm = this.windowMediator;
- var w = null;
- var aa = Array.slice(arguments, 0);
- for (var type of ['navigator:browser', 'emusic:window', 'Songbird:Main']) {
- aa[0] = type;
- w = delegate.apply(wm, aa);
- if (w) {
- this.browserWinType = type;
- break;
- }
- }
- return w;
- },
-
- get mostRecentBrowserWindow() {
- return this.windowMediator.getMostRecentWindow(this.browserWinType, true) ||
- this.perWinType(this.windowMediator.getMostRecentWindow, true);
- },
- get windowEnumerator() {
- return this.windowMediator.getZOrderDOMWindowEnumerator(this.browserWinType, true) ||
- this.perWinType(this.windowMediator.getZOrderDOMWindowEnumerator, true);
- },
- createBrowserIterator: (initialWin) => new BrowserIterator(initialWin),
-
- addClass: function(e, c) {
- var cur = e.className;
- if (cur) {
- var cc = cur.split(/\s+/);
- if (cc.indexOf(c) > -1) return;
- cc.push(c);
- e.className = cc.join(" ");
- } else e.className += " " + c;
- },
- removeClass: function(e, c) {
- var cur = e.className;
- if (cur) {
- var cc = cur.split(/\s+/);
- for (var pos; (pos = cc.indexOf(c)) > -1;)
- cc.splice(pos, 1);
-
- e.className = cc.join(" ");
- }
- },
- toggleClass: function(e, c, add) {
- if (typeof add == "undefined")
- add = !this.hasClass(e, c);
- if (add) this.addClass(e, c);
- else this.removeClass(e, c);
- return add;
- },
- hasClass: function(e, c) {
- var cur = e.className;
- return cur && cur.split(/\s+/).indexOf(c) > -1;
- },
-
- _idCounter: Math.round(Math.random() * 9999),
- rndId: function() {
- return Date.now().toString(32) + "_" + (this._idCounter++).toString(32) + "_" + Math.round(Math.random() * 9999999).toString(32);
- },
-
- elementContainsPoint: function(el, p) {
- var rect = el.getBoundingClientRect();
- return p.x >= rect.left && p.x <= rect.right && p.y >= rect.top && p.y <= rect.bottom;
- }
-};
-
-function BrowserIterator(initialWin) {
- if (!initialWin) {
- initialWin = DOM.mostRecentBrowserWindow;
- }
- this.currentWin = this.initialWin = initialWin;
- this.initPerWin();
-}
-BrowserIterator.prototype = {
-
- initPerWin: function() {
- var w = this.currentWin;
- var overlay;
- if (w) {
- if (w.wrappedJSObject) w = w.wrappedJSObject;
- overlay = ("noscriptOverlay" in w) ? w.noscriptOverlay : null;
- } else overlay = null;
-
- if (overlay) {
- this.browsers = overlay.browsers;
- this.currentTab = overlay.currentBrowser;
- } else {
- this.currentTab = this.currentWin = null;
- this.browsers = [];
- }
- this.mostRecentTab = this.currentTab;
- this.curTabIdx = 0;
- },
-
- next: function() {
- var ret = this.currentTab;
- this.currentTab = null;
- if (ret != null) return ret.wrappedJSObject || ret;
- if(!this.initialWin) return null;
- if (this.curTabIdx >= this.browsers.length) {
- if (!this.winEnum) {
- this.winEnum = DOM.windowEnumerator;
- }
- if (this.winEnum.hasMoreElements()) {
- this.currentWin = this.winEnum.getNext();
- if (this.currentWin != this.initialWin){
- this.initPerWin();
- }
- return this.next();
- } else {
- this.dispose();
- return null;
- }
- }
- this.currentTab = this.browsers[this.curTabIdx++];
- if (this.currentTab == this.mostRecentTab) this.next();
- return this.next();
- },
- dispose: function() {
- if (!this.initialWin) return; // already disposed;
- this.initialWin =
- this.currentWin =
- this.browsers =
- this.currentTab =
- this.mostRecentTab =
- this.winEnum =
- null;
- },
-
- find: function(filter) {
- try {
- for (var b; b = this.next();) {
- if (filter(b)) {
- return b;
- }
- }
- } finally {
- this.dispose();
- filter = null;
- }
- return null;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/DoNotTrack.js b/extensions/noscript/chrome/content/noscript/DoNotTrack.js
deleted file mode 100644
index e22f492..0000000
--- a/extensions/noscript/chrome/content/noscript/DoNotTrack.js
+++ /dev/null
@@ -1,59 +0,0 @@
-var DoNotTrack = {
- enabled: true,
- exceptions: null,
- forced: null,
-
- init: function(prefs) {
- this.prefs = prefs;
- for (let k of prefs.getChildList("", {})) {
- this.observe(prefs, null, k);
- }
- prefs.addObserver("", this, true);
- },
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
- observe: function(prefs, topic, name) {
- switch(name) {
- case "enabled":
- this.enabled = prefs.getBoolPref(name);
- break;
- case "exceptions":
- case "forced":
- this[name] = AddressMatcher.create(COMPAT.getStringPref(prefs, name));
- break;
- }
- },
-
- apply: function(/* ABEReq */ req) {
- let url = req.destination;
-
- try {
- if (
- (this.exceptions && this.exceptions.test(url) ||
- req.localDestination ||
- req.isDoc && req.method === "POST" && req.originURI.host === req.destinationURI.host
- ) &&
- !(this.forced && this.forced.test(url))
- // TODO: find a way to check whether this request is gonna be WWW-authenticated
- )
- return;
-
- let channel = req.channel;
- channel.setRequestHeader("DNT", "1", false);
-
- // reorder headers to mirror Firefox 4's behavior
- let conn = channel.getRequestHeader("Connection");
- channel.setRequestHeader("Connection", "", false);
- channel.setRequestHeader("Connection", conn, false);
- } catch(e) {}
- },
-
- getDOMPatch: function(docShell) {
- try {
- if (docShell.document.defaultView.navigator.doNotTrack !== "1" &&
- docShell.currentDocumentChannel.getRequestHeader("DNT") === "1") {
- return 'Object.defineProperty(window.navigator, "doNotTrack", { configurable: true, enumerable: true, value: "1" });';
- }
- } catch (e) {}
- return "";
- },
-}
diff --git a/extensions/noscript/chrome/content/noscript/Entities.js b/extensions/noscript/chrome/content/noscript/Entities.js
deleted file mode 100644
index ed00186..0000000
--- a/extensions/noscript/chrome/content/noscript/Entities.js
+++ /dev/null
@@ -1,37 +0,0 @@
-var Entities = {
-
- get htmlNode() {
- delete this.htmlNode;
- var impl = Cc["@mozilla.org/xul/xul-document;1"].createInstance(Ci.nsIDOMDocument).implementation;
- return this.htmlNode = (("createHTMLDocument" in impl)
- ? impl.createHTMLDocument("")
- : impl.createDocument(
- HTML_NS, "html", impl.createDocumentType(
- "html", "-//W3C//DTD HTML 4.01 Transitional//EN", "http://www.w3.org/TR/html4/loose.dtd"
- ))
- ).createElementNS(HTML_NS, "body");
- },
- convert: function(e) {
- try {
- this.htmlNode.innerHTML = e;
- var child = this.htmlNode.firstChild || null;
- return child && child.nodeValue || e;
- } catch(ex) {
- return e;
- }
- },
- convertAll: function(s) {
- return s.replace(/[\\&][^<>]+/g, function(e) { return Entities.convert(e) });
- },
- convertDeep: function(s) {
- for (var prev = null; (s = this.convertAll(s)) !== prev || (s = unescape(s)) !== prev; prev = s);
- return s;
- },
- neutralize: function(e, whitelist) {
- var c = this.convert(e);
- return (c == e) ? c : (whitelist && whitelist.test(c) ? e : e.replace(";", ","));
- },
- neutralizeAll: function(s, whitelist) {
- return s.replace(/&[\w#-]*?;/g, function(e) { return Entities.neutralize(e, whitelist || null); });
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/ExternalFilters.js b/extensions/noscript/chrome/content/noscript/ExternalFilters.js
deleted file mode 100644
index a20c317..0000000
--- a/extensions/noscript/chrome/content/noscript/ExternalFilters.js
+++ /dev/null
@@ -1,728 +0,0 @@
-var ExternalFilters = {
- prefs: null,
- _filters: [],
- enabled: false,
- supported: true,
- lastFilterName: null,
-
- get _builtIns() {
- delete this._builtIns;
- return this._builtIns = [
- new ExternalFilter("Blitzableiter", null, "shockwave|futuresplash", ".hulu.com .youtube.com")
- ];
- },
-
- isBuiltIn: function (f) {
- return this._builtIns.some(f.same, f);
- },
-
- cloneFilters: function() {
- return this._filters.concat(
- this._builtIns.filter((bif) => !this._filters.some(bif.same, bif), this )
- ).map((f) => new ExternalFilter(f.name, f.exe, f.contentType, f.whitelist)
- );
- },
-
- save: function(filters) {
- if (filters) this._filters = filters;
-
- const prefs = this.prefs;
- for (let key of prefs.getChildList("", {})) {
- try {
- prefs.clearUserPref(key);
- } catch(e) {}
- }
- prefs.setBoolPref("enabled", this.enabled);
-
- const props = ["name", "exe", "contentType", "whitelist"];
-
- this._filters.forEach(function(f) {
- for (let p of props) {
- prefs.setCharPref(f.name + "." + p,
- p == "exe" ? f[p] && f[p].path || '' :
- p == "whitelist" ? f[p] && f[p].source || '' :
- f[p]
- );
- }
- });
- },
-
- get whitelists() {
- if (!("_whitelists" in this)) {
- let wl = {}, some = false;
- if (this._filters.length) {
- for (let f of this._filters) {
- if (f.whitelist) wl[f.name] = f.whitelist;
- some = true;
- }
- }
- this._whitelists = some ? wl : null;
- }
- return this._whitelists;
- },
-
- register: function(f) {
- if (f.valid) {
- const ff = this._filters;
- for (let j = ff.length; j-- > 0;) {
- if (f.same(ff[j])) ff.splice(j, 1);
- }
- this._filters.push(f);
- delete this._whitelists;
- return true;
- }
- return false;
- },
-
- get ioUtil() {
- delete this.ioUtil;
- return this.ioUtil = Cc["@mozilla.org/io-util;1"].getService(Ci.nsIIOUtil);
- },
-
- get tmpDir() {
- delete this.tmpDir;
- return this.tmpDir = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties)
- .get("TmpD", Ci.nsILocalFile);
- },
-
-
- createProcess: function() {
- const clazz = Cc["@mozilla.org/process/util;1"];
- const iface = "nsIProcess2" in Ci ? Ci.nsIProcess2 : Ci.nsIProcess;
- delete this.createProcess;
- this.createProcess = () => clazz.createInstance(iface);
- return this.createProcess();
- },
-
- createTempFile: function() {
- let tf = this.tmpDir.clone();
- tf.append(Math.round(Math.random() * 99999999).toString(16));
- tf.createUnique(tf.FILE_TYPE, 384);
- return tf;
- },
-
- handle: function(channel, extraType, ctx, cached) {
- if (channel instanceof Ci.nsITraceableChannel) {
-
- let contentType;
- try {
- contentType = channel.contentType;
- } catch(e) {
- contentType = extraType || '';
- }
-
- if (contentType || extraType) {
- contentType = extraType || contentType;
- for (let f of this._filters) {
- if (f.handle(channel, contentType, ctx, cached)) {
- this.storeFilterInfo(ctx, f, channel.name);
- return f;
- }
- }
- }
- }
-
- return null;
- },
-
- getFiltersInfo: function(top) {
- return top.__externalContentFilters__ || (top.__externalContentFilters__ = {});
- },
-
- getObjFilterInfo: function(obj) {
- return obj.__externalContentFilter__ || null;
- },
-
- storeFilterInfo: function(ctx, filter, url) {
- ctx.__externalContentFilter__ = { url: url, filter: filter };
-
- var info = this.getFiltersInfo(ctx.ownerDocument.defaultView.top);
- info[url] = filter;
- return info;
- },
-
- byName: function(name) {
- for (var j = this._filters.length; j-- > 0;) {
- if (this._filters[j].name == name) return this._filters[j];
- }
- return null;
- },
-
-
- log: function(msg) {
- dump("[External Filters] " + msg + "\n");
- },
-
- initFromPrefs: function(prefRoot) {
- this.prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService)
- .getBranch(prefRoot).QueryInterface(Ci.nsIPrefBranch);
- this._syncPrefs();
-
- },
-
- _observingPrefs: false,
- _syncPrefs: function() {
- const prefs = this.prefs;
- if ((this.enabled = prefs.getBoolPref("enabled"))) {
- this._filters = [];
- var args,
- name, member
- map = {};
- for (let key of prefs.getChildList("", {})) {
- [name, member] = key.split(".");
- if (!(name && member)) continue;
-
- if (!(name in map)) map[name] = { name: name };
- try {
- map[name][member] = prefs.getCharPref(key);
- } catch(e) {}
- }
- for (name in map) {
- this._createAndRegister(map[name]);
- }
- }
- if (!this._observingPrefs) {
- prefs.addObserver("", this, true);
- this._observingPrefs = true;
- }
- EFCacheSessions.purge();
- },
-
- _createAndRegister: function(args) {
- var f = args
- ? new ExternalFilter(args.name, args.exe, args.contentType || '', "whitelist" in args && args.whitelist)
- : null;
- if (f && f.name) this.register(f);
- return f;
- },
-
- create: function(name, exe, contentType, whitelist) {
- return new ExternalFilter(name, exe, contentType, whitelist);
- },
-
- observe: function(prefs, topic, key) {
- this.prefs.removeObserver("", this, true);
- this._observingPrefs = false;
- Thread.asap(this._syncPrefs, this);
- },
-
- testSetup: function() {
- if (!this._filters.length)
- new ExternalFilter("Blitzableiter",
- "G:\\Install\\Blitzableiter.rev125.binary\\Blitzableiter.exe",
- "shockwave|futuresplash"
- );
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference])
-}
-
-
-function ExternalFilter(name, exe, contentType, whitelist) {
- name = name.replace(/^\W+/, '').replace(/\s+$/, '');
- if (!name) return this;
- this.name = name[0].toUpperCase() + name.substring(1);
- try {
-
-
- this.contentType = contentType;
-
- if (whitelist)
- this.whitelist = new AddressMatcher(
- (whitelist instanceof AddressMatcher)
- ? whitelist.source
- : whitelist
- );
-
- if (exe instanceof Ci.nsIFile) {
- this.exe = exe;
- } else if (exe) {
- this.exe = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
- this.exe.initWithPath(exe);
- }
-
- if (this.exe && !this.exe.exists())
- this.exe = null;
-
- } catch(e) {
- ExternalFilters.log(name + ": " + e);
- }
- return this;
-}
-
-ExternalFilter.prototype = {
- name: '',
- whitelist: null,
- exe: null,
- get valid() {
- return !!this.exe;
- },
- get enabled() {
- return this.valid && !!this.contentType;
- },
-
- get builtIn() {
- return ExternalFilters.isBuiltIn(this);
- },
-
- same: function(f) {
- return f.name == this.name;
- },
-
- _ct: '',
- _ctRx: /^$/,
- set contentType(s) {
- s = s || '';
- this._ct = s;
- delete this._ctRx;
- if (s) {
- var rx = this.parseContentType(s);
- if (rx) this._ctRx = rx;
- }
- return s;
- },
-
- get contentType() {
- return this._ct;
- },
-
- parseContentType: function(s) {
- try {
- return new RegExp(
- /[\^\$\*\(\[\]\)\|\?]/.test(s)
- ? s
- : '^' + s.replace(/[^\w\/;]/g, "\\$1") + '$',
- "i"
- );
- } catch(e) {
- return null;
- }
- },
-
- isDomainException: function(d) {
- return this.whitelist && this.whitelist.source.split(/\s+/).indexOf("." + d) !== -1
- },
-
- addDomainException: function(d) {
- if (this.isDomainException(d)) return false;
- var wl = this.whitelist && this.whitelist.source || '';
- ExternalFilters.prefs.setCharPref(this.name + ".whitelist", wl.split(/\s+/).concat("." + d).join(" "));
- return true;
- },
-
- removeDomainException: function(d) {
- var wl = this.whitelist;
- if (!wl) return false;
- var list = wl.source.split(/\s+/);
- var fqd = "." + d;
- var pos = list.indexOf(fqd);
- if (pos < 0) return false;
- do {
- list.splice(pos, 1);
- } while((pos = list.indexOf(fqd)) !== -1);
- ExternalFilters.prefs.setCharPref(this.name + ".whitelist", list.join(" "));
- return true;
- },
-
- handle: function(traceableChannel, contentType, ctx, cached) {
- if (!(this.enabled && this._ctRx.test(contentType)))
- return false;
-
- if (!(this.whitelist && this.whitelist.test(traceableChannel.name))) {
- try {
- if (cached && traceableChannel instanceof Ci.nsICachingChannel &&
- traceableChannel.cacheToken instanceof Ci.nsICacheEntryDescriptor &&
- EFCacheSessions.isFiltered(traceableChannel.cacheToken, this.name)) {
- return true;
- }
- } catch(e) {
- // cache miss
- }
-
- new EFHandler(this, traceableChannel, ctx);
- }
- return true;
- }
-}
-
-
-
-function EFHandler(filter, traceableChannel, object) {
- this.filter = filter;
- this.channel = traceableChannel;
- this.object = object;
- this.originalListener = traceableChannel.setNewListener(this);
-}
-
-EFHandler.prototype = {
- _observers: [],
-
- outFile: null,
- cleanFile: null,
- outStream: null,
- bufSize: 0x8000,
- ctx: null,
- statusCode: 0,
-
- processed: false,
-
- caching: false,
- cacheEntry: null,
- offlineCacheEntry: null,
-
-
-
- process: function() {
- this.originalListener.onStartRequest(this.channel, this.ctx);
- try {
- this.outStream.flush();
- this.outStream.close();
-
- this.overwriteCache(this.loadAndCache);
-
- ExternalFilters.log("Running " + this.filter.exe.path + " on " + this.channel.name);
-
- this.cleanFile = ExternalFilters.createTempFile();
- var p = ExternalFilters.createProcess();
- p.init(this.filter.exe);
- var origin = '';
- try {
- origin = this.object.ownerDocument.defaultView.location.href;
- } catch(e) {
- }
- var args = [this.outFile.path, this.cleanFile.path, origin, this.channel.name];
- p.runAsync(args, args.length, this, true);
- this._observers.push(this); // anti-gc kung-fu death grip
-
- } catch(e) {
- this.abort(e);
- }
- },
-
- abort: function(e) {
- ExternalFilters.log("Aborting " + this.channel.name + ": " + e);
- this.channel.cancel(Cr.NS_ERROR_ABORT);
- this.overwriteCache(null);
- this.cleanup();
- },
-
- onCacheWrite: null,
-
- nukeCache: function(ce) {
- ce.openOutputStream(0).close();
- ce.markValid();
- },
-
- loadAndCache: function() {
- if (this.processed &&
- (!this.caching ||
- this.cacheEntry &&
- (this.offlineCacheEntry ||
- !this.channel.cacheForOfflineUse))
- ) {
- new EFFilePassthru(this);
- }
- },
-
- overwriteCache: function(writerCallback) {
- var ch = this.channel;
- if (!(ch instanceof Ci.nsICachingChannel)) return false;
-
- this.onCacheWrite = writerCallback || this.nukeCache;
-
- try {
-
- let ce = ch.cacheToken;
- if (!(ce instanceof Ci.nsICacheEntryDescriptor && ce.isStreamBased()))
- return false;
-
- try {
- if (ch.isFromCache()) return false;
- } catch(e) {
- ExternalFilters.log("[" + ch.name + "].isFromCache() " + e);
- }
-
- this.caching = true;
-
- new EFCacheHandler(this, ce, ce.clientID, ce.storagePolicy);
-
- if (ch.cacheForOfflineUse) {
- new EFCacheHandler(this, ce, ch.offlineCacheClientID);
- }
-
- return true;
- } catch(e) {
- ExternalFilters.log(e);
- }
- return false;
- },
-
- forCache: function(callback) {
- if (this.cacheEntry) callback(this.cacheEntry);
- if (this.offlineCacheEntry) callback(this.offlineCacheEntry);
- },
-
- _finalizeCacheEntry: function(ce) {
- try {
- var h = ce.getMetaDataElement("response-head");
- ce.setMetaDataElement("response-head",
- h.replace(/^(Content-Length:\s*)\d+/mi, "$1" + ce.dataSize));
- } catch(e) {
- ExternalFilters.log(e);
- }
- ce.markValid();
- ce.close();
- },
-
- cleanup: function() {
- if (this.outFile) {
- this.outFile.remove(false);
- delete this.outFile;
- }
- if (this.cleanFile) {
- this.cleanFile.remove(false);
- delete this.cleanFile;
- }
-
- this.forCache(this._finalizeCacheEntry);
-
- delete this.cacheEntry;
- delete this.offlineCacheEntry;
- },
-
- onStartRequest: function(request, ctx) {
- var outFile = ExternalFilters.createTempFile();
- var os = Cc["@mozilla.org/network/file-output-stream;1"]
- .createInstance(Ci.nsIFileOutputStream);
- os.init(outFile, 0x02 | 0x08 | 0x22 /* write, create, truncate */, 384 /*0600*/, 0);
- var bos = Cc["@mozilla.org/network/buffered-output-stream;1"]
- .createInstance(Ci.nsIBufferedOutputStream);
- bos.init(os, this.bufSize);
- this.outStream = bos;
- this.outFile = outFile;
- },
-
- onDataAvailable: function(request, ctx, inStream, offset, count) {
- var outStream = this.outStream;
- while(count > 0)
- count -= outStream.writeFrom(inStream, count);
- },
-
- onStopRequest: function(request, ctx, statusCode) {
- this.ctx = ctx;
- this.statusCode = statusCode;
- this.process();
- },
-
- observe: function(subject, topic, data) {
-
- this._observers.splice(this._observers.lastIndexOf(this), 1);
- var p = subject;
- if (p instanceof Ci.nsIProcess) {
- this.processed = true;
- switch(topic) {
- case "process-finished":
- if (!p.exitValue) {
- this.loadAndCache();
- break;
- }
- case "process-failed":
- // TODO: better error management and nuke cache entry
- this.abort("error #" + p.exitValue);
- break;
- }
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI(
- [Ci.nsITraceableChannel, Ci.nsICacheListener,
- Ci.nsIObserver, Ci.nsISupportsWeakReference])
-}
-
-function EFFilePassthru(handler) {
- this.handler = handler;
- this.request = handler.channel;
- this.originalListener = handler.originalListener;
-
- for (let ce of [handler.cacheEntry, handler.offlineCacheEntry]) {
- if (ce) {
- let tee = Cc["@mozilla.org/network/stream-listener-tee;1"].
- createInstance(Ci.nsIStreamListenerTee);
- tee.init(this.originalListener, ce.openOutputStream(0));
- this.originalListener = tee;
- }
- }
-
- // TODO: rewrite http://mxr.mozilla.org/mozilla-central/source/netwerk/cache/public/nsICacheEntryDescriptor.idl#86
- this.bytes = 0;
- var ch = IOUtil.newChannelFromURI(IOS.newFileURI(handler.cleanFile));
- ch.asyncOpen(this, handler.ctx);
-}
-
-EFFilePassthru.prototype = {
- onStartRequest: function(ch, ctx) {},
-
- onDataAvailable: function(ch, ctx, inStream, offset, count) {
- this.originalListener.onDataAvailable(this.request, ctx, inStream, offset, count);
- },
-
-
- onStopRequest: function(ch, ctx, statusCode) {
- ExternalFilters.log(this.request.name + " succesfully filtered");
-
- var handler = this.handler;
- this.originalListener.onStopRequest(this.request, ctx, handler.statusCode);
- handler.cleanup();
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIStreamListener])
-}
-
-
-function EFCacheHandler(handler, ce, clientID, storagePolicy) {
- this.handler = handler;
- this.expirationTime = ce.expirationTime;
- this.securityInfo = ce.securityInfo;
- this.metaData = {};
- ce.visitMetaData(this);
-
- if (typeof(storagePolicy) == "undefined")
- storagePolicy = EFCacheSessions.OFFLINE_POLICY;
-
- EFCacheSessions.getSession(clientID, storagePolicy)
- .asyncOpenCacheEntry(ce.key, EFCacheSessions.WRITE_ACCESS, this);
-}
-
-EFCacheHandler.prototype = {
-
-
- visitMetaDataElement: function(key, value) {
- this.metaData[key] = value;
- return true;
- },
-
- onCacheEntryAvailable: function(ce, accessGranted, status) {
- var handler = this.handler;
-
- if (Components.isSuccessCode(status) && handler.onCacheWrite) {
-
- ce.setExpirationTime(this.expirationTime);
-
- if (this.securityInfo) ce.securityInfo = this.securityInfo;
-
- let md = this.metaData;
- for (let key in md) {
- ce.setMetaDataElement(key, md[key]);
- }
-
- if (ce.storagePolicy == EFCacheSessions.OFFLINE_POLICY) {
- handler.offlineCacheEntry = ce;
- } else {
- handler.cacheEntry = ce;
- }
-
- EFCacheSessions.setFiltered(ce, handler.filter.name);
-
- handler.onCacheWrite(ce);
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsICacheListener, Ci.nsICacheMetaDataVisitor])
-}
-
-
-var EFCacheSessions = {
- FILTER_MD_KEY: "noscript-external-filter",
- WRITE_ACCESS: Ci.nsICache.ACCESS_WRITE,
- READ_ACCESS: Ci.nsICache.ACCESS_READ,
- OFFLINE_POLICY: Ci.nsICache.STORE_OFFLINE,
-
- nsICacheEntryDescriptor: Ci.nsICacheEntryDescriptor,
-
- get cacheService() {
- delete this.cacheService;
- return this.cacheService = Cc["@mozilla.org/network/cache-service;1"]
- .getService(Ci.nsICacheService)
- },
-
- _sessions: {},
- getSession: function(clientID, storagePolicy) {
- const sk = clientID + "#" + storagePolicy;
- if (!(sk in this._sessions)) {
- this._sessions[sk] = this.cacheService.createSession(clientID, storagePolicy, true);
- }
- return this._sessions[sk];
- },
-
- setFiltered: function(ce, filterName) {
- ce.setMetaDataElement(this.FILTER_MD_KEY, filterName);
- },
- isFiltered: function(ce, filterName) {
- return ce.getMetaDataElement(this.FILTER_MD_KEY) == filterName;
- },
-
- purge: function() {
- const whitelists = ExternalFilters.whitelists;
- if (whitelists) {
- this.whitelists = whitelists;
- const t = Date.now();
-
- this._entries = [];
- this.cacheService.visitEntries(this);
- this._entries.forEach(this._open, this);
- delete this._entries;
-
- ExternalFilters.log("Cache purged in " + (Date.now() - t) + "ms");
- }
- },
-
- _open: function(ce) {
- try {
- this.getSession(ce.clientID, ce.storagePolicy)
- .asyncOpenCacheEntry(ce.key, this.READ_ACCESS, this);
- } catch(e) {
- // already purged?
- }
- },
-
- visitDevice: function(deviceID, deviceInfo) {
- return true;
- },
- visitEntry: function(deviceID, ce) {
- this._entries.push({ // we must clone ce, since it appears to be a reused stub
- key: ce.key,
- clientID: ce.clientID,
- storagePolicy: ce.storagePolicy
- });
- return true;
- },
-
- onCacheEntryAvailable: function(ce, accessGranted, status) {
- if (!status) return;
- try {
- if (accessGranted == this.READ_ACCESS && ce instanceof this.nsICacheEntryDescriptor) {
- try {
- const filterName = ce.getMetaDataElement(this.FILTER_MD_KEY);
- if (filterName) {
- const wl = this.whitelists[filterName];
- if (wl && wl.test(ce.key)) {
- ExternalFilters.log("Dooming cache entry " + ce.key);
- ce.doom();
- return;
- }
- }
- } catch(e) {
- // meta data not found
- }
- } else {
- ExternalFilters.log(ce.key + ": MAYDAY!!!");
- }
- ce.markValid();
- } catch(e) {
- if (ce) ce.close();
- }
- },
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsICacheListener, Ci.nsICacheVisitor])
-}
diff --git a/extensions/noscript/chrome/content/noscript/FlashIdiocy.js b/extensions/noscript/chrome/content/noscript/FlashIdiocy.js
deleted file mode 100644
index f1096c6..0000000
--- a/extensions/noscript/chrome/content/noscript/FlashIdiocy.js
+++ /dev/null
@@ -1,133 +0,0 @@
-FlashIdiocy.purgeBadEncodings = s => s.replace(/%(?:[0-9a-f]?(?:[^0-9a-f]|$))/ig, "");
-FlashIdiocy.platformDecode = s => s.replace(/%[8-9a-f][0-9a-f]/ig, s => FlashIdiocy.map[s.substring(1).toLowerCase()]);
-
-FlashIdiocy.map = {
- "80": "?",
- "81": "",
- "82": "?",
- "83": "?",
- "84": "?",
- "85": "?",
- "86": "?",
- "87": "?",
- "88": "?",
- "89": "?",
- "8a": "?",
- "8b": "?",
- "8c": "?",
- "8d": "",
- "8e": "?",
- "8f": "",
- "90": "",
- "91": "?",
- "92": "?",
- "93": "?",
- "94": "?",
- "95": "?",
- "96": "?",
- "97": "?",
- "98": "?",
- "99": "?",
- "9a": "?",
- "9b": "?",
- "9c": "?",
- "9d": "",
- "9e": "?",
- "9f": "?",
- "a0": " ",
- "a1": "¡",
- "a2": "¢",
- "a3": "£",
- "a4": "¤",
- "a5": "¥",
- "a6": "¦",
- "a7": "§",
- "a8": "¨",
- "a9": "©",
- "aa": "ª",
- "ab": "«",
- "ac": "¬",
- "ad": "­",
- "ae": "®",
- "af": "¯",
- "b0": "°",
- "b1": "±",
- "b2": "²",
- "b3": "³",
- "b4": "´",
- "b5": "µ",
- "b6": "¶",
- "b7": "·",
- "b8": "¸",
- "b9": "¹",
- "ba": "º",
- "bb": "»",
- "bc": "¼",
- "bd": "½",
- "be": "¾",
- "bf": "¿",
- "c0": "À",
- "c1": "Á",
- "c2": "Â",
- "c3": "Ã",
- "c4": "Ä",
- "c5": "Å",
- "c6": "Æ",
- "c7": "Ç",
- "c8": "È",
- "c9": "É",
- "ca": "Ê",
- "cb": "Ë",
- "cc": "Ì",
- "cd": "Í",
- "ce": "Î",
- "cf": "Ï",
- "d0": "Ð",
- "d1": "Ñ",
- "d2": "Ò",
- "d3": "Ó",
- "d4": "Ô",
- "d5": "Õ",
- "d6": "Ö",
- "d7": "×",
- "d8": "Ø",
- "d9": "Ù",
- "da": "Ú",
- "db": "Û",
- "dc": "Ü",
- "dd": "Ý",
- "de": "Þ",
- "df": "ß",
- "e0": "à",
- "e1": "á",
- "e2": "â",
- "e3": "ã",
- "e4": "ä",
- "e5": "å",
- "e6": "æ",
- "e7": "ç",
- "e8": "è",
- "e9": "é",
- "ea": "ê",
- "eb": "ë",
- "ec": "ì",
- "ed": "í",
- "ee": "î",
- "ef": "ï",
- "f0": "ð",
- "f1": "ñ",
- "f2": "ò",
- "f3": "ó",
- "f4": "ô",
- "f5": "õ",
- "f6": "ö",
- "f7": "÷",
- "f8": "ø",
- "f9": "ù",
- "fa": "ú",
- "fb": "û",
- "fc": "ü",
- "fd": "ý",
- "fe": "þ",
- "ff": "ÿ",
-}
diff --git a/extensions/noscript/chrome/content/noscript/ForcedRedirectionCallback.js b/extensions/noscript/chrome/content/noscript/ForcedRedirectionCallback.js
deleted file mode 100644
index 25b05b0..0000000
--- a/extensions/noscript/chrome/content/noscript/ForcedRedirectionCallback.js
+++ /dev/null
@@ -1,59 +0,0 @@
-
-function NCBWrapper(delegator, delegate) {
- this.delegator = delegator;
- this.delegate = delegate;
-}
-NCBWrapper.prototype = {
- QueryInterface: function(iid) {
- if (Ci.nsIInterfaceRequestor.equals(iid)) {
- return this;
- }
- return this.delegator.QueryInterface(iid);
- },
- getInterface: function(iid) {
- try {
- return this.delegate.QueryInterface(iid);
- } catch (e) {}
- return this.delegator.getInterface(iid);
- }
-}
-
-function RCBDelegate(redirectCallback, label) {
- this.delegator = redirectCallback;
- this.label = label;
-}
-RCBDelegate.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.sIAsyncVerifyRedirectCallback]),
- onRedirectVerifyCallback: function(result) {
- try {
- if (result !== 0) ns.log("Overriding failed (" + result + ") redirect callback for " + this.label); // plugin failure is 2147500037
- this.delegator.onRedirectVerifyCallback(0);
- } catch (e) {
- ns.log(e);
- }
- }
-}
-
-function CESDelegate(ces) {
- this.delegator = ces;
-}
-CESDelegate.prototype = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIChannelEventSink]),
- asyncOnChannelRedirect: function(oldChan, newChan, flags, callback) {
- let label = "plugin forced redirection";
- try {
- label = (oldChan.loadInfo.externalContentPolicyType || oldChan.loadInfo.contentPolicyType)+ ": " + oldChan.name + " -> " + newChan.name + " - " + flags;
- } catch (e) {
- ns.log(e);
- }
- let cb = new RCBDelegate(callback, label);
- try {
- this.delegator.asyncOnChannelRedirect(oldChan, newChan, Ci.nsIChannelEventSink.REDIRECT_INTERNAL, cb);
- } catch (e) {
- ns.log(e);
- throw e;
- } finally {
- oldChan.notificationCallbacks = newChan.notificationCallbacks = this.delegator;
- }
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/FrameScript.jsm b/extensions/noscript/chrome/content/noscript/FrameScript.jsm
deleted file mode 100644
index 4a896e7..0000000
--- a/extensions/noscript/chrome/content/noscript/FrameScript.jsm
+++ /dev/null
@@ -1,87 +0,0 @@
-'use strict';
-
-var EXPORTED_SYMBOLS = ["FrameScript"];
-
-const { utils: Cu, interfaces: Ci, classes: Cc } = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-const SERVICE_READY = "NoScript.ServiceReady";
-const SERVICE_DISPOSE = "NoScript.Dispose";
-
-Cu.import("chrome://noscript/content/importer.jsm");
-let IMPORT = IMPORT_FOR(this);
-IMPORT("PasteHandler");
-IMPORT("UISync");
-
-function FrameScript(ctx) {
- Object.defineProperty(ctx, "ns", {
- get: function() {
- try {
- const CTRID = "@maone.net/noscript-service;1";
- if (CTRID in Cc) {
- let ns = Cc[CTRID].getService().wrappedJSObject;
- delete this.ns;
- return (this.ns = ns);
- }
- } catch(e) {
- Cu.reportError(e);
- }
- return null;
- },
- configurable: true,
- enumerable: true
- });
-
- this.ctx = ctx;
-
- if (ctx.ns) {
- this.init();
- } else {
- Services.obs.addObserver(this, SERVICE_READY, true);
- }
-
-}
-
-FrameScript.prototype = {
- QueryInterface: XPCOMUtils.generateQI(
- [Ci.nsIObserver, Ci.nsISupportsWeakReference]),
- init() {
- if (this.uiSync) return;
-
- let ctx = this.ctx;
- this.pasteHandler = new PasteHandler(ctx);
- this.uiSync = new UISync(ctx);
- ctx.addMessageListener("NoScript:unload", this);
- Services.obs.addObserver(this, SERVICE_DISPOSE, true);
- let ns = ctx.ns;
- if (ns.consoleDump && ctx.content && ctx.content.location)
- ns.dump(`Framescript initialized in ${ctx.content.location.href}`);
- },
- observe(subj, topic, data) {
- switch(topic) {
- case SERVICE_READY:
- this.init();
- break;
- case SERVICE_DISPOSE:
- this.dispose();
- break;
- }
- },
- receiveMessage(m) {
- if (m.name === "NoScript:unload") {
- this.dispose();
- }
- },
- dispose() {
- if (!this.uiSync) return;
- this.pasteHandler.dispose();
- this.uiSync.unwire();
- this.uiSync = this.pasteHandler = null;
- let ctx = this.ctx;
- let ns = ctx.ns;
- if (ns.consoleDump && ctx.content && ctx.content.location)
- this.ctx.ns.dump(`Framescript disposed in ${this.ctx.content.location.href}`);
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/HTTPS.js b/extensions/noscript/chrome/content/noscript/HTTPS.js
deleted file mode 100644
index 1538036..0000000
--- a/extensions/noscript/chrome/content/noscript/HTTPS.js
+++ /dev/null
@@ -1,405 +0,0 @@
-LAZY_INCLUDE('Cookie');
-
-var HTTPS = {
- ready: false,
-
- secureCookies: false,
- secureCookiesExceptions: null,
- secureCookiesForced: null,
- httpsForced: null,
- httpsForcedExceptions: null,
- httpsDefWhitelist: true,
-
- replacements: [
- [/^http:\/\/yui\.yahooapis\.com\//i, "https://yui-s.yahooapis.com/"]
- ],
- modifyURI: function(uri) {
- let spec = uri.spec;
- for (let replacement of this.replacements) {
- if (replacement[0].test(spec)) uri.spec = spec.replace(replacement[0], replacement[1]);
- }
- uri.scheme = "https";
- uri.port = -1;
- return uri;
- },
-
- forceChannel: function(channel) {
- return this.mustForce(channel.URI, channel) && this.replaceChannel(channel)
- },
- replaceChannel: function(channel) {
- var uri = this.modifyURI(channel.URI.clone());
-
- if (channel.redirectTo) {
- channel.redirectTo(uri);
- HTTPS.log("Redirected Channel " + uri.spec);
- } else {
- ChannelReplacement.runWhenPending(channel, function() {
-
- new ChannelReplacement(channel, uri).replace(true);
- HTTPS.log("Forced Channel " + uri.spec);
- });
- }
- return true;
-
- },
-
- forceURI: function(uri, fallback, ctx) {
- if (!uri.schemeIs("http")) return false;
- if (IOUtil.newChannel(uri.spec).nsIHttpChannel.redirectTo) {
- this.forceURI = DUMMY_FUNC;
- return false;
- }
- return (this.forceURI = this._forceURI).apply(this, arguments);
- },
- _forceURI: function(uri, fallback, ctx) {
- if (this.mustForce(uri)) {
- try {
-
- this.modifyURI(uri);
-
- this.log("Forced URI " + uri.spec);
- return true;
-
- } catch(e) {
- if (ctx) {
- let g = Cu.getGlobalForObject(ctx);
- if (ctx instanceof g.HTMLImageElement || ctx instanceof g.HTMLInputElement ||
- ctx instanceof Ci.nsIObjectLoadingContent) {
- uri = uri.clone();
- uri.scheme = "https";
-
- var type, attr;
- if (ctx instanceof Ci.nsIObjectLoadingContent) {
- type = "Object";
- attr = "data";
- } else {
- type = "Image";
- attr = "src";
- }
- Thread.asap(function() { ctx.setAttribute(attr, uri.spec); });
-
- var msg = type + " HTTP->HTTPS redirection to " + uri.spec;
- this.log(msg);
- throw msg;
- }
- }
- if (fallback && fallback()) {
- this.log("Channel redirection fallback on " + uri.spec);
- return true;
- }
-
- this.log("Error trying to force https on " + uri.spec + ": " + e);
- }
- }
- return false;
- },
-
- get defWhitelist() {
- delete this.defWhitelist;
- return this.defWhitelist = new RegExp("\\b(?:" + ns.getPref("default").replace(/\./g, "\\.").split(/\s+/).join("|") + ")$");
- },
-
- mustForce: function(uri, channel) {
- if (!uri.schemeIs("http")) return false;
-
- let url = uri.spec;
- if (this.httpsForcedExceptions && this.httpsForcedExceptions.test(url)) return false;
-
- if (channel && this.httpsDefWhitelist &&
- (channel.loadFlags & (Ci.nsIChannel.LOAD_DOCUMENT_URI | Ci.nsIChannel.LOAD_CALL_CONTENT_SNIFFERS)) &&
- !(channel instanceof Ci.nsIHttpChannelInternal && !channel.allowSTS)) {
- let site = ns.getSite(url);
- if (this.defWhitelist.test(site) && ns.isJSEnabled(site)) {
- return true;
- }
- }
-
- return this.httpsForced && this.httpsForced.test(url) ||
- this.httpsForcedBuiltIn && this.httpsForcedBuiltIn.test(url);
- },
-
- log: function(msg) {
- this.log = ns.getPref("https.showInConsole", true)
- ? function(msg) { ns.log("[NoScript HTTPS] " + msg); }
- : function(msg) {}
-
- return this.log(msg);
- },
-
- onCrossSiteRequest: function(channel, origin, browser, rw) {
- try {
- this.handleCrossSiteCookies(channel, origin, browser);
- } catch(e) {
- this.log(e + " --- " + e.stack);
- }
- },
-
- registered: false,
- handleSecureCookies: function(req) {
- /*
- we check HTTPS responses setting cookies and
- 1) if host is in the noscript.secureCookiesExceptions list we let
- it pass through
- 2) if host is in the noscript.secureCookiesForced list we append a
- ";Secure" flag to every non-secure cookie set by this response
- 3) otherwise, we just log unsafe cookies BUT if no secure cookie
- is set, we patch all these cookies with ";Secure" like in #2.
- However, if current request redirects (directly or indirectly)
- to an unencrypted final URI, we remove our ";Secure" patch to
- ensure compatibility (ref: mail.yahoo.com and hotmail.com unsafe
- behavior on 11 Sep 2008)
- */
-
- if (!this.secureCookies) return;
-
- var uri = req.URI;
-
- if (uri.schemeIs("https") &&
- !(this.secureCookiesExceptions && this.secureCookiesExceptions.test(uri.spec)) &&
- (req instanceof Ci.nsIHttpChannel)) {
- try {
- var host = uri.host;
- try {
- var cookies = req.getResponseHeader("Set-Cookie");
- } catch(mayHappen) {
- return;
- }
- if (cookies) {
- var forced = this.secureCookiesForced && this.secureCookiesForced.test(uri.spec);
- var secureFound = false;
- var unsafe = null;
-
- const rw = ns.requestWatchdog;
- var browser = rw.findBrowser(req);
-
- if (!browser) {
- if (ns.consoleDump) ns.dump("Browser not found for " + uri.spec);
- }
-
- var unsafeMap = this.getUnsafeCookies(browser) || {};
- var c;
- for (var cs of cookies.split("\n")) {
- c = new Cookie(cs, host);
- if (c.secure && c.belongsTo(host)) {
- this.log("Secure cookie set by " + host + ": " + c);
- secureFound = c;
- delete unsafeMap[c.id];
- } else {
- if (!unsafe) unsafe = [];
- unsafe.push(c);
- }
- }
-
-
- if (unsafe && !(forced || secureFound)) {
- // this page did not set any secure cookie, let's check if we already have one
- secureFound = Cookie.find(function(c) {
- return (c instanceof Ci.nsICookie) && (c instanceof Ci.nsICookie2)
- && c.isSecure && !unsafe.find(function(x) { return x.sameAs(c); })
- });
- if (secureFound) {
- this.log("Secure cookie found for this host: " + Cookie.prototype.toString.apply(secureFound));
- }
- }
-
- if (secureFound && !forced) {
- this.cookiesCleanup(secureFound);
- return;
- }
-
- if (!unsafe) return;
-
- var msg;
- if (forced || !secureFound) {
- req.setResponseHeader("Set-Cookie", "", false);
- msg = forced ? "FORCED SECURE" : "AUTOMATIC SECURE";
- forced = true;
- } else {
- msg = "DETECTED INSECURE";
- }
-
- if (!this.registered) {
- this.registered = true;
- rw.addCrossSiteListener(this);
- }
-
- this.setUnsafeCookies(browser, unsafeMap);
- msg += " on https://" + host + ": ";
- for (c of unsafe) {
- if (forced) {
- c.secure = true;
- req.setResponseHeader("Set-Cookie", c.source + ";Secure", true);
- unsafeMap[c.id] = c;
- }
- this.log(msg + c);
- }
-
- }
- } catch(e) {
- if (ns.consoleDump) ns.dump(e);
- }
- }
- },
-
- handleCrossSiteCookies: function(req, origin, browser) {
-
- var unsafeCookies = this.getUnsafeCookies(browser);
- if (!unsafeCookies) return;
-
- var uri = req.URI;
- var dscheme = uri.scheme;
-
- var oparts = origin && origin.match(/^(https?):\/\/([^\/:]+).*?(\/.*)/);
- if (!(oparts && /https?/.test(dscheme))) return;
-
- var oscheme = oparts[1];
- if (oscheme == dscheme) return; // we want to check only cross-scheme requests
-
- var dsecure = dscheme == "https";
-
- if (dsecure && !ns.getPref("secureCookies.recycle", false)) return;
-
- var dhost = uri.host;
- var dpath = uri.filePath;
-
- var ohost = oparts[2];
- var opath = oparts[3];
-
- var ocookieCount = 0, totCount = 0;
- var dcookies = [];
- var c;
-
- for (var k in unsafeCookies) {
- c = unsafeCookies[k];
- if (!c.exists()) {
- delete unsafeCookies[k];
- } else {
- totCount++;
- if (c.belongsTo(dhost, dpath) && c.isSecure != dsecure) { // either secure on http or not secure on https
- dcookies.push(c);
- }
- if (c.belongsTo(ohost, opath)) {
- ocookieCount++;
- }
- }
- }
-
- if (!totCount) {
- this.setUnsafeCookies(browser, null);
- return;
- }
-
- // We want to "desecurify" cookies only if cross-navigation to unsafe
- // destination originates from a site sharing some secured cookies
-
- if (ocookieCount == 0 && !dsecure || !dcookies.length) return;
-
- if (dsecure) {
- this.log("Detected cross-site navigation with secured cookies: " + origin + " -> " + uri.spec);
-
- } else {
- this.log("Detected unsafe navigation with NoScript-secured cookies: " + origin + " -> " + uri.spec);
- this.log(uri.prePath + " cannot support secure cookies because it does not use HTTPS. Consider forcing HTTPS for " + uri.host + " in NoScript's Advanced HTTPS options panel.")
- }
-
- var cs = Cc['@mozilla.org/cookieService;1'].getService(Ci.nsICookieService).getCookieString(uri, req);
-
- for (c of dcookies) {
- c.secure = dsecure;
- c.save();
- this.log("Toggled secure flag on " + c);
- }
-
- if (cs) {
- dcookies.push.apply(
- dcookies, cs.split(/\s*;\s*/).map(function(cs) { var nv = cs.split("="); return { name: nv.shift(), value: nv.join("=") } })
- .filter(function(c) { return dcookies.every(function(x) { return x.name != c.name }) })
- );
- }
-
- cs = dcookies.map(function(c) { return c.name + "=" + c.value }).join("; ");
-
- this.log("Sending Cookie for " + dhost + ": " + cs);
- req.setRequestHeader("Cookie", cs, false); // "false" because merge syntax breaks Cookie header
- },
-
-
- cookiesCleanup: function(refCookie) {
- var downgraded = [];
-
- var ignored = this.secureCookiesExceptions;
- var disabled = !this.secureCookies;
- var bi = DOM.createBrowserIterator();
- var unsafe, k, c, total, deleted;
- for (var browser; browser = bi.next();) {
- unsafe = this.getUnsafeCookies(browser);
- if (!unsafe) continue;
- total = deleted = 0;
- for (k in unsafe) {
- c = unsafe[k];
- total++;
- if (disabled || (refCookie ? c.belongsTo(refCookie.host) : ignored && ignored.test(c.rawHost))) {
- if (c.exists()) {
- this.log("Cleaning Secure flag from " + c);
- c.secure = false;
- c.save();
- }
- delete unsafe[k];
- deleted++;
- }
- }
- if (total == deleted) this.setUnsafeCookies(browser, null);
- if (!this.cookiesPerTab) break;
- }
- },
-
- get cookiesPerTab() {
- return ns.getPref("secureCookies.perTab", false);
- },
-
- _globalUnsafeCookies: {},
- getUnsafeCookies: function(browser) {
- return this.cookiesPerTab
- ? browser && ns.getExpando(browser, "unsafeCookies")
- : this._globalUnsafeCookies;
- },
- setUnsafeCookies: function(browser, value) {
- return this.cookiesPerTab
- ? browser && ns.setExpando(browser, "unsafeCookies", value)
- : this._globalUnsafeCookies = value;
- },
-
- _getParent: function(req, w) {
- return w && w.frameElement || DOM.findBrowserForNode(w || IOUtil.findWindow(req));
- }
-
-};
-
-
-["secureCookies", "secureCookiesExceptions", "secureCookiesForced"].forEach(function(p) {
- var v = HTTPS[p];
- delete HTTPS[p];
- HTTPS.__defineGetter__(p, function() {
- return v;
- });
- HTTPS.__defineSetter__(p, function(n) {
- v = n;
- if (HTTPS.ready) HTTPS.cookiesCleanup();
- return v;
- });
-});
-
-["secureCookies", "secureCookiesExceptions", "secureCookiesForced",
- "httpsForcedBuiltIn", "httpsForced", "httpsForcedExceptions",
- "httpsDefWhitelist",
- ]
- .forEach(function(p) {
- try {
- ns.syncPrefs(ns.prefs, p);
- } catch(e) {
- ns.dump(e.message + ":" + e.stack + " setting " + p + "\n");
- }
-});
-
-
-HTTPS.ready = true;
diff --git a/extensions/noscript/chrome/content/noscript/IO.js b/extensions/noscript/chrome/content/noscript/IO.js
deleted file mode 100644
index 2b93cce..0000000
--- a/extensions/noscript/chrome/content/noscript/IO.js
+++ /dev/null
@@ -1,53 +0,0 @@
-var IO = {
- readFile: function(file, charset) {
- var res;
-
- const is = Cc["@mozilla.org/network/file-input-stream;1"]
- .createInstance(Ci.nsIFileInputStream );
- is.init(file ,0x01, 256 /*0400*/, null);
- const sis = Cc["@mozilla.org/scriptableinputstream;1"]
- .createInstance(Ci.nsIScriptableInputStream);
- sis.init(is);
-
- res = sis.read(sis.available());
- is.close();
-
- if (charset !== null) { // use "null" if you want uncoverted data...
- const unicodeConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
- .createInstance(Ci.nsIScriptableUnicodeConverter);
- try {
- unicodeConverter.charset = charset || "UTF-8";
- } catch(ex) {
- unicodeConverter.charset = "UTF-8";
- }
- res = unicodeConverter.ConvertToUnicode(res);
- }
-
- return res;
- },
- writeFile: function(file, content, charset) {
- const unicodeConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"]
- .createInstance(Ci.nsIScriptableUnicodeConverter);
- try {
- unicodeConverter.charset = charset || "UTF-8";
- } catch(ex) {
- unicodeConverter.charset = "UTF-8";
- }
-
- content = unicodeConverter.ConvertFromUnicode(content);
- const os = Cc["@mozilla.org/network/file-output-stream;1"]
- .createInstance(Ci.nsIFileOutputStream);
- os.init(file, 0x02 | 0x08 | 0x20, 448 /*0700*/, 0);
- os.write(content, content.length);
- os.close();
- },
-
- safeWriteFile: function(file, content, charset) {
- var tmp = file.clone();
- var name = file.leafName;
- tmp.leafName = name + ".tmp";
- tmp.createUnique(Ci.nsIFile.NORMAL_FILE_TYPE, file.exists() ? file.permissions : 384 /*0600*/);
- this.writeFile(tmp, content, charset);
- tmp.moveTo(file.parent, name);
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/IOUtil.js b/extensions/noscript/chrome/content/noscript/IOUtil.js
deleted file mode 100644
index 72daac0..0000000
--- a/extensions/noscript/chrome/content/noscript/IOUtil.js
+++ /dev/null
@@ -1,290 +0,0 @@
-var IOUtil = {
- asyncNetworking: true,
- proxiedDNS: 0,
-
- attachToChannel(channel, key, data) {
- if (channel instanceof Ci.nsIWritablePropertyBag2) {
- channel.setPropertyAsInterface(key, data);
- }
- return data;
- },
- extractFromChannel(channel, key, remove = false) {
- if (channel instanceof Ci.nsIPropertyBag2) {
- let p = channel.get(key);
- if (p) {
- if (remove && (channel instanceof Ci.nsIWritablePropertyBag)) channel.deleteProperty(key);
- if (p.wrappedJSObject) return p.wrappedJSObject;
- p instanceof Ci.nsIURL || p instanceof Ci.nsIURI;
- return p;
- }
- }
- return null;
- },
-
- reqData(req, key, remove = false) {
- let data = IOUtil.extractFromChannel(req, key, remove);
- if (data) return data.wrappedJSObject;
- if (remove) return null;
-
- data = {};
- data.wrappedJSObject = data;
- return IOUtil.attachToChannel(req, key, data);
- },
-
- extractInternalReferrer: function(channel) {
- if (channel instanceof Ci.nsIPropertyBag2) {
- const key = "docshell.internalReferrer";
- if (channel.hasKey(key))
- try {
- return channel.getPropertyAsInterface(key, Ci.nsIURL);
- } catch(e) {}
- }
- return null;
- },
- extractInternalReferrerSpec: function(channel) {
- var ref = this.extractInternalReferrer(channel);
- return ref && ref.spec || null;
- },
-
- getProxyInfo: function(channel) {
- return Ci.nsIProxiedChannel && (channel instanceof Ci.nsIProxiedChannel)
- ? channel.proxyInfo
- : Cc["@mozilla.org/network/protocol-proxy-service;1"]
- .getService(Ci.nsIProtocolProxyService)
- .resolve(channel.URI, 0);
- },
-
-
- canDoDNS: function(channel) {
- if (!channel || IOS.offline) return false;
-
- var proxyInfo = this.getProxyInfo(channel);
- switch(this.proxiedDNS) {
- case 1:
- return !(proxyInfo && (proxyInfo.flags & Ci.nsIProxyInfo.TRANSPARENT_PROXY_RESOLVES_HOST));
- case 2:
- return true;
- default:
- return !proxyInfo || proxyInfo.type == "direct";
- }
-
- },
-
- abort: function(channel) {
- if (ns.consoleDump) ns.dump("Aborting " + channel.name + " @ " + new Error().stack);
- channel.cancel(Cr.NS_ERROR_ABORT);
- this.resumeParentChannel(channel, true);
- },
-
- _suspendedChannelsMap: new Map(),
- _suspendedChannelId: 1,
- resumeParentChannel(channelOrID, abort = false) {
- let id;
- if (channelOrID instanceof Ci.nsIChannel) {
- id = ns.reqData(channelOrID).requestID;
- } else {
- id = channelOrID;
- }
- if (id) {
- if (IPC.parent) {
- let map = this._suspendedChannelsMap;
- if (map.has(id)) {
- let channel = map.get(id).get();
- map.delete(id);
- if (channel) {
- try {
- if (abort) {
- this.abort(channel);
- }
- channel.resume();
- } catch(e) {
- ns.dump(e);
- }
- }
- }
- } else {
- Services.cpmm.sendSyncMessage(IPC_P_MSG.RESUME, {id, abort });
- }
- }
- },
- suspendChannel(channel) {
- let map = this._suspendedChannelsMap;
- let reqData = ns.reqData(channel);
- let id = reqData.requestID;
- if (!id) {
- id = reqData.requestID = this._suspendedChannelId++;
- }
- map.set(id, Cu.getWeakReference(channel));
- channel.suspend();
- },
-
- isMediaDocOrFrame(channel, contentType) {
- try {
- let cpType = channel.loadInfo.externalContentPolicyType;
- if (cpType === 7 || (cpType === 6 &&
- /^(?:video|audio|application)\//i.test(contentType === undefined ? channel.contentType : contentType))) {
- try {
- return !/^attachment\b/i.test(req.getResponseHeader("Content-disposition"));
- } catch(e) {
- }
- return true;
- }
- } catch (e) {
- }
- return false;
- },
-
- findWindow: function(channel) {
- for (var cb of [channel.notificationCallbacks,
- channel.loadGroup && channel.loadGroup.notificationCallbacks]) {
- if (cb instanceof Ci.nsIInterfaceRequestor) {
- if (Ci.nsILoadContext) try {
- // For Gecko 1.9.1
- return cb.getInterface(Ci.nsILoadContext).associatedWindow;
- } catch(e) {}
-
- try {
- // For Gecko 1.9.0
- return cb.getInterface(Ci.nsIDOMWindow);
- } catch(e) {}
- }
- }
- return null;
- },
-
- findBrowser: function(channel) {
- try {
- let b = channel.notificationCallbacks.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsILoadContext).topFrameElement;
- if (b) return b;
- } catch (e) {
- }
- return DOM.findBrowserForNode(this.findWindow(channel));
- },
-
- _protocols: {}, // caching them we gain a 33% speed boost in URI creation :)
- newURI: function(url, originCharset, baseUri) {
- try {
- let scheme = url.substring(0, url.indexOf(':'));
- return (this._protocols[scheme] ||
- (this._protocols[scheme] =
- Cc["@mozilla.org/network/protocol;1?name=" + scheme]
- .getService(Ci.nsIProtocolHandler)))
- .newURI(url, originCharset, baseUri);
- } catch(e) {
- return IOS.newURI(url, originCharset, baseUri);
- }
- },
-
- newChannel: function(url, originCharset, baseUri, loadingNode, loadingPrincipal, triggeringPrincipal, securityFlags, contentPolicyType) {
- return ("newChannel2" in IOS)
- ? (this.newChannel = this.newChannel2).apply(this, arguments)
- : IOS.newChannel(url, originCharset, baseUri);
- },
- newChannel2: function(url, originCharset, baseUri, loadingNode, loadingPrincipal, triggeringPrincipal, securityFlags, contentPolicyType) {
- return IOS.newChannel2(url, originCharset, baseUri, loadingNode, loadingPrincipal, triggeringPrincipal, securityFlags, contentPolicyType);
- },
-
- unwrapURL: function(url) {
- try {
- if (!(url instanceof Ci.nsIURI))
- url = this.newURI(url);
-
- switch (url.scheme) {
- case "view-source":
- return this.unwrapURL(url.spec.replace(/^.*?:/, ''));
- case "feed":
- case "pcast":
- let u = url.spec.substring(url.scheme.length + 1);
- if (u.substring(0, 2) == '//') u = "http:" + u;
- return this.unwrapURL(u);
- case "wyciwyg":
- return this.unwrapURL(url["path" in url ? "path" : "pathQueryRef"].replace(/^\/\/\d+\//, ""));
- case "jar":
- if (url instanceof Ci.nsIJARURI)
- return this.unwrapURL(url.JARFile);
- }
- }
- catch (e) {}
-
- return url;
- },
-
-
- get _channelFlags() {
- delete this._channelFlags;
- const constRx = /^[A-Z_]+$/;
- const ff = {};
- [Ci.nsIHttpChannel, Ci.nsICachingChannel].forEach(function(c) {
- for (var p in c) {
- if (constRx.test(p)) ff[p] = c[p];
- }
- });
- return this._channelFlags = ff;
- },
- humanFlags: function(loadFlags) {
- var hf = [];
- var c = this._channelFlags;
- for (var p in c) {
- if (loadFlags & c[p]) hf.push(p + "=" + c[p]);
- }
- return hf.join("\n");
- },
-
- queryNotificationCallbacks: function(chan, iid) {
- var cb;
- try {
- cb = chan.notificationCallbacks.getInterface(iid);
- if (cb) return cb;
- } catch(e) {}
-
- try {
- return chan.loadGroup && chan.loadGroup.notificationCallbacks.getInterface(iid);
- } catch(e) {}
-
- return null;
- },
-
- anonymizeChannel(channel) {
- channel.setRequestHeader("Cookie", '', false);
- channel.setRequestHeader("Authorization", '', false);
- channel.loadFlags |= channel.LOAD_ANONYMOUS;
- },
- anonymizeURI: function(uri, cookie) {
- if (uri instanceof Ci.nsIURL) {
- uri.query = this.anonymizeQS(uri.query, cookie);
- } else return this.anonymizeURL(uri, cookie);
- return uri;
- },
- anonymizeURL: function(url, cookie) {
- var parts = url.split("?");
- if (parts.length < 2) return url;
- parts[1] = this.anonymizeQS(parts[1], cookie);
- return parts.join("?");
- },
-
- _splitName: (nv) => nv.split("=")[0],
- _qsRx: /[&=]/,
- _anonRx: /(?:auth|s\w+(?:id|key)$)/,
- anonymizeQS: function(qs, cookie) {
- if (!qs) return qs;
- if (!this._qsRx.test(qs)) return '';
-
- var cookieNames, hasCookies;
- if ((hasCookies = !!cookie)) cookieNames = cookie.split(/\s*;\s*/).map(this._splitName)
-
- let parms = qs.split("&");
- for (let j = parms.length; j-- > 0;) {
- let nv = parms[j].split("=");
- let name = nv[0];
- if (this._anonRx.test(name) || cookie && cookieNames.indexOf(name) > -1)
- parms.splice(j, 1);
- }
- return parms.join("&");
- },
-
- get TLDService() {
- delete this.TLDService;
- return (this.TLDService = Cc["@mozilla.org/network/effective-tld-service;1"].getService(Ci.nsIEffectiveTLDService));
- }
-
-};
diff --git a/extensions/noscript/chrome/content/noscript/InjectionChecker.js b/extensions/noscript/chrome/content/noscript/InjectionChecker.js
deleted file mode 100644
index fa96c93..0000000
--- a/extensions/noscript/chrome/content/noscript/InjectionChecker.js
+++ /dev/null
@@ -1,1734 +0,0 @@
-
-const wordCharRx = /\w/g;
-function fuzzify(s) {
- return s.replace(wordCharRx, '\\W*(?:/[*/][^]*)?$&');
-}
-
-const IC_COMMENT_PATTERN = '\\s*(?:\\/[\\/\\*][^]+)?';
-const IC_WINDOW_OPENER_PATTERN = fuzzify("alert|confirm|prompt|open(?:URL)?|print|show") + "\\w*" + fuzzify("Dialog");
-const IC_EVAL_PATTERN = "\\b(?:" +
- fuzzify('eval|set(?:Timeout|Interval)|(?:f|F)unction|Script|toString|Worker|document|constructor|generateCRMFRequest|jQuery|fetch|write(?:ln)?|__(?:define(?:S|G)etter|noSuchMethod)__|definePropert(?:y|ies)') +
- "|\\$|" + IC_WINDOW_OPENER_PATTERN + ")\\b";
-const IC_EVENT_PATTERN = "on(?:c(?:o(?:n(?:nect(?:i(?:on(?:statechanged|available)|ng)|ed)?|t(?:rollerchange|extmenu))|m(?:p(?:osition(?:update|start|end)|lete)|mand(?:update)?)|py)|h(?:a(?:r(?:ging(?:time)?change|acteristicchanged)|nge)|ecking)|a(?:n(?:play(?:through)?|cel)|(?:llschang|ch)ed|rdstatechange)|u(?:rrent(?:channel|source)changed|echange|t)|l(?:i(?:rmodechange|ck)|ose)|fstatechange)|p(?:o(?:inter(?:l(?:ock(?:change|error)|eave)|o(?:ver|ut)|cancel|enter|down|move|up)|p(?:up(?:hid(?:den|ing)|show(?:ing|n)|positioned)|state))|a(?:i(?:ring(?:con(?:firmation|sent)req|aborted)|nt)|ge(?:hide|show)|(?:st|us)e)|u(?:ll(?:vcard(?:listing|entry)|phonebook)req|sh(?:subscriptionchange)?)|(?:[is]|ending|ty)change|lay(?:ing)?|rogress|hoto)|s(?:t(?:a(?:t(?:uschanged|echange)|lled|rt)|o(?:rage(?:areachanged)?|p)|k(?:sessione|comma)nd)|e(?:lect(?:ionchange|start)?|ek(?:ing|ed)|n(?:ding|t)|t)|ou(?:rce(?:(?:clos|end)ed|open)|nd(?:start|end))|c(?:(?:anningstate|ostatus)changed|roll)|pe(?:akerforcedchange|ech(?:start|end))|h(?:ipping(?:address|option)change|ow)|u(?:ccess|spend|bmit))|d(?:e(?:vice(?:p(?:roximity|aired)|(?:orienta|mo)tion|(?:unpaire|foun)d|change|light)|l(?:ivery(?:success|error)|eted))|i(?:s(?:c(?:hargingtimechange|onnect(?:ing|ed)?)|playpasskeyreq|abled)|aling)|r(?:a(?:g(?:e(?:n(?:ter|d)|xit)|(?:gestur|leav)e|start|drop|over)?|in)|op)|ata(?:(?:availabl|chang)e|error)?|urationchange|ownloading|blclick)|m(?:o(?:z(?:pointerlock(?:change|error)|fullscreen(?:change|error)|key(?:down|up)onplugin|accesskeynotfound|orientationchange)|use(?:l(?:ongtap|eave)|o(?:ver|ut)|enter|wheel|down|move|up))|a(?:p(?:se(?:tmessagestatus|ndmessage)|message(?:slisting|update)|folderlisting|getmessage)req|rk)|(?:idimessag|ut)e|essage(?:error)?)|a(?:n(?:imation(?:iteration|cancel|start|end)|tennaavailablechange)|d(?:d(?:sourcebuffer|track)|apter(?:remov|add)ed)|ttribute(?:(?:write|read)req|changed)|u(?:dio(?:process|start|end)|xclick)|b(?:solutedeviceorientation|ort)|(?:2dpstatuschang|ppinstall)ed|fter(?:scriptexecute|print)|ctiv(?:estatechanged|ate)|lerting)|r(?:e(?:s(?:ourcetimingbufferfull|u(?:m(?:ing|e)|lt)|ponseprogress|ize|et)|mo(?:ve(?:sourcebuffer|track)|te(?:resume|hel)d)|ad(?:y(?:statechange)?|success|error)|quest(?:mediaplaystatu|progres)s|pea(?:tEven)?t|loadpage|trieving|ceived)|(?:(?:adiost)?ate|t)change|ds(?:dis|en)abled)|Moz(?:S(?:wipeGesture(?:(?:May)?Start|Update|End)?|crolledAreaChanged)|M(?:agnifyGesture(?:Update|Start)?|ouse(?:PixelScroll|Hittest))|EdgeUI(?:C(?:omplet|ancel)|Start)ed|RotateGesture(?:Update|Start)?|(?:Press)?TapGesture|AfterPaint)|w(?:eb(?:kit(?:Animation(?:Iteration|Start|End)|animation(?:iteration|start|end)|(?:TransitionE|transitione)nd)|socket)|a(?:iting(?:forkey)?|rning)|heel)|DOM(?:Node(?:Inserted(?:IntoDocument)?|Removed(?:FromDocument)?)|(?:CharacterData|Subtree)Modified|A(?:ttrModified|ctivate)|Focus(?:Out|In)|MouseScroll)|b(?:e(?:fore(?:(?:evicte|unloa)d|p(?:aste|rint)|scriptexecute|c(?:opy|ut))|gin(?:Event)?)|u(?:fferedamountlow|sy)|l(?:ocked|ur)|roadcast|oundary)|v(?:rdisplay(?:(?:presentchang|activat)e|d(?:eactivate|isconnect)|connect)|o(?:ice(?:schanged|change)|lumechange)|(?:isibility|ersion)change)|e(?:n(?:ter(?:pincodereq)?|(?:crypt|abl)ed|d(?:Event|ed)?)|m(?:ergencycbmodechange|ptied)|(?:itbroadcas|vic)ted|rror|xit)|t(?:o(?:uch(?:cancel|start|move|end)|ggle)|ransition(?:cancel|start|end|run)|ime(?:update|out)|e(?:rminate|xt)|ypechange)|l(?:o(?:ad(?:e(?:d(?:meta)?data|nd)|ing(?:error|done)?|start)?|stpointercapture)|(?:anguage|evel)change|y)|u(?:p(?:date(?:(?:fou|e)nd|ready|start)?|gradeneeded)|s(?:erproximity|sdreceived)|n(?:derflow|load|mute))|o(?:(?:(?:rientation|tastatus)chang|(?:ff|n)lin)e|b(?:expasswordreq|solete)|verflow(?:changed)?|pen)|g(?:amepad(?:(?:dis)?connected|button(?:down|up)|axismove)|(?:otpointercaptur|roupchang)e|et)|f(?:ullscreen(?:change|error)|ocus(?:out|in)?|requencychange|(?:inis|etc)h|ailed)|i(?:cc(?:(?:info)?change|(?:un)?detected)|n(?:coming|stall|valid|put))|h(?:(?:fp|id)statuschanged|e(?:adphoneschange|ld)|ashchange|olding)|n(?:o(?:tificationcl(?:ick|ose)|update|match)|ewrdsgroup)|SVG(?:(?:Unl|L)oad|Resize|Scroll|Zoom)|key(?:statuseschange|press|down|up)|R(?:adioStateChange|equest)|CheckboxStateChange|(?:AppComman|Loa)d|zoom)"
- // autogenerated from nsGkAtomList.h
- ;
-const IC_EVENT_DOS_PATTERN =
- "\\b(?:" + IC_EVENT_PATTERN + ")[^]*=[^]*\\b(?:" + IC_WINDOW_OPENER_PATTERN + ")\\b" +
- "|\\b(?:" + IC_WINDOW_OPENER_PATTERN + ")\\b[^]+\\b(?:" + IC_EVENT_PATTERN + ")[^]*=";
-
-var InjectionChecker = {
- reset: function () {
-
- this.isPost =
- this.base64 =
- this.nameAssignment = false;
-
- this.base64tested = [];
-
- },
-
- fuzzify: fuzzify,
- syntax: new SyntaxChecker(),
- _log: function(msg, t, i) {
- if (msg) msg = this._printable(msg);
- if(!(i || t)) {
- msg += " - LINES: ";
- var lines = [];
- for (var stack = Components.stack; (stack = stack.caller);) {
- lines.push(stack.lineNumber);
- }
- msg += lines.join(", ");
- }
- else {
- if (t) msg += " - TIME: " + (Date.now() - t);
- if (i) msg += " - ITER: " + i;
- }
- this.dump("[NoScript InjectionChecker] " + msg + "\n");
- },
-
- _printable: function (msg) {
- return msg.toString().replace(/[^\u0020-\u007e]/g, function(s) { return "{" + s.charCodeAt(0).toString(16) + "}"; });
- },
-
- dump: dump,
- log: function() {},
- get logEnabled() { return this.log == this._log; },
- set logEnabled(v) { this.log = v ? this._log : function() {}; },
-
- escalate: function(msg) {
- this.log(msg);
- ns.log("[NoScript InjectionChecker] " + msg);
- },
-
- bb: function(brac, s, kets) {
- for(var j = 3; j-- > 0;) {
- s = brac + s + kets;
- if (this.checkJSSyntax(s)) return true;
- }
- return false;
- },
-
- checkJSSyntax(s) {
- // bracket balancing for micro injections like "''), e v a l (name,''"
- if (/^(?:''|"")?[^\('"]*\)/.test(s)) return this.bb("x(\n", s, "\n)");
- if (/^(?:''|"")?[^\['"]*\\]/.test(s)) return this.bb("y[\n", s, "\n]");
- if (/^(?:''|"")?[^\{'"]*\}/.test(s)) return this.bb("function z() {\n", s, "\n}");
-
- let syntax = this.syntax;
- s += " /* COMMENT_TERMINATOR */\nDUMMY_EXPR";
- if (syntax.check(s)) {
- this.log("Valid fragment " + s);
- return true;
- }
- return false;
- },
-
- checkTemplates(script) {
- let templateExpressions = script.replace(/[[\]{}]/g, ";");
- return templateExpressions !== script &&
- (this.maybeMavo(script) ||
- (this.maybeJS(templateExpressions, true) &&
- (this.syntax.check(templateExpressions) ||
- /[^><=]=[^=]/.test(templateExpressions) && this.syntax.check(
- templateExpressions.replace(/([^><=])=(?=[^=])/g, '$1=='))
- )));
- },
-
- maybeMavo(s) {
- return /\[[^]*\([^]*\)[^]*\]/.test(s) && /\b(?:and|or|mod|\$url\b)/.test(s) &&
- this.maybeJS(s.replace(/\b(?:and|or|mod|[[\]])/g, ',').replace(/\$url\b/g, 'location'), true);
- },
- get breakStops() {
- var def = "\\/\\?&#;\\s\\x00}<>"; // we stop on URL, JS and HTML delimiters
- var bs = {
- nq: new RegExp("[" + def + "]")
- };
- Array.forEach("'\"`", // special treatment for quotes
- function(c) { bs[c] = new RegExp("[" + def + c + "]"); }
- );
- delete this.breakStops;
- return (this.breakStops = bs);
- },
-
- collapseChars: (s) => s.replace(/\;+/g, ';').replace(/\/{4,}/g, '////')
- .replace(/\s+/g, (s) => /\n/g.test(s) ? '\n' : ' '),
-
- _reduceBackslashes: (bs) => bs.length % 2 ? "\\" : "",
-
- reduceQuotes: function(s) {
- if (s[0] == '/') {
- // reduce common leading path fragment resembling a regular expression or a comment
- s = s.replace(/^\/[^\/\n\r]+\//, '_RX_').replace(/^\/\/[^\r\n]*/, '//_COMMENT_');
- }
-
- if (/\/\*/.test(s) || // C-style comments, would make everything really tricky
- /\w\s*(\/\/[\s\S]*)?\[[\s\S]*\w[\s\S]*\]/.test(s)) { // property accessors, risky
- return s;
- }
-
- if (/['"\/]/.test(s)) {
-
- // drop noisy backslashes
- s = s.replace(/\\{2,}/g, this._reduceBackslashes);
-
- // drop escaped quotes
- s = s.replace(/\\["'\/]/g, " EQ ");
- var expr;
- for(;;) {
- expr = s.replace(/(^[^'"\/]*[;,\+\-=\(\[]\s*)\/[^\/]+\//g, "$1 _RX_ ")
- .replace(/(^[^'"\/]*)(["']).*?\2/g, "$1 _QS_ ");
- if(expr == s) break;
- s = expr;
- }
- }
-
- // remove c++ style comments
- return s.replace(/^([^'"`\\]*?)\/\/[^\r\n]*/g, "$1//_COMMENT_");
- },
-
- reduceURLs: function(s) {
- // nested URLs with protocol are parsed as C++ style comments, and since
- // they're potentially very expensive, we preemptively remove them if possible
- while (/^[^'"]*?:\/\//.test(s)) {
- s = s.replace(/:\/\/[^*\s]*/, ':');
- }
- s = s.replace(/:\/\/[^'"*\n]*/g, ':');
-
- return (/\bhttps?:$/.test(s) && !/\bh\W*t\W*t\W*p\W*s?.*=/.test(s))
- ? s.replace(/\b(?:[\w.]+=)?https?:$/, '')
- : s;
- },
-
- reduceJSON: function(s) {
- const toStringRx = /^function\s*toString\(\)\s*{\s*\[native code\]\s*\}$/;
- // optimistic case first, one big JSON block
- for (;;) {
-
- let m = s.match(/{[^]+}|\[[^]*{[^]+}[^]*\]/);
- if (!m) return s;
-
- let whole = s;
- let expr = m[0];
- try {
- if (toStringRx.test(JSON.parse(expr).toString)) {
- this.log("Reducing big JSON " + expr);
- return this.reduceJSON(s.replace(expr, '{}'));
- }
- } catch(e) {}
-
-
- // heavier duty, scattered JSON blocks
- while((m = s.match(/{[^{}:]+:[^{}]+}/g))) {
- let prev = s;
-
- for (expr of m) {
- try {
- if (!toStringRx.test(JSON.parse(expr).toString))
- continue;
-
- this.log("Reducing JSON " + expr);
- s = s.replace(expr, '{}');
- continue;
- } catch(e) {}
-
- if (/\btoString\b[\s\S]*:/.test(expr)) continue;
-
- let qred = this.reduceQuotes(expr);
- if (/\{(?:\s*(?:(?:\w+:)+\w+)+;\s*)+\}/.test(qred)) {
- this.log("Reducing pseudo-JSON " + expr);
- s = s.replace(expr, '{}');
- } else if (!/[(=.]|[^:\s]\s*\[|:\s*(?:location|document|set(?:Timeout|Interval)|eval|open|show\w*Dialog|alert|confirm|prompt)\b|(?:\]|set)\s*:/.test(qred) &&
- this.checkJSSyntax("JSON = " + qred) // no-assignment JSON fails with "invalid label"
- ) {
- this.log("Reducing slow JSON " + expr);
- s = s.replace(expr, '{}');
- }
- }
-
- if (s === prev) break;
- }
-
- if (s === whole) break;
- }
-
- return s;
- },
-
- reduceXML: function reduceXML(s) {
- var res;
-
- for (let pos = s.indexOf("<"); pos !== -1; pos = s.indexOf("<", 1)) {
-
- let head = s.substring(0, pos);
- let tail = s.substring(pos);
-
- let qnum = 0;
- for (pos = -1; (pos = head.indexOf('"', ++pos)) > -1; ) {
- if (pos === 0 || head[pos - 1] != '\\') qnum++;
- }
- if (qnum % 2) break; // odd quotes
-
- let t = tail.replace(/^<(\??\s*\/?[a-zA-Z][\w:-]*)(?:[\s+]+[\w:-]+="[^"]*")*[\s+]*(\/?\??)>/, '<$1$2>');
-
- (res || (res = [])).push(head);
- s = t;
- }
- if (res) {
- res.push(s);
- s = res.join('');
- }
-
- return s;
- }
-,
-
- _singleAssignmentRx: new RegExp(
- "(?:\\b" + fuzzify('document') + "\\b[^]*\\.|\\s" + fuzzify('setter') + "\\b[^]*=)|/.*/[^]*(?:\\.(?:" +
- "\\b" + fuzzify("onerror") + "\\b[^]*=|" +
- + fuzzify('source|toString') + ")|\\[)|" + IC_EVENT_DOS_PATTERN
- ),
- _riskyAssignmentRx: new RegExp(
- "\\b(?:" + fuzzify('location|innerHTML|outerHTML') + ")\\b[^]*="
- ),
- _nameRx: new RegExp(
- "=[^]*\\b" + fuzzify('name') + "\\b|" +
- fuzzify("hostname") + "[^]*=[^]*(?:\\b\\d|[\"'{}~^|<*/+-])"
- ),
- _evalAliasingRx: new RegExp(
- "=[^]+\\[" + IC_EVAL_PATTERN + "\\W*\\]" // TODO: check if it can be coalesced into _maybeJSRx
- ),
-
- _maybeJSRx: new RegExp(
- '(?:(?:\\[[^]+\\]|\\.\\D)(?:[^]*\\([^]*\\)|[^*]`[^]+`|[^=]*=[^=][^]*\\S)' +
- // double function call
- '|\\([^]*\\([^]*\\)' +
- ')|(?:^|\\W)(?:' + IC_EVAL_PATTERN +
- ')(?:\\W+[^]*|)[(`]|(?:[=(]|\\{[^]+:)[^]*(?:' + // calling eval-like functions directly or...
- IC_EVAL_PATTERN + // ... assigning them to another function possibly called by the victim later
- ')[^]*[\\n,;:|]|\\b(?:' +
- fuzzify('setter|location|innerHTML|outerHTML') + // eval-like assignments
- ')\\b[^]*=|' +
- '.' + IC_COMMENT_PATTERN + "src" + IC_COMMENT_PATTERN + '=' +
- IC_EVENT_DOS_PATTERN +
- "|\\b" + fuzzify("onerror") + "\\b[^]*=" +
- "|=[s\\\\[ux]?\d{2}" + // escape (unicode/ascii/octal)
- "|\\b(?:toString|valueOf)\\b" + IC_COMMENT_PATTERN + "=[^]*(?:" + IC_EVAL_PATTERN + ")" +
- "|(?:\\)|(?:[^\\w$]|^)[$a-zA-Z_\\u0ff-\\uffff][$\\w\\u0ff-\\uffff]*)" + IC_COMMENT_PATTERN + '=>' + // concise function definition
- "|(?:[^\\w$]|^)" + IC_EVENT_PATTERN + IC_COMMENT_PATTERN + "="
- )
- ,
-
- _riskyParensRx: new RegExp(
- "(?:^|\\W)(?:(?:" + IC_EVAL_PATTERN + "|on\\w+)\\s*[(`]|" +
- fuzzify("with") + "\\b[^]*\\(|" +
- fuzzify("for") + "\\b[^]*\\([^]*[\\w$\\u0080-\\uffff]+[^]*\\b(?:" +
- fuzzify ("in|of") + ")\\b)"
- ),
-
- _dotRx: /\./g,
- _removeDotsRx: /^openid\.[\w.-]+(?==)|(?:[?&#\/]|^)[\w.-]+(?=[\/\?&#]|$)|[\w\.]*\.(?:\b[A-Z]+|\w*\d|[a-z][$_])[\w.-]*|=[a-z.-]+\.(?:com|net|org|biz|info|xxx|[a-z]{2})(?:[;&/]|$)/g,
- _removeDots: (p) => p.replace(InjectionChecker._dotRx, '|'),
- _arrayAccessRx: /\s*\[\d+\]/g,
- _riskyOperatorsRx: /[+-]{2}\s*(?:\/[*/][\s\S]+)?(?:\w+(?:\/[*/][\s\S]+)?[[.]|location)|(?:\]|\.\s*(?:\/[*/][\s\S]+)?\w+|location)\s*(?:\/[*/][\s\S]+)?([+-]{2}|[+*\/<>~-]+\s*(?:\/[*/][\s\S]+)?=)/, // inc/dec/self-modifying assignments on DOM props
- _assignmentRx: /^(?:[^()="'\s]+=(?:[^(='"\[+]+|[?a-zA-Z_0-9;,&=/]+|[\d.|]+))$/,
- _badRightHandRx: /=[\s\S]*(?:_QS_\b|[|.][\s\S]*source\b|<[\s\S]*\/[^>]*>)/,
- _wikiParensRx: /^(?:[\w.|-]+\/)*\(*[\w\s-]+\([\w\s-]+\)[\w\s-]*\)*$/,
- _neutralDotsRx: /(?:^|[\/;&#])[\w-]+\.[\w-]+[\?;\&#]/g,
- _openIdRx: /^scope=(?:\w+\+)\w/, // OpenID authentication scope parameter, see http://forums.informaction.com/viewtopic.php?p=69851#p69851
- _gmxRx: /\$\(clientName\)-\$\(dataCenter\)\.(\w+\.)+\w+/, // GMX webmail, see http://forums.informaction.com/viewtopic.php?p=69700#p69700
-
- maybeJS(expr, mavoChecked = false) {
- if (!mavoChecked && this.maybeMavo(expr)) return true;
-
- if (/`[\s\S]*`/.test(expr) || // ES6 templates, extremely insidious!!!
- this._evalAliasingRx.test(expr) ||
- this._riskyOperatorsRx.test(expr) // this must be checked before removing dots...
- ) return true;
-
- expr = // dotted URL components can lead to false positives, let's remove them
- expr.replace(this._removeDotsRx, this._removeDots)
- .replace(this._arrayAccessRx, '_ARRAY_ACCESS_')
- .replace(/<([\w:]+)>[^</(="'`]+<\/\1>/g, '<$1/>') // reduce XML text nodes
- .replace(/<!--/g, '') // remove HTML comments preamble (see next line)
- .replace(/(^(?:[^/]*[=;.+-])?)\s*[\[(]+/g, '$1') // remove leading parens and braces
- .replace(this._openIdRx, '_OPENID_SCOPE_=XYZ')
- .replace(/^[^=]*OPENid\.(\w+)=/gi, "OPENid_\1")
- .replace(this._gmxRx, '_GMX_-_GMX_')
- ;
-
- if (expr.indexOf(")") !== -1) expr += ")"; // account for externally balanced parens
- if(this._assignmentRx.test(expr) && !this._badRightHandRx.test(expr)) // commonest case, single assignment or simple chained assignments, no break
- return this._singleAssignmentRx.test(expr) || this._riskyAssignmentRx.test(expr) && this._nameRx.test(expr);
-
- return this._riskyParensRx.test(expr) ||
- this._maybeJSRx.test(expr.replace(this._neutralDotsRx, '')) &&
- !this._wikiParensRx.test(expr);
-
- },
-
- checkNonTrivialJSSyntax: function(expr) {
- return this.maybeJS(this.reduceQuotes(expr)) && this.checkJSSyntax(expr);
- },
-
-
- wantsExpression: (s) => /(?:^[+-]|[!%&(,*/:;<=>?\[^|]|[^-]-|[^+]\+)\s*$/.test(s),
-
- stripLiteralsAndComments: function(s) {
- "use strict";
-
- const MODE_NORMAL = 0;
- const MODE_REGEX = 1;
- const MODE_SINGLEQUOTE = 2;
- const MODE_DOUBLEQUOTE = 3;
- const MODE_BLOCKCOMMENT = 4;
- const MODE_LINECOMMENT = 6;
- const MODE_INTERPOLATION = 7;
-
- let mode = MODE_NORMAL;
- let escape = false;
- let res = [];
- function handleQuotes(c, q, type) {
- if (escape) {
- escape = false;
- } else if (c == '\\') {
- escape = true;
- } else if (c === q) {
- res.push(type);
- mode = MODE_NORMAL;
- }
- }
- for (let j = 0, l = s.length; j < l; j++) {
-
- switch(mode) {
- case MODE_REGEX:
- handleQuotes(s[j], '/', "_REGEXP_");
- break;
- case MODE_SINGLEQUOTE:
- handleQuotes(s[j], "'", "_QS_");
- break;
- case MODE_DOUBLEQUOTE:
- handleQuotes(s[j], '"', "_DQS_");
- break;
- case MODE_INTERPOLATION:
- handleQuotes(s[j], '`', "``");
- break;
- case MODE_BLOCKCOMMENT:
- if (s[j] === '/' && s[j-1] === '*') {
- res.push("/**/");
- mode = MODE_NORMAL;
- }
- break;
- case MODE_LINECOMMENT:
- if (s[j] === '\n') {
- res.push("//\n");
- mode = MODE_NORMAL;
- }
- break;
- default:
- switch(s[j]) {
- case '"':
- mode = MODE_DOUBLEQUOTE;
- break;
- case "'":
- mode = MODE_SINGLEQUOTE;
- break;
- case "`":
- mode = MODE_INTERPOLATION;
- break;
- case '/':
- switch(s[j+1]) {
- case '*':
- mode = MODE_BLOCKCOMMENT;
- j+=2;
- break;
- case '/':
- mode = MODE_LINECOMMENT;
- break;
- default:
- let r = res.join('');
- res = [r];
- if (this.wantsExpression(r)) mode = MODE_REGEX;
- else res.push('/'); // after a self-contained expression: division operator
- }
- break;
- default:
- res.push(s[j]);
- }
-
- }
- }
- return res.join('');
- },
-
- checkLastFunction: function() {
- var fn = this.syntax.lastFunction;
- if (!fn) return false;
- var m = fn.toSource().match(/\{([\s\S]*)\}/);
- if (!m) return false;
- var expr = this.stripLiteralsAndComments(m[1]);
- return /=[\s\S]*cookie|\b(?:setter|document|location|(?:inn|out)erHTML|\.\W*src)[\s\S]*=|[\w$\u0080-\uffff\)\]]\s*[\[\(]/.test(expr) ||
- this.maybeJS(expr);
- },
-
- _createInvalidRanges: function() {
- function x(n) { return '\\u' + ("0000" + n.toString(16)).slice(-4); }
-
- var ret = "";
- var first = -1;
- var last = -1;
- var cur = 0x7e;
- while(cur++ <= 0xffff) {
- try {
- eval("var _" + String.fromCharCode(cur) + "_=1");
- } catch(e) {
- if (!/illegal char/.test(e.message)) continue;
- if (first == -1) {
- first = last = cur;
- ret += x(cur);
- continue;
- }
- if (cur - last == 1) {
- last = cur;
- continue;
- }
-
- if(last != first) ret += "-" + x(last);
- ret+= x(cur);
- last = first = cur;
- }
- }
- return ret;
- },
-
- get invalidCharsRx() {
- delete this.invalidCharsRx;
- return this.invalidCharsRx = new RegExp("^[^\"'`/<>]*[" + this._createInvalidRanges() + "]");
- },
-
- checkJSBreak: function InjectionChecker_checkJSBreak(s) {
- // Direct script injection breaking JS string literals or comments
-
-
- // cleanup most urlencoded noise and reduce JSON/XML
- s = ';' + this.reduceXML(this.reduceJSON(this.collapseChars(
- s.replace(/\%\d+[a-z\(]\w*/gi, '§')
- .replace(/[\r\n\u2028\u2029]+/g, "\n")
- .replace(/[\x01-\x09\x0b-\x20]+/g, ' ')
- )));
-
- if (s.indexOf("*/") > 0 && /\*\/[\s\S]+\/\*/.test(s)) { // possible scrambled multi-point with comment balancing
- s += ';' + s.match(/\*\/[\s\S]+/);
- }
-
- if (!this.maybeJS(s)) return false;
-
- const MAX_TIME = 8000, MAX_LOOPS = 1200;
-
- const logEnabled = this.logEnabled;
-
- const
- invalidCharsRx = /[\u007f-\uffff]/.test(s) && this.invalidCharsRx,
- dangerRx = /\(|(?:^|[+-]{2}|[+*/<>~-]+\\s*=)|`[\s\S]*`|\[[^\]]+\]|(?:setter|location|(?:inn|out)erHTML|cookie|on\w{3,}|\.\D)[^&]*=[\s\S]*?(?:\/\/|[\w$\u0080-\uFFFF.[\]})'"-]+)/,
- exprMatchRx = /^[\s\S]*?(?:[=\)]|`[\s\S]*`|[+-]{2}|[+*/<>~-]+\\s*=)/,
- safeCgiRx = /^(?:(?:[\.\?\w\-\/&:§\[\]]+=[\w \-:\+%#,§\.]*(?:[&\|](?=[^&\|])|$)){2,}|\w+:\/\/\w[\w\-\.]*)/,
- // r2l, chained query string parameters, protocol://domain
- headRx = /^(?:[^'"\/\[\(]*[\]\)]|[^"'\/]*(?:§|[^&]&[\w\.]+=[^=]))/
- // irrepairable syntax error, such as closed parens in the beginning
- ;
-
- const injectionFinderRx = /(['"`#;>:{}]|[/?=](?![?&=])|&(?![\w-.[\]&!-]*=)|\*\/)(?!\1)/g;
- injectionFinderRx.lastIndex = 0;
-
- const t = Date.now();
- var iterations = 0;
-
- for (let dangerPos = 0, m; (m = injectionFinderRx.exec(s));) {
-
- let startPos = injectionFinderRx.lastIndex;
- let subj = s.substring(startPos);
- if (startPos > dangerPos) {
- dangerRx.lastIndex = startPos;
- if (!dangerRx.exec(s)) {
- this.log("Can't find any danger in " + s);
- return false;
- }
- dangerPos = dangerRx.lastIndex;
- }
-
- let breakSeq = m[1];
- let quote = breakSeq in this.breakStops ? breakSeq : '';
-
- if (!this.maybeJS(quote ? quote + subj : subj)) {
- this.log("Fast escape on " + subj, t, iterations);
- return false;
- }
-
- let script = this.reduceURLs(subj);
-
- if (script.length < subj.length) {
- if (!this.maybeJS(script)) {
- this.log("Skipping to first nested URL in " + subj, t, iterations);
- injectionFinderRx.lastIndex += subj.indexOf("://") + 1;
- continue;
- }
- subj = script;
- script = this.reduceURLs(subj.substring(0, dangerPos - startPos));
- } else {
- script = subj.substring(0, dangerPos - startPos);
- }
-
- let expr = subj.match(exprMatchRx);
-
- if (expr) {
- expr = expr[0];
- if (expr.length < script.length) {
- expr = script;
- }
- } else {
- expr = script;
- }
-
- // quickly skip (mis)leading innocuous CGI patterns
- if ((m = subj.match(safeCgiRx))) {
-
- this.log("Skipping CGI pattern in " + subj);
-
- injectionFinderRx.lastIndex += m[0].length - 1;
- continue;
- }
-
- let bs = this.breakStops[quote || 'nq']
-
- for (let len = expr.length, moved = false, hunt = !!expr, lastExpr = ''; hunt;) {
-
- if (Date.now() - t > MAX_TIME) {
- this.log("Too long execution time! Assuming DOS... " + (Date.now() - t), t, iterations);
- return true;
- }
-
- hunt = expr.length < subj.length;
-
- if (moved) {
- moved = false;
- } else if (hunt) {
- let pos = subj.substring(len).search(bs);
- if (pos < 0) {
- expr = subj;
- hunt = false;
- } else {
- len += pos;
- if (quote && subj[len] === quote) {
- len++;
- } else if (subj[len - 1] === '<') {
- // invalid JS, and maybe in the middle of XML block
- len++;
- continue;
- }
- expr = subj.substring(0, len);
- if (pos === 0) len++;
- }
- }
-
- if(lastExpr === expr) {
- lastExpr = '';
- continue;
- }
-
- lastExpr = expr;
-
- if(invalidCharsRx && invalidCharsRx.test(expr)) {
- this.log("Quick skipping invalid chars");
- break;
- }
-
-
-
- if (quote) {
- if (this.checkNonTrivialJSSyntax(expr)) {
- this.log("Non-trivial JS inside quoted string detected", t, iterations);
- return true;
- }
- script = this.syntax.unquote(quote + expr, quote);
- if(script && this.maybeJS(script) &&
- (this.checkNonTrivialJSSyntax(script) ||
- /'./.test(script) && this.checkNonTrivialJSSyntax("''" + script + "'") ||
- /"./.test(script) && this.checkNonTrivialJSSyntax('""' + script + '"')
- ) && this.checkLastFunction()
- ) {
- this.log("JS quote Break Injection detected", t, iterations);
- return true;
- }
- script = quote + quote + expr + quote;
- } else {
- script = expr;
- }
-
- if (headRx.test(script.split("//")[0])) {
- let balanced = script.replace(/^[^"'{}(]*\)/, 'P ');
- if (balanced !== script && balanced.indexOf('(') > -1) {
- script = balanced + ")";
- } else {
- this.log("SKIP (head syntax) " + script, t, iterations);
- break; // unrepairable syntax error in the head, move left cursor forward
- }
- }
-
- if (this.maybeJS(this.reduceQuotes(script))) {
-
- if (this.checkJSSyntax(script) && this.checkLastFunction()) {
- this.log("JS Break Injection detected", t, iterations);
- return true;
- }
-
- if (this.checkTemplates(script)) {
- this.log("JS template expression injection detected", t, iterations);
- return true;
- }
-
- if (++iterations > MAX_LOOPS) {
- this.log("Too many syntax checks! Assuming DOS... " + s, t, iterations);
- return true;
- }
- if(this.syntax.lastError) { // could be null if we're here thanks to checkLastFunction()
- let errmsg = this.syntax.lastError.message;
- if (logEnabled) this.log(errmsg + " --- " + this.syntax.sandbox.script + " --- ", t, iterations);
- if(!quote) {
- if (errmsg.indexOf("left-hand") !== -1) {
- let m = subj.match(/^([^\]\(\\'"=\?]+?)[\w$\u0080-\uffff\s]+[=\?]/);
- if (m) {
- injectionFinderRx.lastIndex += m[1].length - 1;
- }
- break;
- } else if (errmsg.indexOf("unterminated string literal") !== -1) {
- let quotePos = subj.substring(len).search(/["']/);
- if(quotePos > -1) {
- expr = subj.substring(0, len += ++quotePos);
- moved = true;
- } else break;
- } else if (errmsg.indexOf("syntax error") !== -1) {
- let dblSlashPos = subj.indexOf("//");
- if (dblSlashPos > -1) {
- let pos = subj.search(/['"\n\\\(]|\/\*/);
- if (pos < 0 || pos > dblSlashPos)
- break;
- }
- if (/^([\w\[\]]*=)?\w*&[\w\[\]]*=/.test(subj)) { // CGI param concatenation
- break;
- }
- }
- } else if (errmsg.indexOf("left-hand") !== -1) break;
-
- if (/invalid .*\bflag\b|missing ; before statement|invalid label|illegal character|identifier starts immediately/.test(errmsg)) {
- if (errmsg.indexOf("illegal character") === -1 && /#\d*\s*$/.test(script)) { // sharp vars exceptional behavior
- if (!quote) break;
- // let's retry without quotes
- quote = lastExpr = '';
- hunt = moved = true;
- } else break;
- }
- else if((m = errmsg.match(/\b(?:property id\b|missing ([:\]\)\}]) )/))) {
- let char = m[1] || '}';
- let newLen = subj.indexOf(char, len);
- let nextParamPos = subj.substring(len).search(/[^&]&(?!&)/)
- if (newLen !== -1 && (nextParamPos === -1 || newLen <= len + nextParamPos)) {
- this.log("Extending to next " + char);
- expr = subj.substring(0, len = ++newLen);
- moved = char !== ':';
- } else if (char !== ':') {
- let lastChar = expr[expr.length - 1];
- if (lastChar === char && (len > subj.length || lastChar != subj[len - 1])) break;
- expr += char;
- moved = hunt = true;
- len++;
- this.log("Balancing " + char, t, iterations);
- } else {
- break;
- }
- }
- else if (/finally without try/.test(errmsg)) {
- expr = "try{" + expr;
- hunt = moved = true;
- }
- }
- }
- }
- }
- this.log(s, t, iterations);
- return false;
- },
-
-
- checkJS: function(s, unescapedUni) {
- this.log(s);
-
- if (/\?name\b[\s\S]*:|[^&?]\bname\b/.test(s)) {
- this.nameAssignment = true;
- }
-
- var hasUnicodeEscapes = !unescapedUni && /\\u(?:[0-9a-f]{4}|\{[0-9a-f]+\})/i.test(s);
- if (hasUnicodeEscapes && /\\u(?:\{0*|00)[0-7][0-9a-f]/i.test(s)) {
- this.escalate("Unicode-escaped lower ASCII");
- return true;
- }
-
- if (/\\x[0-9a-f]{2}[\s\S]*['"]/i.test(s)) {
- this.escalate("Obfuscated string literal");
- return true;
- }
-
- if (/`[\s\S]*\$\{[\s\S]+[=(][\s\S]+\}[\s\S]*`/.test(s)) {
- this.escalate("ES6 string interpolation");
- return true;
- }
-
- this.syntax.lastFunction = null;
- let ret = this.checkAttributes(s) ||
- (/[\\\(]|=[^=]/.test(s) || this._riskyOperatorsRx.test(s)) && this.checkJSBreak(s) || // MAIN
- hasUnicodeEscapes && this.checkJS(this.unescapeJS(s), true); // optional unescaped recursion
- if (ret) {
- let msg = "JavaScript Injection in " + s;
- if (this.syntax.lastFunction) {
- msg += "\n" + this.syntax.lastFunction.toSource();
- }
- this.escalate(msg);
- }
- return ret;
- },
-
- unescapeJS: function(s) {
- return s.replace(/\\u([0-9a-f]{4})/gi, function(s, c) {
- return String.fromCharCode(parseInt(c, 16));
- });
- },
- unescapeJSLiteral: function(s) {
- return s.replace(/\\x([0-9a-f]{2})/gi, function(s, c) {
- return String.fromCharCode(parseInt(c, 16));
- });
- },
-
- unescapeCSS: function(s) {
- // see http://www.w3.org/TR/CSS21/syndata.html#characters
- return s.replace(/\\([\da-f]{0,6})\s?/gi, function($0, $1) {
- try {
- return String.fromCharCode(parseInt($1, 16));
- } catch(e) {
- return "";
- }
- });
- },
-
- reduceDashPlus: function(s) {
- // http://forums.mozillazine.org/viewtopic.php?p=5592865#p5592865
- return s.replace(/\-+/g, "-")
- .replace(/\++/g, "+")
- .replace(/\s+/g, ' ')
- .replace(/(?: \-)+/g, ' -')
- .replace(/(?:\+\-)+/g, '+-');
- },
-
- _rxCheck: function(checker, s) {
- var rx = this[checker + "Checker"];
- var ret = rx.exec(s);
- if (ret) {
- this.escalate(checker + " injection:\n" + ret + "\nmatches " + rx.source);
- return true;
- }
- return false;
- },
-
- AttributesChecker: new RegExp(
- "(?:\\W|^)(?:javascript:(?:[^]+[=\\\\\\(`\\[\\.<]|[^]*(?:\\bname\\b|\\\\[ux]\\d))|" +
- "data:(?:(?:[a-z]\\w+/\\w[\\w+-]+\\w)?[;,]|[^]*;[^]*\\b(?:base64|charset=)|[^]*,[^]*<[^]*\\w[^]*>))|@" +
- ("import\\W*(?:\\/\\*[^]*)?(?:[\"']|url[^]*\\()" +
- "|-moz-binding[^]*:[^]*url[^]*\\(|\\{\\{[^]+\\}\\}")
- .replace(/[a-rt-z\-]/g, "\\W*$&"),
- "i"),
- checkAttributes: function(s) {
- s = this.reduceDashPlus(s);
- if (this._rxCheck("Attributes", s)) return true;
- if (/\\/.test(s) && this._rxCheck("Attributes", this.unescapeCSS(s))) return true;
- let dataPos = s.search(/data:\S*\s/i);
- if (dataPos !== -1) {
- let data = this.urlUnescape(s.substring(dataPos).replace(/\s/g, ''));
- if (this.checkHTML(data) || this.checkAttributes(data)) return true;
- }
- return false;
- },
-
- GlobalsChecker: /https?:\/\/[\S\s]+["'\s\0](?:id|class|data-\w+)[\s\0]*=[\s\0]*("')?\w{3,}(?:[\s\0]|\1|$)|(?:id|class|data-\w+)[\s\0]*=[\s\0]*("')?\w{3,}(?:[\s\0]|\1)[\s\S]*["'\s\0]href[\s\0]*=[\s\0]*(?:"')?https?:\/\//i
- ,
- HTMLChecker: new RegExp("<[^\\w<>]*(?:[^<>\"'\\s]*:)?[^\\w<>]*(?:" + // take in account quirks and namespaces
- fuzzify("script|form|style|svg|marquee|(?:link|object|embed|applet|param|i?frame|base|body|meta|ima?ge?|video|audio|bindings|set|isindex|animate|template") +
- ")[^>\\w])|['\"\\s\\0/](?:formaction|style|background|src|lowsrc|ping|innerhtml|data-bind|(?:data-)?mv-(?:\\w+[\\w-]*)|" + IC_EVENT_PATTERN +
- ")[\\s\\0]*=|<%[^]+[=(][^]+%>", "i"),
-
- checkHTML(s) {
- let links = s.match(/\b(?:href|src|base|(?:form)?action|\w+-\w+)\s*=\s*(?:(["'])[\s\S]*?\1|(?:[^'">][^>\s]*)?[:?\/#][^>\s]*)/ig);
- if (links) {
- for (let l of links) {
- l = l.replace(/[^=]*=\s*/i, '').replace(/[\u0000-\u001f]/g, '');
- l = /^["']/.test(l) ? l.replace(/^(['"])([^]*?)\1[^]*/g, '$2') : l.replace(/[\s>][^]*/, '');
-
- if (/^(?:javascript|data):|\[[^]+\]/i.test(l) || /[<'"(]/.test(unescape(l)) && this.checkURL(l)) return true;
- }
- }
- return this._rxCheck("HTML", s) || this._rxCheck("Globals", s);
- },
-
- checkNoscript: function(s) {
- this.log(s);
- return s.indexOf("\x1b(J") !== -1 && this.checkNoscript(s.replace(/\x1b\(J/g, '')) || // ignored in iso-2022-jp
- s.indexOf("\x7e\x0a") !== -1 && this.checkNoscript(s.replace(/\x7e\x0a/g, '')) || // ignored in hz-gb-2312
- this.checkHTML(s) || this.checkSQLI(s) || this.checkHeaders(s);
- },
-
- HeadersChecker: /[\r\n]\s*(?:content-(?:type|encoding))\s*:/i,
- checkHeaders: function(s) { return this._rxCheck("Headers", s); },
- SQLIChecker: /(?:(?:(?:\b|[^a-z])union[^a-z]|\()[\w\W]*(?:\b|[^a-z])select[^a-z]|(?:updatexml|extractvalue)(?:\b|[^a-z])[\w\W]*\()[\w\W]+(?:(?:0x|x')[0-9a-f]{16}|(?:0b|b')[01]{64}|\(|\|\||\+)/i
- ,
- checkSQLI: function(s) { return this._rxCheck("SQLI", s); },
-
- base64: false,
- base64tested: [],
- get base64Decoder() { return Base64; }, // exposed here just for debugging purposes
-
-
- checkBase64: function(url) {
- this.base64 = false;
-
- const MAX_TIME = 8000;
- const DOS_MSG = "Too long execution time, assuming DOS in Base64 checks";
-
- this.log(url);
-
-
- var parts = url.split("#"); // check hash
- if (parts.length > 1 && this.checkBase64FragEx(unescape(parts[1])))
- return true;
-
- parts = parts[0].split(/[&;]/); // check query string
- if (parts.length > 0 && parts.some(function(p) {
- var pos = p.indexOf("=");
- if (pos > -1) p = p.substring(pos + 1);
- return this.checkBase64FragEx(unescape(p));
- }, this))
- return true;
-
- url = parts[0];
- parts = Base64.purify(url).split("/");
- if (parts.length > 255) {
- this.log("More than 255 base64 slash chunks, assuming DOS");
- return true;
- }
-
-
- var t = Date.now();
- if (parts.some(function(p) {
- if (Date.now() - t > MAX_TIME) {
- this.log(DOS_MSG);
- return true;
- }
- return this.checkBase64Frag(Base64.purify(Base64.alt(p)));
- }, this))
- return true;
-
-
- var uparts = Base64.purify(unescape(url)).split("/");
-
- t = Date.now();
- while(parts.length) {
- if (Date.now() - t > MAX_TIME) {
- this.log(DOS_MSG);
- return true;
- }
- if (this.checkBase64Frag(parts.join("/")) ||
- this.checkBase64Frag(uparts.join("/")))
- return true;
-
- parts.shift();
- uparts.shift();
- }
-
- return false;
- },
-
-
- checkBase64Frag: function(f) {
- if (this.base64tested.indexOf(f) < 0) {
- this.base64tested.push(f);
- try {
- var s = Base64.decode(f);
- if(s && s.replace(/[^\w\(\)]/g, '').length > 7 &&
- (this.checkHTML(s) ||
- this.checkAttributes(s))
- // this.checkJS(s) // -- alternate, whose usefulness is doubious but which easily leads to DOS
- ) {
- this.log("Detected BASE64 encoded injection: " + f + " --- (" + s + ")");
- return this.base64 = true;
- }
- } catch(e) {}
- }
- return false;
- },
-
- checkBase64FragEx: function(f) {
- return this.checkBase64Frag(Base64.purify(f)) || this.checkBase64Frag(Base64.purify(Base64.alt(f)));
- },
-
-
- checkURL: function(url) {
- return this.checkRecursive(url
- // assume protocol and host are safe, but keep the leading double slash to keep comments in account
- .replace(/^[a-z]+:\/\/.*?(?=\/|$)/, "//")
- // Remove outer parenses from ASP.NET cookieless session's AppPathModifier
- .replace(/\/\((S\(\w{24}\))\)\//, '/$1/')
- );
- },
-
- checkRecursive: function(s, depth, isPost) {
- if (typeof(depth) != "number")
- depth = 3;
-
- this.reset();
- this.isPost = isPost || false;
-
- if (ASPIdiocy.affects(s)) {
- if (this.checkRecursive(ASPIdiocy.process(s), depth, isPost))
- return true;
- } else if (ASPIdiocy.hasBadPercents(s) && this.checkRecursive(ASPIdiocy.removeBadPercents(s), depth, isPost))
- return true;
-
- if (FlashIdiocy.affects(s)) {
- let purged = FlashIdiocy.purgeBadEncodings(s);
- if (purged !== s && this.checkRecursive(purged, depth, isPost))
- return true;
- let decoded = FlashIdiocy.platformDecode(purged);
- if (decoded !== purged && this.checkRecursive(decoded, depth, isPost))
- return true;
- }
-
- if (s.indexOf("coalesced:") !== 0) {
- let coalesced = ASPIdiocy.coalesceQuery(s);
- if (coalesced !== s && this.checkRecursive("coalesced:" + coalesced, depth, isPost))
- return true;
- }
-
- if (isPost) {
- s = this.formUnescape(s);
- if (this.checkBase64Frag(Base64.purify(s))) return true;
-
- if (s.indexOf("<") > -1) {
- // remove XML-embedded Base64 binary data
- s = s.replace(/<((?:\w+:)?\w+)>[0-9a-zA-Z+\/]+=*<\/\1>/g, '');
- }
-
- s = "#" + s;
- } else {
- if (this.checkBase64(s.replace(/^\/{1,3}/, ''))) return true;
- }
-
- if (isPost) s = "#" + s; // allows the string to be JS-checked as a whole
- return this._checkRecursive(s, depth);
- },
-
- _checkRecursive: function(s, depth) {
-
- if (this.checkHTML(s) || this.checkJS(s) || this.checkSQLI(s) || this.checkHeaders(s))
- return true;
-
- if (s.indexOf("&") !== -1) {
- let unent = Entities.convertAll(s);
- if (unent !== s && this._checkRecursive(unent, depth)) return true;
- }
-
- if (--depth <= 0)
- return false;
-
- if (s.indexOf('+') !== -1 && this._checkRecursive(this.formUnescape(s), depth))
- return true;
-
- var unescaped = this.urlUnescape(s);
- let badUTF8 = this.utf8EscapeError;
-
- if (this._checkOverDecoding(s, unescaped))
- return true;
-
- if (/[\u0000-\u001f]|&#/.test(unescaped)) {
- let unent = Entities.convertAll(unescaped).replace(/[\u0000-\u001f]+/g, '');
- if (unescaped != unent && this._checkRecursive(unent, depth)) {
- this.log("Trash-stripped nested URL match!");
- return true;
- }
- }
-
- if (/\\x[0-9a-f]/i.test(unescaped)) {
- let literal = this.unescapeJSLiteral(unescaped);
- if (unescaped !== literal && this._checkRecursive(literal, depth)) {
- this.log("Escaped literal match!");
- return true;
- }
- }
-
- if (unescaped.indexOf("\x1b(J") !== -1 && this._checkRecursive(unescaped.replace(/\x1b\(J/g, ''), depth) || // ignored in iso-2022-jp
- unescaped.indexOf("\x7e\x0a") !== -1 && this._checkRecursive(unescaped.replace(/\x7e\x0a/g, '')) // ignored in hz-gb-2312
- )
- return true;
-
- if (badUTF8) {
- try {
- let legacyEscaped = unescape(unescaped);
- if (legacyEscaped !== unescaped && this._checkRecursive(unescape(unescaped))) return true;
- } catch (e) {}
- }
-
- if (unescaped !== s && this._checkRecursive(unescaped, depth)) {
- return true;
- }
-
- s = this.ebayUnescape(unescaped);
- if (s != unescaped && this._checkRecursive(s, depth))
- return true;
-
- return false;
- },
-
- _checkOverDecoding: function(s, unescaped) {
- if (/%[8-9a-f]/i.test(s)) {
- const rx = /[<'"]/g;
- var m1 = unescape(this.utf8OverDecode(s, false)).match(rx);
- if (m1) {
- unescaped = unescaped || this.urlUnescape(s);
- var m0 = unescaped.match(rx);
- if (!m0 || m0.length < m1.length) {
- this.log("Potential utf8_decode() exploit!");
- return true;
- }
- }
- }
- return false;
- },
-
- utf8OverDecode: function(url, strict) {
- return url.replace(strict
- ? /%(?:f0%80%80|e0%80|c0)%[8-b][0-f]/gi
- : /%(?:f[a-f0-9](?:%[0-9a-f]0){2}|e0%[4-9a-f]0|c[01])%[a-f0-9]{2}/gi,
- function(m) {
- var hex = m.replace(/%/g, '');
- if (strict) {
- for (var j = 2; j < hex.length; j += 2) {
- if ((parseInt(hex.substring(j, j + 2), 16) & 0xc0) != 0x80) return m;
- }
- }
- switch (hex.length) {
- case 8:
- hex = hex.substring(2);
- case 6:
- c = (parseInt(hex.substring(0, 2), 16) & 0x3f) << 12 |
- (parseInt(hex.substring(2, 4), 16) & 0x3f) << 6 |
- parseInt(hex.substring(4, 6), 16) & 0x3f;
- break;
- default:
- c = (parseInt(hex.substring(0, 2), 16) & 0x3f) << 6 |
- parseInt(hex.substring(2, 4), 16) & 0x3f;
- }
- return encodeURIComponent(String.fromCharCode(c & 0x3f));
- }
- );
- },
-
- toUnicode: function(s, charset) {
- let sis = Cc["@mozilla.org/io/string-input-stream;1"]
- .createInstance(Ci.nsIStringInputStream);
- sis.setData(s, s.length);
- let is = Cc["@mozilla.org/intl/converter-input-stream;1"]
- .createInstance(Ci.nsIConverterInputStream);
- is.init(sis, charset || null, 0, is.DEFAULT_REPLACEMENT_CHARACTER);
- let str = {};
- if (is.readString(4096, str) === 0) return str.value;
- let ret = [str.value];
- while (is.readString(4096, str) !== 0) {
- ret.push(str.value);
- }
- return ret.join('');
- },
-
- utf8EscapeError: true,
- urlUnescape: function(url, brutal) {
- var od = this.utf8OverDecode(url, !brutal);
- this.utf8EscapeError = false;
- try {
- return decodeURIComponent(od);
- } catch(warn) {
- this.utf8EscapeError = true;
- if (url != od) url += " (" + od + ")";
- this.log("Problem decoding " + url + ", maybe not an UTF-8 encoding? " + warn.message);
- return unescape(brutal ? ASPIdiocy.filter(od) : od);
- }
- },
-
- formUnescape: function(s, brutal) {
- return this.urlUnescape(s.replace(/\+/g, ' '), brutal);
- },
-
- aspUnescape: function(s) {
- return unescape(ASPIdiocy.filter(s).replace(/\+/g, ' '));
- },
-
- ebayUnescape: function(url) {
- return url.replace(/Q([\da-fA-F]{2})/g, function(s, c) {
- return String.fromCharCode(parseInt(c, 16));
- });
- },
-
- checkPost: function(channel, skip) {
- if (!((channel instanceof Ci.nsIUploadChannel)
- && channel.uploadStream && (channel.uploadStream instanceof Ci.nsISeekableStream)))
- return false;
-
- var clen = -1;
- try {
- clen = channel.getRequestHeader("Content-length");
- } catch(e) {}
- MaxRunTime.increase(clen < 0 || clen > 300000 ? 60 : Math.ceil(20 * clen / 100000));
-
- this.log("Extracting post data...");
- return this.checkPostStream(channel.URI.spec, channel.uploadStream, skip);
- },
-
- checkPostStream: function(url, stream, skip) {
- var ic = this;
- var pc = new PostChecker(url, stream, skip);
- return pc.check(
- function(chunk) {
- return chunk.length > 6 &&
- ic.checkRecursive(chunk, 2, !pc.isFile) && chunk;
- }
- );
- },
-
- testCheckPost: function(url, strData) {
- var stream = Cc["@mozilla.org/io/string-input-stream;1"].
- createInstance(Ci.nsIStringInputStream);
- stream.setData(strData, strData.length);
- return this.checkPostStream(url, stream);
- },
-
-
- checkWindowName: function (window, url) {
- var originalAttempt = window.name;
- try {
- if (/^https?:\/\/(?:[^/]*\.)?\byimg\.com\/rq\/darla\//.test(url) &&
- ns.getPref("filterXExceptions.darla_name")) {
- window.name = "DARLA_JUNK";
- return;
- }
-
- if (/\s*{[\s\S]+}\s*/.test(originalAttempt)) {
- try {
- JSON.parse(originalAttempt); // fast track for crazy JSON in name like on NYT
- return;
- } catch(e) {}
- }
-
- if (/[%=\(\\<]/.test(originalAttempt) && InjectionChecker.checkURL(originalAttempt)) {
- window.name = originalAttempt.replace(/[%=\(\\<]/g, " ");
- }
-
- if (originalAttempt.length > 11) {
- try {
- if ((originalAttempt.length % 4 === 0)) {
- var bin = window.atob(window.name);
- if(/[%=\(\\]/.test(bin) && InjectionChecker.checkURL(bin)) {
- window.name = "BASE_64_XSS";
- }
- }
- } catch(e) {}
- }
- } finally {
- if (originalAttempt != window.name) {
- ns.log('[NoScript XSS]: sanitized window.name, "' + originalAttempt + '"\nto\n"' + window.name + '"\nURL: ' + url);
- ns.log(url + "\n" + window.location.href);
- }
- }
- },
-
-};
-
-function PostChecker(url, uploadStream, skip) {
- this.url = url;
- this.uploadStream = uploadStream;
- this.skip = skip || false;
-}
-
-PostChecker.prototype = {
- boundary: null,
- isFile: false,
- postData: '',
- check: function(callback) {
- var m, chunks, data, size, available, ret;
- const BUF_SIZE = 3 * 1024 * 1024; // 3MB
- const MAX_FIELD_SIZE = BUF_SIZE;
- try {
- var us = this.uploadStream;
- us.seek(0, 0);
- const sis = Cc['@mozilla.org/binaryinputstream;1'].createInstance(Ci.nsIBinaryInputStream);
- sis.setInputStream(us);
-
- // reset status
- delete this.boundary;
- delete this.isFile;
- delete this.postData;
-
- if ((available = sis.available())) do {
- size = this.postData.length;
- if (size >= MAX_FIELD_SIZE) return size + " bytes or more in one non-file field, assuming memory DOS attempt!";
-
- data = sis.readBytes(Math.min(available, BUF_SIZE));
-
- if (size !== 0) {
- this.postData += data;
- } else {
- if (data.length === 0) return false;
- this.postData = data;
- }
- available = sis.available();
- chunks = this.parse(!available);
-
- for (var j = 0, len = chunks.length; j < len; j++) {
- ret = callback(chunks[j]);
- if (ret) return ret;
- }
- } while(available)
- } catch(ex) {
- dump(ex + "\n" + ex.stack + "\n");
- return ex;
- } finally {
- try {
- us.seek(0, 0); // rewind
- } catch(e) {}
- }
- return false;
- },
-
- parse: function(eof) {
- var postData = this.postData;
- var m;
-
- if (typeof(this.boundary) != "string") {
- m = postData.match(/^Content-type: multipart\/form-data;\s*boundary=(\S*)/i);
- this.boundary = m && m[1] || '';
- if (this.boundary) this.boundary = "--" + this.boundary;
- postData = postData.substring(postData.indexOf("\r\n\r\n") + 2);
- }
-
- this.postData = '';
-
- var boundary = this.boundary;
-
- var chunks = [];
- var j, len, name;
-
- var skip = this.skip;
-
- if (boundary) { // multipart/form-data, see http://www.faqs.org/ftp/rfc/rfc2388.txt
- if(postData.indexOf(boundary) < 0) {
- // skip big file chunks
- return chunks;
- }
- var parts = postData.split(boundary);
-
- var part, last;
- for(j = 0, len = parts.length; j < len;) {
- part = parts[j];
- last = ++j == len;
- if (j == 1 && part.length && this.isFile) {
- // skip file internal terminal chunk
- this.isFile = false;
- continue;
- }
- m = part.match(/^\s*Content-Disposition: form-data; name="(.*?)"(?:;\s*filename="(.*)"|[^;])\r?\n(Content-Type: \w)?.*\r?\n/i);
-
- if (m) {
- // name and filename are backslash-quoted according to RFC822
- name = m[1];
- if (name) {
- chunks.push(name.replace(/\\\\/g, "\\")); // name and file name
- }
- if (m[2]) {
- chunks.push(m[2].replace(/\\\\/g, "\\")); // filename
- if (m[3]) {
- // Content-type: skip, it's a file
- this.isFile = true;
-
- if (last && !eof)
- this.postData = part.substring(part.length - boundary.length);
-
- continue;
- }
- }
- if (eof || !last) {
- if (!(skip && skip.indexOf(name) !== -1))
- chunks.push(part.substring(m[0].length)); // parameter body
- } else {
- this.postData = part;
- }
- this.isFile = false;
- } else {
- // malformed part, check it all or push it back
- if (eof || !last) {
- chunks.push(part)
- } else {
- this.postData = this.isFile ? part.substring(part.length - boundary.length) : part;
- }
- }
- }
- } else {
- this.isFile = false;
-
- parts = postData.replace(/^\s+/, '').split("&");
- if (!eof) this.postData = parts.pop();
-
- for (j = 0, len = parts.length; j < len; j++) {
- m = parts[j].split("=");
- name = m[0];
- if (skip && skip.indexOf(name) > -1) continue;
- chunks.push(name, m[1] || '');
- }
- }
- return chunks;
- }
-}
-
-
-function XSanitizer(primaryBlacklist, extraBlacklist) {
- this.primaryBlacklist = primaryBlacklist;
- this.extraBlacklist = extraBlacklist;
- this.injectionChecker = InjectionChecker;
-}
-
-XSanitizer.prototype = {
- brutal: false,
- base64: false,
- sanitizeURL: function(url) {
- var original = url.clone();
- this.brutal = this.brutal || this.injectionChecker.checkURL(url.spec);
- this.base64 = this.injectionChecker.base64;
-
- const changes = { minor: false, major: false, qs: false };
- // sanitize credentials
- if (url.username) url.username = this.sanitizeEnc(url.username);
- if (url.password) url.password = this.sanitizeEnc(url.password);
- url.host = this.sanitizeEnc(url.host);
- let pathProp = ["path" in url ? "path" : "pathQueryRef"];
- let urlPath = url[pathProp];
- if (url instanceof Ci.nsIURL) {
- // sanitize path
-
- if (url.param) {
- urlPath = url[pathProp] = this.sanitizeURIComponent(urlPath); // param is the URL part after filePath and a semicolon ?!
- } else if(url.filePath) {
- url.filePath = this.sanitizeURIComponent(url.filePath); // true == lenient == allow ()=
- }
- // sanitize query
- if (url.query) {
- url.query = this.sanitizeQuery(url.query, changes);
- if (this.brutal) {
- url.query = this.sanitizeWholeQuery(url.query, changes);
- }
- }
- // sanitize fragment
- var fragPos = urlPath.indexOf("#");
- if (url.ref || fragPos > -1) {
- if (fragPos >= url.filePath.length + url.query.length) {
- urlPath = url[pathProp] = urlPath.substring(0, fragPos) + "#" + this.sanitizeEnc(urlPath.substring(fragPos + 1));
- } else {
- url.ref = this.sanitizeEnc(url.ref);
- }
- }
- } else {
- // fallback for non-URL URIs, we should never get here anyway
- if (urlPath) urlPath = url[pathProp] = this.sanitizeURIComponent(urlPath);
- }
-
- var urlSpec = url.spec;
- var neutralized = Entities.neutralizeAll(urlSpec, /[^\\'"\x00-\x07\x09\x0B\x0C\x0E-\x1F\x7F<>]/);
- if (urlSpec != neutralized) url.spec = neutralized;
-
- if (this.base64 ||
- FlashIdiocy.affects(urlSpec) ||
- FlashIdiocy.affects(unescape(urlSpec))
- ) {
- url.spec = url.prePath; // drastic, but with base64 / FlashIdiocy we cannot take the risk!
- }
-
- if (url.getRelativeSpec(original) && unescape(url.spec) != unescape(original.spec)) { // ok, this seems overkill but take my word, the double check is needed
- changes.minor = true;
- changes.major = changes.major || changes.qs ||
- unescape(original.spec.replace(/\?.*/g, ""))
- != unescape(url.spec.replace(/\?.*/g, ""));
- url.spec = url.spec.replace(/'/g, "%27")
- if (changes.major) {
- url.ref = Math.random().toString().concat(Math.round(Math.random() * 999 + 1)).replace(/0./, '') // randomize URI
- }
- } else {
- changes.minor = false;
- url.spec = original.spec.replace(/'/g, "%27");
- }
- return changes;
- },
-
- sanitizeWholeQuery: function(query, changes) {
- var original = query;
- query = Entities.convertAll(query);
- if (query === original) return query;
- var unescaped = InjectionChecker.urlUnescape(original, true);
- query = this.sanitize(unescaped);
- if (query === unescaped) return original;
- if(changes) changes.qs = true;
- return escape(query);
- },
-
- _queryRecursionLevel: 0,
- sanitizeQuery: function(query, changes, sep) {
- const MAX_RECUR = 2;
-
- var canRecur = this._queryRecursionLevel++ < MAX_RECUR;
- // replace every character matching noscript.filterXGetRx with a single ASCII space (0x20)
- changes = changes || {};
- if (!sep) {
- sep = query.indexOf("&") > -1 || this.brutal ? "&" : ";"
- }
- const parms = query.split(sep);
-
- for (let j = parms.length; j-- > 0;) {
- let pieces = parms[j].split("=");
-
- try {
- for (let k = pieces.length; k-- > 0;) {
-
- let encodedPz = InjectionChecker.utf8OverDecode(pieces[k]);
-
- let pz = null, encodeURL = null;
- if (encodedPz.indexOf("+") < 0) {
- try {
- pz = decodeURIComponent(encodedPz);
- encodeURL = encodeURIComponent;
- } catch(e) {}
- }
- if (pz == null) {
- pz = unescape(ASPIdiocy.filter(encodedPz));
- encodeURL = escape;
- }
-
- let origPz = pz;
-
- // recursion for nested (partial?) URIs
-
- let nestedURI = null;
-
- if (canRecur && /^https?:\/\//i.test(pz)) {
- // try to sanitize as a nested URL
- try {
- nestedURI = IOUtil.newURI(pz).QueryInterface(Ci.nsIURL);
- changes.qs = changes.qs || this.sanitizeURL(nestedURI).major;
- if (unescape(pz).replace(/\/+$/, '') != unescape(nestedURI.spec).replace(/\/+$/, '')) pz = nestedURI.spec;
- } catch(e) {
- nestedURI = null;
- }
- }
-
- if (!nestedURI) {
- let qpos;
- if (canRecur &&
- (qpos = pz.indexOf("?")) > - 1 &&
- (spos = pz.search(/[&;]/) > qpos)) {
- // recursive query string?
- // split, sanitize and rejoin
- pz = [ this.sanitize(pz.substring(0, qpos)),
- this.sanitizeQuery(pz.substring(qpos + 1), changes)
- ].join("?")
-
- } else {
- pz = this.sanitize(pz);
- }
- if (origPz != pz) changes.qs = true;
- }
-
- if (origPz != pz) pieces[k] = encodeURL(pz);
-
- }
- parms[j] = pieces.join("=");
- } catch(e) {
- // decoding exception, skip this param
- parms.splice(j, 1);
- }
- }
- this._queryRecursionLevel--;
- return parms.join(sep);
- },
-
- sanitizeURIComponent: function(s) {
- try {
- var unescaped = InjectionChecker.urlUnescape(s, this.brutal);
- var sanitized = this.sanitize(unescaped);
- return sanitized == unescaped ? s : encodeURI(sanitized);
- } catch(e) {
- return "";
- }
- },
- sanitizeEnc: function(s) {
- try {
- return encodeURIComponent(this.sanitize(decodeURIComponent(s)));
- } catch(e) {
- return "";
- }
- },
- sanitize: function(unsanitized) {
- var s, orig;
- orig = s = Entities.convertDeep(unsanitized);
-
- if (s.indexOf('"') > -1 && !this.brutal) {
- // try to play nice on search engine queries with grouped quoted elements
- // by allowing double quotes but stripping even more aggressively other chars
-
- // Google preserves "$" and recognizes ~, + and ".." as operators
- // All the other non alphanumeric chars (aside double quotes) are ignored.
- // We will preserve the site: modifier as well
- // Ref.: http://www.google.com/help/refinesearch.html
- s = s.replace(/[^\w\$\+\.\~"&;\- :\u0080-\uffff]/g,
- " " // strip everything but alphnum and operators
- ).replace(":",
- function(k, pos, s) { // strip colons as well, unless it's the site: operator
- return (s.substring(0, pos) == "site" || s.substring(pos - 5) == " site") ? ":" : " "
- }
- );
- if (s.replace(/[^"]/g, "").length % 2) s += '"'; // close unpaired quotes
- return s;
- }
-
- if (this.brutal) {
- s = s.replace(/\x1bJ\(/g, '').replace(/\x7e\x0a/g, ''); // ignored in some encodings
- }
- // regular duty
- s = s.replace(this.primaryBlacklist, " ")
- .replace(/\bjavascript:+|\bdata:[^,]+,(?=[^<]*<|%25%20|%\s+[2-3][0-9a-f])|-moz-binding|@import/ig,
- function(m) { return m.replace(/(.*?)(\w)/, "$1#no$2"); });
-
- if (this.extraBlacklist) { // additional user-defined blacklist for emergencies
- s = s.replace(this.extraBlacklist, " ");
- }
-
- if (this.brutal) { // injection checks were positive
- s = InjectionChecker.reduceDashPlus(s)
- .replace(/\bdata:/ig, "nodata:")
- .replace(/['\(\)\=\[\]<\r\n`]/g, " ")
- .replace(/0x[0-9a-f]{16,}|0b[01]{64,}/gi, " ")
- .replace(this._dangerousWordsRx, this._dangerousWordsReplace)
- .replace(/Q[\da-fA-Fa]{2}/g, "Q20") // Ebay-style escaping
- .replace(/%[\n\r\t]*[0-9a-f][\n\r\t]*[0-9a-f]/gi, " ")
- // .replace(/percnt/, 'percent')
- ;
- }
-
- return s == orig ? unsanitized : s;
- },
-
- _regularReplRx: new RegExp(
- fuzzify('(?:javascript|data)') + '\\W*:+|' +
- fuzzify('-moz-binding|@import'),
- "ig"
- ),
- _dangerousWordsRx: new RegExp(
- '\\b(?:' + fuzzify('setter|location|innerHTML|outerHTML|cookie|name|document|toString|') +
- IC_EVAL_PATTERN + '|' + IC_EVENT_PATTERN + ')\\b',
- "g"
- ),
- _dangerousWordsReplace: (s) => s.replace(/\S/g, "$&\u2063")
-
-};
-
-// we need this because of https://bugzilla.mozilla.org/show_bug.cgi?id=439276
-
-var Base64 = {
-
- purify: function(input) {
- return input.replace(/[^A-Za-z0-9\+\/=]+/g, '');
- },
-
- alt: function(s) {
- // URL base64 variant, see http://en.wikipedia.org/wiki/Base64#URL_applications
- return s.replace(/-/g, '+').replace(/_/g, '/')
- },
-
- decode: function (input, strict) {
- var output = '';
- var chr1, chr2, chr3;
- var enc1, enc2, enc3, enc4;
- var i = 0;
-
- // if (/[^A-Za-z0-9\+\/\=]/.test(input)) return ""; // we don't need this, caller checks for us
-
- const k = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
- while (i < input.length) {
-
- enc1 = k.indexOf(input.charAt(i++));
- enc2 = k.indexOf(input.charAt(i++));
- enc3 = k.indexOf(input.charAt(i++));
- enc4 = k.indexOf(input.charAt(i++));
-
- chr1 = (enc1 << 2) | (enc2 >> 4);
- chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
- chr3 = ((enc3 & 3) << 6) | enc4;
-
- output += String.fromCharCode(chr1);
-
- if (enc3 != 64) {
- output += String.fromCharCode(chr2);
- }
- if (enc4 != 64) {
- output += String.fromCharCode(chr3);
- }
-
- }
- return output;
-
- }
-};
-
-
-
-
-var ASPIdiocy = {
- _replaceRx: /%u([0-9a-fA-F]{4})/g,
- _affectsRx: /%u[0-9a-fA-F]{4}/,
- _badPercentRx: /%(?!u[0-9a-fA-F]{4}|[0-9a-fA-F]{2})|%(?:00|u0000)[^&=]*/g,
-
- hasBadPercents: function(s) { return this._badPercentRx.test(s) },
- removeBadPercents: function(s) { return s.replace(this._badPercentRx, ''); },
- affects: function(s) { return this._affectsRx.test(s); },
- process: function(s) {
- s = this.filter(s);
- return /[\uff5f-\uffff]/.test(s) ? s + '&' + s.replace(/[\uff5f-\uffff]/g, '?') : s;
- },
- filter: function(s) { return this.removeBadPercents(s).replace(this._replaceRx, this._replace) },
-
- coalesceQuery: function(s) { // HPP protection, see https://www.owasp.org/images/b/ba/AppsecEU09_CarettoniDiPaola_v0.8.pdf
- let qm = s.indexOf("?");
- if (qm < 0) return s;
- let p = s.substring(0, qm);
- let q = s.substring(qm + 1);
- if (!q) return s;
-
- let unchanged = true;
- let emptyParams = false;
-
- let pairs = (function rearrange(joinNames) {
- let pairs = q.split("&");
- let accumulator = { __proto__: null };
- for (let j = 0, len = pairs.length; j < len; j++) {
- let nv = pairs[j];
- let eq = nv.indexOf("=");
- if (eq === -1) {
- emptyParams = true;
- if (joinNames && j < len - 1) {
- pairs[j + 1] = nv + "&" + pairs[j + 1];
- delete pairs[j];
- }
- continue;
- }
- let key = "#" + unescape(nv.substring(0, eq)).toLowerCase();
- if (key in accumulator) {
- delete pairs[j];
- pairs[accumulator[key]] += ", " + nv.substring(eq + 1);
- unchanged = false;
- } else {
- accumulator[key] = j;
- }
- }
- return (emptyParams && !(unchanged || joinNames))
- ? pairs.concat(rearrange(true).filter(p => pairs.indexOf(p) === -1))
- : pairs;
- })();
-
- if (unchanged) return s;
- for (let j = pairs.length; j-- > 0;) if (!pairs[j]) pairs.splice(j, 1);
- return p + pairs.join("&");
- },
-
- _replace: function(match, hex) {
- // lazy init
- INCLUDE("ASPIdiocy");
- return ASPIdiocy._replace(match, hex);
- }
-}
-
-var FlashIdiocy = {
- _affectsRx: /%(?:[8-9a-f]|[0-7]?[^0-9a-f])/i, // high (non-ASCII) percent encoding or invalid second digit
- affects: function(s) { return this._affectsRx.test(s); },
-
- purgeBadEncodings: function(s) {
- INCLUDE("FlashIdiocy");
- return this.purgeBadEncodings(s);
- }
-}
-
diff --git a/extensions/noscript/chrome/content/noscript/JSURL.js b/extensions/noscript/chrome/content/noscript/JSURL.js
deleted file mode 100644
index 6ea001c..0000000
--- a/extensions/noscript/chrome/content/noscript/JSURL.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var JSURL = {
- JS_VERSION: "1.8",
- load: function(url, document) {
- this._run(document, url.substring("javascript:".length)
- .replace(/(?:%[0-9a-f]{2})+/gi, function(m) {
- try {
- return decodeURIComponent(m);
- } catch (e) {}
- return unescape(m);
- }));
- },
-
- _patch: (function() {
- (function patchAll(w) {
- if (!w || w.open && w.open._bypass)
- return w;
-
- var d = w.document;
-
- function op(data) {
- var code = "Object.getPrototypeOf(document)." +
- (typeof(data) === "string"
- ? 'write.call(document, ' + JSON.stringify(data) + ')'
- : 'open.call(document)'
- );
- var s = d.createElement("script");
- s.appendChild(d.createTextNode(code));
- var p = d.documentElement;
- p.appendChild(s);
- p.removeChild(s);
- if (d.write === Object.getPrototypeOf(d).write) {
- patchAll(w);
- }
- }
- function patch(o, m, f) {
- var saved = o[m];
- f._restore = function() { o[m] = saved };
- f._bypass = saved;
- o[m] = f;
- }
-
- patch(d, "open", function() { op(null) });
- patch(d, "write", function(s) {
- op(typeof(s) === "string" ? s : "" + s);
- });
- patch(d, "writeln", function(s) { this.write(s + "\n") });
-
- patch(w, "open", function() {
- return patchAll(w.open._bypass.apply(w, arguments));
- });
-
- return w;
- })(window);
- }).toSource() + "()",
- _restore: (function() {
- var d = window.document;
- d.writeln._restore();
- d.write._restore();
- d.open._restore();
- }).toSource() + "()",
-
- _run: function(document, code) {
- var w = document.defaultView;
- var p = document.nodePrincipal;
- var s = ScriptSurrogate.createSandboxForWindow(w, p, {
- sandboxName: "NoScript::JSURL@" + document.documentURI,
- sandboxPrototype: w,
- wantXrays: false,
- });
- var e = (script) => Cu.evalInSandbox("with(window) {" + script + "}", s);
- try {
- e(this._patch);
- let ret = e(code);
- if (typeof ret !== "undefined" &&
- !DOM.getDocShellForWindow(w).isLoadingDocument) {
- s._ret_ = ret;
- e("window.location.href = 'javascript:' + JSON.stringify('' + this._ret_)");
- delete s._ret_;
- Thread.yieldAll();
- }
- } catch (e) {
- try { w.console.error("" + e) } catch(consoleError) { Cu.reportError(e) }
- } finally {
- try { e(this._restore) } catch(e) {}
- }
- },
-
-}
diff --git a/extensions/noscript/chrome/content/noscript/Lang.js b/extensions/noscript/chrome/content/noscript/Lang.js
deleted file mode 100644
index 71a74e9..0000000
--- a/extensions/noscript/chrome/content/noscript/Lang.js
+++ /dev/null
@@ -1,17 +0,0 @@
-// language utilities
-
-const Lang = {
- memoize: function(obj, funcs) {
- for (var p in funcs) {
- this._memoizeMember(obj, p, funcs[p]);
- }
- return obj;
- },
- _memoizeMember: function(obj, prop, func) {
- obj.__defineGetter__(prop, function() {
- var r = func.apply(this);
- this.__defineGetter__(prop, function() { return r; });
- return r;
- });
- }
-}
diff --git a/extensions/noscript/chrome/content/noscript/MSEInterception.js b/extensions/noscript/chrome/content/noscript/MSEInterception.js
deleted file mode 100644
index f3086cc..0000000
--- a/extensions/noscript/chrome/content/noscript/MSEInterception.js
+++ /dev/null
@@ -1,98 +0,0 @@
-var MSEInterception = {
- sites: {},
- handler(ev) {
- if (typeof ns === "undefined") {
- ev.currentTarget.removeEventListener(ev.type, argument.callee, true);
- return;
- }
- let target = ev.target;
- let mime = ev.detail.mime;
- let doc = target.ownerDocument || target;
- let url = doc.documentURI;
- let site = ns.getSite(url);
- if (ns.forbidMedia && ns.contentBlocker && !(ns.isAllowedObject(url, mime, site, site) || ns.isAllowedMime(mime, site))) {
- ev.preventDefault();
- ev.stopPropagation();
- ev.detail.blocked = true;
- MSEInterception.record(target, url, site, mime, true);
- }
- },
- record(ctx, url, site, mime, fromDOM) {
- let data = {
- url,
- site,
- originSite: site,
- mime
- };
- ns.tagForReplacement(ctx, data);
- ns.countObject(ctx, url);
- let doc = ctx.ownerDocument || ctx;
- if (fromDOM) {
- let ds = DOM.getDocShellForWindow(doc.defaultView);
- if (ds.isLoadingDocument) { // prevent fallback redirection from hiding us
- let sites = this.sites;
- sites[site] = data;
- doc.defaultView.addEventListener("load", () => delete sites[site], false);
- }
- }
- ns.recordBlocked(url, site);
- },
-
- get interceptionDef() {
- delete this.interceptionDef;
- return (this.interceptionDef = function() {
- let urlMap = new WeakMap();
- let createObjectURL = URL.createObjectURL;
- URL.createObjectURL = function(o, ...args) {
- let url = createObjectURL.call(this, o, ...args);
- if (o instanceof MediaSource) {
- let urls = urlMap.get(o);
- if (!urls) urlMap.set(o, urls = new Set());
- urls.add(url);
- }
- return url;
- };
- let proto = MediaSource.prototype;
- let addSourceBuffer = proto.addSourceBuffer;
- proto.addSourceBuffer = function(mime, ...args) {
- let ms = this;
- let urls = urlMap.get(ms);
- let me = Array.from(document.querySelectorAll("video,audio")).find(e => e.srcObject === ms || urls && urls.has(e.src));
- let exposedMime = `${mime} (MSE)`;
- let ev = new CustomEvent("NoScript:MSE", {cancelable: true, detail: { mime: exposedMime, blocked: false }});
-
- (me || document).dispatchEvent(ev);
-
- if (ev.detail.blocked) {
- throw new Error(`${exposedMime} blocked by NoScript`);
- }
- return addSourceBuffer.call(ms, mime, ...args);
- };
- }.toSource() + "()");
- },
- reloadAllowed(docShell) {
- let curURL = docShell.currentURI.spec;
- let site = ns.getSite(curURL);
- if (site in this.sites) {
- let {url} = this.sites[site];
- delete this.sites[site];
- if (url !== curURL) {
- docShell.loadURI(url, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
- return true;
- }
- }
- return false;
- },
- hook(doc, site) {
- let url = doc.documentURI;
- if (!(ns.isAllowedObject(url, "MSE", site, site) || ns.isAllowedMime("MSE", url))) {
- DOM.getFrameMM(doc.defaultView).addEventListener("NoScript:MSE", this.handler, true, true);
- if (site in this.sites) {
- let data = this.sites[site];
- this.record(doc, data.url, data.site, data.mime);
- }
- return this.interceptionDef;
- }
- return null;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/Main.js b/extensions/noscript/chrome/content/noscript/Main.js
deleted file mode 100644
index c96be47..0000000
--- a/extensions/noscript/chrome/content/noscript/Main.js
+++ /dev/null
@@ -1,4530 +0,0 @@
-const CLASS_NAME="NoScript Service";
-const SERVICE_CTRID = "@maone.net/noscript-service;1";
-const SERVICE_ID = "{31aec909-8e86-4397-9380-63a59e0c5ff5}";
-const EXTENSION_ID = "{73a6fe31-595d-460b-a920-fcc0f8843232}";
-
-const CP_OK = 1;
-const CP_REJECT = -2; // CP_REJECT_TYPE doesn't cause the -moz-suppressed CSS pseudo class to be added
-const CP_NOP = () => CP_OK;
-const CP_FRAMECHECK = 2;
-const CP_SHOULDPROCESS = 4;
-const CP_OBJECTARC = 8;
-const CP_EXTERNAL = 0;
-
-const nsIWebProgress = Ci.nsIWebProgress;
-const nsIWebProgressListener = Ci.nsIWebProgressListener;
-const WP_STATE_START = nsIWebProgressListener.STATE_START;
-const WP_STATE_STOP = nsIWebProgressListener.STATE_STOP;
-const WP_STATE_DOC = nsIWebProgressListener.STATE_IS_DOCUMENT;
-const WP_STATE_START_DOC = WP_STATE_START | WP_STATE_DOC;
-const WP_STATE_RESTORING = nsIWebProgressListener.STATE_RESTORING;
-
-const LF_VALIDATE_ALWAYS = Ci.nsIRequest.VALIDATE_ALWAYS;
-const LF_LOAD_BYPASS_ALL_CACHES = Ci.nsIRequest.LOAD_BYPASS_CACHE | Ci.nsICachingChannel.LOAD_BYPASS_LOCAL_CACHE;
-
-const NS_OK = 0;
-const NS_BINDING_ABORTED = 0x804b0002;
-const NS_BINDING_REDIRECTED = 0x804b0003;
-const NS_ERROR_UNKNOWN_HOST = 0x804b001e;
-const NS_ERROR_REDIRECT_LOOP = 0x804b001f;
-const NS_ERROR_CONNECTION_REFUSED = 0x804b000e;
-const NS_ERROR_NOT_AVAILABLE = 0x804b0111;
-
-const LOG_CONTENT_BLOCK = 1;
-const LOG_CONTENT_CALL = 2;
-const LOG_CONTENT_INTERCEPT = 4;
-const LOG_CHROME_WIN = 8;
-const LOG_XSS_FILTER = 16;
-const LOG_INJECTION_CHECK = 32;
-const LOG_DOM = 64; // obsolete, reuse me
-const LOG_JS = 128;
-const LOG_LEAKS = 1024;
-const LOG_SNIFF = 2048;
-const LOG_CLEARCLICK = 4096;
-const LOG_ABE = 8192;
-const LOG_IPC = 16384;
-
-const HTML_NS = "http://www.w3.org/1999/xhtml";
-
-const WHERE_UNTRUSTED = 1;
-const WHERE_TRUSTED = 2;
-const ANYWHERE = 3;
-
-const DUMMY_OBJ = {};
-DUMMY_OBJ.wrappedJSObject = DUMMY_OBJ;
-const DUMMY_FUNC = function() {};
-const DUMMY_ARRAY = [];
-
-const SERVICE_IIDS =
-[
-Ci.nsIContentPolicy,
-Ci.nsIObserver,
-Ci.nsISupportsWeakReference,
-Ci.nsIChannelEventSink,
-nsIWebProgressListener,
-Ci.nsIWebProgressListener2,
-Ci.nsIFactory
-];
-
-INCLUDE("e10sIPC", "SiteUtils", "AddressMatcher");
-
-function nsISupportsWrapper(wrapped) {
- this.wrappedJSObject = wrapped;
-}
-nsISupportsWrapper.prototype = {
- QueryInterface: XPCOMUtils.generateQI([])
-};
-
-LAZY_INCLUDE(
- "Bug",
- "DNS",
- "HTTPS",
- "ScriptSurrogate",
- "DOM",
- "URIValidator",
- "ClearClickHandler",
- "ChannelReplacement",
- "WinScript",
- "JSURL",
- "IOUtil",
- "Thread",
- "SyntaxChecker",
- "RequestWatchdog",
- "InjectionChecker",
- "Entities",
- "DoNotTrack",
- "WebGLInterception",
- "MSEInterception"
-);
-
-this.__defineGetter__("ABE", function() {
- if (ns.consoleDump) ns.dump("ABE kickstart at " + (new Error().stack));
- delete this.ABE;
- INCLUDE("ABE");
- ABE.consoleDump = !!(ns.consoleDump & LOG_ABE);
- ABE.init("noscript.");
- ns.onDisposal(() => ABE.dispose());
- DNS.logEnabled = ns.getPref("logDNS");
- return ABE;
-});
-
-const ns = {
- VERSION: "5.1.8.5",
- classDescription: CLASS_NAME,
- classID: Components.ID(SERVICE_ID),
- contractID: SERVICE_CTRID,
- QueryInterface: XPCOMUtils.generateQI(SERVICE_IIDS),
-
- categoryManager: Cc["@mozilla.org/categorymanager;1"].getService(Ci.nsICategoryManager),
- get ABE() { return ABE; },
-
- // nsIFactory implementation
- createInstance: function(outer, iid) {
- if (outer)
- throw Cr.NS_ERROR_NO_AGGREGATION;
- return this;
- },
- // nsIObserver implementation
- observe: function(subject, topic, data) {
-
- switch (topic) {
- case "content-document-global-created":
- this.onWindowCreated(subject, data);
- return;
- case "document-element-inserted":
- this.beforeScripting(subject, data);
- return;
- }
-
- if (subject instanceof Ci.nsIPrefBranch) {
- this.syncPrefs(subject, data);
- } else {
- switch (topic) {
-
- case "xpcom-shutdown":
- this.shutdown(true);
- break;
-
- case "profile-before-change":
- this.dispose();
- break;
-
- case "profile-after-change":
- try {
- this.init();
- } catch(e) {
- this.dump("Init error -- " + e + "\n" + e.stack);
- }
- break;
- case "sessionstore-windows-restored":
- ns.checkVersion(true);
- break;
-
- case "private-browsing":
- if (data == "enter") {
- if (!("_realDump_" in this)) this._realDump_ = this.dump;
- this.dump = DUMMY_FUNC;
- }
- if (data == "exit") {
- this.eraseTemp();
- this.dump = this._realDump_ || DUMMY_FUNC;
- }
- // break;
- case "browser:purge-session-history":
- this.eraseTemp();
- break;
-
-
- }
- }
- },
-
-
- IPC: IPC,
- bootstrap: function() {
- this.childProcess = (Services.appinfo.processType === Services.appinfo.PROCESS_TYPE_CONTENT);
-
- let log = msg => this.log(msg);
- INCLUDE_MIXIN(this, "MainChild");
- if (!this.childProcess) {
- INCLUDE_MIXIN(this, "MainParent");
- }
-
- try {
- IPC.autoSync(this, "Main", ["setJSEnabled", "setTemp", "eraseTemp", "allowObject", "resetAllowedObjects", "shutdown"]);
- } catch (e) {
- log(e);
- }
- this.startup();
- },
-
- OBSERVED_TOPICS: ["profile-before-change", "xpcom-shutdown", "profile-after-change", "sessionstore-windows-restored",
- "browser:purge-session-history", "private-browsing",
- "content-document-global-created", "document-element-inserted"],
- _started: false,
- startup: function() {
- if (this._started) return;
- this._started = true;
- this.registerComponent();
- for (let topic of this.OBSERVED_TOPICS) {
- let observer = this[topic] || this;
- OS.addObserver(observer, topic, observer instanceof Ci.nsISupportsWeakReference);
- }
- },
- shutdown: function(exiting = false) {
- if (!this._started) return;
- this._started = false;
-
-
- if (exiting) {
- this.resetJSCaps();
- this.savePrefs();
- return;
- }
-
- this.dump("NoScript shutting down");
-
- if (!this.childProcess) {
- try {
- this.prefService.getDefaultBranch("noscript.").setCharPref("snapshot", JSON.stringify(this.getSnapshot()));
- } catch (e) {
- Cu.reportError(e);
- }
- }
-
- this.dispose();
- for (let topic of this.OBSERVED_TOPICS) {
- try {
- OS.removeObserver(this[topic] || this, topic);
- } catch (e) {}
- }
- this.observe = () => {};
- this.dump("NoScript shutdown done");
- },
-
- // Preference driven properties
- autoAllow: false,
-
- consoleDump: 0,
- consoleLog: false,
-
- truncateTitle: true,
- truncateTitleLen: 255,
-
- showBlankSources: false,
- showPlaceholder: true,
- showUntrustedPlaceholder: true,
- collapseObject: false,
- clearClick: 3,
-
-
- forbidSomeContent: true,
- contentBlocker: false,
-
- forbidJava: true,
- forbidFlash: true,
- forbidPlugins: true,
- forbidMedia: true,
- forbidFonts: true,
- forbidWebGL: false,
- forbidIFrames: false,
- forbidIFramesContext: 2, // 0 = all iframes, 1 = different site, 2 = different domain, 3 = different base domain
- forbidFrames: false,
-
- alwaysBlockUntrustedContent: true,
-
- forbidXBL: 4,
- forbidXHR: 1,
- injectionCheck: 2,
- injectionCheckSubframes: true,
-
- jsredirectIgnore: false,
- jsredirectFollow: false,
- jsredirectForceShow: false,
- emulateFrameBreak: true,
-
- jsHack: null,
- jsHackRegExp: null,
-
- dropXssProtection: true,
- flashPatch: true,
- silverlightPatch: true,
-
- nselNever: false,
- nselForce: true,
-
- filterXGetRx: "(?:<+(?=[^<>=\\d\\. ])|[\\\\'\"\\x00-\\x07\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F])",
- filterXGetUserRx: "",
-
-
- whitelistRegExp: null,
- allowedMimeRegExp: null,
- hideOnUnloadRegExp: null,
- requireReloadRegExp: null,
- ignorePorts: true,
-
- inclusionTypeChecking: true,
- nosniff: true,
-
- fakeScriptLoadEvents: {},
-
- resetDefaultPrefs: function(prefs, exclude) {
- exclude = exclude || [];
- const root = prefs.root;
- const keys = prefs.getChildList("", {});
- for (let j = keys.length; j-- > 0;) {
- let k = keys[j];
- if (exclude.indexOf(k) === -1) {
- if (prefs.prefHasUserValue(k)) {
- dump("Resetting " + root + k + "\n");
- try {
- prefs.clearUserPref(k);
- } catch(e) {
- dump(`${e}\n`);
- }
- }
- }
- }
- this.savePrefs();
- },
-
- resetDefaultGeneralPrefs: function() {
- this.resetDefaultPrefs(this.prefs, ['version']);
- },
-
- resetDefaultSitePrefs: function() {
- this.eraseTemp();
- this.setJSEnabled(this.splitList(this.getPref("default")), true, true);
- },
-
- resetDefaults: function() {
- this.resetDefaultGeneralPrefs();
- this.jsEnabled = false;
- this.resetDefaultSitePrefs();
- },
-
- syncPrefs: function(branch, name) {
- switch (name) {
- case "sites":
- if (this.jsPolicySites.settingPref) return;
- if (this.locked) try {
- this.defaultCaps.lockPref(this.POLICY_NAME + ".sites");
- } catch (e) {
- }
- if (!this.jsPolicySites.fromPref(this.policyPB)) {
- this.resetDefaultSitePrefs();
- }
- this.jsPolicySites.add(this.tempSites.sitesList);
- break;
- case "untrusted":
- this.untrustedSites.fromPref(branch, name);
- break;
- case "default.javascript.enabled":
- if (IPC.parent) {
- let dc = this.defaultCaps;
- if (dc.getCharPref(name) != "noAccess") {
- dc.unlockPref(name);
- dc.setCharPref(name, "noAccess");
- }
- dc.lockPref(name);
- }
- break;
- case "enabled":
- try {
- this.mozJSEnabled = this.mozJSPref.getBoolPref("enabled");
- } catch(ex) {
- this.mozJSPref.setBoolPref("enabled", this.mozJSEnabled = true);
- }
- break;
- case "forbidJava":
- case "forbidFlash":
- case "forbidSilverlight":
- case "forbidPlugins":
- case "forbidMedia":
- case "forbidFonts":
- case "forbidWebGL":
- case "forbidIFrames":
- case "forbidFrames":
- this[name]=this.getPref(name, this[name]);
- this.forbidSomeContent = this.forbidJava || this.forbidFlash ||
- this.forbidSilverlight || this.forbidPlugins ||
- this.forbidMedia || this.forbidFonts ||
- this.forbidIFrames || this.forbidFrames;
- break;
-
- case "emulateFrameBreak":
- case "filterXPost":
- case "filterXGet":
- case "autoAllow":
- case "contentBlocker":
- case "alwaysShowObjectSources":
-
- case "showUntrustedPlaceholder":
- case "collapseObject":
- case "truncateTitle":
- case "truncateTitleLen":
- case "forbidMetaRefresh":
- case "forbidIFramesContext":
- case "forbidXBL":
- case "forbidXHR":
- case "ignorePorts":
- case "injectionCheck":
- case "jsredirectFollow":
- case "jsredirectIgnore":
- case "jsredirectForceShow":
- case "jsHack":
- case "consoleLog":
- case "dropXssProtection":
- case "flashPatch":
- case "silverlightPatch":
- case "inclusionTypeChecking":
- case "nosniff":
- case "showBlankSources":
- case "audioApiInterception":
- case "allowHttpsOnly":
- case "restrictSubdocScripting":
- case "globalHttpsWhitelist":
- this[name] = this.getPref(name, this[name]);
- break;
-
- case "cascadePermissions":
- this[name] = this.geckoVersionCheck("24") >= 0 && this.getPref(name, this[name]);
- break;
-
- case "fakeScriptLoadEvents.enabled":
- case "fakeScriptLoadEvents.onlyRequireJS":
- case "fakeScriptLoadEvents.exceptions":
- case "fakeScriptLoadEvents.docExceptions":
- let sub = name.split('.')[1];
- let value = this.getPref(name);
- this.fakeScriptLoadEvents[sub] = typeof value === "boolean" ? value : AddressMatcher.create(value);
- break;
-
- case "liveConnectInterception":
- this[name] = this.geckoVersionCheck("16.0") === -1 && this.getPref(name, this[name]);
- break;
-
- case "sync.enabled":
- this._updateSync();
- break;
-
- case "subscription.trustedURL":
- case "subscription.untrustedURL":
- this.setPref("subscription.lastCheck", 0);
- break;
-
- case "proxiedDNS":
- case "asyncNetworking":
- IOUtil[name] = this.getPref(name, IOUtil[name]);
- break;
-
- case "consoleDump":
- this[name] = this.getPref(name, this[name]);
- if (this.httpStarted) {
- this.injectionChecker.logEnabled = !!(this.consoleDump & LOG_INJECTION_CHECK);
- ABE.consoleDump = !!(this.consoleDump & LOG_ABE);
- }
- IPC.logger = (this.consoleDump & LOG_IPC) ? (...args) => ns.log(...args) : null;
- break;
- case "global":
- this.globalJS = this.getPref(name, false);
- break;
-
- case "alwaysBlockUntrustedContent":
- this[name] = this.getPref(name, this[name]);
- this.initContentPolicy();
- break;
-
- case "forbidMetaRefreshRemember":
- if (!this.getPref(name)) this.metaRefreshWhitelist = {};
- break;
-
- // single rx
- case "filterXGetRx":
- case "filterXGetUserRx":
- this.updateRxPref(name, this[name], "g");
- break;
-
- // multiple rx
- case "filterXExceptions":
- case "jsHackRegExp":
- this.updateRxPref(name, "", "", this.rxParsers.multi);
- break;
-
- // multiple rx autoanchored
- case "hideOnUnloadRegExp":
- this.updateStyleSheet(`.${this.hideObjClassName} {display: none !important}`, true);
- case "requireReloadRegExp":
- case "whitelistRegExp":
- this.updateRxPref(name, "", "^", this.rxParsers.multi);
- break;
-
- case "allowedMimeRegExp":
- this.updateRxPref(name, "", "^i", this.rxParsers.multi);
- break;
-
- case "safeJSRx":
- this.initSafeJSRx();
- break;
-
- case "allowClipboard":
- this.updateExtraPerm(name, "Clipboard", ["cutcopy", "paste"]);
- break;
- case "allowLocalLinks":
- this.updateExtraPerm(name, "checkloaduri", ["enabled"]);
- break;
- case "nselForce":
- case "nselNever":
- case "showPlaceholder":
- case "clearClick":
- this.updateCssPref(name);
- break;
-
- case "policynames":
- this.setupJSCaps();
- break;
-
- case "clearClick.exceptions":
- case "clearClick.subexceptions":
- ClearClickHandler.prototype[name.split('.')[1]] = AddressMatcher.create(this.getPref(name, ''));
- break;
-
- case "secureCookies":
- case "httpsDefWhitelist":
- HTTPS[name] = this.getPref(name, HTTPS[name]);
- break;
- case "secureCookiesExceptions":
- case "secureCookiesForced":
- case "httpsForced":
- case "httpsForcedExceptions":
- case "httpsForcedBuiltIn":
- HTTPS[name] = AddressMatcher.create(this.getPref(name, ''));
- break;
-
-
- }
- },
-
- rxParsers: {
- simple: function(s, flags) {
- var anchor = /\^/.test(flags);
- return new RegExp(anchor ? ns.rxParsers.anchor(s) : s,
- anchor ? flags.replace(/\^/g, '') : flags);
- },
- anchor: function(s) {
- return /^\^|\$$/.test(s) ? s : "^" + s + "$";
- },
- multi: function(s, flags) {
- var anchor = /\^/.test(flags);
- var lines = s.split(anchor ? /\s+/ : /[\n\r]+/).filter(l => /\S/.test(l));
- return new RegExp((anchor ? lines.map(ns.rxParsers.anchor) : lines).join('|'),
- anchor ? flags.replace(/\^/g, '') : flags);
- }
- },
- updateRxPref: function(name, def, flags, parseRx) {
- parseRx = parseRx || this.rxParsers.simple;
- var s = this.getPref(name, def);
- if (!s) {
- this[name] = null;
- } else
- {
-
- try {
- this[name] = parseRx(this.getPref(name, def), flags);
- } catch(e) {
- if(this.consoleDump) this.dump("Error parsing regular expression " + name + ", " + e);
- this[name] = parseRx(def, flags);
- }
- }
- },
-
-
- updateExtraPerm: function(prefName, baseName, names) {
- var cpName;
- var enabled = this.getPref(prefName, false);
- this[prefName] = enabled;
- for (var j = names.length; j-- > 0;) {
- cpName = this.POLICY_NAME + "." + baseName + "." + names[j];
- try {
- if (enabled) {
- this.caps.setCharPref(cpName, "allAccess");
- } else {
- if (this.caps.prefHasUserValue(cpName)) {
- this.caps.clearUserPref(cpName);
- }
- }
- } catch(ex) {}
- }
- if (!this._batchPrefs) {
- this.setupJSCaps();
- }
- },
-
- updateCssPref: function(name) {
- var value = this[name] = this.getPref(name);
- var sheet;
- switch(name) {
- case "nselForce":
- sheet = "noscript.noscript-show, span.noscript-show { display: inline !important } span.noscript-show { padding: 0px; margin: 0px; border: none; background: inherit; color: inherit }";
- break;
- case "nselNever":
- sheet = "noscript, noscript * { display: none !important }";
- break;
- case "showPlaceholder":
- let bim = "background-image: -moz-image-rect(url(" + this.skinBase + "close.png),";
- sheet = '.__noscriptPlaceholder__ { direction: ltr !important; display: inline-block !important; } ' +
- '.__noscriptPlaceholder__ > .__noscriptPlaceholder__1 { display: inline-block !important; position: relative !important;' +
- 'outline-color: #fc0 !important; outline-style: solid !important; outline-width: 1px !important; outline-offset: -1px !important;' +
- 'cursor: pointer !important; background: #ffffe0 url("' +
- this.pluginPlaceholder + '") no-repeat left top !important; opacity: 0.6 !important; margin-top: 0px !important; margin-bottom: 0px !important;} ' +
- '.__noscriptPlaceholder__1 > .__noscriptPlaceholder__2 { display: inline-block !important; background-repeat: no-repeat !important; background-color: transparent !important; width: 100%; height: 100%; display: block; margin: 0px; border: none } ' +
- 'noscript .__noscriptPlaceholder__ { display: inline !important; }' +
- '.__noscriptPlaceholder__1 > .closeButton { display: block !important; position: absolute !important; top: 0 !important; right: 0 !important;' +
- bim + "0,25%,100%,0) !important; width: 16px !important; height: 16px !important; opacity: .8 !important}" +
- '.__noscriptPlaceholder__1 > .closeButton:hover {' + bim + '0,50%,100%,25%) !important; opacity: 1 !important}' +
- '.__noscriptPlaceholder__1 > .closeButton:hover:active {' + bim + '0,75%,100%,50%) !important; opacity: 1 !important}' +
- '.__noscriptPlaceholder__1 > .msg { text-align: center !important; bottom: 0 !important; left: 0 !important; width: 100% !important; position: absolute !important; font-size: 12px !important; font-weight: bold !important; font-family: sans-serif !important; }';
- break;
- case "clearClick":
- sheet = "body:not([id]) { cursor: auto !important } " +
- ".__noscriptOpaqued__ { opacity: 1 !important; visibility: visible; filter: none !important } " +
- "iframe.__noscriptOpaqued__ { display: block !important; } " +
- "object.__noscriptOpaqued__, embed.__noscriptOpaqued__ { display: inline !important } " +
- ".__noscriptJustOpaqued__ { opacity: 1 !important } " +
- ".__noscriptScrolling__ { overflow: auto !important; min-width: 52px !important; min-height: 52px !important } " +
- ".__noscriptNoScrolling__ { overflow: hidden !important } " +
- ".__noscriptHidden__ { visibility: hidden !important } " +
- ".__noscriptBlank__ { background-color: white !important; color: white !important; border-color: white !important; background-image: none !important }";
-
- break;
- default:
- return;
- }
- this.updateStyleSheet(sheet, value);
- },
-
- get sss() {
- delete this.sss;
- try {
- return (this.sss = Cc["@mozilla.org/content/style-sheet-service;1"]
- .getService(Ci.nsIStyleSheetService));
- } catch(e) {
- return (this.sss = null);
- }
- },
-
- _sheets: new Set(),
- updateStyleSheet: function(sheet, enabled) {
- const sss = this.sss;
- if (!sss) return;
- const SHEET_TYPE = sss.AGENT_SHEET;
- ns.dump(`${enabled ? "Adding" : "Removing"} CSS:\n${sheet}`);
- const uri = IOS.newURI("data:text/css;charset=utf8," + encodeURIComponent(sheet), null, null);
- if (sss.sheetRegistered(uri, SHEET_TYPE)) {
- if (!enabled) {
- sss.unregisterSheet(uri, SHEET_TYPE);
- this._sheets.delete(sheet);
- }
- } else {
- try {
- if (enabled) {
- sss.loadAndRegisterSheet(uri, SHEET_TYPE);
- this._sheets.add(sheet);
- }
- } catch(e) {
- this.log("[NoScript CSS] Can't register " + uri + ", " + e);
- }
- }
- },
- disposeStyleSheets() {
- for (let sheet of this._sheets) this.updateStyleSheet(sheet, false);
- },
-
- get getString() {
- delete this.getString;
- const ss = new this.Strings("noscript");
- return (this.getString = (name, parms) => ss.getString(name, parms));
- },
-
- get Strings() {
- delete this.Strings;
- INCLUDE('Strings');
- return (this.Strings = Strings);
- },
-
- _inited: false,
- POLICY_NAME: "maonoscript",
- prefService: null,
- caps: null,
- defaultCaps: null,
- policyPB: null,
- prefs: null,
- mozJSPref: null,
- mozJSEnabled: true,
- disabled: false,
-
- // random resource aliases
- contentBase: null,
- skinBase: null,
- hideObjClassName: "__noscriptHideObj__",
- get hideObjClassNameRx() {
- const v = new RegExp("\\b" + this.hideObjClassName + "\\s*", "g");
- this.__defineGetter__("hideObjClassNameRx", function() { return v; });
- return v;
- },
- pluginPlaceholder: "",
-
- _initResources: function() {
- const ios = IOS;
- var resProt = ios.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
- var base;
- for (var r of ["skin", "content"]) {
- base = "noscript_" + Math.random();
- resProt.setSubstitution(base, ios.newURI("chrome:noscript/" + r + "/", null, null));
- this[r + "Base"] = "resource://" + base + "/";
- }
- this.pluginPlaceholder = this.skinBase + "icon32.png";
- },
-
- childProcess: false,
- init: function() {
- if (this._inited) return false;
-
- let t = Date.now();
-
- Thread.hostRunning = true;
-
- this._inited = true;
-
- this.beforeInit();
-
- this._initResources();
-
- const prefSrv = this.prefService = Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService).QueryInterface(Ci.nsIPrefBranch);
-
- this.caps = prefSrv.getBranch("capability.policy.");
- this.defaultCaps = prefSrv.getDefaultBranch(this.caps.root);
-
- this.policyPB = prefSrv.getBranch("capability.policy." + this.POLICY_NAME + ".");
- this.prefs = prefSrv.getBranch("noscript.");
-
- this.policyPB.addObserver("sites", this, true);
-
- this.prefs.addObserver("", this, true);
- this.mozJSPref = prefSrv.getBranch("javascript.");
- this.mozJSPref.addObserver("enabled", this, true);
-
- this.mandatorySites.sitesString = this.getPref("mandatory", "chrome: about: resource: [System Principal]");
-
- this.captureExternalProtocols();
-
- this._batchPrefs = true;
- for (var p of [
- "consoleDump", "consoleLog", // first, so we can log side effects
- "autoAllow",
- "allowedMimeRegExp", "hideOnUnloadRegExp", "requireReloadRegExp",
- "contentBlocker", "alwaysShowObjectSources",
- "filterXPost", "filterXGet",
- "filterXGetRx", "filterXGetUserRx",
- "filterXExceptions",
- "forbidJava", "forbidFlash", "forbidSilverlight", "forbidPlugins", "forbidMedia", "forbidFonts", "forbidWebGL",
- "forbidIFrames", "forbidIFramesContext", "forbidFrames",
- "forbidMetaRefresh",
- "forbidXBL", "forbidXHR",
- "liveConnectInterception", "audioApiInterception",
- "inclusionTypeChecking", "nosniff",
- "alwaysBlockUntrustedContent",
- "global", "ignorePorts",
- "injectionCheck", "injectionCheckSubframes",
- "jsredirectIgnore", "jsredirectFollow", "jsredirectForceShow",
- "jsHack", "jsHackRegExp",
- "emulateFrameBreak",
- "nselNever", "nselForce",
- "showBlankSources", "showPlaceholder", "showUntrustedPlaceholder",
- "collapseObject",
- "temp", "untrusted", "gtemp",
- "dropXssProtection",
- "flashPatch", "silverlightPatch",
- "allowHttpsOnly",
- "truncateTitle", "truncateTitleLen",
- "whitelistRegExp", "proxiedDNS", "asyncNetworking",
- "fakeScriptLoadEvents.enabled", "fakeScriptLoadEvents.onlyRequireJS", "fakeScriptLoadEvents.exceptions", "fakeScriptLoadEvents.docExceptions",
- "restrictSubdocScripting", "cascadePermissions", "globalHttpsWhitelist"
- ]) {
- try {
- this.syncPrefs(this.prefs, p);
- } catch(e) {
- dump("[NoScript init error] " + e.message + ":" + e.stack + " setting " + p + "\n");
- }
- }
- this._batchPrefs = false;
-
- this.setupJSCaps();
-
- if (!this.locked) {
- // init jsPolicySites from prefs
- this.syncPrefs(this.policyPB, "sites");
- }
-
- this.syncPrefs(this.mozJSPref, "enabled");
- if (this.consoleDump) ns.dump("T1 " + (Date.now() - t));
- if (this.getPref("tempGlobal", false))
- this.jsEnabled = false;
-
- this.afterInit();
-
- if (this.consoleDump) this.dump(`Init done in ${Date.now() - t}`);
- return true;
- },
-
-
- onContentInit: function() {
- this._batchPrefs = true;
- ["allowClipboard", "allowLocalLinks"].forEach((p) => this.syncPrefs(this.pref, p), this);
- this._batchPrefs = false;
- this.setupJSCaps();
- },
- getService() {
- try {
- return Cc[this.contractID].getService().wrappedJSObject;
- } catch(e) {
- }
- return null;
- },
- _registered: false,
- registerComponent() {
- if (this._registered) return;
- this.dump("Registering NoScript Service");
- let current = this.getService();
- if (current) {
- try {
- current.unregisterComponent();
- } catch (e) {
- Cu.reportError(e);
- }
- }
- let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
- try {
- registrar.registerFactory(this.classID, this.classDescription, this.contractID, this);
- this.onDisposal(() => this.unregisterComponent());
- } catch(e) {
- if (!registrar.isCIDRegistered(this.classID)) Cu.reportError(e);
- return;
- }
- OS.notifyObservers(this, "NoScript.ServiceReady", null);
- this._registered = true;
- },
- unregisterComponent() {
- if (!this._registered) return;
- this._registered = false;
- let current = this.getService();
- if (current !== this) {
- Cu.reportError("Current NoScript service is different than this: live update?");
- return;
- }
- let registrar = Components.manager.QueryInterface(Ci.nsIComponentRegistrar);
- if (registrar.isCIDRegistered(this.classID)) {
- registrar.unregisterFactory(this.classID, this);
- }
- },
-
- _disposalTasks: [],
- onDisposal: function(task) {
- this._disposalTasks.push(task);
- },
- dispose: function() {
- try {
- if(!this._inited) return;
- this._inited = false;
- OS.notifyObservers(this, "NoScript.Dispose", null);
- for (let t of this._disposalTasks) try {
- ns.dump(`Executing disposal task ${t}`);
- t();
- } catch (e) {
- Cu.reportError(e);
- }
-
- this.shouldLoad = this.shouldProcess = CP_NOP;
- let catMan = this.categoryManager;
- try {
- catMan.deleteCategoryEntry("content-policy", this.contractID, false);
- } catch (e) {}
-
- if (this.httpStarted) {
- this.requestWatchdog.dispose();
- try {
- catMan.deleteCategoryEntry("net-channel-event-sinks", this.contractID, false);
- } catch (e) {}
-
- }
- try {
- Cc['@mozilla.org/docloaderservice;1'].getService(nsIWebProgress).removeProgressListener(this);
- } catch (e) {}
-
- this.prefs.removeObserver("", this);
- this.mozJSPref.removeObserver("enabled", this);
- this.resetJSCaps();
-
- this.savePrefs();
- this.disposeStyleSheets();
- if(this.consoleDump & LOG_LEAKS) this.reportLeaks();
- if (typeof PolicyState === "object") PolicyState.reset();
- } catch(e) {
- Cu.reportError(e);
- this.dump(e + " while disposing.");
- } finally {
- Thread.hostRunning = false;
- }
-
- },
-
-
- global: this,
- reportLeaks: function() {
- for (let k of Object.keys(global)) {
- this.dump(`${k} = ${global[k]}\n`);
- }
- },
-
- get profiler() {
- delete this.profiler;
- INCLUDE("Profiler");
- return (this.profiler = Profiler);
- },
-
- httpStarted: false,
- get requestWatchdog() {
- if (ns.consoleDump) ns.dump("RW kickstart at " + new Error().stack);
- this.httpStarted = true;
- this.initContentPolicy(true);
-
- delete this.requestWatchdog;
- return (this.requestWatchdog = new RequestWatchdog());
- },
-
- captureExternalProtocols: function() {
- try {
- const pb = this.prefService.getDefaultBranch("network.protocol-handler.");
- if (this.getPref("fixURI", true)) {
- try {
- pb.setBoolPref("expose-all", true);
- } catch(e1) {}
- var prots = [];
- for (var key of pb.getChildList("expose.", {})) {
- try {
- pb.setBoolPref(key, true);
- prots.push(key.replace("expose.", ""));
- if (pb.prefHasUserValue(key)) pb.clearUserPref(key);
- } catch(e1) {}
- }
- if (prots.length) this.extraCapturedProtocols = prots;
- }
- } catch(e) {}
- },
-
- extraCapturedProtocols: null,
-
- mandatorySites: new PolicySites(),
- isMandatory: function(s) {
- return s && this.mandatorySites.matches(s);
- },
-
- tempSites: new PolicySites(),
- gTempSites: new PolicySites(),
- isTemp: function(s) {
- return s in (this.globalJS ? this.gTempSites : this.tempSites).sitesMap;
- },
- setTemp: function(s, b) {
- const sites = {
- "temp": this.tempSites,
- "gtemp": this.gTempSites
- };
- for (let p in sites) {
- if (b) {
- if (p[0] !== "g" || this.globalJS) {
- sites[p].add(s);
- }
- } else {
- sites[p].remove(s, true, true); // keeps up and down, see #eraseTemp()
- }
- }
- return b;
- },
-
- untrustedSites: new PolicySites(),
- isUntrusted: function(s) {
- return !!this.untrustedSites.matches(s);
- },
- setUntrusted: function(s, b) {
- var change = b ? this.untrustedSites.add(s) : this.untrustedSites.remove(s, false, true);
- if (change) {
- this.persistUntrusted();
- }
- return b;
- },
- persistUntrusted: function(snapshot) {
- if (typeof(snapshot) === "string") {
- this.untrustedSites.sitesString = snapshot;
- }
- this.untrustedSites.toPref(this.prefs, "untrusted");
- },
-
- manualSites: new PolicySites(),
- isManual: function(s) {
- return !!this.manualSites.matches(s);
- },
- setManual: function(ss, b) {
- if (b) this.manualSites.add(ss);
- else {
- if (!ss.push) ss = [ss];
- try {
- this.manualSites.sitesString = this.manualSites.sitesString.replace(
- new RegExp("(^|\\s)(?:" +
- ss.map(function(k) {
- k = k.replace(/[\.\-]/g, '\\$&');
- if (k.indexOf(":") < 0) k = "(?:[a-z\\-]+:\/\/)?(?:[^\\s/]+\.)?" + k; // match protocols and subdomains
- if (!/:\d+$/.test(k)) k += "(?::\\d+)?"; // match ports
- return k;
- }).join("|") +
- ")(?=\\s|$)", "ig"),
- "$1"
- );
- } catch(e) {
- this.manualSites.remove(ss);
- }
- }
- return b;
- },
-
- autoTemp: function(site) {
- if (!(this.isUntrusted(site) || this.isManual(site) || this.isJSEnabled(site))) {
- this.setTemp(site, true);
- this.setJSEnabled(site, true);
- return true;
- }
- return false;
- },
-
- mustCascadeTrust: function(sites, temp) {
- var untrustedGranularity = this.getPref("untrustedGranularity", 3);
- /* noscript.untrustedGranularity controls how manually whitelisting
- a domain affects the untrusted blacklist status of descendants:
- 0 - always delist descendants from the untrusted blacklist
- 1 - keep descendants blacklisted for temporary allow actions
- 2 - keep descendants blacklisted for permanent allow actions
- 3 - (default) always keep descendants blacklisted
- 4 - delist blacklisted descendants of a site marked as untrusted
- All these values can be put in OR (the 3 default is actually 2 | 1)
- */
- var single = !(typeof(site) == "object" && ("push" in site)); // not an array
- return !((untrustedGranularity & 1) && !temp || (untrustedGranularity & 2) && temp) ||
- (untrustedGranularity & 4) && single && this.isUntrusted(site);
- },
-
- _unsafeSchemeRx: /^(?:ht|f)tp:\/\//,
- isForbiddenByHttpsStatus: function(site) {
- switch(this.allowHttpsOnly) {
- case 0:
- return false;
- case 1:
- return this._unsafeSchemeRx.test(site) && this.isProxied(site);
- case 2:
- return this._unsafeSchemeRx.test(site);
- }
- return false;
- },
- _isHttpsAndNotUntrusted: function(s) {
- return /^https:/i.test(s) && !this.isUntrusted(s);
- },
- isGlobalHttps: function(win, /*optional */ s) {
- let allow = false;
- if (s && !this._isHttpsAndNotUntrusted(s)) return false;
- if (!win) return !!s;
- for (;; win = win.parent) {
- let site = this.getDocSite(win.document);
- if (!(allow = s && site === s || this._isHttpsAndNotUntrusted(site)) || win === win.parent)
- break;
- s = site;
- }
-
- return allow;
- },
- get proxyService() {
- delete this.proxyService;
- return (this.proxyService = Cc["@mozilla.org/network/protocol-proxy-service;1"].getService(Ci.nsIProtocolProxyService));
- },
-
- isProxied: function(site) {
- this.isProxied = "proxyConfigType" in this.proxyService ? this._isProxied : this._isProxiedSite;
- return this.isProxied();
- },
- _isProxied: function() {
- switch (this.proxyService.proxyConfigType) {
- case 0: // direct
- case 5: // system
- return false;
- }
- return true;
- },
- _isProxiedSite: function(uri) { // Gecko < 2 has no proxyConfigType, so we must resolve per URI
- try {
- if (!(uri instanceof Ci.nsIURI)) {
- uri = IOS.newURI(uri || "https://noscript.net/", null, null);
- }
- return this.proxyService.resolve(uri, 0).type != "direct";
- } catch(e) {
- return false;
- }
- },
-
- jsPolicySites: new PolicySites(),
- isJSEnabled: function (s, window) {
- if (this.globalJS) {
- return !(this.alwaysBlockUntrustedContent && this.untrustedSites.matches(s));
- }
-
- if (this.untrustedSites.matches(s) || this.isForbiddenByHttpsStatus(s)) return false;
-
- let enabled = !!(this.jsPolicySites.matches(s));
-
- if (window) {
- let top = window.top;
- enabled = enabled ||
- this.globalHttpsWhitelist && s.startsWith("https:") && (window === top || this.isGlobalHttps(window));
- if (enabled ? this.restrictSubdocScripting : this.cascadePermissions) {
- let topOrigin = this.getPrincipalOrigin(this.getPrincipal(top.document));
- if (this.isBrowserOrigin(topOrigin)) {
- enabled = true;
- } else {
- let topSite = this.getSite(topOrigin);
- if (topSite !== s) enabled = this.isJSEnabled(topSite, enabled && this.restrictSubdocScripting && window);
- }
- }
- }
- return enabled;
- },
- setJSEnabled: function(site, is, fromScratch, cascadeTrust) {
- const ps = this.jsPolicySites;
- if (fromScratch) ps.sitesString = this.mandatorySites.sitesString;
- if (is) {
- ps.add(site);
- if (!fromScratch) {
- if (this.untrustedSites.remove(site, false, !cascadeTrust))
- this.persistUntrusted();
-
- this.setManual(site, false);
- }
- } else {
- ps.remove(site, false, true);
-
- if (typeof(site) == "string") {
- this._removeAutoPorts(site);
- }
-
- if (this.forbidImpliesUntrust) {
- this.setUntrusted(site, true);
- } else {
- this.setManual(site, true);
- }
- }
-
- this.flushCAPS();
-
- return is;
- },
-
- _buggyIPV6rx: /^[^/:]+:\/\/[^[](?:[0-9a-f]*:){2}/,
- getPrincipal(nodeOrWindow) {
- return nodeOrWindow &&
- (nodeOrWindow.nodePrincipal || nodeOrWindow.document && nodeOrWindow.document.nodePrincipal) ||
- null;
- },
- getPrincipalOrigin(p) {
- try {
- let origin = p.originNoSuffix || p.origin;
- if (this._buggyIPV6rx.test(origin)) {
- try {
- let uri = p.URI;
- let hostPort = uri.hostPort;
- if (hostPort && hostPort[0] === '[') origin = uri.scheme + "://" + hostPort;
- } catch (e) {
- ns.log(e);
- }
- }
- return origin;
- } catch (e) {
- if (ns.consoleDump) ns.dump(`${e} grabbing origin for ${p.URI.spec}, falling back to full URI`);
- }
- return p.URI.spec;
- },
-
- _removeAutoPorts: function(site) {
- // remove temporary permissions implied by this site for non-standard ports
-
- const portRx = /:\d+$/;
-
- if (portRx.test(site)) {
- if (/:0$/.test(site)) site = site.replace(portRx, '');
- else return;
- }
-
- const tempSites = this.tempSites;
- var portSites = this.tempSites.sitesString.match(/\S+:[1-9]\d*(?=\s|$)/g);
- if (!portSites) return;
-
-
- var domain = SiteUtils.domainMatch(site);
- var filter;
-
- if (domain) {
- const dotDomain = "." + domain;
- const dLen = dotDomain.length;
- filter = function(d) {
- d = this.getDomain(d);
- return d === domain || d.length > dLen && d.slice(- dLen) === dotDomain;
- };
- } else {
- filter = function(s) { return s.replace(portRx, '') === site; };
- }
-
- var doomedSites = portSites.filter(filter, this);
-
- if (doomedSites.length) {
- tempSites.remove(doomedSites);
- this.jsPolicySites.remove(doomedSites);
- }
- },
-
- get forbidImpliesUntrust() {
- return this.globalJS || this.autoAllow || this.getPref("forbidImpliesUntrust", false);
- },
-
- portRx: /:\d+$/,
- _ipShorthandRx: /^(https?:\/\/)((\d+\.\d+)\.\d+)\.\d+(?::\d|$)/,
- checkShorthands: function(site, policy) {
- if (!site) return false;
-
- if (this.whitelistRegExp && this.whitelistRegExp.test(site)) {
- return true;
- }
-
- if (!policy) policy = this.jsPolicySites;
-
- if (this.ignorePorts && policy.matches(site.replace(/:\d+$/, '')))
- return true;
-
- let map = policy.sitesMap;
- let portRx = this.portRx;
- let hasPort = portRx.test(site);
-
- // port matching, with "0" as port wildcard and * as nth level host wildcard
- let key = hasPort ? site.replace(portRx, ":0") : site;
- if (key in map || site in map) return true;
- var keys = site.split(".");
- if (keys.length > 1) {
- let prefixMatch = keys[0].match(/^(?:ht|f)tps?:\/\//i);
- if (prefixMatch) {
- let prefix = prefixMatch[0] + "*.";
- while (keys.length > 2) {
- keys.shift();
- key = prefix + keys.join(".");
- if (key in map || hasPort && key.replace(portRx, ":0") in map) return true;
- }
- }
- }
-
- // check IP leftmost portion up to 2nd byte (e.g. [http://]192.168 or [http://]10.0.0)
- let m = site.match(this._ipShorthandRx);
- return m && (m[2] in map || m[3] in map || (m[1] + m[2]) in map || (m[1] + m[3]) in map);
- },
- flushCAPS: function(sitesString) {
- const ps = this.getPermanentSites();
- if (sitesString) ps.sitesString = sitesString;
- try {
- ps.toPref(this.policyPB);
- } catch (e) {
- if (!this.childProcess) throw e;
- }
- },
- get injectionChecker() { return this. requestWatchdog.injectionChecker; },
-
- splitList: function(s) {
- return s ?/^[,\s]*$/.test(s) ? [] : s.split(/\s*[,\s]\s*/) : [];
- },
-
- savePrefs: function() {
- if (this.childProcess) return false;
- if (this.webExt && this.webExt.started) {
- try {
- this.webExt.saveData();
- } catch (e) {
- Cu.reportError(e);
- }
- }
- var res = this.prefService.savePrefFile(null);
- return res;
- },
-
- sortedSiteSet: function(s) { return SiteUtils.sortedSet(s); },
- globalJS: false,
- get jsEnabled() {
- return this.mozJSEnabled && this.globalJS;
- },
-
- set jsEnabled(enabled) {
- try {
- if (this.locked || this.prefs.prefIsLocked("global")) {
- enabled = false;
- }
- } catch (e) {}
- this.globalJS = enabled;
- const prefName = "default.javascript.enabled";
- try {
- this.caps.clearUserPref(prefName);
- } catch(e) {}
-
- this.setPref("global", enabled);
- if (enabled) {
- try {
- this.mozJSPref.setBoolPref("enabled", true);
- } catch (e) {}
- }
- return enabled;
- },
-
- getSite(url) {
- return SiteUtils.getSite(url);
- },
- getDocSite(doc) {
- return this.getSite(this.getPrincipalOrigin(this.getPrincipal(doc)));
- },
-
- getQuickSite: function(url, level) {
- var site = null;
- if (level > 0 && !this.jsEnabled) {
- site = this.getSite(url);
- var domain;
- if (level > 1 && (domain = this.getDomain(site))) {
- site = level > 2 ? this.getBaseDomain(domain) : domain;
- }
- }
- return site;
- },
-
- get preferredSiteLevel() {
- return this.getPref("showAddress", false) ? 1 : this.getPref("showDomain", false) ? 2 : 3;
- },
-
-
- getDomain: function(site, force) {
- try {
- let url = site;
- if (typeof site === "string") {
- if (site.endsWith(":")) return "";
- url = IOUtil.newURI(site);
- }
- const host = url.host;
- return force || (this.ignorePorts || url.port === -1) && host[host.length - 1] != "." &&
- (host.lastIndexOf(".") > 0 || host === "localhost") ? host : '';
- } catch(e) {
- return "";
- }
- },
-
- get _tldService() {
- delete this._tldService;
- return (this._tldService = IOUtil.TLDService);
- },
-
- getBaseDomain: function(domain) {
- if (!domain || DNS.isIP(domain)) return domain; // IP
-
- var pos = domain.lastIndexOf('.');
- if (pos < 1 || (pos = domain.lastIndexOf('.', pos - 1)) < 1) return domain;
-
- try {
- return this._tldService.getBaseDomainFromHost(domain);
- } catch(e) {
- this.dump(e);
- }
- return domain;
- },
- getPublicSuffix: function(domain) {
- try {
- return this._tldService.getPublicSuffixFromHost(domain);
- } catch(e) {}
- return "";
- },
-
- delayExec: function(callback, time) {
- Thread.delay(callback, time, this, Array.slice(arguments, 2));
- },
-
- RELOAD_NO: -1,
- RELOAD_CURRENT: 1,
- RELOAD_ALL: 0,
- safeCapsOp: function(callback, reloadPolicy, nosave) {
- this.delayExec(function() {
- try {
- callback(this);
- if (!nosave) this.savePrefs();
- this.reloadWhereNeeded(reloadPolicy);
- } catch(e) {
- this.dump("FAILED TO SAVE PERMISSIONS! " + e + "," + e.stack);
- }
- }, 0);
- },
-
- getSnapshot() {
- return {
- trusted: this.jsPolicySites.sitesString,
- untrusted: this.untrustedSites.sitesString,
- manual: this.manualSites.sitesString,
- temp: this.tempSites.sitesString,
- objectWhitelist: this.objectWhitelist,
- };
- },
- setSnapshot(snapshot) {
- this.jsPolicySites.sitesString = snapshot.trusted;
- this.untrustedSites.sitesString = snapshot.untrusted;
- this.manualSites.sitesString = snapshot.manual;
- this.tempSites.sitesString = snapshot.temp;
- this.objectWhitelist = snapshot.objectWhitelist;
- this.objectWhitelistLen = Object.keys(this.objectWhitelist).length;
- },
-
- getPermanentSites: function(whitelist, templist) {
- whitelist = (whitelist || this.jsPolicySites).clone();
- whitelist.remove((templist || this.tempSites).sitesList, true, true);
- return whitelist;
- },
-
- eraseTemp: function() {
- // remove temporary PUNCTUALLY:
- // keeps ancestors because the may be added as permanent after the temporary allow;
- // keeps descendants because they may already have been made permanent before the temporary, and then shadowed
- this.jsPolicySites.remove(this.tempSites.sitesList, true, true);
- // if allowed in blacklist mode, put back temporarily allowed in blacklist
- if (this.untrustedSites.add(this.gTempSites.sitesList)) {
- this.persistUntrusted();
- }
-
- this.tempSites.sitesString = this.gTempSites.sitesString = "";
-
- this.setPref("temp", "");
- this.setPref("gtemp", "");
-
- this.setJSEnabled(this.mandatorySites.sitesList, true); // add mandatory
- this.resetAllowedObjects();
- if (this.hasClearClickHandler) this.clearClickHandler.resetWhitelist();
- },
-
- _observingPolicies: false,
- _editingPolicies: false,
- setupJSCaps: function() {
- if (this._editingPolicies) return;
-
- this.resetJSCaps();
- if (!(this.allowLocalLinks || this.allowClipboard)) return;
-
- this._editingPolicies = true;
- try {
- const POLICY_NAME = this.POLICY_NAME;
- var prefArray;
- var prefString = "", originalPrefString = "";
- var exclusive = this.getPref("excaps", true);
- try {
-
- prefArray = this.splitList(prefString = originalPrefString =
- (this.caps.prefHasUserValue("policynames") ? this.caps.getCharPref("policynames")
- : this.getPref("policynames") // saved value from dirty exit
- )
- );
- var pcount = prefArray.length;
- while (pcount-- > 0 && prefArray[pcount] != POLICY_NAME);
- if (pcount == -1) { // our policy is not installed, should always be so unless dirty exit
- this.setPref("policynames", originalPrefString);
- if (exclusive || prefArray.length === 0) {
- prefString = POLICY_NAME;
- } else {
- prefArray.push(POLICY_NAME);
- prefString = prefArray.join(' ');
- }
- }
- prefString = prefString.replace(/,/g, ' ').replace(/\s+/g, ' ').replace(/^\s+/, '').replace(/\s+$/, '');
-
- } catch(ex) {
- prefString = POLICY_NAME;
- }
-
- this.caps.setCharPref(POLICY_NAME + ".javascript.enabled", "allAccess");
-
- try {
- this.caps.clearUserPref("policynames");
- } catch(e) {}
- this.defaultCaps.setCharPref("policynames", prefString);
-
-
- if (!this._observingPolicies) {
- this.caps.addObserver("policynames", this, true);
- this._observingPolicies = true;
- }
- } catch(ex) {
- dump(ex.message);
- }
- this._editingPolicies = false;
- },
- resetJSCaps: function() {
- try {
- this.caps.clearUserPref("default.javascript.enabled");
- } catch(ex) {}
- if (this._observingPolicies) {
- this.caps.removeObserver("policynames", this, false);
- this._observingPolicies = false;
- }
- try {
- let POLICY_NAME = this.POLICY_NAME;
- let exclusive = this.getPref("excaps", true) && (this.allowLocalLinks || this.allowClipboard);
- let prefString = SiteUtils.splitString(
- exclusive ? this.getPref("policynames", "") : this.caps.getCharPref("policynames")
- ).filter((s) => s && s !== POLICY_NAME).join(" ");
-
- if (prefString) {
- this.caps.setCharPref("policynames", prefString);
- } else {
- try {
- this.caps.clearUserPref("policynames");
- } catch(ex) {}
- }
- } catch(ex) {}
- },
-
- getPref: function(name, def) {
- const PREFS = Ci.nsIPrefBranch;
- const prefs = this.prefs;
- try {
- switch (prefs.getPrefType(name)) {
- case PREFS.PREF_STRING:
- return prefs.getCharPref(name);
- case PREFS.PREF_INT:
- return prefs.getIntPref(name);
- case PREFS.PREF_BOOL:
- return prefs.getBoolPref(name);
- }
- } catch(e) {}
- return def || "";
- },
-
- setPref: function(name, value) {
- const prefs = this.prefs;
- try {
- switch (typeof(value)) {
- case "string":
- prefs.setCharPref(name,value);
- break;
- case "boolean":
- prefs.setBoolPref(name,value);
- break;
- case "number":
- prefs.setIntPref(name,value);
- break;
- default:
- throw new Error("Unsupported type " + typeof(value) + " for preference " + name);
- }
- } catch(e) {
- const PREFS = Ci.nsIPrefBranch;
- try {
- switch (prefs.getPrefType(name)) {
- case PREFS.PREF_STRING:
- prefs.setCharPref(name, value);
- break;
- case PREFS.PREF_INT:
- prefs.setIntPref(name, parseInt(value));
- break;
- case PREFS.PREF_BOOL:
- prefs.setBoolPref(name, !!value && value != "false");
- break;
- }
- } catch(e2) {}
- }
- },
-
- getAllowObjectMessage: function(extras) {
- let url = SiteUtils.crop(extras.url).replace(/\S{80}/g, "$&\n");
- let details = extras.mime + " " + (extras.tag || (extras.mime === "WebGL" ? "<CANVAS>" : "<OBJECT>")) + " / " + extras.originSite;
- return this.getString("allowTemp", [url + "\n(" + details + ")\n"]);
- },
-
- get dom() {
- delete this.dom;
- return (this.dom = DOM);
- },
- get wan() {
- delete this.wan;
- ABE; // kickstart
- return (this.wan = WAN);
- },
-
- os: OS,
- siteUtils: SiteUtils,
- mimeService: null,
-
- shouldLoad: function(aContentType) {
- if (aContentType === 5) {
- this.requestWatchdog;
- return this.shouldLoad.apply(this, arguments);
- }
- return CP_OK;
- },
- shouldProcess: CP_NOP,
-
- initContentPolicy: function(force) {
- if (force) INCLUDE("Policy");
- else if (!this.httpStarted) return;
-
- const last = this.getPref("cp.last");
- const catMan = this.categoryManager;
- const cat = "content-policy";
- if (last)
- try {
- catMan.deleteCategoryEntry(cat, this.contractID, false);
- } catch (e) {}
-
- let cpMixin;
-
- if (this.httpStarted || force) {
- cpMixin = this.disabled ||
- (this.globalJS &&
- !(this.alwaysBlockUntrustedContent || this.contentBlocker || HTTPS.httpsForced)) ? NOPContentPolicy
- : MainContentPolicy;
- MIXIN(this, cpMixin);
- } else cpMixin = null;
-
- if (cpMixin !== NOPContentPolicy && (last || this.mimeService)) {
- // removing and adding the category late in the game allows to be the latest policy to run,
- // and nice to AdBlock Plus
- if (this.consoleDump) this.dump("Adding content policy.");
- catMan.addCategoryEntry(cat, this.contractID, this.contractID, false, true);
- } else this.dump("No category?!" + (cpMixin === NOPContentPolicy) + ", " + last + ", " + this.mimeService);
-
- catMan.addCategoryEntry("net-channel-event-sinks", this.contractID, this.contractID, false, true);
-
-
- if (!this.mimeService) {
- this.initSafeJSRx();
- INCLUDE(`MimeService${IPC.child ? '' : 'Parent'}`);
- this.mimeService = MimeService;
- }
- },
-
- REQDATA_HEADER: "X-NoScript-ReqData",
- REQDATA_SERIALIZABLE: ["checkWindowName", "protectName"],
- serializeReqData(req) {
- let reqData = this.reqData(req);
- if (!reqData.policyHints) try {
- req.setResponseHeader(this.REQDATA_HEADER,
- JSON.stringify(reqData, this.REQDATA_SERIALIZABLE),
- false);
- } catch (e) {
- this.log(`Cannot serialize reqData: ${uneval(reqData)}`);
- }
- },
- unserializeReqData: IPC.parent ? function() {} : function(req) {
- if (req instanceof Ci.nsIHttpChannel) {
- try {
- Object.assign(ns.reqData(req), JSON.parse(req.getResponseHeader(this.REQDATA_HEADER)));
- } catch (e) {
- //Cu.reportError(e);
- return;
- }
- }
- },
- reqData(req, remove = false) {
- return IOUtil.reqData(req, "net.noscript.channelData", remove);
- },
-
- guessMime: function(uriOrExt) {
- try {
- let ext = (uriOrExt instanceof Ci.nsIURL) ? uriOrExt.fileExtension
- : (uriOrExt instanceof Ci.nsIURI) ? ((ext = uriOrExt["path" in uriOrExt ? "path" : "pathQueryRef"]).includes(".") ? ext.split(".").pop() : "")
- : uriOrExt;
- return typeof ext === "string" && this.mimeService.getTypeFromExtension(ext) || "";
- } catch(e) {
- return "";
- }
- },
-
- pluginForMime: function(mimeType) {
- if (!mimeType) return null;
- try {
- var w = DOM.mostRecentBrowserWindow;
- if (!(w && w.navigator)) return null;
- var mime = w.navigator.mimeTypes.namedItem(mimeType);
- return mime && mime.enabledPlugin || null;
- } catch(e) { return null; }
- },
-
- _mediaTypeRx: /^(?:vide|audi)o\/|\/ogg$/i,
- isMediaType: function(mimeType) {
- return this._mediaTypeRx.test(mimeType);
- },
-
- versionComparator: Cc["@mozilla.org/xpcom/version-comparator;1"].getService(Ci.nsIVersionComparator),
- geckoVersion: ("@mozilla.org/xre/app-info;1" in Cc) ? Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo).platformVersion : "0.0",
- geckoVersionCheck: function(v) { return this.versionComparator.compare(this.geckoVersion, v) },
-
- safeJSRx: false,
- initSafeJSRx: function() {
- try {
- this.safeJSRx = new RegExp("^\\s*" + this.getPref("safeJSRx", "") + "\\s*;?\\s*$");
- } catch(e) {
- this.safeJSRx = false;
- }
- },
- isSafeJSURL: function(url) {
- var js = url.replace(/^javascript:/i, "");
- return this.safeJSRx && js != url && this.safeJSRx.test(js);
- },
-
- isFirebugJSURL: function(url) {
- return url == "javascript: eval(__firebugTemp__);"
- },
-
- isExternalScheme: function(scheme) {
- try {
- return IOS.getProtocolHandler(scheme).scheme != scheme;
- } catch(e) {
- return false;
- }
- },
- normalizeExternalURI: function(uri) {
- var uriSpec = uri.spec;
- var uriValid = URIValidator.validate(uriSpec);
- var fixURI = this.getPref("fixURI", true) &&
- this.getPref("fixURI.exclude", "").split(/[^\w\-]+/)
- .indexOf(uri.scheme) < 0;
- var msg;
- if (!uriValid) {
- if (fixURI) {
- uriSpec = uriSpec
- .replace(/[\s\x01-\x1f\0]/g, " ") // whitespace + null + control chars all to space
- .replace(/%[01][\da-f]/gi, "%20"); // ditto for already encoded items
- if (uriSpec != uri.spec) {
- if (this.consoleDump) this.dump("Fixing URI: " + uri.spec + " into " + uriSpec);
- if (uriValid !== false || (uriValid = URIValidator.validate(uriSpec))) {
- uri.spec = uriSpec;
- }
- }
- }
- if (uriValid === false) {
- msg = "Rejected invalid URI: " + uriSpec;
- if (this.consoleDump) this.dump(msg);
- this.log("[NoScript URI Validator] " + msg);
- return false;
- }
- }
- // encode all you can (i.e. don't touch valid encoded and delims)
- if (fixURI) {
- try {
- uriSpec = uriSpec.replace(/[^%]|%(?![\da-f]{2})/gi, encodeURI);
- if (uriSpec != uri.spec) {
- if (this.consoleDump) this.dump("Encoded URI: " + uri.spec + " to " + uriSpec);
- uri.spec = uriSpec;
- }
- } catch(ex) {
- msg = "Error assigning encoded URI: " + uriSpec + ", " + ex;
- if (this.consoleDump) this.dump(msg);
- this.log("[NoScript URI Validator] " + msg);
- return false;
- }
- }
- return true;
- },
-
- syncUI: function(aContext) {
- let doc = aContext && (aContext instanceof Ci.nsIDOMDocument ? aContext : aContext.ownerDocument || aContext.document);
- if (doc && doc.defaultView) {
- let ev = doc.createEvent("Events");
- ev.initEvent("NoScript:syncUI", true, false);
- aContext.dispatchEvent(ev);
- }
- },
-
- objectWhitelist: {},
- ALL_TYPES: "*",
- objectWhitelistLen: 0,
- _objectKeyRx: /^((?:\w+:\/\/)?[^\.\/\d]+)\d+(\.[^\.\/]+\.)/,
- objectKey: function(url, originSite) {
- if (url.indexOf("id=") > 0) {
- let [path, query] = url.split("?");
- if (query) {
- let id = query.match(/(?:^|&)(?:video_?)?id=([^&]+)/);
- if (id) url = path + "?id=" + id[1];
- }
- }
- return (originSite || '') + ">" + IOUtil.anonymizeURL(url.replace(this._objectKeyRx, '$1$2'));
- },
- anyAllowedObject: function(site, mime) {
- let key = this.objectKey(site);
- if (key in this.objectWhitelist) return true;
- key += '/';
- for (let s in this.objectWhitelist) {
- if (s.indexOf(site) === 0) return true;
- }
- return false;
- },
- isAllowedObject: function(url, mime, site, originSite) {
- let types = this.objectWhitelist[this.objectKey(url, originSite)] || this.objectWhitelist[this.objectKey(url)];
- if (types && (types === this.ALL_TYPES || types.indexOf(mime) > -1))
- return true;
-
-
- if (typeof(site) === "undefined") site = this.getSite(url);
-
- for (;site;) {
- types = this.objectWhitelist[this.objectKey(site, originSite)] || this.objectWhitelist[this.objectKey(site)];
- if (types && (types === this.ALL_TYPES || types.indexOf(mime) > -1))
- return true;
-
- if (!this._moreURLPartsRx.test(site)) break;
- let s = site.replace(this._chopURLPartRx, '');
- if (s === site) break;
- site = s;
- }
-
- return false;
- },
- _moreURLPartsRx: /\..*\.|:\//,
- _chopURLPartRx: /.*?(?::\/+|\.)/,
-
- // Fire.fm compatibility shim :(
- setAllowedObject: function(url, mime) {
- this.allowObject(url, mime);
- },
-
- allowObject: function(url, mime, originSite) {
- let key = this.objectKey(url, originSite);
- if (key in this.objectWhitelist) {
- let types = this.objectWhitelist[key];
- if (types === this.ALL_TYPES) return;
- if(mime === "*") {
- types = this.ALL_TYPES;
- } else {
- if (types.indexOf(mime) > -1) return;
- types.push(mime);
- }
- } else {
- this.objectWhitelist[key] = mime === "*" ? this.ALL_TYPES : [mime];
- }
- this.objectWhitelistLen++;
- },
- isAllowedObjectByDOM: function(obj, objectURL, parentURL, mime, site, originSite) {
- var url = this.getObjectURLWithDOM(obj, objectURL, parentURL);
- return url && this.isAllowedObject(url, mime, site, originSite || this.getSite(parentURL));
- },
- allowObjectByDOM: function(obj, objectURL, parentURL, mime, originSite) {
- var url = this.getObjectURLWithDOM(obj, objectURL, parentURL);
- if (url) this.allowObject(url, mime, originSite || this.getSite(parentURL));
- },
- getObjectURLWithDOM: function(obj, objectURL, parentURL) {
- let doc = obj.ownerDocument;
- let suffix = encodeURIComponent(parentURL);
- if (!doc) return objectURL + "#!#@" + suffix;
-
- let id = obj.id || "";
- let t = obj.tagName.toUpperCase();
-
- const ytFrameURL = "https://www.youtube.com/embed/";
-
- if ("IFRAME" === t && objectURL.substring(0, ytFrameURL.length) === ytFrameURL) {
- objectURL = ytFrameURL;
- id = "(ytFrame)";
- } else {
- objectURL = objectURL.replace(/[\?#].*/, '');
- if (!id) {
- let ee = doc.getElementsByTagName(t);
-
- for (let j = ee.length; j-- > 0;) {
- if (ee[j] === obj) {
- id = t + "(" + j + ")";
- break;
- }
- }
- }
- }
- return objectURL + "#!#" + id + "@" + suffix;
- },
-
- resetAllowedObjects: function() {
- this.objectWhitelist = {};
- this.objectWhitelistLen = 0;
- },
-
- isAllowedMime: function(mime, site) {
- return (this.allowedMimeRegExp && (
- this.allowedMimeRegExp.test(mime) ||
- this.allowedMimeRegExp.test(mime + "@" + site)));
- },
- countObject: function(embed, site) {
- if(!site) return;
- try {
- var doc = embed.ownerDocument;
-
- if (doc) {
- var topDoc = doc.defaultView.top.document;
- var os = this.getExpando(topDoc, "objectSites");
- if(os) {
- if(os.indexOf(site) < 0) os.push(site);
- } else {
- this.setExpando(topDoc, "objectSites", [site]);
- }
- }
- } catch (ex) {}
- },
-
- getPluginExtras: function(obj) {
- return this.getExpando(obj, "pluginExtras");
- },
- setPluginExtras: function(obj, extras) {
- this.setExpando(obj, "pluginExtras", extras);
- if (this.consoleDump & LOG_CONTENT_BLOCK) {
- try {
- this.dump("Setting plugin extras on " + obj + " -> " + (this.getPluginExtras(obj) == extras)
- + ", " + (extras && extras.toSource()) );
- } catch(e) {
- this.dump("Setting plugin extras");
- }
- }
-
- return extras;
- },
-
- getExpando: function(domObject, key, defValue) {
- return domObject && domObject.__noscriptStorage && domObject.__noscriptStorage[key] ||
- (defValue ? this.setExpando(domObject, key, defValue) || defValue : null);
- },
- setExpando: function(domObject, key, value) {
- if (!domObject) return null;
- if (!domObject.__noscriptStorage) domObject.__noscriptStorage = {};
- if (domObject.__noscriptStorage) domObject.__noscriptStorage[key] = value;
- else if(this.consoleDump) this.dump("Warning: cannot set expando " + key + " to value " + value);
- return value;
- },
-
- hasVisibleLinks: function(document) {
- const w = document.defaultView;
- if (!w) return false;
-
- const links = document.links;
- let toBeChecked = null;
- for (let j = 0, l; (l = links[j]); j++) {
- if (l && l.href && l.href.indexOf("http") === 0) {
- if (l.offsetWidth) return true;
- if (!toBeChecked) toBeChecked = [];
- toBeChecked.push(l);
- }
- }
- if (!toBeChecked) return false;
-
- let hiddenAncestors = [];
- for (let j = toBeChecked.length; j-- > 0;) {
- let n = toBeChecked[j];
- if (n.firstChild) {
- let ancestors = [];
- for (;;) {
- if (hiddenAncestors.indexOf(n) !== -1) break;
- ancestors.push(n);
- let s = w.getComputedStyle(n, '');
- if (s.display === "none" || s.visibility === "hidden") {
- hiddenAncestors.push.apply(hiddenAncestors, ancestors);
- break;
- }
- if (!(n = n.parentNode)) return true;
- }
- }
- }
-
- if (document.embeds[0] || document.getElementsByTagName("object")[0]) return true;
- let form = document.forms[0];
- if (form && form.offsetHeight) return true;
- return false;
- },
-
- processScriptElements: function(document, sites, docSite) {
- const scripts = document.getElementsByTagName("script");
- var scount = scripts.length;
- var surrogates = this.getExpando(document, "surrogates", {});
- if (scount) {
- let win = document.defaultView;
- const HTMLElement = win.HTMLElement;
- sites.scriptCount += scount;
- let nselForce = this.nselForce && this.isJSEnabled(docSite, win);
- let isHTMLScript;
- while (scount-- > 0) {
- let script = scripts.item(scount);
- isHTMLScript = script instanceof HTMLElement;
- let scriptSrc;
- if (isHTMLScript) {
- scriptSrc = script.src;
- } else if(script) {
- scriptSrc = script.getAttribute("src");
- if (!/^[a-z]+:\/\//i.test(scriptSrc)) continue;
- } else continue;
-
- let scriptSite = this.getSite(scriptSrc);
- if (scriptSite) {
- sites.all.push(scriptSite);
-
- if (scriptSrc in surrogates) continue;
-
- if (nselForce && isHTMLScript &&
- !(script.__nselForce ||
- this.isJSEnabled(scriptSite, win) ||
- this.isUntrusted(scriptSite))) {
-
- this.showNextNoscriptElement(script);
- }
- }
- }
- }
- }
-,
-
-
- showNextNoscriptElement: function(script) {
- let doc = script.ownerDocument;
- let checkRefresh = true;
- let docShell;
- const HTMLElement = doc.defaultView.HTMLElement;
- try {
- for (var node = script; (node = node.nextSibling);) {
-
- if (node instanceof HTMLElement) {
- script.__nselForce = true;
-
- tag = node.tagName.toUpperCase();
- if (tag == "SCRIPT") {
- if (node.src) return;
- script = node;
- continue;
- }
- if (tag != "NOSCRIPT")
- return;
-
- let child = node.firstChild;
- if (!(child && child.nodeType === 3)) break;
-
- if (checkRefresh) {
- this.setExpando(doc, "nselForce", true);
- checkRefresh = false;
- docShell = this.dom.getDocShellForWindow(doc.defaultView);
- if (docShell.allowMetaRedirects) {
- docShell.allowMetaRedirects = false;
- } else {
- docShell = null;
- }
- }
-
- let el = doc.createElementNS(HTML_NS, "span");
- el.__nselForce = true;
-
- el.innerHTML = child.nodeValue;
- node.replaceChild(el, child);
- node.className = "noscript-show";
- }
- }
- } catch(e) {
- this.dump(e.message + " while showing NOSCRIPT element");
- } finally {
- if (docShell) docShell.allowMetaRedirects = true;
- }
- },
-
-
- handleBookmark: function(url, openCallback) {
- if (!url) return true;
- try {
- if (!this.getPref("forbidBookmarklets") && /^\s*(?:javascript|data):/i.test(url)) {
- return this.executeJSURL(url, openCallback);
- }
- if (!this.jsEnabled && this.getPref("allowBookmarks")) {
- let site = this.getSite(url);
- if (!(this.isJSEnabled(site) || this.isUntrusted(site))) {
- this.setJSEnabled(site, true);
- this.savePrefs();
- }
- }
- } catch(e) {
- if (ns.consoleDump) ns.dump(e + " " + e.stack);
- }
- return false;
- },
-
- // applied to Places(UI)Utils
- placesCheckURLSecurity: function(node) {
- if(!this.__originalCheckURLSecurity(node)) return false;
- var method = arguments.callee;
- if(method._reentrant) return true;
- try {
- method._reentrant = true;
- const url = node.uri;
- node = null;
- var self = this;
- return !this.__ns.handleBookmark(url, function(url) {
- if (method.caller) method.caller.apply(self, method.caller.arguments);
- self = null;
- });
- } finally {
- method._reentrant = false;
- }
- },
-
-
- executeJSURL: function(url, openCallback, fromURLBar) {
- var browserWindow = DOM.mostRecentBrowserWindow;
- var browser = browserWindow.noscriptOverlay.currentBrowser;
- if(!browser) return false;
-
- var window = browser.contentWindow;
- if(!window) {
- let callbackId = IPC.parent.callback(openCallback);
- browser.messageManager.sendAsyncMessage("NoScript:executeJSURL", {
- url, callbackId, fromURLBar
- });
- return true;
- }
- return this.executeJSURLInContent(browser, window, url, openCallback, fromURLBar);
- },
-
- executeJSURLInContent(browser, window, url, openCallback, fromURLBar = false) {
- var site = this.getDocSite(window.document) || this.getExpando(browser, "jsSite");
-
- if (this.mozJSEnabled) {
- if(this.consoleDump) this.dump("Executing JS URL " + url + " on site " + site);
-
- let docShell = browser.docShell;
-
- let snapshots = {
- globalJS: this.globalJS,
- docJS: docShell.allowJavascript,
- siteJS: this.jsPolicySites.sitesString,
- untrusted: this.untrustedSites.sitesString
- };
-
- let siteJSEnabled = this.isJSEnabled(site, window);
-
- let doc = window.document;
-
- let focusListener = null;
-
- try {
- WinScript.unblock(window);
- docShell.allowJavascript = true;
- if (!(this.jsEnabled = doc.documentURI === "about:blank" || ns.getPref(fromURLBar ? "allowURLBarImports" : "allowBookmarkletImports"))) {
- if (site && !siteJSEnabled) {
- this.jsPolicySites.add(site);
- this.untrustedSites.remove(site, false, true);
- }
- } else {
- focusListener = function(ev) {
- ns.jsEnabled = docShell.isActive;
- };
- for (let et of ["focus", "blur"])
- browser.addEventListener(et, focusListener, true);
- }
-
- try {
- this.executingJSURL(doc, 1);
- let noJS = !(siteJSEnabled && snapshots.docJS);
- if (noJS) {
- this._patchTimeouts(window, true);
- }
-
- if (noJS && /^javascript:/i.test(url)) {
- JSURL.load(url, doc);
- } else {
- window.location.href = url;
- }
- Thread.yieldAll();
- if (noJS) {
- this._patchTimeouts(window, false);
- }
-
- } catch(e) {
- this.logError(e, true, "Bookmarklet or location scriptlet");
- }
-
- return true;
- } finally {
- if (!siteJSEnabled) try {
- WinScript.block(window);
- } catch (e) {
- ns.log(e);
- }
- this.setExpando(browser, "jsSite", site);
- if (!docShell.isLoadingDocument && docShell.currentURI &&
- this.getSite(docShell.currentURI.spec) == site)
- docShell.allowJavascript = snapshots.docJS;
-
- Thread.asap(function() {
- try {
- if (doc.defaultView && this.executingJSURL(doc) > 1) {
- this.delayExec(arguments.callee, 100);
- return;
- }
- this.executingJSURL(doc, 0);
- } catch (e) {} // the document could be dead, e.g. after a javascript: non-void expression evaluation
-
- if (focusListener)
- for (let et of ["focus", "blur"])
- browser.removeEventListener(et, focusListener, true);
-
- if (this.jsEnabled != snapshots.globalJS)
- this.jsEnabled = snapshots.globalJS;
-
- this.jsPolicySites.sitesString = snapshots.siteJS;
- this.untrustedSites.sitesString = snapshots.untrusted;
-
- this.flushCAPS();
-
- if (this.consoleDump & LOG_JS)
- this.dump("Restored snapshot permissions on " + site + "/" + (docShell.isLoadingDocument ? "loading" : docShell.currentURI.spec));
- }, this);
- }
- }
- if (openCallback) openCallback();
- return false;
- },
-
- _patchTimeouts: function(w, start) {
- this._runJS(w, start
- ? "if (!('__runTimeouts' in window)) " +
- (function() {
- var tt = [];
- window.setTimeout = window.setInterval = function(f, d, a) {
- if (typeof(f) != 'function') f = new Function(f || '');
- tt.push({f: f, d: d, a: a});
- return 0;
- };
- window.__runTimeouts = function() {
- var t, count = 0;
- while (tt.length && count++ < 200) { // let's prevent infinite pseudo-loops
- tt.sort(function(a, b) { return a.d < b.d ? -1 : (a.d > b.d ? 1 : 0); });
- t = tt.shift();
- t.f.call(window, t.a);
- }
- delete window.__runTimeouts;
- delete window.setTimeout;
- };
- }.toSource()) + "()"
- : "if (('__runTimeouts' in window) && typeof(window.__runTimeouts) == 'function') window.__runTimeouts()"
- );
- },
-
- _runJS: function(window, s) {
- window.location.href = "javascript:" + encodeURIComponent(s + "; void(0);");
- },
-
- bookmarkletImport: function(scriptElem, src) {
- var doc = scriptElem.ownerDocument;
- ns.executingJSURL(doc, 1);
- var w = doc.defaultView;
-
-
- try {
- ns._patchTimeouts(w, true);
- var xhr = ns.createCheckedXHR("GET", src, function() {
- if (xhr.readyState === 4) {
- ns._runJS(doc.defaultView, xhr.responseText);
- var ev = doc.createEvent("HTMLEvents");
- ev.initEvent("load", false, true);
- Thread.asap(function() {
- scriptElem.dispatchEvent(ev);
- dispose();
- });
- }
- }, w);
- xhr.send(null);
- } catch(e) {
- dispose();
- ns.dump(e);
- }
-
- function dispose() {
- Thread.asap(function() {
- try {
- ns._patchTimeouts(w, false);
- } catch(e) {}
- ns.executingJSURL(doc, -1);
- });
- };
- },
-
- executingJSURL: function(doc, n) {
- const VAR = "JSURLExec";
- var v = this.getExpando(doc, VAR) || 0;
- if (typeof(n) === "number") {
- this.setExpando(doc, VAR, n === 0 ? 0 : v += n);
- }
- return v;
- },
-
- isCheckedChannel: function(c) {
- return ns.reqData(c).checked;
- },
- setCheckedChannel: function(c, v) {
- ns.reqData(c).checked = v;
- },
-
- createCheckedXHR: function(method, url, async, window) {
- if (typeof(async) == "undefined") async = true;
- var xhr = Cc["@mozilla.org/xmlextras/xmlhttprequest;1"].createInstance(Ci.nsIXMLHttpRequest);
- xhr.open(method, url, !!async);
- this.setCheckedChannel(xhr.channel, true);
-
- if (typeof(async) === "function")
- xhr.addEventListener("readystatechange", async, false);
-
- var privacyContext = window && window.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIWebNavigation);
- if ((privacyContext instanceof Ci.nsILoadContext) && ("usePrivateBrowsing" in privacyContext)
- && privacyContext.usePrivateBrowsing) {
- if (xhr.channel instanceof Ci.nsIPrivateBrowsingChannel) {
- xhr.channel.setPrivate(true);
- } else {
- xhr.channel.loadFlags |= xhr.channel.INHIBIT_PERSISTENT_CACHING;
- }
- }
-
- return xhr;
- },
-
- mimeEssentials: function(mime) {
- return mime && mime.replace(/^application\/(?:x-)?/, "") || "";
- },
- urlEssentials: function(s) {
- // remove query, hash and intermediate path
- return s.replace(/[#\?].*/g, '').replace(/(.*?\w\/).+?(\/[^\/]+)$/, '$1...$2');
- },
- cssMimeIcon: function(mime, size) {
- if (!mime) return;
- [mime] = mime.split(/[;\s]/);
- return mime == "application/x-shockwave-flash"
- ? // work around for Windows not associating a sane icon to Flash
- 'url("' + this.skinBase + "flash" + size + '.png")'
- : /^application\/x-java\b/i.test(mime)
- ? 'url("' + this.skinBase + "java" + size + '.png")'
- : /^application\/x-silverlight\b/.test(mime)
- ? 'url("' + this.skinBase + "somelight" + size + '.png")'
- : /^font\b/i.test(mime)
- ? 'url("' + this.skinBase + 'font.png")'
- : mime === 'WebGL'
- ? 'url("' + this.skinBase + "webgl" + size + '.png")'
- : 'url("moz-icon://noscript?size=' + size + '&contentType=' + mime.replace(/[^\w-\/]/g, '') + '")';
- },
-
- _cachedObjectMimeRx: /^(?:text\/(?:javascript|css|x-c)|application\/(?:x-)?javascript)$/,
- isCachedObjectMime: function(mime) { return this._cachedObjectMimeRx.test(mime); },
-
- findPluginExtras: function(document) {
- return this.getExpando(document, "pluginExtras", []);
- },
-
- appliesHere: function(pref, url) {
- return pref && ((ANYWHERE & pref) == ANYWHERE ||
- (this.isJSEnabled(this.getSite(url))
- ? (WHERE_TRUSTED & pref) : (WHERE_UNTRUSTED & pref)
- )
- );
- },
-
- _preprocessObjectInfo: function(doc) {
-
- const pe = this.getExpando(doc, "pe");
- if (!pe) return null;
- this.setExpando(doc, "pe", null);
-
- var ret = [];
- var embedRx = /^(?:object|embed)$/i;
- for (var j = pe.length; j-- > 0;) {
- let o = pe[j];
- try {
- if (this.getExpando(o.embed, "silverlight")) {
- o.embed = this._attachSilverlightExtras(o.embed, o.pluginExtras);
- if (!o.embed) continue; // skip unconditionally to prevent in-page Silverlight placeholders
- }
-
- let embed = o.embed;
- if (this.getExpando(embed, "processed")) continue;
- this.setExpando(embed, "processed", true);
-
- if (embedRx.test(embed.tagName)) {
- let node = embed;
- while ((node = node.parentNode) && !node.__noscriptBlocked)
- // if (node instanceof OBJECT) o.embed = embed = node
- ;
-
- if (node !== null) {
- pe.splice(j, 1);
- continue;
- }
- }
-
- this.countObject(embed, o.pluginExtras.site);
-
- this.setPluginExtras(embed, o.pluginExtras);
- if (embed.ownerDocument) ret.push(o);
- } catch(e1) {
- if(this.consoleDump & LOG_CONTENT_BLOCK)
- this.dump("Error setting plugin extras: " +
- (o && o.pluginExtras && o.pluginExtras.url) + ", " + e1);
- }
- }
- return ret;
- },
-
- processObjectElements: function(document, sites, loaded) {
- const pluginExtras = this.findPluginExtras(document);
- sites.pluginCount += pluginExtras.length;
- sites.pluginExtras.push(pluginExtras);
-
- const objInfo = this._preprocessObjectInfo(document);
- if (!objInfo) return;
-
- var count = objInfo.length;
- if (count === 0) return;
-
- sites.pluginCount += count;
-
- const minSize = this.getPref("placeholderMinSize"),
- longTip = this.getPref("placeholderLongTip");
-
- const skipCSS = /^(?:position|top|left|right|bottom)$/;
-
- var replacements = null,
- collapse = this.collapseObject,
- forcedCSS = ";",
- pluginDocument = false;
-
- try {
- pluginDocument = count == 1 && (
- objInfo[0].pluginExtras.url === document.URL && !objInfo[0].embed.nextSibling ||
- document.body.lastChild === objInfo[0].embed && document.body.lastChild === document.body.firstChild
- );
- if (pluginDocument) {
- collapse = false;
- forcedCSS = ";outline-style: none !important;-moz-outline-style: none !important; width: 100%";
-
- }
- } catch(e) {}
-
- var win = document.defaultView;
-
- while (count--) {
- let oi = objInfo[count];
- let object = oi.embed;
- let extras = oi.pluginExtras;
-
- try {
- extras.site = this.getSite(extras.url);
-
- if(!this.showUntrustedPlaceholder && this.isUntrusted(extras.site))
- continue;
-
- let msg = "";
-
- let objectTag = object.tagName.toUpperCase();
- if (objectTag === "VIDEO") {
- // Youtube HTML5 hack
- let player = document.getElementById("movie_player-html5");
- if (player) {
- let rx = /\bhtml5-before-playback\b/;
- if (rx.test(player.className)) player.className = player.className.replace(rx, '');
- }
- }
-
- extras.tag = "<" + (this.isLegacyFrameReplacement(object) ? "FRAME" : objectTag) + ">";
- extras.title = extras.tag + ", " +
- this.mimeEssentials(extras.mime) + "@" +
- (longTip ? SiteUtils.crop(extras.url) : extras.url.replace(/[#\?].*/, ''));
-
- if ((extras.alt = object.getAttribute("alt")))
- extras.title += ' "' + extras.alt + '"'
-
-
- let anchor = document.createElementNS(HTML_NS, "a");
- anchor.id = object.id;
- anchor.href = /^(?:https?|ftp):/i.test(extras.url) ? extras.url : "#";
- anchor.setAttribute("title", extras.title);
-
- this.setPluginExtras(anchor, extras);
- this.setExpando(anchor, "removedNode", object);
-
- (replacements = replacements || []).push({object: object, placeholder: anchor, extras: extras });
-
- if (this.showPlaceholder && (object.offsetWidth || object.offsetHeight || !this.isCachedObjectMime(extras.mime))) {
- if (!pluginExtras.overlayListener) {
- pluginExtras.overlayListener = true;
- win.addEventListener("click", this.bind(this.onOverlayedPlaceholderClick), true);
- }
- anchor.addEventListener("click", this.bind(this.onPlaceholderClick), true);
- anchor.className = "__noscriptPlaceholder__ __noscriptObjectPatchMe__";
- } else {
- anchor.className = "__noscriptHidden__";
- if (collapse) anchor.style.display = "none";
- continue;
- }
-
- object.className += " __noscriptObjectPatchMe__";
-
- let innerDiv = document.createElementNS(HTML_NS, "div");
- innerDiv.className = "__noscriptPlaceholder__1";
-
- let cssDef = "",
- restrictedSize,
- style = win.getComputedStyle(oi.embed, null);
-
- if (style) {
- for (let cssCount = 0, cssLen = style.length; cssCount < cssLen; cssCount++) {
- let cssProp = style.item(cssCount);
- if (!skipCSS.test(cssProp))
- cssDef += cssProp + ": " + style.getPropertyValue(cssProp) + ";";
- }
-
- innerDiv.setAttribute("style", cssDef + forcedCSS);
-
- restrictedSize = (collapse || style.display === "none" || style.visibility === "hidden");
-
- anchor.style.width = style.width;
- anchor.style.height = style.height;
- if (style.position !== "static") {
- anchor.style.position = style.position;
- anchor.style.top = style.top;
- anchor.style.left = style.left;
- anchor.style.bottom = style.bottom;
- anchor.style.right = style.right;
- }
- } else restrictedSize = collapse;
-
- if (restrictedSize) {
- innerDiv.style.maxWidth = anchor.style.maxWidth = "32px";
- innerDiv.style.maxHeight = anchor.style.maxHeight = "32px";
- }
-
- innerDiv.style.visibility = "visible";
-
- let closeButton = innerDiv.appendChild(document.createElementNS(HTML_NS, "div"));
- closeButton.className = "closeButton";
-
- anchor.appendChild(innerDiv);
-
- // icon div
- innerDiv = innerDiv.appendChild(document.createElementNS(HTML_NS, "div"));
- innerDiv.className = "__noscriptPlaceholder__2";
-
- let iconSize;
-
- if(restrictedSize || style && (64 > (parseInt(style.width) || 0) || 64 > (parseInt(style.height) || 0))) {
- innerDiv.style.backgroundPosition = "bottom right";
- iconSize = 16;
- let w = parseInt(style.width) || 0,
- h = parseInt(style.height) || 0;
- if (minSize > w || minSize > h) {
- var rect = object.getBoundingClientRect();
- let aStyle = anchor.style, iStyle = innerDiv.parentNode.style;
- aStyle.overflow = "visible";
- aStyle.float = "left";
-
- let isTop = !win.frameElement;
- aStyle.minWidth = iStyle.minWidth = Math.max(w, isTop ? minSize : Math.min(document.documentElement.offsetWidth - rect.left, minSize)) + "px";
- aStyle.minHeight = iStyle.minHeight = Math.max(h, isTop ? minSize : Math.min(document.documentElement.offsetHeight - rect.top, minSize)) + "px";
-
- }
- } else {
- iconSize = 32;
- innerDiv.style.backgroundPosition = "center";
- if (msg) {
- let msgDiv = document.createElement("div");
- msgDiv.className = "msg";
- msgDiv.textContent = msg;
- anchor.firstChild.appendChild(msgDiv);
- }
- }
- innerDiv.style.backgroundImage = this.cssMimeIcon(extras.mime, iconSize);
-
- } catch(objectEx) {
- ns.dump(objectEx + " processing plugin " + count + "@" + document.documentURI + "\n");
- }
-
- }
-
- if (replacements) {
- if (this.isJSEnabled(this.getSite(document.URL), win)) this.patchObjects(document);
- this.delayExec(this.createPlaceholders, 0, replacements, pluginExtras, document);
- }
- },
-
- get _objectPatch() {
- delete this._objectPatch;
- return this._objectPatch = function() {
- const els = document.getElementsByClassName("__noscriptObjectPatchMe__");
- const DUMMY_FUNC = () => DUMMY_FUNC;
- var el;
- for (var j = els.length; j-- > 0;) {
- el = els[j];
- el.setAttribute("class",
- el.getAttribute("class").replace(/\b__noscriptObjectPatchMe__\b/, '').replace(/\s+/, ' ')
- );
- el.__noSuchMethod__ = DUMMY_FUNC;
- }
- }.toSource() + "()";
- },
-
- patchObjects: function(document) {
- delete this.patchObjects;
- return (this.patchObjects = ("getElementsByClassName" in document)
- ? function(document) { ScriptSurrogate.executeDOM(document, this._objectPatch); }
- : DUMMY_FUNC).call(this, document);
- },
-
- createPlaceholders: function(replacements, pluginExtras, document) {
- for (let r of replacements) {
- try {
- if (r.extras.pluginDocument) {
- this.setPluginExtras(r.object, null);
- if (r.object.parentNode) r.object.parentNode.insertBefore(r.placeholder, r.object);
- } else if (r.object.parentNode) {
- let p = r.placeholder;
- let o = r.object;
- o.parentNode.insertBefore(p, o);
- o._display = o.style.display;
- o.style.display = "none";
- if (p.style.position === "absolute") {
- let b = p.getBoundingClientRect();
- let el;
- if (b.width && b.height &&
- p !== (el = p.ownerDocument.defaultView
- .QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils)
- .elementFromPoint(
- b.left + b.width / 2, b.top + b.height / 2, false, false)
- ) && el && p.firstChild !== el && p.firstChild !== el.parentNode
- ) {
- let d = p.ownerDocument;
- let w = d.defaultView;
- p.style.top = (b.top + w.scrollY) + "px";
- p.style.left = (b.left + w.scrollX) + "px";
- p.style.zIndex = DOM.maxZIndex;
- d.body.appendChild(p);
- }
- }
- }
- r.extras.placeholder = r.placeholder;
- this._collectPluginExtras(pluginExtras, r.extras);
-
- ns.patchObjects(document);
- } catch(e) {
- this.dump(e);
- }
- }
- this.syncUI(document);
- },
-
- bind: function(f) {
- return "_bound" in f ? f._bound : f._bound = (function() { return f.apply(ns, arguments); });
- },
-
- stackIsMine: function() {
- var s = Components.stack.caller;
- var f = s.filename.replace(/ line .*/, '');
- while((s = s.caller)) {
- if (s.filename && !(/^(?:resource|chrome):/.test(s.filename) || f === s.filename.replace(/ line .*/, ''))) {
- return false;
- }
- }
- return true;
- },
-
- onPlaceholderClick: function(ev, anchor) {
- if (ev.button) return;
- anchor = anchor || ev.currentTarget;
- const object = this.getExpando(anchor, "removedNode");
-
- if (object) try {
- if("isTrusted" in ev && !ev.isTrusted || !this.stackIsMine()) {
- return;
- }
- let shift = ev.shiftKey;
- let closeButton = ev.target.className === "closeButton";
- if (closeButton ? !shift : shift) {
- if (this.collapseObject ||
- this.getPref("placeholderCollapseOnClose", false)) {
- anchor.style.display = "none";
- } else {
- anchor.style.visibility = "hidden";
- anchor.style.width = anchor.offsetWidth + "px";
- anchor.style.height = anchor.offsetHeight + "px";
- anchor.removeChild(anchor.firstChild);
- anchor.style.display = "block";
- }
- anchor.id = anchor.className = "";
- return;
- }
- this.checkAndEnablePlaceholder(anchor, object);
- } finally {
- ev.preventDefault();
- ev.stopPropagation();
- }
- },
-
- onOverlayedPlaceholderClick: function(ev) {
- var el = ev.originalTarget;
- var doc = el.ownerDocument;
-
- // check for cloned nodes, like on http://www.vmware.com/products/workstation/new.html
- for (let ph = el; ph.className && ph.className.indexOf("__noscriptPlaceholder__") !== -1; ph = ph.parentNode) {
- if (ph.href && ph.title) {
- if (this.getExpando(ph, "removedNode")) {
- this.onPlaceholderClick(ev, ph);
- return;
- }
-
- let pluginExtras = this.findPluginExtras(doc);
- if (pluginExtras) {
- for (let j = pluginExtras.length; j-- > 0;) {
- if (pluginExtras[j].title === ph.title) {
- let o = pluginExtras[j].placeholder;
- let n = this.getExpando(o, "removedNode");
- this.setExpando(ph, "removedNode", n);
- this.setPluginExtras(ph, this.getPluginExtras(n));
- this.onPlaceholderClick(ev, ph);
- return;
- }
- }
- }
- break;
- }
- }
- },
-
- checkAndEnablePlaceholder: function(anchor, object) {
- if (!(object || (object = this.getExpando(anchor, "removedNode")))) {
- if (ns.consoleDump) ns.dump("Missing node on placeholder!");
- return;
- }
-
- if (ns.consoleDump) ns.dump("Enabling node from placeholder...");
-
- const extras = this.getPluginExtras(anchor);
-
- if (!(extras && extras.url && extras.mime // && cache
- )) return;
-
- this.delayExec(this.checkAndEnableObject, 1,
- {
- window: anchor.ownerDocument.defaultView,
- extras: extras,
- anchor: anchor,
- object: object
- });
- },
-
- confirmEnableObject: function(win, extras) {
- // work around for Linux tooltip obstructing the confirmation dialog
- Thread.delay(function() {
- win.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils)
- .sendMouseEvent("mousemove", win.document.body, 0, 0, 0, 0, 0);
- }, 100);
- return extras.skipConfirmation || this.confirm(
- this.getAllowObjectMessage(extras),
- "confirmUnblock", undefined, win
- );
- },
- get prompter() {
- delete this.prompter;
- return (this.prompter = Services.prompt);
- },
- confirm(msg, persistPref, title = "NoScript", window = DOM.mostRecentBrowserWindow) {
- var alwaysAsk = { value: this.getPref(persistPref) };
- if(!alwaysAsk.value && this.prefs.prefHasUserValue(persistPref) ||
- this.prompter.confirmCheck(window, title, msg,
- this.getString("alwaysAsk"), alwaysAsk)
- ) {
- this.setPref(persistPref, alwaysAsk.value);
- return true;
- }
- return false;
- },
-
- isLegacyFrameDocument: function(doc) {
- let w = doc.defaultView;
- return (w.frameElement instanceof w.HTMLFrameElement) && this.isPluginDocumentURL(doc.URL, "iframe");
- },
- isLegacyFrameReplacement: function(obj) {
- let g = Cu.getGlobalForObject(obj);
- return (obj instanceof g.HTMLIFrameElement || obj instanceof g.HTMLAnchorElement) &&
- (obj.ownerDocument.defaultView.frameElement instanceof g.HTMLFrameElement) &&
- obj.ownerDocument.URL == this.createPluginDocumentURL(obj.src || obj.href, "iframe");
- },
- isClickToPlay: (obj) => obj instanceof Ci.nsIObjectLoadingContent && ("playPlugin" in obj) && ("activated" in obj) && !obj.activated,
- handleClickToPlay: function(obj) {
- if (this.isClickToPlay(obj) && this.getPref("smartClickToPlay")) {
- Thread.asap(() => obj.playPlugin());
- }
- },
-
- checkAndEnableObject: function(ctx) {
- var extras = ctx.extras;
-
- if (!this.confirmEnableObject(ctx.window, extras)) return;
-
-
- var mime = extras.mime;
- var url = extras.url;
-
- this.allowObject(url, mime, extras.originSite);
- let a = ctx.anchor;
- var doc = a.ownerDocument;
-
-
- var isLegacyFrame = this.isLegacyFrameReplacement(ctx.object);
-
- let w = doc.defaultView;
-
- if (isLegacyFrame || (mime == doc.contentType && doc.body &&
- (a === doc.body.firstChild &&
- a === doc.body.lastChild ||
- ctx.object instanceof w.HTMLEmbedElement && ctx.object.src != url))
- ) { // stand-alone plugin or frame
- doc.body.removeChild(a); // TODO: add a throbber
- if (isLegacyFrame) {
- this.setExpando(doc.defaultView.frameElement, "allowed", true);
- // doc.defaultView.frameElement.src = url;
- doc.defaultView.location.replace(url);
- } else this.quickReload(doc.defaultView, true);
- return;
- } else if (this.requireReloadRegExp && this.requireReloadRegExp.test(mime) ||
- this.getExpando(ctx, "requiresReload") ||
- /#!flashvars#.*\b_YUIvid_=/.test(url)) {
- this.quickReload(doc.defaultView);
- return;
- } else if (mime === "WebGL" || mime && mime.endsWith(" (MSE)") || this.getExpando(ctx, "silverlight")) {
- this.allowObject(doc.documentURI, mime);
- if (mime === "WebGL") delete WebGLInterception.sites[this.getSite(doc.documentURI)];
- if (mime && mime.endsWith(" (MSE)")) delete MSEInterception.sites[this.getSite(doc.documentURI)];
- this.quickReload(doc.defaultView);
- return;
- }
-
-
- if (url == doc.URL) { // full page content, just reload
- this.quickReload(doc.defaultView);
- return;
- }
-
- this.setExpando(a, "removedNode", null);
- extras.allowed = true;
- extras.placeholder = null;
- this.delayExec(function() {
- var jsEnabled = ns.isJSEnabled(ns.getSite(doc.documentURI), doc.defaultView);
- if (ctx.object.parentNode) ctx.object.parentNode.removeChild(ctx.object);
- if ("_display" in ctx.object) ctx.object.style.display = ctx.object._display;
- var obj = ctx.object.cloneNode(true);
-
-
- function reload(slow) {
- ns.log(ns. getObjectURLWithDOM(obj, url, doc.documentURI));
- ns.allowObjectByDOM(obj, url, doc.documentURI, mime);
- if (slow) {
- ns.log("RELOAD")
- DOM.getDocShellForWindow(doc.defaultView).reload(0);
- } else {
- ns.quickReload(doc.defaultView);
- }
- }
- let win = doc.defaultView;
- let isMedia = win && ("HTMLMediaElement" in win) && (obj instanceof win.HTMLMediaElement);
-
- if (isMedia) {
-
- if (jsEnabled && !obj.controls
- && !/(?:=[^&;]{10,}.*){2,}/.test(this.objectKey(url)) // try to avoid infinite loops when more than one long parameter is present in the object key
- ) {
- // we must reload, since the author-provided UI likely had no chance to wire events
-
- let url = doc.URL;
- if (doc.getElementById("movie_player-html5")) {
- // Youtube HTML5 hack, autoclick thumbnail on page reload
- DOM.getDocShellForWindow(doc.defaultView)
- .chromeEventHandler.addEventListener("load", function(ev) {
- try {
- let w = ev.target.defaultView;
- if (w == w.top) {
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, true);
- }
- if (ev.target.URL === url) {
- let attempts = 10;
- w.setTimeout(function() {
- let node = w.document.getElementById("movie_player-html5");
- if (node && (node = node.getElementsByClassName("video-thumbnail")[0])) {
- node.click();
- } else {
- if (attempts-- > 0) w.setTimeout(arguments.callee, 500);
- }
- }, 500);
- }
- } catch(e) {}
- }, true);
- }
-
- reload(true); // normal reload because of http://forums.informaction.com/viewtopic.php?f=10&t=7195
- return;
- }
- obj.autoplay = true;
- }
-
- let parent = a.parentNode;
-
- if (parent && parent.ownerDocument == doc) {
-
- if (jsEnabled) {
-
- if (/IFRAME/i.test(extras.tag) && /^https:\/\/www\.youtube\.com\/embed\//.test(url)) {
- reload();
- return;
- }
-
- ScriptSurrogate.executeSandbox(doc,
- "env.a.__noSuchMethod__ = env.o.__noSuchMethod__ = function(m, a) { return env.n[m].apply(env.n, a) }",
- { a: a, o: ctx.object, n: obj }
- );
- }
-
- this.setExpando(obj, "allowed", true);
- parent.replaceChild(obj, a);
- var style = doc.defaultView.getComputedStyle(obj, '');
-
- let body = doc.body;
- if (body && body.clientWidth === obj.offsetWidth && body.clientHeight === obj.offsetHeight) {
- // full size applet/movie
- reload();
- return;
- }
-
-
- if (jsEnabled && ((obj.offsetWidth || parseInt(style.width)) < 2 || (obj.offsetHeight || parseInt(style.height)) < 2)
- && !/frame/i.test(extras.tag)) {
- let ds = DOM.getDocShellForWindow(doc.defaultView);
- let ch = ds.currentDocumentChannel;
- if (!(ch instanceof Ci.nsIHttpChannel && ch.requestMethod === "POST"))
- Thread.delay(function() {
- if (obj.offsetWidth < 2 || obj.offsetHeight < 2) reload();
- }, 500); // warning, asap() or timeout=0 won't always work!
- }
- ns.syncUI(doc);
- } else {
- reload();
- }
- }, 10);
- return;
-
- },
-
- getSites: function(browser) {
- var sites = {
- scriptCount: 0,
- pluginCount: 0,
- pluginExtras: [],
- pluginSites: [],
- docSites: [],
- recentlyBlocked: [],
- all: [],
- };
- if (browser) {
- if (browser.content) {
- try {
- sites = this._enumerateSites(browser, sites);
- } catch(ex) {
- if (this.consoleDump) this.dump("Error enumerating sites: " + ex + "," + ex.stack);
- }
- } else {
- sites = JSON.parse(JSON.stringify(this.getExpando(browser, "sites", sites)));
- }
- }
- return sites;
- },
-
-
- _collectPluginExtras: function(pluginExtras, extras) {
- for (var e, j = pluginExtras.length; j-- > 0;) {
- e = pluginExtras[j];
- if (e == extras) return false;
- if (e.mime == extras.mime && e.url == extras.url) {
- if (!e.placeholder) {
- pluginExtras.splice(j, 1, extras);
- return true;
- }
- if (e.placeholder == extras.placeholder)
- return false;
- }
- }
- pluginExtras.push(extras);
- return true;
- },
-
- _silverlightPatch: 'HTMLObjectElement.prototype.__defineGetter__("IsVersionSupported", function() { return ((/^application\\/x-silverlight\\b/.test(this.type)) ? (n) => true : undefined); });',
-
- _protectNamePatch: "let x=__lookupSetter__(\"name\");__defineSetter__(\"name\",function(n){let s=document.currentScript;if(s&&/\\bname\\b/.test(s.textContent)){console.log(\"NoScript prevented \\\"\" + n + \"\\\" from being assigned to window.name\")}else{x.call(this,n);}})",
- get _flashPatch() {
- delete this._flashPatch;
- return this._flashPatch = function() {
- var type = "application/x-shockwave-flash";
- var ver;
- var setAttribute = HTMLObjectElement.prototype.setAttribute;
- HTMLObjectElement.prototype.setAttribute = function(n, v) {
- if (n == "type" && v == type && !this.data) {
- this._pendingType = v;
-
-
- this.SetVariable = (...args) => this.__proto__.SetVariable.apply(this, args);
- this.GetVariable = function(n) {
- if (n !== "$version") return this.__proto__.SetVariable.apply(this, arguments);
-
- if (!ver) {
- ver = navigator.plugins["Shockwave Flash"]
- .description.match(/(\d+)\.(\d+)(?:\s*r(\d+))?/);
- ver.shift();
- ver.push('99');
- ver = "WIN " + ver.join(",");
- }
-
- return ver;
- }
- }
-
- setAttribute.call(this, n, v);
- if (n === "data" && ("_pendingType" in this) && this._pendingType === type) {
- setAttribute.call(this, "type", type);
- this._pendingType = null;
- }
- };
-
- }.toSource() + "()";
- },
-
- _attachSilverlightExtras: function(embed, extras) {
- extras.silverlight = true;
- var pluginExtras = this.findPluginExtras(embed.ownerDocument);
- if (this._collectPluginExtras(pluginExtras, extras)) {
- extras.site = this.getSite(extras.url);
- try {
- // try to work around the IsInstalled() Silverlight machinery
- if (!embed.firstChild) { // dummy embed
- exras.dummy = true;
- return null;
- }
- extras.dummy = false;
- } catch(e) {
- if(this.consoleDump) this.dump(e);
- }
- }
- return embed;
- },
-
-
- traverseObjects: function(callback, self, browser) {
- return this.traverseDocShells(function(docShell) {
- let document = docShell.document;
- if (document) {
- for (let t of ["object", "embed"]) {
- for (let node of Array.slice(document.getElementsByTagName(t), 0)) {
- if (callback.call(self, node, browser))
- return true;
- }
- };
- }
- return false;
- }, self, browser);
- },
-
- traverseDocShells: function(callback, self, browser) {
- if (!browser) {
- const bi = DOM.createBrowserIterator();
- while((browser = bi.next()))
- if (this.traverseDocShells(callback, self, browser))
- return true;
-
- return false;
- }
-
- const docShells = browser.docShell.getDocShellEnumerator(
- Ci.nsIDocShellTreeItem.typeContent,
- browser.docShell.ENUMERATE_FORWARDS
- );
-
- const nsIDocShell = Ci.nsIDocShell;
- const nsIWebNavigation = Ci.nsIWebNavigation;
-
- while (docShells.hasMoreElements()) {
- let docShell = docShells.getNext();
- if (docShell instanceof nsIDocShell && docShell instanceof nsIWebNavigation) {
- try {
- if (callback.call(self, docShell))
- return true;
- } catch (e) {
- if (this.consoleDump) this.dump("Error while traversing docshells: " + e + ", " + e.stack);
- }
- }
- }
- return false;
- },
-
- _enumerateSites: function(browser, sites) {
-
- const nsIDocShell = Ci.nsIDocShell;
-
- let all = sites.all;
- let docShell = browser.docShell;
- var document, topWin;
- sites.docJSBlocked = !docShell.allowJavascript;
- try {
- sites.cspBlocked = /\b(?:sandbox|script-src\s+'none')\s*(?:[,;]|$)/
- .test(docShell.currentDocumentChannel.QueryInterface(Ci.nsIHttpChannel)
- .getResponseHeader("Content-Security-Policy"));
- } catch (e) {
- sites.cspBlocked = false;
- }
-
- try {
- this.traverseDocShells(function(docShell) {
-
- let document = docShell.document;
- if (!document) return;
-
- // Truncate title as needed
- if (this.truncateTitle && document.title.length > this.truncateTitleLen) {
- document.title = document.title.substring(0, this.truncateTitleLen);
- }
-
- // Collect document / cached plugin URLs
- let win = document.defaultView;
- let docURI = document.documentURI;
- let url = this.getSite(docURI);
-
- if (url) {
- try {
- let domain = document.domain;
- if (domain && domain != this.getDomain(url, true) && url != "chrome:" && url != "about:blank") {
- // temporary allow changed document.domain on allow page
- if (this.getExpando(browser, "allowPageURL") == browser.docShell.currentURI.spec &&
- this.getBaseDomain(domain).length >= domain.length &&
- !(this.isJSEnabled(domain) || this.isUntrusted(domain))) {
- this.setTemp(domain, true);
- this.setJSEnabled(domain, true);
- this.quickReload(win);
- }
- all.unshift(domain);
- }
- } catch(e) {}
-
- sites.docSites.push(url);
- all.push(url);
-
- for (let redir of this.getRedirCache(browser, docURI)) {
- all.push(redir.site);
- }
- }
-
- let domLoaded = !!this.getExpando(document, "domLoaded");
- if (!topWin) {
- topWin = win.top;
- sites.topSite = url;
- if (domLoaded) this.setExpando(browser, "allowPageURL", null);
- }
-
- let loaded = !((docShell instanceof nsIWebProgress) && docShell.isLoadingDocument);
- if (!(domLoaded || loaded))
- return;
-
- this.processObjectElements(document, sites);
- this.processScriptElements(document, sites, url);
-
- }, this, browser);
-
- document = topWin.document;
- let cache = this.getExpando(document, "objectSites");
- if(cache) {
- if(this.consoleDump & LOG_CONTENT_INTERCEPT) {
- try { // calling toSource() can throw unexpected exceptions
- this.dump("Adding plugin sites: " + cache.toSource() + " to " + all.toSource());
- } catch(e) {
- this.dump("Adding " + cache.length + " cached plugin sites");
- }
- }
- if (!this.contentBlocker || this.alwaysShowObjectSources)
- all.push.apply(all, cache);
-
- all.push.apply(sites.pluginSites, cache);
- }
-
- cache = this.getExpando(topWin, "codeSites");
- if (cache) all.push.apply(all, [...cache]);
-
- const removeBlank = !(this.showBlankSources || sites.topSite == "about:blank");
-
- for (let j = all.length; j-- > 0;) {
- let url = all[j];
- if (/:/.test(url) &&
- (removeBlank && url == "about:blank" ||
- !(
- /^(?:file:\/\/|[a-z]+:\/*[^\/\s]+)/.test(url) ||
- // doesn't this URL type support host?
- this.getSite(url + "x") == url
- )
- ) && url != "about:"
- ) {
- all.splice(j, 1); // reject scheme-only URLs
- }
- }
- } catch (e) {
- Cu.reportError(e);
- }
- sites.recentlyBlocked = this.recentlyBlocked;
-
- if (!sites.topSite) sites.topSite = all[0] || '';
- sites.all = this.sortedSiteSet(all);
- return sites;
- },
-
- findOverlay: function(browser) {
- return browser && browser.ownerDocument.defaultView.noscriptOverlay;
- },
-
-
- // nsIChannelEventSink implementation
- asyncOnChannelRedirect: function(oldChan, newChan, flags, redirectCallback) {
- this.onChannelRedirect(oldChan, newChan, flags);
- redirectCallback.onRedirectVerifyCallback(0);
- },
- onChannelRedirect: function(oldChan, newChan, flags) {
- const uri = newChan.URI;
-
- if (flags === Ci.nsIChannelEventSink.REDIRECT_INTERNAL && oldChan.URI.spec === uri.spec)
- return;
-
- const rw = this.requestWatchdog;
-
- ns.reqData(newChan).redirectFrom = oldChan.URI;
- this.reqData(newChan).redirectFrom = oldChan.URI;
- ABE.updateRedirectChain(oldChan, newChan);
-
- const ph = PolicyState.detach(oldChan);
-
- var browser;
-
- if (ph) {
- // 0: aContentType, 1: aContentLocation, 2: aRequestOrigin, 3: aContext, 4: aMimeTypeGuess, 5: aInternalCall
-
- ph.contentLocation = uri;
-
- var ctx = ph.context;
- var type = ph.contentType;
-
- if (type != 11 && !this.isJSEnabled(oldChan.URI.spec))
- ph.requestOrigin = oldChan.URI;
-
- try {
- ph.mimeType = newChan.contentType || oldChan.contentType || ph.mimeType;
- } catch(e) {}
-
-
- let win;
- try {
- win = IOUtil.findWindow(newChan);
- } catch (e) {}
-
- switch(type) {
- case 2: case 9: // script redirection? cache site for menu
- try {
- var site = this.getSite(uri.spec);
- if (!win) win = ctx && ((ctx instanceof Ci.nsIDOMWindow) ? ctx : ctx.ownerDocument.defaultView);
- browser = win && (DOM.findBrowserForNode(win) || DOM.getFrameMM(win));
- if (browser) {
- this.getRedirCache(browser, win.top.document.documentURI)
- .push({ site: site, type: type });
- } else {
- if (this.consoleDump) this.dump("Cannot find window for " + uri.spec);
- }
- } catch(e) {
- if (this.consoleDump) this.dump(e);
- }
- break;
-
- case 7: // frame
-
- ph.extra = CP_FRAMECHECK;
- if (win && win.frameElement && ph.context != win.frameElement) {
- // this shouldn't happen
- if (this.consoleDump) this.dump("Redirected frame change for destination " + uri.spec);
- ph.context = win.frameElement;
- }
- break;
- }
-
- if (this.shouldLoad.apply(this, ph.toArray()) != CP_OK) {
- if (this.consoleDump) {
- this.dump("Blocked " + oldChan.URI.spec + " -> " + uri.spec + " redirection of type " + type);
- }
- throw "NoScript aborted redirection to " + uri.spec;
- }
- }
-
-
- // Document transitions
-
- if ((oldChan.loadFlags & rw.DOCUMENT_LOAD_FLAGS) || (newChan.loadFlags & rw.DOCUMENT_LOAD_FLAGS) && oldChan.URI.prePath != uri.prePath) {
- if (newChan instanceof Ci.nsIHttpChannel)
- HTTPS.onCrossSiteRequest(newChan, oldChan.URI.spec,
- browser || DOM.findBrowserForNode(IOUtil.findWindow(oldChan)), rw);
-
- }
-
- },
-
- getRedirCache: function(browser, uri) {
- var redirCache = this.getExpando(browser, "redirCache", {});
- return redirCache[uri] || (redirCache[uri] = []);
- },
-
- _recentlyBlockedMax: 40,
- recentlyBlocked: [],
- recordBlocked: function(site, origin) {
- if (!this.getPref("showRecentlyBlocked")) return;
- let l = this.recentlyBlocked;
- let pos = l.length;
- while (pos-- > 0) if (l[pos].site === site) break;
-
- let entry;
- if (pos > -1) {
- entry = l[pos];
- let origins = entry.origins;
- if (origins.indexOf(origin) == -1) origins.push(origin);
- if (pos == l.length - 1) return;
- l.splice(pos, 1);
- } else entry = { site: site, origins: [origin] };
-
- l.push(entry);
- if (l.length > this._recentlyBlockedMax) {
- this.recentlyBlocked = l.slice(- this._recentlyBlockedMax / 2);
- }
- },
-
- cleanupRequest: DUMMY_FUNC,
-
- get _inclusionTypeInternalExceptions() {
- delete this._inclusionTypeInternalExceptions;
- return this._inclusionTypeInternalExceptions = new AddressMatcher("https://*.ebaystatic.com/*");
- },
-
- hasNoSniffHeader: function(channel) {
- for (let x = true, header = "X-Content-Type-Options";;) {
- try {
- return channel.getResponseHeader(header).toLowerCase() === "nosniff";
- break;
- } catch(e) {}
- if (x) {
- header = header.substring(2);
- x = false;
- } else {
- return false;
- }
- }
- },
-
- checkInclusionType: function(channel) {
- try {
- if (channel instanceof Ci.nsIHttpChannel &&
- Math.round(channel.responseStatus / 100) != 3) {
- var ph = PolicyState.extract(channel);
- if (ph) {
- let ctype = ph.contentType;
-
- // 2 JS, 4 CSS
- if (!(ctype === 2 || ctype === 4)) return true;
-
- let nosniff = ns.nosniff && ctype === 2;
-
- if (nosniff) nosniff = this.hasNoSniffHeader(channel);
-
- if (!(nosniff || ns.inclusionTypeChecking))
- return true;
-
- let origin = ABE.getOriginalOrigin(channel) || ph.requestOrigin;
-
- if (nosniff || origin && this.getBaseDomain(this.getDomain(origin)) !== this.getBaseDomain(channel.URI.host)) {
-
- var mime;
- try {
- mime = channel.contentType;
- } catch (e) {
- mime = "UNKNOWN";
- }
-
- let okMime =
- ctype === 3
- ? !nosniff || /\bimage\//i.test(mime)
- : (ctype === 2
- ? (nosniff
- ? /(?:script|\bjs(?:on)?)\b/i // strictest
- : /(?:script|\b(?:js(?:on)?)|css)\b/i) // allow css mime on js
- : (PolicyUtil.isXSL(ph.context) || ph.mimeType.indexOf("/x") > 0) ? /\bx[ms]l/i : /\bcss\b/i
- ).test(mime);
-
- if (okMime) return true;
-
- let uri = channel.URI;
- let url = uri.spec;
-
-
- let disposition;
- try {
- disposition = channel.getResponseHeader("Content-disposition");
- } catch(e) {}
-
-
- if (!disposition) {
-
- let ext;
- if (uri instanceof Ci.nsIURL) {
- ext = uri.fileExtension;
- if (!ext) {
- var m = uri.directory.match(/\.([a-z]+)\/$/);
- if (m) ext = m[1];
- }
- } else ext = '';
-
- if (ext &&
- (ctype === 2 && /^js(?:on)?$/i.test(ext) ||
- ctype === 4 && (ext == "css" || ext == "xsl" && (PolicyUtil.isXSL(ph.context) || ph.mimeType.indexOf("/x") > 0)))
- ) {
- // extension matches and not an attachment, likely OK
- return true;
- }
-
- // extension doesn't match, let's check the mime
-
-
- if ((/^text\/.*ml$|unknown/i.test(mime) ||
- mime === "text/plain" && !(ext && /^(?:asc|log|te?xt)$/.test(ext)) // see Apache's magic file, turning any unkown ext file containing JS style comments into text/plain
- ) && !this.getPref("inclusionTypeChecking.checkDynamic", false)) {
- // text/html or xml or text/plain with non-text ext, let's assume a misconfigured dynamically served script/css
- if (this.consoleDump) this.dump(
- "Warning: mime type " + mime + " for " +
- (ctype == 2 ? "Javascript" : "CSS") + " served from " +
- uri.spec);
- return true;
- }
- } else mime = mime + ", " + disposition;
-
- if (this._inclusionTypeInternalExceptions.test(url) ||
- new AddressMatcher(this.getPref("inclusionTypeChecking.exceptions", "")).test(url))
- return true;
-
- // every check failed, this is a fishy cross-site mistyped inclusion
-
- this.log("[NoScript] Blocking " + (nosniff ? "nosniff " : "cross-site ") +
- (ctype === 2 ? "Javascript" : ctype === 3 ? "image" : "CSS") +
- " served from " +
- url +
- " with wrong type info " + mime + " and included by " + (origin && origin.spec));
- IOUtil.abort(channel);
- return false;
- }
- }
- }
- } catch(e) {
- if (this.consoleDump) this.dump("Error checking inclusion type for " + channel.name + ": " + e);
- }
- return true;
- },
-
- onContentSniffed: function(req) {
- try {
- let contentType;
- let nosniff = this.nosniff && this.hasNoSniffHeader(req);
- try {
- contentType = req.contentType;
- if (!contentType || contentType === "application/x-unknown-content-type") {
- contentType = req.getResponseHeader("Content-type");
- if (nosniff) {
- nosniff = !contentType;
- }
- } else {
- nosniff = false;
- }
- if (this.consoleDump & LOG_SNIFF) {
- this.dump("OCS: " + req.name + ", " + contentType);
- }
- } catch(e) {
- this.dump("OCS: " + req.name + ", CONTENT TYPE UNAVAILABLE YET");
- if (!nosniff) return; // we'll check later in http-on-examine-merged-response
- }
- if (nosniff) {
- try {
- contentType = req.contentType = "text/plain";
- ns.log("[NoScript] Force text/plain for missing content-type on " + req.name);
- } catch(e) {
- ns.dump(e);
- }
- }
- if (IOUtil.isMediaDocOrFrame(req, contentType)) {
- IOUtil.suspendChannel(req);
- Thread.delay(() => IOUtil.resumeParentChannel(req), 100);
- }
- this.processXSSInfo(req);
- } catch(e) {
- if (this.consoleDump) this.dump(e);
- }
- },
-
- onBeforeLoad: function(win) {
- let docShell = DOM.getDocShellForWindow(win);
- if (!docShell) return;
- let channel = docShell.currentDocumentChannel;
- if (!channel) return;
- this.unserializeReqData(channel);
-
- const uri = channel.URI;
- const originURI = ABE.getOriginalOrigin(channel);
-
- let contentType;
- try {
- contentType = channel.contentType;
- } catch(e) {
- contentType = "";
- }
-
- const topWin = win == win.top;
-
- if (ns.reqData(channel).checkWindowName) {
- InjectionChecker.checkWindowName(win, channel.URI.spec);
- }
-
- if (!IOUtil.isMediaDocOrFrame(channel, contentType)) {
- return;
- }
-
- try {
- let body = win.document.body;
- let media = body && body.children.length === 1 && body.firstChild;
- if (!(media instanceof win.HTMLMediaElement)) media = null;
- if (this.shouldLoad(media ? 15 : 7, uri, topWin ? uri : originURI || uri, media || win.frameElement || win, contentType,
- win.frameElement ? CP_FRAMECHECK : CP_SHOULDPROCESS) !== CP_OK) {
-
- channel.loadFlags |= channel.INHIBIT_CACHING;
-
- if (this.consoleDump & LOG_CONTENT_INTERCEPT)
- this.dump("Media document content type detected");
-
- if (media) {
- if (this.consoleDump & LOG_CONTENT_BLOCK)
- this.dump("Aborting media " + contentType);
- IOUtil.abort(channel);
- return;
- }
-
-
- if(!topWin) {
- // check if this is an iframe
-
- if (win.frameElement && !(win.frameElement instanceof win.HTMLFrameElement) &&
- this.shouldLoad(5, uri, originURI || IOS.newURI(win.parent.location.href, null, null),
- win.frameElement, contentType, CP_SHOULDPROCESS) === CP_OK) {
- IOUtil.resumeParentChannel(channel);
- return;
- }
-
- if (this.consoleDump & LOG_CONTENT_BLOCK)
- this.dump("Deferring framed media document");
-
- var url = uri.spec;
-
- let browser = DOM.findBrowserForNode(win) || DOM.getFrameMM(win);
- this.getRedirCache(browser, win.top.document.documentURI).push({site: this.getSite(url), type: 7});
-
-
- Thread.asap(function() {
- IOUtil.abort(channel);
- if (docShell) {
- var doc = docShell.document;
- let tag = doc.body && doc.body.firstChild && doc.body.firstChild.tagName;
- if (tag) {
- docShell.loadURI(ns.createPluginDocumentURL(url,
- tag ),
- Ci.nsIWebNavigation.LOAD_FLAGS_REPLACE_HISTORY,
- null, null, null);
- }
- }
- });
-
- return;
- }
-
- this.dump("Blocking top-level plugin document");
- Thread.asap(() => {
- IOUtil.abort(channel);
- for (let tag of ["embed", "video", "audio"]) {
- let embeds = win.document.getElementsByTagName(tag);
- if (embeds.length > 0 && (tag !== "embed" || this._abortPluginDocLoads)) {
- let eType = "application/x-noscript-blocked";
- let eURL = "data:" + eType + ",";
- for (let j = embeds.length; j-- > 0;) {
- let e = embeds.item(j);
- if (this.shouldLoad(5, uri, null, e, contentType, CP_SHOULDPROCESS) !== CP_OK) {
- e.src = eURL;
- e.type = eType;
- }
- }
- }
- }
- }, true);
-
- return;
- }
- } catch (e) {
- Cu.reportError(e);
- IOUtil.abort(channel);
- }
- IOUtil.resumeParentChannel(channel);
- },
-
- get _abortPluginDocLoads() {
- delete this._abortPluginDocLoads;
- return (this._abortPluginDocLoads = this.geckoVersionCheck("18.0.1") < 0);
- },
-
- processXSSInfo(req) {
- let browser = IOUtil.findBrowser(req);
- if (browser) {
- let overlay = this.findOverlay(browser);
- if (overlay) {
- overlay.setMetaRefreshInfo(null, browser);
- let xssInfo = ns.reqData(req).XSS;
- if (xssInfo) xssInfo.browser = browser;
- this.requestWatchdog.unsafeReload(browser, false);
- if (xssInfo) {
- this.delayExec(() => overlay.notifyXSS(xssInfo), 500);
- }
- }
- }
- },
-
- hasClearClickHandler: false,
- get clearClickHandler() {
- delete this.clearClickHandler;
- this.hasClearClickHandler = true;
- return this.clearClickHandler = new ClearClickHandler(this);
- },
-
- _pageModMaskRx: /^(?:chrome|resource|view-source):/,
- onWindowSwitch: function(url, win, docShell) {
- let channel = docShell.currentDocumentChannel;
-
- if (ns.reqData(channel).xssChecked &&
- this.filterBadCharsets(docShell)) return;
-
- const doc = docShell.document;
- const flag = "__noScriptEarlyScripts__";
- if (flag in doc && doc[flag] === url) return;
- doc[flag] = url;
-
- const site = this.getSite(url);
- var jsBlocked = !(docShell.allowJavascript && (this.jsEnabled || this.isJSEnabled(site, doc.defaultView)));
-
-
-
- if (!((docShell instanceof nsIWebProgress) && docShell.isLoadingDocument)) {
- // likely a document.open() page
- url = "wyciwyg:"; // don't execute on document.open() pages with a misleading URL
- jsBlocked = false;
- }
-
- if (channel) {
- this.setExpando(win, "docJSBlocked", ns.reqData(channel).docJBlocked);
- }
-
- if (this._pageModMaskRx.test(url)) return;
-
- var scripts;
-
- if (jsBlocked) {
- this.blockEvents(doc.defaultView);
- } else {
-
- if (this.implementToStaticHTML && !("toStaticHTML" in doc.defaultView)) {
- scripts = [this._toStaticHTMLDef];
- }
-
- let dntPatch = DoNotTrack.getDOMPatch(docShell);
- if (dntPatch) {
- (scripts || (scripts = [])).push(dntPatch);
- }
-
- if (this.forbidWebGL) {
- let script = WebGLInterception.hook(doc, site);
- if (script) (scripts || (scripts = [])).push(script);
- }
-
- if (this.contentBlocker) {
- if (this.liveConnectInterception && this.forbidJava &&
- !this.isAllowedObject(site, "application/x-java-vm", site, site)) {
- (doc.defaultView.wrappedJSObject || doc.defaultView).disablePlugins = this._disablePlugins;
- (scripts || (scripts = [])).push(this._liveConnectInterceptionDef);
- }
- if (this.audioApiInterception && this.forbidMedia &&
- !this.isAllowedObject(site, "audio/ogg", site, site))
- (scripts || (scripts = [])).push(this._audioApiInterceptionDef);
-
- if (this.forbidMedia && this.contentBlocker) {
- let script = MSEInterception.hook(doc, site);
- if (script) (scripts || (scripts = [])).push(script);
- }
- }
-
- if (this.forbidFlash && this.flashPatch)
- (scripts || (scripts = [])).push(this._flashPatch);
-
- if (this.forbidSilverlight && this.silverlightPatch)
- (scripts || (scripts = [])).push(this._silverlightPatch);
-
- if( this.jsHackRegExp && this.jsHack && this.jsHackRegExp.test(url))
- (scripts || (scripts = [])).push(this.jsHack);
-
- if (ns.reqData(channel).protectName && this.getPref("protectWindowNameXAssignment")) {
- (scripts || (scripts = [])).push(this._protectNamePatch);
- }
- }
-
- ScriptSurrogate.apply(doc, url, url, jsBlocked, scripts);
- },
-
- onWindowCreated: function(window, site) {
- if (this.consoleDump) this.dump(`1st onWindowCreated ${site}`);
- try {
- this.beforeScripting(window, site);
- } catch(e) {
- Cu.reportError(e);
- }
- (this.onWindowCreated = this._onWindowCreatedReal).apply(this, arguments);
- },
-
- isBrowserOrigin: (origin) => /^(?:\[System Principal\]$|moz-safe-about:)/.test(origin),
-
- mustBlockJS: function(window, site, blocker) {
- let document = window.document;
- let origin = this.getPrincipalOrigin(this.getPrincipal(document));
- if (this.isBrowserOrigin(origin)) return false;
- let blockIt;
- if (this.consoleDump) this.dump("Window created, origin: " + origin + ", site: " + site + ", URL: " + document.URL + ", location: " + window.location.href);
-
- site = this.getSite(origin || site);
- if (site === 'moz-nullprincipal:') {
- site = this.getSite(document.URL);
-
- if (!site) {
- // "special" URI (e.g. data:), let's use opener
- let docShell = DOM.getDocShellForWindow(window);
- let channel = docShell.currentDocumentChannel;
- if (channel) {
- let loadInfo = channel.loadInfo;
- if (loadInfo) {
- let principal = loadInfo.triggeringPrincipal || loadInfo.loadingPrincipal;
- if (principal) site = this.getSite(principal.origin);
- }
- }
- }
- }
-
- window._NoScriptSite = site;
-
- if (this.globalHttpsWhitelist && this.isGlobalHttps(window)) {
- blockIt = false;
- } else {
- if ((this.cascadePermissions || this.restrictSubdocScripting) && window.top !== window) {
- if (this.cascadePermissions) {
- blockIt = blocker.isBlocked(window.top) || this.isUntrusted(site);
- if (!blockIt) {
- let topSite = window.top._NoScriptSite || this.getDocSite(window.top.document);
- blockIt = !this.isJSEnabled(topSite);
- }
- } else if (this.restrictSubdocScripting && blocker.isBlocked(window.parent)) {
- blockIt = true;
- }
- }
- }
-
- if (typeof blockIt === "undefined")
- blockIt = !this.isJSEnabled(site);
-
- if (blockIt) try {
- // If the original content-type was */json but we morphed to text/html, JSON viewer kicked in
- let docShell = DOM.getDocShellForWindow(window);
- let channel = docShell.currentDocumentChannel;
- if (channel instanceof Ci.nsIHttpChannel) {
- let originalContentType = channel.getResponseHeader("Content-Type");
- if (/\/json(?:;|$)/i.test(originalContentType) && channel.contentType === "text/html") blockIt = false;
- }
- } catch (e) {
- this.log(e)
- }
-
- if (!blockIt && site.substring(0, 3) === "ftp") {
- blockIt = InjectionChecker.checkURL(document.URL);
- }
-
- return blockIt;
- },
-
- _onWindowCreatedReal: function(window, site) {
- this.onBeforeLoad(window);
- try {
- let mustBlock = this.mustBlockJS(window, site, WinScript);
- if (this.consoleDump) this.dump(`${mustBlock ? "Forbidding" : "Allowing"} ${site}`);
- if (mustBlock) {
- WinScript.block(window);
- } else {
- WinScript.unblock(window);
- }
- } catch(e) {
- Cu.reportError(e);
- }
- },
-
- beforeScripting: function(subj, url) { // early stub
- try {
- INCLUDE("ScriptlessBGThumbs");
- } catch(e) {
- Cu.reportError(e);
- }
- if (!this.httpStarted) {
-
- let url = subj.location || subj.documentURI;
-
- if (/^(?:about|resource|chrome|file|moz-nullprincipal):/.test(url)) {
- if (/^file|moz-/.test(url))
- this.initContentPolicy(true);
- return;
- }
- if (this.consoleDump) ns.dump(url);
-
- }
- this.executeEarlyScripts = this.onWindowSwitch;
- // replace legacy code paths
- if (subj.documentElement) { // we got document element inserted
- this.onWindowSwitch = null;
- }
- this.beforeScripting = this._beforeScriptingReal;
- this.beforeScripting(subj, url);
- },
- _beforeScriptingReal: function(subj, url) { // the real thing
- const win = subj.defaultView || subj;
- if (win instanceof Ci.nsIDOMChromeWindow) return;
- const docShell = this.dom.getDocShellForWindow(win);
- if (docShell) {
- this.executeEarlyScripts(docShell.document.documentURI, win, docShell);
- }
- },
-
- blockEvents: function(window) {
- let et = ["start", "finish", "bounce"],
- eh = function(e) { e.preventDefault(); e.stopPropagation(); };
-
- return (this.blockEvents = function(window) {
- for (let t of et) window.addEventListener(t, eh, true);
- })(window);
- },
-
- get sanitizeHTML() {
- delete this.sanitizeHTML;
- return this.sanitizeHTML = ("nsIParserUtils" in Ci)
- ? function(s, t) {
- t.innerHTML = Cc["@mozilla.org/parserutils;1"].getService(Ci.nsIParserUtils).sanitize(s, 0)
- }
- : function(s, t) {
- t.appendChild(Cc["@mozilla.org/feed-unescapehtml;1"].getService(Ci.nsIScriptableUnescapeHTML)
- .parseFragment(s, false, null, t));
- };
- },
- get implementToStaticHTML() {
- delete this.implementToStaticHTML;
- return this.implementToStaticHTML = this.getPref("toStaticHTML");
- },
- sanitizeStaticDOM: function(el) {
- // remove attributes from forms
- for (let f of Array.slice(el.getElementsByTagName("form"))) {
- for (let a of Array.slice(f.attributes)) {
- f.removeAttribute(a.name);
- }
- }
- let doc = el.ownerDocument;
- // remove dangerous URLs (e.g. javascript: or data: or reflected XSS URLs)
- for (let a of ['href', 'to', 'from', 'by', 'values']) {
- let res = doc.evaluate('//@' + a, el, null, Ci.nsIDOMXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
- for (let j = res.snapshotLength; j-- > 0;) {
- let attr = res.snapshotItem(j);
- if (InjectionChecker.checkURL(attr.nodeValue))
- attr.nodeValue = "";
- }
- }
- },
- toStaticHTMLHandler: function(ev) {
- try {
- var t = ev.target;
- var doc = t.ownerDocument;
- t.parentNode.removeChild(t);
- var s = t.getAttribute("data-source");
- ns.sanitizeHTML(s, t);
- ns.sanitizeStaticDOM(t);
- } catch(e){ if (ns.consoleDump) ns.dump(e) }
- },
- get _toStaticHTMLDef() {
- delete this._toStaticHTMLDef;
- return this._toStaticHTMLDef =
- "window.toStaticHTML = " +
- (
- function toStaticHTML(s) {
- var t = document.createElement("toStaticHTML");
- t.setAttribute("data-source", s);
- document.documentElement.appendChild(t);
- var ev = document.createEvent("Events");
- ev.initEvent("NoScript:toStaticHTML", true, false);
- t.dispatchEvent(ev);
- return t.innerHTML;
- }
- ).toString();
- },
-
- liveConnectInterception: true,
- get _liveConnectInterceptionDef() {
- delete this._liveConnectInterceptionDef;
- return this._liveConnectInterceptionDef = function() {
- const w = window;
- var dp = w.disablePlugins;
- delete w.disablePlugins;
- const g = function() {
- const d = document;
- const o = d.createElement("object");
- o.type = "application/x-java-vm";
- o.data = "data:" + o.type + ",";
- d.documentElement.appendChild(o);
- d.documentElement.removeChild(o);
- const k = function() {};
- w.__defineGetter__("java", k);
- w.__defineGetter__("Packages", k);
- }
-
- try {
- dp(true);
- w.__defineGetter__("java", g);
- w.__defineGetter__("Packages", g);
- } finally {
- dp(false);
- }
- }.toSource() + "()";
- },
-
- audioApiInterception: true,
- _audioApiInterceptionDef:
- ("defineProperty" in Object)
- ? 'Object.defineProperty(HTMLAudioElement.prototype, "mozWriteAudio", {value: function() {new Audio("data:,")}});'
- : "",
- _disablePlugins: function(b) {
- ns.plugins.disabled = b;
- },
-
- get plugins() {
- delete this.plugins;
- INCLUDE("Plugins");
- return this.plugins = Plugins;
- },
-
- beforeManualAllow: function(win) {
- // reset prevBlock info, to forcibly allow docShell JS
- this.setExpando(win.document, "prevBlocked", { value: "m" });
- },
-
- handleErrorPage: function(win, uri) {
- win = win && win.contentWindow || win;
- if (!win) return;
- var docShell = DOM.getDocShellForWindow(win);
- if (!docShell) return;
-
- docShell.allowJavascript = true;
-
- },
-
-
- // start nsIWebProgressListener
-
-
- onLinkIconAvailable: DUMMY_FUNC,
- onStateChange: function(wp, req, stateFlags, status) {
- var ph;
-
- if (stateFlags & WP_STATE_START) {
- if (req instanceof Ci.nsIChannel) {
- // handle docshell JS switching and other early duties
-
- if (PolicyState.isChecking(req.URI)) {
- // ContentPolicy couldn't complete! DOS attack?
- PolicyState.removeCheck(req.URI);
- IOUtil.abort(req);
- this.log("Aborted " + req.URI.spec + " on start, possible DOS attack against content policy.");
- return;
- }
-
- PolicyState.attach(req); // this is needed after bug 797684 fix, because http observers are notified later
-
- if ((stateFlags & WP_STATE_START_DOC) == WP_STATE_START_DOC) {
- if (!(req instanceof Ci.nsIHttpChannel) && (
- // prevent about:newTab breakage
- req.URI.spec == "about:blank" && !IOUtil.extractInternalReferrer(req) && Bug.$771655 ||
- req.URI.schemeIs("data") && Bug.$789773 ||
- DOM.browserWinURI && req.URI.equals(DOM.browserWinURI)
- )
- ) return;
-
- let w = wp.DOMWindow;
- if (w) {
-
- if (w != w.top && w.frameElement) {
- ph = ph || PolicyState.extract(req);
- if (ph && this.shouldLoad(7, req.URI, ph.requestOrigin, w.frameElement, ph.mimeType, CP_FRAMECHECK) != CP_OK) { // late frame/iframe check
- IOUtil.abort(req);
- return;
- }
- }
- }
- }
- }
- } else if ((stateFlags & WP_STATE_STOP)) {
- // STOP REQUEST
- if (req instanceof Ci.nsIHttpChannel) {
- this.cleanupRequest(req);
-
- if (status === NS_ERROR_CONNECTION_REFUSED || status === NS_ERROR_NOT_AVAILABLE ||
- status === NS_ERROR_UNKNOWN_HOST) { // evict host from DNS cache to prevent DNS rebinding
- try {
- var host = req.URI.host;
- if (host) {
- if (status === NS_ERROR_UNKNOWN_HOST) {
- DNS.invalidate(host);
- } else {
- DNS.evict(host);
- }
- }
- } catch(e) {}
- }
- }
- }
- },
-
- onLocationChange(wp, req, location) {},
- onLocationChange2(wp, req, location, flags) {},
-
- onStatusChange: function(wp, req, status, msg) {
- if (status == 0x804b0003 && (req instanceof Ci.nsIChannel) && typeof ns === "object" && !ABE.isDeferred(req)) { // DNS resolving, check if we need to clear the cache
- try {
- var host = req.URI.host;
- if (host) {
- var loadFlags = req.loadFlags;
- var cached = DNS.getCached(host);
- if (cached.expired ||
- loadFlags & LF_VALIDATE_ALWAYS ||
- loadFlags & LF_LOAD_BYPASS_ALL_CACHES) {
- DNS.evict(host);
- }
- }
- } catch (e) {}
- }
- },
- onSecurityChange: DUMMY_FUNC,
- onProgressChange: DUMMY_FUNC,
- onRefreshAttempted: function(wp, uri, delay, sameURI) {
- if (delay == 0 && !sameURI)
- return true; // poor man's redirection
-
- var pref = this.getPref("forbidBGRefresh");
- try {
- if (!pref || this.prefService.getBoolPref("accessibility.blockautorefresh"))
- return true; // let the browser do its thing
- } catch(e) {}
-
- var win = wp.DOMWindow;
- var currentURL = win.location.href;
- if (!this.appliesHere(pref, currentURL))
- return true;
-
- var browserWin = DOM.mostRecentBrowserWindow;
- if (!(browserWin && "noscriptOverlay" in browserWin))
- return true; // not a regular browser window
-
- var exceptions = new AddressMatcher(this.getPref("forbidBGRefresh.exceptions"));
- if (exceptions && exceptions.test(currentURL))
- return true;
-
- var browser = DOM.findBrowserForNode(win);
- var currentBrowser = browserWin.noscriptOverlay.currentBrowser;
- var docShell = DOM.getDocShellForWindow(win);
-
- var uiArgs = Array.slice(arguments);
-
- var ts = Date.now();
-
- if (browser == currentBrowser) {
- win.addEventListener("blur", function(ev) {
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
- docShell.suspendRefreshURIs();
- hookFocus(false);
- }, false);
- return true; // OK, this is the foreground tab
- }
-
-
- function hookFocus(bg) {
- ns.log("[NoScript] Blocking refresh on unfocused tab, " + currentURL + "->" + uri.spec, false);
- win.addEventListener("focus", function(ev) {
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
- if ((docShell instanceof Ci.nsIRefreshURI) &&
- (bg || docShell.refreshPending)) {
- var toGo = Math.round((delay - (Date.now() - ts)) / 1000);
- if (toGo < 1) toGo = 1;
- ns.setupRefresh(docShell, docShell.currentURI, toGo + ";" + uri.spec);
- docShell.resumeRefreshURIs();
- }
- }, false);
- }
- hookFocus(true);
- return false;
- },
- // end nsIWebProgressListener
-
- _badCharsetRx: /\bUTF-?7\$|^armscii-8$/i,
- _goodCharsetRx: /^UTF-?8$/i,
- filterBadCharsets: function(docShell) {
- try {
- let charsetInfo = docShell.documentCharsetInfo || docShell;
- let cs;
- try {
- cs = charsetInfo.charset;
- } catch (e) {
- cs = docShell.document.characterSet;
- }
-
- if (this._goodCharsetRx.test(cs)) return false;
-
- if(this._badCharsetRx.test(cs)) {
- this.log("[NoScript XSS] Neutralizing bad charset " + cs);
- } else {
- let uri = docShell.currentURI;
- if (!(uri instanceof Ci.nsIURL)) return false;
- let url = unescape(uri.spec);
- try {
- let exceptions = this.getPref("xss.checkCharset.exceptions");
- if (exceptions && AddressMatcher.create(exceptions).test(url)) return false;
- } catch (e) {}
-
- let ic = this.injectionChecker;
- let unicode = /^UTF-?16/i.test(cs) && url.indexOf("\0") !== -1;
- let le = unicode && /LE$/i.test(cs);
-
- function decode(u) {
- if (unicode) {
- let pos = u.indexOf("\0");
- if (pos > -1) {
- if (le) pos--;
- return u.substring(0, pos) + ic.toUnicode(u.substring(pos), cs);
- }
- }
- return ic.toUnicode(u, cs);
- }
-
- let check = (original, decoded) => original === decoded || !ic.checkRecursive(decoded, 1);
-
- let [filePath, query, ref] = ["filePath", "query", "ref"].map((p) => unescape(uri[p]));
-
- if ( // check...
- // ...whole URL
- check(url, decode(url)) &&
- // ...whole path
- check(filePath, decode(filePath)) &&
- // ...path parts
- check(filePath, uri.filePath.split("/").map((p) => decode(unescape(p))).join("/")) &&
- // ... whole query
- check(query, decode(query)) &&
- // ... query parts
- check(query, uri.query.split("&").map((p) => p.split("=").map((p) => decode(unescape(p))).join("=")).join("&")) &&
- // ... fragment
- check(ref, decode(ref))
- ) return false;
-
- this.log("[NoScript XSS] Potential XSS with charset " + cs + ", aborting request");
- }
-
- this.requestWatchdog.abortChannel(docShell.currentDocumentChannel);
- return true;
- } catch(e) {
- ns.log(e)
- if (this.consoleDump) this.dump("Error filtering charset " + e);
- }
- return false;
- },
-
- _attemptNavigationInternal: function(doc, destURL, callback) {
- var cs = doc.characterSet;
- var uri = IOS.newURI(destURL, cs, IOS.newURI(doc.documentURI, cs, null));
-
- if (/^https?:\/\//i.test(destURL)) callback(doc, uri);
- else {
- var done = false;
- var req = ns.createCheckedXHR("HEAD", uri.spec, function() {
- if (req.readyState < 2) return;
- try {
- if (!done && req.status) {
- done = true;
- if (req.status == 200) callback(doc, uri);
- req.abort();
- }
- } catch(e) {}
- }, doc.defaultView);
- req.send(null);
- }
- },
- attemptNavigation: function(doc, destURL, callback) {
- // delay is needed on Gecko < 1.9 to detach browser context
- this.delayExec(this._attemptNavigationInternal, 0, doc, destURL, callback);
- },
-
- // simulate onchange on selects if options look like URLs
- onContentChange: function(ev) {
- var s = ev.originalTarget;
- if (!(s instanceof s.ownerDocument.defaultView.HTMLSelectElement) ||
- s.hasAttribute("multiple") ||
- !/open|nav|location|\bgo|load/i.test(s.getAttribute("onchange"))) return;
-
- var opt = s.options[s.selectedIndex];
- if (!opt) return;
-
- if (/[\/\.]/.test(opt.value) && opt.value.indexOf("@") < 0) {
- this.attemptNavigation(s.ownerDocument, opt.value, function(doc, uri) {
- doc.defaultView.location.href = uri.spec;
- });
- ev.preventDefault();
- }
- },
-
- onContentClick: function(ev) {
-
- if (ev.button == 2) return;
-
- var a = ev.originalTarget;
-
- if (a.__noscriptFixed) return;
-
- var doc = a.ownerDocument;
- let w = doc.defaultView;
-
- let onclick;
-
- while (!(a instanceof w.HTMLAnchorElement || a instanceof w.HTMLAreaElement)) {
- if (typeof(a.getAttribute) == "function" && (onclick = a.getAttribute("onclick"))) break;
- if (!(a = a.parentNode)) return;
- }
-
- const href = a.getAttribute("href");
- // fix JavaScript links
- var jsURL;
- if (href) {
- jsURL = /^javascript:/i.test(href);
- if (!(jsURL || href == "#")) return;
- } else {
- jsURL = "";
- }
-
- onclick = onclick || a.getAttribute("onclick");
- var fixedHref = (onclick && this.extractJSLink(onclick)) ||
- (jsURL && this.extractJSLink(href)) || "";
-
- onclick = onclick || href;
-
- if (/\bsubmit\s*\(\s*\)/.test(onclick)) {
- var form;
- if (fixedHref) {
- form = doc.getElementById(fixedHref); // youtube
- if (!(form instanceof w.HTMLFormElement)) {
- form = doc.forms.namedItem(fixedHref);
- }
- }
- if (!form) {
- var m = onclick.match(/(?:(?:\$|document\.getElementById)\s*\(\s*["']#?([\w\-]+)[^;]+|\bdocument\s*\.\s*(?:forms)?\s*(?:\[\s*["']|\.)?([^\.\;\s"'\]]+).*)\.submit\s*\(\)/);
- form = m && (/\D/.test(m[1]) ? (doc.forms.namedItem(m[1]) || doc.getElementById(m[1])) : doc.forms.item(parseInt(m[1])));
- if (!(form && (form instanceof w.HTMLFormElement))) {
- while ((form = a.parentNode) && form != doc && !form instanceof w.HTMLFormElement);
- }
- }
- if (form && (form instanceof w.HTMLFormElement)) {
- form.submit();
- ev.preventDefault();
- }
- return;
- }
-
- if (fixedHref) {
- var callback;
- if (/^(?:button|input)$/i.test(a.tagName)) { // JS button
- if (a.type == "button" || (a.type == "submit" && !a.form)) {
- callback = function(doc, uri) { doc.defaultView.location.href = uri.spec; };
- } else return;
- } else {
- var evClone = doc.createEvent("MouseEvents");
- evClone.initMouseEvent("click",ev.canBubble, ev.cancelable,
- ev.view, ev.detail, ev.screenX, ev.screenY,
- ev.clientX, ev.clientY,
- ev.ctrlKey, ev.altKey, ev.shiftKey, ev.metaKey,
- ev.button, ev.relatedTarget);
- callback =
- function(doc, uri) {
- a.setAttribute("href", fixedHref);
- var title = a.getAttribute("title");
- a.setAttribute("title", title ? "[js] " + title :
- (onclick || "") + " " + href
- );
- a.dispatchEvent(ev = evClone); // do not remove "ev = " -- for some reason, it works this way only :/
- };
- a.__noscriptFixed = true;
- }
- if (callback) {
- this.attemptNavigation(doc, fixedHref, callback);
- ev.preventDefault();
- }
- } else { // try processing history.go(n) //
- if(!onclick) return;
-
- jsURL = onclick.match(/history\s*\.\s*(?:go\s*\(\s*(-?\d+)\s*\)|(back|forward)\s*\(\s*)/);
- jsURL = jsURL && (jsURL = jsURL[1] || jsURL[2]) && (jsURL == "back" ? -1 : jsURL == "forward" ? 1 : jsURL);
-
- if (!jsURL) return;
- // jsURL now has our relative history index, let's navigate
-
- var docShell = DOM.getDocShellForWindow(doc.defaultView);
- if (!docShell) return;
- var sh = docShell.sessionHistory;
- if (!sh) return;
-
- var idx = sh.index + jsURL;
- if (idx < 0 || idx >= sh.count) return; // out of history bounds
- docShell.gotoIndex(idx);
- ev.preventDefault(); // probably not needed
- }
- },
-
- extractJSLink: function(js) {
- const findLink = /(['"])(.*?)\1/g;
- const badURIChar = /[^\/\w-\?\.#%=&:@]/;
- findLink.lastIndex = 0;
- var maxScore = 0;
- var m, href;
- while ((m = findLink.exec(js))) {
- let s = m[2];
- if (/^https?:\/\//.test(s)) return s;
- let score = (badURIChar.test(s) ? 0 : 3) +
- (s.split("/").length - 1) * 2 +
- s.split("."). length - 1;
- if (score > maxScore) {
- maxScore = score;
- href = s;
- }
- }
- return href || "";
- },
-
-
- checkLocalLink: function(url, principal, fromPolicy) {
-
- if (!this.allowLocalLinks)
- return fromPolicy;
-
- if (!principal) return true;
-
- if (url instanceof Ci.nsIURI) {
- if (!url.schemeIs("file")) return fromPolicy;
- url = url.spec;
- } else if (typeof url !== "string" || url.indexOf("file:///") !== 0) return fromPolicy;
- let site = principal.URI ? principal.URI.spec : this.getPrincipalOrigin(principal);
-
- if (!/^(ht|f)tps?:/.test(site)) return fromPolicy;
-
- let [to, from] = ["to", "from"].map(function(n) { return AddressMatcher.create(ns.getPref("allowLocalLinks." + n, "")) });
-
- return ((from
- ? from.test(site)
- : this.isJSEnabled(this.getSite(site)))
- && (!to || to.test(url))
- );
- },
-
- createXSanitizer: function() {
- return new XSanitizer(this.filterXGetRx, this.filterXGetUserRx);
- },
-
- get externalFilters() {
- delete this.externalFilters;
- if (("nsIProcess2" in Ci || // Fx 3.5
- "runAsync" in Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess) // Fx >= 3.6
- )) {
- INCLUDE("ExternalFilters");
- this.externalFilters = ExternalFilters;
- this.externalFilters.initFromPrefs("noscript.ef.");
- } else this.externalFilters = { enabled: false, supported: false };
- return this.externalFilters;
- },
-
- callExternalFilters: function(ch, cached) {
- var ph = PolicyState.extract(ch);
- if (ph) {
- switch (ph.contentType) {
- case 5: case 12:
- this.externalFilters.handle(ch, ph.mimeType, ph.context, cached);
- }
- }
- },
-
- switchExternalFilter: function(filterName, domain, enabled) {
- var f = this.externalFilters.byName(filterName);
- if (!f) return;
-
- var done;
- if (enabled) {
- done = f.removeDomainException(domain);
- } else {
- done = f.addDomainException(domain);
- }
- if (!done) return;
-
- this.delayExec(this.traverseObjects, 0,
- function(p) {
- const info = this.externalFilters.getObjFilterInfo(p);
- if (!info) return;
-
- if (this.getBaseDomain(this.getDomain(info.url)) == domain) {
- this.externalFilters.log("Reloading object " + info.url);
- var anchor = p.nextSibling;
- p.parentNode.removeChild(p);
- anchor.parentNode.insertBefore(p, anchor);
- }
- }, this);
- },
-
- get compatEvernote() {
- delete this.compatEvernote;
- return this.compatEvernote = ("IWebClipper3" in Ci) && this.getPref("compat.evernote") && {
- onload: function(ev) {
- var f = ev.currentTarget;
- if ((f.__evernoteLoadCount = (f.__evernoteLoadCount || 0) + 1) >= 7) {
- f.removeEventListener(ev.type, arguments.callee, false);
- var id = f.id.replace(/iframe/g, "clipper");
- for (var box = f.parentNode; box && box.id != id; box = box.parentNode);
- if (box) box.parentNode.removeChild(box);
- }
- }
- }
- },
-
- get compatGNotes() {
- delete this.compatGNotes;
- return this.compatGNotes = ("@google.com/gnotes/app-context;1" in Cc) && this.getPref("compat.gnotes") &&
- "http://www.google.com/notebook/static_files/blank.html";
- },
-
- consoleService: Cc["@mozilla.org/consoleservice;1"].getService(Ci.nsIConsoleService),
-
- log: function(msg, dump) {
- if (msg.stack) msg += msg.stack;
- this.consoleService.logStringMessage(msg);
- if (dump) this.dump(msg, true);
- },
-
- logError: function(e, dump, cat) {
- var se = Cc["@mozilla.org/scripterror;1"].createInstance(Ci.nsIScriptError);
- se.init(e.message, e.fileName, /^javascript:/i.test(e.fileName) ? e.fileName : null,
- e.lineNumber, 0, 0, cat || "Component JS");
- if (dump && this.consoleDump) this.dump(e.message, true);
- this.consoleService.logMessage(se);
- },
-
- dump: function(msg, noConsole) {
- if (!this.consoleDump) return;
- if (msg.stack) msg += msg.stack;
- msg = `[NoScript ${this.childProcess ? "C" : "P"}] ${msg}`;
- try {
- dump(`${msg}\n`);
- if(this.consoleLog && !noConsole) this.log(msg);
- } catch (e) {
- this.log(`Error ${e} while logging "${msg}"`);
- }
- },
-
-
-
-}
-
-ns.wrappedJSObject = ns;
-ns.__global__ = this; // debugging helper necessary on Gecko >= 13
-ns._e = function(f) {
- return eval("(" + f + ")()");
-}
-var Main = ns;
-
-
diff --git a/extensions/noscript/chrome/content/noscript/MainChild.js b/extensions/noscript/chrome/content/noscript/MainChild.js
deleted file mode 100644
index 4611d52..0000000
--- a/extensions/noscript/chrome/content/noscript/MainChild.js
+++ /dev/null
@@ -1,870 +0,0 @@
-var MainChild = {
- beforeInit: function() {
- // can't use big preference values in the child process
- INCLUDE("Membrane");
- let proto = PolicySites.prototype;
- proto.toPref = () => {};
- let fromPref = proto.fromPref;
- let wrap = (target, propKey) => propKey === "getCharPref" ?
- name => Services.cpmm.sendSyncMessage(IPC_P_MSG.GET_PREF, {method: propKey, name: target.root + name})[0]
- : target[propKey];
- proto.fromPref = function(pref, ...args) {
- return fromPref.call(this, Membrane.create(pref, wrap), ...args);
- };
- },
- afterInit: function() {
- let snapshot = Services.cpmm.sendSyncMessage(IPC_P_MSG.GET_SNAPSHOT)[0];
- this.setSnapshot(snapshot);
- this.initContentPolicy(true);
- },
-
- "http-on-opening-request": {
- observe: function(channel, topic, data) {
- INCLUDE("Policy");
- delete this.observe;
- (this.observe = this._observe)(channel, topic, data);
- },
- _observe: function(channel, topic, data) {
- if (channel instanceof Ci.nsIHttpChannel) PolicyState.attach(channel);
- }
- },
-
- blockWhereNeeded(browser) {
- this.traverseDocShells(function(docShell) {
- let site = this.getDocSite(docShell.document);
- if (!(this.isJSEnabled(site) || this.checkShorthands(site))) {
- try {
- WinScript.block(docShell.document.defaultView);
- } catch(e) {
- ns.log("Failed blocking " + site + ": " + e);
- }
- }
- return false;
- }, this, browser);
- },
-
- _lastSnapshot: {
- timestamp: 0,
- lastUntrustedSites: null,
- lastTrustedSites: null,
- },
- reload(browser, snapshots, mustReload, reloadPolicy, innerWindowID = 0) {
- let isCurrentFrame = innerWindowID && innerWindowID == browser.content.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
- if (!isCurrentFrame && innerWindowID && reloadPolicy === this.RELOAD_ALL) {
- Thread.delay(() => this.reload(browser, snapshots, mustReload, reloadPolicy), 50);
- return;
- }
-
- this.blockWhereNeeded(browser);
-
- let { previous, current, timestamp } = snapshots;
- let { lastTrusted, lastUntrusted, lastGlobal, lastObjects } = previous;
- if (timestamp !== this._lastSnapshot.timestamp) {
- this.jsPolicySites.sitesString = current.lastTrusted;
- this.untrustedSites.sitesString = current.lastUntrusted;
- this.objectWhitelist = JSON.parse(current.lastObjects);
- this.jsEnabled = current.lastGlobal;
- this._lastSnapshot = {
- timestamp,
- lastTrustedSites: new PolicySites(lastTrusted),
- lastUntrustedSites: new PolicySites(lastUntrusted)
- };
- this.initContentPolicy();
- }
-
- if (!mustReload ||
- !isCurrentFrame && reloadPolicy === this.RELOAD_CURRENT
- ) {
- return;
- }
-
- let { lastTrustedSites, lastUntrustedSites } = this._lastSnapshot;
-
- let webNav = browser.webNavigation || browser.docShell.QueryInterface(Ci.nsIWebNavigation);
- let sites = this.getSites(browser);
- let allSites = sites.all;
- let noFrames = sites.docSites.length === 1;
-
- for (let j = 0, len = allSites.length; j < allSites.length; j++) {
- let site = allSites[j];
-
- let checkTop;
-
- if (j === 0 && noFrames) // top level, if unchanged and forbidden we won't reload
- {
- checkTop = sites.topSite === site;
- if (!checkTop) {
- checkTop = true;
- site = sites.topSite;
- j = allSites.indexOf(site);
- if (j > -1) {
- allSites.splice(j, 1, sites[0]);
- allSites[j = 0] = site;
- } else {
- len++;
- allSites.unshift(site);
- }
- }
- } else checkTop = false;
-
- let prevStatus =
- !(lastGlobal ? this.alwaysBlockUntrustedContent && lastUntrustedSites.matches(site)
- : !(lastTrustedSites.matches(site) || this.checkShorthands(site, lastTrustedSites)) || lastUntrustedSites.matches(site)
- );
- let currStatus = this.isJSEnabled(site) || !!this.checkShorthands(site);
-
- if (currStatus != prevStatus) {
- this.quickReload(webNav);
- return;
- }
-
- if (checkTop && !currStatus) {
- // top level, unchanged and forbidden: don't reload
- j = len;
- break;
- }
- }
-
- // check plugin objects
- if (this.consoleDump & LOG_CONTENT_BLOCK) {
- this.dump("Checking object permission changes...");
- try {
- this.dump(sites.toSource() + ", " + lastObjects);
- } catch(e) {}
- }
- if (this.checkObjectPermissionsChange(sites, JSON.parse(lastObjects))) {
- this.quickReload(webNav);
- }
-
- },
-
-
- reloadAllowedObjectsChild: function(browser, mime) {
- let docShell = browser.docShell.QueryInterface(Ci.nsIWebNavigation);
-
- if (mime === "WebGL" && WebGLInterception.reloadAllowed(docShell))
- return;
-
- if (this.getPref("autoReload.onMultiContent", false)) {
- this.quickReload(docShell);
- return;
- }
- var reloadEmbedders = this.getPref("autoReload.embedders");
- var canReloadPage = reloadEmbedders == 1 ? this.getPref("autoReload") : !!(reloadEmbedders);
-
- var sites = this.getSites(browser);
- var egroup, j, e;
- for (egroup of sites.pluginExtras) {
- for (j = egroup.length; j-- > 0;) {
- e = egroup[j];
- if (this.isAllowedObject(e.url, e.mime, e.site, e.originSite)) {
- if (e.placeholder && e.placeholder.parentNode) {
- e.skipConfirmation = true;
- this.checkAndEnablePlaceholder(e.placeholder);
- } else if (!(e.allowed || e.embed) && canReloadPage) {
- if (e.document) {
- this.quickReload(DOM.getDocShellForWindow(e.document.defaultView));
- break;
- } else {
- this.quickReload(docShell);
- return;
- }
- }
- }
- }
- }
- },
-
- checkObjectPermissionsChange: function(sites, snapshot) {
- if(this.objectWhitelist == snapshot) return false;
- for (let url in snapshot) {
- let s = this.getSite(url);
- if (!(s in snapshot)) snapshot[s] = snapshot[url];
- }
- for (let s of sites.pluginSites) {
- s = this.objectKey(s);
- if ((s in snapshot) && !(s in this.objectWhitelist)) {
- return true;
- }
- }
-
- for (let egroup of sites.pluginExtras) {
- for (let j = 0, len = egroup.length; j < len; j++) {
- let e = egroup[j];
- let url;
- if (!e.placeholder && e.url && ((url = this.objectKey(e.url)) in snapshot) && !(url in this.objectWhitelist)) {
- return true;
- }
- }
- }
- return false;
- },
-
- quickReload: function(webNav, checkNullCache) {
- if (!(webNav instanceof Ci.nsIWebNavigation)) {
- webNav = DOM.getDocShellForWindow(webNav);
- }
-
- var uri = webNav.currentURI;
-
- if (checkNullCache && (webNav instanceof Ci.nsIWebPageDescriptor)) {
- try {
- var ch = IOUtil.newChannel(uri.spec, null, null);
- if (ch instanceof Ci.nsICachingChannel) {
- ch.loadFlags |= ch.LOAD_ONLY_FROM_CACHE;
- ch.cacheKey = webNav.currentDescriptor.QueryInterface(Ci.nsISHEntry).cacheKey;
- if (ch.open().available() == 0) {
- webNav.reload(webNav.LOAD_FLAGS_BYPASS_CACHE);
- return;
- }
- }
- } catch(e) {
- if (this.consoleDump) this.dump(e);
- } finally {
- try {
- ch.close();
- } catch(e1) {}
- }
- }
-
- webNav.reload(webNav.LOAD_FLAGS_CHARSET_CHANGE);
- },
-
- // These catch both Paypal's variant,
- // if (parent.frames.length > 0){ top.location.replace(document.location); }
- // and the general concise idiom with its common reasonable permutations,
- // if (self != top) top.location = location
- _frameBreakNoCapture: /\bif\s*\(\s*(?:(?:(?:window|self|top)\s*\.\s*)*(?:window|self|top)\s*!==?\s*(?:(?:window|self|top)\s*\.\s*)*(?:window|self|top)|(?:(?:window|self|parent|top)\s*\.\s*)*(?:parent|top)\.frames\.length\s*(?:!==?|>)\s*0)\s*\)\s*\{?\s*(?:window\s*\.\s*)?top\s*\.\s*location\s*(?:\.\s*(?:replace|assign)\s*\(|(?:\s*\.\s*href\s*)?=)\s*(?:(?:document|window|self)\s*\.\s*)?location(?:\s*.\s*href)?\s*\)?\s*;?\s*\}?/,
- _frameBreakCapture: /^\(function\s[^\{]+\{\s*if\s*\(\s*(?:(?:(?:window|self|top)\s*\.\s*)*(window|self|top)\s*!==?\s*(?:(?:window|self|top)\s*\.\s*)*(window|self|top)|(?:(?:window|self|parent|top)\s*\.\s*)*(?:parent|top)\.frames\.length\s*(?:!==?|>)\s*0)\s*\)\s*\{?\s*(?:window\s*\.\s*)?top\s*\.\s*location\s*(?:\.\s*(?:replace|assign)\s*\(|(?:\s*\.\s*href\s*)?=)\s*(?:(?:document|window|self)\s*\.\s*)?location(?:\s*.\s*href)?\s*\)?\s*;?\s*\}?/,
- doEmulateFrameBreak: function(w) {
- // If JS is disabled we check the top 5 script elements of the page searching for the first inline one:
- // if it starts with a frame breaker, we honor it.
- var d = w.document;
- var url = d.URL;
- if (url.indexOf("http") !== 0 || this.isJSEnabled(this.getSite(url), w)) return false;
- var ss = d.getElementsByTagName("script");
- var sc, m, code;
- try {
- for (var j = 0, len = 5, s; j < len && (s = ss[j]); j++) {
- code = s.textContent;
- if (code && /\S/.test(code)) {
- if (this._frameBreakNoCapture.test(code)) {
- try {
- sc = sc || new SyntaxChecker();
- var m;
- if (sc.check(code) &&
- (m = sc.lastFunction.toSource().match(this._frameBreakCapture)) &&
- (!m[1] || (m[1] == "top" || m[2] == "top") && m[1] != m[2])) {
- var top = w.top;
-
- var docShell = DOM.getDocShellForWindow(top);
- var allowJavascript = docShell.allowJavascript;
- var allowPlugins = docShell.allowPlugins;
- if (allowJavascript) { // temporarily disable JS & plugins on the top frame to prevent counter-busting
- docShell.allowJavascript = docShell.allowPlugins = false;
- top.addEventListener("pagehide", function(ev) {
- ev.currentTarget.removeEventListener(ev.type, arguments.calle, false);
- docShell.allowJavascript = allowJavascript;
- docShell.allowPlugins = allowPlugins;
- }, false);
- }
- top.location.href = url;
- var body = d.body;
- if (body) while(body.firstChild) body.removeChild(body.firstChild);
- return true;
- }
- } catch(e) {
- this.dump("Error checking " + code + ": " + e.message);
- }
- }
- break; // we want to check the first inline script only
- }
- }
- } finally {
- if (sc) Cu.nukeSandbox(sc.sandbox);
- }
- return false;
- },
-
- knownFrames: {
- _history: {},
- add: function(url, parentSite) {
- var f = this._history[url] || (this._history[url] = []);
- if (f.indexOf(parentSite) > -1) return;
- f.push(parentSite);
- },
- isKnown: function(url, parentSite) {
- var f = this._history[url];
- return f && f.indexOf(parentSite) > -1;
- },
- reset: function() {
- this._history = {};
- }
- },
-
- frameContentLoaded: function(w) {
- if (this.emulateFrameBreak && this.doEmulateFrameBreak(w)) return; // we're no more framed
- },
-
- metaRefreshWhitelist: {},
- processMetaRefresh(document, notifyCallback) {
- let win = document.defaultView;
- var docShell = DOM.getDocShellForWindow(win);
- if (!this.forbidMetaRefresh ||
- this.metaRefreshWhitelist[document.documentURI] ||
- this.isJSEnabled(this.getSite(document.documentURI), win) ||
- !document.getElementsByTagName("noscript")[0]
- ) {
- if (!docShell.allowMetaRedirects) this.disableMetaRefresh(docShell); // refresh blocker courtesy
- return;
- }
- try {
- let rr = document.getElementsByTagName("meta");
- if (!rr[0]) return;
- const refreshRx = /refresh/i;
- for (let refresh of rr) {
- if (!refreshRx.test(refresh.httpEquiv)) continue;
- let node = refresh;
- while (node = node.parentNode) {
- if (node.localName == "noscript")
- break;
- }
- if (!node) continue;
- let content = refresh.content.split(/[,;]/, 2);
- let uri = content[1];
- if (uri && !new AddressMatcher(this.getPref("forbidMetaRefresh.exceptions")).test(document.documentURI)) {
- if (notifyCallback && !(document.documentURI in this.metaRefreshWhitelist)) {
- let timeout = parseInt(content[0]) || 0;
- uri = uri.replace (/^\s*URL\s*=\s*/i, "");
- var isQuoted = /^['"]/.test(uri);
- uri = isQuoted ? uri.match(/['"]([^'"]*)/)[1] : uri.replace(/\s[\s\S]*/, '');
- try {
- notifyCallback({
- baseURI: docShell.currentURI,
- uri: uri,
- timeout: timeout
- });
- } catch(e) {
- dump("[NoScript]: " + e + " notifying meta refresh at " + document.documentURI + "\n");
- }
- }
- document.defaultView.addEventListener("pagehide", function(ev) {
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
- docShell.allowMetaRedirects = true;
- document = docShell = null;
- }, false);
- this.disableMetaRefresh(docShell);
- return;
- }
- }
- } catch(e) {
- dump("[NoScript]: " + e + " processing meta refresh at " + document.documentURI + "\n");
- }
- },
- doFollowMetaRefresh: function(metaRefreshInfo, forceRemember) {
- var document = metaRefreshInfo.document;
- if (forceRemember || this.getPref("forbidMetaRefresh.remember", false)) {
- this.metaRefreshWhitelist[document.documentURI] = metaRefreshInfo.uri;
- }
- var docShell = metaRefreshInfo.docShell || DOM.getDocShellForWindow(document.defaultView);
- this.enableMetaRefresh(docShell);
- if (docShell instanceof Ci.nsIRefreshURI) {
- this.setupRefresh(docShell,
- metaRefreshInfo.baseURI || IOS.newURI(document.documentURI, null, null),
- "0;" + metaRefreshInfo.uri);
- }
- },
- doBlockMetaRefresh: function(metaRefreshInfo) {
- if (this.getPref("forbidMetaRefresh.remember", true)) {
- var document = metaRefreshInfo.document;
- this.metaRefreshWhitelist[document.documentURI] = null;
- }
- },
-
- enableMetaRefresh: function(docShell) {
- if (docShell) {
- docShell.allowMetaRedirects = true;
- docShell.resumeRefreshURIs();
- // if(this.consoleDump) dump("Enabled META refresh on " + (docShell.currentURI && docShell.currentURI.spec) + "\n");
- }
- },
- disableMetaRefresh: function(docShell) {
- if (docShell) {
- docShell.suspendRefreshURIs();
- docShell.allowMetaRedirects = false;
- if (docShell instanceof Ci.nsIRefreshURI) {
- docShell.cancelRefreshURITimers();
- }
- // if(this.consoleDump) dump("Disabled META refresh on " + (docShell.currentURI && docShell.currentURI.spec) + "\n");
- }
- },
-
- setupRefresh: function(docShell, baseURI, header) {
- if (docShell instanceof Ci.nsIRefreshURI)
- try {
- // Gecko <= 16
- docShell.setupRefreshURIFromHeader(baseURI, header);
- } catch (e) {
- docShell.setupRefreshURIFromHeader(baseURI, docShell.document.nodePrincipal, header);
- }
- },
-
- detectJSRedirects: function(document) {
- if (this.jsredirectIgnore) return 0;
-
- try {
- if (document.documentURI.indexOf("http") !== 0) return 0;
-
- let window = document.defaultView;
- if (!window) return 0;
-
- let hasVisibleLinks = this.hasVisibleLinks(document);
- if (!this.jsredirectForceShow && hasVisibleLinks)
- return 0;
-
- let body = document.body;
- if (!body) return 0;
-
- let seen = [];
- let cstyle = document.defaultView.getComputedStyle(body, "");
- if (cstyle) {
- if (cstyle.visibility != "visible") {
- body.style.visibility = "visible";
- }
- if (cstyle.display == "none") {
- body.style.display = "block";
- }
- }
- if (!hasVisibleLinks && (document.links[0] || document.forms[0])) {
- let links = document.links;
- for (let j = 0, len = links.length; j < len; j++) {
- let l = links[j];
- if (!(l.href && l.href.indexOf("http") === 0)) continue;
- l = body.appendChild(l.cloneNode(true));
- l.style.visibility = "visible";
- l.style.display = "block";
- seen.push(l.href);
- }
-
-
- for (let forms = document.forms, j = 0, f; f = forms[j]; j++) {
- if (f.action) {
- let e;
- for (let els = f.elements, k = 0; e = els[k]; k++) {
- if (e.type === "submit") break;
- }
- if (!e) {
- e = document.createElement("input");
- e.type = "submit";
- e.value = f.action.substring(0, 47);
- if (f.action.length > 48) e.value += "...";
- f.appendChild(e);
- }
- }
- }
- }
-
- var code;
- var container = null;
-
- code = body && body.getAttribute("onload");
- const sources = code ? [code] : [];
- var scripts = document.getElementsByTagName("script");
- for (let j = 0, len = scripts.length; j < len; j++)
- sources.push(scripts[j].textContent);
-
- scripts = null;
-
- if (sources.length === 0) return 0;
-
- var follow = false;
- const findURL = /(?:(?:\b(?:open|replace)\s*\(|(?:\b(?:href|location|src|path|pathname|search)|(?:[Pp]ath|UR[IL]|[uU]r[il]))\s*=)\s*['"]|['"](?=https?:\/\/\w|\w*[\.\/\?]))([\?\/\.\w\-%\&][^\s'"]*)/g;
- const MAX_TIME = 1000;
- const MAX_LINKS = 30;
- const ts = Date.now();
- outerLoop:
- for (let j = 0, len = sources.length; j < len; j++) {
- findURL.lastIndex = 0;
- code = sources[j];
- for (let m; m = findURL.exec(code);) {
-
- if (!container) {
- container = document.createElementNS(HTML_NS, "div");
- with (container.style) {
- backgroundImage = 'url("' + this.pluginPlaceholder + '")';
- backgroundRepeat = "no-repeat";
- backgroundPosition = "2px 2px";
- padding = "4px 4px 4px 40px";
- display = "block";
- minHeight = "32px";
- textAlign = "left";
- }
- follow = this.jsredirectFollow && window == window.top &&
- !window.frames[0] &&
- !document.evaluate('//body[normalize-space()!=""]', document, null,
- Ci.nsIDOMXPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
- document.body.appendChild(container);
- }
- let url = m[1];
- if (url.indexOf("\\") !== -1 &&
- url.indexOf('"') === -1 // notice that m[1] is guaranteed not to contain quotes nor whitespace, but we double check anyway :)
- ) {
- // resolve JS escapes, see http://forums.informaction.com/viewtopic.php?f=10&t=8792
- let sandbox = new Cu.Sandbox("about:blank");
- try {
- url = Cu.evalInSandbox('"' + url + '"', sandbox); // this is safe, since we've got no quotes...
- } catch(e) {
- // ...but a trailing backslash could cause a (harmless) syntax error anyway
- } finally {
- Cu.nukeSandbox(sandbox);
- }
- }
- let a = document.createElementNS(HTML_NS, "a");
- a.href = url;
- container.appendChild(a);
- if (a.href.toLowerCase().indexOf("http") != 0 || seen.indexOf(a.href) > -1) {
- container.removeChild(a);
- continue;
- }
- seen.push(a.href);
- a.appendChild(document.createTextNode(a.href));
- container.appendChild(document.createElementNS(HTML_NS, "br"));
-
- if (seen.length >= MAX_LINKS || Date.now() - ts > MAX_TIME) break outerLoop;
- }
-
- if (follow && seen.length == 1) {
- this.log("[NoScript Following JS Redirection]: " + seen[0] + " FROM " + document.location.href);
-
- this.doFollowMetaRefresh({
- uri: seen[0],
- document: document
- });
- }
-
- if (Date.now() - ts > MAX_TIME) break;
- }
- return seen.length;
- } catch(e) {
- this.dump(e.message + " while processing JS redirects");
- return 0;
- }
- },
-
- cpConsoleFilter: [2, 5, 6, 7, 15],
- cpDump: function(msg, aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aInternalCall, aPrincipal) {
- this.dump("Content " + msg + " -- type: " + aContentType + ", location: " + (aContentLocation && aContentLocation.spec) +
- ", requestOrigin: " + (aRequestOrigin && aRequestOrigin.spec) + ", ctx: " +
- (aContext !== null && aContext.tagName ? "<HTML " + aContext.tagName + ">" // try not to cause side effects of toString() during load
- : aContext) +
- ", mime: " + aMimeTypeGuess + ", Internal: " + aInternalCall +
- ", principal.origin: " + (aPrincipal && aPrincipal.origin));
- },
- reject: function(what, args /* [aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aInternalCall, [aPrincipal] ] */) {
-
- if (this.consoleDump) {
- if(this.consoleDump & LOG_CONTENT_BLOCK && args.length >= 6) {
- this.cpDump("BLOCKED " + what, args[0], args[1], args[2], args[3], args[4], args[5], args[6] && args[6]);
- }
- if(this.consoleDump & LOG_CONTENT_CALL) {
- this.dump(new Error().stack);
- }
- }
- switch(args[0]) {
- case 9:
- // our take on https://bugzilla.mozilla.org/show_bug.cgi?id=387971
- args[1].spec = this.nopXBL;
- return CP_OK;
- case 5:
- if (args[3]) args[3].__noscriptBlocked = true;
- }
-
- PolicyState.cancel(args);
-
-
- if (args[1]) {
- let win = DOM.findWindow(args[3]);
- this.recordBlocked(this.getSite(args[1].spec) || "", this.getSite(win && win.location.href || args[2] && args[2].spec));
- }
-
- return CP_REJECT;
- },
-
- nopXBL: "chrome://global/content/bindings/general.xml#basecontrol",
-
- forbiddenXMLRequest: function(aRequestOrigin, aContentLocation, aContext, forbidDelegate) {
- let originURL, locationURL;
- if (aContentLocation.schemeIs("chrome") || aContentLocation.schemeIs("moz-extension") || !aRequestOrigin ||
- // GreaseMonkey Ajax comes from resource: hidden window
- // Google Toolbar Ajax from about:blank
- aRequestOrigin.schemeIs("chrome") || aRequestOrigin.schemeIs("resource") ||
- aRequestOrigin.schemeIs("about") || aRequestOrigin.schemeIs("moz-extension") ||
- // Web Developer extension "appears" to XHR towards about:blank
- (locationURL = aContentLocation.spec) == "about:blank"
- ) return false;
-
- let locationSite = this.getSite(locationURL);
- if (!this.isJSEnabled(locationSite) && this.checkShorthands(locationSite))
- this.autoTemp(locationSite);
-
- var win = aContext && aContext.defaultView;
- if(win) {
- this.cacheCodeSite(win, locationSite);
- }
- return forbidDelegate.call(this, originURL, locationURL, win);
- },
-
- cacheCodeSite(win, site) {
- win = win.top;
- let cache = this.getExpando(win, "codeSites");
- if (!cache) {
- cache = this.setExpando(win, "codeSites", new Set());
- }
- cache.add(site);
- },
-
-
- addFlashVars: function(url, embed) {
- // add flashvars to have a better URL ID
- if (embed instanceof Ci.nsIDOMElement) try {
- var flashvars = embed.getAttribute("flashvars");
- if (!flashvars) {
- let params = embed.getElementsByTagName("param");
- for (let j = 0, p; (p = params[j]); j++)
- if (p.name && p.name.toLowerCase() === "flashvars")
- flashvars = p.value;
- }
- if (flashvars) {
- let yahooRx = /\bYUIBridgeCallback=[^&]+/;
- if (yahooRx.test(flashvars)) {
- let d = embed.ownerDocument;
- let m = d && d.URL.match(/(\d+)\.html\b/);
- flashvars = flashvars.replace(yahooRx, m ? "_YUIvid_=" + m[1] : "");
- }
- let videoId = flashvars.match(/video_?id=[^&]+/);
- url += "#!flashvars#" + encodeURI(videoId && videoId[0] || flashvars);
- }
- } catch(e) {
- if (this.consoleDump) this.dump("Couldn't add flashvars to " + url + ":" + e);
- }
- return url;
- },
-
- addObjectParams: function(url, embed) {
- if (embed instanceof Ci.nsIDOMElement) try {
- var params = embed.getElementsByTagName("param");
- if (!params.length) return url;
-
- var pp = [];
- for(let j = params.length; j-- > 0;) {
- pp.push(encodeURIComponent(params[j].name) + "=" + encodeURIComponent(params[j].value));
- }
- url += "#!objparams#" + pp.join("&");
- } catch (e) {
- if (this.consoleDump) this.dump("Couldn't add object params to " + url + ":" + e);
- }
- return url;
- },
-
- tagWindowlessObject: function(o) {
- const rx = /^(?:opaque|transparent)$/i;
- var b;
- try {
- let tag = o.tagName && o.tagName.toLowerCase();
- if (tag === "embed") {
- b = rx.test(o.getAttribute("wmode"));
- } else if (tag === "object") {
- var params = o.getElementsByTagName("param");
- const wmodeRx = /^wmode$/i;
- for(var j = params.length; j-- > 0 &&
- !(b = wmodeRx.test(params[j].name && rx.test(params[j].value)));
- );
- }
- if (b) this.setExpando(o, "windowless", true);
- } catch (e) {
- if (this.consoleDump) this.dump("Couldn't tag object for window mode.");
- }
- },
-
- isWindowlessObject: function(o) {
- return this.getExpando(o, "windowless") || o.settings && o.settings.windowless;
- },
-
- resolveSilverlightURL: function(uri, embed) {
- if(!uri) return "";
-
-
- if (embed instanceof Ci.nsIDOMElement) try {
-
- var url = "";
- var params = embed.getElementsByTagName("param");
- if (!params.length) return uri.spec;
-
- var name, value, pp = [];
- for (var j = params.length; j-- > 0;) { // iteration inverse order is important for "source"!
- name = params[j].name;
- value = params[j].value;
- if(!(name && value)) continue;
-
- if (!url && name.toLowerCase() == "source") {
- try {
- url = uri.resolve(value);
- continue;
- } catch(e) {
- if (this.consoleDump)
- this.dump("Couldn't resolve Silverlight URL " + uri.spec + " + " + value + ":" + e);
- url = uri.spec;
- }
- }
- pp.push(encodeURIComponent(name) + "=" + encodeURIComponent(value));
- }
- return (url || uri.spec) + "#!objparams#" + pp.join("&");
- } catch(e1) {
- if (this.consoleDump) this.dump("Couldn't resolve Silverlight URL " + uri.spec + ":" + e1);
- }
- return uri.spec;
- },
-
- tagForReplacement: function(embed, pluginExtras) {
- try {
- var doc = embed.ownerDocument;
- if(!doc) {
- if (embed instanceof Ci.nsIDOMDocument) {
- pluginExtras.document = (doc = embed);
- pluginExtras.url = this.getSite(pluginExtras.url);
- this._collectPluginExtras(this.findPluginExtras(doc), pluginExtras);
- }
- } else {
- var node = embed;
- while((node = node.parentNode))
- if (node.__noScriptBlocked)
- return;
- if (!pluginExtras.document) {
- pluginExtras.document = doc;
- }
- var pe = this.getExpando(doc, "pe");
- if (pe === null) this.setExpando(doc, "pe", pe = []);
- pe.push({embed: embed, pluginExtras: pluginExtras});
- }
- try {
- this.syncUI(doc);
- } catch(noUIex) {
- if(this.consoleDump) this.dump(noUIex);
- }
- } catch(ex) {
- if(this.consoleDump) this.dump(
- "Error tagging object [" + pluginExtras.mime + " from " + pluginExtras.url +
- " - embed " + embed +
- "] for replacement: " + ex);
- }
- },
-
- blockLegacyFrame: function(frame, uri, sync) {
-
- var verbose = this.consoleDump & LOG_CONTENT_BLOCK;
- if(verbose) {
- this.dump("Redirecting blocked legacy frame " + uri.spec + ", sync=" + sync);
- }
-
-
- var url = this.createPluginDocumentURL(uri.spec, "iframe");
-
- if(sync) {
- if (verbose) dump("Legacy frame SYNC, setting to " + url + "\n");
- frame.contentWindow.location = url;
- } else {
- frame.ownerDocument.defaultView.addEventListener("load", function(ev) {
- if(verbose) dump("Legacy frame ON PARENT LOAD, setting to " + url + "\n");
- ev.currentTarget.removeEventListener("load", arguments.callee, false);
- frame.contentWindow.location = url;
- }, false);
- }
- return true;
-
- },
-
-
- isPluginDocumentURL: function(url, tag) {
- try {
- return url.replace(/(src%3D%22).*?%22/i, '$1%22') == this.createPluginDocumentURL('', tag)
- } catch(e) {}
- return false;
- },
-
- createPluginDocumentURL: function(url, tag) {
- tag = tag ? tag.toLowerCase() : "embed";
- return 'data:text/html;charset=utf-8,' +
- encodeURIComponent('<html><head></head><body style="padding: 0px; margin: 0px"><' +
- tag + ' src="' + url + '" width="100%" height="100%"></' +
- tag + '></body></html>');
- },
-
- forbiddenIFrameContext: function(originURL, locationURL) {
- if (this.isForbiddenByHttpsStatus(originURL)) return false;
- var domain = this.getDomain(locationURL, true);
- if (!domain) return false;
- switch (this.forbidIFramesContext) {
- case 0: // all IFRAMES
- return true;
- case 3: // different 2nd level domain or either untrusted parent or origin
- if (!(this.untrustedSites.matches(this.getSite(locationURL)) ||
- this.untrustedSites.matches(this.getSite(originURL))))
- return this.getBaseDomain(this.getDomain(originURL, true)) !=
- this.getBaseDomain(domain);
- case 2: // different domain (unless forbidden by HTTPS status)
- if (this.getDomain(originURL, true) != domain) return true;
- // if we trust only HTTPS both sites must have the same scheme
- if (!this.isForbiddenByHttpsStatus(locationURL.replace(/^https:/, 'http:'))) return false;
- case 1: // different site
- return this.getSite(originURL) != this.getSite(locationURL);
- }
- return false;
- },
-
- forbiddenXBLContext: function(originURL, locationURL, window) {
- if (locationURL == this.nopXBL) return false; // always allow our nop binding
-
- var locationSite = this.getSite(locationURL);
- var originSite = this.getSite(originURL);
-
- switch (this.forbidXBL) {
- case 4: // allow only XBL from the same trusted site or chrome (default)
- if (locationSite != originSite) return true; // chrome is checked by the caller checkXML
- case 3: // allow only trusted XBL on trusted sites
- if (!locationSite) return true;
- case 2: // allow trusted and data: (Fx 3) XBL on trusted sites
- if (!(this.isJSEnabled(originSite, window) ||
- locationSite.indexOf("file:") === 0 // we trust local files to allow Linux theming
- )) return true;
- case 1: // allow trusted and data: (Fx 3) XBL on any site
- if (!(this.isJSEnabled(locationSite, window) || /^(?:data|file|resource):/.test(locationURL))) return true;
- case 0: // allow all XBL
- return false;
- }
- return true;
- },
-
- forbiddenXHRContext: function(originURL, locationURL, window) {
- if (!window) {
- // live bookmarks
- return false;
- }
-
- var locationSite = this.getSite(locationURL);
- // var originSite = this.getSite(originURL);
- switch (this.forbidXHR) {
- case 3: // forbid all XHR
- return true;
- case 2: // allow same-site XHR only
- if (locationSite && locationSite != originSite) return true;
- case 1: // allow trusted XHR targets only
- if (locationSite && locationSite !== "moz-nullprincipal:" && !this.isJSEnabled(locationSite, window))
- return true;
- case 0: // allow all XBL
- return false;
- }
- return true;
- },
-};
-
diff --git a/extensions/noscript/chrome/content/noscript/MainParent.js b/extensions/noscript/chrome/content/noscript/MainParent.js
deleted file mode 100644
index 65a6e70..0000000
--- a/extensions/noscript/chrome/content/noscript/MainParent.js
+++ /dev/null
@@ -1,611 +0,0 @@
-Main.OBSERVED_TOPICS.push("http-on-opening-request", "http-on-modify-request");
-LAZY_INCLUDE("IO");
-
-var MainParent = {
- beforeInit: function() {
- this._initE10s();
- },
- afterInit: function() {
-
- if ((this.locked = this.prefs.prefIsLocked("default"))) {
- try {
- const psKey = this.POLICY_NAME + ".sites";
- const dc = this.defaultCaps;
- dc.lockPref("policynames");
- dc.unlockPref(psKey);
- this.resetDefaultSitePrefs();
- dc.setCharPref(psKey, this.policyPB.getCharPref("sites"));
- dc.lockPref(psKey);
- if (dc instanceof PBI) dc.addObserver("default.javascript.", this, true);
- dc.setCharPref("default.javascript.enabled", "noAccess");
- dc.lockPref("default.javascript.enabled");
- this.prefs.lockPref("global");
- } catch(e) {
- this.dump(e);
- }
- }
-
- Thread.delay(this.checkSubscriptions, 10000, this);
-
- this._updateSync();
-
- try {
- let dp = this.prefService.getDefaultBranch("noscript.");
- let snapshot = dp.getCharPref("snapshot");
- this._afterInitSnapshot = snapshot;
- this.setSnapshot(JSON.parse(snapshot));
- this._afterInitTemp = this.tempSites.sitesString;
- this._afterInitTrusted = this.jsPolicySites.sitesString;
- dp.setCharPref("snapshot", "");
- } catch (e) {
- this._afterInitSnapshot = e;
- }
-
- this.reloadWhereNeeded(this.RELOAD_NO); // init snapshots
-
-
-
- if (this.getPref("webext.enabled")) {
- INCLUDE("WebExt");
- this.webExt = WebExt;
- }
- this._afterInited = true;
- },
-
- _initE10s: function() {
- INCLUDE("e10sParent");
- this.onDisposal(() => { if (IPC.parent) IPC.parent.dispose(); });
- },
-
- "http-on-modify-request": {
- observe: function(channel, topic, data) {
- try {
- if (channel instanceof Ci.nsIHttpChannel) {
-
- if (channel.status) {
- if (ns.consoleDump)
- ns.dump("Unexpected! HTTP observer called on aborted channel " +
- channel.name + " (0x" + channel.status.toString(16) + ") - " +
- new Error().stack);
- return;
- }
-
- let ncb = channel.notificationCallbacks;
- let loadFlags = channel.loadFlags;
- if (!(loadFlags || ncb || channel.owner)) {
- try {
- if (channel.getRequestHeader("Content-type") == "application/ocsp-request") {
- if (ns.consoleDump) ns.dump("Skipping cross-site checks for OCSP request " + channel.name);
- return;
- }
- } catch(e) {}
- }
-
- if (ncb) {
- const IBCL = Ci.nsIBadCertListener2;
- let bgReq = ncb instanceof Ci.nsIXMLHttpRequest || ncb instanceof IBCL
- || ("responseXML" in ncb); // for some reason, since Gecko 15 (new XMLHttpRequest() instanceof Ci.nsIXMLHttpRequest) === false
- if (!bgReq) try { bgReq = ncb.getInterface(IBCL); } catch (e) {}
- if (bgReq && !ns.isCheckedChannel(channel)) {
- if (ns.consoleDump) {
- ns.dump("Skipping cross-site checks for chrome background request " + channel.name + ", " + loadFlags + ", " + channel.owner);
- }
- return;
- }
- }
-
- let abeReq = ns.requestWatchdog.onHttpStart(channel);
- }
-
- } catch (e) {
- ns.dump(e + "\n" + e.stack);
- }
- }
- },
-
- onVersionChanged: function(prev) {
- let removalsOnly = !this.getPref("allowWhitelistUpdates");
-
- // update hacks
- var versions = {
- "2.1.1.2rc6": {
- "hotmail.com": "wlxrs.com", // required by Hotmail/Live webmail
- "google.com": "googleapis.com gstatic.com", // required by most Google services and also by external resources
- "addons.mozilla.org": "paypal.com paypalobjects.com" // required for the "Contribute" AMO feature not to break badly with no warning
- },
-
- "2.2.9rc2": {
- "addons.mozilla.org": "persona.org"
- },
-
- "2.4.9rc2": {
- "!browserid.org": "persona.org"
- },
- "2.5.9rc3": {
- "live.com": "gfx.ms afx.ms" // fully Microsoft-controlled (no user content), now required by MS mail services
- },
- "2.6.5.9rc2": {
- "live.com": "sfx.ms" // fully Microsoft-controlled (no user content), now required by MS mail services
- },
- "2.6.6rc5": {
- "live.com": "outlook.com live.net" // fully Microsoft-controlled (no user content), now required by MS mail services
- },
- "2.6.9.4rc1": {
- "vimeo.com": "vimeocdn.com" // no movie will play anymore without this
- },
- "2.6.9.19rc1": {
- "youtube.com": "googlevideo.com" // Youtube's HTML5 video player now requires this
- },
- "2.6.9.22rc1": {
- "prototypejs.org": "bootstrapcdn.com" // Used by many sites, mostly for styles and fonts
- },
- "2.6.9.27": {
- "!vjs.zendcdn.net": "" // removal
- },
- "2.6.9.28rc2": {
- "!googleapis.com": "ajax.googleapis.com" // storage.googleapis.com allows HTML files!
- },
- "2.6.9.30rc1": {
- "!mootools.net": ""
- },
- "2.6.9.30rc2": {
- "!cdnjs.cloudflare.com": "",
- "!prototypejs.org": "",
- "ajax.googleapis.com": "maps.googleapis.com"
- },
- "2.6.9.30rc4": {
- "about:blank": "about:pocket-signup about:pocket-save"
- },
- "2.6.9.30rc5": {
- "!about:packet-save": "about:pocket-saved",
- "!about:pocket-signup": "about:pocket-signup",
- "google.com": "ajax.googleapis.com maps.googleapis.com"
- },
- "2.6.9.35rc1": {
- "!about:pocket-save": "about:pocket-saved",
- "!about:pocket-signup": "about:pocket-signup",
- "google.com": "ajax.googleapis.com maps.googleapis.com"
- },
- "2.6.9.36rc1": {
- "netflix.com": "https://*.nflxvideo.net"
- },
- "5.0.10rc3": {
- "!persona.org": ""
- },
- };
-
- for (let v in versions) {
- if (this.versionComparator.compare(prev, v) < 0) {
- let cascading = versions[v];
- for (let site in cascading) {
- let newSites = !removalsOnly && cascading[site].split(/\s+/).filter(function(s) {
- // check whether browser internal URIs are supported
- if (/^(?:about|chrome|resource):\w/.test(s))
- try {
- IOUtil.newChannel(s, null, null);
- } catch(e) {
- return false;
- }
- return true;
- });
- let replace = site[0] === "!";
- if (replace) site = site.substring(1);
- if (this.isJSEnabled(site)) {
- if (replace) this.jsPolicySites.remove(site, true, false);
- if (!removalsOnly && newSites[0]) {
- this.jsPolicySites.remove(newSites, true, false);
- this.setJSEnabled(newSites, true);
- }
- }
- }
- }
- }
- },
-
- firstRun: false,
- versionChecked: false,
- checkVersion: function(browserStartup = false) {
- if (this.versionChecked) return;
- this.versionChecked = browserStartup;
-
- if (!this.getPref("visibleUIChecked", false) && this.ensureUIVisibility())
- this.setPref("visibleUIChecked", true);
-
- let ver = this.VERSION;
- let prevVer = this.getPref("version", "");
- this.firstRun = prevVer !== ver;
- if (!this.firstRun) {
- prevVer = this.getPref("firstRunRedirection.pending", ver);
- }
- ns.dump(`Checking version - browserStartup=${browserStartup}, ${prevVer} -> ${ver}`);
- if (this.firstRun || prevVer !== ver) {
- if (this.firstRun && prevVer) try {
- this.onVersionChanged(prevVer);
- } catch (ex) {
- Cu.reportError(ex);
- }
- this.setPref("version", ver);
- this.setPref("firstRunRedirection.pending", ver);
- const betaRx = /(?:a|alpha|b|beta|pre|rc)\d*$/; // see http://viewvc.svn.mozilla.org/vc/addons/trunk/site/app/config/constants.php?view=markup#l431
- if (prevVer.replace(betaRx, "") != ver.replace(betaRx, "")) {
- if (!browserStartup) {
- this.setPref("firstRunRedirection.pending", prevVer);
- } else if (this.getPref("firstRunRedirection", true)) {
- const name = "noscript";
- const domain = name.toLowerCase() + ".net";
-
- IOUtil.newChannel("https://" + domain + "/-", null, null).asyncOpen({ // DNS prefetch
- onStartRequest: function() {},
- onStopRequest: function(req, ctx) {
- if (req.status && req.status !== NS_BINDING_REDIRECTED) {
- ns.setPref("version", '');
- ns.savePrefs();
- return;
- }
-
- var browser = DOM.mostRecentBrowserWindow.getBrowser();
- if (typeof(browser.addTab) != "function") return;
-
-
- var url = "https://" + domain + "/?ver=" + ver;
- var hh = "X-IA-Post-Install: " + name + " " + ver;
- if (prevVer) {
- url += "&prev=" + prevVer;
- hh += "; updatedFrom=" + prevVer;
- }
- hh += "\r\n";
-
- var hs = Cc["@mozilla.org/io/string-input-stream;1"] .createInstance(Ci.nsIStringInputStream);
- hs.setData(hh, hh.length);
- hs.seek(0, 0);
-
- var b = (browser.selectedTab = browser.addTab()).linkedBrowser;
- b.stop();
- b.webNavigation.loadURI(url, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null, null, hs);
-
- },
- onDataAvailable: function() {}
- }, {});
- }
- }
- this.savePrefs();
- }
- },
-
- ensureUIVisibility: function() {
-
- try {
- let window = DOM.mostRecentBrowserWindow;
- let document = window.document;
- const tbbId = "noscript-tbb";
- let tbb = document.getElementById(tbbId);
- if (tbb) return false;
-
- try {
- let cui = window.CustomizableUI;
- let widget = cui.getWidget(tbbId);
- if (!(widget && widget.areaType)) {
- cui.addWidgetToArea(tbbId, cui.AREA_NAVBAR);
- }
- } catch (e) { // super-legacy
- let addonBar = document.getElementById("addon-bar");
- if (!addonBar) return false;
-
- let navBar = document.getElementById("nav-bar");
-
- let [bar, refId] =
- addonBar.collapsed && navBar && !navBar.collapsed || !this.getPref("statusIcon", true)
- ? [navBar, "urlbar-container"]
- : [addonBar, "status-bar"];
-
- let set = bar.currentSet.split(/\s*,\s*/);
- if (set.indexOf(tbbId) > -1) return false;
-
- set.splice(set.indexOf(refId), 0, tbbId);
-
- bar.setAttribute("currentset", bar.currentSet = set.join(","));
- document.persist(bar.id, "currentset");
- try {
- window.BrowserToolboxCustomizeDone(true);
- } catch (e) {}
- }
-
- try {
- window.noscriptOverlay.initPopups();
- } catch(e) {}
- return true;
- } catch(e) {
- this.dump(e);
- return false;
- }
- },
-
- checkSubscriptions: function() {
- var lastCheck = this.getPref("subscription.last_check");
- var checkInterval = this.getPref("subscription.checkInterval", 24) * 60000;
- var now = Date.now();
- if (lastCheck + checkInterval > now) {
- this.delayExec(this.checkSubscriptions, lastCheck + checkInterval - now + 1000);
- return;
- }
-
- function load(list, process, goOn) {
- var url = ns.getPref("subscription." + list + "URL");
- if (!url) {
- goOn();
- return;
- }
- var xhr = ns.createCheckedXHR("GET", url, function() {
- if (xhr.readyState === 4) {
- if (xhr.status === 0 || xhr.status === 200) {
- var lists = xhr.responseText.split("[UNTRUSTED]");
- try {
- process(lists[0], lists[1]);
- ns.dump(list + " list at " + url + " loaded.");
- } catch(e) {
- ns.dump(e);
- }
- }
- goOn();
- }
- });
- xhr.send(null);
- }
-
- load("untrusted",
- function(trusted, untrusted) {
- ns.untrustedSites.sitesString += " " + untrusted;
- ns.persistUntrusted();
- },
- function() {
- load("trusted", function(trusted, untrusted) {
- var trustedSites = new PolicySites(trusted);
- trustedSites.remove(ns.untrustedSites.sitesList, true, false);
- ns.flushCAPS(ns.jsPolicySites.sitesString + " " + trustedSites.sitesString);
- }, function() {
- ns.setPref("subscription.lastCheck", Date.now());
- ns.savePrefs(true);
- ns.delayExec(ns.checkSubscriptions, checkInterval);
- });
- }
- );
- },
-
- get builtInSync() {
- var ret = false;
- try {
- ret = this.prefService.getDefaultBranch("services.sync.prefs.sync.javascript.").getBoolPref("enabled");
- } catch (e) {}
- delete this.builtInSync;
- return (this.builtInSync = ret);
- },
-
- _updateSync: function() {
- let t = Date.now();
- this._clearSync();
- if (this.builtInSync && this.getPref("sync.enabled")) this._initSync();
- if (this.consoleDump) this.dump("Sync prefs inited in " + (Date.now() - t));
- },
- _initSync: function() {
-
- try {
- let branch = this.prefService.getDefaultBranch("services.sync.prefs.sync.noscript.");
- for (let key of this.prefs.getChildList("", {})) {
- switch (key) {
- case "version":
- case "preset":
- case "placesPrefs.ts":
- case "mandatory":
- case "default":
- case "ABE.wanIpAsLocal":
- case "ABE.migration":
- case "sync.enabled":
- break;
- default:
- branch.setBoolPref(key, true);
- }
- }
- this.prefService.getDefaultBranch("services.sync.prefs.sync.")
- .setBoolPref(this.policyPB.root + "sites", true);
- } catch(e) {
- this.dump(e);
- }
-
- },
- _clearSync: function() {
- try {
- this.prefService.getBranch("services.sync.prefs.sync.noscript.").deleteBranch("");
- } catch(e) {
- this.dump(e);
- }
- try{
- this.prefService.getBranch("services.sync.prefs.sync." + this.policyPB.root).deleteBranch("");
- } catch(e) {
- this.dump(e);
- }
- },
-
- _dontSerialize: ["version", "temp", "preset", "placesPrefs.ts", "mandatory", "default"],
-
- conf2JSON(excludeDefault = false) {
- const excluded = this._dontSerialize;
- const prefs = {};
- for (let key of this.prefs.getChildList("", {})) {
- if (!(excluded.includes(key) || excludeDefault && !this.prefs.prefHasUserValue(key))) {
- prefs[key] = this.getPref(key);
- }
- }
- return {
- prefs: prefs,
- whitelist: this.getPermanentSites().sitesString,
- V: this.VERSION
- };
- },
-
- serializeConf: function(beauty) {
- const conf = JSON.stringify(this.conf2JSON());
- return beauty ? conf.replace(/([^\\]"[^"]*[,\{])"/g, "$1\r\n\"").replace(/},?(?:\n|$)/g, "\r\n$&") : conf;
- },
-
- restoreConf: function(s) {
- try {
- const json = JSON.parse(s.replace(/[\n\r]/g, ''));
- if (json.ABE) ABE.restoreJSONRules(json.ABE);
-
- const prefs = json.prefs;
- const exclude = this._dontSerialize;
- for (let key in prefs) {
- if (exclude.indexOf(key) === -1) {
- this.setPref(key, prefs[key]);
- }
- }
-
- if (prefs.global != ns.jsEnabled) ns.jsEnabled = prefs.global;
-
- this.flushCAPS(json.whitelist);
- this.setPref("temp", "");
- this.setPref("gtemp", "");
-
- return true;
- } catch(e) {
- this.dump("Cannot restore configuration: " + e);
- return false;
- }
- },
-
- applyPreset: function(preset) {
-
- this.resetDefaultPrefs(this.prefs, ['version', 'temp', 'untrusted', 'preset']);
-
- switch(preset) {
- case "off":
- this.setPref("ABE.enabled", false);
- this.setPref("filterXGet", false);
- this.setPref("filterXPost", false);
- this.setPref("clearClick", 0);
- case "low":
- this.jsEnabled = true;
- break;
- case "high":
- this.setPref("contentBlocker", true);
- case "medium":
- this.jsEnabled = false;
- break;
- default:
- return;
- }
-
- this.setPref("preset", preset);
- this.savePrefs();
- },
-
- _sound: null,
- playSound: function(url, force) {
- if (force || this.getPref("sound", false)) {
- var sound = this._sound;
- if (sound === null) {
- sound = Cc["@mozilla.org/sound;1"].createInstance(Ci.nsISound);
- sound.init();
- this._sound = sound;
- }
- try {
- sound.play(IOS.newURI(url, null, null));
- } catch(ex) {
- //dump(ex);
- }
- }
- },
-
- _soundNotified: {},
- soundNotify: function(url) {
- if (this.getPref("sound.oncePerSite", true)) {
- const site = this.getSite(url);
- if (this._soundNotified[site]) return;
- this._soundNotified[site] = true;
- }
- this.playSound(this.getPref("sound.block"));
- },
-
- readFile: function(file) {
- return IO.readFile(file);
- },
- writeFile: function(file, content) {
- IO.writeFile(file, content);
- },
-
- cleanupBrowser: function(browser) {
- delete browser.__noscriptStorage;
- },
-
- _snapshot: {
- lastTrusted: "",
- lastUntrusted: "",
- lastGlobal: false,
- lastObjects: "{}",
- },
-
- updateSnapshot() {
- const trusted = this.jsPolicySites.sitesString;
- const untrusted = this.untrustedSites.sitesString;
- const global = this.jsEnabled;
- const objects = JSON.stringify(this.objectWhitelist);
- let snapshot = this._snapshot;
- this._snapshot = {
- lastGlobal: global,
- lastTrusted: trusted,
- lastUntrusted: untrusted,
- lastObjects: objects,
- };
-
- snapshot.changed = !(!snapshot.lastTrusted ||
- global === snapshot.lastGlobal &&
- snapshot.lastObjects === objects &&
- trusted === snapshot.lastTrusted &&
- untrusted === snapshot.lastUntrusted
- );
-
- return snapshot;
- },
-
- reloadAllowedObjects: function(browser, mime) {
- browser.messageManager.sendAsyncMessage("NoScript:reloadAllowedObjects", {mime});
- },
-
- reloadWhereNeeded: function(reloadPolicy = this.RELOAD_ALL, snapshot = this.updateSnapshot()) {
- if (!snapshot.changed) {
- return;
- }
-
- const currentTabOnly = !this.getPref("autoReload.allTabs") ||
- this.jsEnabled != snapshot.lastGlobal && !this.getPref("autoReload.allTabsOnGlobal");
- if (currentTabOnly && reloadPolicy === this.RELOAD_ALL) {
- reloadPolicy = this.RELOAD_CURRENT;
- }
- let payload = {
- snapshots: {
- previous: snapshot,
- current: this._snapshot,
- timestamp: Date.now(),
- },
- reloadPolicy,
- mustReload: !(
- reloadPolicy === this.RELOAD_NO ||
- !this.getPref("autoReload") ||
- snapshot.lastGlobal !== this._snapshot.lastGlobal && !this.getPref("autoReload.global")
- ),
- };
- try {
- let browser = DOM.mostRecentBrowserWindow.noscriptOverlay.currentBrowser;
- payload.innerWindowID = browser.innerWindowID;
- } catch (e) {}
-
- Services.mm.broadcastAsyncMessage("NoScript:reload", payload);
-
- },
-
- purgeRecent() {
- this.recentlyBlocked = [];
- Services.mm.broadcastAsyncMessage("NoScript:purgeRecent", null);
- },
-};
-
diff --git a/extensions/noscript/chrome/content/noscript/Membrane.js b/extensions/noscript/chrome/content/noscript/Membrane.js
deleted file mode 100644
index 6dbafdb..0000000
--- a/extensions/noscript/chrome/content/noscript/Membrane.js
+++ /dev/null
@@ -1,20 +0,0 @@
-var Membrane = {
- create(real, wrap) {
- let shadow = {};
- return new Proxy(shadow, {
- get: function(target, propKey, receiver) {
- var pd = Object.getOwnPropertyDescriptor(real, propKey);
- if (pd !== undefined && !pd.configurable && !pd.writable) {
- Object.defineProperty(target, propKey, {
- value: wrap(real, propKey, receiver),
- writable: false,
- configurable: false,
- enumerable: pd.enumerable
- });
- return target[propKey];
- }
- return wrap(real, propKey, receiver);
- }
- });
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/MimeService.js b/extensions/noscript/chrome/content/noscript/MimeService.js
deleted file mode 100644
index dc9d8eb..0000000
--- a/extensions/noscript/chrome/content/noscript/MimeService.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var MimeService = {
- _cache: new Map(),
- getTypeFromExtension(ext) {
- if (ext) {
- if (typeof ext !== "string") {
- Cu.reportError(`getTypeFromExtension ${ext}`);
- }
- let cache = this._cache;
- if (cache.has(ext)) {
- return cache.get(ext);
- }
- let res = Services.cpmm.sendSyncMessage("NoScript:getMime", {ext})[0];
- cache.set(ext, res);
- return res;
- }
- }
-};
-
diff --git a/extensions/noscript/chrome/content/noscript/MimeServiceParent.js b/extensions/noscript/chrome/content/noscript/MimeServiceParent.js
deleted file mode 100644
index 8fa874a..0000000
--- a/extensions/noscript/chrome/content/noscript/MimeServiceParent.js
+++ /dev/null
@@ -1,19 +0,0 @@
-var MimeService = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIMessageListener, Ci.nsISupportsWeakReference]),
- service: Cc['@mozilla.org/uriloader/external-helper-app-service;1']
- .getService(Ci.nsIMIMEService),
- getTypeFromExtension(ext) {
- return this.service.getTypeFromExtension(ext);
- },
- receiveMessage(m) {
- if (m.name === "NoScript:getMime") {
- try {
- return this.getTypeFromExtension(m.data.ext);
- } catch (e) {
- ns.dump(`Could not guess mime type for ${m.data.ext}`);
- }
- }
- return '';
- }
-};
-Services.ppmm.addWeakMessageListener("NoScript:getMime", MimeService);
diff --git a/extensions/noscript/chrome/content/noscript/NoScript_License.txt b/extensions/noscript/chrome/content/noscript/NoScript_License.txt
deleted file mode 100644
index 00a3b0e..0000000
--- a/extensions/noscript/chrome/content/noscript/NoScript_License.txt
+++ /dev/null
@@ -1,17 +0,0 @@
-NoScript - a Firefox extension for whitelist driven safe JavaScript execution
-Copyright (C) 2004-2014 Giorgio Maone - g.maone@informaction.com
-
-This program 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 2 of the License, or
-(at your option) any later version.
-
-This program 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 this program; if not, write to the
-Free Software Foundation, Inc.,
-51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/PasteHandler.jsm b/extensions/noscript/chrome/content/noscript/PasteHandler.jsm
deleted file mode 100644
index 72151f1..0000000
--- a/extensions/noscript/chrome/content/noscript/PasteHandler.jsm
+++ /dev/null
@@ -1,83 +0,0 @@
-var EXPORTED_SYMBOLS = ["PasteHandler"];
-
-const Cu = Components.utils;
-
-Cu.import("chrome://noscript/content/importer.jsm");
-let IMPORT = IMPORT_FOR(this);
-
-function PasteHandler(ctx) {
- this.ctx = ctx;
- ctx.addEventListener("paste", pasteEventHandler, true);
-}
-
-PasteHandler.prototype = {
- dispose() {
- this.ctx.removeEventListener("paste", pasteEventHandler, true);
- }
-}
-
-
-
-function pasteEventHandler(e) {
- if (typeof Cu === "undefined") { // uninstalled
- e.currentTarget.removeEventListener(e.type, arguments.callee, true);
- return;
- }
- Cu.import("resource://gre/modules/Services.jsm");
- if (!Services.prefs.getBoolPref("noscript.sanitizePaste")) {
- return;
- }
- let data = e.clipboardData;
- let html = data.getData("text/html");
- let t = e.target;
- if (t.nodeType !== 1) t = t.parentElement;
-
- let console = t.ownerDocument.defaultView.console;
-
- try {
- let node = t.cloneNode();
-
- node.innerHTML = html;
-
- if (sanitizeExtras(node)) {
- let sanitized = node.innerHTML;
- IMPORT("defer");
- defer(function() { try {
- sanitizeExtras(t);
- console.log("[NoScript] Sanitized\n<PASTE>\n" + html + "\n</PASTE>to\n<PASTE>\n" + sanitized + "</PASTE>");
- } catch(ex) {
- console.log(ex);
- }}, 0);
- }
- } catch(ex) {
- console.log(ex);
- }
-}
-
-function sanitizeExtras(el) {
- let ret = false;
-
- // remove attributes from forms
- for (let f of el.getElementsByTagName("form")) {
- for (let a of f.attributes) {
- f.removeAttribute(a.name);
- ret = true;
- }
- }
-
- let doc = el.ownerDocument;
-
- // remove dangerous URLs (e.g. javascript: or data: URLs)
- for (let a of ['href', 'to', 'from', 'by', 'values']) {
- let res = doc.evaluate('//@' + a, el, null, /* DOMXPathResult.UNORDERED_NODE_SNAPSHOT_TYPE */ 6, null);
- for (let j = res.snapshotLength; j-- > 0;) {
- let attr = res.snapshotItem(j);
- if (/^\W*(?:(?:javascript|data):|https?:[\s\S]+[[(<])/i.test(unescape(attr.value))) {
- attr.value = "javascript:void(0)";
- ret = true;
- }
- }
- }
- return ret;
-}
-
diff --git a/extensions/noscript/chrome/content/noscript/Plugins.js b/extensions/noscript/chrome/content/noscript/Plugins.js
deleted file mode 100644
index d19511f..0000000
--- a/extensions/noscript/chrome/content/noscript/Plugins.js
+++ /dev/null
@@ -1,30 +0,0 @@
-var Plugins = {
- _disabled: false,
- get disabled() { return this._disabled; },
-
- _registrar: Components.manager.nsIComponentRegistrar,
- _CTRID: "@mozilla.org/plugin/host;1",
- get _CID() {
- delete this._CID;
- return this._CID = this._registrar.contractIDToCID(this._CTRID);
- },
- get _factory() {
- delete this._factory;
-
- return this._factory = Components.manager.getClassObject(Cc[this._CTRID], Ci.nsIFactory);
- },
-
- set disabled(b) {
- if (b == this._disabled) return b;
- if (b) {
- this._registrar.unregisterFactory(this._CID, this._factory);
- } else {
- this._registrar.registerFactory(this._CID, "PluginHost", this._CTRID, this._factory);
- }
- return this._disabled = !!b;
- }
-
-};
-// Gecko >= 2.0 seems to need the following to gets things rolling reliably
-Plugins.disabled = true;
-Plugins.disabled = false;
diff --git a/extensions/noscript/chrome/content/noscript/Policy.js b/extensions/noscript/chrome/content/noscript/Policy.js
deleted file mode 100644
index 668d0a3..0000000
--- a/extensions/noscript/chrome/content/noscript/Policy.js
+++ /dev/null
@@ -1,927 +0,0 @@
-Cc['@mozilla.org/docloaderservice;1'].getService(nsIWebProgress).addProgressListener(ns,
- nsIWebProgress.NOTIFY_LOCATION | nsIWebProgress.NOTIFY_STATE_REQUEST | nsIWebProgress.NOTIFY_STATUS |
- ("NOTIFY_REFRESH" in nsIWebProgress ? nsIWebProgress.NOTIFY_REFRESH : 0));
-
-var PolicyState = {
- hintsList: [],
- checking: [],
- addCheck: function(url) {
- if (typeof Map === "function") {
- this.checking = new Map();
- this.addCheck = function(url) { this.checking.set(url, true); };
- this.removeCheck = function(url) { this.checking.delete(url); };
- PolicyState.isChecking = (url) => this.checking.has(url);
- } else {
- this.addCheck = function(url) {
- if (this.checking.indexOf(url) === -1) {
- this.checking.push(url);
- }
- };
- }
- this.addCheck(url);
- },
-
- removeCheck: function(url) {
- let idx = this.checking.indexOf(url);
- if (idx !== -1) this.checking.splice(idx, 1);
- },
- isChecking: function(url) {
- return this.checking.indexOf(url) !== -1;
- },
-
- hintsForURI: function(uri, clear) {
- let hl = this.hintsList;
- let spec = uri.spec;
-
- for (let j = hl.length; j--;) {
- let h = hl[j];
- if (h.URISpec !== spec) continue;
- try {
- if (h.URIRef.get() === uri) {
- if (clear) hl.splice(j, 1);
- return h;
- }
- } catch(e) {
- }
- }
- return null;
- },
-
- attach: function(channel) {
- let uri = channel.URI;
- if (this.extract(channel) ||
- !(uri.schemeIs("http") || uri.schemeIs("https")))
- return;
-
- let hints = this.hintsForURI(uri, true) || uri !== channel.originalURI && this.hintsForURI(channel.originalURI, true);
- if (hints) {
- hints._attached = true;
- if (hints.contentType === 6) {
- let origin = hints.requestOrigin;
- if (origin && origin.schemeIs("moz-nullprincipal")) {
- if (/\n(?:handleCommand@chrome:\/\/[\w/-]+\/urlbarBindings\.xml|.*?@chrome:\/\/noscript\/content\/noscriptBM\.js)(?::\d+)+\n/
- .test(new Error().stack)) {
- hints.requestOrigin = ABE.BROWSER_URI;
- } else if (hints.context.docShell) {
- hints.requestOrigin = IOUtil.unwrapURL(hints.context.docShell.currentURI);
- }
- }
- }
- ns.reqData(channel).policyHints = hints;
- } else {
- // if (!this.extract(channel)) ns.log("Missing hints for " + channel.name + ", " + channel.status + ", " + channel.loadFlags);
- }
- }
-,
- extract(channel, detach) {
- let data = ns.reqData(channel);
- let ph = data.policyHints;
- if (detach) delete data.policyHints;
- return ph;
- },
- detach(channel) {
- let uri = channel.URI;
- if (!(uri.schemeIs("http") || uri.schemeIs("https"))) return null;
- let hints = this.extract(channel, true);
- if (!hints) this.reset(uri);
- return hints;
- }
-,
- reset: function(uri) {
- if (uri) this.hintsForURI(uri, true);
- else this.sweep();
- },
- cancel: function(hints) {
- hints._psCancelled = true;
- },
-
- SWEEP_COUNTDOWN: 1000,
- _sweepCount: 1000,
- save: function(uri, hints) {
-
- if ("_psCancelled" in hints) return false;
-
- this.hintsList.push(new PolicyHints(uri, hints));
-
- if (this._sweepCount-- < 0) this.sweep();
- return true;
- },
-
- sweep: function() {
- this._sweepCount = this.SWEEP_COUNTDOWN;
- let hl = this.hintsList;
- for (let j = hl.length; j--;) {
- let u;
- try {
- u = hl[j].URIRef.get();
- } catch(e) {
- u = null;
- }
- if (!u) hl.splice(j, 1);
- }
- },
-
- toString: function() {
- return "PolicyState: " + this.hintsList.map((h) => h.URISpec + " - " + h.URIRef.get()).toSource()
- }
-}
-
-function PolicyHints(uri, hints) {
- this.args = hints;
- if (hints[1] === uri) {
- hints[1] = uri.clone(); // avoid cyclic references
- if (hints[2] === uri) {
- hints[2] = hints[1];
- }
- }
- this.context = hints[3]; // turns it into a weak reference
- this.URIRef = Cu.getWeakReference(uri);
- this.URISpec = uri.spec; // for fast lookups
-}
-
-PolicyHints.prototype = (function() {
- const props = ["contentType", "contentLocation", "requestOrigin", "context", "mimeType", "extra", "owner"];
- const proto = {
- get wrappedJSObject() { return this; },
- toArray: function() { return props.map(p => this[p]); },
- toSource: Object.prototype.toSource,
- toString: Object.prototype.toSource,
- };
-
- props.forEach(function(p, i) {
- let setter = p === "context" ?
- function(v) {
- try {
- v = v ? Cu.getWeakReference(v) : null;
- } catch (e) {
- v = null;
- }
- if (v) {
- this.__defineGetter__(i, function() { try { return v.get(); } catch (e) {} return null; } );
- } else {
- this.args[i] = v;
- }
- return this[p];
- }
- : function(v) { return (this.args[i] = v); };
-
- proto.__defineGetter__(p, function() { return this.args[i]; });
- proto.__defineSetter__(p, setter);
- });
-
- return proto;
-})();
-
-var NOPContentPolicy = {
- shouldLoad: CP_NOP,
- shouldProcess: CP_NOP
-};
-
-
-// nsIContentPolicy interface
-// we use numeric constants for performance sake:
-// TYPE_OTHER = 1
-// TYPE_SCRIPT = 2
-// TYPE_IMAGE = 3
-// TYPE_STYLESHEET = 4
-// TYPE_OBJECT = 5
-// TYPE_DOCUMENT = 6
-// TYPE_SUBDOCUMENT = 7
-// TYPE_REFRESH = 8
-// TYPE_XBL = 9
-// TYPE_PING = 10
-// TYPE_XMLHTTPREQUEST = 11
-// TYPE_OBJECT_SUBREQUEST = 12
-// TYPE_DTD = 13
-// TYPE_FONT = 14
-// TYPE_MEDIA = 15
-// TYPE_WEBSOCKET = 16
-// TYPE_CSP_REPORT = 17
-// TYPE_XSLT = 18
-// TYPE_BEACON = 19
-// ACCEPT = 1
-
-
-var MainContentPolicy = {
- shouldLoad: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aInternalCall, principal) {
- if (!aContentLocation) {
- if (aContentType === 5 && aInternalCall === CP_SHOULDPROCESS && aMimeTypeGuess === "application/x-shockwave-flash")
- return this.reject("Empty Flash object", arguments);
- aContentLocation = aRequestOrigin;
- }
-
- var locationURL =aContentLocation.spec;
- if (locationURL === "about:blank") return CP_OK;
-
- if (aContentType === 5 && /^application\/x-java\b/i.test(aMimeTypeGuess) &&
- aInternalCall !== CP_OBJECTARC) {
- try {
- let cs = aContext.ownerDocument.characterSet;
- let code, codeBase, archive;
-
- let pp = aContext.getElementsByTagName("param");
- for (let j = 0, len = pp.length; j < len; j++) {
- let p = pp[j];
- if (p.parentNode == aContext) {
- switch(p.name.toLowerCase()) {
- case "code": code = p.value; break;
- case "codebase": codeBase = p.value; break;
- case "archive": archive = p.value; break;
- }
- }
- }
-
- if (!code)
- code = aContext.getAttribute("code");
-
- if (!codeBase)
- codeBase = aContext.getAttribute("codebase") ||
- (aContext instanceof win.HTMLAppletElement ? "/" : ".");
-
- if (!archive)
- archive = aContext.getAttribute("archive");
-
- try {
- aContentLocation = IOS.newURI(codeBase, cs, aRequestOrigin);
- } catch (e) {}
-
- if (aContext instanceof win.HTMLEmbedElement) {
- code = aContext.getAttribute("code");
- if (code && /\bjava\b/.test(aMimeTypeGuess)) {
- archive = archive ? code + " " + archive : code;
- } else code = '';
- }
- if (archive) {
- let prePaths;
- let base = aContentLocation;
- let jars = archive.split(/[\s,]+/);
- for (let j = jars.length; j-- > 0;) {
- try {
- let jar = jars[j];
- let u = IOS.newURI(jar, cs, base);
- let prePath = u.prePath;
- if (prePath !== base.prePath) {
- if (prePaths) {
- if (prePaths.indexOf(prePath) !== -1) continue;
- prePaths.push(prePath);
- } else prePaths = [prePath];
- } else {
- if (j === 0 && code === jar) aContentLocation = u;
- continue;
- }
- this.setExpando(aContext, "allowed", null);
- let res = this.shouldLoad(aContentType, u, aRequestOrigin, aContext, aMimeTypeGuess, CP_OBJECTARC);
- if (res !== CP_OK) return res;
- } catch (e) {
- this.dump(e)
- }
- }
- this.setExpando(aContext, "allowed", null);
- }
-
- if (code) {
- try {
- if (!/\.class\s*$/i.test(code)) code += ".class";
- aContentLocation = IOS.newURI(code, cs, aContentLocation);
- } catch (e) {}
- }
- } catch (e) {}
- }
-
- var logIntercept = this.consoleDump, logBlock;
-
- if(logIntercept) {
- logBlock = logIntercept & LOG_CONTENT_BLOCK;
- logIntercept = logIntercept & LOG_CONTENT_INTERCEPT;
- } else logBlock = false;
-
- if (!aInternalCall) {
- PolicyState.addCheck(aContentLocation);
- }
-
- var originURL, originSite, locationSite, scheme,
- forbid, isScript, isJava, isFlash, isSilverlight,
- isLegacyFrame, blockThisFrame, contentDocument,
- unwrappedLocation, mimeKey,
- isHTTP,
- mustCountObject = false;
-
-
- try {
-
- let win = aContext && (
- aContext.ownerDocument
- ? aContext.ownerDocument.defaultView
- : aContext.document ? aContext : (aContext.defaultView || Cu.getGlobalForObject(aContext))
- );
-
- unwrappedLocation = IOUtil.unwrapURL(aContentLocation);
- scheme = unwrappedLocation.scheme;
-
- if (scheme === "file") {
- if (!ns.checkLocalLink(unwrappedLocation, ns.getPrincipal(aContext), true)) {
- return this.reject("Local File Link", arguments);
- }
- }
-
- isHTTP = scheme === "http" || scheme === "https";
-
- if (isHTTP) {
-
- // reject any cross-site google-analytics subrequest unless explicitly whitelisted
- if (aContentType !== 2 && aContentType !== 6 &&
- unwrappedLocation.host.indexOf("google-analytics") !== -1 &&
- unwrappedLocation.prePath !== (aRequestOrigin && aRequestOrigin.prePath) &&
- !this.isJSEnabled(this.getSite(unwrappedLocation.spec))
- ) {
- return this.reject("Google Analytics web bug", arguments);
- }
-
- if (aRequestOrigin &&
- !(aContentType === 4 && Bug.$677643)
- ) {
-
- HTTPS.forceURI(unwrappedLocation, null, aContext);
-
- switch(aContentType) {
-
- case 5:
-
-
- // early ABE check for any plugin content except Flash, Silverlight and PDF
- // (Java, for instance, is known to bypass HTTP observers!)
- if (/^application\/(?:x-(?:shockwave-flash|silverlight)$|futuresplash|pdf$)/i.test(aMimeTypeGuess))
- break;
-
- case 7:
- if (aContext instanceof win.HTMLObjectElement) {
- if (this.isCachedObjectMime(aMimeTypeGuess) &&
- !(aContext.offsetWidth && aContext.offsetHeight) &&
- this.getPref("allowCachingObjects") &&
-
- aRequestOrigin && this.isJSEnabled(this.getSite(aRequestOrigin.spec), win) &&
- !this.pluginForMime(aMimeTypeGuess) &&
- (aMimeTypeGuess.indexOf("css") > 0 || this.isJSEnabled(this.getSite(aContentLocation.spec), win))
- ) {
- return CP_OK;
- }
- }
- if (aContentType === 7 || aInternalCall) break;
-
- case 1: case 12: // we may have no chance to check later for unknown and sub-plugin requests
-
- let res = ABE.checkPolicy(aRequestOrigin, unwrappedLocation, aContentType);
- if (res && res.fatal) {
- this.requestWatchdog.notifyABE(res, true);
- return this.reject("ABE-denied inclusion", arguments);
- }
- }
- }
-
- if (logIntercept && this.cpConsoleFilter.indexOf(aContentType) > -1) {
- this.cpDump("processing", aContentType, aContentLocation, aRequestOrigin, aContext, aMimeTypeGuess, aInternalCall);
- if (this.consoleDump & LOG_CONTENT_CALL)
- this.dump(new Error().stack);
- }
-
- }
-
- switch (aContentType) {
- case 9: // XBL - warning, in 1.8.x could also be XMLHttpRequest...
- return this.forbidXBL &&
- this.forbiddenXMLRequest(aRequestOrigin, aContentLocation, aContext, this.forbiddenXBLContext)
- ? this.reject("XBL", arguments) : CP_OK;
-
- case 11: // in Firefox 3 we check for cross-site XHR
- return this.forbidXHR &&
- this.forbiddenXMLRequest(aRequestOrigin, aContentLocation, aContext, this.forbiddenXHRContext)
- ? this.reject("XHR", arguments) : CP_OK;
-
- case 10: // TYPE_PING
- if (this.jsEnabled || !this.getPref("noping", true) ||
- aRequestOrigin && this.isJSEnabled(this.getSite(aRequestOrigin.spec))
- )
- return CP_OK;
-
- return this.reject("Ping", arguments);
-
- case 17: // CSP report, avoid exfiltration on untrusted resources
- if (this.jsEnabled ||
- this.isJSEnabled(this.getSite(aContentLocation.spec)) &&
- aRequestOrigin && this.isJSEnabled(this.getSite(aRequestOrigin.spec))
- )
- return CP_OK;
-
- return this.reject("CSP report", arguments);
-
- case 2:
- if (/^(?:chrome|resource|moz-extension)$/.test(aContentLocation.scheme)) {
- return CP_OK;
- }
- forbid = isScript = true;
- break;
-
- case 4: // STYLESHEETS
- if (PolicyUtil.supportsXSL ||
- !(PolicyUtil.isXSL(aContext) && /\/x[ms]l/.test(aMimeTypeGuess))
- ) return CP_OK;
- case 18: // XSL
- if (!/^(?:chrome|resource|moz-extension)$/.test(aContentLocation.scheme) &&
- this.getPref("forbidXSLT", true)) {
- forbid = isScript = true; // we treat XSLT like scripts
- break;
- }
- return CP_OK;
-
- case 14: // fonts
- forbid = this.forbidFonts && !/^(?:chrome|moz-extension)$/.test(aContentLocation.scheme);
- if (!forbid) return CP_OK;
- mimeKey = "FONT";
- if (aContentLocation && aRequestOrigin && aContentLocation.schemeIs("data"))
- locationURL = this.getSite(aRequestOrigin.spec);
-
- break;
-
- case 5: // embeds
-
- if (aContentLocation && aRequestOrigin &&
- (locationURL = aContentLocation.spec) == (originURL = aRequestOrigin.spec) &&
- aMimeTypeGuess) {
-
- if (aContext instanceof win.HTMLEmbedElement &&
- this.isAllowedObject(locationURL, aMimeTypeGuess)
- ) {
- if (logIntercept) this.dump("Plugin document " + locationURL);
- return CP_OK; // plugin document, we'll handle it in our webprogress listener
- }
-
- if (!(aContext.getAttribute("data") || aContext.getAttribute("codebase") || aContext.getAttribute("archive") || aContext.getAttribute("src")
- || aContext.firstChild) && aMimeTypeGuess == "application/x-shockwave-flash") {
- if (logIntercept) this.dump("Early Flash object manipulation with no source set yet.");
- if (this.anyAllowedObject(this.getSite(locationURL), aMimeTypeGuess))
- return CP_OK;
-
- this.setExpando(aContext, "requiresReload", true);
- }
- }
-
- case 15: // media
- if (aContentType === 15) {
- if (aRequestOrigin && !this.isJSEnabled(this.getSite(aRequestOrigin.spec), aContext.ownerDocument.defaultView)) {
- // let's wire poor man's video/audio toggles if JS is disabled and therefore controls are not available
- this.delayExec(function() {
- aContext.addEventListener("click", function(ev) {
- var media = ev.currentTarget;
- if (media.paused) media.play();
- else media.pause();
- }, true);
- }, 0);
- }
-
- forbid = this.forbidMedia;
- if (!forbid && aMimeTypeGuess) return CP_OK;
- }
-
- if (aMimeTypeGuess) // otherwise let's treat it as an iframe
- break;
-
- case 7:
-
- locationURL = aContentLocation.spec;
- originURL = aRequestOrigin && aRequestOrigin.spec || "";
- let vsPos = locationURL.indexOf("view-source:");
- if (vsPos !== -1 && vsPos < 7 // includes feed: and pcast: prefixed URLs
- && /^(?:https?|ftp):/.test(originURL))
- return this.reject("Embedded view-source:", arguments);
-
- if (locationURL === "about:blank" || /^chrome:/.test(locationURL)
- || !originURL && (aContext instanceof Ci.nsIDOMXULElement) // custom browser like in Stumbleupon discovery window
- ) return CP_OK;
-
- if (!aMimeTypeGuess) {
- aMimeTypeGuess = this.guessMime(aContentLocation);
- if (logIntercept)
- this.dump("Guessed MIME '" + aMimeTypeGuess + "' for location " + locationURL);
- }
-
- if (aContentType === 15) {
- if (!aMimeTypeGuess) try {
- aMimeTypeGuess = aContext.tagName.toLowerCase() + "/ogg";
- } catch (e) {}
-
- if (!forbid) return CP_OK;
-
- break; // we just need to guess the Mime for video/audio
- }
-
- if (!(aContext instanceof Ci.nsIDOMXULElement)) {
-
- isLegacyFrame = aContext instanceof win.HTMLFrameElement;
-
- if (isLegacyFrame
- ? this.forbidFrames || // we shouldn't allow framesets nested inside iframes, because they're just as bad
- this.forbidIFrames &&
- (win.frameElement instanceof win.HTMLIFrameElement) &&
- this.getPref("forbidMixedFrames", true)
- : this.forbidIFrames || // we use iframes to make placeholders for blocked legacy frames...
- this.forbidFrames &&
- this.isLegacyFrameReplacement(aContext)
- ) {
- try {
- contentDocument = aContext.contentDocument;
- } catch(e) {}
-
- blockThisFrame = (aInternalCall === CP_FRAMECHECK) && !(
- this.knownFrames.isKnown(locationURL, originSite = this.getSite(originURL)) ||
- /^(?:chrome|resource|wyciwyg|moz-extension):/.test(locationURL) ||
- locationURL === this._silverlightInstalledHack ||
- locationURL === this.compatGNotes ||
- (
- originURL
- ? ( /^(?:chrome|about|resource|moz-extension):/.test(originURL) && originURL !== "about:blank" ||
- /^(?:data|javascript):/.test(locationURL) &&
- (contentDocument && (originURL == contentDocument.URL
- || /^(?:data:|javascript:|about:blank$)/.test(contentDocument.URL)
- ) || this.isFirebugJSURL(locationURL)
- )
- )
- : contentDocument &&
- this.getSite(contentDocument.URL) == (locationSite = this.getSite(locationURL))
- )
- ) && this.forbiddenIFrameContext(originURL || (originURL = aContext.ownerDocument.URL), locationURL);
- }
- }
- case 6:
-
- if (aRequestOrigin && aRequestOrigin != aContentLocation) {
-
- if (isHTTP) {
-
- // external?
- if (aRequestOrigin.schemeIs("chrome") && aContext && aContext.ownerDocument &&
- aContext.ownerDocument.defaultView.isNewToplevel){
- this.requestWatchdog.externalLoad = aContentLocation.spec;
- }
-
- } else if(scheme === "data" || scheme === "javascript") {
-
- if (aContext instanceof Ci.nsIDOMXULElement) {
- originURL = originURL || aRequestOrigin.spec;
- if (originURL === "chrome://browser/content/browser.xul") {
- //code
- if (this.dropXssProtection) {
- let stack = new Error().stack.split("\n");
- for (let j = stack.length; j-- > 0;)
- if (stack[j].indexOf("onxbldrop([object DragEvent])@chrome://global/content/bindings/browser.xml") === 0) {
- ns.log('NoScript prevented "' + aContentLocation.spec + '" from being loaded on drop.');
- return this.reject("Drop XSS", arguments);
- }
- }
- } else if (
- !(aContext.ownerDocument.URL === originURL // Addon-SDK panels
- || this.isJSEnabled(originSite = this.getSite(originURL), aContext.ownerDocument.defaultView))
- ) {
- return this.reject("top level data: URI from forbidden origin", arguments);
- }
- }
- return CP_OK; // JavaScript execution policies will take care of this
- } else if(scheme !== aRequestOrigin.scheme &&
- scheme !== "chrome" && // faster path for common case
- this.isExternalScheme(scheme)) {
- // work-around for bugs 389106 & 389580, escape external protocols
- if (aContentType !== 6 && !aInternalCall &&
- this.getPref("forbidExtProtSubdocs", true) &&
- !this.isJSEnabled(originSite = this.getSite(originURL = originURL || aRequestOrigin.spec)) &&
- (!aContext.contentDocument || aContext.contentDocument.URL != originURL)
- ) {
- return this.reject("External Protocol Subdocument", arguments);
- }
- if (!this.normalizeExternalURI(aContentLocation)) {
- return this.reject("Invalid External URL", arguments);
- }
- } else if(aContentType === 6 && scheme === "chrome" &&
- this.getPref("lockPrivilegedUI", false) && // block DOMI && Error Console
- /^(?:javascript:|chrome:\/\/(?:global\/content\/console|inspector\/content\/inspector|venkman\/content\/venkman)\.xul)$/
- .test(locationURL)) {
- return this.reject("Locked Privileged UI", arguments);
- }
- }
-
- if (!(this.forbidSomeContent || this.alwaysBlockUntrustedContent) ||
- !blockThisFrame && (
- aContext instanceof Ci.nsIDOMXULElement ||
- !aMimeTypeGuess ||
- aMimeTypeGuess.substring(0, 5) === "text/" ||
- aMimeTypeGuess === "application/xml" ||
- aMimeTypeGuess === "application/xhtml+xml" ||
- aMimeTypeGuess.substring(0, 6) === "image/" ||
- !(this.isMediaType(aMimeTypeGuess) || this.pluginForMime(aMimeTypeGuess))
- )
- ) {
-
- if (logBlock)
- this.dump("Document OK: " + aMimeTypeGuess + "@" + (locationURL || aContentLocation.spec) +
- " --- PGFM: " + this.pluginForMime(aMimeTypeGuess));
-
- if (aContentLocation.schemeIs("about") && /^about:(?:net|cert)error\?/.test(aContentLocation.spec)) {
- this.handleErrorPage(aContext, aContentLocation);
- }
-
- return CP_OK;
- }
- break;
-
- case 12:
- // Silverlight mindless activation scheme :(
- if (!this.forbidSilverlight
- || !this.getExpando(aContext, "silverlight") || this.getExpando(aContext, "allowed"))
- return CP_OK;
-
- aMimeTypeGuess = "application/x-silverlight";
- break;
- default:
- return CP_OK;
- }
-
-
- locationURL = locationURL || aContentLocation.spec;
- locationSite = locationSite || this.getSite(locationURL);
-
- var untrusted = untrusted || this.isUntrusted(locationSite);
-
- if(logBlock)
- this.dump("[CP PASS 2] " + aMimeTypeGuess + "*" + locationURL + ", " + aContentType + ", " + aInternalCall);
-
- if (isScript) {
- // we must guess the right context here, see https://bugzilla.mozilla.org/show_bug.cgi?id=464754
- contentDocument = aContext && aContext.ownerDocument || aContext;
-
- // we get the embedding document URL explicitly,
- // otherwise on redirection we would get the previous redirected URL
- if (contentDocument) { // XSLT comes with no context sometimes...
- this.cacheCodeSite(contentDocument.defaultView, locationSite);
- originURL = contentDocument.URL;
- } else {
- originURL = aRequestOrigin && aRequestOrigin.spec;
- }
- originSite = originURL && this.getSite(originURL) || "";
- let httpOrigin = originSite.indexOf("http") === 0;
-
-
- let scriptElement;
- if (aContentType === 2) { // "real" JavaScript include
- if (!(this.cascadePermissions || this.globalHttpsWhitelist) &&
- originSite && !this.isJSEnabled(originSite, contentDocument && contentDocument.window) &&
- isHTTP && httpOrigin) {
- // JavaScript-disabled page with script inclusion
- this.syncUI(contentDocument);
- return this.reject("Script inclusion on forbidden page", arguments);
- }
-
- forbid = !(originSite && locationSite == originSite);
- scriptElement = aContext && win && (aContext instanceof win.HTMLScriptElement);
-
- if (forbid && httpOrigin && this.requestWatchdog /* lazy init */) {
- // XSSI protection
- let scriptURL = locationURL;
- if (scriptURL.lastIndexOf('/') === scriptURL.length - 1)
- scriptURL = scriptURL.slice(0, -1); // right trim slash
- let decodedOrigin = InjectionChecker.urlUnescape(aRequestOrigin.spec);
- if ((decodedOrigin.indexOf(scriptURL) > 0 || // don't use 0 b/c on redirections origin == scriptURL
- Entities.convertAll(decodedOrigin).indexOf(scriptURL) > 0) &&
- this.getPref("xss.checkInclusions") &&
- !new AddressMatcher(this.getPref("xss.checkInclusions.exceptions", "")).test(locationURL)
- ) {
- let ds = DOM.getDocShellForWindow(contentDocument.defaultView);
- let ch = ds.currentDocumentChannel;
- let referrerURI = IOUtil.extractInternalReferrer(ch);
- if (referrerURI && referrerURI.scheme.indexOf("http") === 0 &&
- this.getBaseDomain(referrerURI.host) !== this.getBaseDomain(this.getDomain(originURL))) {
- let msg = "Blocking reflected script inclusion origin XSS from " + referrerURI.spec;
- if (scriptElement) this.log(msg + ": " + locationURL + "\nembedded by\n" + decodedOrigin);
- return this.reject(msg, arguments);
- }
- }
- }
- } else isScript = scriptElement = false;
-
- if (forbid) {
- let doc = aContext && aContext.ownerDocument || aContext;
- forbid = !this.isJSEnabled(locationSite, win);
- if (forbid && this.ignorePorts && /:\d+$/.test(locationSite))
- forbid = !(this.isJSEnabled(locationSite.replace(/:\d+$/, '')) && this.autoTemp(locationSite));
- }
-
- if ((untrusted || forbid) && scheme !== "data") {
- if (scriptElement) {
- ScriptSurrogate.replaceScript(aContext);
- }
-
- this.syncUI(contentDocument);
-
- return this.reject(isScript ? "Script" : "XSLT", arguments);
- } else {
-
- if (scriptElement) {
-
- if (this.executingJSURL(contentDocument.defaultView.top.document) &&
- !this.jsPolicySites.matches(this.getSite(contentDocument.defaultView.location.href))) {
- this.bookmarkletImport(aContext, locationURL);
- return this.reject("Bookmarklet inclusion, already imported synchronously", arguments);
- }
-
- }
-
- return CP_OK;
- }
- }
-
- mimeKey = mimeKey || aMimeTypeGuess || "application/x-unknown";
-
- if (!(forbid || locationSite === "chrome:" || aContentLocation.schemeIs("moz-extension"))) {
-
- forbid = blockThisFrame || untrusted && this.alwaysBlockUntrustedContent;
- if (!forbid) {
- if (this.forbidSomeContent && aMimeTypeGuess) {
-
- forbid =
- (
- (isFlash = /^application\/(?:x-shockwave-flash|futuresplash)/i.test(aMimeTypeGuess)) ||
- (isJava = /^application\/x-java\b/i.test(aMimeTypeGuess)) ||
- (isSilverlight = /^application\/x-silverlight\b/i.test(aMimeTypeGuess))
- ) &&
- isFlash && this.forbidFlash ||
- isJava && this.forbidJava ||
- isSilverlight && this.forbidSilverlight;
-
- // see http://heasman.blogspot.com/2008/03/defeating-same-origin-policy-part-i.html
- if (isJava && /(?:[^\/\w\.\$\:]|^\s*\/\/)/.test(aContext.getAttribute("code") || "")) {
- return this.reject("Illegal Java code attribute " + aContext.getAttribute("code"), arguments);
- }
-
- if (isFlash) this.tagWindowlessObject(aContext);
-
- if (this.isAllowedMime(mimeKey, locationSite)) return CP_OK;
-
- if (forbid) {
-
- if (isSilverlight) {
- if (logIntercept) this.dump("Silverlight " + aContentLocation.spec + " " + typeof(aContext) + " " + aContentType + ", " + aInternalCall);
-
- this.setExpando(aContext, "silverlight", aContentType != 12);
-
- locationURL = this.resolveSilverlightURL(aRequestOrigin, aContext);
- locationSite = this.getSite(locationURL);
- originURL = aRequestOrigin && aRequestOrigin.spec;
-
- if(this.isAllowedObject(locationURL, mimeKey, locationSite) ||
- this.isAllowedObjectByDOM(aContext, locationURL, originURL, mimeKey, locationSite)) {
- if (logIntercept && forbid) this.dump("Silverlight " + locationURL + " is whitelisted, ALLOW");
- this.handleClickToPlay(aContext);
- return CP_OK;
- }
- } else if (isFlash) {
- locationURL = this.addFlashVars(locationURL, aContext);
- }
- } else if ((forbid = this.forbidPlugins && !(isJava || isFlash || isSilverlight))) {
- locationURL = this.addObjectParams(locationURL, aContext);
- } else {
- forbid = this.forbidMedia && /^(?:audio|video)\//i.test(aMimeTypeGuess);
- }
- }
- } else if (blockThisFrame &&
- this.isAllowedMime(mimeKey, locationSite) ||
- this.isAllowedMime("FRAME", locationSite)) {
- return CP_OK;
- }
- } else {
- if (this.isAllowedMime(mimeKey, locationSite)) return CP_OK;
- }
-
- if (forbid && (!this.contentBlocker || /^resource:/.test(locationSite))) {
-
- originURL = originURL || (aRequestOrigin && aRequestOrigin.spec);
- originSite = originSite || this.getSite(originURL);
-
- let jsRx = /^(?:javascript|data):/;
-
- let originOK = originSite
- ? this.isJSEnabled(originSite, win)
- : jsRx.test(originURL); // if we've got such an origin, parent should be trusted
-
- if (locationSite && this.checkShorthands(locationSite)) this.autoTemp(locationSite);
-
- let locationOK = locationSite
- ? this.isJSEnabled(locationSite, win)
- : jsRx.test(locationURL) && originOK // use origin for javascript: or data:
- ;
-
- forbid = !(locationOK && (originOK ||
- !this.getPref(blockThisFrame
- ? "forbidIFramesParentTrustCheck" : "forbidActiveContentParentTrustCheck",
- true)
- ));
- }
-
- mustCountObject = true;
-
- if (forbid) forbid = !(aContentLocation.schemeIs("file") && aRequestOrigin && aRequestOrigin.schemeIs("resource")); // fire.fm work around
-
- if (forbid && this.cascadePermissions && !this.contentBlocker) {
- let win = aContext.ownerDocument && aContext.ownerDocument.defaultView;
- let topDoc = win.top.document;
- forbid = untrusted || !this.isJSEnabled(this.getDocSite(topDoc), win);
- }
-
- if (forbid) {
-
- if (!originSite) originSite = this.getSite(originURL || (originURL = aRequestOrigin && aRequestOrigin.spec || ""));
-
- if (isJava && originSite && /^data:application\/x-java\b/.test(locationURL) ||
- aContentType === 15 && locationURL === "data:,") {
- locationURL = locationSite = originSite;
- }
-
- try { // moved here because of http://forums.mozillazine.org/viewtopic.php?p=3173367#3173367
- if (this.getExpando(aContext, "allowed") ||
- this.isAllowedObject(locationURL, mimeKey, locationSite, originSite) ||
- this.isAllowedObjectByDOM(aContext, locationURL, originURL, mimeKey, locationSite, originSite)
- ) {
- this.setExpando(aContext, "allowed", true);
- this.handleClickToPlay(aContext);
- return CP_OK; // forceAllow
- }
- } catch(ex) {
- this.dump("Error checking plugin per-object permissions:" + ex);
- }
-
- if (isLegacyFrame) { // inject an embed and defer to load
- if (blockThisFrame && this.blockLegacyFrame(aContext, aContentLocation, true))
- return this.reject("Deferred Legacy Frame " + locationURL, arguments);
- } else {
- try {
- if ((aContentType === 5 || aContentType === 7 || aContentType === 12 || aContentType === 14 || aContentType === 15) && (aContext instanceof Ci.nsIDOMNode)) {
- if (locationURL != "data:application/x-noscript-blocked,") {
- mustCountObject = false; // we do it in _preProcessObjectElements()
- this.delayExec(this.tagForReplacement, 0, aContext, {
- url: locationURL,
- site: locationSite,
- mime: mimeKey,
- originSite: originSite
- });
- }
- } else if (this.consoleDump & LOG_CONTENT_BLOCK) this.dump("Context is not a DOMNode? " + aContentType);
- } catch(ex) {
- if(this.consoleDump) this.dump(ex);
- } finally {
- return this.reject("Forbidden " + (contentDocument ? ("IFrame " + contentDocument.URL) : "Content"), arguments);
- }
- }
- } else {
-
-
- if (isSilverlight) {
- this.setExpando(aContext, "silverlight", aContentType != 12);
- }
- if (this.consoleDump & LOG_CONTENT_CALL) {
- this.dump(locationURL + " Allowed, " + new Error().stack);
- }
- }
- } catch(e) {
- return this.reject("Content (Fatal Error, " + e + " - " + e.stack + ")", arguments);
- } finally {
- if (aContentType === 5) {
- this.setExpando(aContext, "site", locationSite);
- }
-
- if (mustCountObject) this.countObject(aContext, locationSite);
-
- if (!(aContext instanceof Ci.nsIDOMXULElement)) {
- // skip XUL elements as a work around for Stylish incompatibility on Gecko < 52
- ns.syncUI(aContext);
- }
- if (!aInternalCall) PolicyState.removeCheck(aContentLocation);
-
- if (isHTTP) PolicyState.save(aContentLocation, arguments);
-
- }
- return CP_OK;
- },
-
-
- shouldProcess: function(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeType, aExtra) {
- return this.shouldLoad(aContentType, aContentLocation, aRequestOrigin, aContext, aMimeType, CP_SHOULDPROCESS);
- },
-
-
-}
-
-var PolicyUtil = {
- supportsXSL: ("TYPE_XSLT" in Ci.nsIContentPolicy),
- isXSL: function(ctx) {
- if (!ctx) return false;
- let g = Cu.getGlobalForObject(ctx);
- return !(ctx instanceof g.HTMLLinkElement || ctx instanceof g.HTMLStyleElement || ctx instanceof g.HTMLDocument);
- },
-
-};
diff --git a/extensions/noscript/chrome/content/noscript/Profiler.js b/extensions/noscript/chrome/content/noscript/Profiler.js
deleted file mode 100644
index ee1222c..0000000
--- a/extensions/noscript/chrome/content/noscript/Profiler.js
+++ /dev/null
@@ -1,63 +0,0 @@
-Profiler = {
- watchlist: { NoScript: ns, requestWatchdog: RequestWatchdog.prototype,
- InjectionChecker: InjectionChecker, ABE: ABE, IOUtil: IOUtil, DNS: DNS},
- data: {},
- reset: function() { return this.data = {} },
-
- instrument: function(b) {
- const oo = this.watchlist;
- const pf = "profiler.function";
- for (let v in oo) {
- let o = oo[v]
- for (let n in o) {
- let f = o[n];
- if (typeof f == "function") {
- if (b) {
- if (pf in f) continue;
- let key = v + "." + n;
- let patched = function() {
- let t = Date.now();
- let r = f.apply(this, arguments);
- let pdata = Profiler.data;
- let data = pdata[key] || (pdata[key] = {count: 0, time: 0, min: 120000, max: 0});
- data.count++;
- data.time += t = (Date.now() - t);
- if (t > data.max) data.max = t;
- if (t < data.min) data.min = t;
- return r;
- }
- patched[pf] = f;
- o[n] = patched;
- dump(key + "\n");
- } else {
- if (pf in f) o[n] = f[pf];
- }
- }
- }
- }
- },
-
- report: function(count) {
- if (arguments.length === 0) count = 20;
- dump("\n\n\nProfiler Report");
- let ar = [];
- for (let [call, data] in Iterator(this.data)) {
- data.avg = Math.round(data.time / data.count * 1000) / 1000;
- ar.push({call: call, data: data});
- }
- let cmp = (a,b) => a > b ? - 1: a < b ? 1 : 0;
- ar.sort((a, b) => cmp(a.data.time, b.data.time));
- for (let l of ar) {
- dump(l.call + ": " + l.data.toSource() + "\n");
- if (count-- <= 0) break;
- }
- },
-
- gc: function() {
- DOM.mostRecentBrowserWindow.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
- .getInterface(Components.interfaces.nsIDOMWindowUtils)
- .garbageCollect();
- }
-}
-
-
diff --git a/extensions/noscript/chrome/content/noscript/RequestWatchdog.js b/extensions/noscript/chrome/content/noscript/RequestWatchdog.js
deleted file mode 100644
index 0efd1c9..0000000
--- a/extensions/noscript/chrome/content/noscript/RequestWatchdog.js
+++ /dev/null
@@ -1,1155 +0,0 @@
-ABE; // kickstart
-
-var RequestGC = {
- INTERVAL: 5000,
- _timer: Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer),
- _pending: [],
- _running: false,
- notify: function(t) {
- try {
- let reqs = this._pending;
- for (let j = reqs.length; j-- > 0;) {
- let r = reqs[j];
- if (r.status || !r.isPending()) {
- ns.cleanupRequest(r);
- reqs.splice(j, 1);
- }
- }
- if (reqs.length === 0) {
- this.dispose();
- }
- } catch(e) {
- ns.dump(e);
- }
- },
- add: function(req) {
- this._pending.push(req);
- if (!this._running) {
- this._running = true;
- this._timer.initWithCallback(this, this.INTERVAL, Ci.nsITimer.TYPE_REPEATING_SLACK);
- }
- },
- dispose() {
- if (this._running) {
- this._timer.cancel();
- this._running = false;
- }
- }
-};
-
-
-function RequestWatchdog() {
- this.injectionChecker = InjectionChecker;
- this.injectionChecker.logEnabled = !!(ns.consoleDump & LOG_INJECTION_CHECK);
- this.init();
-}
-
-ns.cleanupRequest = function(channel) {
- PolicyState.detach(channel);
- ABERequest.clear(channel);
-};
-
-
-RequestWatchdog.prototype = {
-
- OBSERVED_TOPICS: ns.childProcess ? [] : ["http-on-examine-response", "http-on-examine-merged-response", "http-on-examine-cached-response"],
-
- init: function() {
- for (var topic of this.OBSERVED_TOPICS) OS.addObserver(this, topic, true);
- },
- dispose: function() {
- for (var topic of this.OBSERVED_TOPICS) OS.removeObserver(this, topic);
- RequestGC.dispose();
- },
-
- callback: null,
- externalLoad: null,
- noscriptReload: null,
- DOCUMENT_LOAD_FLAGS: Ci.nsIChannel.LOAD_DOCUMENT_URI
- | Ci.nsIChannel.LOAD_CALL_CONTENT_SNIFFERS, // this for OBJECT subdocs
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-
- observe(channel, topic) {
- try {
- if (!(channel instanceof Ci.nsIHttpChannel)) return;
- } catch (e) {
- ns.dump(`${topic} failed ${uneval(e)}`);
- return;
- }
-
- if(ns.consoleDump & LOG_SNIFF) {
- ns.dump(topic + ": " + channel.URI.spec + ", " + channel.loadFlags);
- }
-
- let cached = true;
-
- switch(topic) {
-
- case "http-on-examine-response":
- case "http-on-examine-merged-response":
-
- HTTPS.handleSecureCookies(channel);
- cached = false;
-
- case "http-on-examine-cached-response":
- ns.serializeReqData(channel);
- if (ns.externalFilters.enabled)
- ns.callExternalFilters(channel, cached);
-
- if (channel.loadFlags & this.DOCUMENT_LOAD_FLAGS) {
- ns.serializeReqData(channel);
- ABE.handleSandbox(channel);
- ns.onContentSniffed(channel);
- } else {
- if (!((ns.inclusionTypeChecking || ns.nosniff) && ns.checkInclusionType(channel)))
- return;
- }
- break;
- }
- },
-
- onHttpStart: function(channel) {
-
- const loadFlags = channel.loadFlags;
- let isDoc = loadFlags & this.DOCUMENT_LOAD_FLAGS;
-
- PolicyState.attach(channel); // this works before bug 797684 fix, see ns.onStateChange for now
- let abeReq = new ABERequest(channel);
- RequestGC.add(channel);
-
- if (HTTPS.forceChannel(channel)) return null;
-
- try {
-
- if (this.externalLoad && this.externalLoad === abeReq.destination) {
- abeReq.external = true;
- this.externalLoad = null;
- }
-
- if (isDoc) {
-
- let url = abeReq.destination;
- if (url.indexOf("#!") > 0 &&
- (url.indexOf("?") === -1 || url.indexOf("?_escaped_fragment_=") > 0) &&
- ns.getPref("ajaxFallback.enabled")) {
- let qs = '?_escaped_fragment_=' + url.match(/#!(.*)/)[1].replace(/[\s&=]/g, encodeURIComponent);
-
- let newURL = "", isReload = false;
- if (ns.isJSEnabled(ns.getSite(url))) {
- if (url.indexOf(qs) > 0 && (isReload = this.noscriptReload === url)) {
- newURL = url.replace(qs, "").replace(/([^#&]+)&/, '$1?');
- }
- } else if (url.indexOf(qs) === -1) {
- newURL = url.replace(/(?:\?_escaped_fragment_=[^&#]*)|(?=#!)/, qs);
- }
- if (newURL && newURL != url && abeReq.redirectChain.map((u) => u.spec).indexOf(newURL) === -1) {
- let requestWatchdog = this;
- abeReq.replace(null, IOUtil.newURI(newURL), function(replacement) {
- if (isReload) requestWatchdog.noscriptReload = newURL;
- replacement.open();
- });
- return null;
- }
- }
-
- new DOSChecker(abeReq).run(function() {
- MaxRunTime.increase(40);
- return this.filterXSS(abeReq);
- }, this);
- }
- if (!channel.status) {
- this.handleABE(abeReq, isDoc);
- }
- return abeReq;
- } catch(e) {
- this.die(channel, e);
- }
- return null;
- },
-
- die: function(channel, e) {
- this.abort({ channel: channel, reason: e + " --- " + e.stack, silent: true });
- },
-
- handleABE: function(abeReq, isDoc) {
- if (abeReq && ABE.enabled) {
- try {
- // ns.dump("handleABE called for " + abeReq.serial + ", " + abeReq.destination + " at " + Components.stack.caller);
- let res = new DOSChecker(abeReq, true).run(function() {
- return ABE.checkRequest(abeReq);
- });
- if (res) {
- this.notifyABE(res, !(isDoc && res.fatal && ns.getPref("ABE.notify")));
- if (res.fatal) return true;
- }
- } catch(e) {
- this.die(abeReq.channel, e);
- return true;
- }
- }
- return false;
- },
-
- notifyABE: function(abeRes, silent) {
- var req = abeRes.request;
- var silentLoopback = !ns.getPref("ABE.notify.namedLoopback");
- abeRes.rulesets.forEach(
- function(rs) {
- var lastRule = rs.lastMatch;
- var lastPredicate = lastRule.lastMatch;
- if (lastPredicate.permissive) return;
-
- var action = lastPredicate.action;
-
- ns.log(`[ABE] < ${lastRule.destinations}> ${lastPredicate} on ${req}\n${rs.name} rule:\n${lastRule}`);
- if (silent || rs != abeRes.lastRuleset || lastPredicate.inclusion)
- return;
-
- if (lastRule.local && silentLoopback) {
- let host = req.destinationURI.host;
- if (host != "localhost" && host != "127.0.0.1" && req.destinationURI.port <= 0) {
- // this should hugely reduce notifications for users of bogus hosts files,
- // while keeping "interesting" notifications
- let dnsr = DNS.getCached(host);
- if (dnsr && dnsr.entries.indexOf("127.0.0.1") > -1)
- return;
- }
- }
-
- let browser = this.findBrowser(req.channel);
- if (browser)
- browser.ownerDocument.defaultView.noscriptOverlay
- .notifyABE({
- request: req,
- action: action,
- ruleset: rs,
- lastRule: lastRule,
- lastPredicate: lastPredicate,
- browser: browser,
- });
- }, this);
- },
-
- get dummyPost() {
- const v = Cc["@mozilla.org/io/string-input-stream;1"].createInstance();
- v.setData("", 0);
- this.__defineGetter__("dummyPost", function() { return v; });
- return v;
- },
-
- getUnsafeRequest: function(browser) {
- return ns.getExpando(browser, "unsafeRequest");
- },
- setUnsafeRequest: function(browser, request) {
- return ns.setExpando(browser, "unsafeRequest", request);
- },
- attachUnsafeRequest: function(requestInfo) {
- if (requestInfo.browser && !requestInfo.silent) {
- this.setUnsafeRequest(requestInfo.browser, requestInfo.unsafeRequest);
- }
- },
-
- unsafeReload: function(browser, start) {
- ns.setExpando(browser, "unsafeReload", start);
- if (start) {
- const unsafeRequest = this.getUnsafeRequest(browser);
- if (unsafeRequest) {
- // should we figure out what to do with unsafeRequest.loadFlags?
- var wn = browser.webNavigation;
- if(unsafeRequest.window) {
- // a subframe...
- try {
- wn = DOM.getDocShellForWindow(unsafeRequest.window);
- } catch(ex) {
- ns.dump(ex);
- }
- unsafeRequest.window = null;
- }
-
- wn.loadURI(unsafeRequest.URI.spec,
- wn.LOAD_FLAGS_BYPASS_CACHE |
- wn.LOAD_FLAGS_IS_REFRESH,
- unsafeRequest.referrer, unsafeRequest.postData, null);
- unsafeRequest.issued = true;
- } else {
- browser.reload();
- }
- }
- return start;
- },
-
- isUnsafeReload: function(browser) {
- return ns.getExpando(browser, "unsafeReload");
- },
-
- resetUntrustedReloadInfo: function(browser, channel) {
- if (!browser) return;
- var window = IOUtil.findWindow(channel);
- try {
- if (browser.contentWindow == window) {
- if (ns.consoleDump) this.dump(channel, "Top level document, resetting former untrusted browser info");
- this.setUntrustedReloadInfo(browser, false);
- }
- } catch (e) {
- }
- },
- setUntrustedReloadInfo: function(browser, status) {
- return ns.setExpando(browser, "untrustedReload", status);
- },
- getUntrustedReloadInfo: function(browser) {
- return ns.getExpando(browser, "untrustedReload");
- },
-
- _listeners: [],
- addCrossSiteListener(l) {
- if (this._listeners.indexOf(l) === -1) {
- this._listeners.push(l);
- }
- },
- removeCrossSiteListener: function(l) {
- var pos = this._listeners.indexOf(l);
- if (pos > -1) this._listeners.splice(pos);
- },
-
- onCrossSiteRequest: function(channel, origin, browser) {
- for (var l of this._listeners) {
- l.onCrossSiteRequest(channel, origin, browser, this);
- }
- },
-
- isHome: function(url) {
- return url instanceof Ci.nsIURL &&
- this.getHomes().some(function(urlSpec) {
- try {
- return !url.getRelativeSpec(IOUtil.newURI(urlSpec));
- } catch(e) {}
- return false;
- });
- },
- getHomes: function(pref) {
- var homes;
- try {
- homes = ns.prefService.getComplexValue(pref || "browser.startup.homepage",
- Ci.nsIPrefLocalizedString).data;
- } catch (e) {
- return pref ? [] : this.getHomes("browser.startup.homepage.override");
- }
- return homes ? homes.split("|") : [];
- },
-
- PAYPAL_BUTTON_RX: /^https:\/\/www\.paypal\.com\/(?:[\w\-]+\/)?cgi-bin\/webscr\b/,
-
- filterXSS: function(abeReq) {
-
- const channel = abeReq.channel;
-
- let reqData = ns.reqData(channel);
- delete reqData.xssChecked; // remove redirected info
-
- const url = abeReq.destinationURI;
- const originalSpec = abeReq.destination;
-
-
- if (this.noscriptReload == originalSpec) {
- // fast cache route for NoScript-triggered reloads
- this.noscriptReload = null;
- try {
- if (ns.consoleDump) {
- this.dump(channel, "Fast reload, original flags: " +
- channel.loadFlags + ", " + (channel.loadGroup && channel.loadGroup.loadFlags));
- }
- channel.loadFlags = (channel.loadFlags & ~Ci.nsIChannel.VALIDATE_ALWAYS) |
- Ci.nsIChannel.LOAD_FROM_CACHE | Ci.nsIChannel.VALIDATE_NEVER;
- if (channel.loadGroup) {
- channel.loadGroup.loadFlags = (channel.loadGroup.loadFlags & ~Ci.nsIChannel.VALIDATE_ALWAYS) |
- Ci.nsIChannel.LOAD_FROM_CACHE | Ci.nsIChannel.VALIDATE_NEVER;
- }
- if (ns.consoleDump) {
- this.dump(channel, "Fast reload, new flags: " +
- channel.loadFlags + ", " + (channel.loadGroup && channel.loadGroup.loadFlags));
- }
- } catch(e) {
- // we may have a problem here due to something Firekeeper 0.2.11 started doing..
- ns.dump(e);
- }
- }
-
-
- let origin = abeReq.origin;
- if (origin === "[System Principal]" &&
- !(channel.loadFlags & (channel.VALIDATE_ALWAYS | channel.LOAD_BYPASS_SERVICE_WORKER))) {
- return; // System principal but this is not a reload or a navbar load
- }
-
- let originSite = null,
- browser = this.findBrowser(channel),
- window = null,
- untrustedReload = false;
-
- if (!origin) {
- if ((channel instanceof Ci.nsIHttpChannelInternal) && channel.documentURI) {
- if (originalSpec === channel.documentURI.spec) {
- // check untrusted reload
- if (!this.getUntrustedReloadInfo(browser)) {
- if (ns.consoleDump) this.dump(channel, "Trusted reload");
- return;
- }
- origin = originSite = "";
- untrustedReload = true;
- if (ns.consoleDump) this.dump(channel, "Untrusted reload");
- } else {
- origin = channel.documentURI.spec;
- if (ns.consoleDump) this.dump(channel, "ORIGIN (from channel.documentURI): " + origin);
- }
- } else {
- if (ns.consoleDump) this.dump(channel, "***** NO ORIGIN CAN BE INFERRED!!! *****");
- }
- } else {
- if (channel.loadFlags & channel.LOAD_INITIAL_DOCUMENT_URI &&
- channel.originalURI.spec == url.spec &&
- !reqData.XSS) {
- // clean up after user action
- window = window || abeReq.window;
- this.resetUntrustedReloadInfo(browser, channel);
- var unsafeRequest = this.getUnsafeRequest(browser);
- if (unsafeRequest && unsafeRequest.URI.spec != channel.originalURI.spec &&
- (!window || window == window.top || window == unsafeRequest.window)) {
- this.setUnsafeRequest(browser, null);
- }
- } else origin = origin.replace(/^view-source:/, '');
- if (ns.consoleDump) this.dump(channel, "ORIGIN: " + origin);
- }
-
- const su = SiteUtils;
- originSite = originSite || su.getSite(origin) || '';
-
- let host = url.host;
- if (host[host.length - 1] == "." && ns.getPref("canonicalFQDN", true)) {
- try {
- if (IOUtil.canDoDNS(channel))
- channel.URI.host = DNS.resolve(host, 2).canonicalName;
- if (ns.consoleDump) ns.dump("Resolving FQDN " + host);
- } catch(ex) {
- this.dump(channel, ex);
- }
- }
-
- let targetSite;
- const globalJS = ns.globalJS;
- let trustedTarget = globalJS;
- if(!trustedTarget) {
- window = window || abeReq.window;
- if(ns.autoAllow) {
- if (window && window == window.top || channel.loadInfo && (channel.loadInfo.externalContentPolicyType || channel.loadInfo.contentPolicyType) === 6) {
- targetSite = ns.getQuickSite(originalSpec, ns.autoAllow);
- if(targetSite && !ns.isJSEnabled(targetSite, window)) {
- ns.autoTemp(targetSite);
- }
- targetSite = su.getSite(originalSpec);
- }
- }
- if(!trustedTarget) {
- targetSite = su.getSite(originalSpec);
- trustedTarget = ns.isJSEnabled(targetSite, window);
- if(!trustedTarget) {
- if (ns.checkShorthands(targetSite)) {
- ns.autoTemp(targetSite);
- trustedTarget = true;
- } else {
- ns.recordBlocked(targetSite, originSite);
- }
- }
- }
- }
-
- if (!(origin || (window = abeReq.window))) {
- if (ns.consoleDump) this.dump(channel, "-- This channel doesn't belong to any window/origin: internal browser or extension request, skipping. --");
- return;
- }
-
- if (!targetSite) targetSite = su.getSite(originalSpec);
-
- // noscript.injectionCheck about:config option adds first-line
- // detection for XSS injections in GET requests originated by
- // whitelisted sites and landing on top level windows. Value can be:
- // 0 - never check
- // 1 - check cross-site requests from temporary allowed sites
- // 2 - check every cross-site request (default)
- // 3 - check every request
-
- let injectionCheck = ns.injectionCheck;
-
- if (originSite == targetSite) {
- if (injectionCheck < 3) return; // same origin, fast return
- } else {
- this.onCrossSiteRequest(channel, origin, browser);
- }
-
- if (this.callback && this.callback(channel, origin)) return;
-
- /*
- // uncomment me if you want the "old" behavior of checking only script-enabled targets
- if (!trustedTarget) {
- if (InjectionChecker.checkNoscript(InjectionChecker.urlUnescape(originalSpec)) && ns.getPref("injectionCheckHTML", true)) {
- if (ns.consoleDump) this.dump(channel, "JavaScript disabled target positive to HTML injection check!");
- } else {
- if (ns.consoleDump) this.dump(channel, "Target is not Javascript-enabled, skipping XSS checks.");
- return;
- }
- }
- */
-
- // fast return if nothing to do here
- if (!(ns.filterXPost || ns.filterXGet)) return;
-
- if (!abeReq.external && this.isUnsafeReload(browser)) {
- if (ns.consoleDump) this.dump(channel, "UNSAFE RELOAD of [" + originalSpec +"] from [" + origin + "], SKIP");
- return;
- }
-
- let unescapedSpec = unescape(originalSpec);
-
- if (ns.filterXExceptions) {
- try {
- if (ns.filterXExceptions.test(unescapedSpec) &&
- !this.isBadException(host)
- ) {
- // "safe" xss target exception
- if (ns.consoleDump) this.dump(channel, "Safe target according to filterXExceptions: " + ns.filterXExceptions.toString());
- return;
- }
-
- if (ns.filterXExceptions.test("@" + unescape(origin))) {
- if (ns.consoleDump) this.dump(channel, "Safe origin according to filterXExceptions: " + ns.filterXExceptions.toString());
- return;
- }
- } catch(e) {}
- }
-
- if (abeReq.external && /^https?:\/\/msdn\.microsoft\.com\/query\/[^<]+$/.test(unescapedSpec)) {
- return; // MSDN from Visual Studio
- }
-
- if (originSite) { // specific exceptions
-
- if (/^about:(?!blank)/.test(originSite))
- return; // any about: URL except about:blank
-
- if (/^https?:\/\/my\.ebay\.(?:\w{2,3}|co\.uk)\/ws\/eBayISAPI\.dll\?[^<'"%]*CurrentPage=MyeBayAllFavorites\b[^<'"%]*$/.test(origin) &&
- /^https?:\/\/www\.ebay\.(?:\w{2,3}|co\.uk)\/sch\/i\.html\?[^<'"]*$/.test(unescapedSpec) &&
- url.scheme === abeReq.originURI.scheme &&
- ns.getBaseDomain(ns.getDomain(url)) === ns.getBaseDomain(ns.getDomain(abeReq.originURI)) &&
- ns.getPref("filterXException.ebay")) {
- if (ns.consoleDump) this.dump(channel, "Ebay exception");
- return;
- }
-
- if (/^https?:\/\/(?:[^/]+\.)photobucket\.com$/.test(originSite) &&
- /^https?:\/\/(?:[^/]+\.)photobucket\.com\/[^<]*$/.test(unescapedSpec) &&
- url.scheme === abeReq.originURI.scheme &&
- ns.getBaseDomain(ns.getDomain(url)) === ns.getBaseDomain(ns.getDomain(abeReq.originURI)) &&
- ns.getPref("filterXException.photobucket")) {
- if (ns.consoleDump) this.dump(channel, "Photobucket exception");
- return;
- }
-
- if (originSite === "https://www.youtube.com" &&
- /^https:\/\/(?:plus\.googleapis|apis\.google)\.com\/[\w/]+\/widget\/render\/comments\?/.test(originalSpec) &&
- ns.getPref("filterXExceptions.yt_comments")
- ) {
- if (ns.consoleDump) this.dump(channel, "YouTube comments exception");
- return;
- }
-
- if (channel.requestMethod == "POST") {
-
- if (originSite === "https://sso.post.ch" && targetSite === "https://app.swisspost.ch") {
- return;
- }
-
- if (originSite === "https://twitter.com" && /^https:\/\/.*\.twitter\.com$/.test(targetSite)) {
- return;
- }
-
- {
- let rx = /^https:\/\/(?:[a-z]+\.)?unionbank\.com$/;
- if (rx.test(originSite) && rx.test(targetSite)) {
- return;
- }
- }
-
- if (/^https?:\/\/csr\.ebay\.(?:\w{2,3}|co\.uk)\/cse\/start\.jsf$/.test(origin) &&
- /^https?:\/\/msa-lfn\.ebay\.(?:\w{2,3}|co\.uk)\/ws\/eBayISAPI\.dll\?[^<'"%]*$/.test(unescapedSpec) &&
- url.scheme === abeReq.originURI.scheme &&
- ns.getPref("filterXException.ebay")) {
- if (ns.consoleDump) this.dump(channel, "Ebay exception");
- return;
- }
-
- if (/^https:\/\/(?:cap\.securecode\.com|www\.securesuite\.net|(?:.*?\.)?firstdata\.(?:l[tv]|com))$/.test(origin) &&
- ns.getPref("filterXException.visa")) {
- if (ns.consoleDump) this.dump(channel, "Verified by Visa exception");
- return;
- }
-
- if (/\.verizon\.com$/.test(originSite) &&
- /^https:\/\/signin\.verizon\.com\/sso\/authsso\/forumLogin\.jsp$/.test(originalSpec) &&
- ns.getPref("filterXExceptions.verizon")) {
- if (ns.consoleDump) this.dump(channel, "Verizon login exception");
- return;
- }
-
- if (/^https?:\/\/mail\.lycos\.com\/lycos\/mail\/MailCompose\.lycos$/.test(origin) &&
- /\.lycosmail\.lycos\.com$/.test(targetSite) &&
- ns.getPref("filterXExceptions.lycosmail")) {
- if (ns.consoleDump) this.dump(channel, "Lycos Mail exception");
- return;
- }
-
- if (/\.livejournal\.com$/.test(originSite) &&
- /^https?:\/\/www\.livejournal\.com\/talkpost_do\.bml$/.test(originalSpec) &&
- ns.getPref("filterXExceptions.livejournal")) {
- if (ns.consoleDump) this.dump(channel, "Livejournal comments exception");
- return;
- }
-
- if (originSite == "https://ssl.rapidshare.com" &&
- ns.getBaseDomain(ns.getDomain(targetSite)) == "rapidshare.com") {
- if (ns.consoleDump) this.dump(channel, "Rapidshare upload exception");
- return;
- }
-
- if (originSite == "http://wm.letitbit.net" &&
- /^http:\/\/http\.letitbit\.net:81\/cgi-bin\/multi\/upload\.cgi\?/.test(originalSpec) &&
- ns.getPref("filterXExceptions.letitibit")
- ) {
- if (ns.consoleDump) this.dump(channel, "letitbit.net upload exception");
- return;
- }
-
- if (/\.deviantart\.com$/.test(originSite) &&
- /^http:\/\/my\.deviantart\.com\/journal\/update\b/.test(originalSpec) &&
- ns.getPref("filterXExceptions.deviantart")
- ) {
- if (ns.consoleDump) this.dump(channel, "deviantart.com journal post exception");
- return;
- }
-
- if (originSite == "https://www.mymedicare.gov" &&
- targetSite == "https://myporal.medicare.gov" &&
- ns.getPref("filterXExceptions.medicare")
- ) {
- if (ns.consoleDump) this.dump(channel, "mymedicare.gov exception");
- return;
- }
-
- if (/^https?:\/\/(?:draft|www)\.blogger\.com\/template-editor\.g\?/.test(origin) &&
- /^https?:\/\/[\w\-]+\.blogspot\.com\/b\/preview\?/.test(originalSpec) &&
- ns.getPref("filterXExceptions.blogspot")
- ) {
- if (ns.consoleDump) this.dump(channel, "blogspot.com template preview exception");
- return;
- }
-
- if (/^https?:\/\/www\.readability\.com\/articles\/queue$/.test(originalSpec) &&
- ns.getPref("filterXExceptions.readability")) {
- if (ns.consoleDump) this.dump(channel, "Readability exception");
- return;
- }
-
- if (/^https?:\/\/pdf\.printfriendly\.com\/pdfs\/make$/.test(originalSpec) &&
- ns.getPref("filterXExceptions.printfriendly")) {
- if (ns.consoleDump) this.dump(channel, "Printfriendly exception");
- return;
- }
-
- }
-
- }
-
-
-
- let originalAttempt;
- let postInjection = false;
-
- window = window || abeReq.window;
-
- // neutralize window.name-based attack
- if (window && window.name) {
-
- if (ns.compatEvernote && window.frameElement && window.name.indexOf("iframe") > 0 &&
- /^https?:\/\/(?:[a-z]+\.)*evernote\.com\/clip\.action$/.test(originalSpec) &&
- channel.requestMethod == "POST") {
- // Evernote Web Clipper hack
- window.frameElement.addEventListener("load", ns.compatEvernote.onload, false);
- if (ns.consoleDump) this.dump(channel, "Evernote frame detected (noscript.compat.evernote)");
- return;
- }
- }
-
-
- if (!/^(?:https:\/\/.*\.nwolb\.com){2}$/.test(originSite + targetSite)) {
- reqData.checkWindowName = true;
- } else {
- this.dump(channel, "nwolb.com window.name check exception.");
- }
-
- let focusedBrowserWin = DOM.mostRecentBrowserWindow;
- let trustedOrigin = globalJS || ns.isJSEnabled(originSite, focusedBrowserWin && focusedBrowserWin.content) ||
- !origin ||
- // we consider null origin as "trusted" (i.e. we check for injections but
- // don't strip POST unconditionally) to make some extensions (e.g. Google Gears)
- // work. For dangerous edge cases we should have moz-null-principal: now, anyway.
- origin.substring(0, 5) == "file:";
-
- let originDomain = ns.getDomain(originSite),
- targetDomain = ns.getDomain(url);
-
- if (trustedOrigin) {
-
- if (origin &&
- (
- /^https?:\/\/(?:[^\/]+.)?facebook\.com\/[\w\.\-\/]+fbml\.php$/.test(originalSpec) && channel.requestMethod == "POST" ||
- /^https?:\/\/www\.facebook\.com\/plugins\/serverfbml.php\?/.test(originalSpec) ||
- /^https?:\/\/api\.connect\.facebook\.com$/.test(originSite)
-
- ) &&
- ns.getPref("filterXExceptions.fbconnect")) {
- if (ns.consoleDump) this.dump(channel, 'Facebook connect exception');
- return;
- }
-
-
- this.resetUntrustedReloadInfo(browser, channel);
-
- // here we exceptionally consider same site also https->http with same domain
-
- if (injectionCheck < 3 && originSite && abeReq.originURI.schemeIs("https")) {
-
- if (targetDomain === originDomain || ns.getBaseDomain(originDomain) === ns.getBaseDomain(targetDomain)) {
- this.dump(channel, "Same base domain with HTTPS origin");
- return;
- }
- }
- }
-
- let stripPost = trustedTarget && originDomain && !trustedOrigin && ns.filterXPost &&
- ns.getBaseDomain(originDomain) !== ns.getBaseDomain(targetDomain);
-
- // check for injections
-
- let injectionAttempt = injectionCheck && (injectionCheck > 1 || !trustedOrigin || ns.isTemp(originSite)) &&
- (!window || ns.injectionCheckSubframes || window == window.top);
-
-
-
- if (injectionAttempt) {
- let skipArr, skipRx;
- let isPaypal = this.PAYPAL_BUTTON_RX.test(originalSpec);
-
- if (isPaypal) {
- stripPost = false;
- // Paypal buttons encrypted parameter causes a DOS, strip it out
- skipArr = ['encrypted'];
- } else if ("https://secure.przelewy24.pl/" === targetSite) {
- stripPost = true;
- } else if (/\.adnxs\.com$/.test(originSite) && /\.adnxs\.com$/.test(targetSite)) {
- skipArr = ['udj'];
- } else if (/^https?:\/\/www\.mendeley\.com\/import\/bookmarklet\/$/.test(originalSpec)) {
- skipArr = ['html'];
- } else if (/^https?:\/\/[\w\-\.]+\/talkpost_do(?:\.bml)?$/.test(originalSpec) &&
- ns.getBaseDomain(ns.getDomain(originalSpec)) == ns.getBaseDomain(ns.getDomain(originSite)) &&
- ns.getPref("filterXExceptions.livejournal")) {
- if (ns.consoleDump) this.dump(channel, "Livejournal-like comments exception");
- skipArr = ['body'];
- } else if (url.ref && trustedOrigin &&
- (/^https?:\/\/api\.facebook\.com\//.test(origin) && ns.getPref("filterXExceptions.fbconnect") ||
- /^https:\/\/tbpl\.mozilla\.org\//.test(origin) || // work-around for hg reftest DOS
- /^https:\/\/[^\/]+\.googleusercontent\.com\/gadgets\/ifr\?/.test(originalSpec) && ns.getPref("filterXExceptions.ggadgets") // Google gadgets
- )) {
- skipRx = /#[^#]+$/; // remove receiver's hash
- } else if (/^https?:\/\/apps\.facebook\.com\//.test(origin) && ns.getPref("filterXExceptions.fbconnect")) {
- skipRx = /&invite_url=javascript[^&]+/; // Zynga stuff
- } else if (/^https?:\/\/l\.yimg\.com\/j\/static\/frame\?e=/.test(originalSpec) &&
- /\.yahoo\.com$/.test(originSite) &&
- ns.getPref("filterXExceptions.yahoo")) {
- skipArr = ['e'];
- if (ns.consoleDump) this.dump(channel, "Yahoo exception");
- } else if (/^https?:\/\/wpcomwidgets\.com\/\?/.test(originalSpec)) {
- skipArr = ["_data"];
- } else if (/^https:\/\/docs\.google\.com\/picker\?/.test(originalSpec)) {
- skipArr = ["nav", "pp"];
- } else if (/^https:\/\/.*[\?&]scope=/.test(originalSpec)) {
- skipRx = /[\?&]scope=[+\w]+(?=&|$)/;
- }
- if (skipArr) {
- skipRx = new RegExp("(?:^|[&?])(?:" + skipArr.join('|') + ")=[^&]+", "g");
- }
-
-
- let injectionChecker = ns.injectionChecker;
-
- injectionChecker.reset();
-
- if (!stripPost)
- stripPost = postInjection =
- ns.filterXPost &&
- (!origin || originSite != "chrome:") &&
- channel.requestMethod == "POST" && injectionChecker.checkPost(channel, skipArr);
-
- let protectName = injectionChecker.nameAssignment;
-
- injectionAttempt = ns.filterXGet && injectionChecker.checkURL(
- skipRx ? originalSpec.replace(skipRx, '') : originalSpec);
-
- reqData.protectName = (protectName = (protectName || injectionChecker.nameAssignment));
-
- if (ns.consoleDump) {
- if (injectionAttempt) this.dump(channel, "Detected injection attempt at level " + injectionCheck);
- if (postInjection) this.dump(channel, "Detected POST injection attempt at level " + injectionCheck);
- if (protectName) this.dump(channel, "Name assignment detected, gonna protect window.name");
- }
- }
-
- reqData.xssChecked = true;
-
- if (trustedOrigin && !(injectionAttempt || stripPost))
- return;
-
- if (untrustedReload && browser) {
- this.resetUntrustedReloadInfo(browser, channel);
- }
-
-
- // -- DANGER ZONE --
-
- let requestInfo = new RequestInfo(channel, url, origin, window);
-
- // transform upload requests into no-data GETs
- if (ns.filterXPost && stripPost &&
- (channel instanceof Ci.nsIUploadChannel) && channel.uploadStream
- ) {
- try {
- channel.requestMethod = "GET";
- } catch (e) {}
- requestInfo.unsafeRequest.postData = channel.uploadStream;
- channel.setUploadStream(this.dummyUpload, "", -1);
- this.notify(this.addXssInfo(requestInfo, {
- reason: "filterXPost",
- originalAttempt: originalSpec + (postInjection ? "###DATA###" + postInjection : ""),
- silent: untrustedReload
- }));
-
- this.attachUnsafeRequest(requestInfo);
- }
-
- if (!(injectionAttempt || postInjection)) return;
-
- if (ns.filterXGet && ns.filterXGetRx) {
- var changes = null;
- var xsan = ns.createXSanitizer();
- // sanitize referrer
- if (channel.referrer && channel.referrer.spec) {
- originalAttempt = channel.referrer.spec;
- xsan.brutal = /'"</.test(Entities.convertAll(InjectionChecker.urlUnescape(originalAttempt)));
- try {
- if (channel.referrer instanceof Ci.nsIURL) {
- changes = xsan.sanitizeURL(channel.referrer);
- } else {
- channel.referrer.spec = xsan.sanitizeURIComponent(originalAttempt);
- }
- } catch(e) {
- this.dump("Failed sanitizing referrer " + channel.referrer.spec + ", " + e);
- channel.referrer.spec = "";
- }
- try {
- if (!changes) {
- changes = {
- minor: !channel.referrer.spec ||
- unescape(originalAttempt) != unescape(channel.referrer.spec)
- };
- }
- if (changes.minor) {
- channel.referrer = channel.referrer.clone();
- this.notify(this.addXssInfo(requestInfo, {
- reason: "filterXGetRef",
- originalAttempt: originalSpec + " (REF: " + originalAttempt + ")",
- silent: !postInjection,
- sanitizedURI: channel.referrer
- }));
- }
- } catch(e) {
- this.dump("Failed notifying referrer sanitization: " + channel.referrer.spec + ", " + e);
- channel.referrer.spec = "";
- channel.referrer = channel.referrer.clone();
- }
- }
-
- originalAttempt = originalSpec;
-
- let newURI = url.clone();
-
- if (injectionAttempt) {
- xsan.brutal = injectionAttempt;
- changes = xsan.sanitizeURL(newURI);
- if (changes.minor) {
- this.notify(this.addXssInfo(requestInfo, {
- reason: "filterXGet",
- originalAttempt: originalAttempt,
- sanitizedURI: newURI,
- silent: !(changes.major || postInjection)
- }));
- }
- if (newURI.spec != url.spec) {
- if (!abeReq.replace(null, newURI)) {
- this.proxyHack(channel);
- url.spec = newURI.spec;
- }
- }
- }
- }
-
- if (requestInfo.xssMaybe) {
- // avoid surprises from history & cache
- if (channel instanceof Ci.nsICachingChannel) {
-
- const CACHE_FLAGS = channel.LOAD_FROM_CACHE |
- channel.VALIDATE_NEVER |
- channel.LOAD_ONLY_FROM_CACHE;
-
- channel.loadFlags = channel.loadFlags & ~CACHE_FLAGS | channel.LOAD_BYPASS_CACHE;
- if (this.consoleDump) this.dump(channel, "SKIPPING CACHE");
- }
-
- this.attachUnsafeRequest(requestInfo);
- }
-
-
- },
-
-
-
- isBadException: function(host) {
- // TLD check for Google search
- let m = host.match(/\bgoogle\.((?:[a-z]{1,3}\.)?[a-z]+)$/i);
- return m && ns.getPublicSuffix(host) != m[1];
- },
-
-
-
- proxyHack: function(channel) {
- // Work-around for channel.URI not being used directly here:
- // http://mxr.mozilla.org/mozilla/source/netwerk/protocol/http/src/nsHttpChannel.cpp#504
-
- var proxyInfo = IOUtil.getProxyInfo(channel);
- if (proxyInfo && proxyInfo.type == "http") {
- if (channel.URI.userPass === "") {
- channel.URI.userPass = "xss:xss";
- // resetting this bit will avoid auth confirmation prompt
- channel.loadFlags = channel.loadFlags & ~channel.LOAD_INITIAL_DOCUMENT_URI;
- }
- }
- },
-
- abortChannel: function(channel, reason) {
- let originURI = ABERequest.getOrigin(channel);
- let requestInfo = this.addXssInfo(new RequestInfo(channel), {
- reason: reason || "filterXGet",
- originalAttempt: channel.name,
- origin: originURI && originURI.spec || "",
- silent: false,
- });
- this.abort(requestInfo);
- this.attachUnsafeRequest(requestInfo);
- },
-
- abort: function(requestInfo) {
- var channel = requestInfo.channel;
-
- if (channel instanceof Ci.nsIRequest)
- IOUtil.abort(channel);
-
- if (requestInfo.browser) {
- requestInfo.browser.stop(requestInfo.browser.STOP_ALL);
- }
- this.dump(channel, "Aborted - " + requestInfo.reason);
-
- this.notify(requestInfo);
- },
-
- mergeDefaults: function(o1, o2) {
- for (let p in o2) {
- if (!(p in o1)) o1[p] = o2[p];
- }
- return o1;
- },
-
- addXssInfo: function(requestInfo, xssInfo) {
- try {
- requestInfo.window = requestInfo.window || IOUtil.findWindow(requestInfo.channel);
- requestInfo.browser = requestInfo.browser || IOUtil.findBrowser(requestInfo.channel);
- } catch(e) {}
- requestInfo.xssMaybe = true;
- return this.mergeDefaults(xssInfo, requestInfo);
- },
-
- notify: function(requestInfo) {
- var msg = "[NoScript XSS] " + ns.getString("xss.reason." + requestInfo.reason, [
- requestInfo.originalAttempt || "N/A",
- requestInfo.unsafeRequest && requestInfo.unsafeRequest.origin || "",
- requestInfo.sanitizedURI && requestInfo.sanitizedURI.spec || ""
- ]);
- this.dump(requestInfo.channel, "Notifying " + msg + "\n\n\n");
- ns.log(msg);
- try {
- let sync = requestInfo.channel.status !== 0;
- let loadInfo = requestInfo.channel.loadInfo;
- let cpType = loadInfo && (loadInfo.externalContentPolicyType || loadInfo.contentPolicyType);
- if (!cpType && requestInfo.window) {
- cpType = requestInfo.window === requestInfo.window.top ? 6 : 7;
- }
- if (requestInfo.silent || !(cpType === 6 || cpType === 7) || !ns.getPref("xss.notify", true))
- return;
- if(cpType !== 6) {
- // subframe
-
- var cur = this.getUnsafeRequest(requestInfo.browser);
- if(cur && !cur.issued) return;
-
- requestInfo.unsafeRequest.window = requestInfo.window;
- this.observeSubframeXSS(requestInfo.originalAttempt, requestInfo.unsafeRequest);
-
- if(!ns.getPref("xss.notify.subframes", true))
- return;
-
- sync = true;
- }
-
- if (sync) {
- let overlay = ns.findOverlay(requestInfo.browser);
- if(overlay) overlay.notifyXSS(requestInfo);
- }
-
- requestInfo.wrappedJSObject = requestInfo;
- ns.reqData(requestInfo.channel).XSS = requestInfo;
- } catch(e) {
- dump(e + "\n");
- }
- },
-
- observeSubframeXSS: function(url, unsafeRequest) {
- unsafeRequest.window.addEventListener("unload", function(ev) {
- var w = ev.currentTarget;
- if(w.location.href != url) return;
- w.removeEventListener("unload", arguments.callee, false);
- unsafeRequest.window = null;
- }, false);
- },
-
-
- findBrowser: function(channel) {
- return IOUtil.findBrowser(channel);
- },
-
- dump: function(channel, msg) {
- if (!(ns.consoleDump & LOG_XSS_FILTER)) return;
- dump("[NoScript] ");
- dump((channel.URI && channel.URI.spec) || "null URI?" );
- if (channel.originalURI && channel.originalURI.spec != channel.URI.spec) {
- dump(" (" + channel.originalURI.spec + ")");
- }
- dump(" *** ");
- dump(msg);
- dump("\n");
- }
-
-
-};
-
-function RequestInfo(channel, url, origin, window) {
- this.channel = channel;
- if (!url) url = channel.URI;
- this.sanitizedURI = url;
- this.window = window || IOUtil.findWindow(channel);
- if (!origin) {
- let originURI = ABERequest.getOrigin(channel);
- origin = originURI && originURI.spec || "???";
- }
- this.unsafeRequest = {
- URI: url.clone(),
- postData: null,
- referrer: channel.referrer && channel.referrer.clone(),
- origin: origin,
- loadFlags: channel.loadFlags,
- issued: false,
- window: null
- };
-}
-RequestInfo.prototype = {
- xssMaybe: false
-};
-
-
-function DOSChecker(request, canSpin) {
- this.request = request;
- this.canSpin = canSpin;
- Thread.asap(this.check, this);
-}
-
-DOSChecker.abort = function(req, info) {
- if (req) IOUtil.abort(("channel" in req) ? req.channel : req, true);
- ns.log("[NoScript DOS] Aborted potential DOS attempt: " +
- ( ("name" in req) ? req.name : req ) +
- "\n" + (info || new Error().stack));
-};
-
-DOSChecker.prototype = {
- done: false,
- lastClosure: null,
- run: function(closure, self) {
- this.done = false;
- this.lastClosure = closure;
- try {
- return self ? closure.apply(self) : closure();
- } finally {
- this.done = true;
- }
- },
- check: function() {
- MaxRunTime.restore();
-
- if (!(this.done || this.canSpin && Thread.activeLoops))
- DOSChecker.abort(this.request, (this.lastClosure && this.lastClosure.toSource()));
- }
-};
-
-var MaxRunTime = {
- branch: Cc["@mozilla.org/preferences-service;1"]
- .getService(Ci.nsIPrefService).getBranch("dom."),
- prefs: ["max_script_run_time", "max_chrome_script_run_time"],
- stored: [],
- increase: function(v) {
- let prefs = this.prefs, stored = this.stored;
- for (let j = prefs.length; j-- > 0;) {
- let cur, pref = prefs[j];
- try {
- cur = this.branch.getIntPref(pref);
- } catch(e) {
- cur = -1;
- }
- if (cur <= 0 || cur >= v) return;
- if (typeof stored[j] === "undefined") try {
- stored[j] = cur;
- } catch(e) {}
- this.branch.setIntPref(pref, v);
- }
- },
- restore: function() {
- let prefs = this.prefs, stored = this.stored;
- for (let j = stored.length; j-- > 0;) {
- this.branch.setIntPref(prefs[j], stored[j]);
- }
- stored.length = 0;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/Restartless.jsm b/extensions/noscript/chrome/content/noscript/Restartless.jsm
deleted file mode 100644
index ba5ab0a..0000000
--- a/extensions/noscript/chrome/content/noscript/Restartless.jsm
+++ /dev/null
@@ -1,248 +0,0 @@
-var EXPORTED_SYMBOLS = ["startup", "shutdown", "upgrade", "loadIntoWindow", "unloadFromWindow"];
-var { utils: Cu, interfaces: Ci } = Components;
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import(`chrome://noscript/content/importer.jsm`);
-
-Services.scriptloader.loadSubScript(NO_CACHE("loader.js"), this);
-
-function loadPrefs(branch, uriOrFile, filter = null) {
- try {
- let setPref = (name, value) => {
- try {
- switch (typeof value) {
- case "boolean":
- branch.setBoolPref(name, value);
- break;
-
- case "number":
- branch.setIntPref(name, value);
- break;
-
- case "string":
- COMPAT.setStringPref(branch, name, value);
- break;
- }
- } catch (e) {
- Cu.reportError(`NoScript could not set default pref value for ${name}: ${e}`);
- }
- };
-
- if (typeof uriOrFile === "string") {
- let uri = uriOrFile;
- let pref = filter ? (name, value) => filter(name, value) && setPref(name, value)
- : setPref;
- Services.scriptloader.loadSubScript(uri, { pref });
- } else {
- INCLUDE("IO");
- let file = uriOrFile;
- let prefJSON = JSON.parse(`[${IO.readFile(file).replace(/^[^p].*/mg, '')
- .replace(/^pref\((.*)\);$/mg, "[$1],")
- .replace(/,\s*$/, '')}]`);
- if (filter) prefJSON = prefJSON.filter(([name, value]) => filter(name, value));
- prefJSON.forEach(([name, value]) => setPref(name, value));
- }
- } catch (err) {
- Cu.reportError(err);
- }
-}
-
-function loadDefaultPrefs(xpiURI) {
- let branch = Services.prefs.getDefaultBranch("");
- let seen = null;
- let overrides = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIProperties).get("ProfD", Ci.nsIFile);
- overrides.append("preferences");
- if (overrides.exists() && overrides.isDirectory()) {
- seen = new Set();
- let filter = name => name.startsWith("noscript.") && seen.add(name);
- for (let entries = overrides.directoryEntries, file; (file = entries.getNext()) instanceof Ci.nsIFile;) {
- if (file.path.endsWith(".js")) {
- loadPrefs(branch, file, filter);
- }
- }
- }
- let filter = seen && seen.size ? name => !seen.has(name) : null;
- loadPrefs(branch, `${xpiURI}/defaults/preferences/noscript.js`, filter);
-}
-
-function startup(addonData, browserStartup) {
-
- loadDefaultPrefs(addonData.resourceURI.spec);
-
- INCLUDE("Main");
- Main.bootstrap();
-
-
- Main.init();
- if (Main.webExt && addonData.webExtension) {
- Main.webExt.init(addonData.webExtension);
- }
- Main.checkVersion();
-}
-
-function shutdown(addonData) {
- if (CustomizableUI && widgetTemplate) {
- try {
- CustomizableUI.destroyWidget(widgetTemplate.id);
- } catch (e) {
- }
- }
- Main.shutdown();
- UNLOAD_ALL();
-}
-
-
-try {
- Cu.import("resource:///modules/CustomizableUI.jsm");
-} catch(e) {
- var CustomizableUI = null;
-}
-var widgetTemplate = null;
-var overlayURL = NO_CACHE(`noscriptOverlay-noStatusBar.xul`);
-
-function createWidgetTemplate(window, callback) {
- let xhr = new window.XMLHttpRequest();
- if (window.document.getElementById("status-bar")) {
- overlayURL = overlayURL.replace("-noStatusBar", "");
- }
- xhr.open("GET", overlayURL);
-
- try {
- // work around to resolve overlay's XML entities despite the Tor Browser
- let TOR_PREF = "extensions.torbutton.resource_and_chrome_uri_fingerprinting";
- let torPrefValue = Services.prefs.getBoolPref(TOR_PREF);
- let restorePref = () => Services.prefs.setBoolPref(TOR_PREF, torPrefValue);
- for (let e of ["progress", "loadend"]) { // restore as early as possible (almost sync)
- xhr.addEventListener(e, restorePref);
- }
- xhr.addEventListener("loadstart", () => {
- Services.prefs.setBoolPref(TOR_PREF, true);
- });
- } catch (e) {
- // no pref value, it doesn't seem to be a Tor Browser :)
- }
-
- xhr.addEventListener("load", () => {
- createWidget(xhr.responseXML.getElementById("noscript-tbb"));
- if (callback) callback();
- });
-
-
- xhr.send(null);
-}
-
-function createWidget(template) {
- widgetTemplate = template;
- if (CustomizableUI) {
- CustomizableUI.createWidget({
- id: widgetTemplate.id,
- type: "custom",
- onBuild(doc) {
- return doc.importNode(widgetTemplate);
- },
- onCreated(node) {
- let noscriptOverlay = node.ownerDocument.defaultView.noscriptOverlay;
- if (noscriptOverlay) node.ownerDocument.defaultView.noscriptOverlay.initPopups();
- }
- });
- }
-}
-
-
-function placeWidgetNoAustralis(document) {
- let id = widgetTemplate.id;
- let widget = document.getElementById(id) || document.importNode(widgetTemplate);
- if (widget.parentNode) return;
- let toolbar = document.querySelector(`toolbar[currentset*="${id}"],toolbar[currentset*=",${id},"],toolbar[currentset^="${id},"],toolbar[currentset=",${id}"]`);
- if (toolbar) {
- let currentSet = toolbar.getAttribute("currentset");
- if (toolbar.currentSet !== currentSet) {
- toolbar.currentSet = currentSet;
- try {
- document.defaultView.BrowserToolboxCustomizeDone(true);
- } catch (e) {}
- }
- let items = currentSet.split(",");
- let next = items.indexOf(id) + 1;
- let nextNode = next > items.length ? null : document.getElementById(items[next]);
- toolbar.insertBefore(widget, nextNode);
- } else {
- toolbar = document.querySelector("toolbar");
- if (toolbar && toolbar.toolbox && toolbar.toolbox.palette) {
- toolbar.toolbox.palette.appendChild(widget);
- }
- }
-}
-
-var overlayLoading = false;
-var overlayQueue = [];
-var overlaid = new WeakSet();
-function overlayNext() {
- overlayLoading = false;
- if (overlayQueue.length) {
- let next = overlayQueue.shift();
- Thread.asap(() => loadIntoWindow(next));
- }
-}
-function loadIntoWindow(w, early = false) {
- if (w.noscriptOverlay || typeof overlayQueue === "undefined") return;
-
- if (overlayLoading) {
- overlayQueue.push(w);
- return;
- }
- overlayLoading = true;
-
- if (!widgetTemplate) {
- createWidgetTemplate(w, () => {
- overlayLoading = false;
- loadIntoWindow(w);
- });
- return;
- }
-
- try {
- if (overlaid.has(w)) {
- overlayNext();
- return;
- }
- overlaid.add(w);
- w.document.loadOverlay(overlayURL, {
- observe() {
- if (!early) {
- if (CustomizableUI) {
- let widget = w.document.getElementById(widgetTemplate.id);
- if (widget) widget.hidden = false;
- else {
- Main.dump(`${widgetTemplate.id} not found!`);
- CustomizableUI.ensureWidgetPlacedInWindow(widgetTemplate.id, w);
- }
- } else {
- placeWidgetNoAustralis(w.document);
- }
-
- (function initWindow() {
- if (w.noscriptOverlay) {
- w.noscriptOverlay.listeners.onLoad();
- } else {
- w.setTimeout(initWindow, 300);
- }
- })();
- }
- Main.dump(`Overlay loaded ${early}, ${w.noscriptOverlay}`);
- overlayNext();
- }
- });
- } catch (e) {
- Cu.reportError(e);
- Cu.reportError(`Could not overlay ${w.location.href}`);
- overlayNext();
- }
-
-}
-
-
-function unloadFromWindow(w) {
- if (w.noscriptOverlay) w.noscriptOverlay.listeners.onUnload();
-}
-
diff --git a/extensions/noscript/chrome/content/noscript/ScriptSurrogate.js b/extensions/noscript/chrome/content/noscript/ScriptSurrogate.js
deleted file mode 100644
index 7de5aad..0000000
--- a/extensions/noscript/chrome/content/noscript/ScriptSurrogate.js
+++ /dev/null
@@ -1,440 +0,0 @@
-var ScriptSurrogate = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
- JS_VERSION: "1.8",
- enabled: true,
- prefs: null,
- sandbox: true,
- sandboxInclusions: true,
-
- get syntaxChecker() {
- delete this.syntaxChecker;
- return this.syntaxChecker = new SyntaxChecker(this.JS_VERSION);
- },
- get mappings() {
- delete this.mappings;
- this._init();
- return this.mappings;
- },
-
-
- _init: function() {
- this.prefs = ns.prefService.getBranch("noscript.surrogate.");
- this._syncPrefs();
- ns.onDisposal(() => { this.dispose(); });
- },
-
- _observingPrefs: false,
- _syncPrefs: function() {
- const prefs = this.prefs;
-
- for (let p of ["enabled", "debug", "sandbox", "matchPrivileged"]) this[p] = prefs.getBoolPref(p);
-
- this.sandboxInclusions = this.sandbox;
-
- const map = {__proto__: null};
- var key;
- for (key of prefs.getChildList("", {})) {
- this._parseMapping(prefs, key, map);
- }
-
- const mappings = {forPage: [], noScript: [], inclusion: [], before: [], after: [], all: map};
-
- var mapping;
- for (key in map) {
- mapping = map[key];
- if (mapping.forPage) mappings.forPage.push(mapping);
- if (mapping.noScript) mappings.noScript.push(mapping);
- else if (!mapping.forPage) {
- if (!(mapping.before || mapping.after)) mappings.inclusion.push(mapping);
- else {
- if (mapping.before) mappings.before.push(mapping);
- if (mapping.after) mappings.after.push(mapping);
- }
- }
- }
-
- this.mappings = mappings;
-
- if (!this._observingPrefs) {
- prefs.addObserver("", this, true);
- this._observingPrefs = true;
- }
- },
-
- _parseMapping: function(prefs, key, map) {
- var keyParts = key.split(".");
- var name = keyParts[0];
- var member = keyParts[1];
- if (!(name && member)) return;
- try {
- let value = prefs.getCharPref(key);
- if (!value) return;
- let mapping = (name in map)
- ? map[name]
- : map[name] = new SurrogateMapping(name);
- switch(member) {
- case "sources":
- let prefix = true;
- do {
- switch(value[0]) {
- case '@': mapping.forPage = true; break;
- case '!': mapping.noScript = true; break;
- case '<': mapping.before = true; break;
- case '>': mapping.after = true; break;
- case ' ': break;
- default:
- prefix = false;
- }
- if (prefix) value = value.substring(1);
- } while(prefix);
-
- case "exceptions":
- value = new AddressMatcher(value);
- break;
-
- // case "exceptions": case "replacement": // deferred, see SurrogateMapping.replacement
-
- default:
- return;
- }
-
- mapping[member] = value;
- } catch (e) {
- Cu.reportError(e);
- }
- },
- loadReplacementFile(path) {
- return IO.readFile(IOS.newURI(this._resolveFile(path), null, null)
- .QueryInterface(Ci.nsIFileURL).file);
- },
- getReplacement(name) {
- return COMPAT.getStringPref(this.prefs, name + ".replacement");
- },
- initReplacement: function(m) {
- var r;
- try {
- r = this.getReplacement(m.name);
- if (/^(?:file:\/\/|\.\.?\/)/.test(r)) {
- r = Services.cpmm.sendSyncMessage(IPC_P_MSG.LOAD_SURROGATE, m.name)[0];
- }
-
- if (r && !this.syntaxChecker.check(r)) {
- throw this.syntaxChecker.lastError;
- }
- } catch (e) {
- m.error = e;
- Cu.reportError("Error loading " + m.name + " surrogate: " + e + (r ? "\n" + r : ""));
- r = "";
- }
- return r;
- },
-
- _sandboxes: null,
- createSandboxForWindow(w, ...args) {
- if (!this._sandboxes) {
- this._sandboxes = new Map();
- OS.addObserver(this, "inner-window-destroyed", true);
- }
- let s = new Cu.Sandbox(...args);
- let weakRef = Cu.getWeakReference(s);
- let windowId = w.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils).currentInnerWindowID;
- let sandboxes = this._sandboxes.get(windowId);
- if (!sandboxes) {
- this._sandboxes.set(windowId, sandboxes = [weakRef]);
- } else {
- sandboxes.push(weakRef);
- }
- return s;
- },
- _: {Ci, Cu},
- observe(subject, topic, key) {
- let {Ci, Cu} = this._;
-
- if (topic === "inner-window-destroyed") {
- let windowId = subject.QueryInterface(Ci.nsISupportsPRUint64).data;
- let sandboxes = this._sandboxes.get(windowId);
- if (sandboxes) {
- this._sandboxes.delete(windowId);
- for (let weakRef of sandboxes) {
- let s = weakRef.get();
- if (s) {
- try {
- Cu.nukeSandbox(s);
- } catch (e) {
- Cu.reportError(e);
- }
- }
- }
- }
- return;
- }
-
- if (subject instanceof Ci.nsIPrefBranch) {
- this.prefs.removeObserver("", this, true);
- this._observingPrefs = false;
- if (typeof Thread !== "undefined") {
- Thread.asap(this._syncPrefs, this);
- }
- return;
- }
-
- },
-
- _resolveFile: function(fileURI) {
- const profileURI = IOS.newFileURI(
- Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties)
- .get("ProfD", Ci.nsIFile));
- return (this._resolveFile = function(fileURI) {
- return profileURI.resolve(fileURI);
- })(fileURI);
- },
-
- getScripts: function(scriptURL, pageURL, noScript, scripts) {
-
- var isPage = scriptURL === pageURL;
-
- const list = noScript
- ? this.mappings.noScript
- : isPage
- ? this.mappings.forPage
- : pageURL === '<'
- ? this.mappings.before
- : pageURL === '>'
- ? this.mappings.after
- : this.mappings.inclusion;
-
- for (let j = list.length; j-- > 0;) {
- let mapping = list[j];
- if (mapping.sources && mapping.sources.test(scriptURL) &&
- !(mapping.exceptions && mapping.exceptions.test(pageURL)) &&
- mapping.replacement) {
- let code = mapping.replacement;
-
- if (!noScript && mapping.noScript)
- code = 'window.addEventListener("DOMContentLoaded", function(event) {' +
- code + '}, true)';
-
- if (!scripts) scripts = [code];
- else scripts.push(code);
- }
- }
- return scripts;
- },
-
- _listener(ev) {
- if (typeof ScriptSurrogate === "undefined") { // disabled / uninstalled
- let f = arguments.callee;
- let t = ev.currentTarget;
- for (let et of ["error", "beforescriptexecute", "afterscriptexecute"]) {
- t.removeEventListener(et, f, true);
- }
- return;
- }
-
- let s = ev.target;
- if (s.localName !== "script") return;
- let url = s.src;
- if (!url) return;
-
- let doc = s.ownerDocument;
- let et = ev.type;
-
- if (et !== "error") { // onbefore/onafter script execution
- ScriptSurrogate.apply(doc, url, et[0] === 'b' ? "<" : ">", false);
- return;
- }
-
- // onerror
- let hasSurrogate = ScriptSurrogate.apply(doc, url);
- if (!hasSurrogate) return;
-
- let fakeLoad = ns.fakeScriptLoadEvents;
- if (fakeLoad.enabled &&
- !(fakeLoad.onlyRequireJS && !s.hasAttribute("data-requiremodule") ||
- fakeLoad.exceptions && fakeLoad.exceptions.test(url) ||
- fakeLoad.docExceptions && fakeLoad.docExceptions.test(doc.URL)
- )
- ) {
- ev.preventDefault();
- ev.stopPropagation();
- ev = doc.createEvent('HTMLEvents');
- ev.initEvent('load', false, true);
- s.dispatchEvent(ev);
- }
-
-
-
- },
-
- replaceScript: function(scriptElement) {
- if (scriptElement._surrogated) return true;
-
- let src = scriptElement.src;
- let doc = scriptElement.ownerDocument;
-
- return (src && doc) && this.apply(doc, src, false, false) &&
- (ns.getExpando(doc, "surrogates", {})[src] =
- scriptElement._surrogated = true);
- },
-
- _privilegedRx: /^(?:chrome|resource|moz-extension):/,
- apply: function(document, scriptURL, pageURL, noScript, scripts) {
- if (typeof(noScript) !== "boolean") noScript = !!noScript;
-
- if (this.enabled && (this.matchPrivileged || !this._privilegedRx.test(scriptURL))) {
- scripts = this.getScripts(scriptURL, pageURL, noScript, scripts);
- if (pageURL && !noScript) {
- let w = document.defaultView;
- let events = ["error"];
- for (let when of ["before", "after"]) {
- if (this.mappings[when].length) events.push(`${when}scriptexecute`);
- }
- for (let e of events) {
- w.addEventListener(e, this._listener, true);
- }
- }
- }
-
- if (!scripts) return false;
-
- const runner = noScript ? this.fallback :
- scriptURL === pageURL ?
- document.defaultView !== document.defaultView.top ?
- this.executeSandbox
- : (this.sandbox ? this.execute : this.executeDOM)
- : this.sandboxInclusions ? this.executeSandbox : this.executeDOM;
-
- if (this.debug) {
- // we run each script separately and don't swallow exceptions
- scripts.forEach(function(s) {
- runner.call(this, document, "{" + this._preamble(s) + "}");
- }, this);
- } else {
- runner.call(this, document,this._preamble(
- "try{" +
- scripts.join("}catch(e){}\ntry{") +
- "}catch(e){}")
- );
- }
- return true;
- },
-
- _testAll: function(document) {
- let scripts = [];
- let all = this.mappings.all;
- for (let k in all) scripts.push(all[k].replacement);
- scripts.forEach(function(s) {
- this.executeSandbox(document, "{" + this._preamble(s) + "}");
- }, this);
- },
-
- _preamble: function(s) {
- delete this._preamble;
- return (this._preamble = (ns.geckoVersionCheck("37") >= 0
- ? (s) => s.indexOf("$S(") !== -1
- ? "{let $S; {let nsmHandler={get:(t,n)=>n in t?t[n]:(...x)=>t.__noSuchMethod__(n,...x)};$S=(o)=>new Proxy(o||{},nsmHandler);}\n" + s + "\n}"
- : s
- : s => `{let $S=o=>o||{};\n${s}\n}`
- ))(s);
- },
-
- fallback: function(document, scriptBlock) {
- document.addEventListener("DOMContentLoaded", function(ev) {
- ScriptSurrogate.executeSandbox(ev.currentTarget, scriptBlock);
- }, false);
- },
-
- execute: function(document, scriptBlock) {
- this.execute = ns.geckoVersionCheck("1.9.1") < 0 || ns.geckoVersionCheck("2") >= 0
- ? this.executeSandbox
- : this.executeDOM;
- this.execute(document, scriptBlock);
- },
-
- _sandboxParams: {
- wantXrays: false,
- sandboxName: ""
- },
-
- getPrincipal: (doc) => doc.nodePrincipal,
-
- executeSandbox: function(document, scriptBlock, env) {
- var w = document.defaultView;
- var wrapper = w;
- var s = null;
- try {
- if (typeof w.wrappedJSObject === "object") w = w.wrappedJSObject;
- this._sandboxParams.sandboxName = "NoScript::ScriptSurrogate@" + document.documentURI;
- this._sandboxParams.sandboxPrototype = w;
- s = this.createSandboxForWindow(wrapper, this.getPrincipal(document), this._sandboxParams);
- if (!("top" in s)) s.__proto__ = w;
- if (typeof env !== "undefined") {
- s.env = env;
- let ep = {};
- for (let p in env) {
- ep[p] = "rw";
- }
- env.__exposedProps__ = ep;
- }
- let code = "with(window){" + scriptBlock + "}delete this.env;";
- if ("keys" in Object) code += "Object.keys(this).forEach(function(p) { window[p] = this[p] }, this);";
- Cu.evalInSandbox(code, s);
- } catch (e) {
- if (ns.consoleDump) {
- ns.dump(e);
- ns.dump(scriptBlock);
- }
- if (this.debug) Cu.reportError(e);
- } finally {
- delete this._sandboxParams.sandboxPrototype;
- }
- },
-
- executeDOM: function(document, scriptBlock) {
- var de = document.documentElement;
- try {
- if (!de) {
- this.executeSandbox(document, scriptBlock);
- return;
- }
-
- var se = document.createElement("script");
- se.type = "application/javascript;version=" + ScriptSurrogate.JS_VERSION;
- se.appendChild(document.createTextNode(scriptBlock));
- de.appendChild(se);
- de.removeChild(se);
- } catch (e) {
- if (ns.consoleDump) ns.dump(e);
- if (this.debug) Cu.reportError(e);
- }
- },
-
- dispose() {
- if (this._observingPrefs) {
- this.prefs.removeObserver("", this, true);
- }
- }
-
-
-
-};
-
-function SurrogateMapping(name) {
- this.name = name;
- this.__defineGetter__("replacement", this._replacement);
-}
-SurrogateMapping.prototype = {
- sources: null,
- _replacement: function() {
- delete this.replacement;
- return this.replacement = ScriptSurrogate.initReplacement(this);
- },
- exceptions: null,
- error: null,
-
- forPage: false,
- noScript: false,
- before: false,
- after: false
-};
diff --git a/extensions/noscript/chrome/content/noscript/ScriptlessBGThumbs.js b/extensions/noscript/chrome/content/noscript/ScriptlessBGThumbs.js
deleted file mode 100644
index 962c060..0000000
--- a/extensions/noscript/chrome/content/noscript/ScriptlessBGThumbs.js
+++ /dev/null
@@ -1,48 +0,0 @@
-{
- let scope = {};
- Cu.import("resource://gre/modules/BackgroundPageThumbs.jsm", scope);
-
- let bpt = scope.BackgroundPageThumbs;
-
- if (!bpt._NoScript_) {
- let patched = bpt._NoScript_ = {};
- let patch = (name, f) => {
- patched[name] = bpt[name];
- bpt[name] = f;
- };
- patch("capture", function() {
- Cu.import("resource://gre/modules/PageThumbs.jsm", scope);
- let PageThumbs = scope.PageThumbs;
- let e = PageThumbs._prefEnabled;
- if (!ns.getPref("bgThumbs.allowed")) {
- PageThumbs._prefEnabled = () => false;
- }
- try {
- bpt._NoScript_.capture.apply(bpt, arguments);
- } finally {
- PageThumbs._prefEnabled = e;
- }
- });
-
- bpt._destroyBrowser();
-
- patch("_ensureBrowser", function() {
- if (!this._thumbBrowser) {
- this._NoScript_._ensureBrowser.apply(this, arguments);
- if (this._thumbBrowser && ns.getPref("bgThumbs.disableJS"))
- this._thumbBrowser.messageManager.loadFrameScript(
- "data:text/javascript,docShell.allowJavascript = false", false);
- }
- });
-
- ns.onDisposal(() => {
- let patched = bpt._NoScript_;
- if (!patched) return;
- for(let name of Object.keys(patched)) {
- bpt[name] = patched[name];
- }
- delete bpt._NoScript_;
- });
- }
-
-}
diff --git a/extensions/noscript/chrome/content/noscript/SiteUtils.js b/extensions/noscript/chrome/content/noscript/SiteUtils.js
deleted file mode 100644
index 8d75a09..0000000
--- a/extensions/noscript/chrome/content/noscript/SiteUtils.js
+++ /dev/null
@@ -1,358 +0,0 @@
-var SiteUtils = new function() {
- const _domainPattern = this.domainPattern = /^[\w\u0080-\uffff][\w\-\.\u0080-\uffff]*$/;
- this.ios = IOS;
- this.uriFixup = Cc["@mozilla.org/docshell/urifixup;1"].getService(Ci.nsIURIFixup);
-
- function sorter(a, b) {
- if (a == b) return 0;
- if (!a) return 1;
- if (!b) return -1;
- const dp = _domainPattern;
- return dp.test(a) ?
- (dp.test(b) ? (a < b ? -1 : 1) : -1)
- : (dp.test(b) ? 1 : a < b ? -1 : 1);
- }
-
- this.sort = function(ss) {
- return ss.sort(sorter);
- };
-
- this.getSite = function(url) {
- if (!url ||
- url.charCodeAt(0) < 33 && // needs trimming
- !(url = url.replace(/^\s*(.*?)\s*$/, '$1'))) {
- return "";
- }
-
- if (url[0] === '[' && /^\[\w.*\]$/.test(url)) {
- // special principal
- return url.replace(/\s+/g, '+');
- }
-
- if (url.indexOf(":") == -1) {
- return this.domainMatch(url);
- }
-
- var scheme;
- try {
- scheme = this.ios.extractScheme(url).toLowerCase();
- switch (scheme) {
- case "http": case "https": // commonest case first
- break;
- case "javascript": case "data":
- return "";
- case "about":
- return url.split(/[\?#]/, 1)[0];
- case "chrome":
- return "chrome:";
- }
- scheme += ":";
- if (url == scheme) return url;
- } catch(ex) {
- return this.domainMatch(url);
- }
- try {
- let uri = this.uriFixup.createExposableURI( // fix wyciwyg: and zaps userpass
- IOUtil.unwrapURL(url) // unwrap JAR and view-source uris
- );
-
- try {
- return uri.prePath;
- } catch(exNoPrePath) {
- scheme = uri.scheme;
- let host = uri.spec.substring(scheme.length);
- return /^\/\/[^\/]/.test(host) && (host = this.domainMatch(host.replace(/^\/\/([^\/]+).*/, "$1")))
- ? scheme + "//" + host
- : scheme;
- }
- } catch(ex) {
- return url.slice(-2) === ":0" ? this.getSite(url.slice(0, -2)) + ":0" : "";
- }
- };
-
- this.list2set = function(sl) {
- // kill duplicates
- var prevSite = "";
- var site;
- for (var j = sl.length; j--> 0;) {
- site = sl[j];
- if ((!site) || site == prevSite) {
- sl.splice(j, 1);
- } else {
- prevSite = site;
- }
- }
- return sl;
- };
-
- this.sortedSet = function(sl) {
- return this.list2set(this.sort(sl));
- }
-
- this.splitString = function(s) {
- return s && /\S/.test(s) && s.split(/\s+/) || [];
- };
-
- this.domainMatch = function(url) {
- const m = url.match(this.domainPattern);
- return m ? m[0].toLowerCase() : "";
- };
-
- this.sanitizeList = function(sl) {
- for (var j = sl.length; j-- > 0; ) {
- sl[j] = this.getSite(sl[j]);
- }
- return sl;
- };
-
- this.sanitizeMap = function(sm) {
- var site;
- delete sm[""];
- for (var url in sm) {
- site = this.getSite(url);
- if (site != url) {
- if (site) sm[site] = sm[url];
- delete sm[url];
- }
- }
- return sm;
- };
-
- this.sanitizeString = function(s) {
- return this.set2string(this.string2set(s));
- };
-
- this.string2set = function(s) {
- return this.sortedSet(this.sanitizeList(this.splitString(s)));
- };
-
- this.set2string = function(ss) {
- return ss.join(" ");
- };
-
- this.crop = function(url, max) {
- max = max || 1000;
- if (url.length > max) {
- return this.crop(url.substring(0, max / 2)) + "\n[...]\n" +
- this.crop(url.substring(url.length - max / 2));
- }
- return url.replace(/\w{20}/g, "$&\u200B");
- };
-}
-
-function PolicySites(sitesString) {
- if (sitesString) this.sitesString = sitesString;
-}
-PolicySites.prototype = {
- clone: function() {
- return new PolicySites(this.sitesString);
- }
-,
- equals: function(other) {
- return other && (this.sitesString == other.sitesString);
- }
-,
- _sitesString: "",
- get sitesString() {
- return this._sitesString;
- },
- set sitesString(s) {
- if (s !== this._siteString) {
-
- s = SiteUtils.sanitizeString(s);
- if (s != this._sitesString) {
- this._sitesString = s;
- this._sitesMap = null;
- this._sitesList = null;
- }
- }
- return s;
- }
-,
- _sitesList: null,
- get sitesList() {
- return this._sitesList ? this._sitesList : this._sitesList = SiteUtils.splitString(this.sitesString);
- },
- set sitesList(sl) {
- this.sitesString = SiteUtils.set2string(SiteUtils.sortedSet(SiteUtils.sanitizeList(sl)));
- return this.sitesList;
- }
-,
- _sitesMap: null,
- get sitesMap() {
- if (!this._sitesMap) {
- const sm = {__proto__: null};
- const sl = SiteUtils.splitString(this.sitesString);
- if (sl) {
- for (var j = sl.length; j-- > 0;) {
- sm[sl[j]] = true;
- }
- }
- this._sitesMap = sm;
- }
- return this._sitesMap;
- },
- set sitesMap(sm) {
- sm = sm ? SiteUtils.sanitizeMap(sm) : {__proto__: null};
- var sl = [];
- for (var s in sm) {
- sl.push(s);
- }
-
- this._sitesString = SiteUtils.set2string(SiteUtils.sort(sl));
- this._sitesList = null;
- return this._sitesMap = sm;
- }
-,
- fromPref: function(pref, name = "sites") {
- if (!this.settingPref) {
- try {
- this.sitesString = pref.getCharPref(name)
- .replace(/[^\u0000-\u007f]+/g, function($0) { return decodeURIComponent(escape($0)) });
- } catch(e) {
- ns.dump(e);
- this.sitesString = "";
- return false;
- }
- }
- return true;
- }
-,
- settingPref: false,
- toPref: function(pref, name) {
- if (!name) name = "sites";
- try {
- if (pref.prefIsLocked(name)) {
- this.fromPref(pref);
- return;
- }
- } catch (e) {
- // gonna fail in child process
- }
- var change;
- var s = this.sitesString.replace(/[^\u0000-\u007f]+/g,function($0) { return unescape(encodeURIComponent($0)) });
- try {
- change = s != pref.getCharPref(name);
- } catch(ex) {
- change = true;
- }
-
- if (change) {
- this.settingPref = true;
- try {
- pref.setCharPref(name, s);
- } finally {
- this.settingPref = false;
- }
- }
- }
-,
- // returns the shortest match for a site, or "" if no match is found
- matches: function(site) {
- if (!site) return "";
- const sm = this.sitesMap;
- var match;
- var dots; // track "dots" for fix to 2nd level domain policy lookup flaw
- var pos = site.indexOf(':') + 1;
- if (pos > 0 && (pos == site.length || site[pos] == '/')) {
- if (sm[match = site.substring(0, pos)]) return match; // scheme match
- if (++pos >= site.length || site[pos] != '/') return "";
- match = site.substring(pos + 1);
- dots = 0;
- } else {
- match = site;
- dots = 1;
- }
-
- var submatch;
- for (pos = match.lastIndexOf('.'); pos > 0; dots++) {
- pos = match.lastIndexOf('.', pos - 1);
- if ((dots || pos > -1) && sm[submatch = match.substring(pos + 1)]) {
- return submatch; // domain/subdomain match
- }
- }
-
- if (sm[match]
- && (dots > 1 || sm[site]) // strict CAPS-style matching
- ) return match; // host match
- return sm[site] ? site : ""; // full match
- }
-,
-
-
- _remove: function(site) {
- const sm = this.sitesMap;
- delete sm[site];
- if (site.indexOf(":") < 0 && site.indexOf(".") == site.lastIndexOf(".")) {
- // base domain hack
- delete sm["http://" + site];
- delete sm["https://" + site];
- delete sm["file://" + site];
- delete sm["ftp://" + site];
- }
- },
- remove: function(sites, keepUp, keepDown) {
- if (!sites) return false;
- if (!(typeof(sites) == "object" && "push" in sites))
- return this.remove([sites], keepUp, keepDown);
- keepUp = keepUp || false;
- keepDown = keepDown || false;
-
- const sm = this.sitesMap;
- var change = false;
- var site, match;
- var tmp = keepDown ? null : new PolicySites();
- for (var j = sites.length; j-- > 0;) {
- site = sites[j];
- if (site[site.length - 1] != ":") { // not a scheme only site
- if (!keepUp) {
- while ((match = this.matches(site)) && site != match) { // remove ancestors
- this._remove(match);
- change = true;
- }
- }
- if (!keepDown) {
- tmp.sitesString = site;
- for (match in sm) { // remove descendants
- if (tmp.matches(match)) {
- if (site != match) delete sm[match];
- change = true;
- }
- }
- this._remove(site);
- }
- }
-
- if (site in sm) {
- this._remove(site);
- change = true;
- }
- }
- if (change) this.sitesMap = this._sitesMap;
- return change;
- },
-
- _add: function(site) {
- return (site in this.sitesMap ? false : this.sitesMap[site] = true);
- },
-
- add: function(sites) {
- if (!sites) return false;
- if (!(typeof(sites) == "object" && "push" in sites))
- return this.add([sites]);
-
- var change = false;
- var site;
- for (var j = sites.length; j-- > 0;) {
- site = sites[j];
- if (site.indexOf(":") < 0 && site.indexOf(".") == site.lastIndexOf(".")) {
- // base domain hack
- if(this._add("http://" + site)) change = true;
- if(this._add("https://" + site)) change = true;
- }
- if (this._add(site)) change = true;
- }
- if (change) this.sitesMap = this._sitesMap;
- return change;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/Strings.js b/extensions/noscript/chrome/content/noscript/Strings.js
deleted file mode 100644
index 38fd8e5..0000000
--- a/extensions/noscript/chrome/content/noscript/Strings.js
+++ /dev/null
@@ -1,37 +0,0 @@
-function Strings(chromeName) {
- this.chromeName = chromeName;
-}
-
-Strings.wrap = (s, count) => s.replace(new RegExp("\\w{" + (parseInt(count) || 20) + "}", 'g'), "$&\u200B");
-
-Strings.prototype = {
- _rnd: `${Math.random()}-${Date.now()}`,
- bundles: {},
- getBundle: function(path) {
- if (path in this.bundles) return this.bundles[path];
- try {
- return this.bundles[path] =
- Cc["@mozilla.org/intl/stringbundle;1"]
- .getService(Ci.nsIStringBundleService)
- .createBundle(
- `chrome://${this.chromeName}/${path}/${this.chromeName}.properties?${this._rnd}`
- );
- } catch(ex) {
- return this.bundles[path] = null;
- }
- },
-
-
- _stringFrom: function(bundle, name, parms) {
- try {
- return parms ? bundle.formatStringFromName(name, parms, parms.length) : bundle.GetStringFromName(name);
- } catch(ex) {
- return null;
- }
- }
-,
- getString: function(name, parms) {
- var s = this._stringFrom(this.getBundle("locale"), name, parms);
- return s || name;
- }
-}
diff --git a/extensions/noscript/chrome/content/noscript/SyntaxChecker.js b/extensions/noscript/chrome/content/noscript/SyntaxChecker.js
deleted file mode 100644
index 3797d45..0000000
--- a/extensions/noscript/chrome/content/noscript/SyntaxChecker.js
+++ /dev/null
@@ -1,31 +0,0 @@
-function SyntaxChecker(version) {
- this.version = version || "1.5";
- this.sandbox = new Cu.Sandbox("about:");
-}
-
-SyntaxChecker.prototype = {
- lastError: null,
- lastFunction: null,
- check: function(script) {
- this.sandbox.script = script;
- try {
- return !!(this.lastFunction = this.ev("new Function(script)"));
- } catch(e) {
- this.lastError = e;
- this.lastFunction = null;
- }
- return false;
- },
- unquote: function(s, q) {
- if (!(s[0] == q && s[s.length - 1] == q &&
- !s.replace(/\\./g, '').replace(/^(['"])[^\n\r]*?\1/, "")
- )) return null;
- try {
- return this.ev(s);
- } catch(e) {}
- return null;
- },
- ev: function(s) {
- return Cu.evalInSandbox(s, this.sandbox);
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/Thread.js b/extensions/noscript/chrome/content/noscript/Thread.js
deleted file mode 100644
index 371cfa5..0000000
--- a/extensions/noscript/chrome/content/noscript/Thread.js
+++ /dev/null
@@ -1,95 +0,0 @@
-var Thread = {
-
- hostRunning: true,
- activeLoops: 0,
-
- spin: function(ctrl) {
- ctrl.startTime = ctrl.startTime || Date.now();
- ctrl.timeout = false;
- this.activeLoops++;
- this._spinInternal(ctrl);
- this.activeLoops--;
- ctrl.elapsed = Date.now() - ctrl.startTime;
- return ctrl.timeout;
- },
-
- _spinInternal: function(ctrl) {
- var t = ctrl.startTime;
- var maxTime = parseInt(ctrl.maxTime);
- if (maxTime) {
- while(ctrl.running && this.hostRunning) {
- this.yield();
- if (Date.now() - t > maxTime) {
- ctrl.timeout = true;
- ctrl.running = false;
- break;
- }
- }
- } else while(ctrl.running && this.hostRunning) this.yield();
- },
-
- yield: function() {
- this.current.processNextEvent(true);
- },
-
- yieldAll: function() {
- var t = this.current;
- while(t.hasPendingEvents()) t.processNextEvent(false);
- },
-
- get current() {
- delete this.current;
- var obj = "@mozilla.org/thread-manager;1" in Cc
- ? Cc["@mozilla.org/thread-manager;1"].getService()
- : Cc["@mozilla.org/thread;1"].createInstance(Ci.nsIThread);
- this.__defineGetter__("current", function() { return obj.currentThread; });
- return this.current;
- },
-
- get currentQueue() {
- delete this.currentQueue;
- var eqs = null;
- const CTRID = "@mozilla.org/event-queue-service;1";
- if (CTRID in Cc) {
- const IFace = Ci.nsIEventQueueService;
- eqs = Cc[CTRID].getService(IFace);
- }
- this.__defineGetter__("currentQueue", eqs
- ? function() { return eqs.getSpecialEventQueue(IFace.CURRENT_THREAD_EVENT_QUEUE); }
- : this.__lookupGetter__("current")
- );
- return this.currentQueue;
- },
-
- delay: function(callback, time = 0, self = null, args = DUMMY_ARRAY) {
- var timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- timer.initWithCallback({
- notify: this._delayRunner,
- context: { callback, args, self }
- }, time, 0);
- },
-
- dispatch: function(runnable) {
- this.current.dispatch(runnable, Ci.nsIEventTarget.DISPATCH_NORMAL);
- },
-
- asap: function(callback, self, args = DUMMY_ARRAY) {
- this.current.dispatch({
- run: function() {
- callback.apply(self, args);
- }
- }, Ci.nsIEventTarget.DISPATCH_NORMAL);
- },
-
- _delayRunner: function(timer) {
- var ctx = this.context;
- try {
- if (typeof Thread === "undefined") return;
- ctx.callback.apply(ctx.self, ctx.args);
- } finally {
- this.context = null;
- timer.cancel();
- }
- }
-
-};
diff --git a/extensions/noscript/chrome/content/noscript/UISync.jsm b/extensions/noscript/chrome/content/noscript/UISync.jsm
deleted file mode 100644
index f1feadb..0000000
--- a/extensions/noscript/chrome/content/noscript/UISync.jsm
+++ /dev/null
@@ -1,316 +0,0 @@
-'use strict';
-
-var EXPORTED_SYMBOLS = ["UISync"];
-
-let { interfaces: Ci, classes: Cc, utils: Cu, results: Cr } = Components;
-
-const messages = ["NoScript:reload", "NoScript:reloadAllowedObjects",
- "NoScript:executeJSURL",
- "NoScript:purgeRecent", "NoScript:forceSync",
- "NoScript:unload"];
-
-function UISync(ctx) {
- this.ctx = ctx;
- this.listeners = [];
- this.wire();
- this.scheduleSync();
-}
-
-UISync.prototype = {
- eraser: {
- tapped: null,
- delKey: false,
- },
-
- addListener(type, handler, ...opts) {
- this.ctx.addEventListener(type, handler, ...opts);
- this.listeners.push({type, handler, opts});
- },
- removeListeners() {
- let ctx = this.ctx;
- let ns = ctx.ns;
- for(let {type, handler, opts} of this.listeners) {
- if (ns.consoleDump) ns.dump(`Removing listener ${type}, ${uneval(handler)}, ${uneval(opts)}`);
- ctx.removeEventListener(type, handler, ...opts);
- }
- },
-
- _wired: false,
- wire() {
- this._wired = true;
- let ctx = this.ctx;
- let ns = ctx.ns;
- let eraser = this.eraser;
-
- this.addListener("DOMWindowCreated", () => this.sync());
- this.addListener("NoScript:syncUI", ev => {
- ev.stopPropagation();
- this.scheduleSync();
- }, true);
- this.addListener("DOMContentLoaded", ev => {
- this.onContentLoad(ev);
- }, true);
- this.addListener("pageshow", ev => {
- this.onPageShow(ev);
- }, true);
- this.addListener("pagehide", ev => {
- eraser.tapped = null;
- eraser.delKey = false;
- this.onPageHide(ev);
- }, true);
-
-
- this.addListener("keyup", ev => {
- let el = eraser.tapped;
- if (el && ev.keyCode === 46 &&
- ns.getPref("eraseFloatingElements")
- ) {
- eraser.tapped = null;
- eraser.delKey = true;
- let doc = el.ownerDocument;
- let w = doc.defaultView;
- if (w.getSelection().isCollapsed) {
- let root = doc.body || doc.documentElement;
- let posRx = /^(?:absolute|fixed)$/;
- do {
- if (posRx.test(w.getComputedStyle(el, '').position)) {
- (eraser.tapped = el.parentNode).removeChild(el);
- break;
- }
- } while ((el = el.parentNode) && el != root);
- }
- }
- }, true);
-
- this.addListener("mousedown", ev => {
- if (ev.button === 0) {
- eraser.tapped = ev.target;
- eraser.delKey = false;
- }
- }, true);
-
- this.addListener("mouseup", ev => {
- if (eraser.delKey) {
- eraser.delKey = false;
- ev.preventDefault();
- ev.stopPropagation();
- }
- eraser.tapped = null;
- }, true);
-
- let fixLinksHandler = ev => {
- if (!ns.getPref("fixLinks")) return;
- let doc = ev.target.ownerDocument;
- if (ns.isJSEnabled(ns.getDocSite(doc), doc.defaultView)) return;
- switch(ev.type) {
- case "click":
- ns.onContentClick(ev);
- break;
- case "change":
- ns.onContentChange(ev);
- break;
- }
- };
- this.addListener("click", fixLinksHandler, true);
- this.addListener("change", fixLinksHandler, true);
- if (ns.implementToStaticHTML) {
- this.addListener("NoScript:toStaticHTML", ctx.ns.toStaticHTMLHandler, false, true);
- }
- for (let m of messages) {
- ctx.addMessageListener(m, this);
- }
- this.messages = messages;
- ns.clearClickHandler.install(ctx);
- if (ns.consoleDump && ctx.content && ctx.content.location)
- ns.dump(`Wired frame script at ${ctx.content.location.href}`);
- },
-
- unwire() {
- if (!this._wired) return;
- this._wired = false;
- let ctx = this.ctx;
- let ns = ctx.ns;
-
- ns.clearClickHandler.uninstall(ctx);
- for (let m of this.messages) {
- try {
- ctx.removeMessageListener(m, this);
- } catch (e) {
- }
- }
- this.removeListeners();
- if (ns.consoleDump && ctx.content && ctx.content.location)
- ns.dump(`Unwired frame script at ${ctx.content.location.href}`);
- },
-
- receiveMessage: function(msg) {
- let ctx = this.ctx;
- let ns = ctx.ns;
- if (ns.consoleDump) try {
- ns.dump(`Received message ${msg.name} ${uneval(msg.data)}`);
- } catch (e) {}
- switch(msg.name) {
- case "NoScript:reload":
- let { innerWindowID, snapshots, reloadPolicy, mustReload } = msg.data;
- ns.reload(msg.target, snapshots, mustReload, reloadPolicy, innerWindowID);
- break;
- case "NoScript:reloadAllowedObjects":
- ns.reloadAllowedObjectsChild(msg.target, msg.data.mime);
- break;
- case "NoScript:executeJSURL":
- {
- let browser = msg.target;
- let {url, callbackId, fromURLBar} = msg.data;
- let openCallback = ns.IPC.child.callback(callbackId);
- ns.executeJSURLInContent(browser, browser.content, url, openCallback, fromURLBar);
- }
- break;
- case "NoScript:resetClearClickTimeout":
- ns.clearClickHandler.rapidFire.ts = 0;
- break;
- case "NoScript:purgeRecent":
- ns.recentlyBlocked = [];
- case "NoScript:forceSync":
- this.sync();
- break;
- case "NoScript:unload":
- this.unwire();
- break;
- }
- },
-
- _syncScheduled: false,
- scheduleSync() {
- if (this._syncScheduled) return;
- this.ctx.ns.delayExec(() => this.sync(), 500);
- this._syncScheduled = true;
- },
- sync() {
- this._syncScheduled = false;
- let ctx = this.ctx;
- let sites = ctx.ns.getSites(this.ctx);
- if (sites.pluginExtras && sites.pluginExtras.length) {
- sites.pluginExtras = sites.pluginExtras.map(
- pes => pes.length ? pes.map(pe => {
- if (pe.placeholder || pe.document) {
- pe = Object.assign({}, pe);
- if (pe.placeholder) pe.placeholder = { parentNode: !!pe.placeholder.parentNode };
- if (pe.document) pe.document = true;
- }
- return pe;
- }) : pes
- );
- }
- try {
- ctx.sendAsyncMessage("NoScript:syncUI", sites);
- } catch (ex) {
- ctx.ns.dump(ex);
- ctx.ns.dump(sites.toSource());
- }
- },
-
- notifyMetaRefresh(info) {
- this.ctx.sendAsyncMessage("NoScript:notifyMetaRefresh", info);
- },
-
- onContentLoad(ev) {
- var doc = ev.originalTarget;
- let w = doc.defaultView;
- if (w) {
-
- let ns = this.ctx.ns;
- ns.setExpando(doc, "domLoaded", true);
- if (w === w.top) {
- let url = doc.URL;
- let jsBlocked = /^https?:/.test(url) && !ns.isJSEnabled(ns.getSite(url), w);
- if (jsBlocked) {
- ns.processMetaRefresh(doc, this.notifyMetaRefresh);
- w.addEventListener("pageshow", ev => this.onPageShowNS(ev), false);
- }
- } else {
- ns.frameContentLoaded(w);
- }
- this.sync();
- }
- },
-
- onPageShow(ev) {
- let d = ev.originalTarget;
- if (d.defaultView) {
- try {
- if (ev.persisted) {
- this.toggleObjectsVisibility(d, true);
- }
- } catch(e) {}
- }
- let ns = this.ctx.ns;
- ns.setExpando(d, "domLoaded", true);
- ns.dump(`Sync on pageshow ${d.URL}`);
- this.sync();
- },
- onPageShowNS(ev) {
- let w = ev.currentTarget;
- w.setTimeout(() => this.ctx.ns.detectJSRedirects(w.document), 50);
- },
- onPageHide(ev) {
- let d = ev.originalTarget;
- if (d.defaultView) {
- this.toggleObjectsVisibility(d, false);
- }
- this.sync();
- },
-
- _tags: ["object", "embed"],
- toggleObjectsVisibility(d, v) {
- var ns = this.ctx.ns;
- var rx = ns.hideOnUnloadRegExp;
- if (!rx) return;
- var callback = v ? showObject : hideObject;
- var params = {
- document: d,
- mimeRx: rx,
- classRx: ns.hideObjClassNameRx,
- className: ns.hideObjClassName,
- };
- let aa = null;
- for (let t of this._tags) {
- let oo = d.getElementsByTagName(t);
- let j = oo.length;
- if (j) {
- aa = aa || [oo[--j]];
- while(j-- > 0) {
- aa.push(oo[j]);
- }
- }
- }
- if (aa) {
- for (let j = aa.length; j-- > 0;) {
- callback(params, aa[j]);
- }
- }
- },
-
-};
-
-function hideObject(p, o) {
- if (!p.mimeRx.test(o.type)) return;
-
- var r = p.document.createElement("object");
- r.style.width = o.offsetWidth + "px";
- r.style.height = o.offsetHeight + "px";
- r.style.display = "inline-block";
- o.className += " " + p.className;
- o.parentNode.insertBefore(r, o);
-}
-
-function showObject(p, o) {
- var cs = o.className;
- cs = cs.replace(p.classRx, '');
- if (cs != o.className) {
- o.className = cs;
- var r = o.previousSibling;
- if (r instanceof HTMLObjectElement) {
- r.parentNode.removeChild(r);
- }
- }
-}
diff --git a/extensions/noscript/chrome/content/noscript/URIValidator.js b/extensions/noscript/chrome/content/noscript/URIValidator.js
deleted file mode 100644
index b7cb757..0000000
--- a/extensions/noscript/chrome/content/noscript/URIValidator.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var URIValidator = {
-
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver, Ci.nsISupportsWeakReference]),
-
- // returns false if absolute URI is not valid, undefined if it cannot be validated (i.e. no validator is found for this scheme)
- validate: function(uriSpec) {
- if (!uriSpec) return false;
- var parts = uriSpec.split(":");
- if (parts.length < 2) return false;
- var scheme = parts.shift().toLowerCase();
- if (!scheme) return false;
- var validator = this.validators[scheme];
- try {
- // using unescape rather than decodeURI for a reason:
- // many external URL (e.g. mailto) default to ISO8859, and we would fail,
- // but on the other hand rules marking as invalid non-null high unicode chars are unlikely (let's hope it)
- return validator && validator.test(unescape(parts.join(":")));
- } catch(e) {
- return false;
- }
- },
-
- get validators() {
- delete this.validators;
- this._init();
- return this.validators;
- },
-
- prefs: null,
- _init: function() {
- this.validators = {};
- this.prefs = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefService)
- .getBranch("noscript.urivalid.");
- for (var key of this.prefs.getChildList("", {})) {
- this.parseValidator(key);
- }
- this.prefs.addObserver("", this, true);
- },
- parseValidator: function(key) {
- try {
- this.validators[key] = new RegExp("^" + this.prefs.getCharPref(key) + "$");
- } catch(e) {
- delete this.validators[key];
- }
- },
- observe: function(prefs, topic, key) {
- this.parseValidator(key);
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/WebExt.js b/extensions/noscript/chrome/content/noscript/WebExt.js
deleted file mode 100644
index dec3747..0000000
--- a/extensions/noscript/chrome/content/noscript/WebExt.js
+++ /dev/null
@@ -1,49 +0,0 @@
-var WebExt = {
- enabled: false,
- started: false,
- running: false,
- port: null,
- saveData(json = ns.conf2JSON(true)) {
- this.tell("saveData", json);
- },
- dumpData() {
- this.tell("dumpData");
- },
- tell(type, data) {
- if (this.port) try {
- this.port.postMessage({ type, data });
- } catch (e) {
- if (!/\bdead object\b/.test(e.message)) { // normal on uninstall
- Cu.reportError(e);
- }
- }
- },
-
- init(embeddedWebExtension) {
- WebExt.enabled = true;
- embeddedWebExtension.startup().then(({browser}) => {
- WebExt.started = true;
- ns.dump(`Embedded webext started`);
- browser.runtime.onMessage.addListener(msg => {
- switch(msg) {
- case "STARTED":
- WebExt.running = true;
- break;
- case "STOPPED":
- WebExt.running = false;
- break;
- }
- ns.dump(`Received message from embedded webext ${msg}`);
- });
- browser.runtime.onConnect.addListener(port => {
- ns.dump(`Webext connected`);
- WebExt.port = port;
- WebExt.saveData();
- });
- }).catch(err => {
- Components.utils.reportError(
- `Embedded webext startup failed: ${err.message} ${err.stack}\n`
- );
- });
- },
-};
diff --git a/extensions/noscript/chrome/content/noscript/WebGLInterception.js b/extensions/noscript/chrome/content/noscript/WebGLInterception.js
deleted file mode 100644
index b129f8c..0000000
--- a/extensions/noscript/chrome/content/noscript/WebGLInterception.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var WebGLInterception = {
- sites: {},
- handler(ev) {
- WebGLInterception.record(ev.target, ns.getSite(ev.target.documentURI || ev.target.ownerDocument.documentURI), true);
- },
- record(ctx, site, fromDOM) {
- ns.tagForReplacement(ctx, {
- url: site,
- site: site,
- originSite: site,
- mime: "WebGL"
- });
- let doc = ctx.ownerDocument || ctx;
- if (fromDOM) {
- let ds = DOM.getDocShellForWindow(doc.defaultView);
- if (ds.isLoadingDocument) { // prevent fallback redirection from hiding us
- let sites = this.sites;
- sites[site] = doc.documentURI;
- doc.defaultView.addEventListener("load", () => delete sites[site], false);
- }
- }
- ns.recordBlocked(site, site);
- },
- get interceptionDef() {
- delete this.interceptionDef;
- return (this.interceptionDef = function() {
- var proto = HTMLCanvasElement.prototype;
- var getContext = proto.getContext;
- proto.getContext = function(type, ...rest) {
- if (type && type.toLowerCase().includes("webgl")) {
- var ev = this.ownerDocument.createEvent("Events");
- ev.initEvent("NoScript:WebGL", true, false);
- (this.parentNode ? this : this.ownerDocument)
- .dispatchEvent(ev);
- return null;
- }
- return getContext.call(this, type, ...rest);
- };
- }.toSource() + "()");
- },
- reloadAllowed(docShell) {
- let curURL = docShell.currentURI.spec;
- let site = ns.getSite(curURL);
- if (site in this.sites) {
- let url = this.sites[site];
- delete this.sites[site];
- if (url !== curURL) {
- docShell.loadURI(url, Ci.nsIWebNavigation.LOAD_FLAGS_NONE, null, null, null);
- return true;
- }
- }
- return false;
- },
- hook(doc, site) {
- if (!(ns.isAllowedObject(site, "WebGL", site, site) || ns.isAllowedMime("WebGL", site))) {
- doc.addEventListener("NoScript:WebGL", this.handler, false, true);
- if (site in this.sites) {
- this.record(doc, site);
- }
- return this.interceptionDef;
- }
- return null;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/WinScript.js b/extensions/noscript/chrome/content/noscript/WinScript.js
deleted file mode 100644
index 84edb6c..0000000
--- a/extensions/noscript/chrome/content/noscript/WinScript.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var WinScript = {
- supported: true,
- block: function(window) {
- if (window._blockScriptForGlobal) return;
- try {
- Cu.blockScriptForGlobal(window);
- if (!("_blockScriptForGlobal" in window)) {
- this.patchStyle(window.document);
- }
- } catch (e) {
- if (e.message === "Script may not be disabled for system globals") {
- try {
- window.console.log("NoScript could not disable scripts for system global " + window.document.nodePrincipal.origin);
- } catch(e) {}
- return;
- }
- if (!this._childDo("block", window)) throw e;
- }
- window._blockScriptForGlobal = true;
- },
- unblock: function(window) {
- if (!window._blockScriptForGlobal) return;
- try {
- Cu.unblockScriptForGlobal(window);
- } catch (e) {
- if (this._childDo("unblock", window)) throw e;
- }
- window._blockScriptForGlobal = false;
- },
- isBlocked: function(window) {
- return window._blockScriptForGlobal;
- },
- isDecided: function(window) {
- return "_blockScriptForGlobal" in window;
- },
- get _childDo() {
- return (this._childDo = IPC.parent && IPC.parent.mm && ("isCrossProcessWrapper" in Cu) ?
- function(verb, window) {
- if (Cu.isCrossProcessWrapper(window)) {
- IPC.parent.mm.broadcastAsyncMessage("NoScript:WinScript", verb, { window: window });
- return true;
- }
- return false;
- }
- : function() { return false; }
- );
- },
- _domUtils: Cc["@mozilla.org/inspector/dom-utils;1"].getService(Ci.inIDOMUtils),
- patchStyle: function(doc) {
- let ss = this._domUtils.getAllStyleSheets(doc);
- // reverse loop because the preference stylesheet is almost always the last one
- for (let j = ss.length; j-- > 0;) {
- let s = ss[j];
- switch(s.href) {
-
- case "about:PreferenceStyleSheet":
- {
- let rules = s.cssRules;
- // skip 1st & 2nd, as they are HTML & SVG namespaces
- for (let j = 2, len = rules.length; j < len; j++) {
- let r = rules[j];
- if (r.cssText === "noscript { display: none ! important; }") {
- s.deleteRule(j);
- return;
- }
- }
- }
- break;
- case "data:text/css,noscript%20{%20display%3A%20none%20!important%3B%20}":
- case "resource://gre-resources/noscript.css":
- doc.defaultView.QueryInterface(Ci.nsIInterfaceRequestor)
- .getInterface(Ci.nsIDOMWindowUtils)
- .loadSheetUsingURIString("data:text/css,noscript { display: initial !important }", 0);
- return;
- }
- }
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/about.xul b/extensions/noscript/chrome/content/noscript/about.xul
deleted file mode 100644
index b691856..0000000
--- a/extensions/noscript/chrome/content/noscript/about.xul
+++ /dev/null
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?><?xml-stylesheet href="chrome://noscript/skin/about.css" type="text/css"?><!DOCTYPE dialog SYSTEM "chrome://noscript/locale/noscript.dtd">
-<dialog title="About NoScript" chromehidden="menubar toolbar location directories status extrachrome" id="genericAbout" onload="about_onload()" buttons="accept" xmlns:em="http://www.mozilla.org/2004/em-rdf#" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-<script type="application/x-javascript" src="chrome://noscript/content/noscript.js"/>
-<script type="application/x-javascript">
-function about_onload() {
- const strings=document.getElementById("about-strings");
- const stringsFB=document.getElementById("about-stringsFB");
- function stringFrom(bundle,key,parms) {
- try {
- return parms?bundle.getFormattedString(key,parms):bundle.getString(key);
- } catch(ex) {
- return null;
- }
- }
-
- function getString(key,parms) {
- var s=stringFrom(strings,key,parms);
- return s ? s : stringFrom(stringsFB, key, parms);
- }
-
- function setString(id, attr, key) {
- var s=getString(key || id);
- if(!s) return;
-
- var el=document.getElementById(id);
- if(!el) return;
- if(el.tagName=="description") {
- el.firstChild.nodeValue=s;
- return;
- }
- if(!attr) attr="value";
- el.setAttribute(attr,s);
- }
-
- function tip(id) {
- setString(id,"tooltiptext", id +".tip");
- }
-
- function label(id) {
- setString(id);
- tip(id);
- }
-
-
-
- window.focus();
-
- var str = getString("aboutTitle",["NoScript"]);
- if(str) document.title = str;
- str = getString("version", ["5.1.8.5"]);
- if(str) document.getElementById("extensionVersion").setAttribute("value", str);
-
- setString("extensionDescription",null,"extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description");
-
- label("extensionCreatorLabel");
- label("extensionContributors");
- label("license");
- label("changelog");
-
- tip("logo");
- tip("sponsor");
- tip("informaction");
- tip("extensionHomepage");
- tip("extensionCreator");
-}
-
-function about_open(url, features) {
- noscriptUtil.browse(url, features);
- window.close();
-}
-
-
-</script>
-<stringbundleset id="stringbundleset">
-<stringbundle id="about-strings" src="chrome://noscript/locale/about.properties"/>
-<stringbundle id="about-stringsFB" src="chrome://noscript/content/en-US/about.properties"/>
-</stringbundleset>
-<vbox id="clientBox">
-<vbox id="clientBoxInternal" flex="1">
-<hbox align="start">
-<vbox id="logoBox">
-<image id="logo" src="chrome://noscript/skin/icon80.png" class="text-link" tooltiptext="Visit Extension Home Page" onclick="about_open('https://noscript.net')"/>
-</vbox>
-<vbox flex="1">
-<hbox id="headBox" align="end">
-<vbox flex="1">
-<label value="NoScript" id="extensionName" crop="right"/>
-<label value="Version 5.1.8.5" id="extensionVersion" crop="right"/>
-</vbox>
-<vbox flex="1" align="end">
-<hbox align="end">
-<vbox>
-<image src="chrome://noscript/skin/ia.png" id="informaction" class="text-link" tooltiptext="Visit InformAction Home Page" onclick="about_open('http://www.informaction.com')"/>
-</vbox>
-</hbox>
-</vbox>
-</hbox>
-<spacer flex="1"/>
-<hbox id="creatorBox">
-<label id="extensionCreatorLabel" value="Author:"/>
-<label id="extensionCreator" class="text-link" tooltiptext="Visit Author Home Page" onclick="about_open('http://maone.net')" value="Giorgio Maone" flex="1"/>
-</hbox>
-</vbox>
-</hbox>
-<separator class="thin"/>
-<description id="extensionDescription">Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)</description>
-<separator class="thin"/>
-<label id="extensionContributors" value="Contributors:"/>
-<hbox flex="1">
-<vbox flex="1" id="contributorsBox">
-<description class="contributor" xmlns="">aivo (Estonian translation)</description>
-<description class="contributor" xmlns="">Alberto Martínez, EduLeo &amp; Urko (Spanish translation)</description>
-<description class="contributor" xmlns="">Algimantas Margevičius (Lithuanian translation)</description>
-<description class="contributor" xmlns="">Asaf Bartov &amp; baryoni (Hebrew translation)</description>
-<description class="contributor" xmlns="">Alf and Liesbeth (Dutch translation)</description>
-<description class="contributor" xmlns="">Alexander Sokolov, Sergei Smirnov and negodnik (Russian translation)</description>
-<description class="contributor" xmlns="">Batuhan Çetin, Volkan Gezer and eveterinary (Turkish translation)</description>
-<description class="contributor" xmlns="">Baurzhan Muftakhidinov (Kazakh translation)</description>
-<description class="contributor" xmlns="">Beerboy &amp; Haebaru (Japanese translation)</description>
-<description class="contributor" xmlns="">Carsten Winkler (Danish translation)</description>
-<description class="contributor" xmlns="">Chiou Po-Jung (Chinese Traditional translation)</description>
-<description class="contributor" xmlns="">Dario Ornelas (Portuguese translation)</description>
-<description class="contributor" xmlns="">drAcOniS and Petr Jirsa (Czech translation)</description>
-<description class="contributor" xmlns="">Drive DRKA and Dzmitry Drazdou (Belarusian translation)</description>
-<description class="contributor" xmlns="">Engin Yazılan, Erkan Kaplan &amp; Fathi (Turkish translation)</description>
-<description class="contributor" xmlns="">Georgi Marchev (Bulgarian translation)</description>
-<description class="contributor" xmlns="">Håvard Mork (Norwegian bokmål translation)</description>
-<description class="contributor" xmlns="">Hwasung Kim (Places bookmarklet patch)</description>
-<description class="contributor" xmlns="">Ivan Pesic, dragan021 (Serbian translation)</description>
-<description class="contributor" xmlns="">Ivan Jonoski (Macedonian translation)</description>
-<description class="contributor" xmlns="">Jameka (Swedish translation)</description>
-<description class="contributor" xmlns="">Joan-Josep Bargues (Catalan translation)</description>
-<description class="contributor" xmlns="">Joshua Issac (Malay translation)</description>
-<description class="contributor" xmlns="">Khaled Hosny &amp; Nassim Dhaher (Arabic translation)</description>
-<description class="contributor" xmlns="">Krcko (Croatian translation)</description>
-<description class="contributor" xmlns="">Ian Moody (English GB translation)</description>
-<description class="contributor" xmlns="">LocaLiceR (Hungarian translation)</description>
-<description class="contributor" xmlns="">Lukasz Biegaj &amp; Teo (Polish translation)</description>
-<description class="contributor" xmlns="">Michela Venuto (inspiration)</description>
-<description class="contributor" xmlns="">Mika Pirinen (Finnish translation)</description>
-<description class="contributor" xmlns="">Mindaugas Jakutis (Lithuanian translation)</description>
-<description class="contributor" xmlns="">Mikes Kaszmán István (Hungarian translation)</description>
-<description class="contributor" xmlns="">MozUA (Ukrainian translation)</description>
-<description class="contributor" xmlns="">Pedram Veisi (Persian translation)</description>
-<description class="contributor" xmlns="">Peter Bradley (Welsh translation)</description>
-<description class="contributor" xmlns="">Raryel Costa Souza (Brazilian Portuguese)</description>
-<description class="contributor" xmlns="">regfreak (Indonesian translation)</description>
-<description class="contributor" xmlns="">roebek (Galician translation)</description>
-<description class="contributor" xmlns="">Qen (Thai translation)</description>
-<description class="contributor" xmlns="">seaousak (Korean translation)</description>
-<description class="contributor" xmlns="">SlovakSoft (Slovak translation)</description>
-<description class="contributor" xmlns="">Sonickydon (Greek translation)</description>
-<description class="contributor" xmlns="">Stiepan A. Kovac (Croatian translation)</description>
-<description class="contributor" xmlns="">swarnava (Bengali translation)</description>
-<description class="contributor" xmlns="">Tomaz Macus (Slovenian translation)</description>
-<description class="contributor" xmlns="">Thomas, milupo &amp; Volker Hable (German translation)</description>
-<description class="contributor" xmlns="">tonynguyen and loveleeyoungae (Vietnamese translation)</description>
-<description class="contributor" xmlns="">x10firefox and Ultravioletu (Romanian translation)</description>
-<description class="contributor" xmlns="">Xavier Robin &amp; BlackJack (French translation)</description>
-<description class="contributor" xmlns="">X.F Mao &amp; George C. Tsoi (Simplified Chinese)</description>
-</vbox>
-</hbox>
-<hbox>
-<label id="license" class="text-link" tooltiptext="Read end-user license" onclick="about_open('chrome://noscript/content/NoScript_License.txt')">License</label>
-<spacer flex="1"/>
-<label id="changelog" class="text-link" align="center" tooltiptext="See Changelog" onclick="about_open('https://noscript.net/changelog#5.1.8.5')">Changelog</label>
-<spacer flex="1"/>
-<label id="extensionHomepage" class="text-link" tooltiptext="Visit Extension Home Page" onclick="about_open('https://noscript.net')">https://noscript.net</label>
-</hbox>
-</vbox>
-</vbox>
-</dialog>
diff --git a/extensions/noscript/chrome/content/noscript/antlr.js b/extensions/noscript/chrome/content/noscript/antlr.js
deleted file mode 100644
index d354663..0000000
--- a/extensions/noscript/chrome/content/noscript/antlr.js
+++ /dev/null
@@ -1,11 +0,0 @@
-/*
-Copyright (c) 2003-2008 Terence Parr. All rights reserved.
-Code licensed under the BSD License:
-http://www.antlr.org/license.html
-
-Some parts of the ANTLR class:
-Copyright (c) 2008, Yahoo! Inc. All rights reserved.
-Code licensed under the BSD License:
-http://developer.yahoo.net/yui/license.txt
-*/
-if(typeof org=="undefined"||!org){var org={}}if(typeof org.antlr=="undefined"||!org.antlr){org.antlr={}}org.antlr.global=(function(){return this}).call(null);org.antlr.namespace=function(){var A=arguments,E=null,C,B,D;for(C=0;C<A.length;C=C+1){D=A[C].split(".");E=org.antlr.global;for(B=0;B<D.length;B=B+1){E[D[B]]=E[D[B]]||{};E=E[D[B]]}}return E};org.antlr.env=org.antlr.env||{};org.antlr.env.ua=function(){var D={ie:0,opera:0,gecko:0,webkit:0,mobile:null,air:0,rhino:false};var B,A;try{B=navigator.userAgent;if((/KHTML/).test(B)){D.webkit=1}A=B.match(/AppleWebKit\/([^\s]*)/);if(A&&A[1]){D.webkit=parseFloat(A[1]);if(/ Mobile\//.test(B)){D.mobile="Apple"}else{A=B.match(/NokiaN[^\/]*/);if(A){D.mobile=A[0]}}A=B.match(/AdobeAIR\/([^\s]*)/);if(A){D.air=A[0]}}if(!D.webkit){A=B.match(/Opera[\s\/]([^\s]*)/);if(A&&A[1]){D.opera=parseFloat(A[1]);A=B.match(/Opera Mini[^;]*/);if(A){D.mobile=A[0]}}else{A=B.match(/MSIE\s([^;]*)/);if(A&&A[1]){D.ie=parseFloat(A[1])}else{A=B.match(/Gecko\/([^\s]*)/);if(A){D.gecko=1;A=B.match(/rv:([^\s\)]*)/);if(A&&A[1]){D.gecko=parseFloat(A[1])}}}}}}catch(C){}try{if(typeof window=="undefined"&&loadClass){D.rhino=true}}catch(C){}return D}();org.antlr.namespace("org.antlr.runtime.tree");org.antlr.lang=org.antlr.lang||{isArray:function(B){if(B){var A=org.antlr.lang;return A.isNumber(B.length)&&A.isFunction(B.splice)}return false},isBoolean:function(A){return typeof A==="boolean"},isFunction:function(A){return typeof A==="function"},isNull:function(A){return A===null},isNumber:function(A){return typeof A==="number"&&isFinite(A)},isObject:function(A){return(A&&(typeof A==="object"||org.antlr.lang.isFunction(A)))||false},isString:function(A){return typeof A==="string"},isUndefined:function(A){return typeof A==="undefined"},_IEEnumFix:function(C,B){if(org.antlr.env.ua.ie){var E=["toString","valueOf"],A;for(A=0;A<E.length;A=A+1){var F=E[A],D=B[F];if(org.antlr.lang.isFunction(D)&&D!=Object.prototype[F]){C[F]=D}}}},extend:function(D,E,C){if(!E||!D){throw new Error("org.antlr.lang.extend failed, please check that all dependencies are included.")}var B=function(){};B.prototype=E.prototype;D.prototype=new B();D.prototype.constructor=D;D.superclass=E.prototype;if(E.prototype.constructor==Object.prototype.constructor){E.prototype.constructor=E}if(C){for(var A in C){D.prototype[A]=C[A]}org.antlr.lang._IEEnumFix(D.prototype,C)}},augmentObject:function(E,D){if(!D||!E){throw new Error("Absorb failed, verify dependencies.")}var A=arguments,C,F,B=A[2];if(B&&B!==true){for(C=2;C<A.length;C=C+1){E[A[C]]=D[A[C]]}}else{for(F in D){if(B||!E[F]){E[F]=D[F]}}org.antlr.lang._IEEnumFix(E,D)}},augmentProto:function(D,C){if(!C||!D){throw new Error("Augment failed, verify dependencies.")}var A=[D.prototype,C.prototype];for(var B=2;B<arguments.length;B=B+1){A.push(arguments[B])}org.antlr.lang.augmentObject.apply(this,A)},merge:function(){var D={},B=arguments;for(var C=0,A=B.length;C<A;C=C+1){org.antlr.lang.augmentObject(D,B[C],true)}return D},isValue:function(B){var A=org.antlr.lang;return(A.isObject(B)||A.isString(B)||A.isNumber(B)||A.isBoolean(B))},array:{peek:function(B){if(!org.antlr.lang.isArray(B)){throw new Error("org.antlr.lang.array.peek: a is not an array.")}var A=B.length;if(A<=0){throw new Error("org.antlr.lang.array.peek: a is empty.")}return B[A-1]}}};org.antlr.runtime.RecognizerSharedState=function(){this.following=[];this._fsp=-1;this.errorRecovery=false;this.lastErrorIndex=-1;this.failed=false;this.syntaxErrors=0;this.backtracking=0;this.ruleMemo=null;this.token=null;this.tokenStartCharIndex=-1;this.text=null};org.antlr.runtime.IndexOutOfBoundsException=function(A){org.antlr.runtime.IndexOutOfBoundsException.superclass.constructor.call(this,A)};org.antlr.lang.extend(org.antlr.runtime.IndexOutOfBoundsException,Error,{name:"org.antlr.runtime.IndexOutOfBoundsException"});org.antlr.runtime.RecognitionException=function(A){org.antlr.runtime.RecognitionException.superclass.constructor.call(this);this.input=A;this.index=A.index();if(A instanceof org.antlr.runtime.CommonTokenStream){this.token=A.LT(1);this.line=this.token.getLine();this.charPositionInLine=this.token.getCharPositionInLine()}if(A instanceof org.antlr.runtime.tree.TreeNodeStream){this.extractInformationFromTreeNodeStream(A)}else{if(A instanceof org.antlr.runtime.ANTLRStringStream){this.c=A.LA(1);this.line=A.getLine();this.charPositionInLine=A.getCharPositionInLine()}else{this.c=A.LA(1)}}this.message=this.toString()};org.antlr.lang.extend(org.antlr.runtime.RecognitionException,Error,{input:null,index:null,token:null,node:null,c:null,line:null,name:"org.antlr.runtime.RecognitionException",charPositionInLine:null,approximateLineInfo:null,extractInformationFromTreeNodeStream:function(F){var A=F,E,I,D,H,C;this.node=A.LT(1);var B=A.getTreeAdaptor(),G=B.getToken(this.node);if(G){this.token=G;if(G.getLine()<=0){C=-1;E=A.LT(C);while(E){priorPayload=B.getToken(E);if(priorPayload&&priorPayload.getLine()>0){this.line=priorPayload.getLine();this.charPositionInLine=priorPayload.getCharPositionInLine();this.approximateLineInfo=true;break}--C;E=A.LT(C)}}else{this.line=G.getLine();this.charPositionInLine=G.getCharPositionInLine()}}else{if(this.node instanceof org.antlr.runtime.tree.CommonTree){this.line=this.node.getLine();this.charPositionInLine=this.node.getCharPositionInLine();if(this.node instanceof org.antlr.runtime.tree.CommonTree){this.token=this.node.token}}else{D=B.getType(this.node);H=B.getText(this.node);this.token=new org.antlr.runtime.CommonToken(D,H)}}},getUnexpectedType:function(){if(this.input instanceof org.antlr.runtime.CommonTokenStream){return this.token.getType()}else{if(this.input instanceof org.antlr.runtime.tree.TreeNodeStream){var A=this.input;var B=A.getTreeAdaptor();return B.getType(this.node)}else{return this.c}}}});org.antlr.runtime.MismatchedTokenException=function(B,A){if(arguments.length===0){this.expecting=org.antlr.runtime.Token.INVALID_TOKEN_TYPE}else{org.antlr.runtime.MismatchedTokenException.superclass.constructor.call(this,A);this.expecting=B}};org.antlr.lang.extend(org.antlr.runtime.MismatchedTokenException,org.antlr.runtime.RecognitionException,{toString:function(){return"MismatchedTokenException("+this.getUnexpectedType()+"!="+this.expecting+")"},name:"org.antlr.runtime.MismatchedTokenException"});org.antlr.runtime.UnwantedTokenException=function(B,A){if(arguments.length>0){org.antlr.runtime.UnwantedTokenException.superclass.constructor.call(this,B,A)}};org.antlr.lang.extend(org.antlr.runtime.UnwantedTokenException,org.antlr.runtime.MismatchedTokenException,{getUnexpectedToken:function(){return this.token},toString:function(){var A=", expected "+this.expecting;if(this.expecting===org.antlr.runtime.Token.INVALID_TOKEN_TYPE){A=""}if(!org.antlr.lang.isValue(this.token)){return"UnwantedTokenException(found="+A+")"}return"UnwantedTokenException(found="+this.token.getText()+A+")"},name:"org.antlr.runtime.UnwantedTokenException"});org.antlr.runtime.MissingTokenException=function(B,A,C){if(arguments.length>0){org.antlr.runtime.MissingTokenException.superclass.constructor.call(this,B,A);this.inserted=C}};org.antlr.lang.extend(org.antlr.runtime.MissingTokenException,org.antlr.runtime.MismatchedTokenException,{getMissingType:function(){return this.expecting},toString:function(){if(org.antlr.lang.isValue(this.inserted)&&org.antlr.lang.isValue(this.token)){return"MissingTokenException(inserted "+this.inserted+" at "+this.token.getText()+")"}if(org.antlr.lang.isValue(this.token)){return"MissingTokenException(at "+this.token.getText()+")"}return"MissingTokenException"},name:"org.antlr.runtime.MissingTokenException"});org.antlr.runtime.NoViableAltException=function(C,B,D,A){org.antlr.runtime.NoViableAltException.superclass.constructor.call(this,A);this.grammarDecisionDescription=C;this.decisionNumber=B;this.stateNumber=D};org.antlr.lang.extend(org.antlr.runtime.NoViableAltException,org.antlr.runtime.RecognitionException,{toString:function(){if(this.input instanceof org.antlr.runtime.ANTLRStringStream){return"NoViableAltException('"+this.getUnexpectedType()+"'@["+this.grammarDecisionDescription+"])"}else{return"NoViableAltException("+this.getUnexpectedType()+"@["+this.grammarDecisionDescription+"])"}},name:"org.antlr.runtime.NoViableAltException"});org.antlr.runtime.EarlyExitException=function(B,A){org.antlr.runtime.EarlyExitException.superclass.constructor.call(this,A);this.decisionNumber=B};org.antlr.lang.extend(org.antlr.runtime.EarlyExitException,org.antlr.runtime.RecognitionException,{name:"org.antlr.runtime.EarlyExitException"});org.antlr.runtime.MismatchedSetException=function(B,A){org.antlr.runtime.MismatchedSetException.superclass.constructor.call(this,A);this.expecting=B};org.antlr.lang.extend(org.antlr.runtime.MismatchedSetException,org.antlr.runtime.RecognitionException,{toString:function(){return"MismatchedSetException("+this.getUnexpectedType()+"!="+this.expecting+")"},name:"org.antlr.runtime.MismatchedSetException"});org.antlr.runtime.MismatchedNotSetException=function(B,A){org.antlr.runtime.MismatchedNotSetException.superclass.constructor.call(this,B,A)};org.antlr.lang.extend(org.antlr.runtime.MismatchedNotSetException,org.antlr.runtime.MismatchedSetException,{toString:function(){return"MismatchedNotSetException("+this.getUnexpectedType()+"!="+this.expecting+")"},name:"org.antlr.runtime.MismatchedNotSetException"});org.antlr.runtime.MismatchedRangeException=function(B,A,C){if(arguments.length===0){return this}org.antlr.runtime.MismatchedRangeException.superclass.constructor.call(this,C);this.a=B;this.b=A};org.antlr.lang.extend(org.antlr.runtime.MismatchedRangeException,org.antlr.runtime.RecognitionException,{toString:function(){return"MismatchedRangeException("+this.getUnexpectedType()+" not in ["+this.a+","+this.b+"])"},name:"org.antlr.runtime.MismatchedRangeException"});org.antlr.runtime.FailedPredicateException=function(A,C,B){org.antlr.runtime.FailedPredicateException.superclass.constructor.call(this,A);this.ruleName=C;this.predicateText=B};org.antlr.lang.extend(org.antlr.runtime.FailedPredicateException,org.antlr.runtime.RecognitionException,{toString:function(){return"FailedPredicateException("+this.ruleName+",{"+this.predicateText+"}?)"},name:"org.antlr.runtime.FailedPredicateException"});org.antlr.runtime.BitSet=function(A){if(!A){A=org.antlr.runtime.BitSet.BITS}if(org.antlr.lang.isArray(A)){this.bits=A}else{if(org.antlr.lang.isNumber(A)){this.bits=[]}}};org.antlr.lang.augmentObject(org.antlr.runtime.BitSet,{BITS:32,LOG_BITS:5,MOD_MASK:31,bitMask:function(B){var A=B&org.antlr.runtime.BitSet.MOD_MASK;return 1<<A},numWordsToHold:function(A){return(A>>org.antlr.runtime.BitSet.LOG_BITS)+1},wordNumber:function(A){return A>>org.antlr.runtime.BitSet.LOG_BITS},of:function(D,A){var B,F,C,E;if(org.antlr.lang.isNumber(D)){if(org.antlr.lang.isNumber(A)){C=new org.antlr.runtime.BitSet(A+1);for(B=D;B<=A;B++){F=org.antlr.runtime.BitSet.wordNumber(B);C.bits[F]|=org.antlr.runtime.BitSet.bitMask(B)}return C}else{C=new org.antlr.runtime.BitSet(D+1);C.add(D);return C}}else{if(org.antlr.lang.isArray(D)){C=new org.antlr.runtime.BitSet();for(B=D.length-1;B>=0;B--){C.add(D[B])}return C}else{if(D instanceof org.antlr.runtime.BitSet){if(!D){return null}return D}else{if(D instanceof org.antlr.runtime.IntervalSet){if(!D){return null}C=new org.antlr.runtime.BitSet();C.addAll(D);return C}else{if(org.antlr.lang.isObject(D)){E=[];for(B in D){if(org.antlr.lang.isNumber(B)){E.push(B)}}return org.antlr.runtime.BitSet.of(E)}}}}}}});org.antlr.runtime.BitSet.prototype={add:function(A){var B=org.antlr.runtime.BitSet.wordNumber(A);if(B>=this.bits.length){this.growToInclude(A)}this.bits[B]|=org.antlr.runtime.BitSet.bitMask(A)},addAll:function(C){var A,B,D;if(C instanceof org.antlr.runtime.BitSet){this.orInPlace(C)}else{if(C instanceof org.antlr.runtime.IntervalSet){A=C}else{if(org.antlr.lang.isArray(C)){for(B=0;B<C.length;B++){D=C[B];this.add(D)}}else{return }}}},and:function(A){var B=this.clone();B.andInPlace(A);return B},andInPlace:function(A){var C=Math.min(this.bits.length,A.bits.length),B;for(B=C-1;B>=0;B--){this.bits[B]&=A.bits[B]}for(B=C;B<this.bits.length;B++){this.bits[B]=0}},clear:function(B){if(arguments.length===0){var A;for(A=this.bits.length-1;A>=0;A--){this.bits[A]=0}return }var C=org.antlr.runtime.BitSet.wordNumber(B);if(C>=this.bits.length){this.growToInclude(B)}this.bits[C]&=~org.antlr.runtime.BitSet.bitMask(B)},clone:function(){var C,B,A=[];for(C=0,B=this.bits.length;C<B;C++){A[C]=this.bits[C]}return new org.antlr.runtime.BitSet(A)},size:function(){var B=0,A,C,D;for(A=this.bits.length-1;A>=0;A--){C=this.bits[A];if(C!==0){for(D=org.antlr.runtime.BitSet.BITS-1;D>=0;D--){if((C&(1<<D))!==0){B++}}}}return B},equals:function(A){if(!A||!(A instanceof org.antlr.runtime.BitSet)){return false}var B=A,C,D=Math.min(this.bits.length,B.bits.length);for(C=0;C<D;C++){if(this.bits[C]!=B.bits[C]){return false}}if(this.bits.length>D){for(C=D+1;C<this.bits.length;C++){if(this.bits[C]!==0){return false}}}else{if(B.bits.length>D){for(C=D+1;C<B.bits.length;C++){if(B.bits[C]!==0){return false}}}}return true},growToInclude:function(D){var A=Math.max(this.bits.length<<1,org.antlr.runtime.BitSet.numWordsToHold(D)),C=[],B;for(B=0,len=this.bits.length;B<len;B++){C[B]=this.bits[B]}this.bits=C},member:function(A){var B=org.antlr.runtime.BitSet.wordNumber(A);if(B>=this.bits.length){return false}return(this.bits[B]&org.antlr.runtime.BitSet.bitMask(A))!==0},getSingleElement:function(){var A;for(A=0;A<(this.bits.length<<org.antlr.runtime.BitSet.LOG_BITS);A++){if(this.member(A)){return A}}return -1},isNil:function(){var A;for(A=this.bits.length-1;A>=0;A--){if(this.bits[A]!==0){return false}}return true},complement:function(B){if(B){return B.subtract(this)}else{var A=this.clone();A.notInPlace();return A}},notInPlace:function(){var A,D,B,C;if(arguments.length===0){for(B=this.bits.length-1;B>=0;B--){this.bits[B]=~this.bits[B]}}else{if(arguments.length===1){A=0;D=arguments[0]}else{A=arguments[0];D=arguments[1]}this.growToInclude(D);for(B=A;B<=D;B++){C=org.antlr.runtime.BitSet.wordNumber(B);this.bits[C]^=org.antlr.runtime.BitSet.bitMask(B)}}},or:function(A){if(!A){return this}var B=this.clone();B.orInPlace(A);return B},orInPlace:function(A){if(!A){return }if(A.bits.length>this.bits.length){this.setSize(A.bits.length)}var C=Math.min(this.bits.length,A.bits.length),B;for(B=C-1;B>=0;B--){this.bits[B]|=A.bits[B]}},remove:function(A){var B=org.antlr.runtime.BitSet.wordNumber(A);if(B>=this.bits.length){this.growToInclude(A)}this.bits[B]&=~org.antlr.runtime.BitSet.bitMask(A)},setSize:function(A){var B=A-this.bits.length;while(B>=0){this.bits.push(0);B--}},numBits:function(){return this.bits.length<<org.antlr.runtime.BitSet.LOG_BITS},lengthInLongWords:function(){return this.bits.length},subset:function(A){if(!A){return false}return this.and(A).equals(this)},subtractInPlace:function(A){if(!A){return }var B;for(B=0;B<this.bits.length&&B<A.bits.length;B++){this.bits[B]&=~A.bits[B]}},subtract:function(A){if(!A||!(A instanceof org.antlr.runtime.BitSet)){return null}var B=this.clone();B.subtractInPlace(A);return B},toArray:function(){var A=[],C,B=0;for(C=0;C<(this.bits.length<<org.antlr.runtime.BitSet.LOG_BITS);C++){if(this.member(C)){A[B++]=C}}return A},toPackedArray:function(){return this.bits},toString:function(){if(arguments.length===0){return this.toString1(null)}else{if(org.antlr.lang.isString(arguments[0])){if(!org.antlr.lang.isValue(arguments[1])){return this.toString1(null)}else{return this.toString2(arguments[0],arguments[1])}}else{return this.toString1(arguments[0])}}},toString1:function(D){var A="{",E=",",B,C=false;for(B=0;B<(this.bits.length<<org.antlr.runtime.BitSet.LOG_BITS);B++){if(this.member(B)){if(B>0&&C){A+=E}if(D){A+=D.getTokenDisplayName(B)}else{A+=B.toString()}C=true}}return A+"}"},toString2:function(C,B){var D="",A;for(A=0;A<(this.bits.length<<org.antlr.runtime.BitSet.LOG_BITS);A++){if(this.member(A)){if(D.length>0){D+=C}if(A>=B.size()){D+="'"+A+"'"}else{if(!org.antlr.lang.isValue(B.get(A))){D+="'"+A+"'"}else{D+=B.get(A)}}}}return D}};org.antlr.runtime.CharStream={EOF:-1};org.antlr.runtime.CommonToken=function(){var A;this.charPositionInLine=-1;this.channel=0;this.index=-1;if(arguments.length==1){if(org.antlr.lang.isNumber(arguments[0])){this.type=arguments[0]}else{A=arguments[0];this.text=A.getText();this.type=A.getType();this.line=A.getLine();this.index=A.getTokenIndex();this.charPositionInLine=A.getCharPositionInLine();this.channel=A.getChannel();if(A instanceof org.antlr.runtime.CommonToken){this.start=A.start;this.stop=A.stop}}}else{if(arguments.length==2){this.type=arguments[0];this.text=arguments[1];this.channel=0}else{if(arguments.length==5){this.input=arguments[0];this.type=arguments[1];this.channel=arguments[2];this.start=arguments[3];this.stop=arguments[4]}}}};org.antlr.runtime.CommonToken.prototype={getType:function(){return this.type},setLine:function(A){this.line=A},getText:function(){if(org.antlr.lang.isString(this.text)){return this.text}if(!this.input){return null}this.text=this.input.substring(this.start,this.stop);return this.text},setText:function(A){this.text=A},getLine:function(){return this.line},getCharPositionInLine:function(){return this.charPositionInLine},setCharPositionInLine:function(A){this.charPositionInLine=A},getChannel:function(){return this.channel},setChannel:function(A){this.channel=A},setType:function(A){this.type=A},getStartIndex:function(){return this.start},setStartIndex:function(A){this.start=A},getStopIndex:function(){return this.stop},setStopIndex:function(A){this.stop=A},getTokenIndex:function(){return this.index},setTokenIndex:function(A){this.index=A},getInputStream:function(){return this.input},setInputStream:function(A){this.input=A},toString:function(){var B="";if(this.channel>0){B=",channel="+this.channel}var A=this.getText();if(!org.antlr.lang.isNull(A)){A=A.replace(/\n/g,"\\\\n");A=A.replace(/\r/g,"\\\\r");A=A.replace(/\t/g,"\\\\t")}else{A="<no text>"}return"[@"+this.getTokenIndex()+","+this.start+":"+this.stop+"='"+A+"',<"+this.type+">"+B+","+this.line+":"+this.getCharPositionInLine()+"]"}};org.antlr.runtime.Token=function(){};org.antlr.lang.augmentObject(org.antlr.runtime.Token,{EOR_TOKEN_TYPE:1,DOWN:2,UP:3,MIN_TOKEN_TYPE:4,EOF:org.antlr.runtime.CharStream.EOF,EOF_TOKEN:new org.antlr.runtime.CommonToken(org.antlr.runtime.CharStream.EOF),INVALID_TOKEN_TYPE:0,INVALID_TOKEN:new org.antlr.runtime.CommonToken(0),SKIP_TOKEN:new org.antlr.runtime.CommonToken(0),DEFAULT_CHANNEL:0,HIDDEN_CHANNEL:99});org.antlr.lang.augmentObject(org.antlr.runtime.CommonToken,org.antlr.runtime.Token);org.antlr.runtime.tree.RewriteCardinalityException=function(A){this.elementDescription=A};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteCardinalityException,Error,{getMessage:function(){if(org.antlr.lang.isString(this.elementDescription)){return this.elementDescription}return null},name:function(){return"org.antlr.runtime.tree.RewriteCardinalityException"}});org.antlr.runtime.tree.RewriteEmptyStreamException=function(B){var A=org.antlr.runtime.tree.RewriteEmptyStreamException.superclass;A.constructor.call(this,B)};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteEmptyStreamException,org.antlr.runtime.tree.RewriteCardinalityException,{name:function(){return"org.antlr.runtime.tree.RewriteEmptyStreamException"}});org.antlr.runtime.tree.RewriteEarlyExitException=function(B){var A=org.antlr.runtime.tree.RewriteEarlyExitException.superclass;if(org.antlr.lang.isUndefined(B)){B=null}A.constructor.call(this,B)};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteEarlyExitException,org.antlr.runtime.tree.RewriteCardinalityException,{name:function(){return"org.antlr.runtime.tree.RewriteEarlyExitException"}});org.antlr.runtime.MismatchedTreeNodeException=function(B,A){if(B&&A){org.antlr.runtime.MismatchedTreeNodeException.superclass.constructor.call(this,A);this.expecting=B}};org.antlr.lang.extend(org.antlr.runtime.MismatchedTreeNodeException,org.antlr.runtime.RecognitionException,{toString:function(){return"MismatchedTreeNodeException("+this.getUnexpectedType()+"!="+this.expecting+")"},name:"org.antlr.runtime.MismatchedTreeNodeException"});org.antlr.runtime.tree.BaseTree=function(){};org.antlr.runtime.tree.BaseTree.prototype={getChild:function(A){if(!this.children||A>=this.children.length){return null}return this.children[A]},getChildren:function(){return this.children},getFirstChildWithType:function(C){var B,A;for(B=0;this.children&&B<this.children.length;B++){A=this.children[B];if(A.getType()===C){return A}}return null},getChildCount:function(){if(!this.children){return 0}return this.children.length},addChild:function(B){if(!org.antlr.lang.isValue(B)){return }var C=B,E,A,D;if(C.isNil()){if(this.children&&this.children==C.children){throw new Error("attempt to add child list to itself")}if(C.children){if(this.children){E=C.children.length;for(A=0;A<E;A++){D=C.children[A];this.children.push(D);D.setParent(this);D.setChildIndex(this.children.length-1)}}else{this.children=C.children;this.freshenParentAndChildIndexes()}}}else{if(!this.children){this.children=this.createChildrenList()}this.children.push(B);C.setParent(this);C.setChildIndex(this.children.length-1)}},addChildren:function(A){var C,B;for(C=0;C<A.length;C++){B=A[C];this.addChild(B)}},setChild:function(B,A){if(!A){return }if(A.isNil()){throw new Error("Can't set single child to a list")}if(!this.children){this.children=this.createChildrenList()}this.children[B]=A;A.setParent(this);A.setChildIndex(B)},deleteChild:function(B){if(!this.children){return null}if(B<0||B>=this.children.length){throw new Error("Index out of bounds.")}var A=this.children.splice(B,1)[0];this.freshenParentAndChildIndexes(B);return A},replaceChildren:function(H,I,P){if(!this.children){throw new Error("indexes invalid; no children in list")}var O=I-H+1;var A;var K=P;var D=null;if(K.isNil()){D=K.children}else{D=[];D.push(K)}A=D.length;var B=D.length;var N=O-A;var F,G,C,E,M,J,L;if(N===0){F=0;for(G=H;G<=I;G++){C=D[F];this.children[G]=C;C.setParent(this);C.setChildIndex(G);F++}}else{if(N>0){for(F=0;F<B;F++){this.children[H+F]=D[F]}E=H+B;for(M=E;M<=I;M++){J=this.children.splice(E,1)[0]}this.freshenParentAndChildIndexes(H)}else{for(F=0;F<O;F++){this.children[H+F]=D[F]}L=A-O;for(F=O;F<A;F++){this.children.splice(H+F,0,D[F])}this.freshenParentAndChildIndexes(H)}}},createChildrenList:function(){return[]},isNil:function(){return false},freshenParentAndChildIndexes:function(A){if(!org.antlr.lang.isNumber(A)){A=0}var D=this.getChildCount(),C,B;for(C=A;C<D;C++){B=this.getChild(C);B.setChildIndex(C);B.setParent(this)}},sanityCheckParentAndChildIndexes:function(B,A){if(arguments.length===0){B=null;A=-1}if(B!==this.getParent()){throw new Error("parents don't match; expected "+B+" found "+this.getParent())}if(A!==this.getChildIndex()){throw new Error("child indexes don't match; expected "+A+" found "+this.getChildIndex())}var E=this.getChildCount(),D,C;for(D=0;D<E;D++){C=this.getChild(D);C.sanityCheckParentAndChildIndexes(this,D)}},getChildIndex:function(){return 0},setChildIndex:function(A){},getParent:function(){return null},setParent:function(A){},getTree:function(){return this},toStringTree:function(){if(!this.children||this.children.length===0){return this.toString()}var A="",C,B;if(!this.isNil()){A+="(";A+=this.toString();A+=" "}for(C=0;this.children&&C<this.children.length;C++){B=this.children[C];if(C>0){A+=" "}A+=B.toStringTree()}if(!this.isNil()){A+=")"}return A},getLine:function(){return 0},getCharPositionInLine:function(){return 0}};org.antlr.runtime.tree.CommonTree=function(A){this.startIndex=-1;this.stopIndex=-1;this.childIndex=-1;this.parent=null;this.token=null;if(A instanceof org.antlr.runtime.tree.CommonTree){org.antlr.runtime.tree.CommonTree.superclass.constructor.call(this,A);this.token=A.token;this.startIndex=A.startIndex;this.stopIndex=A.stopIndex}else{if(A instanceof org.antlr.runtime.CommonToken){this.token=A}}};org.antlr.lang.extend(org.antlr.runtime.tree.CommonTree,org.antlr.runtime.tree.BaseTree,{getToken:function(){return this.token},dupNode:function(){return new org.antlr.runtime.tree.CommonTree(this)},isNil:function(){return !this.token},getType:function(){if(!this.token){return org.antlr.runtime.Token.INVALID_TOKEN_TYPE}return this.token.getType()},getText:function(){if(!this.token){return null}return this.token.getText()},getLine:function(){if(!this.token||this.token.getLine()===0){if(this.getChildCount()>0){return this.getChild(0).getLine()}return 0}return this.token.getLine()},getCharPositionInLine:function(){if(!this.token||this.token.getCharPositionInLine()===-1){if(this.getChildCount()>0){return this.getChild(0).getCharPositionInLine()}return 0}return this.token.getCharPositionInLine()},getTokenStartIndex:function(){if(this.token){return this.token.getTokenIndex()}return this.startIndex},setTokenStartIndex:function(A){this.startIndex=A},getTokenStopIndex:function(){if(this.token){return this.token.getTokenIndex()}return this.stopIndex},setTokenStopIndex:function(A){this.stopIndex=A},getChildIndex:function(){return this.childIndex},getParent:function(){return this.parent},setParent:function(A){this.parent=A},setChildIndex:function(A){this.childIndex=A},toString:function(){if(this.isNil()){return"nil"}if(this.getType()===org.antlr.runtime.Token.INVALID_TOKEN_TYPE){return"<errornode>"}if(!this.token){return null}return this.token.getText()}});org.antlr.runtime.tree.Tree={INVALID_NODE:new org.antlr.runtime.tree.CommonTree(org.antlr.runtime.Token.INVALID_TOKEN)};org.antlr.runtime.tree.CommonErrorNode=function(A,D,B,C){if(!B||(B.getTokenIndex()<D.getTokenIndex()&&B.getType()!=org.antlr.runtime.Token.EOF)){B=D}this.input=A;this.start=D;this.stop=B;this.trappedException=C};org.antlr.lang.extend(org.antlr.runtime.tree.CommonErrorNode,org.antlr.runtime.tree.CommonTree,{isNil:function(){return false},getType:function(){return org.antlr.runtime.Token.INVALID_TOKEN_TYPE},getText:function(){var C=null;if(this.start instanceof org.antlr.runtime.CommonToken){var B=this.start.getTokenIndex();var A=this.stop.getTokenIndex();if(this.stop.getType()===org.antlr.runtime.Token.EOF){A=this.input.size()}C=this.input.toString(B,A)}else{if(this.start instanceof org.antlr.runtime.tree.CommonTree){C=this.input.toString(this.start,this.stop)}else{C="<unknown>"}}return C},toString:function(){if(this.trappedException instanceof org.antlr.runtime.MissingTokenException){return"<missing type: "+this.trappedException.getMissingType()+">"}else{if(this.trappedException instanceof org.antlr.runtime.UnwantedTokenException){return"<extraneous: "+this.trappedException.getUnexpectedToken()+", resync="+this.getText()+">"}else{if(this.trappedException instanceof org.antlr.runtime.MismatchedTokenException){return"<mismatched token: "+this.trappedException.token+", resync="+this.getText()+">"}else{if(this.trappedException instanceof org.antlr.runtime.NoViableAltException){return"<unexpected: "+this.trappedException.token+", resync="+this.getText()+">"}}}}return"<error: "+this.getText()+">"}});org.antlr.runtime.tree.BaseTreeAdaptor=function(){this.uniqueNodeID=1};org.antlr.runtime.tree.BaseTreeAdaptor.prototype={nil:function(){return this.create(null)},errorNode:function(A,E,C,D){var B=new org.antlr.runtime.tree.CommonErrorNode(A,E,C,D);return B},isNil:function(A){return A.isNil()},dupTree:function(B,C){if(arguments.length===1){C=null}if(!B){return null}var D=this.dupNode(B);this.setChildIndex(D,this.getChildIndex(B));this.setParent(D,C);var G=this.getChildCount(B),A,F,E;for(A=0;A<G;A++){F=this.getChild(B,A);E=this.dupTree(F,B);this.addChild(D,E)}return D},addChild:function(A,B){if(A&&org.antlr.lang.isValue(B)){A.addChild(B)}},becomeRoot:function(D,C){if(D instanceof org.antlr.runtime.CommonToken||!D){D=this.create(D)}var A=D,B=C;if(!C){return D}if(A.isNil()){if(A.getChildCount()>1){throw new Error("more than one node as root (TODO: make exception hierarchy)")}A=A.getChild(0)}A.addChild(B);return A},rulePostProcessing:function(A){var B=A;if(B&&B.isNil()){if(B.getChildCount()===0){B=null}else{if(B.getChildCount()===1){B=B.getChild(0);B.setParent(null);B.setChildIndex(-1)}}}return B},create:function(C,B){var D,A;if(arguments.length===2){if(org.antlr.lang.isString(arguments[1])){D=arguments[1];B=this.createToken(C,D);A=this.create(B);return A}else{B=this.createToken(B);B.setType(C);A=this.create(B);return A}}else{if(arguments.length===3){D=arguments[2];B=this.createToken(B);B.setType(C);B.setText(D);A=this.create(B);return A}}},getType:function(A){A.getType();return 0},setType:function(A,B){throw new Error("don't know enough about Tree node")},getText:function(A){return A.getText()},setText:function(A,B){throw new Error("don't know enough about Tree node")},getChild:function(B,A){return B.getChild(A)},setChild:function(B,A,C){B.setChild(A,C)},deleteChild:function(B,A){return B.deleteChild(A)},getChildCount:function(A){return A.getChildCount()},getUniqueID:function(B){if(!this.treeToUniqueIDMap){this.treeToUniqueIDMap={}}var C=this.treeToUniqueIDMap[B];if(org.antlr.lang.isValue(C)){return C}var A=this.uniqueNodeID;this.treeToUniqueIDMap[B]=A;this.uniqueNodeID++;return A}};org.antlr.runtime.tree.CommonTreeAdaptor=function(){};org.antlr.lang.extend(org.antlr.runtime.tree.CommonTreeAdaptor,org.antlr.runtime.tree.BaseTreeAdaptor,{dupNode:function(A){if(!org.antlr.lang.isValue(A)){return null}return A.dupNode()},create:function(A){if(arguments.length>1){return org.antlr.runtime.tree.CommonTreeAdaptor.superclass.create.apply(this,arguments)}return new org.antlr.runtime.tree.CommonTree(A)},createToken:function(A){if(arguments.length===2){return new org.antlr.runtime.CommonToken(arguments[0],arguments[1])}else{return new org.antlr.runtime.CommonToken(arguments[0])}},setTokenBoundaries:function(C,E,A){if(!org.antlr.lang.isValue(C)){return }var D=0,B=0;if(org.antlr.lang.isValue(E)){if(E.getTokenIndex){D=E.getTokenIndex()}else{if(E.getStartIndex){D=E.getStartIndex()}else{D=E.getTokenStartIndex()}}}if(org.antlr.lang.isValue(A)){if(B.getTokenIndex){B=A.getTokenIndex()}else{if(A.getStopIndex){B=A.getStopIndex()}else{B=A.getTokenStopIndex()}}}C.setTokenStartIndex(D);C.setTokenStopIndex(B)},getTokenStartIndex:function(A){if(!A){return -1}return A.getTokenStartIndex()},getTokenStopIndex:function(A){if(!A){return -1}return A.getTokenStopIndex()},getText:function(A){if(!A){return null}return A.getText()},getType:function(A){if(!A){return org.antlr.runtime.Token.INVALID_TOKEN_TYPE}return A.getType()},getToken:function(A){if(A instanceof org.antlr.runtime.tree.CommonTree){return A.getToken()}return null},getChild:function(B,A){if(!B){return null}return B.getChild(A)},getChildCount:function(A){if(!A){return 0}return A.getChildCount()},getParent:function(A){return A.getParent()},setParent:function(A,B){A.setParent(B)},getChildIndex:function(A){return A.getChildIndex()},setChildIndex:function(B,A){B.setChildIndex(A)},replaceChildren:function(D,B,A,C){if(D){D.replaceChildren(B,A,C)}}});org.antlr.runtime.ANTLRStringStream=function(A){this.p=0;this.line=1;this.charPositionInLine=0;this.markDepth=0;this.markers=null;this.lastMarker=null;this.data=A;this.n=A.length};org.antlr.runtime.ANTLRStringStream.prototype={reset:function(){this.p=0;this.line=1;this.charPositionInLine=0;this.markDepth=0},consume:function(){if(this.p<this.n){this.charPositionInLine++;if(this.data.charAt(this.p)==="\n"){this.line++;this.charPositionInLine=0}this.p++}},LA:function(B){if(B<0){B++}var A=this.p+B-1;if(A>=this.n||A<0){return org.antlr.runtime.CharStream.EOF}return this.data.charAt(A)},index:function(){return this.p},size:function(){return this.n},mark:function(){if(!this.markers){this.markers=[];this.markers.push(null)}this.markDepth++;var A=null;if(this.markDepth>=this.markers.length){A={};this.markers.push(A)}else{A=this.markers[this.markDepth]}A.p=this.p;A.line=this.line;A.charPositionInLine=this.charPositionInLine;this.lastMarker=this.markDepth;return this.markDepth},rewind:function(A){if(!org.antlr.lang.isNumber(A)){A=this.lastMarker}var B=this.markers[A];this.seek(B.p);this.line=B.line;this.charPositionInLine=B.charPositionInLine;this.release(A)},release:function(A){this.markDepth=A;this.markDepth--},seek:function(A){if(A<=this.p){this.p=A;return }while(this.p<A){this.consume()}},substring:function(B,A){return this.data.substr(B,A-B+1)},getLine:function(){return this.line},getCharPositionInLine:function(){return this.charPositionInLine},setLine:function(A){this.line=A},setCharPositionInLine:function(A){this.charPositionInLine=A},getSourceName:function(){return null}};org.antlr.runtime.ANTLRStringStream.LT=org.antlr.runtime.ANTLRStringStream.LA;org.antlr.runtime.CommonTokenStream=function(A,B){this.p=-1;this.channel=org.antlr.runtime.Token.DEFAULT_CHANNEL;this.v_discardOffChannelTokens=false;this.tokens=[];if(arguments.length>=2){this.channel=B}else{if(arguments.length===1){this.tokenSource=A}}};org.antlr.runtime.CommonTokenStream.prototype={setTokenSource:function(A){this.tokenSource=A;this.tokens=[];this.p=-1;this.channel=org.antlr.runtime.Token.DEFAULT_CHANNEL},fillBuffer:function(){var B=0,C=this.tokenSource.nextToken(),A,D;while(org.antlr.lang.isValue(C)&&C.getType()!=org.antlr.runtime.CharStream.EOF){A=false;if(this.channelOverrideMap){D=this.channelOverrideMap[C.getType()];if(org.antlr.lang.isValue(D)){C.setChannel(D)}}if(this.discardSet&&this.discardSet[C.getType()]){A=true}else{if(this.v_discardOffChannelTokens&&C.getChannel()!=this.channel){A=true}}if(!A){C.setTokenIndex(B);this.tokens.push(C);B++}C=this.tokenSource.nextToken()}this.p=0;this.p=this.skipOffTokenChannels(this.p)},consume:function(){if(this.p<this.tokens.length){this.p++;this.p=this.skipOffTokenChannels(this.p)}},skipOffTokenChannels:function(A){var B=this.tokens.length;while(A<B&&(this.tokens[A]).getChannel()!=this.channel){A++}return A},skipOffTokenChannelsReverse:function(A){while(A>=0&&(this.tokens[A]).getChannel()!=this.channel){A--}return A},setTokenTypeChannel:function(B,A){if(!this.channelOverrideMap){this.channelOverrideMap={}}this.channelOverrideMap[B]=A},discardTokenType:function(A){if(!this.discardSet){this.discardSet={}}this.discardSet[A]=true},discardOffChannelTokens:function(A){this.v_discardOffChannelTokens=A},getTokens:function(F,D,C){if(this.p===-1){this.fillBuffer()}if(arguments.length===0){return this.tokens}if(org.antlr.lang.isArray(C)){C=new org.antlr.runtime.BitSet(C)}else{if(org.antlr.lang.isNumber(C)){C=org.antlr.runtime.BitSet.of(C)}}if(D>=this.tokens.length){D=this.tokens.length-1}if(F<0){F=0}if(F>D){return null}var E=[],B,A;for(B=F;B<=D;B++){A=this.tokens[B];if(!this.types||C.member(A.getType())){E.push(A)}}if(E.length===0){E=null}return E},LT:function(A){if(this.p===-1){this.fillBuffer()}if(A===0){return null}if(A<0){return this.LB(-1*A)}if((this.p+A-1)>=this.tokens.length){return org.antlr.runtime.Token.EOF_TOKEN}var B=this.p,C=1;while(C<A){B=this.skipOffTokenChannels(B+1);C++}if(B>=this.tokens.length){return org.antlr.runtime.Token.EOF_TOKEN}return this.tokens[B]},LB:function(A){if(this.p===-1){this.fillBuffer()}if(A===0){return null}if((this.p-A)<0){return null}var B=this.p,C=1;while(C<=A){B=this.skipOffTokenChannelsReverse(B-1);C++}if(B<0){return null}return this.tokens[B]},get:function(A){return this.tokens[A]},LA:function(A){return this.LT(A).getType()},mark:function(){if(this.p===-1){this.fillBuffer()}this.lastMarker=this.index();return this.lastMarker},release:function(A){},size:function(){return this.tokens.length},index:function(){return this.p},rewind:function(A){if(!org.antlr.lang.isNumber(A)){A=this.lastMarker}this.seek(A)},reset:function(){this.p=-1;this.lastMarker=0},seek:function(A){this.p=A},getTokenSource:function(){return this.tokenSource},getSourceName:function(){return this.getTokenSource().getSourceName()},toString:function(D,C){if(arguments.length===0){if(this.p===-1){this.fillBuffer()}D=0;C=this.tokens.length-1}if(!org.antlr.lang.isNumber(D)&&!org.antlr.lang.isNumber(C)){if(org.antlr.lang.isValue(D)&&org.antlr.lang.isValue(C)){D=D.getTokenIndex();C=C.getTokenIndex()}else{return null}}var A="",B;if(D<0||C<0){return null}if(this.p==-1){this.fillBuffer()}if(C>=this.tokens.length){C=this.tokens.length-1}for(B=D;B<=C;B++){t=this.tokens[B];A=A+this.tokens[B].getText()}return A}};org.antlr.runtime.TokenRewriteStream=function(){var A=org.antlr.runtime.TokenRewriteStream.superclass;this.programs=null;this.lastRewriteTokenIndexes=null;if(arguments.length===0){this.init()}else{A.constructor.apply(this,arguments);this.init()}};(function(){var A=org.antlr.runtime.TokenRewriteStream;org.antlr.lang.augmentObject(A,{DEFAULT_PROGRAM_NAME:"default",PROGRAM_INIT_SIZE:100,MIN_TOKEN_INDEX:0});A.RewriteOperation=function(B,C){this.index=B;this.text=C};A.RewriteOperation.prototype={execute:function(B){return this.index},toString:function(){return this.text}};A.InsertBeforeOp=function(B,C){A.InsertBeforeOp.superclass.constructor.call(this,B,C)};org.antlr.lang.extend(A.InsertBeforeOp,A.RewriteOperation,{execute:function(B){B.push(this.text);return this.index}});A.ReplaceOp=function(D,C,B){A.ReplaceOp.superclass.constructor.call(this,D,B);this.lastIndex=C};org.antlr.lang.extend(A.ReplaceOp,A.RewriteOperation,{execute:function(B){if(org.antlr.lang.isValue(this.text)){B.push(this.text)}return this.lastIndex+1}});A.DeleteOp=function(C,B){A.DeleteOp.superclass.constructor.call(this,C,B)};org.antlr.lang.extend(A.DeleteOp,A.ReplaceOp);org.antlr.lang.extend(A,org.antlr.runtime.CommonTokenStream,{init:function(){this.programs={};this.programs[A.DEFAULT_PROGRAM_NAME]=[];this.lastRewriteTokenIndexes={}},rollback:function(){var B,C;if(arguments.length===1){B=A.DEFAULT_PROGRAM_NAME;C=arguments[0]}else{if(arguments.length===2){B=arguments[0];C=arguments[1]}}var D=this.programs[B];if(D){programs[B]=D.slice(A.MIN_TOKEN_INDEX,this.instructionIndex)}},deleteProgram:function(B){B=B||A.DEFAULT_PROGRAM_NAME;this.rollback(B,A.MIN_TOKEN_INDEX)},addToSortedRewriteList:function(){var H,E;if(arguments.length===1){H=A.DEFAULT_PROGRAM_NAME;E=arguments[0]}else{if(arguments.length===2){H=arguments[0];E=arguments[1]}}var F=this.getProgram(H);var G,I,D,J,B,C;for(I=0,G=F.length;I<G;I++){D=F[I];if(D.index===E.index){if(E instanceof A.ReplaceOp){J=false;for(C=I;C<F.length;C++){B=F[I];if(B.index!==E.index){break}if(B instanceof A.ReplaceOp){F[I]=E;J=true;break}}if(!J){F.splice(C,0,E)}}else{F.splice(I,0,E)}break}else{if(D.index>E.index){F.splice(I,0,E);break}}}if(I===G){F.push(E)}},insertAfter:function(){var C,B,D;if(arguments.length===2){B=A.DEFAULT_PROGRAM_NAME;C=arguments[0];D=arguments[1]}else{if(arguments.length===3){B=arguments[0];C=arguments[1];D=arguments[2]}}if(C instanceof org.antlr.runtime.CommonToken){C=C.index}this.insertBefore(B,C+1,D)},insertBefore:function(){var C,B,D;if(arguments.length===2){B=A.DEFAULT_PROGRAM_NAME;C=arguments[0];D=arguments[1]}else{if(arguments.length===3){B=arguments[0];C=arguments[1];D=arguments[2]}}if(C instanceof org.antlr.runtime.CommonToken){C=C.index}this.addToSortedRewriteList(B,new A.InsertBeforeOp(C,D))},replace:function(){var B,E,C,D;if(arguments.length===2){B=A.DEFAULT_PROGRAM_NAME;E=arguments[0];C=arguments[0];D=arguments[1]}else{if(arguments.length===3){B=A.DEFAULT_PROGRAM_NAME;E=arguments[0];C=arguments[1];D=arguments[2]}}if(arguments.length===4){B=arguments[0];E=arguments[1];C=arguments[2];D=arguments[3]}if(E instanceof org.antlr.runtime.CommonToken){E=E.index}if(C instanceof org.antlr.runtime.CommonToken){C=C.index}if(E>C||C<0||E<0){return }this.addToSortedRewriteList(B,new A.ReplaceOp(E,C,D))},remove:function(){var B=[],C=arguments.length-1;while(C>=0){B[C]=arguments[C];C--}B.push("");this.replace.apply(this,B)},getLastRewriteTokenIndex:function(B){B=B||A.DEFAULT_PROGRAM_NAME;return this.lastRewriteTokenIndexes[B]||-1},setLastRewriteTokenIndex:function(B,C){this.lastRewriteTokenIndexes[B]=C},getProgram:function(B){var C=this.programs[B];if(!C){C=this.initializeProgram(B)}return C},initializeProgram:function(B){var C=[];this.programs[B]=C;return C},toOriginalString:function(E,B){if(!org.antlr.lang.isNumber(E)){E=A.MIN_TOKEN_INDEX}if(!org.antlr.lang.isNumber(B)){B=this.size()-1}var C=[],D;for(D=E;D>=A.MIN_TOKEN_INDEX&&D<=B&&D<this.tokens.length;D++){C.push(this.get(D).getText())}return C.join("")},toString:function(){var J,B,F;if(arguments.length===0){J=A.DEFAULT_PROGRAM_NAME;B=A.MIN_TOKEN_INDEX;F=this.size()-1}else{if(arguments.length===1){J=arguments[0];B=A.MIN_TOKEN_INDEX;F=this.size()-1}else{if(arguments.length===2){J=A.DEFAULT_PROGRAM_NAME;B=arguments[0];F=arguments[1]}}}var H=this.programs[J];if(!H||H.length===0){return this.toOriginalString(B,F)}var E=0,D=B,C=[],G;while(D>=A.MIN_TOKEN_INDEX&&D<=F&&D<this.tokens.length){if(E<H.length){G=H[E];while(G.index<D&&E<H.length){E++;if(E<H.length){G=H[E]}}while(D===G.index&&E<H.length){D=G.execute(C);E++;if(E<H.length){G=H[E]}}}if(D<=F){C.push(this.get(D).getText());D++}}var I;for(I=E;I<H.length;I++){G=H[I];if(G.index>=this.size()){G.execute(C)}}return C.join("")},toDebugString:function(E,B){if(!org.antlr.lang.isNumber(E)){E=A.MIN_TOKEN_INDEX}if(!org.antlr.lang.isNumber(B)){B=this.size()-1}var C=[],D;for(D=E;D>=A.MIN_TOKEN_INDEX&&D<=B&&D<this.tokens.length;D++){C.push(this.get(D))}return C.join("")}})})();org.antlr.runtime.tree.TreeNodeStream=function(){};org.antlr.runtime.tree.CommonTreeNodeStream=function(D,A,B){if(arguments.length===1){A=D;D=new org.antlr.runtime.tree.CommonTreeAdaptor()}if(arguments.length<=2){B=org.antlr.runtime.tree.CommonTreeNodeStream.DEFAULT_INITIAL_BUFFER_SIZE}this.uniqueNavigationNodes=false;this.p=-1;var C=org.antlr.runtime.Token;this.root=A;this.adaptor=D;this.nodes=[];this.down=this.adaptor.create(C.DOWN,"DOWN");this.up=this.adaptor.create(C.UP,"UP");this.eof=this.adaptor.create(C.EOF,"EOF")};org.antlr.lang.augmentObject(org.antlr.runtime.tree.CommonTreeNodeStream,{DEFAULT_INITIAL_BUFFER_SIZE:100,INITIAL_CALL_STACK_SIZE:10});org.antlr.lang.extend(org.antlr.runtime.tree.CommonTreeNodeStream,org.antlr.runtime.tree.TreeNodeStream,{StreamIterator:function(){var C=0,B=this.nodes,A=this.eof;return{hasNext:function(){return C<B.length},next:function(){var D=C;C++;if(D<B.length){return B[D]}return A},remove:function(){throw new Error("cannot remove nodes from stream")}}},fillBuffer:function(C){var B=false;if(org.antlr.lang.isUndefined(C)){C=this.root;B=true}var A=this.adaptor.isNil(C);if(!A){this.nodes.push(C)}var F=this.adaptor.getChildCount(C);if(!A&&F>0){this.addNavigationNode(org.antlr.runtime.Token.DOWN)}var E,D;for(E=0;E<F;E++){D=this.adaptor.getChild(C,E);this.fillBuffer(D)}if(!A&&F>0){this.addNavigationNode(org.antlr.runtime.Token.UP)}if(B){this.p=0}},getNodeIndex:function(C){if(this.p==-1){this.fillBuffer()}var B,A;for(B=0;B<this.nodes.length;B++){A=this.nodes[B];if(A===C){return B}}return -1},addNavigationNode:function(B){var A=null;if(B===org.antlr.runtime.Token.DOWN){if(this.hasUniqueNavigationNodes()){A=this.adaptor.create(org.antlr.runtime.Token.DOWN,"DOWN")}else{A=this.down}}else{if(this.hasUniqueNavigationNodes()){A=this.adaptor.create(org.antlr.runtime.Token.UP,"UP")}else{A=this.up}}this.nodes.push(A)},get:function(A){if(this.p===-1){this.fillBuffer()}return this.nodes[A]},LT:function(A){if(this.p===-1){this.fillBuffer()}if(A===0){return null}if(A<0){return this.LB(-1*A)}if((this.p+A-1)>=this.nodes.length){return this.eof}return this.nodes[this.p+A-1]},getCurrentSymbol:function(){return this.LT(1)},LB:function(A){if(A===0){return null}if((this.p-A)<0){return null}return this.nodes[this.p-A]},getTreeSource:function(){return this.root},getSourceName:function(){return this.getTokenStream().getSourceName()},getTokenStream:function(){return this.tokens},setTokenStream:function(A){this.tokens=A},getTreeAdaptor:function(){return this.adaptor},setTreeAdaptor:function(A){this.adaptor=A},hasUniqueNavigationNodes:function(){return this.uniqueNavigationNodes},setUniqueNavigationNodes:function(A){this.uniqueNavigationNodes=A},consume:function(){if(this.p===-1){this.fillBuffer()}this.p++},LA:function(A){return this.adaptor.getType(this.LT(A))},mark:function(){if(this.p===-1){this.fillBuffer()}this.lastMarker=this.index();return this.lastMarker},release:function(A){},index:function(){return this.p},rewind:function(A){if(!org.antlr.lang.isNumber(A)){A=this.lastMarker}this.seek(A)},seek:function(A){if(this.p===-1){this.fillBuffer()}this.p=A},push:function(A){if(!this.calls){this.calls=[]}this.calls.push(this.p);this.seek(A)},pop:function(){var A=this.calls.pop();this.seek(A);return A},reset:function(){this.p=-1;this.lastMarker=0;if(this.calls){this.calls=[]}},size:function(){if(this.p===-1){this.fillBuffer()}return this.nodes.length},iterator:function(){if(this.p===-1){this.fillBuffer()}return this.StreamIterator()},replaceChildren:function(D,B,A,C){if(D){this.adaptor.replaceChildren(D,B,A,C)}},toTokenString:function(E,D){if(this.p===-1){this.fillBuffer()}var A="",C,B;for(C=E;C<this.nodes.length&&C<=D;C++){B=this.nodes[C];A+=" "+this.adaptor.getToken(B)}return A},toString:function(H,D){var A="",E,C,B;if(arguments.length===0){if(this.p===-1){this.fillBuffer()}for(B=0;B<this.nodes.length;B++){C=this.nodes[B];A+=" ";A+=this.adaptor.getType(C)}return A}else{if(!org.antlr.lang.isNumber(H)||!org.antlr.lang.isNumber(D)){return null}if(this.p===-1){this.fillBuffer()}if(H instanceof org.antlr.runtime.tree.CommonTree){}else{}if(D instanceof org.antlr.runtime.tree.CommonTree){}else{}var G,F;if(this.tokens){G=this.adaptor.getTokenStartIndex(H);F=this.adaptor.getTokenStopIndex(D);if(this.adaptor.getType(D)===org.antlr.runtime.Token.UP){F=this.adaptor.getTokenStopIndex(H)}else{if(this.adaptor.getType(D)==org.antlr.runtime.Token.EOF){F=this.size()-2}}return this.tokens.toString(G,F)}C=null;B=0;for(;B<this.nodes.length;B++){C=this.nodes[B];if(C===H){break}}A=E="";C=this.nodes[B];while(C!==D){E=this.adaptor.getText(C);if(!org.antlr.lang.isString(E)){E=" "+this.adaptor.getType(C).toString()}A+=E;B++;C=nodes[B]}E=this.adaptor.getText(D);if(!org.antlr.lang.isString(E)){E=" "+this.adaptor.getType(D).toString()}A+=E;return A}}});org.antlr.runtime.tree.RewriteRuleElementStream=function(C,B,A){this.cursor=0;this.dirty=false;this.elementDescription=B;this.adaptor=C;if(A){if(org.antlr.lang.isArray(A)){this.singleElement=null;this.elements=A}else{this.add(A)}}};org.antlr.runtime.tree.RewriteRuleElementStream.prototype={reset:function(){this.cursor=0;this.dirty=true},add:function(A){if(!org.antlr.lang.isValue(A)){return }if(this.elements){this.elements.push(A);return }if(!org.antlr.lang.isValue(this.singleElement)){this.singleElement=A;return }this.elements=[];this.elements.push(this.singleElement);this.singleElement=null;this.elements.push(A)},nextTree:function(){var B=this.size(),A;if(this.dirty||(this.cursor>=B&&B==1)){A=this._next();return this.dup(A)}A=this._next();return A},_next:function(){var B=this.size();if(B===0){throw new org.antlr.runtime.tree.RewriteEmptyStreamException(this.elementDescription)}if(this.cursor>=B){if(B===1){return this.toTree(this.singleElement)}throw new org.antlr.runtime.tree.RewriteCardinalityException(this.elementDescription)}if(org.antlr.lang.isValue(this.singleElement)){this.cursor++;return this.toTree(this.singleElement)}var A=this.toTree(this.elements[this.cursor]);this.cursor++;return A},toTree:function(A){if(A&&A.getTree){return A.getTree()}return A},hasNext:function(){return(org.antlr.lang.isValue(this.singleElement)&&this.cursor<1)||(this.elements&&this.cursor<this.elements.length)},size:function(){var A=0;if(org.antlr.lang.isValue(this.singleElement)){A=1}if(this.elements){return this.elements.length}return A},getDescription:function(){return this.elementDescription}};org.antlr.runtime.tree.RewriteRuleNodeStream=function(C,B,A){org.antlr.runtime.tree.RewriteRuleNodeStream.superclass.constructor.apply(this,arguments)};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleNodeStream,org.antlr.runtime.tree.RewriteRuleElementStream,{nextNode:function(){return this._next()},toTree:function(A){return this.adaptor.dupNode(A)},dup:function(){throw new Error("dup can't be called for a node stream.")}});org.antlr.runtime.tree.RewriteRuleTokenStream=function(D,C,B){var A=org.antlr.runtime.tree.RewriteRuleTokenStream.superclass;A.constructor.apply(this,arguments)};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleTokenStream,org.antlr.runtime.tree.RewriteRuleElementStream,{nextNode:function(){var A=this._next();return this.adaptor.create(A)},nextToken:function(){return this._next()},toTree:function(A){return A},dup:function(A){throw new Error("dup can't be called for a token stream.")}});org.antlr.runtime.tree.RewriteRuleSubtreeStream=function(){var A=org.antlr.runtime.tree.RewriteRuleSubtreeStream.superclass;A.constructor.apply(this,arguments)};org.antlr.lang.extend(org.antlr.runtime.tree.RewriteRuleSubtreeStream,org.antlr.runtime.tree.RewriteRuleElementStream,{nextNode:function(){var B=this.size(),A;if(this.dirty||(this.cursor>=B&&B===1)){A=this._next();return this.adaptor.dupNode(A)}A=this._next();return A},dup:function(A){return this.adaptor.dupTree(A)}});org.antlr.runtime.BaseRecognizer=function(A){this.state=A||new org.antlr.runtime.RecognizerSharedState()};org.antlr.lang.augmentObject(org.antlr.runtime.BaseRecognizer,{MEMO_RULE_FAILED:-2,MEMO_RULE_UNKNOWN:-1,INITIAL_FOLLOW_STACK_SIZE:100,MEMO_RULE_FAILED_I:-2,DEFAULT_TOKEN_CHANNEL:org.antlr.runtime.Token.DEFAULT_CHANNEL,HIDDEN:org.antlr.runtime.Token.HIDDEN_CHANNEL,NEXT_TOKEN_RULE_NAME:"nextToken"});org.antlr.runtime.BaseRecognizer.prototype={reset:function(){var B,A;if(!this.state){return }this.state._fsp=-1;this.state.errorRecovery=false;this.state.lastErrorIndex=-1;this.state.failed=false;this.state.syntaxErrors=0;this.state.backtracking=0;if(this.state.ruleMemo){for(B=0,A=this.state.ruleMemo.length;B<A;B++){this.state.ruleMemo[B]=null}}},match:function(B,D,A){var C=this.getCurrentInputSymbol(B);if(B.LA(1)===D){B.consume();this.state.errorRecovery=false;this.state.failed=false;return C}if(this.state.backtracking>0){this.state.failed=true;return C}C=this.recoverFromMismatchedToken(B,D,A);return C},matchAny:function(A){this.state.errorRecovery=false;this.state.failed=false;A.consume()},mismatchIsUnwantedToken:function(A,B){return A.LA(2)===B},mismatchIsMissingToken:function(C,A){if(!A){return false}if(A.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE)){if(this.state._fsp>=0){A.remove(org.antlr.runtime.Token.EOR_TOKEN_TYPE)}var B=this.computeContextSensitiveRuleFOLLOW();A=A.or(this.viableTokensFollowingThisRule)}if(A.member(C.LA(1))||A.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE)){return true}return false},mismatch:function(B,C,A){if(this.mismatchIsUnwantedToken(B,C)){throw new org.antlr.runtime.UnwantedTokenException(C,B)}else{if(this.mismatchIsMissingToken(B,A)){throw new org.antlr.runtime.MissingTokenException(C,B,null)}}throw new org.antlr.runtime.MismatchedTokenException(C,B)},reportError:function(A){if(this.state.errorRecovery){return }this.state.syntaxErrors++;this.state.errorRecovery=true;this.displayRecognitionError(this.getTokenNames(),A)},displayRecognitionError:function(A,B){var D=this.getErrorHeader(B),C=this.getErrorMessage(B,A);this.emitErrorMessage(D+" "+C)},getErrorHeader:function(A){if(!org.antlr.lang.isNumber(A.line)){A.line=0}return"line "+A.line+":"+A.charPositionInLine},emitErrorMessage:function(A){if(typeof (window)!="undefined"&&window.alert){alert(A)}else{print(A)}},getErrorMessage:function(E,D){var F=(E&&E.getMessage)?E.getMessage():null,A,C;if(E instanceof org.antlr.runtime.UnwantedTokenException){var B=E;C="<unknown>";if(B.expecting==org.antlr.runtime.Token.EOF){C="EOF"}else{C=D[B.expecting]}F="extraneous input "+this.getTokenErrorDisplay(B.getUnexpectedToken())+" expecting "+C}else{if(E instanceof org.antlr.runtime.MissingTokenException){A=E;C="<unknown>";if(A.expecting==org.antlr.runtime.Token.EOF){C="EOF"}else{C=D[A.expecting]}F="missing "+C+" at "+this.getTokenErrorDisplay(E.token)}else{if(E instanceof org.antlr.runtime.MismatchedTokenException){A=E;C="<unknown>";if(A.expecting==org.antlr.runtime.Token.EOF){C="EOF"}else{C=D[A.expecting]}F="mismatched input "+this.getTokenErrorDisplay(E.token)+" expecting "+C}else{if(E instanceof org.antlr.runtime.NoViableAltException){F="no viable alternative at input "+this.getTokenErrorDisplay(E.token)}else{if(E instanceof org.antlr.runtime.EarlyExitException){F="required (...)+ loop did not match anything at input "+this.getTokenErrorDisplay(E.token)}else{if(E instanceof org.antlr.runtime.MismatchedSetException){F="mismatched input "+this.getTokenErrorDisplay(E.token)+" expecting set "+E.expecting}else{if(E instanceof org.antlr.runtime.MismatchedNotSetException){F="mismatched input "+this.getTokenErrorDisplay(E.token)+" expecting set "+E.expecting}else{if(E instanceof org.antlr.runtime.FailedPredicateException){F="rule "+E.ruleName+" failed predicate: {"+E.predicateText+"}?"}}}}}}}}return F},getNumberOfSyntaxErrors:function(){return this.state.syntaxErrors},getTokenErrorDisplay:function(A){var B=A.getText();if(!org.antlr.lang.isValue(B)){if(A.getType()==org.antlr.runtime.Token.EOF){B="<EOF>"}else{B="<"+A.getType()+">"}}B=B.replace(/\n/g,"\\n");B=B.replace(/\r/g,"\\r");B=B.replace(/\t/g,"\\t");return"'"+B+"'"},recover:function(A,B){if(this.state.lastErrorIndex==A.index()){A.consume()}this.state.lastErrorIndex=A.index();var C=this.computeErrorRecoverySet();this.beginResync();this.consumeUntil(A,C);this.endResync()},beginResync:function(){},endResync:function(){},computeErrorRecoverySet:function(){return this.combineFollows(false)},computeContextSensitiveRuleFOLLOW:function(){return this.combineFollows(true)},combineFollows:function(C){var E=this.state._fsp,B,A,D=new org.antlr.runtime.BitSet();for(B=E;B>=0;B--){A=this.state.following[B];D.orInPlace(A);if(C){if(A.member(org.antlr.runtime.Token.EOR_TOKEN_TYPE)){if(B>0){D.remove(org.antlr.runtime.Token.EOR_TOKEN_TYPE)}}else{break}}}return D},recoverFromMismatchedToken:function(B,F,A){var E=null;if(this.mismatchIsUnwantedToken(B,F)){E=new org.antlr.runtime.UnwantedTokenException(F,B);this.beginResync();B.consume();this.endResync();this.reportError(E);var D=this.getCurrentInputSymbol(B);B.consume();return D}if(this.mismatchIsMissingToken(B,A)){var C=this.getMissingSymbol(B,E,F,A);E=new org.antlr.runtime.MissingTokenException(F,B,C);this.reportError(E);return C}E=new org.antlr.runtime.MismatchedTokenException(F,B);throw E},recoverFromMismatchedSet:function(B,C,A){if(this.mismatchIsMissingToken(B,A)){this.reportError(C);return this.getMissingSymbol(B,C,org.antlr.runtime.Token.INVALID_TOKEN_TYPE,A)}throw C},getCurrentInputSymbol:function(A){return null},getMissingSymbol:function(B,D,C,A){return null},consumeUntil:function(A,C){var B=A.LA(1);while(B!=org.antlr.runtime.Token.EOF&&!C.member(B)){A.consume();B=A.LA(1)}},pushFollow:function(A){if((this.state._fsp+1)>=this.state.following.length){var C=[];var B;for(B=this.state.following.length-1;B>=0;B--){C[B]=this.state.following[B]}this.state.following=C}this.state._fsp++;this.state.following[this.state._fsp]=A},getRuleInvocationStack:function(B,A){throw new Error("Not implemented.")},getBacktrackingLevel:function(){return this.state.backtracking},getTokenNames:function(){return null},getGrammarFileName:function(){return null},toStrings:function(C){if(!C){return null}var A=[];var B;for(B=0;B<C.length;B++){A.push(C[B].getText())}return A},getRuleMemoization:function(B,A){if(!this.state.ruleMemo[B]){this.state.ruleMemo[B]={}}var C=this.state.ruleMemo[B][A];if(!org.antlr.lang.isNumber(C)){return org.antlr.runtime.BaseRecognizer.MEMO_RULE_UNKNOWN}return C},alreadyParsedRule:function(B,C){var A=this.getRuleMemoization(C,B.index());if(A==org.antlr.runtime.BaseRecognizer.MEMO_RULE_UNKNOWN){return false}if(A==org.antlr.runtime.BaseRecognizer.MEMO_RULE_FAILED){this.state.failed=true}else{B.seek(A+1)}return true},memoize:function(C,D,B){var A=this.state.failed?org.antlr.runtime.BaseRecognizer.MEMO_RULE_FAILED:C.index()-1;if(!org.antlr.lang.isValue(this.state.ruleMemo)){throw new Error("!!!!!!!!! memo array is null for "+this.getGrammarFileName())}if(D>=this.state.ruleMemo.length){throw new Error("!!!!!!!!! memo size is "+this.state.ruleMemo.length+", but rule index is "+D)}if(org.antlr.lang.isValue(this.state.ruleMemo[D])){this.state.ruleMemo[D][B]=A}},getRuleMemoizationCacheSize:function(){var C=0,A;for(A=0;this.state.ruleMemo&&A<this.state.ruleMemo.length;A++){var B=this.state.ruleMemo[A];if(B){C+=B.length}}return C},traceIn:function(C,B,A){this.emitErrorMessage("enter "+C+" "+A);if(this.state.failed){this.emitErrorMessage(" failed="+this.failed)}if(this.state.backtracking>0){this.emitErrorMessage(" backtracking="+this.state.backtracking)}},traceOut:function(C,B,A){this.emitErrorMessage("exit "+C+" "+A);if(this.state.failed){this.emitErrorMessage(" failed="+this.state.failed)}if(this.state.backtracking>0){this.emitErrorMessage(" backtracking="+this.state.backtracking)}}};org.antlr.runtime.Lexer=function(A,B){if(B){org.antlr.runtime.Lexer.superclass.constructor.call(this,B)}if(A){this.input=A}};org.antlr.lang.extend(org.antlr.runtime.Lexer,org.antlr.runtime.BaseRecognizer,{reset:function(){org.antlr.runtime.Lexer.superclass.reset.call(this);if(org.antlr.lang.isValue(this.input)){this.input.seek(0)}if(!org.antlr.lang.isValue(this.state)){return }this.state.token=null;this.state.type=org.antlr.runtime.Token.INVALID_TOKEN_TYPE;this.state.channel=org.antlr.runtime.Token.DEFAULT_CHANNEL;this.state.tokenStartCharIndex=-1;this.state.tokenStartCharPositionInLine=-1;this.state.tokenStartLine=-1;this.state.text=null},nextToken:function(){while(true){this.state.token=null;this.state.channel=org.antlr.runtime.Token.DEFAULT_CHANNEL;this.state.tokenStartCharIndex=this.input.index();this.state.tokenStartCharPositionInLine=this.input.getCharPositionInLine();this.state.tokenStartLine=this.input.getLine();this.state.text=null;if(this.input.LA(1)===org.antlr.runtime.CharStream.EOF){return org.antlr.runtime.Token.EOF_TOKEN}try{this.mTokens();if(!org.antlr.lang.isValue(this.state.token)){this.emit()}else{if(this.state.token==org.antlr.runtime.Token.SKIP_TOKEN){continue}}return this.state.token}catch(A){if(A instanceof org.antlr.runtime.RecognitionException){this.reportError(A)}else{if(A instanceof org.antlr.runtime.NoViableAltException){this.reportError(A);this.recover(A)}else{throw A}}}}},skip:function(){this.state.token=org.antlr.runtime.Token.SKIP_TOKEN},setCharStream:function(A){this.input=null;this.reset();this.input=A},getCharStream:function(){return this.input},getSourceName:function(){return this.input.getSourceName()},emit:function(){if(arguments.length===0){var A=new org.antlr.runtime.CommonToken(this.input,this.state.type,this.state.channel,this.state.tokenStartCharIndex,this.getCharIndex()-1);A.setLine(this.state.tokenStartLine);A.setText(this.state.text);A.setCharPositionInLine(this.state.tokenStartCharPositionInLine);this.state.token=A;return A}else{this.state.token=arguments[0]}},match:function(C){var B=0,A;if(org.antlr.lang.isString(C)){while(B<C.length){if(this.input.LA(1)!=C.charAt(B)){if(this.state.backtracking>0){this.state.failed=true;return }A=new org.antlr.runtime.MismatchedTokenException(C.charAt(B),this.input);this.recover(A);throw A}B++;this.input.consume();this.state.failed=false}}else{if(org.antlr.lang.isNumber(C)){if(this.input.LA(1)!=C){if(this.state.backtracking>0){this.state.failed=true;return }A=new org.antlr.runtime.MismatchedTokenException(C,this.input);this.recover(A);throw A}this.input.consume();this.state.failed=false}}},matchAny:function(){this.input.consume()},matchRange:function(B,A){if(this.input.LA(1)<B||this.input.LA(1)>A){if(this.state.backtracking>0){this.state.failed=true;return }mre=new org.antlr.runtime.MismatchedRangeException(B,A,this.input);this.recover(mre);throw mre}this.input.consume();this.state.failed=false},getLine:function(){return this.input.getLine()},getCharPositionInLine:function(){return this.input.getCharPositionInLine()},getCharIndex:function(){return this.input.index()},getText:function(){if(org.antlr.lang.isString(this.state.text)){return this.state.text}return this.input.substring(this.state.tokenStartCharIndex,this.getCharIndex()-1)},setText:function(A){this.state.text=A},reportError:function(A){this.displayRecognitionError(this.getTokenNames(),A)},getErrorMessage:function(B,A){var C=null;if(B instanceof org.antlr.runtime.MismatchedTokenException){C="mismatched character "+this.getCharErrorDisplay(B.c)+" expecting "+this.getCharErrorDisplay(B.expecting)}else{if(B instanceof org.antlr.runtime.NoViableAltException){C="no viable alternative at character "+this.getCharErrorDisplay(B.c)}else{if(B instanceof org.antlr.runtime.EarlyExitException){C="required (...)+ loop did not match anything at character "+this.getCharErrorDisplay(B.c)}else{if(B instanceof org.antlr.runtime.MismatchedNotSetException){C="mismatched character "+this.getCharErrorDisplay(B.c)+" expecting set "+B.expecting}else{if(B instanceof org.antlr.runtime.MismatchedSetException){C="mismatched character "+this.getCharErrorDisplay(B.c)+" expecting set "+B.expecting}else{if(B instanceof org.antlr.runtime.MismatchedRangeException){C="mismatched character "+this.getCharErrorDisplay(B.c)+" expecting set "+this.getCharErrorDisplay(B.a)+".."+this.getCharErrorDisplay(B.b)}else{C=org.antlr.runtime.Lexer.superclass.getErrorMessage.call(this,B,A)}}}}}}return C},getCharErrorDisplay:function(B){var A=B;switch(A){case org.antlr.runtime.Token.EOF:A="<EOF>";break;case"\n":A="\\n";break;case"\t":A="\\t";break;case"\r":A="\\r";break}return"'"+A+"'"},recover:function(A){this.input.consume()},traceIn:function(C,B){var A=String.fromCharCode(this.input.LT(1))+" line="+this.getLine()+":"+this.getCharPositionInLine();org.antlr.runtime.Lexer.superclass.traceIn.call(this,C,B,A)},traceOut:function(C,B){var A=String.fromCharCode(this.input.LT(1))+" line="+this.getLine()+":"+this.getCharPositionInLine();org.antlr.runtime.Lexer.superclass.traceOut.call(this,C,B,A)}});org.antlr.runtime.ParserRuleReturnScope=function(){};org.antlr.runtime.ParserRuleReturnScope.prototype={getStart:function(){return this.start},getStop:function(){return this.stop}};org.antlr.runtime.tree.TreeRuleReturnScope=function(){};org.antlr.runtime.tree.TreeRuleReturnScope.prototype={getStart:function(){return this.start}};org.antlr.runtime.Parser=function(A,B){org.antlr.runtime.Parser.superclass.constructor.call(this,B);this.setTokenStream(A)};org.antlr.lang.extend(org.antlr.runtime.Parser,org.antlr.runtime.BaseRecognizer,{reset:function(){org.antlr.runtime.Parser.superclass.reset.call(this);if(org.antlr.lang.isValue(this.input)){this.input.seek(0)}},getCurrentInputSymbol:function(A){return A.LT(1)},getMissingSymbol:function(C,G,E,A){var B="<missing "+this.getTokenNames()[E]+">";var D=new org.antlr.runtime.CommonToken(E,B);var F=C.LT(1);var H;if(F.getType()===org.antlr.runtime.Token.EOF){H=F;F=C.LT(-1);if(!F){F=H}}D.line=F.getLine();D.charPositionInLine=F.getCharPositionInLine();D.channel=org.antlr.runtime.BaseRecognizer.DEFAULT_TOKEN_CHANNEL;return D},setTokenStream:function(A){this.input=null;this.reset();this.input=A},getTokenStream:function(){return this.input},getSourceName:function(){return this.input.getSourceName()},traceIn:function(B,A){org.antlr.runtime.Parser.superclass.traceIn.call(this,B,A,this.input.LT(1))},traceOut:function(B,A){org.antlr.runtime.Parser.superclass.traceOut.call(this,B,A,this.input.LT(1))}});org.antlr.runtime.DFA=function(){};org.antlr.runtime.DFA.prototype={predict:function(C){var F=C.mark(),D=0,B,E,A;try{while(true){B=this.special[D];if(B>=0){D=this.specialStateTransition(B,C);if(D===-1){this.noViableAlt(D,C);return 0}C.consume();continue}if(this.accept[D]>=1){return this.accept[D]}E=C.LA(1);if(E===org.antlr.runtime.Token.EOF){E=-1}else{if(org.antlr.lang.isString(E)){E=E.charCodeAt(0)}}if(E>=this.min[D]&&E<=this.max[D]){A=this.transition[D][E-this.min[D]];if(A<0){if(this.eot[D]>=0){D=this.eot[D];C.consume();continue}this.noViableAlt(D,C);return 0}D=A;C.consume();continue}if(this.eot[D]>=0){D=this.eot[D];C.consume();continue}if(E==org.antlr.runtime.Token.EOF&&this.eof[D]>=0){return this.accept[this.eof[D]]}this.noViableAlt(D,C);return 0}}finally{C.rewind(F)}},noViableAlt:function(C,A){if(this.recognizer.state.backtracking>0){this.recognizer.state.failed=true;return }var B=new org.antlr.runtime.NoViableAltException(this.getDescription(),this.decisionNumber,C,A);this.error(B);throw B},error:function(A){},specialStateTransition:function(B,A){return -1},getDescription:function(){return"n/a"}};org.antlr.lang.augmentObject(org.antlr.runtime.DFA,{unpackEncodedString:function(D){var C,F=[],E=0,G,A,B;for(C=0;C<D.length;C+=2){G=D.charCodeAt(C);A=D.charCodeAt(C+1);if(A===65535){A=-1}for(B=1;B<=G;B++){F[E++]=A}}return F},unpackEncodedStringToUnsignedChars:function(A){return org.antlr.runtime.DFA.unpackEncodedString(A)}});org.antlr.runtime.tree.TreeParser=function(A){org.antlr.runtime.tree.TreeParser.superclass.constructor.call(this,arguments[1]);this.setTreeNodeStream(A)};(function(){var A=org.antlr.runtime.tree.TreeParser;org.antlr.lang.augmentObject(A,{DOWN:org.antlr.runtime.Token.DOWN,UP:org.antlr.runtime.Token.UP});org.antlr.lang.extend(A,org.antlr.runtime.BaseRecognizer,{reset:function(){A.superclass.reset.call(this);if(this.input){this.input.seek(0)}},setTreeNodeStream:function(B){this.input=B},getTreeNodeStream:function(){return this.input},getSourceName:function(){return this.input.getSourceName()},getCurrentInputSymbol:function(B){return B.LT(1)},getMissingSymbol:function(D,F,E,B){var C="<missing "+this.getTokenNames()[E]+">";return new org.antlr.runtime.tree.CommonTree(new org.antlr.runtime.CommonToken(E,C))},matchAny:function(E){this.state.errorRecovery=false;this.state.failed=false;var B=this.input.LT(1);if(this.input.getTreeAdaptor().getChildCount(B)===0){this.input.consume();return }var D=0,C=this.input.getTreeAdaptor().getType(B);while(C!==org.antlr.runtime.Token.EOF&&!(C===A.UP&&D===0)){this.input.consume();B=this.input.LT(1);C=this.input.getTreeAdaptor().getType(B);if(C===A.DOWN){D++}else{if(C===A.UP){D--}}}this.input.consume()},mismatch:function(C,D,B){throw new org.antlr.runtime.MismatchedTreeNodeException(D,C)},getErrorHeader:function(B){return this.getGrammarFileName()+": node from "+(B.approximateLineInfo?"after ":"")+"line "+B.line+":"+B.charPositionInLine},getErrorMessage:function(C,B){var D;if(this instanceof A){D=C.input.getTreeAdaptor();C.token=D.getToken(C.node);if(!org.antlr.lang.isValue(C.token)){C.token=new org.antlr.runtime.CommonToken(D.getType(C.node),D.getText(C.node))}}return A.superclass.getErrorMessage.call(this,C,B)},traceIn:function(C,B){A.superclass.traceIn.call(this,C,B,this.input.LT(1))},traceOut:function(C,B){A.superclass.traceOut.call(this,C,B,this.input.LT(1))}})})();
diff --git a/extensions/noscript/chrome/content/noscript/clearClick.js b/extensions/noscript/chrome/content/noscript/clearClick.js
deleted file mode 100644
index d699a47..0000000
--- a/extensions/noscript/chrome/content/noscript/clearClick.js
+++ /dev/null
@@ -1,112 +0,0 @@
-var ClearClick = {
- params: null,
- canClose: true,
- mustClose: false,
-
- init: function() {
- this.dialog = document.documentElement;
- if (!(window.arguments && window.arguments.length)) this.dialog.cancelDialog();
- this.params = window.arguments[0];
- this.params.locked = true;
- var url = this.url = this.params.url;
-
- var img = this.params.img;
-
- var preview = document.getElementById("trueImg");
- preview.src = img.src;
- preview.width = img.width;
- preview.height = img.height;
-
- preview = document.getElementById("fakeImg");
- preview.src = img.altSrc;
- preview.width = img.width;
- preview.height = img.height;
-
- if (url.length > 50) url = url.substring(0, 23) + "..." + url.slice(-23);
- document.getElementById("hiddenContentURL").value = url;
-
- var pref = noscriptUtil.service.getPref("clearClick");
- Array.forEach(document.getElementById("clearClickOpts").getElementsByTagName("checkbox"), function(cbx) {
- cbx.setAttribute("checked", !(pref & parseInt(cbx.getAttribute("value"))) ? "false" : "true");
- });
-
- },
-
- browse: function() {
- noscriptUtil.browse(this.url, null);
- this.dialog.cancelDialog();
- },
-
- disclosure: function() {
- noscriptUtil.browse("https://noscript.net/faq#clearclick", null);
- this.dialog.cancelDialog();
- },
-
- end: function() {
- if (!this.canClose) {
- this.mustClose = true;
- return;
- }
- this.params.locked = document.getElementById("keepLocked").checked;
- var pref = 0;
- Array.forEach(document.getElementById("clearClickOpts").getElementsByTagName("checkbox"), function(cbx) {
- if (cbx.checked) pref = pref | parseInt(cbx.getAttribute("value"));
- });
- noscriptUtil.service.setPref("clearClick", pref);
- },
-
- swap: function(stack) {
- stack.appendChild(stack.firstChild);
- },
-
- report: function() {
- this.dialog.getButton("extra1").disabled = true;
-
- var report = document.getElementById("report");
- var reportId = document.getElementById("report-id");
- var progress = document.getElementById("progress");
-
- var xhr = new XMLHttpRequest();
- xhr.addEventListener("readystatechange", function() {
- switch(xhr.readyState) {
- case 1:
- case 2:
- case 3:
- ClearClick.canClose = false;
- report.collapsed = false;
- reportId.value = "";
- progress.collapsed = false;
- break;
- case 4:
- ClearClick.canClose = true;
- progress.collapsed = true;
- reportId.value = xhr.responseText.replace(/\s*OK\s*/g, '');
- reportId.collapsed = false;
- reportId.style.visibility = "visible";
- if (ClearClick.mustClose) ClearClick.end();
- }
- }, false);
-
- xhr.open("POST", "https://noscript.net/ws/clearclick/", true);
-
- var p = this.params;
- var data = {
- url: p.url,
- page_url: p.pageURL,
- top_url: p.topURL,
- x: p.pageX,
- y: p.pageY,
- zoom: p.zoom,
- img1: p.img.src,
- img2: p.img.altSrc,
- version: noscriptUtil.service.VERSION
- };
- var post = [];
- for(var k in data) {
- post.push(k + "=" + escape(data[k]));
- }
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- xhr.send(post.join("&"));
- }
-
-} \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/clearClick.xul b/extensions/noscript/chrome/content/noscript/clearClick.xul
deleted file mode 100644
index 1752fbc..0000000
--- a/extensions/noscript/chrome/content/noscript/clearClick.xul
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://noscript/skin/browser.css" type="text/css"?>
-<?xml-stylesheet href="chrome://noscript/skin/options.css" type="text/css"?>
-
-<!DOCTYPE dialog SYSTEM "chrome://noscript/locale/noscript.dtd">
-<dialog id="clearClick"
- title="&noscriptClearClickTitle;"
- onload="ClearClick.init()"
- ondialogaccept="ClearClick.end()"
- ondialogdisclosure="ClearClick.disclosure()"
- ondialogextra1="ClearClick.report()"
-
-
- buttons="accept,extra1,disclosure"
- buttonlabelextra1="&noscriptClearClickReport;"
- buttonaccesskeyextra1="&noscriptClearClickReport.accesskey;"
-
- spacerflex="1"
- persist="screenX screenY"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/x-javascript" src="noscript.js" />
- <script type="application/x-javascript" src="clearClick.js" />
- <hbox style="width: 400px">
- <vbox>
- <image src="chrome://noscript/skin/icon32.png" width="32" height="32" />
- </vbox>
- <vbox flex="1">
- <label class="header" value="&noscriptClearClickHeader;" />
- <description style="white-space: normal;">&noscriptClearClickDescription;</description>
- <hbox align="center" style="margin: 8px;">
- <vbox align="center">
- <stack id="imgs-stack" align="center"
- onkeypress="if (event.which > 9) ClearClick.swap(this)"
- onclick="ClearClick.swap(this)">
- <image id="fakeImg" src="" width="350" height="200" style="border: 2px solid #800"/>
- <image id="trueImg" src="" width="350" height="200" style="border: 2px solid #080"/>
- </stack>
- </vbox>
- </hbox>
- <label control="keepLocked" class="text-link" id="hiddenContentURL" onclick="ClearClick.browse()" value="" />
- <checkbox id="keepLocked" label="&noscriptKeepLocked;" checked="true" />
- <separator/>
- <hbox id="clearClickOpts" align="center">
- <label control="cc1" value="&noscriptClearClickOpt;"/>
- <checkbox id="cc1" value="1" label="&noscriptUntrustedPagesAdj;"/>
- <checkbox id="cc2" value="2" label="&noscriptTrustedPagesAdj;"/>
- </hbox>
- <hbox>
- <label id="report" collapsed="true">&noscriptClearClickReportId;</label>
- <textbox readonly="true" class="plain" id="report-id" value="" style="visibility: hidden" />
- <progressmeter id="progress" mode="undetermined" collapsed="true" flex="1"/>
- </hbox>
-
- </vbox>
- </hbox>
-</dialog> \ No newline at end of file
diff --git a/extensions/noscript/chrome/content/noscript/defer.jsm b/extensions/noscript/chrome/content/noscript/defer.jsm
deleted file mode 100644
index 539e945..0000000
--- a/extensions/noscript/chrome/content/noscript/defer.jsm
+++ /dev/null
@@ -1,17 +0,0 @@
-'use strict';
-
-var EXPORTED_SYMBOLS = ["defer"];
-
-let { interfaces: Ci, classes: Cc } = Components;
-
-let currentThread = null;
-
-function defer(callback, milliseconds = 0) {
- if (milliseconds > 0) {
- let timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
- timer.initWithCallback(callback, milliseconds, timer.TYPE_ONE_SHOT);
- } else {
- (currentThread || (currentThread = Cc["@mozilla.org/thread-manager;1"].getService().currentThread))
- .dispatch({ run: callback }, Ci.nsIEventTarget.DISPATCH_NORMAL);
- }
-}
diff --git a/extensions/noscript/chrome/content/noscript/e10sChild.js b/extensions/noscript/chrome/content/noscript/e10sChild.js
deleted file mode 100644
index e94700d..0000000
--- a/extensions/noscript/chrome/content/noscript/e10sChild.js
+++ /dev/null
@@ -1,63 +0,0 @@
-var EXPORTED_SYMBOLS = [];
-Components.utils.import("resource://gre/modules/Services.jsm");
-Components.utils.import(`chrome://noscript/content/importer.jsm`);
-
-Services.scriptloader.loadSubScript(NO_CACHE(`loader.js`), this);
-
-Components.utils.import("resource://gre/modules/XPCOMUtils.jsm");
-
-
-
-(function () {
- try {
- INCLUDE("Main");
- } catch (e) {
- Cu.reportError(e);
- }
-
- IPC.child = {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIMessageListener, Ci.nsISupportsWeakReference]),
- init: function() {
- Services.cpmm.addWeakMessageListener(IPC_P_MSG.CALL, this);
- Main.init();
- },
- dispose: function() {
- Services.cpmm.removeWeakMessageListener(IPC_P_MSG.CALL, this);
- Main.shutdown();
- UNLOAD_ALL();
- },
-
- receiveMessage: function(m) {
- if (IPC.receiveMessage(m)) {
- return;
- }
- if (m.name === "NoScript:unload") {
- this.dispose();
- }
- },
-
- remote(objName, method, args) {
- Services.cpmm.sendAsyncMessage(IPC_P_MSG.CALL, {objName, method, args});
- },
-
- callback(id, autoRemote = true) {
- let cb = () => {
- cb._executed = true;
- };
- cb._executed = false;
- cb.remote = () => {
- Services.cpmm.sendAsyncMessage(IPC_P_MSG.CALLBACK, {id, execute: cb._executed });
- };
- if (autoRemote) Thread.asap(cb.remote);
- },
-
- };
-
- try {
- Main.bootstrap();
- IPC.child.init();
- Services.cpmm.sendAsyncMessage(IPC_P_MSG.SERVICE_READY);
- } catch (e) {
- Components.utils.reportError(e);
- }
-})();
diff --git a/extensions/noscript/chrome/content/noscript/e10sIPC.js b/extensions/noscript/chrome/content/noscript/e10sIPC.js
deleted file mode 100644
index a2716c6..0000000
--- a/extensions/noscript/chrome/content/noscript/e10sIPC.js
+++ /dev/null
@@ -1,68 +0,0 @@
-var IPC_MSG = {
- SYNC: "NoScript:syncUI",
- NOTIFY_META: "NoScript:notifyMetaRefresh",
- CLEARCLICK_WARNING: "NoScript:clearClickWarning",
-},
-IPC_P_MSG = {
- SERVICE_READY: "NoScript:ServiceReady",
- LOAD_SURROGATE: "NoScript:loadSurrogate",
- CALL: "NoScript:remoteCall",
- RESUME: "NoScript:resume",
- GET_PREF: "NoScript:getPref",
- GET_SNAPSHOT: "NoScript:getSnapshot",
- CALLBACK: "NoScript:callback",
-}
-
-var IPC = {
- logger: null,
- log(...args) {
- if (this.logger) {
- args[0] = `[${this.parent ? 'P' : 'C'}] ${args[0]}`;
- this.logger(...args);
- }
- },
- registry: null,
- autoSync(obj, objName, methods) {
- if (!this.registry) this.registry = new Map();
- this.registry.set(objName, {
- reference: obj,
- methods: new Set(methods),
- });
-
- for (let m of methods) {
- let method = m; // hack needed in Fx < 50
- if (!(method in obj)) {
- ns.log(`method ${method} not found in ${objName}\n`);
- }
- let func = obj[method];
- if (func._autoSynced) continue;
- (obj[method] = (...args) => {
- let stack = Components.stack;
- let caller = stack.caller;
- if (caller.name !== "call" || stack.filename !== caller.filename) {
- let process = IPC.parent || IPC.child;
- process.remote(objName, method, args);
- }
- return func.apply(obj, args);
- })._autoSynced = true;
- }
- return true;
- },
- call(objName, method, args) {
- let {reference, methods} = this.registry.get(objName);
- if (methods.has(method)) {
- reference[method].apply(reference, args);
- }
- },
-
- receiveMessage(m) {
- if (this.logger) this.log(`Received message ${m.name} - ${JSON.stringify(m.data)}`);
- switch(m.name) {
- case IPC_P_MSG.CALL:
- let { objName, method, args } = m.data;
- IPC.call(objName, method, args);
- return true;
- }
- return false;
- },
-};
diff --git a/extensions/noscript/chrome/content/noscript/e10sParent.js b/extensions/noscript/chrome/content/noscript/e10sParent.js
deleted file mode 100644
index a3d92aa..0000000
--- a/extensions/noscript/chrome/content/noscript/e10sParent.js
+++ /dev/null
@@ -1,101 +0,0 @@
-IPC.parent = {
- FRAME_SCRIPT: NO_CACHE("frameScript.js"),
- PROCESS_SCRIPT: NO_CACHE("e10sProcessScript.js"),
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIMessageListener, Ci.nsISupportsWeakReference]),
- init() {
- let globalMM = Services.mm;
- for (let m of Object.keys(IPC_MSG)) {
- globalMM.addWeakMessageListener(IPC_MSG[m], this);
- }
- let processMM = Services.ppmm;
- for (let m of Object.keys(IPC_P_MSG)) {
- processMM.addWeakMessageListener(IPC_P_MSG[m], this);
- }
- processMM.loadProcessScript(this.PROCESS_SCRIPT, true);
- globalMM.loadFrameScript(this.FRAME_SCRIPT, true);
- },
- dispose() {
- let globalMM = Services.mm;
- for (let m of Object.keys(IPC_MSG)) {
- globalMM.removeWeakMessageListener(IPC_MSG[m], this);
- }
- let processMM = Services.ppmm;
- for (let m of Object.keys(IPC_P_MSG)) {
- processMM.removeWeakMessageListener(IPC_P_MSG[m], this);
- }
- globalMM.removeDelayedFrameScript(this.FRAME_SCRIPT);
- globalMM.broadcastAsyncMessage("NoScript:unload");
- processMM.removeDelayedProcessScript(this.PROCESS_SCRIPT);
- processMM.broadcastAsyncMessage("NoScript:unload");
- },
-
-
- receiveMessage(m) {
- ns.onContentInit();
- this.receiveMessage = this._receiveMessageReal;
- return this.receiveMessage(m);
- },
- _receiveMessageReal(m) {
- if (IPC.receiveMessage(m)) {
- return;
- }
- switch(m.name) {
- case IPC_MSG.SYNC:
- ns.setExpando(m.target, "sites", m.data);
- ns.syncUI(m.target);
- return;
- case IPC_MSG.NOTIFY_META:
- let browser = m.target;
- info.browser = browser;
- browser.defaultView.noscriptOverlay.notifyMetaRefresh(info);
- return;
- case IPC_MSG.CLEARCLICK_WARNING:
- return ClearClickHandler.prototype.showWarningParent(m.target.ownerDocument.defaultView, m.data).locked;
- case IPC_P_MSG.CALLBACK:
- let {id, execute} = m.data;
- this._handleCallback(id, execute);
- return;
- case IPC_P_MSG.LOAD_SURROGATE:
- return ScriptSurrogate.loadReplacementFile(ScriptSurrogate.getReplacement(m.data));
- case IPC_P_MSG.RESUME:
- return IOUtil.resumeParentChannel(m.data.id, m.data.abort);
- case IPC_P_MSG.GET_PREF:
- let {method, name} = m.data;
- if (method in Services.prefs && method.startsWith("get")) {
- try {
- return Services.prefs[method](name);
- } catch (e) {
- Cu.reportError(e);
- }
- }
- return null;
- case IPC_P_MSG.GET_SNAPSHOT:
- return ns.getSnapshot();
- }
- },
-
- remote(objName, method, args) {
- Services.ppmm.broadcastAsyncMessage(IPC_P_MSG.CALL, {objName, method, args});
- },
-
- _callbacks: new Map(),
- _callbackId: 0,
- callback(f) {
- this._callbacks.set(++this._callbackId, f);
- return this._callbackId;
- },
- _handleCallback(id, execute) {
- let callback = this._callbacks.get(id);
- if (callback) this._callbacks.delete(id);
- if (execute) {
- try {
- callback();
- } catch (e) {
- Cu.reportError(e);
- }
- }
- },
-};
-
-IPC.parent.init();
-
diff --git a/extensions/noscript/chrome/content/noscript/e10sProcessScript.js b/extensions/noscript/chrome/content/noscript/e10sProcessScript.js
deleted file mode 100644
index d070694..0000000
--- a/extensions/noscript/chrome/content/noscript/e10sProcessScript.js
+++ /dev/null
@@ -1,8 +0,0 @@
-Components.utils.import("resource://gre/modules/Services.jsm");
-
-if (Services.appinfo.processType == Services.appinfo.PROCESS_TYPE_CONTENT) {
- Components.utils.import(`chrome://noscript/content/importer.jsm`);
- Services.scriptloader.loadSubScript(NO_CACHE(`e10sChild.js`), {});
-} else {
- // nothing to do exclusively in the parent process yet...
-}
diff --git a/extensions/noscript/chrome/content/noscript/frameScript.js b/extensions/noscript/chrome/content/noscript/frameScript.js
deleted file mode 100644
index 808ce33..0000000
--- a/extensions/noscript/chrome/content/noscript/frameScript.js
+++ /dev/null
@@ -1,3 +0,0 @@
-Components.utils.import("chrome://noscript/content/importer.jsm");
-IMPORT_FOR(this)("FrameScript");
-new FrameScript(this);
diff --git a/extensions/noscript/chrome/content/noscript/html5_events b/extensions/noscript/chrome/content/noscript/html5_events
deleted file mode 100644
index 1ee6251..0000000
--- a/extensions/noscript/chrome/content/noscript/html5_events
+++ /dev/null
@@ -1,98 +0,0 @@
-#!/usr/bin/perl
-use strict;
-
-require LWP::UserAgent;
-use LWP::Simple;
-use RegExp::List;
-use File::stat;
-use File::Basename;
-use List::MoreUtils qw(uniq);
-
-my $HTML5_URL = "https://hg.mozilla.org/mozilla-central/raw-file/tip/parser/html/nsHtml5AtomList.h";
-my $GECKO_URL = "https://hg.mozilla.org/mozilla-central/raw-file/tip/dom/base/nsGkAtomList.h";
-
-my $SOURCE_FILE = dirname($0) . '/InjectionChecker.js';
-
-sub create_re
-{
- my $cache = "/tmp/html5_events.re";
- my $sb = stat($cache);
-
- if ($sb && time() - $sb->mtime < 86400)
- {
- open IN, "<$cache";
- my @content = <IN>;
- close IN;
- return $content[0];
- }
-
- sub fetch_url
- {
- my $url = shift(@_);
- my $ua = LWP::UserAgent->new;
- $ua->agent('Mozilla/5.0');
- $ua->ssl_opts('verify_hostname' => 0);
- my $res = $ua->get($url);
- if ($res->is_success)
- {
- return $res->decoded_content;
- }
- else
- {
- my $err = $res->content;
- my $ca_file = $ua->ssl_opts('SSL_ca_file');
- die ("Could not fetch $url: $err\n$ca_file");
- }
- }
-
-
- my $content = # fetch_url($HTML5_URL) .
- fetch_url($GECKO_URL);
-
- $content = join("\n", grep(/^(?:HTML5|GK)_ATOM.*"on\w+"/, split(/[\n\r]/, $content)));
-
- $content =~ s/.*"(on\w+)".*/$1 /g;
- $content =~ s/\s+/ /g;
- $content =~ s/^\s+|\s+$//g;
-
- my $l = Regexp::List->new;
- my $re = $l->list2re(uniq(split(' ', $content)));
- $re =~ s/\(\?[-^]\w+:(.*)\)/$1/;
- open (OUT, ">$cache");
- print OUT $re;
- close OUT;
- $re;
-}
-
-sub patch
-{
- my $src = shift;
- my $dst = "$src.tmp";
- my $re = create_re();
- my $must_replace = 0;
- print "Patching $src...\n";
- open IN, "<$src" or die ("Can't open $src!");
- open OUT, ">$dst" or die ("Can't open $dst!");
-
- while (<IN>)
- {
- my $line = $_;
- $must_replace = $line ne $_ if s/^(\s*const IC_EVENT_PATTERN\s*=\s*")([^"]+)/$1$re/;
-
- print OUT $_;
- }
- close IN;
- close OUT;
-
- if ($must_replace) {
- rename $dst, $src;
- print "Patched.\n";
- }
- else
- {
- unlink $dst;
- print "Nothing to do.\n";
- }
-}
-
-patch($SOURCE_FILE);
diff --git a/extensions/noscript/chrome/content/noscript/iaUI.js b/extensions/noscript/chrome/content/noscript/iaUI.js
deleted file mode 100644
index a3db58f..0000000
--- a/extensions/noscript/chrome/content/noscript/iaUI.js
+++ /dev/null
@@ -1,204 +0,0 @@
-var $ = function(id) { return document.getElementById(id); }
-var $$ = function(tag) { return document.getElementsByTagName(tag); }
-
-function UIUtils(serv) {
- this.serv = serv;
-}
-UIUtils.prototype = {
- tabselPrefName: "options.tabSelectedIndexes",
- resumeTabSelections: function() {
- var info = window.arguments && window.arguments[0];
- var indexes = info && info.tabselIndexes ||
- this.serv.getPref(this.tabselPrefName, "").split(/\s*,\s*/);
- // select tabs from external param
-
- var tabs = $$("tabs");
- var tcount = Math.min(tabs.length, indexes.length);
- var self = this;
- var listener = function(ev) { self.persistTabSelections(); }
- for(var t = tabs.length; t-- > 0;) {
- try {
- tabs[t].selectedIndex = parseInt(indexes[t]) || 0;
- } catch(e) {}
- tabs[t].addEventListener("select", listener, false);
- }
- this.persistTabSelections();
-
- if (info && info.callback) {
- window.setTimeout(info.callback, 0);
- }
- },
-
- persistTabSelections: function() {
- var tabs = $$("tabbox");
- var ss = [];
- for(var tcount = 0; tcount < tabs.length; tcount++) {
- ss.push(tabs[tcount].selectedIndex);
- }
- this.serv.setPref(this.tabselPrefName, ss.join(","));
- },
-
- visitCheckboxes: function(callback) {
- const rxOpt=/^(inv|moz|)opt-(.*)/;
- var j, checkbox, match;
- const opts = $$("checkbox");
- for(j = opts.length; j-- > 0;) {
- checkbox = opts[j];
- if((match = checkbox.id.match(rxOpt))) {
- callback(match[2], match[1] == "inv", checkbox, match[1] == "moz");
- }
- }
- },
-
- visitTextboxes: function(callback) {
- const rxOpt=/^opt-(.*)/;
- var j, box, match;
- const opts = $$("textbox");
- for(j = opts.length; j-- > 0;) {
- box = opts[j];
- if((match = box.id.match(rxOpt))) {
- callback(match[1], box);
- }
- }
- },
-
- syncGroup: function(caption) {
- var b = !caption.checked;
- var node = caption.parentNode;
- while((node = node.nextSibling)) {
- node.disabled = b;
- }
- },
-
- moveButtonsDown: function() {
- var ref = document.documentElement.getButton("extra2");
- Array.slice(arguments, 0).forEach(function(s) {
- var b;
- if (s) {
- b = $(s);
- b.className = ref.className;
- } else {
- b = document.createElement("spacer");
- b.setAttribute("flex", "1");
- }
- ref.parentNode.insertBefore(b, ref);
- b.hidden = false;
- });
- }
-};
-
-
-function ConditionalGroup(serv, prefName, def) {
- this.serv = serv;
- this.prefName = prefName;
- this.cbx = $("cbx-" + prefName);
- this.sel = $("sel-" + prefName);
- var value = this.serv.getPref(prefName) || 0;
- this.defaultIndex = typeof(def) == "number" ? def - 1 : 0;
- this.cbx.checked = !!value;
- this.sel.selectedIndex = value ? value - 1: this.defaultIndex;
- var self = this;
- this.cbx.addEventListener("command", function(ev) { self.changed() }, false);
- this.changed();
-}
-
-ConditionalGroup.changed = function(cbx) {
- cbx.conditionalGroup.changed();
-}
-
-ConditionalGroup.prototype = {
- changed: function() {
- this.sel.disabled = !this.cbx.checked;
- if(this.cbx.checked && this.sel.selectedIndex < 0)
- this.sel.selectedIndex = this.defaultIndex;
- },
- getValue: function() {
- return this.cbx.checked && this.sel.selectedIndex + 1 || 0;
- },
- persist: function() {
- this.serv.setPref(this.prefName, this.getValue());
- }
-};
-
-function SoundChooser(id, title, serv, def) {
- this.id = id;
- this.title = title;
- this.serv = serv;
- this.def = def;
-}
-
-SoundChooser.prototype = {
- choose: function(btn) {
- try {
- const cc=Components.classes;
- const ci=Components.interfaces;
- const fp = cc["@mozilla.org/filepicker;1"].createInstance(ci.nsIFilePicker);
-
- fp.init(window, this.title, ci.nsIFilePicker.modeOpen);
- fp.appendFilter(this.serv.getString("audio.samples"),"*.wav");
- fp.filterIndex = 0;
- let done = ret => {
- if (ret == ci.nsIFilePicker.returnOK || ret == ci.nsIFilePicker.returnReplace) {
- this.setSample(fp.fileURL.spec);
- this.play();
- }
- };
- if (fp.show) done(fp.show);
- else fp.open({done});
- } catch(ex) {
- Components.utils.import("resource://gre/modules/Services.jsm");
- Services.prompt.alert(window, this.title, ex.toString());
- }
- },
- setSample: function(url) {
- $(this.id).value = url || this.def;
- },
- getSample: function() {
- return $(this.id).value;
- },
- play: function() {
- this.serv.playSound(this.getSample(), true);
- }
-};
-
-function RegExpController(prefix, parseMethod, value) {
- this.parse = parseMethod || this.parse;
- this.regexp = $(prefix + "-regexp");
- this.sample = $(prefix + "-sample");
- var listener = function(ev) { arguments.callee.binding.feedback(); };
- listener.binding = this;
- this.regexp.addEventListener("input", listener, false);
- this.sample.addEventListener("input", listener, false);
- this.regexp.value = value;
- this.feedback();
-}
-
-RegExpController.prototype = {
- parse: function(s) { return new RegExp(s, "g"); },
- validate: function() {
- const textbox = this.regexp;
- try {
- const rx = this.parse(textbox.value);
- if(rx) {
- textbox.className = "";
- return rx;
- }
- } catch(e) {}
- textbox.className = "noscript-error";
- return null;
- },
- feedback: function() {
- const rx = this.validate();
- const sample = this.sample;
- if(rx && rx.test(sample.value)) {
- sample.className = "";
- } else {
- sample.className = "noscript-error";
- }
- return rx;
- },
- getValue: function(valid) {
- if(valid && !this.validate()) return null;
- return this.regexp.value;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/importer.jsm b/extensions/noscript/chrome/content/noscript/importer.jsm
deleted file mode 100644
index 131bae4..0000000
--- a/extensions/noscript/chrome/content/noscript/importer.jsm
+++ /dev/null
@@ -1,30 +0,0 @@
-var EXPORTED_SYMBOLS = ["NO_CACHE", "IMPORT_FOR", "UNLOAD", "UNLOAD_ALL", "BASE_URL"];
-
-let { utils: Cu } = Components;
-
-let BASE_URL = "chrome://noscript/content/";
-let toURL = name => `${name}.jsm`;
-
-let _NO_CACHE_KEY = Date.now().toString(32).concat(Math.random().toString(32).substring(2));
-
-function NO_CACHE(url) {
- return `${BASE_URL}${url}?${_NO_CACHE_KEY}`;
-}
-
-let _MODULES = new Set();
-
-function IMPORT_FOR(scope) {
- return name => {
- let url = NO_CACHE(toURL(name));
- _MODULES.add(url);
- return Cu.import(url, scope);
- };
-}
-
-function UNLOAD(name) {
- Cu.unload(NO_CACHE(toURL(name)));
-}
-function UNLOAD_ALL() {
- for (let m of _MODULES) Cu.unload(m);
- UNLOAD("importer");
-}
diff --git a/extensions/noscript/chrome/content/noscript/loader.js b/extensions/noscript/chrome/content/noscript/loader.js
deleted file mode 100644
index 5995556..0000000
--- a/extensions/noscript/chrome/content/noscript/loader.js
+++ /dev/null
@@ -1,73 +0,0 @@
-// const TIME0 = Date.now();
-
-var { interfaces: Ci, classes: Cc, utils: Cu, results: Cr } = Components;
-
-Cu.import("resource://gre/modules/Services.jsm");
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-Cu.import(`chrome://noscript/content/importer.jsm`);
-var IMPORT = IMPORT_FOR(this);
-
-var IOS = Services.io;
-var OS = Services.obs;
-var LOADER = Services.scriptloader;
-
-
-var _INCLUDED = new Set();
-
-var INCLUDE = function (...objectNames) {
- for (let objectName of objectNames) {
- if (!(_INCLUDED.has(objectName))) {
- _INCLUDED.add(objectName);
- // let t = Date.now();
- LOADER.loadSubScript(NO_CACHE(`${objectName}.js`), this);
- // dump((t - TIME0) + " - loaded " + objectName + " in " + (Date.now() - t) + "\n")
- }
- }
-};
-
-function LAZY_INCLUDE(...objectNames) {
- for (let objectName of objectNames) {
- if (!(_INCLUDED.has(objectName))) {
- let key = objectName; // hack needed in Fx < 50
- this.__defineGetter__(key, function() {
- delete this[key];
- // dump(objectName + " kickstarted at " + (new Error().stack));
- INCLUDE(key);
- return this[key];
- });
- }
- }
-}
-
-function INCLUDE_MIXIN(target, ...objectNames) {
- INCLUDE(...objectNames);
- return MIXIN(target, ...objectNames.map(objectName => this[objectName]));
-}
-
-function MIXIN(target, ...objects) {
- for (let o of objects) {
- let object = o; // hack needed in Fx < 50
- Object.defineProperties(target, Object.keys(object).reduce((descriptors, key) => {
- descriptors[key] = Object.getOwnPropertyDescriptor(object, key);
- return descriptors;
- }, {}));
- }
- return target;
-}
-
-var COMPAT = {
- setStringPref(branch, name, value) {
- if (branch.setStringPref) {
- branch.setStringPref(name, value);
- } else {
- let str = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString);
- str.data = value;
- branch.setComplexValue(name, Ci.nsISupportsString, str);
- }
- },
-
- getStringPref(branch, name, defValue) {
- return branch.getStringPref ? branch.getStringPref(name, defValue)
- : branch.getComplexValue(name, Ci.nsISupportsString).data || defValue;
- }
-};
diff --git a/extensions/noscript/chrome/content/noscript/noscript.js b/extensions/noscript/chrome/content/noscript/noscript.js
deleted file mode 100644
index 7c30dec..0000000
--- a/extensions/noscript/chrome/content/noscript/noscript.js
+++ /dev/null
@@ -1,193 +0,0 @@
-window.noscriptUtil = {
- chromeBase: "chrome://noscript/content/",
- chromeName: "noscript",
- getService(callback) {
- let service;
- try {
- service = Components.classes["@maone.net/noscript-service;1"].getService().wrappedJSObject;
- if (callback) callback(service);
- } catch(ex) {
- Cu.reportError(ex);
- if (callback) {
- window.setTimeout(() => callback(this.getService()), 100);
- } else {
- throw ex;
- }
- }
- return service;
- },
- get service() {
- delete this.service;
- return (this.service = this.getService());
- },
-
- confirm: function(msg, persistPref, title = "NoScript") {
- return this.service.confirm(msg, persistPref, title, window);
- },
-
- getString: function(key, parms) {
- return this.service.getString(key, parms);
- }
-,
- openOptionsDialog: function(params) {
- let odRef = this.service.optionsDialogRef;
- let od;
- try {
- od = odRef && odRef.get();
- if (od && !od.closed) {
- od.focus();
- return;
- }
- } catch (e) {}
- window.openDialog(
- this.chromeBase + this.chromeName + "Options.xul",
- this.chromeName + "Options",
- "chrome, dialog=no, centerscreen, resizable=no, alwaysraised=no",
- params);
- },
-
- openXssOptions: function() {
- this.openOptionsDialog({tabselIndexes: [5, 2]});
- },
- openABEOptions: function(info) {
- this.openOptionsDialog({
- tabselIndexes: [5, 4],
- callback: info ? function() { this.abeOpts.select(info.ruleset); } : null
- });
- },
- openEFOptions: function(filterName) {
- if (filterName) {
- if ("getAttribute" in filterName) filterName = filterName.getAttribute("statustext");
- this.service.externalFilters.lastFilterName = filterName;
- }
- this.openOptionsDialog({tabselIndexes: [5, 5]});
- }
-,
- openAboutDialog: function(params) {
- window.open(
- this.chromeBase + "about.xul",
- this.chromeName + "About",
- "chrome,dialog,centerscreen");
- }
-,
- openConsole: function() {
- if ("HUDService" in window && HUDService.getBrowserConsole && HUDService.toggleBrowserConsole) {
- let bc = HUDService.getBrowserConsole();
- function showJS(bc) { bc.setFilterState("jslog", true); }
- if (bc) {
- showJS(bc);
- let w = bc.chromeWindow;
- if (w.windowState === w.STATE_MINIMIZED) {
- w.restore();
- }
- w.focus();
- }
- else HUDService.toggleBrowserConsole().then(showJS);
-
- } else if ("toErrorConsole" in window) {
- toErrorConsole();
- }
- else if ("toJavaScriptConsole" in window) {
- toJavaScriptConsole();
- } else {
- window.openDialog("chrome://global/content/console.xul", "", "chrome,all,dialog=no");
- }
- },
-
- openFaq: function(which) {
- this.browse("https://noscript.net/faq#" + which);
- },
-
- openHelp: function(section) {
- this.browse("https://noscript.net/help/" + section);
- },
-
- openDonate: function(src) {
- this.browse("https://secure.informaction.com/donate/?id=noscript&src=" + src);
- },
-
- openInfo: function(about) {
- const ns = this.service;
-
- let url = ns.getPref("siteInfoProvider");
- if (!url) return false;
-
- let domain = ns.getSite(about);
- if (!domain) return false;
-
- if (domain.indexOf('@') > -1) domain = domain.split('@')[1]; // Blocked objects entries
- if (domain.indexOf(':') > -1) domain = ns.getDomain(domain) || domain;
- if (!domain) return false;
-
- let ace;
- try {
- ace = Cc["@mozilla.org/network/idn-service;1"]
- .getService(Ci.nsIIDNService).convertUTF8toACE(domain);
- } catch(e) {
- ace = '';
- }
-
- url = url.replace(/%utf8%/g, encodeURI(domain))
- .replace(/%ace%/g, encodeURI(ace));
-
- if (this.confirm(
- this.getString("siteInfo.confirm", [domain, ns.getSite(url) || "?", url]),
- "confirmSiteInfo", "NoScript"
- )) {
- let currentTab = window.gBrowser && gBrowser.selectedTab;
- let w = this.browse(url);
- if ("noscriptOverlay" in window) {
- let et = "DOMContentLoaded";
- let eh = function(ev) {
- let d = ev.target;
- if (d.URL !== url) return;
- let button = d.getElementById("allow-button");
- if (!button) return;
-
- let ns = noscriptOverlay.ns;
- let enabled = ns.isJSEnabled(domain);
-
- button.firstChild.textContent = noscriptOverlay.getString((enabled ? "forbidLocal" : "allowLocal"), [domain]);
- button.style.display = "";
- button.className = enabled ? "forbid" : "allow";
-
- function complete(enable) {
- noscriptOverlay.safeAllow(domain, enable, false, ns.RELOAD_ALL);
- d.defaultView.close();
- if (currentTab) gBrowser.selectedTab = currentTab;
- }
-
- button.addEventListener("click", (e) => complete(!enabled), false);
-
- if (!(enabled || ns.isUntrusted(domain))) {
- button = d.getElementById("distrust-button");
- if (!button) return;
- button.style.display = "";
- button.firstChild.textContent = noscriptOverlay.getString("distrust", [domain]);
- button.addEventListener("click", function(e) {
- ns.setUntrusted(domain, true);
- complete(false);
- }, false);
- }
- };
- w.addEventListener(et, eh, true);
-
- w.setTimeout(() => w.removeEventListener(et, eh, true), 20000);
- }
- return true;
- }
-
- return false;
- },
-
- browse: function(url, features) {
- var w = this.service.dom.mostRecentBrowserWindow;
- if(w && !w.closed && w.gBrowser) {
- w.gBrowser.selectedTab = w.gBrowser.addTab(url);
- } else {
- window.open(url, "_blank", features || null).focus();
- }
- return w;
- }
-
-};
diff --git a/extensions/noscript/chrome/content/noscript/noscript.xbl b/extensions/noscript/chrome/content/noscript/noscript.xbl
deleted file mode 100644
index 51361b0..0000000
--- a/extensions/noscript/chrome/content/noscript/noscript.xbl
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0"?>
-<bindings id="noscriptBindings"
- xmlns="http://www.mozilla.org/xbl"
- xmlns:xul="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
- xmlns:xbl="http://www.mozilla.org/xbl">
-
- <binding id="nop"></binding>
- <binding id="scrollable-popup"
- extends="chrome://global/content/bindings/popup.xml#popup-base">
-
- <content>
- <xul:arrowscrollbox clicktoscroll="true"
- class="popup-internal-box" flex="1" orient="vertical">
- <children/>
- </xul:arrowscrollbox>
- </content>
- </binding>
-</bindings>
diff --git a/extensions/noscript/chrome/content/noscript/noscriptBM.js b/extensions/noscript/chrome/content/noscript/noscriptBM.js
deleted file mode 100644
index 3ba480c..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptBM.js
+++ /dev/null
@@ -1,127 +0,0 @@
-window.noscriptBM = {
-
- openUILinkIn: function(url, ...args) {
- var callback = () => openUILinkIn._noscriptBMSaved(url, ...args);
-
- if(!(window.gURLBar && gURLBar.value))
- return callback();
-
- var shortcut = gURLBar.value;
- var jsrx = /^\s*(?:data|javascript):/i;
- var isJS = jsrx.test(url);
- var ns = noscriptUtil.service;
-
-
- if (isJS) {
- let allowJS = ns.getPref("allowURLBarJS", true);
- let isShortcut = ("originalShortcut" in gURLBar) && gURLBar.originalShortcut !== shortcut;
- if (allowJS || isShortcut || !/\bhandleCommand@/.test(new Error().stack)) {
- window.setTimeout(function() { // if we don't defer, errors are not logged in the console...
- if (!ns.executeJSURL(url, callback, !isShortcut))
- callback();
- }, 0);
- } else {
- ns.prompter.alert(window, "NoScript",
- "javascript: and data: URIs typed or pasted in the address bar are disabled to prevent social engineering attacks.\nDevelopers can enable them for testing purposes by toggling the \"noscript.allowURLBarJS\" preference.");
- }
- return;
- }
-
- return callback();
- },
-
- patchPlacesMethods: function(pu) {
- let ns = noscriptUtil.service;
- if (pu.__ns === ns) return; // already patched
- pu.__ns = ns;
- if (!pu.__originalCheckURLSecurity) {
- pu.__originalCheckURLSecurity = pu.checkURLSecurity;
- }
- pu.checkURLSecurity = ns.placesCheckURLSecurity;
-
- ns.onDisposal(() => {
- if ("__originalCheckURLSecurity" in pu) {
- pu.checkURLSecurity = pu.__originalCheckURLSecurity;
- delete pu.__originalCheckURLSecurity;
- }
- delete pu.__ns;
- });
-
- },
-
- onLoad: function(ev) {
- ev.currentTarget.removeEventListener("load", arguments.callee, false);
- if(!noscriptUtil.service) return;
- window.addEventListener("unload", noscriptBM.dispose, false);
- noscriptBM.init();
- },
-
- _inited: false,
- init: function() {
- // patch URLBar for keyword-triggered bookmarklets:
- // we do it early, in case user has a bookmarklet startup page
- if (noscriptBM._inited) return;
- noscriptBM._inited = true;
- if (!window.openUILinkIn) return;
- let original = window.openUILinkIn._noscriptBMSaved;
- this.openUILinkIn._noscriptBMSaved = original || window.openUILinkIn;
- window.openUILinkIn = this.openUILinkIn;
- noscriptBM.onDisposal(() => {
- window.openUILinkIn = window.openUILinkIn._noscriptBMSaved;
- });
-
- // delay bookmark stuff
- window.setTimeout(noscriptBM.delayedInit, 50);
- },
-
- delayedInit: function() {
- for (let f of ["getShortcutOrURIAndPostData" /* Fx >= 25 */, "getShortcutOrURI"]) {
- if (f in window) {
- let getShortcut = window[f];
- if (getShortcut._noscriptBM) return;
-
- let replacement = function(aURL) {
- if ("gURLBar" in window && window.gURLBar) {
- window.gURLBar.originalShortcut = aURL;
- }
- return getShortcut.apply(window, arguments);
- };
- replacement._noscriptBM = true;
-
- window[f] = replacement;
- noscriptBM.onDisposal(() => {
- window[f] = getShortcut;
- });
- break;
- }
- }
-
- // Places stuff, from most recent to oldest
- var pu = window.PlacesUIUtils || window.PlacesUtils || false;
- if (typeof(pu) == "object") {
- noscriptBM.placesUtils = pu; // hold a reference even if in Fx 4 it's a module
- noscriptBM.patchPlacesMethods(pu);
- }
- },
-
- _disposalTasks: [],
- onDisposal(t) {
- this._disposalTasks.push(t);
- },
- dispose() {
- window.removeEventListener("unload", noscriptBM.dispose, false);
- let ns = noscriptUtil.service;
- let tasks = noscriptBM._disposalTasks;
- for (let t of tasks) {
- try {
- if (ns.consoleDump) ns.dump(`Running noscriptBM disposal task ${uneval(t)}`);
- t();
- } catch (e) {
- Components.utils.reportError(e);
- }
- }
- delete window.noscriptBM;
- }
-};
-
-
diff --git a/extensions/noscript/chrome/content/noscript/noscriptBMOverlay.xul b/extensions/noscript/chrome/content/noscript/noscriptBMOverlay.xul
deleted file mode 100644
index 866328d..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptBMOverlay.xul
+++ /dev/null
@@ -1,11 +0,0 @@
-<?xml version="1.0"?>
-
-<!DOCTYPE overlay>
-
-<overlay id="noscriptBMOverlay"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/x-javascript" src="noscript.js" />
- <script type="application/x-javascript" src="noscriptBM.js"/>
- <script type="application/x-javascript">window.addEventListener("load", noscriptBM.onLoad, false)</script>
-</overlay>
diff --git a/extensions/noscript/chrome/content/noscript/noscriptOptions.js b/extensions/noscript/chrome/content/noscript/noscriptOptions.js
deleted file mode 100644
index f9b3ca4..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptOptions.js
+++ /dev/null
@@ -1,755 +0,0 @@
-// Cc, Ci, Cu should be already defined by tree-copy.js
-
-var ns = noscriptUtil.service;
-
-var nsopt = {
-
-
- dom2: /^(?:http[s]?|file):\/\/([^\.\?\/#,;:\\\@]+(:?\.[^\.\?\/#,;:\\\@]+$|$))/,
- utils: null,
- whitelistURLs: [],
- init: function() {
-
- if(ns.uninstalling) { // this should never happen!
- window.close();
- return;
- }
-
- ns.optionsDialogRef = Components.utils.getWeakReference(window);
-
- this.utils = new UIUtils(ns);
- this.utils.resumeTabSelections();
-
- abeOpts.init();
-
- var locked = ns.locked;
- for (var widget of ["urlText","urlListDisplay", "jsglobal", "addButton", "removeButton", "importButton", "exportButton"]) {
- this[widget] = $(widget);
- if(locked) this[widget].disabled = true;
- }
- // forbid <a ping>
- var pingCbx = $("mozopt-browser.send_pings");
- if(pingCbx.getAttribute("label").indexOf("Allow ") == 0) {
- pingCbx.setAttribute("label", noscriptUtil.getString("allowLocal", ["<a ping...>"]));
- $("opt-noping")
- .setAttribute("label", noscriptUtil.getString("forbidLocal", ["<a ping...>"]));
- }
-
- this.trustedSites = ns.jsPolicySites.clone();
- this.untrustedSites = ns.untrustedSites.clone();
- this.tempSites = ns.tempSites.clone();
- this.gTempSites = ns.gTempSites.clone();
-
- this.urlListDisplay.boxObject.QueryInterface(Ci.nsITreeBoxObject);
- this.populateUrlList();
-
- this.jsglobal.checked = ns.jsEnabled;
-
- this.utils.visitCheckboxes(function(prefName, inverse, checkbox, mozilla) {
- try {
- var val = mozilla ? ns.prefService.getBoolPref(prefName) : ns.getPref(prefName);
- checkbox.setAttribute("checked", inverse ? !val : val);
- if(ns.prefService.prefIsLocked(mozilla ? prefName : "noscript." + prefName)) {
- checkbox.setAttribute("disabled", true);
- }
- } catch(ex) {}
- }
- );
-
- this.utils.visitTextboxes(function(prefName, box) {
- box.value = ns.getPref(prefName);
- });
-
- $("opt-showPermanent").setAttribute("label", noscriptUtil.getString("allowLocal", ["[...]"]));
- $("opt-showTemp").setAttribute("label", noscriptUtil.getString("allowTemp", ["[...]"]));
- $("opt-showDistrust").setAttribute("label", noscriptUtil.getString("distrust", ["[...]"]));
- $("opt-showGlobal").setAttribute("label", noscriptUtil.getString("allowGlobal"));
-
- var notifyHideLabels = noscriptUtil.getString("notifyHide").split("%S");
- $("opt-notify.hide").setAttribute("label", notifyHideLabels[0]);
- $("notifyDelayLabel").setAttribute("value", notifyHideLabels[1]);
- $("notifyDelay").value = ns.getPref("notify.hideDelay", 5);
-
- this.soundChooser.setSample(ns.getPref("sound.block"));
-
- this.autoAllowGroup = new ConditionalGroup(ns, "autoAllow", 1);
- this.toggleGroup = new ConditionalGroup(ns, "toolbarToggle", 3);
-
- var val = ns.getPref("allowHttpsOnly", 0);
- $("sel-allowHttpsOnly").selectedIndex = (val < 0 || val > 2) ? 0 : val;
-
- var shortcut = ns.getPref("keys.toggle");
- if(shortcut) {
- shortcut = shortcut.replace(/VK_([^\.]*).*/g, "$1").replace(/\s+/g, '+').replace(/_/g, ' ');
- var shortcutLabel = $("toolbarToggle-shortcut");
- shortcutLabel.value = "(" + shortcut + ")";
- shortcutLabel.removeAttribute("hidden");
- }
-
- this.utils.syncGroup($("opt-secureCookies"));
-
- this.xssEx = new RegExpController(
- "xssEx",
- ns.rxParsers.multi,
- ns.getPref("filterXExceptions"));
-
- // hide incompatible options
- let browserWin = ns.dom.mostRecentBrowserWindow;
-
- if (browserWin) {
- if (!browserWin.document.getElementById("noscript-statusIcon"))
- $("opt-statusIcon").setAttribute("hidden", "true");
-
- if(browserWin.noscriptOverlay && !browserWin.noscriptOverlay.getNotificationBox())
- $("fx-notifications").setAttribute("hidden", "true");
- }
-
- ["clearClick"].forEach(function(c) {
- var pref = ns.getPref(c);
- Array.forEach($(c + "Opts").getElementsByTagName("checkbox"), function(cbx) {
- cbx.setAttribute("checked", !(pref & parseInt(cbx.getAttribute("value"))) ? "false" : "true");
- });
- });
-
-
-
- $("opt-allowClipboard").setAttribute("collapsed", "true");
-
- this.initExtraButtons();
-
- this.addButton.setAttribute("enabled", "false");
- this.removeButton.setAttribute("enabled", "false");
-
- this.toggleHoverUI();
-
-
-
- window.sizeToContent();
- },
-
- dispose: function() {
- abeOpts.dispose();
- },
-
- initExtraButtons: function() {
- this.utils.moveButtonsDown("donateButton", "", "importConfButton", "exportConfButton");
- },
-
-
- donate: function() {
- noscriptUtil.openDonate("options");
- },
-
- importConf: function() {
- this.chooseFile(
- this.buttonToTitle("importConfButton"),
- "Open",
- function(f) {
- ns.restoreConf(ns.readFile(f)) && nsopt.reload();
- }
- );
- },
- exportConf: function() {
- this.save();
- this.chooseFile(
- this.buttonToTitle("exportConfButton"),
- "Save",
- function(f) {
- ns.writeFile(f, ns.serializeConf(true));
- }
- );
- },
-
- reset: function() {
-
- if(!ns.prompter.confirm(window,
- ns.getString("reset.title"),
- ns.getString("reset.warning"))
- ) return;
-
- ns.resetDefaults();
- this.reload();
- },
-
- reload: function() {
- this.utils.persistTabSelections();
- var op = top.opener;
- if(op && op.noscriptUtil) {
- op.setTimeout(function() {
- op.noscriptUtil.openOptionsDialog();
- }, 10);
- }
- window.close();
- },
-
- save: function() {
- this.utils.visitCheckboxes(
- function(prefName, inverse, checkbox, mozilla) {
- if(checkbox.getAttribute("collapsed")!="true") {
- const checked = checkbox.getAttribute("checked") == "true";
- const requestedVal = inverse ? !checked : checked;
-
- if(mozilla) {
- try {
- ns.prefService.setBoolPref(prefName, requestedVal);
- } catch(ex) {}
- return;
- }
-
- const prevVal = ns.getPref(prefName);
- if(requestedVal != prevVal) {
- ns.setPref(prefName, requestedVal);
- }
- }
- }
- );
-
-
- this.utils.visitTextboxes(function(prefName, box) {
- if (box.value != ns.getPref(prefName)) {
- ns.setPref(prefName, box.value);
- }
- });
-
- ["clearClick"].forEach(function(c) {
- var pref = 0;
- Array.forEach($(c + "Opts").getElementsByTagName("checkbox"), function(cbx) {
- if (cbx.checked) pref = pref | parseInt(cbx.getAttribute("value"));
- });
- ns.setPref(c, pref);
- });
-
-
- ns.setPref("notify.hideDelay", parseInt($("notifyDelay").value) ||
- ns.getPref("notify.hideDelay", 5));
-
- ns.setPref("sound.block", this.soundChooser.getSample());
-
- this.autoAllowGroup.persist();
-
- if (!(ns.getPref("hoverUI.excludeToggling") && $("opt-hoverUI").checked)) {
- this.toggleGroup.persist();
- }
-
- ns.setPref("allowHttpsOnly", $("sel-allowHttpsOnly").selectedIndex);
-
- var exVal = this.xssEx.getValue();
- if(this.xssEx.validate() || !/\S/.test(exVal))
- ns.setPref("filterXExceptions", exVal);
-
- if (this.tempRevoked) {
- ns.eraseTemp();
- }
-
- var global = this.jsglobal.getAttribute("checked") == "true";
- var untrustedSites = this.untrustedSites;
- var trustedSites = this.trustedSites;
- var tempSites = this.tempSites;
- var gTempSites = this.gTempSites;
-
- ns.safeCapsOp(function(ns) {
- if(ns.untrustedSites.sitesString != untrustedSites.sitesString
- || ns.jsPolicySites.sitesString != trustedSites.sitesString
- || ns.tempSites.sitesString != tempSites.sitesString
- || ns.gTempSites.sitesString != gTempSites.sitesString) {
- ns.untrustedSites.sitesString = untrustedSites.sitesString;
- ns.persistUntrusted();
- ns.tempSites.sitesString = tempSites.sitesString
- ns.gTempSites.sitesString = gTempSites.sitesString
- ns.setJSEnabled(trustedSites.sitesList, true, true);
- }
- ns.jsEnabled = global;
- });
- return true;
- },
-
- urlListChanged: function(dontUpdate) {
- const selectedItems = noscriptTreeCc.getSelectedItems(this.urlListDisplay, this.whitelistURLs);
- var removeDisabled = true;
- for(var j = selectedItems.length; j-- > 0;) {
- if(!selectedItems[j].mandatory) {
- removeDisabled = false;
- break;
- }
- }
- this.removeButton.setAttribute("disabled", removeDisabled);
- $("revokeButton")
- .setAttribute("disabled", this.tempRevoked ||
- !(this.tempSites.sitesString || this.gTempSites.sitesString || ns.objectWhitelistLen));
- if (!dontUpdate) nsWhitelistTreeView.updateTree();
- this.urlChanged();
- },
-
- openInfo: function(ev) {
- if (ev.button === 1) {
- setTimeout(function() {
- const selectedItems = noscriptTreeCc.getSelectedItems(nsopt.urlListDisplay, nsopt.whitelistURLs);
- const domains = [];
- for (let j = selectedItems.length; j-- > 0;) {
- let site = selectedItems[j].value;
- let d = site.indexOf(":/") > 0 ? ns.getDomain(site) : site;
- if (d && domains.indexOf(d) === -1) domains.push(d);
- }
- domains.forEach(noscriptUtil.openInfo, noscriptUtil);
- }, 0); // delayed to let middle-click autoselect the underlying item
- }
- },
-
- copyUrlListSel: function() {
- noscriptTreeCc.doCopy(this.urlListDisplay, "", " ");
- },
-
- urlChanged: function() {
- var url = this.urlText.value;
- if(url.match(/\s/)) url = this.urlText.value = url.replace(/\s/g,'');
- var addEnabled = url.length > 0 && (url = ns.getSite(url)) ;
- if(addEnabled) {
- var match = url.match(this.dom2);
- if(match) url = match[1];
- url = this.trustedSites.matches(url);
- if(!(addEnabled = !url)) {
- this.ensureVisible(url);
- }
- }
- this.addButton.setAttribute("disabled", !addEnabled);
- },
-
- notifyHideDelay: {
- onInput: function(txt) {
- if(/\D/.test(txt.value)) txt.value = txt.value.replace(/\D/, "");
- },
- onChange: function(txt) {
- txt.value = parseInt(txt.value) || ns.getPref("notify.hideDelay", 5);
- }
- },
-
- ensureVisible: function(site) {
- for(var j = nsWhitelistTreeView.rowCount; j-- > 0;) {
- if(nsWhitelistTreeView.getCellText(j) == site) {
- this.urlListDisplay.boxObject.ensureRowIsVisible(j);
- }
- }
- },
-
- populateUrlList: function() {
- const policy = this.trustedSites;
- const sites = this.trustedSites.sitesList;
- this.whitelistURLs = [];
- const dom2 = this.dom2;
- var site, item;
- var match, k, len;
- var tempSites = this.gTempSites.clone();
- tempSites.add(this.tempSites.sitesList);
- var tempMap = this.tempSites.sitesMap;
- for(let j = 0, len = sites.length; j < len; j++) {
- site = sites[j];
- // skip protocol + 2nd level domain URLs
- if((match = site.match(dom2)) && policy.matches(item = match[1]))
- continue;
-
- item = {value:site};
- if(ns.isMandatory(site)) {
- item.mandatory = true;
- }
- item.temp = site in tempMap;
- this.whitelistURLs.push(item);
- }
- this.urlListDeselectAll();
- this.urlListChanged();
- },
-
- allow: function() {
- const site = ns.getSite(this.urlText.value);
- this.trustedSites.add(site);
- this.tempSites.remove(site, true, true); // see noscriptService#eraseTemp()
- this.gTempSites.remove(site, true, true);
-
- this.untrustedSites.remove(site, false, !ns.mustCascadeTrust(site, false));
- this.populateUrlList();
- this.ensureVisible(site);
- this.addButton.setAttribute("disabled", "true");
- },
-
- remove: function() {
- const ul = this.urlListDisplay;
- const selectedItems = noscriptTreeCc.getSelectedItems(ul, this.whitelistURLs);
- var visIdx = ul.boxObject.getFirstVisibleRow();
- var lastIdx = visIdx + ul.boxObject.getPageLength();
-
-
-
-
- var removed = [];
- for(var j = selectedItems.length; j-- > 0;) {
- if(!ns.isMandatory(site = selectedItems[j].value)) {
- removed.push(site);
- }
- }
- if (!removed.length) return;
-
- this.trustedSites.remove(removed, true); // keepUp
- this.tempSites.remove(removed, true, true); // see noscriptService#eraseTemp()
- this.gTempSites.remove(removed, true, true);
-
- this.populateUrlList();
-
- },
-
- urlListDeselectAll: function() {
- this.urlListDisplay.view.selection.clearSelection();
- },
-
- tempRevoked: false,
- revokeTemp: function() {
- this.trustedSites.remove(this.tempSites.sitesList, true, true);
- this.trustedSites.remove(this.gTempSites.sitesList, true, true);
- this.untrustedSites.add(this.gTempSites.sitesList);
- this.trustedSites.add(ns.mandatorySites.sitesList);
- this.tempSites.sitesString = "";
- this.gTempSites.sitesString = "";
- this.tempRevoked = true;
- this.populateUrlList();
- },
-
- _soundChooser: null,
- get soundChooser() {
- return this._soundChooser ||
- (this._soundChooser =
- new SoundChooser(
- "sampleURL",
- this.buttonToTitle("sampleChooseButton"),
- ns,
- "chrome://noscript/skin/block.wav"
- ));
- },
-
-
- chooseFile: function(title, mode, callback) {
- const IFP = Ci.nsIFilePicker;
- const fp = Cc["@mozilla.org/filepicker;1"].createInstance(IFP);
-
- fp.init(window, title, IFP["mode" + mode]);
-
- try {
- fp.displayDirectory = ns.prefs.getComplexValue("exportDir", Ci.nsILocalFile);
- } catch (e) {
- fp.displayDirectory = Cc["@mozilla.org/file/directory_service;1"]
- .getService(Ci.nsIDirectoryServiceProvider)
- .getFile("Home", {});
- }
- fp.defaultExtension = "txt";
- let done = ret => {
- if(ret == IFP.returnOK ||
- ret == IFP.returnReplace) {
- callback.call(nsopt, fp.file);
- }
- };
- if (fp.show) done(fp.show());
- else fp.open({done});
- },
-
-
- importExport: function(op) {
- this.chooseFile(
- this.buttonToTitle(op + "Button"),
- op == "import" ? "Open" : "Save",
- this[op + "List"]
- );
- },
-
- importList: function(file) {
- var all = ns.readFile(file).replace(/\s+/g, "\n");
- if (/[,\{]/.test(all)) {
- ns.log("Wrong format");
- return null;
- }
- let untrustedPos = all.indexOf("[UNTRUSTED]");
- if(untrustedPos < 0) {
- this.trustedSites.sitesString += "\n" + all;
- } else {
- this.trustedSites.sitesString += "\n" + all.substring(0, untrustedPos);
- this.untrustedSites.sitesString += all.substring(all.indexOf("\n", untrustedPos + 2));
- }
- this.untrustedSites.remove(this.trustedSites.sitesList, false, true);
- this.populateUrlList();
- return null;
- },
-
- exportList: function(file) {
- var list = ns.getPermanentSites(this.trustedSites, this.tempSites);
- list.remove(ns.mandatorySites.sitesList, true, true);
- ns.writeFile(file, list.sitesList.join("\n") +
- "\n[UNTRUSTED]\n" +
- this.untrustedSites.sitesList.join("\n")
- );
- return null;
- },
-
- buttonToTitle: function(btid) {
- return "NoScript - " + $(btid).getAttribute("label");
- },
-
- toggleHoverUI: function(cbx) {
- if (ns.getPref("hoverUI.excludeToggling")) {
- let cbx = $("cbx-toolbarToggle");
- if ($("opt-hoverUI").checked) {
- if (!cbx.disabled) {
- this._savedToolbarToggleStatus = cbx.checked;
- cbx.disabled = true;
- cbx.checked = false;
- this.toggleGroup.changed();
- }
- } else {
- if (cbx.disabled) {
- cbx.disabled = false;
- cbx.checked = this._savedToolbarToggleStatus;
- }
- }
- }
- }
-
-}
-
-var ABE = ns.ABE;
-
-var abeOpts = {
- selectedRS: null,
- _map: {__proto__: null},
- errors: false,
- QueryInterface: ns.wan.QueryInterface, // dirty hack, we share the same observer ifaces
-
- init: function() {
- this.list = $("abeRulesets-list");
- this.populate();
-
- this.updateWAN(ns.wan.ip);
- const OS = ns.os;
- OS.addObserver(this, ns.wan.IP_CHANGE_TOPIC, true);
- OS.addObserver(this, ABE.RULES_CHANGED_TOPIC, true);
- },
-
- dispose: function() {
- const OS = ns.os;
- OS.removeObserver(this, ns.wan.IP_CHANGE_TOPIC);
- OS.removeObserver(this, ABE.RULES_CHANGED_TOPIC);
- },
-
- observe: function(subject, topic, data) {
- if (topic === ns.wan.IP_CHANGE_TOPIC) this.updateWAN(data);
- else if (topic === ABE.RULES_CHANGED_TOPIC) {
- this.populate();
- this.errors = false;
- }
- },
-
- updateWAN: function(ip) {
- $("opt-ABE.wanIpAsLocal").label = ns.getString("ABE.wanIpAsLocal", [ip || "???"]);
- },
-
- reset: function() {
- ABE.resetDefaults();
- },
- input: function() {
- abeOpts.dirty = abeOpts.list.selectedItem;
- },
- changed: function(i) {
- let current = i || this.list.selectedItem;
-
- if (current && this.dirty) {
-
- let name = current.value;
- let source = $("abeRuleset-text-container").selectedPanel.value;
- let ruleset = ABE.createRuleset(name, source);
- if (ruleset.errors && this.dirty) {
- this.dirty = null;
- let p = ns.prompter;
- if (p.confirmEx(window,
- ns.getString("ABE.syntaxError"),
- ruleset.errors.join("\n"),
- p.BUTTON_TITLE_SAVE * p.BUTTON_POS_0 +
- p.BUTTON_TITLE_DONT_SAVE * p.BUTTON_POS_1 +
- p.BUTTON_POS_1_DEFAULT,
- null, null, null, null, {}) === 1
- ) {
- this.sync();
- return;
- }
- }
- this.dirty = null;
- ABE.storeRuleset(name, source);
- }
- },
-
- _populating: false,
- populate: function() {
- if (this._populating) return;
- this._populating = true;
- this.errors = false;
- this.dirty = null;
- try {
- const map = {__proto__: null};
- var l = this.list;
- for(var j = l.getRowCount(); j-- > 0; l.removeItemAt(j)) {
- try {
- let rc = $("abeRuleset-text-container");
- rc.removeChild(rc.lastChild);
- }
- catch (e) { /* no textboxes present to remove, ignore */ }
- }
- var rulesets = ABE.rulesets;
- var selItem = null;
- if (rulesets) {
- var sel = this.selectedRS && this.selectedRS.name || "USER";
- this.selectedRS = null;
- var i, name;
- for (var rs of rulesets) {
- name = rs.name;
- map[name] = rs;
- i = l.appendItem(name, name);
- if (rs.disabled) i.setAttribute("disabled", "true");
- if (sel == name) selItem = i;
- if (rs.errors) {
- i.className = "noscript-error";
- this.errors = rs.errors;
- }
- let textbox = document.createElement("textbox");
- let textboxAttributes = {
- "flex":"5",
- "multiline":"true",
- "wrap":"off",
- "onchange":"abeOpts.changed()",
- "oninput":"abeOpts.input(this)",
- "value":rs.source
- };
- for (let a in textboxAttributes) { textbox.setAttribute(a, textboxAttributes[a]); }
- $("abeRuleset-text-container").appendChild(textbox);
- }
- }
- this._map = map;
- l.selectedItem = selItem;
- this.sync();
- } finally {
- this._populating = false;
- }
- },
-
- selected: function(i) {
- if (this.dirty) {
- let selIndex = this.list.selectedIndex;
- this.changed(this.dirty);
- this.list.selectedIndex = selIndex;
- }
- if (!this._populating) this.sync();
- this.dirty = null;
- },
-
- select: function(rs) {
- var name = rs && rs.name || rs;
- if (!name) return;
- var l = this.list;
- if (l.selectedItem && l.selectedItem.value == name) return;
-
- for(var j = l.getRowCount(), i; j-- > 0;) {
- i = l.getItemAtIndex(j);
- if (i.value == name) {
- l.selectedItem = i;
- break;
- }
- }
- },
-
- sync: function() {
- var selItem = this.list.selectedItem;
-
- var rs = null;
- if (selItem) {
- this.selectedRS = rs = this._map[selItem.value];
- } else {
- this.selectedRS = null;
- }
-
- $("abeEnable-button").disabled = ! ($("abeDisable-button").disabled = !rs || rs.disabled);
- $("abeRefresh-button").disabled = this.list.getRowCount() == 0;
- $("abeRuleset-text-container").setAttribute("selectedIndex", this.list.selectedIndex);
-
- var text = $("abeRuleset-text-container").selectedPanel;
- text.className = selItem && selItem.className || '';
- text.disabled = !selItem || selItem.disabled;
- text.value = rs && rs.source;
-
- text = $("abeRuleset-errors");
- if (rs && rs.errors) {
- this.ShowHideABEError(false);
- text.value = rs.errors.join("\n");
- }
- else {
- this.ShowHideABEError(true);
- text.value = "";
- }
- },
-
- refresh: function() {
- ABE.refresh();
- },
-
- ShowHideABEError: function(hidden) {
- for (let n of document.getElementsByClassName("abe-error-element")) {
- n.hidden = hidden;
- }
- },
-
- toggle: function(enabled) {
- var selItem = this.list.selectedItem;
- var rs = this.selectedRS;
- if (!(rs && selItem && rs.name == selItem.value)) return;
- if ((rs.disabled = !enabled)) {
- selItem.setAttribute("disabled", "true");
- } else {
- selItem.removeAttribute("disabled");
- }
- ns.setPref("ABE.disabledRulesetNames", ABE.disabledRulesetNames);
- this.sync();
- }
-
-}
-
-var nsWhitelistTreeView = {
- rowCount: nsopt.whitelistURLs.length,
- getCellText: function(r, c) { return nsopt.whitelistURLs[r].value; },
- setTree: function(treebox){ this.treebox = treebox; },
- isContainer: function(row){ return false; },
- isSeparator: function(row){ return false; },
- isSorted: function(){ return true; },
- getLevel: function(row){ return 0; },
- getImageSrc: function(row,col){ return null; },
- getRowProperties: function(row,props) {
- // ??? need to set multicol manually for some reason
- if (props) {
- let aserv=Cc["@mozilla.org/atom-service;1"].getService(Ci.nsIAtomService);
- props.AppendElement(aserv.getAtom("multicol"));
- }
- else { return "multicol" }
- },
- getCellProperties: function(row,col,props) {
- var psl = [];
- if (nsopt.whitelistURLs[row].temp) psl.push("temp");
- if (nsopt.whitelistURLs[row].mandatory) psl.push("mandatory");
- if (psl.length == 0) return;
- if (props) {
- let aserv=Cc["@mozilla.org/atom-service;1"].getService(Ci.nsIAtomService);
- for (let s of psl) props.AppendElement(aserv.getAtom(s));
- }
- else { return psl.join(" ") }
- },
- getColumnProperties: function(colid,col,props){},
- cycleHeader: function(col){},
-
- // Custom properties and methods
- updateTree: function() {
- var r = nsopt.urlListDisplay.boxObject.getFirstVisibleRow();
- nsWhitelistTreeView.rowCount = nsopt.whitelistURLs.length;
- $("urlListDisplay").view = nsWhitelistTreeView;
- nsopt.urlListDisplay.boxObject.scrollToRow(r);
- },
-};
-
diff --git a/extensions/noscript/chrome/content/noscript/noscriptOptions.xul b/extensions/noscript/chrome/content/noscript/noscriptOptions.xul
deleted file mode 100644
index 3a53470..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptOptions.xul
+++ /dev/null
@@ -1,469 +0,0 @@
-<?xml version="1.0"?>
-<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
-<?xml-stylesheet href="chrome://noscript/skin/browser.css" type="text/css"?>
-<?xml-stylesheet href="chrome://noscript/skin/options.css" type="text/css"?>
-
-<!DOCTYPE dialog SYSTEM "chrome://noscript/locale/noscript.dtd">
-<dialog id="noscriptOptions"
- onload="nsopt.init()"
- onunload="nsopt.dispose()"
- ondialogaccept="return nsopt.save()"
-
- title="&noscriptOptionsLong;"
- buttons="extra2,accept,cancel"
-
- buttonlabelextra2="&noscriptReset;"
- buttonaccesskeyextra2="&noscriptReset.accesskey;"
- ondialogextra2="nsopt.reset()"
-
- ondialoghelp="noscriptUtil.openHelp('options')"
-
- spacerflex="1"
- persist="screenX screenY"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/x-javascript" src="noscript.js" />
- <script type="application/x-javascript" src="iaUI.js" />
- <script type="application/x-javascript" src="tree-copy.js" />
- <script type="application/x-javascript" src="noscriptOptions.js" />
-
- <vbox style="width: &noscriptOptionsWidth;">
- <tabbox id="nsopt-tabsMain">
- <tabs>
-
- <tab label="&noscriptGeneral;" id="nsopt-tabGeneral"/>
- <tab label="&noscriptWhitelist;" id="nsopt-tabWhitelist"/>
- <tab label="&noscriptEmbeddings;" id="nsopt-tabEmbeddings"/>
- <tab label="&noscriptAppearance;" id="nsopt-tabAppearance"/>
- <tab label="&noscriptNotifications;" id="nsopt-tabNotifications"/>
- <tab label="&noscriptAdvanced;" id="nsopt-tabAdvanced"/>
-
- </tabs>
- <tabpanels>
-
- <tabpanel><!-- General -->
-
- <vbox flex="1">
-
- <groupbox class="ia-indent">
- <caption><checkbox id="cbx-autoAllow" label="&noscriptAutoAllowTopLevel;"/></caption>
- <radiogroup id="sel-autoAllow">
- <radio label="&noscriptFullAddr;" value="1" selected="true"/>
- <radio label="&noscriptFullDom;" value="2"/>
- <radio label="&noscriptBaseDom;" value="3"/>
- </radiogroup>
- </groupbox>
- <checkbox id="opt-hoverUI" label="&noscript.hoverUI;" oncommand="nsopt.toggleHoverUI()" />
- <groupbox id="toolbarToggleGroup" class="ia-indent">
- <caption orient="vertical">
- <checkbox id="cbx-toolbarToggle" label="&noscriptToolbarToggle;"/>
- <label control="sel-toolbarToggle" id="toolbarToggle-shortcut" class="ia-indent" hidden="true"/>
- </caption>
-
- <radiogroup id="sel-toolbarToggle">
- <radio label="&noscriptFullAddr;" value="1"/>
- <radio label="&noscriptFullDom;" value="2"/>
- <radio label="&noscriptBaseDom;" value="3" selected="true"/>
- </radiogroup>
- </groupbox>
-
-
- <checkbox id="opt-autoReload" label="&noscriptAutoReload;" />
- <vbox class="ia-indent">
- <checkbox id="invopt-autoReload.allTabs" label="&noscriptAutoReload.currentTab;" />
- </vbox>
- <separator class="thin"/>
- <checkbox id="opt-allowBookmarks" label="&noscriptAllowViaBookmarks;" />
-
- <spacer flex="1" />
- <button id="importConfButton" label="&noscriptImport;" hidden="true" oncommand="nsopt.importConf()" />
- <button id="exportConfButton" label="&noscriptExport;" hidden="true" oncommand="nsopt.exportConf()" />
- <button id="donateButton" label="&noscriptDonate;" accesskey="&noscriptDonate.accesskey;" hidden="true" oncommand="nsopt.donate();" />
- </vbox>
- </tabpanel><!-- END General -->
-
- <tabpanel><!-- Whitelist -->
- <vbox flex="1">
- <description style="white-space: normal; width: 33em" id="permissionsText">&noscriptPermissionsText;</description>
- <separator class="thin"/>
- <label control="urlText" value="&noscriptWebAddress;"/>
- <hbox align="center">
- <textbox id="urlText" flex="1" oninput="nsopt.urlChanged()"/>
- <button disabled="false" id="addButton" label="&noscriptAllow;"
- accesskey="&noscriptAllow.accesskey;"
- oncommand="nsopt.allow()"/>
- </hbox>
-
- <tree id="urlListDisplay"
- onselect="nsopt.urlListChanged(true)"
- onkeyup="if (event.keyCode == event.DOM_VK_DELETE) nsopt.remove();"
- onkeydown="if(event.ctrlKey || event.metaKey){if (event.keyCode === event.DOM_VK_A) { noscriptTreeCc.selectAll($('urlListDisplay')); }else if (event.keyCode === event.DOM_VK_C){nsopt.copyUrlListSel(); }}return false;"
- onclick="if(event.button === 1){nsopt.openInfo(event);}else if (event.button === 2){nsopt.copyUrlListSel()}"
- hidecolumnpicker="true"
- seltype="multiple"
- flex="1"
- multicol="true"
- >
- <treecols>
- <treecol label="foo" flex="1" />
- </treecols>
- <treechildren />
- </tree>
- <separator class="thin"/>
- <hbox>
- <button id="removeButton" disabled="true" label="&noscriptRemoveSelected;" oncommand="nsopt.remove()"/>
- <button id="revokeButton" disabled="true" label="&noscriptRevokeTemp;" accesskey="&noscriptRevokeTemp.accesskey;" oncommand="nsopt.revokeTemp()"/>
- <spacer flex="1" />
- <button id="importButton" label="&noscriptImport;" accesskey="&noscriptImport.accesskey;"
- oncommand="nsopt.importExport('import')"/>
- <button id="exportButton" label="&noscriptExport;" accesskey="&noscriptExport.accesskey;"
- oncommand="nsopt.importExport('export')"/>
- </hbox>
- <checkbox id="jsglobal" label="&noscriptGloballyEnabled;" />
- </vbox>
- </tabpanel><!-- END Whitelist -->
-
- <tabpanel><!-- Embeddings -->
- <vbox flex="1">
- <label class="header" value="&noscriptAdditionalRestrictions;" />
- <hbox><description style="white-space: normal">&noscriptReloadWarn;</description></hbox>
- <separator class="thin" />
- <hbox class="flexible-cbx">
- <vbox>
- <checkbox id="opt-forbidJava" label="&noscriptForbidJava;" />
- <checkbox id="opt-forbidFlash" label="&noscriptForbidFlash;" />
- <checkbox id="opt-forbidSilverlight" label="&noscriptForbidSilverlight;" />
- <checkbox id="opt-forbidPlugins" label="&noscriptForbidPlugins;" />
- </vbox>
- <vbox flex="1">
- <checkbox id="opt-forbidMedia" label="&noscriptForbidMedia;" />
- <checkbox id="opt-forbidIFrames" label="&noscriptForbidIFrames;" />
- <checkbox id="opt-forbidFrames" label="&noscriptForbidFrames;" />
- <checkbox id="opt-forbidFonts" label="&noscriptForbidFonts;" />
- </vbox>
- </hbox>
- <separator class="thin" />
- <checkbox id="opt-contentBlocker" label="&noscriptContentBlocker;" class="header" />
- <checkbox id="opt-alwaysBlockUntrustedContent" label="&noscriptAlwaysBlockUntrustedContent;" />
-
- <separator class="thin" />
- <checkbox id="opt-forbidWebGL" label="&noscriptForbidWebGL;" />
- <separator class="thin" />
- <checkbox id="opt-showPlaceholder" label="&noscriptShowPlaceholder;" />
- <checkbox id="invopt-showUntrustedPlaceholder" label="&noscriptNoUntrustedPlaceholder;" />
- <checkbox id="opt-confirmUnblock" label="&noscriptConfirmUnblock;" />
- <checkbox id="opt-collapseObject" label="&noscriptCollapseBlockedObjects;" />
-
- <hbox>
-
- <spacer flex="1" />
- </hbox>
- </vbox>
- </tabpanel>
-
- <tabpanel><!-- Appearance -->
- <vbox flex="1">
-
- <label class="header" value="&noscriptShow;"/>
-
- <checkbox id="opt-statusIcon" label="&noscriptStatusIcon;" />
- <checkbox id="opt-statusLabel" label="&noscriptStatusLabel;" />
- <checkbox id="opt-ctxMenu" label="&noscriptCtxMenu;" />
-
- <separator />
- <hbox>
- <vbox flex="1">
- <checkbox id="opt-showPermanent" label="Allow [...]" />
- <checkbox id="opt-showTemp" label="&noscriptTempCmd;" />
- <checkbox id="opt-showDistrust" label="Mark [...] as untrusted" />
- </vbox>
- <vbox flex="1">
- <checkbox id="opt-showBaseDomain" label="&noscriptBaseDom;" />
- <checkbox id="opt-showDomain" label="&noscriptFullDom;" />
- <checkbox id="opt-showAddress" label="&noscriptFullAddr;" />
- </vbox>
- </hbox>
- <separator />
- <hbox>
- <vbox flex="1">
- <checkbox id="opt-showGlobal" label="Allow Globally" />
- <checkbox id="opt-showAbout" label="&noscriptAbout;" />
- <checkbox id="opt-showUntrusted" label="&noscriptUntrusted;" />
- <checkbox id="opt-showBlockedObjects" label="&noscriptBlockedObjects;" />
- <checkbox id="opt-showRecentlyBlocked" label="&noscriptRecentBlocked;" />
- </vbox>
- <vbox flex="1">
- <checkbox id="opt-showAllowPage" label="&noscriptAllowPage;" />
- <checkbox id="opt-showTempAllowPage" label="&noscriptTempAllowPage;" />
- <checkbox id="opt-showTempToPerm" label="&noscriptTempToPerm;" />
- <checkbox id="opt-showRevokeTemp" label="&noscriptRevokeTemp;" />
- <checkbox id="opt-showVolatilePrivatePermissionsToggle" label="&noscriptPermanentInPrivate;" />
- </vbox>
- </hbox>
-
- </vbox>
- </tabpanel><!-- END Appearance -->
-
- <tabpanel><!-- Notifications -->
- <vbox flex="1">
- <vbox id="fx-notifications">
- <vbox id="notifyOpts">
- <checkbox id="opt-notify" label="&noscriptNotify;" />
- <vbox class="ia-indent">
- <checkbox id="opt-notify.bottom" label="&noscriptNotify.bottom;" />
- <hbox align="baseline">
- <checkbox id="opt-notify.hide" label="Hide after" />
- <textbox id="notifyDelay" type="number" min="1" max="60"
- oninput="nsopt.notifyHideDelay.onInput(this)"
- onchange="nsopt.notifyHideDelay.onChange(this)"
- maxlength="2" size="2" />
- <label control="notifyDelay" id="notifyDelayLabel" value="seconds" />
- <spacer flex="1"/>
- </hbox>
- </vbox>
- </vbox>
- <separator class="thin" />
- <hbox align="center">
- <checkbox id="opt-xss.notify" label="&noscriptXss;" /><!-- TODO: accesskey -->
- <label class="text-link" style="font-weight: bold" value="?"
- onclick="noscriptUtil.openFaq('xss')"
- tooltiptext="&noscriptXssFaq;" />
- </hbox>
-
-
- <checkbox id="opt-forbidMetaRefresh.notify" label="&noscriptNotifyMeta;" accesskey="&noscriptNotifyMeta.accesskey;"/>
-
- <checkbox id="opt-ABE.notify" label="&ABE;"/><!-- TODO: accesskey -->
- </vbox>
-
- <checkbox id="opt-clearClick.prompt" label="&noscriptClearClickTitle;"/>
-
- <groupbox class="ia-indent">
- <caption><checkbox id="opt-sound" label="&noscriptSound;" /></caption>
-
- <hbox>
- <textbox id="sampleURL" readonly="true" flex="1" />
- <button id="sampleChooseButton" label="&noscriptSound.choose;"
- accesskey="&noscriptSound.choose.accesskey;"
- oncommand="nsopt.soundChooser.choose()" />
- </hbox>
- <hbox align="right">
- <spacer flex="1" />
- <button label="&noscriptSound.play;" accesskey="&noscriptSound.play.accesskey;"
- oncommand="nsopt.soundChooser.play()" />
- <button label="&noscriptSound.reset;" accesskey="&noscriptSound.reset.accesskey;"
- oncommand="nsopt.soundChooser.setSample(null)" />
- </hbox>
-
- </groupbox>
-
- <checkbox id="opt-firstRunRedirection" label="&noscriptShowReleaseNotes;"/>
- </vbox>
- </tabpanel><!-- END Notifications -->
-
- <tabpanel><!-- Advanced -->
- <vbox flex="1">
- <hbox><description style="white-space: normal">&noscriptReloadWarn;</description></hbox>
- <tabbox id="nsopt-tabsAdvanced" flex="1">
- <tabs>
- <tab class="noscript-no" label=" &noscriptUntrusted; " id="nsopt-tabUntrusted" tooltiptext="&noscriptAdditionalRestrictions;"/>
- <tab class="noscript-yes" label=" &noscriptTrusted; " id="nsopt-tabTrusted" tooltiptext="&noscriptAdditionalPermissions;"/>
- <tab class="noscript-xss" label=" &noscriptXss; " id="nsopt-tabXss"/>
- <tab class="noscript-https" label=" &noscriptHttps; " id="nsopt-tabHttps"/>
- <tab class="noscript-abe" label="&ABE;" id="nsopt-tabABE"/>
- <tab class="noscript-clearclick" label="ClearClick" id="nsopt-tabClearClick"/>
- </tabs>
- <tabpanels flex="1">
- <tabpanel>
- <vbox flex="1">
- <label class="header" value="&noscriptAdditionalRestrictions;" />
-
- <checkbox id="opt-forbidBookmarklets" label="&noscriptForbidBookmarklets;" />
- <checkbox id="opt-noping" label="&noscriptForbidPing;" />
- <separator class="thin"/>
- <checkbox id="opt-nselNever" label="&noscriptNselNever;" />
- <checkbox id="opt-forbidMetaRefresh" label="&noscriptForbidMetaRefresh;" />
- <checkbox id="opt-forbidXSLT" label="&noscriptForbidXSLT;" />
- <separator class="thin"/>
- <checkbox id="opt-fixLinks" label="&noscriptFixLinks;" />
-
- <separator class="thin"/>
- <checkbox id="opt-restrictSubdocScripting" label="&noscriptRestrictSubdocScripting;" />
-
- <separator />
- <label class="text-link header"
- onclick="document.getElementById('nsopt-tabsMain').selectedTab = document.getElementById('nsopt-tabEmbeddings')"
- value="&noscriptEmbeddings;" />
- </vbox>
- </tabpanel><!-- END additional restrictions -->
-
- <tabpanel><!-- Additional Permissions -->
- <vbox flex="1">
- <label class="header" value="&noscriptAdditionalPermissions;" />
-
- <checkbox id="opt-nselForce" label="&noscriptNselForce;" />
- <checkbox id="mozopt-browser.send_pings" label="&noscriptAllowPing;" />
-
- <separator class="thin" />
- <checkbox id="opt-allowClipboard" label="&noscriptAllowClipboard;" />
- <checkbox id="opt-allowLocalLinks" label="&noscriptAllowLocalLinks;" />
-
- <separator class="thin" />
- <checkbox id="opt-cascadePermissions" label="&noscriptCascadePermissions;" />
- </vbox>
- </tabpanel><!-- END Additional Permissions -->
-
-
- <tabpanel><!-- XSS -->
- <vbox flex="1">
- <label class="text-link header"
- onclick="noscriptUtil.openFaq('xss')" value="&noscriptXssFaq;"
- accesskey="&noscriptXssFaq.accesskey;"
- />
- <checkbox id="opt-filterXGet" label="&noscriptOptFilterXGet;" />
- <checkbox id="opt-filterXPost" label="&noscriptOptFilterXPost;" />
- <separator class="thin" />
- <label control="xssEx-regexp" class="header" value="&noscriptXssExceptions;" />
- <description control="xssEx-regexp" style="white-space: normal">&noscriptXssExceptions.description;</description>
- <textbox id="xssEx-regexp" multiline="true" flex="1" />
- <hbox align="center">
- <label control="xssEx-sample" value="&noscriptMatchSample;" />
- <textbox id="xssEx-sample" flex="1" value="https://www.google.com/search?q=test" />
- </hbox>
- </vbox>
- </tabpanel>
-
- <tabpanel><!-- HTTPS -->
- <vbox flex="1">
- <label class="text-link header"
- accesskey="&noscriptHttpsFaq.accesskey;"
- onclick="noscriptUtil.openFaq('https')"
- value="&noscriptHttpsFaq;"/>
-
- <tabbox id="nsopt-tabsHttps" flex="1">
- <tabs>
- <tab label=" &noscriptHttps.behavior; " id="nsopt-tabHttpsBehavior" />
- <tab label=" &noscriptHttps.cookies; " id="nsopt-tabHttpsCookies"/>
- <tab label=" &noscriptPermissions; " id="nsopt-tabHttpsPermissions"/>
-
- </tabs>
-
- <tabpanels flex="1">
- <tabpanel>
- <vbox flex="1">
-
- <description control="opt-httpsForced" style="white-space: normal">&noscriptHttpsForced;</description>
- <textbox id="opt-httpsForced" multiline="true" flex="1" />
- <description control="opt-httpsForcedExceptions" style="white-space: normal">&noscriptHttpsForcedExceptions;</description>
- <textbox id="opt-httpsForcedExceptions" multiline="true" flex="1" />
- </vbox>
- </tabpanel>
- <tabpanel>
- <vbox flex="1">
- <groupbox flex="1">
- <caption><checkbox id="opt-secureCookies" label="&noscriptSecureCookies;" oncommand="nsopt.utils.syncGroup(this)" /></caption>
- <description control="opt-secureCookiesForced" style="white-space: normal">&noscriptSecureCookiesForced;</description>
- <textbox id="opt-secureCookiesForced" multiline="true" flex="1" />
-
- <description control="opt-secureCookiesExceptions" style="white-space: normal">&noscriptSecureCookiesExceptions;</description>
- <textbox id="opt-secureCookiesExceptions" multiline="true" flex="1" />
- </groupbox>
- </vbox>
- </tabpanel>
- <tabpanel>
- <vbox flex="1">
- <description control="sel-allowHttpsOnly" style="white-space: normal">&noscriptHttps.description;</description>
- <menulist id="sel-allowHttpsOnly">
- <menupopup id="mp-allowHttpsOnly">
- <menuitem label="&noscriptHttps.never;" value="0" selected="true" />
- <menuitem label="&noscriptHttps.proxy;" value="1"/>
- <menuitem label="&noscriptHttps.always;" value="3"/>
- </menupopup>
- </menulist>
- <spacer flex="1" />
- <checkbox id="opt-globalHttpsWhitelist" label="&noscriptGlobalHttpsWhitelist;" />
- <spacer flex="1" />
- </vbox>
- </tabpanel>
- </tabpanels>
- </tabbox>
- </vbox>
- </tabpanel>
- <tabpanel><!-- ABE -->
- <vbox flex="1">
- <hbox>
- <vbox>
- <checkbox id="opt-ABE.enabled" label="&ABE.enabled.label;" />
- <spacer flex="1" />
- <checkbox id="opt-ABE.siteEnabled" label="&ABE.siteEnabled.label;" />
- </vbox>
- <vbox pack="end">
- <spacer flex="1" />
- <label class="text-link header"
- accesskey="?"
- onclick="noscriptUtil.openHelp('ABE')"
- value="?"/>
- <spacer flex="1" />
- <checkbox id="opt-ABE.wanIpAsLocal" label="" />
- </vbox>
- </hbox>
-
- <vbox >
- <label control="abeRulesets-list" value="&ABE.rulesets.label;" />
- <hbox flex="1">
- <listbox id="abeRulesets-list"
- onselect="abeOpts.selected(this)"
- ondblclick="abeOpts.edit(this)"
- flex="1"
- width="50"
- persist="width"
- style="margin-right: 0"
- >
- <listitem label="SYSTEM" />
- <listitem label="USER" />
- </listbox>
- <splitter style="background: transparent; margin: 0; border-width: 0" />
- <vbox flex="5">
- <deck id="abeRuleset-text-container" flex="5" style="margin-left: 0" />
- <splitter style="background: transparent; margin: 0px; border-width: 0px" class="abe-error-element" />
- <textbox id="abeRuleset-errors" class="noscript-error abe-error-element" style="width: 100%"
- readonly="true" multiline="true" rows="2" hidden="true" value="" />
- </vbox>
- </hbox>
-
- </vbox>
- <hbox align="center">
- <button id="abeRefresh-button" label="&ABE.refresh.label;" accesskey="&ABE.refresh.accesskey;" oncommand="abeOpts.refresh()" />
- <spacer flex="2"/>
- <button id="abeEnable-button" label="&ABE.enable.label;" accesskey="&ABE.enable.accesskey;" oncommand="abeOpts.toggle(true)" />
- <button id="abeDisable-button" label="&ABE.disable.label;" accesskey="&ABE.disable.accesskey;" oncommand="abeOpts.toggle(false)" />
- <spacer flex="3"/>
- <button id="abeReset-button" label="&noscriptReset;" oncommand="abeOpts.reset()" />
- </hbox>
- </vbox>
- </tabpanel><!-- End ABE -->
-
- <tabpanel><!-- ClearClick -->
- <vbox flex="1">
-
- <label class="header" control="cc1" value="&noscriptClearClickOpt;" />
- <vbox id="clearClickOpts">
- <checkbox id="cc1" value="1" label="&noscriptUntrustedPagesAdj;"/>
- <checkbox id="cc2" value="2" label="&noscriptTrustedPagesAdj;"/>
- </vbox>
- </vbox>
-
- </tabpanel><!-- End ClearClick -->
-
- </tabpanels>
-
-
- </tabbox>
- </vbox>
- </tabpanel>
-
- </tabpanels>
- </tabbox>
- </vbox>
-</dialog>
-
diff --git a/extensions/noscript/chrome/content/noscript/noscriptOverlay-noStatusBar.xul b/extensions/noscript/chrome/content/noscript/noscriptOverlay-noStatusBar.xul
deleted file mode 100644
index a2b7df6..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptOverlay-noStatusBar.xul
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE overlay SYSTEM "chrome://noscript/locale/noscript.dtd">
-
-<?xml-stylesheet href="chrome://noscript/skin/browser.css" type="text/css"?>
-
-<overlay id="noscriptOverlay"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/x-javascript" src="noscript.js" />
- <script type="application/x-javascript" src="noscriptOverlay.js"/>
-
- <toolbarpalette id="BrowserToolbarPalette">
- <toolbarbutton id="noscript-tbb"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-no"
- label="NoScript"
- type="menu-button"
- removable="true"
- oncommand="noscriptOverlay.onUICommand(event)"
- oncontextmenu="noscriptOverlay.onContextMenu(event);"
- onmouseover="noscriptOverlay.onUIOver(event)"
- onmousemove="noscriptOverlay.onUIMove(event)"
- onmouseout="noscriptOverlay.onUIOut(event)"
- onmouseup="noscriptOverlay.onUIUp(event)"
- context="noscript-tbb-popup"
- />
-
- <toolbarbutton id="noscript-tbb-temp-page"
- tooltiptext="&noscriptTempAllowPage;"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-temp noscript-allow"
- label="&noscriptTempAllowPage;"
- oncommand="noscriptOverlay.allowPage()"
- />
- <toolbarbutton id="noscript-tbb-revoke-temp"
- tooltiptext="&noscriptRevokeTemp;"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-revoke-temp"
- label="&noscriptRevokeTemp;"
- oncommand="noscriptOverlay.revokeTemp()"
- />
- </toolbarpalette>
-
- <popup id="contentAreaContextMenu">
- <menu id="noscript-context-menu" class="menu-iconic" label="NoScript" >
- <menupopup id="noscript-context-popup" onpopupshowing="noscriptOverlay.onMenuShowing(event, true)">
- <menuseparator class="noscript-sep-insert" hidden="true" />
- <menuseparator class="noscript-sep-stop-untrusted"/>
- <!-- dynamically inserted #noscript-menu-untrusted -->
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
-
- <menuseparator />
- <menuitem id="noscript-options-ctx-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
- <menuitem id="noscript-about-ctx-menuitem"
- label="&noscriptAbout;"
- tooltiptext="&noscriptAbout;"
- oncommand="noscriptUtil.openAboutDialog()"
- class="menuitem-iconic noscript-about"
- />
- </menupopup>
- </menu>
- </popup>
-
- <window id="main-window">
- <popupset id="mainPopupSet"></popupset><!-- SeaMonkey compatibility -->
- </window>
-
-
-
- <popupset id="mainPopupSet">
- <menupopup id="noscript-notify-popup" onpopupshowing="noscriptOverlay.onMenuShowing(event, true)">
- <menuseparator />
- <menuitem
- id="noscript-options-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
- <menuitem id="noscript-mi-opt-notify"
- label="&noscriptNotify;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
- <menuitem id="noscript-mi-opt-notify.bottom"
- label="&noscriptNotify.bottom;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
- <menuitem id="noscript-mi-opt-sound"
- label="&noscriptSound;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
-
- <menuitem id="noscript-mi-invopt-volatilePrivatePermissions"
- label="&noscriptPermanentInPrivate;"
- type="checkbox" autocheck="true"
- oncommand="noscriptOverlay.toggleMenuOpt(this);noscriptOverlay._syncUINow()"
- />
- <menuitem id="noscript-revoke-temp-mi"
- class="menuitem-iconic noscript-revoke-temp"
- label="&noscriptRevokeTemp;" accesskey="&noscriptRevokeTemp.accesskey;"
- oncommand="noscriptOverlay.revokeTemp()"
- />
- <menuitem id="noscript-allow-page-mi"
- class="menuitem-iconic noscript-allow"
- label="&noscriptAllowPage;" noaccesskey="&noscriptAllowPage.accesskey;"
- oncommand="noscriptOverlay.allowPage(true)"
- />
- <menuitem id="noscript-temp-allow-page-mi"
- class="menuitem-iconic noscript-temp noscript-allow"
- label="&noscriptTempAllowPage;" noaccesskey="&noscriptTempAllowPage.accesskey;"
- oncommand="noscriptOverlay.allowPage()"
- />
- <menuitem id="noscript-temp2perm-mi"
- class="menuitem-iconic noscript-allow"
- label="&noscriptTempToPerm;" accesskey="&noscriptTempToPerm.accesskey;"
- oncommand="noscriptOverlay.tempToPerm()"
- />
-
- <menu id="noscript-xss-menu" class="menu-iconic noscript-xss"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptXss;">
- <menupopup id="noscript-xss-menupopup"></menupopup>
- </menu>
-
-
- <menuseparator />
- <menuseparator class="noscript-sep-untrusted"/>
-
- <menu id="noscript-menu-blocked-objects" class="menu-iconic noscript-embed"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptBlockedObjects;">
- <menupopup />
- </menu>
-
- <menu id="noscript-menu-recent-blocked" class="menu-iconic"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptRecentBlocked;">
- <menupopup>
- <menuitem id="noscript-mi-recent-blocked-reset"
- label="&noscriptReset;"
- class="menuitem-iconic"
- accesskey="&noscriptReset.accesskey;"
- oncommand="noscriptOverlay.ns.purgeRecent()"
- />
- </menupopup>
- </menu>
-
- <menu id="noscript-menu-untrusted" class="menu-iconic noscript-untrusted"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptUntrusted;">
- <menupopup />
- </menu>
-
-
- <menuseparator class="noscript-sep-insert"/>
- <menuseparator class="noscript-sep-stop" hidden="true" />
- </menupopup>
-
-
-
- <menupopup id="noscript-xss-popup" onpopupshowing="noscriptOverlay.prepareXssMenu(this)">
- <menuitem id="noscript-mi-xss-console"
- label="&noscriptShowConsole;"
- class="menuitem-iconic noscript-console"
- accesskey="&noscriptShowConsole.accesskey;"
- oncommand="noscriptUtil.openConsole()"
- />
-
- <menuitem id="noscript-mi-xss-unsafe-reload"
- class="menuitem-iconic noscript-unsafe-reload"
- label="&noscriptUnsafeReload;"
- accesskey="&noscriptUnsafeReload.accesskey;"
- oncommand="noscriptOverlay.unsafeReload()"
- />
-
- <menuseparator />
- <menuitem id="noscript-mi-xss-opt-xss.notify"
- label="&noscriptNotifications;"
- type="checkbox" autocheck="true"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- />
-
- <menuitem id="noscript-mi-xss-options"
- label="&noscriptOptions;"
- class="menuitem-iconic noscript-options"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openXssOptions()"
- />
-
- <menuseparator />
- <menuitem id="noscript-mi-xss-faq"
- label="&noscriptXssFaq;"
- class="menuitem-iconic noscript-faq"
- accesskey="&noscriptXssFaq.accesskey;"
- oncommand="noscriptUtil.openFaq('xss')"
- />
- <menuitem id="noscript-abe-opts" class="menuitem-iconic noscript-abe"
- style="display: none !important" />
- </menupopup>
-
-
- <menupopup id="noscript-sticky-ui"
- onpopupshowing="noscriptOverlay.onMenuShowing(event)"
- position="after_end"
- >
-
- <menuseparator class="noscript-sep-insert" hidden="true" />
-
- <menuseparator class="noscript-sep-stop-untrusted"/>
- <!-- dynamically inserted #noscript-menu-untrusted -->
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
- <menuseparator />
- <menuitem id="noscript-options-fn-tbb-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
-
- </menupopup>
-
-
-
- <menupopup id="noscript-status-popup"
- onpopupshowing="noscriptOverlay.onMenuShowing(event)"
- >
- <menuitem
- label="&noscriptAbout;"
- tooltiptext="&noscriptAbout;"
- oncommand="noscriptUtil.openAboutDialog()"
- class="menuitem-iconic noscript-about"
- />
-
- <menuitem
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
-
- <menuseparator class="noscript-sep-global"/>
- <menuitem class="menuitem-iconic" />
-
- <menuseparator class="noscript-sep-untrusted"/>
-
- <menuseparator class="noscript-sep-insert"/>
- <menuseparator class="noscript-sep-stop" hidden="true" />
- </menupopup>
-
-
- </popupset>
-<toolbox id="navigator-toolbox">
-<statusbar id="status-bar">
- <statusbarpanel id="noscript-statusLabel"
- insertbefore="statusbar-updates"
- hidden="true"
- oncontextmenu="noscriptOverlay.onContextMenu(event)"
- onclick="noscriptOverlay.openPopup(this.firstChild, this)"
- >
- <vbox flex="1" align="center" pack="center">
- <label id="noscript-statusLabelValue"/>
- </vbox>
- </statusbarpanel>
-
-
- <statusbarpanel id="noscript-statusIcon"
- insertbefore="statusbar-updates"
- class="statusbarpanel-menu-iconic noscript-no"
- hidden="false"
- oncontextmenu="noscriptOverlay.onContextMenu(event)"
- onmouseup="noscriptOverlay.onUIUp(event)"
- onmouseover="noscriptOverlay.onUIOver(event)"
- onmousemove="noscriptOverlay.onUIMove(event)"
- onmouseout="noscriptOverlay.onUIOut(event)"
- />
-
-
- <statusbarpanel id="noscript-statusXss" insertbefore="statusbar-updates"
- class="statusbarpanel-menu-iconic noscript-xss"
- hidden="true"
- onclick="switch(event.button) { case 1: this.hidden = true; break; case 2: event.preventDefault(); this.firstChild.showPopup(); }"
- >
- <menupopup id="noscript-status-xss-popup" onpopupshowing="noscriptOverlay.prepareXssMenu(this, true)" />
- </statusbarpanel>
-
- <statusbarpanel id="noscript-statusRedirect" insertbefore="statusbar-updates"
- class="statusbarpanel-iconic noscript-redirect"
- hidden="true"
- onclick="if(event.button == 1) this.hidden = true"
- oncommand="noscriptOverlay.followMetaRefresh(event)"
- />
-
-</statusbar>
-</toolbox>
-</overlay>
diff --git a/extensions/noscript/chrome/content/noscript/noscriptOverlay.js b/extensions/noscript/chrome/content/noscript/noscriptOverlay.js
deleted file mode 100644
index 80668f9..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptOverlay.js
+++ /dev/null
@@ -1,2685 +0,0 @@
-window.noscriptOverlay = (function() {
-
-var $ = (id) => document.getElementById(id);
-const Cc = Components.classes;
-const Ci = Components.interfaces;
-function domCleanup() {
- for (let node of document.querySelectorAll(
- `toolbarbutton[id^="noscript-tbb"],
- #mainPopupSet>menupopup[id^="noscript-"],
- #noscript-context-menu,
- #status-bar>[id^="noscript-"]`
- )) {
- node.hidden = true;
- if (node.parentNode) node.parentNode.removeChild(node);
- }
-}
-return {
-
- ns: noscriptUtil.service,
-
- getString: (key, parms) => noscriptUtil.getString(key, parms),
-
- toggleCurrentPage: function(forceLevel) {
- const ns = this.ns;
- var level = ns.getPref("toolbarToggle", 3) || forceLevel;
- if (!level) return false;
-
- const url = ns.getQuickSite(this.currentURL, level);
- if (url)
- this.safeAllow(url, !ns.isJSEnabled(url), ns.getPref("toggle.temp"));
-
- return true;
- },
-
-
- getSites: function() {
- return this.ns.getSites(this.currentBrowser);
- },
-
- openPopup: function(popup, anchor) {
- popup.openPopup(anchor);
- },
- onContextMenu: function(ev) {
- var parent = ev.currentTarget;
- var popup = parent.firstChild;
- if (!(popup && popup.openPopup)) return;
- if (this.stickyUI) {
- popup._context = true;
- }
- ev.preventDefault();
- noscriptOverlay.openPopup(popup, parent);
- },
-
- onMenuShowing: function(ev, noSticky) {
-
- var popup = ev.currentTarget;
-
- if (popup != ev.originalTarget) return;
-
- var stickyUI = this.stickyUI;
-
- if (stickyUI) {
- popup.setAttribute("sticky", !noSticky &&
- (popup == stickyUI ||
- !popup._context && this.useStickyUI));
-
- popup._context = false;
- } else {
- popup.removeAttribute("sticky");
- }
-
- if (!popup.hasAttribute("onclick")) {
- popup.setAttribute("onclick", "noscriptOverlay.onCommandClick(event)");
- }
-
- popup.addEventListener("popuphidden", noscriptOverlay.onMenuHidden, false);
- popup.addEventListener("popupshown", noscriptOverlay.onMenuShown, false);
-
- this.prepareMenu(popup);
- },
-
- onUIOver: function(ev) {
- let parent = ev.currentTarget;
- let popup = parent.firstChild || !this.initPopups() && parent.firstChild;
-
- if (!(popup && popup.openPopup) ||
- ("_hovering" in popup) && popup._hovering ||
- !this.hoverUI)
- return;
-
- if (popup.state !== "open") {
- popup._context = false;
- popup._hovering = 1;
- parent._lastMoved = 0;
- const delayStop = this.ns.getPref("hoverUI.delayStop");
- let delay = Math.max(this.ns.getPref("hoverUI.delayEnter"), delayStop);
- if (delay > 0) {
- window.setTimeout(function() {
- if (!popup._hovering) return;
- if (parent._lastMoved && (Date.now() - parent._lastMoved) > delayStop) {
- noscriptOverlay.openPopup(popup, parent);
- } else if (delayStop > 0) {
- window.setTimeout(arguments.callee, delayStop);
- }
- }, delay);
- } else {
- this.openPopup(popup, parent);
- }
- } else {
- popup._hovering = 2;
- }
- },
-
- onUIMove: function(ev) {
- let parent = ev.currentTarget;
- let rect = parent.getBoundingClientRect();
- let x = ev.clientX, y = ev.clientY;
- parent._lastMoved =
- (x > rect.left + 1 && x < rect.right - 1 &&
- y > rect.top + 1 && y < rect.bottom - 1)
- ? Date.now() : 0;
- },
-
- _uiOutTimeout: 0,
- onUIOut: function(ev) {
- let parent = ev.currentTarget;
- let popup = parent.firstChild;
-
- parent._lastMoved = 0;
-
- if (!("_hovering" in popup && popup._hovering && popup._hovering !== -1))
- return;
-
- let related = ev.relatedTarget;
- if (related) {
- for (let node = related; node; node = node.parentNode)
- if (node == parent) return;
- }
-
- if (this._uiOutTimeout) window.clearTimeout(this._uiOutTimeout);
- this._uiOutTimeout = window.setTimeout(function() {
- if (!popup._hovering) {
- switch(popup.state) {
- case "open":
- case "showing":
- popup.hidePopup();
- if (popup.state !== "closed" &&
- (!("nsIPopupBoxObject" in Ci) ||
- popup.boxObject instanceof Ci.nsIPopupBoxObject))
- popup.boxObject.hidePopup();
- break;
- }
- }
- },
- this.ns.getPref("hoverUI.delayExit" +
- (popup._hovering == 1
- ? "1"
- : "2"
- ), 250)
- );
-
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
- popup._hovering = 0;
- },
-
- onUICommand: function(ev) {
- if (ev.currentTarget !== ev.target) return;
-
- if (!(this.hoverUI && this.ns.getPref("hoverUI.excludeToggling")) &&
- this.toggleCurrentPage())
- ev.preventDefault();
- },
-
- onUIUp: function(ev) {
- let tb = ev.currentTarget;
- if (tb !== ev.target) return;
-
- if (tb.id === "noscript-tbb" &&
- (tb.type !== "menu-button" || ev.originalTarget.tagName == "xul:toolbarbutton") &&
- ev.button === 0 &&
- !(this.hoverUI && this.ns.getPref("hoverUI.excludeToggling")) &&
- this.toggleCurrentPage()
- ) {
- // discriminate dropdown button from main click area
- ev.preventDefault();
- return;
- }
-
- if (ev.button === 1 && this.ns.getPref('middlemouse_temp_allow_main_site')) {
- this.allowPage();
- ev.preventDefault();
- return;
- }
-
- let popup = tb.firstChild || !this.initPopups() && tb.firstChild;
- if ("_hovering" in popup && popup._hovering === 1 || // reopen if still hovering the icon
- this.hoverUI && !this.isOpenOrJustClosed(popup)) {
- popup._hovering = -1;
- if (ev.button !== 2) this.openPopup(popup, tb);
- }
- },
-
-
- onCommandClick: function(ev) {
- if (ev.button === 2) {
- noscriptOverlay.copy(ev.target);
- ev.preventDefault();
- ev.stopPropagation();
- return;
- }
-
- if (!(ev.button === 1 || ev.button === 0 && ev.shiftKey)) return;
-
- if (noscriptUtil.openInfo(ev.target.getAttribute("statustext"))) {
- ev.preventDefault();
- ev.stopPropagation();
- ev.currentTarget.hidePopup();
- }
-
- },
-
- onMenuShown: function(ev) {
- let popup = ev.currentTarget;
- popup.removeEventListener(ev.type, arguments.callee, false);
- if (/^before_/.test(popup.position)) {
- let scroller = popup.ownerDocument.getAnonymousElementByAttribute(popup, "class", "popup-internal-box");
- scroller.scrollPosition = popup.scrollHeight; // scroll to bottom
- }
- },
-
- _reloadDirty: false,
-
- isOpenOrJustClosed: function(popup) {
- return popup.state && popup.state == "open" ||
- this._currentPopup == popup ||
- (new Date() - (popup._lastClosed || 0)) < 300;
- },
-
- onMenuHidden: function(ev) {
- var popup = ev.currentTarget;
- if (ev.originalTarget != popup) return;
-
- popup.removeEventListener(ev.type, arguments.callee, false);
-
- if ("_hovering" in popup && popup._hovering !== 1)
- popup._hovering = 0;
-
- if (noscriptOverlay._reloadDirty && !noscriptOverlay.liveReload) {
- let ns = noscriptOverlay.ns;
- ns.savePrefs();
- ns.reloadWhereNeeded();
- }
-
-
- if (popup.id === "noscript-tbb-popup") {
- // take back our stuff
- noscriptOverlay._currentPopup = null;
- let sites = noscriptOverlay.getSites();
- sites.pluginExtras = sites.pluginSites = [];
- noscriptOverlay.prepareMenu($("noscript-status-popup"), sites);
- }
- popup._lastClosed = Date.now();
- noscriptOverlay._reloadDirty = false;
- noscriptOverlay._currentPopup = null;
- },
-
- prepareContextMenu: function(ev) {
- var menu = $("noscript-context-menu");
- if (this.ns.getPref("ctxMenu", true)) {
- menu.removeAttribute("hidden");
- } else {
- menu.setAttribute("hidden", "true");
- return;
- }
- this.updateStatusClass(menu);
- }
-
-,
- parseMenuOpt: function(node) {
- let opt = node.id.match(/-((?:inv)?opt)-(.*)/);
- return opt && { name: opt[2], inverse: opt[1][0] === 'i'};
- }
-,
- toggleMenuOpt: function(node) {
- var val = node.getAttribute("checked") === "true";
- var opt = this.parseMenuOpt(node);
- if (opt) {
- this.ns.setPref(opt.name, opt.inverse ? !val : val);
- }
- return val;
- }
-,
- prepareOptItems: function(popup) {
- const notifications = this.getNotificationBox();
- const opts = popup.getElementsByAttribute("type", "checkbox");
- for (let j = opts.length; j-- > 0;) {
- let node = opts[j];
- let opt = this.parseMenuOpt(node);
- if (opt) {
- if ((!notifications) && node.id.indexOf("notification") - 1) {
- node.setAttribute("hidden", "true");
- } else {
- let val = this.ns.getPref(opt.name);
- if (opt.inverse) val = !val;
- node.setAttribute("checked", val);
- }
- }
- }
- },
-
-
- prepareXssMenu: function(popup, invert) {
- this.prepareOptItems(this.populateXssMenu(popup, invert));
- },
- populateXssMenu: function(popup, invert) {
- var ref = $("noscript-mi-xss-unsafe-reload");
- var parent = ref.parentNode;
- var inverse = parent.lastChild.id != "noscript-mi-xss-faq";
- invert = inverse && !invert;
- if (parent != popup) {
- while (parent.firstChild) {
- popup.appendChild(invert ? parent.lastChild : parent.firstChild);
- }
- } else if (invert) {
- for (var p, n = parent.lastChild; n; n = p) {
- p = n.previousSibling;
- parent.appendChild(n);
- }
- }
- return popup;
- },
-
-
-
- getSiteTooltip: function(enabled, full) {
- const info = this.getString("siteInfo.tooltip");
- const sep = "\n";
- const no = this.getString("allowed.no");
- const noFull = no + sep + info;
- const yes = this.getString("allowed.yes");
- const yesFull = yes + sep + info;
- return (this.getSiteTooltip = (function(enabled, full) {
- return enabled ? full && yesFull || yes : full && noFull || no;
- }))(enabled, full);
- },
-
- getRevokeTooltip: function(tempSites) {
- const ns = this.ns;
- const sep = "\n\n";
-
- // remove http/https/file CAPS hack entries
- var tip = "<SCRIPT>: ";
- if (tempSites) {
- tempSites = this.ns.siteUtils.sanitizeString(tempSites.replace(/\b(?:https?|file):\/\//g, "")).split(/\s+/);
- tip += tempSites.join(", ");
- } else tip += "0";
-
- var len = ns.objectWhitelistLen;
- if (len) tip += sep + "<OBJECT>: " + len;
-
- len = ns.clearClickHandler && ns.clearClickHandler.whitelistLen;
- if (len) tip += sep + "ClearClick: " + len;
-
- return tip;
- },
-
- isPrivate: function() {
- try {
- // Firefox 20+
- Components.utils.import("resource://gre/modules/PrivateBrowsingUtils.jsm");
- return PrivateBrowsingUtils.isWindowPrivate(window);
-
- } catch(e) {
-
- try {
- return Cc["@mozilla.org/privatebrowsing;1"].
- getService(Ci.nsIPrivateBrowsingService).
- privateBrowsingEnabled;
- } catch(e) {
- Components.utils.reportError(e);
- return false;
- }
- }
-
- },
-
- _popupsInitialized: false,
- _initPopupsRecursion: false,
-
- initPopups: function() {
- if (this._initPopupsRecursion) return;
-
- this._initPopupsRecursion = true;
-
- try {
-
- const sticky = this.stickyUI; // early init
-
- const popup = $("noscript-status-popup");
- if (!popup) return; // Fennec?
-
- const install = !this._popupsInitialized;
- this._popupsInitialized = true;
-
- const tbb = $("noscript-tbb");
- if (tbb) {
- tbb.setAttribute("type", this.hoverUI ? "button" : this.ns.getPref("toolbarToggle") ? "menu-button" : "menu");
- }
-
- const buttons = [tbb, $("noscript-statusLabel")];
-
- let statusIcon = $("noscript-statusIcon");
-
- if ($("addon-bar")) {
- // Fx 4 till Austrails
- if (install && !("CustomizableUI" in window)) {
- window.addEventListener("aftercustomization", function(ev) {
- noscriptOverlay.initPopups();
- }, false);
- }
- if (statusIcon) statusIcon.parentNode.removeChild(statusIcon);
- } else {
- // Fx 3.6.x or below
- if (install) {
- let btcd = window.BrowserToolboxCustomizeDone;
- if (btcd) window.BrowserToolboxCustomizeDone = function(done) {
- btcd(done);
- if (done) noscriptOverlay.initPopups();
- };
- }
-
- buttons.push(statusIcon);
- }
- // copy status bar menus
- for (let button of buttons) {
- if (!button) continue;
- let localPopup = button.firstChild;
- if (!(localPopup && /popup/.test(localPopup.tagName))) {
- localPopup = popup.cloneNode(true);
- localPopup.id = button.id + "-popup";
- button.insertBefore(localPopup, button.firstChild);
- if (!sticky) localPopup._context = true;
- }
- if (!this._mustReverse(localPopup)) {
- localPopup.position = /(?:addon|status)/.test(button.parentNode.id)
- ? "before_start" : "after_start";
- }
- }
- } finally {
- this._initPopupsRecursion = false;
- }
- },
-
- copy: function(node) {
- node = node || document.popupNode;
- var txt = "";
- const classRx = /\bnoscript-(allow|forbid)\b/;
- if (!(classRx.test(node.className) && (txt = node.getAttribute("statustext")))) {
- let parent = node.parentNode;
- let nodes = parent.childNodes;
- let untrusted = $("noscript-menu-untrusted");
- if (untrusted.parentNode === parent) {
- nodes = Array.slice(nodes).concat(Array.slice(untrusted.getElementsByClassName("noscript-allow")));
- }
- let sites = [];
- for (let j = 0, len = nodes.length; j < len; j++) {
- if (classRx.test(nodes[j].className)) {
- let site = nodes[j].getAttribute("statustext");
- if (site && sites.indexOf(site) === -1) {
- sites.push(site);
- }
- }
- }
- const ns = noscriptOverlay.ns;
- txt = sites.map(
- (s) => (ns.isJSEnabled(s) ? "+" : ns.isUntrusted(s) ? "!" : "-") + s
- ).join("\n");
- }
- if (txt) {
- Cc["@mozilla.org/widget/clipboardhelper;1"]
- .getService(Ci.nsIClipboardHelper)
- .copyString(txt);
- }
- },
-
- _currentPopup: null,
- _mustReverse: function(popup) {
- if (popup.id !== "noscript-tbb-popup") return false;
- if (/\bnoscript-(?:about|options)\b/.test(popup.lastChild.className)) {
- // already reversed: we need it straight to populate
- this.reverse(popup);
- }
- let upper;
- try {
- upper = popup.parentNode.boxObject.screenY < screen.availHeight / 2;
- } catch(e) {
- upper = false;
- }
- popup.position = upper ? "after_start" : "before_start";
- return upper;
- },
-
- prepareMenu: function(popup, sites) {
- let mustReverse = this._mustReverse(popup);
-
- const ns = this.ns;
- const sticky = popup.getAttribute("sticky") == "true";
-
- popup.removeAttribute("disabled");
-
- if (!popup.hasAttribute("context")) {
- popup.setAttribute("context", "noscript-menuContext");
- }
-
- if (this._currentPopup && this._currentPopup != popup) {
- this._currentPopup.hidePopup();
- }
- this._currentPopup = popup;
-
-
-
- var node;
-
- const global = ns.jsEnabled;
- const blockUntrusted = global && ns.alwaysBlockUntrustedContent;
- const cascadePermissions = ns.cascadePermissions;
- const globalHttps = ns.globalHttpsWhitelist;
-
- var seps = { insert: null, stop: null, global: null, untrusted: null };
- {
- let allSeps = popup.getElementsByTagName("menuseparator");
- for (let j = allSeps.length; j-- > 0;) {
- let sepName = (node = allSeps[j]).className;
- node.hidden = false;
- for (let k in seps) {
- if (sepName.indexOf("-" + k) > -1) {
- seps[k] = node;
- }
- }
- }
- }
-
- const miGlobal = seps.global.nextSibling;
-
- if (global || ns.getPref("showGlobal")) {
- miGlobal.hidden = seps.global.hidden = false;
- miGlobal.setAttribute("label", this.getString((global ? "forbid" : "allow") + "Global"));
- miGlobal.setAttribute("oncommand", "noscriptOverlay.menuCmd(event)");
- miGlobal.setAttribute("tooltiptext", this.statusIcon.getAttribute("tooltiptext"));
- miGlobal.setAttribute("class", "menuitem-iconic noscript-glb " + (global ? "noscript-forbid" : "noscript-allow"));
- } else {
- miGlobal.hidden = seps.global.hidden = true;
- }
-
- node = popup.getElementsByClassName("noscript-about")[0];
- if (node) node.hidden = !ns.getPref("showAbout");
-
- node = seps.global;
- node.parentNode.insertBefore(
- $("noscript-mi-invopt-volatilePrivatePermissions"), node
- ).hidden = !(this.isPrivate() && ns.getPref("showVolatilePrivatePermissionsToggle"));
-
-
- node = miGlobal.nextSibling;
- const mainMenu = node.parentNode;
- {
- let tempMenuItem = $("noscript-revoke-temp-mi");
- if (node != tempMenuItem) {
- node = mainMenu.insertBefore(tempMenuItem, node);
- }
- let tempSites = ns.gTempSites.sitesString;
- tempSites = tempSites && (tempSites + " " + ns.tempSites.sitesString).replace(/\s+$/g, '') || ns.tempSites.sitesString;
- if ((tempSites || ns.objectWhitelistLen || ns.clearClickHandler && ns.clearClickHandler.whitelistLen) && ns.getPref("showRevokeTemp", true)) {
- node.hidden = seps.global.hidden = false;
- node.setAttribute("tooltiptext", this.getRevokeTooltip(tempSites));
- } else {
- node.hidden = true;
- }
- }
-
- node = node.nextSibling;
- let allowPageMenuItem = $("noscript-temp-allow-page-mi");
- if (node !== allowPageMenuItem) {
- mainMenu.insertBefore(allowPageMenuItem, node)
- } else {
- node = node.nextSibling;
- }
-
- let xssMenu = $("noscript-xss-menu");
-
- if (xssMenu && node != xssMenu) {
- mainMenu.insertBefore(xssMenu, node);
- }
- this.populateXssMenu(xssMenu.firstChild);
- this.syncXssWidget(xssMenu);
-
- this.prepareOptItems(popup);
-
- var untrustedMenu = null,
- recentMenu = null,
- pluginsMenu = null;
-
- if (seps.untrusted) {
-
- pluginsMenu = $("noscript-menu-blocked-objects");
- recentMenu = $("noscript-menu-recent-blocked");
- untrustedMenu = $("noscript-menu-untrusted");
- // cleanup untrustedCount display
- untrustedMenu.setAttribute("label", untrustedMenu.getAttribute("label").replace(/ \(\d+\)$/, ""));
-
- with (seps.untrusted) {
- if ((extraNode = nextSibling) != pluginsMenu) {
- for (node of [pluginsMenu, recentMenu, untrustedMenu]) {
- parentNode.insertBefore(node, extraNode);
- }
- }
- }
-
- this.populateExternalFilters(pluginsMenu);
-
- extraNode = $("noscript-mi-recent-blocked-reset"); // save reset command
- // descend from menus to popups and clear children
- for (node of [pluginsMenu = pluginsMenu.firstChild, recentMenu = recentMenu.firstChild, untrustedMenu = untrustedMenu.firstChild])
- while(node.firstChild) node.removeChild(node.firstChild);
-
- recentMenu.appendChild(extraNode);
- }
-
- node = seps.insert.nextSibling;
-
- var remNode;
- while (node && (node != seps.stop)) {
- remNode = node;
- node = node.nextSibling;
- if (remNode != untrustedMenu && remNode != xssMenu)
- mainMenu.removeChild(remNode);
- }
-
- sites = sites || this.getSites();
- let all = sites.all;
- const topSite = sites.topSite;
- {
- let topIdx = all.indexOf(topSite);
- let topDown = !/-sep-stop\b/.test(mainMenu.lastChild.className);
- if (topIdx > -1 && topIdx != (topDown ? all.length - 1 : 0)) {
- all.splice(topIdx, 1);
- if (topDown) all.push(topSite);
- else all.unshift(topSite);
- }
- }
-
- try {
- this.populatePluginsMenu(mainMenu, pluginsMenu, sites.pluginExtras);
- } catch(e) {
- if(ns.consoleDump) ns.dump("Error populating plugins menu: " + e);
- if (e) Components.utils.reportError(e);
- }
-
- const jsPSs = ns.jsPolicySites;
- var site, enabled, isTop, lev;
-
- var matchingSite;
- var menuGroups, menuSites, menuSite, scount;
- var domain, pos, baseLen;
- var untrusted;
- var cssClass;
-
- const dupeChecker = {
- sites: {},
- check: function(s) { return (s in this.sites) || (this.sites[s] = false); }
- };
-
- const locked = ns.locked;
- const addressOnly = locked;
- const showAddress = addressOnly || ns.getPref("showAddress", false);;
- const showDomain = !addressOnly && ns.getPref("showDomain", false);
- const showBase = !addressOnly && ns.getPref("showBaseDomain", true);
- const showUntrusted = ns.getPref("showUntrusted", true);
- const showDistrust = ns.getPref("showDistrust", true);
- const showNothing = !(showAddress || showDomain || showBase || showUntrusted);
- let isPrivate = this.isPrivate();
- let volatileOnly = isPrivate && ns.getPref("volatilePrivatePermissions");
-
- let showPermanent = ns.getPref("showPermanent", true);
- const showTemp = !locked && (ns.getPref("showTemp", true) || volatileOnly && showPermanent);
- if (volatileOnly) showPermanent = false;
-
- var parent = null, extraNode = null;
- var untrustedCount = 0, unknownCount = 0, tempCount = 0;
- const untrustedSites = ns.untrustedSites;
- var externalJSBlocked = false;
-
- const ignorePorts = ns.ignorePorts;
- const portRx = /:\d+$/;
-
- const hideUntrustedPlaceholder = !ns.showUntrustedPlaceholder;
- var embedOnlySites = null;
- if (ns.contentBlocker && !ns.alwaysShowObjectSources &&
- sites.pluginSites.length) {
- // add untrusted plugin sites if placeholders are not shown for untrusted sources
- embedOnlySites = sites.pluginSites.filter(function(s) {
- return all.indexOf(s) === -1;
- });
- all.push.apply(all, embedOnlySites);
- }
-
- menuGroups = [];
- for (let j = 0; j < all.length; j++) {
- site = all[j];
-
- matchingSite = jsPSs.matches(site);
- untrusted = untrustedSites.matches(site);
- let hasPort = portRx.test(site);
-
- isTop = site == topSite;
-
- if (untrusted) {
- matchingSite = null;
- } else if (!matchingSite) {
-
- if (ignorePorts && hasPort) {
- matchingSite = jsPSs.matches(site.replace(portRx, ''));
- if (matchingSite) {
- site = matchingSite;
- hasPort = false;
- }
- }
-
- if (blockUntrusted)
- matchingSite = site;
- }
-
-
- enabled = !!(matchingSite ||
- globalHttps && ns.isGlobalHttps(content, site) && (matchingSite = site)
- );
-
- let showInMain = embedOnlySites
- ? embedOnlySites.indexOf(site) === -1 || hideUntrustedPlaceholder && enabled : true;
-
- externalJSBlocked = enabled && isTop && (sites.docJSBlocked || sites.cspBlocked);
- if (externalJSBlocked) enabled = false;
-
- if (enabled && !global || (matchingSite = untrusted)) {
- if (ignorePorts && hasPort) {
- site = jsPSs.matches(site.replace(portRx, ''));
- if (site) matchingSite = site;
- }
- if (dupeChecker.check(matchingSite)) continue;
- menuSites = [matchingSite];
-
- } else {
- domain = !ns.isForbiddenByHttpsStatus(site) && ns.getDomain(site);
- let dp = ns.getPublicSuffix(domain);
-
- if (dp == domain || // exclude TLDs
- ns.isJSEnabled(domain) != enabled || // exclude ancestors with different permissions
- hasPort && !ignorePorts // or any ancestor if this is a non-standard port
- ) {
- domain = null;
- }
-
-
- if (hasPort && ignorePorts) {
- site = site.replace(portRx, '');
- if (jsPSs.matches(site))
- continue;
- }
-
- if (dupeChecker.check(site)) continue;
-
- menuSites = (showAddress || showNothing || !domain) ? [site] : [];
-
- if (domain && (showDomain || showBase)) {
- baseLen = domain.length;
- if (dp)
- baseLen -= (domain.lastIndexOf(".", baseLen - dp.length - 2) + 1);
- if (baseLen == domain.length) {
- // IP or 2nd level domain
- if (!dupeChecker.check(domain)) {
- menuSites.push(domain);
- }
- } else {
- dp = domain;
- for (pos = 0; (pos = domain.indexOf('.', pos)) > 0; dp = domain.substring(++pos)) {
- if (baseLen == dp.length) {
- if (menuSites.length > 0 && !showBase) continue;
- } else {
- if (!showDomain) continue;
- }
- if (!dupeChecker.check(dp)) {
- menuSites.push(dp);
- }
- if (baseLen == dp.length) break;
- }
- }
- }
- }
- menuSites.isTop = isTop;
- menuSites.showInMain = showInMain;
- menuSites.enabled = enabled;
- menuGroups.push(menuSites);
- }
-
-
- const untrustedFrag = showUntrusted ? document.createDocumentFragment() : null;
- const mainFrag = document.createDocumentFragment();
- const sep = document.createElement("menuseparator");
-
- let mgCount = menuGroups.length;
-
- var refMI = document.createElement("menuitem");
- refMI.setAttribute("oncommand", "noscriptOverlay.menuCmd(event)");
- if (sticky && (this.liveReload || mgCount > 1 || enabled)) {
- refMI.setAttribute("closemenu", "none");
- }
-
- recentMenu.parentNode.hidden = true;
- if (recentMenu && ns.getPref("showRecentlyBlocked")) {
- let level = ns.getPref("recentlyBlockedLevel") || ns.preferredSiteLevel;
- let max = ns.getPref("recentlyBlockedCount");
- let dejaVu = [],
- count = 0,
- recent = sites.recentlyBlocked,
- current = false;
-
- let tooltip = this.getSiteTooltip(false, !!ns.getPref("siteInfoProvider"));
-
- for (let j = recent.length; j-- > 0;) {
-
- let r = recent[j];
- let s = r.site;
-
- if (!s || all.indexOf(s) > -1) continue;
-
- let ghEnabled = globalHttps && ns.isGlobalHttps(content, s);
- let jsEnabled = ghEnabled || ns.isJSEnabled(s);
-
- if (jsEnabled && (!ns.contentBlocker || ns.isAllowedObject("!", "*", s)))
- continue;
-
- s = ns.getQuickSite(s, level);
- if (dejaVu.indexOf(s) > -1)
- continue;
-
- dejaVu.push(s);
-
- recentMenu.appendChild(sep.cloneNode(false));
-
- let node = refMI.cloneNode(false);
- let cssClass = "noscript-cmd menuitem-iconic noscript-allow-from";
-
- node.setAttribute("tooltiptext", tooltip);
- node.setAttribute("statustext", s);
- if (locked || ns.isForbiddenByHttpsStatus(s)) node.setAttribute("disabled", "true");
-
- if (r.origins.indexOf(topSite) > -1) {
- cssClass += " noscript-toplevel";
- current = true;
- }
-
- if (jsEnabled) {
- cssClass += " noscript-embed";
- } else {
- node.setAttribute("class", cssClass);
- node.setAttribute("label", ns.getString("allowFrom", [s]));
- recentMenu.appendChild(node);
- node = node.cloneNode(false);
- }
-
- node.setAttribute("class", cssClass + " noscript-temp");
- node.setAttribute("label", ns.getString("allowTempFrom", [s]));
- recentMenu.appendChild(node);
-
- if (++count >= max) break;
- }
- if (count) {
- let menuItem = recentMenu.parentNode;
- menuItem.hidden = false;
- ns.dom.toggleClass(menuItem, "noscript-toplevel", current);
- }
- }
-
- if (mgCount > 0 && seps.stop.previousSibling.nodeName != "menuseparator")
- mainFrag.appendChild(sep.cloneNode(false));
-
- const fullTip = !!ns.getPref("siteInfoProvider");
-
- while (mgCount-- > 0) {
-
- menuSites = menuGroups[mgCount];
- isTop = menuSites.isTop;
- enabled = menuSites.enabled;
-
- let showInMain = menuSites.showInMain;
-
- if (untrustedFrag && untrustedFrag.firstChild) {
- untrustedFrag.appendChild(sep.cloneNode(false));
- }
-
- scount = menuSites.length;
- if (scount > 0 && mainFrag.lastChild && mainFrag.lastChild.tagName != "menuseparator")
- mainFrag.appendChild(sep.cloneNode(false));
-
- while (scount-- > 0) {
- menuSite = menuSites[scount];
- let ghEnabled = globalHttps && ns.isGlobalHttps(content, menuSite);
-
- untrusted = !enabled && (blockUntrusted || ns.isUntrusted(menuSite));
-
- let cascaded = cascadePermissions && !isTop;
-
- if (untrusted) {
- untrustedCount++;
- showInMain = true;
- }
- else if (!enabled)
- unknownCount++;
-
- parent = showUntrusted && untrusted ? untrustedFrag : mainFrag;
- if (!parent) continue;
-
- domain = isTop && externalJSBlocked ? "[ " + menuSite + " ]" : menuSite;
-
- node = refMI.cloneNode(false);
- if (isTop) {
- cssClass = "noscript-toplevel noscript-cmd";
- // can we make it default here?
- }
- else cssClass = "noscript-cmd";
-
-
- let blurred = false;
- let disabled = locked || (enabled ? ns.isMandatory(menuSite) : blurred = externalJSBlocked || ns.isForbiddenByHttpsStatus(menuSite));
- if (disabled) {
- node.setAttribute("disabled", "true");
- } else {
- cssClass += " menuitem-iconic ";
- if (enabled && ns.isTemp(menuSite)) {
- cssClass += " noscript-temp";
- tempCount++;
- }
- }
-
-
- node.setAttribute("label", this.getString((enabled ? "forbidLocal" : "allowLocal"), [domain]));
- node.setAttribute("statustext", menuSite);
- node.setAttribute("tooltiptext", this.getSiteTooltip(enabled, fullTip));
-
- node.setAttribute("class", cssClass + (enabled ? " noscript-forbid" : " noscript-allow"));
-
- if ((showPermanent || enabled) && !((global || cascaded || ghEnabled) && enabled) &&
- showInMain && !(cascaded && parent !== untrustedFrag))
- parent.appendChild(node);
-
- if (!disabled) {
- if (showTemp && !(enabled || blurred || cascaded) && showInMain) {
- extraNode = node.cloneNode(false);
- extraNode.setAttribute("label", this.getString("allowTemp", [domain]));
- extraNode.setAttribute("class", cssClass + " noscript-temp noscript-allow");
- parent.appendChild(extraNode);
- }
- if (((showUntrusted && untrustedMenu || showDistrust) &&
- (cascaded || ghEnabled || !(domain in jsPSs.sitesMap)) ||
- blockUntrusted && (showUntrusted || showDistrust)
- ) && !untrusted) {
- parent = (showUntrusted && !blockUntrusted ? untrustedFrag : mainFrag);
-
- extraNode = refMI.cloneNode(false);
- extraNode.setAttribute("label", this.getString("distrust", [menuSite]));
- extraNode.setAttribute("statustext", menuSite);
- extraNode.setAttribute("class", cssClass + " noscript-distrust");
- extraNode.setAttribute("tooltiptext", node.getAttribute("tooltiptext"));
- parent.appendChild(extraNode);
- }
- }
- }
- }
- if (untrustedFrag && untrustedFrag.firstChild) {
- if (untrustedCount > 0)
- with (untrustedMenu.parentNode)
- setAttribute("label", getAttribute("label") +
- " (" + untrustedCount + ")"); // see above for cleanup
-
- untrustedMenu.appendChild(untrustedFrag);
- }
-
- mainMenu.insertBefore(mainFrag, seps.stop);
-
- // temp allow all this page
- if (!(allowPageMenuItem.hidden = !(unknownCount && ns.getPref("showTempAllowPage", true)))) {
- let allowable = this.allowPage(false, true, sites);
- if (allowable.length) allowPageMenuItem.setAttribute("tooltiptext", allowable.join(", "));
- else allowPageMenuItem.hidden = true;
- }
-
-
- // allow all this page
- node = $("noscript-allow-page-mi");
- if (node.nextSibling !== allowPageMenuItem) {
- allowPageMenuItem.parentNode.insertBefore(node, allowPageMenuItem);
- }
- if (!(node.hidden = volatileOnly || unknownCount == 0 || !ns.getPref("showAllowPage", true))) {
- let allowable = this.allowPage(true, true, sites);
- if (allowable.length) node.setAttribute("tooltiptext", allowable.join(", "));
- else node.hidden = true;
- }
-
- // "allow page" accelerators
- {
- let accel = ns.getPref("menuAccelerators");
- for (let el of [node, allowPageMenuItem])
- if (accel)
- el.setAttribute("accesskey", el.getAttribute("noaccesskey"));
- else
- el.removeAttribute("acesskey");
- }
-
- // make permanent
- node = $("noscript-temp2perm-mi");
- if (allowPageMenuItem.nextSibling != node) {
- allowPageMenuItem.parentNode.insertBefore(node, allowPageMenuItem.nextSibling);
- }
- if (!(node.hidden = volatileOnly || tempCount == 0 || !ns.getPref("showTempToPerm"))) {
- node.setAttribute("tooltiptext", this.tempToPerm(true, sites).join(", "));
- }
-
- this.normalizeMenu(untrustedMenu, true);
- this.normalizeMenu(mainMenu, false);
-
- if (mustReverse) this.reverse(popup);
- window.setTimeout(() => site = sites.pluginExtras = sites.pluginSites = null, 0);
- },
-
- reverse: function(m) {
- var a = [];
- var mi;
- while((mi = m.lastChild)) {
- a.push(m.removeChild(mi));
- }
- for (mi of a) {
- m.appendChild(mi);
- }
- },
-
-
-
- populateExternalFilters: function(anchor) {
- const ns = this.ns;
- const externalFilters = ns.externalFilters;
-
- var parent = anchor.parentNode;
- Array.slice(parent.getElementsByClassName("noscript-ef"), 0)
- .forEach(function(node) { parent.removeChild(node); });
-
- if (!(externalFilters.enabled && ns.getPref("showExternalFilters"))) return;
-
- var menus = {};
- var domains = [];
- var filterNames = [];
- var info = externalFilters.getFiltersInfo(content);
- var f, menu, domain, whitelisted, item;
-
- for (var url in info) {
- domain = ns.getBaseDomain(ns.getDomain(url));
- if (domains.indexOf(domain) !== -1) continue;
- domains.push(domain);
-
- f = info[url];
- if (f.name in menus) {
- menu = menus[f.name];
- } else {
- menu = menus[f.name] = { active: false, filter: f, items: [] };
- filterNames.push(f.name);
- }
-
- item = { domain: domain };
-
- whitelisted = f.whitelist && f.whitelist.test("https://" + domain);
-
- item.disabled = whitelisted &&
- !f.isDomainException(domain); // we cannot reliably un-whitelist custom rules
-
- if ((item.active = !whitelisted)) menu.active = true;
-
- menu.items.push(item);
- }
-
- if (!domains.length) return;
-
- filterNames.sort();
-
- var df = document.createDocumentFragment();
- var node;
- for (var filterName of filterNames) {
- menu = menus[filterName];
- menu.items.sort(function(a, b) { return a.domain > b.domain ? 1 : a.domain < b.domain ? -1 : 0; })
- node = df.appendChild(document.createElement("menu"));
- node.setAttribute("label", filterName);
- node.setAttribute("class", "menu-iconic noscript-ef" + (menu.active ? '' : ' inactive'));
-
- parent = node.appendChild(document.createElement("menupopup"));
- parent.__ef__ = menu.filter;
- for (item of menu.items) {
- node = parent.appendChild(document.createElement("menuitem"));
- node.setAttribute("label", ns.getString("ef.activate", [item.domain]));
- node.setAttribute("type", "checkbox");
- node.setAttribute("statustext", item.domain);
- node.setAttribute("oncommand", "noscriptOverlay.onFilterSwitch(event)");
- if (item.active)
- node.setAttribute("checked", "true");
- if (item.disabled)
- node.setAttribute("disabled", "true");
- }
-
- }
-
- anchor.parentNode.insertBefore(df, anchor);
- },
-
- onFilterSwitch: function(ev) {
- const ns = this.ns;
- var node = ev.target;
- var enabled = node.getAttribute("checked") == "true";
- var f = node.parentNode.__ef__;
- if (!f) return;
- var domain = node.getAttribute("statustext");
- ns.switchExternalFilter(f.name, domain, enabled);
- },
-
- onMenuHiddenWithPlugins: function(ev) {
- if (ev.currentTarget != ev.target) return;
- ev.currentTarget.removeEventListener(ev.type, arguments.callee, false);
- noscriptOverlay.menuPluginExtras =
- noscriptOverlay.menuPluginSites = null;
- },
- populatePluginsMenu: function(mainMenu, menu, extras) {
- if (!menu) return;
-
- menu.parentNode.hidden = true;
- const ns = this.ns;
-
- if (!(extras && ns.getPref("showBlockedObjects")))
- return;
-
- var pluginExtras = [],
- seen = [];
- var i = 0;
- for (let egroup of extras) {
- for (let j = egroup.length; j-- > 0;) {
- let e = egroup[j];
-
- if (ns.isAllowedObject(e.url, e.mime, e.site, e.originSite)
- // TODO: e10s removal check
- /*
- && !(e.placeholder && e.placeholder.parentNode) ||
- typeof(e) !== "object" || (e.tag && !e.placeholder)
- */
- )
- continue;
-
- let key = e.mime + "@" + ns.objectKey(e.url, e.originSite);
- if (seen.indexOf(key) > -1) continue;
-
- seen.push(key);
-
- let node = document.createElement("menuitem");
-
- e.label = e.label || ((/<I?FRAME>/.test(e.tag) ? e.tag : ns.mimeEssentials(e.mime)) + "@" + ns.urlEssentials(e.url));
- e.title = e.title || e.label.split("@")[0] + "@" + e.url + "\n(" + e.originSite + ")";
-
- node.setAttribute("label", this.getString("allowTemp", [e.label]));
- node.setAttribute("tooltiptext", e.title);
- node.setAttribute("oncommand", "noscriptOverlay.allowObject(" + i + ")");
- node.setAttribute("class", "menuitem-iconic noscript-cmd noscript-temp noscript-allow");
- node.style.listStyleImage = ns.cssMimeIcon(e.mime, 16);
- menu.appendChild(node);
- pluginExtras[i++] = e;
- }
- }
-
- if (pluginExtras.length) {
- mainMenu.addEventListener("popuphidden", this.onMenuHiddenWithPlugins, false);
- noscriptOverlay.menuPluginExtras = pluginExtras;
- let pluginSites = {};
- seen = [];
- for (let e of pluginExtras) {
- if(!(e.site && e.mime) || ns.isAllowedObject(e.site, e.mime, e.site, e.originSite))
- continue;
-
- let objectKey = ns.objectKey(e.site, e.originSite);
- let key = e.mime + "@" + objectKey;
- if (seen.indexOf(key) !== -1) continue;
-
- if (!(e.site in pluginSites)) {
- pluginSites[e.site] = [{mime: "*", site: e.site}];
- }
-
- if (seen.indexOf(objectKey) === -1) {
- pluginSites[e.site].push({mime: "*", site: e.site, originSite: e.originSite});
- seen.push(objectKey);
- }
-
- pluginSites[e.site].push(e, {mime: e.mime, site: e.site});
- seen.push(key);
- }
- if (seen.length) {
- noscriptOverlay.menuPluginSites = [];
- i = 0;
- for (let site in pluginSites) {
- menu.appendChild(document.createElement("menuseparator"));
- for (let e of pluginSites[site]) {
- let where = e.site;
- if (e.originSite) where += " (" + e.originSite + ")";
- let mime = e.mime;
-
- let node = document.createElement("menuitem");
- node.setAttribute("label", this.getString("allowTemp", [ns.mimeEssentials(mime) + "@" + where]));
- node.setAttribute("tooltiptext", mime + "@" + where);
- node.setAttribute("oncommand", "noscriptOverlay.allowObjectSite(" + i + ")");
- node.setAttribute("class", "menuitem-iconic noscript-temp noscript-cmd noscript-allow");
- if(mime != "*")
- node.style.listStyleImage = node.style.listStyleImage = ns.cssMimeIcon(mime, 16);
-
- menu.appendChild(node);
- noscriptOverlay.menuPluginSites[i++] = e;
- }
- }
- }
- menu.parentNode.hidden = false;
- }
- },
-
- allowPage: function(permanent, justTell, sites) {
- const ns = this.ns;
- sites = sites || this.getSites();
- const unknown = [];
- const level = ns.getPref("allowPageLevel", 0) || ns.preferredSiteLevel;
- const trusted = ns.jsPolicySites;
- const tempToPerm = permanent === -1;
-
- const topSite = sites.topSite;
- const cascade = topSite && ns.cascadePermissions;
- let all = sites.all;
-
- for (let j = all.length; j-- > 0;) {
- let site = all[j];
- if (cascade && topSite !== site) continue;
- if (tempToPerm) {
- site = trusted.matches(site);
- if (!(site && ns.isTemp(site)) || ns.isUntrusted(site)) continue;
- } else {
- site = ns.getQuickSite(site, level);
- if (ns.isJSEnabled(site) || ns.isUntrusted(site)) continue;
- }
- unknown.push(site);
- }
- if (!justTell) {
- if (unknown.length) {
- var browser = this.currentBrowser;
- ns.setExpando(browser, "allowPageURL", this.currentURL);
- this.safeAllow(unknown, true, !permanent);
- }
- }
- return unknown;
- },
-
- tempToPerm: function(justTell, sites) {
- return this.allowPage(-1, justTell, sites);
- },
-
- allowObject: function(i) {
- if(this.menuPluginExtras && this.menuPluginExtras[i]) {
- var e = this.menuPluginExtras[i];
- if (this.ns.confirmEnableObject(window, e)) {
- this.allowObjectURL(e.url, e.mime, e.originSite);
- }
- }
- },
-
- allowObjectSite: function(i) {
- if(this.menuPluginSites && this.menuPluginSites[i]) {
- this.allowObjectURL(this.menuPluginSites[i].site, this.menuPluginSites[i].mime, this.menuPluginSites[i].originSite);
- }
- },
- allowObjectURL: function(url, mime, originSite) {
- this.ns.allowObject(url, mime, originSite);
- this.ns.reloadAllowedObjects(this.currentBrowser, mime);
- },
-
- normalizeMenu: function(menu, hideParentIfEmpty) {
- if (!menu) return;
- var prev = null;
- var wasSep = true;
- var haveMenu = false;
- for (var i = menu.firstChild; i; i = i.nextSibling) {
- if (!i.hidden) {
- let isSep = i.nodeName == "menuseparator";
- if (isSep && wasSep) {
- i.hidden = true;
- } else {
- haveMenu = haveMenu || !isSep;
- prev = i;
- wasSep = isSep;
- }
- }
- }
-
- if (prev && wasSep) {
- prev.hidden = true;
- }
- if (hideParentIfEmpty && menu.parentNode) {
- menu.parentNode.hidden = !haveMenu;
- }
- }
-,
- getBrowserDoc: function(browser) {
- return browser && browser.contentWindow && browser.contentWindow.document || null;
- }
-,
- revokeTemp: function() {
- this.ns.safeCapsOp(function(ns) {
- ns.eraseTemp();
- noscriptOverlay.syncUI();
- }, this.ns.getPref("autoReload.allTabsOnPageAction", true) ? this.ns.RELOAD_ALL : this.ns.RELOAD_CURRENT);
- }
-,
- menuCmd: function(event) {
- if (event.shiftKey) return; // site info
- const ns = this.ns;
- const menuItem = event.target;
- var site = null;
- var reloadPolicy = ns.RELOAD_ALL;
- var cl = menuItem.getAttribute("class") || "";
- var cmd = cl.match(/-(forbid|allow|distrust)\b/);
- if (!(cmd && (cmd = cmd[1]))) return;
- var enabled = cmd == "allow";
- var temp = /-temp\b/.test(cl);
- if (/-glb\b/.test(cl)) {
- // global allow/forbid
- if (enabled && ns.getPref("globalwarning", true) &&
- !Services.prompt.confirm(window, this.getString("global.warning.title"),
- this.getString("global.warning.text"))
- ) return;
- } else {
- // local allow/forbid
- site = menuItem.getAttribute("statustext");
- if (!site) return;
-
- if (cmd == "distrust") {
- ns.setUntrusted(site, true);
- }
-
- if (menuItem.getAttribute("closemenu") === "none") {
- menuItem.removeAttribute("statustext"); // prevent double-firing
- // sticky UI feedback
- if (this._currentPopup) {
- this._currentPopup.setAttribute("disabled", "true");
- }
- this._reloadDirty = true;
- reloadPolicy = this.liveReload ? ns.RELOAD_CURRENT : ns.RELOAD_NO;
- }
-
- if (enabled && /\ballow-from\b/.test(cl)) {
-
- ns.allowObject(site, "*");
- if (ns.isJSEnabled(site)) return;
- reloadPolicy = ns.RELOAD_NO;
- }
-
- }
- this.safeAllow(site, enabled, temp, reloadPolicy);
- },
-
- safeAllow: function(site, enabled, temp, reloadPolicy) {
- let ns = noscriptOverlay.ns;
- let allowTemp = enabled && temp;
- window.clearInterval(noscriptOverlay._savePrefsTimeout);
- let op = ns => {
- if (site) {
- ns.setTemp(site, allowTemp);
- ns.setJSEnabled(site, enabled, false, ns.mustCascadeTrust(site, temp));
- } else {
- ns.jsEnabled = enabled;
- }
- noscriptOverlay._syncUINow();
- };
- if (reloadPolicy === ns.RELOAD_NO) {
- op(ns);
- } else {
- ns.safeCapsOp(op, reloadPolicy, allowTemp);
- }
- },
-
- _savePrefsTimeout: 0,
- savePrefs: function(now) {
- if (now) {
- noscriptOverlay.ns.savePrefs();
- return;
- }
-
- if (this._savePrefsTimeout) {
- window.clearTimeout(this._savePrefsTimeout);
- }
- window.setTimeout(arguments.callee, 5000, true);
- },
-
-
- get statusIcon() {
- var statusIcon = $("noscript-statusIcon") || $("noscript-tbb");
- if (!statusIcon) {
- return this._fakeIcon || (this._fakeIcon = document.createElement("toolbar-button")); // ugly hack for Firefox 57
- }
- delete this.statusIcon;
- return (this.statusIcon = statusIcon);
- },
-
- getIcon: function(node) {
- if (typeof(node) != "object") node = $(node);
- return node.ownerDocument.defaultView.getComputedStyle(node, null)
- .listStyleImage.replace(/.*url\s*\(\s*"?([^"\s\)]*).*/g, '$1');
- },
-
- getStatusClass: function(lev, inactive, currentClass) {
- return "noscript-" + (inactive ? "inactive-" : "") + lev;
- },
- updateStatusClass: function(node, className) {
- if (!className) className = this.statusIcon.className.replace(/.*(\bnoscript-\S*(?:yes|no|glb|prt|emb|yu|untrusted)).*/, "$1");
- node.className = (node.className.replace(/\bnoscript-\S*(?:yes|no|glb|prt|emb|yu|untrusted)\b/g, "") + " " + className).replace(/\s{2,}/g, " ");
- }
-,
- _syncTimeout: 0,
- syncUI(forceReal = false) {
- if (forceReal) { // we entirely skip on startup...
- this.syncUI = this._syncUIReal;
- this.syncUI();
- }
- },
- _syncUIReal: function(browser) {
- if (!browser) browser = this.currentBrowser;
- // ... and cap to 400ms
- if (this._syncTimeout) return;
- this._syncTimeout = window.setTimeout(() => {
- this._syncTimeout = 0;
- if (this.currentBrowser === browser &&
- typeof noscriptOverlay !== "undefined" && this === noscriptOverlay) {
- this._syncUINow();
- }
- }, 400);
- },
-
-
- syncXssWidget: function(widget) {
- if (!widget) widget = $("noscript-statusXss");
- if (!widget) return;
-
- const ns = this.ns;
- var unsafeRequest = ns.requestWatchdog.getUnsafeRequest(this.currentBrowser);
- if (unsafeRequest && !unsafeRequest.issued) {
- widget.removeAttribute("hidden");
- widget.setAttribute("tooltiptext", "XSS [" +
- ns.getSite(unsafeRequest.origin) + "]->[" +
- ns.getSite(unsafeRequest.URI.spec) + "]");
- return;
- }
- widget.setAttribute("hidden", "true");
- },
-
- syncRedirectWidget: function() {
- var widget = $("noscript-statusRedirect");
- if (!widget) return;
- var info = this.getMetaRefreshInfo();
- if (!info) {
- widget.setAttribute("hidden", true);
- return;
- }
- widget.removeAttribute("hidden");
- widget.setAttribute("tooltiptext",
- this.getString("metaRefresh.notify.follow") + " [" + info.uri + "]");
- },
-
- get stickyUI() {
- var ui = $("noscript-sticky-ui");
- if (ui == null) return null;
- delete this.stickyUI;
- if (!ui.openPopup) {
- ui = null;
- } else {
- ui.hidden = false;
- }
- return this.stickyUI = ui;
- },
-
- get useStickyUI() {
- return this.ns.getPref("stickyUI");
- },
-
- hoverUI: true,
-
- showUI: function(toggle) {
- var popup = null;
-
- var useSticky = this.stickyUI && this.ns.getPref("stickyUI.onKeyboard");
-
- popup = (useSticky && (popup = this.stickyUI)) ||
- $("noscript-status-popup");
- if (!this.isOpenOrJustClosed(popup)) {
- popup._context = !useSticky;
- popup.showPopup(null, -1, -1, "context", null, null);
- } else if (toggle) {
- popup.hidePopup();
- }
- }
-
-,
- get notificationPos() {
- return this.notifyBottom ? "bottom" : "top";
- },
- get altNotificationPos() {
- return this.notificationPos == "top" ? "bottom" : "top";
- }
-,
- getNotificationBox: function(pos, browser) {
- // this won't get any notification for Fennec, which is good.
-
- var gb = getBrowser();
-
- if (!(gb && gb.getNotificationBox)) return null; // SeaMonkey, Fennec...
-
- browser = browser || gb.selectedBrowser;
- if (!pos) pos = this.notificationPos;
-
- var nb = gb.getNotificationBox(browser);
-
- if (nb)
- this.patchNotificationBox(nb, pos);
-
- return nb;
- },
-
- patchNotificationBox: function(nb, pos) {
- if (nb._noscriptPatched) return;
-
- nb._noscriptPatched = true;
-
- nb.__defineGetter__("_closedNotification", function() {
- var cn = this.__ns__closedNotification;
- return (cn && cn.parentNode ? cn : null);
- });
-
- nb.__defineSetter__("_closedNotification", function(cn) {
- this.__ns__closedNotification = cn;
- });
-
- nb._dom_ = {};
- const METHODS = this.notificationBoxPatch;
- for (let m in METHODS) {
- nb._dom_[m] = nb[m];
- nb[m] = METHODS[m];
- }
-
- var stacks = nb.getElementsByTagName("stack");
- var stack = null;
- for (var j = stacks.length; j-- > 0;) {
- if (stacks[j].getAttribute("class") == "noscript-bottom-notify") {
- stack = stacks[j];
- break;
- }
- }
- if (!stack) {
- stack = nb.ownerDocument.createElement("stack");
- stack.setAttribute("class", "noscript-bottom-notify");
- nb.appendChild(stack);
- nb.appendChild = function(node) {
- this.__proto__.appendChild.call(this, node);
- this.__proto__.appendChild.call(this, stack);
- }
- nb._showNotification = function(notification, slideIn, skipAnim) {
- if (!slideIn) stack.removeAttribute("height");
- this.__proto__._showNotification.apply(this, arguments);
- }
- }
- nb._noscriptBottomStack_ = stack;
- },
-
- notificationBoxPatch: {
- insertBefore: function(n, ref) {
- if (n.localName == "notification" &&
- n.getAttribute("value") == "noscript"
- && noscriptOverlay.notificationPos == "bottom") {
- const stack = this._noscriptBottomStack_;
-
- stack.insertBefore(n, null);
- var hbox = n.ownerDocument.getAnonymousElementByAttribute(
- n, "class", "notification-inner outset");
- if (hbox) {
- var style = hbox.ownerDocument.defaultView.getComputedStyle(hbox, null);
- var borderProps = ['color', 'style', 'width'];
- var cssProp, jsProp, tmpVal;
- for (var p = borderProps.length; p-- > 0;) {
- cssProp = borderProps[p];
- jsProp = cssProp[0].toUpperCase() + cssProp.substring(1);
- tmpVal = style.getPropertyValue("border-bottom-" + cssProp);
- hbox.style["borderBottom" + jsProp] = style.getPropertyValue("border-top-" + cssProp);
- hbox.style["borderTop" + jsProp] = tmpVal;
- }
- }
- return n;
- }
- if(ref && ref.parentNode != this) {
- var priority = ref.priority;
- ref = null;
- var notifications = this.allNotifications;
- var j = notifications.length;
- while (j-- > 0) {
- if ((ref = notifications[j]).priority < priority && ref.parentNode == this)
- break;
- }
- if(j < 0) ref = null;
- }
- return this._dom_.insertBefore.apply(this, [n, ref]);
- },
- removeChild: function(n) {
- return (n.parentNode == this) ? this._dom_.removeChild.apply(this, arguments) : n.parentNode && n.parentNode.removeChild(n);
- }
- },
-
- getNsNotification: function(widget) {
- if (widget == null) return null;
- if (widget.localName == "notificationbox") return widget.getNotificationWithValue("noscript");
- return this.isNsNotification(widget) && widget || null;
- },
- isNsNotification: function(widget) {
- return widget && widget.getAttribute("value") == "noscript" || widget.popup == "noscript-notify-popup";
- },
-
-
- notificationShow: function(label, icon, canAppend) {
- var box = this.getNotificationBox();
- if (box == null) return false;
-
- var pos = this.notificationPos;
-
- const gb = getBrowser();
- const browser = gb.selectedBrowser;
-
- const popup = "noscript-notify-popup";
-
- var widget = this.getNsNotification(box);
- if (widget) {
- if (widget.localName == "notification") {
- widget.label = label;
- widget.image = icon;
- } else {
- widget.text = label;
- widget.image = icon;
- if (canAppend) widget.removeAttribute("hidden");
- }
-
- } else {
-
- if (!canAppend) return false;
-
- var buttonLabel, buttonAccesskey;
-
- const refWidget = $("noscript-options-menuitem");
- buttonLabel = refWidget.getAttribute("label");
- buttonAccesskey = refWidget.getAttribute("accesskey");
-
- widget = box.appendNotification(label, "noscript", icon, box.PRIORITY_WARNING_MEDIUM,
- [ {label: buttonLabel, accessKey: buttonAccesskey, popup: popup} ]);
- }
- if (!widget) return false;
-
- const delay = this.notifyHide && this.notifyHideDelay || 0;
- if (delay) {
- if (this.notifyHideTimeout) window.clearTimeout(this.notifyHideTimeout);
- this.notifyHideTimeout = window.setTimeout(
- function() {
- if (browser == gb.selectedBrowser) {
- if ($(popup) == noscriptOverlay._currentPopup) {
- noscriptOverlay.notifyHideTimeout = window.setTimeout(arguments.callee, 1000);
- return;
- }
- noscriptOverlay.notificationHide(browser);
- }
- },
- 1000 * delay);
- }
- return true;
- },
-
- getAltNotificationBox: function(browser, value, canAppend) {
-
- const box = (("Browser" in window) && Browser.getNotificationBox)
- ? Browser.getNotificationBox()
- : this.getNotificationBox(this.altNotificationPos, browser);
- if (canAppend || (box &&
- box.getNotificationWithValue &&
- box.getNotificationWithValue(value))) return null;
- return box;
- },
-
- notifyXSSOnLoad: function(requestInfo) {
- requestInfo.browser.addEventListener("DOMContentLoaded", function(ev) {
- requestInfo.browser.removeEventListener(ev.type, arguments.callee, false);
- if (requestInfo.unsafeRequest && requestInfo.unsafeRequest.issued) return;
- noscriptOverlay.notifyXSS(requestInfo);
- }, false);
- },
-
- notifyXSS: function(requestInfo) {
- const notificationValue = "noscript-xss-notification";
- const box = this.getAltNotificationBox(requestInfo.browser, notificationValue);
- if (!box) return;
-
- var origin = this.ns.getSite(requestInfo.unsafeRequest.origin);
- origin = (origin && "[" + origin + "]") || this.getString("untrustedOrigin");
- var label = this.getString("xss.notify.generic", [origin]);
- var icon = this.getIcon("noscript-statusXss");
-
- const refWidget = $("noscript-options-menuitem");
- var buttonLabel = refWidget.getAttribute("label");
- var buttonAccesskey = refWidget.getAttribute("accesskey");
- var popup = $("noscript-xss-popup");
- if ("Browser" in window) popup.className = "noscript-menu";
-
- box.appendNotification(
- label,
- notificationValue,
- icon,
- box.PRIORITY_WARNING_HIGH,
- [{
- label: buttonLabel,
- accessKey: buttonAccesskey,
- popup: popup.id
- }]
- );
- },
-
- notifyMetaRefresh: function(info) {
- var browser = info.browser;
- if (!browser) return;
-
- const notificationValue = "noscript-metaRefresh-notification";
- const box = this.getAltNotificationBox(browser, notificationValue);
- var notification = null;
-
- if (box && this.ns.getPref("forbidMetaRefresh.notify", true)) {
- var urlForLabel = info.uri;
- if (urlForLabel.length > 30) urlForLabel = urlForLabel.substring(0, 30) + "...";
- var label = this.getString("metaRefresh.notify", [urlForLabel, info.timeout])
- var icon = this.getIcon("noscript-statusRedirect");
-
- notification = box.appendNotification(
- label,
- notificationValue,
- icon,
- box.PRIORITY_INFO_HIGH,
- [{
- label: this.getString("metaRefresh.notify.follow"),
- accessKey: this.getString("metaRefresh.notify.follow.accessKey"),
- callback: function(notification, buttonInfo) {
- noscriptOverlay.ns.doFollowMetaRefresh(info);
- }
- }]
- );
-
- browser.addEventListener("beforeunload", function(ev) {
- if (ev.originalTarget === info.document || ev.originalTarget === browser) {
- browser.removeEventListener(ev.type, arguments.callee, false);
- if (notification && notification == box.currentNotification) {
- box.removeCurrentNotification();
- } else {
- noscriptOverlay.ns.doBlockMetaRefresh(info);
- }
- info = browser = null;
- }
- }, false);
- }
-
- this.setMetaRefreshInfo(info, browser);
- },
-
- setMetaRefreshInfo: function(value, browser) {
- return this.ns.setExpando(browser || this.currentBrowser, "metaRefreshInfo", value);
- },
- getMetaRefreshInfo: function(browser) {
- return this.ns.getExpando(browser || this.currentBrowser, "metaRefreshInfo");
- },
- followMetaRefresh: function(event) {
- this.ns.doFollowMetaRefresh(this.getMetaRefreshInfo(), event.shiftKey);
- },
-
- get supportsNotifications() {
- delete this.supportsNotification;
- return this.supportsNotification = !!document.getElementsByTagName("notificationbox").length;
- },
-
- notifyABE: function(info) {
- var browser = info.browser;
-
- const notificationValue = "noscript-abe-notification";
- const box = this.getAltNotificationBox(browser, notificationValue);
-
- var label = this.ns.Strings.wrap(this.getString("ABE.notify", [info.request, info.lastRule.destinations, info.lastPredicate]));
-
- if (!(box && box.appendNotification)) {
- if (!this.supportsNotifications && this.ns.getPref("ABE.legacyPrompt")) {
- let prompter = Services.prompt;
- if (prompter.confirmEx(
- window,
- "NoScript - Application Boundary Enforcer",
- label,
- prompter.BUTTON_POS_0 * prompter.BUTTON_TITLE_IS_STRING |
- prompter.BUTTON_POS_1 * prompter.BUTTON_TITLE_OK,
- this.getString("notify.options").replace(this.getString("notify.accessKey"), "&$&"),
- "", "", null, { value: false }
- ) == 0) noscriptUtil.openABEOptions(info);
- }
- return false;
- }
- var notification = null;
-
-
- var icon = this.getIcon("noscript-abe-opts");
-
- notification = box.appendNotification(
- label,
- notificationValue,
- icon,
- box.PRIORITY_WARNING_HIGH,
- [
- this.fennec
- ? {
- label: this.getString("disable", ["ABE"]),
- accessKey: this.getString("disable.accessKey"),
- callback: function(notification, buttonInfo) {
- noscriptOverlay.ns.setPref("ABE.enabled", false);
- }
- }
- : {
- label: this.getString("notify.options"),
- accessKey: this.getString("notify.accessKey"),
- callback: function(notification, buttonInfo) {
- noscriptUtil.openABEOptions(info);
- }
- }]
- );
- browser.addEventListener("beforeunload", function(ev) {
- if (ev.originalTarget == info.document || ev.originalTarget == browser) {
- browser.removeEventListener(ev.type, arguments.callee, false);
- if (notification && notification == box.currentNotification) {
- box.removeCurrentNotification();
- }
- info = browser = notification = null;
- }
- }, false);
-
- return true;
- },
-
-
- unsafeReload: function() {
- const browser = this.currentBrowser;
- const ns = this.ns;
- const rw = ns.requestWatchdog;
- let unsafeRequest = rw.getUnsafeRequest(browser);
- let removeNotification = () => getBrowser().getNotificationBox(browser).removeAllNotifications(true);
- if (!unsafeRequest) {
- removeNotification();
- return;
- }
-
- let method = (unsafeRequest.postData ? "POST" : "GET");
- var msg = noscriptUtil.getString("unsafeReload.warning",
- [ method,
- ns.siteUtils.crop(unsafeRequest.URI.spec),
- ns.siteUtils.crop(unsafeRequest.origin || unsafeRequest.referrer && unsafeRequest.referrer.spec || '?')
- ]);
- msg += noscriptUtil.getString("confirm");
- if (noscriptUtil.confirm(msg, "confirmUnsafeReload")) {
- try {
- getBrowser().getNotificationBox(browser).removeAllNotifications(true);
- } catch(e) {}
- rw.unsafeReload(browser, true);
- }
- },
-
- notificationHide: function(browser) { // Modified by Higmmer
- var box = this.getNotificationBox(null, browser);
- var widget = this.getNsNotification(box); // Modified by Higmmer
- if (widget) {
- if (box._timer) clearTimeout(box._timer);
- widget.parentNode.removeAttribute("height");
- if (widget.close) {
- if (box.currentNotification == widget) {
- box.currentNotification = null;
- }
- widget.close();
- box.style.width = "";
- window.setTimeout(function() {
- box.style.width = "100%"
- window.setTimeout(function() {
- box.style.width = "";
- }, 10);
- }, 10);
- } else {
- widget.setAttribute("hidden", "true");
- }
- return true;
- }
- return false;
- },
-
- get _oldStylePartial() {
- delete this._oldStylePartial;
- return this._oldStylePartial = this.ns.getPref("oldStylePartial", false);
- },
-
- _syncUINow: function() {
-
- if (this._syncTimeout) {
- window.clearTimeout(this._syncTimeout);
- this._syncTimeout = 0;
- }
-
- const ns = this.ns;
- const global = ns.jsEnabled;
- const cascadePermissions = ns.cascadePermissions;
- const globalHttps = ns.globalHttpsWhitelist;
- const jsPSs = ns.jsPolicySites;
- const untrustedSites = ns.untrustedSites;
-
-
- this.syncRedirectWidget();
-
- const sites = this.getSites();
-
- const oldStylePartial = this._oldStylePartial;
-
- if (this._currentPopup && this._currentPopup.getAttribute("sticky") == "true" && this._currentPopup.state == "open") {
- this.prepareMenu(this._currentPopup, sites);
- }
-
- var lev;
- var totalScripts = sites.scriptCount;
- var totalPlugins = sites.pluginCount;
- var totalAnnoyances = totalScripts + totalPlugins;
- var notificationNeeded = false;
-
- var allowedSites = [];
- var activeSites = sites.pluginSites.concat(sites.docSites);
- var allowed = 0;
- var untrusted = 0;
- var active = 0;
- var blockedObjects = 0;
- var total = 0;
-
- var topTrusted = false;
- var topUntrusted = false;
-
- let win = content;
-
- if (global && !ns.alwaysBlockUntrustedContent) {
- lev = "glb";
- } else {
-
- let pes = sites.pluginExtras;
- if (pes) {
- for (let j = pes.length; j-- > 0;) {
- let pe = pes[j];
- for (let k = pe.length; k-- > 0;) {
- let e = pe[k];
-
- if (e &&
- // TODO: e10s removal check
- /*
- (e.placeholder && (e.placeholder.parentNode || !ns.isAllowedObject(e.url, e.mime, e.site, e.originSite))
- || e.document)
- */
- !ns.isAllowedObject(e.url, e.mime, e.site, e.originSite)
- ) blockedObjects++;
- }
- }
- }
- let all = sites.all;
- let s = all.length;
- total = s + blockedObjects;
- while (s-- > 0) {
- let url = all[s];
- let isUntrusted = untrustedSites.matches(url);
- let site = !isUntrusted && (global || globalHttps && ns.isGlobalHttps(win, url) ? url : jsPSs.matches(url));
-
- if (url == sites.topSite) {
- if (site && (!ns.httpStarted || !(sites.docJSBlocked || sites.cspBlocked))) topTrusted = true;
- else {
- site = null;
- if (isUntrusted) topUntrusted = true;
- }
- }
-
- if (site) {
- if (oldStylePartial || activeSites.indexOf(url) > -1) active++;
- if (ns.isMandatory(site) || allowedSites.indexOf(site) > -1) {
- total--;
- } else {
- allowedSites.push(site);
- }
- } else {
- if (isUntrusted) untrusted++;
- else if(!notificationNeeded && url != "about:blank") {
- notificationNeeded = true;
- }
- }
- }
-
- if (!untrusted && sites.pluginSites.some(untrustedSites.matches, untrustedSites)) {
- untrusted = 1;
- }
-
- allowed = allowedSites.length;
- lev = (allowed === total && all.length > 0 && !untrusted) ? (global ? "glb" : "yes")
- : (allowed === 0 || active === 0) ? (global
- ? "untrusted-glb" :
- topUntrusted
- ? "untrusted" :
- blockedObjects ? "no-emb" : "no")
- : (untrusted > 0 && !notificationNeeded
- ? (blockedObjects ? (global ? "glb-emb" : "yu-emb") : global ? "yu-glb" : "yu")
- : topTrusted
- ? allowed === total - blockedObjects
- ? (global ? "glb-emb" : "emb")
- : (cascadePermissions ? "yes" : "prt")
- : cascadePermissions || ns.restrictSubdocScripting
- ? "no"
- : "subprt"
- );
- notificationNeeded = notificationNeeded &&
- (totalAnnoyances > 0 &&
- (!cascadePermissions || !topTrusted || blockedObjects)
- );
- }
-
- let message = this.getString(
- "allowed." +
- (lev == "yu" || lev == "subprt" || lev == "emb" || lev == "yu-emb"
- ? "prt"
- : (lev == "untrusted" || lev == "no-emb") ? "no" : lev)
- );
-
- let shortMessage = message.replace("JavaScript", "JS");
-
- if (notificationNeeded && active)
- message += ", " + allowed + "/" + total + " (" + allowedSites.join(", ") + ")";
-
- let countsMessage = " | <SCRIPT>: " + totalScripts + " | <OBJECT>: " + totalPlugins;
- message += countsMessage;
- shortMessage += countsMessage;
-
-
- const className = this.getStatusClass(lev, !(totalScripts || topUntrusted) /* inactive */ );
- let widget = this.statusIcon;
- const hoverUI = this.hoverUI;
- for (let wg = widget; wg;) {
- if (hoverUI) wg.removeAttribute("tooltiptext");
- else wg.setAttribute("tooltiptext", shortMessage);
- this.updateStatusClass(wg, className);
-
- if (wg.id === "noscript-tbb") break;
- wg = $("noscript-tbb");
- }
-
- if (notificationNeeded) { // notifications
-
- if (this.notify) {
- this.notificationShow(message,
- this.getIcon(widget),
- !(ns.getExpando(win, "messageShown") && this.notifyHidePermanent));
- ns.setExpando(win, "messageShown", true);
- } else {
- this.notificationHide();
- }
- if (!ns.getExpando(this.currentBrowser, "soundPlayed")) {
- ns.soundNotify(this.currentURL);
- ns.setExpando(this.currentBrowser, "soundPlayed");
- }
- } else {
- this.notificationHide();
- message = shortMessage = "";
- }
-
- widget = $("noscript-statusLabelValue");
- if (widget) {
- widget.setAttribute("value", shortMessage);
- widget.parentNode.style.display = message ? "" : "none";
- }
-
- widget = $("noscript-tbb-revoke-temp");
- if (widget) {
- if (ns.gTempSites.sitesString || ns.tempSites.sitesString || ns.objectWhitelistLen || ns.clearClickHandler && ns.clearClickHandler.whitelistLen) {
- widget.removeAttribute("disabled");
- } else {
- widget.setAttribute("disabled", "true");
- }
- }
-
- widget = $("noscript-tbb-temp-page");
- if (widget) {
- if (allowed < total) {
- widget.removeAttribute("disabled");
- } else {
- widget.setAttribute("disabled", "true");
- }
- }
- }
-,
- notifyHideTimeout: 0,
- liveReload: false,
-
- initContentWindow: function(window) {
- window.addEventListener("pagehide", this.listeners.onPageHide, true);
- },
-
- presetChanged: function(menulist) {
- this.ns.applyPreset(menulist.selectedItem.value);
- },
-
- install: function() {
- // this.ns.dump("*** OVERLAY INSTALL ***\n");
- this.ns.setPref("badInstall", false);
- window.addEventListener("load", this.listeners.onLoad, false);
- },
-
- dispose: function() {
- for (var bb = this.browsers, j = bb.length; j-- > 0;) if (bb[j]) {
- this.ns.cleanupBrowser(bb[j]);
- }
- },
-
- observer: {
- ns: noscriptUtil.service,
- QueryInterface: XPCOMUtils.generateQI([
- Ci.nsIObserver,
- Ci.nsISupportsWeakReference])
- ,
- observe: function(subject, topic, data) {
- if (subject == this.ns.caps) {
- noscriptOverlay.syncUI();
- return;
- }
-
- switch(topic) {
- case "noscript:sync-ui":
- noscriptOverlay.syncUI(subject);
- return;
- case "browser:purge-session-history":
- noscriptOverlay.ns.purgeRecent();
- return;
- }
-
- // prefs
-
- switch (data) {
- case "preset":
- if (data == "off") noscriptOverlay.statusIcon.setAttribute("hidden", "true");
- else noscriptOverlay.statusIcon.removeAttribute("hidden");
- noscriptOverlay.syncUI();
- break;
- case "statusIcon": case "statusLabel" :
- window.setTimeout(function() {
- var widget =$("noscript-" + data);
- if (widget) {
- widget.setAttribute("hidden", !noscriptOverlay.ns.getPref(data))
- }
- }, 0);
- break;
-
- case "notify":
- case "notify.bottom":
- noscriptOverlay[data.replace(/\.b/, 'B')] = this.ns.getPref(data);
- if (this._registered) noscriptOverlay.notificationHide();
- break;
-
- case "keys.ui":
- case "keys.toggle":
- case "keys.tempAllowPage":
- case "keys.revokeTemp":
- noscriptOverlay.shortcutKeys.setup(data.replace(/^keys\./, ""), this.ns.getPref(data, ""));
- break;
-
- case "notify.hidePermanent":
- case "notify.hideDelay":
- case "notify.hide":
- noscriptOverlay[data.replace(/\.h/, 'H')] = this.ns.getPref(data);
- break;
-
- case "stickyUI.liveReload":
- noscriptOverlay.liveReload = this.ns.getPref(data);
- break;
-
- case "hoverUI":
- case "toolbarToggle":
- noscriptOverlay[data] = this.ns.getPref(data);
- noscriptOverlay.initPopups();
-
- break;
-
- }
- },
- _registered: false,
- _topics: ["noscript:sync-ui", "browser:purge-session-history"],
- register: function() {
- const ns = this.ns;
- const os = ns.os;
- for (let t of this._topics){
- os.addObserver(this, t, true);
- }
- ns.prefs.addObserver("", this, true);
- ns.caps.addObserver("", this, true);
- const initPrefs = [
- "statusIcon", "statusLabel", "preset",
- "keys.ui", "keys.toggle", "keys.tempAllowPage", "keys.revokeTemp",
- "notify", "notify.bottom",
- "notify.hide", "notify.hidePermanent", "notify.hideDelay",
- "stickyUI.liveReload",
- "hoverUI"
- ];
- for (let p of initPrefs) {
- this.observe(null, null, p);
- }
- this._registered = true;
- },
- remove: function() {
- const ns = this.ns;
- const os = ns.os;
- for (let t of this._topics){
- try {
- os.removeObserver(this, t);
- } catch (e) {}
- }
- try {
- ns.prefs.removeObserver("", this);
- } catch (e) {}
- try {
- ns.caps.removeObserver("", this);
- } catch (e) {}
- }
- },
-
-
-
-
-
- shortcutKeys: {
-
- execute: function(cmd, ev) {
- switch (cmd) {
- case 'toggle':
- noscriptOverlay.toggleCurrentPage(noscriptOverlay.ns.preferredSiteLevel);
- break;
- case 'tempAllowPage':
- noscriptOverlay.allowPage();
- break;
- case 'revokeTemp':
- noscriptOverlay.revokeTemp();
- break;
- case 'ui':
- noscriptOverlay.showUI(true);
- break;
- }
- },
-
- keys: {},
- setup: function(name, values) {
- values = values.toLowerCase().replace(/^\s*(.*?)\s*$/g, "$1").split(/\s+/);
- var vpos = values.length;
- if (vpos) {
-
- var mods = { shiftKey: false, altKey: false, metaKey: false, ctrlKey: false };
-
- var keyVal = values[--vpos];
- for (var value; vpos-- > 0;) {
- value = values[vpos] + "Key";
- if (value in mods) {
- mods[value] = true;
- }
- }
-
- var key = { modifiers: mods, charCode: 0, keyCode: 0 };
-
- if (keyVal.length > 3) {
- var pos = keyVal.indexOf('.');
- if (pos > 3) {
- key.charCode = keyVal.charCodeAt(pos + 1) || 0;
- keyVal = keyVal.substring(0, pos);
- }
- key.keyCode = KeyEvent["DOM_" + keyVal.toUpperCase()] || 0;
- } else {
- key.charCode = (key.modifiers.shiftKey ? keyVal.toUpperCase() : keyVal).charCodeAt(0) || 0;
- }
-
- this.keys[name] = key;
- } else {
- delete(this.keys[name]);
- }
- },
-
- listener: function(ev) {
- const binding = arguments.callee.binding;
- const skk = binding.keys;
- var cmd, k, p, sk, mods;
- for (k in skk) {
- cmd = k;
- sk = skk[k];
- var which = ev.which;
-
- if (ev.charCode && ev.charCode == sk.charCode || ev.keyCode && ev.keyCode == sk.keyCode) {
- mods = sk.modifiers;
- for (p in mods) {
- if (ev[p] != mods[p]) {
- cmd = null;
- break;
- }
- }
-
-
- if (cmd) {
- ev.preventDefault();
- binding.execute(cmd, ev);
- return;
- }
- }
- }
- },
-
-
-
- register: function() {
- this.listener.binding = this;
- window.addEventListener("keypress", this.listener, true);
- },
- remove: function() {
- window.removeEventListener("keypress", this.listener, true);
- }
- },
-
- listeners: {
-
- onTabClose: function(ev) {
- try {
- var browser = ev.target.linkedBrowser;
- noscriptOverlay.ns.cleanupBrowser(browser);
-
- var tabbrowser = getBrowser();
- if (tabbrowser._browsers) tabbrowser._browsers = null;
- if (tabbrowser.getNotificationBox) {
- tabbrowser.getNotificationBox(browser).removeAllNotifications(true);
- }
- } catch(e) {}
- },
-
- webProgressListener: {
- QueryInterface: XPCOMUtils.generateQI([Ci.nsIWebProgressListener]),
- STATE_STOP: Ci.nsIWebProgressListener.STATE_STOP,
- onLocationChange: function(aWebProgress, aRequest, aLocation) {
- noscriptOverlay.syncUI();
- },
- onStatusChange: function() {},
- onStateChange: function(aWebProgress, aRequest, stateFlags, status) {
- if (aWebProgress.isTopLevel && stateFlags & this.STATE_STOP) {
- noscriptOverlay.syncUI();
- }
- },
- onSecurityChange: function() {},
- onProgressChange: function() {}
- },
-
- onMainContextMenu: function(ev) { noscriptOverlay.prepareContextMenu(ev) },
-
- _loaded: false,
- onLoad: function(ev) {
- if (this._loaded) return;
- this._loaded = true;
- let winType = document.documentElement.getAttribute("windowtype");
- if (winType !== "navigator:browser") noscriptOverlay.ns.dom.browserWinType = winType;
-
- window.removeEventListener("load", noscriptOverlay.listeners.onLoad, false);
- window.addEventListener("unload", noscriptOverlay.listeners.onUnload, false);
-
- try {
- noscriptOverlay.listeners.setup();
- noscriptOverlay.wrapBrowserAccess();
- let hacks = noscriptOverlay.Hacks;
- hacks.torButton();
- hacks.allowLocalLinks();
- setTimeout(() => {
- noscriptOverlay.syncUI(true); // force real syncUI to start working
- setTimeout(() => {
- hacks.pdfDownload();
- Services.scriptloader.loadSubScript("chrome://noscript/content/noscriptBM.js");
- noscriptBM.init();
- }, 1400);
- }, 100);
-
- noscriptOverlay.ns.clearClickHandler.chromeInstall(window);
- } catch(e) {
- let msg = "[NoScript] Error initializing new window " + e + "\n" + e.stack;
- noscriptOverlay.ns.dump(msg);
- }
-
- },
- onUnload: function() {
- noscriptOverlay.ns.dump(`Unloading from ${window.location}`);
- window.removeEventListener("unload", noscriptOverlay.listeners.onUnload, false);
- noscriptOverlay.ns.clearClickHandler.chromeUninstall(window);
- noscriptOverlay.listeners.teardown();
- let openURI = noscriptOverlay.browserAccess._originalOpenURI;
- if (openURI && window.browserDOMWindow) {
- browserDOMWindow.wrappedJSObject.openURI = openURI;
- }
- noscriptOverlay.dispose();
- if (window.noscriptBM) window.noscriptBM.dispose();
- domCleanup();
- delete window.noscriptOverlay;
- delete window.noscriptUtil;
- },
-
- onAddonOptionsLoad: function(ev) {
- var presetUI = $("noscript-preset-menu");
- if (presetUI) {
- const ns = noscriptOverlay.ns;
- const preset = ns.getPref("preset");
- var mi;
- try {
- for (var j = presetUI.itemCount; j-- > 0;) {
- mi = presetUI.getItemAtIndex(j);
- if (mi && mi.getAttribute("value") == preset) {
- presetUI.selectedIndex = j;
- break;
- }
- }
- } catch(e) { ns.log(e) }
- }
- },
-
- onActivation: function() {
- noscriptOverlay.syncUI();
- },
-
- customizableUIListener: {
- onWidgetAfterDOMChange: function(aWidget) {
- for (let b of ['noscript-tbb', 'noscript-statusLabel']) {
- if(b == aWidget.id) {
- window.setTimeout(function() { noscriptOverlay.initPopups(); }, 0);
- return;
- }
- }
- }
- },
-
- setup: function(delayed) {
- var b = getBrowser();
- if (!b) {
- setTimeout(() => noscriptOverlay.listeners.setup(true), 100);
- return;
- }
- var tabs = $("tabs") || b.tabContainer;
- if (tabs) {
- tabs.addEventListener("TabClose", this.onTabClose, false);
- }
-
- let context = $("contentAreaContextMenu");
- if (!context) return; // not a browser window?
-
- context.addEventListener("popupshowing", this.onMainContextMenu, false);
-
- b.addProgressListener(this.webProgressListener);
-
- noscriptOverlay.shortcutKeys.register();
- noscriptOverlay.observer.register();
-
- if ("CustomizableUI" in window) {
- CustomizableUI.addListener(this.customizableUIListener);
- }
-
- },
-
-
-
- teardown: function() {
-
- if (window.CustomizableUI) {
- CustomizableUI.removeListener(this.customizableUIListener);
- }
-
- var b = getBrowser();
- if (b) {
- b.removeEventListener("click", this.onBrowserClick, true);
- if (b.tabContainer) {
- b.tabContainer.removeEventListener("TabClose", this.onTabClose, false);
- }
-
- b.removeProgressListener(this.webProgressListener);
- }
-
- window.removeEventListener("pagehide", this.onPageHide, true);
- window.removeEventListener("pageshow", this.onPageShow, true);
-
- noscriptOverlay.observer.remove();
- noscriptOverlay.shortcutKeys.remove();
-
- $("contentAreaContextMenu").removeEventListener("popupshowing", this.onMainContextMenu, false);
-
- }
-
- }, // END listeners
-
-
- get _browserReady() {
- return ("gBrowser" in window) && window.gBrowser ||
- ("Browser" in window) && window.Browser &&
- (("browsers" in Browser) || Browser._canvasBrowser || Browser._content);
- },
- get currentBrowser() {
- if (!this._browserReady) return null;
- delete this.currentBrowser;
- this.__defineGetter__("currentBrowser",
- window.gBrowser && function() { return gBrowser.selectedBrowser; }
- || Browser.selectedBrowser && function() { return Browser.selectedBrowser; }
- || Browser.currentBrowser && function() { return Browser.currentBrowser; }
- );
- return this.currentBrowser;
- },
-
- get currentURI() {
- return this.currentBrowser.currentURI;
- },
- get currentURL() {
- let uri = this.currentURI;
- return uri && uri.spec || "";
- },
- get fennec() {
- if (!this._browserReady) return false;
- delete this.fennec;
- return this.fennec = "Browser" in window;
- },
-
- get browsers() {
- if (!this._browserReady) return [];
- delete this.browsers;
- var browsersContainer = window.Browser // Fennec
- ? ("browsers" in Browser) && Browser || Browser._canvasBrowser || Browser._content
- : window.gBrowser; // desktop Firefox
-
- this.__defineGetter__("browsers", function() { return browsersContainer.browsers; });
-
- if ("Browser" in window && window.Browser._content) { // Fennec Alpha 1
- getBrowserForDisplay = function() { Browser._content.getBrowserForDisplay.apply(Browser._content, arguments); };
- }
- return this.browsers;
- },
-
- isBrowserEnabled: function(browser) {
- browser = browser || this.currentBrowser;
- return browser.docShell ? browser.docShell.allowJavascript : !this.getSites(browser).docJSBlocked;
- },
-
-
- wrapBrowserAccess: function(retryCount) { // called onload
- if (!window.nsBrowserAccess) {
- noscriptOverlay.ns.log("[NoScript] nsBrowserAccess not found?!");
- return;
- }
-
- if (!nsBrowserAccess.prototype.wrappedJSObject) {
- nsBrowserAccess.prototype.__defineGetter__("wrappedJSObject", noscriptOverlay.browserAccess.self);
- }
-
- if (!(window.browserDOMWindow && browserDOMWindow.wrappedJSObject && (browserDOMWindow.wrappedJSObject instanceof nsBrowserAccess))) {
- if (!retryCount) {
- retryCount = 0;
- } else if (retryCount >= 10) {
- noscriptOverlay.ns.log("[NoScript] browserDOMWindow not found in 10 attempts, giving up.");
- return;
- }
- window.setTimeout(noscriptOverlay.wrapBrowserAccess, 0, ++retryCount);
- return;
- }
- noscriptOverlay.browserAccess._originalOpenURI = browserDOMWindow.wrappedJSObject.openURI;
- browserDOMWindow.wrappedJSObject.openURI = noscriptOverlay.browserAccess.openURI;
-
- if(noscriptOverlay.ns.consoleDump)
- noscriptOverlay.ns.dump("browserDOMWindow wrapped for external load interception");
- },
-
- browserAccess: {
- self: function() { return this; },
- openURI: function(aURI, aOpener, aWhere, aContext) {
- const ns = noscriptUtil.service;
-
- var external = aContext == Ci.nsIBrowserDOMWindow.OPEN_EXTERNAL && aURI;
- if (external) {
- if (aURI.schemeIs("http") || aURI.schemeIs("https")) {
- // remember for filter processing
- ns.requestWatchdog.externalLoad = aURI.spec;
- } else {
- // don't let the external protocol open dangerous URIs
- if (aURI.schemeIs("javascript") || aURI.schemeIs("data")) {
- var err = "[NoScript] external non-http load blocked: " + aURI.spec;
- ns.log(err);
- throw err;
- }
- }
- }
-
- if (aURI && ns.extraCapturedProtocols && ns.extraCapturedProtocols.indexOf(aURI.scheme) > -1) {
- return aOpener || content;
- }
-
- var w = null;
- try {
- w = nsBrowserAccess.prototype.openURI.apply(this, arguments);
- if (external && ns.consoleDump) ns.dump("[NoScript] external load intercepted");
- } finally {
- if (external && !w) ns.requestWatchdog.externalLoad = null;
- }
- return w;
- }
- },
-
- Hacks: {
- allowLocalLinks: function() {
- let ns = noscriptOverlay.ns;
- if (ns.geckoVersionCheck("30") >= 0) return;
-
- if ("urlSecurityCheck" in window) {
- let usc = window.urlSecurityCheck;
- window.urlSecurityCheck = function(aURL, aPrincipal, aFlags) {
- if (!ns.checkLocalLink(aURL, aPrincipal)) {
- usc.apply(this, arguments);
- }
- }
- }
- if ("handleLinkClick" in window) {
- let hlc = window.handleLinkClick;
- window.handleLinkClick = function(ev, href, linkNode) {
- let ret = hlc.apply(this, arguments);
- if (!ret && ns.checkLocalLink(linkNode.href, linkNode.nodePrincipal)) {
- try {
- let w = ev.view.open("about:blank", linkNode.target || "_self");
- w.location.href = linkNode.href;
- ev.preventDefault();
- ret = true;
- } catch (e) {
- ret = false;
- }
- }
- return ret;
- }
- }
- },
- pdfDownload: function() {
- if (typeof(mouseClick) != "function") return;
- var tb = getBrowser();
- tb.removeEventListener("click", mouseClick, true);
- tb.addEventListener("click", mouseClick, false);
- },
-
- torButton: function() {
- if ("torbutton_update_tags" in window && typeof(window.torbutton_update_tags) == "function") {
- // we make TorButton aware that we could have a part in suppressing JavaScript on the browser
- noscriptOverlay.ns.log("TB: " + window.torbutton_update_tags);
- window.eval(
- window.torbutton_update_tags.toSource().replace(/\bgetBoolPref\("javascript\.enabled"\)/g,
- "$& && (!noscriptOverlay || noscriptOverlay.isBrowserEnabled(browser))"));
- noscriptOverlay.ns.log("Patched TB: " + window.torbutton_update_tags);
- }
- }
- },
-}
-})()
-
-noscriptOverlay.install();
-
diff --git a/extensions/noscript/chrome/content/noscript/noscriptOverlay.xul b/extensions/noscript/chrome/content/noscript/noscriptOverlay.xul
deleted file mode 100644
index ab5541e..0000000
--- a/extensions/noscript/chrome/content/noscript/noscriptOverlay.xul
+++ /dev/null
@@ -1,318 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE overlay SYSTEM "chrome://noscript/locale/noscript.dtd">
-
-<?xml-stylesheet href="chrome://noscript/skin/browser.css" type="text/css"?>
-
-<overlay id="noscriptOverlay"
- xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
-
- <script type="application/x-javascript" src="noscript.js" />
- <script type="application/x-javascript" src="noscriptOverlay.js"/>
-
- <toolbarpalette id="BrowserToolbarPalette">
- <toolbarbutton id="noscript-tbb"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-no"
- label="NoScript"
- type="menu-button"
- removable="true"
- oncommand="noscriptOverlay.onUICommand(event)"
- oncontextmenu="noscriptOverlay.onContextMenu(event);"
- onmouseover="noscriptOverlay.onUIOver(event)"
- onmousemove="noscriptOverlay.onUIMove(event)"
- onmouseout="noscriptOverlay.onUIOut(event)"
- onmouseup="noscriptOverlay.onUIUp(event)"
- context="noscript-tbb-popup"
- />
-
- <toolbarbutton id="noscript-tbb-temp-page"
- tooltiptext="&noscriptTempAllowPage;"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-temp noscript-allow"
- label="&noscriptTempAllowPage;"
- oncommand="noscriptOverlay.allowPage()"
- />
- <toolbarbutton id="noscript-tbb-revoke-temp"
- tooltiptext="&noscriptRevokeTemp;"
- buttonstyle="pictures"
- class="toolbarbutton-1 noscript-revoke-temp"
- label="&noscriptRevokeTemp;"
- oncommand="noscriptOverlay.revokeTemp()"
- />
- </toolbarpalette>
-
- <popup id="contentAreaContextMenu">
- <menu id="noscript-context-menu" class="menu-iconic" label="NoScript" >
- <menupopup id="noscript-context-popup" onpopupshowing="noscriptOverlay.onMenuShowing(event, true)">
- <menuseparator class="noscript-sep-insert" hidden="true" />
- <menuseparator class="noscript-sep-stop-untrusted"/>
- <!-- dynamically inserted #noscript-menu-untrusted -->
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
-
- <menuseparator />
- <menuitem id="noscript-options-ctx-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
- <menuitem id="noscript-about-ctx-menuitem"
- label="&noscriptAbout;"
- tooltiptext="&noscriptAbout;"
- oncommand="noscriptUtil.openAboutDialog()"
- class="menuitem-iconic noscript-about"
- />
- </menupopup>
- </menu>
- </popup>
-
- <window id="main-window">
- <popupset id="mainPopupSet"></popupset><!-- SeaMonkey compatibility -->
- </window>
-
-
-
- <popupset id="mainPopupSet">
- <menupopup id="noscript-notify-popup" onpopupshowing="noscriptOverlay.onMenuShowing(event, true)">
- <menuseparator />
- <menuitem
- id="noscript-options-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
- <menuitem id="noscript-mi-opt-notify"
- label="&noscriptNotify;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
- <menuitem id="noscript-mi-opt-notify.bottom"
- label="&noscriptNotify.bottom;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
- <menuitem id="noscript-mi-opt-sound"
- label="&noscriptSound;"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- type="checkbox" autocheck="true"
- />
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
-
- <menuitem id="noscript-mi-invopt-volatilePrivatePermissions"
- label="&noscriptPermanentInPrivate;"
- type="checkbox" autocheck="true"
- oncommand="noscriptOverlay.toggleMenuOpt(this);noscriptOverlay._syncUINow()"
- />
- <menuitem id="noscript-revoke-temp-mi"
- class="menuitem-iconic noscript-revoke-temp"
- label="&noscriptRevokeTemp;" accesskey="&noscriptRevokeTemp.accesskey;"
- oncommand="noscriptOverlay.revokeTemp()"
- />
- <menuitem id="noscript-allow-page-mi"
- class="menuitem-iconic noscript-allow"
- label="&noscriptAllowPage;" noaccesskey="&noscriptAllowPage.accesskey;"
- oncommand="noscriptOverlay.allowPage(true)"
- />
- <menuitem id="noscript-temp-allow-page-mi"
- class="menuitem-iconic noscript-temp noscript-allow"
- label="&noscriptTempAllowPage;" noaccesskey="&noscriptTempAllowPage.accesskey;"
- oncommand="noscriptOverlay.allowPage()"
- />
- <menuitem id="noscript-temp2perm-mi"
- class="menuitem-iconic noscript-allow"
- label="&noscriptTempToPerm;" accesskey="&noscriptTempToPerm.accesskey;"
- oncommand="noscriptOverlay.tempToPerm()"
- />
-
- <menu id="noscript-xss-menu" class="menu-iconic noscript-xss"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptXss;">
- <menupopup id="noscript-xss-menupopup"></menupopup>
- </menu>
-
-
- <menuseparator />
- <menuseparator class="noscript-sep-untrusted"/>
-
- <menu id="noscript-menu-blocked-objects" class="menu-iconic noscript-embed"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptBlockedObjects;">
- <menupopup />
- </menu>
-
- <menu id="noscript-menu-recent-blocked" class="menu-iconic"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptRecentBlocked;">
- <menupopup>
- <menuitem id="noscript-mi-recent-blocked-reset"
- label="&noscriptReset;"
- class="menuitem-iconic"
- accesskey="&noscriptReset.accesskey;"
- oncommand="noscriptOverlay.ns.purgeRecent()"
- />
- </menupopup>
- </menu>
-
- <menu id="noscript-menu-untrusted" class="menu-iconic noscript-untrusted"
- onpopupshowing="event.stopPropagation()"
- onpopuphidden="event.stopPropagation()"
- label="&noscriptUntrusted;">
- <menupopup />
- </menu>
-
-
- <menuseparator class="noscript-sep-insert"/>
- <menuseparator class="noscript-sep-stop" hidden="true" />
- </menupopup>
-
-
-
- <menupopup id="noscript-xss-popup" onpopupshowing="noscriptOverlay.prepareXssMenu(this)">
- <menuitem id="noscript-mi-xss-console"
- label="&noscriptShowConsole;"
- class="menuitem-iconic noscript-console"
- accesskey="&noscriptShowConsole.accesskey;"
- oncommand="noscriptUtil.openConsole()"
- />
-
- <menuitem id="noscript-mi-xss-unsafe-reload"
- class="menuitem-iconic noscript-unsafe-reload"
- label="&noscriptUnsafeReload;"
- accesskey="&noscriptUnsafeReload.accesskey;"
- oncommand="noscriptOverlay.unsafeReload()"
- />
-
- <menuseparator />
- <menuitem id="noscript-mi-xss-opt-xss.notify"
- label="&noscriptNotifications;"
- type="checkbox" autocheck="true"
- oncommand="noscriptOverlay.toggleMenuOpt(this)"
- />
-
- <menuitem id="noscript-mi-xss-options"
- label="&noscriptOptions;"
- class="menuitem-iconic noscript-options"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openXssOptions()"
- />
-
- <menuseparator />
- <menuitem id="noscript-mi-xss-faq"
- label="&noscriptXssFaq;"
- class="menuitem-iconic noscript-faq"
- accesskey="&noscriptXssFaq.accesskey;"
- oncommand="noscriptUtil.openFaq('xss')"
- />
- <menuitem id="noscript-abe-opts" class="menuitem-iconic noscript-abe"
- style="display: none !important" />
- </menupopup>
-
-
- <menupopup id="noscript-sticky-ui"
- onpopupshowing="noscriptOverlay.onMenuShowing(event)"
- position="after_end"
- >
-
- <menuseparator class="noscript-sep-insert" hidden="true" />
-
- <menuseparator class="noscript-sep-stop-untrusted"/>
- <!-- dynamically inserted #noscript-menu-untrusted -->
-
- <menuseparator class="noscript-sep-global" />
- <menuitem class="menuitem-iconic" />
- <menuseparator />
- <menuitem id="noscript-options-fn-tbb-menuitem"
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
-
- </menupopup>
-
-
-
- <menupopup id="noscript-status-popup"
- onpopupshowing="noscriptOverlay.onMenuShowing(event)"
- >
- <menuitem
- label="&noscriptAbout;"
- tooltiptext="&noscriptAbout;"
- oncommand="noscriptUtil.openAboutDialog()"
- class="menuitem-iconic noscript-about"
- />
-
- <menuitem
- label="&noscriptOptions;"
- accesskey="&noscriptOptions.accesskey;"
- oncommand="noscriptUtil.openOptionsDialog()"
- tooltiptext="&noscriptOptionsLong;"
- class="menuitem-iconic noscript-options"
- />
-
- <menuseparator class="noscript-sep-global"/>
- <menuitem class="menuitem-iconic" />
-
- <menuseparator class="noscript-sep-untrusted"/>
-
- <menuseparator class="noscript-sep-insert"/>
- <menuseparator class="noscript-sep-stop" hidden="true" />
- </menupopup>
-
-
- </popupset>
-
-<statusbar id="status-bar">
- <statusbarpanel id="noscript-statusLabel"
- insertbefore="statusbar-updates"
- hidden="true"
- oncontextmenu="noscriptOverlay.onContextMenu(event)"
- onclick="noscriptOverlay.openPopup(this.firstChild, this)"
- >
- <vbox flex="1" align="center" pack="center">
- <label id="noscript-statusLabelValue"/>
- </vbox>
- </statusbarpanel>
-
-
- <statusbarpanel id="noscript-statusIcon"
- insertbefore="statusbar-updates"
- class="statusbarpanel-menu-iconic noscript-no"
- hidden="false"
- oncontextmenu="noscriptOverlay.onContextMenu(event)"
- onmouseup="noscriptOverlay.onUIUp(event)"
- onmouseover="noscriptOverlay.onUIOver(event)"
- onmousemove="noscriptOverlay.onUIMove(event)"
- onmouseout="noscriptOverlay.onUIOut(event)"
- />
-
-
- <statusbarpanel id="noscript-statusXss" insertbefore="statusbar-updates"
- class="statusbarpanel-menu-iconic noscript-xss"
- hidden="true"
- onclick="switch(event.button) { case 1: this.hidden = true; break; case 2: event.preventDefault(); this.firstChild.showPopup(); }"
- >
- <menupopup id="noscript-status-xss-popup" onpopupshowing="noscriptOverlay.prepareXssMenu(this, true)" />
- </statusbarpanel>
-
- <statusbarpanel id="noscript-statusRedirect" insertbefore="statusbar-updates"
- class="statusbarpanel-iconic noscript-redirect"
- hidden="true"
- onclick="if(event.button == 1) this.hidden = true"
- oncommand="noscriptOverlay.followMetaRefresh(event)"
- />
-
-</statusbar>
-
-</overlay>
diff --git a/extensions/noscript/chrome/content/noscript/tree-copy.js b/extensions/noscript/chrome/content/noscript/tree-copy.js
deleted file mode 100644
index 43c9b63..0000000
--- a/extensions/noscript/chrome/content/noscript/tree-copy.js
+++ /dev/null
@@ -1,53 +0,0 @@
-// Tree clipboard utils
-
-const Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils;
-
-var noscriptTreeCc = {
- cb: Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper),
-
- getSelectionString: function(tree, csc, rsc) {
- if (!rsc) rsc = "\n";
- let start = new Object(), end = new Object(), v = tree.view, out = "";
- let numRanges = v.selection.getRangeCount();
- let b = tree.boxObject;
- b.QueryInterface(Ci.nsITreeBoxObject);
- let cols = b.columns, l = cols.length - 1;
-
- for (let i = 0; i < numRanges; i++) {
- v.selection.getRangeAt(i,start,end);
- for (let r = start.value; r <= end.value; r++) {
- for (let c = 0; c <= l; c++) {
- let f = c != l ? csc : ""
- out += v.getCellText(r, cols.getColumnAt(c)) + f;
- }
- out += rsc;
- }
- }
- return out.trim();
- },
-
- getSelectedItems: function(tree, sourceData) {
- let start = new Object(), end = new Object(), v = tree.view, out = [];
- let numRanges = v.selection.getRangeCount();
- let b = tree.boxObject;
- b.QueryInterface(Ci.nsITreeBoxObject);
- let cols = b.columns, l = cols.length - 1;
-
- for (let i = 0; i < numRanges; i++) {
- v.selection.getRangeAt(i,start,end);
- for (let r = start.value; r <= end.value; r++) {
- out.push(sourceData[r]);
- }
- }
- return out;
- },
-
- selectAll: function(t) {
- t.view.selection.selectAll();
- },
-
- doCopy: function(t, csc, rsc) {
- this.cb.copyString(this.getSelectionString(t, csc, rsc));
- }
-
-};
diff --git a/extensions/noscript/chrome/locale/ar/noscript/about.properties b/extensions/noscript/chrome/locale/ar/noscript/about.properties
deleted file mode 100644
index 99d4413..0000000
--- a/extensions/noscript/chrome/locale/ar/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=حمايةاضافية لفيرفوكس : نوسكربت يسمح لجافاسكربت و جافا وتقنيات اخرى فقظ للمجالات التي تثق بها.
-aboutTitle=عن %S
-extensionContributors=المساهمون:
-extensionContributors.tip=أشخاص يستحقون الشكر لهذا الامتداد
-extensionCreatorLabel=المؤلف:
-changelog=سجل التغييرات
-changelog.tip=استعرض سجلل التغييرات
-license=الترخيص
-license.tip=اقرأ رخصة المستخدم
-logo.tip=زيارة موقع الامتدادة
-sponsor.tip=زيارة موقع الراعي
-informaction.tip=زيارة موقع إنفورماكشن
-extensionHomepage.tip=زيارة موقع الامتدادة
-extensionCreator.tip=زيارة موقع المؤلف
-version=
diff --git a/extensions/noscript/chrome/locale/ar/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ar/noscript/noscript.dtd
deleted file mode 100644
index 4c8b9a6..0000000
--- a/extensions/noscript/chrome/locale/ar/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "خيارات…">
-<!ENTITY noscriptOptions.accesskey "خ">
-<!ENTITY noscriptOptionsLong "خيارات نوسكربت">
-<!ENTITY noscriptAbout "حول نوسكربت…">
-<!ENTITY noscriptPermissionsText "يمكنك تعيين المواقع المسموح لها تنفيذ سكربتات. أدخل مسار أو نطاق (مثل &quot;http://www.example.com&quot; أو &quot;example.com&quot;) الموقع الذي تود السماح له ومن ثم اختر &quot;اسمح&quot;.">
-<!ENTITY noscriptWebAddress "مسار موقع وب:">
-<!ENTITY noscriptAllow "السماح">
-<!ENTITY noscriptAllow.accesskey "س">
-<!ENTITY noscriptForbid "المنع">
-<!ENTITY noscriptForbid.accesskey "م">
-<!ENTITY noscriptTrust "التأشير كغير موثوق به">
-<!ENTITY noscriptTrust.accesskey "ث">
-<!ENTITY noscriptUntrust "">
-<!ENTITY noscriptUntrust.accesskey "غ">
-<!ENTITY noscriptRemoveSelected "أزالة المواقع المختارة">
-<!ENTITY noscriptGloballyEnabled "السكربتات المسموح لها كليا (خطر)">
-<!ENTITY noscriptAutoReload "أعادة تحميل الصفحات المتأثرة عند تغيير الصلاحيات آلياً">
-<!ENTITY noscriptGeneral "عامة">
-<!ENTITY noscriptAppearance "المظهر">
-<!ENTITY noscriptShow "أظهر">
-<!ENTITY noscriptCtxMenu "قائمة السياق">
-<!ENTITY noscriptStatusIcon "أيقونة شريط الحالة">
-<!ENTITY noscriptFullAddr "مسارات كاملة (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "نطاقات كاملة (www.noscript.net)">
-<!ENTITY noscriptBaseDom "نطاقات المستوى الثاني (noscript.net)">
-<!ENTITY noscriptTempCmd "السماح المؤقت […]">
-<!ENTITY noscriptSound "تنبيه صوتي عند اعتراض السكربتات">
-<!ENTITY noscriptImport "الاستيراد">
-<!ENTITY noscriptImport.accesskey "س">
-<!ENTITY noscriptExport "التصدير">
-<!ENTITY noscriptExport.accesskey "ص">
-<!ENTITY noscriptNotify "اعرض رسالة عن السكربتات المعترضة">
-<!ENTITY noscriptNotify.bottom "أظهار الرسالة في الاسفل">
-<!ENTITY noscriptSound.choose "اختيار">
-<!ENTITY noscriptSound.choose.accesskey "ت">
-<!ENTITY noscriptSound.play "تشغيل">
-<!ENTITY noscriptSound.play.accesskey "ش">
-<!ENTITY noscriptSound.reset "تصفير">
-<!ENTITY noscriptSound.reset.accesskey "ص">
-<!ENTITY noscriptAdvanced "متقدمة">
-<!ENTITY noscriptAdditionalPermissions "صلاحيات إضافية للمواقع الموثوقة">
-<!ENTITY noscriptAllowClipboard "السماح بنسخ ولصق النص الغني من حافظة القصاصات الخارجية">
-<!ENTITY noscriptAdditionalRestrictions "قيود إضافية على المواقع غير الموثوق بها">
-<!ENTITY noscriptPlugins "الملحقات">
-<!ENTITY noscriptContentBlocker "تطبيق هذه القيود على المواقع الموثوقة كذلك">
-<!ENTITY noscriptForbidJava "منع جافا">
-<!ENTITY noscriptForbidXSLT "منع أكس أس أل تي">
-<!ENTITY noscriptForbidSilverlight "منع ميكروسوفت سِلفَرلَيت">
-<!ENTITY noscriptForbidIFrames "منع &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "منع &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "منع @font-face">
-<!ENTITY noscriptForbidWebGL "منع WebGL">
-<!ENTITY noscriptForbidMedia "منع &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "منع ماكروميديا فلاش">
-<!ENTITY noscriptForbidPlugins "منع الملحقات الأُخرى">
-<!ENTITY noscriptReloadWarn "سيتم تفعيل هذه الخيارات في الصفحات الجديدة أو الصفحات المعاد تحميلها (يدوياً)">
-<!ENTITY noscriptConfirmUnblock "طلب التوكيد قبل رفع المنع بشكل مؤقت عن عنصر ما">
-<!ENTITY noscriptStatusLabel "عنوان شريط الحالة">
-<!ENTITY noscriptForbidBookmarklets "منع العلامات البرمجية">
-<!ENTITY noscriptShowPlaceholder "أظهار أيقونة شاغلة للحيز">
-<!ENTITY noscriptTruncateTitle "اختصار عناوين الوثائق">
-<!ENTITY noscriptFixLinks "محاولة تصحيح روابط جافاسركبت">
-<!ENTITY noscriptAllowBookmarks "السماح للمواقع التي تفتح من علامات">
-<!ENTITY noscriptAllowViaBookmarks "السماح للمواقع التي تفتح من علامات">
-<!ENTITY noscriptAllowPing "السماح ل &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "السماح بالروابط المحلية">
-<!ENTITY noscriptForbidPing "منع &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "امنع تحويلات META من داخل عناصر &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "ت">
-<!ENTITY noscriptNotifyMeta "اظهار الرسائل من ميتا محجوبة متغيرة الهدف">
-<!ENTITY noscriptNotifyMeta.accesskey "م">
-<!ENTITY noscriptWhitelist "القائمة البيضاء">
-<!ENTITY noscriptPermissions "الصلاحيات">
-<!ENTITY noscriptRefresh "أنعاش">
-<!ENTITY noscriptNotifications "تنويهات">
-<!ENTITY noscriptToolbarToggle "النقر باليسار على أيقونة نوسكربت في شريط نوسكربت يعكس حالة السماح للمواقع في المستوى الأعلى">
-<!ENTITY noscriptTrusted "موثوق">
-<!ENTITY noscriptUntrusted "غير موثوق">
-<!ENTITY noscriptUnknown "غير معروف">
-<!ENTITY noscriptAdd "أضافة">
-<!ENTITY noscriptAdd.accesskey "ض">
-<!ENTITY noscriptClose "أغلاق">
-<!ENTITY noscriptSiteManager "مدير المواقع">
-<!ENTITY noscriptSecurityManager "مدير الأمن">
-<!ENTITY noscriptPolicies "السياسات">
-<!ENTITY noscriptDefaultPolicies "السياسات المبدئية">
-<!ENTITY noscriptSitePolicies "سياسات مواقع معينة">
-<!ENTITY noscriptNselNever "أخفاء محتويات عناصر &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "أظهار محتويات عنصر &lt;NOSCRIPT&gt; الذي يلي &lt;SCRIPT&gt; معترض">
-<!ENTITY noscriptAutoAllowTopLevel "مبدئيا السماح مؤقتا لمواقع المستوى الأعلى">
-<!ENTITY noscriptDescription "حماية إضافية لفيرفوكس: نوسكربت يسمح لجافاسكربت و جافا (و ملحقات أخرى) للعمل فقط من المواقع الموثوقة التي تختارها (مثلا:موقع مصرفك). هذه المقاربة التحفظية المبنية على القوائم البيضاء تمنع استغلال الثغرات الأمنية (حتى غير المعلومة منها) دون تقليل الكفاءة…سيؤكد المحترفون أن فيرفوكس أكثر أمناً مع نوسكربت.:-)">
-<!ENTITY noscriptOptBlockCssScanners "اعتراض الماسحات المبنية على تقنية XSS">
-<!ENTITY noscriptOptFilterXGet "تطهير الطلبات المشبوهة عابرة المواقع">
-<!ENTITY noscriptOptFilterXPost "تحويل الطلبات العابرة للمواقع من النوع POST إلى طلبات من GET خالية من البيانات">
-<!ENTITY noscriptShowConsole "أظهار وحدة التحكم">
-<!ENTITY noscriptShowConsole.accesskey "ك">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "أسئلة شائعة عن ‮ ‪XSS">
-<!ENTITY noscriptXssFaq.accesskey "ع">
-<!ENTITY noscriptUnsafeReload "إعادة تحميل غير آمنة">
-<!ENTITY noscriptUnsafeReload.accesskey "د">
-<!ENTITY noscriptXssExceptions "إستثناءات من الحماية ضد أكس أس">
-<!ENTITY noscriptXssExceptions.description "المواقع المطابقة لهذه العبارات الاعتيادية لن تكون محمية ضد أكس أس">
-<!ENTITY noscriptMatchSample "عينة مطابقة للنمط">
-<!ENTITY noscriptReset "تصفير">
-<!ENTITY noscriptReset.accesskey "ص">
-<!ENTITY noscriptResetDef "تصفير للمبدئية">
-<!ENTITY noscriptResetDef.accesskey "ف">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "ألغاء الصلاحيات المؤقتة">
-<!ENTITY noscriptRevokeTemp.accesskey "م">
-<!ENTITY noscriptNoUntrustedPlaceholder "لا توجد حوافظ مكان لعناصر قادمة من مواقع محددة كغير آمنة">
-<!ENTITY noscriptCollapseBlockedObjects "تقليص العناصر المُعتَرضة">
-<!ENTITY noscriptExceptions "استثناءات">
-<!ENTITY noscriptBlockedObjects "عناصر مُعتَرضة">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "اعتراض كل شيء آت من موقع محدّد كغير موثوق">
-<!ENTITY noscriptTempAllowPage "السماح مؤقتا للكل في الصفحة الحالية">
-<!ENTITY noscriptTempAllowPage.accesskey "س">
-<!ENTITY noscriptAllowPage "السماح لهذه الصفحة">
-<!ENTITY noscriptAllowPage.accesskey "ح">
-<!ENTITY noscriptTempToPerm "جعل صلاحيات الصفحة دائمة">
-<!ENTITY noscriptTempToPerm.accesskey "ص">
-<!ENTITY noscriptHttps "أتش تي تي بي الآمن">
-<!ENTITY noscriptHttpsFaq "الأسئلة المتكررة حول أتش تي تي بي الآمن">
-<!ENTITY noscriptHttpsFaq.accesskey "ش">
-<!ENTITY noscriptHttps.behavior "التصرّف">
-<!ENTITY noscriptHttps.cookies "الكعكات">
-<!ENTITY noscriptHttps.description "منع محتويات الشبكة الا اذا كانت عن طريق اتصال آمن">
-<!ENTITY noscriptHttps.never "أبدًا">
-<!ENTITY noscriptHttps.proxy "عند استعمال وسيط">
-<!ENTITY noscriptHttps.always "دائمًا">
-<!ENTITY noscriptHttpsForced "فرض استعمال اتصالات آمنة على هذه المواقع">
-<!ENTITY noscriptHttpsForcedExceptions "لا تفرض استعمال اتصالات آمنة على هذه المواقع">
-<!ENTITY noscriptSecureCookies "تفعيل الادارة الآلية للكعكات الآمنة">
-<!ENTITY noscriptSecureCookiesForced "فرض تعمية كل الكعكات المحددة عبر اتصال آمن للمواقع التالية:">
-<!ENTITY noscriptSecureCookiesExceptions "أهمال الكعكات غير الآمنة عبر اتصال آمن للمواقع التالية:">
-<!ENTITY noscriptClearClickTitle "مسح التحذير">
-<!ENTITY noscriptClearClickHeader "محاولة قرصنة النقر أو تحويل للعنوان">
-<!ENTITY noscriptClearClickDescription "لقد منع نوسكربت تفاعل لللوحة أو الفأرة مع عنصر مُخَبَّأ.أضغط على الضورة في الاسفل لرؤية كلا النسخ">
-<!ENTITY noscriptClearClickOpt "رفع الحماية عن الصفحات…">
-<!ENTITY noscriptClearClickReport "تقرير">
-<!ENTITY noscriptClearClickReport.accesskey "ت">
-<!ENTITY noscriptClearClickReportId "رقم التقرير:">
-<!ENTITY noscriptTrustedPagesAdj "موثوق">
-<!ENTITY noscriptUntrustedPagesAdj "غير موثوق">
-<!ENTITY noscriptKeepLocked "ترك هذا العنصر موصدا (مفضّل)">
-<!ENTITY noscriptEmbeddings "عناصر مغروسة">
-<!ENTITY noscriptPrev "السابق">
-<!ENTITY noscriptNext "التالي">
-<!ENTITY noscriptFrameOptErr.title "لا يمكن اظهار المحتويات في صُفَيحةframe">
-<!ENTITY noscriptFrameOptErr.desc "لامانك, ناشر المحتويات لا يسمح باظهارها في صُفَيحة frame">
-<!ENTITY noscriptFrameOptErr.link "النقر هنا لفتح المحتويات في نافذة جديدة">
-<!ENTITY noscriptBookmarkSync "عمل نسخة احتياطية للاعدادت مُؤَشِّر لتسهيل التزامن">
-<!ENTITY noscriptShowReleaseNotes "اظهار ملاحظات الاصدار في التحديثات">
-<!ENTITY ABE "أيب">
-<!ENTITY ABE.accesskey "أ">
-<!ENTITY ABE.rulesets.label "القواعد">
-<!ENTITY ABE.enabled.label "تفعيل أيب (منفّذ حدود البرامج)">
-<!ENTITY ABE.siteEnabled.label "السماح للمواقع دفع قواعدهم الخاصة">
-<!ENTITY ABE.edit.label "تحرير">
-<!ENTITY ABE.edit.accesskey "ت">
-<!ENTITY ABE.enable.label "تفعيل">
-<!ENTITY ABE.enable.accesskey "ف">
-<!ENTITY ABE.disable.label "ايقاف">
-<!ENTITY ABE.disable.accesskey "ق">
-<!ENTITY ABE.refresh.label "تجديد">
-<!ENTITY ABE.refresh.accesskey "ج">
-<!ENTITY noscriptUninstall "ازالة">
-<!ENTITY noscriptRecentBlocked "مواقع معترضة مأخراً">
-<!ENTITY noscriptExternalFilters "فلاتر خارجية">
-<!ENTITY noscriptEF.enable "تفعيل الفلاتر الخارجية">
-<!ENTITY noscriptEF.add "فلتر جديد…">
-<!ENTITY noscriptEF.executable "ملف تشغيل:">
-<!ENTITY noscriptEF.browse "التصفح…">
-<!ENTITY noscriptEF.contentType "نوع المحتوى(مايم) الذي سيتم فلترته (تطابق">
-<!ENTITY noscriptEF.exceptions "عدك تصفية كائنات قادمة من هذه المواقع :">
-<!ENTITY noscriptEF.remove "ازالة">
-<!ENTITY noscriptPreset "مستوى الأمن">
-<!ENTITY noscriptPreset.off "إيقاف (هل أنت متأكد؟!)">
-<!ENTITY noscriptPreset.low "الوضع السهل (القائمة السوداء + أمن الويب)">
-<!ENTITY noscriptPreset.medium "كلاسيكي (القائمة البيضاء+أمن الويب)">
-<!ENTITY noscriptPreset.high "الحصن (أمن تام)">
-<!ENTITY noscript.hoverUI "فتح قائمة الإذِن عندما يحوم المؤشّر فوق رمز نوسكريبت">
-<!ENTITY noscriptDonate "التبرع">
-<!ENTITY noscriptDonate.accesskey "ت">
-<!ENTITY noscriptAutoReload.currentTab "اعادة تحميل علام التبويب الحالية فقط">
-<!ENTITY noscriptCascadePermissions "">
-<!ENTITY noscriptRestrictSubdocScripting "منع السكربتات في ملفات القائمة البيضاء المتواجدة في الصفحات الغير موجودة في القائمة البيضاء">
-<!ENTITY noscriptGlobalHttpsWhitelist "السماح لسكربتات اتش تي تي بي اس بشكل عام في مستدات اتش تي تي بي اس">
-<!ENTITY noscriptPermanentInPrivate "الدائم للأوامر في النوافذ الشخصية &quot;السماح&quot;">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/ar/noscript/noscript.properties b/extensions/noscript/chrome/locale/ar/noscript/noscript.properties
deleted file mode 100644
index 535befc..0000000
--- a/extensions/noscript/chrome/locale/ar/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=السماح للسكربتات بشكل شامل (غير آمن)
-forbidGlobal=منع السكربتات نهائيا (محبذ)
-allowLocal=السماح من %S
-allowTemp=السماح من %S مؤقتا
-forbidLocal=المنع من %S
-allowed.glb=خطر! السكربتات مسموحة كلياً
-allowed.yes=السكربتات مسموحة حاليًا
-allowed.prt=السكربتات مسموحة جزئيًا
-allowed.no=السكربتات ممنوعة حاليًا
-global.warning.title=تحذير!
-global.warning.text=سيسمح للسكربتات كلياً (لكل المواقع).\nيمكن أن يكون هذا خطيرا.\nأمتأكد أنك تريد المواصلة؟
-audio.samples=عينات صوتية
-confirm=هل أنت متأكد؟
-alwaysAsk=إسأل دائما للتوكيد
-notifyHide=أخفِ بعد %S ثانية
-trust=ثق في %S
-distrust=ألتأشير %S كغير موثوق
-untrustedOrigin=مصدر غير موثوق
-xss.notify.generic=منع نوسكربت محاولة لتشغيل سركيبتات عبر المواقع من %S. تم تسجيل التفاصيل التقنية في المرقاب-الكونسول.
-xss.notify.showConsole=أظهار المرقاب-الكونسول…
-xss.notify.showConsole.accessKey=ر
-xss.reason.filterXGet=تم تطهير طلب مشبوه. المسار الأصلي [%1$S] طُلب من [%2$S]. المسار المطهر هو: [%3$S]
-xss.reason.filterXGetRef=تم تطهير محيل طلب مشبوه. المسار الأصلي [%1$S] طُلب من [%2$S]. المسار المطهر هو: [%3$S]
-xss.reason.filterXPost=تم تطهير تحميل مشبوه إلى [%1$S] من [%2$S]: تم تحويله إلى تنزيل فقط بالفعل GET.
-unsafeReload.warning=تجري إعادة تحميل غير آمنة\n\n[%1$S] [%2$S]\n\nمن[%3$S]\n\nلن يحمي نوسكربت هذا الطلب\n
-metaRefresh.notify=نوسكربت اعترض تحويلا باستخدام <META> داخل عنصر <NOSCRIPT>: %S بعد %S ثانية
-metaRefresh.notify.follow=اتباع التحويل
-metaRefresh.notify.follow.accessKey=ت
-notify.options=خيارات
-notify.options.accessKey=خ
-reset.title=تصفير نوسكربت
-reset.warning=ستعاد كل تخصيصات نوسكربت و صلاحيات المواقع إلى القيم المبدئية فورا.\nهذا العمل لا يمكن استدراكه.\nأمتأكد أنك تريد المواصلة؟
-bookmarkSync.title=علامة تبويب ضبط نوسكربت
-bookmarkSync.message=علامة التبويب هذه ليست للفتح وانما لتزامنها باستخدام خدمة مثل Weave أوا Xmarks او XMarks Extension
-bookmarkSync.confirm=وجد نوسكربت اعداد مؤشر محفوظ في \n%S, هل تريد حقاً تغيير اعدادات نوسكربت المحلية بمحتويات هذا المؤشر
-ABE.notify=الطلب %1$S تمت تصفيته من قبل أيب <%2$S> %3$S
-ABE.chooseEditor=الرجاء اختيار محرر نصوص لقواعد أيب
-ABE.syntaxError=خطأ في بناء الجملة في مجموعة أوامر آيب!
-ABE.wanIpAsLocal=عنوان الشبكة الخارجي (%S) كداخلي
-allowFrom=السماح للكل من %S
-allowTempFrom=السماح مؤقتاً للكل من %S
-siteInfo.confirm=أنت بصدد السؤال عن الموقع "%1$S" \n يمجرد التقدم بأسفسار ل %2$S. \n هل تريد المواصلة؟
-siteInfo.tooltip=النقر بالماوس المتوسط أو النقر+شفت للحصول على معلومات موقع…
-ef.activate=تصفية %S
-ef.options=خيارات %S …
-ef.newName=أدخل اسم الفلتر الجديد :
-ef.locateExe=اختر ملف التشغيل للفلتر %S
-disable=تعطيل ال %S
-disable.accessKey=ط
-allowed.glb-emb=السكربتات مسموحة كلياً ولكن بعض الامور الضمنية ممنوعة
-removal.title=تحذير تنزيل المستوى الامني
-removal.message=الغاء نوسكربت او ازالته تتنازل عن كل الحماية المتوفرة من البنرنامج.\n\nاذا تعبت من تفعيل اوامر السكربتات كل مرة اذا هنالك خيار آخر: \n\n يمكنك نوسكربت من الغاء توقيف السكربتات الا تلك التي تعينها كغير آمنة وهكذا تبقى محمياً بتدابير الامان المتقدمة مثل اكس اس اس, خطف النقر, سي اس ار اف وتهديدات ويب الاخرى. \n\n هل انت متأكد انك تريد كل حماية نوسكربت؟\n
-removal.no=لا, فقط ايقاف صد السكربتات
-removal.yes=نعم, ازالة كل وسائل الحماية
-incompatibleOptions.title=خيارات تحذير غير متوافقة
-incompatibleOptions="%1$S"\nغير متوافق مع "%2$S".\b هل تريد تفعيل الاول وتعطيل الاخِر؟
diff --git a/extensions/noscript/chrome/locale/be-BY/noscript/about.properties b/extensions/noscript/chrome/locale/be-BY/noscript/about.properties
deleted file mode 100644
index 98a4b3b..0000000
--- a/extensions/noscript/chrome/locale/be-BY/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Дадатковая абарона для Firefox: NoScript дазваляе дазваляць выкананне JavaScript, Java (і іншых убудоваў) толькі даменам, якім давяраеце (напрыклад, ваш вэб-сайт). Белы спіс, заснаваны на прынцыпе папераджальнага блакавання, дазваляе прадухіліць выкарыстанне ўразлівасцяў (вядомых і яшчэ невядомых!) без страты функцыянальнасці… Эксперты згаджаюцца: Firefox сапраўды бяспечней з NoScript :-)
-aboutTitle=Аб пашырэнні %S
-extensionContributors=Удзельнікі:
-extensionContributors.tip=Людзі, якія дапамагалі паляпшаць пашырэнне
-extensionCreatorLabel=Аўтар:
-changelog=Спіс зменаў
-changelog.tip=Паказаць спіс зменаў
-license=Ліцэнзійная дамова
-license.tip=Прачытаць ліцэнзійную дамову з канчатковым карыстальнікам
-logo.tip=Наведаць хатнюю старонку пашырэння
-sponsor.tip=Наведаць хатнюю старонку спонсара
-informaction.tip=Наведаць хатнюю старонку InformAction
-extensionHomepage.tip=Наведаць хатнюю старонку пашырэння
-extensionCreator.tip=Наведаць хатнюю старонку аўтара
-version=Версія %S
diff --git a/extensions/noscript/chrome/locale/be-BY/noscript/noscript.dtd b/extensions/noscript/chrome/locale/be-BY/noscript/noscript.dtd
deleted file mode 100644
index 8247e59..0000000
--- a/extensions/noscript/chrome/locale/be-BY/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Наладкі…">
-<!ENTITY noscriptOptions.accesskey "а">
-<!ENTITY noscriptOptionsLong "Наладкі NoScript">
-<!ENTITY noscriptAbout "Аб пашырэнні">
-<!ENTITY noscriptPermissionsText "Вы можаце вызначыць, якім вэб-сайтам будзе дазволена выконваць код JavaScript. Увядзіце адрас або дамен (напрыклад «http://www.site.com» або «site.com») сайта якому вы жадаеце дазволіць выкананне JavaScript у тэкставым полі ніжэй, а затым націсніце «Дазволіць».">
-<!ENTITY noscriptWebAddress "Адрас вэб-сайта:">
-<!ENTITY noscriptAllow "Дазволіць">
-<!ENTITY noscriptAllow.accesskey "е">
-<!ENTITY noscriptForbid "Забараніць">
-<!ENTITY noscriptForbid.accesskey "ь">
-<!ENTITY noscriptTrust "Адзначыць давераным">
-<!ENTITY noscriptTrust.accesskey "аб">
-<!ENTITY noscriptUntrust "Адзначыць ненадзейным">
-<!ENTITY noscriptUntrust.accesskey "у">
-<!ENTITY noscriptRemoveSelected "Выдаліць вылучаныя сайты">
-<!ENTITY noscriptGloballyEnabled "Цалкам дазваляць выкананне JavaScript на старонках (небяспечна)">
-<!ENTITY noscriptAutoReload "Аўтаматычна абнаўляць старонку пасля змены для яе правілаў">
-<!ENTITY noscriptGeneral "Асноўныя">
-<!ENTITY noscriptAppearance "Знешні выгляд">
-<!ENTITY noscriptShow "Адлюстроўваць наступныя элементы NoScript…">
-<!ENTITY noscriptCtxMenu "Пункт у кантэкстным меню">
-<!ENTITY noscriptStatusIcon "Значок у радку стану">
-<!ENTITY noscriptFullAddr "Поўныя адрасы (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Поўныя дамены (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Базавыя дамены 2-го ўзроўня (noscript.net)">
-<!ENTITY noscriptTempCmd "Часова дазволіць […]">
-<!ENTITY noscriptSound "Прайграваць аўдыёфайл пры блакаванні скрыптоў">
-<!ENTITY noscriptImport "Імпарт">
-<!ENTITY noscriptImport.accesskey "м">
-<!ENTITY noscriptExport "Экспарт">
-<!ENTITY noscriptExport.accesskey "да">
-<!ENTITY noscriptNotify "Адлюстроўваць паведамленні аб заблакаваных скрыптах">
-<!ENTITY noscriptNotify.bottom "Размяшчаць паведамленні знізу экрана">
-<!ENTITY noscriptSound.choose "Агляд">
-<!ENTITY noscriptSound.choose.accesskey "аб">
-<!ENTITY noscriptSound.play "Праслухаць">
-<!ENTITY noscriptSound.play.accesskey "а">
-<!ENTITY noscriptSound.reset "Скід">
-<!ENTITY noscriptSound.reset.accesskey "бы">
-<!ENTITY noscriptAdvanced "Дадаткова">
-<!ENTITY noscriptAdditionalPermissions "Дадатковыя магчымасці для давераных сайтаў">
-<!ENTITY noscriptAllowClipboard "Пашыранае капіяванне/устаўка з знешняга буфера абмену">
-<!ENTITY noscriptAdditionalRestrictions "Дадатковыя абмежаванні для ненадзейных сайтаў">
-<!ENTITY noscriptPlugins "Плагіны">
-<!ENTITY noscriptContentBlocker "Ужываць гэтыя абмежаванні таксама для давераных сайтаў">
-<!ENTITY noscriptForbidJava "Забараніць адлюстраванне элементаў Java™">
-<!ENTITY noscriptForbidXSLT "Забараніць адлюстраванне элементаў XSLT">
-<!ENTITY noscriptForbidSilverlight "Забараніць адлюстраванне элементаў Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Забараніць адлюстраванне элементаў &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Забараніць адлюстраванне элементаў &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Забараніць адлюстраванне элементаў @font-face">
-<!ENTITY noscriptForbidWebGL "Забараніць адлюстраванне элементаў WebGL">
-<!ENTITY noscriptForbidMedia "Забараніць адлюстраванне элементаў &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Забараніць адлюстраванне элементаў Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "Забараніць адлюстраванне элементаў іншых убудоваў">
-<!ENTITY noscriptReloadWarn "Нататка: Усталяваныя наладкі ўступаюць у сілу альбо на новай старонцы, альбо пасля ручнога абнаўлення бягучае старонкі">
-<!ENTITY noscriptConfirmUnblock "Пацвярджаць часовую разблакоўку аб&apos;екта на старонцы">
-<!ENTITY noscriptStatusLabel "Паведамленні ў радку стану">
-<!ENTITY noscriptForbidBookmarklets "Забараніць выкарыстанне Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Вылучаць заблакаваныя элементы значком з рамкаю">
-<!ENTITY noscriptTruncateTitle "Адсякаць занадта доўгія загалоўкі вэб-сайтаў">
-<!ENTITY noscriptFixLinks "Ужываць алгарытм выпраўлення JavaScript-спасылкаў">
-<!ENTITY noscriptAllowBookmarks "Дазваляць выкананне JavaScript усім вэб-сайтам з закладкаў">
-<!ENTITY noscriptAllowViaBookmarks "Дазваляць выкананне JavaScript усім вэб-сайтам з закладкаў">
-<!ENTITY noscriptAllowPing "Дазволіць вэб-сайту выкарыстаць параметр &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Дазволіць лакальныя спасылкі">
-<!ENTITY noscriptForbidPing "Забараніць вэб-сайту выкарыстаць параметр &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Забараніць META-перанакіраванні ўнутры элементаў &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Белы спіс">
-<!ENTITY noscriptPermissions "Дазволы">
-<!ENTITY noscriptRefresh "Абнавіць">
-<!ENTITY noscriptNotifications "Апавяшчэнні">
-<!ENTITY noscriptToolbarToggle "Націскам на значку NoScript перамыкаць дазволы для ўсяго сайта">
-<!ENTITY noscriptTrusted "Давераны">
-<!ENTITY noscriptUntrusted "Ненадзейны">
-<!ENTITY noscriptUnknown "Невядомы">
-<!ENTITY noscriptAdd "Дадаць">
-<!ENTITY noscriptAdd.accesskey "аб">
-<!ENTITY noscriptClose "Зачыніць">
-<!ENTITY noscriptSiteManager "Мэнэджэр сайтаў">
-<!ENTITY noscriptSecurityManager "Кіраванне бяспекаю">
-<!ENTITY noscriptPolicies "Палітыкі">
-<!ENTITY noscriptDefaultPolicies "Палітыкі па змаўчанні">
-<!ENTITY noscriptSitePolicies "Адмысловыя палітыкі для сайтаў">
-<!ENTITY noscriptNselNever "Хаваць элементы &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Паказваць элемент &lt;NOSCRIPT&gt; які блакуе &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Часова дазваляць базавым даменам 2-го ўзроўня па змаўчанні">
-<!ENTITY noscriptDescription "Дадатковая абарона для Firefox: NoScript дазваляе дазваляць выкананне JavaScript, Java (і іншых убудоваў) толькі даменам, якім давяраеце (напрыклад, ваш вэб-сайт). Белы спіс, заснаваны на прынцыпе папераджальнага блакавання, дазваляе прадухіліць выкарыстанне ўразлівасцяў (вядомых і яшчэ невядомых!) без страты функцыянальнасці… Эксперты згаджаюцца: Firefox сапраўды бяспечней з NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Блакаваць CSS-сканары">
-<!ENTITY noscriptOptFilterXGet "Фільтраваць запыты, падазраваныя на XSS">
-<!ENTITY noscriptOptFilterXPost "Замяняць XSS POST-запыты на GET-запыты без дадзеных">
-<!ENTITY noscriptShowConsole "Паказаць кансоль…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Небяспечная перазагрузка">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Выключэнні абароны анты-XSS">
-<!ENTITY noscriptXssExceptions.description "Прызначэнні, адпавядаючыя гэтым рэгулярным выразам, НЕ будуць абароненыя супраць XSS">
-<!ENTITY noscriptMatchSample "Прыклад адпавядання шаблону:">
-<!ENTITY noscriptReset "Скінуць">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Скінуць на наладкі па змаўчанні">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Ануляваць часовыя дазволы">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Не ўжываць запаўняльнікі для аб&apos;ектаў, прыходзячых з сайтаў, пазначаных як ненадзейныя">
-<!ENTITY noscriptCollapseBlockedObjects "Згарнуць заблакаваныя аб&apos;екты">
-<!ENTITY noscriptExceptions "Выключэнні…">
-<!ENTITY noscriptBlockedObjects "Заблакаваныя аб&apos;екты">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Блакаваць усе аб&apos;екты, прыходзячыя з сайтаў, пазначаных як ненадзейныя">
-<!ENTITY noscriptTempAllowPage "Часова дазволіць усё на гэтай старонцы">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Дазволіць усё на гэтай старонцы">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Зрабіць дазволы пастаяннымі">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Паводзіны">
-<!ENTITY noscriptHttps.cookies "Кукі">
-<!ENTITY noscriptHttps.description "Забараняць актыўны вэб-змест калі ён прыходзіць не па бяспечным (HTTPS) злучэнні:">
-<!ENTITY noscriptHttps.never "Ніколі">
-<!ENTITY noscriptHttps.proxy "Пры ўжыванні проксі (рэкамендавана з Tor)">
-<!ENTITY noscriptHttps.always "Заўжды">
-<!ENTITY noscriptHttpsForced "Прымушаць наступныя сайты выкарыстоўваць бяспечныя (HTTPS) злучэнні:">
-<!ENTITY noscriptHttpsForcedExceptions "Ніколі не прымушаць выкарыстоўваць бяспечныя (HTTPS) злучэнні для наступных сайтаў:">
-<!ENTITY noscriptSecureCookies "Дазволіць аўтаматычнае кіраванне бяспечнымі кукі">
-<!ENTITY noscriptSecureCookiesForced "Прымусова шыфраваць усе кукі, дасылаемыя праз HTTPS наступными сайтамиі:">
-<!ENTITY noscriptSecureCookiesExceptions "Ігнараваць небяспечныя кукі, дасылаемыя праз HTTPS наступными сайтамиі:">
-<!ENTITY noscriptClearClickTitle "Папярэджанне ClearClick">
-<!ENTITY noscriptClearClickHeader "Патэнцыйная спроба Clickjacking / змянення UI!">
-<!ENTITY noscriptClearClickDescription "NoScript перахапіў узаемадзеянне мышы альбо клавіятуры з часткова схаваным элементам. Націскайце на значку вышэй каб пераключацца паміж перашкоджаным і чыстым варыянтамі.">
-<!ENTITY noscriptClearClickOpt "Абарона ClearClick на старонках…">
-<!ENTITY noscriptClearClickReport "Справаздача">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID справаздачы:">
-<!ENTITY noscriptTrustedPagesAdj "давераныя">
-<!ENTITY noscriptUntrustedPagesAdj "ненадзейныя">
-<!ENTITY noscriptKeepLocked "Трымаць гэты элемент заблакаваным (рэкамендуецца)">
-<!ENTITY noscriptEmbeddings "Убудаваныя аб&apos;екты">
-<!ENTITY noscriptPrev "Папярэдні">
-<!ENTITY noscriptNext "Наступны">
-<!ENTITY noscriptFrameOptErr.title "Гэты змест не можа быць адлюстраваны ў рамцы">
-<!ENTITY noscriptFrameOptErr.desc "Каб абараніць вашу бяспеку, выдавец гэтага зместу не дазваляе яму быць адлюстраваным ў рамцы.">
-<!ENTITY noscriptFrameOptErr.link "Націсніце тут, каб адкрыць гэты змест у новым акне">
-<!ENTITY noscriptBookmarkSync "Захаваць наладкі NoScript у закладках для лёгкай сінхранізацыі">
-<!ENTITY noscriptAutoReload.currentTab "Перазагрузіць толькі актыўнае акно">
-<!ENTITY noscriptNotifyMeta "Паказваць паведамленне аб заблакаваных META-перанакіраваннях">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptShowReleaseNotes "Паказаць нататкі аб выпуску пры абнаўленнях">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Наборы правілаў:">
-<!ENTITY ABE.enabled.label "Уключыць ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Дазваляць сайтам прасоўваць ўласныя наборы правілаў">
-<!ENTITY ABE.edit.label "Рэдагаваць…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Уключыць">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Адключыць">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Абнавіць">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Адусталяваць">
-<!ENTITY noscriptRecentBlocked "Нядаўна заблакаваныя сайты">
-<!ENTITY noscriptExternalFilters "Знешнія фільтры">
-<!ENTITY noscriptEF.enable "Уключыць знешнія фільтры">
-<!ENTITY noscriptEF.add "Новы фільтр…">
-<!ENTITY noscriptEF.executable "Выканальны файл:">
-<!ENTITY noscriptEF.browse "Праглядаць…">
-<!ENTITY noscriptEF.contentType "Фільтруемы тып зместу (MIME) (дакладнае супадзенне або рэгулярны выраз):">
-<!ENTITY noscriptEF.exceptions "Не фільтраваць аб&apos;екты, прыходзячыя з наступных сайтаў:">
-<!ENTITY noscriptEF.remove "Выдаліць">
-<!ENTITY noscriptPreset "Узровень бяспекі">
-<!ENTITY noscriptPreset.off "Выключыць (вы сур&apos;ёзна?!)">
-<!ENTITY noscriptPreset.low "Палегчаны (чорны спіс + вэб-бяспека)">
-<!ENTITY noscriptPreset.medium "Класічны (белы спіс + вэб-бяспека)">
-<!ENTITY noscriptPreset.high "Крэпасць (поўная блакіроўка)">
-<!ENTITY noscript.hoverUI "Адкрыць меню дазволаў пры навядзенні мышы на значок NoScript">
-<!ENTITY noscriptDonate "Ахвяраваць">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Распаўсюджвацць дазволы пачатковага дакумента на скрыпты з іншых крыніц">
-<!ENTITY noscriptRestrictSubdocScripting "Блакаваць скрыпты на ўключаных у белы спіс дакументах, змешчаных на старонак па-за белага спісу">
-<!ENTITY noscriptGlobalHttpsWhitelist "Дазваляць HTTPS-скрыпты глабальна на HTTPS-дакументах">
-<!ENTITY noscriptPermanentInPrivate "Пастаянна &quot;дазваляць&quot; каманды ў прыватных вокнах">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/be-BY/noscript/noscript.properties b/extensions/noscript/chrome/locale/be-BY/noscript/noscript.properties
deleted file mode 100644
index 70a198b..0000000
--- a/extensions/noscript/chrome/locale/be-BY/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Дазволіць скрыпты паўсюль (небяспечна)
-forbidGlobal=Забараніць JavaScript цалкам (рэкамендуецца)
-allowLocal=Дазволіць %S
-allowTemp=Часова дазволіць %S
-forbidLocal=Забараніць %S
-allowed.glb=Небяспека! Выкананне JavaScript цалкам дазволена.
-allowed.yes=JavaScript дазволены на старонцы.
-allowed.prt=JavaScript часткова дазволены.
-allowed.no=JavaScript забаронены на старонцы.
-global.warning.title=Увага!
-global.warning.text=JavaScript будзе цалкам дазволены (для ўсіх вэб-сайтаў).\n Гэта патэнцыйна небяспечнае дзеянне.\nВы сапраўды жадаеце працягнуць?
-audio.samples=Аудыяпрыклад
-confirm=Вы ўпэўненыя?
-alwaysAsk=Заўсёды пытаць пацверджанне
-notifyHide=Хаваць паведамленні пасля %S секундаў
-trust=Давяраць %S
-distrust=Не давяраць %S
-untrustedOrigin=як крыніца недаверу
-xss.notify.generic=NoScript адфільтраваў патэнцыйную XSS-атаку (спробу межсайтового скриптинга) з адрасу %S. Тэхнічныя падрабязнасці занесеныя ў кансоль.
-xss.notify.showConsole=Адкрыць кансоль
-xss.notify.showConsole.accessKey=аб
-xss.reason.filterXGet=Адфільтраваны падазроны запыт: Арыгінальны URL-адрас [%1$S] запытаны са старонкі [%2$S]. (Адфільтраваны адрас: [%3$S])
-xss.reason.filterXGetRef=Адфільтраваны падазроны «referer»: URL-запыт да [%1$S] са старонкі [%2$S]. (Адфільтраваны адрас: [%3$S])
-xss.reason.filterXPost=Адфільтраваная падазроная загрузка з [%2$S] да [%1$S]: запыт ператвораны ў GET-запыт для запампоўкі.
-unsafeReload.warning=Небяспечная перазагрузка падазронага\n\n%1$S [%2$S]\n\nад [%3$S]\n\nNoScript НЕ зможа абараніць гэты запыт!\n
-metaRefresh.notify=NoScript заблакаваў <META>-перанакіраванне ўнутры элементу <NOSCRIPT>: %S за %S сек.
-metaRefresh.notify.follow=Ісці па перанакіраванні
-metaRefresh.notify.follow.accessKey=F
-notify.options=Наладкі
-notify.options.accessKey=O
-reset.title=Скінуць NoScript
-reset.warning=УСЕ наладкі NoScript і дазволы для сайтаў будуць скінутыя да іх значэнняў па змаўчанні.\nГэтае дзеянне не можа быць скасавана.\nПрацягваць?
-bookmarkSync.title=Закладка канфігурацыі NoScript
-bookmarkSync.message=Гэтая закладка прызначаная НЕ для адкрыцця, а для сінхранізацыі з дапамогай сэрвісаў кшталту Weave альбо пашырэння XMarks.
-allowed.glb-emb=Скрыпты цалкам дазволеныя, але некаторыя ўкладанні заблакаваныя
-bookmarkSync.confirm=NoScript знайшоў закладку канфигурацыі меркавана захаваную на\n%S.\nВы сапраўды хочаце перазапісаць лакальную канфігурацыю зместам гэтай закладкі?
-ABE.notify=Запыт %1$S адфільтраваны ABE: <%2$S> %3$S
-ABE.chooseEditor=Калі ласка, абярыце тэкставы рэдактар для набораў правілаў ABE
-ABE.syntaxError=Сінтаксічная памылка ў наборы правілаў ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Дазваляць усе з %S
-allowTempFrom=Часова дазволіць усе з %S
-siteInfo.confirm=Вы збіраецеся атрымаць даведку аб сайце "%1$S"\nдаслаўшы запыт да %2$S.\nПрацягваць?
-siteInfo.tooltip=Middle-click альбо shift+click для даведкі аб сайце...
-ef.activate=Фільтр %S
-ef.options=Наладкі %S…
-ef.newName=Увядзіце назву новага фільтра:
-ef.locateExe=Выберыце выканальны файл для фільтра %S
-disable=Адключыць %S
-disable.accessKey=D
-removal.title=Папярэджанне аб паніжэнні бяспекі
-removal.message=Адключаючы або адусталёўваючы NoScript, вы адмаўляецеся ад ЎСЁЙ абароны, забяспечваемай NoScript.\n\nКалі вам надакучыла апрацоўваць дазволы для скрыптоў на кожным сайце, існуе больш бяспечны выбар.\n\nNoScript можа спыніць блакаванне скрыптоў, акрамя тых, што вы пазначыце як ненадзейныя, тым часам абараняючы вас з дапамогай самых перадавых захадаў бяспекі супраць XSS, Clickjacking, CSRF і іншых вэб-пагроз.\n\nВы сапраўды хочаце пазбавіцца УСЕЙ абароны NoScript?\n
-removal.no=Не, толькі спыніць блакіроўку скрыптоў
-removal.yes=Так, зняць УСЮ абарону
-incompatibleOptions.title=Папярэджанне аб несумяшчальных наладках
-incompatibleOptions="%1$S"\nнесумяшчальная з "%2$S".\bУключыць першую і адключыць апошнюю?
diff --git a/extensions/noscript/chrome/locale/bg-BG/noscript/about.properties b/extensions/noscript/chrome/locale/bg-BG/noscript/about.properties
deleted file mode 100644
index a46819c..0000000
--- a/extensions/noscript/chrome/locale/bg-BG/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Допълнителна защита за вашия Firefox: NoScript контролира JavaScript, Java (и други добавки) за избрани от вас сайтове (например, вашият личен банков сайт). Предотвратява използването на "дупки" в сигурността от всякакъв вид (познати и непознати) без загуба на функционалност… Експертите ще се съгласят: Със NoScript вашият браузър е в безопасност :-)
-aboutTitle=За %S
-extensionContributors=Сътрудници:
-extensionContributors.tip=Хора, на които трябва да сте признателни за тази добавка
-extensionCreatorLabel=Автор:
-changelog=Промени
-changelog.tip=Покажи промените
-license=Лиценз
-license.tip=Прочети на лиценза
-logo.tip=Посети уеб-сайта на тази добавка
-sponsor.tip=Посети уеб-сайта на спонсора
-informaction.tip=Посети сайта InformAction
-extensionHomepage.tip=Посети уеб-сайта на тази добавка
-extensionCreator.tip=Посети уеб-сайта на автора
-version=Версия %S
diff --git a/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.dtd b/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.dtd
deleted file mode 100644
index 6626466..0000000
--- a/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Настройки…">
-<!ENTITY noscriptOptions.accesskey "Н">
-<!ENTITY noscriptOptionsLong "Настройки на NoScript">
-<!ENTITY noscriptAbout "За NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Можете да зададете в кои уеб-сайтове е позволено да се използват скриптовете. Напишете адреса или домейна (например &quot;http://www.site.com&quot; или &quot;site.com&quot;) на сайта, който искате да разрешите и натиснете Разреши.">
-<!ENTITY noscriptWebAddress "Адрес на уеб-сайта:">
-<!ENTITY noscriptAllow "Разреши">
-<!ENTITY noscriptAllow.accesskey "Р">
-<!ENTITY noscriptForbid "Забрани">
-<!ENTITY noscriptForbid.accesskey "З">
-<!ENTITY noscriptTrust "Маркиране като Надежден">
-<!ENTITY noscriptTrust.accesskey "Н">
-<!ENTITY noscriptUntrust "Маркиране като Ненадежден">
-<!ENTITY noscriptUntrust.accesskey "е">
-<!ENTITY noscriptRemoveSelected "Премахване на избраните сайтове">
-<!ENTITY noscriptGloballyEnabled "Скриптовете са напълно разрешени (опасно)">
-<!ENTITY noscriptAutoReload "Автоматично презареждай сайтовете, когато разрешението бъде променено">
-<!ENTITY noscriptGeneral "Общи">
-<!ENTITY noscriptAppearance "Изглед">
-<!ENTITY noscriptShow "Покажи…">
-<!ENTITY noscriptCtxMenu "Контекстно меню">
-<!ENTITY noscriptStatusIcon "Икона в статус лентата">
-<!ENTITY noscriptFullAddr "Пълен адрес (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Пълен домейн (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Втори домейн (noscript.net)">
-<!ENTITY noscriptTempCmd "Разреши временно […]">
-<!ENTITY noscriptSound "Звуково известие при блокиране на скрипт">
-<!ENTITY noscriptImport "Внасяне">
-<!ENTITY noscriptImport.accesskey "В">
-<!ENTITY noscriptExport "Изнасяне">
-<!ENTITY noscriptExport.accesskey "И">
-<!ENTITY noscriptNotify "Показвай съобщение за блокираните скриптове">
-<!ENTITY noscriptNotify.bottom "Постави съобщението в дъното на екрана">
-<!ENTITY noscriptSound.choose "Избери">
-<!ENTITY noscriptSound.choose.accesskey "И">
-<!ENTITY noscriptSound.play "Прослушай">
-<!ENTITY noscriptSound.play.accesskey "р">
-<!ENTITY noscriptSound.reset "Възстанови обичайните настройки">
-<!ENTITY noscriptSound.reset.accesskey "о">
-<!ENTITY noscriptAdvanced "Разширени">
-<!ENTITY noscriptAdditionalPermissions "Допълнителни разрешения за доверените сайтове">
-<!ENTITY noscriptAllowClipboard "Разрешаване на текстово копиране и поставяне от клипборда">
-<!ENTITY noscriptAdditionalRestrictions "Допълнителни забрани за ненадеждни сайтове">
-<!ENTITY noscriptPlugins "Приставки">
-<!ENTITY noscriptContentBlocker "Прилагане на тези ограничения и към доверените сайтове">
-<!ENTITY noscriptForbidJava "Забрани Java™">
-<!ENTITY noscriptForbidXSLT "Забрани XSLT">
-<!ENTITY noscriptForbidSilverlight "Забрани Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Забрани &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Забрани &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Забрани @font-face">
-<!ENTITY noscriptForbidWebGL "Забрани WebGL">
-<!ENTITY noscriptForbidMedia "Забрани &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Забрани Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Забрани други плъгини">
-<!ENTITY noscriptReloadWarn "Тези настройки ще имат ефект на нови или (ръчно) презаредени страници">
-<!ENTITY noscriptConfirmUnblock "Искане за разрешение преди временно разрешаване на обект">
-<!ENTITY noscriptStatusLabel "Обозначение в статус лентата">
-<!ENTITY noscriptForbidBookmarklets "Забрани bookmarklet">
-<!ENTITY noscriptShowPlaceholder "Покажи иконата">
-<!ENTITY noscriptTruncateTitle "Отрежи имената на документите">
-<!ENTITY noscriptFixLinks "Направи опит да поправиш JavaScript линковете">
-<!ENTITY noscriptAllowBookmarks "Разреши всички сайтове в отметките">
-<!ENTITY noscriptAllowViaBookmarks "Разрешавай сайтове отваряни чрез отметките">
-<!ENTITY noscriptAllowPing "Разрешавай &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Разрешаване на локални връзки">
-<!ENTITY noscriptForbidPing "Забрани &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Забраняване на META пренасочвания в &lt;NOSCRIPT&gt; елементи">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "З">
-<!ENTITY noscriptNotifyMeta "Показване на съобщения за блокирани МЕТА пренасочвания">
-<!ENTITY noscriptNotifyMeta.accesskey "М">
-<!ENTITY noscriptWhitelist "Бял списък">
-<!ENTITY noscriptPermissions "Разрешения">
-<!ENTITY noscriptRefresh "Обновяване">
-<!ENTITY noscriptNotifications "Известия">
-<!ENTITY noscriptToolbarToggle "Щракване с ляв бутон върху иконата на NoScript в лентата превключва разрешенията за конкретния сайт">
-<!ENTITY noscriptTrusted "Надеждни">
-<!ENTITY noscriptUntrusted "Ненадеждни">
-<!ENTITY noscriptUnknown "Неизвестни">
-<!ENTITY noscriptAdd "Добавяне">
-<!ENTITY noscriptAdd.accesskey "Д">
-<!ENTITY noscriptClose "Затваряне">
-<!ENTITY noscriptSiteManager "Управление на сайтове">
-<!ENTITY noscriptSecurityManager "Управление на защитата">
-<!ENTITY noscriptPolicies "Условия">
-<!ENTITY noscriptDefaultPolicies "Обичайни условия">
-<!ENTITY noscriptSitePolicies "Специфични условия">
-<!ENTITY noscriptNselNever "Скриване на &lt;NOSCRIPT&gt; елементи">
-<!ENTITY noscriptNselForce "Показване на &lt;NOSCRIPT&gt; елемент, който следва блокиран &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Временно позволи използване на java от всички сайтове">
-<!ENTITY noscriptDescription "Допълнителна защита за вашия Firefox: NoScript контролира JavaScript, Java (и други добавки) за избрани от вас сайтове (например, вашият личен банков сайт). Предотвратява използването на &quot;дупки&quot; в сигурността от всякакъв вид (познати и непознати) без загуба на функционалност… Експертите ще се съгласят: Със NoScript вашият браузър е в безопасност :-)">
-<!ENTITY noscriptOptBlockCssScanners "Блокиране на CSS-базирани скенери">
-<!ENTITY noscriptOptFilterXGet "Изчистване на подозрителни крос-сайт заявки">
-<!ENTITY noscriptOptFilterXPost "Превръщане на POST крос-сайт заявките в GET заявки">
-<!ENTITY noscriptShowConsole "Показване на конзолата…">
-<!ENTITY noscriptShowConsole.accesskey "П">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS ЧЗВ…">
-<!ENTITY noscriptXssFaq.accesskey "Ч">
-<!ENTITY noscriptUnsafeReload "Незащитено презареждане">
-<!ENTITY noscriptUnsafeReload.accesskey "п">
-<!ENTITY noscriptXssExceptions "Anti-XSS Защита - изключения">
-<!ENTITY noscriptXssExceptions.description "Направленията съвпадащи с тези обичайни изрази НЯМА да бъдат защитени от XSS.">
-<!ENTITY noscriptMatchSample "Пример за съвпадане:">
-<!ENTITY noscriptReset "Нулиране">
-<!ENTITY noscriptReset.accesskey "Н">
-<!ENTITY noscriptResetDef "Възстановяване на стандартните">
-<!ENTITY noscriptResetDef.accesskey "у">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Отменяне на временните разрешения">
-<!ENTITY noscriptRevokeTemp.accesskey "в">
-<!ENTITY noscriptNoUntrustedPlaceholder "Не показвай обекти идващи от сайтове маркирани като ненадеждни">
-<!ENTITY noscriptCollapseBlockedObjects "Свиване на блокираните обекти">
-<!ENTITY noscriptExceptions "Изключения…">
-<!ENTITY noscriptBlockedObjects "Блокирани обекти">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Блокиране на всеки обект идващ от сайт маркиран като ненадежден">
-<!ENTITY noscriptTempAllowPage "Временно разрешаване на всичко за тази страница">
-<!ENTITY noscriptTempAllowPage.accesskey "р">
-<!ENTITY noscriptAllowPage "Разрешаване на всичко на страницата">
-<!ENTITY noscriptAllowPage.accesskey "в">
-<!ENTITY noscriptTempToPerm "Запомняне на разрешенията">
-<!ENTITY noscriptTempToPerm.accesskey "м">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS ЧЗВ">
-<!ENTITY noscriptHttpsFaq.accesskey "Ч">
-<!ENTITY noscriptHttps.behavior "Действие">
-<!ENTITY noscriptHttps.cookies "Бисквитки">
-<!ENTITY noscriptHttps.description "Забраняване на активно съдържание, освен ако не идва от защитена (HTTPS) връзка:">
-<!ENTITY noscriptHttps.never "Никога">
-<!ENTITY noscriptHttps.proxy "При използване на прокси (препоръчително с Tor)">
-<!ENTITY noscriptHttps.always "Винаги">
-<!ENTITY noscriptHttpsForced "Принуждаване на следните сайтове да използват защитена (HTTPS) връзка:">
-<!ENTITY noscriptHttpsForcedExceptions "Никога да не се използва защитена връзка за следните сайтове:">
-<!ENTITY noscriptSecureCookies "Разрешаване на автоматичното управление на защитени бисквитки">
-<!ENTITY noscriptSecureCookiesForced "Принуждаване за криптиране на всички бисквитки получени от HTTPS, за следните сайтове:">
-<!ENTITY noscriptSecureCookiesExceptions "Игнориране на незащитените бисквитки за следните сайтове:">
-<!ENTITY noscriptClearClickTitle "ClearClick предупреждение">
-<!ENTITY noscriptClearClickHeader "Потенциална опасност от клик-отвличане/опит за пренасочване!">
-<!ENTITY noscriptClearClickDescription "NoScript прихвана взаимодействие между скрит елемент и мишката или клавиатурата. Натиснете върху картинката отгоре, за да превключите между подозрителната и чистата версия.">
-<!ENTITY noscriptClearClickOpt "ClearClick защита на страници...">
-<!ENTITY noscriptClearClickReport "Доклад">
-<!ENTITY noscriptClearClickReport.accesskey "Д">
-<!ENTITY noscriptClearClickReportId "Доклад №:">
-<!ENTITY noscriptTrustedPagesAdj "надеждни">
-<!ENTITY noscriptUntrustedPagesAdj "ненадеждни">
-<!ENTITY noscriptKeepLocked "Остави този елемент заключен (препоръчително)">
-<!ENTITY noscriptEmbeddings "Вградени обекти">
-<!ENTITY noscriptPrev "Предишен">
-<!ENTITY noscriptNext "Следващ">
-<!ENTITY noscriptFrameOptErr.title "Това съдържание не може да бъде показано в рамка">
-<!ENTITY noscriptFrameOptErr.desc "От съображения за сигурност, издателят на това съдържание не разрешава то да бъде показано в рамка">
-<!ENTITY noscriptFrameOptErr.link "Натиснете тук, за да отворите съдържанието в нов прозорец">
-<!ENTITY noscriptBookmarkSync "Записване на настройките за NoScript като отметка, за по-лесно синхронизиране">
-<!ENTITY noscriptShowReleaseNotes "Показване на промените в новата версия">
-<!ENTITY ABE "АВЕ">
-<!ENTITY ABE.accesskey "А">
-<!ENTITY ABE.rulesets.label "Правила:">
-<!ENTITY ABE.enabled.label "Разрешаване на АВЕ (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Разрешаване на сайтовете да прилагат собствени правила">
-<!ENTITY ABE.edit.label "Редактиране">
-<!ENTITY ABE.edit.accesskey "Р">
-<!ENTITY ABE.enable.label "Разрешаване">
-<!ENTITY ABE.enable.accesskey "р">
-<!ENTITY ABE.disable.label "Изключване">
-<!ENTITY ABE.disable.accesskey "И">
-<!ENTITY ABE.refresh.label "Обновяване">
-<!ENTITY ABE.refresh.accesskey "О">
-<!ENTITY noscriptUninstall "Деинсталиране">
-<!ENTITY noscriptRecentBlocked "Наскоро блокирани сайтове">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.properties b/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.properties
deleted file mode 100644
index a8d91f0..0000000
--- a/extensions/noscript/chrome/locale/bg-BG/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Разрешаване на скриптовете изцяло (опасно)
-forbidGlobal=Забрана на скриптовете напълно (препоръчва се)
-allowLocal=Разреши %S
-allowTemp=Временно разреши %S
-forbidLocal=Забрани %S
-allowed.glb=Опасност! Скриптовете са изцяло разрешени
-allowed.yes=Скриптовете в момента са разрешени
-allowed.prt=Скриптовете са частично разрешени.
-allowed.no=Скриптовете в момента са забранени
-global.warning.title=Предупреждение!
-global.warning.text=Скриптовете ще бъдат напълно разрешени (за всеки сайт).\n Това е потенциално опасно действие.\n Наистина ли искате да продължите?
-audio.samples=Звукови примери
-confirm=Сигурни ли сте?
-alwaysAsk=Винаги питай за разрешение
-notifyHide=Скрий след %S секунди
-trust=Надежден %S
-distrust=Маркиране на %S като ненадежден
-untrustedOrigin=ненадежден произход
-xss.notify.generic=NoScript филтрира потенциален опит за крос-сайт скрипт (XSS) от %S. Техническите детайли са записани в Конзолата.
-xss.notify.showConsole=Показване на конзолата…
-xss.notify.showConsole.accessKey=П
-xss.reason.filterXGet=Изчистена е подозрителна заявка. Оригиналният адрес [%1$S] e заявен от [%2$S]. Изчистен адрес: [%3$S].
-xss.reason.filterXGetRef=Изчистен е подозрителен изпращач на заявки. Адресът [%1$S] е заявен от [%2$S]. Изчистен изпращач: [%3$S].
-xss.reason.filterXPost=Изчистен е подозрителен ъплоуд към [%1$S] от [%2$S], преобразуван като заявка за даунлоуд.
-unsafeReload.warning=ОПАСНО зареждане на подозрителния\n\n%1$S [%2$S]\n\nОТ %3$S]\n\nNoScript НЕ може да защити тази заявка!\n
-metaRefresh.notify=NoScript блокира <META> пренасочване в <NOSCRIPT> елемент: %S в %S секунди.
-metaRefresh.notify.follow=Следване на пренасочването
-metaRefresh.notify.follow.accessKey=С
-notify.options=Настройки
-notify.options.accessKey=Н
-reset.title=NoScript Нулиране
-reset.warning=ВСИЧКИ настройки и разрешения на сайтове в NoScript ще бъдат върнати до тяхната първоначална стойност.\nТова действие не може да бъде отменено след това.\nИскате ли да продължите?
-bookmarkSync.title=NoScript отметка с настройки
-bookmarkSync.message=Тази отметка НЕ е предназначена за отваряне, а за синхронизиране чрез използването на услуги от добавки като Weave или XMarks.
-bookmarkSync.confirm=NoScript намери конфигурационна отметка, запазена в\n%S.\nНаистина ли искате да презапишете настройките на NoScript?
-ABE.notify=Заявка %1$S филтрирана от АВЕ: <%2$S> %3$S
-ABE.chooseEditor=Моля, изберете текстов редактор за АВЕ правилата
-allowFrom=Разрешаване на всичко от %S
-allowTempFrom=Временно разрешаване на всичко от %S
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/bn-IN/noscript/about.properties b/extensions/noscript/chrome/locale/bn-IN/noscript/about.properties
deleted file mode 100644
index 6d89d5b..0000000
--- a/extensions/noscript/chrome/locale/bn-IN/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=ফায়ারফক্সের জন্য অতিরিক্ত সুরক্ষা: নোস্ক্রিপট শুধুমাত্র আপনার বিশ্বাসযোগ্য এলাকারই কাজ করবে (যেমন আপনার বাঙ্কের ওয়েবসাইট). বিশেষজ্ঞরা রাজি হবে: ফায়ারফক্সের সত্যিই নিরাপদ হয় নোস্ক্রিপটের সঙ্গে :-)
-aboutTitle=বিষয় %S
-extensionContributors=অবদানকারী
-extensionContributors.tip=আপনি এই এক্সটেনশন জন্য ধন্যবাদ হবে
-extensionCreatorLabel=লেখক
-changelog=পরিবর্তনের তালিকা
-changelog.tip=পরিবর্তনেরতালিকা দেখাও
-license=লাইসেন্স
-license.tip=শেষ ইউজার লাইসেন্স পড়ুন
-logo.tip=এক্সটেনশনের নিজস্বওয়েবসাইট দেখুন
-sponsor.tip=পৃষ্ঠপোষক নিজস্বওয়েবসাইট দেখুন
-informaction.tip=ইনফরমঅ্যাকশনের নিজস্বওয়েবসাইট দেখুন
-extensionHomepage.tip=এক্সটেনশনের নিজস্বপাতা দেখুন
-extensionCreator.tip=লেখকের নিজস্বপাতা দেখুন
-version=সংস্করণ %S
diff --git a/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.dtd b/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.dtd
deleted file mode 100644
index 66a2585..0000000
--- a/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "বিকল্প ...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "নোস্ক্রিপট বিকল্প">
-<!ENTITY noscriptAbout "নোস্ক্রিপটের বিষয়">
-<!ENTITY noscriptPermissionsText "আপনি যে ওয়েব সাইট থেকে স্ক্রিপ্ট চালানো অনুমোদিত হয় উল্লেখ করা যাবে. ঠিকানা বা সাইটের ডোমেইন লিখুন (যেমন &quot;http://www.site.com&quot; অথবা &quot;site.com&quot;)এবং তারপর মঞ্জুরি ক্লিক করুন।">
-<!ENTITY noscriptWebAddress "ওয়েবসাইটের ঠিকানাঃ">
-<!ENTITY noscriptAllow "মঞ্জুর">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "নিষেধ">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "বিশ্বস্ত হিসাবে চিহ্নিত করুন">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "অনির্ভরযোগ্য হিসাবে চিহ্নিত করুন">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "নির্বাচিত সাইট অপসারন">
-<!ENTITY noscriptGloballyEnabled "স্ক্রিপ্ট সর্বত্র অনুমোদিত(বিপজ্জনক)">
-<!ENTITY noscriptAutoReload "অনুমতি পাওয়ার পর পাতাটি আবার খুলবে সয়ংক্রিয় হওয়ার জন্য">
-<!ENTITY noscriptGeneral "সাধারন">
-<!ENTITY noscriptAppearance "চেহারা">
-<!ENTITY noscriptShow "দেখান ...">
-<!ENTITY noscriptCtxMenu "বর্ণনাপ্রাসঙ্গিক মেনু">
-<!ENTITY noscriptStatusIcon "স্থিতি বার আইকন">
-<!ENTITY noscriptFullAddr "সম্পূর্ণ ঠিকানা (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "সম্পূর্ণ ডোমেইন (www.noscript.net)">
-<!ENTITY noscriptBaseDom "২য় লেভেল ভিত্তি ডোমেইন (noscript.net)...">
-<!ENTITY noscriptTempCmd "সাময়িকভাবে অনুমোদন [...]">
-<!ENTITY noscriptSound "অডিও ফিডব্যাক দেওয়া হবে যখন স্ক্রিপ্ট ব্লক করা হবে">
-<!ENTITY noscriptImport "আমদানি">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "রপ্তানি">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "ব্লক স্ক্রিপ্টের বার্তা দেখানো">
-<!ENTITY noscriptNotify.bottom "বার্তা নীচে আসবে">
-<!ENTITY noscriptSound.choose "বাছাই">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "খেলুন">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "আগের মত">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "অগ্রসর">
-<!ENTITY noscriptAdditionalPermissions "বিশ্বস্ত সাইটের জন্য অতিরিক্ত অনুমতি">
-<!ENTITY noscriptAllowClipboard "রিচ টেক্সট বহিরাগত ক্লিপবোর্ড থেকে কপি এবং পেস্ট করার অনুমতি প্রদান">
-<!ENTITY noscriptAdditionalRestrictions "অনির্ভরযোগ্য সাইটের জন্য অতিরিক্ত সীমাবদ্ধতা">
-<!ENTITY noscriptPlugins "প্লাগিন">
-<!ENTITY noscriptContentBlocker "বিশ্বাসযোগ্য সাইটেও এই সীমাবদ্ধতা প্রয়োগ">
-<!ENTITY noscriptForbidJava "নিষেধ Java™">
-<!ENTITY noscriptForbidXSLT "নিষেধ">
-<!ENTITY noscriptForbidSilverlight "নিষেধ Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "নিষেধ &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "নিষেধ &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "নিষেধ @font-face">
-<!ENTITY noscriptForbidMedia "নিষেধ &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "নিষেধ">
-<!ENTITY noscriptForbidPlugins "নিষেধ অন্যান্য plugins">
-<!ENTITY noscriptReloadWarn "এই অপশনটি নতুন বা এই পাতাতেই প্রভাব পরবে">
-<!ENTITY noscriptConfirmUnblock "অস্থায়ীভাবে একটি বস্তু আনব্লক করার আগে জিজ্ঞেস করবে">
-<!ENTITY noscriptStatusLabel "স্থিতি বার লেবেল">
-<!ENTITY noscriptForbidBookmarklets "নিষেধ bookmarklets">
-<!ENTITY noscriptShowPlaceholder "স্থানধারক আইকন দেখাও">
-<!ENTITY noscriptFixLinks "জাভা স্ক্রিপ্ট লিঙ্ক ফিক্সের চেষ্টা">
-<!ENTITY noscriptAllowBookmarks "বুকমার্ক মাধ্যমে খোলা সাইটগুলির মঞ্জুরি দিন">
-<!ENTITY noscriptAllowViaBookmarks "বুকমার্ক মাধ্যমে খোলা সাইটগুলির মঞ্জুরি দিন">
-<!ENTITY noscriptAllowPing "&lt;A PING…&gt;কে মঞ্জুরি">
-<!ENTITY noscriptAllowLocalLinks "লোকাল লিঙ্ক মঞ্জুরি">
-<!ENTITY noscriptForbidPing "&lt;A PING…&gt; নিষেধ">
-<!ENTITY noscriptForbidMetaRefresh "&lt;NOSCRIPT&gt; উপাদান ভিতরে মেটা redirections নিষেধ">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "মেটা রিডায়রেকশন ব্লকের বার্তা দেখান">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "বিশ্বাসীতালিকা">
-<!ENTITY noscriptPermissions "অনুমতি">
-<!ENTITY noscriptRefresh "পুনঃরায়">
-<!ENTITY noscriptNotifications "বিজ্ঞপ্তি">
-<!ENTITY noscriptToolbarToggle "নোস্ক্রিপ্ট টুলবার বাটন রেখে ক্লিক করে বর্তমান শীর্ষ স্তরের সাইটের জন্য অনুমতি টগল">
-<!ENTITY noscriptTrusted "নির্ভরযোগ্য">
-<!ENTITY noscriptUntrusted "অনির্ভরযোগ্য">
-<!ENTITY noscriptUnknown "অচেনা">
-<!ENTITY noscriptAdd "যোগ">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "বন্ধ">
-<!ENTITY noscriptSiteManager "সাইট ম্যানেজার">
-<!ENTITY noscriptSecurityManager "নিরাপত্তা ম্যানেজার">
-<!ENTITY noscriptPolicies "কর্মপন্থা">
-<!ENTITY noscriptDefaultPolicies "ডিফল্ট নীতি">
-<!ENTITY noscriptSitePolicies "সাইট সংক্রান্ত নীতি">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt; আবহাওয়া লুকান">
-<!ENTITY noscriptNselForce "&lt;NOSCRIPT&gt; দেখান যেটি &lt;SCRIPT&gt; আটকেছে">
-<!ENTITY noscriptAutoAllowTopLevel "সাময়িকভাবে ডিফল্টরূপে উপরের স্তরের সাইট অনুমোদন">
-<!ENTITY noscriptDescription "ফায়ারফক্সের জন্য অতিরিক্ত সুরক্ষা: নোস্ক্রিপট শুধুমাত্র আপনার বিশ্বাসযোগ্য এলাকারই কাজ করবে (যেমন আপনার বাঙ্কের ওয়েবসাইট). বিশেষজ্ঞরা রাজি হবে: ফায়ারফক্সের সত্যিই নিরাপদ হয় নোস্ক্রিপটের সঙ্গে :-)">
-<!ENTITY noscriptOptBlockCssScanners "ব্লক CSS ভিত্তিক স্ক্যানার">
-<!ENTITY noscriptOptFilterXGet "ক্রস সাইট সন্দেহজনক অনুরোধ মুছুন">
-<!ENTITY noscriptOptFilterXPost "ডাটা অ অনুরোধ পাবার মধ্যে ক্রস সাইটের অনুরোধ চালু">
-<!ENTITY noscriptShowConsole "কনসোল দেখান ...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS প্রশ্ন">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "বিপজ্জনক রিলোড">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "XSSবিরোধী সুরক্ষা ব্যতীক্রম">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS.">
-<!ENTITY noscriptMatchSample "প্যাটার্ন ম্যাচিং নমুনা:">
-<!ENTITY noscriptReset "পুনরায় বসান">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "ডিফল্ট রিসেট">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "অস্থায়ী অনুমতি প্রত্যাহার">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "অনির্ভরযোগ্য হিসাবে চিহ্নিত সাইট থেকে আসছে অবজেক্টের জন্য কোন স্থানধারক">
-<!ENTITY noscriptCollapseBlockedObjects "সঙ্কুচিত ব্লক বস্তু">
-<!ENTITY noscriptExceptions "ব্যতিক্রমগুলি ...">
-<!ENTITY noscriptBlockedObjects "অবরুদ্ধ সামগ্রী">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "অনির্ভরযোগ্য সাইটগুলি থেকে আসা প্রতিটি সামগ্রী অবরুদ্ধ করা হবে">
-<!ENTITY noscriptTempAllowPage "সাময়িকভাবে এই সাইটের সব মঞ্জুর">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "এই সাইটের সব মঞ্জুর">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "পৃষ্ঠা অনুমতি স্থায়ী করা">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS প্রশ্নাবলী...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "আচরণ">
-<!ENTITY noscriptHttps.cookies "কুকি">
-<!ENTITY noscriptHttps.description "(HTTPS) সংযোগ ছাড়া সক্রিয় ওয়েবসাইটের বিষয়বস্তু নিষিদ্ধ">
-<!ENTITY noscriptHttps.never "কখনত্ত না">
-<!ENTITY noscriptHttps.proxy "যখন একটি প্রক্সি ব্যবহার">
-<!ENTITY noscriptHttps.always "সর্বদা">
-<!ENTITY noscriptHttpsForced "নিম্নলিখিত সাইটগুলি (HTTPS) সংযোগ ব্যাবহারের জন্য বাধ্য করা">
-<!ENTITY noscriptHttpsForcedExceptions "নিরাপদ নিম্নলিখিত সাইটগুলি জন্য (HTTPS) সংযোগে জোর করা হবেনাঃ">
-<!ENTITY noscriptSecureCookies "স্বয়ংক্রিয় নিরাপদ কুকি ম্যানেজমেন্ট সক্রিয়">
-<!ENTITY noscriptSecureCookiesForced "বিপজ্জনক নিম্নলিখিত সাইটগুলির মধ্যে HTTPS উপর সেট কুকি উপেক্ষা করুনঃ">
-<!ENTITY noscriptSecureCookiesExceptions "বিপজ্জনক নিম্নলিখিত সাইটগুলির মধ্যে HTTPS উপর সেট কুকি উপেক্ষা করুন:">
-<!ENTITY noscriptClearClickTitle "ক্লিয়ারক্লিক সতর্কবাণী">
-<!ENTITY noscriptClearClickHeader "সম্ভাব্য ক্লিকজাক / UI \'তে প্রচেষ্টা নিরাকরণ!">
-<!ENTITY noscriptClearClickDescription "নোস্ক্রিপ্ট একটি আংশিকভাবে গোপন উপাদান দিয়ে একটি মাউস বা কিবোর্ড যোগাযোগ রূদ্ধ. আটকান এবং স্পষ্ট সংস্করণের মধ্যে চক্র নীচের ইমেজে ক্লিক করুন.">
-<!ENTITY noscriptClearClickOpt "পৃষ্ঠা থেকে ক্লিয়ারক্লিক রক্ষা ...">
-<!ENTITY noscriptClearClickReport "প্রতিবেদন">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "প্রতিবেদন আইডিঃ">
-<!ENTITY noscriptTrustedPagesAdj "বিশ্বাসী">
-<!ENTITY noscriptUntrustedPagesAdj "অনির্ভরযোগ্য">
-<!ENTITY noscriptKeepLocked "এই উপাদানটি বদ্ধ রাখুন(প্রস্তাবিত)">
-<!ENTITY noscriptEmbeddings "শোয়ান">
-<!ENTITY noscriptPrev "পূর্ববর্তী">
-<!ENTITY noscriptNext "পরবর্তী">
-<!ENTITY noscriptFrameOptErr.title "এই সামগ্রী একটি ফ্রেমে দেখানো যাবে না">
-<!ENTITY noscriptFrameOptErr.desc "আপনার নিরাপত্তা রক্ষা, এই বিষয়বস্তুর প্রকাশক এটি একটি ফ্রেমে প্রদর্শন করা সম্ভব নয়.">
-<!ENTITY noscriptFrameOptErr.link "নতুম উইন্ডোতে খোলার জন এখানে ক্লিক করুন">
-<!ENTITY noscriptBookmarkSync "নোস্ক্রিপ্ট কনফিগারেশন জমা করুন বুকমার্কে সহজ সুসংগতির জন্য">
-<!ENTITY noscriptShowReleaseNotes "আপডেট রিলিজ নোট প্রদর্শন">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "নিয়ম সেটঃ">
-<!ENTITY ABE.enabled.label "সক্রিয় ABE">
-<!ENTITY ABE.siteEnabled.label "সাইট তাদের নিজস্ব বিধি সেট থেকে ধাক্কা মঞ্জুর">
-<!ENTITY ABE.edit.label "সম্পাদনা ...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "সক্রিয়">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "নিষ্ক্রিয়">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "ঝালান">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "মুছুন">
-<!ENTITY noscriptRecentBlocked "সম্প্রতি ব্লক সাইট">
-<!ENTITY noscriptExternalFilters "বাহ্যিক ফিল্টার">
-<!ENTITY noscriptEF.enable "বাহ্যিক ফিল্টার সক্রিয়">
-<!ENTITY noscriptEF.add "নতুন ফিল্টার...">
-<!ENTITY noscriptEF.executable "এক্সিকিউটেবল ফাইলঃ">
-<!ENTITY noscriptEF.browse "ব্রাউজ...">
-<!ENTITY noscriptEF.contentType "বিষয়বস্তু টাইপ (MIME) ফিল্টার করা হবে (সঠিক মিল বা রেগুলার এক্সপ্রেশন):">
-<!ENTITY noscriptEF.exceptions "এই সাইট থেকে আগত বস্তু ফিল্টার করবেন নাঃ">
-<!ENTITY noscriptEF.remove "অপসারণ">
-<!ENTITY noscriptPreset "নিরাপত্তার মাত্রা">
-<!ENTITY noscriptPreset.off "বন্ধ (আপনি কি গুরুতর?)">
-<!ENTITY noscriptPreset.low "সহজ যাচ্ছে (নিষিদ্ধ জিনিসের + ওয়েব নিরাপত্তা)">
-<!ENTITY noscriptPreset.medium "ক্লাসিক (বিশুদ্ধ + ওয়েব নিরাপত্তা)">
-<!ENTITY noscriptPreset.high "দুর্গ (সম্পূর্ণ লকডাউন)">
-<!ENTITY noscript.hoverUI "অনুমতি মেনু খুলবে যখন নোস্ক্রিপ্ট এর আইকনের উপর মাউস নিয়ে যাওয়া হবে">
-<!ENTITY noscriptDonate "সাহায্য করুন">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptForbidWebGL "WebGL প্রতিষেধ করুন">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.properties b/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.properties
deleted file mode 100644
index 2b47fcf..0000000
--- a/extensions/noscript/chrome/locale/bn-IN/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=স্ক্রিপ্ট সর্বত্র অনুমোদিত(বিপজ্জনক)
-forbidGlobal=স্ক্রিপ্ট সর্বত্র নিষেধ(বিপজ্জনক)
-allowLocal=অনুমোদিত %S
-allowTemp=স্থায়ী অনুমোদিত %S
-forbidLocal=নিষেধ %S
-allowed.glb=বিপদ!স্ক্রিপট সর্বত্র অনুমোদিত
-allowed.yes=স্ক্রিপট এখন অনুমোদিত
-allowed.prt=স্ক্রিপট আংশিকভাবে অনুমোদিত
-allowed.no=স্ক্রিপ্ট এখন নিষেধ
-global.warning.title=সাবধান!
-global.warning.text=Scripts are going to be allowed globally (for every site).\nThis is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=অডিও নমুনা
-confirm=আপনি কি নিশ্চিত?
-alwaysAsk=নিশ্চিতকরণ জন্য সর্বদা জিজ্ঞাসা
-notifyHide=%S সেকেন্ড পরে লুকাও
-trust=%S বিশ্বাসী
-distrust=%S কে অনির্ভরযোগ্য হিসাবে চিহ্নিত
-untrustedOrigin=একটি অনির্ভরযোগ্য উত্স
-xss.notify.generic=নোস্ক্রিপট সম্ভাব্য ফিল্টার করেছে ক্রস সাইট স্ক্রিপ্টিং (XSS) %S থেকে।কারিগরী বিবরণ কনসোলে লগ আউট হয়েছেন.
-xss.notify.showConsole=কনসোল দেখুন...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=সন্দেহজনক অনুরোধ
-xss.reason.filterXGetRef=সন্দেহজনক অনুরোধ বিতারিত। ইউআরএল [%1$S] [%2$S] থেকে অনুরোধ। বিতারন: [%3$S]।
-xss.reason.filterXPost=বিতারিত আপলোড [%1$S] থেকে [%2$S]তে: একটি ডাউনলোড শুধুমাত্র অনুরোধ গেট রুপান্তরিত
-unsafeReload.warning=[%3$S] থেকে সন্দেহজনক রিলোডs\n\n%1$S [%2$S]\n\nনোস্ক্রিপ্ট এই অনুরোধটি রক্ষা করবে না!\n
-metaRefresh.notify=নোস্ক্রিপ্ট একটি <META> আবরণীকে ব্লক করেছে <NOSCRIPT> উপাদান এর মধ্যে: %S ন %S সেকেন্ড।
-metaRefresh.notify.follow=পুনঃ দিকনির্দেশ অনুসরণ
-metaRefresh.notify.follow.accessKey=F
-notify.options=বিকল্প
-notify.options.accessKey=O
-reset.title=নোস্ক্রিপট রিসেট
-reset.warning=সব নোস্ক্রিপট পছন্দ এবং সাইট অনুমতি অবিলম্বে তাদের ডিফল্ট মান রিসেট হবে।\nএই কর্ম প্রত্যাবর্তন হবে না।\nআপনি এটি করতে চান?
-bookmarkSync.title=নোস্ক্রিপট কনফিগারেশন বুকমার্ক
-bookmarkSync.message=এই বুকমার্কটি খোলা হবে না, কিন্তূ সুসংগত করা যাবে Weave বা XMarks এর মত এক্সটেন্সান দ্বারা।
-bookmarkSync.confirm=নোস্ক্রিপ্ট আপাতদৃষ্টিতে একটি বুকমার্ক খুজে পেয়েছে যেটি রাখা আছে \n%S তে।\nআপনি কি সত্যিই এই বুকমার্ক বিষয়বস্তু মুছে নতুনটি আপনার স্থানীও নোস্ক্রিপ্ট কনফিগারেশনে রাখতে চান?
-ABE.notify=ABE কে %1$S ফিল্টারের জন্য অনুরোধঃ<%2$S> %3$S
-ABE.chooseEditor=ABE নিয়ম তৈরির জন্য একটি টেক্সট এডিটর নির্বাচন করুন
-ABE.syntaxError=ABE নিয়ম তৈরিতে সিনট্যাক্স ত্রুটি
-ABE.wanIpAsLocal=ওয়ান আইপি (%S) ∈ LOCAL
-allowFrom=%S এর সবকিছু অনুমোদন
-allowTempFrom=%S সবকিছু আপাতত অনুমোদন
-siteInfo.confirm=আপনি \"%1$S\" সাইটটির জানতে চাইছেন\n%2$S কে অনুসন্ধান উপস্থাপক করতে।\nআপনি কি এগিয়ে যেতে চান?
-siteInfo.tooltip=সাইট তথ্য জানার জন্য মধ্যম ক্লিক করুন অথবা শিফট + ক্লিক করুন ...
-ef.activate=ফিল্টার %S
-ef.options=%S অপশন...
-ef.newName=নতুন ফিল্টার এর নাম লিখুনঃ
-ef.locateExe=%S ফিল্টার জন্য এক্সিকিউটেবল ফাইল নির্বাচন করুন...
-disable=%S নিষ্ক্রিয়
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ca-AD/noscript/about.properties b/extensions/noscript/chrome/locale/ca-AD/noscript/about.properties
deleted file mode 100644
index 9f662e3..0000000
--- a/extensions/noscript/chrome/locale/ca-AD/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protecció addicional per al teu Firefox...
-aboutTitle=About %S
-extensionContributors=Contribuïdors:
-extensionContributors.tip=Persones a les quals heu d\'agrair aquesta extensió
-extensionCreatorLabel=Autor:
-changelog=Registre de canvis
-changelog.tip=Mostra el registre de canvis
-license=Llicència
-license.tip=Llegeix la llicència d\'usuari final
-logo.tip=Visita la web de l\'extensió
-sponsor.tip=Visita la web del patrocinador
-informaction.tip=Visita la pàgina d\'InformAction
-extensionHomepage.tip=Visita la pàgina de l\'extensió
-extensionCreator.tip=Visita la pàgina de l\'autor
-version=Versió %S
diff --git a/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.dtd
deleted file mode 100644
index 6705ec3..0000000
--- a/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opcions...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opcions de NoScript">
-<!ENTITY noscriptAbout "Quant a NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Podeu especificar quins llocs web poden executar seqüències. El tipus d&apos;adreça o el domini (p.ex. &quot;http://www.site.com&quot; o &quot;site.com&quot;) del lloc al qual voleu donar permissos i feu clic a Permet.">
-<!ENTITY noscriptWebAddress "Adreça del lloc web:">
-<!ENTITY noscriptAllow "Permet">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "Prohibeix">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Marca com a de confiança">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Marca com a de no confiança">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Suprimeix els llocs seleccionats">
-<!ENTITY noscriptGloballyEnabled "El JavaScript és permès globalment (perillós)">
-<!ENTITY noscriptAutoReload "Recarrega automàticament les pàgines afectades en canviar els permisssos">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Aparença">
-<!ENTITY noscriptShow "Mostra">
-<!ENTITY noscriptCtxMenu "Menú contextual">
-<!ENTITY noscriptStatusIcon "Icona de la barra d&apos;estat">
-<!ENTITY noscriptFullAddr "Adreces completes (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Dominis complets (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dominis de segon nivell (noscript.net)">
-<!ENTITY noscriptTempCmd "Permet temporalment [...]">
-<!ENTITY noscriptSound "Reprodueix un so en blocar les seqüències">
-<!ENTITY noscriptImport "Importa">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exporta">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostra un missatge amb les seqüències blocades">
-<!ENTITY noscriptNotify.bottom "Col loca el missatge a la part de baix">
-<!ENTITY noscriptSound.choose "Tria">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Reprodueix">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reinicia allò predeterminat">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avançades">
-<!ENTITY noscriptAdditionalPermissions "Permissos addicionals per a llocs de confiança">
-<!ENTITY noscriptAllowClipboard "Permet copiar i enganxar text enriquit des d&apos;un porta-retalls extern">
-<!ENTITY noscriptAdditionalRestrictions "Restriccions addicionals per a llocs en què desconfieu">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Prohibeix el Java™">
-<!ENTITY noscriptForbidXSLT "Prohibeix el XSLT">
-<!ENTITY noscriptForbidSilverlight "Prohibeix el Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Prohibeix el &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Prohibeix el &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Prohibeix el @font-face">
-<!ENTITY noscriptForbidWebGL "Prohibeix el WebGL">
-<!ENTITY noscriptForbidMedia "Prohibeix el &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Prohibeix el Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Prohibeix d&apos;altres connectors">
-<!ENTITY noscriptReloadWarn "Aquestes opcions prenen efecte en pàgines noves o recarregades (manualment)">
-<!ENTITY noscriptConfirmUnblock "Demana confirmaci� abans de desblocar un objecte temporalment">
-<!ENTITY noscriptStatusLabel "Etiqueta de la barra d&apos;estat">
-<!ENTITY noscriptForbidBookmarklets "Prohibeix les Adreces d&apos;inter�s">
-<!ENTITY noscriptShowPlaceholder "Mostra-ne les icones">
-<!ENTITY noscriptTruncateTitle "Talla els títols dels documents">
-<!ENTITY noscriptFixLinks "Intenta arreglar els enllaços en JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permet tots els llocs que trobes a les adreces d&apos;interès">
-<!ENTITY noscriptAllowViaBookmarks "Permet els indrets oberts mitjançant les adreces d&apos;interès">
-<!ENTITY noscriptAllowPing "Permet &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Perment enllaços locals">
-<!ENTITY noscriptForbidPing "Prohibeix &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Prohibeix redireccions META dins elements &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Llista blanca">
-<!ENTITY noscriptPermissions "Permissos">
-<!ENTITY noscriptRefresh "Actualitza">
-<!ENTITY noscriptNotifications "Notificacions">
-<!ENTITY noscriptToolbarToggle "El botó esquerre en la barra de tasques de NoScript alterna els permissos per als llocs de nivell alt">
-<!ENTITY noscriptTrusted "De confiança">
-<!ENTITY noscriptUntrusted "Sense confiança">
-<!ENTITY noscriptUnknown "Desconegut">
-<!ENTITY noscriptAdd "Afegeix">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Tanca">
-<!ENTITY noscriptSiteManager "Gestor de llocs">
-<!ENTITY noscriptSecurityManager "Gestor de seguretat">
-<!ENTITY noscriptPolicies "Política">
-<!ENTITY noscriptDefaultPolicies "Actuació per defecte">
-<!ENTITY noscriptSitePolicies "Actuació per a un lloc específic">
-<!ENTITY noscriptNselNever "Amaga els elements &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostra els elements &lt;NOSCRIPT&gt; que segueixen a un &lt;SCRIPT&gt; blocat">
-<!ENTITY noscriptAutoAllowTopLevel "Temporalment permet per defecte el màxim nivell per als llocs web">
-<!ENTITY noscriptDescription "Protecció extra per al vostre Firefox: NoScript permet JavaScript, Java (i d&apos;altres connectors) només per a dominis de confiança de la vostra elecció (p.ex. el lloc web del vostre banc). Aquesta llista blanca de bloqueig preventiu prevé l&apos;explotació de vulnerabilitats de seguretat (les que coneixem i les que no!) sense perdre funcionalitat... Els experts hi estan d&apos;acord: Firefox és realment més segur amb NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloca els escanejos basats en CSS">
-<!ENTITY noscriptOptFilterXGet "Saneja les peticions sospitoses a través d&apos;un lloc">
-<!ENTITY noscriptOptFilterXPost "Transforma les peticions POST a través d&apos;un lloc en peticions GET sense tantes dades">
-<!ENTITY noscriptShowConsole "Mostra la Consola...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS PMF...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "No és segur recarregar">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Excepcions a la protecció anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Les destinations que marquin aquestes expressions regulars NO seran protegides de XSS">
-<!ENTITY noscriptMatchSample "Mostra de patró de marcat:">
-<!ENTITY noscriptReset "Reinicia">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Reinicia a allò per defecte">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revocar els permisos temporals">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No marcador de posició d&apos;objectes procedents de llocs marcats com a no confiables">
-<!ENTITY noscriptCollapseBlockedObjects "Tancar els objectes bloquejats">
-<!ENTITY noscriptExceptions "Excepcions...">
-<!ENTITY noscriptBlockedObjects "Objectes Bloquejats">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquejar tots els objectes procedents de llocs marcats com a no confiables">
-<!ENTITY noscriptTempAllowPage "Temporalment permet tota aquesta pàgina">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Accepta tot el d&apos;aquesta pàgina">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Dona permisos permanentment">
-<!ENTITY noscriptTempToPerm.accesskey "d">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportament">
-<!ENTITY noscriptHttps.cookies "Galetes">
-<!ENTITY noscriptHttps.description "Prohibir contingut web a no ser que es tracti d&apos;una connexió segura (HTTPS):">
-<!ENTITY noscriptHttps.never "Mai">
-<!ENTITY noscriptHttps.proxy "Quan usi un proxy (recomanat amb Tor)">
-<!ENTITY noscriptHttps.always "Sempre">
-<!ENTITY noscriptHttpsForced "Forçar el seguir llocs que usin connexions segures (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Mai forçar llocs que usin connexions segures (HTTPS):">
-<!ENTITY noscriptSecureCookies "Activar Manegament Automàtic de Galetes Segures">
-<!ENTITY noscriptSecureCookiesForced "Forçar encriptació per totes les galetes creades amb HTTPS pels següents llocs:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorar galetes insegures creades amb HTTPS pels següents llocs:">
-<!ENTITY noscriptClearClickTitle "Advertència ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking Potencial / Intent de corregir UI">
-<!ENTITY noscriptClearClickDescription "NoScript ha interceptat una interacció de ratolí o reclat amb parcialment element ocult. Clica a la imatge superior per passar de la obstrucció a una versió neta.">
-<!ENTITY noscriptClearClickOpt "Protecció de ClearClick a les pàgines...">
-<!ENTITY noscriptClearClickReport "Reportar">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "de confiança">
-<!ENTITY noscriptUntrustedPagesAdj "de no confiança">
-<!ENTITY noscriptKeepLocked "Mantenir aquest element bloquejat (recomanat)">
-<!ENTITY noscriptEmbeddings "Objectes Incrustats">
-<!ENTITY noscriptPrev "Anterior">
-<!ENTITY noscriptNext "Següent">
-<!ENTITY noscriptFrameOptErr.title "Aquest contingut no pot ser visualitzat en un marc">
-<!ENTITY noscriptFrameOptErr.desc "Per protegir la teva seguretat, l&apos;editor d&apos;aquest contingut no té permís per mostrar-t&apos;ho en un marc.">
-<!ENTITY noscriptFrameOptErr.link "Clica aquí per obrir aquest contingut en una nova finestra">
-<!ENTITY noscriptBookmarkSync "Guarda la configuració de NoScript en una còpia de seguretat per a una major facilitat de sincronització.">
-<!ENTITY noscriptShowReleaseNotes "Mostrar les notes de llançament en les actualitzacions">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Activar ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Permetre que els llocs web proposin les seves normes">
-<!ENTITY ABE.edit.label "Editar...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Activar">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Desactivar">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Actualitzar">
-<!ENTITY ABE.refresh.accesskey "r">
-<!ENTITY noscriptUninstall "Desinatal·lar">
-<!ENTITY noscriptRecentBlocked "Llocs bloquejats recentment">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.properties b/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.properties
deleted file mode 100644
index e30ad49..0000000
--- a/extensions/noscript/chrome/locale/ca-AD/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permet JavaScript totalment (perillós)
-forbidGlobal=Prohibeix JavaScript totalment (aconsellat)
-allowLocal=Permet %S
-allowTemp=Admet %S temporalment
-forbidLocal=Prohibeix %S
-allowed.glb=Alerta! Heu permès JavaScript totalment
-allowed.yes=A hores d\'ara, teniu el JavaScript permès
-allowed.prt=A hores d\'ara, teniu el JavaScript permès parcialment
-allowed.no=A hores d\'ara, teniu el JavaScript prohibit
-global.warning.title=Alerta!
-global.warning.text=Aneu a permetre JavaScript (per a tots els llocs).\n És una acció potencialment perillosa.\nRealment voleu fer-ho?
-audio.samples=Mostres d\'àudio
-confirm=N\'esteu segur?
-alwaysAsk=Demana\'m sempre confirmació
-notifyHide=Amaga-ho després de %S segons
-trust=Confia en %S
-distrust=Desconfia en %S
-untrustedOrigin=Té un origen poc fiable
-xss.notify.generic=He filtrat un intent de travessar el lloc mitjançant un programa (XSS) de des de %S. Els detalls tècnics han estat apuntats a la Consola.
-xss.notify.showConsole=Mostra la Consola
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=He netejat una petició sospitosa. La URL d\'origen és [%1$S], sol·licitada des de [%2$S]. URL sanejada: [%3$S].
-xss.reason.filterXGetRef=He netejat una petició de referència sospitosa. La URL [%1$S] s\'ha demanat des de [%2$S]. Referència sanejada: [%3$S].
-xss.reason.filterXPost=He netejat una càrrega sospitosa cap a [%1$S] des de [%2$S] i l\'he transformada en una petició GET de només baixada.
-unsafeReload.warning=NO ÉS SEGUR recarregar un \n\n%1$S [%2$S]\n\n sospitós des de [%3$S]\n\n . NoScript no protegirà aquesta petició!\n
-metaRefresh.notify=NoScript ha blocat un redireccionament <META> dins un element <NOSCRIPT>: %S en %S segons.
-metaRefresh.notify.follow=Segueix el redireccionament
-metaRefresh.notify.follow.accessKey=F
-notify.options=Opcions
-notify.options.accessKey=O
-reset.title=Reinicia NoScript
-reset.warning=TOTES les preferències de NoScript i els permissos per a tots els llocs seran reiniciats als seus valors tot seguit.\nNo podeu revocar aquesta acció. Voleu continuar?
-bookmarkSync.title=Guardar Configuració de NoScript
-bookmarkSync.message=Aquest marcador no pretén ser obert, sinó que es sincronitza mitjançant un servei com Weave o l\'extensió XMarks.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Si us plau selecciona un editor de text per a les normes ABE
-allowFrom=Permetre tot de %S
-allowTempFrom=Permet temporalment tot de
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/cs-CZ/noscript/about.properties b/extensions/noscript/chrome/locale/cs-CZ/noscript/about.properties
deleted file mode 100644
index 066b2e2..0000000
--- a/extensions/noscript/chrome/locale/cs-CZ/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Mimořádná ochrana pro váš Firefox: NoScript povoluje JavaScript, Javu (a další zásuvné moduly) pouze pro důvěryhodné servery dle vašeho výběru (např. vaše stránka pro home-banking). Tento seznam důvěryhodných serverů založený na preventivním blokování přístupu předchází zneužití bezpečnostních děr (známých a dokonce i neznámých!) bez jakékoli ztráty na funkčnosti... Odborníci budou souhlasit: Firefox je skutečně bezpečnější s rozšířením NoScript :-)
-aboutTitle=O %S
-extensionContributors=Spolupracovníci:
-extensionContributors.tip=Lidé, kterým vděčíme za toto rozšíření
-extensionCreatorLabel=Autor:
-changelog=Seznam změn
-changelog.tip=Zobrazit seznam změn
-license=Licence
-license.tip=Přečíst licenci pro koncové uživatele
-logo.tip=Navštívit domovskou stránku rozšíření
-sponsor.tip=Navštívit domovskou stránku sponzora
-informaction.tip=Navštívit domovskou stránku InformAction
-extensionHomepage.tip=Navštívit domovskou stránku rozšíření
-extensionCreator.tip=Navštívit domovskou stránku autora
-version=Verze %S
diff --git a/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.dtd b/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.dtd
deleted file mode 100644
index 0a1889f..0000000
--- a/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Nastavení...">
-<!ENTITY noscriptOptions.accesskey "N">
-<!ENTITY noscriptOptionsLong "Nastavení NoScript">
-<!ENTITY noscriptAbout "O rozšíření NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Můžete si zvolit, které webové stránky mají povoleno spouštět skripty. Zadejte adresu (např. http://www.site.com nebo site.com) na které se nachází stránka, pro kterou chcete skripty povolit a klepněte na Povolit.">
-<!ENTITY noscriptWebAddress "Adresa webové stránky:">
-<!ENTITY noscriptAllow "Povolit">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Zakázat">
-<!ENTITY noscriptForbid.accesskey "Z">
-<!ENTITY noscriptTrust "Označit jako důvěryhodný">
-<!ENTITY noscriptTrust.accesskey "d">
-<!ENTITY noscriptUntrust "Označit jako nedůvěryhodný">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Odstranit vybrané stránky">
-<!ENTITY noscriptGloballyEnabled "JavaScript celkově povolit (nebezpečné)">
-<!ENTITY noscriptAutoReload "Automaticky aktualizovat stránky při změně povolení">
-<!ENTITY noscriptGeneral "Obecné">
-<!ENTITY noscriptAppearance "Zobrazení">
-<!ENTITY noscriptShow "Zobrazit...">
-<!ENTITY noscriptCtxMenu "Místní nabídka">
-<!ENTITY noscriptStatusIcon "Ikona ve stavovém řádku">
-<!ENTITY noscriptFullAddr "Úplné adresy (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Úplné domény (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Domény druhého řádu (noscript.net)">
-<!ENTITY noscriptTempCmd "Dočasně povolit [...]">
-<!ENTITY noscriptSound "Přehrát zvuk pokud jsou skripty zablokovány">
-<!ENTITY noscriptImport "Otevřít">
-<!ENTITY noscriptImport.accesskey "O">
-<!ENTITY noscriptExport "Uložit">
-<!ENTITY noscriptExport.accesskey "U">
-<!ENTITY noscriptNotify "Zobrazovat zprávu o blokovaných skriptech">
-<!ENTITY noscriptNotify.bottom "Umístit zprávu do spodní části">
-<!ENTITY noscriptSound.choose "Zvolit">
-<!ENTITY noscriptSound.choose.accesskey "Z">
-<!ENTITY noscriptSound.play "Přehrát">
-<!ENTITY noscriptSound.play.accesskey "h">
-<!ENTITY noscriptSound.reset "Nastavit výchozí">
-<!ENTITY noscriptSound.reset.accesskey "v">
-<!ENTITY noscriptAdvanced "Pokročilé">
-<!ENTITY noscriptAdditionalPermissions "Dodatečná povolení pro důvěryhodné stránky">
-<!ENTITY noscriptAllowClipboard "Povolit kopírování a vkládání textu z vnější schránky">
-<!ENTITY noscriptAdditionalRestrictions "Dodatečná omezení pro nedůvěryhodné stránky">
-<!ENTITY noscriptPlugins "Zásuvné moduly">
-<!ENTITY noscriptContentBlocker "Použít tato omezení i pro důvěryhodné stránky">
-<!ENTITY noscriptForbidJava "Zakázat Java™">
-<!ENTITY noscriptForbidXSLT "Zakázat XSLT">
-<!ENTITY noscriptForbidSilverlight "Zakázat Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Zakázat &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Zakázat &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Zakázat @font-face">
-<!ENTITY noscriptForbidWebGL "Zakázat WebGL">
-<!ENTITY noscriptForbidMedia "Zakázat &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Zakázat Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Zakázat ostatní zásuvné moduly">
-<!ENTITY noscriptReloadWarn "Tato nastavení se projeví u nově otevřených nebo (manuálně) aktualizovaných stránkách">
-<!ENTITY noscriptConfirmUnblock "Požadovat potvrzení při dočasném povolení objektu">
-<!ENTITY noscriptStatusLabel "Zobrazovat popisek ve stavovém řádku">
-<!ENTITY noscriptForbidBookmarklets "Zakázat bookmarklety">
-<!ENTITY noscriptShowPlaceholder "Zobrazovat zástupnou ikonu">
-<!ENTITY noscriptTruncateTitle "Zkrátit titulek stránky">
-<!ENTITY noscriptFixLinks "Pokusit se opravit odkazy tvořené JavaScriptem">
-<!ENTITY noscriptAllowBookmarks "Povolit stránky otevřené ze záložek">
-<!ENTITY noscriptAllowViaBookmarks "Povolit stránky otevřené ze záložek">
-<!ENTITY noscriptAllowPing "Povolit &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Povolit místní odkazy">
-<!ENTITY noscriptForbidPing "Zakázat &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Zakázat META přesměrování uvnitř elementů &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "M">
-<!ENTITY noscriptWhitelist "Výjimky">
-<!ENTITY noscriptPermissions "Povolení">
-<!ENTITY noscriptRefresh "Obnovení">
-<!ENTITY noscriptNotifications "Oznámení">
-<!ENTITY noscriptToolbarToggle "Klepnutí levým tlačítkem myši na ikonku Noscriptu ve stavovém řádku přepíná povolení pro doménu nejvyšší úrovně aktuální stránky">
-<!ENTITY noscriptTrusted "Důvěryhodné">
-<!ENTITY noscriptUntrusted "Nedůvěryhodné">
-<!ENTITY noscriptUnknown "Neznámé">
-<!ENTITY noscriptAdd "Přidat">
-<!ENTITY noscriptAdd.accesskey "P">
-<!ENTITY noscriptClose "Zavřít">
-<!ENTITY noscriptSiteManager "Správce stránek">
-<!ENTITY noscriptSecurityManager "Správce zabezpečení">
-<!ENTITY noscriptPolicies "Politika">
-<!ENTITY noscriptDefaultPolicies "Výchozí politika">
-<!ENTITY noscriptSitePolicies "Politika pro specifické stránky">
-<!ENTITY noscriptNselNever "Zakázat prvky &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Zobrazit prvek &lt;NOSCRIPT&gt; následující po zablokovaném prvku &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Dočasně povolit stránky domény nejvyšší úrovně">
-<!ENTITY noscriptDescription "Mimořádná ochrana pro váš Firefox: NoScript povoluje JavaScript, Javu (a další zásuvné moduly) pouze pro důvěryhodné servery dle vašeho výběru (např. vaše stránka pro home-banking). Tento seznam důvěryhodných serverů založený na preventivním blokování přístupu předchází zneužití bezpečnostních děr (známých a dokonce i neznámých!) bez jakékoli ztráty na funkčnosti... Odborníci budou souhlasit: Firefox je skutečně bezpečnější s rozšířením NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blokovat skenery založené na CSS">
-<!ENTITY noscriptOptFilterXGet "Zajistit podezřelé původce požadavku">
-<!ENTITY noscriptOptFilterXPost "Převést požadavky POST napříč stránkou na požadavky GET neobsahující data.">
-<!ENTITY noscriptShowConsole "Zobrazit konzolu...">
-<!ENTITY noscriptShowConsole.accesskey "k">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS - často kladené otázky">
-<!ENTITY noscriptXssFaq.accesskey "o">
-<!ENTITY noscriptUnsafeReload "Riskantní aktualizace">
-<!ENTITY noscriptUnsafeReload.accesskey "a">
-<!ENTITY noscriptXssExceptions "Ochrana proti XSS - výjimky">
-<!ENTITY noscriptXssExceptions.description "Cíle vyhovující těmto regulárním výrazům NEBUDOU CHRÁNĚNY proti XSS">
-<!ENTITY noscriptMatchSample "Ukázka vyhovující vzoru:">
-<!ENTITY noscriptReset "Vynulovat">
-<!ENTITY noscriptReset.accesskey "V">
-<!ENTITY noscriptResetDef "Výchozí nastavení">
-<!ENTITY noscriptResetDef.accesskey "z">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Zrušit dočasná povolení">
-<!ENTITY noscriptRevokeTemp.accesskey "č">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nezobrazovat zástupnou ikonu pro objekty pocházející z nedůvěryhodných stránek">
-<!ENTITY noscriptCollapseBlockedObjects "Skrýt zablokované objekty">
-<!ENTITY noscriptExceptions "Výjimky">
-<!ENTITY noscriptBlockedObjects "Blokované objekty">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokovat každý objekt pocházející z nedůvěryhodné stránky">
-<!ENTITY noscriptTempAllowPage "Dočasně povolit celou stránku">
-<!ENTITY noscriptTempAllowPage.accesskey "D">
-<!ENTITY noscriptAllowPage "Povolit pro celou stránku">
-<!ENTITY noscriptAllowPage.accesskey "s">
-<!ENTITY noscriptTempToPerm "Udělit trvale povolení pro tuto stránku">
-<!ENTITY noscriptTempToPerm.accesskey "t">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.properties b/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.properties
deleted file mode 100644
index 681ad3d..0000000
--- a/extensions/noscript/chrome/locale/cs-CZ/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=JavaScript celkově povolit (nebezpečné)
-forbidGlobal=JavaScript celkově zakázat (doporučeno)
-allowLocal=Povolit %S
-allowTemp=Dočasně povolit %S
-forbidLocal=Zakázat %S
-allowed.glb=Nebezpečí! JavaScript je celkově povolen
-allowed.yes=JavaScript je aktuálně povolen
-allowed.prt=JavaScript je částečně povolen
-allowed.no=JavaScript je aktuálně zakázán
-global.warning.title=Upozornění!
-global.warning.text=JavaScript bude nyní celkově povolen (pro všechny stránky).\n Toto je potenciálně nebezpečné jednání.\nOpravdu chcete pokračovat?
-audio.samples=Zvukové soubory
-confirm=Jste si jist(a)?
-alwaysAsk=Vždy požadovat potvrzení
-notifyHide=Skrýt po %S vteřinách
-trust=Přidat %S mezi důvěryhodné
-distrust=Přidat %S mezi nedůvěryhodné
-untrustedOrigin=nedůvěryhodný původ
-xss.notify.generic=NoScript zachytil možný pokus o narušení webové stránky (tzv. cross-site scripting) od %S. Technické podrobnosti byly zaznamenány do chybové konzoly.
-xss.notify.showConsole=Zobrazit konzolu...
-xss.notify.showConsole.accessKey=k
-xss.reason.filterXGet=Zajištěn podezřelý požadavek. Původní URL [%1$S] bylo vyžádáno od [%2$S]. Zajištěné URL: [%3$S].)
-xss.reason.filterXGetRef=Zajištěn podezřelý původce požadavku. URL [%1$S] bylo vyžádáno od [%2$S]. Zajištěný požadavek: [%3$S].)
-xss.reason.filterXPost=Zajištěn podezřelý upload na [%1$S] z [%2$S]: převeden na požadavek GET pouze pro download.
-unsafeReload.warning=RISKANTNÍ aktualizování podezřelého\n\n%1$S [%2$S]\n\nZ [%3$S]\n\nNoScript NEBUDE BLOKOVAT tento požadavek!
-metaRefresh.notify=NoScript zablokoval <META> přesměrování uvnitř elementu <NOSCRIPT> %S během %S sekund.
-metaRefresh.notify.follow=Uskutečnit přesměrování
-metaRefresh.notify.follow.accessKey=U
-notify.options=Nastavení
-notify.options.accessKey=N
-reset.title=NoScript - výchozí nastavení
-reset.warning=Veškerá nastavení a výjimky stránek NoScriptu budou nyní nastavena na výchozí hodnoty.\nPotvrzení této volby nemůže být vráceno zpět.\nChcete pokračovat?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/cy-GB/noscript/about.properties b/extensions/noscript/chrome/locale/cy-GB/noscript/about.properties
deleted file mode 100644
index c0372c2..0000000
--- a/extensions/noscript/chrome/locale/cy-GB/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Diogelwch ychwanegol ar gyfer Firefox: bydd NoScript yn caniatau JavaScript, Java (ac atodynnau eraill) dim ond ar gyfer y parthau dilys yr ydych chi wedi'u dewis (e.e. eich wefan bancio gartref). Mae'r dull rhwystro rhag blaen seiliedig ar wenrestr hwn yn atal camddefnyddio gwendidau diogelwch (hysbys a hyd yn oed anhysbys) heb golli unrhyw alluoedd... Bydd arbennigwyr yn cydsynio: gwirioneddol safach yw Firefox gyda NoScript :-)
-aboutTitle=Ynghylch %S
-extensionContributors=Cyfrannwyr:
-extensionContributors.tip=Y sawl dylech ddiolch iddynt ar gyfer yr estyniad hwn
-extensionCreatorLabel=Awdur:
-changelog=Log newidiadau
-changelog.tip=Dangos y log newidiadau
-license=Trwydded
-license.tip=Darllen trwydded y defnyddiwr terfynol
-logo.tip=Ymweld â hafan yr atodiad
-sponsor.tip=Ymweld â hafan y noddwr
-informaction.tip=Ymweld â hafan InformAction
-extensionHomepage.tip=Ymweld â hafan yr atodiad
-extensionCreator.tip=Ymweld â hafan yr awdur
-version=Fersiwn %S
diff --git a/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.dtd b/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.dtd
deleted file mode 100644
index c390ef0..0000000
--- a/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opsiynau">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opsiynau NoScript">
-<!ENTITY noscriptAbout "Yngylch NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Cewch enwi pa wefannau sy&apos;n cael rhedeg sgriptiau. Teipiwch gyfeiriad neu barth (e.e. &quot;http://www.site.com&quot; neu &quot;site.com&quot;) y safle rydych eisiau ei ganiatau ac wedyn cliciwch Caniatau.">
-<!ENTITY noscriptWebAddress "Cyfeiriad wefan">
-<!ENTITY noscriptAllow "Caniatau">
-<!ENTITY noscriptAllow.accesskey "I">
-<!ENTITY noscriptForbid "Gwahardd">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Marcio&apos;n Ddilys">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Marcio&apos;n Annilys">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Diddymu&apos;r Wefannau Sydd Wedi&apos;u Dewis">
-<!ENTITY noscriptGloballyEnabled "Caniateir sgriptiau ymhobman (peryglus)">
-<!ENTITY noscriptAutoReload "Ail-lwytho&apos;n awtomatig y tudalennau sydd wedi&apos;u haffeithio wrth fod hawliau&apos;n newid.">
-<!ENTITY noscriptGeneral "Cyffredinol">
-<!ENTITY noscriptAppearance "Ymddangosiad">
-<!ENTITY noscriptShow "Dangos...">
-<!ENTITY noscriptCtxMenu "Dewislen gyd-destunol">
-<!ENTITY noscriptStatusIcon "Eicon y bar statws">
-<!ENTITY noscriptFullAddr "Cyfeiriadau llawn (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Parthau llawn (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Sylfaen Parthau&apos;r 2ail lefel (noscript.net)">
-<!ENTITY noscriptTempCmd "Caniatau dros dro [...]">
-<!ENTITY noscriptSound "Adborth clywedol pan fydd sgriptiau wedi&apos;u rhwystro">
-<!ENTITY noscriptImport "Mewnforio">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Allforio">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Dangos negeseuon am sgriptiau sydd wedi&apos;u rhwystro">
-<!ENTITY noscriptNotify.bottom "Lleoli negeseuon ar y gwaelod">
-<!ENTITY noscriptSound.choose "Dewis">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Chwarae">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Ailosod y diffygwerth">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Uwch">
-<!ENTITY noscriptAdditionalPermissions "Hawliau ychwanegol ar gyfer wefannau dilys">
-<!ENTITY noscriptAllowClipboard "Caniatau copi testun bras o&apos;r clip-fwrdd allanol">
-<!ENTITY noscriptAdditionalRestrictions "Rhwystau ychwanegol ar gyfer wefannau annilys">
-<!ENTITY noscriptPlugins "Atodyn">
-<!ENTITY noscriptContentBlocker "Rhoi&apos;r rhwystrau hyn ar waith ar wefannau dilys hefyd">
-<!ENTITY noscriptForbidJava "Gwahardd Java™">
-<!ENTITY noscriptForbidXSLT "Gwahardd XSLT">
-<!ENTITY noscriptForbidSilverlight "Gwahardd Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Gwahardd &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Gwahardd &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Gwahardd @font-face">
-<!ENTITY noscriptForbidWebGL "Gwahardd WebGL">
-<!ENTITY noscriptForbidMedia "Gwahardd &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Gwahardd Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Gwahardd atodynnau eraill">
-<!ENTITY noscriptReloadWarn "Daw&apos;r opsiynau hyn i rym ar dudalennau newydd neu&apos;r rhai sydd wedi&apos;u ail-lwytho (trwy waith law)">
-<!ENTITY noscriptConfirmUnblock "Gofyn am gadarnhad cyn datrwystro gwrthrych dros dro">
-<!ENTITY noscriptStatusLabel "Label y bar statws">
-<!ENTITY noscriptForbidBookmarklets "Gwahardd nodau tudalen">
-<!ENTITY noscriptShowPlaceholder "Dangos eicon cadw lle">
-<!ENTITY noscriptTruncateTitle "Blaendorri teitlau dogfennau">
-<!ENTITY noscriptFixLinks "Ceisio trwsio dolennau JavaScript">
-<!ENTITY noscriptAllowBookmarks "Caniatau agor wefannau trwy nodau tudalen">
-<!ENTITY noscriptAllowViaBookmarks "Caniatau wefannau agorwyd trwy nodau tudalen">
-<!ENTITY noscriptAllowPing "Caniatau &lt;PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Caniatau dolennau lleol">
-<!ENTITY noscriptForbidPing "Gwahardd &lt;PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Gwahardd dargyfeiriadau META mewn elfennau &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Gwenrestr">
-<!ENTITY noscriptPermissions "Hawliau">
-<!ENTITY noscriptRefresh "Adfywio">
-<!ENTITY noscriptNotifications "Hysbysiadau">
-<!ENTITY noscriptToolbarToggle "Clicio chwith ar far offer NoScript yn toglo hawliau ar gyfer y wefan lefel-uchaf presennol">
-<!ENTITY noscriptTrusted "Dilys">
-<!ENTITY noscriptUntrusted "Annilys">
-<!ENTITY noscriptUnknown "Anhysbys">
-<!ENTITY noscriptAdd "Ychwanegu">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Cau">
-<!ENTITY noscriptSiteManager "Rheolwr y wefannau">
-<!ENTITY noscriptSecurityManager "Rheolwr diogelwch">
-<!ENTITY noscriptPolicies "Polisiau">
-<!ENTITY noscriptDefaultPolicies "Polisiau diofyn">
-<!ENTITY noscriptSitePolicies "Polisiau penodol y wefan">
-<!ENTITY noscriptNselNever "Cuddio elfennau &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Dangos yr elfen &lt;NOSCRIPT&gt; sy&apos;n dilyn elfan &lt;SCRIPT&gt; waharddedig">
-<!ENTITY noscriptAutoAllowTopLevel "Caniatau&apos;n ddiofyn dros dro wefannau lefel-uchaf">
-<!ENTITY noscriptDescription "Diogelwch ychwanegol ar gyfer Firefox: bydd NoScript yn caniatau JavaScript, Java (ac atodynnau eraill) dim ond ar gyfer y parthau dilys yr ydych chi wedi&apos;u dewis (e.e. eich wefan bancio gartref). Mae&apos;r dull rhwystro rhag blaen seiliedig ar wenrestr hwn yn atal camddefnyddio gwendidau diogelwch (hysbys a hyd yn oed anhysbys) heb golli unrhyw alluoedd... Bydd arbennigwyr yn cydsynio: gwirioneddol safach yw Firefox gyda NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Rhwystro sganwyr CSS-seiliedig">
-<!ENTITY noscriptOptFilterXGet "Glanhau ceisiadau amheus traws wefannol">
-<!ENTITY noscriptOptFilterXPost "Trawsffurfio ceisiadau POST traws wefannol yn geisiadau GET">
-<!ENTITY noscriptShowConsole "Dangos y Consol...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Ail-lwytho anniogel">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Eithriadau Amddiffyniad Gwrth-XSS">
-<!ENTITY noscriptXssExceptions.description "NI amddiffynir y cyrchfannau sy&apos;n cyfateb i&apos;r mynegiadau rheolaidd hyn yn erbyn XSS.">
-<!ENTITY noscriptMatchSample "Sampl cyfateb i batrwm:">
-<!ENTITY noscriptReset "Ailosod">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Ailosod y diffygwerthoedd">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Dirymu Hawliau Dros Dro">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Dim lle i&apos;w gadw ar gyfer gwrthychau a ddaw o wefannau wedi&apos;u marcio&apos;n annilys">
-<!ENTITY noscriptCollapseBlockedObjects "Talfyrru gwrthrychau wedi&apos;u rhwystro">
-<!ENTITY noscriptExceptions "Eithriadau...">
-<!ENTITY noscriptBlockedObjects "Gwrthrychau wedi&apos;u rhywstro">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Rhwystro pob gwrthrych a ddaw o wefan wedi&apos;i marcio&apos;n annilys">
-<!ENTITY noscriptTempAllowPage "Caniatau y dudalen hon dros dro">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Caniatau y dudalen hon i gyd">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Sefydlogi hawliau tudalennau">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.properties b/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.properties
deleted file mode 100644
index 9515cc0..0000000
--- a/extensions/noscript/chrome/locale/cy-GB/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Caniatáu sgriptiau ymhobman (peryglus)
-forbidGlobal=Gwahardd sgriptiau ymhobman (argymhellwyd)
-allowLocal=Caniatáu %S
-allowTemp=Caniatáu %S dros dro
-forbidLocal=Gwahardd %S
-allowed.glb=Peryg! Caniateir sgriptiau ymhobman
-allowed.yes=Caniateir sgriptiau ar hyn o bryd
-allowed.prt=Caniateir sgriptiau yn rhannol
-allowed.no=Gwaherddir sgriptiau ar hyn o bryd
-global.warning.title=Rhybudd!
-global.warning.text=Ar fin caniatáu sgriptiau ymhobman (ar gyfer pob wefan).\nGweithred beryglus gallai hyn fod.\nYdych chi wir eisiau parhau?
-audio.samples=Samplau clywedol
-confirm=Ydych chi'n sicr?
-alwaysAsk=Gofyn pob tro am gadarnhad
-notifyHide=Cuddio ar ôl %S seconds
-trust=Ymddiried yn %S
-distrust=Marcio %S fel Amheus
-untrustedOrigin=tarddiad amheus
-xss.notify.generic=Hidlodd NoScript gais at sgriptio traws wefannau (XSS) gan %S. Logwyd y manylion technegol ar y Consol.
-xss.notify.showConsole=Dangos y Consol...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Glanhawyd cais amheus. URL gwreiddiol [%1$S] ceisiwyd o [%2$S]. URL wedi ei lanhau: [%3$S].
-xss.reason.filterXGetRef=Glanhawyd cyfeiriwr cais amheus. URL [%1$S] ceisiwyd o [%2$S]. Cyfeiriwr wedi ei lanhau: [%3$S].
-xss.reason.filterXPost=Glanhawyd mewnlwyth amheus i [%1$S] o [%2$S]: trawsffurfiwyd yn gais GET llawrlwytho yn unig
-unsafeReload.warning=Ail-lwytho'n ANNIOGEL yr amheus\n\n%1$S[%2$S]\n\nO [%3$S]\n\nNI fydd NoScript yn diogelu y cais hwn!\n
-metaRefresh.notify=Rhwystrodd NoScript ddargyfeirio <META> mewn elfen <NOSCRIPT>: %S mewn %S eiliad.
-metaRefresh.notify.follow=Dilyn dargyfeiriad
-metaRefresh.notify.follow.accessKey=F
-notify.options=Opsiynau
-notify.options.accessKey=O
-reset.title=Ailosod NoScript
-reset.warning=Ailosodir yn syth HOLL ddewisiadau a hawliau safle NoScript i'w diffygwerthau.\nNi ellir gwirdroi'r weithred hon.\nYdych chi am barhau?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/da/noscript/about.properties b/extensions/noscript/chrome/locale/da/noscript/about.properties
deleted file mode 100644
index de314b4..0000000
--- a/extensions/noscript/chrome/locale/da/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Ekstra beskyttelse af din Firefox: NoScript tillader kun JavaScript, Java (og andre plugins) fra betroede domæner valgt af dig (f.eks. din netbanks hjemmeside). Denne whitelist-baserede forebyggende metode forhindrer udnyttelse af sikkerhedshuller (såvel kendte som ukendte!) uden tab af funktionalitet… Eksperter er enige: Firefox er mere sikker med NoScript :-)
-aboutTitle=Om %S
-extensionContributors=Bidragydere:
-extensionContributors.tip=Folk du burde takke for denne udvidelse
-extensionCreatorLabel=Udvikler:
-changelog=Ændringslog
-changelog.tip=Vis ændringslog
-license=Licens
-license.tip=Læs slutbrugerlicens
-logo.tip=Besøg udvidelsens hjemmeside
-sponsor.tip=Besøg sponsors hjemmeside
-informaction.tip=Besøg InformAction hjemmeside
-extensionHomepage.tip=Besøg udvidelsens hjemmeside
-extensionCreator.tip=Besøg udviklerens hjemmeside
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/da/noscript/noscript.dtd b/extensions/noscript/chrome/locale/da/noscript/noscript.dtd
deleted file mode 100644
index 8eea3fd..0000000
--- a/extensions/noscript/chrome/locale/da/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Indstillinger…">
-<!ENTITY noscriptOptions.accesskey "I">
-<!ENTITY noscriptOptionsLong "NoScript Indstillinger">
-<!ENTITY noscriptAbout "Om NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Du kan angive hvilke websteder der må udføre scripts. Indtast adresse eller domæne (f.eks. &quot;http://www.site.com&quot; eller &quot;site.com&quot;) på det websted du ønsker at tillade og klik på Tillad.">
-<!ENTITY noscriptWebAddress "Webstedets adresse:">
-<!ENTITY noscriptAllow "Tillad">
-<!ENTITY noscriptAllow.accesskey "T">
-<!ENTITY noscriptForbid "Forbyd">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Marker som betroet">
-<!ENTITY noscriptTrust.accesskey "B">
-<!ENTITY noscriptUntrust "Marker som ubetroet">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Fjern valgte websteder">
-<!ENTITY noscriptGloballyEnabled "Scripts globalt tilladt (farligt)">
-<!ENTITY noscriptAutoReload "Automatisk genindlæs berørte sider når tilladelser ændres">
-<!ENTITY noscriptGeneral "Generelt">
-<!ENTITY noscriptAppearance "Udseende">
-<!ENTITY noscriptShow "Vis…">
-<!ENTITY noscriptCtxMenu "Genvejsmenu">
-<!ENTITY noscriptStatusIcon "Statuslinjeikon">
-<!ENTITY noscriptFullAddr "Hele adresser (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Hele domæner (www.noscript.net)">
-<!ENTITY noscriptBaseDom "2. niveau domæner (noscript.net)">
-<!ENTITY noscriptTempCmd "Midlertidigt tillad […]">
-<!ENTITY noscriptSound "Audio feedback når scripts bliver blokeret">
-<!ENTITY noscriptImport "Importer">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksporter">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Vis meddelelse om blokerede scripts">
-<!ENTITY noscriptNotify.bottom "Placer meddelelsen nederst">
-<!ENTITY noscriptSound.choose "Vælg">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Afspil">
-<!ENTITY noscriptSound.play.accesskey "A">
-<!ENTITY noscriptSound.reset "Nulstil standard">
-<!ENTITY noscriptSound.reset.accesskey "s">
-<!ENTITY noscriptAdvanced "Avanceret">
-<!ENTITY noscriptAdditionalPermissions "Yderligere tilladelser for betroede websteder">
-<!ENTITY noscriptAllowClipboard "Tillad kopiering af formateret tekst fra ekstern udklipsholder">
-<!ENTITY noscriptAdditionalRestrictions "Yderligere begrænsninger for ubetroede websteder">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Anvend også disse begrænsninger til betroede websteder">
-<!ENTITY noscriptForbidJava "Forbyd Java™">
-<!ENTITY noscriptForbidXSLT "Forbyd XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbyd Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbyd &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbyd &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbyd @font-face">
-<!ENTITY noscriptForbidWebGL "Forbyd WebGL">
-<!ENTITY noscriptForbidMedia "Forbyd &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbyd Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbyd andre plugins">
-<!ENTITY noscriptReloadWarn "Disse indstillinger træder i kraft på en ny eller en (manuelt) genindlæst side">
-<!ENTITY noscriptConfirmUnblock "Spørg før en midlertidig blokering af et objekt ophæves">
-<!ENTITY noscriptStatusLabel "Statuslinjeetiket">
-<!ENTITY noscriptForbidBookmarklets "Forbyd bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Vis pladsholderikon">
-<!ENTITY noscriptTruncateTitle "Afkort dokumenttitler">
-<!ENTITY noscriptFixLinks "Forsøg at fikse JavaScript-links">
-<!ENTITY noscriptAllowBookmarks "Tillad websteder åbnet gennem bogmærker">
-<!ENTITY noscriptAllowViaBookmarks "Tillad websteder åbnet gennem bogmærker">
-<!ENTITY noscriptAllowPing "Tillad &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Tillad lokale links">
-<!ENTITY noscriptForbidPing "Forbyd &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbyd META omdirigeringer i &lt;NOSCRIPT&gt;-elementer">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "F">
-<!ENTITY noscriptNotifyMeta "Vis meddelelse om blokerede META-omdirigeringer">
-<!ENTITY noscriptNotifyMeta.accesskey "m">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Tilladelser">
-<!ENTITY noscriptRefresh "Genindlæs">
-<!ENTITY noscriptNotifications "Beskeder">
-<!ENTITY noscriptToolbarToggle "Venstreklik på NoScript knappen slår tilladelser for nuværende topniveau-websted til/fra">
-<!ENTITY noscriptTrusted "Betroet">
-<!ENTITY noscriptUntrusted "Ubetroet">
-<!ENTITY noscriptUnknown "Ukendt">
-<!ENTITY noscriptAdd "Tilføj">
-<!ENTITY noscriptAdd.accesskey "T">
-<!ENTITY noscriptClose "Luk">
-<!ENTITY noscriptSiteManager "Webstedshåndtering">
-<!ENTITY noscriptSecurityManager "Sikkerhedshåndtering">
-<!ENTITY noscriptPolicies "Retningslinjer">
-<!ENTITY noscriptDefaultPolicies "Standard retningslinjer">
-<!ENTITY noscriptSitePolicies "Specifikke retningslinjer">
-<!ENTITY noscriptNselNever "Skjul &lt;NOSCRIPT&gt;-elementer">
-<!ENTITY noscriptNselForce "Vis &lt;NOSCRIPT&gt;-elementet som følger et blokeret &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Midlertidig tillad topniveau-websteder som standard">
-<!ENTITY noscriptDescription "Ekstra beskyttelse af din Firefox: NoScript tillader kun JavaScript, Java (og andre plugins) fra betroede domæner valgt af dig (f.eks. din netbanks hjemmeside). Denne whitelist-baserede forebyggende metode forhindrer udnyttelse af sikkerhedshuller (såvel kendte som ukendte!) uden tab af funktionalitet… Eksperter er enige: Firefox er mere sikker med NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloker CSS-baserede skannere">
-<!ENTITY noscriptOptFilterXGet "Rens mistænkelige cross-site-forespørgsler">
-<!ENTITY noscriptOptFilterXPost "Omdan cross-site POST-forespørgsler til GET-forespørgsler uden data">
-<!ENTITY noscriptShowConsole "Vis konsol…">
-<!ENTITY noscriptShowConsole.accesskey "V">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS OSS…">
-<!ENTITY noscriptXssFaq.accesskey "X">
-<!ENTITY noscriptUnsafeReload "Usikker genindlæsning">
-<!ENTITY noscriptUnsafeReload.accesskey "U">
-<!ENTITY noscriptXssExceptions "Anti-XSS beskyttelsesundtagelser">
-<!ENTITY noscriptXssExceptions.description "Destinationer, som matcher disse regulære udtryk, vil IKKE blive beskyttet mod XSS">
-<!ENTITY noscriptMatchSample "Eksempel på matchmønster:">
-<!ENTITY noscriptReset "Nulstil">
-<!ENTITY noscriptReset.accesskey "N">
-<!ENTITY noscriptResetDef "Nulstil til standard">
-<!ENTITY noscriptResetDef.accesskey "s">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Tilbagekald midlertidige tilladelser">
-<!ENTITY noscriptRevokeTemp.accesskey "m">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ingen pladsholdere til objekter fra websteder der er markeret som ubetroede">
-<!ENTITY noscriptCollapseBlockedObjects "Sammenfold blokerede objekter">
-<!ENTITY noscriptExceptions "Undtagelser…">
-<!ENTITY noscriptBlockedObjects "Blokerede objekter">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloker alle objekter der kommer fra et websted, som er markeret som ubetroet">
-<!ENTITY noscriptTempAllowPage "Midlertidigt tillad hele denne side">
-<!ENTITY noscriptTempAllowPage.accesskey "h">
-<!ENTITY noscriptAllowPage "Tillad hele denne side">
-<!ENTITY noscriptAllowPage.accesskey "T">
-<!ENTITY noscriptTempToPerm "Gør tilladelserne for side permanente">
-<!ENTITY noscriptTempToPerm.accesskey "G">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS OSS…">
-<!ENTITY noscriptHttpsFaq.accesskey "H">
-<!ENTITY noscriptHttps.behavior "Opførsel">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbyd aktiv webindhold med mindre det kommer fra en sikker (HTTPS)-forbindelse:">
-<!ENTITY noscriptHttps.never "Aldrig">
-<!ENTITY noscriptHttps.proxy "Når proxy anvendes (anbefales med Tor)">
-<!ENTITY noscriptHttps.always "Altid">
-<!ENTITY noscriptHttpsForced "Tving de følgende websteder til at anvende sikre (HTTPS)-forbindelser:">
-<!ENTITY noscriptHttpsForcedExceptions "Tving aldrig sikre (HTTPS)-forbindelser for de følgende websteder:">
-<!ENTITY noscriptSecureCookies "Aktiver automatisk sikker cookies-håndtering">
-<!ENTITY noscriptSecureCookiesForced "Tving kryptering for alle cookies sat over HTTPS af de følgende websteder:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorer usikre cookies sat over HTTPS af de følgende websteder:">
-<!ENTITY noscriptClearClickTitle "ClearClick-advarsel">
-<!ENTITY noscriptClearClickHeader "Potentiel klik-kapring/UI Redress forsøg!">
-<!ENTITY noscriptClearClickDescription "NoScript hindrede en muse- eller tastatur-interaktion med et delvist skjult element. Klik på billedet nedenunder for, at veksle mellem den blokerede og den frie version.">
-<!ENTITY noscriptClearClickOpt "ClearClick-beskyttelse på sider markeret som...">
-<!ENTITY noscriptClearClickReport "Rapportér">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Rapport ID:">
-<!ENTITY noscriptTrustedPagesAdj "betroede">
-<!ENTITY noscriptUntrustedPagesAdj "ubetroede">
-<!ENTITY noscriptKeepLocked "Bevar dette element låst (anbefalet)">
-<!ENTITY noscriptEmbeddings "Indlejrede objekter">
-<!ENTITY noscriptPrev "Forrige">
-<!ENTITY noscriptNext "Næste">
-<!ENTITY noscriptFrameOptErr.title "Dette indhold kan ikke vises i en ramme">
-<!ENTITY noscriptFrameOptErr.desc "For at beskytte din sikkerhed, tillader udgiveren af dette indhold ikke, at det vises i en ramme.">
-<!ENTITY noscriptFrameOptErr.link "Klik her for at åbne indholdet i et nyt vindue">
-<!ENTITY noscriptBookmarkSync "Backup NoScript indstillinger i et bogmærke for nem synkronisering">
-<!ENTITY noscriptShowReleaseNotes "Vis udgivelsesnoter ved opdatering">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regelsæt:">
-<!ENTITY ABE.enabled.label "Aktiver ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Tillad websteder at håndhæve egne regelsæt">
-<!ENTITY ABE.edit.label "Rediger…">
-<!ENTITY ABE.edit.accesskey "R">
-<!ENTITY ABE.enable.label "Aktiver">
-<!ENTITY ABE.enable.accesskey "A">
-<!ENTITY ABE.disable.label "Deaktiver">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Opdatér">
-<!ENTITY ABE.refresh.accesskey "O">
-<!ENTITY noscriptUninstall "Afinstaller">
-<!ENTITY noscriptRecentBlocked "Websteder blokeret for nyligt">
-<!ENTITY noscriptExternalFilters "Eksterne filtre">
-<!ENTITY noscriptEF.enable "Aktiver eksterne filtre">
-<!ENTITY noscriptEF.add "Nyt filter…">
-<!ENTITY noscriptEF.executable "Kørbar fil:">
-<!ENTITY noscriptEF.browse "Gennemse…">
-<!ENTITY noscriptEF.contentType "Indholdstype (MIME) som skal filtreres (eksakt match eller regulært udtryk):">
-<!ENTITY noscriptEF.exceptions "Filtrer ikke objekter der kommer fra disse websteder:">
-<!ENTITY noscriptEF.remove "Fjern">
-<!ENTITY noscriptPreset "Sikkerhedsniveau">
-<!ENTITY noscriptPreset.off "Fra (mener du det?!)">
-<!ENTITY noscriptPreset.low "Medgørlig (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Klassisk (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fæstning (Fuldstændig isolation)">
-<!ENTITY noscript.hoverUI "Åbn tilladelsesmenuen når musen holdes over NoScript-ikonet">
-<!ENTITY noscriptDonate "Donér">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/da/noscript/noscript.properties b/extensions/noscript/chrome/locale/da/noscript/noscript.properties
deleted file mode 100644
index 33f8449..0000000
--- a/extensions/noscript/chrome/locale/da/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Tillad scripts globalt (farligt)
-forbidGlobal=Forbyd scripts globalt (anbefales)
-allowLocal=Tillad %S
-allowTemp=Midlertidig tillad %S
-forbidLocal=Forbyd %S
-allowed.glb=Pas på! Scripts globalt tilladt
-allowed.yes=Scripts midlertidigt tilladt
-allowed.prt=Scripts delvist tilladt
-allowed.no=Scripts er midlertidigt forbudt
-global.warning.title=Advarsel!
-global.warning.text=Scripts tillades globalt (for alle websteder).\n Dette er en potentiel farlig handling. \nVil du virkelig fortsætte?
-audio.samples=Lydprøver
-confirm=Er du sikker?
-alwaysAsk=Spørg altid om bekræftelse
-notifyHide=Skjul efter %S sekunder
-trust=Betro %S
-distrust=Marker %S som ubetroet
-untrustedOrigin=en ubetroet oprindelse
-xss.notify.generic=NoScript har filtreret et potentielt forsøg på cross-site scripting (XSS) fra %S. Tekniske detaljer kan ses i konsollen.
-xss.notify.showConsole=Vis konsol…
-xss.notify.showConsole.accessKey=V
-xss.reason.filterXGet=Har renset mistænkelig forespørgsel. Original URL [%1$S] forespurgt fra [%2$S]. Renset URL: [%3$S].
-xss.reason.filterXGetRef=Har renset mistænkelig forespørgsels referer. URL [%1$S] forespurgt fra [%2$S]. Renset referrer: [%3$S].
-xss.reason.filterXPost=Har renset mistænkelig upload til [%1$S] fra [%2$S]: omdannede til en GET-forespørgsel, hvor der kun downloades.
-unsafeReload.warning=Genindlæser en mistænkelig %1$S uden sikkerhed\n\n [%2$S]\n\nFRA [%3$S]\n\nNoScript vil IKKE beskytte denne forespørgsel!\n
-metaRefresh.notify=NoScript blokerede en <META>-omdirigering i et <NOSCRIPT>-element: %S på %S sekunder.
-metaRefresh.notify.follow=Følg omdirigering
-metaRefresh.notify.follow.accessKey=F
-notify.options=Indstillinger
-notify.options.accessKey=I
-reset.title=NoScript Nulstil
-reset.warning=ALLE NoScript-indstillinger og tilladelser bliver øjeblikkeligt nulstillet til deres standardværdi.\nDenne handling kan ikke fortrydes.\nVil du fortsætte?
-bookmarkSync.title=NoScript indstillingsbogmærke
-bookmarkSync.message=Dette bogmærke er IKKE beregnet til at åbne, men til at blive synkroniseret med udvidelser som Weave eller XMarks.
-bookmarkSync.confirm=NoScript har fundet et indstillingsbogmærke gemt den\n%S.\nVil du virkelig overskrive dine lokale NoScript-indstillinger med indholdet fra dette bogmærke?
-ABE.notify=Forespørgsel %1$S filtreret af ABE: <%2$S> %3$S
-ABE.chooseEditor=Vælg en teksteditor til ABE regelsæt
-ABE.syntaxError=Syntaksfejl i ABE-regelsæt!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Tillad alle fra %S
-allowTempFrom=Midlertidigt tillad alle fra %S
-siteInfo.confirm=Du er ved at bede om information om webstedet "%1$S"\nved at indsende en forespørgsel til %2$S.\nØnsker du at fortsætte?
-siteInfo.tooltip=Midterklik eller shift+klik for webstedsinfo…
-ef.activate=Filter %S
-ef.options=%S Indstillinger…
-ef.newName=Indtast et navn til det nye filter:
-ef.locateExe=Vælg den kørbare fil til filtret %S
-disable=Deaktiver %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/de/noscript/about.properties b/extensions/noscript/chrome/locale/de/noscript/about.properties
deleted file mode 100644
index ed348a2..0000000
--- a/extensions/noscript/chrome/locale/de/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Zusätzlicher Schutz für Ihren Browser: NoScript erlaubt das Ausführen von JavaScript, Java (und anderen Plug-ins) nur bei vertrauenswürdigen Domains Ihrer Wahl (z.B. Ihrer Homebanking-Website). Der auf einer Positivliste basierende präventive Ansatz zum Blockieren von Skripten verhindert das Ausnutzen von (bekannten und unbekannten!) Sicherheitslücken ohne Verlust an Funktionalität.
-aboutTitle=Über %S
-extensionContributors=Mitwirkende:
-extensionContributors.tip=Dank für diese Erweiterung gebührt
-extensionCreatorLabel=Autor:
-changelog=Versionshinweise (engl.)
-changelog.tip=Versionshinweise aufrufen (engl.)
-license=Lizenz (engl.)
-license.tip=Endbenutzerlizenz lesen
-logo.tip=Homepage der Erweiterung besuchen
-sponsor.tip=Sponsoren-Homepage besuchen
-informaction.tip=InformAction-Homepage besuchen
-extensionHomepage.tip=Homepage der Erweiterung besuchen
-extensionCreator.tip=Homepage des Autors besuchen
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/de/noscript/noscript.dtd b/extensions/noscript/chrome/locale/de/noscript/noscript.dtd
deleted file mode 100644
index c54822e..0000000
--- a/extensions/noscript/chrome/locale/de/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Einstellungen…">
-<!ENTITY noscriptOptions.accesskey "E">
-<!ENTITY noscriptOptionsLong "NoScript - Einstellungen">
-<!ENTITY noscriptAbout "Über NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Sie können festlegen, welchen Websites Sie das Ausführen von Skripten erlauben möchten. Geben Sie bitte die exakte Adresse oder die Domain der Website ein (z.B. &quot;http://www.site.com&quot; oder &quot;site.com&quot;), für die Sie dies zulassen möchten, und klicken Sie dann auf &quot;Erlauben&quot;.">
-<!ENTITY noscriptWebAddress "Adresse der Website:">
-<!ENTITY noscriptAllow "Erlauben">
-<!ENTITY noscriptAllow.accesskey "E">
-<!ENTITY noscriptForbid "Verbieten">
-<!ENTITY noscriptForbid.accesskey "V">
-<!ENTITY noscriptTrust "Als vertrauenswürdig einstufen">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Als nicht vertrauenswürdig einstufen">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Ausgewählte Websites entfernen">
-<!ENTITY noscriptGloballyEnabled "Skripte allgemein erlauben (nicht empfohlen)">
-<!ENTITY noscriptAutoReload "Betroffene Seiten beim Ändern der Berechtigungen automatisch neu laden">
-<!ENTITY noscriptGeneral "Allgemein">
-<!ENTITY noscriptAppearance "Aussehen">
-<!ENTITY noscriptShow "Folgende Menüeinträge anzeigen:">
-<!ENTITY noscriptCtxMenu "Auch im Seitenkontextmenü">
-<!ENTITY noscriptStatusIcon "Symbol in der Statusleiste">
-<!ENTITY noscriptFullAddr "Vollständige Adressen (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Vollständige Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Second-Level-Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "[…] temporär erlauben">
-<!ENTITY noscriptSound "Klang ausgeben, wenn Skripte blockiert werden">
-<!ENTITY noscriptImport "Importieren…">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportieren…">
-<!ENTITY noscriptExport.accesskey "x">
-<!ENTITY noscriptNotify "Informationsleiste anzeigen, wenn Skripte blockiert werden">
-<!ENTITY noscriptNotify.bottom "Am unteren Rand anzeigen">
-<!ENTITY noscriptSound.choose "Durchsuchen…">
-<!ENTITY noscriptSound.choose.accesskey "D">
-<!ENTITY noscriptSound.play "Anhören">
-<!ENTITY noscriptSound.play.accesskey "A">
-<!ENTITY noscriptSound.reset "Standard wiederherstellen">
-<!ENTITY noscriptSound.reset.accesskey "S">
-<!ENTITY noscriptAdvanced "Erweitert">
-<!ENTITY noscriptAdditionalPermissions "Zusätzliche Berechtigungen für vertrauenswürdige Websites">
-<!ENTITY noscriptAllowClipboard "Kopieren und Einfügen über die Zwischenablage für Rich-Text-Editoren erlauben">
-<!ENTITY noscriptAdditionalRestrictions "Zusätzliche Einschränkungen für nicht vertrauenswürdige Websites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Diese Einschränkungen auch auf vertrauenswürdige Websites anwenden">
-<!ENTITY noscriptForbidJava "Java™ verbieten">
-<!ENTITY noscriptForbidXSLT "XSLT verbieten">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™ verbieten">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; verbieten">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt; verbieten">
-<!ENTITY noscriptForbidFonts "Nachladen von Schriften mittels @font-face verbieten">
-<!ENTITY noscriptForbidWebGL "Nachladen von Schriften mittels WebGL verbieten">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt;/&lt;VIDEO&gt; verbieten">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® verbieten">
-<!ENTITY noscriptForbidPlugins "Andere Plugins verbieten">
-<!ENTITY noscriptReloadWarn "Diese Einstellungen werden erst bei neuen oder (manuell) neu geladenen Seiten wirksam">
-<!ENTITY noscriptConfirmUnblock "Bestätigungsmeldung anzeigen, bevor ein Objekt temporär erlaubt wird">
-<!ENTITY noscriptStatusLabel "Informationstext in der Statusleiste">
-<!ENTITY noscriptForbidBookmarklets "Bookmarklets verbieten">
-<!ENTITY noscriptShowPlaceholder "Platzhaltersymbol anzeigen">
-<!ENTITY noscriptTruncateTitle "Überlangen &quot;document.title&quot; kürzen (siehe Bug 319004)">
-<!ENTITY noscriptFixLinks "Versuchen, JavaScript-Links in normale Links umzuwandeln">
-<!ENTITY noscriptAllowBookmarks "Aus Lesezeichen geöffnete Websites erlauben">
-<!ENTITY noscriptAllowViaBookmarks "Aus Lesezeichen geöffnete Websites erlauben">
-<!ENTITY noscriptAllowPing "Klick-Verfolgung über das PING-Attribut für Links erlauben">
-<!ENTITY noscriptAllowLocalLinks "Links auf lokale Dateien erlauben">
-<!ENTITY noscriptForbidPing "Klick-Verfolgung über das PING-Attribut für Links verbieten">
-<!ENTITY noscriptForbidMetaRefresh "META-Weiterleitungen innerhalb von &lt;NOSCRIPT&gt;-Elementen verbieten">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "W">
-<!ENTITY noscriptNotifyMeta "Meldung bei blockierten META-Weiterleitungen anzeigen">
-<!ENTITY noscriptNotifyMeta.accesskey "W">
-<!ENTITY noscriptWhitelist "Positivliste">
-<!ENTITY noscriptPermissions "Berechtigungen">
-<!ENTITY noscriptRefresh "Aktualisierung">
-<!ENTITY noscriptNotifications "Benachrichtigungen">
-<!ENTITY noscriptToolbarToggle "Berechtigungen für aktuelle Top-Level-Site mit Links-Klick auf die Symbolleisten-Schaltfläche umschalten">
-<!ENTITY noscriptTrusted "Vertrauenswürdig">
-<!ENTITY noscriptUntrusted "Nicht vertrauenswürdig">
-<!ENTITY noscriptUnknown "Unbekannt">
-<!ENTITY noscriptAdd "Hinzufügen">
-<!ENTITY noscriptAdd.accesskey "H">
-<!ENTITY noscriptClose "Schließen">
-<!ENTITY noscriptSiteManager "Site-Manager">
-<!ENTITY noscriptSecurityManager "Sicherheits-Manager">
-<!ENTITY noscriptPolicies "Richtlinien">
-<!ENTITY noscriptDefaultPolicies "Standard-Richtlinien">
-<!ENTITY noscriptSitePolicies "Website-spezifische Richtlinien">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt;-Elemente ausblenden">
-<!ENTITY noscriptNselForce "&lt;NOSCRIPT&gt;-Element, das einem blockierten &lt;SCRIPT&gt; folgt, anzeigen">
-<!ENTITY noscriptAutoAllowTopLevel "Jeweils aktuelle Top-Level-Site temporär erlauben">
-<!ENTITY noscriptDescription "Zusätzlicher Schutz für Ihren Browser: NoScript erlaubt das Ausführen von JavaScript, Java (und anderen Plugins) nur bei vertrauenswürdigen Domains Ihrer Wahl (z.B. Ihrer Homebanking-Website). Der auf einer Positivliste basierende präventive Ansatz zum Blockieren von Skripten verhindert das Ausnutzen von (bekannten und unbekannten!) Sicherheitslücken ohne Verlust an Funktionalität.">
-<!ENTITY noscriptOptBlockCssScanners "Auf Cross-Site Scripting basierende Scanner blockieren">
-<!ENTITY noscriptOptFilterXGet "Anfragen bei Verdacht auf Cross-Site Scripting bereinigen">
-<!ENTITY noscriptOptFilterXPost "Cross-Site-POST-Anfragen in datenlose GET-Anfragen umwandeln">
-<!ENTITY noscriptShowConsole "Konsole anzeigen…">
-<!ENTITY noscriptShowConsole.accesskey "z">
-<!ENTITY noscriptXss "Cross-Site Scripting (XSS)">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "FAQ (engl.) zu Cross-Site Scripting…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsicheres Nachladen">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Ausnahmen vom XSS-Schutz">
-<!ENTITY noscriptXssExceptions.description "Zieladressen, die mit diesen regulären Ausdrücken übereinstimmen, werden vom XSS-Schutz ausgenommen">
-<!ENTITY noscriptMatchSample "Beispielmuster für Übereinstimmung:">
-<!ENTITY noscriptReset "Zurücksetzen">
-<!ENTITY noscriptReset.accesskey "Z">
-<!ENTITY noscriptResetDef "Auf Standardwerte zurücksetzen">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Temporäre Berechtigungen aufheben">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Keine Platzhalter anzeigen für Objekte von als nicht vertrauenswürdig eingestuften Sites">
-<!ENTITY noscriptCollapseBlockedObjects "Platz von geblockten Elementen freigeben">
-<!ENTITY noscriptExceptions "Ausnahmen…">
-<!ENTITY noscriptBlockedObjects "Blockierte Objekte">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Jedes Objekt von als nicht vertrauenswürdig eingestuften Sites blockieren">
-<!ENTITY noscriptTempAllowPage "Temporär alle Beschränkungen für diese Seite aufheben">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Alle Beschränkungen für diese Seite aufheben">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Berechtigungen dieser Seite speichern">
-<!ENTITY noscriptTempToPerm.accesskey "b">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "FAQ (engl.) zu verschlüsselten Verbindungen (HTTPS)…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Verhalten">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Aktive Webinhalte verbieten, es sei denn, sie stammen aus einer verschlüsselten Verbindung (HTTPS):">
-<!ENTITY noscriptHttps.never "Niemals">
-<!ENTITY noscriptHttps.proxy "Bei Verwendung eines Proxy (empfohlen bei Anonymisierungsdiensten wie Tor)">
-<!ENTITY noscriptHttps.always "Immer">
-<!ENTITY noscriptHttpsForced "Verschlüsselte Verbindung (HTTPS) für folgende Adressen erzwingen:">
-<!ENTITY noscriptHttpsForcedExceptions "Für folgende Adressen niemals die Verwendung verschlüsselter Verbindung (HTTPS) erzwingen:">
-<!ENTITY noscriptSecureCookies "Automatisches sicheres Cookie-Management aktivieren">
-<!ENTITY noscriptSecureCookiesForced "Überprüfung der Cookies über verschlüsselte Verbindungen (HTTPS) für folgende Adressen erzwingen:">
-<!ENTITY noscriptSecureCookiesExceptions "Unsichere Cookies bei verschlüsselter Verbindung (HTTPS) bei folgenden Adressen ignorieren:">
-<!ENTITY noscriptClearClickTitle "ClearClick-Warnung">
-<!ENTITY noscriptClearClickHeader "Potentieller Clickjacking-Angriff / Versuch einer UI-Umadressierung!">
-<!ENTITY noscriptClearClickDescription "NoScript wehrte eine Maus- oder Tastatursteuerung durch ein teilweise verstecktes Element ab. Klicken Sie auf die nachfolgende Grafik, um zwischen der gesperrten und der ungesperrten Version zu wechseln.">
-<!ENTITY noscriptClearClickOpt "ClearClick-Schutz anwenden auf…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report-ID:">
-<!ENTITY noscriptTrustedPagesAdj "vertrauenswürdigen Seiten">
-<!ENTITY noscriptUntrustedPagesAdj "nicht vertrauenswürdigen /">
-<!ENTITY noscriptKeepLocked "Element gesperrt halten (empfohlen)">
-<!ENTITY noscriptEmbeddings "Eingebettete Objekte">
-<!ENTITY noscriptPrev "Zurück">
-<!ENTITY noscriptNext "Weiter">
-<!ENTITY noscriptFrameOptErr.title "Der Inhalt kann nicht in einem Frame angezeigt werden">
-<!ENTITY noscriptFrameOptErr.desc "Um Ihre Sicherheit zu gewährleisten, hat der Herausgeber dieses Inhaltes festgelegt, dass er nicht in einem Frame angezeigt werden darf.">
-<!ENTITY noscriptFrameOptErr.link "Hier klicken, um den Inhalt in einem neuen Fenster zu öffnen">
-<!ENTITY noscriptBookmarkSync "Datensicherung der NoScript-Konfiguration in einem Lesezeichen speichern für eine einfache Synchronisation">
-<!ENTITY noscriptShowReleaseNotes "Versionshinweise nach einem Update anzeigen">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regelsätze:">
-<!ENTITY ABE.enabled.label "ABE (Application Boundaries Enforcer) aktivieren">
-<!ENTITY ABE.siteEnabled.label "Websites das Verwenden ihrer eigenen Regelsätze erlauben">
-<!ENTITY ABE.edit.label "Bearbeiten…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Aktivieren">
-<!ENTITY ABE.enable.accesskey "a">
-<!ENTITY ABE.disable.label "Deaktivieren">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Aktualisieren">
-<!ENTITY ABE.refresh.accesskey "k">
-<!ENTITY noscriptUninstall "Deinstallieren">
-<!ENTITY noscriptRecentBlocked "Kürzlich blockierte Websites">
-<!ENTITY noscriptExternalFilters "Externe Filter">
-<!ENTITY noscriptEF.enable "Externe Filter aktivieren">
-<!ENTITY noscriptEF.add "Neuer Filter…">
-<!ENTITY noscriptEF.executable "Ausführbare Datei:">
-<!ENTITY noscriptEF.browse "Durchsuchen…">
-<!ENTITY noscriptEF.contentType "Zu filternder Content-Type (MIME) (genaue Übereinstimmung oder Regulärer Ausdruck):">
-<!ENTITY noscriptEF.exceptions "Objekte von folgenden Seiten nicht filtern:">
-<!ENTITY noscriptEF.remove "Entfernen">
-<!ENTITY noscriptPreset "Sicherheitsstufe">
-<!ENTITY noscriptPreset.off "Deaktiviert (Ist das Ihr Ernst?!)">
-<!ENTITY noscriptPreset.low "Gelassen (Negativliste + Websicherheit)">
-<!ENTITY noscriptPreset.medium "Klassisch (Positivliste + Websicherheit)">
-<!ENTITY noscriptPreset.high "Festung (Vollständige Sperrung)">
-<!ENTITY noscript.hoverUI "Berechtigungen-Menü öffnen beim Überfahren des NoScript-Symbols mit dem Mauszeiger">
-<!ENTITY noscriptDonate "Spenden">
-<!ENTITY noscriptDonate.accesskey "S">
-<!ENTITY noscriptAutoReload.currentTab "Nur den aktuellen Tab neu laden">
-<!ENTITY noscriptCascadePermissions "Rechte des Hauptdokuments auf alle Unterdokumente und Skripte Dritter anwenden">
-<!ENTITY noscriptRestrictSubdocScripting "Skripte in Unterdokumenten der Positivliste blockieren, die zu Seiten gehören, die nicht in der Positivliste sind">
-<!ENTITY noscriptGlobalHttpsWhitelist "HTTPS Skripte generell bei HTTPS Dokumenten erlauben">
-<!ENTITY noscriptPermanentInPrivate "Permanentes &quot;Zulassen&quot; von Befehle in privaten Fenstern">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/de/noscript/noscript.properties b/extensions/noscript/chrome/locale/de/noscript/noscript.properties
deleted file mode 100644
index 63b07f7..0000000
--- a/extensions/noscript/chrome/locale/de/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Skripte allgemein erlauben (nicht empfohlen)
-forbidGlobal=Skripte allgemein verbieten (empfohlen)
-allowLocal=%S erlauben
-allowTemp=%S temporär erlauben
-forbidLocal=%S verbieten
-allowed.glb=Achtung! Skripte werden allgemein erlaubt.
-allowed.yes=Skripte sind momentan erlaubt
-allowed.prt=Skripte sind teilweise erlaubt
-allowed.no=Skripte sind momentan verboten
-global.warning.title=Warnung!
-global.warning.text=Sie sind im Begriff, Skripte allgemein (für alle Websites) zu erlauben.\nDies stellt ein potenzielles Sicherheitsrisiko dar.\nMöchten Sie wirklich fortfahren?
-audio.samples=Audiodateien
-confirm=Sind Sie sicher?
-alwaysAsk=Diese Meldung immer anzeigen
-notifyHide=Nach %S Sekunden ausblenden
-trust=%S vertrauen
-distrust=%S als nicht vertrauenswürdig einstufen
-untrustedOrigin=nicht vertrauenwürdiger Ursprung
-xss.notify.generic=NoScript hat einen möglichen Cross-Site-Scripting-Versuch (XSS) von %S gefiltert. Technische Details wurden in der Konsole protokolliert.
-xss.notify.showConsole=Konsole anzeigen…
-xss.notify.showConsole.accessKey=z
-xss.reason.filterXGet=Eine verdächtige Anfrage wurde bereinigt. Original-URL [%1$S] angefordert von [%2$S]. Bereinigte URL: [%3$S].
-xss.reason.filterXGetRef=Ein verdächtiger Anfrage-Referer wurde bereinigt. URL [%1$S] angefordert von [%2$S]. Bereinigter Referrer: [%3$S].
-xss.reason.filterXPost=Ein verdächtiger Upload zu [%1$S] von [%2$S] wurde bereinigt und in eine GET-Anfrage (nur Download) umgewandelt.
-unsafeReload.warning=UNSICHERES Nachladen eines verdächtigen\n\n%1$S [%2$S]\n\nvon [%3$S]\n\nNoScript wird diese Anfrage nicht schützen!\n
-metaRefresh.notify=NoScript hat eine META-Weiterleitung innerhalb eines <noscript>-Elements blockiert: %S in %S Sekunden.
-metaRefresh.notify.follow=Der Weiterleitung folgen
-metaRefresh.notify.follow.accessKey=F
-notify.options=Optionen
-notify.options.accessKey=O
-reset.title=NoScript zurücksetzen
-reset.warning=ALLE NoScript-Einstellungen und Website-Berechtigungen werden auf ihre Standardwerte zurückgesetzt.\nDiese Aktion kann nicht rückgängig gemacht werden.\nMöchten Sie wirklich fortfahren?
-bookmarkSync.title=NoScript-Konfigurationslesezeichen
-bookmarkSync.message=Dieses Lesezeichen ist nicht dafür vorgesehen, geöffnet zu werden. Es dient vielmehr dem Zweck, die Konfiguration von NoScript über einen Service wie Firefox-Sync, SyncPlaces oder XMarks zu synchronisieren.
-bookmarkSync.confirm=NoScript hat ein Konfigurationslesezeichen gefunden,\nwelches vermutlich am %S gespeichert wurde.\nMöchten Sie wirklich Ihre aktuellen Einstellungen mit denen aus dem Lesezeichen überschreiben?
-ABE.notify=Die Anfrage %1$S wurde durch ABE gefiltert: <%2$S> %3$S
-ABE.chooseEditor=Bitte einen Texteditor zur Bearbeitung der ABE-Regelsätze auswählen
-ABE.syntaxError=Syntaxfehler in den ABE-Regelsätzen!
-ABE.wanIpAsLocal=WAN-IP (%S) ∈ LOCAL
-allowFrom=Alle Beschränkungen für "%S" aufheben
-allowTempFrom=Temporär alle Beschränkungen für "%S" aufheben
-siteInfo.confirm=Sie haben Informationen über die Site "%1$S"\ndurch Stellen einer Anfrage bei %2$S angefordert.\nSoll dieser Vorgang wirklich fortgesetzt werden?
-siteInfo.tooltip=Mittelklick oder Umschalt+Klick, um die Seiteninformationen aufzurufen…
-ef.activate=Filter %S
-ef.options=%S Einstellungen…
-ef.newName=Einen Namen für den neuen Filter festlegen:
-ef.locateExe=Eine ausführbare Datei für den Filter "%S" auswählen
-disable=%S deaktiviert
-disable.accessKey=d
-allowed.glb-emb=Skripte sind global erlaubt, einige Einbettungen sind jedoch blockiert
-removal.title=Warnung vor Verschlechterung der Sicherheit
-removal.message=Wenn Sie NoScript deaktivieren oder deinstallieren, verzichten Sie auf JEDEN von NoScript angebotenen Schutz.\n\nWenn Sie es überdrüssig sind, Skriptrechte für jede einzelne Website zu verwalten, gibt es eine sicherere Wahl.\n\n NoScript kann das Blockieren von Skripten beenden, außer von denen, die Sie als nicht vertrauenswürdig markieren, während Sie sich weiterhin mit den fortgeschrittensten Sicherheitsmaßnahmen gegen XSS, Clickjacking, CSRF und andere Webbedrohungen schützen.\n\nMöchten sie wirklich jeden Schutz von NoScript entfernen?\n
-removal.no=Nein, Skripte einfach nicht mehr blockieren
-removal.yes=Ja, jeden Schutz entfernen
-incompatibleOptions.title=Warnung vor inkompatiblen Einstellungen
-incompatibleOptions="%1$S"\nist mit "%2$S" inkompatibel.\bMöchten Sie Ersteres aktivieren und Letzteres deaktivieren?
diff --git a/extensions/noscript/chrome/locale/el/noscript/about.properties b/extensions/noscript/chrome/locale/el/noscript/about.properties
deleted file mode 100644
index 8b299cd..0000000
--- a/extensions/noscript/chrome/locale/el/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Πρόσθετη προστασία για τον Firefox. Οι ειδικοί συμφωνούν: Το Noscript δίνει μεγαλύτερη ασφάλεια στον Firefox :-)
-aboutTitle=Περί %S
-extensionContributors=Συντελεστές :
-extensionContributors.tip=Άνθρωποι τους οποίους θα πρέπει να ευγνωμονείτε για αυτή την επέκταση
-extensionCreatorLabel=Δημιουργός :
-changelog=Ιστορικό αλλαγών
-changelog.tip=Προβολή ιστορικού αλλαγών
-license=Άδεια χρήσης
-license.tip=Διαβάστε την άδεια τελικού χρήστη
-logo.tip=Επισκεφθείτε την αρχική σελίδα της επέκτασης
-sponsor.tip=Επισκεφθείτε τη σελίδα του χορηγού
-informaction.tip=Επισκεφθείτε την αρχική σελίδα του InformAction
-extensionHomepage.tip=Επισκεφτείτε την ιστοσελίδα της επέκτασης
-extensionCreator.tip=Επισκεφτείτε την ιστοσελίδα του δημιουργού
-version=Έκδοση %S
diff --git a/extensions/noscript/chrome/locale/el/noscript/noscript.dtd b/extensions/noscript/chrome/locale/el/noscript/noscript.dtd
deleted file mode 100644
index 276fa16..0000000
--- a/extensions/noscript/chrome/locale/el/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Επιλογές">
-<!ENTITY noscriptOptions.accesskey "Ε">
-<!ENTITY noscriptOptionsLong "Επιλογές NoScript">
-<!ENTITY noscriptAbout "Περί NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Μπορείτε να καθορίσετε για ποιους ιστότοπους θα επιτρέπεται η εκτέλεση σεναρίων εντολών. Πληκτρολογήστε τη διεύθυνση τομέα (πχ. &quot;http://www.site.com&quot; or &quot;site.com&quot;) του ιστότοπου που θέλετε και μετά κάντε κλικ στο «Να επιτρέπεται»">
-<!ENTITY noscriptWebAddress "Διεύθυνση ιστότοπου">
-<!ENTITY noscriptAllow "Να επιτρέπεται">
-<!ENTITY noscriptAllow.accesskey "Ν">
-<!ENTITY noscriptForbid "Απαγόρευση">
-<!ENTITY noscriptForbid.accesskey "Α">
-<!ENTITY noscriptTrust "Σημείωση ως έμπιστο">
-<!ENTITY noscriptTrust.accesskey "ε">
-<!ENTITY noscriptUntrust "Σημείωση ως μη έμπιστο">
-<!ENTITY noscriptUntrust.accesskey "μ">
-<!ENTITY noscriptRemoveSelected "Αφαίρεση επιλεγμένων ιστότοπων">
-<!ENTITY noscriptGloballyEnabled "Να επιτρέπονται τα σενάρια εντολών γενικά (μη ασφαλές)">
-<!ENTITY noscriptAutoReload "Αυτόματη ανανέωση των σελίδων που επηρεάζονται από την αλλαγή δικαιωμάτων">
-<!ENTITY noscriptGeneral "Γενικά">
-<!ENTITY noscriptAppearance "Εμφάνιση">
-<!ENTITY noscriptShow "Προβολή…">
-<!ENTITY noscriptCtxMenu "Μενού περιεχομένου">
-<!ENTITY noscriptStatusIcon "Εικονίδιο γραμμής κατάστασης">
-<!ENTITY noscriptFullAddr "Πλήρεις διευθύνσεις (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Πλήρεις τομείς (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Δευτερεύοντες βασικοί τομείς (noscript.net)">
-<!ENTITY noscriptTempCmd "Να επιτρέπονται προσωρινά […]">
-<!ENTITY noscriptSound "Ηχητική σήμανση όταν μπλοκάρονται σενάρια εντολών">
-<!ENTITY noscriptImport "Εισαγωγή">
-<!ENTITY noscriptImport.accesskey "Ε">
-<!ENTITY noscriptExport "Εξαγωγή">
-<!ENTITY noscriptExport.accesskey "ξ">
-<!ENTITY noscriptNotify "Προβολή μηνύματος για μπλοκαρισμένα σενάρια εντολών">
-<!ENTITY noscriptNotify.bottom "Τοποθέτηση μηνύματος στο κάτω μέρος">
-<!ENTITY noscriptSound.choose "Επιλογή">
-<!ENTITY noscriptSound.choose.accesskey "π">
-<!ENTITY noscriptSound.play "Αναπαραγωγή">
-<!ENTITY noscriptSound.play.accesskey "α">
-<!ENTITY noscriptSound.reset "Επαναφορά αρχικού">
-<!ENTITY noscriptSound.reset.accesskey "ρ">
-<!ENTITY noscriptAdvanced "Για προχωρημένους">
-<!ENTITY noscriptAdditionalPermissions "Πρόσθετες εξουσιοδοτήσεις για έμπιστους ιστότοπους">
-<!ENTITY noscriptAllowClipboard "Να επιτρέπεται αντιγραφή και επικόλληση από το πρόχειρο (εξωτερικής εφαρμογής)">
-<!ENTITY noscriptAdditionalRestrictions "Πρόσθετοι περιορισμοί για μη έμπιστους ιστότοπους">
-<!ENTITY noscriptPlugins "Πρόσθετες λειτουργίες">
-<!ENTITY noscriptContentBlocker "Εφαρμογή αυτών των περιορισμών και σε έμπιστους ιστότοπους">
-<!ENTITY noscriptForbidJava "Απαγόρευση εκτέλεσης Java™">
-<!ENTITY noscriptForbidXSLT "Απαγόρευση εκτέλεσης XSLT">
-<!ENTITY noscriptForbidSilverlight "Απαγόρευση εκτέλεσης Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Απαγόρευση εκτέλεσης &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Απαγόρευση εκτέλεσης &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Να απαγορεύεται το @font-face">
-<!ENTITY noscriptForbidWebGL "Να απαγορεύεται το WebGL">
-<!ENTITY noscriptForbidMedia "Να απαγορεύονται τα &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Απαγόρευση εκτέλεσης Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Απαγόρευση εκτέλεσης άλλων πρόσθετων λειτουργιών">
-<!ENTITY noscriptReloadWarn "Αυτές οι επιλογές θα εφαρμοστούν σε σελίδες που θα ανανεώσετε μόνοι σας ή θα φορτώσετε από &apos;δω και πέρα">
-<!ENTITY noscriptConfirmUnblock "Να γίνεται ερώτηση πριν επιτραπεί προσωρινά ένα αντικείμενο">
-<!ENTITY noscriptStatusLabel "Ετικέτα γραμμής κατάστασης">
-<!ENTITY noscriptForbidBookmarklets "Απαγόρευση εκτέλεσης bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Προβολή εικονιδίου γεμίσματος">
-<!ENTITY noscriptTruncateTitle "Σύντμηση τίτλων εγγράφων">
-<!ENTITY noscriptFixLinks "Να γίνεται προσπάθεια διόρθωσης δεσμών JavaScript">
-<!ENTITY noscriptAllowBookmarks "Να επιτρέπονται για ιστότοπους που υπάρχουν στους σελιδοδείκτες">
-<!ENTITY noscriptAllowViaBookmarks "Να επιτρέπονται για ιστότοπους που υπάρχουν στους σελιδοδείκτες">
-<!ENTITY noscriptAllowPing "Να επιτρέπεται το &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Να επιτρέπονται τοπικοί δεσμοί">
-<!ENTITY noscriptForbidPing "Να απαγορεύεται το &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Να απαγορεύονται οι ανακατευθύνσεις META σε στοιχεία &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "θ">
-<!ENTITY noscriptNotifyMeta "Προβολή μηνύματος για μπλοκαρισμένες ανακατευθύνσεις «ΜΕΤΑ»">
-<!ENTITY noscriptNotifyMeta.accesskey "ν">
-<!ENTITY noscriptWhitelist "Λίστα επιτρεπομένων">
-<!ENTITY noscriptPermissions "Δικαιώματα">
-<!ENTITY noscriptRefresh "Ανανέωση">
-<!ENTITY noscriptNotifications "Ειδοποιήσεις">
-<!ENTITY noscriptToolbarToggle "Εναλλαγή δικαιωμάτων για τον βασικό ιστότοπο με αριστερό κλικ στο εικονίδιο της εργαλειοθήκης">
-<!ENTITY noscriptTrusted "Έμπιστο">
-<!ENTITY noscriptUntrusted "Μη έμπιστο">
-<!ENTITY noscriptUnknown "Άγνωστο">
-<!ENTITY noscriptAdd "Προσθήκη">
-<!ENTITY noscriptAdd.accesskey "Π">
-<!ENTITY noscriptClose "Κλείσιμο">
-<!ENTITY noscriptSiteManager "Διαχειριστής ιστότοπων">
-<!ENTITY noscriptSecurityManager "Διαχειριστής ασφαλείας">
-<!ENTITY noscriptPolicies "Πολιτικές συμπεριφοράς">
-<!ENTITY noscriptDefaultPolicies "Αρχικές πολιτικές συμπεριφοράς">
-<!ENTITY noscriptSitePolicies "Πολιτικές συμπεριφοράς για συγκεκριμένους ιστότοπους">
-<!ENTITY noscriptNselNever "Απόκρυψη στοιχείων &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Προβολή του στοιχείου &lt;NOSCRIPT&gt; που ακολουθεί μπλοκαρισμένα σενάρια εντολών">
-<!ENTITY noscriptAutoAllowTopLevel "Να επιτρέπεται προσωρινά για τον βασικό ιστότοπο (ως αρχική ρύθμιση)">
-<!ENTITY noscriptDescription "Πρόσθετη προστασία για τον Firefox. Οι ειδικοί συμφωνούν: το NoScript δίνει μεγαλύτερη ασφάλεια στον Firefox. :-)">
-<!ENTITY noscriptOptBlockCssScanners "Μπλοκάρισμα ανιχνεύσεων CSS">
-<!ENTITY noscriptOptFilterXGet "Εκκαθάριση αιτημάτων ύποπτων ως cross-site scripting">
-<!ENTITY noscriptOptFilterXPost "Μετατροπή αιτημάτων cross-site POST σε κενά περιεχομένου αιτήματα GET">
-<!ENTITY noscriptShowConsole "Προβολή κονσόλας…">
-<!ENTITY noscriptShowConsole.accesskey "κ">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Συχνές ερωτήσεις XSS…">
-<!ENTITY noscriptXssFaq.accesskey "χ">
-<!ENTITY noscriptUnsafeReload "Μη ασφαλής ανανέωση">
-<!ENTITY noscriptUnsafeReload.accesskey "Μ">
-<!ENTITY noscriptXssExceptions "Εξαιρέσεις από προστασία αντι-XSS">
-<!ENTITY noscriptXssExceptions.description "Δεν θα παρέχεται προστασία αντί-XSS για προορισμούς που ταιριάζουν με τις κανονικές εκφράσεις:">
-<!ENTITY noscriptMatchSample "Παράδειγμα ταιριάσματος μοτίβου:">
-<!ENTITY noscriptReset "Επαναφορά αρχικών ρυθμίσεων">
-<!ENTITY noscriptReset.accesskey "Ε">
-<!ENTITY noscriptResetDef "Επαναφορά αρχικών ρυθμίσεων">
-<!ENTITY noscriptResetDef.accesskey "σ">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Αναίρεση προσωρινών αδειοδοτήσεων">
-<!ENTITY noscriptRevokeTemp.accesskey "ν">
-<!ENTITY noscriptNoUntrustedPlaceholder "Χωρίς εικονίδια γεμίσματος για αντικείμενα από μη έμπιστους ιστότοπους">
-<!ENTITY noscriptCollapseBlockedObjects "Σύμπτυξη μπλοκαρισμένων αντικειμένων">
-<!ENTITY noscriptExceptions "Εξαιρέσεις…">
-<!ENTITY noscriptBlockedObjects "Μπλοκαρισμένα αντικείμενα">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Μπλοκάρισμα κάθε αντικειμένου προερχόμενου από ιστότοπο σημειωμένο ως μη έμπιστο">
-<!ENTITY noscriptTempAllowPage "Να επιτρέπεται προσωρινά γενικά για τη σελίδα">
-<!ENTITY noscriptTempAllowPage.accesskey "σ">
-<!ENTITY noscriptAllowPage "Να επιτρέπεται γενικά για τη σελίδα">
-<!ENTITY noscriptAllowPage.accesskey "ε">
-<!ENTITY noscriptTempToPerm "Μετατροπή δικαιωμάτων σελίδας σε μόνιμα">
-<!ENTITY noscriptTempToPerm.accesskey "ν">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "Συχνές ερωτήσεις HTTPS">
-<!ENTITY noscriptHttpsFaq.accesskey "ε">
-<!ENTITY noscriptHttps.behavior "Συμπεριφορά">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Να απαγορεύεται ενεργό περιεχόμενο εκτός κι αν παρέχεται μέσω ασφαλούς (HTTPS) σύνδεσης:">
-<!ENTITY noscriptHttps.never "Ποτέ">
-<!ENTITY noscriptHttps.proxy "Όταν γίνεται χρήση διαμεσολαβητή (συνιστάται για το δίκτυο Tor)">
-<!ENTITY noscriptHttps.always "Πάντα">
-<!ENTITY noscriptHttpsForced "Εξαναγκασμός των παρακάτω ιστότοπων σε χρήση ασφαλούς (HTTPS) σύνδεσης:">
-<!ENTITY noscriptHttpsForcedExceptions "Να μην γίνεται εξαναγκασμός χρήσης ασφαλούς (HTTPS) σύνδεσης για τους παρακάτω ιστότοπους:">
-<!ENTITY noscriptSecureCookies "Ενεργοποίηση αυτόματης ασφαλούς διαχείρισης cookies">
-<!ENTITY noscriptSecureCookiesForced "Εξαναγκασμός κρυπτογράφησης σε όλα τα cookies που εγκαταστάθηκαν μέσω HTTPS από τους ακόλουθους ιστότοπους:">
-<!ENTITY noscriptSecureCookiesExceptions "Να αγνοούνται μη ασφαλή cookies που εγκαταστάθηκαν μέσω HTTPS από τους ακόλουθους ιστότοπους:">
-<!ENTITY noscriptClearClickTitle "Προειδοποίηση clearClick">
-<!ENTITY noscriptClearClickHeader "Πιθανή προσπάθεια επικάλυψης UI / Clickjacking!">
-<!ENTITY noscriptClearClickDescription "Το NoScript εντόπισε αλληλεπίδραση του ποντικιού ή του πληκτρολογίου με ένα μερικώς κρυφό στοιχείο. Κάντε κλικ στην παραπάνω εικόνα για εναλλαγή ανάμεσα στην απαγορευμένη και την επιτρεπόμενη εκδοχή.">
-<!ENTITY noscriptClearClickOpt "Προστασία clearClick σε ιστότοπους...">
-<!ENTITY noscriptClearClickReport "Αναφορά">
-<!ENTITY noscriptClearClickReport.accesskey "α">
-<!ENTITY noscriptClearClickReportId "Αναγνωριστικό αναφοράς:">
-<!ENTITY noscriptTrustedPagesAdj "έμπιστους">
-<!ENTITY noscriptUntrustedPagesAdj "μη έμπιστους">
-<!ENTITY noscriptKeepLocked "Διατήρηση κλειδώματος στοιχείου (συνιστάται)">
-<!ENTITY noscriptEmbeddings "Ενσωματωμένα αντικείμενα">
-<!ENTITY noscriptPrev "Προηγούμενο">
-<!ENTITY noscriptNext "Επόμενο">
-<!ENTITY noscriptFrameOptErr.title "Αυτό το περιεχόμενο δεν μπορεί να παρουσιαστεί σε πλαίσιο">
-<!ENTITY noscriptFrameOptErr.desc "Για να προστατεύσει την ασφάλεια σας, ο εκδότης του περιεχομένου δεν επιτρέπει την προβολή σε πλαίσιο">
-<!ENTITY noscriptFrameOptErr.link "Κάντε κλικ εδώ για να ανοίξετε το περιεχόμενο σε νέο παράθυρο">
-<!ENTITY noscriptBookmarkSync "Αντίγραφο ρυθμίσεων του NoScript σε σελιδοδείκτη για εύκολο συγχρονισμό">
-<!ENTITY noscriptShowReleaseNotes "Προβολή των σημειώσεων έκδοσης μετά από ενημέρωση">
-<!ENTITY ABE "ΑBE">
-<!ENTITY ABE.accesskey "Α">
-<!ENTITY ABE.rulesets.label "Σύνολα κανόνων:">
-<!ENTITY ABE.enabled.label "Ενεργοποίηση ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Να επιτρέπεται σε ιστότοπους να επιβάλουν τα δικά τους σύνολα κανόνων">
-<!ENTITY ABE.edit.label "Επεξεργασία...">
-<!ENTITY ABE.edit.accesskey "ε">
-<!ENTITY ABE.enable.label "Ενεργοποίηση">
-<!ENTITY ABE.enable.accesskey "ν">
-<!ENTITY ABE.disable.label "Απενεργοποίηση">
-<!ENTITY ABE.disable.accesskey "ο">
-<!ENTITY ABE.refresh.label "Ανανέωση">
-<!ENTITY ABE.refresh.accesskey "α">
-<!ENTITY noscriptUninstall "Απεγκατάσταση">
-<!ENTITY noscriptRecentBlocked "Πρόσφατα απαγορευμένοι ιστότοποι">
-<!ENTITY noscriptExternalFilters "Εξωτερικά φίλτρα">
-<!ENTITY noscriptEF.enable "Ενεργοποίηση εξωτερικών φίλτρων">
-<!ENTITY noscriptEF.add "Νέο φίλτρο…">
-<!ENTITY noscriptEF.executable "Εκτελέσιμο αρχείο:">
-<!ENTITY noscriptEF.browse "Εντοπισμός...">
-<!ENTITY noscriptEF.contentType "Τύπος περιεχομένου (ΜΙΜΕ) που θα φιλτραριστεί (ακριβές ταίριασμα ή κανονική έκφραση)">
-<!ENTITY noscriptEF.exceptions "Να μην φιλτράρονται αντικείμενα από τις παρακάτω σελίδες:">
-<!ENTITY noscriptEF.remove "Αφαίρεση">
-<!ENTITY noscriptPreset "Βαθμός ασφαλείας">
-<!ENTITY noscriptPreset.off "Απενεργοποιημένο (είστε σίγουροι;!)">
-<!ENTITY noscriptPreset.low "Χαλαρό (Λίστα απαγορευμένων + Δικτυακή ασφάλεια)">
-<!ENTITY noscriptPreset.medium "Κλασικό (Λίστα επιτρεπομένων + δικτυακή ασφάλεια)">
-<!ENTITY noscriptPreset.high "Οχυρό (Πλήρης αποκλεισμός)">
-<!ENTITY noscript.hoverUI "Άνοιγμα του μενού αδειοδοτήσεων όταν περνάει το ποντίκι πάνω από το εικονίδιο του NoScript">
-<!ENTITY noscriptDonate "Δωρεά">
-<!ENTITY noscriptDonate.accesskey "ω">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/el/noscript/noscript.properties b/extensions/noscript/chrome/locale/el/noscript/noscript.properties
deleted file mode 100644
index 85be4b9..0000000
--- a/extensions/noscript/chrome/locale/el/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Να επιτρέπονται τα σενάρια εντολών γενικά (επικίνδυνο)
-forbidGlobal=Να απαγορεύονται τα σενάρια εντολών γενικά (προτεινόμενο)
-allowLocal=Να επιτρέπεται για %S
-allowTemp=Να επιτρέπεται προσωρινά για %S
-forbidLocal=Να απαγορεύεται για %S
-allowed.glb=Κίνδυνος! Τα σενάρια εντολών επιτρέπονται γενικά
-allowed.yes=Τα σενάρια εντολών επιτρέπονται προς το παρόν
-allowed.prt=Τα σενάρια εντολών επιτρέπονται μερικώς
-allowed.no=Τα σενάρια εντολών δεν επιτρέπονται προς το παρόν
-global.warning.title=Προειδοποίηση!
-global.warning.text=Τα σενάρια εντολών θα επιτρέπονται γενικά (σε όλες τις σελίδες).\n Αυτό είναι πιθανότατα επικίνδυνο.\nΝα εφαρμοστεί;
-audio.samples=Δείγματα ήχου
-confirm=Είστε σίγουροι για την επιλογή σας;
-alwaysAsk=Να γίνεται πάντα ερώτηση για επιβεβαίωση
-notifyHide=Απόκρυψη μετά από %S δευτερόλεπτα
-trust=Να θεωρείται έμπιστο το %S
-distrust=Σημείωση του %S ως μη έμπιστου
-untrustedOrigin=μια μη έμπιστη πηγή
-xss.notify.generic=Το NoScript φίλτραρε μια πιθανή απόπειρα cross-site scripting (XSS) από το %S. Οι λεπτομέρειες έχουν καταγραφεί στην κονσόλα.
-xss.notify.showConsole=Προβολή κονσόλας…
-xss.notify.showConsole.accessKey=κ
-xss.reason.filterXGet=Έγινε εκκαθάριση ύποπτου αιτήματος. Υπήρχε αίτημα για το αρχικό URL [%1$S] από το [%2$S]. Εκκαθαρίστηκε το URL: [%3$S].
-xss.reason.filterXGetRef=Έγινε εκκαθάριση ύποπτου αιτήματος referer. Υπήρχε αίτημα για το URL [%1$S] από το [%2$S]. Εκκαθαρίστηκε ο Referer: [%3$S].
-xss.reason.filterXPost=Έγινε εκκαθάριση ύποπτης αποστολής από το [%2$S] στο [%1$S]. Μετατράπηκε σε αίτημα GET λήψης.
-unsafeReload.warning=ΜΗ ΑΣΦΑΛΗΣ ανανέωση ύποπτου\n\n%1$S [%2$S]\n\nΑπό[%3$S]\n\nΤο NoScript δεν παρέχει προστασία γι' αυτό το αίτημα!\n
-metaRefresh.notify=Το NoScript μπλόκαρε μια ανακατεύθυνση <META> εντός ενός στοιχείου <NOSCRIPT>: %S σε %S δευτερόλεπτα.
-metaRefresh.notify.follow=Ακολούθηση ανακατεύθυνσης
-metaRefresh.notify.follow.accessKey=Α
-notify.options=Επιλογές
-notify.options.accessKey=Ε
-reset.title=Επαναφορά αρχικών ρυθμίσεων του NoScript
-reset.warning=Θα γίνει επαναφορά στις αρχικές ρυθμίσεις όλων των επιλογών του NoScript και των δικαιωμάτων ιστότοπων..\n Αυτή η ενέργεια δεν είναι αναστρέψιμη.\n Συνέχεια;
-bookmarkSync.title=Σελιδοδείκτης ρυθμίσεων NoScript
-bookmarkSync.message=Αυτός ο σελιδοδείκτης δεν προορίζεται για άνοιγμα αλλά για συγχρονισμό ρυθμίσεων με υπηρεσίες όπως το Weave ή η επέκταση XMarks
-bookmarkSync.confirm=Το NoScript εντόπισε ένα σελιδοδείκτη συγχρονισμού ρυθμίσεων αποθηκευμένο στο\n%S.\nΘέλετε σίγουρα να αντικαταστήσετε τις τοπικές σας ρυθμίσεις του NoScript με τα περιεχόμενα αυτού του σελιδοδείκτη;
-ABE.notify=Το αίτημα %1$S φιλτραρίστηκε από τον κανόνα ABE: <%2$S> %3$S
-ABE.chooseEditor=Παρακαλούμε επιλέξτε επεξεργαστή κειμένου για σύνολα κανόνων ΑΒΕ
-ABE.syntaxError=Σφάλμα σύνταξης κανόνα ΑΒΕ
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Να επιτρέπονται όλα από %S
-allowTempFrom=Να επιτρέπονται προσωρινά όλα από %S
-siteInfo.confirm=Πρόκειται να ζητήσετε πληροφορίες για τον ιστότοπο «%1$S»\nυποβάλλοντας αίτημα στο %2$S.\nΘέλετε να συνεχίσετε;
-siteInfo.tooltip=Πατήστε μεσαίο ή shift + κλικ για πληροφορίες ιστότοπου...
-ef.activate=Φίλτρο %S
-ef.options=%S επιλογές...
-ef.newName=Εισάγετε όνομα για το νέο φίλτρο:
-ef.locateExe=Επιλέξτε εκτελέσιμο αρχείο για το φίλτρο %S
-disable=Απενεργοποίηση %S
-disable.accessKey=π
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/en-GB/noscript/about.properties b/extensions/noscript/chrome/locale/en-GB/noscript/about.properties
deleted file mode 100644
index fb09c56..0000000
--- a/extensions/noscript/chrome/locale/en-GB/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=About %S
-extensionContributors=Contributors:
-extensionContributors.tip=People you should thank for this extension
-extensionCreatorLabel=Author:
-changelog=Changelog
-changelog.tip=Show changelog
-license=Licence
-license.tip=Read end-user licence
-logo.tip=Visit extension home page
-sponsor.tip=Visit sponsor home page
-informaction.tip=Visit InformAction home page
-extensionHomepage.tip=Visit extension home page
-extensionCreator.tip=Visit author home page
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/en-GB/noscript/noscript.dtd b/extensions/noscript/chrome/locale/en-GB/noscript/noscript.dtd
deleted file mode 100644
index 713b81d..0000000
--- a/extensions/noscript/chrome/locale/en-GB/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. &quot;http://www.site.com&quot; or &quot;site.com&quot;) of the site you want to allow and then click Allow.">
-<!ENTITY noscriptWebAddress "Address of web site:">
-<!ENTITY noscriptAllow "Allow">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "Forbid">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Mark as Trusted">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Mark as Untrusted">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Remove Selected Sites">
-<!ENTITY noscriptGloballyEnabled "Scripts Globally Allowed (dangerous)">
-<!ENTITY noscriptAutoReload "Automatically reload affected pages when permissions change">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Appearance">
-<!ENTITY noscriptShow "Show…">
-<!ENTITY noscriptCtxMenu "Contextual menu">
-<!ENTITY noscriptStatusIcon "Status bar icon">
-<!ENTITY noscriptFullAddr "Full Addresses (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Full Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd level Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "Temporarily allow […]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Import">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Export">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Show message about blocked scripts">
-<!ENTITY noscriptNotify.bottom "Place message at the bottom">
-<!ENTITY noscriptSound.choose "Choose">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Play">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reset default">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Advanced">
-<!ENTITY noscriptAdditionalPermissions "Additional permissions for trusted sites">
-<!ENTITY noscriptAllowClipboard "Allow rich text copy and paste from external clipboard">
-<!ENTITY noscriptAdditionalRestrictions "Additional restrictions for untrusted sites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to whitelisted sites too">
-<!ENTITY noscriptForbidJava "Forbid Java™">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbid Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbid other plugins">
-<!ENTITY noscriptReloadWarn "These options will take effect on new or (manually) reloaded pages">
-<!ENTITY noscriptConfirmUnblock "Ask for confirmation before temporarily unblocking an object">
-<!ENTITY noscriptStatusLabel "Status bar label">
-<!ENTITY noscriptForbidBookmarklets "Forbid bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Show placeholder icon">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Attempt to fix JavaScript links">
-<!ENTITY noscriptAllowBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowPing "Allow &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Allow local links">
-<!ENTITY noscriptForbidPing "Forbid &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Refresh">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Left clicking on NoScript toolbar button toggles permissions for current top-level site">
-<!ENTITY noscriptTrusted "Trusted">
-<!ENTITY noscriptUntrusted "Untrusted">
-<!ENTITY noscriptUnknown "Unknown">
-<!ENTITY noscriptAdd "Add">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Close">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Hide &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptNselForce "Show the &lt;NOSCRIPT&gt; element which follows a blocked &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitise cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS.">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions…">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behaviour">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image below to cycle between the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embeddings">
-<!ENTITY noscriptPrev "Previous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronisation">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript\'s icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/en-GB/noscript/noscript.properties b/extensions/noscript/chrome/locale/en-GB/noscript/noscript.properties
deleted file mode 100644
index 35e928f..0000000
--- a/extensions/noscript/chrome/locale/en-GB/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Allow Scripts Globally (dangerous)
-forbidGlobal=Forbid Scripts Globally (advised)
-allowLocal=Allow %S
-allowTemp=Temporarily allow %S
-forbidLocal=Forbid %S
-allowed.glb=Danger! Scripts Globally Allowed
-allowed.yes=Scripts Currently Allowed
-allowed.prt=Scripts Partially Allowed
-allowed.no=Scripts Currently Forbidden
-global.warning.title=Warning!
-global.warning.text=Scripts are going to be allowed globally (for every site).\nThis is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=Audio samples
-confirm=Are you sure?
-alwaysAsk=Always ask for confirmation
-notifyHide=Hide after %S seconds
-trust=Trust %S
-distrust=Mark %S as Untrusted
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You\'re about to ask for information about the \"%1$S\" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/en-US/noscript/about.properties b/extensions/noscript/chrome/locale/en-US/noscript/about.properties
deleted file mode 100644
index 9aa6835..0000000
--- a/extensions/noscript/chrome/locale/en-US/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=About %S
-extensionContributors=Contributors:
-extensionContributors.tip=People you should thank for this extension
-extensionCreatorLabel=Author:
-changelog=Changelog
-changelog.tip=Show changelog
-license=License
-license.tip=Read end-user license
-logo.tip=Visit extension home page
-sponsor.tip=Visit sponsor home page
-informaction.tip=Visit InformAction home page
-extensionHomepage.tip=Visit extension home page
-extensionCreator.tip=Visit author home page
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/en-US/noscript/noscript.dtd b/extensions/noscript/chrome/locale/en-US/noscript/noscript.dtd
deleted file mode 100644
index efb7ff7..0000000
--- a/extensions/noscript/chrome/locale/en-US/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. &quot;http://www.site.com&quot; or &quot;site.com&quot;) of the site you want to allow and then click Allow.">
-<!ENTITY noscriptWebAddress "Address of web site:">
-<!ENTITY noscriptAllow "Allow">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "Forbid">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Mark as Trusted">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Mark as Untrusted">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Remove Selected Sites">
-<!ENTITY noscriptGloballyEnabled "Scripts Globally Allowed (dangerous)">
-<!ENTITY noscriptAutoReload "Automatically reload affected pages when permissions change">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Appearance">
-<!ENTITY noscriptShow "Show…">
-<!ENTITY noscriptCtxMenu "Contextual menu">
-<!ENTITY noscriptStatusIcon "Status bar icon">
-<!ENTITY noscriptFullAddr "Full Addresses (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Full Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd level Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "Temporarily allow […]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Import">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Export">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Show message about blocked scripts">
-<!ENTITY noscriptNotify.bottom "Place message at the bottom">
-<!ENTITY noscriptSound.choose "Choose">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Play">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reset default">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Advanced">
-<!ENTITY noscriptAdditionalPermissions "Additional permissions for trusted sites">
-<!ENTITY noscriptAllowClipboard "Allow rich text copy and paste from external clipboard">
-<!ENTITY noscriptAdditionalRestrictions "Additional restrictions for untrusted sites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to whitelisted sites too">
-<!ENTITY noscriptForbidJava "Forbid Java™">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbid Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbid other plugins">
-<!ENTITY noscriptReloadWarn "These options will take effect on new or (manually) reloaded pages">
-<!ENTITY noscriptConfirmUnblock "Ask for confirmation before temporarily unblocking an object">
-<!ENTITY noscriptStatusLabel "Status bar label">
-<!ENTITY noscriptForbidBookmarklets "Forbid bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Show placeholder icon">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Attempt to fix JavaScript links">
-<!ENTITY noscriptAllowBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowPing "Allow &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Allow local links">
-<!ENTITY noscriptForbidPing "Forbid &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Refresh">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Left clicking on NoScript toolbar button toggles permissions for current top-level site">
-<!ENTITY noscriptTrusted "Trusted">
-<!ENTITY noscriptUntrusted "Untrusted">
-<!ENTITY noscriptUnknown "Unknown">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptAdd "Add">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Close">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Hide &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptNselForce "Show the &lt;NOSCRIPT&gt; element which follows a blocked &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS.">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions…">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image below to cycle between the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embeddings">
-<!ENTITY noscriptPrev "Previous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/en-US/noscript/noscript.properties b/extensions/noscript/chrome/locale/en-US/noscript/noscript.properties
deleted file mode 100644
index 31fb6d3..0000000
--- a/extensions/noscript/chrome/locale/en-US/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Allow Scripts Globally (dangerous)
-forbidGlobal=Forbid Scripts Globally (advised)
-allowLocal=Allow %S
-allowTemp=Temporarily allow %S
-forbidLocal=Forbid %S
-allowed.glb=Danger! Scripts Globally Allowed
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-allowed.yes=Scripts Currently Allowed
-allowed.prt=Scripts Partially Allowed
-allowed.no=Scripts Currently Forbidden
-global.warning.title=Warning!
-global.warning.text=Scripts are going to be allowed globally (for every site).\n This is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=Audio samples
-confirm=Are you sure?
-alwaysAsk=Always ask for confirmation
-notifyHide=Hide after %S seconds
-trust=Trust %S
-distrust=Mark %S as Untrusted
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/eo/noscript/about.properties b/extensions/noscript/chrome/locale/eo/noscript/about.properties
deleted file mode 100644
index f4b6fdf..0000000
--- a/extensions/noscript/chrome/locale/eo/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Plia protekto por via Firefox: NoScript permesas uzon de JavaSkripto, Javo kc nur al fidataj retejoj de vi elektitaj (ekzemple via retbankejo). Tiu ĉi laŭblanklista anticipa blokado malhelpas misuzadon de malsekuroj (konataj kaj eĉ nekonataj!) sen funkcikripligo… Kompetentuloj jesos: Firefox vere estas pli sekura kun NoScript :-)
-aboutTitle=Pri %S
-extensionContributors=Kontribuantoj:
-extensionContributors.tip=Tiuj, kiujn vi devus danki por ĉi-tiu etendoprogramo
-extensionCreatorLabel=Aŭtoro:
-changelog=Ŝanĝoprotokolo
-changelog.tip=Vidigi ŝanĝoprotokolon
-license=Permesilo
-license.tip=Legu la permesilon por la uzanto
-logo.tip=Vizitu la retejon de la etendoprogramo
-sponsor.tip=Vizitu la mecenatan retejon
-informaction.tip=Vizitu la retejon de InformAction
-extensionHomepage.tip=Vizitu la retejon de la etendoprogramo
-extensionCreator.tip=Vizitu la retejon de la aŭtoro
-version=Versio %S
diff --git a/extensions/noscript/chrome/locale/eo/noscript/noscript.dtd b/extensions/noscript/chrome/locale/eo/noscript/noscript.dtd
deleted file mode 100644
index 9e03364..0000000
--- a/extensions/noscript/chrome/locale/eo/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opcioj…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opcioj de NoScript">
-<!ENTITY noscriptAbout "Pri NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Vi povas specifi, kiuj ttt-ejoj rajtu plenumigi skriptojn. Entajpu la adreson aŭ la domajnonomon (ekz. “http://www.retejo.org” aŭ “retejo.org”) de la ttt-ejo, kiun vi volas rajtigi, kaj poste alklaku “Rajtigi”.">
-<!ENTITY noscriptWebAddress "Adreso de retpaĝaro:">
-<!ENTITY noscriptAllow "Rajtigi">
-<!ENTITY noscriptAllow.accesskey "R">
-<!ENTITY noscriptForbid "Malrajtigi">
-<!ENTITY noscriptForbid.accesskey "M">
-<!ENTITY noscriptTrust "Marki kiel fidata">
-<!ENTITY noscriptTrust.accesskey "F">
-<!ENTITY noscriptUntrust "Marki kiel nefidata">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Forigi la elektitajn ttt-ejojn">
-<!ENTITY noscriptGloballyEnabled "Defaŭlte rajtigi ĉiujn retejojn (danĝere)">
-<!ENTITY noscriptAutoReload "Aŭtomate reŝargi koncernatajn paĝojn ĉe ŝanĝo de permesoj">
-<!ENTITY noscriptGeneral "Ĝeneralaj">
-<!ENTITY noscriptAppearance "Aspekto">
-<!ENTITY noscriptShow "Vidigi…">
-<!ENTITY noscriptCtxMenu "Kunteksta menuo">
-<!ENTITY noscriptStatusIcon "Statstrian bildeton">
-<!ENTITY noscriptFullAddr "Tutaj adresoj (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Tutaj domajnoj (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Bazaj duanivelaj domajnoj (noscript.net)">
-<!ENTITY noscriptTempCmd "Dumtempe rajtigi […]">
-<!ENTITY noscriptSound "Sona atentigo pri blokateco de skriptoj">
-<!ENTITY noscriptImport "Importi">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksporti">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Montri mesaĝon pri blokitaj skriptoj">
-<!ENTITY noscriptNotify.bottom "Meti la mesaĝon malsupren">
-<!ENTITY noscriptSound.choose "Elekti">
-<!ENTITY noscriptSound.choose.accesskey "E">
-<!ENTITY noscriptSound.play "Ludi">
-<!ENTITY noscriptSound.play.accesskey "L">
-<!ENTITY noscriptSound.reset "Redefaŭltigi">
-<!ENTITY noscriptSound.reset.accesskey "D">
-<!ENTITY noscriptAdvanced "Spertulaj">
-<!ENTITY noscriptAdditionalPermissions "Pliaj permesoj por fidataj retejoj">
-<!ENTITY noscriptAllowClipboard "Permesi kopiadon kaj enmetadon de aranĝita (&quot;riĉa&quot;) teksto je la ekstera tondujo">
-<!ENTITY noscriptAdditionalRestrictions "Pliaj limigoj por nefidataj retejoj">
-<!ENTITY noscriptPlugins "Kromaĵoj">
-<!ENTITY noscriptContentBlocker "Apliki ĉi tiujn limigojn ankaŭ al fidataj retejoj">
-<!ENTITY noscriptForbidJava "Malpermesi Ĝavon (Java™)">
-<!ENTITY noscriptForbidXSLT "Malpermesi XSLT-on">
-<!ENTITY noscriptForbidSilverlight "Malpermesi Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Malpermesi 〈IFRAME〉">
-<!ENTITY noscriptForbidFrames "Malpermesi 〈FRAME〉">
-<!ENTITY noscriptForbidFonts "Malpermesi @font-face">
-<!ENTITY noscriptForbidWebGL "Malpermesi WebGL">
-<!ENTITY noscriptForbidMedia "Malpermesi 〈AUDIO〉 / 〈VIDEO〉">
-<!ENTITY noscriptForbidFlash "Malpermesi Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Malpermesi aliajn kromaĵojn">
-<!ENTITY noscriptReloadWarn "Tiuj ĉi agordoj efikos nur por paĝoj novŝargotaj aŭ reŝargotaj de vi">
-<!ENTITY noscriptConfirmUnblock "Peti konfirmon antaŭ ol provizore malbloki objekton">
-<!ENTITY noscriptStatusLabel "Statstrian tekston">
-<!ENTITY noscriptForbidBookmarklets "Malpermesi skriptajn “paĝosignojn” (bookmarklets)">
-<!ENTITY noscriptShowPlaceholder "Montri lokokupan bildeton">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Provi normaligi JavaSkriptajn ligilojn">
-<!ENTITY noscriptAllowBookmarks "Rajtigi retejojn ŝargatajn per paĝosignoj">
-<!ENTITY noscriptAllowViaBookmarks "Rajtigi retejojn ŝargitajn per paĝosignoj">
-<!ENTITY noscriptAllowPing "Permesi 〈A PING…〉">
-<!ENTITY noscriptAllowLocalLinks "Permesi lokajn ligojn">
-<!ENTITY noscriptForbidPing "Malpermesi 〈A PING…〉">
-<!ENTITY noscriptForbidMetaRefresh "Malpermesi META-alidirektojn ene de elementoj 〈NOSCRIPT〉">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Montri mesaĝon pri blokitaj META-alidirektoj">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Blanklisto">
-<!ENTITY noscriptPermissions "Rajtoj">
-<!ENTITY noscriptRefresh "Reŝargi">
-<!ENTITY noscriptNotifications "Sciigoj">
-<!ENTITY noscriptToolbarToggle "Maldekstr-alklako de la ilarstria bildo de NoScript baskuligu rajtigon de la montrata senpere ŝargita retejo.">
-<!ENTITY noscriptTrusted "Fidataj">
-<!ENTITY noscriptUntrusted "Nefidataj">
-<!ENTITY noscriptUnknown "Nekonata">
-<!ENTITY noscriptAdd "Aldoni">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Fermi">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Kaŝi erojn 〈NOSCRIPT〉">
-<!ENTITY noscriptNselForce "Vidigi la eron 〈NOSCRIPT〉, kiu sekvas baritan 〈SCRIPT〉">
-<!ENTITY noscriptAutoAllowTopLevel "Provizore rajtigi ĉiujn senpere (ne en kadro ks) vizitatajn retejojn">
-<!ENTITY noscriptDescription "Plia protekto por via Firefox: NoScript permesas uzon de JavaSkripto, Javo kc nur al fidataj retejoj de vi elektitaj (ekzemple via retbankejo). Tiu ĉi laŭblanklista anticipa blokado malhelpas misuzadon de malsekuroj (konataj kaj eĉ nekonataj!) sen funkcikripligo… Kompetentuloj jesos: Firefox vere estas pli sekura kun NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloki per-CSS-ajn skanilojn">
-<!ENTITY noscriptOptFilterXGet "Purigi suspektajn interretejajn petojn">
-<!ENTITY noscriptOptFilterXPost "Transformu inter-retejajn POST-petojn en sendatenajn GET-petojn.">
-<!ENTITY noscriptShowConsole "Vidigi konzolon…">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Respondaro pri XSS (angle)…">
-<!ENTITY noscriptXssFaq.accesskey "R">
-<!ENTITY noscriptUnsafeReload "Nesekura reŝargo">
-<!ENTITY noscriptUnsafeReload.accesskey "N">
-<!ENTITY noscriptXssExceptions "Esceptoj el kontraŭ-XSS-a protekto">
-<!ENTITY noscriptXssExceptions.description "Celadresoj konformaj al ĉi tiuj regulesprimoj NE protektatos kontraŭ XSS.">
-<!ENTITY noscriptMatchSample "Ekzempla ŝablono:">
-<!ENTITY noscriptReset "Reŝargi">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Defaŭltigi">
-<!ENTITY noscriptResetDef.accesskey "D">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Retiri la provizorajn permesojn">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ne montri lokokupilojn por objektoj el Nefidataj retejoj">
-<!ENTITY noscriptCollapseBlockedObjects "Maletendi blokitajn objektojn">
-<!ENTITY noscriptExceptions "Esceptoj…">
-<!ENTITY noscriptBlockedObjects "Blokitaj objektoj">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloki ĉiujn objektojn venantajn de retejoj markitaj kiel Nefidataj">
-<!ENTITY noscriptTempAllowPage "Dumtempe rajtigi tutan ĉi tiun paĝon">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Rajtigi la tutan tiun ĉi paĝon">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Konservi la provizorajn permesojn por la paĝo">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Konduto">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Malpermesi aktivan TTT-enhavon venantan ne tra sekura (HTTPS) konekto:">
-<!ENTITY noscriptHttps.never "Neniam">
-<!ENTITY noscriptHttps.proxy "Dum uzado de prokura servilo (rekomendita kun Tor)">
-<!ENTITY noscriptHttps.always "Ĉiam">
-<!ENTITY noscriptHttpsForced "Devigi la sekvantajn retejojn uzi sekurajn (HTTPS) konektojn:">
-<!ENTITY noscriptHttpsForcedExceptions "Neniam postuli sekurajn (HTTPS) konektojn por la sekvantaj retejoj:">
-<!ENTITY noscriptSecureCookies "Ŝalti aŭtomatan plisekurigan traktadon de kuketoj">
-<!ENTITY noscriptSecureCookiesForced "Devigi ĉifradon de ĉiuj kuketoj difinitaj tra HTTPS de la jenaj retejoj:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignori nesekurajn kuketojn difinitajn tra HTTPS de la jenaj retejoj:">
-<!ENTITY noscriptClearClickTitle "ClearClick-a averto">
-<!ENTITY noscriptClearClickHeader "Ebla provo misklakigi per trompa ŝanĝo de aspekto!">
-<!ENTITY noscriptClearClickDescription "NoScript haltigis musan aŭ klavan agon kun parte kaŝita elemento. Alklaku la bildon sube por ŝanĝi inter montro de la kaŝita kaj la malkaŝita aspektoj.">
-<!ENTITY noscriptClearClickOpt "ClearClick-a protekto sur paĝoj…">
-<!ENTITY noscriptClearClickReport "Raporti">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Identigilo de la raporto:">
-<!ENTITY noscriptTrustedPagesAdj "fidataj">
-<!ENTITY noscriptUntrustedPagesAdj "nefidataj">
-<!ENTITY noscriptKeepLocked "Teni tiun eron ŝlosita (admonata)">
-<!ENTITY noscriptEmbeddings "Enkonstruaĵoj">
-<!ENTITY noscriptPrev "Antaŭe">
-<!ENTITY noscriptNext "Sekve">
-<!ENTITY noscriptFrameOptErr.title "Ne videbla enkadre">
-<!ENTITY noscriptFrameOptErr.desc "Por protekti vian sekurecon, la eldonisto de tiu ĉi enhavo malpermesas vidigi ĝin enkadre.">
-<!ENTITY noscriptFrameOptErr.link "Klaku ĉi tie por malfermi enhavon en nova fenestro">
-<!ENTITY noscriptBookmarkSync "Kopii NoScript-ajn agordojn en paĝosignon por facila sinkronigo">
-<!ENTITY noscriptShowReleaseNotes "Vidigi eldonajn notojn ĉe ĝisdatigo">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regularo:">
-<!ENTITY ABE.enabled.label "Ŝalti ABE-on (obeigilon de interpaĝaraj limoj)">
-<!ENTITY ABE.siteEnabled.label "Rajtigi ttt-ejojn puŝi siajn regularojn">
-<!ENTITY ABE.edit.label "Redakti…">
-<!ENTITY ABE.edit.accesskey "R">
-<!ENTITY ABE.enable.label "Ŝalti">
-<!ENTITY ABE.enable.accesskey "a">
-<!ENTITY ABE.disable.label "Malŝalti">
-<!ENTITY ABE.disable.accesskey "M">
-<!ENTITY ABE.refresh.label "Reŝargi">
-<!ENTITY ABE.refresh.accesskey "e">
-<!ENTITY noscriptUninstall "Malinstali">
-<!ENTITY noscriptRecentBlocked "Freŝe baritaj ttt-ejoj">
-<!ENTITY noscriptExternalFilters "Eksteraj filtriloj">
-<!ENTITY noscriptEF.enable "Ŝalti eksterajn filtrilojn">
-<!ENTITY noscriptEF.add "Nova filtrilo…">
-<!ENTITY noscriptEF.executable "Programdosiero:">
-<!ENTITY noscriptEF.browse "Elekti…">
-<!ENTITY noscriptEF.contentType "MIME-tipo de filtrotaĵoj (specifu ekzakte aŭ per regulesprimo):">
-<!ENTITY noscriptEF.exceptions "Ne filtri objektojn de la jenaj retejoj:">
-<!ENTITY noscriptEF.remove "Forigi">
-<!ENTITY noscriptPreset "Protektonivelo">
-<!ENTITY noscriptPreset.off "Malŝaltita (ĉu serioze?!)">
-<!ENTITY noscriptPreset.low "Facila (Nigra listo + TTT-sekurigo)">
-<!ENTITY noscriptPreset.medium "Klasika (Blanka listo + TTT-sekurigo)">
-<!ENTITY noscriptPreset.high "Fortikaĵo (Maksimuma protekto)">
-<!ENTITY noscript.hoverUI "Aperigi la rajtigmenuon kiam la musmontrilo estas sur bildsimbolo de NoScript">
-<!ENTITY noscriptDonate "Donaci">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/eo/noscript/noscript.properties b/extensions/noscript/chrome/locale/eo/noscript/noscript.properties
deleted file mode 100644
index bfc672a..0000000
--- a/extensions/noscript/chrome/locale/eo/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Defaŭlte rajtigi ĉiujn retejojn (danĝere)
-forbidGlobal=Defaŭlte malrajtigi ĉiujn retejojn (rekomendate)
-allowLocal=Rajtigi %S
-allowTemp=Dumtempe rajtigi %S
-forbidLocal=Malrajtigi %S
-allowed.glb=Danĝero! Ĉiuj retejoj estas defaŭlte rajtigataj!
-allowed.yes=Skriptoj aktuale permesitas
-allowed.prt=Skriptoj parte permesitas
-allowed.no=Skriptoj aktuale malpermesitas
-global.warning.title=Averto!
-global.warning.text=Skriptoj estos defaŭlte permesitaj (por ĉiuj ttt-ejoj).\nTio estas eble danĝera ago.\nĈu vi vere daŭrigas ?
-audio.samples=Sonaĵetoj
-confirm=Ĉu vi certigas ?
-alwaysAsk=Ĉiam peti konfirmon
-notifyHide=Kaŝi post %S sekundoj
-trust=Fidi %S
-distrust=Marki %S kiel nefidatan
-untrustedOrigin=nefidata origino
-xss.notify.generic=NoScript filtris eblan inter-ttt-ejan skriptan (XSS) provon de %S. Teknikaj informoj estas enprotokolitaj en la konzolo.
-xss.notify.showConsole=Vidigi konzolon...
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Purigis suspektan peton. Originala URL [%1$S] petis de [%2$S]. Purigita URL : [%3$S].
-xss.reason.filterXGetRef=Purigis suspektan petanton. URL [%1$S] petis de [%2$S]. Purigita petanto : [%3$S].
-xss.reason.filterXPost=Purigis suspektan alŝuton al [%1$S] de [%2$S]: transformis al nur-elŝuta GET peto.
-unsafeReload.warning=DANĜERE reŝargas suspektan\n\n%1$S [%2$S]\n\nDE [%3$S]\n\nNoScript NE protektos tiun peton !\n
-metaRefresh.notify=NoScript baris 〈META〉-alidirekton ene de 〈NOSCRIPT〉-elemento: %S en %S sekundoj.
-metaRefresh.notify.follow=Sekvi alidirekton
-metaRefresh.notify.follow.accessKey=A
-notify.options=Opcioj
-notify.options.accessKey=O
-reset.title=Restarigi agordojn de NoScript
-reset.warning=ĈIUJ NoScript-aj agordoj kaj ttt-ejaj rajtoj tuj anstataŭiĝos per la defaŭltaj.\nTio ne malfareblas.\nĈu vi daŭrigas?
-bookmarkSync.title=Agorda paĝosigno de NoScript
-bookmarkSync.message=Tiu ĉi paĝosigno estas NE por malfermi ĝin, sed por sinkronigi ĝin per servo kiel Weave aŭ la etendoprogramo XMarks.
-bookmarkSync.confirm=NoScript trovis agordan paĝosignon verŝajne konservitan en\n%S.\nĈu vi volas superskribi viajn lokajn NoScript-ajn agordojn per la enhavo de tiu paĝosigno ?
-ABE.notify=Peto %1$S filtritas de ABE: 〈%2$S〉 %3$S
-ABE.chooseEditor=Bonvolu elekti tekstredaktilon por ABE-a regularo
-ABE.syntaxError=Sintaksa eraro en regularo de ABE!
-allowFrom=Rajtigi ĉion de %S
-allowTempFrom=Dumtempe rajtigi ĉion de %S
-siteInfo.confirm=Vi estas petonta informojn pri la retejo «%1$S»\nper sendo de peto al %2$S.\nĈu vi volas fari tion?
-siteInfo.tooltip=Mez-alklaku aŭ shift+alklaku por ricevi informojn pri la retejo…
-ef.newName=Enigu nomon por la nova filtrilo:
-ef.activate=Filtrilo %S
-ef.options=%S opcioj...
-ef.locateExe=Elektu la plenumeblan dosieron por la filtrilo %S
-disable=Malebligi %S
-disable.accessKey=M
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-removal.title=Averto pri malpromociado de sekureco
-removal.message=Malebligante aŭ malinstalante NoScript, vi rezignas pri la TUTA protekto, kiun NoScript disponigas.\n\nSe vi nur estas tedita de la manipulado de skriptaj permesoj retejo post retejo, estas pli sekura ebleco.\n\nNoScript povas ĉesigi bloki skriptojn, escepte de tiuj, kiujn vi markas kiel nefidindajn, dum ĝi ankoraŭ protektas vin per la plej progresintaj sekurecaj kontraŭrimedoj kontraŭ XSS, Clickjacking, CSRF kaj aliaj retminacoj.\n\nĈu vi vere volas forigi la TUTAN protekton per NoScript?\n
-removal.no=Ne, ĉesu nur bloki skriptojn
-removal.yes=Jes, forigu la TUTAN protekton
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/es-AR/noscript/about.properties b/extensions/noscript/chrome/locale/es-AR/noscript/about.properties
deleted file mode 100644
index af5b6f7..0000000
--- a/extensions/noscript/chrome/locale/es-AR/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protección adicional para su Firefox: NoScript permite JavaScript, Java (y otros plugins) sólo para los dominios de confianza que usted elija (por ejemplo, el sitio web de su banco). Este enfoque de bloqueo preventivo basado en una lista blanca evita la explotación de vulnerabilidades de seguridad (conocidas e incluso desconocidas) sin pérdida de funcionalidad… Los expertos estarán de acuerdo: Firefox es realmente más seguro con NoScript :-)
-aboutTitle=Acerca de %S
-extensionContributors=Colaboradores:
-extensionContributors.tip=Personas a las que se debe agradecer por esta extensión
-extensionCreatorLabel=Autor:
-changelog=Registro de cambios
-changelog.tip=Mostrar el registro de cambios
-license=Licencia
-license.tip=Leer la licencia de usuario final
-logo.tip=Visitar la página principal de la extensión
-sponsor.tip=Visitar la página principal del patrocinador
-informaction.tip=Visitar la página principal de InformAction
-extensionHomepage.tip=Visitar la página principal de la extensión
-extensionCreator.tip=Visitar la página principal del autor
-version=Versión %S
diff --git a/extensions/noscript/chrome/locale/es-AR/noscript/noscript.dtd b/extensions/noscript/chrome/locale/es-AR/noscript/noscript.dtd
deleted file mode 100644
index c077437..0000000
--- a/extensions/noscript/chrome/locale/es-AR/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opciones…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opciones de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Puede especificar a cuáles sitios web le permitirá ejecutar scripts. Escriba la dirección o el dominio (por ejemplo, &quot;http://www.sitio.com&quot; o &quot;sitio.com&quot;) del sitio y luego haga clic en Permitir.">
-<!ENTITY noscriptWebAddress "Dirección del sitio web:">
-<!ENTITY noscriptAllow "Permitir">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Prohibir">
-<!ENTITY noscriptForbid.accesskey "h">
-<!ENTITY noscriptTrust "Marcar como Fiable">
-<!ENTITY noscriptTrust.accesskey "F">
-<!ENTITY noscriptUntrust "Marcar como No fiable">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Quitar los sitios seleccionados">
-<!ENTITY noscriptGloballyEnabled "Scripts permitidos globalmente (peligroso)">
-<!ENTITY noscriptAutoReload "Recargar automáticamente las páginas afectadas cuando cambie los permisos">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Apariencia">
-<!ENTITY noscriptShow "Mostrar…">
-<!ENTITY noscriptCtxMenu "Menú contextual">
-<!ENTITY noscriptStatusIcon "Icono en la barra de estado">
-<!ENTITY noscriptFullAddr "Direcciones completas (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Dominios completos (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dominios de segundo nivel (noscript.net)">
-<!ENTITY noscriptTempCmd "Permitir temporalmente […]">
-<!ENTITY noscriptSound "Aviso acústico cuando los scripts son bloqueados">
-<!ENTITY noscriptImport "Importar">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportar">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostrar mensaje referente a scripts bloqueados">
-<!ENTITY noscriptNotify.bottom "Colocar el mensaje en la parte inferior">
-<!ENTITY noscriptSound.choose "Elegir">
-<!ENTITY noscriptSound.choose.accesskey "E">
-<!ENTITY noscriptSound.play "Reproducir">
-<!ENTITY noscriptSound.play.accesskey "o">
-<!ENTITY noscriptSound.reset "Restablecer predeterminado">
-<!ENTITY noscriptSound.reset.accesskey "s">
-<!ENTITY noscriptAdvanced "Avanzado">
-<!ENTITY noscriptAdditionalPermissions "Permisos adicionales para sitios fiables">
-<!ENTITY noscriptAllowClipboard "Permitir copiar y pegar texto enriquecido desde portapapeles externo">
-<!ENTITY noscriptAdditionalRestrictions "Restricciones adicionales para sitios no fiables">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Aplicar estas restricciones también a los sitios fiables">
-<!ENTITY noscriptForbidJava "Prohibir Java™">
-<!ENTITY noscriptForbidXSLT "Prohibir XSLT">
-<!ENTITY noscriptForbidSilverlight "Prohibir Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Prohibir &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Prohibir &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Prohibir @font-face">
-<!ENTITY noscriptForbidWebGL "Prohibir WebGL">
-<!ENTITY noscriptForbidMedia "Prohibir &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Prohibir Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Prohibir otros plugins">
-<!ENTITY noscriptReloadWarn "Estas opciones tendrán efecto en páginas nuevas o (manualmente) recargadas">
-<!ENTITY noscriptConfirmUnblock "Pedir confirmación antes de desbloquear temporalmente un objeto">
-<!ENTITY noscriptStatusLabel "Etiqueta en la barra de estado">
-<!ENTITY noscriptForbidBookmarklets "Prohibir marcadores JavaScript">
-<!ENTITY noscriptShowPlaceholder "Mostrar icono de objeto bloqueado">
-<!ENTITY noscriptTruncateTitle "Truncar títulos de documentos">
-<!ENTITY noscriptFixLinks "Intentar corregir enlaces JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permitir todos los sitios de marcadores">
-<!ENTITY noscriptAllowViaBookmarks "Permitir la apertura de sitios a través de marcadores">
-<!ENTITY noscriptAllowPing "Permitir &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permitir enlaces locales">
-<!ENTITY noscriptForbidPing "Prohibir &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Prohibir META redireccionamientos dentro de elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "N">
-<!ENTITY noscriptWhitelist "Lista blanca">
-<!ENTITY noscriptPermissions "Permisos">
-<!ENTITY noscriptRefresh "Actualizar">
-<!ENTITY noscriptNotifications "Notificaciones">
-<!ENTITY noscriptToolbarToggle "Clic en botón NoScript de barra de navegación alterna permisos para actual máximo nivel del sitio">
-<!ENTITY noscriptTrusted "Fiable">
-<!ENTITY noscriptUntrusted "No fiable">
-<!ENTITY noscriptUnknown "Desconocida">
-<!ENTITY noscriptAdd "Agregar">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Cerrar">
-<!ENTITY noscriptSiteManager "Administrador de sitios">
-<!ENTITY noscriptSecurityManager "Administrador de seguridad">
-<!ENTITY noscriptPolicies "Políticas">
-<!ENTITY noscriptDefaultPolicies "Políticas predeterminadas">
-<!ENTITY noscriptSitePolicies "Políticas específicas por sitio">
-<!ENTITY noscriptNselNever "Ocultar los elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostrar el elemento &lt;NOSCRIPT&gt; que sigue a un &lt;SCRIPT&gt; bloqueado">
-<!ENTITY noscriptAutoAllowTopLevel "Permitir temporalmente por defecto los sitios de máximo nivel">
-<!ENTITY noscriptDescription "Protección adicional para su Firefox: NoScript permite JavaScript, Java (y otros plugins) sólo para los dominios de confianza que usted elija (por ejemplo, el sitio web de su banco). Este enfoque de bloqueo preventivo basado en una lista blanca evita la explotación de vulnerabilidades de seguridad (conocidas e incluso desconocidas) sin pérdida de funcionalidad… Los expertos estarán de acuerdo: Firefox es realmente más seguro con NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquear scanners basados en CSS">
-<!ENTITY noscriptOptFilterXGet "Depurar peticiones cross-site sospechosas">
-<!ENTITY noscriptOptFilterXPost "Convertir peticiones POST cross-site en peticiones GET sin datos">
-<!ENTITY noscriptShowConsole "Mostrar Consola…">
-<!ENTITY noscriptShowConsole.accesskey "M">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Preguntas frecuentes sobre XSS…">
-<!ENTITY noscriptXssFaq.accesskey "P">
-<!ENTITY noscriptUnsafeReload "Recargar sin protección">
-<!ENTITY noscriptUnsafeReload.accesskey "c">
-<!ENTITY noscriptXssExceptions "Excepciones a la protección anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Los destinos coincidentes con estas expresiones regulares NO estarán protegidos contra XSS.">
-<!ENTITY noscriptMatchSample "Ejemplo de patrones coincidentes:">
-<!ENTITY noscriptReset "Restablecer">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Restablecer a predeterminados">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revocar los permisos temporales">
-<!ENTITY noscriptRevokeTemp.accesskey "t">
-<!ENTITY noscriptNoUntrustedPlaceholder "No reservar lugar para objetos procedentes de sitios marcados como no fiables">
-<!ENTITY noscriptCollapseBlockedObjects "Contraer objetos bloqueados">
-<!ENTITY noscriptExceptions "Excepciones…">
-<!ENTITY noscriptBlockedObjects "Objetos bloqueados">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquear todos los objetos procedentes de un sitio marcado como no fiable">
-<!ENTITY noscriptTempAllowPage "Permitir temporalmente toda esta página">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Admitir toda esta página">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Hacer permanentes los permisos de la página">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/es-AR/noscript/noscript.properties b/extensions/noscript/chrome/locale/es-AR/noscript/noscript.properties
deleted file mode 100644
index fff06bf..0000000
--- a/extensions/noscript/chrome/locale/es-AR/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permitir scripts globalmente (peligroso)
-forbidGlobal=Prohibir scripts globalmente (recomendado)
-allowLocal=Permitir %S
-allowTemp=Permitir temporalmente %S
-forbidLocal=Prohibir %S
-allowed.glb=¡Peligro! Scripts permitidos globalmente
-allowed.yes=Scripts actualmente permitidos
-allowed.prt=Scripts parcialmente permitidos
-allowed.no=Scripts actualmente prohibidos
-global.warning.title=¡Advertencia!
-global.warning.text=Los scripts serán permitidos globalmente (para todos los sitios).\nEsta es una acción potencialmente peligrosa.\n¿Realmente desea continuar?
-audio.samples=Muestras de sonido
-confirm=¿Está seguro?
-alwaysAsk=Pedir confirmación siempre
-notifyHide=Ocultar después de %S segundos
-trust=Fiable %S
-distrust=Marcar %S como no fiable
-untrustedOrigin=un origen no fiable
-xss.notify.generic=NoScript ha filtrado un potencial intento de cross-site scripting (XSS) desde %S. Los detalles técnicos puede verlos en la Consola.
-xss.notify.showConsole=Mostrar Consola…
-xss.notify.showConsole.accessKey=M
-xss.reason.filterXGet=Depurada petición sospechosa. URL original: [%1$S] solicitada desde: [%2$S]. URL depurada: [%3$S].
-xss.reason.filterXGetRef=Depurada petición sospechosa de referencia. URL [%1$S] solicitada desde [%2$S]. Referencia depurada: [%3$S].
-xss.reason.filterXPost=Depurada carga sospechosa a [%1$S] desde [%2$S]: transformada en una petición GET de sólo descarga.
-unsafeReload.warning=Recargando DE MODO INSEGURO una sospechosa\n\n%1$S [%2$S]\n\n DESDE [%3$S]\n\n¡NoScript NO le protegerá de esta petición!\n
-metaRefresh.notify=NoScript bloqueó una <META> redirección dentro de un elemento <NOSCRIPT>: %S en %S segundos.
-metaRefresh.notify.follow=Seguir redirección
-metaRefresh.notify.follow.accessKey=S
-notify.options=Opciones
-notify.options.accessKey=O
-reset.title=Restablecer NoScript
-reset.warning=TODAS las preferencias y permisos de NoScript se restablecerán de inmediato a sus valores predeterminados.\nEsta acción no podrá deshacerse.\n¿Desea continuar?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/es-CL/noscript/about.properties b/extensions/noscript/chrome/locale/es-CL/noscript/about.properties
deleted file mode 100644
index ff2f61f..0000000
--- a/extensions/noscript/chrome/locale/es-CL/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=Acerca de %S
-extensionContributors=Colaboradores:
-extensionContributors.tip=Gente a la que deberías agradecer por esta extensión
-extensionCreatorLabel=Autor:
-changelog=Changelog
-changelog.tip=Show changelog
-license=Licencia
-license.tip=Read end-user license
-logo.tip=Visit extension home page
-sponsor.tip=Visit sponsor home page
-informaction.tip=Visit InformAction home page
-extensionHomepage.tip=Visit extension home page
-extensionCreator.tip=Visit author home page
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/es-CL/noscript/noscript.dtd b/extensions/noscript/chrome/locale/es-CL/noscript/noscript.dtd
deleted file mode 100644
index 1f81af0..0000000
--- a/extensions/noscript/chrome/locale/es-CL/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opciones de NoScript">
-<!ENTITY noscriptAbout "About NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. &quot;http://www.site.com&quot; or &quot;site.com&quot;) of the site you want to allow and then click Allow.">
-<!ENTITY noscriptWebAddress "Address of web site:">
-<!ENTITY noscriptAllow "Allow">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "Forbid">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Mark as Trusted">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Mark as Untrusted">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Remove Selected Sites">
-<!ENTITY noscriptGloballyEnabled "Scripts Globally Allowed (dangerous)">
-<!ENTITY noscriptAutoReload "Automatically reload affected pages when permissions change">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Appearance">
-<!ENTITY noscriptShow "Show…">
-<!ENTITY noscriptCtxMenu "Contextual menu">
-<!ENTITY noscriptStatusIcon "Status bar icon">
-<!ENTITY noscriptFullAddr "Full Addresses (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Full Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd level Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "Temporarily allow […]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Import">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Export">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Show message about blocked scripts">
-<!ENTITY noscriptNotify.bottom "Place message at the bottom">
-<!ENTITY noscriptSound.choose "Choose">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Play">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reset default">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Advanced">
-<!ENTITY noscriptAdditionalPermissions "Additional permissions for trusted sites">
-<!ENTITY noscriptAllowClipboard "Allow rich text copy and paste from external clipboard">
-<!ENTITY noscriptAdditionalRestrictions "Additional restrictions for untrusted sites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Forbid Java™">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbid Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbid other plugins">
-<!ENTITY noscriptReloadWarn "These options will take effect on new or (manually) reloaded pages">
-<!ENTITY noscriptConfirmUnblock "Ask for confirmation before temporarily unblocking an object">
-<!ENTITY noscriptStatusLabel "Status bar label">
-<!ENTITY noscriptForbidBookmarklets "Forbid bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Show placeholder icon">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Attempt to fix JavaScript links">
-<!ENTITY noscriptAllowBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowPing "Allow &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Allow local links">
-<!ENTITY noscriptForbidPing "Forbid &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Refresh">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Left clicking on NoScript toolbar button toggles permissions for current top-level site">
-<!ENTITY noscriptTrusted "Trusted">
-<!ENTITY noscriptUntrusted "Untrusted">
-<!ENTITY noscriptUnknown "Unknown">
-<!ENTITY noscriptAdd "Add">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Close">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Hide &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptNselForce "Show the &lt;NOSCRIPT&gt; element which follows a blocked &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS.">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions…">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image below to cycle between the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/es-CL/noscript/noscript.properties b/extensions/noscript/chrome/locale/es-CL/noscript/noscript.properties
deleted file mode 100644
index 35e928f..0000000
--- a/extensions/noscript/chrome/locale/es-CL/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Allow Scripts Globally (dangerous)
-forbidGlobal=Forbid Scripts Globally (advised)
-allowLocal=Allow %S
-allowTemp=Temporarily allow %S
-forbidLocal=Forbid %S
-allowed.glb=Danger! Scripts Globally Allowed
-allowed.yes=Scripts Currently Allowed
-allowed.prt=Scripts Partially Allowed
-allowed.no=Scripts Currently Forbidden
-global.warning.title=Warning!
-global.warning.text=Scripts are going to be allowed globally (for every site).\nThis is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=Audio samples
-confirm=Are you sure?
-alwaysAsk=Always ask for confirmation
-notifyHide=Hide after %S seconds
-trust=Trust %S
-distrust=Mark %S as Untrusted
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You\'re about to ask for information about the \"%1$S\" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/es-ES/noscript/about.properties b/extensions/noscript/chrome/locale/es-ES/noscript/about.properties
deleted file mode 100644
index aa9dc0d..0000000
--- a/extensions/noscript/chrome/locale/es-ES/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protección extra para su Firefox: NoScript sólo permite JavaScript, Java y otros plugins en los sitios web de confianza que Ud. elija (como la web de su banco). Este planteamiento preventivo basado en una lista blanca evita que se puedan explotar vulnerabilidades (conocidas o incluso desconocidas) sin pérdida de funcionalidad… Los expertos lo confirmarán: Firefox es realmente más seguro con NoScript :-)
-aboutTitle=Acerca de %S
-extensionContributors=Colaboradores:
-extensionContributors.tip=Personas a las que debe de agradecer esta extensión
-extensionCreatorLabel=Autor:
-changelog=Historial de cambios
-changelog.tip=Mostrar historial de cambios
-license=Licencia
-license.tip=Leer licencia de usuario final
-logo.tip=Visitar página web de la extensión
-sponsor.tip=Visitar página web del patrocinador
-informaction.tip=Visitar página web de InformAction
-extensionHomepage.tip=Visitar página web de la extensión
-extensionCreator.tip=Visitar página web del autor
-version=Versión %S
diff --git a/extensions/noscript/chrome/locale/es-ES/noscript/noscript.dtd b/extensions/noscript/chrome/locale/es-ES/noscript/noscript.dtd
deleted file mode 100644
index 3b05bb5..0000000
--- a/extensions/noscript/chrome/locale/es-ES/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opciones…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Configuración de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Aquí puede especificar las páginas web a las que va a permitir ejecutar código JavaScript. Escriba la dirección de la web que quiera incluir (ej. &quot;http://www.paginaweb.com&quot; o &quot;paginaweb.com&quot;) y después pulse &quot;Permitir&quot;.">
-<!ENTITY noscriptWebAddress "Dirección de la página web:">
-<!ENTITY noscriptAllow "Permitir">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Prohibir">
-<!ENTITY noscriptForbid.accesskey "r">
-<!ENTITY noscriptTrust "Marcar como fiable">
-<!ENTITY noscriptTrust.accesskey "f">
-<!ENTITY noscriptUntrust "Marcar como no fiable">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Eliminar sitio(s) web seleccionado(s)">
-<!ENTITY noscriptGloballyEnabled "Permitir JavaScript globalmente (peligroso)">
-<!ENTITY noscriptAutoReload "Recargar página automáticamente tras cambiar permisos">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Presentación">
-<!ENTITY noscriptShow "Mostrar…">
-<!ENTITY noscriptCtxMenu "Menú contextual">
-<!ENTITY noscriptStatusIcon "Icono en la barra de estado">
-<!ENTITY noscriptFullAddr "Direcciones completas (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Dominios completos (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dominios de segundo nivel (noscript.net)">
-<!ENTITY noscriptTempCmd "Permitir temporalmente […]">
-<!ENTITY noscriptSound "Aviso acústico al bloquear scripts">
-<!ENTITY noscriptImport "Importar">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportar">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostrar alertas de scripts bloqueados">
-<!ENTITY noscriptNotify.bottom "Mostrar alertas en la parte inferior">
-<!ENTITY noscriptSound.choose "Examinar">
-<!ENTITY noscriptSound.choose.accesskey "x">
-<!ENTITY noscriptSound.play "Reproducir">
-<!ENTITY noscriptSound.play.accesskey "p">
-<!ENTITY noscriptSound.reset "Restaurar predeterminado">
-<!ENTITY noscriptSound.reset.accesskey "d">
-<!ENTITY noscriptAdvanced "Avanzado">
-<!ENTITY noscriptAdditionalPermissions "Permisos adicionales para sitios fiables">
-<!ENTITY noscriptAllowClipboard "Permitir copiar y pegar texto enriquecido desde otro programa">
-<!ENTITY noscriptAdditionalRestrictions "Restricciones adicionales para sitios no fiables">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Aplicar estas restricciones también a los sitios fiables">
-<!ENTITY noscriptForbidJava "Prohibir Java™">
-<!ENTITY noscriptForbidXSLT "Prohibir XSLT">
-<!ENTITY noscriptForbidSilverlight "Prohibir Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Prohibir &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Prohibir &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Prohibir @font-face">
-<!ENTITY noscriptForbidWebGL "Prohibir WebGL">
-<!ENTITY noscriptForbidMedia "Prohibir &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Prohibir Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Prohibir otros plugins">
-<!ENTITY noscriptReloadWarn "Estas opciones tendrán efecto en páginas nuevas o tras recargar manualmente">
-<!ENTITY noscriptConfirmUnblock "Pedir confirmación antes de desbloquear temporalmente un objeto">
-<!ENTITY noscriptStatusLabel "Etiqueta informativa en la barra de estado">
-<!ENTITY noscriptForbidBookmarklets "Prohibir Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Mostrar indicador de objeto bloqueado (placeholder)">
-<!ENTITY noscriptTruncateTitle "Truncar títulos de documentos">
-<!ENTITY noscriptFixLinks "Intentar corregir enlaces JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permitir todos los sitios de marcadores">
-<!ENTITY noscriptAllowViaBookmarks "Permitir sitios abiertos desde marcadores">
-<!ENTITY noscriptAllowPing "Permitir &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permitir enlaces locales">
-<!ENTITY noscriptForbidPing "Prohibir &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Prohibir META redireccionamientos dentro de elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "h">
-<!ENTITY noscriptNotifyMeta "Mostrar mensaje sobre META redireccionamientos bloqueados">
-<!ENTITY noscriptNotifyMeta.accesskey "M">
-<!ENTITY noscriptWhitelist "Lista blanca">
-<!ENTITY noscriptPermissions "Permisos">
-<!ENTITY noscriptRefresh "Recargar">
-<!ENTITY noscriptNotifications "Notificaciones">
-<!ENTITY noscriptToolbarToggle "Con clic izquierdo en icono de la barra de herramientas se conmutan los permisos para el sitio web">
-<!ENTITY noscriptTrusted "Fiable">
-<!ENTITY noscriptUntrusted "No fiable">
-<!ENTITY noscriptUnknown "Desconocida">
-<!ENTITY noscriptAdd "Añadir">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Cerrar">
-<!ENTITY noscriptSiteManager "Administrador de sitios">
-<!ENTITY noscriptSecurityManager "Administrador de seguridad">
-<!ENTITY noscriptPolicies "Normas a aplicar">
-<!ENTITY noscriptDefaultPolicies "Normas predeterminadas">
-<!ENTITY noscriptSitePolicies "Normas específicas por sitio">
-<!ENTITY noscriptNselNever "Ocultar los elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostrar el elemento &lt;NOSCRIPT&gt; que sigue a un &lt;SCRIPT&gt; bloqueado">
-<!ENTITY noscriptAutoAllowTopLevel "Permitir por defecto de forma temporal los dominios de máximo nivel">
-<!ENTITY noscriptDescription "Protección extra para su Firefox: NoScript sólo permite JavaScript, Java y otros plugins en los sitios web de confianza que Ud. elija (como la web de su banco). Este planteamiento preventivo basado en una lista blanca evita que se puedan explotar vulnerabilidades (conocidas o incluso desconocidas) sin pérdida de funcionalidad… Los expertos lo confirmarán: Firefox es realmente más seguro con NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquear escáners basados en CSS">
-<!ENTITY noscriptOptFilterXGet "Depurar peticiones cross-site sospechosas">
-<!ENTITY noscriptOptFilterXPost "Convertir peticiones POST cross-site en peticiones GET sin datos">
-<!ENTITY noscriptShowConsole "Mostrar Consola de error…">
-<!ENTITY noscriptShowConsole.accesskey "C">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "FAQ sobre XSS…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Recarga en modo inseguro">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Excepciones a la protección anti XSS">
-<!ENTITY noscriptXssExceptions.description "Los destinos que coincidan con estas expresiones regulares NO estarán protegidos frente a XSS">
-<!ENTITY noscriptMatchSample "Ejemplo de coincidencia con las expresiones:">
-<!ENTITY noscriptReset "Restaurar">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Restaurar predeterminados">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "50em">
-<!ENTITY noscriptRevokeTemp "Revocar permisos temporales">
-<!ENTITY noscriptRevokeTemp.accesskey "t">
-<!ENTITY noscriptNoUntrustedPlaceholder "No mostrar indicadores de objetos bloqueados provenientes de sitios marcados como no fiables">
-<!ENTITY noscriptCollapseBlockedObjects "Colapsar objetos bloqueados">
-<!ENTITY noscriptExceptions "Excepciones…">
-<!ENTITY noscriptBlockedObjects "Objetos bloqueados">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquear todos los objetos provenientes de sitios no fiables">
-<!ENTITY noscriptTempAllowPage "Permitir temporalmente toda la página">
-<!ENTITY noscriptTempAllowPage.accesskey "g">
-<!ENTITY noscriptAllowPage "Permitir toda esta página">
-<!ENTITY noscriptAllowPage.accesskey "P">
-<!ENTITY noscriptTempToPerm "Hacer permanentes los permisos de la página">
-<!ENTITY noscriptTempToPerm.accesskey "H">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "FAQ HTTPS">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportamiento">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Prohibir contenidos web activos salvo que provengan de una conexión segura (HTTPS)">
-<!ENTITY noscriptHttps.never "Nunca">
-<!ENTITY noscriptHttps.proxy "Al usar un proxy (recomendado con Tor)">
-<!ENTITY noscriptHttps.always "Siempre">
-<!ENTITY noscriptHttpsForced "Obligar a usar conexiones seguras (HTTPS) a los siguientes sitios:">
-<!ENTITY noscriptHttpsForcedExceptions "No obligar nunca a usar conexiones seguras (HTTPS) a los siguientes sitios:">
-<!ENTITY noscriptSecureCookies "Activar la gestión automática segura de cookies">
-<!ENTITY noscriptSecureCookiesForced "Obligar a cifrar todas las cookies recibidas por HTTPS en los siguientes sitios:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorar cookies no seguras recibidas por HTTPS de los siguientes sitios:">
-<!ENTITY noscriptClearClickTitle "Aviso de ClearClick">
-<!ENTITY noscriptClearClickHeader "¡Posible intento de clickjacking / camuflaje de UI!">
-<!ENTITY noscriptClearClickDescription "NoScript interceptó una interacción de ratón o teclado con un elemento parcialmente oculto. Pulse en la imagen superior para comparar la versión oculta y la ya revelada.">
-<!ENTITY noscriptClearClickOpt "Usar la protección ClearClick en páginas…">
-<!ENTITY noscriptClearClickReport "Informe">
-<!ENTITY noscriptClearClickReport.accesskey "I">
-<!ENTITY noscriptClearClickReportId "ID del informe:">
-<!ENTITY noscriptTrustedPagesAdj "fiables">
-<!ENTITY noscriptUntrustedPagesAdj "no fiables">
-<!ENTITY noscriptKeepLocked "Mantener bloqueado ese elemento (recomendado)">
-<!ENTITY noscriptEmbeddings "Objetos incrustados">
-<!ENTITY noscriptPrev "Anterior">
-<!ENTITY noscriptNext "Siguiente">
-<!ENTITY noscriptFrameOptErr.title "Este contenido no puede mostrarse en un frame (marco)">
-<!ENTITY noscriptFrameOptErr.desc "Para proteger su seguridad, el proveedor de ese contenido no permite que se muestre en un frame.">
-<!ENTITY noscriptFrameOptErr.link "Pulse aquí para abrirlo en una nueva ventana">
-<!ENTITY noscriptBookmarkSync "Guardar una copia de la configuración de NoScript para facilitar la sincronización">
-<!ENTITY noscriptShowReleaseNotes "Mostrar las notas de versión cuando se actualice">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Reglas:">
-<!ENTITY ABE.enabled.label "Habilitar ABE (Guardián de límites de aplicación)">
-<!ENTITY ABE.siteEnabled.label "Permitir que los sitios apliquen sus propias reglas">
-<!ENTITY ABE.edit.label "Editar…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Habilitar">
-<!ENTITY ABE.enable.accesskey "H">
-<!ENTITY ABE.disable.label "Deshabilitar">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Recargar">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Desinstalar">
-<!ENTITY noscriptRecentBlocked "Últimos sitios bloqueados">
-<!ENTITY noscriptExternalFilters "Filtros externos">
-<!ENTITY noscriptEF.enable "Activar filtros externos">
-<!ENTITY noscriptEF.add "Nuevo filtro…">
-<!ENTITY noscriptEF.executable "Archivo ejecutable:">
-<!ENTITY noscriptEF.browse "Examinar…">
-<!ENTITY noscriptEF.contentType "Tipo de contenido (MIME) a filtrar (coincidencia exacta o expresión regular):">
-<!ENTITY noscriptEF.exceptions "No filtrar objetos provenientes de estos sitios:">
-<!ENTITY noscriptEF.remove "Eliminar">
-<!ENTITY noscriptPreset "Nivel de seguridad">
-<!ENTITY noscriptPreset.off "Desactivado (¿lo dice en serio?)">
-<!ENTITY noscriptPreset.low "Relajado (Lista negra + Seguridad web)">
-<!ENTITY noscriptPreset.medium "Clásico (Lista blanca + Seguridad web)">
-<!ENTITY noscriptPreset.high "Fuerte (Bloqueo completo)">
-<!ENTITY noscript.hoverUI "Abrir menú de permisos cuando el ratón se sitúa sobre el icono de NosScript">
-<!ENTITY noscriptDonate "Donar">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/es-ES/noscript/noscript.properties b/extensions/noscript/chrome/locale/es-ES/noscript/noscript.properties
deleted file mode 100644
index d962c17..0000000
--- a/extensions/noscript/chrome/locale/es-ES/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permitir JavaScript globalmente (peligroso)
-forbidGlobal=Bloquear JavaScript globalmente (recomendado)
-allowLocal=Permitir %S
-allowTemp=Permitir temporalmente %S
-forbidLocal=Bloquear %S
-allowed.glb=¡Atención! JavaScript permitidos globalmente
-allowed.yes=JavaScripts actualmente permitidos
-allowed.prt=JavaScripts parcialmente permitidos
-allowed.no=JavaScripts actualmente prohibidos
-global.warning.title=¡Atención!
-global.warning.text=Se va a activar JavaScript globalmente (para todas las páginas web).\n Hacerlo es potencialmente peligroso.\n ¿Está seguro de querer continuar?
-audio.samples=Muestras de sonido
-confirm=¿Está seguro?
-alwaysAsk=Pedir confirmación siempre
-notifyHide=Ocultar automáticamente tras %S segundos
-trust=Considerar fiable %S
-distrust=Marcar %S como no fiable
-untrustedOrigin=un origen no fiable
-xss.notify.generic=NoScript ha filtrado un posible intento de cross-site scripting (XSS) desde %S. Los detalles técnicos pueden visualizarse en la Consola de error.
-xss.notify.showConsole=Mostrar Consola de error…
-xss.notify.showConsole.accessKey=C
-xss.reason.filterXGet=Depurada una petición sospechosa. URL original: [%1$S] solicitada desde: [%2$S]. URL depurada: [%3$S].
-xss.reason.filterXGetRef=Depurado el referer de una petición sospechosa. URL [%1$S] solicitada desde [%2$S]. Referrer depurado: [%3$S].
-xss.reason.filterXPost=Depurada una carga sospechosa a [%1$S] desde [%2$S]: convertida en una petición GET de sólo descarga.
-unsafeReload.warning=Recargando EN MODO NO SEGURO una petición sospechosa\n\n%1$S [%2$S]\n\n DESDE [%3$S]\n\n¡NoScript NO le protegerá ante esta petición!\n
-metaRefresh.notify=NoScript bloqueó un <META>; redireccionamiento dentro de un elemento <NOSCRIPT>: %S en %S segundos.
-metaRefresh.notify.follow=Seguir redireccionamiento
-metaRefresh.notify.follow.accessKey=S
-notify.options=Opciones
-notify.options.accessKey=O
-reset.title=Restaurar NoScript
-reset.warning=TODAS las preferencias y permisos de NoScript se restaurarán de inmediato a sus valores predeterminados.\nEsta acción no podrá deshacerse.\n¿Desea continuar?
-bookmarkSync.title=Marcador de configuración de NoScript
-bookmarkSync.message=Este marcador NO se usa para acceder a una página, sino para que se sincronice utilizando un servicio como el que ofrecen las extensiones Weave o XMarks.
-bookmarkSync.confirm=NoScript ha encontrado un marcador de configuración aparentemente guardado en\n%S.\n¿Está seguro de querer reemplazar su configuración local de NoScript con el contenido de ese marcador?
-ABE.notify=La petición %1$S ha sido filtrada por ABE: <%2$S> %3$S
-ABE.chooseEditor=Por favor elija un editor de texto para las reglas de ABE
-ABE.syntaxError=Error de sintaxis en las reglas de ABE
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Permitir todo de %S
-allowTempFrom=Permitir temporalmente todo de %S
-siteInfo.confirm=Va a solicitar información sobre el sitio "%1$S"\nal enviar una petición a %2$S.\n¿Quiere continuar?
-siteInfo.tooltip=Haga clic intermedio o MAYÚS+clic para información del sitio…
-ef.activate=Filtro %S
-ef.options=Opciones de %S…
-ef.newName=Introduzca el nombre del nuevo filtro:
-ef.locateExe=Seleccionar el archivo ejecutable para el filtro %S
-disable=Desactivar %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/et-EE/noscript/about.properties b/extensions/noscript/chrome/locale/et-EE/noscript/about.properties
deleted file mode 100644
index 439a71e..0000000
--- a/extensions/noscript/chrome/locale/et-EE/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Lisakaitse Firefoxile: NoScript lubab JavaSkripti, Javat (ja teisi pluginaid) ainult usaldusväärsetest domeenidest sinu valikul (nt kodupanga veebilehel). Antud nn valgel nimekirjal põhinev blokeerimine hoiab ära tuntud ja isegi tundmatute turvaaukude kuritahtlikku ärakasutamist ilma funktsionaalsust kaotamata… Eksperdid nõustuvad, et Firefox on turvalisem koos NoScriptiga :-)
-aboutTitle=Täpsemalt lisast %S
-extensionContributors=Kaasaaitajad:
-extensionContributors.tip=Keda peaksid tänama antud laienduse eest
-extensionCreatorLabel=Autor:
-changelog=Muutuste logi
-changelog.tip=Näita muutuste logi
-license=Litsents
-license.tip=Loe lõppkasutaja litsentsi
-logo.tip=Külasta laienduse kodulehte
-sponsor.tip=Külasta sponsori kodulehte
-informaction.tip=Külasta InformActioni kodulehte
-extensionHomepage.tip=Külasta laienduse kodulehte
-extensionCreator.tip=Külasta autori kodulehte
-version=Versioon %S
diff --git a/extensions/noscript/chrome/locale/et-EE/noscript/noscript.dtd b/extensions/noscript/chrome/locale/et-EE/noscript/noscript.dtd
deleted file mode 100644
index 8ec66c1..0000000
--- a/extensions/noscript/chrome/locale/et-EE/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Sätted…">
-<!ENTITY noscriptOptions.accesskey "S">
-<!ENTITY noscriptOptionsLong "NoScripti sätted">
-<!ENTITY noscriptAbout "Täpsemalt lisast NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Sa saad määrata, millistel veebilehtedel lubatakse skripte käivitada. Kirjuta veebilehe aadress või domeeni, mida soovid lubada (nt &quot;http://www.site.com&quot; või &quot;site.com&quot;) ja klõpsa Luba nuppu">
-<!ENTITY noscriptWebAddress "Veebilehe aadress:">
-<!ENTITY noscriptAllow "Luba">
-<!ENTITY noscriptAllow.accesskey "L">
-<!ENTITY noscriptForbid "Keela">
-<!ENTITY noscriptForbid.accesskey "K">
-<!ENTITY noscriptTrust "Märgi usaldusväärseks">
-<!ENTITY noscriptTrust.accesskey "u">
-<!ENTITY noscriptUntrust "Märgi ebausaldusväärseks">
-<!ENTITY noscriptUntrust.accesskey "m">
-<!ENTITY noscriptRemoveSelected "Kustuta valitud veebilehed">
-<!ENTITY noscriptGloballyEnabled "Skriptid on lubatud (ohtlik)">
-<!ENTITY noscriptAutoReload "Õiguste muutumisel laetakse mõjustatud lehed automaatselt uuesti">
-<!ENTITY noscriptGeneral "Üldine">
-<!ENTITY noscriptAppearance "Välimus">
-<!ENTITY noscriptShow "Näita…">
-<!ENTITY noscriptCtxMenu "Kontekstimenüü">
-<!ENTITY noscriptStatusIcon "Ikoon olekuribal">
-<!ENTITY noscriptFullAddr "Täisaadressid (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Täisdomeenid (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Teise taseme domeenid (noscript.net)">
-<!ENTITY noscriptTempCmd "Luba ajutiselt […]">
-<!ENTITY noscriptSound "Teata heliga skriptide blokeerimisest">
-<!ENTITY noscriptImport "Impordi">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Ekspordi">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Näita teadet blokeeritud skriptide kohta">
-<!ENTITY noscriptNotify.bottom "Aseta sõnum allserva">
-<!ENTITY noscriptSound.choose "Vali">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Mängi">
-<!ENTITY noscriptSound.play.accesskey "M">
-<!ENTITY noscriptSound.reset "Lähtesta">
-<!ENTITY noscriptSound.reset.accesskey "h">
-<!ENTITY noscriptAdvanced "Muud">
-<!ENTITY noscriptAdditionalPermissions "Lisaõigused usaldusväärsetele veebilehtedele">
-<!ENTITY noscriptAllowClipboard "Luba vormindatud teksti kopeerimist ja asetamist välisest lõikepuhvrist">
-<!ENTITY noscriptAdditionalRestrictions "Lisapiirangud ebausaldusväärsetele veebilehtedele">
-<!ENTITY noscriptPlugins "Pluginad">
-<!ENTITY noscriptContentBlocker "Kehtesta antud piirangud ka usaldusväärsete veebilehtede jaoks">
-<!ENTITY noscriptForbidJava "Keela Java™">
-<!ENTITY noscriptForbidXSLT "Keela XSLT">
-<!ENTITY noscriptForbidSilverlight "Keela Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Keela &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Keela &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Keela @font-face">
-<!ENTITY noscriptForbidWebGL "Keela WebGL">
-<!ENTITY noscriptForbidMedia "Keela &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Keela Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Keela teised pluginad">
-<!ENTITY noscriptReloadWarn "Need valikud jõustuvad uutel või (käsitsi) uuesti laetud lehtedel">
-<!ENTITY noscriptConfirmUnblock "Küsi kinnitust enne objekti ajutist blokeerimist">
-<!ENTITY noscriptStatusLabel "Pealdis olekuribal">
-<!ENTITY noscriptForbidBookmarklets "Keela funktsionaaljärjehoidjad">
-<!ENTITY noscriptShowPlaceholder "Näita kohatäitja ikooni">
-<!ENTITY noscriptTruncateTitle "Lühenda dokumendi päiseid">
-<!ENTITY noscriptFixLinks "Ürita parandada JavaScripti linke">
-<!ENTITY noscriptAllowBookmarks "Luba veebilehed, mis on avatud järjehoidjate kaudu">
-<!ENTITY noscriptAllowViaBookmarks "Luba veebilehed, mis on avatud järjehoidjate kaudu">
-<!ENTITY noscriptAllowPing "Luba &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Luba kohalikke linke">
-<!ENTITY noscriptForbidPing "Keela &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Keela META ümbersuunamised &lt;NOSCRIPT&gt; elementide sees">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "m">
-<!ENTITY noscriptNotifyMeta "Teata META ümbersuunamiste blokeerimistest">
-<!ENTITY noscriptNotifyMeta.accesskey "T">
-<!ENTITY noscriptWhitelist "Valge nimekiri">
-<!ENTITY noscriptPermissions "Õigused">
-<!ENTITY noscriptRefresh "Värskenda">
-<!ENTITY noscriptNotifications "Märguanded">
-<!ENTITY noscriptToolbarToggle "Vasak hiireklõps NoScript tööriistaribal lülitab ümber praeguse tipptaseme veebilehe õigused">
-<!ENTITY noscriptTrusted "Usaldusväärsed">
-<!ENTITY noscriptUntrusted "Ebausaldusväärsed">
-<!ENTITY noscriptUnknown "Teadmata">
-<!ENTITY noscriptAdd "Lisa">
-<!ENTITY noscriptAdd.accesskey "L">
-<!ENTITY noscriptClose "Sulge">
-<!ENTITY noscriptSiteManager "Veebilehtede haldur">
-<!ENTITY noscriptSecurityManager "Turvalisuse haldur">
-<!ENTITY noscriptPolicies "Reeglid">
-<!ENTITY noscriptDefaultPolicies "Vaikereeglid">
-<!ENTITY noscriptSitePolicies "Veebilehe-spetsiifilised reeglid">
-<!ENTITY noscriptNselNever "Peida &lt;NOSCRIPT&gt; elemendid">
-<!ENTITY noscriptNselForce "Näita &lt;NOSCRIPT&gt; elementi, mis järgneb blokeeritud &lt;SCRIPT&gt; elemendile">
-<!ENTITY noscriptAutoAllowTopLevel "Luba ajutiselt vaikimisi tipptaseme veebilehed">
-<!ENTITY noscriptDescription "Lisakaitse Firefoxile: NoScript lubab JavaSkripti, Javat (ja teisi pluginaid) ainult usaldusväärsetest domeenidest sinu valikul (nt kodupanga veebilehel). Antud nn valgel nimekirjal põhinev blokeerimine hoiab ära tuntud ja isegi tundmatute turvaaukude kuritahtlikku ärakasutamist ilma funktsionaalsust kaotamata… Eksperdid nõustuvad, et Firefox on turvalisem koos NoScriptiga :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blokeeri CSS-põhinevad skannerid">
-<!ENTITY noscriptOptFilterXGet "Puhasta kahtlased päringud teistelt veebilehtedelt">
-<!ENTITY noscriptOptFilterXPost "Muuda POST-päringud teistelt veebilehtedelt andmevabadeks GET-päringuteks">
-<!ENTITY noscriptShowConsole "Näita konsooli…">
-<!ENTITY noscriptShowConsole.accesskey "k">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Murdskriptimise KKK">
-<!ENTITY noscriptXssFaq.accesskey "K">
-<!ENTITY noscriptUnsafeReload "Mitteturvaline uuestilaadimine">
-<!ENTITY noscriptUnsafeReload.accesskey "M">
-<!ENTITY noscriptXssExceptions "Erandid murdskriptimise vastases kaitses">
-<!ENTITY noscriptXssExceptions.description "Sihtkohti, mis sobivad järgnevate regulaaravaldistega, ei kaitsta murdskriptimise suhtes">
-<!ENTITY noscriptMatchSample "Mallvõrdluse näide">
-<!ENTITY noscriptReset "Lähtesta">
-<!ENTITY noscriptReset.accesskey "L">
-<!ENTITY noscriptResetDef "Taasta algsätted">
-<!ENTITY noscriptResetDef.accesskey "a">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Tühista ajutised õigused">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Kohatäitjaid ei näidata objektidel, mis tulevad ebausaldusväärsetelt veebilehtedelt">
-<!ENTITY noscriptCollapseBlockedObjects "Blokeeritud objektid ahendatakse">
-<!ENTITY noscriptExceptions "Erandid…">
-<!ENTITY noscriptBlockedObjects "Blokeeritud objektid">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokeeri kõik ebausaldusväärsetelt veebilehtedelt pärinevad objektid">
-<!ENTITY noscriptTempAllowPage "Luba ajutiselt kõik sellel lehel">
-<!ENTITY noscriptTempAllowPage.accesskey "a">
-<!ENTITY noscriptAllowPage "Luba kõik sellel lehel">
-<!ENTITY noscriptAllowPage.accesskey "K">
-<!ENTITY noscriptTempToPerm "Sea lehe õigused püsivaks">
-<!ENTITY noscriptTempToPerm.accesskey "p">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS KKK">
-<!ENTITY noscriptHttpsFaq.accesskey "K">
-<!ENTITY noscriptHttps.behavior "Käitumine">
-<!ENTITY noscriptHttps.cookies "Küpsised">
-<!ENTITY noscriptHttps.description "Aktiivse veebilehe sisu keelatakse kui see ei tule turvalise (HTTPS) ühenduse kaudu:">
-<!ENTITY noscriptHttps.never "Mitte kunagi">
-<!ENTITY noscriptHttps.proxy "Puhverserverit kasutades (soovitatav torrenti puhul)">
-<!ENTITY noscriptHttps.always "Alati">
-<!ENTITY noscriptHttpsForced "Sunni järgnevaid veebilehti kasutama turvalist (HTTPS) ühendust:">
-<!ENTITY noscriptHttpsForcedExceptions "Turvalist (HTTPS) ühendust ei sunnita kunagi järgnevate veebilehtede korral:">
-<!ENTITY noscriptSecureCookies "Automaatne turvaküpsiste haldamine lubatud">
-<!ENTITY noscriptSecureCookiesForced "Kõik järgnevate veebilehtede poolt HTTPS kaudu loodud küpsised krüpteeritakse">
-<!ENTITY noscriptSecureCookiesExceptions "Kõiki järgnevate veebilehtede poolt HTTPS kaudu loodud mitteturvalisi küpsiseid eiratakse">
-<!ENTITY noscriptClearClickTitle "ClearClick hoiatus">
-<!ENTITY noscriptClearClickHeader "Võimalik kliki röövimise/kasutajaliidese muutmise katse!">
-<!ENTITY noscriptClearClickDescription "NoScript pidas kinni hiire või klaviatuuri interaktsiooni osaliselt varjatud elemendiga. Hiireklõps alloleval pildil lülitab ümber tõkestatud ja puhastatud versiooni vahel">
-<!ENTITY noscriptClearClickOpt "ClearClick kaitse lehtedel...">
-<!ENTITY noscriptClearClickReport "Aruanne">
-<!ENTITY noscriptClearClickReport.accesskey "A">
-<!ENTITY noscriptClearClickReportId "Aruande ID:">
-<!ENTITY noscriptTrustedPagesAdj "usaldatavad">
-<!ENTITY noscriptUntrustedPagesAdj "mitteusaldatavad">
-<!ENTITY noscriptKeepLocked "Lukusta antud element (soovitatav)">
-<!ENTITY noscriptEmbeddings "Manusobjektid">
-<!ENTITY noscriptPrev "Eelmine">
-<!ENTITY noscriptNext "Järgmine">
-<!ENTITY noscriptFrameOptErr.title "Antud sisu ei saa esitada raami sees">
-<!ENTITY noscriptFrameOptErr.desc "Sinu turvalisuse huvides ei luba antud sisu avaldaja seda esitada raami sees">
-<!ENTITY noscriptFrameOptErr.link "Kliki siia, et avada antud sisu uues aknas">
-<!ENTITY noscriptBookmarkSync "Varunda NoScript'i sätted järjehoidjana, et hõlbustada sünkroniseerimist">
-<!ENTITY noscriptShowReleaseNotes "Näita uuenduste väljalaske märkmeid">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Reeglid:">
-<!ENTITY ABE.enabled.label "Luba ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Luba veebilehtedel kehtestada enda reegleid">
-<!ENTITY ABE.edit.label "Muuda...">
-<!ENTITY ABE.edit.accesskey "M">
-<!ENTITY ABE.enable.label "Luba">
-<!ENTITY ABE.enable.accesskey "L">
-<!ENTITY ABE.disable.label "Keela">
-<!ENTITY ABE.disable.accesskey "K">
-<!ENTITY ABE.refresh.label "Värskenda">
-<!ENTITY ABE.refresh.accesskey "V">
-<!ENTITY noscriptUninstall "Eemalda">
-<!ENTITY noscriptRecentBlocked "Viimati blokeeritud veebilehed">
-<!ENTITY noscriptExternalFilters "Välised filtrid">
-<!ENTITY noscriptEF.enable "Luba välised filtrid">
-<!ENTITY noscriptEF.add "Uus filter…">
-<!ENTITY noscriptEF.executable "Käsufail:">
-<!ENTITY noscriptEF.browse "Sirvi…">
-<!ENTITY noscriptEF.contentType "Filtreeritav sisu tüüp (MIME) (täpne nimi või regulaaravaldis):">
-<!ENTITY noscriptEF.exceptions "Nendelt saitidelt saabuvaid objekte ei filtreerita:">
-<!ENTITY noscriptEF.remove "Eemalda">
-<!ENTITY noscriptPreset "Turvalisuse tase">
-<!ENTITY noscriptPreset.off "Väljas (Kas oled kindel?)">
-<!ENTITY noscriptPreset.low "Pingevaba (Must nimekiri + Veebi turvalisus)">
-<!ENTITY noscriptPreset.medium "Klassikaline (Valge nimekiri + Veebi turvalisus)">
-<!ENTITY noscriptPreset.high "Kindlus (Täiskaitse)">
-<!ENTITY noscript.hoverUI "Hiire viimine NoScript ikooni peale avab õiguste menüü">
-<!ENTITY noscriptDonate "Anneta">
-<!ENTITY noscriptDonate.accesskey "n">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/et-EE/noscript/noscript.properties b/extensions/noscript/chrome/locale/et-EE/noscript/noscript.properties
deleted file mode 100644
index 577b495..0000000
--- a/extensions/noscript/chrome/locale/et-EE/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Skriptid lubatud (ohtlik)
-forbidGlobal=Skriptid keelatud (soovitatav)
-allowLocal=Luba %S
-allowTemp=Luba ajutiselt %S
-forbidLocal=Keela %S
-allowed.glb=Tähelepanu! Skriptid on lubatud
-allowed.yes=Skriptid praegu lubatud
-allowed.prt=Skriptid osaliselt lubatud
-allowed.no=Skriptid praegu keelatud
-global.warning.title=Hoiatus!
-global.warning.text=Skriptid lubatakse kõikjal (kõikide veebilehtede puhul).\nSee võib olla ohtlik.\nKas soovid tõesti seda teha?
-audio.samples=Helisämplid
-confirm=Oled kindel?
-alwaysAsk=Küsi alati kinnitust
-notifyHide=Peida peale %S sekundit
-trust=Usalda %S
-distrust=Märgista %S ebausaldusväärseks
-untrustedOrigin=ebausaldusväärne lähtekoht
-xss.notify.generic=NoScript filtreeris võimaliku murdskriptimise (XSS) katse asukohast %S. Tehnilised üksikasjad on näha konsoolil.
-xss.notify.showConsole=Näita konsooli…
-xss.notify.showConsole.accessKey=N
-xss.reason.filterXGet=Puhastati kahtlane päring. Algset aadressi [%1$S] küsiti kohast [%2$S]. Puhastatud aadress: [%3$S].
-xss.reason.filterXGetRef=Puhastati kahtlane päringu suunang. Aadressi [%1$S] küsiti kohast [%2$S]. Puhastatud suunang: [%3$S].
-xss.reason.filterXPost=Puhastati kahtlane üleslaadimine aadressile [%1$S] kohast [%2$S]: muudeti ainult allalaetavaks GET-päringuks.
-unsafeReload.warning=MITTETURVALINE uuestilaadmine\n\n%1$S [%2$S]\n\nAsukohast [%3$S]\n\nNoScript EI KAITSE seda päringut!\n
-metaRefresh.notify=NoScript blokeeris <META> ümbersuunamise <NOSCRIPT> elemendi sees: %S peale %S sekundit.
-metaRefresh.notify.follow=Järgi ümbersuunamist
-metaRefresh.notify.follow.accessKey=J
-notify.options=Sätted
-notify.options.accessKey=S
-reset.title=Lähtesta NoScript
-reset.warning=KÕIK NoScripti eelistused ja saitide õigused lähtestatakse kohe vaikeväärtustele.\nAntud tegevust ei saa tagasi võtta.\nKas soovid jätkata?
-bookmarkSync.title=NoScript sätete järjehoidja
-bookmarkSync.message=See järjehoidja ei ole mõeldud avamiseks vaid sünkroniseerimiseks, kasutades Weave või XMarks laiendust.
-bookmarkSync.confirm=NoScript leidis sätete järjehoidja\n%S.\nKas soovid NoScript kohalikud sätted üle kirjutada antud järjehoidja sisuga?
-ABE.notify=Päring %1$S filtreeriti ABE poolt: <%2$S> %3$S
-ABE.chooseEditor=Vali ABE reeglite jaoks tekstiredaktor
-ABE.syntaxError=Süntaksi viga ABE reeglites.
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Luba kõik veebilehel %S
-allowTempFrom=Luba ajutiselt kõik veebilehel %S
-siteInfo.confirm=Oled küsimas informatsiooni "%1$S" saidi kohta,\n esitades päringu %2$S.\nKas soovid jätkata?
-siteInfo.tooltip=Saidi infot näeb hiire keskmist klahvi vajutades või vajutades shift+paremklõps...
-ef.activate=Filtreeri %S
-ef.options=%S sätted...
-ef.newName=Uue filtri nimi:
-ef.locateExe=Vali käsufail %S filtri jaoks
-disable=Keela %S
-disable.accessKey=K
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/eu/noscript/about.properties b/extensions/noscript/chrome/locale/eu/noscript/about.properties
deleted file mode 100644
index d92cbb6..0000000
--- a/extensions/noscript/chrome/locale/eu/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Babes gehigarria zure firefoxentzat: NoScript-ek JavaScript (eta beste pluginak= onartzen ditu bakarrik zure aukerako konfiantzako guneetan (adib zure bankuko webgunean). Zerrenda-zurian oinarritutako lehentasunezko blokeoak segurtasun zuloen (ezagun eta ezezagunen) probetxuzko esplotazioa saihesten du. Adituak ados daude: Firefox seguruagoa da NoScript erabiliaz :-)
-aboutTitle=%S-ri buruz
-extensionContributors=Laguntzaileak:
-extensionContributors.tip=Hedapen honegatik eskerrak emateko pertsonak
-extensionCreatorLabel=Egilea:
-changelog=Aldaketa-erregistroa
-changelog.tip=Ikusi aldaketa-erregistroa
-license=Lizentzia
-license.tip=Irakurri erabiltzaile lizentzia
-logo.tip=Joan hedapenaren etxe orrialdera
-sponsor.tip=Joan babeslearen etxe orrialdera
-informaction.tip=Joan InformAction etxe orrialdera
-extensionHomepage.tip=Joan hedapenaren etxe orrialdera
-extensionCreator.tip=Joan garatzailearen etxe orrialdera
-version=%S bertsioa
diff --git a/extensions/noscript/chrome/locale/eu/noscript/noscript.dtd b/extensions/noscript/chrome/locale/eu/noscript/noscript.dtd
deleted file mode 100644
index 937e161..0000000
--- a/extensions/noscript/chrome/locale/eu/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Aukerak:">
-<!ENTITY noscriptOptions.accesskey "A">
-<!ENTITY noscriptOptionsLong "NoScript aukerak">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5-eri buruz:">
-<!ENTITY noscriptPermissionsText "Zein webgunek script-ak exekuta ditzakeen zehaztu dezakezu. Idatzi script-ak erabiltzea onartzea nahi duzun domeinuaren izena (adib. &quot;http://www.gunea.org&quot; or &quot;gunea.org&quot;) eta Onartu sakatu.">
-<!ENTITY noscriptWebAddress "Webgunearen helbidea:">
-<!ENTITY noscriptAllow "Onartu">
-<!ENTITY noscriptAllow.accesskey "O">
-<!ENTITY noscriptForbid "Debekatu">
-<!ENTITY noscriptForbid.accesskey "D">
-<!ENTITY noscriptTrust "Markatu konfiantzazkoa">
-<!ENTITY noscriptTrust.accesskey "k">
-<!ENTITY noscriptUntrust "Markatu ez-konfiantzazkoa">
-<!ENTITY noscriptUntrust.accesskey "E">
-<!ENTITY noscriptRemoveSelected "Kendu hautatutako guneak">
-<!ENTITY noscriptGloballyEnabled "Script-ak orokorrean onarturik (arriskutsua)">
-<!ENTITY noscriptAutoReload "Automatikoki birkargatu dagokien orriak baimenak aldatzean">
-<!ENTITY noscriptGeneral "Orokorra">
-<!ENTITY noscriptAppearance "Itxura">
-<!ENTITY noscriptShow "Ikusi:">
-<!ENTITY noscriptCtxMenu "Kontestu menua">
-<!ENTITY noscriptStatusIcon "Egoera barra ikonoa">
-<!ENTITY noscriptFullAddr "Helbide osoa (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domeinu osoa (http://noscript.net)">
-<!ENTITY noscriptBaseDom "Oinarrizko 2. mailako domeinuak (noscript.net)">
-<!ENTITY noscriptTempCmd "Aldirako baterako onartu:">
-<!ENTITY noscriptSound "Audio abisua script-ak blokeatzean">
-<!ENTITY noscriptImport "Inporatu">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Esportatu">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Ikusi blokeatutako script-ei buruzko mezua">
-<!ENTITY noscriptNotify.bottom "Kokatu mezua behean">
-<!ENTITY noscriptSound.choose "Hautatu">
-<!ENTITY noscriptSound.choose.accesskey "H">
-<!ENTITY noscriptSound.play "Erreproduzitu">
-<!ENTITY noscriptSound.play.accesskey "r">
-<!ENTITY noscriptSound.reset "Berrezarri lehenespena">
-<!ENTITY noscriptSound.reset.accesskey "B">
-<!ENTITY noscriptAdvanced "Aurreratua">
-<!ENTITY noscriptAdditionalPermissions "Baimen gehigarriak konfiantzazko guneentzat">
-<!ENTITY noscriptAllowClipboard "Onartu kanpo arbelatik testu aberats kopiatu eta itsastea">
-<!ENTITY noscriptAdditionalRestrictions "Murrizte gehigarriak ez-konfiantzazko guneentzat">
-<!ENTITY noscriptPlugins "Plugin-ak">
-<!ENTITY noscriptContentBlocker "Ezarri murrizte hauek konfiantzazko guneei ere">
-<!ENTITY noscriptForbidJava "Debekatu Java:">
-<!ENTITY noscriptForbidXSLT "Debekatu XSLT">
-<!ENTITY noscriptForbidSilverlight "DEbekatu Microsoft Silverlight">
-<!ENTITY noscriptForbidIFrames "Debekatu &lt;markoak&gt;">
-<!ENTITY noscriptForbidFrames "Debeaktu &lt;markoa&gt;">
-<!ENTITY noscriptForbidFlash "Debekatu Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Debekatu beste pluginak">
-<!ENTITY noscriptForbidWebGL "Debekatu WebGL">
-<!ENTITY noscriptReloadWarn "Aukera hauek (eskuz) birkargatutako orrialde eta berrietan eragingo dute.">
-<!ENTITY noscriptConfirmUnblock "Eskatu berrespena aldi baterako objektu bat desblokeatzean">
-<!ENTITY noscriptStatusLabel "Egoera-barra etiketa">
-<!ENTITY noscriptForbidBookmarklets "Debekatu laster-markatzaileak">
-<!ENTITY noscriptShowPlaceholder "Ikusi leku-marka ikonoa">
-<!ENTITY noscriptTruncateTitle "Moztu dokumentu tituluak">
-<!ENTITY noscriptFixLinks "Saiatu JavaScript loturak konpontzen">
-<!ENTITY noscriptAllowBookmarks "Onartu laster-marka bidez irekitako guneak">
-<!ENTITY noscriptAllowViaBookmarks "Onartu laster-marka bidez irekitako guneak">
-<!ENTITY noscriptAllowPing "Onartu &lt;A PING�&gt;">
-<!ENTITY noscriptAllowLocalLinks "Onartu lotura lokalak">
-<!ENTITY noscriptForbidPing "Debekatu &lt;A PING�&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Debekatu METa berbidaraketak &lt;NOSCRIPT&gt; elementuen barnean">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Zerrenda-zuria">
-<!ENTITY noscriptPermissions "BAimenak">
-<!ENTITY noscriptRefresh "Freskatu">
-<!ENTITY noscriptNotifications "Berri-emateak">
-<!ENTITY noscriptToolbarToggle "NoScript tresna-barra ezkerraz klikatzean uneko maila-altuneko gune baimenak aldatuko ditu">
-<!ENTITY noscriptTrusted "Konfiantzazkoa">
-<!ENTITY noscriptUntrusted "Ez-konfiantzazkoa">
-<!ENTITY noscriptUnknown "Ezezaguna">
-<!ENTITY noscriptAdd "Gehitu">
-<!ENTITY noscriptAdd.accesskey "G">
-<!ENTITY noscriptClose "Itxi">
-<!ENTITY noscriptSiteManager "Gune kudeatzailea">
-<!ENTITY noscriptSecurityManager "Segurtasun kudeatzailea">
-<!ENTITY noscriptPolicies "Politikak">
-<!ENTITY noscriptDefaultPolicies "Lehenetsitako politikak">
-<!ENTITY noscriptSitePolicies "Gune zehatzetako politikak">
-<!ENTITY noscriptNselNever "Ezkutatu &lt;NOSCRIPT&gt; elementuak">
-<!ENTITY noscriptNselForce "Ikusi blokeaturiko &lt;SCRIPT&gt;-a jarraitzen duen &lt;NOSCRIPT&gt; elementua">
-<!ENTITY noscriptAutoAllowTopLevel "Aldi baterako onartu maila-altueneko guneak lehenespenez">
-<!ENTITY noscriptDescription "Babes gehigarria zure firefoxentzat: NoScript-ek JavaScript (eta beste pluginak= onartzen ditu bakarrik zure aukerako konfiantzako guneetan (adib zure bankuko webgunean). Zerrenda-zurian oinarritutako lehentasunezko blokeoak segurtasun zuloen (ezagun eta ezezagunen) probetxuzko esplotazioa saihesten du funtzionalitaterik galdu gabe. Adituak ados daude: Firefox seguruagoa da NoScript erabiliaz :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloekatu CSS-oinarridun eskanerrak">
-<!ENTITY noscriptOptFilterXGet "Garbitu zeharkako-gune susmagarrik eskaerak">
-<!ENTITY noscriptOptFilterXPost "Bihurtu zeharkako-gune POST eskaerak data-gabeko GET eskaerak">
-<!ENTITY noscriptShowConsole "Ikusi kontsola:">
-<!ENTITY noscriptShowConsole.accesskey "I">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ�">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Segurtasun-gabeko birkargatzea">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "XSS-kontrako babeste salbuespenak">
-<!ENTITY noscriptXssExceptions.description "Espresio erregular hauek betetzen dituzten helburuak ez dira XSS aurka babestuko.">
-<!ENTITY noscriptMatchSample "Parekatze patroi sinplea:">
-<!ENTITY noscriptReset "Garbitu">
-<!ENTITY noscriptReset.accesskey "G">
-<!ENTITY noscriptResetDef "Lehenetsietara berrezarri">
-<!ENTITY noscriptResetDef.accesskey "l">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Kendu aldi baterako baimenak">
-<!ENTITY noscriptRevokeTemp.accesskey "K">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ez onartu ez-konfiantzako bezala markaturiko guneen objektuen kokalekua">
-<!ENTITY noscriptCollapseBlockedObjects "Bildu blokeaturiko objektuak">
-<!ENTITY noscriptExceptions "Salbuespenak:">
-<!ENTITY noscriptBlockedObjects "Blokeaturiko objektuak">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokeatu ez-konfiantzako bezala markatutako guneen objektu guztiak">
-<!ENTITY noscriptTempAllowPage "Aldi baterako onartu orrialde guzti hau">
-<!ENTITY noscriptTempAllowPage.accesskey "A">
-<!ENTITY noscriptAllowPage "Onartu orri hau">
-<!ENTITY noscriptAllowPage.accesskey "O">
-<!ENTITY noscriptTempToPerm "Egin orrialde baimenak iraunkorrak">
-<!ENTITY noscriptTempToPerm.accesskey "E">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ�">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Portaera">
-<!ENTITY noscriptHttps.cookies "Cookieak">
-<!ENTITY noscriptHttps.description "Debekatu web eduki aktiboak ez badira konexio seguru (HTTPS) baten bidez:">
-<!ENTITY noscriptHttps.never "Inoiz">
-<!ENTITY noscriptHttps.proxy "Proxy bat erabiltzean (Tor-ekin gomendatua)">
-<!ENTITY noscriptHttps.always "Beti">
-<!ENTITY noscriptHttpsForced "Behartu hurrengo guneak konexio seguruak (HTTPS) erabiltzea:">
-<!ENTITY noscriptHttpsForcedExceptions "Inoiz ez behartu konexio seguruak (HTTPS) hurrengo guneetan:">
-<!ENTITY noscriptSecureCookies "Gaitu cookie kudeaketa seguru automatikoa">
-<!ENTITY noscriptSecureCookiesForced "Behartu hurrengo guneek cookie guztiak HTTPS bidez ezartzea:">
-<!ENTITY noscriptSecureCookiesExceptions "Baztertu HTTPS bidezko segurtasun gabeko cookieak gune hauetan:">
-<!ENTITY noscriptClearClickTitle "ClearClick abisua">
-<!ENTITY noscriptClearClickHeader "Auekrako Clickjacking-a / UI berridazketa saiakera!">
-<!ENTITY noscriptClearClickDescription "NoScript-ek erdi-ezkutatutako elementu batekin sagu edo teklatu interakzioa gelditu du. Beheko irudian klikatu blokeaturik bertsio eta garbiaren arteko txandakatzerako.">
-<!ENTITY noscriptClearClickOpt "ClearClick babesa orrietan:">
-<!ENTITY noscriptClearClickReport "Txostena">
-<!ENTITY noscriptClearClickReport.accesskey "T">
-<!ENTITY noscriptClearClickReportId "Txosten IDa:">
-<!ENTITY noscriptTrustedPagesAdj "konfiantzazkoa">
-<!ENTITY noscriptUntrustedPagesAdj "ez-konfiantzazkoa">
-<!ENTITY noscriptKeepLocked "Mentendu elementu hau blokeaturik (gomendatua)">
-<!ENTITY noscriptEmbeddings "Txertatutako objektuak">
-<!ENTITY noscriptPrev "Aurrekoa">
-<!ENTITY noscriptNext "Hurrengoa">
-<!ENTITY noscriptFrameOptErr.title "Eduki hau ezin da marko batean bistarazi">
-<!ENTITY noscriptFrameOptErr.desc "Zure segurtasuna babesteko edukiaren argitaratzaileak ez du onartzen marko batean bistaratzea.">
-<!ENTITY noscriptFrameOptErr.link "Hemen klik egin eduki hau leiho berri batean irekitzeko.">
-<!ENTITY noscriptBookmarkSync "NoScript konfigurazioaren babes-kopia laster-marka batean egin errazago sinkronizatzeko.">
-<!ENTITY noscriptShowReleaseNotes "Bistarazi bertsio oharrak eguneraketetan">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Arau-jokoak:">
-<!ENTITY ABE.enabled.label "Gaitu ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Onartu guneek beren arau-jokoak bidaltzea">
-<!ENTITY ABE.edit.label "Editatu...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Gaitu">
-<!ENTITY ABE.enable.accesskey "G">
-<!ENTITY ABE.disable.label "Desgaitu">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Berritu">
-<!ENTITY ABE.refresh.accesskey "B">
-<!ENTITY noscriptUninstall "Desinstalatu">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/eu/noscript/noscript.properties b/extensions/noscript/chrome/locale/eu/noscript/noscript.properties
deleted file mode 100644
index 6132314..0000000
--- a/extensions/noscript/chrome/locale/eu/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Onartu Script-ak orokorrean (arriskutsua)
-forbidGlobal=Debekatu Script-ak orokorrean (jakinarazten)
-allowLocal=Onartu %S
-allowTemp=Albi baterako onartu %S
-forbidLocal=Debekatu %S
-allowed.glb=Kontuz! Script-ak orokorki onartuak
-allowed.yes=Onartutako Scriptak
-allowed.prt=Partzialki onartutako Script-ak
-allowed.no=Debekatutako Script-ak
-global.warning.title=Kontuz!
-global.warning.text=Script-ak orokorki onartuko dira (gune guztientzat).\nHau potentzialki arriskutsua da.\nZiur zaude aurrera jarraitu nahi duzula?
-audio.samples=Audio adibideak
-confirm=Ziur zaude?
-alwaysAsk=Beti eskatu berrespena
-notifyHide=Ezkutatu %S segundo ondoren
-trust=%S-en konfiantza izan
-distrust=Markatu %S ez-konfiantzazko gisa
-untrustedOrigin=ez-konfiantzazko jatorria
-xss.notify.generic=NoScript-ek zeharka-gune script (XSS) potentzial bat gelditu du. Xehetasun teknikoak kontsolan erregistratu dira.
-xss.notify.showConsole=Ikusi kontsola:
-xss.notify.showConsole.accessKey=I
-xss.reason.filterXGet=Garbitu eskaera susmagarria. Jaottirzko URLa (%1$S) (%2$S)-tik eskatua. Gabitu URLa:(%3$S).
-xss.reason.filterXGetRef=Garbitu eskaera erreferentzia susmagarria. Jaottirzko URLa (%1$S) (%2$S)-tik eskatua. Gabitutako erreferentzia:(%3$S).
-xss.reason.filterXPost=Garbituta (%2$W)-tik egindako igoera susmagarria (%1$S): deskarga soileko GET eskaera bihurtua.
-unsafeReload.warning=UNSAFELY reloading a suspiciousnn%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Jarraitu berbideraketa
-metaRefresh.notify.follow.accessKey=J
-notify.options=Aukerak
-notify.options.accessKey=A
-reset.title=Berrabiarazi NoSCript
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript konfigurazio laster-marka
-bookmarkSync.message=Laster-marka hau ez da irekitzeko pentsatua, Xmarks edo Weave hedapenak erabiliaz sinkronizatzeko baizik.
-bookmarkSync.confirm=NoScript-ek dirudienez hemen gordetako laster-marka bat topatu du:\n%S\nBenetan zure NoSCript konfigurazio lokala laster-marka honetakoarekin gainidatzi nahi duzula?
-ABE.notify=%1$S eskaera ABE-k iragazi du: <%2$S> %3$S
-ABE.chooseEditor=Mesedez hautatu ABE arau-jokoentzat testu editore bat
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/fa-IR/noscript/about.properties b/extensions/noscript/chrome/locale/fa-IR/noscript/about.properties
deleted file mode 100644
index a51437d..0000000
--- a/extensions/noscript/chrome/locale/fa-IR/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=محافظت از فایرفاکس شما:این برنامه از اجرا شدن اسکریپت ها در سایت های مختلف جلوگیری می کند.البته شما می توانید به اسکریپت های سایت های مورد اعتماد خود اجازه فعالیت بدهید.
-aboutTitle=درباره %S
-extensionContributors=همکاران
-extensionContributors.tip=کسانی که برای این افزونه زحمت کشیده اند
-extensionCreatorLabel=نویسنده :
-changelog=تغییرات برنامه
-changelog.tip=نمایش تغییرات ایجاد شده در هر نسخه
-license=مجوز
-license.tip=مجوز استفاده کاربر از برنامه
-logo.tip=بازدید از سایت برنامه
-sponsor.tip=بازدید از سایت اسپانسر
-informaction.tip=بازدید از سایت InformAction
-extensionHomepage.tip=بازدید از سایت برنامه
-extensionCreator.tip=بازدید از سایت نویسنده
-version=نسخه %S
diff --git a/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.dtd b/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.dtd
deleted file mode 100644
index 6065730..0000000
--- a/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "تنظیمات...">
-<!ENTITY noscriptOptions.accesskey "ت">
-<!ENTITY noscriptOptionsLong "تنظیمات NoScript">
-<!ENTITY noscriptAbout "درباره NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "شما می توانید سایت هایی را که اجازه اجرای اسکریپت دارند را مشخص کنید.آدرس سایت یا نام دامنه را وارد کنید.(به عنوان مثال &quot;http://www.site.com&quot; یا &quot;site.com&quot;)">
-<!ENTITY noscriptWebAddress "آدرس وب سایت :">
-<!ENTITY noscriptAllow "اجازه دادن">
-<!ENTITY noscriptAllow.accesskey "ا">
-<!ENTITY noscriptForbid "ممنوع">
-<!ENTITY noscriptForbid.accesskey "م">
-<!ENTITY noscriptTrust "علامت گدازی به عنوان تایید شده">
-<!ENTITY noscriptTrust.accesskey "ع">
-<!ENTITY noscriptUntrust "علامت گدازی به عنوان مشکوک">
-<!ENTITY noscriptUntrust.accesskey "ل">
-<!ENTITY noscriptRemoveSelected "پاک کردن سایت های انتخاب شده">
-<!ENTITY noscriptGloballyEnabled "تمام اسکریپت ها مجوز دارند (خطرناک)">
-<!ENTITY noscriptAutoReload "بارگذاری مجدد به صورت خودکار هنگام تغییر مجوزها">
-<!ENTITY noscriptGeneral "عمومی">
-<!ENTITY noscriptAppearance "تنظیمات ظاهری">
-<!ENTITY noscriptShow "نمایش...">
-<!ENTITY noscriptCtxMenu "نمایش در منوی کلیک راست">
-<!ENTITY noscriptStatusIcon "آیکون برنامه در نوار وضعیت">
-<!ENTITY noscriptFullAddr "آدرس کامل (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "نام کامل دامنه (http://www.noscript.net)">
-<!ENTITY noscriptBaseDom "سطح دوم نام دامنه ها (noscript.net)">
-<!ENTITY noscriptTempCmd "دادن مجوز موقت به [...]">
-<!ENTITY noscriptSound "پخش موزیک هنگام ممنوع شدن اسکریپت ها">
-<!ENTITY noscriptImport "ایمپورت">
-<!ENTITY noscriptImport.accesskey "ی">
-<!ENTITY noscriptExport "اکسپورت">
-<!ENTITY noscriptExport.accesskey "ک">
-<!ENTITY noscriptNotify "نمایش پیام هنگام متوقف شدن اسکریپت ها">
-<!ENTITY noscriptNotify.bottom "نمایش پیام در پایین صفحه">
-<!ENTITY noscriptSound.choose "انتخاب">
-<!ENTITY noscriptSound.choose.accesskey "ن">
-<!ENTITY noscriptSound.play "پخش">
-<!ENTITY noscriptSound.play.accesskey "پ">
-<!ENTITY noscriptSound.reset "بازگردانی تنظیمات اولیه">
-<!ENTITY noscriptSound.reset.accesskey "ب">
-<!ENTITY noscriptAdvanced "پیشرفته">
-<!ENTITY noscriptAdditionalPermissions "مجوزهای اضافی برای سایت های مورد اطمینان">
-<!ENTITY noscriptAllowClipboard "دادن مجوز برای کپی کردن و چسباندن متن سطح بالا">
-<!ENTITY noscriptAdditionalRestrictions "محدودیت بیشتر برای سایت های غیر مطمئن">
-<!ENTITY noscriptPlugins "افزودنی ها">
-<!ENTITY noscriptContentBlocker "اعمال این محدودیت ها روی سایت های مورد اطمینان">
-<!ENTITY noscriptForbidJava "Java ممنوع کردن">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "ممنوع کردن Microsoft® Silverlight">
-<!ENTITY noscriptForbidIFrames "ممنوع کردن &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "ممنوع کردن &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "ممنوع کردن @font-face">
-<!ENTITY noscriptForbidWebGL "ممنوع کردن WebGL">
-<!ENTITY noscriptForbidMedia "ممنوع کردن &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "ممنوع کردن Adobe Flash">
-<!ENTITY noscriptForbidPlugins "ممنوع کردن سایر پلاگین ها">
-<!ENTITY noscriptReloadWarn "این تنظیمات روی پنجره های جدید اعمال خواهند شد.">
-<!ENTITY noscriptConfirmUnblock "پرسیدن سوال قبل مجوز دادن به اسکریپت های یک سایت">
-<!ENTITY noscriptStatusLabel "برچسب نوار وضعیت">
-<!ENTITY noscriptForbidBookmarklets "ممنوع کردن سایت هایی که از نشانه گذاری ها باز می شوند.">
-<!ENTITY noscriptShowPlaceholder "نمایش آیکون">
-<!ENTITY noscriptTruncateTitle "کوتاه کردن عنوان پرونده">
-<!ENTITY noscriptFixLinks "اجازه دادن به لینک های جاوا اسکریپت">
-<!ENTITY noscriptAllowBookmarks "دادن مجوز به سایت هایی که از نشانه گذاری ها باز می شوند.">
-<!ENTITY noscriptAllowViaBookmarks "دادن مجوز به سایت هایی که از نشانه گذاری ها باز می شوند.">
-<!ENTITY noscriptAllowPing "اجازه دادن به &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "اجازه دادن به لینک های محلی">
-<!ENTITY noscriptForbidPing "ممنوع کردن &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "ممنوع کردن تفییر مسیرهای META در عناصر &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "ر">
-<!ENTITY noscriptWhitelist "لیست سفید">
-<!ENTITY noscriptPermissions "مجوزها">
-<!ENTITY noscriptRefresh "بارگذاری مجدد">
-<!ENTITY noscriptNotifications "هشدارها">
-<!ENTITY noscriptToolbarToggle "کلیک چپ روی کلید نوار ابزار برنامه مجوز های سایت فعلی را باز می کند.">
-<!ENTITY noscriptTrusted "مورد تایید">
-<!ENTITY noscriptUntrusted "مشکوک">
-<!ENTITY noscriptUnknown "ناشناس">
-<!ENTITY noscriptAdd "افزودن">
-<!ENTITY noscriptAdd.accesskey "ز">
-<!ENTITY noscriptClose "بستن">
-<!ENTITY noscriptSiteManager "مدیریت سایت">
-<!ENTITY noscriptSecurityManager "مدیریت امنیت">
-<!ENTITY noscriptPolicies "راهنماها">
-<!ENTITY noscriptDefaultPolicies "راهنماهای پیشفرض">
-<!ENTITY noscriptSitePolicies "راهنمای مخصوص سایت">
-<!ENTITY noscriptNselNever "مخفی کردن عناصر &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "نمایش عناصر &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "اجازه دادن به سایت های رده بالا به صورت موقت و پیشفرض">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "سد کردن اسکنرهای بر پایه CSS">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "نمایش کنسول...">
-<!ENTITY noscriptShowConsole.accesskey "g">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS سوالات">
-<!ENTITY noscriptXssFaq.accesskey "X">
-<!ENTITY noscriptUnsafeReload "بازآوری ناامن">
-<!ENTITY noscriptUnsafeReload.accesskey "ب">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS">
-<!ENTITY noscriptMatchSample "مثال تطابق الگو :">
-<!ENTITY noscriptReset "ریست">
-<!ENTITY noscriptReset.accesskey "ت">
-<!ENTITY noscriptResetDef "بازگردانی به تنظیمات اولیه">
-<!ENTITY noscriptResetDef.accesskey "د">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "p">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.properties b/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.properties
deleted file mode 100644
index 3df184d..0000000
--- a/extensions/noscript/chrome/locale/fa-IR/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=دادن مجوز به تمام اسکریپت‌ها (توصیه نمی‌شود)
-forbidGlobal=جلوگیری از فعالیت همه اسکریپت‌ها
-allowLocal=اجازه دادن به %S
-allowTemp=دادن مجوز موقت به %S
-forbidLocal=ممنوع کردن %S
-allowed.glb=خطر!به تمام اسکریپت‌ها مجوز فعالیت داده شده
-allowed.yes=هم اکنون اسکریپت‌ها مجوز اجرا دارند
-allowed.prt=اسکریپت‌ها مجوز موقت فعالیت دارند
-allowed.no=اسکریپت‌ها مجوز اجرا ندارند
-global.warning.title=هشدار!
-global.warning.text=به اسکریپت‌های تمام سایت‌ها اجازه فعالیت داده خواهد شد.ادامه؟
-audio.samples=نمونه‌های صوتی
-confirm=آیا مطمئن هستید؟
-alwaysAsk=همیشه بپرس
-notifyHide=پنهان شدن پس از %S ثانیه
-trust=تایید %S
-distrust=نشانه گذاری %S به عنوان سایت مشکوک
-untrustedOrigin=منبع نامطمئن
-xss.notify.generic=یک درخواست XSS از %S فیلتر شد.اطلاعات بیشتر در کنسول ذخیره شده است.
-xss.notify.showConsole=نمایش کنسول...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].)
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referer: [%3$S].)
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript یک تغییر مسیر <META> را در یک عنصر <NOSCRIPT> متوقف کرد : %S در %S ثانیه
-metaRefresh.notify.follow=ادامه تغییر مسیر
-metaRefresh.notify.follow.accessKey=د
-notify.options=تنظیمات
-notify.options.accessKey=ت
-reset.title=راه اندازی دوباره NoScript
-reset.warning=تمام تنظیم ها و سایت های دارای مجوز به حالت پیش فرض باز می گردد.
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/fi/noscript/about.properties b/extensions/noscript/chrome/locale/fi/noscript/about.properties
deleted file mode 100644
index 15f1a0f..0000000
--- a/extensions/noscript/chrome/locale/fi/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Lisäsuoja selaimelle Firefox: NoScript sallii JavaScript, Java (ja muut lisäkkeet) vain valitsemiltasi luotettavilta sivustoilta (esim. oman verkkopankin kotisivu). Tämä sallittujen listaan perustuva ennakoiva lähestymistapa estää tietoturva haavoittuvuuksien hyväksikäyttöä (tunnettujen ja jopa tuntemattomien!) ilman, että toimivuus heikentyy... Asiantuntijat ovat samaa mieltä: Firefox on oikeasti turvallisempi NoScript'in kanssa :-)
-aboutTitle=Tietoja %S
-extensionContributors=Käännökset:
-extensionContributors.tip=Ihmisiä joita on kiittäminen tästä laajennuksesta
-extensionCreatorLabel=Tekijä:
-changelog=Muutokset
-changelog.tip=Näytä versiomuutokset
-license=Lisenssi
-license.tip=Lue käyttöoikeuslisenssi
-logo.tip=Vieraile laajennuksen kotisivulla
-sponsor.tip=Vieraile sponsorin kotisivulla
-informaction.tip=Vieraile InformAction kotisivulla
-extensionHomepage.tip=Vieraile laajennuksen kotisivulla
-extensionCreator.tip=Vieraile tekijän kotisivulla
-version=Versio %S
diff --git a/extensions/noscript/chrome/locale/fi/noscript/noscript.dtd b/extensions/noscript/chrome/locale/fi/noscript/noscript.dtd
deleted file mode 100644
index 50dff61..0000000
--- a/extensions/noscript/chrome/locale/fi/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Asetukset…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript asetukset">
-<!ENTITY noscriptAbout "Tietoja NoScript 5.1.8.5istä…">
-<!ENTITY noscriptPermissionsText "Voit määrittää verkkosivut joiden sallitaan suorittaa scriptejä. Kirjoita verkko-osoite tai verkkonimi (esim. &quot;http://www.site.com&quot; tai &quot;site.com&quot;) jonka haluat sallia ja paina Salli.">
-<!ENTITY noscriptWebAddress "Verkkosivun osoite:">
-<!ENTITY noscriptAllow "Salli">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "Kiellä">
-<!ENTITY noscriptForbid.accesskey "K">
-<!ENTITY noscriptTrust "Merkitse luotettavaksi">
-<!ENTITY noscriptTrust.accesskey "t">
-<!ENTITY noscriptUntrust "Merkitse epäluotettavaksi">
-<!ENTITY noscriptUntrust.accesskey "u">
-<!ENTITY noscriptRemoveSelected "Poista valitut sivut">
-<!ENTITY noscriptGloballyEnabled "Scriptit yleisesti sallittuja (turvaton)">
-<!ENTITY noscriptAutoReload "Lataa sivut automaattisesti uudelleen jos oikeudet muuttuvat">
-<!ENTITY noscriptGeneral "Yleistä">
-<!ENTITY noscriptAppearance "Ulkoasu">
-<!ENTITY noscriptShow "Näytä…">
-<!ENTITY noscriptCtxMenu "Hiiren 2. napin valikko">
-<!ENTITY noscriptStatusIcon "Tilapalkin kuvake">
-<!ENTITY noscriptFullAddr "Koko verkko-osoitteet (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Koko osoitenimet (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Tason 2 osoitenimet (noscript.net)">
-<!ENTITY noscriptTempCmd "Salli tilapäisesti […]">
-<!ENTITY noscriptSound "Äänimerkki kun scripti estetään">
-<!ENTITY noscriptImport "Tuo">
-<!ENTITY noscriptImport.accesskey "T">
-<!ENTITY noscriptExport "Vie">
-<!ENTITY noscriptExport.accesskey "V">
-<!ENTITY noscriptNotify "Näytä viesti estetyistä scripteistä">
-<!ENTITY noscriptNotify.bottom "Sijoita viesti alas">
-<!ENTITY noscriptSound.choose "Valitse">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Toista">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Oletusarvot">
-<!ENTITY noscriptSound.reset.accesskey "O">
-<!ENTITY noscriptAdvanced "Lisäasetukset">
-<!ENTITY noscriptAdditionalPermissions "Lisäoikeudet luotetuille sivustoille">
-<!ENTITY noscriptAllowClipboard "Salli &quot;rich text&quot; kopiointi ja liittäminen ulkoiselta leikepöydältä">
-<!ENTITY noscriptAdditionalRestrictions "Lisäestot epäluotettaville sivustoille">
-<!ENTITY noscriptPlugins "Liitännäiset">
-<!ENTITY noscriptContentBlocker "Käytä näitä rajoituksia myös sallituille sivustoille">
-<!ENTITY noscriptForbidJava "Estä Java™">
-<!ENTITY noscriptForbidXSLT "Estä XSLT">
-<!ENTITY noscriptForbidSilverlight "Estä Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Estä &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Estä &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Estä @font-face">
-<!ENTITY noscriptForbidMedia "Estä &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Estä Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Estä muut lisäkkeet">
-<!ENTITY noscriptForbidWebGL "Estä WebGL">
-<!ENTITY noscriptReloadWarn "Nämä asetukset tulevat voimaan uusilla tai uudelleen ladatuilla sivuilla">
-<!ENTITY noscriptConfirmUnblock "Kysy hyväksyntä ennen tilapäistä kohteen vapauttamista">
-<!ENTITY noscriptStatusLabel "Tilarivin huomautukset">
-<!ENTITY noscriptForbidBookmarklets "Estä kirjanmerkki lisäkkeet">
-<!ENTITY noscriptShowPlaceholder "Näytä sijoitettu kuvake">
-<!ENTITY noscriptTruncateTitle "Katkaise dokumenttien otsikot">
-<!ENTITY noscriptFixLinks "Yritä korjata JavaScript linkit">
-<!ENTITY noscriptAllowBookmarks "Salli kirjanmerkkien kautta avatut sivustot">
-<!ENTITY noscriptAllowViaBookmarks "Salli kirjanmerkkien kautta avatut sivustot">
-<!ENTITY noscriptAllowPing "Salli &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Salli paikalliset linkit">
-<!ENTITY noscriptForbidPing "Estä &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Estä META uudelleenohjaukset &lt;NOSCRIPT&gt; elementtien sisällä">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "U">
-<!ENTITY noscriptNotifyMeta "Näytä viesti estetyistä META uudelleenohjauksista">
-<!ENTITY noscriptNotifyMeta.accesskey "U">
-<!ENTITY noscriptWhitelist "Sallittujen lista">
-<!ENTITY noscriptPermissions "Käyttöoikeudet">
-<!ENTITY noscriptRefresh "Päivitä">
-<!ENTITY noscriptNotifications "Ilmoitukset">
-<!ENTITY noscriptToolbarToggle "Hiiren napsautus työkalurivin NoScript painikkeeseen vaihtaa oikeudet nykyiselle sivulle">
-<!ENTITY noscriptTrusted "Luotettu">
-<!ENTITY noscriptUntrusted "Epäluotettava">
-<!ENTITY noscriptUnknown "Tuntematon">
-<!ENTITY noscriptAdd "Lisää">
-<!ENTITY noscriptAdd.accesskey "L">
-<!ENTITY noscriptClose "Sulje">
-<!ENTITY noscriptSiteManager "Sivustojen hallinta">
-<!ENTITY noscriptSecurityManager "Suojausten hallinta">
-<!ENTITY noscriptPolicies "Käytännöt">
-<!ENTITY noscriptDefaultPolicies "Oletus käytännöt">
-<!ENTITY noscriptSitePolicies "Sivustokohtaiset käytännöt">
-<!ENTITY noscriptNselNever "Piilota &lt;NOSCRIPT&gt; elementit">
-<!ENTITY noscriptNselForce "Näytä &lt;NOSCRIPT&gt; elementit jotka seuraavat estettyä &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Tilapäisesti salli ylimmän tason sivustot oletusarvoisesti">
-<!ENTITY noscriptDescription "Lisäsuoja selaimelle Firefox: NoScript sallii JavaScript, Java (ja muut lisäkkeet) vain valitsemiltasi luotettavilta sivustoilta (esim. oman verkkopankin kotisivu). Tämä sallittujen listaan perustuva ennakoiva lähestymistapa estää tietoturva haavoittuvuuksien hyväksikäyttöä (tunnettujen ja jopa tuntemattomien!) ilman, että toimivuus heikentyy... Asiantuntijat ovat samaa mieltä: Firefox on oikeasti turvallisempi NoScript'in kanssa :-)">
-<!ENTITY noscriptOptBlockCssScanners "Estä CSS-pohjaiset skannerit">
-<!ENTITY noscriptOptFilterXGet "Siisti sivustojen väliset epäilyttävät pyynnöt">
-<!ENTITY noscriptOptFilterXPost "Muuta sivustojen väliset POST-pyynnöt vähemmän tietoja sis. GET pyynnöiksi">
-<!ENTITY noscriptShowConsole "Näytä konsoli…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS usein kysytyt…">
-<!ENTITY noscriptXssFaq.accesskey "K">
-<!ENTITY noscriptUnsafeReload "Turvaton uudelleen lataus">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS suojaus poikkeukset">
-<!ENTITY noscriptXssExceptions.description "Kohteet jotka sopivat näihin &quot;regular expression&quot; lausekkeisiin EIVÄT ole suojattuja XSS vastaan.">
-<!ENTITY noscriptMatchSample "Kaavan sopivuus näyte:">
-<!ENTITY noscriptReset "Nollaa">
-<!ENTITY noscriptReset.accesskey "o">
-<!ENTITY noscriptResetDef "Palauta oletukset">
-<!ENTITY noscriptResetDef.accesskey "o">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Peruuta tilapäiset oikeudet">
-<!ENTITY noscriptRevokeTemp.accesskey "t">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ei paikkamerkkiä kohteille jotka merkitty epäluotettaviksi">
-<!ENTITY noscriptCollapseBlockedObjects "Supista estetyt kohteet">
-<!ENTITY noscriptExceptions "Poikkeukset…">
-<!ENTITY noscriptBlockedObjects "Estetyt kohteet">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Estä jokainen kohde joka tulee epäluotettavalta sivulta">
-<!ENTITY noscriptTempAllowPage "Tilapäisesti salli kaikki tällä sivulla">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Salli kaikki tällä sivulla">
-<!ENTITY noscriptAllowPage.accesskey "S">
-<!ENTITY noscriptTempToPerm "Tee sivun oikeudet pysyviksi">
-<!ENTITY noscriptTempToPerm.accesskey "p">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS usein kysytyt…">
-<!ENTITY noscriptHttpsFaq.accesskey "U">
-<!ENTITY noscriptHttps.behavior "Käyttäytyminen">
-<!ENTITY noscriptHttps.cookies "Evästeet">
-<!ENTITY noscriptHttps.description "Estä aktiivinen web-sisältö ellei se tule suojatusta (HTTPS) yhteydestä:">
-<!ENTITY noscriptHttps.never "Ei koskaan">
-<!ENTITY noscriptHttps.proxy "Kun välityspalvelinta käytetään (suositeltavaa Tor käytössä)">
-<!ENTITY noscriptHttps.always "Aina">
-<!ENTITY noscriptHttpsForced "Pakota seuraavat sivustot käyttämään suojattua (HTTPS) yhteyttä:">
-<!ENTITY noscriptHttpsForcedExceptions "Älä koskaan pakota suojattua (HTTPS) yhteyttä seuraavista sivuista:">
-<!ENTITY noscriptSecureCookies "Ota käyttöön automaattinen suojattujen evästeiden hallinta">
-<!ENTITY noscriptSecureCookiesForced "Pakota salaus kaikkiin evästeisiin HTTPS yhteydessä seuraavista sivuista:">
-<!ENTITY noscriptSecureCookiesExceptions "Ohita suojaamattomat evästeet HTTPS yhteydessä seuraavista sivuista:">
-<!ENTITY noscriptClearClickTitle "ClearClick varoitus">
-<!ENTITY noscriptClearClickHeader "Mahdollinen klikkauksen kaappaus / käyttöliittym. naamiointi yritys!">
-<!ENTITY noscriptClearClickDescription "NoScript keskeytti hiiri- tai näppäimistö vuorovaikutuksen osittain piilotettuun kohteeseen. Klikkaa kuvaa alla vaihtaaksesi sumennetun ja selkeän version välillä.">
-<!ENTITY noscriptClearClickOpt "ClearClick suojaus sivuilla…">
-<!ENTITY noscriptClearClickReport "Raportoi">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Raportin ID:">
-<!ENTITY noscriptTrustedPagesAdj "luotettu">
-<!ENTITY noscriptUntrustedPagesAdj "epäluotettava">
-<!ENTITY noscriptKeepLocked "Pidä tämä elementti lukittuna (suositus)">
-<!ENTITY noscriptEmbeddings "Sulautetut">
-<!ENTITY noscriptPrev "Edellinen">
-<!ENTITY noscriptNext "Seuraava">
-<!ENTITY noscriptFrameOptErr.title "Tätä sisältöä ei voida näyttää kehyksessä">
-<!ENTITY noscriptFrameOptErr.desc "Tämän sisällön julkaisija ei turvallisuus syistä anna sen näkyä kehyksessä.">
-<!ENTITY noscriptFrameOptErr.link "Klikkaa tästä avataksesi tämän sisällön uuteen ikkunaan">
-<!ENTITY noscriptBookmarkSync "Varmuuskopioi NoScript asetukset kirjanmerkkiin helppoa synkronointia varten">
-<!ENTITY noscriptShowReleaseNotes "Näytä julkaisutiedot päivityksen yhteydessä">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Säännöt:">
-<!ENTITY ABE.enabled.label "Käytä ABE:tä (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Sivustot voivat tarjota omia sääntöjään">
-<!ENTITY ABE.edit.label "Muokkaa…">
-<!ENTITY ABE.edit.accesskey "M">
-<!ENTITY ABE.enable.label "Käytä">
-<!ENTITY ABE.enable.accesskey "K">
-<!ENTITY ABE.disable.label "Poista käytöstä">
-<!ENTITY ABE.disable.accesskey "P">
-<!ENTITY ABE.refresh.label "Päivitä">
-<!ENTITY ABE.refresh.accesskey "P">
-<!ENTITY noscriptUninstall "Poista asennus">
-<!ENTITY noscriptRecentBlocked "Viimeksi estetyt sivustot">
-<!ENTITY noscriptExternalFilters "Ulkoiset suodattimet">
-<!ENTITY noscriptEF.enable "Käytä ulkoisia suodattimia">
-<!ENTITY noscriptEF.add "Uusi suodatin…">
-<!ENTITY noscriptEF.executable "Suoritettava tiedosto:">
-<!ENTITY noscriptEF.browse "Selaa…">
-<!ENTITY noscriptEF.contentType "Sisällön tyyppi (MIME) suodatettavaksi (täsmällinen tai &quot;regular expression&quot; lauseke):">
-<!ENTITY noscriptEF.exceptions "Älä suodata kohteita näiltä sivuilta:">
-<!ENTITY noscriptEF.remove "Poista">
-<!ENTITY noscriptPreset "Suojaustaso">
-<!ENTITY noscriptPreset.off "Pois (oletko tosissasi?!)">
-<!ENTITY noscriptPreset.low "Kevyt (estolista + Web Security)">
-<!ENTITY noscriptPreset.medium "Klassinen (sallittujen lista + Web Security)">
-<!ENTITY noscriptPreset.high "Linnake (täysi lukitus)">
-<!ENTITY noscript.hoverUI "Avaa oikeudet valikko kun hiiri osoittaa NoScript kuvaketta">
-<!ENTITY noscriptDonate "Lahjoita">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/fi/noscript/noscript.properties b/extensions/noscript/chrome/locale/fi/noscript/noscript.properties
deleted file mode 100644
index e5cf932..0000000
--- a/extensions/noscript/chrome/locale/fi/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Salli scriptit yleisesti (turvaton)
-forbidGlobal=Estä scriptit yleisesti (suositeltava)
-allowLocal=Salli %S
-allowTemp=Salli tilapäisesti %S
-forbidLocal=Estä %S
-allowed.glb=Varoitus! Scriptit käytössä kaikille sivuille
-allowed.yes=Scriptit pysyvästi sallittu
-allowed.prt=Scriptit osittain sallittu
-allowed.no=Scriptit pysyvästi estetty
-global.warning.title=Varoitus!
-global.warning.text=Scriptit asetetaan sallituksi yleisesti (kaikille sivustoille).\n Tämä on turvaton asetus.\nHaluatko varmasti jatkaa?
-audio.samples=Ääninäytteet
-confirm=Oletko varma?
-alwaysAsk=Kysy vahvistus joka kerta
-notifyHide=Piilota %S sekunnin jälkeen
-trust=Luota %S
-distrust=Merkitse %S epäluotettavaksi
-untrustedOrigin=epäluotettava alkuperä
-xss.notify.generic=NoScript suodatti mahdollisen cross-site scripting (XSS) yrityksen kohteesta %S. Tekniset yksityiskohdat on kirjattu konsoliin.
-xss.notify.showConsole=Näytä konsoli...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Siistitty epäilyttävä pyyntö. Alkuperäinen URL [%1$S] pyydetty kohteesta [%2$S]. Siistitty URL: [%3$S].
-xss.reason.filterXGetRef=Siistitty epäilyttävä pyyntö viittaus. URL [%1$S] pyydetty kohteesta [%2$S]. Siistitty viittaus: [%3$S].
-xss.reason.filterXPost=Siistitty epäilyttävä lataus kohteeseen [%1$S] osoitteesta [%2$S]: muutettu vain-lataus GET pyynnöksi.
-unsafeReload.warning=TURVATTOMASTI uudelleenlataa epäilyttävän\n\n%1$S [%2$S]\n\nKOHTEESTA [%3$S]\n\nNoScript EI suojaa tätä pyyntöä!\n
-metaRefresh.notify=NoScript esti <META> uudelleenohjauksen <NOSCRIPT> elementin sisällä: %S %S sekunnissa.
-metaRefresh.notify.follow=Seuraa uudelleen ohjausta
-metaRefresh.notify.follow.accessKey=F
-notify.options=Valinnat
-notify.options.accessKey=O
-reset.title=NoScript oletukset
-reset.warning=KAIKKI NoScript asetukset ja sivustojen oikeudet palautetaan oletusarvoihinsa välittömästi. \nTätä toimintoa ei voi palauttaa. \nHaluatko jatkaa?
-bookmarkSync.title=NoScript asetukset -kirjanmerkki
-bookmarkSync.message=Tätä kirjanmerkkiä EI ole tarkoitus avata, vaan synkronoida käyttäen palvelua kuten Weave tai Xmarks laajennus.
-bookmarkSync.confirm=NoScript on löytänyt asetukset -kirjanmerkin ilmeisesti tallennettuna\n%S.\nHaluatko varmasti korvata paikallisen NoScript kokoonpanon tämän kirjanmerkin sisällöllä?
-ABE.notify=Pyyntö %1$S suodattanut ABE: <%2$S> %3$S
-ABE.chooseEditor=Valitse tekstieditori ABE säännöille
-ABE.syntaxError=Syntaksivirhe ABE säännössä!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Salli kaikki kohteesta %S
-allowTempFrom=Tilapäisesti salli kaikki kohteesta %S
-siteInfo.confirm=Olet aikeissa kysyä tietoja sivusta "%1$S" \nesittämällä kyselyn kohteeseen %2$S.\nHaluatko jatkaa?
-siteInfo.tooltip=Keskimmäinen-klik tai VAIHTO+klik avaa sivuston tietoja...
-ef.activate=Suodata %S
-ef.options=%S valinnat...
-ef.newName=Kirjoita nimi uudelle suodattimelle:
-ef.locateExe=Valitse suoritettava tiedosto %S suodattimelle
-disable=Poista käytöstä %S
-disable.accessKey=P
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/fr/noscript/about.properties b/extensions/noscript/chrome/locale/fr/noscript/about.properties
deleted file mode 100644
index b8503c4..0000000
--- a/extensions/noscript/chrome/locale/fr/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protection supplémentaire pour votre navigateur Firefox : NoScript n'autorise JavaScript, Java (et les autres plugins) que sur les domaines de confiance de votre choix (par exemple le site web de votre banque). Cette approche de blocage préventif basée sur une liste blanche empêche l'exploitation de failles de sécurité (connues et même inconnues !) sans perte de fonctionnalités… Les experts en conviendront : Firefox est vraiment plus sécurisé avec NoScript. :-)
-aboutTitle=À propos de %S
-extensionContributors=Contributeurs :
-extensionContributors.tip=Personnes que vous devriez remercier pour cette extension
-extensionCreatorLabel=Auteur :
-changelog=Changements
-changelog.tip=Afficher les changements
-license=Licence
-license.tip=Lire la licence pour l'utilisateur final
-logo.tip=Visiter le site de l'extension
-sponsor.tip=Visiter le site du sponsor
-informaction.tip=Visiter le site d'InformAction
-extensionHomepage.tip=Visiter le site de l'extension
-extensionCreator.tip=Visiter le site de l'auteur
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/fr/noscript/noscript.dtd b/extensions/noscript/chrome/locale/fr/noscript/noscript.dtd
deleted file mode 100644
index 64e49d7..0000000
--- a/extensions/noscript/chrome/locale/fr/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Options de NoScript">
-<!ENTITY noscriptAbout "À propos de NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Il est possible de spécifier quels sites Web sont autorisés à exécuter des scripts. Saisissez l&apos;adresse exacte du site que vous désirez autoriser puis cliquez sur Autoriser.">
-<!ENTITY noscriptWebAddress "Adresse du site Web :">
-<!ENTITY noscriptAllow "Autoriser">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "Interdire">
-<!ENTITY noscriptForbid.accesskey "I">
-<!ENTITY noscriptTrust "Faire confiance">
-<!ENTITY noscriptTrust.accesskey "C">
-<!ENTITY noscriptUntrust "Ne pas faire confiance">
-<!ENTITY noscriptUntrust.accesskey "P">
-<!ENTITY noscriptRemoveSelected "Enlever les sites sélectionnés">
-<!ENTITY noscriptGloballyEnabled "Autoriser les scripts globalement (dangereux)">
-<!ENTITY noscriptAutoReload "Recharger les pages affectées automatiquement après avoir changé les permissions">
-<!ENTITY noscriptGeneral "Général">
-<!ENTITY noscriptAppearance "Apparence">
-<!ENTITY noscriptShow "Afficher...">
-<!ENTITY noscriptCtxMenu "Menu contextuel">
-<!ENTITY noscriptStatusIcon "Icône dans la barre d&apos;état">
-<!ENTITY noscriptFullAddr "Adresses complètes (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domaines complets (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Domaines de second niveau (noscript.net)">
-<!ENTITY noscriptTempCmd "Autoriser temporairement [...]">
-<!ENTITY noscriptSound "Retour audio quand des scripts sont bloqués">
-<!ENTITY noscriptImport "Importer">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exporter">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Afficher un message à propos des scripts bloqués">
-<!ENTITY noscriptNotify.bottom "Placer le message en bas">
-<!ENTITY noscriptSound.choose "Choisir">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Jouer">
-<!ENTITY noscriptSound.play.accesskey "J">
-<!ENTITY noscriptSound.reset "Réinitialiser">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avancé">
-<!ENTITY noscriptAdditionalPermissions "Permissions supplémentaires pour les sites de confiance">
-<!ENTITY noscriptAllowClipboard "Autoriser le copier/coller de texte riche du presse-papier">
-<!ENTITY noscriptAdditionalRestrictions "Restrictions supplémentaires pour les sites à risque">
-<!ENTITY noscriptPlugins "Greffons">
-<!ENTITY noscriptContentBlocker "Appliquer ces restrictions également aux sites de confiance">
-<!ENTITY noscriptForbidJava "Interdire Java™">
-<!ENTITY noscriptForbidXSLT "Interdire XSLT">
-<!ENTITY noscriptForbidSilverlight "Interdire Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Interdire &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Interdire &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Interdire @font-face">
-<!ENTITY noscriptForbidWebGL "Interdire WebGL">
-<!ENTITY noscriptForbidMedia "Interdire &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Interdire Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Interdire les autres plugins">
-<!ENTITY noscriptReloadWarn "Ces options prendront effet sur les pages rechargées (manuellement) et les nouvelles pages">
-<!ENTITY noscriptConfirmUnblock "Demander confirmation avant de débloquer temporairement un objet">
-<!ENTITY noscriptStatusLabel "Étiquette dans la barre d&apos;état">
-<!ENTITY noscriptForbidBookmarklets "Interdire les bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Afficher l&apos;emplacement fictif de l&apos;objet bloqué">
-<!ENTITY noscriptTruncateTitle "Tronquer le titre des documents">
-<!ENTITY noscriptFixLinks "Essayer de réparer les liens javascript">
-<!ENTITY noscriptAllowBookmarks "Autoriser tous les sites trouvés dans les marque-pages">
-<!ENTITY noscriptAllowViaBookmarks "Autoriser les sites ouverts par les marque-pages">
-<!ENTITY noscriptAllowPing "Autoriser &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Autoriser les liens locaux">
-<!ENTITY noscriptForbidPing "Interdire &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Interdire les redirections META dans des éléments &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Afficher un message à propos des redirections META bloquées">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Liste blanche">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Actualiser">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Clic gauche sur le bouton de barre d&apos;outils NoScript inverse les permissions pour le site de premier niveau en cours">
-<!ENTITY noscriptTrusted "Fiable">
-<!ENTITY noscriptUntrusted "Non fiable">
-<!ENTITY noscriptUnknown "Inconnu">
-<!ENTITY noscriptAdd "Ajouter">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Fermer">
-<!ENTITY noscriptSiteManager "Gestionnaire de sites">
-<!ENTITY noscriptSecurityManager "Gestionnaire de sécurité">
-<!ENTITY noscriptPolicies "Politiques">
-<!ENTITY noscriptDefaultPolicies "Politiques par défaut">
-<!ENTITY noscriptSitePolicies "Politiques par site">
-<!ENTITY noscriptNselNever "Cacher les éléments &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Afficher l&apos;élément &lt;NOSCRIPT&gt; qui suit un &lt;SCRIPT&gt; bloqué">
-<!ENTITY noscriptAutoAllowTopLevel "Autoriser temporairement les sites de premier niveau par défaut">
-<!ENTITY noscriptDescription "Protection supplémentaire pour votre Firefox : NoScript ne permet l&apos;exécution de scripts JavaScript que sur les domaines de confiance de votre choix (p.ex. le site de votre banque). Ce système de blocage préventif de scripts basé sur une liste blanche empêche l&apos;exploitation de failles de sécurité (connues et même inconnues) sans perte de fonctionnalités… Les experts en conviendront : Firefox est réellement plus sûr avec NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquer les scanners basés sur des CSS">
-<!ENTITY noscriptOptFilterXGet "Nettoyer les requêtes suspicieuses entre sites">
-<!ENTITY noscriptOptFilterXPost "Transformer les requêtes POST entre sites en requêtes GET sans données">
-<!ENTITY noscriptShowConsole "Afficher la console...">
-<!ENTITY noscriptShowConsole.accesskey "A">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "FAQ XSS">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Rechargement non sécurisé">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Exceptions de protection anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Les destinations correspondant aux expressions régulières suivantes ne seront pas protégées contre le XSS">
-<!ENTITY noscriptMatchSample "Exemple de motif :">
-<!ENTITY noscriptReset "Réinitialiser">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Rétablir les valeurs par défaut">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Révoquer les permissions temporaires">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ne pas réserver d&apos;espace pour les objets venant de sites marqués comme sites à risque">
-<!ENTITY noscriptCollapseBlockedObjects "Utiliser l&apos;espace libéré par les éléments bloqués">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Objets bloqués">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquer tous les objets venant d&apos;un site marqué comme non fiable">
-<!ENTITY noscriptTempAllowPage "Autoriser cette page temporairement">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Autoriser toute la page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Rendre les permissions de cette page permanentes">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "FAQ HTTPS...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportement">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Interdire le contenu web actif, sauf s&apos;il vient d&apos;une connexion sécurisée (HTTPS) :">
-<!ENTITY noscriptHttps.never "Jamais">
-<!ENTITY noscriptHttps.proxy "Lors de l&apos;utilisation d&apos;un proxy (recommandé avec Tor)">
-<!ENTITY noscriptHttps.always "Toujours">
-<!ENTITY noscriptHttpsForced "Forcer les sites suivants à utiliser une connexion sécurisée (HTTPS) :">
-<!ENTITY noscriptHttpsForcedExceptions "Ne jamais forcer les sites suivants à utiliser une connexion sécurisée (HTTPS) :">
-<!ENTITY noscriptSecureCookies "Activer la Gestion Sécurisée Automatique des Cookies">
-<!ENTITY noscriptSecureCookiesForced "Forcer le chiffrement pour tous les cookies définis par HTTPS pour les sites suivants :">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorer les cookies non sûrs définis par HTTPS pour les sites suivants :">
-<!ENTITY noscriptClearClickTitle "Avertissement ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking potentiel / rétablissement de tentative d&apos;UI">
-<!ENTITY noscriptClearClickDescription "NoScript a intercepté une interaction de la souris ou du clavier avec une élément partiellement caché. Cliquez sur l&apos;image en-dessus pour passer de la version cachée à la version visible.">
-<!ENTITY noscriptClearClickOpt "Protection ClearClick sur les pages…">
-<!ENTITY noscriptClearClickReport "Rapport">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID du rapport">
-<!ENTITY noscriptTrustedPagesAdj "fiables">
-<!ENTITY noscriptUntrustedPagesAdj "non fiables">
-<!ENTITY noscriptKeepLocked "Garder cet environnement verrouillé (recommandé)">
-<!ENTITY noscriptEmbeddings "Objets embarqués">
-<!ENTITY noscriptPrev "Précédent">
-<!ENTITY noscriptNext "Suivant">
-<!ENTITY noscriptFrameOptErr.title "Le contenu ne peut pas être affiché dans un cadre">
-<!ENTITY noscriptFrameOptErr.desc "Pour protéger votre sécurité, l'éditeur de ce contenu n'autorise pas à l'afficher dans un cadre.">
-<!ENTITY noscriptFrameOptErr.link "Cliquez ici pour ouvrir ce contenu dans une nouvelle fenêtre">
-<!ENTITY noscriptBookmarkSync "Sauvegarder la configuration de NoScript dans un marque-page pour une synchronisation facile">
-<!ENTITY noscriptShowReleaseNotes "Afficher les notes de version lors des mises à jour">
-<!ENTITY ABE "EFA">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Jeux de règles :">
-<!ENTITY ABE.enabled.label "Activer EFA (Exécuteur de Frontières des Applications)">
-<!ENTITY ABE.siteEnabled.label "Autoriser les sites à faire passer leurs propres jeux de règles">
-<!ENTITY ABE.edit.label "Éditer…">
-<!ENTITY ABE.edit.accesskey "e">
-<!ENTITY ABE.enable.label "Activer">
-<!ENTITY ABE.enable.accesskey "v">
-<!ENTITY ABE.disable.label "Désactiver">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Actualiser">
-<!ENTITY ABE.refresh.accesskey "r">
-<!ENTITY noscriptUninstall "Désinstaller">
-<!ENTITY noscriptRecentBlocked "Sites récemment bloqués">
-<!ENTITY noscriptExternalFilters "Filtres externes">
-<!ENTITY noscriptEF.enable "Activer les filtres externes">
-<!ENTITY noscriptEF.add "Nouveau filtre…">
-<!ENTITY noscriptEF.executable "Fichier exécutable :">
-<!ENTITY noscriptEF.browse "Parcourir…">
-<!ENTITY noscriptEF.contentType "Type de contenu (MIME) à filtrer (correspondance exacte ou expression rationnelle) :">
-<!ENTITY noscriptEF.exceptions "Ne pas filtrer les objets provenant de ces sites :">
-<!ENTITY noscriptEF.remove "Supprimer">
-<!ENTITY noscriptPreset "Niveau de sécurité">
-<!ENTITY noscriptPreset.off "Éteint (vous êtes sérieux ?!)">
-<!ENTITY noscriptPreset.low "Passage facile (liste noire + sécurité web)">
-<!ENTITY noscriptPreset.medium "Classique (liste blanche + sécurité web)">
-<!ENTITY noscriptPreset.high "Forteresse (blocus complet)">
-<!ENTITY noscript.hoverUI "Ouvrir le menu des permissions lorsque la souris survole l'icône de NoScript.">
-<!ENTITY noscriptDonate "Donner">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Répercuter les permissions du document principal vers les scripts de tierce partie">
-<!ENTITY noscriptRestrictSubdocScripting "Bloquer les scripts dans les sous-documents sur liste blanche, sur les pages non placées sur liste blanche">
-<!ENTITY noscriptGlobalHttpsWhitelist "Autoriser les scripts HTTPS globalement, dans les documents HTTPS">
-<!ENTITY noscriptAutoReload.currentTab "Recharger uniquement l'onglet actif">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/fr/noscript/noscript.properties b/extensions/noscript/chrome/locale/fr/noscript/noscript.properties
deleted file mode 100644
index 3d04621..0000000
--- a/extensions/noscript/chrome/locale/fr/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Autoriser Javascript globalement (dangereux)
-forbidGlobal=Interdire Javascript globalement (recommandé)
-allowLocal=Autoriser %S
-allowTemp=Autoriser %S temporairement
-forbidLocal=Interdire %S
-allowed.glb=Danger ! Javascript autorisé globalement
-allowed.yes=Javascript actuellement autorisé
-allowed.prt=JavaScript partiellement autorisé
-allowed.no=Javascript actuellement interdit
-global.warning.title=Attention !
-global.warning.text=Javascript sera autorisé globalement (pour tous les sites).\nCette action est potentiellement dangereuse.\nVoulez-vous réellement continuer ?
-audio.samples=Exemples audio
-confirm=Êtes-vous sûr ?
-alwaysAsk=Toujours demander confirmation
-notifyHide=Cacher après %S seconde(s)
-trust=Faire confiance à %S
-distrust=Marquer %S comme non fiable
-untrustedOrigin=une origine douteuse
-xss.notify.generic=NoScript a filtré une tentative de script entre sites (Cross-site scripting, XSS) de %S. Les détails techniques ont été inscrits dans la console.
-xss.notify.showConsole=Afficher la console...
-xss.notify.showConsole.accessKey=A
-xss.reason.filterXGet=Nettoyé requête suspicieuse. URL originale [%1$S] demandée depuis [%2$S]. URL nettoyée : [%3$S].
-xss.reason.filterXGetRef=Nettoyé requête de référence suspicieuse. URL [%1$S] demandée depuis [%2$S]. Référent nettoyé : [%3$S].
-xss.reason.filterXPost=Nettoyé téléversement suspicieux vers [%1$S] depuis [%2$S] : transformé en une simple requête de téléchargement GET.
-unsafeReload.warning=Rechargement NON SÛR d'un\n\n%1$S [%2$S]\n\nsuspicieux\n\nDE [%3$S]\n\nNoScript ne protégera PAS cette requête !\n
-metaRefresh.notify=NoScript a bloqué une redirection <meta> dans un élément <noscript> : %S en %S secondes
-metaRefresh.notify.follow=Suivre la redirection
-metaRefresh.notify.follow.accessKey=S
-notify.options=Options
-notify.options.accessKey=O
-reset.title=Réinitialiser NoScript
-reset.warning=TOUTES les préférences de NoScript et les permissions des sites seront réinitialisées à leurs valeurs par défaut immédiatement.\nCette action ne peut PAS être annulée.\nVoulez-vous continuer ?
-bookmarkSync.title=Marque-page de configuration de NoScript
-bookmarkSync.message=Ce marque-page n'est PAS prévu pour être ouvert, mais pour être synchronisé en utilisant un service tel que Weave ou l'extension XMarks.
-bookmarkSync.confirm=NoScript a trouvé un marque-page de configuration visiblement sauvegardé le\n%S.\nVoulez-vous vraiment écraser votre configuration de NoScript par le contenu de ce marque-page ?
-ABE.notify=Requête %1$S filtrée par EFA : <%2$S> %3$S
-ABE.chooseEditor=Choisissez un éditeur de texte pour les jeux de règles EFA
-ABE.syntaxError=Erreur de syntaxe dans le jeu de règles EFA !
-ABE.wanIpAsLocal=IP WAN (%S) ∈ LOCAL
-allowFrom=Tout autoriser de %S
-allowTempFrom=Tout autoriser temporairement de %S
-siteInfo.confirm=Vous allez demander des informations à propos du site "%1$S" en soumettant un requête à %2$S.\nVoulez-vous continuer ?
-siteInfo.tooltip=Clic du milieu ou Maj+click pour les infos du site…
-ef.activate=Filtrer %S
-ef.options=Options de %S…
-ef.newName=Entrer le nom du nouveau filtre :
-ef.locateExe=Sélectionner le fichier exécutable pour le filtre %S
-disable=Désactiver %S
-disable.accessKey=D
-removal.title=Avertissement de Baisse de la Sécurité
-removal.message=En désactivant ou désinstallant NoScript, vous abandonnez TOUTES les protections fournies par NoScript.\n\nSi vous êtes simplement fatigué de gérer les permissions de script site par site, il y a un choix plus sûr.\n\nNoScript peut arrêter de bloquer les scripts, exceptés ceux que vous marquez comme non fiables, tout en continuant de vous protéger avec les contremesures de sécurités les plus avancées contre XSS, le Clickjacking, CSRF et d'autres menaces web.\n\nVoulez-vous réellement enlever TOUTES les protections NoScript ?\n
-removal.no=Non, arrêter simplement de bloquer les scripts
-removal.yes=Oui, enlever TOUTES les protections
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/gl-ES/noscript/about.properties b/extensions/noscript/chrome/locale/gl-ES/noscript/about.properties
deleted file mode 100644
index ebb5832..0000000
--- a/extensions/noscript/chrome/locale/gl-ES/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=Acerca de %S
-extensionContributors=Colaboradores:
-extensionContributors.tip=Xente á que lle debes agradecer esta extensión
-extensionCreatorLabel=Autor:
-changelog=Cambios
-changelog.tip=Amosar os cambios
-license=Licenza
-license.tip=Ler a licenza de usuario final
-logo.tip=Visitar a páxina web da extensión
-sponsor.tip=Visitar a páxina web do patrocinador
-informaction.tip=Visitar a páxina web de InformAction
-extensionHomepage.tip=Visitar a páxina web da extensión
-extensionCreator.tip=Visitar a páxina web do autor
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.dtd b/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.dtd
deleted file mode 100644
index 3cf3490..0000000
--- a/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opcións...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opcións de NoScript">
-<!ENTITY noscriptAbout "Acerca de NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Podes especificar que páxinas web poden executar scripts. Teclea o enderezo ou o dominio (por exemplo &quot;http://www.paxina.com&quot; ou &quot;paxina.com&quot;) do sitio que queres autorizar e despois preme en &quot;Permitir&quot;.">
-<!ENTITY noscriptWebAddress "Enderezo web:">
-<!ENTITY noscriptAllow "Permitir">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "Non permitir">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Marcar como sitio fiábel">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Marcar como sitio non fiábel">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Borrar os ficheiros seleccionados">
-<!ENTITY noscriptGloballyEnabled "Scripts globalmente permitidos (perigoso)">
-<!ENTITY noscriptAutoReload "Recargar automaticamente as páxinas afectadas cando os permisos cambien">
-<!ENTITY noscriptGeneral "Xeral">
-<!ENTITY noscriptAppearance "Aspecto">
-<!ENTITY noscriptShow "Amosar...">
-<!ENTITY noscriptCtxMenu "Menú contextual">
-<!ENTITY noscriptStatusIcon "Icona da barra de estado">
-<!ENTITY noscriptFullAddr "Enderezos completos (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Dominios (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dominios base de segundo nivel (noscript.net)">
-<!ENTITY noscriptTempCmd "Permitir temporalmente [...]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Importar">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportar">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Amosar mensaxes sobre os scripts bloqueados">
-<!ENTITY noscriptNotify.bottom "Colocar mensaxe ao final">
-<!ENTITY noscriptSound.choose "Escoller">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Reproducir">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Voltar ao valores iniciais">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avanzado">
-<!ENTITY noscriptAdditionalPermissions "Permisos adicionais para sitios de confianza">
-<!ENTITY noscriptAllowClipboard "Permitir copiar e pegar texto desde un portapapeis externo">
-<!ENTITY noscriptAdditionalRestrictions "Restricións adicionais para sitio non de confianza">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Non permitir Java™">
-<!ENTITY noscriptForbidXSLT "Non permitir XSLT">
-<!ENTITY noscriptForbidSilverlight "Non permitir Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Non permitir &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Non permitir &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Non permitir @font-face">
-<!ENTITY noscriptForbidWebGL "Non permitir WebGL">
-<!ENTITY noscriptForbidMedia "Non permitir &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Non permitir Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Non permitir outros plugins">
-<!ENTITY noscriptReloadWarn "Estas opcións terán efecto en páxinas novas ou (manualmente) recargadas">
-<!ENTITY noscriptConfirmUnblock "Pedir confirmación antes de desblocar temporalmente un obxecto">
-<!ENTITY noscriptStatusLabel "Etiqueta da barra de estado">
-<!ENTITY noscriptForbidBookmarklets "Non permitir bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Amosar icona">
-<!ENTITY noscriptTruncateTitle "Truncar títulos de documentos">
-<!ENTITY noscriptFixLinks "Tentar fixar ligazóns Javascript">
-<!ENTITY noscriptAllowBookmarks "Permitir enderezos abertos mediante bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Permitir enderezos abertos mediante bookmarks">
-<!ENTITY noscriptAllowPing "Permitir &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permitir enderezos locais">
-<!ENTITY noscriptForbidPing "Non permitir &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Non permitir redireccións META dentro de elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Lista branca">
-<!ENTITY noscriptPermissions "Permisos">
-<!ENTITY noscriptRefresh "Refrescar">
-<!ENTITY noscriptNotifications "Notificacións">
-<!ENTITY noscriptToolbarToggle "Clic esquerdo no barra NoScript cambia permisos para a páxina actual">
-<!ENTITY noscriptTrusted "Fiábel">
-<!ENTITY noscriptUntrusted "Non fiábel">
-<!ENTITY noscriptUnknown "Descoñecido">
-<!ENTITY noscriptAdd "Engadir">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Pechar">
-<!ENTITY noscriptSiteManager "Xestor do sitio">
-<!ENTITY noscriptSecurityManager "Xestor de seguridade">
-<!ENTITY noscriptPolicies "Políticas">
-<!ENTITY noscriptDefaultPolicies "Políticas por defecto">
-<!ENTITY noscriptSitePolicies "Políticas específicas do sitio">
-<!ENTITY noscriptNselNever "Ocultar elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Amosar o elemento &lt;NOSCRIPT&gt; que siga a un &lt;SCRIPT&gt; blocado">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquear escáners baseados en CSS">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Amosar consola">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "FAQ XSS">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Excepcións ña protección anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Os destinos que coincidan con estas expresións regulares NON serán protexidos contra XSS">
-<!ENTITY noscriptMatchSample "Mostra de coincidencia de patróns:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.properties b/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.properties
deleted file mode 100644
index afc9c9a..0000000
--- a/extensions/noscript/chrome/locale/gl-ES/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permitir scripts globalmente (perigoso)
-forbidGlobal=Non permitir scripts globalmente (aconsellado)
-allowLocal=Permitir %S
-allowTemp=Permitir temporalmente %S
-forbidLocal=Non permitir %S
-allowed.glb=Perigo! Scripts permitidos globalmente
-allowed.yes=Scripts permitidos actualmente
-allowed.prt=Scripts parcialmente permitidos
-allowed.no=Scripts non permitidos actualmente
-global.warning.title=Ollo!
-global.warning.text=Os scripts van ser permitidos de xeito global (para cada áxina web).\n Esta é unha acción potencialmente perigosa.\n Estás seguro de querer facelo?
-audio.samples=Mostras de audio
-confirm=Estás seguro?
-alwaysAsk=Pedir sempre confirmación
-notifyHide=Ocultar logo de %S segundos
-trust=Confiar en %S
-distrust=Marcar %S como non fiábel
-untrustedOrigin=Unha orixe non confiábel
-xss.notify.generic=NoScript filtrou un intento potencias de cross-site scripting (XSS) dende %S. Os detalles técnicos foron almacenados na consola.
-xss.notify.showConsole=Amosar consola...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].)
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].)
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocou unha redirección <META> dentro dun elemento <NOSCRIPT>: %S en %S segundos.
-metaRefresh.notify.follow=Seguir redirección
-metaRefresh.notify.follow.accessKey=F
-notify.options=Opcións
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/he-IL/noscript/about.properties b/extensions/noscript/chrome/locale/he-IL/noscript/about.properties
deleted file mode 100644
index 3dd0f2f..0000000
--- a/extensions/noscript/chrome/locale/he-IL/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=הגנה נוספת עבור ה־Firefox שלך: NoScript מתיר ל־ ™JS, Java (ותוספות אחרות) לפעול רק בתחומים מהימנים על פי בחירתך (כגון: אתר הבית של חשבון הבנק שלך). גישה זו מבוססת על "רשימת מותרים" החוסמת מראש את מה שאינו מורשה, מונעת ניצול של פרצות אבטחה (כאלה שידועים ואפילו שעדיין לא!) מבלי לגרוע בתיפקודיות הגלישה..! מומחים יסכימו ש־Firefox בטוח יותר עם NoScript :-)
-aboutTitle=%S אודות
-extensionContributors=מתרגמים:
-extensionContributors.tip=אנשים שצריך להודות להם עבור הרחבה זו
-extensionCreatorLabel=מחבר:
-changelog=יומן רישום של שינויים
-changelog.tip=הצג יומן רישום של שינויים
-license=רשיון
-license.tip=קרא את הסכם הרשיון למשתמש קצה
-logo.tip=בקר בדף הבית של ההרחבה
-sponsor.tip=בקר בדף הבית של המפרסם
-informaction.tip=בקר בדף הבית של חברת InformAction
-extensionHomepage.tip=בקר בדף הבית של ההרחבה
-extensionCreator.tip=בקר בדף הבית של מחבר ההרחבה
-version=גירסה %S
diff --git a/extensions/noscript/chrome/locale/he-IL/noscript/noscript.dtd b/extensions/noscript/chrome/locale/he-IL/noscript/noscript.dtd
deleted file mode 100644
index a889914..0000000
--- a/extensions/noscript/chrome/locale/he-IL/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "הגדרות...">
-<!ENTITY noscriptOptions.accesskey "">
-<!ENTITY noscriptOptionsLong "NoScript הגדרות של">
-<!ENTITY noscriptAbout "אודות NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "ציין אילו אתרים יכולים לקבל היתר להפעלת קבצי Script. הקלד את כתובת האתר או את שם התחום (כגון: &quot;http://www.site.com&quot; או &quot;site.com&quot;) ולאחר מכן לחץ על התר.">
-<!ENTITY noscriptWebAddress "כתובת/תחום:">
-<!ENTITY noscriptAllow "התר">
-<!ENTITY noscriptAllow.accesskey "">
-<!ENTITY noscriptForbid "אסור">
-<!ENTITY noscriptForbid.accesskey "">
-<!ENTITY noscriptTrust "סמן כמהימן">
-<!ENTITY noscriptTrust.accesskey "">
-<!ENTITY noscriptUntrust "סמן כלא מהימן">
-<!ENTITY noscriptUntrust.accesskey "">
-<!ENTITY noscriptRemoveSelected "הסר">
-<!ENTITY noscriptGloballyEnabled "קבצי Script מותרים באופן כללי (לא מומלץ)">
-<!ENTITY noscriptAutoReload "טען מחדש דפים שמושפעים בעת שינוי הרשאות באופן עצמי">
-<!ENTITY noscriptGeneral "כללי">
-<!ENTITY noscriptAppearance "תצוגה">
-<!ENTITY noscriptShow "הצג...">
-<!ENTITY noscriptCtxMenu "תפריט הקשר">
-<!ENTITY noscriptStatusIcon "סמל שורת מצב">
-<!ENTITY noscriptFullAddr "כתובות מלאות (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "תחומים מלאים (www.noscript.net)">
-<!ENTITY noscriptBaseDom "תחומי בסיס ברמה שנייה (noscript.net)">
-<!ENTITY noscriptTempCmd "התר באופן זמני [...]">
-<!ENTITY noscriptSound "הפעל צליל משוב כאשר קבצי Script נחסמים">
-<!ENTITY noscriptImport "יבוא">
-<!ENTITY noscriptImport.accesskey "">
-<!ENTITY noscriptExport "יצוא">
-<!ENTITY noscriptExport.accesskey "">
-<!ENTITY noscriptNotify "הצג הודעה אודות קבצי Script חסומים">
-<!ENTITY noscriptNotify.bottom "מקם הודעות בתחתית הדף">
-<!ENTITY noscriptSound.choose "עיון...">
-<!ENTITY noscriptSound.choose.accesskey "">
-<!ENTITY noscriptSound.play "נגן">
-<!ENTITY noscriptSound.play.accesskey "">
-<!ENTITY noscriptSound.reset "איפוס">
-<!ENTITY noscriptSound.reset.accesskey "">
-<!ENTITY noscriptAdvanced "מתקדם">
-<!ENTITY noscriptAdditionalPermissions "הרשאות נוספות באתרים מהימנים">
-<!ENTITY noscriptAllowClipboard "אפשר העתקה והדבקה של מלל עשיר מאחסון זכרון חיצוני">
-<!ENTITY noscriptAdditionalRestrictions "הגבלות נוספות באתרים שאינם מהימנים">
-<!ENTITY noscriptPlugins "תוספים">
-<!ENTITY noscriptContentBlocker "החל הגבלות אלו גם על אתרים מהימנים">
-<!ENTITY noscriptForbidJava "מנע ™Java">
-<!ENTITY noscriptForbidXSLT "מנע XSLT">
-<!ENTITY noscriptForbidSilverlight "מנע ™Silverlight">
-<!ENTITY noscriptForbidIFrames "מנע &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "מנע &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "מנע @font-face">
-<!ENTITY noscriptForbidWebGL "אסור על WebGL">
-<!ENTITY noscriptForbidMedia "מנע &lt;AUDIO&gt;/&lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "מנע ®Flash">
-<!ENTITY noscriptForbidPlugins "מנע תוספים אחרים">
-<!ENTITY noscriptReloadWarn "אפשרויות אלה ישפיעו על דפים חדשים או על כאלה שיטענו מחדש באופן ידני">
-<!ENTITY noscriptConfirmUnblock "בקש אישור לפני ביטול חסימה של רכיב באופן זמני">
-<!ENTITY noscriptStatusLabel "כותרת שורת מצב">
-<!ENTITY noscriptForbidBookmarklets "מנע יישומי סימניה">
-<!ENTITY noscriptShowPlaceholder "הצג סמל כתחליף">
-<!ENTITY noscriptTruncateTitle "חתוך את הכותרות במסמך">
-<!ENTITY noscriptFixLinks "נסה לתקן קישורים של JS">
-<!ENTITY noscriptAllowBookmarks "אפשר אתרים שנפתחים דרך הסימניות">
-<!ENTITY noscriptAllowViaBookmarks "אפשר אתרים שנפתחים דרך הסימניות">
-<!ENTITY noscriptAllowPing "התר &lt;...A PING&gt;">
-<!ENTITY noscriptAllowLocalLinks "התר קישורים מקומיים">
-<!ENTITY noscriptForbidPing "מנע &lt;...A PING&gt;">
-<!ENTITY noscriptForbidMetaRefresh "מנע ניתוב מחודש של META ברכיבים של &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "">
-<!ENTITY noscriptWhitelist "היתרים">
-<!ENTITY noscriptPermissions "הרשאות">
-<!ENTITY noscriptRefresh "רענן מחדש">
-<!ENTITY noscriptNotifications "הודעות">
-<!ENTITY noscriptToolbarToggle "לחיצה שמאלית על לחצן סרגל כלים של NoScript תשנה מצב הרשאות עבור אתר ראשי נוכחי">
-<!ENTITY noscriptTrusted "מהימן">
-<!ENTITY noscriptUntrusted "לא מהימן">
-<!ENTITY noscriptUnknown "לא ידוע">
-<!ENTITY noscriptAdd "הוסף">
-<!ENTITY noscriptAdd.accesskey "">
-<!ENTITY noscriptClose "סגור">
-<!ENTITY noscriptSiteManager "מנהל אתר">
-<!ENTITY noscriptSecurityManager "מנהל אבטחה">
-<!ENTITY noscriptPolicies "מדיניות">
-<!ENTITY noscriptDefaultPolicies "מדיניות ברירת מחדל">
-<!ENTITY noscriptSitePolicies "מדיניות מפורשת של אתר">
-<!ENTITY noscriptNselNever "הסתר רכיבים של &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "הצג רכיב &lt;NOSCRIPT&gt; שבא אחרי &lt;SCRIPT&gt; חסום.">
-<!ENTITY noscriptAutoAllowTopLevel "התר אתרים ראשיים באופן זמני כברירת מחדל">
-<!ENTITY noscriptDescription "הגנה נוספת עבור ה־Firefox שלך: NoScript מתיר ל־ ™JS, Java (ותוספות אחרות) לפעול רק בתחומים מהימנים על פי בחירתך (כגון: אתר הבית של חשבון הבנק שלך). גישה זו מבוססת על &quot;רשימת מותרים&quot; החוסמת מראש את מה שאינו מורשה, מונעת ניצול של פרצות אבטחה (כאלה שידועים ואפילו שעדיין לא!) מבלי לגרוע בתיפקודיות הגלישה..! מומחים יסכימו ש־Firefox בטוח יותר עם NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "חסום סורקים מבוססי CSS">
-<!ENTITY noscriptOptFilterXGet "הסר בקשות צד שלישי חשודות בין אתרים">
-<!ENTITY noscriptOptFilterXPost "הפוך בקשות POST של אתרים מצד שלישי לבקשות GET ללא נתונים נלווים">
-<!ENTITY noscriptShowConsole "הצג מסוף...">
-<!ENTITY noscriptShowConsole.accesskey "">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "שאלות נפוצות בנושא XSS...">
-<!ENTITY noscriptXssFaq.accesskey "ל">
-<!ENTITY noscriptUnsafeReload "טעינה מחדש לא בטוחה">
-<!ENTITY noscriptUnsafeReload.accesskey "">
-<!ENTITY noscriptXssExceptions "הגנת Anti-XSS ליוצאים מן הכלל">
-<!ENTITY noscriptXssExceptions.description "יעדים התואמים לביטויים רגילים אלה לא יהיו מוגנים מפני XSS.">
-<!ENTITY noscriptMatchSample "דוגמה התואמת לתבנית:">
-<!ENTITY noscriptReset "איפוס">
-<!ENTITY noscriptReset.accesskey "">
-<!ENTITY noscriptResetDef "אפס להגדרות ברירת מחדל">
-<!ENTITY noscriptResetDef.accesskey "">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "בטל הרשאות זמניות">
-<!ENTITY noscriptRevokeTemp.accesskey "">
-<!ENTITY noscriptNoUntrustedPlaceholder "אל תציג מצייני מיקום עבור רכיבים המגיעים מאתרים שסומנו כלא מהימנים">
-<!ENTITY noscriptCollapseBlockedObjects "צמצם רכיבים חסומים">
-<!ENTITY noscriptExceptions "חריגים...">
-<!ENTITY noscriptBlockedObjects "רכיבים חסומים">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "חסום כל רכיב שמגיע מאתר המסומן כלא מהימן">
-<!ENTITY noscriptTempAllowPage "זמנית התר את כל הדף זה">
-<!ENTITY noscriptTempAllowPage.accesskey "">
-<!ENTITY noscriptAllowPage "התר את כל הדף זה">
-<!ENTITY noscriptAllowPage.accesskey "">
-<!ENTITY noscriptTempToPerm "הפוך הרשאות בדף לקבועות">
-<!ENTITY noscriptTempToPerm.accesskey "">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "שאלות נפוצות בנושא HTTPS...">
-<!ENTITY noscriptHttpsFaq.accesskey "">
-<!ENTITY noscriptHttps.behavior "התנהגות">
-<!ENTITY noscriptHttps.cookies "קבצי Cookie">
-<!ENTITY noscriptHttps.description "מנע תוכן רשת פעיל, אלא אם כן הוא מגיע מחיבור מאובטח (HTTPS):">
-<!ENTITY noscriptHttps.never "אף פעם">
-<!ENTITY noscriptHttps.proxy "בעת שימוש ב־proxy (מומלץ עם Tor)">
-<!ENTITY noscriptHttps.always "תמיד">
-<!ENTITY noscriptHttpsForced "כפה את האתרים הבאים לעשות שימוש בחיבור מאובטח (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "אל תכפה שימוש בחיבור מאובטח (HTTPS) עבור האתרים הבאים:">
-<!ENTITY noscriptSecureCookies "אפשר ניהול עצמי של קבצי Cookie מאובטחים">
-<!ENTITY noscriptSecureCookiesForced "כפה הצפנה עבור כל קבצי ה־Cookies שנקבעו ע&quot;י חיבור HTTPS באתרים הבאים:">
-<!ENTITY noscriptSecureCookiesExceptions "התעלם מקבצי Cookie לא בטוחים שנקבעו ע&quot;י חיבור HTTPS באתרים הבאים:">
-<!ENTITY noscriptClearClickTitle "הזהר מפני ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking אפשרי/ניסיון תיקון ממשק המשתמש!">
-<!ENTITY noscriptClearClickDescription "NoScript מעכב את פעולת הגומלין של העכבר או המקלדת עם רכיב מוסתר באופן חלקי. לחץ על התמונה שלהלן כדי לעבור בין הרכיב החסום לגירסה הברורה שלו.">
-<!ENTITY noscriptClearClickOpt "הגנה מפני ClearClick">
-<!ENTITY noscriptClearClickReport "דווח">
-<!ENTITY noscriptClearClickReport.accesskey "">
-<!ENTITY noscriptClearClickReportId "מזהה דוח:">
-<!ENTITY noscriptTrustedPagesAdj "מהימן">
-<!ENTITY noscriptUntrustedPagesAdj "לא מהימן">
-<!ENTITY noscriptKeepLocked "שמור על רכיב זה נעול (מומלץ)">
-<!ENTITY noscriptEmbeddings "רכיבים">
-<!ENTITY noscriptPrev "הקודם">
-<!ENTITY noscriptNext "הבא">
-<!ENTITY noscriptFrameOptErr.title "אין אפשרות להציג תוכן זה במסגרת">
-<!ENTITY noscriptFrameOptErr.desc "כדי להגן על האבטחה שלך, המוציא לאור של תוכן זה אינו מאפשר שהוא יוצג במסגרת.">
-<!ENTITY noscriptFrameOptErr.link "לחץ כאן כדי לפתוח תוכן זה בחלון חדש">
-<!ENTITY noscriptBookmarkSync "גבה הגדרות של NoScript בסימניה עבור סנכרון קל">
-<!ENTITY noscriptNotifyMeta "הצג הודעה אודות ניתוב מחודש של META חסום">
-<!ENTITY noscriptNotifyMeta.accesskey "">
-<!ENTITY noscriptShowReleaseNotes "הצג הערות שחרור לאחר כל עדכון של NoScript">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "ערכת כללים:">
-<!ENTITY ABE.enabled.label "אפשר את ABE (אכיפת גבולות יישום)">
-<!ENTITY ABE.siteEnabled.label "אפשר לאתרים לדחוף את ערכת הכללים שלהם">
-<!ENTITY ABE.edit.label "ערוך...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "התר">
-<!ENTITY ABE.enable.accesskey "">
-<!ENTITY ABE.disable.label "מנע">
-<!ENTITY ABE.disable.accesskey "">
-<!ENTITY ABE.refresh.label "רענן">
-<!ENTITY ABE.refresh.accesskey "">
-<!ENTITY noscriptUninstall "הסר">
-<!ENTITY noscriptRecentBlocked "אתרים שנחסמו לאחרונה">
-<!ENTITY noscriptExternalFilters "מסננים">
-<!ENTITY noscriptEF.enable "אפשר מסננים חיצוניים">
-<!ENTITY noscriptEF.add "מסנן חדש...">
-<!ENTITY noscriptEF.executable "קובץ הפעלה:">
-<!ENTITY noscriptEF.browse "עיון...">
-<!ENTITY noscriptEF.contentType "סוג תוכן MIME שיסונן ע&quot;י התאמה מדויקת או ביטוי רגיל:">
-<!ENTITY noscriptEF.exceptions "אל תסנן רכיבים שבאים מאתרים אלה:">
-<!ENTITY noscriptEF.remove "הסר">
-<!ENTITY noscriptPreset "רמת אבטחה">
-<!ENTITY noscriptPreset.off "כבוי (אתה רציני?!)">
-<!ENTITY noscriptPreset.low "מעבר קל (רשימה אסורה + אבטחת רשת)">
-<!ENTITY noscriptPreset.medium "קלאסי (רשימה מותרת + אבטחת רשת)">
-<!ENTITY noscriptPreset.high "מבצר (נעילה מלאה)">
-<!ENTITY noscript.hoverUI "פתח את תפריט ההרשאות בעת הצבת מצביע העכבר מעל הסמל של NoScript">
-<!ENTITY noscriptDonate "תרום">
-<!ENTITY noscriptDonate.accesskey "">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/he-IL/noscript/noscript.properties b/extensions/noscript/chrome/locale/he-IL/noscript/noscript.properties
deleted file mode 100644
index a19a530..0000000
--- a/extensions/noscript/chrome/locale/he-IL/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=התר קבצי Script מכל אתר (לא מומלץ)
-forbidGlobal=מנע קבצי Script מכל אתר (מומלץ)
-allowLocal=התר את %S
-allowTemp=זמנית התר את %S
-forbidLocal=מנע את %S
-allowed.glb=אזהרה! קבצי Script מותרים בכל אתר
-allowed.yes=קבצי Script מותרים כעת
-allowed.prt=קבצי Script מסוימים מותרים
-allowed.no=קבצי Script אסורים כעת
-global.warning.title=אזהרה!
-global.warning.text=מעתה יותרו קבצי Script מכל אתר.\nייתכן שיש בכך סיכון.\nהאם ברצונך לעשות זאת?
-audio.samples=דגימות שמע
-confirm=האם לבצע?
-alwaysAsk=בקש תמיד אישור
-notifyHide=הסתר אחרי %S שניות
-trust=סמוך על %S
-distrust=אל תסמוך על %S
-untrustedOrigin=מקור לא אמין
-xss.notify.generic=NoScript סינן נסיון להרצת קבצי Script של צד שלישי (XSS) מהאתר %S. פרטים שימושיים יופיעו במסוף.
-xss.notify.showConsole=הצג מסוף...
-xss.notify.showConsole.accessKey=מ
-xss.reason.filterXGet=בקשה חשודה סוננה. ה-URL המקורי: [%1$S] שהופעל מתוך [%2$S]. ה-URL המסונן: [%3$S].
-xss.reason.filterXGetRef=מקור הפניה חשוד לבקשה סונן. ה-URL [%1$S] שהופעל מתוך [%2$S]. מקור ההפניה לאחר סינון: [%3$S].
-xss.reason.filterXPost=ההעלאה החשודה אל [%1$S] מאת [%2$S] סוננה: היא אולצה להפוך לבקשת GET בלי העלאת נתונים
-unsafeReload.warning=טוען מחדש באופן *בלתי בטוח*nn%1$S[%2$S]\n\nמהאתר [%3$S]\n\nנוסקריפט *לא* יגן על הבקשה הזו!\n
-metaRefresh.notify=NoScript חסם הפניית META בתוך תגית NOSCRIPT: %S בזמן של %S שניות.
-metaRefresh.notify.follow=בצע הפניות
-metaRefresh.notify.follow.accessKey=ע
-notify.options=אפשרויות
-notify.options.accessKey=א
-reset.title=איפוס NoScript להגדרות ברירת מחדל
-reset.warning=הגדרות NoScript ורשימת הרשאות יאופסו למצב ברירת המחדל.\nלא ליתן לבטל פעולה זו ולחזור למצב הקודם.\nהאם ברצונך להמשיך?
-bookmarkSync.title=NoScript תצורת הסימניה של
-bookmarkSync.message=סימניה זו אינה אמורה להיפתח, אלא נועדה להיות מסונכרת באמצעות שירות, כגון: Weave או ע"י הרחבת Xmarks.
-bookmarkSync.confirm=NoScript מצא סימנית תצורה שלכאורה שמורה ב \n%S.\n האם ברצונך להחליף את תצורת ה- NoScript המקומי שלך עם תוכן סימניה זו?
-ABE.notify=בקשת% 1 $ S מסוננים ע"י ABE: <% 2 $ S>% 3 $ S
-ABE.chooseEditor=אנא בחר עורך טקסט עבור ערכת כללים של ABE
-ABE.syntaxError=שגיאת תחביר בערכת כללים של ABE
-ABE.wanIpAsLocal=(WAN IP (%S ∈ מקומי
-allowFrom=התר הכל מ־ %S
-allowTempFrom=זמנית התר הכל מ־ %S
-siteInfo.confirm=הינך עומד לבקש מידע אודות ' %1$ S ' באתר ע"י שליחת שאילתה %2$S האם ברצונך להמשיך?
-siteInfo.tooltip=לחיצה אמצעית או על shift + לחיצה לצורך מידע באתר...
-ef.activate=סנן %S
-ef.options=%S אפשרויות...
-ef.newName=הזן את שם המסנן החדש:
-ef.locateExe=בחר את קובץ ההפעלה עבור מסנן ה-S%
-disable=בטל %S
-disable.accessKey=ב
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/hr-HR/noscript/about.properties b/extensions/noscript/chrome/locale/hr-HR/noscript/about.properties
deleted file mode 100644
index 8de6ff0..0000000
--- a/extensions/noscript/chrome/locale/hr-HR/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Dodatna zaštita za Vaš Firefox: NoScript dopušta JavaScript, Java (i druge dodatke) samo za provjerene domene Vašeg izbora (npr. Vaša stranica Intenet bankarstva) . Ovaj pristup preventivnog blokiranja zasnovan na popisu dopuštenih spriječava iskorištavanje sigurnosnih slabosti (znanih i neznanih) bez ikakvog gubitka funkcionalnosti... Stručnjaci će se složiti: Firefox je zbilja sigurniji s NoScript :-)
-aboutTitle=O %S
-extensionContributors=Oni koji su doprinjeli:
-extensionContributors.tip=Ljudi kojima trebate zahvaliti na ovom proširenju
-extensionCreatorLabel=Autor:
-changelog=Popis promjena
-changelog.tip=Prikaži popis promjena
-license=Licenca
-license.tip=Pročitajte licencu za krajnjeg korisnika
-logo.tip=Posjetite početnu stranicu proširenja
-sponsor.tip=Posjetite pokroviteljevu početnu stranicu
-informaction.tip=Posjetite početnu stranicu InformAction-a
-extensionHomepage.tip=Posjetite početnu stranicu proširenja
-extensionCreator.tip=Posjetite autorovu početnu stranicu
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.dtd b/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.dtd
deleted file mode 100644
index 00d9813..0000000
--- a/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opcije...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Opcije">
-<!ENTITY noscriptAbout "O NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Možete odrediti koje web stranice imaju dopuštenje za izvođenje skripti. Upišite adresu ili domenu (npr. &quot;http://www.stranica.hr&quot; ili &quot;stranica.hr&quot;) stranice kojoj želite dopustiti i kliknite na Dopusti.">
-<!ENTITY noscriptWebAddress "Adresa web stranice:">
-<!ENTITY noscriptAllow "Dopusti">
-<!ENTITY noscriptAllow.accesskey "D">
-<!ENTITY noscriptForbid "Zabrani">
-<!ENTITY noscriptForbid.accesskey "b">
-<!ENTITY noscriptTrust "Označi kao provjereno">
-<!ENTITY noscriptTrust.accesskey "v">
-<!ENTITY noscriptUntrust "Označi kao neprovjereno">
-<!ENTITY noscriptUntrust.accesskey "e">
-<!ENTITY noscriptRemoveSelected "Ukloni označene stranice">
-<!ENTITY noscriptGloballyEnabled "Skripte su općenito dopuštene (opasno)">
-<!ENTITY noscriptAutoReload "Automatski ponovno učitaj obuhvaćene stranice nakon promjene dopuštenja">
-<!ENTITY noscriptGeneral "Općenito">
-<!ENTITY noscriptAppearance "Izgled">
-<!ENTITY noscriptShow "Prikaži...">
-<!ENTITY noscriptCtxMenu "Kontekstni izbornik">
-<!ENTITY noscriptStatusIcon "Ikonu u statusnoj traci">
-<!ENTITY noscriptFullAddr "Puna adresa (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Puna domena (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Osnovne domene drugog nivoa (noscript.net)">
-<!ENTITY noscriptTempCmd "Privremeno dopusti [...]">
-<!ENTITY noscriptSound "Zvučni signal kada su skripte blokirane">
-<!ENTITY noscriptImport "Uvezi">
-<!ENTITY noscriptImport.accesskey "U">
-<!ENTITY noscriptExport "Izvezi">
-<!ENTITY noscriptExport.accesskey "I">
-<!ENTITY noscriptNotify "Prikaži poruku o blokiranim skriptama">
-<!ENTITY noscriptNotify.bottom "Prikaži poruku pri dnu">
-<!ENTITY noscriptSound.choose "Izaberi">
-<!ENTITY noscriptSound.choose.accesskey "z">
-<!ENTITY noscriptSound.play "Pusti">
-<!ENTITY noscriptSound.play.accesskey "P">
-<!ENTITY noscriptSound.reset "Vrati zadano">
-<!ENTITY noscriptSound.reset.accesskey "r">
-<!ENTITY noscriptAdvanced "Napredno">
-<!ENTITY noscriptAdditionalPermissions "Dodatna dopuštenja za provjerene stranice">
-<!ENTITY noscriptAllowClipboard "Dopusti kopiranje i lijepljenje obogaćenog teksta iz vanjskog međuspremnika">
-<!ENTITY noscriptAdditionalRestrictions "Dodatna ograničenja za neprovjerene stranice">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Zabrani Java™">
-<!ENTITY noscriptForbidXSLT "Zabrani XSLT">
-<!ENTITY noscriptForbidSilverlight "Zabrani Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Zabrani &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Zabrani &lt;FRAMES&gt;">
-<!ENTITY noscriptForbidFonts "Zabraniti @font-face">
-<!ENTITY noscriptForbidWebGL "Zabraniti WebGL">
-<!ENTITY noscriptForbidMedia "Zabraniti &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Zabrani Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Zabrani druge dodatke">
-<!ENTITY noscriptReloadWarn "Ove postavke će imati učinka na novim ili (ručno) ponovno učitanim stranicama">
-<!ENTITY noscriptConfirmUnblock "Pitaj za potvrdu prije privremenog deblokiranja objekta">
-<!ENTITY noscriptStatusLabel "Naziv u statusnoj traci">
-<!ENTITY noscriptForbidBookmarklets "Zabrani bookmarklete">
-<!ENTITY noscriptShowPlaceholder "Prikaži ikonu za držanje položaja">
-<!ENTITY noscriptTruncateTitle "Odsijeci naslove dokumenta">
-<!ENTITY noscriptFixLinks "Pokušaj popraviti poveznice JavaScripta">
-<!ENTITY noscriptAllowBookmarks "Dopusti stranice koje su otvorene putem zabilješki">
-<!ENTITY noscriptAllowViaBookmarks "Dopusti stranice koje su otvorene putem zabilješki">
-<!ENTITY noscriptAllowPing "Dopusti &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Dopusti lokalne poveznice">
-<!ENTITY noscriptForbidPing "Zabrani &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Pokazati poruku u vezi s blokiranim META-redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Popis dopuštenih">
-<!ENTITY noscriptPermissions "Dopuštenja">
-<!ENTITY noscriptRefresh "Osvježi">
-<!ENTITY noscriptNotifications "Obavijesti">
-<!ENTITY noscriptToolbarToggle "Lijevom klikom na NoScript gumb alatne trake mijenjate dopuštenja za trenutnu vršnu stranicu">
-<!ENTITY noscriptTrusted "Pouzdane">
-<!ENTITY noscriptUntrusted "Nepouzdane">
-<!ENTITY noscriptUnknown "Nepoznato">
-<!ENTITY noscriptAdd "Dodaj">
-<!ENTITY noscriptAdd.accesskey "D">
-<!ENTITY noscriptClose "Zatvori">
-<!ENTITY noscriptSiteManager "Upravitelj stranicom">
-<!ENTITY noscriptSecurityManager "Upravitelj sigurnosti">
-<!ENTITY noscriptPolicies "Police">
-<!ENTITY noscriptDefaultPolicies "Zadane police">
-<!ENTITY noscriptSitePolicies "Specifične police stranice">
-<!ENTITY noscriptNselNever "Sakrij &lt;NOSCRIPT&gt; elemente">
-<!ENTITY noscriptNselForce "Prikaži &lt;NOSCRIPT&gt; elemente koji slijede blokirane &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Privremeno kao zadano dopusti vršne stranice">
-<!ENTITY noscriptDescription "Dodatna zaštita za Vaš Firefox: NoScript dopušta JavaScript, Java (i druge dodatke) samo za provjerene domene Vašeg izbora (npr. Vaša stranica Intenet bankarstva) . Ovaj pristup preventivnog blokiranja zasnovan na popisu dopuštenih spriječava iskorištavanje sigurnosnih slabosti (znanih i neznanih) bez ikakvog gubitka funkcionalnosti... Stručnjaci će se složiti: Firefox je zbilja sigurniji s NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "Često postavljena pitanja u vezi HTTPS-a">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Ponašanje">
-<!ENTITY noscriptHttps.cookies "Kolačiće">
-<!ENTITY noscriptHttps.description "Zabraniti aktivni web-sadržaj ukoliko ne potječe iz sigurne (HTTPS) konekcije">
-<!ENTITY noscriptHttps.never "Nikada">
-<!ENTITY noscriptHttps.proxy "Kada se koristi proxy (preporučeno sa Tor-om)">
-<!ENTITY noscriptHttps.always "Uvijek">
-<!ENTITY noscriptHttpsForced "Prisiliti sljedeće sajtove da koriste sigurnu (HTTPS) konekciju">
-<!ENTITY noscriptHttpsForcedExceptions "Nikada ne prisiliti korištenje sigurne (HTTPS) konekcije za sljedeće sajtove">
-<!ENTITY noscriptSecureCookies "Dozvoliti automatičnu upravu sigurnih kolačića">
-<!ENTITY noscriptSecureCookiesForced "Prisiliti enkripciju za sve kolačiće podešene preko HTTPS-a kod sljedećih sajta:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorirati nesigurne kolačiće podešene preko HTTPS-a kod sljedećih sajta:">
-<!ENTITY noscriptClearClickTitle "ClearClick-upozorenje">
-<!ENTITY noscriptClearClickHeader "Mogući Clickjacking/UI Redressing napad">
-<!ENTITY noscriptClearClickDescription "NoScript je primjetio interakciju miša ili tastatura sa djelomićno sakrivenim elementom. Klikni na gornju sliku kako bi promjenio između zaklonjene i jasne verzije">
-<!ENTITY noscriptClearClickOpt "ClearClick-zaštita na stranicama...">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "pouzdane">
-<!ENTITY noscriptUntrustedPagesAdj "nepouzdane">
-<!ENTITY noscriptKeepLocked "Držati zaključan ovaj elemenat (preporučeno)">
-<!ENTITY noscriptEmbeddings "Ugrađeni objekti">
-<!ENTITY noscriptPrev "Prethodni">
-<!ENTITY noscriptNext "Sljedeći">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptShowReleaseNotes "Pokazati informacije vezane za novo izdanje u slucaju azuriranja">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Skupovi pravila (rulesets):">
-<!ENTITY ABE.enabled.label "Ukljuciti ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Dozvoljiti sajtovima koristenje njihovih rulesets-a (skupovi pravila)">
-<!ENTITY ABE.edit.label "Modificirati...">
-<!ENTITY ABE.edit.accesskey "M">
-<!ENTITY ABE.enable.label "Ukljuciti">
-<!ENTITY ABE.enable.accesskey "u">
-<!ENTITY ABE.disable.label "Izkljuciti">
-<!ENTITY ABE.disable.accesskey "I">
-<!ENTITY ABE.refresh.label "Osvjeziti">
-<!ENTITY ABE.refresh.accesskey "O">
-<!ENTITY noscriptUninstall "Dezinstalirati">
-<!ENTITY noscriptRecentBlocked "Nedavno blokirane web stranice">
-<!ENTITY noscriptExternalFilters "Vanjski filteri">
-<!ENTITY noscriptEF.enable "Ukljuciti vanjski filteri">
-<!ENTITY noscriptEF.add "Novi Filter...">
-<!ENTITY noscriptEF.executable "Izvršni fajl...">
-<!ENTITY noscriptEF.browse "Pregledati...">
-<!ENTITY noscriptEF.contentType "Tocni MIME-tip sadrzaja ili regexp za filtriranje sadrzaja">
-<!ENTITY noscriptEF.exceptions "Ne filtrirati elemente iz sljedecih web stranica:">
-<!ENTITY noscriptEF.remove "Ukiniti">
-<!ENTITY noscriptPreset "Razina sigurnosti">
-<!ENTITY noscriptPreset.off "Izkljuciti (ozbiljno???)">
-<!ENTITY noscriptPreset.low "Easy going (Crna lista + web sigurnost)">
-<!ENTITY noscriptPreset.medium "Classic (Bijela lista + web sigurnost)">
-<!ENTITY noscriptPreset.high "Tvrðava (Kompletno blokiranje)">
-<!ENTITY noscript.hoverUI "Otvoriti meni dopustenja u slucaju mouseover-a nad NoScript ikonom">
-<!ENTITY noscriptDonate "Donacija">
-<!ENTITY noscriptDonate.accesskey "d">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.properties b/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.properties
deleted file mode 100644
index c746b7a..0000000
--- a/extensions/noscript/chrome/locale/hr-HR/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Općenito dopusti skripte (opasno)
-forbidGlobal=Općenito zabrani skripte (preporučljivo)
-allowLocal=Dopusti: %S
-allowTemp=Privremeno dopusti: %S
-forbidLocal=Zabrani: %S
-allowed.glb=Opasnost! Skripte su općenito dopuštene
-allowed.yes=Skripte su trenutno dopuštene
-allowed.prt=Skripte su djelomično dopuštene
-allowed.no=Skripte su trenutno zabranjene
-global.warning.title=Upozorenje!
-global.warning.text=Skripte će biti općenito dopuštene (za svaku stranicu).\n Ovo je potencijalno opasna radnja.\nŽelite li doista nastaviti?
-audio.samples=Zvučni primjeri
-confirm=Sigurni ste?
-alwaysAsk=Uvijek pitaj za potvrdu
-notifyHide=Sakrij nakon %S sek
-trust=Dodaj u pouzdane %S
-distrust=Označi %S kao nepouzdane
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript je nasao configuracijski obiljezivac na\n%S.\nHocete li stvarno prepisati preko lokalne NoScript configuracije s sadrzajem ovog obiljezivaca?
-ABE.notify=Zahtjev %1$S filtriran od ABE: <%2$S> %3$S
-ABE.chooseEditor=Molimo birajte ureðivac teksta za ABE skupine pravila (rulesets)
-ABE.syntaxError=Sintaksni error u ABE pravilama (rulesets)
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Dopustiti sve iz %S
-allowTempFrom=Privremeno sve dopustiti iz %S
-siteInfo.confirm=Hocete li stvarno raspitati se za informaciju o sajtu \"%1$S\" \n predajuci zahtjev %2$S. -u?
-siteInfo.tooltip=Srednji-klik ili shift+klik za informaciju o web stranici...
-ef.activate=Filtrirati %S
-ef.options=%S opcije...
-ef.newName=Upisati ime novog filtera:
-ef.locateExe=Birati izvršni fajl za filtar %S
-disable=Izkljuciti %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/hsb/noscript/about.properties b/extensions/noscript/chrome/locale/hsb/noscript/about.properties
deleted file mode 100644
index b5c321b..0000000
--- a/extensions/noscript/chrome/locale/hsb/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Wosebity škit za waš Firefox: NoScript dowola JavaScript, Java (a druhe tykače) jenož za dowěrliwe domeny wašeje wólby (na př. waše websydło za domjacne bankowanje). Tuta běła lisćina, kotraž na prewentiwnym přistupje k blokowanje bazěruje, zadźěwa znjewužiwanju wěstotnych dźěrow (znatych a samo njeznatych!) bjez zhubjenja funkcionalnosće… Eksperća přizwola: Firefox je woprawdźe wěsćiši z NoScript :-)
-aboutTitle=Wo %S
-extensionContributors=Sobuskutkowacy:
-extensionContributors.tip=Ludźo, kotrymž wy měł so za tute rozšěrjenje dźakować
-extensionCreatorLabel=Awtor:
-changelog=Protokol změnow
-changelog.tip=Protokol změnow pokazać
-license=Licenca
-license.tip=Licencu za kónčnych wužiwarjow čitać
-logo.tip=Startowu stronu rozšěrjenja wopytać
-sponsor.tip=Startowu stronu sponsora wopytać
-informaction.tip=Startowu stronu InformAction wopytać
-extensionHomepage.tip=Startowu stronu rozšěrjenja wopytać
-extensionCreator.tip=Startowu stronu awtora wopytać
-version=Wersija %S
diff --git a/extensions/noscript/chrome/locale/hsb/noscript/noscript.dtd b/extensions/noscript/chrome/locale/hsb/noscript/noscript.dtd
deleted file mode 100644
index fa97035..0000000
--- a/extensions/noscript/chrome/locale/hsb/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opcije…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opcije NoScript">
-<!ENTITY noscriptAbout "Wo NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Móžeće podać, kotre websydła smědźa skripty wuwjesć. Zapisajće adresu abo domenu (na př. &quot;http://www.site.com&quot; abo &quot;site.com&quot;) websydła, kotremuž chceće to dowolić a klikńće potom na &quot;Dowolić&quot;.">
-<!ENTITY noscriptWebAddress "Adresa websydła:">
-<!ENTITY noscriptAllow "Dowolić">
-<!ENTITY noscriptAllow.accesskey "w">
-<!ENTITY noscriptForbid "Zakazać">
-<!ENTITY noscriptForbid.accesskey "Z">
-<!ENTITY noscriptTrust "Jako dowěry hódny markěrować">
-<!ENTITY noscriptTrust.accesskey "J">
-<!ENTITY noscriptUntrust "Jako dowěry njehódny markěrować">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Wubrane sydła wotstronić">
-<!ENTITY noscriptGloballyEnabled "Skripty globalnje dowolene (riskantny)">
-<!ENTITY noscriptAutoReload "Potrjechene strony awtomatisce znowa začitać, hdyž so prawa měnjeja">
-<!ENTITY noscriptGeneral "Powšitkowny">
-<!ENTITY noscriptAppearance "Napohlad">
-<!ENTITY noscriptShow "Pokazać…">
-<!ENTITY noscriptCtxMenu "Kontekstowy meni">
-<!ENTITY noscriptStatusIcon "Wobrazk w statusowej lajsće">
-<!ENTITY noscriptFullAddr "Dospołne adresy (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Dospołne domeny (http://www.noscript.net)">
-<!ENTITY noscriptBaseDom "Domeny druheje runiny (noscript.net)">
-<!ENTITY noscriptTempCmd "[…] nachwilu dowolić">
-<!ENTITY noscriptSound "Zynk wothrać, hdyž so skripty blokuja">
-<!ENTITY noscriptImport "Importować">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksportować">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Zdźělenku wo zablokowanych skriptach pokazać">
-<!ENTITY noscriptNotify.bottom "Zdźělenku deleka zaměstnić">
-<!ENTITY noscriptSound.choose "Wubrać">
-<!ENTITY noscriptSound.choose.accesskey "W">
-<!ENTITY noscriptSound.play "Wothrać">
-<!ENTITY noscriptSound.play.accesskey "h">
-<!ENTITY noscriptSound.reset "Standard wobnowić">
-<!ENTITY noscriptSound.reset.accesskey "S">
-<!ENTITY noscriptAdvanced "Rozšěrjene">
-<!ENTITY noscriptAdditionalPermissions "Přidatne prawa za dowěry hódne sydła">
-<!ENTITY noscriptAllowClipboard "Zasunjenje RTF z eksterneho mjezyskłada dowolić">
-<!ENTITY noscriptAdditionalRestrictions "Přidatne wobmjezowanja za dowěry njehódne sydła">
-<!ENTITY noscriptPlugins "Tykače">
-<!ENTITY noscriptContentBlocker "Tute wobmjezowanja tež na sydła w běłej lisćinje nałožić">
-<!ENTITY noscriptForbidJava "Java™ zakazać">
-<!ENTITY noscriptForbidXSLT "XSLT zakazać">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™ zakazać">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; zakazać">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt; zakazać">
-<!ENTITY noscriptForbidFonts "@font-face zakazać">
-<!ENTITY noscriptForbidWebGL "WebGL zakazać">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt;/&lt;VIDEO&gt; zakazać">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® zakazać">
-<!ENTITY noscriptForbidPlugins "Druhe tykače zakazać">
-<!ENTITY noscriptReloadWarn "Tute opcije budu so hakle pola nowych abo znowa začitanych stronow wuskutkować">
-<!ENTITY noscriptConfirmUnblock "Wo wobkrućenje prosyć, prjedy hač so objekt nachwilu dowoli">
-<!ENTITY noscriptStatusLabel "Popis w statusowej lajsće">
-<!ENTITY noscriptForbidBookmarklets "Bookmarklety zakazać">
-<!ENTITY noscriptShowPlaceholder "Zastupniski wobrazk pokazać">
-<!ENTITY noscriptTruncateTitle "Titule dokumentow wobrězać">
-<!ENTITY noscriptFixLinks "Z JavaScriptom wutworjene wotkazy porjedźić spytać">
-<!ENTITY noscriptAllowBookmarks "Sydła wočinjene přez zapołožki dowolić">
-<!ENTITY noscriptAllowViaBookmarks "Sydła wočinjene přez zapołožki dowolić">
-<!ENTITY noscriptAllowPing "&lt;A PING...&gt; dowolić">
-<!ENTITY noscriptAllowLocalLinks "Lokalne wotkazy dowolić">
-<!ENTITY noscriptForbidPing "&lt;A PING...&gt; zakazać">
-<!ENTITY noscriptForbidMetaRefresh "Dalesposrědkowanja META znutřka elementach &lt;NOSCRIPT&gt; zakazać">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "T">
-<!ENTITY noscriptNotifyMeta "Zdźělenku wo zablokowanych META-dalesposrědkowanjach pokazać">
-<!ENTITY noscriptNotifyMeta.accesskey "T">
-<!ENTITY noscriptWhitelist "Běła lisćina">
-<!ENTITY noscriptPermissions "Prawa">
-<!ENTITY noscriptRefresh "Aktualizować">
-<!ENTITY noscriptNotifications "Zdźělenki">
-<!ENTITY noscriptToolbarToggle "Kliknjenje z lěwej tastu na tłóčatko NoScript w gratowej lajsće přepina prawa za aktualne sydło najwyšeje runiny">
-<!ENTITY noscriptTrusted "Dowěry hódne">
-<!ENTITY noscriptUntrusted "Dowěry njehódne">
-<!ENTITY noscriptUnknown "Njeznaty">
-<!ENTITY noscriptAdd "Přidać">
-<!ENTITY noscriptAdd.accesskey "P">
-<!ENTITY noscriptClose "Začinić">
-<!ENTITY noscriptSiteManager "Zrjadowak sydłow">
-<!ENTITY noscriptSecurityManager "Wěstotny zrjadowak">
-<!ENTITY noscriptPolicies "Prawidła">
-<!ENTITY noscriptDefaultPolicies "Standardne prawidła">
-<!ENTITY noscriptSitePolicies "Prawidła za specifiske sydła">
-<!ENTITY noscriptNselNever "Elementy &lt;NOSCRIPT&gt; schować">
-<!ENTITY noscriptNselForce "Element &lt;NOSCRIPT&gt; pokazać, kotryž zablokowanemu &lt;SCRIPT&gt; slěduje">
-<!ENTITY noscriptAutoAllowTopLevel "Po standardźe sydła najwyšeje runiny nachwilu dowolić">
-<!ENTITY noscriptDescription "Wosebity škit za waš Firefox: NoScript dowola JavaScript, Java (a druhe tykače) jenož za dowěry hódne domeny wašeje wólby (na př. waše websydło za domjacne bankowanje). Tuta běła lisćina, kotraž na prewentiwnym přistupje k blokowanju bazěruje, zadźěwa znjewužiwanju wěstotnych dźěrow (znatych a samo njeznatych!) bjez zhubjenja funkcionalnosće… Eksperća přizwola: Firefox je woprawdźe wěsćiši z NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Skanery na zakładźe CSS blokować">
-<!ENTITY noscriptOptFilterXGet "Podhladne XSS-požadanja porjedźić">
-<!ENTITY noscriptOptFilterXPost "XSS-požadanja POST do požadanjow GET wobsahowacych mjenje datow přetworić">
-<!ENTITY noscriptShowConsole "Konsolu pokazać…">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Huste prašenja XSS…">
-<!ENTITY noscriptXssFaq.accesskey "H">
-<!ENTITY noscriptUnsafeReload "Njewěste znowazačitanje">
-<!ENTITY noscriptUnsafeReload.accesskey "N">
-<!ENTITY noscriptXssExceptions "Wuwzaća škita přećiwo XSS">
-<!ENTITY noscriptXssExceptions.description "Cile, kotrež tutym regularnym wurazam wotpowěduja, NJEbudu so přećiwo XSS škitać.">
-<!ENTITY noscriptMatchSample "Přikład za wotpowědnik mustra:">
-<!ENTITY noscriptReset "Wróćo stajić">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Na standard wróćo stajić">
-<!ENTITY noscriptResetDef.accesskey "t">
-<!ENTITY noscriptOptionsWidth "60em">
-<!ENTITY noscriptRevokeTemp "Nachwilne prawa wotwołać">
-<!ENTITY noscriptRevokeTemp.accesskey "N">
-<!ENTITY noscriptNoUntrustedPlaceholder "Žadyn zastupniski wobrazk za objekty, kotrež ze sydłow pochadźeja, kotrež su jako dowěry njehódne markěrowane">
-<!ENTITY noscriptCollapseBlockedObjects "Zablokowane objekty fałdować">
-<!ENTITY noscriptExceptions "Wuwzaća…">
-<!ENTITY noscriptBlockedObjects "Zablokowane objekty">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Kóždy objekt blokować, kotryž ze sydła pochadźa, kotrež je jako dowěry njehódne markěrowane">
-<!ENTITY noscriptTempAllowPage "Tutu cyłu stronu nachwilu dowolić">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Wšitko na tutej stronje dowolić">
-<!ENTITY noscriptAllowPage.accesskey "W">
-<!ENTITY noscriptTempToPerm "Prawa strony na přeco připokazać">
-<!ENTITY noscriptTempToPerm.accesskey "P">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS huste prašenja…">
-<!ENTITY noscriptHttpsFaq.accesskey "H">
-<!ENTITY noscriptHttps.behavior "Zadźerženje">
-<!ENTITY noscriptHttps.cookies "Placki">
-<!ENTITY noscriptHttps.description "Aktiwny webwobsah zakazać, chibazo pochadźa z wěsteho zwiska (HTTPS):">
-<!ENTITY noscriptHttps.never "Ženje">
-<!ENTITY noscriptHttps.proxy "Při wužiwanju proksy (z Torom doporučeny)">
-<!ENTITY noscriptHttps.always "Přeco">
-<!ENTITY noscriptHttpsForced "Slědowace sydła nućić wěste zwiski (HTTPS) wužiwać:">
-<!ENTITY noscriptHttpsForcedExceptions "Slědowace sydła ženje njenućić wěste zwiski (HTTPS) wužiwać:">
-<!ENTITY noscriptSecureCookies "Awtomatiske wěste zarjadowanje plackow zmóžnić">
-<!ENTITY noscriptSecureCookiesForced "Zaklučowanje za wšě placki wunućić, kotrež su so přez HTTPS za slědowace sydła nastajili:">
-<!ENTITY noscriptSecureCookiesExceptions "Njewěste placki, kotrež buchu přez HTTPS za slědowace sydła nastajene, ignorować:">
-<!ENTITY noscriptClearClickTitle "Warnowanje přez ClearClick">
-<!ENTITY noscriptClearClickHeader "Potencielny pospyt Clickjacking / přeadresowanja!">
-<!ENTITY noscriptClearClickDescription "NoScript je interakciju myše abo tastatury z dźělnje schowanym elementom wotpopadnył. Klikńće na slědowacy wobraz, zo by mjez zablokowanej a widźomnej wersiju přeměnił.">
-<!ENTITY noscriptClearClickOpt "Škit přez ClearClick na stronach…">
-<!ENTITY noscriptClearClickReport "Rozprawa">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID rozprawy:">
-<!ENTITY noscriptTrustedPagesAdj "dowěry hódny">
-<!ENTITY noscriptUntrustedPagesAdj "dowěry njehódny">
-<!ENTITY noscriptKeepLocked "Tutón element zawrjeny wostajić (doporučeny)">
-<!ENTITY noscriptEmbeddings "Zasadźenja">
-<!ENTITY noscriptPrev "Předchadny">
-<!ENTITY noscriptNext "Přichodny">
-<!ENTITY noscriptFrameOptErr.title "Tutón wobsah njeda so we wobłuku zwobraznić">
-<!ENTITY noscriptFrameOptErr.desc "Zo by swoju wěstotu zarućił, wudawaćel tutoho wobsaha njedowoluje, zo by so tutón wobsah we wobłuku zwobraznił.">
-<!ENTITY noscriptFrameOptErr.link "Klikńće tu, zo byšće tutón wobsah w nowym woknje wočinił">
-<!ENTITY noscriptBookmarkSync "Konfiguraciju NoScript w zapołožce za lochku synchronizaciju zawěsćić">
-<!ENTITY noscriptShowReleaseNotes "Wersije informacije při aktualizacijach zwobraznić">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Sadźby prawidłow:">
-<!ENTITY ABE.enabled.label "ABE (Application Boundaries Enforcer) zmóžnić">
-<!ENTITY ABE.siteEnabled.label "Sydłam dowolić, zo bychu swójske sadźby prawidłow wužiwali">
-<!ENTITY ABE.edit.label "Wobdźěłać…">
-<!ENTITY ABE.edit.accesskey "W">
-<!ENTITY ABE.enable.label "Zmóžnić">
-<!ENTITY ABE.enable.accesskey "m">
-<!ENTITY ABE.disable.label "Znjemóžnić">
-<!ENTITY ABE.disable.accesskey "Z">
-<!ENTITY ABE.refresh.label "Aktualizować">
-<!ENTITY ABE.refresh.accesskey "A">
-<!ENTITY noscriptUninstall "Wotinstalować">
-<!ENTITY noscriptRecentBlocked "Njedawno zablokowane sydła">
-<!ENTITY noscriptExternalFilters "Eksterne filtry">
-<!ENTITY noscriptEF.enable "Eksterne filtry zmóžnić">
-<!ENTITY noscriptEF.add "Nowy filter…">
-<!ENTITY noscriptEF.executable "Wuwjedujomna dataja:">
-<!ENTITY noscriptEF.browse "Přepytać…">
-<!ENTITY noscriptEF.contentType "Wobsahowy typ (MIME), kotryž ma so wufiltrować (eksaktne zapřijeće abo regularny wuraz):">
-<!ENTITY noscriptEF.exceptions "Objekty njefiltrować, kotrež ze slědowacych sydłow pochadźeja:">
-<!ENTITY noscriptEF.remove "Wotstronić">
-<!ENTITY noscriptPreset "Wěstotny schodźenk">
-<!ENTITY noscriptPreset.off "Wupinjeny (sy ty seriozny?!)">
-<!ENTITY noscriptPreset.low "Słaba wěstota (Čorna lisćina + webwěstota)">
-<!ENTITY noscriptPreset.medium "Klasiska wěstota (Běła lisćina + webwěstota)">
-<!ENTITY noscriptPreset.high "Twjerdźizna (dospołnje zawrjeny)">
-<!ENTITY noscript.hoverUI "Meni prawow wočinić, hdyž pokazowak myše je nad NoScriptowym wobrazom">
-<!ENTITY noscriptDonate "Darić">
-<!ENTITY noscriptDonate.accesskey "a">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/hsb/noscript/noscript.properties b/extensions/noscript/chrome/locale/hsb/noscript/noscript.properties
deleted file mode 100644
index 41acd53..0000000
--- a/extensions/noscript/chrome/locale/hsb/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Skripty globalnje dowolić (riskantny)
-forbidGlobal=Skripty globalnje zakazać (doporučeny)
-allowLocal=%S dowolić
-allowTemp=%S nachwilu dowolić
-forbidLocal=%S zakazać
-allowed.glb=Strach! Skripty su globalnje dowolene
-allowed.yes=Skripty tuchwilu dowolene
-allowed.prt=Skripty zdźěla dowolene
-allowed.no=Skripty tuchwilu zakazane
-global.warning.title=Warnowanje!
-global.warning.text=Skripty budu so (za kóžde sydło) generelnje dowoleć.\n To je potencielnje strašna akcija.\nChceće woprawdźe pokročować?
-audio.samples=Awdiopřikłady
-confirm=Sy sej wěsty?
-alwaysAsk=Přeco wo wobkrućenje prosyć
-notifyHide=Po %S sekundach schować
-trust=%S dowěrić
-distrust=%S jako dowěry njehódny markěrować
-untrustedOrigin=dowěry njehódny pochad
-xss.notify.generic=NoScript je potencielny pospyt křižoweho skriptowanja (XSS) z %S wufiltrował. Techniske podrobnosće su so w konsoli protokowali.
-xss.notify.showConsole=Konsolu pokazać…
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Podhladne požadanje je so porjedźiło. Originalny URL [%1$S] z [%2$S] požadany. Porjedźeny URL: [%3$S].
-xss.reason.filterXGetRef=Podhladny požadanski referer porjedźeny. URL [%1$S] z [%2$S] požadany. Porjedźeny referer: [%3$S].
-xss.reason.filterXPost=Podhladne nahraće do [%1$S] z [%2$S] porjedźene: přetwori so do požadanja GET wobmjezowaneho na sćehnjenje.
-unsafeReload.warning=NJEWĚSTA aktualizacija podhladneho\n\n%1$S [%2$S]\n\nZ [%3$S]\n\nNoScript NJEbudźe tute požadanje škitać!\n
-metaRefresh.notify=NoScript je dalesposrědkowanje <META> znutřka elementa <NOSCRIPT> blokował: %S za %S sekundow.
-metaRefresh.notify.follow=Dalesposrědkowanju slědować
-metaRefresh.notify.follow.accessKey=D
-notify.options=Opcije
-notify.options.accessKey=O
-reset.title=NoScript wróćo stajeny
-reset.warning=WŠĚ nastajenja NoScripta a sydłowe dowolenja budu so hnydom na swoje standardne hódnoty wróćo stajeć.\nTuta akcija njeda so cofnyć.\nChceće pokročować?
-bookmarkSync.title=Konfiguraciska zapołožka NoScript
-bookmarkSync.message=Tuta zapołožka NJEJE za to mysleny so wočinić, ale so z pomocu słužby kaž Weave abo rozšěrjenja XMarks synchronizować.
-bookmarkSync.confirm=NoScript je konfiguracisku zapołožku namakał, kotraž je najskerje na\n%S składowana.\nChceće woprawdźe swoju lokalnu konfiguraciju NoScript z wobsahom tuteje zapołožki přepisać?
-ABE.notify=Naprašowanje %1$S filtrowane přez ABE: <%2$S> %3$S
-ABE.chooseEditor=Prošu wubjerće teksotwy editor za sadźby prawidłow ABE
-ABE.syntaxError=Syntaksowy zmylk w sadźbje prawidłow ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOKALNY
-allowFrom=Wšě z %S dowolić
-allowTempFrom=Wšě z %S nachwilu dowolić
-siteInfo.confirm=Chceće runje wo informacije wo sydle \"%1$S\" prosyć\nsćelo naprašowanje do %2$S.\nChceće pokročować?
-siteInfo.tooltip=Srjedźne kliknjenje abo Umsch+kliknjenje za informacije wo sydle…
-ef.activate=Filter %S
-ef.options=opcije %S…
-ef.newName=Zapodajće mjeno noweho filtra:
-ef.locateExe=Wuwjedujomnu dataju za filter %S wubrać
-disable=%S znjemóžnić
-disable.accessKey=z
-removal.title=Warnowanje znižowanja wěstoty
-removal.message=Hdyž NoScript znjemóžnjeće abo wotinstalujeće, wzdaće WŠEHO škita, kotryž NoScript k dispoziciji steji.\n\nJeli maće jenož syte, ze skriptowymi dowolnosćemi sydło po sydle wobchadźeće, je wěsćiša móžnosć.\n\nNoScript móže blokowanje skriptow skónčić, nimo tych, kotrež woznamjenjeće jako dowěry njehódne, mjeztym zo hišće z najbóle rozšěrjenymi wěstotnymi přećiwnymi naprawami přećiwo XSS, Clickjacking, CSRF a drugim webwohroženjam.\n\nChceće woprawdźe WŠÓN škit přez NoScript wotstronić?\n
-removal.no=Ně, jenož blokowanje skriptow skónčić
-removal.yes=Haj, WŠÓN škit wotstronić
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/hu-HU/noscript/about.properties b/extensions/noscript/chrome/locale/hu-HU/noscript/about.properties
deleted file mode 100644
index 8663225..0000000
--- a/extensions/noscript/chrome/locale/hu-HU/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra védelem a Firefoxhoz…
-aboutTitle=A %S névjegye
-extensionContributors=Közreműködtek:
-extensionContributors.tip=Azok a személyek, akiknek köszönhető ez a kiterjesztés
-extensionCreatorLabel=Szerző:
-changelog=Fejlesztési napló
-changelog.tip=Tekintse meg a fejlesztési naplót
-license=Licenc
-license.tip=Olvassa el a végfelhasználói licencszerződést
-logo.tip=Keresse fel a kiterjesztés honlapját
-sponsor.tip=Keresse fel a szponzor honlapját
-informaction.tip=Keresse fel az InformAction honlapját
-extensionHomepage.tip=Keresse fel a kiterjesztés honlapját
-extensionCreator.tip=Keresse fel a szerző honlapját
-version=Változat %S
diff --git a/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.dtd b/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.dtd
deleted file mode 100644
index 7dedf55..0000000
--- a/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Beállítások…">
-<!ENTITY noscriptOptions.accesskey "B">
-<!ENTITY noscriptOptionsLong "A NoScript beállításai">
-<!ENTITY noscriptAbout "A NoScript 5.1.8.5 névjegye">
-<!ENTITY noscriptPermissionsText "Megadhatja, hogy mely webhelyek számára engedélyezi a parancsfájlok futtatását. Írja be az engedélyezni kívánt webhely címét vagy tartomány nevét (pl. &quot;http://www.webhely.hu&quot; vagy &quot;webhely.hu&quot;), majd kattintson az Engedélyezés gombra.">
-<!ENTITY noscriptWebAddress "A webhely címe:">
-<!ENTITY noscriptAllow "Engedélyezés">
-<!ENTITY noscriptAllow.accesskey "N">
-<!ENTITY noscriptForbid "Letiltás">
-<!ENTITY noscriptForbid.accesskey "L">
-<!ENTITY noscriptTrust "Megjelölés megbízhatóként">
-<!ENTITY noscriptTrust.accesskey "b">
-<!ENTITY noscriptUntrust "Megjelölés megbízhatatlanként">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "A kiválasztott webhelyek eltávolítása">
-<!ENTITY noscriptGloballyEnabled "A parancsfájlok általános futtatása engedélyezett (veszélyes)">
-<!ENTITY noscriptAutoReload "Az érintett oldalak automatikus újratöltése az engedélyek megváltoztatásakor">
-<!ENTITY noscriptGeneral "Általános">
-<!ENTITY noscriptAppearance "Megjelenés">
-<!ENTITY noscriptShow "Megjelenítés…">
-<!ENTITY noscriptCtxMenu "Helyi menü">
-<!ENTITY noscriptStatusIcon "Ikon az állapotsoron">
-<!ENTITY noscriptFullAddr "Teljes címek (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Teljes tartományok (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Alap 2. szintű tartományok (noscript.net)">
-<!ENTITY noscriptTempCmd "Ideiglenes engedélyezés […]">
-<!ENTITY noscriptSound "Hangjelzés a parancsfájlok blokkolásakor">
-<!ENTITY noscriptImport "Importálás">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportálás">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Üzenet megjelenítése a blokkolt parancsfájlokról">
-<!ENTITY noscriptNotify.bottom "Az üzenet alulra helyezése">
-<!ENTITY noscriptSound.choose "Választás">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Lejátszás">
-<!ENTITY noscriptSound.play.accesskey "L">
-<!ENTITY noscriptSound.reset "Alaphelyzet">
-<!ENTITY noscriptSound.reset.accesskey "H">
-<!ENTITY noscriptAdvanced "Speciális">
-<!ENTITY noscriptAdditionalPermissions "A megbízható webhelyek további engedélyei">
-<!ENTITY noscriptAllowClipboard "A rich text másolás és a külső vágólapról történő beillesztés engedélyezése">
-<!ENTITY noscriptAdditionalRestrictions "A megbízhatatlan webhelyek további korlátozásai">
-<!ENTITY noscriptPlugins "Beépülők">
-<!ENTITY noscriptContentBlocker "A korlátozások alkalmazása a megbízható webhelyekre is">
-<!ENTITY noscriptForbidJava "A Java™ tiltása">
-<!ENTITY noscriptForbidXSLT "A XSLT tiltása">
-<!ENTITY noscriptForbidSilverlight "A Microsoft® Silverlight™ tiltása">
-<!ENTITY noscriptForbidIFrames "Az &lt;IFRAME&gt; tiltása">
-<!ENTITY noscriptForbidFrames "A &lt;FRAME&gt; tiltása">
-<!ENTITY noscriptForbidFonts "A @font-face letiltása">
-<!ENTITY noscriptForbidWebGL "A WebGL letiltása">
-<!ENTITY noscriptForbidMedia "Az &lt;AUDIO&gt; / &lt;VIDEO&gt; letiltása">
-<!ENTITY noscriptForbidFlash "Az Adobe® Flash® tiltása">
-<!ENTITY noscriptForbidPlugins "Egyéb beépülő modulok tiltása">
-<!ENTITY noscriptReloadWarn "Ezek a beállítások új vagy (kézzel) újratöltött oldalaknál lépnek érvénybe">
-<!ENTITY noscriptConfirmUnblock "Megerősítés kérése egy objektum ideiglenes feloldása előtt">
-<!ENTITY noscriptStatusLabel "Az állapotsor címkéje">
-<!ENTITY noscriptForbidBookmarklets "A bookmarkletek (könyvjelzők) letiltása">
-<!ENTITY noscriptShowPlaceholder "A helykitöltő ikon megjelenítése">
-<!ENTITY noscriptTruncateTitle "A dokumentumok címeinek lerövidítése">
-<!ENTITY noscriptFixLinks "Kísérlet a JavaScript hivatkozások javítására">
-<!ENTITY noscriptAllowBookmarks "A könyvjelzőkben található összes webhely engedélyezése">
-<!ENTITY noscriptAllowViaBookmarks "A könyvjelzőből megnyitott webhelyek engedélyezése">
-<!ENTITY noscriptAllowPing "Engedélyezés: &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Helyi linkek engedélyezése">
-<!ENTITY noscriptForbidPing "Letiltás: &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "META átirányítások letiltása a &lt;NOSCRIPT&gt; elemekben">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "l">
-<!ENTITY noscriptNotifyMeta "Üzenet megjelenítése a blokkolt META átirányításokról">
-<!ENTITY noscriptNotifyMeta.accesskey "y">
-<!ENTITY noscriptWhitelist "Fehérlista">
-<!ENTITY noscriptPermissions "Engedélyek">
-<!ENTITY noscriptRefresh "Újratöltés">
-<!ENTITY noscriptNotifications "Jelentések">
-<!ENTITY noscriptToolbarToggle "Az eszköztár ikonjának helyi menüje megváltoztathatja a jelenlegi webhely (legmagasabb szint) engedélyeit">
-<!ENTITY noscriptTrusted "Megbízható">
-<!ENTITY noscriptUntrusted "Megbízhatatlan">
-<!ENTITY noscriptUnknown "Ismeretlen">
-<!ENTITY noscriptAdd "Hozzáadás">
-<!ENTITY noscriptAdd.accesskey "H">
-<!ENTITY noscriptClose "Bezárás">
-<!ENTITY noscriptSiteManager "Webhely-kezelő">
-<!ENTITY noscriptSecurityManager "Megbízhatóság-kezelő">
-<!ENTITY noscriptPolicies "Kezelés">
-<!ENTITY noscriptDefaultPolicies "Alapértelmezett kezelés">
-<!ENTITY noscriptSitePolicies "Webhelyspecifikus kezelés">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt; elemek elrejtése">
-<!ENTITY noscriptNselForce "&lt;NOSCRIPT&gt; elem megjelenítése, amely a blokkolt &lt;SCRIPT&gt; után következik">
-<!ENTITY noscriptAutoAllowTopLevel "Legmagasabb szintű webhelyek ideiglenes engedélyezése">
-<!ENTITY noscriptDescription "Firefox extra védelme: NoScript engedélyezheti a JavaScript, Java (és más beépülőket) az Ön által megadott webhelyekre (pl. átutalások interneten keresztül). Ez a megbízható szervereket tartalmazó lista megelőző blokkoláson alapszik, így óv a támadásoktól a biztonsági réseken keresztül (ismert és ismeretlen!), mindezt működés közben… Az expertek egyetértenek: A Firefox a NoScript kiterjesztéssel valóban biztonságosabb :-)">
-<!ENTITY noscriptOptBlockCssScanners "CSS-alapú szkennerek blokkolása">
-<!ENTITY noscriptOptFilterXGet "Gyanús XSS hozzáférések kezelése">
-<!ENTITY noscriptOptFilterXPost "POST hozzáférés átváltása GET hozzáférésre">
-<!ENTITY noscriptShowConsole "Konzol megjelenítése…">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS GYIK…">
-<!ENTITY noscriptXssFaq.accesskey "G">
-<!ENTITY noscriptUnsafeReload "Megbízhatatlan újratöltése">
-<!ENTITY noscriptUnsafeReload.accesskey "N">
-<!ENTITY noscriptXssExceptions "Anti-XSS védelem kivételek">
-<!ENTITY noscriptXssExceptions.description "A következő reguláris kifejezéseknek megfelelő webhelyek NEM LESZNEK az XSS ellen védve.">
-<!ENTITY noscriptMatchSample "Sablon példa:">
-<!ENTITY noscriptReset "Alaphelyzet">
-<!ENTITY noscriptReset.accesskey "A">
-<!ENTITY noscriptResetDef "Alaphelyzetbe állít">
-<!ENTITY noscriptResetDef.accesskey "h">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Ideiglenes hozzáférések visszavonása">
-<!ENTITY noscriptRevokeTemp.accesskey "v">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nincs helykitöltő a megbízhatatlannak megjelölt webhelyekről érkező objektumoknál">
-<!ENTITY noscriptCollapseBlockedObjects "Blokkolt objektumok összecsukása">
-<!ENTITY noscriptExceptions "Kivételek…">
-<!ENTITY noscriptBlockedObjects "Blokkolt objektumok">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Minden megbízhatatlanként megjelölt oldalról érkező objektum blokkolása">
-<!ENTITY noscriptTempAllowPage "Parancsfájlok ideiglenes engedélyezése az oldalon">
-<!ENTITY noscriptTempAllowPage.accesskey "i">
-<!ENTITY noscriptAllowPage "Parancsfájlok engedélyezése az oldalon">
-<!ENTITY noscriptAllowPage.accesskey "e">
-<!ENTITY noscriptTempToPerm "Oldal jogosultságok állandósítása">
-<!ENTITY noscriptTempToPerm.accesskey "j">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS GyIK...">
-<!ENTITY noscriptHttpsFaq.accesskey "y">
-<!ENTITY noscriptHttps.behavior "Viselkedés">
-<!ENTITY noscriptHttps.cookies "Sütik">
-<!ENTITY noscriptHttps.description "Aktív tartalom letiltása, ha nem biztonságos kapcsolatról (HTTPS) ered:">
-<!ENTITY noscriptHttps.never "Soha">
-<!ENTITY noscriptHttps.proxy "Ha proxy szerver van használatban (Tor ajánlott)">
-<!ENTITY noscriptHttps.always "Mindig">
-<!ENTITY noscriptHttpsForced "Biztonságos hozzáférés (HTTPS) erőltetése az alábbi oldalaknál:">
-<!ENTITY noscriptHttpsForcedExceptions "Ne erőltesse a biztonságos hozzáférést (HTTPS) az alábbi oldalaknál:">
-<!ENTITY noscriptSecureCookies "Biztonságos sütik automatikus kezelésének engedélyezése">
-<!ENTITY noscriptSecureCookiesForced "Sütik titkosításának erőltetése, amelyek HTTPS segítségével lettek beállítva az alábbi oldalakon:">
-<!ENTITY noscriptSecureCookiesExceptions "Veszélyes sütik figyelmen kívül hagyása, amelyek HTTPS segítségével lettek beállítva az alábbi oldalakon:">
-<!ENTITY noscriptClearClickTitle "ClearClick figyelmeztetések">
-<!ENTITY noscriptClearClickHeader "Kattintás után hamisítványgyanús viselkedés lehetséges!">
-<!ENTITY noscriptClearClickDescription "A NoScript billentyűzet vagy egér kölcsönhatását észlelte egy részlegesen rejtett objektummal. A képre kattintva válthat a gyanús és a tiszta változat között.">
-<!ENTITY noscriptClearClickOpt "ClearClick védelem a">
-<!ENTITY noscriptClearClickReport "Jelentés">
-<!ENTITY noscriptClearClickReport.accesskey "J">
-<!ENTITY noscriptClearClickReportId "Jelentés azonosító:">
-<!ENTITY noscriptTrustedPagesAdj "biztonságos oldalakon">
-<!ENTITY noscriptUntrustedPagesAdj "nem biztonságos oldalakon">
-<!ENTITY noscriptKeepLocked "Az elem blokkolása a továbbiakban is (ajánlott)">
-<!ENTITY noscriptEmbeddings "Beágyazott objektumok">
-<!ENTITY noscriptPrev "Előző">
-<!ENTITY noscriptNext "Következő">
-<!ENTITY noscriptFrameOptErr.title "Ez a tartalom keretben nem jeleníthető meg">
-<!ENTITY noscriptFrameOptErr.desc "A tartalom kiadója nem engedélyezte annak keretben történő megjelenítését.">
-<!ENTITY noscriptFrameOptErr.link "Kattintson ide a tartalom megjelenítéséhez új ablakban">
-<!ENTITY noscriptBookmarkSync "A NoScript konfigurációjának biztonsági mentése könyvjelzőbe (a szinkronizáció egyszerűbbé tétele)">
-<!ENTITY noscriptShowReleaseNotes "Kiadási megjegyzések megjelenítése frissítéskor">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Szabálycsomagok:">
-<!ENTITY ABE.enabled.label "ABE engedélyezése (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "A weboldalak hozzáadhatják saját szabálycsomagjaikat">
-<!ENTITY ABE.edit.label "Szerkesztés...">
-<!ENTITY ABE.edit.accesskey "S">
-<!ENTITY ABE.enable.label "Engedélyezés">
-<!ENTITY ABE.enable.accesskey "E">
-<!ENTITY ABE.disable.label "Letiltás">
-<!ENTITY ABE.disable.accesskey "L">
-<!ENTITY ABE.refresh.label "Frissítés">
-<!ENTITY ABE.refresh.accesskey "F">
-<!ENTITY noscriptUninstall "Eltávolítás">
-<!ENTITY noscriptRecentBlocked "Legutoljára blokkolt oldalak">
-<!ENTITY noscriptExternalFilters "Külső szűrők">
-<!ENTITY noscriptEF.enable "Külső szűrők engedélyezése">
-<!ENTITY noscriptEF.add "Új szűrő…">
-<!ENTITY noscriptEF.executable "Futtatható fájl:">
-<!ENTITY noscriptEF.browse "Tallózás…">
-<!ENTITY noscriptEF.contentType "MIME tartalom, amelyet szűrni (teljes egyezés vagy reguláris kifejezés) kíván:">
-<!ENTITY noscriptEF.exceptions "Ne szűrje az alábbi oldalakról érkező objektumokat:">
-<!ENTITY noscriptEF.remove "Eltávolítás">
-<!ENTITY noscriptPreset "Biztonsági szint">
-<!ENTITY noscriptPreset.off "Kikapcsolás (valóban?!)">
-<!ENTITY noscriptPreset.low "Gyenge (feketelista + web biztonság)">
-<!ENTITY noscriptPreset.medium "Klasszikus (fehérlista + web biztonság)">
-<!ENTITY noscriptPreset.high "Erős (teljes szűrés)">
-<!ENTITY noscript.hoverUI "Hozzáférések menü megnyitása, ha az egér kurzora a NoScript ikon felett van">
-<!ENTITY noscriptDonate "Hozzájárulás">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.properties b/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.properties
deleted file mode 100644
index 9b7d515..0000000
--- a/extensions/noscript/chrome/locale/hu-HU/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=A parancsfájlok általános engedélyezése (veszélyes)
-forbidGlobal=A parancsfájlok általános letiltása (ajánlott)
-allowLocal=Engedélyezés: %S
-allowTemp=Ideiglenes engedélyezés: %S
-forbidLocal=Letiltás: %S
-allowed.glb=Veszélyes! A parancsfájlok általános futtatása engedélyezett
-allowed.yes=A parancsfájlok futtatása jelenleg engedélyezett
-allowed.prt=A parancsfájlok futtatása részben engedélyezett
-allowed.no=A parancsfájlok futtatása jelenleg letiltott
-global.warning.title=Figyelem!
-global.warning.text=Ön általánosan (minden webhelyhez) kívánja engedélyezni a parancsfájlok futtatását.\nEz veszélyes lehet.\nValóban kívánja folytatni?
-audio.samples=Hangminták
-confirm=Biztos benne?
-alwaysAsk=Megerősítés kérése minden alkalommal
-notifyHide=Elrejtés %S másodperc után
-trust=Megbízható: %S
-distrust=Megbízhatatlan: %S
-untrustedOrigin=megbízhatatlan eredet
-xss.notify.generic=A NoScript kiszűrt egy lehetséges XSS szkriptet a %S oldalról. Technikai részleteket a konzol tartalmaz.
-xss.notify.showConsole=Konzol megjelenítése…
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Gyanús hozzáférés kezelve. Eredeti cím [%1$S] hozzáférést kért a [%2$S] címhez. Kezelt cím: [%3$S].
-xss.reason.filterXGetRef=Gyanús hozzáférési üzenet kezelve. Cím [%1$S] hozzáférést kért a [%2$S] címhez. Kezelt üzenet: [%3$S].
-xss.reason.filterXPost=Gyanús átvitel a [%2$S] címről a [%1$S] címre kezelve: átalakítva csak átvételre (GET).
-unsafeReload.warning=Gyanús elem újratöltése a következő címről:\n\n %1$S [%2$S]\n\nA(z) [%3$S]\n\ncímről a NoScript nem óvja a kérést!\n
-metaRefresh.notify=NoScript blokkolta a <META> átirányítás a <NOSCRIPT> elemen belül: %S - %S mp.
-metaRefresh.notify.follow=Átirányítás követése
-metaRefresh.notify.follow.accessKey=i
-notify.options=Opciók
-notify.options.accessKey=O
-reset.title=NoScript alaphelyzetbe állítása
-reset.warning=A NoScript valamennyi beállítása alaphelyzetbe kerül.\nA felhasználó által a weboldalakhoz beállított szkriptek tiltásai is törlődnek.\n\nEz a művelet nem vonható vissza.\nValóban szeretné folytatni?
-bookmarkSync.title=NoScript konfigurációs könyvjelző
-bookmarkSync.message=Ez a könyvjelző szinkronizációt segít elő a Weave/XMarks kiterjesztés szolgáltatásainak segítségével.
-bookmarkSync.confirm=A NoScript feltehetően mentett konfigurációs könyvjelzőt talált:\n%S.\nKívánja felülírni a jelenlegi NoScript konfigurációját a könyvjelző tartalmával?
-ABE.notify=A %1$S kérést az ABE kiszűrte: <%2$S> %3$S
-ABE.chooseEditor=Kérem válassza ki a szövegszerkesztőt az ABE szabálycsomaghoz
-ABE.syntaxError=Szintaxis hiba az ABE szabálycsoportban!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Mindegyik engedélyezése: %S
-allowTempFrom=Mindegyik ideiglenes engedélyezése: %S
-siteInfo.confirm=Infót kér a(z) "%1$S" oldalról\na(z) %2$S. kérés segítségével.\nFolytatja?
-siteInfo.tooltip=Középső kattintás vagy shift+kattintás az oldal információhoz…
-ef.activate=Szűrő %S
-ef.options=%S opciók…
-ef.newName=Adja meg az új szűrő nevét:
-ef.locateExe=Válassz ki a futtatható fájlt a(z) %S szűrőhöz
-disable=%S letiltása
-disable.accessKey=l
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/id-ID/noscript/about.properties b/extensions/noscript/chrome/locale/id-ID/noscript/about.properties
deleted file mode 100644
index f336d12..0000000
--- a/extensions/noscript/chrome/locale/id-ID/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Perlindungan tambahan untuk FireFox Anda: NoScript mengijinkan JavaScript, Java (dan plugin lainnya) hanya untuk domain terpercaya pilihan Anda (misal: situs web-banking personal). Daftar putih ini menjadi dasar perlindungan dari penyalahgunaan lubang keamanan (yang diketahui maupun tidak) tanpa kehilangan fungsionalitas... Para ahli percaya: FireFox lebih aman bersama NoScript :-)
-aboutTitle=Tentang %S
-extensionContributors=Kontributor:
-extensionContributors.tip=Orang-orang yang perlu anda beri ucapan terima kasih untuk ekstension ini
-extensionCreatorLabel=Penulis:
-changelog=Catatan Perubahan
-changelog.tip=Tampilkan Catatan Perubahan
-license=Lisensi
-license.tip=Baca lisensi end-user
-logo.tip=Datangi homepage ekstension
-sponsor.tip=Datangi homepage sponsor
-informaction.tip=Datangi homepage InformAction
-extensionHomepage.tip=Datangi homepage ekstension
-extensionCreator.tip=Datangi homepage Penulis
-version=Versi %S
diff --git a/extensions/noscript/chrome/locale/id-ID/noscript/noscript.dtd b/extensions/noscript/chrome/locale/id-ID/noscript/noscript.dtd
deleted file mode 100644
index 65497ec..0000000
--- a/extensions/noscript/chrome/locale/id-ID/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Pilihan...">
-<!ENTITY noscriptOptions.accesskey "P">
-<!ENTITY noscriptOptionsLong "Pilihan NoScript">
-<!ENTITY noscriptAbout "Tentang NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Anda dapat menentukan situs web mana yang diijinkan menjalankan naskah. Masukkan alamat atau domain (contoh: &quot;http://www.site.com&quot; atau &quot;site.com&quot;) yang akan diberi ijin kemudian klik Ijinkan.">
-<!ENTITY noscriptWebAddress "Alamat situs web:">
-<!ENTITY noscriptAllow "Ijinkan">
-<!ENTITY noscriptAllow.accesskey "I">
-<!ENTITY noscriptForbid "Larang">
-<!ENTITY noscriptForbid.accesskey "L">
-<!ENTITY noscriptTrust "Tandai sebagai Terpercaya">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Tandai sebagai Tidak Terpercaya">
-<!ENTITY noscriptUntrust.accesskey "X">
-<!ENTITY noscriptRemoveSelected "Hapus situs terpilih">
-<!ENTITY noscriptGloballyEnabled "Seluruh naskah diperbolehkan (berbahaya)">
-<!ENTITY noscriptAutoReload "Otomatis mengambil ulang halaman yang terpengaruh saat perijinan berubah">
-<!ENTITY noscriptGeneral "Umum">
-<!ENTITY noscriptAppearance "Penampilan">
-<!ENTITY noscriptShow "Tampilkan...">
-<!ENTITY noscriptCtxMenu "Menu kontekstual">
-<!ENTITY noscriptStatusIcon "Ikon papan status">
-<!ENTITY noscriptFullAddr "Alamat Lengkap (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domain Lengkap (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dasar Domain level ke-2 (noscript.net)">
-<!ENTITY noscriptTempCmd "Ijinkan sementara [...]">
-<!ENTITY noscriptSound "Umpan balik suara saat naskah dihalangi">
-<!ENTITY noscriptImport "Impor">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Ekspor">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Tampilkan pesan tetang naskah yang dihalangi">
-<!ENTITY noscriptNotify.bottom "Taruh pesan di bawah">
-<!ENTITY noscriptSound.choose "Pilih">
-<!ENTITY noscriptSound.choose.accesskey "P">
-<!ENTITY noscriptSound.play "Mainkan">
-<!ENTITY noscriptSound.play.accesskey "M">
-<!ENTITY noscriptSound.reset "Reset ke awal">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Canggih">
-<!ENTITY noscriptAdditionalPermissions "Tambahan perijinan untuk situs terpercaya">
-<!ENTITY noscriptAllowClipboard "Perbolehkan copy dan paster rich text dari clipboard eksternal">
-<!ENTITY noscriptAdditionalRestrictions "Pembatasan tambahan untuk situs tidak terpercaya">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Larang Java™">
-<!ENTITY noscriptForbidXSLT "Larang XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAMES&gt;">
-<!ENTITY noscriptForbidFlash "Larang Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Larang plugin lainnya">
-<!ENTITY noscriptReloadWarn "Pilihan ini akan berpengaruh pada halaman yang baru atau yang baru diambil ulang">
-<!ENTITY noscriptConfirmUnblock "Konfirmasi ulang sebelum membuka sementara penghalang suatu objek">
-<!ENTITY noscriptStatusLabel "Label papan status">
-<!ENTITY noscriptForbidBookmarklets "Larang bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Tampilkan ikon placeholder">
-<!ENTITY noscriptTruncateTitle "Potong judul dokumen">
-<!ENTITY noscriptFixLinks "Berusaha memperbaiki link JavaScript">
-<!ENTITY noscriptAllowBookmarks "Ijinkan bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Ijinkan situs dibuka melalui bookmarks">
-<!ENTITY noscriptAllowPing "Ijinkan &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Ijinkan link lokal">
-<!ENTITY noscriptForbidPing "Larang &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Larang perubahan arah META didalam elemen &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "M">
-<!ENTITY noscriptWhitelist "Daftar putih">
-<!ENTITY noscriptPermissions "Ijin-ijin">
-<!ENTITY noscriptRefresh "Segarkan">
-<!ENTITY noscriptNotifications "Pemberitahuan">
-<!ENTITY noscriptToolbarToggle "Klik kiri pada toolbar NoScript membalikan">
-<!ENTITY noscriptTrusted "Terpercaya">
-<!ENTITY noscriptUntrusted "Tidak Terpercaya">
-<!ENTITY noscriptUnknown "Tidak diketahui">
-<!ENTITY noscriptAdd "Tambah">
-<!ENTITY noscriptAdd.accesskey "a">
-<!ENTITY noscriptClose "Tutup">
-<!ENTITY noscriptSiteManager "Manajer Situs">
-<!ENTITY noscriptSecurityManager "Manajer Keamanan">
-<!ENTITY noscriptPolicies "Kebijakan">
-<!ENTITY noscriptDefaultPolicies "Kebijakan awal">
-<!ENTITY noscriptSitePolicies "Kebijakan Situs">
-<!ENTITY noscriptNselNever "Sembunyikan elemen &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Tampikan elemen &lt;NOSCRIPT&gt; yang mengikuti &lt;SCRIPT&gt; yang dihalangi">
-<!ENTITY noscriptAutoAllowTopLevel "Ijinkan sementara situs top-level untuk awal">
-<!ENTITY noscriptDescription "Perlindungan tambahan untuk FireFox Anda: NoScript mengijinkan JavaScript, Java (dan plugin lainnya) hanya untuk domain terpercaya pilihan Anda (misal: situs web-banking personal). Daftar putih ini menjadi dasar perlindungan dari penyalahgunaan lubang keamanan (yang diketahui maupun tidak) tanpa kehilangan fungsionalitas... Para ahli percaya: FireFox lebih aman bersama NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "halangi pemindai berdasar CSS">
-<!ENTITY noscriptOptFilterXGet "Bersihkan permintaan cross-site yang mencurigakan">
-<!ENTITY noscriptOptFilterXPost "Ubah permintaan POST cross-site menjadi permintaan GET tanpa data">
-<!ENTITY noscriptShowConsole "Tampilkan Penyangga">
-<!ENTITY noscriptShowConsole.accesskey "P">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Ambil ulang yang tidak aman">
-<!ENTITY noscriptUnsafeReload.accesskey "u">
-<!ENTITY noscriptXssExceptions "Pengecualian Perlindungan Anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Pencocokan tujuan regular expression ini tidak akan dilindungi dari XSS">
-<!ENTITY noscriptMatchSample "Contoh pencocokan pola:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Reset ke awal">
-<!ENTITY noscriptResetDef.accesskey "r">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Mencabut Izin Sementara">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Tidak ada tempat tetap untuk obyek yang datang dari situs yang tidak dipercaya">
-<!ENTITY noscriptCollapseBlockedObjects "Gabung obyek yang diblok">
-<!ENTITY noscriptExceptions "Pengecualian...">
-<!ENTITY noscriptBlockedObjects "Obyek yang Diblok">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blok setiap obyek yang datang dari situs yang tidak dipercaya">
-<!ENTITY noscriptTempAllowPage "Sementara bolehkan semua halaman ini">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Bolehkan semua halaman ini">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Buat izin permanen halaman">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Perilaku">
-<!ENTITY noscriptHttps.cookies "Cookie">
-<!ENTITY noscriptHttps.description "Larangkan konten aktif web kecuali datang dari koneksi aman (HTTPS):">
-<!ENTITY noscriptHttps.never "Tidak pernah">
-<!ENTITY noscriptHttps.proxy "Ketika menggunakan proxy (direkomendasikan dengan Tor)">
-<!ENTITY noscriptHttps.always "Selalu">
-<!ENTITY noscriptHttpsForced "Paksa situs berikut ini untuk menggunakan koneksi aman (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Tidak pernah paksakan koneksi aman (HTTPS) untuk situs berikut ini:">
-<!ENTITY noscriptSecureCookies "Hidupkan Manajemen Otomatis Keamanan Cookie">
-<!ENTITY noscriptSecureCookiesForced "Enkripsikan paksa semua set cookie melalui HTTPS dari situs berikut ini:">
-<!ENTITY noscriptSecureCookiesExceptions "Abaikan set cookie tidak aman melalui HTTPS dari situs berikut ini:">
-<!ENTITY noscriptClearClickTitle "Peringatan ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking Potensial / Mencoba memakai ulang UI!">
-<!ENTITY noscriptClearClickDescription "NoScript menginterupsi interaksi mouse atau keyboard dengan elemen tersembunyi yang terpisah. Klik pada gambar di atas memilih antara versi terhalang dan jelas.">
-<!ENTITY noscriptClearClickOpt "Proteksi ClearClick pada halaman…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "terpercaya">
-<!ENTITY noscriptUntrustedPagesAdj "tidak terpercaya">
-<!ENTITY noscriptKeepLocked "Jaga elemen ini terkunci (direkomendasikan)">
-<!ENTITY noscriptEmbeddings "Obyek yang ditanam">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/id-ID/noscript/noscript.properties b/extensions/noscript/chrome/locale/id-ID/noscript/noscript.properties
deleted file mode 100644
index 882877a..0000000
--- a/extensions/noscript/chrome/locale/id-ID/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Ijinkan semua naskah (berbahaya)
-forbidGlobal=Larang semua naskah
-allowLocal=Ijinkan %S
-allowTemp=Ijinkan sementara %S
-forbidLocal=Larang %S
-allowed.glb=Bahaya! Semua naskah diperbolehkan
-allowed.yes=Naskah diperbolehkan
-allowed.prt=Naskah sebagian diperbolehkan
-allowed.no=Larang naskah
-global.warning.title=Parhatian!
-global.warning.text=Naskah dari semua situs akan diperbolehkan.\n Ini membuka potensi bahaya.\n Anda yakin untuk meneruskannya?
-audio.samples=Contoh suara
-confirm=Anda yakin?
-alwaysAsk=Selalu tanyakan untuk konfirmasi
-notifyHide=Sembunyikan setelah %S detik
-trust=Percayai %S
-distrust=Tandai %S sebagai Tidak terpercaya
-untrustedOrigin=sumber tidak terpercaya
-xss.notify.generic=NoScript memfilter potensi usaha penaskahan antar situs (XSS) dari %S. Catatan teknis telah ditulis ke Penyangga.
-xss.notify.showConsole=Tampilkan Penyangga...
-xss.notify.showConsole.accessKey=P
-xss.reason.filterXGet=Membersihkan permintaan yang mencurigakan. URL [%2$S] meminta URL asli [%1$S]. URL yang telah dibersihkan: [%3$S].)
-xss.reason.filterXGetRef=Membersihkan penunjuk permintaan yang mencurigakan. URL [%2$S] meminta [%1$S]. Penunjuk yang telah dibersihkan: [%3$S].)
-xss.reason.filterXPost=Membersihkan unggah yang mencurigakan dari [%2$S] ke [%1$S]: dirubah menjadi permintaan GET hanya-unggah.
-unsafeReload.warning=TIDAK AMAN mengambil ulang benda mencurigakan %1$S [%2$S]\n\n dari [%3$S]\n\nNoScript tidak akan menjaga permintaan ini!\n
-metaRefresh.notify=NoScript menghalangi perubahan arah <META> dari dalam unsur <NOSCRIPT>: %S dalam %S detik.
-metaRefresh.notify.follow=Ikuti perubahan arah
-metaRefresh.notify.follow.accessKey=I
-notify.options=Pilihan
-notify.options.accessKey=P
-reset.title=Reset NoScript
-reset.warning=SELURUH pilihan NoScript and perijinan situs akan di reset ke nilai awal.\nTindakan ini tidak dapat diulang mundur.\nApakah Anda ingin melanjutkan?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/it/noscript/about.properties b/extensions/noscript/chrome/locale/it/noscript/about.properties
deleted file mode 100644
index 9a44feb..0000000
--- a/extensions/noscript/chrome/locale/it/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protezione aggiuntiva per Firefox: NoScript consente l'esecuzione di JavaScript, di Java (e, opzionalmente, degli altri plugin) solo per domini fidati di tua scelta (es. la tua banca online). Questo blocco preventivo basato su whitelist impedisce lo sfruttamento di vulnerabiltà della sicurezza (sia note che addirittura ancora sconosciute!) senza perdita di funzionalità... Gli esperti concordano: Firefox è davvero più sicuro con NoScript :-)
-aboutTitle=Informazioni su %S
-extensionContributors=Collaboratori:
-extensionContributors.tip=Chi bisogna ringraziare per questa estensione
-extensionCreatorLabel=Autore:
-changelog=Storia versioni
-changelog.tip=Esamina la storia delle versioni
-license=Licenza
-license.tip=Leggi la licenza per l'utente finale
-logo.tip=Visita il sito web dell'estensione
-sponsor.tip=Visita il sito web dello sponsor
-informaction.tip=Visita il sito web di InformAction
-extensionHomepage.tip=Visita il sito web dell'estensione
-extensionCreator.tip=Visita il sito web dell'autore
-version=Versione %S
diff --git a/extensions/noscript/chrome/locale/it/noscript/noscript.dtd b/extensions/noscript/chrome/locale/it/noscript/noscript.dtd
deleted file mode 100644
index 8f29b5e..0000000
--- a/extensions/noscript/chrome/locale/it/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opzioni…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opzioni NoScript">
-<!ENTITY noscriptAbout "Informazioni su NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Qui si possono indicare i siti per i quali l&apos;esecuzione degli script è consentita. Digitare l&apos;indirizzo o il dominio (es. &quot;http://www.sito.com&quot; oppure &quot;sito.com&quot;) e fare clic su Permetti.">
-<!ENTITY noscriptWebAddress "Indirizzo del sito:">
-<!ENTITY noscriptAllow "Permetti">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Vieta">
-<!ENTITY noscriptForbid.accesskey "V">
-<!ENTITY noscriptTrust "Considera fidato">
-<!ENTITY noscriptTrust.accesskey "f">
-<!ENTITY noscriptUntrust "Considera non fidato">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Rimuovi i siti selezionati">
-<!ENTITY noscriptGloballyEnabled "Esecuzione script abilitati globalmente (pericoloso)">
-<!ENTITY noscriptAutoReload "Ricarica automaticamente la pagina quando i permessi cambiano">
-<!ENTITY noscriptAutoReload.currentTab "Ricarica solo la scheda corrente">
-<!ENTITY noscriptGeneral "Generale">
-<!ENTITY noscriptAppearance "Aspetto">
-<!ENTITY noscriptShow "Mostra…">
-<!ENTITY noscriptCtxMenu "Menù contestuale">
-<!ENTITY noscriptStatusIcon "Icona sulla barra di stato">
-<!ENTITY noscriptFullAddr "Indirizzi completi">
-<!ENTITY noscriptFullDom "Dominii completi">
-<!ENTITY noscriptBaseDom "Dominii base (di secondo livello)">
-<!ENTITY noscriptTempCmd "Permetti temporaneamente […]">
-<!ENTITY noscriptSound "Notifica audio per gli script bloccati">
-<!ENTITY noscriptImport "Importa">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Esporta">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostra messaggio sul blocco degli script">
-<!ENTITY noscriptNotify.bottom "Posiziona il messaggio in basso">
-<!ENTITY noscriptSound.choose "Scegli">
-<!ENTITY noscriptSound.choose.accesskey "S">
-<!ENTITY noscriptSound.play "Suona">
-<!ENTITY noscriptSound.play.accesskey "u">
-<!ENTITY noscriptSound.reset "Ripristina predefinito">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avanzate">
-<!ENTITY noscriptAdditionalPermissions "Permessi aggiuntivi per i siti fidati">
-<!ENTITY noscriptAllowClipboard "Permetti copia e incolla di testo formattato da altre applicazioni">
-<!ENTITY noscriptAdditionalRestrictions "Restrizioni aggiuntive per i siti non fidati">
-<!ENTITY noscriptPlugins "Plugin">
-<!ENTITY noscriptContentBlocker "Applica queste restrizioni anche ai siti fidati">
-<!ENTITY noscriptForbidJava "Vieta Java™">
-<!ENTITY noscriptForbidXSLT "Vieta XSLT">
-<!ENTITY noscriptForbidSilverlight "Vieta Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Vieta &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Vieta &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Vieta @font-face">
-<!ENTITY noscriptForbidWebGL "Vieta WebGL">
-<!ENTITY noscriptForbidMedia "Vieta &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Vieta Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Vieta altri plugin">
-<!ENTITY noscriptReloadWarn "Queste opzioni avranno effetto nelle nuove pagine e in quelle ricaricate (manualmente)">
-<!ENTITY noscriptConfirmUnblock "Chiedi conferma prima di sbloccare temporaneamente un oggetto">
-<!ENTITY noscriptStatusLabel "Etichetta sulla barra di stato">
-<!ENTITY noscriptForbidBookmarklets "Vieta i bookmarklet">
-<!ENTITY noscriptShowPlaceholder "Mostra icona sostitutiva">
-<!ENTITY noscriptTruncateTitle "Tronca i titoli dei documenti">
-<!ENTITY noscriptFixLinks "Tenta di correggere i link JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permetti tutti i siti presenti nei segnalibri">
-<!ENTITY noscriptAllowViaBookmarks "Permetti i siti aperti attraverso i segnalibri">
-<!ENTITY noscriptAllowPing "Permetti il ping dai collegamenti">
-<!ENTITY noscriptAllowLocalLinks "Permetti collegamenti locali">
-<!ENTITY noscriptForbidPing "Vieta il ping dai collegamenti">
-<!ENTITY noscriptForbidMetaRefresh "Blocca i reindirizzamenti META dall&apos;interno di elementi &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Mostra messaggio quando un reindirizzamento META è bloccato">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Lista fidata">
-<!ENTITY noscriptPermissions "Permessi">
-<!ENTITY noscriptRefresh "Aggiorna">
-<!ENTITY noscriptNotifications "Notifiche">
-<!ENTITY noscriptToolbarToggle "Il clic sinistro sul pulsante della barra inverte i permessi per il sito principale">
-<!ENTITY noscriptTrusted "Fidato">
-<!ENTITY noscriptUntrusted "Non fidato">
-<!ENTITY noscriptUnknown "Sconosciuto">
-<!ENTITY noscriptCustom "Personalizzato">
-<!ENTITY noscriptAdd "Aggiungi">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Chiudi">
-<!ENTITY noscriptSiteManager "Gestione Siti">
-<!ENTITY noscriptSecurityManager "Gestione Sicurezza">
-<!ENTITY noscriptPolicies "Politiche">
-<!ENTITY noscriptDefaultPolicies "Politiche predefinite">
-<!ENTITY noscriptSitePolicies "Politiche specifiche per i siti">
-<!ENTITY noscriptNselNever "Nascondi gli elementi &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostra l&apos;elemento &lt;NOSCRIPT&gt; che segue un elemento &lt;SCRIPT&gt; bloccato">
-<!ENTITY noscriptAutoAllowTopLevel "Permetti temporaneamente il sito principale in automatico">
-<!ENTITY noscriptDescription "Protezione aggiuntiva per Firefox: NoScript consente l&apos;esecuzione di JavaScript, di Java (e, opzionalmente, degli altri plugin) solo per domini fidati di tua scelta (es. la tua banca online). Questo blocco preventivo basato su whitelist impedisce lo sfruttamento di vulnerabiltà della sicurezza (sia note che addirittura ancora sconosciute!) li esperti confermeranno: Firefox è davvero più sicuro con NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blocca gli scanner basati su CSS">
-<!ENTITY noscriptOptFilterXGet "Filtra le richieste sospette di XSS provenienti da siti non fidati">
-<!ENTITY noscriptOptFilterXPost "Neutralizza le richieste POST (upload) sospette di XSS provenienti da siti non fidati">
-<!ENTITY noscriptShowConsole "Mostra Console…">
-<!ENTITY noscriptShowConsole.accesskey "C">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "FAQ sul XSS…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Ricarica senza protezione">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Eccezioni alla protezione XSS">
-<!ENTITY noscriptXssExceptions.description "Le destinazioni che corrispondono a queste espressioni regolari NON riceveranno protezione XSS.">
-<!ENTITY noscriptMatchSample "Esempio di corrispondenza:">
-<!ENTITY noscriptReset "Ripristina">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Ripristina i valori originali">
-<!ENTITY noscriptResetDef.accesskey "R">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoca i permessi temporanei">
-<!ENTITY noscriptRevokeTemp.accesskey "t">
-<!ENTITY noscriptNoUntrustedPlaceholder "Non mostrare icona sostitutiva per elementi segnalati come non fidati">
-<!ENTITY noscriptCollapseBlockedObjects "Comprimi lo spazio occupato dagli oggetti bloccati">
-<!ENTITY noscriptExceptions "Eccezioni…">
-<!ENTITY noscriptBlockedObjects "Oggetti bloccati">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blocca tutti gli oggetti provenienti da siti segnalati come non fidati">
-<!ENTITY noscriptTempAllowPage "Permetti temporaneamente tutta la pagina">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Permetti tutta la pagina">
-<!ENTITY noscriptAllowPage.accesskey "a">
-<!ENTITY noscriptTempToPerm "Rendi permanenti i permessi della pagina">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "FAQ su HTTPS…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportamento">
-<!ENTITY noscriptHttps.cookies "Cookie">
-<!ENTITY noscriptHttps.description "Proibisci i contenuti attivi dal web non serviti da HTTPS">
-<!ENTITY noscriptHttps.never "Mai">
-<!ENTITY noscriptHttps.proxy "Quando uso un proxy (raccomandato con Tor)">
-<!ENTITY noscriptHttps.always "Sempre">
-<!ENTITY noscriptHttpsForced "Costringi i seguenti siti a usare connessioni sicure (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Non forzare mai connessioni sicure (HTTPS) per i seguenti siti:">
-<!ENTITY noscriptSecureCookies "Abilita la gestione automatica dei cookie sicuri">
-<!ENTITY noscriptSecureCookiesForced "Forza connessioni sicure per tutti i cookie creati in HTTPS dai seguenti siti:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignora i cookie non sicuri creati in HTTPS dai seguenti siti:">
-<!ENTITY noscriptClearClickTitle "Avviso di ClearClick">
-<!ENTITY noscriptClearClickHeader "Possibile tentativo di &quot;clickjacking&quot; o camuffamento">
-<!ENTITY noscriptClearClickDescription "NoScript ha intercettato un&apos;interazione del mouse o della tastiera con un elemento parzialmente nascosto. Cliccare sull&apos;immagine sotto per confrontare la versione ostruita con quella svelata.">
-<!ENTITY noscriptClearClickOpt "Abilita la protezione ClearClick sulle pagine…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "fidate">
-<!ENTITY noscriptUntrustedPagesAdj "non fidate">
-<!ENTITY noscriptKeepLocked "Mantieni bloccato questo elemento (consigliabile)">
-<!ENTITY noscriptEmbeddings "Oggetti incorporati">
-<!ENTITY noscriptPrev "Precedente">
-<!ENTITY noscriptNext "Successivo">
-<!ENTITY noscriptFrameOptErr.title "Questo contenuto non può essere caricato in un frame">
-<!ENTITY noscriptFrameOptErr.desc "Per proteggere la vostra sicurezza, l'autore di questo contenuto non permette che esso sia caricato in un frame.">
-<!ENTITY noscriptFrameOptErr.link "Cliccare qui per aprire questo contenuto in una nuova finestra.">
-<!ENTITY noscriptBookmarkSync "Copia la configurazione di NoScript in un segnalibro sincronizzabile">
-<!ENTITY noscriptShowReleaseNotes "Mostra le informazioni sulla versione dopo ogni aggiornamento">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Gruppi di regole:">
-<!ENTITY ABE.enabled.label "Abilita ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Permetti ai siti web di configurare le proprie regole">
-<!ENTITY ABE.edit.label "Modifica…">
-<!ENTITY ABE.edit.accesskey "M">
-<!ENTITY ABE.enable.label "Abilita">
-<!ENTITY ABE.enable.accesskey "A">
-<!ENTITY ABE.disable.label "Disabilita">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Aggiorna">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Disinstalla">
-<!ENTITY noscriptRecentBlocked "Siti bloccati di recente">
-<!ENTITY noscriptExternalFilters "Filtri esterni">
-<!ENTITY noscriptEF.enable "Abilita i filtri esterni">
-<!ENTITY noscriptEF.add "Crea filtro…">
-<!ENTITY noscriptEF.executable "File eseguibile:">
-<!ENTITY noscriptEF.browse "Sfoglia…">
-<!ENTITY noscriptEF.contentType "Tipo di contenuto (MIME) da filtrare (confronto esatto o espressione regolare):">
-<!ENTITY noscriptEF.exceptions "Non filtrare gli oggetti provenienti dai seguenti siti:">
-<!ENTITY noscriptEF.remove "Rimuovi">
-<!ENTITY noscriptPreset "Livello di sicurezza">
-<!ENTITY noscriptPreset.off "Nessuno (stai scherzando?!)">
-<!ENTITY noscriptPreset.low "Spensierato (Blacklist + Sicurezza Web)">
-<!ENTITY noscriptPreset.medium "Classico (Whitelist + Sicurezza Web)">
-<!ENTITY noscriptPreset.high "Fortezza (Protezione completa)">
-<!ENTITY noscript.hoverUI "Apri il menù dei permessi quando il mouse sorvola l'icona di NoScript">
-<!ENTITY noscriptDonate "Donazione">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Propaga i permessi del documento principale a tutti i sottodocumenti e agli script esterni">
-<!ENTITY noscriptRestrictSubdocScripting "Blocca gli script dei sottodocumenti se il documento principale non è nella whitelist">
-<!ENTITY noscriptGlobalHttpsWhitelist "Permetti automaticamente gli script HTTPS inclusi in documenti HTTPS">
-<!ENTITY noscriptPermanentInPrivate "Comandi &quot;Permetti&quot; permanenti nelle finestre private">
diff --git a/extensions/noscript/chrome/locale/it/noscript/noscript.properties b/extensions/noscript/chrome/locale/it/noscript/noscript.properties
deleted file mode 100644
index bb11225..0000000
--- a/extensions/noscript/chrome/locale/it/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permetti gli script globalmente (pericoloso)
-forbidGlobal=Disabilita gli script globalmente (consigliato)
-allowLocal=Permetti %S
-allowTemp=Permetti %S temporaneamente
-forbidLocal=Vieta %S
-allowed.glb=Pericolo! Script abilitati globalmente
-allowed.yes=Esecuzione script attualmente permessa
-allowed.prt=Esecuzione script parzialmente permessa
-allowed.no=Esecuzione script attualmente vietata
-global.warning.title=Attenzione!
-global.warning.text=L'esecuzione degli script sta per essere abilitata globalmente (per tutti i siti).\n Si tratta di un'azione potenzialmente pericolosa.\nSi vuole davvero procedere?
-audio.samples=Campioni audio
-confirm=Sei sicuro?
-alwaysAsk=Chiedi sempre conferma
-notifyHide=Nascondi dopo %S secondi
-trust=Considera %S fidato
-distrust=Non fidarti di %S
-untrustedOrigin=una origine non fidata
-xss.notify.generic=NoScript ha filtrato un potenziale tentativo di cross-site scripting (XSS) da parte di %S. Vedere la Console per dettagli.
-xss.notify.showConsole=Mostra Console…
-xss.notify.showConsole.accessKey=C
-xss.reason.filterXGet=Richiesta sospetta filtrata. URL originale [%1$S] richiesto da [%2$S]. URL filtrato: [%3$S].
-xss.reason.filterXGetRef=Referente sospetto filtrato. URL [%1$S] richiesto da [%2$S]. Referente filtrato: [%3$S].
-xss.reason.filterXPost=Upload sospetto verso [%1$S] da [%2$S] bloccato e trasformato in una richiesta GET innocua.
-unsafeReload.warning=Sto per ricaricare SENZA FILTRI un\n\n%1$S [ %2$S ]\n\nDA [ %3$S ]\n\nNoScript NON proteggerà questa richiesta!\n
-metaRefresh.notify=Noscript ha bloccato un reindirizzamento <META> contenuto in un elemento <NOSCRIPT>: %S in %S secondi
-metaRefresh.notify.follow=Segui il reindirizzamento
-metaRefresh.notify.follow.accessKey=S
-notify.options=Opzioni
-notify.options.accessKey=O
-reset.title=Ripristino di NoScript
-reset.warning=Tutte le opzioni di NoScript, permessi inclusi, saranno ripristinate immediatamente al loro valore originale.\nQuesta azione non può essere invertita.\nSi vuole davvero continuare?
-bookmarkSync.title=Configurazione di NoScript
-bookmarkSync.message=Questo segnalibro non è pensato per essere aperto direttamente, ma per essere sincronizzato attraverso un servizio di sincronizzazione come Weave o l'estensione XMarks.
-bookmarkSync.confirm=NoScript ha trovato un segnalibro di configurazione apparentemente salvato in data\n%S.\nSi desidera davvero sovrascrivere la configurazione locale di NoScript con il contenuto di questo segnalibro?
-ABE.notify=Richiesta %1$S filtrata da ABE: <%2$S> %3$S
-ABE.chooseEditor=Scegliere un editor di testo per modificare le regole di ABE
-allowFrom=Permetti tutto da %S
-allowTempFrom=Permetti tutto da %S temporaneamente
-siteInfo.confirm=Stai per chiedere informazioni sul sito "%1$S"\neffettuando una richiesta a %2$S.\nVuoi continuare?
-siteInfo.tooltip=Per informazioni sul sito, clicca col pulsante centrale o premendo "maiuscole"...
-ABE.syntaxError=Errore di sintassi nelle regole ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-ef.activate=Filtra %S
-ef.options=Opzioni di %S...
-ef.newName=Inserisci il nome del nuovo filtro:
-ef.locateExe=Seleziona l'eseguibile per il filtro %S
-disable=Disabilita %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ja-JP/noscript/about.properties b/extensions/noscript/chrome/locale/ja-JP/noscript/about.properties
deleted file mode 100644
index 1a18d37..0000000
--- a/extensions/noscript/chrome/locale/ja-JP/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Firefoxをさらに安全にします: NoScriptはJavaScript, Java(およびその他のプラグイン)を、(あなたが使うオンラインバンキングサイトなど)あなたが選んだ信頼できるサイトでのみ実行可能にします。このホワイトリストによる予防的ブロック手法によって、機能性を減じることなく
-aboutTitle=%S について
-extensionContributors=貢献者:
-extensionContributors.tip=People you should thank for this extension
-extensionCreatorLabel=作者:
-changelog=変更履歴
-changelog.tip=変更履歴を表示する
-license=ライセンス
-license.tip=ライセンスを読む
-logo.tip=拡張機能のホームページを表示する
-sponsor.tip=スポンサーのホームページを表示する
-informaction.tip=InformActionのホームページを表示する
-extensionHomepage.tip=拡張機能のホームページを表示する
-extensionCreator.tip=作者のホームページを表示する
-version=バージョン %S
diff --git a/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.dtd
deleted file mode 100644
index fc889e9..0000000
--- a/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "オプション...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript オプション">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5について...">
-<!ENTITY noscriptPermissionsText "JavaScriptを許可するサイトを指定する事ができます。許可したいサイトのアドレスかドメインを入力して、ボタンを押してください。(例: &quot;http://www.site.com&quot; または &quot;site.com&quot;)">
-<!ENTITY noscriptWebAddress "ウェブサイトのアドレス:">
-<!ENTITY noscriptAllow "許可する">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "禁止する">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "信頼済みサイトにする">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "信頼していないサイトにする">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "選択中のサイトを削除">
-<!ENTITY noscriptGloballyEnabled "すべてのサイトのJavaScriptを許可する (危険)">
-<!ENTITY noscriptAutoReload "許可設定を変更したときにページを自動的に再読込する">
-<!ENTITY noscriptGeneral "全般">
-<!ENTITY noscriptAppearance "インターフェース">
-<!ENTITY noscriptShow "外観...">
-<!ENTITY noscriptCtxMenu "コンテキストメニュー">
-<!ENTITY noscriptStatusIcon "ステータスバーアイコン">
-<!ENTITY noscriptFullAddr "フルアドレス (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "フルドメイン (www.noscript.net)">
-<!ENTITY noscriptBaseDom "セカンドレベル ドメイン (noscript.net)">
-<!ENTITY noscriptTempCmd "一時的に許可する [...]">
-<!ENTITY noscriptSound "スクリプトをブロックしたときにサウンドで通知する">
-<!ENTITY noscriptImport "インポート">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "エクスポート">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "スクリプトをブロックしたときに情報を表示する">
-<!ENTITY noscriptNotify.bottom "情報を下部に表示する">
-<!ENTITY noscriptSound.choose "選択">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "再生">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "設定をリセット">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "詳細設定">
-<!ENTITY noscriptAdditionalPermissions "信頼済みサイトへの許可の追加">
-<!ENTITY noscriptAllowClipboard "クリップボードからリッチテキストのコピーとペーストを可能にする">
-<!ENTITY noscriptAdditionalRestrictions "信頼していないサイトへの制限の追加">
-<!ENTITY noscriptPlugins "プラグイン">
-<!ENTITY noscriptContentBlocker "信頼しているサイトにもこれらの制限を適用する">
-<!ENTITY noscriptForbidJava "Java™ の禁止">
-<!ENTITY noscriptForbidXSLT "XSLT の禁止">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™ の禁止">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; の禁止">
-<!ENTITY noscriptForbidFrames "&lt;FRAMES&gt; の禁止">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® の禁止">
-<!ENTITY noscriptForbidPlugins "その他のプラグインの禁止">
-<!ENTITY noscriptReloadWarn "これらのオプションは新たに開いたページ、または再読込したページで有効になります">
-<!ENTITY noscriptConfirmUnblock "オブジェクトを一時的に許可する前に確認する">
-<!ENTITY noscriptStatusLabel "ステータスバーラベル">
-<!ENTITY noscriptForbidBookmarklets "ブックマークレットの禁止">
-<!ENTITY noscriptShowPlaceholder "プレースホルダーアイコンを表示する">
-<!ENTITY noscriptTruncateTitle "ページタイトルを切り詰める">
-<!ENTITY noscriptFixLinks "JavaScriptリンクの修正を試みる">
-<!ENTITY noscriptAllowBookmarks "ブックマークにある全てのサイトを許可する">
-<!ENTITY noscriptAllowViaBookmarks "ブックマークから開いたサイトを許可する">
-<!ENTITY noscriptAllowPing "&lt;A PING...&gt;を許可する">
-<!ENTITY noscriptAllowLocalLinks "ローカルリンクを許可する">
-<!ENTITY noscriptForbidPing "&lt;A PING...&gt;を禁止する">
-<!ENTITY noscriptForbidMetaRefresh "&lt;NOSCRIPT&gt;要素内でのMETAリダイレクションを禁止する">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "ホワイトリスト">
-<!ENTITY noscriptPermissions "アクセス許可">
-<!ENTITY noscriptRefresh "更新">
-<!ENTITY noscriptNotifications "通知">
-<!ENTITY noscriptToolbarToggle "NoScriptツールバーボタンの左クリックで現在のトップレベルサイトの許可設定をトグルする">
-<!ENTITY noscriptTrusted "信頼済み">
-<!ENTITY noscriptUntrusted "信頼していない">
-<!ENTITY noscriptUnknown "不明">
-<!ENTITY noscriptAdd "追加">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "閉じる">
-<!ENTITY noscriptSiteManager "サイト管理者">
-<!ENTITY noscriptSecurityManager "セキュリティ管理者">
-<!ENTITY noscriptPolicies "ポリシー">
-<!ENTITY noscriptDefaultPolicies "デフォルトポリシー">
-<!ENTITY noscriptSitePolicies "サイト固有のポリシー">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt;要素を隠す">
-<!ENTITY noscriptNselForce "ブロックした&lt;SCRIPT&gt;に引き続く&lt;NOSCRIPT&gt;を表示する">
-<!ENTITY noscriptAutoAllowTopLevel "トップレベルサイトはデフォルトで一時的に許可する">
-<!ENTITY noscriptDescription "Firefoxをさらに安全にします: NoScriptはJavaScript, Java(およびその他のプラグイン)を、(あなたが使うオンラインバンキングサイトなど)あなたが選んだ信頼できるサイトでのみ実行可能にします。このホワイトリストによる予防的ブロック手法によって、機能性を減じることなく(既知のものでも未知のものでも!)セキュリティ脆弱性への攻撃を阻止します...専門家は、NoScriptによってFireFoxが本当により安全になると言うことに同意するでしょう:-)">
-<!ENTITY noscriptOptBlockCssScanners "CSSベースのスキャナをブロックする">
-<!ENTITY noscriptOptFilterXGet "クロスサイトの疑いのあるリクエストをサニタイズする">
-<!ENTITY noscriptOptFilterXPost "クロスサイトのPOSTリクエストを、同じ情報を持つGETリクエストに変換する">
-<!ENTITY noscriptShowConsole "エラーコンソールを表示する...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "安全でない再読み込み">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "対XSS保護の例外設定">
-<!ENTITY noscriptXssExceptions.description "これらの正規表現にマッチングする送り先はXSSから保護されません">
-<!ENTITY noscriptMatchSample "パターンマッチングの例:">
-<!ENTITY noscriptReset "リセット">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "デフォルトに初期化">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "一時的な許可を取り消す">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "信頼できないと記録されたサイトからのオブジェクトにはプレースホルダーを表示しない">
-<!ENTITY noscriptCollapseBlockedObjects "ブロックしたオブジェクトを折りたたむ">
-<!ENTITY noscriptExceptions "例外...">
-<!ENTITY noscriptBlockedObjects "ブロックしたオブジェクト">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "信頼できないと記録されたサイトからの全てのオブジェクトをブロックする">
-<!ENTITY noscriptTempAllowPage "このページの全てを一時的に許可する">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "このページの全てを許可する">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "ページの許可設定を恒久的にする">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "振る舞い">
-<!ENTITY noscriptHttps.cookies "Cookie">
-<!ENTITY noscriptHttps.description "セキュアな(HTTPS)接続によらない動的コンテンツを:">
-<!ENTITY noscriptHttps.never "常に許可する">
-<!ENTITY noscriptHttps.proxy "プロキシを使っているときに禁止する(Torでの推奨)">
-<!ENTITY noscriptHttps.always "常に禁止する">
-<!ENTITY noscriptHttpsForced "以下のサイトに対してはセキュアな(HTTPS)接続を強制する:">
-<!ENTITY noscriptHttpsForcedExceptions "以下のサイトに対してはセキュアな(HTTPS)接続を強制しない:">
-<!ENTITY noscriptSecureCookies "自動セキュアCookie管理を有効にする">
-<!ENTITY noscriptSecureCookiesForced "以下のサイトからのHTTPSによってセットされた全てのcookieの暗号化を強制する:">
-<!ENTITY noscriptSecureCookiesExceptions "以下のサイトからのHTTPSによってセットされた安全でないcookieを無視する:">
-<!ENTITY noscriptClearClickTitle "ClearClick警告">
-<!ENTITY noscriptClearClickHeader "Clickjacking / UI Redressingの可能性があります!">
-<!ENTITY noscriptClearClickDescription "NoScriptは部分的に隠された要素へのマウスやキーボードの関与を阻止しました。上部のイメージをクリックすることで、遮られている版と遮られていない版を交互に表示します。">
-<!ENTITY noscriptClearClickOpt "ClearClick保護を行う:">
-<!ENTITY noscriptClearClickReport "レポート">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "レポートID:">
-<!ENTITY noscriptTrustedPagesAdj "信頼しているページ">
-<!ENTITY noscriptUntrustedPagesAdj "信頼していないページ">
-<!ENTITY noscriptKeepLocked "この要素をロックしたままにする(推奨)">
-<!ENTITY noscriptEmbeddings "埋め込みオブジェクト">
-<!ENTITY noscriptPrev "前">
-<!ENTITY noscriptNext "次">
-<!ENTITY noscriptFrameOptErr.title "このコンテンツはフレーム内に表示できません">
-<!ENTITY noscriptFrameOptErr.desc "セキュリティを保護するために、このコンテンツの発行者はコンテンツをフレーム内に表示することを禁止しています。">
-<!ENTITY noscriptFrameOptErr.link "このコンテンツを新しいウィンドウで開くには、ここをクリックします">
-<!ENTITY noscriptBookmarkSync "簡単に同期できるように、NoScriptの設定をブックマークにバックアップします">
-<!ENTITY noscriptShowReleaseNotes "アップデート時にリリースノートを表示する">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "ルールセット:">
-<!ENTITY ABE.enabled.label "ABE(Application Boundaries Enforcer)を有効にする">
-<!ENTITY ABE.siteEnabled.label "サイトが自分自身のルールセットをプッシュするのを許可する">
-<!ENTITY ABE.edit.label "編集...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "有効">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "無効">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "更新">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "アンインストール">
-<!ENTITY noscriptRecentBlocked "最近ブロックしたサイト">
-<!ENTITY noscriptForbidFonts "@font-face の禁止">
-<!ENTITY noscriptForbidWebGL "WebGL の禁止">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt; / &lt;VIDEO&gt; の禁止">
-<!ENTITY noscriptNotifyMeta "ブロックしたメタリダイレクトについてメッセージを表示する">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptExternalFilters "外部フィルタ">
-<!ENTITY noscriptEF.enable "外部フィルタを有効にする">
-<!ENTITY noscriptEF.add "新しいフィルタ...">
-<!ENTITY noscriptEF.executable "実行可​​能ファイル:">
-<!ENTITY noscriptEF.browse "参照...">
-<!ENTITY noscriptEF.contentType "コンテンツタイプ(MIME)によるフィルタリング(完全一致または正規表現):">
-<!ENTITY noscriptEF.exceptions "これらのサイトからのフィルタオブジェクトはしない:">
-<!ENTITY noscriptEF.remove "削除">
-<!ENTITY noscriptPreset "セキュリティレベル">
-<!ENTITY noscriptPreset.off "オフ(本気?!)">
-<!ENTITY noscriptPreset.low "簡単に(ブラックリスト+Webセキュリティ)">
-<!ENTITY noscriptPreset.medium "クラシック(ホワイトリスト+Webセキュリティ)">
-<!ENTITY noscriptPreset.high "要塞(全て禁止)">
-<!ENTITY noscript.hoverUI "NoScriptアイコンの上にマウスを移動した時にアクセス許可メニューを開く">
-<!ENTITY noscriptDonate "寄付">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.properties b/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.properties
deleted file mode 100644
index 1fbbc84..0000000
--- a/extensions/noscript/chrome/locale/ja-JP/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=すべてのサイトのJavaScriptを許可する (危険)
-forbidGlobal=すべてのサイトのJavaScriptを禁止する (推奨)
-allowLocal=%Sを許可
-allowTemp=%Sを一時的に許可
-forbidLocal=%Sを禁止
-allowed.glb=危険! JavaScriptはすべてのサイトで有効です
-allowed.yes=JavaScriptは現在許可されています
-allowed.prt=JavaScriptは一部許可されています
-allowed.no=JavaScriptは禁止されています
-global.warning.title=警告!
-global.warning.text=JavaScriptをすべてのサイトで許可します。\nこれはもしかすると危険なことです。\n本当に続行しますか?
-audio.samples=オーディオ サンプル
-confirm=本当によろしいですか?
-alwaysAsk=常に確認する
-notifyHide=%S 秒後に隠す
-trust=%Sを信頼する
-distrust=%Sを信頼できないサイトとして記録する
-untrustedOrigin=信頼できない原因
-xss.notify.generic=NoScriptは%Sからのクロスサイトスクリプティング(XSS)の可能性のあるアクセスを遮断しました。技術的な詳細はエラーコンソールに記録されています。
-xss.notify.showConsole=エラーコンソールの表示...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=疑わしいリクエストをサニタイズしました。元のURLは[%2$S]からリクエストされた[%1$S]。サニタイズしたURL: [%3$S]
-xss.reason.filterXGetRef=疑わしいリファラをサニタイズしました。[%2$S]からリクエストされたURL[%1$S]。サニタイズしたリファレンス: [%3$S]
-xss.reason.filterXPost=[%2$S]から[%1$S]への疑わしいアップロードをサニタイズしました: ダウンロードのみのGETリクエストに変換しました。
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScriptはこのリクエストを保護しません!\n
-metaRefresh.notify=NoScriptは<NOSCRIPT>要素内の<META>リダイレクトをブロックしました: %S に %S 秒後に移動。
-metaRefresh.notify.follow=リダイレクトに従う
-metaRefresh.notify.follow.accessKey=F
-notify.options=オプション
-notify.options.accessKey=O
-reset.title=NoScriptのリセット
-reset.warning=NoScriptの全ての設定とサイトへの許可は直ちにデフォルト値に初期化され、元には戻せません。\n本当に実行しますか?
-bookmarkSync.title=NoScript設定のブックマーク
-bookmarkSync.message=このブックマークはページを開くためのものではなく、WeaveやXMarks拡張のようなサービスを使って同期するためのものです。
-bookmarkSync.confirm=NoScriptは%Sに保存されたらしい設定ブックマークを発見しました。\n
-ABE.notify=要求%1$SはABEによってフィルタリングされました: <%2$S> %3$S
-ABE.chooseEditor=ABEルールセットのためのテキストエディタを選択してください
-allowFrom=%Sからの全てを許可する
-allowTempFrom=%Sからの全てを一時的に許可する
-ABE.syntaxError=ABEルールセットの構文エラーです!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ ローカル
-siteInfo.confirm=あなたが訪問するサイト"%1$S"では\n%2$Sにクエリを送信します。\n続行しますか?
-siteInfo.tooltip=ミドルクリックまたはshift+クリックでサイト情報...
-ef.activate=フィルター%S
-ef.options=%Sオプション...
-ef.newName=新しいフィルタの名前を入力:
-ef.locateExe=%Sのフィルタの実行可能ファイルを選択する
-disable=無効%S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/kk-KZ/noscript/about.properties b/extensions/noscript/chrome/locale/kk-KZ/noscript/about.properties
deleted file mode 100644
index 6a4f7de..0000000
--- a/extensions/noscript/chrome/locale/kk-KZ/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Firefox үшін экстра қорғаныс: NoScript көмегімен сіз JavaScript, Java (және басқа плагиндер) орындалуын тек өзіңіз көрсеткен домендер үшін рұқсат ете аласыз (мысалы, өзіңіздің веб-сайтыңыз). Рұқсат етілген тізім, алдын-ала блоктауға негізделіп, функционалдылыққа әсер етпей-ақ осалдылықтардың алдын алуға көмектеседі (белгілі және белгісіз!)… Мамандар келіседі: NoScript қолдану Firefox жұмысын қауіпсіз етеді:-)
-aboutTitle=%S туралы
-extensionContributors=Үлесін қосқандар:
-extensionContributors.tip=Осы кеңейтуді жасауға көмектескендер
-extensionCreatorLabel=Авторы:
-changelog=Нұсқалар тарихы
-changelog.tip=Нұсқалар тарихын көрсету
-license=Лицензиясы
-license.tip=Пайдаланушы лицензиясын оқу
-logo.tip=Кеңейтудің үй парағы
-sponsor.tip=Демеушілердің үй парағы
-informaction.tip=InformAction үй парағы
-extensionHomepage.tip=Кеңейтудің үй парағы
-extensionCreator.tip=Автордың үй парағы
-version=%S нұсқасы
diff --git a/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.dtd b/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.dtd
deleted file mode 100644
index 35f54c4..0000000
--- a/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Баптаулары">
-<!ENTITY noscriptOptions.accesskey "Б">
-<!ENTITY noscriptOptionsLong "NoScript баптаулары">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5 туралы...">
-<!ENTITY noscriptPermissionsText "Қай сайттарға JavaScript орындауға рұқсат екенін көрсете аласыз. Рұқсат етілетін сайттың домен адресін енгізіңіз (мысалы, &quot;http://www.site.com&quot; немесе &quot;site.com&quot;), содан кейін Рұқсат ету басыңыз.">
-<!ENTITY noscriptWebAddress "Веб-сайт адресі:">
-<!ENTITY noscriptAllow "Рұқсат ету">
-<!ENTITY noscriptAllow.accesskey "Р">
-<!ENTITY noscriptForbid "Тыйым салу">
-<!ENTITY noscriptForbid.accesskey "ы">
-<!ENTITY noscriptTrust "Рұқсат етілген деп белгілеу">
-<!ENTITY noscriptTrust.accesskey "с">
-<!ENTITY noscriptUntrust "Тыйым салынған деп белгілеу">
-<!ENTITY noscriptUntrust.accesskey "н">
-<!ENTITY noscriptRemoveSelected "Ерекшеленген сайттарды өшіру">
-<!ENTITY noscriptGloballyEnabled "JavaScript толық рұқсат етілген (қауіпті)">
-<!ENTITY noscriptAutoReload "Ережелер өзгергенде оған қатысты парақтарды жаңарту">
-<!ENTITY noscriptGeneral "Жалпы">
-<!ENTITY noscriptAppearance "Түрі">
-<!ENTITY noscriptShow "Көрсету...">
-<!ENTITY noscriptCtxMenu "Контекст мәзірінде көрсету">
-<!ENTITY noscriptStatusIcon "Қалып-күй жолағында көрсету">
-<!ENTITY noscriptFullAddr "Адрестер толығымен (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Домендер толығымен (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Базалық 2-ші деңгейлі домендер (noscript.net)">
-<!ENTITY noscriptTempCmd "Уақытша рұқсат ету […]">
-<!ENTITY noscriptSound "Скриптерді блоктау кезінде аудио сигнал беру">
-<!ENTITY noscriptImport "Импорт">
-<!ENTITY noscriptImport.accesskey "м">
-<!ENTITY noscriptExport "Экспорт">
-<!ENTITY noscriptExport.accesskey "к">
-<!ENTITY noscriptNotify "Блокталған скриптер туралы хабарлама көрсету">
-<!ENTITY noscriptNotify.bottom "Терезенің астынан хабарлама көрсету">
-<!ENTITY noscriptSound.choose "Таңдау">
-<!ENTITY noscriptSound.choose.accesskey "д">
-<!ENTITY noscriptSound.play "Ойнау">
-<!ENTITY noscriptSound.play.accesskey "й">
-<!ENTITY noscriptSound.reset "Бастапқы түріне келтіру">
-<!ENTITY noscriptSound.reset.accesskey "р">
-<!ENTITY noscriptAdvanced "Кеңейтілген">
-<!ENTITY noscriptAdditionalPermissions "Сенімді сайттар үшін кеңейтілген баптаулар">
-<!ENTITY noscriptAllowClipboard "Сыртқы алмасу буферінен көшіру/кірістіруді рұқсат ету">
-<!ENTITY noscriptAdditionalRestrictions "Сенімсіз сайттар үшін кеңейтілген баптаулар">
-<!ENTITY noscriptPlugins "Плагиндер">
-<!ENTITY noscriptContentBlocker "Бұл шектеулерді сенімді сайттар үшін де қолдану">
-<!ENTITY noscriptForbidJava "Java™-ға тыйым салу">
-<!ENTITY noscriptForbidXSLT "XSLT үшін тыйым салу">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™-қа тыйым салу">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; тыйым салу">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt; тыйым салу">
-<!ENTITY noscriptForbidFonts "@font-face тыйым салу">
-<!ENTITY noscriptForbidWebGL "WebGL тыйым салу">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt; / &lt;VIDEO&gt; тыйым салу">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® тыйым салу">
-<!ENTITY noscriptForbidPlugins "Басқа плагиндерге тыйым салу">
-<!ENTITY noscriptReloadWarn "Бұл баптаулар тек жаңа ашылған немесе қайта жүктелген (қолмен) парақтар үшін істейді">
-<!ENTITY noscriptConfirmUnblock "Объектті уақытша рұқсат ету алдында растауды сұрау">
-<!ENTITY noscriptStatusLabel "Қалып-күй жолағындағы хабарламалар">
-<!ENTITY noscriptForbidBookmarklets "Bookmarklets қолдануға тыйым салу">
-<!ENTITY noscriptShowPlaceholder "Блокталған элементтің орнын қоршаумен көрсету">
-<!ENTITY noscriptTruncateTitle "Құжаттың тым ұзын атын қысқарту">
-<!ENTITY noscriptFixLinks "JavaScript сілтемелерін өндеуді қолдану">
-<!ENTITY noscriptAllowBookmarks "Бетбелгілерден ашылған сайтқа рұқсат ету">
-<!ENTITY noscriptAllowViaBookmarks "Бетбелгілерден ашылған сайтқа рұқсат ету">
-<!ENTITY noscriptAllowPing "&lt;A PING…&gt; рұқсат ету">
-<!ENTITY noscriptAllowLocalLinks "Жергілікті сілтемелерді рұқсат ету">
-<!ENTITY noscriptForbidPing "&lt;A PING…&gt; тыйым салу">
-<!ENTITY noscriptForbidMetaRefresh "&lt;NOSCRIPT&gt; элементінің ішінде META бағдарлауды оқшаулау">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "ш">
-<!ENTITY noscriptNotifyMeta "Блокталған META бағдарлаулар жөнінде хабарлау">
-<!ENTITY noscriptNotifyMeta.accesskey "о">
-<!ENTITY noscriptWhitelist "Рұқсат етілген тізім">
-<!ENTITY noscriptPermissions "Рұқсаттар">
-<!ENTITY noscriptRefresh "Жаңарту">
-<!ENTITY noscriptNotifications "Хабарламалар">
-<!ENTITY noscriptToolbarToggle "NoScript таңбашасына шерту арқылы сайт үшін рұқсаттарды ауыстыру">
-<!ENTITY noscriptTrusted "Сенімді">
-<!ENTITY noscriptUntrusted "Сенімсіз">
-<!ENTITY noscriptUnknown "Белгісіз">
-<!ENTITY noscriptAdd "Қосу">
-<!ENTITY noscriptAdd.accesskey "с">
-<!ENTITY noscriptClose "Жабу">
-<!ENTITY noscriptSiteManager "Сайт менеджері">
-<!ENTITY noscriptSecurityManager "Қауіпсіздік менджері">
-<!ENTITY noscriptPolicies "Ережелер">
-<!ENTITY noscriptDefaultPolicies "Бастапқы ережелер">
-<!ENTITY noscriptSitePolicies "Сайтқа қатысты ережелер">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt; элементтерін жасыру">
-<!ENTITY noscriptNselForce "Блокталған &lt;SCRIPT&gt; соңынан келген &lt;NOSCRIPT&gt; элементін көрсету">
-<!ENTITY noscriptAutoAllowTopLevel "Уақытша жоғарғы деңгейлі сайттарға рұқсат беру">
-<!ENTITY noscriptDescription "Firefox үшін экстра қорғаныс: NoScript көмегімен сіз JavaScript, Java (және басқа плагиндер) орындалуын тек өзіңіз көрсеткен домендер үшін рұқсат ете аласыз (мысалы, өзіңіздің веб-сайтыңыз). Рұқсат етілген тізім, алдын-ала блоктауға негізделіп, мүмкіндіктерге әсер етпей-ақ, осалдылықтардың алдын алуға көмектеседі (белгілі және белгісіз!)… Мамандар келіседі: NoScript қолдану Firefox жұмысын қауіпсіз етеді:-)">
-<!ENTITY noscriptOptBlockCssScanners "CSS-негізделген сканерлерді оқшаулау">
-<!ENTITY noscriptOptFilterXGet "CSS сұранымдарын оқшаулау">
-<!ENTITY noscriptOptFilterXPost "Сайт аралық POST сұранымдарын мәліметі жоқ GET сұранымдарына айналдыру">
-<!ENTITY noscriptShowConsole "Консольді көрсету...">
-<!ENTITY noscriptShowConsole.accesskey "у">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "Х">
-<!ENTITY noscriptXssFaq "XSS жиі қойылатын сұрақтары...">
-<!ENTITY noscriptXssFaq.accesskey "й">
-<!ENTITY noscriptUnsafeReload "Қауіпсіз емес қайта жүктелу">
-<!ENTITY noscriptUnsafeReload.accesskey "з">
-<!ENTITY noscriptXssExceptions "Анти-XSS қорғаудың ерекше ережелері">
-<!ENTITY noscriptXssExceptions.description "Бұл маскаларға сәйкес келетін объектілер XSS қарсы ҚОРҒАЛМАЙДЫ.">
-<!ENTITY noscriptMatchSample "Шаблон мысалы:">
-<!ENTITY noscriptReset "Тастау">
-<!ENTITY noscriptReset.accesskey "с">
-<!ENTITY noscriptResetDef "Бастапқы түріне келтіру">
-<!ENTITY noscriptResetDef.accesskey "н">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Уақытша рұқсаттарды қайта шақыру">
-<!ENTITY noscriptRevokeTemp.accesskey "р">
-<!ENTITY noscriptNoUntrustedPlaceholder "Сенімсіз деп белгіленген сайттан келген объектілер үшін қоршау жоқ">
-<!ENTITY noscriptCollapseBlockedObjects "Блокталған объектілерді жинау">
-<!ENTITY noscriptExceptions "Ерекше ережелер...">
-<!ENTITY noscriptBlockedObjects "Блокталған объектілер">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Сенімсіз деп белгіленген сайттан келген әр объектті блоктау">
-<!ENTITY noscriptTempAllowPage "Бұл парақтағы барлығына рұқсат ету">
-<!ENTITY noscriptTempAllowPage.accesskey "т">
-<!ENTITY noscriptAllowPage "Бұл парақтағы бар құрамасына рұқсат ету">
-<!ENTITY noscriptAllowPage.accesskey "е">
-<!ENTITY noscriptTempToPerm "Орнатылған рұқсаттарды сақтау">
-<!ENTITY noscriptTempToPerm.accesskey "у">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS жиі қойылатын сұрақтары...">
-<!ENTITY noscriptHttpsFaq.accesskey "и">
-<!ENTITY noscriptHttps.behavior "Әрекеттері">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Қорғалған байланыс (HTTPS) болмаса, активті веб-құраманы оқшаулау:">
-<!ENTITY noscriptHttps.never "Ешқашан">
-<!ENTITY noscriptHttps.proxy "Прокси қолданған кезде (Tor ұсынылады)">
-<!ENTITY noscriptHttps.always "Әрқашан">
-<!ENTITY noscriptHttpsForced "Келесі сайттар үшін қорғалған байланыс (HTTPS) талап ету:">
-<!ENTITY noscriptHttpsForcedExceptions "Келесі сайттар үшін қорғалған байланыс (HTTPS) талап етпеу:">
-<!ENTITY noscriptSecureCookies "Automatic Secure Cookies Management қосу">
-<!ENTITY noscriptSecureCookiesForced "Келесі сайттардан HTTPS арқылы алынатын cookies үшін шифрлеуді талап ету:">
-<!ENTITY noscriptSecureCookiesExceptions "Келесі сайттардан HTTPS арқылы алынатын қауіпсіз емесе cookies елемеу:">
-<!ENTITY noscriptClearClickTitle "ClearClick ескертулері">
-<!ENTITY noscriptClearClickHeader "Clickjacking мүмкін/UI өзгерту талабы">
-<!ENTITY noscriptClearClickDescription "NoScript жартылай жасырын элементпен әрекетті шектеді. Айырмашылыған көру үшін суреттерге шертіңіз.">
-<!ENTITY noscriptClearClickOpt "Парақтардағы ClearClick-қорғанысы...">
-<!ENTITY noscriptClearClickReport "Хабарлау">
-<!ENTITY noscriptClearClickReport.accesskey "р">
-<!ENTITY noscriptClearClickReportId "Хабарлау нөмірі:">
-<!ENTITY noscriptTrustedPagesAdj "сенімді">
-<!ENTITY noscriptUntrustedPagesAdj "сенімсіз">
-<!ENTITY noscriptKeepLocked "Бұл элементті блокталған күйінде қалдыру (ұсынылады)">
-<!ENTITY noscriptEmbeddings "Құрамдас объекттер">
-<!ENTITY noscriptPrev "Алдыңғысы">
-<!ENTITY noscriptNext "Келесі">
-<!ENTITY noscriptFrameOptErr.title "Бұл қарама фрейм ішінде көрсетілмейді">
-<!ENTITY noscriptFrameOptErr.desc "Сіздің қауіпсіздігіңізді ескере отырып, құраманы жариялаушы фреймде көрсетілуді рұқсат етпейді.">
-<!ENTITY noscriptFrameOptErr.link "Бұл құраманы жаңа терезеде ашу үшін, осында шертіңіз">
-<!ENTITY noscriptBookmarkSync "NoScript баптауларын жеңіл синхронизация үшін кеңейту ішінде сақтау">
-<!ENTITY noscriptShowReleaseNotes "Жаңарту кезінде тарихын көрсету">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "А">
-<!ENTITY ABE.rulesets.label "Ережелер жинақтары:">
-<!ENTITY ABE.enabled.label "ABE іске қосу (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Сайттарға өздерінің ережелерін қолдануға рұқсат беру">
-<!ENTITY ABE.edit.label "Тузету...">
-<!ENTITY ABE.edit.accesskey "е">
-<!ENTITY ABE.enable.label "Қосу">
-<!ENTITY ABE.enable.accesskey "с">
-<!ENTITY ABE.disable.label "Сөндіру">
-<!ENTITY ABE.disable.accesskey "р">
-<!ENTITY ABE.refresh.label "Жаңарту">
-<!ENTITY ABE.refresh.accesskey "т">
-<!ENTITY noscriptUninstall "Өшіру">
-<!ENTITY noscriptRecentBlocked "Соңғы блокталған сайттар">
-<!ENTITY noscriptExternalFilters "Сыртқы фильтрлер">
-<!ENTITY noscriptEF.enable "Сыртқы фильтрлерді іске қосу">
-<!ENTITY noscriptEF.add "Жаңа фильтр…">
-<!ENTITY noscriptEF.executable "Орындалатын файл:">
-<!ENTITY noscriptEF.browse "Қалап шығу…">
-<!ENTITY noscriptEF.contentType "Фильтрленетін құрама түрі (MIME) (дәл сәйкестік не қалыпты өрнек):">
-<!ENTITY noscriptEF.exceptions "Бұл сайттардан келген объекттерді фильтрлемеу:">
-<!ENTITY noscriptEF.remove "Өшіру">
-<!ENTITY noscriptPreset "Қауіпсіздік деңгейі">
-<!ENTITY noscriptPreset.off "Сөндіру (Шынымен ба?!)">
-<!ENTITY noscriptPreset.low "Жеңіл (Блоктізім + Веб қауіпсіздігі)">
-<!ENTITY noscriptPreset.medium "Қалыпты (Рұқсат тізімі + Веб қауіпсіздігі)">
-<!ENTITY noscriptPreset.high "Қамал (Қатаң)">
-<!ENTITY noscript.hoverUI "Тышқан NoScript таңбашасынан өткен кезде рұқсаттар мәзірін ашу">
-<!ENTITY noscriptDonate "Ақшалай көмектесу">
-<!ENTITY noscriptDonate.accesskey "ш">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.properties b/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.properties
deleted file mode 100644
index 056f3b8..0000000
--- a/extensions/noscript/chrome/locale/kk-KZ/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=JavaScript толық рұқсат ету (қауіпті)
-forbidGlobal=JavaScript толық тыйым салу (ұсынылады)
-allowLocal=%S рұқсат ету
-allowTemp=%S уақытша рұқсат ету
-forbidLocal=%S тыйым салу
-allowed.glb=Назар аудырыңыз! JavaScript толық рұқсат етілген
-allowed.yes=JavaScript осы парақта рұқсат етілген
-allowed.prt=JavaScript жартылай рұқсат етілген
-allowed.no=JavaScript осы парақта тыйым салынған
-global.warning.title=Назар аударыңыз!
-global.warning.text=JavaScript толығымен рұқсат етіледі (барлық веб-сайттар үшін).\n Бұл - қауіпті әрекет.\nШынымен жалғастыруды қалайсыз ба?
-audio.samples=Аудио мысалы
-confirm=Осыны шынымен қалайсыз ба?
-alwaysAsk=Әрқашан рұқсат сұрау
-notifyHide=%S секундтан кейін жасыру
-trust=%S рүқсат етілген деп белгілеу
-distrust=%S рұқсат етілмеген деп белгілеу
-untrustedOrigin=сенімсіз көзі ретінде
-xss.notify.generic=NoScript мүмкін болған XSS-шабуылын (сайтаралық скриптинг) %S адресінен оқшаулады. Техникалық ақпарат консольге жазылды.
-xss.notify.showConsole=Консольді көрсету...
-xss.notify.showConsole.accessKey=К
-xss.reason.filterXGet=Күдікті сұраным оқшауланды. URL: [%1$S]. Сұраным келесі парақтан түсті: [%2$S]. Фильтрленген адрес: [%3$S]
-xss.reason.filterXGetRef=Күдікті сұраным көзі оқшауланды («referer»): URL: [%1$S] келесі парақтан [%2$S]. Фильтрленген адрес: [%3$S]
-xss.reason.filterXPost=[%2$S] адресінен [%1$S] адресіне түскен күдікті жүктеме оқшауланды: жүктелетін GET сұранымына ауыстырылды.
-unsafeReload.warning=Қауіпсіз емес қайта жүктеу талабы \n\n%1$S [%2$S]\n\nКелесіден [%3$S]\n\nNoScript бұл сұранымды қорғай АЛМАЙДЫ!\n
-metaRefresh.notify=NoScript <NOSCRIPT> элементінің ішінде <META>-бағдарлауды оқшаулады: %S, %S сек ішінде.
-metaRefresh.notify.follow=Бағдарлауға өту
-metaRefresh.notify.follow.accessKey=т
-notify.options=Баптаулар
-notify.options.accessKey=Б
-reset.title=NoScript тастау
-reset.warning=БАРЛЫҚ NoScript баптаулары мен сайттар үшін рұқсаттар бастапқы түріне келеді.\nБұл әрекетті қайтаруға болмайды.\nЖалғастыру керек пе?
-bookmarkSync.title=NoScript баптау бетбелгісі
-bookmarkSync.message=Бұл бетбелгі ашылуды ЕМЕС, бірақ Weave немесе XMarks кеңейтулері көмегімен синхрондауды белгілейді.
-bookmarkSync.confirm=NoScript келесі жерде сақталған бапталар бетбелгісін тапты\n%S.\nБұл бетбелгінің ұүрамамен өзіңіздің NoScript баптауларыңызды алмастыруды шынымен қалайсыз ба?
-ABE.notify=%1$S сұранымын ABE болдырмаған: <%2$S> %3$S
-ABE.chooseEditor=ABE ережелер жинақтары үшін мәтіндік редакторын таңдаңыз
-ABE.syntaxError=ABE ережесінде синтаксис қатесі!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=%S үшін барлығына рұқсат ету
-allowTempFrom=%S үшін барлығына уақытша рұқсат ету
-siteInfo.confirm=Сіз "%1$S" сайты туралы %2$S үшін сұранымды\nжіберуді қалағансыз. Жалғастырамыз ба?
-siteInfo.tooltip=Сайт ақпаратын қарау үшін ортамен не shift ұстап шертіңіз...
-ef.activate=%S фильтрлеу
-ef.options=%S баптаулары...
-ef.newName=Жаңа фильтрдің атын енгізіңіз:
-ef.locateExe=%S фильтрі үшін орындалатын файлды таңдаңыз
-disable=%S сөндіру
-disable.accessKey=д
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/km-KH/noscript/about.properties b/extensions/noscript/chrome/locale/km-KH/noscript/about.properties
deleted file mode 100644
index c380467..0000000
--- a/extensions/noscript/chrome/locale/km-KH/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=About %S
-extensionContributors=Contributors:
-extensionContributors.tip=People you should thank for this extension
-extensionCreatorLabel=Author:
-changelog=Changelog
-changelog.tip=Show changelog
-license=License
-license.tip=Read end-user license
-logo.tip=Visit extension home page
-sponsor.tip=Visit sponsor home page
-informaction.tip=Visit InformAction home page
-extensionHomepage.tip=Visit extension home page
-extensionCreator.tip=Visit author home page
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/km-KH/noscript/noscript.dtd b/extensions/noscript/chrome/locale/km-KH/noscript/noscript.dtd
deleted file mode 100644
index ac1170b..0000000
--- a/extensions/noscript/chrome/locale/km-KH/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. &quot;http://www.site.com&quot; or &quot;site.com&quot;) of the site you want to allow and then click Allow.">
-<!ENTITY noscriptWebAddress "Address of web site:">
-<!ENTITY noscriptAllow "Allow">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "Forbid">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Mark as Trusted">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Mark as Untrusted">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Remove Selected Sites">
-<!ENTITY noscriptGloballyEnabled "Scripts Globally Allowed (dangerous)">
-<!ENTITY noscriptAutoReload "Automatically reload affected pages when permissions change">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Appearance">
-<!ENTITY noscriptShow "Show...">
-<!ENTITY noscriptCtxMenu "Contextual menu">
-<!ENTITY noscriptStatusIcon "Status bar icon">
-<!ENTITY noscriptFullAddr "Full Addresses (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Full Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd level Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "Temporarily allow [...]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Import">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Export">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Show message about blocked scripts">
-<!ENTITY noscriptNotify.bottom "Place message at the bottom">
-<!ENTITY noscriptSound.choose "Choose">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Play">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reset default">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Advanced">
-<!ENTITY noscriptAdditionalPermissions "Additional permissions for trusted sites">
-<!ENTITY noscriptAllowClipboard "Allow rich text copy and paste from external clipboard">
-<!ENTITY noscriptAdditionalRestrictions "Additional restrictions for untrusted sites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Forbid Java™">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbid Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbid other plugins">
-<!ENTITY noscriptReloadWarn "These options will take effect on new or (manually) reloaded pages">
-<!ENTITY noscriptConfirmUnblock "Ask for confirmation before temporarily unblocking an object">
-<!ENTITY noscriptStatusLabel "Status bar label">
-<!ENTITY noscriptForbidBookmarklets "Forbid bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Show placeholder icon">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Attempt to fix JavaScript links">
-<!ENTITY noscriptAllowBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowPing "Allow &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Allow local links">
-<!ENTITY noscriptForbidPing "Forbid &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Refresh">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Left clicking on NoScript toolbar button toggles permissions for current top-level site">
-<!ENTITY noscriptTrusted "Trusted">
-<!ENTITY noscriptUntrusted "Untrusted">
-<!ENTITY noscriptUnknown "Unknwon">
-<!ENTITY noscriptAdd "Add">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Close">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Hide &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptNselForce "Show the &lt;NOSCRIPT&gt; element which follows a blocked &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/km-KH/noscript/noscript.properties b/extensions/noscript/chrome/locale/km-KH/noscript/noscript.properties
deleted file mode 100644
index 35e928f..0000000
--- a/extensions/noscript/chrome/locale/km-KH/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Allow Scripts Globally (dangerous)
-forbidGlobal=Forbid Scripts Globally (advised)
-allowLocal=Allow %S
-allowTemp=Temporarily allow %S
-forbidLocal=Forbid %S
-allowed.glb=Danger! Scripts Globally Allowed
-allowed.yes=Scripts Currently Allowed
-allowed.prt=Scripts Partially Allowed
-allowed.no=Scripts Currently Forbidden
-global.warning.title=Warning!
-global.warning.text=Scripts are going to be allowed globally (for every site).\nThis is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=Audio samples
-confirm=Are you sure?
-alwaysAsk=Always ask for confirmation
-notifyHide=Hide after %S seconds
-trust=Trust %S
-distrust=Mark %S as Untrusted
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You\'re about to ask for information about the \"%1$S\" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ko-KR/noscript/about.properties b/extensions/noscript/chrome/locale/ko-KR/noscript/about.properties
deleted file mode 100644
index 39aa97a..0000000
--- a/extensions/noscript/chrome/locale/ko-KR/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=FireFox(불여우)를 위한 한층 강화된 보안 기능: NoScript를 사용하면 여러분이 선택한 신뢰할 수 있는 도메인(예를 들면, 인터넷 뱅킹 웹 사이트)에 대해서만 JavaScript와 Java(또한 그 밖의 플러그인들 포함)를 허용합니다. 사용자 지정 목록(whitelist)에 기반을 둔 선점형 차단 접근 방식을 통해 기능에 제약을 받지 않고 보안 위협 요소들(알려진 위협 요소 뿐만 아니라 알려지지 않은 위협 요소까지도!)을 사전에 차단합니다. 전문가들 역시 "NoScript를 사용하면 FireFox가 좀더 안전해집니다!"라고 말하고 있습니다. :-)
-aboutTitle=%S 정보
-extensionContributors=도움을 주신 분들:
-extensionContributors.tip=확장 기능을 만든 사람들
-extensionCreatorLabel=작성자:
-changelog=변경기록
-changelog.tip=변경기록 보기
-license=라이센스
-license.tip=사용자 라이센스 읽기
-logo.tip=확장 기능 홈페이지 방문
-sponsor.tip=스폰서 홈페이지 방문
-informaction.tip=InformAction 홈페이지 방문
-extensionHomepage.tip=확장기능 홈페이지 방문
-extensionCreator.tip=작성자 홈페이지 방문
-version=버전 %S
diff --git a/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.dtd
deleted file mode 100644
index 53e0bd1..0000000
--- a/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "옵션...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript 옵션">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5 정보...">
-<!ENTITY noscriptPermissionsText "스크립트 실행을 허용할 웹 사이트를 지정할 수 있습니다. 스크립트를 허용할 사이트의 주소나 도메인 (예를 들면, &quot;http://www.site.com&quot; 또는 &quot;site.com&quot;)을 입력한 후 [허용] 버튼을 클릭합니다.">
-<!ENTITY noscriptWebAddress "웹 사이트 주소">
-<!ENTITY noscriptAllow "허용">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "금지">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "신뢰할 수 있는 사이트로 지정">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "신뢰할 수 없는 사이트로 지정">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "선택된 사이트 삭제">
-<!ENTITY noscriptGloballyEnabled "스크립트 전면 허용(위험)">
-<!ENTITY noscriptAutoReload "허용 정책이 변경되면 해당 페이지를 자동으로 다시 읽기">
-<!ENTITY noscriptGeneral "일반">
-<!ENTITY noscriptAppearance "모양">
-<!ENTITY noscriptShow "다음 기능들을 보여줍니다...">
-<!ENTITY noscriptCtxMenu "상황에 따른 메뉴">
-<!ENTITY noscriptStatusIcon "상태표시줄 아이콘">
-<!ENTITY noscriptFullAddr "전체 주소(http://www.noscript.net)">
-<!ENTITY noscriptFullDom "전체 도메인(www.noscript.net)">
-<!ENTITY noscriptBaseDom "2수준 도메인(noscript.net)">
-<!ENTITY noscriptTempCmd "임시 허용[...]">
-<!ENTITY noscriptSound "스크립트가 차단되었을 때 소리로 알림">
-<!ENTITY noscriptImport "가져오기">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "내보내기">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "차단된 스크립트에 대한 정보 보여주기">
-<!ENTITY noscriptNotify.bottom "하단에 메시지 표시">
-<!ENTITY noscriptSound.choose "선택">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "재생">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "기본 설정으로 복원">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "고급">
-<!ENTITY noscriptAdditionalPermissions "신뢰할 수 있는 사이트에 대해서 다음을 추가적으로 허용">
-<!ENTITY noscriptAllowClipboard "외부 클립보드로부터 리치 텍스트 복사 및 붙여넣기 허용">
-<!ENTITY noscriptAdditionalRestrictions "신뢰할 수 없는 사이트에 대한 추가적인 제한 조치">
-<!ENTITY noscriptPlugins "플러그인">
-<!ENTITY noscriptContentBlocker "이 제한 조치를 신뢰할 수 있는 사이트에도 적용">
-<!ENTITY noscriptForbidJava "Java™ 금지">
-<!ENTITY noscriptForbidXSLT "XSLT 금지">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™ 금지">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; 금지">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt; 금지">
-<!ENTITY noscriptForbidFonts "@font-face 금지">
-<!ENTITY noscriptForbidWebGL "WebGL 금지">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt; / &lt;VIDEO&gt; 금지">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® 금지">
-<!ENTITY noscriptForbidPlugins "다른 플러그인 금지">
-<!ENTITY noscriptReloadWarn "이 옵션은 새로운 페이지 또는 (수동으로) 페이지를 다시 읽어들일 때 적용됩니다.">
-<!ENTITY noscriptConfirmUnblock "일시적으로 개체를 허용할 것인지를 확인합니다.">
-<!ENTITY noscriptStatusLabel "상태바 레이블">
-<!ENTITY noscriptForbidBookmarklets "북마크릿(bookmarklets) 금지">
-<!ENTITY noscriptShowPlaceholder "플레이스홀더 아이콘 표시">
-<!ENTITY noscriptTruncateTitle "문서 제목에서 양쪽끝에 있는 공백을 제거">
-<!ENTITY noscriptFixLinks "JavaScript 링크 수정 시도">
-<!ENTITY noscriptAllowBookmarks "북마크를 이용한 사이트 열기 허용">
-<!ENTITY noscriptAllowViaBookmarks "북마크를 이용한 사이트 열기 허용">
-<!ENTITY noscriptAllowPing "&lt;A PING...&gt; 허용">
-<!ENTITY noscriptAllowLocalLinks "로컬 링크 허용">
-<!ENTITY noscriptForbidPing "&lt;A PING...&gt; 금지">
-<!ENTITY noscriptForbidMetaRefresh "&lt;NOSCRIPT&gt; 요소 내에 있는 META 리디렉션 제거">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "사용자 지정 목록">
-<!ENTITY noscriptPermissions "허용">
-<!ENTITY noscriptRefresh "새로고침">
-<!ENTITY noscriptNotifications "알림">
-<!ENTITY noscriptToolbarToggle "NoScript 툴바 버튼을 마우스 왼쪽버튼으로 클릭하면 현재 최상위 사이트에 대한 허용 상태를 허용/비허용으로 변경합니다.">
-<!ENTITY noscriptTrusted "신뢰할 수 있는 사이트">
-<!ENTITY noscriptUntrusted "신뢰할 수 없는 사이트">
-<!ENTITY noscriptUnknown "알려지지 않음">
-<!ENTITY noscriptAdd "추가">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "닫기">
-<!ENTITY noscriptSiteManager "사이트 관리자">
-<!ENTITY noscriptSecurityManager "보안 관리자">
-<!ENTITY noscriptPolicies "정책">
-<!ENTITY noscriptDefaultPolicies "기본 정책">
-<!ENTITY noscriptSitePolicies "사이트별 정책">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt; 요소를 숨김">
-<!ENTITY noscriptNselForce "차단된 &lt;SCRIPT&gt; 다음에 오는 &lt;NOSCRIPT&gt; 요소 표시">
-<!ENTITY noscriptAutoAllowTopLevel "일시적으로 최상위 사이트를 허용">
-<!ENTITY noscriptDescription "FireFox(불여우)를 위한 한층 강화된 보안 기능: NoScript를 사용하면 여러분이 선택한 신뢰할 수 있는 도메인(예를 들면, 인터넷 뱅킹 웹 사이트)에 대해서만 JavaScript와 Java(또한 그 밖의 플러그인들 포함)를 허용합니다. 사용자 지정 목록(whitelist)에 기반을 둔 선점형 차단 접근 방식을 통해 기능에 제약을 받지 않고 보안 위협 요소들(알려진 위협 요소 뿐만 아니라 알려지지 않은 위협 요소까지도!)을 사전에 차단합니다. 전문가들 역시 &quot;NoScript를 사용하면 FireFox가 좀더 안전해집니다!&quot;라고 말하고 있습니다. :-)">
-<!ENTITY noscriptOptBlockCssScanners "CSS 기반의 스캐너 차단">
-<!ENTITY noscriptOptFilterXGet "의심스러운 크로스-사이트 요청 차단">
-<!ENTITY noscriptOptFilterXPost "크로스-사이트 POST 요청을 데이터 손실이 없는 GET 요청으로 변환">
-<!ENTITY noscriptShowConsole "콘솔 보기...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "안전하지 않은 상태로 다시 읽기">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "안티-XSS 보호 예외 적용">
-<!ENTITY noscriptXssExceptions.description "다음 정규 표현식과 일치하는 대상은 XSS로부터 보호하지 않습니다">
-<!ENTITY noscriptMatchSample "패턴 매칭 예제:">
-<!ENTITY noscriptReset "설정 복원">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "기본 설정으로 복원">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "일시적인 허용 취소">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "신뢰할 수 없는 사이트로 등록된 사이트의 개체에 대해서는 플레이스홀더 표시하지 않음">
-<!ENTITY noscriptCollapseBlockedObjects "차단된 개체는 사용하지 않음">
-<!ENTITY noscriptExceptions "예외...">
-<!ENTITY noscriptBlockedObjects "차단된 개체들">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "신뢰할 수 없음으로 표시된 사이트의 모든 개체를 차단">
-<!ENTITY noscriptTempAllowPage "일시적으로 허용">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "이 페이지 모두 허용">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "페이지 권한을 영구적으로 저장하기">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS 자주묻는질문...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "행위">
-<!ENTITY noscriptHttps.cookies "쿠키">
-<!ENTITY noscriptHttps.description "안전한(HTTPS) 연결에 대해서만 웹 컨텐츠 활성화 허용:">
-<!ENTITY noscriptHttps.never "항상 아님">
-<!ENTITY noscriptHttps.proxy "프락시를 사용할 때(Tor 추천)">
-<!ENTITY noscriptHttps.always "항상">
-<!ENTITY noscriptHttpsForced "다음 사이트에 대해서 강제로 안전한(HTTPS) 연결 시도:">
-<!ENTITY noscriptHttpsForcedExceptions "다음 사이트에 대해서는 안전한(HTTPS) 연결 시도 안함:">
-<!ENTITY noscriptSecureCookies "자동 보안 쿠기 관리자 활성화">
-<!ENTITY noscriptSecureCookiesForced "다음 사이트에 대해서는 HTTPS 상의 모든 쿠키를 강제로 암호화:">
-<!ENTITY noscriptSecureCookiesExceptions "다음 사이트에 대해서는 HTTPS 상의 안전하지 않은 쿠키를 무시:">
-<!ENTITY noscriptClearClickTitle "ClearClick 경고">
-<!ENTITY noscriptClearClickHeader "잠재적인 클릭재킹(Clickjacking) 또는 UI 변경 시도!">
-<!ENTITY noscriptClearClickDescription "NoScript가 숨겨진 요소에서 처리하는 마우스나 키보드 작동을 가로챘습니다. 상단에 있는 이미지를 클릭하여 차단된 버전과 그렇지 않은 버전간에 전환할 수 있습니다.">
-<!ENTITY noscriptClearClickOpt "페이지에 대해서 ClearClick 보호 수행...">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "신뢰된 페이지">
-<!ENTITY noscriptUntrustedPagesAdj "신뢰되지 않은 페이지">
-<!ENTITY noscriptKeepLocked "이 요소를 잠금니다(추천)">
-<!ENTITY noscriptEmbeddings "포함된 객체들">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.properties b/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.properties
deleted file mode 100644
index 7cfd317..0000000
--- a/extensions/noscript/chrome/locale/ko-KR/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=스크립트 전면 허용(위험)
-forbidGlobal=스크립트 전면 금지(권장 사항)
-allowLocal=%S 허용
-allowTemp=%S 임시 허용
-forbidLocal=%S 금지
-allowed.glb=위험합니다! 스크립트가 전면적으로 허용되었습니다.
-allowed.yes=스크립트가 허용되었습니다.
-allowed.prt=스크립트가 부분적으로 허용되었습니다.
-allowed.no=스크립트가 금지되었습니다.
-global.warning.title=경고!
-global.warning.text=스크립트가 전면적으로(모든 사이트에 대해서) 허용될 예정입니다.\n이로인해 잠재적인 위험이 발생할 수 있습니다.\n진행하시겠습니까?
-audio.samples=오디오 샘플
-confirm=확실합니까?
-alwaysAsk=항상 확인
-notifyHide=%S초 후 숨김
-trust=%S를 신뢰합니다.
-distrust=%S를 신뢰할 수 없는 사이트로 지정
-untrustedOrigin=신뢰할 수 없는 출처
-xss.notify.generic=NoScript가 %S에서 시도된 크로스-사이트 스크립팅 (CSS)를 필터링했습니다. 기술적인 세부 사항은 콘솔에서 확인할 수 있습니다.
-xss.notify.showConsole=콘솔 보기...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=의심스러운 요청을 처리했습니다. [%2$S]에서 요청된 원본 URL은 [%1$S] , 처리된 URL: [%3$S]
-xss.reason.filterXGetRef=의심스러운 레퍼러 요청을 처리했습니다. [%2$S]에서 요청된 URL: [%1$S] , 처리된 레퍼러: [%3$S]
-xss.reason.filterXPost=[%2$S]에서 [%1$S]로 업로드하는 것을 처리했습니다. 다운로드만 가능한 GET 요청으로 변형되었습니다.
-unsafeReload.warning=[%3$S]에서\n\n의심스로운 %1$S [%2$S]를 다시 읽고 있습니다.\n\nNoScript는 이 요청을 보호하지 않을 것입니다!\n
-metaRefresh.notify=NoScript가 <NOSCRIPT>에 있는 <META> 리디렉션을 차단했습니다. %S(%S초).
-metaRefresh.notify.follow=리디렉션 따라가기
-metaRefresh.notify.follow.accessKey=F
-notify.options=옵션
-notify.options.accessKey=O
-reset.title=NoScript 설정 복원
-reset.warning=이제 NoScript의 모든 설정과 사이트 허용 정보가 기본 값으로 복원됩니다.\n이 작업은 취소할 수 없습니다.\n계속 하시겠습니까?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/lt/noscript/about.properties b/extensions/noscript/chrome/locale/lt/noscript/about.properties
deleted file mode 100644
index 7745d71..0000000
--- a/extensions/noscript/chrome/locale/lt/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Papildoma apsauga jūsų Firefox naršyklei: NoScript leidžia vykdyti JavaScript, Java (ir kitus įskiepius) tik jūsų pasirinktiems ir patikimiems domenams (pvz., jūsų banko interneto svetainei). Ši baltuoju sąrašu pagrįsta išankstinio blokavimo taktika neleidžia išnaudoti saugumo skylių (žinomų ir net nežinomų!) neprarandant funkcionalumo... Ekspertai pritaria: Firefox tikrai saugesnis su NoScript :-)
-aboutTitle=Apie %S
-extensionContributors=Pagalbininkai:
-extensionContributors.tip=Žmonės, kuriems reikia dėkoti už šį papildinį
-extensionCreatorLabel=Autorius:
-changelog=Keitimų žurnalas
-changelog.tip=Rodyti keitimų žurnalą
-license=Licencija
-license.tip=Perskaityti vartotojo licenciją
-logo.tip=Aplankyti papildinio interneto svetainę
-sponsor.tip=Aplankyti rėmėjo interneto svetainę
-informaction.tip=Aplankyti InformAction interneto svetainę
-extensionHomepage.tip=Aplankyti papildinio interneto svetainę
-extensionCreator.tip=Aplankyti autoriaus interneto svetainę
-version=Versija %S
diff --git a/extensions/noscript/chrome/locale/lt/noscript/noscript.dtd b/extensions/noscript/chrome/locale/lt/noscript/noscript.dtd
deleted file mode 100644
index aee6d5c..0000000
--- a/extensions/noscript/chrome/locale/lt/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Nuostatos...">
-<!ENTITY noscriptOptions.accesskey "N">
-<!ENTITY noscriptOptionsLong "NoScript nuostatos">
-<!ENTITY noscriptAbout "Apie NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Jūs galite nurodyti, kurioms interneto svetainėms suteikiamas leidimas vykdyti programinius kodus. Įveskite adresą arba domeną (pvz., &quot;http://www.svetaine.lt&quot; arba &quot;svetaine.lt&quot;) svetainės, kuriai norite suteikti leidimą ir spauskite Leisti.">
-<!ENTITY noscriptWebAddress "Interneto svetainės adresas:">
-<!ENTITY noscriptAllow "Leisti">
-<!ENTITY noscriptAllow.accesskey "L">
-<!ENTITY noscriptForbid "Drausti">
-<!ENTITY noscriptForbid.accesskey "D">
-<!ENTITY noscriptTrust "Pažymėti patikimu">
-<!ENTITY noscriptTrust.accesskey "P">
-<!ENTITY noscriptUntrust "Pažymėti nepatikimu">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Pašalinti pažymėtas svetaines">
-<!ENTITY noscriptGloballyEnabled "Programiniai kodai leidžiami visuotinai (pavojinga)">
-<!ENTITY noscriptAutoReload "Kai leidimai puslapiams pasikeičia, automatiškai įkelti puslapius iš naujo">
-<!ENTITY noscriptGeneral "Bendrosios">
-<!ENTITY noscriptAppearance "Išvaizda">
-<!ENTITY noscriptShow "Rodyti...">
-<!ENTITY noscriptCtxMenu "Kontekstinį meniu">
-<!ENTITY noscriptStatusIcon "Būsenos juostos piktogramą">
-<!ENTITY noscriptFullAddr "Pilniems adresams (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Pilniems domenams (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Antrojo lygio domenams (noscript.net)">
-<!ENTITY noscriptTempCmd "Laikinai leisti [...]">
-<!ENTITY noscriptSound "Groti garsinį pranešimą, kai programiniai kodai blokuojami">
-<!ENTITY noscriptImport "Importuoti">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksportuoti">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Rodyti pranešimą apie blokuotus programinius kodus">
-<!ENTITY noscriptNotify.bottom "Patalpinti pranešimą apačioje">
-<!ENTITY noscriptSound.choose "Pasirinkti">
-<!ENTITY noscriptSound.choose.accesskey "P">
-<!ENTITY noscriptSound.play "Groti">
-<!ENTITY noscriptSound.play.accesskey "G">
-<!ENTITY noscriptSound.reset "Atstatyti">
-<!ENTITY noscriptSound.reset.accesskey "A">
-<!ENTITY noscriptAdvanced "Papildomi">
-<!ENTITY noscriptAdditionalPermissions "Papildomi leidimai patikimoms svetainėms">
-<!ENTITY noscriptAllowClipboard "Leisti formatuoto teksto kopijavimą ir įterpimą iš iškarpinės">
-<!ENTITY noscriptAdditionalRestrictions "Papildomi draudimai nepatikimoms svetainėms">
-<!ENTITY noscriptPlugins "Įskiepiai">
-<!ENTITY noscriptContentBlocker "Pritaikyti šiuos draudimus taip pat ir patikimoms svetainėms">
-<!ENTITY noscriptForbidJava "Uždrausti Java™">
-<!ENTITY noscriptForbidXSLT "Uždrausti XSLT">
-<!ENTITY noscriptForbidWebGL "Uždrausti WebGL">
-<!ENTITY noscriptForbidSilverlight "Uždrausti Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Uždrausti &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Uždrausti &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Uždrausti @font-face">
-<!ENTITY noscriptForbidMedia "Uždrausti &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Uždrausti Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Uždrausti kitus įskiepius">
-<!ENTITY noscriptReloadWarn "Šios nuostatos įsigalios naujoms arba rankiniu būdu įkrautoms iš naujo svetainėms">
-<!ENTITY noscriptConfirmUnblock "Prašyti patvirtinimo prieš laikinai atblokuojant objektą">
-<!ENTITY noscriptStatusLabel "Būsenos juostos žymą">
-<!ENTITY noscriptForbidBookmarklets "Uždrausti JavaScript kuriamus adresyno įrašus">
-<!ENTITY noscriptShowPlaceholder "Rodyti puslapio talpintojo piktogramą">
-<!ENTITY noscriptTruncateTitle "Nerodyti dokumentų pavadinimų">
-<!ENTITY noscriptFixLinks "Bandyti sutaisyti JavaScript nuorodas">
-<!ENTITY noscriptAllowBookmarks "Suteikti leidimą svetainėms, atidarytoms iš adresyno">
-<!ENTITY noscriptAllowViaBookmarks "Suteikti leidimą svetainėms, atidarytoms iš adresyno">
-<!ENTITY noscriptAllowPing "Leisti &lt;A PING...&gt; elementus">
-<!ENTITY noscriptAllowLocalLinks "Leisti nuorodas į vietines bylas">
-<!ENTITY noscriptForbidPing "Uždrausti &lt;A PING...&gt; elementus">
-<!ENTITY noscriptForbidMetaRefresh "Uždrausti META peradresavimus &lt;NOSCRIPT&gt; elementuose">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "Ž">
-<!ENTITY noscriptNotifyMeta "Rodyti pranešimus apie užblokuotus META peradresavimus">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Baltasis sąrašas">
-<!ENTITY noscriptPermissions "Leidimai">
-<!ENTITY noscriptRefresh "Atnaujinti">
-<!ENTITY noscriptNotifications "Pranešimai">
-<!ENTITY noscriptToolbarToggle "Kairysis paspaudimas ant NoScript įrankių juostos mygtuko keičia atidarytos svetainės leidimus">
-<!ENTITY noscriptTrusted "Patikimi">
-<!ENTITY noscriptUntrusted "Nepatikimi">
-<!ENTITY noscriptUnknown "Nežinomi">
-<!ENTITY noscriptAdd "Pridėti">
-<!ENTITY noscriptAdd.accesskey "P">
-<!ENTITY noscriptClose "Uždaryti">
-<!ENTITY noscriptSiteManager "Svetainių vadovas">
-<!ENTITY noscriptSecurityManager "Saugumo vadovas">
-<!ENTITY noscriptPolicies "Nuostatos">
-<!ENTITY noscriptDefaultPolicies "Numatytos nuostatos">
-<!ENTITY noscriptSitePolicies "Specifinės svetainių nuostatos">
-<!ENTITY noscriptNselNever "Paslėpti &lt;NOSCRIPT&gt; elementus">
-<!ENTITY noscriptNselForce "Rodyti &lt;NOSCRIPT&gt; elementus, kurie eina po blokinio &lt;SCRIPT&gt; elemento">
-<!ENTITY noscriptAutoAllowTopLevel "Pagal nutylėjimą, laikinai suteikti leidimą aukščiausiojo lygio svetainių adresams">
-<!ENTITY noscriptDescription "Papildoma apsauga jūsų Firefox naršyklei: NoScript leidžia JavaScript, Java (ir kitus įskiepius) tik jūsų pasirinktiems patikimiems domenams (pvz. jūsų banko interneto svetainei). Ši baltuoju sąrašu pagrįsta išankstinio blokavimo taktika neleidžia panaudoti saugumo skylių (žinomų ir net nežinomų!) neprarandant funkcionalumo... Ekspertai pritaria: Firefox tikrai saugesnis su NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blokuoti ieškiklius, pagrįstus CSS">
-<!ENTITY noscriptOptFilterXGet "Nukenksminti įtartinas tarp-svetainines užklausas">
-<!ENTITY noscriptOptFilterXPost "Paversti tarp-svetainines POST užklausas į tuščias GET užklausas">
-<!ENTITY noscriptShowConsole "Rodyti konsolę">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS DPK...">
-<!ENTITY noscriptXssFaq.accesskey "D">
-<!ENTITY noscriptUnsafeReload "Nesaugus perkrovimas">
-<!ENTITY noscriptUnsafeReload.accesskey "P">
-<!ENTITY noscriptXssExceptions "Anti-XSS apsaugos išimtys">
-<!ENTITY noscriptXssExceptions.description "Adresai, atitinkantys šias reguliarias išraiškas, NEBUS apsaugoti nuo XSS">
-<!ENTITY noscriptMatchSample "Adreso pavyzdys:">
-<!ENTITY noscriptReset "Atstatyti">
-<!ENTITY noscriptReset.accesskey "A">
-<!ENTITY noscriptResetDef "Atstatyti į pradines reikšmes">
-<!ENTITY noscriptResetDef.accesskey "Į">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Atšaukti laikinus leidimus">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "Be puslapio laikytojų, objektam iš nepatikimų svetainių">
-<!ENTITY noscriptCollapseBlockedObjects "Suskleisti blokuotus objektus">
-<!ENTITY noscriptExceptions "Išimtys...">
-<!ENTITY noscriptBlockedObjects "Užblokuoti objektai">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Užblokuoti visus objektus atkeliaujančius iš nepatikimos svetainės">
-<!ENTITY noscriptTempAllowPage "Šioje svetainėje laikinai leisti viską">
-<!ENTITY noscriptTempAllowPage.accesskey "L">
-<!ENTITY noscriptAllowPage "Šiame puslapyje leisti viską">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Padaryti puslapio leidimus nuolatiniais">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS DUK…">
-<!ENTITY noscriptHttpsFaq.accesskey "D">
-<!ENTITY noscriptHttps.behavior "Elgsena">
-<!ENTITY noscriptHttps.cookies "Slapukai">
-<!ENTITY noscriptHttps.description "Uždrausti aktyvų interneto turinį, nebent jis atkeliauja iš saugaus (HTTPS) prisijungimo:">
-<!ENTITY noscriptHttps.never "Niekada">
-<!ENTITY noscriptHttps.proxy "Kai naudojamas tarpinis serveris (rekomenduojama su Tor)">
-<!ENTITY noscriptHttps.always "Visada">
-<!ENTITY noscriptHttpsForced "Priversti šias svetaines naudoti saugius (HTTPS) prisijungimus:">
-<!ENTITY noscriptHttpsForcedExceptions "Šias svetaines niekada neversti naudoti saugių (HTTPS) prisijungimų:">
-<!ENTITY noscriptSecureCookies "Įgalinti automatinį saugių slapukų tvarkymą">
-<!ENTITY noscriptSecureCookiesForced "Priverstinai šifruoti visus slapukus perduotus per HTTPS iš šių svetainių:">
-<!ENTITY noscriptSecureCookiesExceptions "Nepaisyti nesaugių slapukų perduotų HTTPS iš šių svetainių:">
-<!ENTITY noscriptClearClickTitle "ClearClick Įspėjimas">
-<!ENTITY noscriptClearClickHeader "Potencialus Clickjacking / Bandymas peradresuoti VS(UI)!">
-<!ENTITY noscriptClearClickDescription "NoScript perėmė pelės ar klaviatūros sąveiką su dalinai paslėptu elementu. Paspauskite aukščiau esantį paveikslėlį perjungimui tarp švarios ir neaiškios versijos.">
-<!ENTITY noscriptClearClickOpt "ClearClick apsauga puslapiuose...">
-<!ENTITY noscriptClearClickReport "Pranešti">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Pranešimo ID:">
-<!ENTITY noscriptTrustedPagesAdj "patikimas">
-<!ENTITY noscriptUntrustedPagesAdj "nepatikimas">
-<!ENTITY noscriptKeepLocked "Laikyti šį elementą užrakintą (rekomenduojama)">
-<!ENTITY noscriptEmbeddings "Įterpimai">
-<!ENTITY noscriptPrev "Ankstesnis">
-<!ENTITY noscriptNext "Sekantis">
-<!ENTITY noscriptFrameOptErr.title "Šio turinio neįmanoma atvaizduoti rėmelyje">
-<!ENTITY noscriptFrameOptErr.desc "Siekiant apsaugoti jus, šio turinio skleidėjas neleidžia jo atvaizduoti rėmelyje.">
-<!ENTITY noscriptFrameOptErr.link "Paspauskite čia norėdami atverti šį turinį naujame lange">
-<!ENTITY noscriptBookmarkSync "Atsarginė NoScript kopija žymelėje, kad būtų lengva sinchronizuoti">
-<!ENTITY noscriptShowReleaseNotes "Atnaujinant parodyti leidimo pastabas">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Taisyklės:">
-<!ENTITY ABE.enabled.label "Įjungti ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Leisti svetainėms siūlyti jų savus taisyklių rinkinius">
-<!ENTITY ABE.edit.label "Taisa...">
-<!ENTITY ABE.edit.accesskey "T">
-<!ENTITY ABE.enable.label "Įjungti">
-<!ENTITY ABE.enable.accesskey "g">
-<!ENTITY ABE.disable.label "Išjungti">
-<!ENTITY ABE.disable.accesskey "j">
-<!ENTITY ABE.refresh.label "Atnaujinti">
-<!ENTITY ABE.refresh.accesskey "A">
-<!ENTITY noscriptUninstall "Išdiegti">
-<!ENTITY noscriptRecentBlocked "Nesenai užblokuotos svetainės">
-<!ENTITY noscriptExternalFilters "Išoriniai filtrai">
-<!ENTITY noscriptEF.enable "Įjungti išorinius filtrus">
-<!ENTITY noscriptEF.add "Naujas filtras...">
-<!ENTITY noscriptEF.executable "Vykdomasis failas:">
-<!ENTITY noscriptEF.browse "Naršyti...">
-<!ENTITY noscriptEF.contentType "Turinio tipas (MIME) kuris turi būti filtruojamas (sutampantis ar reguliariosios išraiškos):">
-<!ENTITY noscriptEF.exceptions "Nefiltruoti objektų atkeliaujančių iš šių puslapių:">
-<!ENTITY noscriptEF.remove "Pašalinti">
-<!ENTITY noscriptPreset "Saugumo lygis">
-<!ENTITY noscriptPreset.off "Išjungti (jūs čia rimtai?!)">
-<!ENTITY noscriptPreset.low "Lengvas (Juodasis sąrašas + Web saugumas)">
-<!ENTITY noscriptPreset.medium "Klasikinis (Baltasis sąrašas + Web saugumas)">
-<!ENTITY noscriptPreset.high "Tvirtovė (Visiškas užsidarymas)">
-<!ENTITY noscript.hoverUI "Atverkite leidimų meniu, kai pelė užvedama virš NoScript piktogramos">
-<!ENTITY noscriptDonate "Paaukoti">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/lt/noscript/noscript.properties b/extensions/noscript/chrome/locale/lt/noscript/noscript.properties
deleted file mode 100644
index 999caf3..0000000
--- a/extensions/noscript/chrome/locale/lt/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Leisti programinius kodus visuotinai (pavojinga)
-forbidGlobal=Drausti programinius kodus visuotinai (patartina)
-allowLocal=Leisti %S
-allowTemp=Laikinai leisti %S
-forbidLocal=Drausti %S
-allowed.glb=Pavojinga! Programiniai kodai visuotinai leidžiami
-allowed.yes=Dabar leidžiami programiniai kodai
-allowed.prt=Iš dalies leidžiami programiniai kodai
-allowed.no=Dabar draudžiami programiniai kodai
-global.warning.title=Įspėjimas!
-global.warning.text=Programiniai kodai bus leidžiami visuotinai (visoms svetainėms).\n Tai gali būti pavojinga.\nAr tikrai norite tęsti?
-audio.samples=Audio pavyzdžiai
-confirm=Ar jūs tikras?
-alwaysAsk=Visada prašyti pavirtinti
-notifyHide=Paslėpti po %S sekundžių
-trust=Pasitikėti %S
-distrust=Pažymėti %S nepatikimu
-untrustedOrigin=nepatikimas šaltinis
-xss.notify.generic=NoScript nufiltravo galimą mėginimą paleisti tarp-svetaininį programinį kodą (XSS) iš %S. Techninė informacija įrašyta į konsolę.
-xss.notify.showConsole=Rodyti konsolę...
-xss.notify.showConsole.accessKey=k
-xss.reason.filterXGet=Nukenksminta įtartina užklausa. Pradinis URL [%1$S] užklaustas iš [%2$S]. Nukenksmintas URL: [%3$S].
-xss.reason.filterXGetRef=Nukenksmintas įtartinas užklausos siuntėjas. URL [%1$S] užklaustas iš [%2$S]. Nukenksmintas siuntėjas: [%3$S].
-xss.reason.filterXPost=Nukenksmintas įtartinas duomenų siuntimas į [%1$S] iš [%2$S]: paversta į GET užklausą, skirtą tik duomenų gavimui.
-unsafeReload.warning=Iš naujo NESAUGIAI įkeliama įtartina \n\n%1$S [%2$S]\n\n IŠ [%3$S]\n\nNoScript NEAPSAUGOS šios užklausos!\n
-metaRefresh.notify=NoScript blokavo <META> peradresavimą <NOSCRIPT> elemente: %S po %S sekundžių.
-metaRefresh.notify.follow=Tęsti peradresavimą
-metaRefresh.notify.follow.accessKey=T
-notify.options=Nuostatos
-notify.options.accessKey=N
-reset.title=Atstatyti NoScript
-reset.warning=VISOS NoScript nuostatos ir svetainių leidimai bus iš karto atstatyti į pradines reikšmes.\nŠis veiksmas neatšaukiamas.\nAr norite tęsti?
-bookmarkSync.title=NoScript konfigūracijos žyma
-bookmarkSync.message=Ši žyma NEskirta atverti, ji skirta sinchronizavimui naudojant Weave ar XMarks plėtinius.
-bookmarkSync.confirm=Noscript rado dalinai išsaugotą konfigūracijos žymą \n\n%S.\nAr tikrai norite perrašyti savo vietinę konfigūraciją su šios žymos turiniu?
-ABE.notify=Užklausimo %1$S neleido ABE: <%2$S> %3$S
-ABE.chooseEditor=Pasirinkite tekstinį redaktorių skirtą ABE taisyklių redagvimui
-ABE.syntaxError=ABE taisyklių nustatyme aptikta sintaksės klaida!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Leisti iš visų %S
-allowTempFrom=Laikinai leisti iš visų %S
-siteInfo.confirm=Jūs ruošiatės užklausti informacijos apie „%1$S“ puslapį\nišsiunčiant užklausimą į %2$S.\nAr norite tęsti?
-siteInfo.tooltip=Svetainės informacijai „vidurinysis pelės mygtukas“ ar „shift+paspaudimas“...
-ef.activate=Filtras %S
-ef.options=%S parinktys...
-ef.newName=Įveskite naujo filtro pavadinimą:
-ef.locateExe=Pasirinkite vykdomąjį failą skirtą %S filtrui
-disable=Išjungti %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/mk-MK/noscript/about.properties b/extensions/noscript/chrome/locale/mk-MK/noscript/about.properties
deleted file mode 100644
index a5eb31f..0000000
--- a/extensions/noscript/chrome/locale/mk-MK/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Додатна заштита за вашиот прелистувач Firefox:NoScript дозволува JavaScript, Java (и други додатоци) само за домени од доверба по ваш избор (на пр. страницата од вашата банка). Овај пристап базиран на блокирање брз база на бела листа ги спречува искористувањата на сигурносните слабости (познати и непознати!) без загуба на функционалност... Екпертите ќе се согласат: Firefox е навистина посигурен со NoScript :-)
-aboutTitle=За %S
-extensionContributors=Соработници:
-extensionContributors.tip=Луѓе на кои би сакале да им се заблагодарите за ова проширување.
-extensionCreatorLabel=Автор:
-changelog=Промени
-changelog.tip=Покажи ги промените
-license=Дозвола
-license.tip=Прочитајте ја дозволата за употреба
-logo.tip=Посетете ја интернет страницата на проширувањето
-sponsor.tip=Посетете ја интернет страницата на спонзорот
-informaction.tip=Посетете ја интернет страницата на InformAction
-extensionHomepage.tip=Посетете ја интернет страницата на проширувањето
-extensionCreator.tip=Посетете ја интернет страницата на авторот
-version=Верзија %S
diff --git a/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.dtd b/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.dtd
deleted file mode 100644
index d51b003..0000000
--- a/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Опции...">
-<!ENTITY noscriptOptions.accesskey "О">
-<!ENTITY noscriptOptionsLong "NoScript Опции">
-<!ENTITY noscriptAbout "За NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Можете да ги назначите страните, на кои што скриптите ќе бидат дозволени. Напишете ја дозволената адреса (на пример http://www.site.com или site.com) и кликнете „Дозволи“">
-<!ENTITY noscriptWebAddress "Адреса на дозволената веб страна:">
-<!ENTITY noscriptAllow "Дозволи">
-<!ENTITY noscriptAllow.accesskey "Д">
-<!ENTITY noscriptForbid "Забрани">
-<!ENTITY noscriptForbid.accesskey "З">
-<!ENTITY noscriptTrust "Обележи како страна од доверба">
-<!ENTITY noscriptTrust.accesskey "д">
-<!ENTITY noscriptUntrust "Обележи како страна без доверба">
-<!ENTITY noscriptUntrust.accesskey "б">
-<!ENTITY noscriptRemoveSelected "Отстрани ги избраните страници од листата на дозволени">
-<!ENTITY noscriptGloballyEnabled "Општо овозможени скрипти (можност за опасност)">
-<!ENTITY noscriptAutoReload "Автоматско превчитување на страните при промена на дозволата">
-<!ENTITY noscriptGeneral "Општо">
-<!ENTITY noscriptAppearance "Изглед">
-<!ENTITY noscriptShow "Прикажи...">
-<!ENTITY noscriptCtxMenu "Контекстуално мени (при десен клик)">
-<!ENTITY noscriptStatusIcon "Икона на статусната лента">
-<!ENTITY noscriptFullAddr "Целосни адреси (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Целосни домени (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Основа на доменот (noscript.net)">
-<!ENTITY noscriptTempCmd "Привремено дозволи за [...]">
-<!ENTITY noscriptSound "Звук при блокирање на скрипти">
-<!ENTITY noscriptImport "Увези листа на дозволени адреси">
-<!ENTITY noscriptImport.accesskey "У">
-<!ENTITY noscriptExport "Извези">
-<!ENTITY noscriptExport.accesskey "И">
-<!ENTITY noscriptNotify "Порака при блокирање на скрипти">
-<!ENTITY noscriptNotify.bottom "Смести ја пораката на дното">
-<!ENTITY noscriptSound.choose "Одберете звук">
-<!ENTITY noscriptSound.choose.accesskey "О">
-<!ENTITY noscriptSound.play "Пушти го звукот">
-<!ENTITY noscriptSound.play.accesskey "ш">
-<!ENTITY noscriptSound.reset "Врати го основниот звук">
-<!ENTITY noscriptSound.reset.accesskey "р">
-<!ENTITY noscriptAdvanced "Напредно">
-<!ENTITY noscriptAdditionalPermissions "Додатни овластувања за одобрени страници">
-<!ENTITY noscriptAllowClipboard "Дозволи вметнување на форматиран текст (на пример ХТМЛ)">
-<!ENTITY noscriptAdditionalRestrictions "Додатни забрани за неодобрени страници">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Примени ги овие ограничувања исто така и за страниците од доверба">
-<!ENTITY noscriptForbidJava "Оневозможи Јава (Java™)">
-<!ENTITY noscriptForbidXSLT "Оневозможи Јава (XSLT)">
-<!ENTITY noscriptForbidSilverlight "Оневозможи Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Оневозможи &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Оневозможи &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Оневозможи @font-face">
-<!ENTITY noscriptForbidWebGL "Оневозможи WebGL">
-<!ENTITY noscriptForbidMedia "Оневозможи &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Оневозможи Макромедија Флеш (Macromedia® Flash®)">
-<!ENTITY noscriptForbidPlugins "Оневозможи ги другите додатоци">
-<!ENTITY noscriptReloadWarn "Овие подесувања ќе важат при следното вчитување на страниците">
-<!ENTITY noscriptConfirmUnblock "Побарај одобрување пред привремено одблокирање на објектот">
-<!ENTITY noscriptStatusLabel "Информација на статусната лента">
-<!ENTITY noscriptForbidBookmarklets "Оневозможи зачувување на врската">
-<!ENTITY noscriptShowPlaceholder "Покажи икона на резервираното место">
-<!ENTITY noscriptTruncateTitle "Скрати ги насловите на документите">
-<!ENTITY noscriptFixLinks "Обиди се да ги поправиш JavaScript линковите">
-<!ENTITY noscriptAllowBookmarks "Дозволи ги страниците отворени преку обележувачите">
-<!ENTITY noscriptAllowViaBookmarks "Дозволи ги страниците отворени преку обележувачите">
-<!ENTITY noscriptAllowPing "Овозможи следење на вашите кликови преку атрибутот „ping“ (&lt;a ping=...&gt;)">
-<!ENTITY noscriptAllowLocalLinks "Дозволи local links">
-<!ENTITY noscriptForbidPing "Оневозможи следење на вашите кликови преку атрибутот „ping“ (&lt;a ping=...&gt;)">
-<!ENTITY noscriptForbidMetaRefresh "Забрани „META“ пренасочувања во &lt;noscript&gt; елементи">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "З">
-<!ENTITY noscriptNotifyMeta "Покажи порака за блокираните „META“ пренасочувања">
-<!ENTITY noscriptNotifyMeta.accesskey "П">
-<!ENTITY noscriptWhitelist "Бела листа">
-<!ENTITY noscriptPermissions "Дозволи">
-<!ENTITY noscriptRefresh "Освежи">
-<!ENTITY noscriptNotifications "Известувања">
-<!ENTITY noscriptToolbarToggle "Со лев клик на копчето „NoScript“ од алатникот се менуваат дозволите за моментно отворената страна (главниот домен)">
-<!ENTITY noscriptTrusted "Со доверба">
-<!ENTITY noscriptUntrusted "Без доверба">
-<!ENTITY noscriptUnknown "Непознато">
-<!ENTITY noscriptAdd "Додади">
-<!ENTITY noscriptAdd.accesskey "Д">
-<!ENTITY noscriptClose "Затвори">
-<!ENTITY noscriptSiteManager "Организатор на места">
-<!ENTITY noscriptSecurityManager "Безбедносен управител">
-<!ENTITY noscriptPolicies "Начела">
-<!ENTITY noscriptDefaultPolicies "Основни начела">
-<!ENTITY noscriptSitePolicies "Посебни начела за местото">
-<!ENTITY noscriptNselNever "Никогаш не покажувај &lt;noscript&gt; елементи">
-<!ENTITY noscriptNselForce "Покажувај ги &lt;noscript&gt; елементите што се по блокирани &lt;SCRIPT&gt; елементи">
-<!ENTITY noscriptAutoAllowTopLevel "Привремено дозволи за сите главни домени">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Покажи ја Конзолата...">
-<!ENTITY noscriptShowConsole.accesskey "П">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Небезбедно Вчитување">
-<!ENTITY noscriptUnsafeReload.accesskey "В">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected aginst XSS">
-<!ENTITY noscriptMatchSample "Примерок кој одговара на шемата:">
-<!ENTITY noscriptReset "Врати ги старите вредности">
-<!ENTITY noscriptReset.accesskey "В">
-<!ENTITY noscriptResetDef "Врати ги старите вредности">
-<!ENTITY noscriptResetDef.accesskey "с">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Отповикај ги Привремените Дозволи">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Спушти ги блокираните објекти">
-<!ENTITY noscriptExceptions "Исклучоци...">
-<!ENTITY noscriptBlockedObjects "Блокирани Објекти">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Блокирај го секој објект кој доаѓа од страница означена како без доверба">
-<!ENTITY noscriptTempAllowPage "Привремено дозволи ја целата оваа страница">
-<!ENTITY noscriptTempAllowPage.accesskey "П">
-<!ENTITY noscriptAllowPage "Дозволи ја целата оваа страница">
-<!ENTITY noscriptAllowPage.accesskey "Д">
-<!ENTITY noscriptTempToPerm "Направи ги овие дозволи на страницата трајни">
-<!ENTITY noscriptTempToPerm.accesskey "Н">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Однесување">
-<!ENTITY noscriptHttps.cookies "Колачиња">
-<!ENTITY noscriptHttps.description "Забрани активна веб содржина освен ако не доаѓа од безбедно (HTTPS) поврзување:">
-<!ENTITY noscriptHttps.never "Никогаш">
-<!ENTITY noscriptHttps.proxy "Кога се користи прокси(препорачливо со Tor)">
-<!ENTITY noscriptHttps.always "Секогаш">
-<!ENTITY noscriptHttpsForced "Присили ги следните страници да користат безбедни (HTTPS) поврзувања:">
-<!ENTITY noscriptHttpsForcedExceptions "Никогаш не присилувај безбедни (HTTPS) поврзувања за следните страници:">
-<!ENTITY noscriptSecureCookies "Овозможи Автоматски Менаџмент на Безбедните Колачиња">
-<!ENTITY noscriptSecureCookiesForced "Присили енкрипција за сите колачиња поставени од следните страници преку HTTPS:">
-<!ENTITY noscriptSecureCookiesExceptions "Игнорирај несигурни колачиња поставени од следните страници преку HTTPS:">
-<!ENTITY noscriptClearClickTitle "ClearClick Предупредување">
-<!ENTITY noscriptClearClickHeader "Потенцијален обид за Clickjacking / UI Redressing!">
-<!ENTITY noscriptClearClickDescription "NoScript пресретна интеракција на глушецот или тастатурата со делумно скриен елемент. Кликни на сликата погоре за промена помеѓу спречената и чистата верзија.">
-<!ENTITY noscriptClearClickOpt "ClearClick заштита на страниците...">
-<!ENTITY noscriptClearClickReport "Извештај">
-<!ENTITY noscriptClearClickReport.accesskey "И">
-<!ENTITY noscriptClearClickReportId "Ид. на Извештајот:">
-<!ENTITY noscriptTrustedPagesAdj "со доверба">
-<!ENTITY noscriptUntrustedPagesAdj "без доверба">
-<!ENTITY noscriptKeepLocked "Задржи го овој елемент заклучен (препорачливо)">
-<!ENTITY noscriptEmbeddings "Вградени Објекти">
-<!ENTITY noscriptPrev "Претходно">
-<!ENTITY noscriptNext "Следно">
-<!ENTITY noscriptFrameOptErr.title "Оваа содржина не може да биде прикажана во рамка">
-<!ENTITY noscriptFrameOptErr.desc "За да ја заштити вашата сигурност, издавачот на оваа содржина не дозволува да биде прикажана во рамка.">
-<!ENTITY noscriptFrameOptErr.link "Кликни овде за да ја отвориш оваа содржина во нов прозорец">
-<!ENTITY noscriptBookmarkSync "Направи резервна копија на конфигурацијата на NoScript во обележувач за лесна синхронизација">
-<!ENTITY noscriptShowReleaseNotes "Прикажи ги белешките за изданието при ажурирање">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Правила:">
-<!ENTITY ABE.enabled.label "Вклучи го ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Дозволи страниците да притискаат нивни сопствени правила">
-<!ENTITY ABE.edit.label "Уреди...">
-<!ENTITY ABE.edit.accesskey "У">
-<!ENTITY ABE.enable.label "Вклучи">
-<!ENTITY ABE.enable.accesskey "к">
-<!ENTITY ABE.disable.label "Исклучи">
-<!ENTITY ABE.disable.accesskey "И">
-<!ENTITY ABE.refresh.label "Освежи">
-<!ENTITY ABE.refresh.accesskey "О">
-<!ENTITY noscriptUninstall "Одинсталирај">
-<!ENTITY noscriptRecentBlocked "Неодамна блокирани страници">
-<!ENTITY noscriptExternalFilters "Надворешни Филтери">
-<!ENTITY noscriptEF.enable "Вклучи ги надворешните филтери">
-<!ENTITY noscriptEF.add "Нов Филтер…">
-<!ENTITY noscriptEF.browse "Прелистај…">
-<!ENTITY noscriptEF.remove "Отстрани">
-<!ENTITY noscriptDonate "Донирај">
-<!ENTITY noscriptDonate.accesskey "о">
-<!ENTITY noscriptEF.executable "Извршна датотека:">
-<!ENTITY noscriptPreset "Ниво на Безбедност">
-<!ENTITY noscriptPreset.off "Исклучи (дали сте сериозни?!)">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.properties b/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.properties
deleted file mode 100644
index 2615b91..0000000
--- a/extensions/noscript/chrome/locale/mk-MK/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Овозможи ги скриптите општо (непрепорачливо)
-forbidGlobal=Оневозможи ги скриптите (препорачливо)
-allowLocal=Дозволи за %S
-allowTemp=Привремено дозволи за %S
-forbidLocal=Забрани за %S
-allowed.glb=Можна опасност! Скриптите се општо дозволени.
-allowed.yes=Скриптите се засега дозволени
-allowed.prt=Скриптите се делумно дозволени
-allowed.no=Скриптите се засега забранети
-global.warning.title=Предупредување!
-global.warning.text=Скриптите ќе бидат овозможени општо (за секоја страница).\n Ова подесување ве изложува на познати и непознати опасности.\nАко сакате да продолжите, притиснете „Во ред“.
-audio.samples=Звуци
-confirm=Дали сте сигурни?
-alwaysAsk=Секогаш прикажувај ја оваа порака
-notifyHide=Скриј ја по %S секунди
-trust=Верувај му на %S
-distrust=Не му верувај на %S
-untrustedOrigin=извор без доверба
-xss.notify.generic=„NoScript“ филтрираше можен обид за меѓумесно скриптирање (XSS) од %S. Техничките подробности се запишани во конзолата.
-xss.notify.showConsole=Прикажи ја конзолата...
-xss.notify.showConsole.accessKey=к
-xss.reason.filterXGet=Прочистено е сомнителено барање. Првобитната адреса [%1$S] е побарана од [%2$S]. Прочистената адреса е [%3$S].)
-xss.reason.filterXGetRef=Прочистена е сомнителна адреса на упатувач. Адресата [%1$S] е побарана од [%2$S]. Прочистената адреса на упатувачот е [%3$S].)
-xss.reason.filterXPost=Прочистено е сомнително качување на датотека на [%1$S] од [%2$S]: сменето е во обично „GET“ барање, што нема можност за качување датотеки.
-unsafeReload.warning=НЕБЕЗБЕДНО освежување на \n\n%1$S [%2$S]\n\nод [%3$S]\n\n„NoScript“ НЕМА да ве заштити од ова барање.\n
-metaRefresh.notify=„NoScript“ спречи <META> пренасочување сместено во <NOSCRIPT> елемент: %S за %S секунди.
-metaRefresh.notify.follow=Следи пренасочување
-metaRefresh.notify.follow.accessKey=С
-notify.options=Опции
-notify.options.accessKey=О
-reset.title=Враќање на првобитните поставки на „NoScript“
-reset.warning=СИТЕ подесувања на „NoScript“ ќе бидат вратени на нивните првобитни вредности.\nОва дејство не може автоматски да се поврати.\nДали сепак сакате да продолжите?
-bookmarkSync.title=NoScript Конфигурациски Обележувач
-bookmarkSync.message=Овај обележувач не е наменет за отворање, туку за синхронизирање користејќи сервис како Weave или XMarks екстензија.
-bookmarkSync.confirm=NoScript пронајде конфигурациски облежувач навидум зачуван на\n%S.\nДали навистина сакате да ја презапишите вашата NoScript конфигурација со содржината на овај обележувач?
-ABE.notify=Барањето %1$S е филтрирано од ABE: <%2$S> %3$S
-ABE.chooseEditor=Ве молиме изберете уредувач на текст за ABE правилата
-allowFrom=Дозволи ги сите од %S
-allowTempFrom=Привремено дозволи ги сите од %S
-ef.activate=Филтер %S
-ef.options=%S опции...
-ef.newName=Внесете го името на новиот филтер:
-disable=Исклучи %S
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.locateExe=Select the executable file for the %S filter
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ms-MY/noscript/about.properties b/extensions/noscript/chrome/locale/ms-MY/noscript/about.properties
deleted file mode 100644
index 328ff1a..0000000
--- a/extensions/noscript/chrome/locale/ms-MY/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Perlindungan tambahan untuk Firefox anda: Noscript membenarkan JavaScript, Java (dan plugin-plugin lain) hanya untuk domain yang anda percayai(contoh: laman web bank). Senarai putih berdasarkan pre-emptive menghalang eksploitasi terhadap sekuriti(diketahui atau tidak) tanpa pengurangan fungsi...Pakar-pakar telah menyetujui bahawa: Firefox adalah benar-benar selamat dengan NoScript:-)
-aboutTitle=Tentang %S
-extensionContributors=Penyumbang:
-extensionContributors.tip=Orang yang perlu anda berterima kasih untuk fungsi tambahan ini
-extensionCreatorLabel=Penerbit:
-changelog=Tukarlog
-changelog.tip=Tunjukkan Tukarlog
-license=Lesen
-license.tip=Baca Lesen Pengguna-akhir
-logo.tip=Lawati Laman Web Utama fungsi tambahan
-sponsor.tip=Lawati Laman Web Utama penaja
-informaction.tip=Lawati Laman Web Utama InformAction
-extensionHomepage.tip=Lawati Laman Web Utama fungsi tambahan
-extensionCreator.tip=Lawati Laman Web Utama Penerbit
-version=Versi %S
diff --git a/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.dtd
deleted file mode 100644
index 3adc7d0..0000000
--- a/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Tetapan...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Tetapan NoScript">
-<!ENTITY noscriptAbout "Tentang NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Anda boleh menentukan laman web yang anda benarkan skripnya diproses. Taipkan alamat atau domain(contoh:&quot;http://www.tapak.com&quot; atau &quot;tapak.com&quot;) laman web yang diingini dan klik Benarkan">
-<!ENTITY noscriptWebAddress "Alamat laman web:">
-<!ENTITY noscriptAllow "Benarkan">
-<!ENTITY noscriptAllow.accesskey "I">
-<!ENTITY noscriptForbid "Halang">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Tanda sebagai Dipercayai">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Tanda sebagai Tidak Dipercayai">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Buang laman yang dipilih">
-<!ENTITY noscriptGloballyEnabled "Semua skrip diproses secara biasa (bahaya)">
-<!ENTITY noscriptAutoReload "Muat turun semula muka laman secara automatik apabila tetapan ditukar">
-<!ENTITY noscriptGeneral "Umum">
-<!ENTITY noscriptAppearance "Luaran">
-<!ENTITY noscriptShow "Tunjukkan...">
-<!ENTITY noscriptCtxMenu "Menu konteks">
-<!ENTITY noscriptStatusIcon "Bar status ikon">
-<!ENTITY noscriptFullAddr "Alamat penuh (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domain penuh (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Dasar sekunder domain(noscript.net)">
-<!ENTITY noscriptTempCmd "Proses[...] buat masa ini">
-<!ENTITY noscriptSound "Terima audio apabila skrip dihalang.">
-<!ENTITY noscriptImport "Impot">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Ekspot">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Tunjukkan mesej tentang skrip yang dihalang">
-<!ENTITY noscriptNotify.bottom "Letakkan mesej dibawah">
-<!ENTITY noscriptSound.choose "Pilih">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Mainkan">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Tetapkan semula kepada asal">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Lanjutan">
-<!ENTITY noscriptAdditionalPermissions "Kebenaran Tambahan untuk sumber dipercayai">
-<!ENTITY noscriptAllowClipboard "Benarkan teks disalin (copy dan paste) untuk clipboard luaran">
-<!ENTITY noscriptAdditionalRestrictions "Syarat tambahan untuk laman Tidak Dipercatai">
-<!ENTITY noscriptPlugins "Plugin">
-<!ENTITY noscriptContentBlocker "Laksanakan syarat ini untuk laman yang dipercayai ini juga">
-<!ENTITY noscriptForbidJava "Halang Java™">
-<!ENTITY noscriptForbidXSLT "Halang XSLT">
-<!ENTITY noscriptForbidSilverlight "Halang Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Halang &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Halang &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Halang @font-face">
-<!ENTITY noscriptForbidWebGL "Halang WebGL">
-<!ENTITY noscriptForbidMedia "Halang &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Halang Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Halang plugin lain">
-<!ENTITY noscriptReloadWarn "Tetapan ini akan kesan apabila muka laman yang dimuat turun semula.">
-<!ENTITY noscriptConfirmUnblock "Tanya dahulu sebelum objek dihalang untuk sementara">
-<!ENTITY noscriptStatusLabel "Label status bar">
-<!ENTITY noscriptForbidBookmarklets "Halang bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Tunjukkan ikon placeholder">
-<!ENTITY noscriptTruncateTitle "Buang tajuk dokumen">
-<!ENTITY noscriptFixLinks "Cubaan untuk membaiki link JavaScript">
-<!ENTITY noscriptAllowBookmarks "Benarkan laman dibuka melalui bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Benarkan laman dibuka melalui bookmarks">
-<!ENTITY noscriptAllowPing "Benarkan &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Benarkan link tempatan">
-<!ENTITY noscriptForbidPing "Halang &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Halang META pengarah di dalam unsur &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Papar mesej tentang META alih arah terhalang">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Senarai putih">
-<!ENTITY noscriptPermissions "Kebenaran">
-<!ENTITY noscriptRefresh "Pulihkan">
-<!ENTITY noscriptNotifications "Notifikasi">
-<!ENTITY noscriptToolbarToggle "Klik kiri pada butang NoScript toolbar Kebenaran untuk laman top-level semasa">
-<!ENTITY noscriptTrusted "Dipercayai">
-<!ENTITY noscriptUntrusted "Tidak Dipercayai">
-<!ENTITY noscriptUnknown "Tidak Diketahui">
-<!ENTITY noscriptAdd "Tambah">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Tutup">
-<!ENTITY noscriptSiteManager "Laman Pengurusan">
-<!ENTITY noscriptSecurityManager "Pengurusan Sekuriti">
-<!ENTITY noscriptPolicies "Polisi">
-<!ENTITY noscriptDefaultPolicies "Polisi Asal">
-<!ENTITY noscriptSitePolicies "Butiran Polisi Laman">
-<!ENTITY noscriptNselNever "Sembunyikan unsur &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Tunjukkan unsur &lt;NOSCRIPT&gt; apabila &lt;SCRIPT&gt; dihalang">
-<!ENTITY noscriptAutoAllowTopLevel "Benarkan sementara laman top-level secara biasa">
-<!ENTITY noscriptDescription "Perlindungaan tambahan untuk Firefox anda: NoScript membenarkan JavaScript, Java (dan plugin-plugin lain) hanya untuk laman yang anda percayai (contoh:laman web bank). Senarai putih berdasarkan pre-emptive menghalang eksploitasi pada sekuriti (yang diketahui dan tidak diketahui!) tanpa pengurangan fungsi... Pakar-pakar telah menyetujui bahawa: Firefox adalah benar-benar selamat dengan NoScript:-)">
-<!ENTITY noscriptOptBlockCssScanners "Halang pengesan CSS">
-<!ENTITY noscriptOptFilterXGet "Membersihkan laman yang disyaki">
-<!ENTITY noscriptOptFilterXPost "Tukarkan permintaan cross-site POST kepada permintaan data GET">
-<!ENTITY noscriptShowConsole "Tunjukkan Konsol...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Soalan Kerap Ditanya XSS">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Muat turun semula secara tidak selamat">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Pengecualian Perlindungan Anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Padanan ekspresi ini tidak akan dilindungi dari XSS">
-<!ENTITY noscriptMatchSample "Sampel padanan paten:">
-<!ENTITY noscriptReset "Tetapan semula">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Tetapkan kepada asal">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Kembalikan semula Kebenaran Sementara">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "Tiada tempaat letak untuk objek yang datang dari laman ditanda sebagai Tidak Dipercayai">
-<!ENTITY noscriptCollapseBlockedObjects "Musnahkan objek yang dihalang">
-<!ENTITY noscriptExceptions "Pengecualian...">
-<!ENTITY noscriptBlockedObjects "Objek yang Dihalang">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Halang setiap objek yang datang dari laman yang ditanda sebagai Tidak Dipercayai">
-<!ENTITY noscriptTempAllowPage "Benarkan laman ini sementara">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Benarkan laman ini">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Kekalkan kebenaran laman">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "Soalan Kerap Ditanya HTTPS">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Sifat">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Halang butiran aktif laman melainkan datang dari (HTTPS) yang dipercayai:">
-<!ENTITY noscriptHttps.never "Tidak sama sekali">
-<!ENTITY noscriptHttps.proxy "Apabila menggunakan proxy (disyorkan dengan Tor)">
-<!ENTITY noscriptHttps.always "Sentiasa">
-<!ENTITY noscriptHttpsForced "Paksa hubungan (HTTPS) yang dipercayai untuk laman berikut:">
-<!ENTITY noscriptHttpsForcedExceptions "Jangan paksa hubungan (HTTPS) yang dipercayai untuk laman berikut:">
-<!ENTITY noscriptSecureCookies "Aktifkan Pengurusan Perlindungan Cookies Automatik">
-<!ENTITY noscriptSecureCookiesForced "Paksa enkripsi untuk semua cookies menetapkan HTTPS untuk laman berikut:">
-<!ENTITY noscriptSecureCookiesExceptions "Biarkan cookies yang tidak selamat menetapkan HTTPS untuk laman web berikut:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Keupayaan Clickjacking / Cubaan menukarkan UI!">
-<!ENTITY noscriptClearClickDescription "NoScript diinteraksi bertindih pada tetikus atau papan kekunci dengan sebahagian unsur disembunyikan. Klik pada imej diatas untuk dikitar antara versi yang dihalang atau jelas.">
-<!ENTITY noscriptClearClickOpt "Perlindungan ClearClick pada laman...">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "dipercayai">
-<!ENTITY noscriptUntrustedPagesAdj "tidak dipercayai">
-<!ENTITY noscriptKeepLocked "Sentiasa kunci unsur ini (disyorkan)">
-<!ENTITY noscriptEmbeddings "Objek yang dipasang">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptShowReleaseNotes "Pamerkan nota">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Set aturan:">
-<!ENTITY ABE.enabled.label "Aktifkan ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Benarkan laman mengolah aturan sendiri">
-<!ENTITY ABE.edit.label "Sunting…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Aktifkan">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Matikan">
-<!ENTITY ABE.disable.accesskey "M">
-<!ENTITY ABE.refresh.label "Muat Semua">
-<!ENTITY ABE.refresh.accesskey "u">
-<!ENTITY noscriptUninstall "Buang">
-<!ENTITY noscriptRecentBlocked "Laman telah diblok">
-<!ENTITY noscriptExternalFilters "Penapis luar">
-<!ENTITY noscriptEF.enable "Aktifkan penapis luar">
-<!ENTITY noscriptEF.add "Penapis Baru…">
-<!ENTITY noscriptEF.executable "Fail boleh laksana:">
-<!ENTITY noscriptEF.browse "Cari…">
-<!ENTITY noscriptEF.contentType "Jenis butiran (MIME) akan ditapis (pilihan mutlak atau ekspresi biasa)">
-<!ENTITY noscriptEF.exceptions "Jangan tapis objek datang dari halaman ini:">
-<!ENTITY noscriptEF.remove "Buang">
-<!ENTITY noscriptPreset "Taraf keselamatan">
-<!ENTITY noscriptPreset.off "Matikan (anda serius?!)">
-<!ENTITY noscriptPreset.low "Mudah (Senarai hitam + Keselamatan Web)">
-<!ENTITY noscriptPreset.medium "Klasik (Senarai putih + Keselamatan Web)">
-<!ENTITY noscriptPreset.high "Kubu (Kunci penuh)">
-<!ENTITY noscript.hoverUI "Buka menu keizinan apabila tetikus hover pada ikon NoScript">
-<!ENTITY noscriptDonate "Derma">
-<!ENTITY noscriptDonate.accesskey "D">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.properties b/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.properties
deleted file mode 100644
index 67416d1..0000000
--- a/extensions/noscript/chrome/locale/ms-MY/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Semua skrip diproses secara biasa (bahaya)
-forbidGlobal=Skrip tidak diproses secara biasa (disyorkan)
-allowLocal=Benarkan %S
-allowTemp=Benarkan sementara %S
-forbidLocal=Halang %S
-allowed.glb=Bahaya! Semua skrip diproses
-allowed.yes=Skrip diproses buat masa ini
-allowed.prt=Sebahagian skrip diterima
-allowed.no=Skrip dihalang pada masa ini
-global.warning.title=Amaran!
-global.warning.text=Semua skrip akan diproses (untuk setiap laman web).\nTindakan ini adalah bahaya.\nAdakah anda ingin teruskan?
-audio.samples=Sampel audio
-confirm=Anda pasti?
-alwaysAsk=Sentiasa tanya untuk kepastian
-notifyHide=Sembunyikan selepas %S saat
-trust=Benarkan %S
-distrust=Tandakan %S sebagai tidak dipercayai
-untrustedOrigin=adalah sumber tidak dipercayai
-xss.notify.generic=%S cuba menapis NoScript menggunakan cross-site scripting (XSS). Butiran teknikal telah dilogkan ke konsol.
-xss.notify.showConsole=Tunjukkan konsol
-xss.notify.showConsole.accessKey=T
-xss.reason.filterXGet=Permintaan yang disyakki dibersihkan. URL asal [%1$S] diminta daripada [%2$S].URL dibersihkan: [%3$S].
-xss.reason.filterXGetRef=Perujuk permintaan yanga disyakki dibersihkan.URL [%1$S] diminta daripada [%2$S].Perujuk dibersihkan: [%3$S].
-xss.reason.filterXPost=Membersihkan muat naik sumber disyaki [%1$S] dari [%2$S]: telah ditukar kepada fungsi muat turun permintaan GET
-unsafeReload.warning=Dimuatkan secara TIDAK SELAMAT sumber yang disyak \n\n%1$S [%2$S]\n\nDari [%3$S]\n\nNoScript TIDAK melindungi permintaan ini!\n
-metaRefresh.notify=NoScript telah menghalang <META> pengarah di dalam unsur <NOSCRIPT>: %S dalam %S saat.
-metaRefresh.notify.follow=Ikut arah
-metaRefresh.notify.follow.accessKey=I
-notify.options=Tetapan
-notify.options.accessKey=e
-reset.title=Tetapkan semula NoScript
-reset.warning=Semua NoScript tetapan dan kebenaran lawan web akan ditetap pada tetapan asal semula.\nTindakan ini tidak boleh dikembalikan.\nIngin teruskan?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/nb-NO/noscript/about.properties b/extensions/noscript/chrome/locale/nb-NO/noscript/about.properties
deleted file mode 100644
index 283d9b1..0000000
--- a/extensions/noscript/chrome/locale/nb-NO/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Ekstra beskyttelse for din Firefox: NoScript tillater JavaScript, Java (og andre plugins) kun for sikre domener av ditt valg (f.eks din nettbank). Denne listen forhindrer eksponering av sikkerhetsfeil (kjente og ukjente!) uten tap av funksjonalitet... Ekspertene er enige: Firefox er tryggere med NoScript.
-aboutTitle=Om %S
-extensionContributors=Bidragsytere:
-extensionContributors.tip=Mennesker som du burde takke for denne utvidelsen
-extensionCreatorLabel=Forfatter
-changelog=Endringslogg
-changelog.tip=Vis endringslogg
-license=Lisens
-license.tip=Les sluttbruker lisens
-logo.tip=Besøk hjemmesiden til denne utvidelsen
-sponsor.tip=Besøk sponsorens hjemmeside
-informaction.tip=Besøk InformAction hjemmeside
-extensionHomepage.tip=Besøk hjemmesiden til denne utvidelsen
-extensionCreator.tip=Besøk forfatterens hjemmeside
-version=Versjon %S
diff --git a/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.dtd b/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.dtd
deleted file mode 100644
index a685414..0000000
--- a/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Innstillinger">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Innstillinger">
-<!ENTITY noscriptAbout "Om NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Du kan spesifisere hvilke websider som har tillatelse til å kjøre scritper. Skriv inn adresse, eller domene (F.eks: &quot;http://www.side.no&quot;, eller &amp;quotside.no&quot;) du ønsker å gi tillatelse til, og klikk Tillat.">
-<!ENTITY noscriptWebAddress "Webadresse:">
-<!ENTITY noscriptAllow "Tillat">
-<!ENTITY noscriptAllow.accesskey "I">
-<!ENTITY noscriptForbid "Forby">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Merk som sikker">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Merk som usikker">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Fjern valgte sider">
-<!ENTITY noscriptGloballyEnabled "Scripts er tillat på alle sider (usikkert!)">
-<!ENTITY noscriptAutoReload "Automatisk oppdater gjeldende side når innstillingene er endret">
-<!ENTITY noscriptGeneral "Generelt">
-<!ENTITY noscriptAppearance "Utseende">
-<!ENTITY noscriptShow "Vis">
-<!ENTITY noscriptCtxMenu "Sammendragsmeny">
-<!ENTITY noscriptStatusIcon "Statusbar ikon">
-<!ENTITY noscriptFullAddr "Full adresse (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Fullt domenenavn (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd-nivå domener (noscript.net)">
-<!ENTITY noscriptTempCmd "Midlertidig tillat [...]">
-<!ENTITY noscriptSound "Lydbasert tilbakemelding når scripter er blokkert">
-<!ENTITY noscriptImport "Importer">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksporter">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Vis melding om blokkerte script">
-<!ENTITY noscriptNotify.bottom "Plasser beskjeden på bunnen">
-<!ENTITY noscriptSound.choose "Velg">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Spill">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Tilbakestill til standard">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avansert">
-<!ENTITY noscriptAdditionalPermissions "Ekstra tillatelse for trygge sider">
-<!ENTITY noscriptAllowClipboard "Tillat rik tekst kopi, og lim fra eksterne klippebord">
-<!ENTITY noscriptAdditionalRestrictions "Ekstra restriksjoner for usikre sider">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Legg til disse restriksjonene til hvitlistesider (ikke-svarteliste) også">
-<!ENTITY noscriptForbidJava "Forby Java™">
-<!ENTITY noscriptForbidXSLT "Forby XSLT">
-<!ENTITY noscriptForbidSilverlight "Forby Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forby &lt;iFrame&gt;">
-<!ENTITY noscriptForbidFrames "Forby &lt;Frame&gt;">
-<!ENTITY noscriptForbidFonts "Forby @font-face">
-<!ENTITY noscriptForbidWebGL "Forby WebGL">
-<!ENTITY noscriptForbidMedia "Forby &lt;Audio&gt;/&lt;Video&gt;">
-<!ENTITY noscriptForbidFlash "Forby Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forby andre plug-ins">
-<!ENTITY noscriptReloadWarn "Disse innstillingene vil virke på nye, eller (manuelt) oppdaterte sider">
-<!ENTITY noscriptConfirmUnblock "Spør om bekreftelse før midlertidig kjøring av et objekt">
-<!ENTITY noscriptStatusLabel "Status bar merke">
-<!ENTITY noscriptForbidBookmarklets "Forby bokmerkinger">
-<!ENTITY noscriptShowPlaceholder "Vis plassholder ikon">
-<!ENTITY noscriptTruncateTitle "Forkast dokumenttittler">
-<!ENTITY noscriptFixLinks "Forsøk å fikse JavaScript linker">
-<!ENTITY noscriptAllowBookmarks "Tillat sider å åpnes gjennom bokmerker">
-<!ENTITY noscriptAllowViaBookmarks "Tillat sider å åpnes gjennom bokmerker">
-<!ENTITY noscriptAllowPing "Tillat &lt;A PING..&gt;">
-<!ENTITY noscriptAllowLocalLinks "Tillat lokale linker">
-<!ENTITY noscriptForbidPing "Forby &lt;A PING..&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forby META re-direkting med &lt;NoScript&gt; elementer">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Vis beskjeder om blokkerte META re-direkting">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Hvitlisten">
-<!ENTITY noscriptPermissions "Tillatelser">
-<!ENTITY noscriptRefresh "Oppdater">
-<!ENTITY noscriptNotifications "Meldinger">
-<!ENTITY noscriptToolbarToggle "Venstreklikking på NoScript-verktøyknappen skrur på tillatelser for gjeldende top-nivå siden">
-<!ENTITY noscriptTrusted "Sikre">
-<!ENTITY noscriptUntrusted "Usikre">
-<!ENTITY noscriptUnknown "Ukjent">
-<!ENTITY noscriptAdd "Legg til">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Lukk">
-<!ENTITY noscriptSiteManager "Sideinnstillinger">
-<!ENTITY noscriptSecurityManager "Sikkerhetsinnstillinger">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Standard Policies">
-<!ENTITY noscriptSitePolicies "Sidespesifisert Policies">
-<!ENTITY noscriptNselNever "Gjem &lt;NoScript&gt; elementer">
-<!ENTITY noscriptNselForce "Vis &lt;NoScript&gt; elementer som følge av blokkerte &lt;Scripts&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Midlertidig tillat top-nivå sider som standard">
-<!ENTITY noscriptDescription "Ekstra beskyttelse for Firefox: NoScript tillater JavaScript, Java (og andre plugin) kun for trygge sider som du velger selv (f.eks. din nettbank). Denne hvitlistebaserte blokkeringssnutten forhindrer utnyttelse av sikkerhetshull (kjente og ukjente) uten tap av funksjonalitet. Ekspertene er enige: Firefox er mye tryggere med NoScript.">
-<!ENTITY noscriptOptBlockCssScanners "Blokker CSS-baserte scannere">
-<!ENTITY noscriptOptFilterXGet "Undersøk misstenkelige forespørsler fra kryssende sider">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Vis konsoll...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS Faq">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Usikker oppdatering">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS beskyttelsesunntak">
-<!ENTITY noscriptXssExceptions.description "Mål som matcher desse regulære uttrykkene vil IKKE være beskyttet mot XSS.">
-<!ENTITY noscriptMatchSample "Mønsterlikhetstreff, eksempel:">
-<!ENTITY noscriptReset "Tilbakestill">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Tilbakestill til standard">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Tilbakekall midlertidig tillatelse">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ingen plassholder for objekter som kommer fra sider som er merket som usikker">
-<!ENTITY noscriptCollapseBlockedObjects "Bryt ned blokkerte objekter">
-<!ENTITY noscriptExceptions "Unntak...">
-<!ENTITY noscriptBlockedObjects "Blokkerte objekter">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokker alle objekter som kommer fra en side som er merket utrygg">
-<!ENTITY noscriptTempAllowPage "Midlertidig tillat all disse sidene">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Tillat hele denne siden">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "La sidetillatelsen bli permanent">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS Faq">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Oppførsel">
-<!ENTITY noscriptHttps.cookies "Informasjonskapsler (cookies)">
-<!ENTITY noscriptHttps.description "Forby aktiv webinnhold så fremt det ikke kommer fra en sikker (HTTPS) tilkobling:">
-<!ENTITY noscriptHttps.never "Aldri">
-<!ENTITY noscriptHttps.proxy "Når proxy brukes (anbefalt med Tor)">
-<!ENTITY noscriptHttps.always "Alltid">
-<!ENTITY noscriptHttpsForced "Tving følgende sider å bruke sikker (HTTPS) tilkobling:">
-<!ENTITY noscriptHttpsForcedExceptions "Aldri tving sikker (HTTPS) tilkobling for følgende sider:">
-<!ENTITY noscriptSecureCookies "Slå på Automatisk Sikkerhetsbearbeidelse for informasjonskapsler">
-<!ENTITY noscriptSecureCookiesForced "Tving kryptering for alle informasjonskapsler sent over HTTPS for følgende sider:">
-<!ENTITY noscriptSecureCookiesExceptions "Overse usikre informasjonskapsler sent over HTTPS for følgende sider:">
-<!ENTITY noscriptClearClickTitle "Fjern Click Advaring">
-<!ENTITY noscriptClearClickHeader "Potensiell Clickjacking / UI adresseendringsforsøk">
-<!ENTITY noscriptClearClickDescription "NiScript forhindret en mus-, eller tastaturhandling fra et delvis gjemt element. Klikk på bildet under for å svitsje mellom sperret, og renset versjon.">
-<!ENTITY noscriptClearClickOpt "Tøm Clickbeskyttelsen på denne siden.">
-<!ENTITY noscriptClearClickReport "Rapporter">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Rapporter ID:">
-<!ENTITY noscriptTrustedPagesAdj "trygge">
-<!ENTITY noscriptUntrustedPagesAdj "utrygge">
-<!ENTITY noscriptKeepLocked "Hold dette elementet låst (anbefalt)">
-<!ENTITY noscriptEmbeddings "Kapsler">
-<!ENTITY noscriptPrev "Forrige">
-<!ENTITY noscriptNext "Neste">
-<!ENTITY noscriptFrameOptErr.title "Innholdet kan ikke vises i en Frame (ramme)">
-<!ENTITY noscriptFrameOptErr.desc "For å bekytte din sikkerhet lar ikke forfatteren av dette innholdet bli vist i en ramme (frame).">
-<!ENTITY noscriptFrameOptErr.link "Klikk her for å åpne innholdet i nytt vindu.">
-<!ENTITY noscriptBookmarkSync "Backup NoScript konfigurasjonen i et bokmerke for enklere synkronisering">
-<!ENTITY noscriptShowReleaseNotes "Vis utgivelsesnotat på oppdateringer">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regelsett:">
-<!ENTITY ABE.enabled.label "Aktiver ABE (Applikation Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Tillat sider til å sette egne regelsett">
-<!ENTITY ABE.edit.label "Endre...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Aktiver">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Deaktiver">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Oppdater">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Avinnstaller">
-<!ENTITY noscriptRecentBlocked "Siste blokkerte sider">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.properties b/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.properties
deleted file mode 100644
index 0871fac..0000000
--- a/extensions/noscript/chrome/locale/nb-NO/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Tillat skripter Globalt (Farlig)
-forbidGlobal=Forby skripter Globalt (Anbefalt)
-allowLocal=Tillat %S
-allowTemp=Midlertidig tillat %S
-forbidLocal=Forby %S
-allowed.glb=Advarsel! Skript Globalt er tillatt
-allowed.yes=Skript er for øyeblikket tillatt
-allowed.prt=Skript delvis tillatt
-allowed.no=Skript er for øyeblikket ikke tillatt
-global.warning.title=Advarsel!
-global.warning.text=Skript vil bli tillatt globalt (for alle sider).\n Dette kan være en usikker handling.\nVil du virkelig fortsette?
-audio.samples=Lydeksempler
-confirm=Er du sikker?
-alwaysAsk=Alltid spør om bekreftelse
-notifyHide=Gjem etter %S sekunder
-trust=Stol på %S
-distrust=Merk %S som usikker
-untrustedOrigin=en usikker opprinnelse
-xss.notify.generic=NoScript filtrerte en potensiell kryss-side skriptingsforsøk (XSS) fra %S. Tekniske detaljer har blitt logget til Konsoll.
-xss.notify.showConsole=Vis Konsoll
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Behandlet mistenkelig forespørsel. Opprinnelig URL [%1$S] forespurt fra [%2$S]. Behandlet URL: [%3$S].
-xss.reason.filterXGetRef=Behandlet mistenkelig refferanseforespørsel. URL [%1$S] forespurt fra [%2$S]. Behandlet URL: [%3$S].
-xss.reason.filterXPost=Behandlet mistenkelig opplasting til [%1$S] fra [%2$S]: omformet til en kun-last-ned forespørsel.
-unsafeReload.warning=USIKKER re-innlasting av mistenkelig\n\n%1$S[%2$S]\n\nFRA[%3$S]\n\nNoScript vil IKKE beskytte mot denne forespørselen!\n
-metaRefresh.notify=NoScript blokkerte en <META> re-direkt innvendig et <NOSCRIPT> element: %S på %S sekunder.
-metaRefresh.notify.follow=Følg redirektinga
-metaRefresh.notify.follow.accessKey=F
-notify.options=Valg
-notify.options.accessKey=O
-reset.title=Reset NoScript
-reset.warning=Alle NoScript innstillinger og sideinnstillinger vil bli sett tilbake til standard verdier umiddelbart.\nDu kan ikke angre denne handlingen.\nVil du fortsette?
-bookmarkSync.title=NoScript kongigurasjonsbokmerke
-bookmarkSync.message=Dette bokmerket er IKKE ment for å åpmes, men for å synkroniseres ved å bruke service som Weave eller XMarks utvidelse.
-bookmarkSync.confirm=NoScript fant en konfigurasjonsbokmerke lagret på \n%S.\nVil du overskrive din lokale NoScript konfigurasjonen med inholdet i dette bokmerket?
-ABE.notify=Forespørsel %1$S filtrert av ABE: <%2$S> %3$S
-ABE.chooseEditor=Vennligst velg en teksteditor for ABE regelsett
-allowFrom=Tillat allt fra %S
-allowTempFrom=Midlertidig tillat allt fra %S
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/nl/noscript/about.properties b/extensions/noscript/chrome/locale/nl/noscript/about.properties
deleted file mode 100644
index ab32df4..0000000
--- a/extensions/noscript/chrome/locale/nl/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra bescherming voor uw Firefox: NoScript staat JavaScript, Java (en andere plug-ins) alleen toe voor zelf gekozen vertrouwde domeinen (zoals uw website voor internetbankieren). Deze op toestemmingslijsten gebaseerde benadering van blokkering voorkomt exploitatie van beveiligingskwetsbaarheden (bekende en zelfs onbekende!) zonder verlies van functionaliteit… Experts zullen het bevestigen: Firefox is echt veiliger met NoScript :-)
-aboutTitle=Over %S
-extensionContributors=Medewerkers:
-extensionContributors.tip=Personen die een bedankje voor deze extensie verdienen
-extensionCreatorLabel=Auteur:
-changelog=Changelog
-changelog.tip=Changelog tonen
-license=Licentie
-license.tip=Eindgebruikerslicentie lezen
-logo.tip=Startpagina van extensie bezoeken
-sponsor.tip=Startpagina van sponsor bezoeken
-informaction.tip=Startpagina van InformAction bezoeken
-extensionHomepage.tip=Startpagina van extensie bezoeken
-extensionCreator.tip=Startpagina van auteur bezoeken
-version=Versie %S
diff --git a/extensions/noscript/chrome/locale/nl/noscript/noscript.dtd b/extensions/noscript/chrome/locale/nl/noscript/noscript.dtd
deleted file mode 100644
index 6380753..0000000
--- a/extensions/noscript/chrome/locale/nl/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opties…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript-opties">
-<!ENTITY noscriptAbout "Over NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "U kunt opgeven welke websites scripts mogen gebruiken. Typ het adres of domein (bv. ‘http://www.website.com’ of ‘website.com’) van de website die u wilt toestaan, en klik daarna op Toestaan.">
-<!ENTITY noscriptWebAddress "Adres van website:">
-<!ENTITY noscriptAllow "Toestaan">
-<!ENTITY noscriptAllow.accesskey "T">
-<!ENTITY noscriptForbid "Verbieden">
-<!ENTITY noscriptForbid.accesskey "V">
-<!ENTITY noscriptTrust "Markeren als vertrouwd">
-<!ENTITY noscriptTrust.accesskey "M">
-<!ENTITY noscriptUntrust "Markeren als niet vertrouwd">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Geselecteerde websites verwijderen">
-<!ENTITY noscriptGloballyEnabled "Scripts worden overal toegestaan (gevaarlijk)">
-<!ENTITY noscriptAutoReload "Betrokken pagina’s automatisch vernieuwen als toestemmingen wijzigen">
-<!ENTITY noscriptAutoReload.currentTab "Alleen het huidige tabblad opnieuw laden">
-<!ENTITY noscriptGeneral "Algemeen">
-<!ENTITY noscriptAppearance "Vormgeving">
-<!ENTITY noscriptShow "Tonen…">
-<!ENTITY noscriptCtxMenu "Contextmenu">
-<!ENTITY noscriptStatusIcon "Statusbalkpictogram">
-<!ENTITY noscriptFullAddr "Volledige adressen (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Volledige domeinen (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Basisdomeinen op 2e niveau (noscript.net)">
-<!ENTITY noscriptTempCmd "[…] tijdelijk toestaan">
-<!ENTITY noscriptSound "Geluidsmelding wanneer scripts worden geblokkeerd">
-<!ENTITY noscriptImport "Importeren">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exporteren">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Bericht over geblokkeerde scripts tonen">
-<!ENTITY noscriptNotify.bottom "Bericht onder in het scherm plaatsen">
-<!ENTITY noscriptSound.choose "Kiezen">
-<!ENTITY noscriptSound.choose.accesskey "K">
-<!ENTITY noscriptSound.play "Afspelen">
-<!ENTITY noscriptSound.play.accesskey "A">
-<!ENTITY noscriptSound.reset "Standaardwaarden">
-<!ENTITY noscriptSound.reset.accesskey "S">
-<!ENTITY noscriptAdvanced "Geavanceerd">
-<!ENTITY noscriptAdditionalPermissions "Aanvullende toestemmingen voor vertrouwde websites">
-<!ENTITY noscriptAllowClipboard "Kopiëren en plakken van tekst met opmaakcodes vanaf extern klembord toestaan">
-<!ENTITY noscriptAdditionalRestrictions "Aanvullende beperkingen voor niet-vertrouwde websites">
-<!ENTITY noscriptPlugins "Plug-ins">
-<!ENTITY noscriptContentBlocker "Deze beperkingen ook op vertrouwde websites toepassen">
-<!ENTITY noscriptForbidJava "Java™ verbieden">
-<!ENTITY noscriptForbidXSLT "XSLT verbieden">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™ verbieden">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt; verbieden">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt; verbieden">
-<!ENTITY noscriptForbidFonts "@font-face verbieden">
-<!ENTITY noscriptForbidWebGL "WebGL verbieden">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt; / &lt;VIDEO&gt; verbieden">
-<!ENTITY noscriptForbidFlash "Adobe® Flash® verbieden">
-<!ENTITY noscriptForbidPlugins "Andere plug-ins verbieden">
-<!ENTITY noscriptReloadWarn "Deze opties worden van kracht op nieuwe of (handmatig) vernieuwde pagina’s">
-<!ENTITY noscriptConfirmUnblock "Om bevestiging vragen voordat een objectblokkering tijdelijk wordt opgeheven">
-<!ENTITY noscriptStatusLabel "Statusbalklabel">
-<!ENTITY noscriptForbidBookmarklets "Bookmarklets verbieden">
-<!ENTITY noscriptShowPlaceholder "Vervangend pictogram tonen">
-<!ENTITY noscriptTruncateTitle "Documenttitels inkorten">
-<!ENTITY noscriptFixLinks "JavaScript-koppelingen proberen te herstellen">
-<!ENTITY noscriptAllowBookmarks "Via bladwijzers geopende websites toestaan">
-<!ENTITY noscriptAllowViaBookmarks "Via bladwijzers geopende websites toestaan">
-<!ENTITY noscriptAllowPing "&lt;A PING…&gt; toestaan">
-<!ENTITY noscriptAllowLocalLinks "Lokale koppelingen toestaan">
-<!ENTITY noscriptForbidPing "&lt;A PING…&gt; verbieden">
-<!ENTITY noscriptForbidMetaRefresh "META-omleidingen in &lt;NOSCRIPT&gt;-elementen verbieden">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "V">
-<!ENTITY noscriptNotifyMeta "Bericht over geblokkeerde META-omleidingen tonen">
-<!ENTITY noscriptNotifyMeta.accesskey "r">
-<!ENTITY noscriptWhitelist "Toestemmingenlijst">
-<!ENTITY noscriptPermissions "Toestemmingen">
-<!ENTITY noscriptRefresh "Vernieuwen">
-<!ENTITY noscriptNotifications "Meldingen">
-<!ENTITY noscriptToolbarToggle "Met de linkermuisknop op de NoScript-werkbalkknop klikken schakelt toestemmingen voor huidige top-levelwebsite in/uit">
-<!ENTITY noscriptTrusted "Vertrouwd">
-<!ENTITY noscriptUntrusted "Niet vertrouwd">
-<!ENTITY noscriptUnknown "Onbekend">
-<!ENTITY noscriptAdd "Toevoegen">
-<!ENTITY noscriptAdd.accesskey "T">
-<!ENTITY noscriptClose "Sluiten">
-<!ENTITY noscriptSiteManager "Websitebeheerder">
-<!ENTITY noscriptSecurityManager "Beveiligingsbeheerder">
-<!ENTITY noscriptPolicies "Beleid">
-<!ENTITY noscriptDefaultPolicies "Standaardbeleid">
-<!ENTITY noscriptSitePolicies "Website-specifiek beleid">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt;-elementen verbergen">
-<!ENTITY noscriptNselForce "Het &lt;NOSCRIPT&gt;-element dat na een geblokkeerd &lt;SCRIPT&gt; volgt tonen">
-<!ENTITY noscriptAutoAllowTopLevel "Top-levelwebsites standaard tijdelijk toestaan">
-<!ENTITY noscriptDescription "Extra bescherming voor Firefox: NoScript staat JavaScript, Java (en andere plug-ins) alleen toe voor zelf gekozen vertrouwde domeinen (zoals uw website voor internetbankieren). Deze op toestemmingslijsten gebaseerde blokkering voorkomt exploitatie van beveiligingskwetsbaarheden (bekende en zelfs onbekende!) zonder verlies aan functionaliteit… Experts zullen het bevestigen: Firefox is echt veiliger met NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Op cross-site scripting (CSS) gebaseerde scanners blokkeren">
-<!ENTITY noscriptOptFilterXGet "Verdachte cross-site-aanvragen zuiveren">
-<!ENTITY noscriptOptFilterXPost "Cross-site POST-aanvragen omzetten naar gegevensarme GET-aanvragen">
-<!ENTITY noscriptShowConsole "Console tonen…">
-<!ENTITY noscriptShowConsole.accesskey "t">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS-FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Onveilig herladen">
-<!ENTITY noscriptUnsafeReload.accesskey "h">
-<!ENTITY noscriptXssExceptions "Uitzonderingen voor Anti-XSS-bescherming">
-<!ENTITY noscriptXssExceptions.description "Bestemmingen die aan deze reguliere expressies voldoen, zullen NIET tegen XSS worden beschermd.">
-<!ENTITY noscriptMatchSample "Voorbeeld van patroonovereenkomst:">
-<!ENTITY noscriptReset "Herstellen">
-<!ENTITY noscriptReset.accesskey "H">
-<!ENTITY noscriptResetDef "Standaardwaarden terugzetten">
-<!ENTITY noscriptResetDef.accesskey "S">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Tijdelijke toestemmingen intrekken">
-<!ENTITY noscriptRevokeTemp.accesskey "s">
-<!ENTITY noscriptNoUntrustedPlaceholder "Geen vervangend pictogram voor objecten afkomstig van als niet vertrouwd gemarkeerde websites">
-<!ENTITY noscriptCollapseBlockedObjects "Geblokkeerde objecten samenvouwen">
-<!ENTITY noscriptExceptions "Uitzonderingen…">
-<!ENTITY noscriptBlockedObjects "Geblokkeerde objecten">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Elk object afkomstig van een als niet vertrouwd gemarkeerde website blokkeren">
-<!ENTITY noscriptTempAllowPage "Alles op deze pagina tijdelijk toestaan">
-<!ENTITY noscriptTempAllowPage.accesskey "t">
-<!ENTITY noscriptAllowPage "Alles op deze pagina toestaan">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Paginatoestemmingen definitief maken">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS-FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Gedrag">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Actieve webinhoud verbieden, tenzij afkomstig van een beveiligde (HTTPS-)verbinding:">
-<!ENTITY noscriptHttps.never "Nooit">
-<!ENTITY noscriptHttps.proxy "Bij gebruik van een proxy (aanbevolen voor Tor)">
-<!ENTITY noscriptHttps.always "Altijd">
-<!ENTITY noscriptHttpsForced "Onderstaande websites dwingen beveiligde (HTTPS-)verbindingen te gebruiken:">
-<!ENTITY noscriptHttpsForcedExceptions "Onderstaande websites NOOIT dwingen beveiligde (HTTPS-)verbindingen te gebruiken:">
-<!ENTITY noscriptSecureCookies "Automatisch beheer van beveiligde cookies inschakelen">
-<!ENTITY noscriptSecureCookiesForced "Alle cookies ingesteld via HTTPS door onderstaande websites dwingen versleuteling te gebruiken:">
-<!ENTITY noscriptSecureCookiesExceptions "Door onderstaande websites via HTTPS ingestelde onveilige cookies negeren:">
-<!ENTITY noscriptClearClickTitle "‘ClearClick’-waarschuwing">
-<!ENTITY noscriptClearClickHeader "Potentiële poging tot ‘Clickjacking’ / aanpassing van gebruikersinterface!">
-<!ENTITY noscriptClearClickDescription "NoScript heeft een muis- of toetsenbordinteractie met een gedeeltelijk verborgen element onderschept. Klik op de onderstaande afbeelding om tussen de belemmerde en de zichtbare versie om te schakelen.">
-<!ENTITY noscriptClearClickOpt "‘ClearClick’-bescherming op pagina’s…">
-<!ENTITY noscriptClearClickReport "Rapport">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Rapport-ID:">
-<!ENTITY noscriptTrustedPagesAdj "vertrouwd">
-<!ENTITY noscriptUntrustedPagesAdj "niet vertrouwd">
-<!ENTITY noscriptKeepLocked "Dit element geblokkeerd houden (aanbevolen)">
-<!ENTITY noscriptEmbeddings "Ingebouwde objecten">
-<!ENTITY noscriptPrev "Vorige">
-<!ENTITY noscriptNext "Volgende">
-<!ENTITY noscriptFrameOptErr.title "Deze inhoud kan niet in een deelvenster worden weergegeven">
-<!ENTITY noscriptFrameOptErr.desc "Om uw veiligheid te beschermen, staat de uitgever van deze inhoud niet toe deze in een deelvenster weer te geven.">
-<!ENTITY noscriptFrameOptErr.link "Klik hier om deze inhoud in een nieuw venster weer te geven">
-<!ENTITY noscriptBookmarkSync "NoScript-configuratie in een bladwijzer opslaan voor eenvoudige synchronisatie">
-<!ENTITY noscriptShowReleaseNotes "Uitgaveopmerkingen weergeven na bijwerken">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regels:">
-<!ENTITY ABE.enabled.label "ABE (Application Boundaries Enforcer) inschakelen">
-<!ENTITY ABE.siteEnabled.label "Websites toestaan eigen regels door te geven">
-<!ENTITY ABE.edit.label "Wijzigen…">
-<!ENTITY ABE.edit.accesskey "W">
-<!ENTITY ABE.enable.label "Inschakelen">
-<!ENTITY ABE.enable.accesskey "I">
-<!ENTITY ABE.disable.label "Uitschakelen">
-<!ENTITY ABE.disable.accesskey "U">
-<!ENTITY ABE.refresh.label "Vernieuwen">
-<!ENTITY ABE.refresh.accesskey "V">
-<!ENTITY noscriptUninstall "De-installeren">
-<!ENTITY noscriptRecentBlocked "Onlangs geblokkeerde websites">
-<!ENTITY noscriptExternalFilters "Externe filters">
-<!ENTITY noscriptEF.enable "Externe filters inschakelen">
-<!ENTITY noscriptEF.add "Nieuw filter…">
-<!ENTITY noscriptEF.executable "Uitvoerbaar bestand:">
-<!ENTITY noscriptEF.browse "Bladeren…">
-<!ENTITY noscriptEF.contentType "Te filteren inhoudstype (MIME) (exacte overeenkomst of reguliere expressie):">
-<!ENTITY noscriptEF.exceptions "Objecten niet filteren als ze van deze websites afkomstig zijn:">
-<!ENTITY noscriptEF.remove "Verwijderen">
-<!ENTITY noscriptPreset "Beveiligingsniveau">
-<!ENTITY noscriptPreset.off "Uit (sterk afgeraden!)">
-<!ENTITY noscriptPreset.low "Eenvoudig (Blokkeerlijst en webbeveiliging)">
-<!ENTITY noscriptPreset.medium "Klassiek (Toestemmingenlijst + webbeveiliging)">
-<!ENTITY noscriptPreset.high "Zwaar (volledige afsluiting)">
-<!ENTITY noscript.hoverUI "Toestemmingenmenu openen als muis op NoScript-pictogram wordt geplaatst">
-<!ENTITY noscriptDonate "Doneren">
-<!ENTITY noscriptDonate.accesskey "D">
-<!ENTITY noscriptCascadePermissions "Toestemmingen van bovenste document aan scripts van derden doorgeven">
-<!ENTITY noscriptRestrictSubdocScripting "Scripts in toegestane subdocumenten van niet-toegestane pagina’s blokkeren">
-<!ENTITY noscriptGlobalHttpsWhitelist "HTTPS-scripts op HTTPS-documenten overal toestaan">
-<!ENTITY noscriptPermanentInPrivate "Permanente ‘Toestaan’-opdrachten in privévensters">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/nl/noscript/noscript.properties b/extensions/noscript/chrome/locale/nl/noscript/noscript.properties
deleted file mode 100644
index 1e0bb24..0000000
--- a/extensions/noscript/chrome/locale/nl/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Scripts overal toestaan (gevaarlijk)
-forbidGlobal=Scripts overal verbieden (geadviseerd)
-allowLocal=%S toestaan
-allowTemp=%S tijdelijk toestaan
-forbidLocal=%S verbieden
-allowed.glb=Gevaar! Scripts worden overal toegestaan
-allowed.glb-emb=Scripts worden overal toegestaan, maar sommige insluitingen geblokkeerd
-allowed.yes=Scripts worden momenteel toegestaan
-allowed.prt=Scripts worden gedeeltelijk toegestaan
-allowed.no=Scripts worden momenteel niet toegestaan
-global.warning.title=Waarschuwing!
-global.warning.text=Scripts zullen overal worden toegestaan (voor alle websites).\nDit is een potentieel gevaarlijke actie.\nWilt u echt doorgaan?
-audio.samples=Geluidsvoorbeelden
-confirm=Weet u het zeker?
-alwaysAsk=Altijd om bevestiging vragen
-notifyHide=Verbergen na %S seconden
-trust=%S vertrouwen
-distrust=%S markeren als niet vertrouwd
-untrustedOrigin=een niet-vertrouwde oorsprong
-xss.notify.generic=NoScript heeft een potentiële poging tot cross-site scripting (XSS) van %S geblokkeerd. Technische details zijn in de Console vastgelegd.
-xss.notify.showConsole=Console tonen…
-xss.notify.showConsole.accessKey=t
-xss.reason.filterXGet=Verdachte aanvraag opgeschoond. Oorspronkelijke URL [%1$S] opgevraagd vanaf [%2$S]. Opgeschoonde URL: [%3$S].
-xss.reason.filterXGetRef=Verdachte aanvraagverwijzer opgeschoond. URL [%1$S] opgevraagd vanaf [%2$S]. Opgeschoonde verwijzer: [%3$S].
-xss.reason.filterXPost=Verdachte upload naar [%1$S] vanaf [%2$S] opgeschoond: omgezet naar een alleen downloadbare GET-aanvraag.
-unsafeReload.warning=ONVEILIG opnieuw laden van een verdachte\n\n%1$S [%2$S]\n\nVANAF [%3$S]\n\nNoScript zal deze aanvraag NIET blokkeren!\n
-metaRefresh.notify=NoScript heeft een <META>-omleiding binnen een <NOSCRIPT>-element geblokkeerd: %S in %S seconden.
-metaRefresh.notify.follow=Omleiding volgen
-metaRefresh.notify.follow.accessKey=V
-notify.options=Opties
-notify.options.accessKey=O
-reset.title=NoScript-herinitialisatie
-reset.warning=ALLE NoScript-voorkeuren en toestemmingen voor websites zullen onmiddellijk naar hun standaardwaarden worden teruggezet.\nDeze actie kan niet ongedaan worden gemaakt.\nWilt u doorgaan?
-bookmarkSync.title=NoScript-configuratiebladwijzer
-bookmarkSync.message=Deze bladwijzer is NIET bedoeld om te worden geopend, maar om te worden gesynchroniseerd via een service zoals Weave of de XMarks-extensie.
-bookmarkSync.confirm=NoScript heeft een configuratiebladwijzer gevonden die lijkt te zijn opgeslagen op\n%S.\nWilt u echt uw lokale NoScript-configuratie met de inhoud van deze bladwijzer overschrijven?
-ABE.notify=Aanvraag %1$S gefilterd door ABE: <%2$S> %3$S
-ABE.chooseEditor=Kies een teksteditor voor ABE-regelsets
-ABE.syntaxError=Syntaxisfout in ABE-regelset!
-ABE.wanIpAsLocal=WAN-IP (%S) ∈ LOKAAL
-allowFrom=Alles van %S toestaan
-allowTempFrom=Tijdelijk alles van %S toestaan
-siteInfo.confirm=U gaat om informatie vragen over de website ‘%1$S’\ndoor een aanvraag naar %2$S te verzenden.\nWilt u doorgaan?
-siteInfo.tooltip=Klik met de middelste muisknop of druk op shift en klik voor website-informatie...
-ef.activate=%S filteren
-ef.options=%S-opties…
-ef.newName=Voer de naam in van het nieuwe filter:
-ef.locateExe=Selecteer het uitvoerbare bestand voor het filter %S
-disable=%S uitschakelen
-disable.accessKey=u
-removal.title=Waarschuwing voor beveiligingsdowngrade
-removal.message=Door NoScript uit te schakelen of te verwijderen, worden ALLE door NoScript geboden beschermingen stopgezet.\n\nAls u alleen het per website verwerken van alle scripttoestemmingen vervelend vindt, bestaat er een veiligere keuze.\n\nNoScript kan het blokkeren van scripts stoppen, behalve die welke u als niet vertrouwd markeert, terwijl het u toch via de meest geavanceerde beveiligingsmaatregelen beschermt tegen XSS, Clickjacking, CSRF en andere internetdreigingen.\n\nWilt u echt ALLE beschermingen van NoScript verwijderen?\n
-removal.no=Nee, alleen het blokkeren van scripts stoppen
-removal.yes=Ja, ALLE beschermingen verwijderen
-incompatibleOptions.title=Waarschuwing voor incompatibele opties
-incompatibleOptions=‘%1$S’\nis niet compatibel met ‘%2$S’.\bWilt u het vorige inschakelen en het laatste uitschakelen?
diff --git a/extensions/noscript/chrome/locale/pl/noscript/about.properties b/extensions/noscript/chrome/locale/pl/noscript/about.properties
deleted file mode 100644
index 6e9e894..0000000
--- a/extensions/noscript/chrome/locale/pl/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Zarządza wykonywaniem przez Firefoksa skryptów JavaScript, Flash i innych wtyczek
-aboutTitle=Informacje o %S
-extensionContributors=Współtwórcy:
-extensionContributors.tip=Osoby, którym powinieneś podziękować za to rozszerzenie
-extensionCreatorLabel=Autor:
-changelog=Lista zmian
-changelog.tip=Wyświetla listę zmian
-license=Umowa licencyjna
-license.tip=Przeczytaj umowę licencyjną
-logo.tip=Zobacz stronę domową rozszerzenia
-sponsor.tip=Zobacz stronę domową sponsora
-informaction.tip=Zobacz stronę domową InformAction
-extensionHomepage.tip=Zobacz stronę domową rozszerzenia
-extensionCreator.tip=Zobacz stronę domową autora
-version=Wersja %S
diff --git a/extensions/noscript/chrome/locale/pl/noscript/noscript.dtd b/extensions/noscript/chrome/locale/pl/noscript/noscript.dtd
deleted file mode 100644
index 6270c52..0000000
--- a/extensions/noscript/chrome/locale/pl/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Ustawienia">
-<!ENTITY noscriptOptions.accesskey "U">
-<!ENTITY noscriptOptionsLong "NoScript – ustawienia">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5 – informacje">
-<!ENTITY noscriptPermissionsText "Tutaj można określić witryny internetowe, które będą mogły uruchamiać skrypty. Proszę wprowadzić adres lub domenę witryny (np: „http://www.witryna.pl” lub „witryna.pl”) i nacisnąć przycisk Pozwól.">
-<!ENTITY noscriptWebAddress "Adres witryny:">
-<!ENTITY noscriptAllow "Pozwól">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Zabroń">
-<!ENTITY noscriptForbid.accesskey "Z">
-<!ENTITY noscriptTrust "Oznacz jako zaufaną">
-<!ENTITY noscriptTrust.accesskey "U">
-<!ENTITY noscriptUntrust "Oznacz jako niezaufaną">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Usuń wybrane witryny">
-<!ENTITY noscriptGloballyEnabled "Pozwalaj na wykonywanie skryptów JavaScript (niebezpieczne)">
-<!ENTITY noscriptAutoReload "Automatycznie odświeżaj stronę po zmianie uprawnień">
-<!ENTITY noscriptGeneral "Ogólne">
-<!ENTITY noscriptAppearance "Wygląd">
-<!ENTITY noscriptShow "Wyświetlaj:">
-<!ENTITY noscriptCtxMenu "Menu kontekstowe">
-<!ENTITY noscriptStatusIcon "Ikonę na pasku stanu">
-<!ENTITY noscriptFullAddr "Nie blokuj z […] (pełny adres np. http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Nie blokuj z […] (pełna domena np. www.noscript.net)">
-<!ENTITY noscriptBaseDom "Nie blokuj z […] (podstawa domeny np. noscript.net)">
-<!ENTITY noscriptTempCmd "Tymczasowo nie blokuj z […]">
-<!ENTITY noscriptSound "Odtwarzaj dźwięk, gdy skrypty są blokowane">
-<!ENTITY noscriptImport "Importuj">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Eksportuj">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Wyświetlaj powiadomienie o blokowanych skryptach">
-<!ENTITY noscriptNotify.bottom "Umieszczaj powiadomienie na dole okna przeglądarki">
-<!ENTITY noscriptSound.choose "Przeglądaj">
-<!ENTITY noscriptSound.choose.accesskey "P">
-<!ENTITY noscriptSound.play "Odtwórz">
-<!ENTITY noscriptSound.play.accesskey "O">
-<!ENTITY noscriptSound.reset "Domyślny">
-<!ENTITY noscriptSound.reset.accesskey "D">
-<!ENTITY noscriptAdvanced "Zaawansowane">
-<!ENTITY noscriptAdditionalPermissions "Dodatkowe uprawnienia dla zaufanych witryn">
-<!ENTITY noscriptAllowClipboard "Pozwalaj na kopiowanie/wklejanie z zewnętrznego schowka w formacie RTF">
-<!ENTITY noscriptAdditionalRestrictions "Dodatkowe ograniczenia dla niezaufanych witryn">
-<!ENTITY noscriptPlugins "Wtyczki">
-<!ENTITY noscriptContentBlocker "Zastosuj te ograniczenia także do zaufanych witryn">
-<!ENTITY noscriptForbidJava "Blokuj aplety Java™">
-<!ENTITY noscriptForbidXSLT "Blokuj aplety XSLT">
-<!ENTITY noscriptForbidSilverlight "Blokuj aplety Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Blokuj aplety &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Blokuj aplety &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Blokuj aplety @font-face">
-<!ENTITY noscriptForbidWebGL "Blokuj aplety WebGL">
-<!ENTITY noscriptForbidMedia "Blokuj aplety &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Blokuj animacje Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Blokuj inne wtyczki">
-<!ENTITY noscriptReloadWarn "Uwaga! Opcje te będą działały po odświeżeniu stron oraz w nowo otwieranych stronach.">
-<!ENTITY noscriptConfirmUnblock "Pytaj o potwierdzenie przed czasowym odblokowaniem obiektu">
-<!ENTITY noscriptStatusLabel "Informacje na pasku stanu">
-<!ENTITY noscriptForbidBookmarklets "Blokuj skryptozakładki">
-<!ENTITY noscriptShowPlaceholder "Wyświetlaj ikonę zamiennika">
-<!ENTITY noscriptTruncateTitle "Skracaj tytuły dokumentów">
-<!ENTITY noscriptFixLinks "Próbuj przekształcić odnośniki JavaScript w normalne odnośniki">
-<!ENTITY noscriptAllowBookmarks "Pozwalaj na wykonywanie skryptów witrynom otwieranym z folderu Zakładki">
-<!ENTITY noscriptAllowViaBookmarks "Pozwalaj na wykonywanie skryptów witrynom otwieranym z folderu Zakładki">
-<!ENTITY noscriptAllowPing "Pozwalaj na &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Pozwalaj na wykonywanie skryptów lokalnym odnośnikom">
-<!ENTITY noscriptForbidPing "Nie pozwalaj na &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Nie pozwalaj na przekierowania META znajdujące się wewnątrz elementu HTML &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Wyświetlaj informacje o zablokowanych przekierowaniach META">
-<!ENTITY noscriptNotifyMeta.accesskey "M">
-<!ENTITY noscriptWhitelist "Zaufane witryny">
-<!ENTITY noscriptPermissions "Zezwolenia">
-<!ENTITY noscriptRefresh "Odświeżanie">
-<!ENTITY noscriptNotifications "Powiadomienia">
-<!ENTITY noscriptToolbarToggle "Naciśnięcie lp. myszy przycisku NoScript zmienia zezwolenia dla aktywnej witryny">
-<!ENTITY noscriptTrusted "Zaufane">
-<!ENTITY noscriptUntrusted "Niezaufane">
-<!ENTITY noscriptUnknown "Nieznana">
-<!ENTITY noscriptAdd "Dodaj">
-<!ENTITY noscriptAdd.accesskey "D">
-<!ENTITY noscriptClose "Zamknij">
-<!ENTITY noscriptSiteManager "Menedżer witryn">
-<!ENTITY noscriptSecurityManager "Menedżer bezpieczeństwa">
-<!ENTITY noscriptPolicies "Działania">
-<!ENTITY noscriptDefaultPolicies "Działania domyślne">
-<!ENTITY noscriptSitePolicies "Działania specyficzne dla danej witryny">
-<!ENTITY noscriptNselNever "Nie wyświetlaj składników pobieranych z elementu HTML &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Wyświetlaj składniki pobierane z blokowanych witryn przez element &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Domyślne, czasowo dozwolone witryny">
-<!ENTITY noscriptDescription "Dodatkowe zabezpieczenie Firefoksa. NoScript pozwala na wykonywanie kodów JavaScript, Java i innych wtyczek tylko wybranym przez użytkownika zaufanym domenom np. strony bankowe. Lista zaufanych domen pozwala zabezpieczyć się przed znanymi i nieznanymi witrynami próbującymi przechwycić dane o użytkowniku. Eksperci potwierdzają, że Firefox z zainstalowanym NoScript jest bezpieczniejszy.">
-<!ENTITY noscriptOptBlockCssScanners "Blokuj skanery oparte na cross-site scripting (XSS)">
-<!ENTITY noscriptOptFilterXGet "Usuwaj podejrzane żądania">
-<!ENTITY noscriptOptFilterXPost "Zamieniaj żądania cross-site POST na data-less GET">
-<!ENTITY noscriptShowConsole "Wyświetl konsolę">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "S">
-<!ENTITY noscriptXssFaq "XSS - Pytania i odpowiedzi…">
-<!ENTITY noscriptXssFaq.accesskey "X">
-<!ENTITY noscriptUnsafeReload "Odśwież bez zabezpieczeń">
-<!ENTITY noscriptUnsafeReload.accesskey "W">
-<!ENTITY noscriptXssExceptions "Wyjątki zabezpieczeń Anty-XSS">
-<!ENTITY noscriptXssExceptions.description "Obiekty odpowiadające tym wyrażeniom regularnym nie będą zabezpieczane przed XSS">
-<!ENTITY noscriptMatchSample "Przykłady wzorców:">
-<!ENTITY noscriptReset "Resetuj">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Przywróć domyślne">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Unieważnij tymczasowe zezwolenia">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nie wyświetlaj ikon zamienników dla obiektów pochodzących z witryn oznaczonych jako niezaufane">
-<!ENTITY noscriptCollapseBlockedObjects "Zwijaj zablokowane obiekty">
-<!ENTITY noscriptExceptions "Wyjątki…">
-<!ENTITY noscriptBlockedObjects "Obiekty zablokowane">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokuj każdy obiekt pochodzący z witryny oznaczonej jako niezaufana">
-<!ENTITY noscriptTempAllowPage "Tymczasowo nie blokuj na tej stronie">
-<!ENTITY noscriptTempAllowPage.accesskey "M">
-<!ENTITY noscriptAllowPage "Zezwól na wszystko tej stronie">
-<!ENTITY noscriptAllowPage.accesskey "W">
-<!ENTITY noscriptTempToPerm "Określ jako stałe ustawienia dla tej strony">
-<!ENTITY noscriptTempToPerm.accesskey "S">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS – Pytania i odpowiedzi…">
-<!ENTITY noscriptHttpsFaq.accesskey "H">
-<!ENTITY noscriptHttps.behavior "Zachowanie">
-<!ENTITY noscriptHttps.cookies "Ciasteczka">
-<!ENTITY noscriptHttps.description "Działanie aktywnej zawartości, łącznie z pochodzącą z bezpiecznego połączenia:">
-<!ENTITY noscriptHttps.never "Dopuszczaj">
-<!ENTITY noscriptHttps.proxy "Nie dopuszczaj, gdy jest używane proxy (zalecane przy używaniu Tor)">
-<!ENTITY noscriptHttps.always "Nie dopuszczaj">
-<!ENTITY noscriptHttpsForced "Zawsze stosuj bezpieczne połączenia z następującymi witrynami:">
-<!ENTITY noscriptHttpsForcedExceptions "Nigdy nie stosuj bezpiecznych połączeń z następującymi witrynami:">
-<!ENTITY noscriptSecureCookies "Zarządzaj automatycznie bezpiecznymi ciasteczkami">
-<!ENTITY noscriptSecureCookiesForced "Stosuj szyfrowanie ciasteczek ustawionych przez HTTPS dla następujących witryn:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignoruj niebezpieczne ciasteczka ustawione przez HTTPS dla następujących witryn:">
-<!ENTITY noscriptClearClickTitle "Ostrzeżenia kliknięć ukrytych obiektów">
-<!ENTITY noscriptClearClickHeader "Potencjalne zagrożenie przechwytywania kliknięć/Próba przywrócenia prawidłowego interfejsu">
-<!ENTITY noscriptClearClickDescription "NoScript przechwycił interakcję myszy lub klawiatury z częściowo ukrytym elementem. Kliknij na powyższym obrazku, aby wyświetlić/schować ukrytą wersję.">
-<!ENTITY noscriptClearClickOpt "Zabezpieczenia kliknięć ukrytych obiektów na stronach internetowych">
-<!ENTITY noscriptClearClickReport "Raport">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID raportu:">
-<!ENTITY noscriptTrustedPagesAdj "zaufana">
-<!ENTITY noscriptUntrustedPagesAdj "niezaufana">
-<!ENTITY noscriptKeepLocked "Pozostaw ten element zablokowany (zalecane)">
-<!ENTITY noscriptEmbeddings "Obiekty osadzone">
-<!ENTITY noscriptPrev "Poprzedni">
-<!ENTITY noscriptNext "Następny">
-<!ENTITY noscriptFrameOptErr.title "Ta treść nie może zostać wyświetlona w ramce">
-<!ENTITY noscriptFrameOptErr.desc "Aby chronić twoje bezpieczeństwo, wydawca tej treści nie zezwolił na wyświetlanie jej w ramce.">
-<!ENTITY noscriptFrameOptErr.link "Kliknij tutaj, aby otworzyć tę treść w nowym oknie">
-<!ENTITY noscriptBookmarkSync "Aby łatwo synchronizować ustawienia NoScript, utwórz kopię ustawień jako zakładkę">
-<!ENTITY noscriptShowReleaseNotes "Wyświetlaj informacje o wydaniu po wykonaniu aktualizacji">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Zestaw reguł:">
-<!ENTITY ABE.enabled.label "Włącz ABE (Ochroniarz aplikacji)">
-<!ENTITY ABE.siteEnabled.label "Zezwalaj witrynom stosować własne zestawy reguł">
-<!ENTITY ABE.edit.label "Edytuj">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Włącz">
-<!ENTITY ABE.enable.accesskey "W">
-<!ENTITY ABE.disable.label "Wyłącz">
-<!ENTITY ABE.disable.accesskey "C">
-<!ENTITY ABE.refresh.label "Odśwież">
-<!ENTITY ABE.refresh.accesskey "O">
-<!ENTITY noscriptUninstall "Odinstaluj">
-<!ENTITY noscriptRecentBlocked "Ostatnio zablokowane witryny">
-<!ENTITY noscriptExternalFilters "Filtry zewnętrzne">
-<!ENTITY noscriptEF.enable "Włącz filtry zewnętrzne">
-<!ENTITY noscriptEF.add "Nowy filtr…">
-<!ENTITY noscriptEF.executable "Plik wykonywalny:">
-<!ENTITY noscriptEF.browse "Przeglądaj…">
-<!ENTITY noscriptEF.contentType "Zawartość typu (MIME) będzie filtrowana (dokładne dopasowanie lub wyrażenie regularne):">
-<!ENTITY noscriptEF.exceptions "Nie filtruj obiektów przychodzących z następujących witryn:">
-<!ENTITY noscriptEF.remove "Usuń">
-<!ENTITY noscriptPreset "Poziom zabezpieczeń">
-<!ENTITY noscriptPreset.off "Wyłączone (naprawdę?!)">
-<!ENTITY noscriptPreset.low "Niski (lista zabronionych + zabezpieczenia sieciowe)">
-<!ENTITY noscriptPreset.medium "Średni (lista dozwolonych + zabezpieczenia sieciowe))">
-<!ENTITY noscriptPreset.high "Wysoki (pełne blokowanie)">
-<!ENTITY noscript.hoverUI "Otwórz menu ustawień po umieszczeniu wskaźnika myszy nad ikoną NoScript">
-<!ENTITY noscriptDonate "Dotacje">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/pl/noscript/noscript.properties b/extensions/noscript/chrome/locale/pl/noscript/noscript.properties
deleted file mode 100644
index a6d935d..0000000
--- a/extensions/noscript/chrome/locale/pl/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Wyłącz blokowanie skryptów (niebezpieczne)
-forbidGlobal=Włącz blokowanie skryptów JavaScript (zalecane)
-allowLocal=Nie blokuj z %S
-allowTemp=Tymczasowo nie blokuj z %S
-forbidLocal=Blokuj z %S
-allowed.glb=Niebezpieczeństwo! Wyłączono blokowanie skryptów.
-allowed.yes=Wykonywanie skryptów dozwolone
-allowed.prt=Wykonywanie skryptów tymczasowo dozwolone
-allowed.no=Zablokowane skrypty:
-global.warning.title=Uwaga!
-global.warning.text=Wykonywanie skryptów zostanie dozwolone globalnie (dla każdej strony).\nStanowi to potencjalne zagrożenie. Czy na pewno chcesz kontynuować?
-audio.samples=Pliki dźwiękowe
-confirm=Czy na pewno?
-alwaysAsk=Zawsze pytaj o potwierdzenie
-notifyHide=Ukryj po %S sekundach
-trust=Oznacz %S jako zaufaną
-distrust=Oznacz %S jako niezaufaną
-untrustedOrigin=niezaufane źródło
-xss.notify.generic=NoScript odfiltrował potencjalne próby przechwytywania informacji metodą cross-site scripting (XSS) pochodzące z %S. Dane techniczne zostały zapisane w dzienniku zdarzeń.
-xss.notify.showConsole=Wyświetl konsolę
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Wyczyszczone podejrzane żądania. Oryginalny URL [%1$S] żądany z [%2$S]. Wyczyszczony URL: [%3$S].
-xss.reason.filterXGetRef=Wyczyszczone podejrzane żądania referera. URL [%1$S] żądany z [%2$S]. Wyczyszczony referer: [%3$S].
-xss.reason.filterXPost=Wyczyszczone podejrzane wysyłki do [%1$S] z [%2$S]: zmienione na żądania download-only GET.
-unsafeReload.warning=Niezabezpieczone odświeżanie podejrzanych\n\n%1$S [%2$S]\n\nz [%3$S]\n\nNoScript nie będzie zabezpieczał tych żądań!\n
-metaRefresh.notify=NoScript zablokował przekierowanie <META> znajdujące się wewnątrz elementu <NOSCRIPT>: %S w %S s.
-metaRefresh.notify.follow=Podążaj za przekierowaniem
-metaRefresh.notify.follow.accessKey=P
-notify.options=Opcje
-notify.options.accessKey=O
-reset.title=Przywróć domyślne
-reset.warning=Zostaną przywrócone wartości domyślne ustawień NoScript i zezwoleń witryn.\nTej operacji nie można odwrócić.\nCzy kontynuować?
-bookmarkSync.title=Zakładka konfiguracyjna MoScript
-bookmarkSync.message=To nie jest typowa zakładka i nie służy do otwierania strony. Służy ona do synchronizacji za pomocą serwisu Weave lub rozszerzenia XMarks.
-bookmarkSync.confirm=NoScript znalazł zakładkę konfiguracyjną zapisaną prawdopodobnie w\n%S.\nCzy chcesz zastąpić lokalną konfigurację NoScript zawartością tej zakładki?
-ABE.notify=Żądanie %1$S zostało przefiltrowane przez ABE: <%2$S> %3$S
-ABE.chooseEditor=Wybierz edytor tekstu do edycji zestawu reguł ABE
-ABE.syntaxError=Błąd składni w zestawie reguł ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Nie blokuj wszystkich z %S
-allowTempFrom=Nie blokuj tymczasowo wszystkich z %S
-siteInfo.confirm=Zamierzasz poprosić o informacje o witrynie „%1$S”\nwysyłając zapytanie do %2$S.\nCzy chcesz kontynuować?
-siteInfo.tooltip=Kliknij prawym przyciskiem myszy lub użyj skrótu Shift+kliknięcie, by uzyskac informacje o witrynie…
-ef.activate=Filtr %S
-ef.options=%S opcji…
-ef.newName=Podaj nazwę nowego filtru:
-ef.locateExe=Wybierz plik wykonywalny dla filtru %S
-disable=Wyłącz %S
-disable.accessKey=W
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/pt-BR/noscript/about.properties b/extensions/noscript/chrome/locale/pt-BR/noscript/about.properties
deleted file mode 100644
index 8b114cb..0000000
--- a/extensions/noscript/chrome/locale/pt-BR/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Proteção extra para o seu Firefox: O NoScript permite o uso de JavaScripts, Java (e outros plugins) somente para os domínios confiáveis que você selecionar (por exemplo, no site do seu banco). Esse bloqueio baseado em uma lista branca previne a exploração de vulnerabilidades de segurança (conhecidas e até mesmo desconhecidas!) sem perda de funcionalidades… Usuários e especialistas concordam: o Firefox é realmente mais seguro com o NoScript :-)
-aboutTitle=Sobre %S
-extensionContributors=Colaboradores:
-extensionContributors.tip=Pessoas a quem você deve agradecer por esta extensão
-extensionCreatorLabel=Autor:
-changelog=Histórico de mudanças
-changelog.tip=Mostrar histórico de mudanças
-license=Licença
-license.tip=Ler licença do usuário
-logo.tip=Visitar página da extensão
-sponsor.tip=Visitar página dos patrocinadores
-informaction.tip=Visitar página da InformAction
-extensionHomepage.tip=Visitar página da extensão
-extensionCreator.tip=Visitar página do autor
-version=Versão %S
diff --git a/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.dtd b/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.dtd
deleted file mode 100644
index c2ceca4..0000000
--- a/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opções">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opções do NoScript">
-<!ENTITY noscriptAbout "Sobre o NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "Você pode especificar os sites que podem executar JavaScripts. Escreva o endereço ou o domínio (ex &quot;http://www.site.com&quot; ou &quot;site.com&quot;) do site que deseja permitir e depois clique em Permitir.">
-<!ENTITY noscriptWebAddress "Endereço:">
-<!ENTITY noscriptAllow "Permitir">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Proibir">
-<!ENTITY noscriptForbid.accesskey "P">
-<!ENTITY noscriptTrust "Marcar como Confiável">
-<!ENTITY noscriptTrust.accesskey "C">
-<!ENTITY noscriptUntrust "Marcar como Não Confiável">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Remover Sites Selecionados">
-<!ENTITY noscriptGloballyEnabled "JavaScript Globalmente Permitido (perigoso)">
-<!ENTITY noscriptAutoReload "Atualizar automaticamente a página atual quando as permissões são alteradas.">
-<!ENTITY noscriptGeneral "Geral">
-<!ENTITY noscriptAppearance "Aparência">
-<!ENTITY noscriptShow "Mostrar…">
-<!ENTITY noscriptCtxMenu "Menu de Contexto">
-<!ENTITY noscriptStatusIcon "Ícone da Barra de Status">
-<!ENTITY noscriptFullAddr "Endereços completos (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domínios completos (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base de domínios do 2º nível (noscript.net)">
-<!ENTITY noscriptTempCmd "Permitir temporariamente […]">
-<!ENTITY noscriptSound "Alerta de áudio quando os scripts são bloqueados">
-<!ENTITY noscriptImport "Importar">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportar">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostrar mensagens sobre os scripts bloqueados">
-<!ENTITY noscriptNotify.bottom "Mostrar mensagens no botão">
-<!ENTITY noscriptSound.choose "Escolher">
-<!ENTITY noscriptSound.choose.accesskey "E">
-<!ENTITY noscriptSound.play "Tocar">
-<!ENTITY noscriptSound.play.accesskey "T">
-<!ENTITY noscriptSound.reset "Restaurar padrões">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avançado">
-<!ENTITY noscriptAdditionalPermissions "Permissões adicionais para sites confiáveis">
-<!ENTITY noscriptAllowClipboard "Permitir copiar e colar texto a partir da área de transferência">
-<!ENTITY noscriptAdditionalRestrictions "Restrições adicionais para sites não confiáveis">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Aplicar restrições a sites confiáveis também.">
-<!ENTITY noscriptForbidJava "Proibir Java™">
-<!ENTITY noscriptForbidXSLT "Proibir XSLT">
-<!ENTITY noscriptForbidSilverlight "Proibir Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Proibir &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Proibir &lt;FRAMES&gt;">
-<!ENTITY noscriptForbidFonts "Proibir @font-face">
-<!ENTITY noscriptForbidWebGL "Proibir WebGL">
-<!ENTITY noscriptForbidMedia "Proibir &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Proibir Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Proibir outros plugins">
-<!ENTITY noscriptReloadWarn "Estas opções terão efeito em páginas novas ou (manualmente) atualizadas.">
-<!ENTITY noscriptConfirmUnblock "Pedir confirmação antes de desbloquear temporariamente um objeto">
-<!ENTITY noscriptStatusLabel "Informações na barra de status">
-<!ENTITY noscriptForbidBookmarklets "Proibir livretos de favoritos">
-<!ENTITY noscriptShowPlaceholder "Mostrar ícone de substituição">
-<!ENTITY noscriptTruncateTitle "Quebrar títulos dos documentos">
-<!ENTITY noscriptFixLinks "Tentar corrigir links JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permitir sites abertos pelos favoritos">
-<!ENTITY noscriptAllowViaBookmarks "Permitir sites abertos pelos favoritos">
-<!ENTITY noscriptAllowPing "Permitir &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permitir links locais">
-<!ENTITY noscriptForbidPing "Proibir &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Proibir redirecionamentos META dentro de elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "A">
-<!ENTITY noscriptNotifyMeta "Exibir mensagem sobre META redirecionamentos bloqueados">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Lista Branca">
-<!ENTITY noscriptPermissions "Permissões">
-<!ENTITY noscriptRefresh "Atualizar">
-<!ENTITY noscriptNotifications "Notificações">
-<!ENTITY noscriptToolbarToggle "Um clique esquerdo no botão do NoScript na barra de ferramentas altera as permissões para o site atual">
-<!ENTITY noscriptTrusted "Confiável">
-<!ENTITY noscriptUntrusted "Não confiável">
-<!ENTITY noscriptUnknown "Desconhecido">
-<!ENTITY noscriptAdd "Adicionar">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Fechar">
-<!ENTITY noscriptSiteManager "Gerenciador de Sites">
-<!ENTITY noscriptSecurityManager "Gerenciador de segurança">
-<!ENTITY noscriptPolicies "Políticas">
-<!ENTITY noscriptDefaultPolicies "Políticas Padrão">
-<!ENTITY noscriptSitePolicies "Políticas Específicas do Site">
-<!ENTITY noscriptNselNever "Ocultar elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostrar o elemento &lt;NOSCRIPT&gt; que perseguiu um script bloqueado &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Permitir temporariamente todos os sites de alto nível por padrão">
-<!ENTITY noscriptDescription "Proteção extra para o seu Firefox: O NoScript permite o uso de JavaScripts, Java (e outros plugins) somente para os domínios confiáveis que você selecionar (como por exemplo no site do seu internet banking). Esse bloqueio baseado em uma lista branca previne a exploração de vulnerabilidades de segurança (conhecidas e até mesmo as desconhecidas!) sem perda de desempenho… Usuários e especialistas concordam: o Firefox é realmente mais seguro com o NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquear varredores baseados em CSS">
-<!ENTITY noscriptOptFilterXGet "Desinfectar requerimentos suspeitos via site">
-<!ENTITY noscriptOptFilterXPost "Alterar requerimentos perigosos via site em requerimentos sem dados">
-<!ENTITY noscriptShowConsole "Mostrar Console…">
-<!ENTITY noscriptShowConsole.accesskey "M">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Perguntas e respostas do XSS …">
-<!ENTITY noscriptXssFaq.accesskey "P">
-<!ENTITY noscriptUnsafeReload "Recarregamento Inseguro">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Proteção Anti-XSS através das exceções">
-<!ENTITY noscriptXssExceptions.description "Os destinos que combinarem essas expressões NÃO serão protegidos do XSS">
-<!ENTITY noscriptMatchSample "Exemplo ilustrativo de combinação:">
-<!ENTITY noscriptReset "Restaurar">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Restaurar para os padrões">
-<!ENTITY noscriptResetDef.accesskey "p">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Anular Permissões Temporárias">
-<!ENTITY noscriptRevokeTemp.accesskey "A">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nenhum placeholder para objetos provenientes de sites marcados como não confiáveis">
-<!ENTITY noscriptCollapseBlockedObjects "Quebrar objetos bloqueados">
-<!ENTITY noscriptExceptions "Exceções…">
-<!ENTITY noscriptBlockedObjects "Objetos bloqueados">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquear todos os objetos provenientes de um site marcado como não confiável">
-<!ENTITY noscriptTempAllowPage "Autorizar tudo temporariamente nesta página">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Permitir todos nesta página">
-<!ENTITY noscriptAllowPage.accesskey "t">
-<!ENTITY noscriptTempToPerm "Tornar as permissões da página permanentes">
-<!ENTITY noscriptTempToPerm.accesskey "o">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "FAQ HTTPS">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportamento">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Proibir conteúdo web ativo a não ser que venha de uma conexão segura (HTTPS).">
-<!ENTITY noscriptHttps.never "Nunca">
-<!ENTITY noscriptHttps.proxy "Quando estiver usando um proxy (recomendado com Tor)">
-<!ENTITY noscriptHttps.always "Sempre">
-<!ENTITY noscriptHttpsForced "Forçar os sites seguintes a usarem conexões seguras (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Nunca forçar conexão segura (HTTPS) para os sites seguintes:">
-<!ENTITY noscriptSecureCookies "Ativar Gerenciamento Automático e Seguro de Cookies">
-<!ENTITY noscriptSecureCookiesForced "Forçar encriptação para todos os cookies usados por HTTPS pelos sites seguintes:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorara cookies inseguros usados por HTTPS pelos sites seguintes:">
-<!ENTITY noscriptClearClickTitle "Alerte de ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking em potencial / Tentativa de redirecionamento da interface do usuário!">
-<!ENTITY noscriptClearClickDescription "O NoScript interceptou uma interação por mouse ou teclado com um elemento parcialmente oculto. Clique na imagem para rodar entre a versão oculta e a versão clara.">
-<!ENTITY noscriptClearClickOpt "Proteção Clearclick nas páginas...">
-<!ENTITY noscriptClearClickReport "Relatório">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID do Relatório:">
-<!ENTITY noscriptTrustedPagesAdj "confiável">
-<!ENTITY noscriptUntrustedPagesAdj "não confiável">
-<!ENTITY noscriptKeepLocked "Manter esse elemento travado (recomendado)">
-<!ENTITY noscriptEmbeddings "Objetos Integrados">
-<!ENTITY noscriptPrev "Anterior">
-<!ENTITY noscriptNext "Próximo">
-<!ENTITY noscriptFrameOptErr.title "Esse conteúdo não pode ser mostrado num frame">
-<!ENTITY noscriptFrameOptErr.desc "Para aumentar sua segurança, o publicador desse conteúdo não permite que ele seja mostrado num frame.">
-<!ENTITY noscriptFrameOptErr.link "Clique aqui para abrir esse conteúdo em uma nova janela">
-<!ENTITY noscriptBookmarkSync "Fazer backup da configuração do NoScript em um favorito para fácil sincronização">
-<!ENTITY noscriptShowReleaseNotes "Mostra as notas de lançamento das atualizações">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Ajustes de regras">
-<!ENTITY ABE.enabled.label "Ativar ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Permitir que sites usem suas próprias regras">
-<!ENTITY ABE.edit.label "Editar...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Ativar">
-<!ENTITY ABE.enable.accesskey "A">
-<!ENTITY ABE.disable.label "Desativar">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Atualizar">
-<!ENTITY ABE.refresh.accesskey "t">
-<!ENTITY noscriptUninstall "Desinstalar">
-<!ENTITY noscriptRecentBlocked "Sites bloqueados recentemente">
-<!ENTITY noscriptExternalFilters "Filtros externos">
-<!ENTITY noscriptEF.enable "Habilitar filtros externos">
-<!ENTITY noscriptEF.add "Novo filtro…">
-<!ENTITY noscriptEF.executable "Arquivo executável:">
-<!ENTITY noscriptEF.browse "Procurar…">
-<!ENTITY noscriptEF.contentType "Tipo de conteúdo (MIME) a ser filtrado (valor exato ou expressão regular):">
-<!ENTITY noscriptEF.exceptions "Não filtrar objetos provenientes desses sites:">
-<!ENTITY noscriptEF.remove "Remover">
-<!ENTITY noscriptPreset "Nível de segurança">
-<!ENTITY noscriptPreset.off "Nenhum (está falando sério?!)">
-<!ENTITY noscriptPreset.low "Tranquilo (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Clássico (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortaleza (bloqueio completo)">
-<!ENTITY noscript.hoverUI "Abrir o menu de permissões quando o mouse passar sobre o ícone do NoScript">
-<!ENTITY noscriptDonate "Doar">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.properties b/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.properties
deleted file mode 100644
index bd1b41e..0000000
--- a/extensions/noscript/chrome/locale/pt-BR/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permitir JavaScript Globalmente (perigoso)
-forbidGlobal=Proibir JavaScript Globalmente (recomendado)
-allowLocal=Permitir %S
-allowTemp=Temporariamente permitir %S
-forbidLocal=Proibir %S
-allowed.glb=Perigo! JavaScript Permitido Globalmente
-allowed.yes=JavaScripts Atualmente Permitidos
-allowed.prt=JavaScripts Parcialmente Permitidos
-allowed.no=JavaScripts Atualmente Proibidos
-global.warning.title=Alerta!
-global.warning.text=Os JavaScripts serão globalmente permitidos (em qualquer site).\n Esta é uma ação potencialmente perigosa.\nTem certeza que deseja prosseguir?
-audio.samples=Amostras de Áudio
-confirm=Tem certeza?
-alwaysAsk=Sempre pedir confirmação
-notifyHide=Ocultar após %S segundos
-trust=Confiar %S
-distrust=Marcar %S como não confiável
-untrustedOrigin=uma origem não confiável
-xss.notify.generic=O NoScript filtrou uma tentativa de uso de script via site(XSS) vinda de %S. Detalhes técnicos foram gravados no Console.
-xss.notify.showConsole=Mostrar Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Desinfectou um requerimento suspeito. URL original [%1$S] requerido por [%2$S]. URL desinfectada: [%3$S].
-xss.reason.filterXGetRef=Desinfectou um requerimento de referência suspeita. URL [%1$S] requerida por [%2$S]. Referência desinfectada: [%3$S].
-xss.reason.filterXPost=Desinfectou um envio de arquivo suspeito de [%1$S] para [%2$S]: transformado em um requerimento do tipo somente download.
-unsafeReload.warning=Recarregamento INSEGURO e suspeito\n\n%1$S [%2$S}\n\nDE [%3$S]\n\nO NoScript NÃO protegerá este requerimento!\n
-metaRefresh.notify=O NoScript bloqueou um redirecionamento <META> dentro de um elemento do <NOSCRIPT>: %S em %S segundos.
-metaRefresh.notify.follow=Perseguir redirecionamento
-metaRefresh.notify.follow.accessKey=F
-notify.options=Opções
-notify.options.accessKey=O
-reset.title=Restaurar configurações do NoScript
-reset.warning=TODAS as configurações do NoScript e permissões de sites serão restauradas aos seus valores padrão imediatamente.\nEsta ação não poderá ser revertida.\nQuer prosseguir?
-bookmarkSync.title=Configuração de Favoritos do NoScript
-bookmarkSync.message=Esse favorito NÃo foi feito para ser aberto, mas para ser sincronizado utilizando um serviço como o Weave ou a extensão XMarks.
-bookmarkSync.confirm=O NoScript descobriu uma configuração dos favoritos aparentemente salva em\n%S.\nVocê realmente quer sobrescrever suas configurações locais do NoScript com o conteúdo desse favorito?
-ABE.notify=Requisição %1$S filtrada por ABE:<%2$S> %3$S
-ABE.chooseEditor=Favor selecionar um editor de texto para ajuste de regras do ABE
-allowFrom=Permitir tudo de %S
-allowTempFrom=Temporariamente permitir tudo de %S
-ABE.syntaxError=Erro de sintaxe no conjunto de regras ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=Você está prestes a pedir informações sobre o site "%1$S"\nao fazer uma consulta ao %2$S.\nDeseja continuar?
-siteInfo.tooltip=Click com o botão do meio, ou Shift click para informações do site…
-ef.activate=Filtrar %S
-ef.options=Opções do %S…
-ef.newName=Digite o nome do novo filtro:
-ef.locateExe=Selecione o arquivo executável para o filtro %S
-disable=Desativar %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/pt-PT/noscript/about.properties b/extensions/noscript/chrome/locale/pt-PT/noscript/about.properties
deleted file mode 100644
index fff2536..0000000
--- a/extensions/noscript/chrome/locale/pt-PT/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Protecção extra para o seu Firefox...
-aboutTitle=Sobre %S
-extensionContributors=Contribuintes:
-extensionContributors.tip=A quem deve agradecer por esta extensão
-extensionCreatorLabel=Criador:
-changelog=Histórico
-changelog.tip=Mostrar histórico
-license=Licença
-license.tip=Ler a licença final do utilizador
-logo.tip=Visitar a página da extensão
-sponsor.tip=Visitar a página do patrocinador
-informaction.tip=Visitar a página da InformAction
-extensionHomepage.tip=Visitar a página da extensão
-extensionCreator.tip=Visitar a página do autor
-version=Versão %S
diff --git a/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.dtd b/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.dtd
deleted file mode 100644
index a03e0a1..0000000
--- a/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opções">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opções do NoScript">
-<!ENTITY noscriptAbout "Sobre o NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Pode especificar os sítios que podem executar scripts. Escreva o endereço ou o domínio (ex: &quot;http://www.sitio.com&quot; ou &quot;sitio.com&quot;) do sítio que deseja permitir e depois pressione em Permitir.">
-<!ENTITY noscriptWebAddress "Endereço:">
-<!ENTITY noscriptAllow "Permitir">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Não permitir">
-<!ENTITY noscriptForbid.accesskey "N">
-<!ENTITY noscriptTrust "Marcar como de confiança">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Marcar como não sendo de confiança">
-<!ENTITY noscriptUntrust.accesskey "o">
-<!ENTITY noscriptRemoveSelected "Remover sítios seleccionados">
-<!ENTITY noscriptGloballyEnabled "Scripts permitidos na globalidade (perigoso)">
-<!ENTITY noscriptAutoReload "Actualizar automaticamente a página actual quando as permissões são alteradas.">
-<!ENTITY noscriptGeneral "Geral">
-<!ENTITY noscriptAppearance "Aparência">
-<!ENTITY noscriptShow "Mostrar...">
-<!ENTITY noscriptCtxMenu "Menu de contexto">
-<!ENTITY noscriptStatusIcon "Ícone da Barra de Estado">
-<!ENTITY noscriptFullAddr "Endereço completo (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domínios completos (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base domínios de 2º nível (noscript.net)">
-<!ENTITY noscriptTempCmd "Permitir temporariamente [...]">
-<!ENTITY noscriptSound "Alerta de áudio quando os scripts são bloqueados">
-<!ENTITY noscriptImport "Importar">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportar">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Mostrar mensagens sobre os scripts bloqueados">
-<!ENTITY noscriptNotify.bottom "Mostrar mensagens na zona inferior">
-<!ENTITY noscriptSound.choose "Procurar">
-<!ENTITY noscriptSound.choose.accesskey "P">
-<!ENTITY noscriptSound.play "Tocar">
-<!ENTITY noscriptSound.play.accesskey "T">
-<!ENTITY noscriptSound.reset "Predefinição">
-<!ENTITY noscriptSound.reset.accesskey "r">
-<!ENTITY noscriptAdvanced "Avançado">
-<!ENTITY noscriptAdditionalPermissions "Permissões adicionais para sítios de confiança">
-<!ENTITY noscriptAllowClipboard "Permitir copiar e colar texto com formatações de texto a partir da área de transferência">
-<!ENTITY noscriptAdditionalRestrictions "Restrições adicionais para sítios sem confiança">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Aplicar estas restrições também nos sítios de confiança">
-<!ENTITY noscriptForbidJava "Proibir Java™">
-<!ENTITY noscriptForbidXSLT "Proibir XSLT">
-<!ENTITY noscriptForbidSilverlight "Proibir Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Proibir &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Proibir &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Proibir @font-face">
-<!ENTITY noscriptForbidWebGL "Proibir WebGL">
-<!ENTITY noscriptForbidMedia "Proibir &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Proibir Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Proibir outros plugins">
-<!ENTITY noscriptReloadWarn "Estas opções terão efeito em páginas novas ou (manualmente) actualizadas.">
-<!ENTITY noscriptConfirmUnblock "Pedir confirmação antes de desbloquear temporariamente um objecto">
-<!ENTITY noscriptStatusLabel "Informações na barra de estado">
-<!ENTITY noscriptForbidBookmarklets "Proibir bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Mostrar ícone de substituição">
-<!ENTITY noscriptTruncateTitle "Quebrar títulos dos documentos">
-<!ENTITY noscriptFixLinks "Tentar corrigir ligações de JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permitir todos os sítios que se encontrem nos Marcadores">
-<!ENTITY noscriptAllowViaBookmarks "Permitir páginas abertas através dos Marcadores">
-<!ENTITY noscriptAllowPing "Permitir &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permitir ligações locais">
-<!ENTITY noscriptForbidPing "Proibir &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Proibir redireccionamentos META dentro de elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Mostrar mensagem sobre redireccionamentos META bloqueados">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "Lista Branca">
-<!ENTITY noscriptPermissions "Permissões">
-<!ENTITY noscriptRefresh "Actualizar">
-<!ENTITY noscriptNotifications "Notificações">
-<!ENTITY noscriptToolbarToggle "Clique esquerdo na barra de ferramentas do NoScript altera as permissões para o sítio principal actual">
-<!ENTITY noscriptTrusted "De confiança">
-<!ENTITY noscriptUntrusted "Não é de confiança">
-<!ENTITY noscriptUnknown "Desconhecido">
-<!ENTITY noscriptAdd "Adicionar">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Fechar">
-<!ENTITY noscriptSiteManager "Gestor de Sítios">
-<!ENTITY noscriptSecurityManager "Gestor de Segurança">
-<!ENTITY noscriptPolicies "Políticas">
-<!ENTITY noscriptDefaultPolicies "Políticas Pré-definidas">
-<!ENTITY noscriptSitePolicies "Políticas Especificas do Sítio">
-<!ENTITY noscriptNselNever "Ocultar elementos &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Mostrar o elemento &lt;NOSCRIPT&gt; que seguiu um script bloqueado &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Permitir temporariamente todos os sites de alto nível por pré-definição">
-<!ENTITY noscriptDescription "Protecção extra para o seu Firefox: O NoScript permite o uso de JavaScripts, Java (e outros plugins) somente para os domínios de confiança que você seleccionar (como por exemplo no sítio do seu internet banking). Esse bloqueio é baseado numa lista branca que previne a exploração de vulnerabilidades de segurança (conhecidas e até mesmo as desconhecidas!) sem perda de desempenho... Os especialistas concordam: o Firefox é realmente mais seguro com o NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Bloquear scanners baseados em CSS">
-<!ENTITY noscriptOptFilterXGet "Desinfectar requerimentos suspeitos via sítio">
-<!ENTITY noscriptOptFilterXPost "Alterar requerimentos perigosos via sítio em requerimentos GET sem dados">
-<!ENTITY noscriptShowConsole "Mostrar Consola...">
-<!ENTITY noscriptShowConsole.accesskey "M">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Perguntas e respostas do XSS ...">
-<!ENTITY noscriptXssFaq.accesskey "P">
-<!ENTITY noscriptUnsafeReload "Recarregamento Inseguro">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Protecção Anti-XSS através das excepções">
-<!ENTITY noscriptXssExceptions.description "Os destinos que combinarem essas expressões NÃO serão protegidos contra XSS">
-<!ENTITY noscriptMatchSample "Exemplo ilustrativo da combinação:">
-<!ENTITY noscriptReset "Restaurar">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Restaurar pré-definições">
-<!ENTITY noscriptResetDef.accesskey "p">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Anular Permissões Temporárias">
-<!ENTITY noscriptRevokeTemp.accesskey "A">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nenhum placeholder para objectos provenientes de sítios marcados como de confiança">
-<!ENTITY noscriptCollapseBlockedObjects "Colapsar objectos bloqueados">
-<!ENTITY noscriptExceptions "Excepções...">
-<!ENTITY noscriptBlockedObjects "Objectos bloqueados">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Bloquear todos os objectos provenientes de um site marcado como não confiável">
-<!ENTITY noscriptTempAllowPage "Autorizar tudo temporariamente nesta página">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Permitir tudo nesta página">
-<!ENTITY noscriptAllowPage.accesskey "e">
-<!ENTITY noscriptTempToPerm "Tornar as permissões da página permanentes">
-<!ENTITY noscriptTempToPerm.accesskey "n">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Comportamento">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Proibir conteúdo web activo a não ser que venha de uma ligação segura (HTTPS):">
-<!ENTITY noscriptHttps.never "Nunca">
-<!ENTITY noscriptHttps.proxy "Ao usar um proxy (recomendado com Tor)">
-<!ENTITY noscriptHttps.always "Sempre">
-<!ENTITY noscriptHttpsForced "Forçar o uso de ligações seguras (HTTPS)dos seguintes sítios:">
-<!ENTITY noscriptHttpsForcedExceptions "Nunca forçar o uso de ligações seguras (HTTPS)dos seguintes sítios:">
-<!ENTITY noscriptSecureCookies "Activar a gestão automática segura de cookies">
-<!ENTITY noscriptSecureCookiesForced "Forçar cifra para todos os cookies aplicada sobre HTTPS pelos seguintes sítios:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorar cookies não seguros aplicada sobre HTTPS pelos seguintes sítios:">
-<!ENTITY noscriptClearClickTitle "Limpar aviso com clique">
-<!ENTITY noscriptClearClickHeader "Potencial Clickjacking / Tentativa de mudar UI">
-<!ENTITY noscriptClearClickDescription "O NoScript interceptou uma interacção do rato ou do teclado com um elemento parcialmene oculto. Clique na imagem acima para mudar entre a versão limpa e a obstruída">
-<!ENTITY noscriptClearClickOpt "Limpar aviso com clique nas páginas...">
-<!ENTITY noscriptClearClickReport "Relatório">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID do relatório:">
-<!ENTITY noscriptTrustedPagesAdj "de confiança">
-<!ENTITY noscriptUntrustedPagesAdj "não é de confiança">
-<!ENTITY noscriptKeepLocked "Manter este elemento fechado (recomendado)">
-<!ENTITY noscriptEmbeddings "Objectos embebidos">
-<!ENTITY noscriptPrev "Anterior">
-<!ENTITY noscriptNext "Seguinte">
-<!ENTITY noscriptFrameOptErr.title "Este conteúdo não pode ser apresentado numa frame">
-<!ENTITY noscriptFrameOptErr.desc "Para o proteger, o editor deste conteúdo não permite que seja apresentado numa frame.">
-<!ENTITY noscriptFrameOptErr.link "Clique aqui para abrir este conteúdo numa nova janela">
-<!ENTITY noscriptBookmarkSync "Configuração de backup do NoScript num marcador para fácil sincronização">
-<!ENTITY noscriptShowReleaseNotes "Mostrar as notas de lançamento nas actualizações">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Conjunto de regras:">
-<!ENTITY ABE.enabled.label "Activar ABE(Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Permitir que os sítios puxem os seus próprios conjuntos de regras">
-<!ENTITY ABE.edit.label "Editar...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Activar">
-<!ENTITY ABE.enable.accesskey "c">
-<!ENTITY ABE.disable.label "Desactivar">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Actualizar">
-<!ENTITY ABE.refresh.accesskey "z">
-<!ENTITY noscriptUninstall "Desinstalar">
-<!ENTITY noscriptRecentBlocked "Sítios bloqueados recentemente">
-<!ENTITY noscriptExternalFilters "Filtros Externos">
-<!ENTITY noscriptEF.enable "Activar filtros externos">
-<!ENTITY noscriptEF.add "Novo filtro ...">
-<!ENTITY noscriptEF.executable "Ficheiro executável:">
-<!ENTITY noscriptEF.browse "Navegar ...">
-<!ENTITY noscriptEF.contentType "Tipo de conteúdo (MIME) a ser filtrado (correspondência exacta ou expressão regular):">
-<!ENTITY noscriptEF.exceptions "Não filtrar objectos provenientes destes sítios:">
-<!ENTITY noscriptEF.remove "Remover">
-<!ENTITY noscriptPreset "Nível de Segurança">
-<!ENTITY noscriptPreset.off "Desligado (tem a certeza?)">
-<!ENTITY noscriptPreset.low "Sensível (Lista negra + Segurança Web)">
-<!ENTITY noscriptPreset.medium "Classic (Lista branca + Segurança Web)">
-<!ENTITY noscriptPreset.high "Fortaleza (bloqueio completo)">
-<!ENTITY noscript.hoverUI "Abra o menu de permissões quando o rato passa sobre o ícone do NoScript">
-<!ENTITY noscriptDonate "Doar">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.properties b/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.properties
deleted file mode 100644
index 07a920b..0000000
--- a/extensions/noscript/chrome/locale/pt-PT/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permitir JavaScript Globalmente (perigoso)
-forbidGlobal=Proibir JavaScript Globalmente (recomendado)
-allowLocal=Permitir %S
-allowTemp=Permitir temporariamente %S
-forbidLocal=Proibir %S
-allowed.glb=Perigo! Scripts permitidos globalmente
-allowed.yes=Scripts permitidos de momento
-allowed.prt=Scripts permitidos parcialmente
-allowed.no=Scripts proibidos de momento
-global.warning.title=Aviso!
-global.warning.text=Os Scripts serão globalmente permitidos (em qualquer sítio).\nEsta é uma acção potencialmente perigosa.\nDeseja mesmo continuar?
-audio.samples=Ficheiros Áudio [wav]
-confirm=Tem a certeza?
-alwaysAsk=Pedir sempre confirmação
-notifyHide=Ocultar após %S segundos
-trust=Confiar %S
-distrust=Marcar %S como Não Confiável
-untrustedOrigin=uma origem não confiável
-xss.notify.generic=O NoScript filtrou uma tentativa de uso de script via sítio (XSS) vinda de %S. Detalhes técnicos foram gravados na consola.
-xss.notify.showConsole=Mostrar consola...
-xss.notify.showConsole.accessKey=s
-xss.reason.filterXGet=Desinfectou um requerimento suspeito. O URL original [%1$S] requerido por [%2$S]. URL desinfectada: [%3$S].)
-xss.reason.filterXGetRef=Desinfectou um requerimento de referência suspeita. A URL [%1$S] requerida por [%2$S]. Referência desinfectada: [%3$S].)
-xss.reason.filterXPost=Carregamento suspeito desinfectado de [%1$S] para [%2$S]: transformado em um requerimento do tipo apenas transferência.
-unsafeReload.warning=Recarregamento INSEGURO e suspeito\n\n%1$S [%2$S}\n\nDE [%3$S]\n\nO NoScript NÃO irá proteger este pedido!\n
-metaRefresh.notify=O NoScript bloqueou um redireccionamento <META> dentro de um elemento do <NOSCRIPT>: %S em %S segundos.
-metaRefresh.notify.follow=Seguir redireccionamento
-metaRefresh.notify.follow.accessKey=S
-notify.options=Opções
-notify.options.accessKey=O
-reset.title=Reiniciar configurações do NoScript
-reset.warning=TODAS as configurações do NoScript e as permissões de sítios serão restauradas imediatamente para os seus valores pré-definidos.\n Esta acção não poderá ser revertida. \nDeseja continuar?
-bookmarkSync.title=Marcador de configuração do NoScript
-bookmarkSync.message=Este marcador Não é para ser aberto, mas sim ser sincronizado usando um serviço tipo Weave ou a extensão XMarks.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Pedido %1$S filtrado por ABE: <%2$S> %3$S
-ABE.chooseEditor=Escolha um editor de texto para os conjuntos de regras ABE
-ABE.syntaxError=Erro de sintaxe no conjunto de regras ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Permitir tudo de %S
-allowTempFrom=Permitir tudo de %S temporariamente
-siteInfo.confirm=Está prestes a pedir informações sobre o sítio \"%1$S\"\nao enviar um pedido para %2$S.\nDeseja continuar?
-siteInfo.tooltip=Clique-central ou Shift+clique para obter informações do sítio...
-ef.activate=Filtro %S
-ef.options=%S opções...
-ef.newName=Escreva o nome do novo filtro:
-ef.locateExe=Seleccione o ficheiro executável para o filtro %S
-disable=Desactivar %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ro/noscript/about.properties b/extensions/noscript/chrome/locale/ro/noscript/about.properties
deleted file mode 100644
index bcbe68b..0000000
--- a/extensions/noscript/chrome/locale/ro/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Ca protecție suplimentară pentru Firefox, NoScript nu permite executarea scripturilor JavaScript, Java, sau ale altor plugin-uri decât pentru domeniile de încredere alese de Dvs. Acest sistem de blocare preventivă a scripturilor împiedică exploatarea vulnerabilităților de securitate (cunoscute sau chiar necunoscute) fără pierdere de performanță... Experții vor fi de acord: Firefox este mult mai sigur cu NoScript :)
-aboutTitle=Despre %S
-extensionContributors=Colaboratori:
-extensionContributors.tip=Cei cărora ar trebui să le mulțumiți pentru această extensie
-extensionCreatorLabel=Autor:
-changelog=Jurnal modificări
-changelog.tip=Afișează jurnalul de modificări
-license=Licență
-license.tip=Afișează Licența pentru utilizatorul final
-logo.tip=Deschide pagina gazdă a suplimentului
-sponsor.tip=Deschide pagina gazdă a sponsorului
-informaction.tip=Deschide pagina gazdă InformAction
-extensionHomepage.tip=Deschide pagina gazdă a suplimentului
-extensionCreator.tip=Deschide pagina gazdă a autorului
-version=Versiunea %S
diff --git a/extensions/noscript/chrome/locale/ro/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ro/noscript/noscript.dtd
deleted file mode 100644
index fda381a..0000000
--- a/extensions/noscript/chrome/locale/ro/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Opțiuni...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "Opțiuni NoScript">
-<!ENTITY noscriptAbout "Despre NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Puteți specifica saiturile cărora li se permite să execute scripturi. Scrieți adresa sau domeniul paginii (exemplu: „http://www.sait.ro“ sau „sait.ro“), apoi apăsați pe butonul „Permite“.">
-<!ENTITY noscriptWebAddress "Adresă sait:">
-<!ENTITY noscriptAllow "Permite">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Interzice">
-<!ENTITY noscriptForbid.accesskey "I">
-<!ENTITY noscriptTrust "Marchează ca „De încredere“">
-<!ENTITY noscriptTrust.accesskey "d">
-<!ENTITY noscriptUntrust "Marchează ca „De neîncredere“">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Elimină saiturile selectare">
-<!ENTITY noscriptGloballyEnabled "Scripturi permise global (riscant)">
-<!ENTITY noscriptAutoReload "Reîncarcă automat paginile atunci când se schimbă permisiunile">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Aspect">
-<!ENTITY noscriptShow "Elemente afișate">
-<!ENTITY noscriptCtxMenu "Opțiune în meniul contextual">
-<!ENTITY noscriptStatusIcon "Pictogramă pe bara de stare">
-<!ENTITY noscriptFullAddr "Adrese complete (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Domenii complete (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Domenii de nivel 2 (noscript.net)">
-<!ENTITY noscriptTempCmd "Permite temporar [...]">
-<!ENTITY noscriptSound "Avertizează sonor când scripturile sunt blocate">
-<!ENTITY noscriptImport "Importă">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportă">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Afișează un mesaj privind scripturile blocate">
-<!ENTITY noscriptNotify.bottom "Afișează mesajul în partea de jos a ferestrei">
-<!ENTITY noscriptSound.choose "Alege sunetul...">
-<!ENTITY noscriptSound.choose.accesskey "A">
-<!ENTITY noscriptSound.play "Redă">
-<!ENTITY noscriptSound.play.accesskey "R">
-<!ENTITY noscriptSound.reset "Inițializează">
-<!ENTITY noscriptSound.reset.accesskey "I">
-<!ENTITY noscriptAdvanced "Complex">
-<!ENTITY noscriptAdditionalPermissions "Permisiuni suplimentare pentru saiturile de încredere">
-<!ENTITY noscriptAllowClipboard "Permite copierea și lipirea textului îmbogățit din memoria tampon a sistemului">
-<!ENTITY noscriptAdditionalRestrictions "Restricții suplimentare pentru saiturile de neîncredere">
-<!ENTITY noscriptPlugins "Plugin-uri">
-<!ENTITY noscriptContentBlocker "Aplică aceste restricții și pentru saiturile de încredere">
-<!ENTITY noscriptForbidJava "Interzice Java™">
-<!ENTITY noscriptForbidXSLT "Interzice XSLT (Extensible Stylesheet Language Transformations)">
-<!ENTITY noscriptForbidSilverlight "Interzice Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Interzice &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Interzice &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Interzice @font-face">
-<!ENTITY noscriptForbidWebGL "Interzice WebGL">
-<!ENTITY noscriptForbidMedia "Interzice &lt;AUDIO&gt;/&lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Interzice Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Interzice alte plugin-uri">
-<!ENTITY noscriptReloadWarn "Aceste opțiuni vor fi efective în paginile nou deschise sau în cele reîncărcate (manual)">
-<!ENTITY noscriptConfirmUnblock "Cere confirmare înainte de a debloca un obiect">
-<!ENTITY noscriptStatusLabel "Etichetă pe bara de stare">
-<!ENTITY noscriptForbidBookmarklets "Interzice scripturile din semnele de carte">
-<!ENTITY noscriptShowPlaceholder "Afișează amplasamentul obiectului blocat">
-<!ENTITY noscriptTruncateTitle "Trunchiază titlurile documentelor">
-<!ENTITY noscriptFixLinks "Încearcă repararea legăturilor JavaScript">
-<!ENTITY noscriptAllowBookmarks "Permite saiturile din semnele de carte">
-<!ENTITY noscriptAllowViaBookmarks "Permite toate saiturile deschise prin semnele de carte">
-<!ENTITY noscriptAllowPing "Permite &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Permite legăturile locale">
-<!ENTITY noscriptForbidPing "Interzice &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Interzice redirectările META din interiorul elementelor &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "r">
-<!ENTITY noscriptNotifyMeta "Afișează un mesaj despre redirectările META interzise">
-<!ENTITY noscriptNotifyMeta.accesskey "M">
-<!ENTITY noscriptWhitelist "Listă de adrese sigure">
-<!ENTITY noscriptPermissions "Permisiuni">
-<!ENTITY noscriptRefresh "Actualizează">
-<!ENTITY noscriptNotifications "Notificări">
-<!ENTITY noscriptToolbarToggle "Comută permisiunile pentru domeniul primar curent cu clic-stânga pe butonul din bara de unelte">
-<!ENTITY noscriptTrusted "Saituri „de încredere“">
-<!ENTITY noscriptUntrusted "Saituri „de neîncredere“">
-<!ENTITY noscriptUnknown "Saituri „necunoscute“">
-<!ENTITY noscriptAdd "Adaugă">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Închide">
-<!ENTITY noscriptSiteManager "Gestionar de saituri">
-<!ENTITY noscriptSecurityManager "Gestionar de securitate">
-<!ENTITY noscriptPolicies "Reguli">
-<!ENTITY noscriptDefaultPolicies "Reguli implicite">
-<!ENTITY noscriptSitePolicies "Reguli dependente de sait">
-<!ENTITY noscriptNselNever "Ascunde elementele &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Afișează elementele &lt;NOSCRIPT&gt; care urmează unui element &lt;SCRIPT&gt; blocat">
-<!ENTITY noscriptAutoAllowTopLevel "Permite temporar domeniile primare în mod implicit">
-<!ENTITY noscriptDescription "Ca protecție suplimentară pentru Firefox, NoScript nu permite executarea scripturilor JavaScript, Java, sau ale altor plugin-uri decât pentru domeniile de încredere alese de Dvs. Acest sistem de blocare preventivă a scripturilor împiedică exploatarea vulnerabilităților de securitate (cunoscute sau chiar necunoscute) fără pierdere de performanță... Experții vor fi de acord: Firefox este mult mai sigur cu NoScript :)">
-<!ENTITY noscriptOptBlockCssScanners "Blochează scanerele bazate pe CSS">
-<!ENTITY noscriptOptFilterXGet "Elimină solicitările suspecte între saituri">
-<!ENTITY noscriptOptFilterXPost "Transformă solicitările POST între saituri în solicitări GET fără date">
-<!ENTITY noscriptShowConsole "Afișează consola...">
-<!ENTITY noscriptShowConsole.accesskey "c">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Informații XSS...">
-<!ENTITY noscriptXssFaq.accesskey "f">
-<!ENTITY noscriptUnsafeReload "Reîncărcare nesigură">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Excepții la protecția anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Destinațiile care se potrivesc cu expresiile regulate din listă nu vor fi protejate împotriva atacurilor XSS.">
-<!ENTITY noscriptMatchSample "Exemplu de expresie regulată:">
-<!ENTITY noscriptReset "Inițializează">
-<!ENTITY noscriptReset.accesskey "I">
-<!ENTITY noscriptResetDef "Inițializează la valorile implicite">
-<!ENTITY noscriptResetDef.accesskey "v">
-<!ENTITY noscriptOptionsWidth "50em">
-<!ENTITY noscriptRevokeTemp "Revocă permisiunile temporare">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "Nu afișa amplasamentul obiectelor care provin din saituri marcate ca „De neîncredere“">
-<!ENTITY noscriptCollapseBlockedObjects "Restrânge spațiul obiectelor blocate">
-<!ENTITY noscriptExceptions "Excepții...">
-<!ENTITY noscriptBlockedObjects "Obiecte blocate">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blochează orice obiect care provine dintr-un sait marcat ca „De neîncredere“">
-<!ENTITY noscriptTempAllowPage "Permite temporar tot din această pagină">
-<!ENTITY noscriptTempAllowPage.accesskey "t">
-<!ENTITY noscriptAllowPage "Permite tot din această pagină">
-<!ENTITY noscriptAllowPage.accesskey "P">
-<!ENTITY noscriptTempToPerm "Permanentizează permisiunile paginii">
-<!ENTITY noscriptTempToPerm.accesskey "e">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "Informații HTTPS...">
-<!ENTITY noscriptHttpsFaq.accesskey "I">
-<!ENTITY noscriptHttps.behavior "Comportament">
-<!ENTITY noscriptHttps.cookies "Module cookie">
-<!ENTITY noscriptHttps.description "Interzice conținutul web activ dacă nu provine dintr-o conexiune securizată (HTTPS):">
-<!ENTITY noscriptHttps.never "Niciodată">
-<!ENTITY noscriptHttps.proxy "Când se folosește un proxy (recomandat cu Tor)">
-<!ENTITY noscriptHttps.always "Întotdeauna">
-<!ENTITY noscriptHttpsForced "Forțează următoarele saituri să folosească conexiuni securizate (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Nu forța niciodată conexiuni securizate (HTTPS) pentru următoarele saituri:">
-<!ENTITY noscriptSecureCookies "Activează gestionarea securizată automată a modulelor cookie">
-<!ENTITY noscriptSecureCookiesForced "Forțază criptarea tuturor modulelor cookie stabilite prin HTTPS pentru următoarele saituri:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignoră modulele cookie nesigure stabilite prin HTTPS pentru următoarele saituri:">
-<!ENTITY noscriptClearClickTitle "Avertisment ClearClick">
-<!ENTITY noscriptClearClickHeader "Clickjacking potențial / Încercare de recuperare UI!">
-<!ENTITY noscriptClearClickDescription "NoScript a interceptat o interacțiune a mausului sau tastaturii cu un element parțial ascuns. Faceți clic pe imaginea de mai jos pentru a comuta între versiunea ascunsă și cea vizibilă.">
-<!ENTITY noscriptClearClickOpt "Protecție ClearClick pentru paginile...">
-<!ENTITY noscriptClearClickReport "Raport">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "ID raport:">
-<!ENTITY noscriptTrustedPagesAdj "de încredere">
-<!ENTITY noscriptUntrustedPagesAdj "de neîncredere">
-<!ENTITY noscriptKeepLocked "Păstrează blocat acest element (recomandat)">
-<!ENTITY noscriptEmbeddings "Obiecte înglobate">
-<!ENTITY noscriptPrev "Înapoi">
-<!ENTITY noscriptNext "Înainte">
-<!ENTITY noscriptFrameOptErr.title "Conținut nepermis a fi afișat într-un cadru">
-<!ENTITY noscriptFrameOptErr.desc "Pentru a vă proteja securitatea, editorul acestui conținut nu permite ca acesta să fie afișat într-un cadru.">
-<!ENTITY noscriptFrameOptErr.link "Apăsați aici pentru a deschide acest conținut într-o fereastră nouă">
-<!ENTITY noscriptBookmarkSync "Arhivează configurația NoScript într-un semn de carte pentru o sincronizare facilă">
-<!ENTITY noscriptShowReleaseNotes "Afișează note privind versiunea la actualizări">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Serii de reguli:">
-<!ENTITY ABE.enabled.label "Activează ABE (Application Boundaries Enforcer - Gardian al limitelor aplicației)">
-<!ENTITY ABE.siteEnabled.label "Permite saiturilor să execute propriile serii de reguli">
-<!ENTITY ABE.edit.label "Editează...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Activează">
-<!ENTITY ABE.enable.accesskey "A">
-<!ENTITY ABE.disable.label "Dezactivează">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Actualizează">
-<!ENTITY ABE.refresh.accesskey "t">
-<!ENTITY noscriptUninstall "Dezinstalează">
-<!ENTITY noscriptRecentBlocked "Saituri blocate recent">
-<!ENTITY noscriptExternalFilters "Filtre externe">
-<!ENTITY noscriptEF.enable "Activează filtrele externe">
-<!ENTITY noscriptEF.add "Filtru nou...">
-<!ENTITY noscriptEF.executable "Fișier executabil:">
-<!ENTITY noscriptEF.browse "Răsfoiește...">
-<!ENTITY noscriptEF.contentType "Tip de conținut (MIME) de filtrat (potrivire exactă sau expresie regulată):">
-<!ENTITY noscriptEF.exceptions "Nu filtra obiectele provenite de la următoarele saituri:">
-<!ENTITY noscriptEF.remove "Elimină">
-<!ENTITY noscriptPreset "Nivel de securitate">
-<!ENTITY noscriptPreset.off "Libertate (e o glumă??!)">
-<!ENTITY noscriptPreset.low "Fără grijă (listă neagră + securitate web)">
-<!ENTITY noscriptPreset.medium "Clasic (listă albă + securitate web)">
-<!ENTITY noscriptPreset.high "Fortăreață (protecție totală)">
-<!ENTITY noscript.hoverUI "Afișează meniul permisiunilor când mausul survolează pictograma NoScript">
-<!ENTITY noscriptDonate "Donați">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/ro/noscript/noscript.properties b/extensions/noscript/chrome/locale/ro/noscript/noscript.properties
deleted file mode 100644
index ecf1a6c..0000000
--- a/extensions/noscript/chrome/locale/ro/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Permite scripturile global (riscant)
-forbidGlobal=Interzice scripturile global (recomandat)
-allowLocal=Permite scripturile de la %S
-allowTemp=Permite temporar scripturile de la %S
-forbidLocal=Interzice scripturile de la %S
-allowed.glb=Pericol! Scripturile sunt permise global
-allowed.yes=Scripturi permise în mod curent
-allowed.prt=Scripturi permise parțial
-allowed.no=Scripturi interzise
-global.warning.title=Atenție!
-global.warning.text=Scripturile vor fi permise global (pentru toate saiturile).\nAceastă operațiune poate fi periculoasă.\nSigur doriți să continuați?
-audio.samples=Fișiere audio
-confirm=Confirmați?
-alwaysAsk=Cere întotdeauna confirmare
-notifyHide=Ascunde mesajul după %S secunde
-trust=Marchează %S ca „De încredere“
-distrust=Marchează %S ca „De neîncredere“
-untrustedOrigin=o origine dubioasă
-xss.notify.generic=NoScript a filtrat o tentativă de solicitare de scripturi între saituri (XSS - Cross-site scripting) provenind de la %S. Detaliile tehnice au fost înregistrate în consolă.
-xss.notify.showConsole=Afișează consola...
-xss.notify.showConsole.accessKey=A
-xss.reason.filterXGet=Cererea suspectă a fost curățată. Adresa originală [%1$S] a fost solicitată de [%2$S]. Adresa curățată este [%3$S].
-xss.reason.filterXGetRef=Cererea de referință suspectă a fost curățată. Adresa [%1$S] a fost solicitată de [%2$S]. Referința curățată este [%3$S].
-xss.reason.filterXPost=Încărcarea suspectă către [%1$S] solicitată de [%2$S] a fost curățată. Comanda a fost transformată într-o simplă solicitare de descărcare GET.
-unsafeReload.warning=Reîncărcarea NESIGURĂ a cererii\n\n%1$S [%2$S]\n\nde la [%3$S]\n\nnu va fi protejată de către NoScript!\n
-metaRefresh.notify=NoScript a blocat o redirecționare <META> dintr-un element <NOSCRIPT>: %S în %S secunde.
-metaRefresh.notify.follow=Urmează redirecționarea
-metaRefresh.notify.follow.accessKey=U
-notify.options=Opțiuni
-notify.options.accessKey=O
-reset.title=Inițializează NoScript
-reset.warning=TOATE opțiunile NoScript și permisiunile saiturilor vor fi inițializate imediat la valorile lor implicite.\nAceastă acțiune nu poate fi anulată.\nDoriți să continuați?
-bookmarkSync.title=Semn de carte de configurare NoScript
-bookmarkSync.message=Acest semn de carte nu este menit să fie deschis ci să fie sincronizat cu servicii cum ar fi suplimentele Firefox Sync sau Xmarks.
-bookmarkSync.confirm=NoScript a gasit un semn de carte de configurare salvat evident pe\n%S.\nSigur doriți să înlocuiți configurația Dvs. locală NoScript cu cea conținută la acest semn de carte?
-ABE.notify=Cererea %1$S filtrată de ABE: <%2$S> %3$S
-ABE.chooseEditor=Alegeți un editor de text pentru regulile ABE
-ABE.syntaxError=Eroare de sintaxă în setul de reguri ABE!
-ABE.wanIpAsLocal=IP WAN (%S) ∈ LOCAL
-allowFrom=Permite tot de la %S
-allowTempFrom=Permite temporar tot de la %S
-siteInfo.confirm=Sunteți pe cale de a solicita informații despre saitul „%1$S“\nprin lansarea unei cereri la %2$S.\nDoriți să continuați?
-siteInfo.tooltip=Clic-mijloc sau Shift+clic pentru informații despre sait...
-ef.activate=Filtrează %S
-ef.options=Opțiuni %S...
-ef.newName=Denumire filtru:
-ef.locateExe=Selectare fișier executabil pentru filtrul %S
-disable=Dezactivează %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/ru-RU/noscript/about.properties b/extensions/noscript/chrome/locale/ru-RU/noscript/about.properties
deleted file mode 100644
index 07debd4..0000000
--- a/extensions/noscript/chrome/locale/ru-RU/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Дополнительная защита для Firefox: NoScript позволяет разрешать JavaScript, Java (и другие плагины) только для доверенных доменов, выбранных вами (например: сайт банковского обслуживания). Белый список, основанный на принципе упреждающего блокирования, позволяет предотвратить использование уязвимостей (известных и ещё не известных!) без потери функциональности… Эксперты соглашаются: Firefox действительно безопаснее с NoScript :-)
-aboutTitle=О расширении %S
-extensionContributors=Участники:
-extensionContributors.tip=Люди, которых можно поблагодарить за помощь
-extensionCreatorLabel=Автор:
-changelog=История версий
-changelog.tip=Просмотреть историю версий NoScript
-license=Лицензионное соглашение
-license.tip=Лицензионное соглашение конечного пользователя
-logo.tip=Открыть домашнюю страницу расширения
-sponsor.tip=Открыть домашнюю страницу спонсора
-informaction.tip=Открыть домашнюю страницу InformAction
-extensionHomepage.tip=Открыть домашнюю страницу расширения
-extensionCreator.tip=Открыть домашнюю страницу автора
-version=Версия %S
diff --git a/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.dtd b/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.dtd
deleted file mode 100644
index 8cb39c4..0000000
--- a/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Настройки…">
-<!ENTITY noscriptOptions.accesskey "а">
-<!ENTITY noscriptOptionsLong "Настройки NoScript">
-<!ENTITY noscriptAbout "О расширении">
-<!ENTITY noscriptPermissionsText "Вы можете указать, каким веб-сайтам разрешено выполнение скриптов. Введите адрес или домен (например: «http://www.site.com» или «site.com») сайта, который хотите разрешить, затем нажмите кнопку «Разрешить».">
-<!ENTITY noscriptWebAddress "Адрес веб-сайта:">
-<!ENTITY noscriptAllow "Разрешить">
-<!ENTITY noscriptAllow.accesskey "е">
-<!ENTITY noscriptForbid "Запретить">
-<!ENTITY noscriptForbid.accesskey "ь">
-<!ENTITY noscriptTrust "Отметить как Доверенный">
-<!ENTITY noscriptTrust.accesskey "о">
-<!ENTITY noscriptUntrust "Отметить как Недоверенный">
-<!ENTITY noscriptUntrust.accesskey "в">
-<!ENTITY noscriptRemoveSelected "Удалить выбранные сайты">
-<!ENTITY noscriptGloballyEnabled "Глобальное разрешение скриптов (опасно)">
-<!ENTITY noscriptAutoReload "Автоматически перезагружать зависимые страницы при изменении разрешений">
-<!ENTITY noscriptGeneral "Основные">
-<!ENTITY noscriptAppearance "Внешний вид">
-<!ENTITY noscriptShow "Отображать следующие элементы NoScript…">
-<!ENTITY noscriptCtxMenu "Пункт в контекстном меню">
-<!ENTITY noscriptStatusIcon "Значок в строке состояния">
-<!ENTITY noscriptFullAddr "Полные адреса (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Полные домены (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Базовые домены 2-го уровня (noscript.net)">
-<!ENTITY noscriptTempCmd "Временно разрешить […]">
-<!ENTITY noscriptSound "Звуковое оповещение при блокировке скриптов">
-<!ENTITY noscriptImport "Импорт">
-<!ENTITY noscriptImport.accesskey "м">
-<!ENTITY noscriptExport "Экспорт">
-<!ENTITY noscriptExport.accesskey "к">
-<!ENTITY noscriptNotify "Отображать сообщения о заблокированных скриптах">
-<!ENTITY noscriptNotify.bottom "Располагать сообщения внизу окна">
-<!ENTITY noscriptSound.choose "Обзор">
-<!ENTITY noscriptSound.choose.accesskey "о">
-<!ENTITY noscriptSound.play "Прослушать">
-<!ENTITY noscriptSound.play.accesskey "а">
-<!ENTITY noscriptSound.reset "Сброс">
-<!ENTITY noscriptSound.reset.accesskey "б">
-<!ENTITY noscriptAdvanced "Дополнительно">
-<!ENTITY noscriptAdditionalPermissions "Дополнительные разрешения для доверенных сайтов">
-<!ENTITY noscriptAllowClipboard "Расширенные копирование и вставка из внешнего буфера обмена">
-<!ENTITY noscriptAdditionalRestrictions "Дополнительные ограничения для недоверенных сайтов">
-<!ENTITY noscriptPlugins "Плагины">
-<!ENTITY noscriptContentBlocker "Применять эти ограничения и для доверенных сайтов">
-<!ENTITY noscriptForbidJava "Запретить Java™">
-<!ENTITY noscriptForbidXSLT "Запретить XSLT">
-<!ENTITY noscriptForbidSilverlight "Запретить Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Запретить &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Запретить &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Запретить @font-face">
-<!ENTITY noscriptForbidWebGL "Запретить WebGL">
-<!ENTITY noscriptForbidMedia "Запретить &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Запретить Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "Запретить другие плагины">
-<!ENTITY noscriptReloadWarn "Изменения этих параметров вступают в силу на новых или перезагруженных (вручную) страницах">
-<!ENTITY noscriptConfirmUnblock "Подтверждать временную разблокировку объекта">
-<!ENTITY noscriptStatusLabel "Сообщения в строке состояния">
-<!ENTITY noscriptForbidBookmarklets "Запретить использование Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Заполнитель вместо заблокированных объектов">
-<!ENTITY noscriptTruncateTitle "Отсекать слишком длинные заголовки веб-сайтов">
-<!ENTITY noscriptFixLinks "Пытаться исправить JavaScript-ссылки">
-<!ENTITY noscriptAllowBookmarks "Разрешать сайты, открываемые через закладки">
-<!ENTITY noscriptAllowViaBookmarks "Разрешать сайты, открываемые через закладки">
-<!ENTITY noscriptAllowPing "Разрешить использование &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Разрешить локальные ссылки">
-<!ENTITY noscriptForbidPing "Запретить использование &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Запретить META перенаправления внутри элементов &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "а">
-<!ENTITY noscriptNotifyMeta "Показывать сообщения о заблокированных META перенаправлениях">
-<!ENTITY noscriptNotifyMeta.accesskey "ы">
-<!ENTITY noscriptWhitelist "Белый список">
-<!ENTITY noscriptPermissions "Разрешения">
-<!ENTITY noscriptRefresh "Обновить">
-<!ENTITY noscriptNotifications "Уведомления">
-<!ENTITY noscriptToolbarToggle "Нажатием на значок переключать разрешение документа верхнего уровня активной вкладки">
-<!ENTITY noscriptTrusted "Доверенные">
-<!ENTITY noscriptUntrusted "Недоверенные">
-<!ENTITY noscriptUnknown "Неизвестный">
-<!ENTITY noscriptAdd "Добавить">
-<!ENTITY noscriptAdd.accesskey "о">
-<!ENTITY noscriptClose "Закрыть">
-<!ENTITY noscriptSiteManager "Менеджер сайтов">
-<!ENTITY noscriptSecurityManager "Управление безопасностью">
-<!ENTITY noscriptPolicies "Политики">
-<!ENTITY noscriptDefaultPolicies "Политики по умолчанию">
-<!ENTITY noscriptSitePolicies "Специальные политики для сайтов">
-<!ENTITY noscriptNselNever "Скрывать элементы &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Показывать элемент &lt;NOSCRIPT&gt;, который следует за заблокированным &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Временно разрешать документы верхнего уровня по умолчанию">
-<!ENTITY noscriptDescription "Дополнительная защита для Firefox: NoScript позволяет разрешать JavaScript, Java (и другие плагины) только для доверенных доменов, выбранных вами (например: сайт банковского обслуживания). Белый список, основанный на принципе упреждающего блокирования, позволяет предотвратить использование уязвимостей (известных и ещё не известных!) без потери функциональности… Эксперты соглашаются: Firefox действительно безопаснее с NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Блокировать CSS-сканеры">
-<!ENTITY noscriptOptFilterXGet "Фильтровать подозрительные межсайтовые запросы">
-<!ENTITY noscriptOptFilterXPost "Заменять межсайтовые POST-запросы на GET-запросы без данных">
-<!ENTITY noscriptShowConsole "Открыть консоль…">
-<!ENTITY noscriptShowConsole.accesskey "о">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "Справка по XSS (межсайтовому скриптингу)">
-<!ENTITY noscriptXssFaq.accesskey "а">
-<!ENTITY noscriptUnsafeReload "Небезопасная перезагрузка">
-<!ENTITY noscriptUnsafeReload.accesskey "е">
-<!ENTITY noscriptXssExceptions "Исключения анти-XSS защиты">
-<!ENTITY noscriptXssExceptions.description "Целевые страницы, соответствующие этим регулярным выражениям, НЕ будут защищаться против XSS.">
-<!ENTITY noscriptMatchSample "Пример шаблона:">
-<!ENTITY noscriptReset "Сброс">
-<!ENTITY noscriptReset.accesskey "о">
-<!ENTITY noscriptResetDef "Сбросить настройки">
-<!ENTITY noscriptResetDef.accesskey "и">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Отменить временные разрешения">
-<!ENTITY noscriptRevokeTemp.accesskey "е">
-<!ENTITY noscriptNoUntrustedPlaceholder "Не показывать заполнитель вместо объектов с сайтов, отмеченных как недоверенные">
-<!ENTITY noscriptCollapseBlockedObjects "Сворачивать заблокированные объекты">
-<!ENTITY noscriptExceptions "Исключения…">
-<!ENTITY noscriptBlockedObjects "Заблокированные объекты">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Блокировать любой объект с сайта, отмеченного как недоверенный">
-<!ENTITY noscriptTempAllowPage "Временно разрешить все скрипты на этой странице">
-<!ENTITY noscriptTempAllowPage.accesskey "о">
-<!ENTITY noscriptAllowPage "Разрешить все скрипты на этой странице">
-<!ENTITY noscriptAllowPage.accesskey "а">
-<!ENTITY noscriptTempToPerm "Сохранить установленные разрешения">
-<!ENTITY noscriptTempToPerm.accesskey "о">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "ЧаВо по HTTPS">
-<!ENTITY noscriptHttpsFaq.accesskey "а">
-<!ENTITY noscriptHttps.behavior "Поведение">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Запрещать активное веб-содержимое, за исключением защищённых (HTTPS) соединений:">
-<!ENTITY noscriptHttps.never "Никогда">
-<!ENTITY noscriptHttps.proxy "При использовании прокси (рекомендуется Tor)">
-<!ENTITY noscriptHttps.always "Всегда">
-<!ENTITY noscriptHttpsForced "Заставлять указанные сайты использовать защищённое (HTTPS) соединение:">
-<!ENTITY noscriptHttpsForcedExceptions "Не принуждать использовать защищённое (HTTPS) соединение для сайтов:">
-<!ENTITY noscriptSecureCookies "Автоматическая система управления безопасностью cookies">
-<!ENTITY noscriptSecureCookiesForced "Использовать шифрование для всех cookies, устанавливаемых через HTTPS со следующих сайтов:">
-<!ENTITY noscriptSecureCookiesExceptions "Игнорировать небезопасные cookies, устанавливаемые через HTTPS со следующих сайтов:">
-<!ENTITY noscriptClearClickTitle "Предупреждения ClearClick">
-<!ENTITY noscriptClearClickHeader "Возможно Clickjacking / Попытка изменения UI">
-<!ENTITY noscriptClearClickDescription "NoScript перехватил взаимодействие мыши или клавиатуры с частично скрытым элементом. Нажмите на изображение, чтобы увидеть разницу.">
-<!ENTITY noscriptClearClickOpt "ClearClick-защита на страницах...">
-<!ENTITY noscriptClearClickReport "Сообщение об ошибке">
-<!ENTITY noscriptClearClickReport.accesskey "о">
-<!ENTITY noscriptClearClickReportId "ID сообщения:">
-<!ENTITY noscriptTrustedPagesAdj "доверенных">
-<!ENTITY noscriptUntrustedPagesAdj "недоверенных">
-<!ENTITY noscriptKeepLocked "Оставить этот элемент заблокированным (рекомендуется)">
-<!ENTITY noscriptEmbeddings "Встроенные объекты">
-<!ENTITY noscriptPrev "Предыдущий">
-<!ENTITY noscriptNext "Следующий">
-<!ENTITY noscriptFrameOptErr.title "Это содержимое не может быть отображено во фрейме">
-<!ENTITY noscriptFrameOptErr.desc "Для вашей безопасности издатель этого содержимого не разрешил его отображение во фрейме">
-<!ENTITY noscriptFrameOptErr.link "Щёлкните для открытия содержимого в новом окне">
-<!ENTITY noscriptBookmarkSync "Создать резервную копию настроек в закладках для лёгкой синхронизации">
-<!ENTITY noscriptShowReleaseNotes "Показывать примечания к релизу при обновлениях">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Наборы правил:">
-<!ENTITY ABE.enabled.label "Использовать ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Разрешить сайтам устанавливать свои наборы правил">
-<!ENTITY ABE.edit.label "Изменить...">
-<!ENTITY ABE.edit.accesskey "з">
-<!ENTITY ABE.enable.label "Использовать">
-<!ENTITY ABE.enable.accesskey "с">
-<!ENTITY ABE.disable.label "Отключить">
-<!ENTITY ABE.disable.accesskey "т">
-<!ENTITY ABE.refresh.label "Обновить">
-<!ENTITY ABE.refresh.accesskey "б">
-<!ENTITY noscriptUninstall "Удалить">
-<!ENTITY noscriptRecentBlocked "Недавно заблокированные сайты">
-<!ENTITY noscriptExternalFilters "Внешние фильтры">
-<!ENTITY noscriptEF.enable "Использовать внешние фильтры">
-<!ENTITY noscriptEF.add "Новый фильтр…">
-<!ENTITY noscriptEF.executable "Исполняемый файл:">
-<!ENTITY noscriptEF.browse "Обзор…">
-<!ENTITY noscriptEF.contentType "Content type (MIME), подлежащий фильтрации (точное совпадение или регулярное выражение):">
-<!ENTITY noscriptEF.exceptions "Не фильтровать объекты с этих сайтов:">
-<!ENTITY noscriptEF.remove "Удалить">
-<!ENTITY noscriptPreset "Уровень защиты">
-<!ENTITY noscriptPreset.off "Никакой (вы серьёзно?)">
-<!ENTITY noscriptPreset.low "Легкое начало (чёрный список + веб-защита)">
-<!ENTITY noscriptPreset.medium "Стандартный (белый список + веб-защита)">
-<!ENTITY noscriptPreset.high "Осадный (на полную катушку)">
-<!ENTITY noscript.hoverUI "Открывать меню разрешений при наведении мыши на значок NoScript">
-<!ENTITY noscriptDonate "Сделать пожертвование">
-<!ENTITY noscriptDonate.accesskey "в">
-<!ENTITY noscriptAutoReload.currentTab "Перезагружать только активную вкладку">
-<!ENTITY noscriptCascadePermissions "Каскадное разрешение скриптов третьей стороны">
-<!ENTITY noscriptRestrictSubdocScripting "Блокировать скрипты из белого списка в субдокументах не из белого списка">
-<!ENTITY noscriptGlobalHttpsWhitelist "Разрешить все HTTPS скрипты в HTTPS документах">
-<!ENTITY noscriptPermanentInPrivate "Пункты постоянных разрешений в приватном режиме">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.properties b/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.properties
deleted file mode 100644
index 72b6fd6..0000000
--- a/extensions/noscript/chrome/locale/ru-RU/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Разрешить скрипты глобально (опасно)
-forbidGlobal=Отменить глобальное разрешение скриптов (рекомендуется)
-allowLocal=Разрешить %S
-allowTemp=Временно разрешить %S
-forbidLocal=Запретить %S
-allowed.glb=Скрипты разрешены глобально. Это опасно!
-allowed.yes=Скрипты на этой странице разрешены.
-allowed.prt=Скрипты частично разрешены.
-allowed.no=Скрипты на этой странице запрещены.
-global.warning.title=Внимание!
-global.warning.text=Скрипты будут разрешены глобально (для всех сайтов).\n Это потенциально опасное действие.\nВы действительно хотите продолжить?
-audio.samples=Аудиопример
-confirm=Вы уверены?
-alwaysAsk=Всегда спрашивать подтверждение
-notifyHide=Скрывать сообщения после %S секунд
-trust=Доверять %S
-distrust=Отметить %S как Недоверенный
-untrustedOrigin=как недоверенный источник
-xss.notify.generic=NoScript отфильтровал потенциальную XSS-атаку (попытку межсайтового скриптинга) с адреса %S. Технические подробности занесены в консоль.
-xss.notify.showConsole=Открыть консоль…
-xss.notify.showConsole.accessKey=о
-xss.reason.filterXGet=Отфильтрован подозрительный запрос. URL: [%1$S]. Запрос последовал со страницы: [%2$S]. Отфильтрованный адрес: [%3$S]
-xss.reason.filterXGetRef=Отфильтрован подозрительный источник запроса («referer»): URL: [%1$S] со страницы [%2$S]. Отфильтрованный адрес: [%3$S]
-xss.reason.filterXPost=Отфильтрована подозрительная загрузка с [%2$S] к [%1$S]: запрос преобразован в GET-запрос для скачивания.
-unsafeReload.warning=Небезопасная, подозрительная перезагрузка\n\n%1$S [%2$S]\n\nОт [%3$S]\n\nNoScript НЕ сможет защитить данный запрос!\n
-metaRefresh.notify=NoScript заблокировал <META> перенаправление внутри элемента <NOSCRIPT>: %S за %S сек.
-metaRefresh.notify.follow=Выполнить перенаправление
-metaRefresh.notify.follow.accessKey=о
-notify.options=Настройки
-notify.options.accessKey=а
-reset.title=Сброс настроек NoScript
-reset.warning=ВСЕ настройки NoScript и разрешения сайтов будут сброшены к значениям, установленным по умолчанию.\nДанную операцию невозможно отменить.\nПродолжить?
-bookmarkSync.title=Закладка конфигурации NoScript
-bookmarkSync.message=Эта закладка предназначена не для открытия, а для синхронизации с помощью сервиса Weave или расширения XMarks.
-bookmarkSync.confirm=NoScript обнаружил сохранённую закладку-конфигурацию расширения\n%S.\nЖелаете ли обновить настройки расширения NoScript на указанные в ней?
-ABE.notify=Запрос %1$S отфильтрован ABE: <%2$S> %3$S
-ABE.chooseEditor=Выберите текстовый редактор для наборов правил ABE
-ABE.syntaxError=Синтаксическая ошибка в наборе правил ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Разрешить все скрипты с %S
-allowTempFrom=Временно разрешить все скрипты с %S
-siteInfo.confirm=Вы собираетесь узнать информацию о сайте «%1$S»,\nотправив запрос к %2$S.\nПродолжить?
-siteInfo.tooltip=Middle-click или shift+click для информации о сайте...
-ef.activate=Фильтр %S
-ef.options=%S настройки...
-ef.newName=Введите название нового фильтра:
-ef.locateExe=Выберите исполняемый файл для фильтра %S
-disable=Отключить %S
-disable.accessKey=ь
-allowed.glb-emb=Скрипты разрешены глобально, но некоторые встроенные объекты заблокированы
-removal.title=Предупреждение о понижении уровня безопасности
-removal.message=Отключая или удаляя NoScript, вы отказываетесь от всех мер защиты, предоставляемых NoScript.\n\nЕсли вы просто устали от обработки разрешений скриптов для каждого сайта, то есть безопасный вариант.\n\nNoScript может прекратить блокировать скрипты, за исключением отмеченных вами как недоверенные, в то же время применяя самые передовые контрмеры против XSS, Clickjacking, CSRF и других веб-угроз.\n\nВы действительно хотите удалить всю защиту NoScript?\n
-removal.no=Нет, но не блокировать скрипты
-removal.yes=Да, удалить ВСЮ защиту
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\bDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/sk-SK/noscript/about.properties b/extensions/noscript/chrome/locale/sk-SK/noscript/about.properties
deleted file mode 100644
index af7e2fa..0000000
--- a/extensions/noscript/chrome/locale/sk-SK/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra ochrana pre váš Firefox. NoScript povolí JavaScript, Javu (a ďalšie zásuvné moduly) len pre dôveryhodné domény podľa vášho výberu (napríklad webovú stránku vášho e-bankingu). Tento zoznam povolených založený na preventívnom blokovaní prístupu chráni pred zneužívaním bezpečnostných dier (známych aj neznámych) bez straty funkčnosti. Odborníci by súhlasili: Firefox je s rozšírením NoScript naozaj bezpečnejší :-)
-aboutTitle=O rozšírení %S
-extensionContributors=Prispievatelia:
-extensionContributors.tip=Ľudia, ktorým patrí vďaka za toto rozšírenie
-extensionCreatorLabel=Autor:
-changelog=Denník zmien
-changelog.tip=Zobraziť denník zmien
-license=Licencia
-license.tip=Čítať licenciu koncového používateľa
-logo.tip=Navštíviť domovskú stránku rozšírenia
-sponsor.tip=Navštíviť domovskú stránku sponzora
-informaction.tip=Navštíviť stránku InformAction
-extensionHomepage.tip=Navštíviť domovskú stránku rozšírenia
-extensionCreator.tip=Navštíviť domovskú stránku autora
-version=Verzia %S
diff --git a/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.dtd b/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.dtd
deleted file mode 100644
index e7290cd..0000000
--- a/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Možnosti...">
-<!ENTITY noscriptOptions.accesskey "M">
-<!ENTITY noscriptOptionsLong "NoScript – Možnosti">
-<!ENTITY noscriptAbout "O rozšírení NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Môžete určiť, ktoré webové stránky majú povolené spúšťať JavaScript. Zadajte adresu alebo doménu (napríklad &quot;http://www.site.com&quot; alebo &quot;site.com&quot;) stránky, ktorú chcete povoliť, a potom kliknite na tlačidlo Povoliť.">
-<!ENTITY noscriptWebAddress "Adresa webovej stránky:">
-<!ENTITY noscriptAllow "Povoliť">
-<!ENTITY noscriptAllow.accesskey "P">
-<!ENTITY noscriptForbid "Zakázať">
-<!ENTITY noscriptForbid.accesskey "Z">
-<!ENTITY noscriptTrust "Označiť ako dôveryhodné">
-<!ENTITY noscriptTrust.accesskey "d">
-<!ENTITY noscriptUntrust "Označiť ako nedôveryhodné">
-<!ENTITY noscriptUntrust.accesskey "n">
-<!ENTITY noscriptRemoveSelected "Odstrániť vybrané stránky">
-<!ENTITY noscriptGloballyEnabled "Skripty všeobecne povolené (nebezpečné)">
-<!ENTITY noscriptAutoReload "Automaticky znovu načítať stránky, keď sa zmení povolenie">
-<!ENTITY noscriptGeneral "Všeobecné">
-<!ENTITY noscriptAppearance "Vzhľad">
-<!ENTITY noscriptShow "Zobraziť...">
-<!ENTITY noscriptCtxMenu "Kontextová ponuka">
-<!ENTITY noscriptStatusIcon "Ikona v stavovom riadku">
-<!ENTITY noscriptFullAddr "Celé adresy (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Celé domény (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Základňa pre subdomény (noscript.net)">
-<!ENTITY noscriptTempCmd "Dočasne povoliť [...]">
-<!ENTITY noscriptSound "Zvukový signál pri zablokovaní skriptov">
-<!ENTITY noscriptImport "Importovať">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportovať">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Zobraziť oznámenie o blokovaných skriptoch">
-<!ENTITY noscriptNotify.bottom "Umiestniť oznámenie naspodok">
-<!ENTITY noscriptSound.choose "Vybrať">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Prehrať">
-<!ENTITY noscriptSound.play.accesskey "h">
-<!ENTITY noscriptSound.reset "Obnoviť predvolené">
-<!ENTITY noscriptSound.reset.accesskey "r">
-<!ENTITY noscriptAdvanced "Spresnenie">
-<!ENTITY noscriptAdditionalPermissions "Ďalšie povolenia pre dôveryhodné stránky">
-<!ENTITY noscriptAllowClipboard "Povoliť kopírovanie a prilepenie textu z externej schránky">
-<!ENTITY noscriptAdditionalRestrictions "Ďalšie obmedzenia pre nepovolené stránky">
-<!ENTITY noscriptPlugins "Zásuvné moduly">
-<!ENTITY noscriptContentBlocker "Použiť tieto obmedzenia aj na dôveryhodné stránky">
-<!ENTITY noscriptForbidJava "Zakázať Java™">
-<!ENTITY noscriptForbidXSLT "Zakázať XSLT">
-<!ENTITY noscriptForbidSilverlight "Zakázať Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Zakázať &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Zakázať &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Zakázať @font-face">
-<!ENTITY noscriptForbidWebGL "Zakázať WebGL">
-<!ENTITY noscriptForbidMedia "Zakázať &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Zakázať Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Zakázať ostatné zásuvné moduly">
-<!ENTITY noscriptReloadWarn "Tieto možnosti sa prejavia na nových (alebo na ručne znovu načítaných) stránkach">
-<!ENTITY noscriptConfirmUnblock "Pred dočasným odblokovaním objektu sa opýtať na potvrdenie">
-<!ENTITY noscriptStatusLabel "Informácie v stavovom riadku">
-<!ENTITY noscriptForbidBookmarklets "Zakázať záložkové skripty">
-<!ENTITY noscriptShowPlaceholder "Zobraziť ikonu zástupcu">
-<!ENTITY noscriptTruncateTitle "Skrátiť titulky dokumentov">
-<!ENTITY noscriptFixLinks "Pokúsiť sa opraviť prepojenia JavaScriptu">
-<!ENTITY noscriptAllowBookmarks "Povoliť všetky stránky nájdené v Záložkách">
-<!ENTITY noscriptAllowViaBookmarks "Povoliť stránky otvorené zo Záložiek">
-<!ENTITY noscriptAllowPing "Povoliť &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Povoliť lokálne prepojenia">
-<!ENTITY noscriptForbidPing "Zakázať &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Zakázať presmerovanie META v rámci prvkov &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "Zobraziť správu o zablokovaných META presmerovaniach">
-<!ENTITY noscriptNotifyMeta.accesskey "a">
-<!ENTITY noscriptWhitelist "Zoznam povolených">
-<!ENTITY noscriptPermissions "Povolenia">
-<!ENTITY noscriptRefresh "Obnoviť">
-<!ENTITY noscriptNotifications "Oznámenia">
-<!ENTITY noscriptToolbarToggle "Kliknutím ľavým tlačidlom myši na tlačidlo NoScript na paneli s nástrojmi sa prepínajú povolenia pre aktuálnu doménu najvyššej úrovne">
-<!ENTITY noscriptTrusted "Dôveryhodné">
-<!ENTITY noscriptUntrusted "Nedôveryhodné">
-<!ENTITY noscriptUnknown "Neznáme">
-<!ENTITY noscriptAdd "Pridať">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Zavrieť">
-<!ENTITY noscriptSiteManager "Správca stránok">
-<!ENTITY noscriptSecurityManager "Správca zabezpečenia">
-<!ENTITY noscriptPolicies "Politiky">
-<!ENTITY noscriptDefaultPolicies "Predvolené politiky">
-<!ENTITY noscriptSitePolicies "Politiky konkrétnej stránky">
-<!ENTITY noscriptNselNever "Skryť prvky &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Zobraziť prvok &lt;NOSCRIPT&gt;, ktorý nasleduje za blokovaným &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Dočasne povoliť stránky najvyššej úrovne">
-<!ENTITY noscriptDescription "Extra ochrana pre Firefox: NoScript povolí JavaScript, Javu (a ďalšie doplnky) len pre dôveryhodné domény podľa vášho výberu (napríklad webovú stránku bankingu). Tento zoznam dôveryhodných serverov založený na preventívnom blokovaní chráni pred zneužitím bezpečnostných dier (známych aj neznámych!) bez straty funkčnosti... Experti budú súhlasiť: Firefox s rozšírením NoScript je naozaj bezpečnejší :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blokovať skenery CSS">
-<!ENTITY noscriptOptFilterXGet "Ošetriť podozrivé požiadavky cross-site">
-<!ENTITY noscriptOptFilterXPost "Prepnúť požiadavky POST cross-site na údajovo bezstratové požiadavky GET">
-<!ENTITY noscriptShowConsole "Zobraziť konzolu...">
-<!ENTITY noscriptShowConsole.accesskey "k">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Nebezpečné znovunačítanie">
-<!ENTITY noscriptUnsafeReload.accesskey "N">
-<!ENTITY noscriptXssExceptions "Výnimky ochrany Anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Adresy zodpovedajúce týmto regulárnym výrazom NEBUDÚ chránené proti XSS">
-<!ENTITY noscriptMatchSample "Vzor šablóny:">
-<!ENTITY noscriptReset "Vynulovať">
-<!ENTITY noscriptReset.accesskey "V">
-<!ENTITY noscriptResetDef "Vynulovať na predvolené">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Zrušiť dočasné povolenia">
-<!ENTITY noscriptRevokeTemp.accesskey "d">
-<!ENTITY noscriptNoUntrustedPlaceholder "Žiadny zástupca pre objekty zo stránok označených ako nedôveryhodné">
-<!ENTITY noscriptCollapseBlockedObjects "Stlačiť blokované objekty">
-<!ENTITY noscriptExceptions "Výnimky...">
-<!ENTITY noscriptBlockedObjects "Blokované objekty">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokovať všetky objekty prichádzajúce zo stránky označenej ako nedôveryhodná">
-<!ENTITY noscriptTempAllowPage "Dočasne povoliť celú túto stránku">
-<!ENTITY noscriptTempAllowPage.accesskey "D">
-<!ENTITY noscriptAllowPage "Povoliť všetky tieto stránky">
-<!ENTITY noscriptAllowPage.accesskey "v">
-<!ENTITY noscriptTempToPerm "Nastaviť toto povolenie ako trvalé">
-<!ENTITY noscriptTempToPerm.accesskey "N">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Správanie">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Zakázať aktívny obsah webu, ak nepochádza zo zabezpečeného pripojenia (HTTPS):">
-<!ENTITY noscriptHttps.never "Nikdy">
-<!ENTITY noscriptHttps.proxy "Keď sa používa server proxy (odporúčané s Tor)">
-<!ENTITY noscriptHttps.always "Vždy">
-<!ENTITY noscriptHttpsForced "Vynútiť používanie zabezpečeného pripojenia (HTTPS) pre nasledujúce stránky:">
-<!ENTITY noscriptHttpsForcedExceptions "Nikdy nenútiť zabezpečené pripojenie (HTTPS) pre nasledujúce stránky:">
-<!ENTITY noscriptSecureCookies "Povoliť Automatickú správu zabezpečených cookies">
-<!ENTITY noscriptSecureCookiesForced "Vynútiť zabezpečenie pre všetky cookies nastavené cez HTTPS pre nasledujúce stránky&quot;">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorovať nebezpečné cookies nastavené nastavené nasledujúcimi stránkami cez HTTPS">
-<!ENTITY noscriptClearClickTitle "Upozornenia ClearClick">
-<!ENTITY noscriptClearClickHeader "Potenciálny pokus o podvodné správanie po kliknutí!">
-<!ENTITY noscriptClearClickDescription "NoScript zachytil interakciu klávesnice alebo myši s čiastočne skrytým objektom. Kliknutím na obrázok môžete prepínať medzi podozrivou a prečistenou verziou.">
-<!ENTITY noscriptClearClickOpt "Ochrana ClearClick na">
-<!ENTITY noscriptClearClickReport "Nahlásiť">
-<!ENTITY noscriptClearClickReport.accesskey "h">
-<!ENTITY noscriptClearClickReportId "ID správy:">
-<!ENTITY noscriptTrustedPagesAdj "dôveryhodných stránkach">
-<!ENTITY noscriptUntrustedPagesAdj "nedôveryhodných stránkach">
-<!ENTITY noscriptKeepLocked "Ponechať tento prvok blokovaný (odporúča sa)">
-<!ENTITY noscriptEmbeddings "Vložené objekty">
-<!ENTITY noscriptPrev "Predchádzajúci">
-<!ENTITY noscriptNext "Ďalší">
-<!ENTITY noscriptFrameOptErr.title "Tento obsah nie je možné zobraziť v rámci">
-<!ENTITY noscriptFrameOptErr.desc "Na vašu ochranu autor tohto obsahu nepovolil jeho zobrazenie v rámci">
-<!ENTITY noscriptFrameOptErr.link "Kliknutím sem otvoríte tento obsah v novom okne">
-<!ENTITY noscriptBookmarkSync "Zálohujte si konfiguráciu rozšírenia NoScript ako záložku pre jednoduchú synchronizáciu">
-<!ENTITY noscriptShowReleaseNotes "Pri aktualizácii zobraziť poznámky k vydaniu">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Sady pravidiel:">
-<!ENTITY ABE.enabled.label "Povoliť ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Povoliť stránkam pridávať ich vlastné sady pravidiel">
-<!ENTITY ABE.edit.label "Upraviť...">
-<!ENTITY ABE.edit.accesskey "U">
-<!ENTITY ABE.enable.label "Povoliť">
-<!ENTITY ABE.enable.accesskey "P">
-<!ENTITY ABE.disable.label "Zakázať">
-<!ENTITY ABE.disable.accesskey "Z">
-<!ENTITY ABE.refresh.label "Obnoviť">
-<!ENTITY ABE.refresh.accesskey "O">
-<!ENTITY noscriptUninstall "Odinštalovať">
-<!ENTITY noscriptRecentBlocked "Naposledy zablokované stránky">
-<!ENTITY noscriptExternalFilters "Externé filtre">
-<!ENTITY noscriptEF.enable "Povoliť externé filtre">
-<!ENTITY noscriptEF.add "Nový filter…">
-<!ENTITY noscriptEF.executable "Spustiteľný súbor:">
-<!ENTITY noscriptEF.browse "Prehľadávať…">
-<!ENTITY noscriptEF.contentType "Typ obsahu (MIME), ktorý má byť filtrovaný (presná zhoda alebo regulárny výraz):">
-<!ENTITY noscriptEF.exceptions "Nefiltrovať objekty z týchto stránok:">
-<!ENTITY noscriptEF.remove "Odstrániť">
-<!ENTITY noscriptPreset "Úroveň zabezpečenia">
-<!ENTITY noscriptPreset.off "Vypnuté (vážne to chcete?)">
-<!ENTITY noscriptPreset.low "Jednoduché (čierna listina + webová bezpečnosť)">
-<!ENTITY noscriptPreset.medium "Klasické (biela listina + webová bezpečnosť)">
-<!ENTITY noscriptPreset.high "Pevnosť (úplné uzamknutie)">
-<!ENTITY noscript.hoverUI "Otvoriť ponuku povolení po presunutí myši nad ikonu rozšírenia NoScript">
-<!ENTITY noscriptDonate "Prispieť">
-<!ENTITY noscriptDonate.accesskey "P">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.properties b/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.properties
deleted file mode 100644
index e555511..0000000
--- a/extensions/noscript/chrome/locale/sk-SK/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Povoliť JavaScript všeobecne (nebezpečné)
-forbidGlobal=Zakázať JavaScript všeobecne (odporúčané)
-allowLocal=Povoliť %S
-allowTemp=Dočasne povoliť %S
-forbidLocal=Zakázať %S
-allowed.glb=Pozor! JavaScript všeobecne povolený
-allowed.yes=JavaScript aktuálne povolený
-allowed.prt=JavaScript čiastočne povolený
-allowed.no=JavaScript aktuálne zakázaný
-global.warning.title=Upozornenie!
-global.warning.text=JavaScript bude všeobecne povolený (pre všetky stránky).\nToto je možno nebezpečná akcia.\nNaozaj chcete pokračovať?
-audio.samples=Zvuky
-confirm=Naozaj to chcete?
-alwaysAsk=Vždy sa opýtať na potvrdenie
-notifyHide=Skryť po %S s.
-trust=Dôveryhodné: %S
-distrust=Označiť %S ako nedôveryhodné
-untrustedOrigin=Nedôveryhodný pôvod
-xss.notify.generic=NoScript filtroval potencionálny pokus o skriptovanie cross-site (XSS). Technické podrobnosti boli zaznamenané do konzoly.
-xss.notify.showConsole=Zobraziť konzolu...
-xss.notify.showConsole.accessKey=k
-xss.reason.filterXGet=Ošetrená podozrivá požiadavka. Pôvodná adresa [%1$S] požadovaná z %2$S]. Ošetrená adresa: [%3$S].
-xss.reason.filterXGetRef=Ošetrená podozrivá požiadavka odkazovača. Adresa [%1$S] požadovaná z [%2$S]. Ošetrený odkazovač: [%3$S].
-xss.reason.filterXPost=Ošetrené podozrivé odovzdávanie na [%1$S] z [%2$S]: transformované na požiadavku GET (Len prevziať).
-unsafeReload.warning=NEBEZPEČNÉ znovunačítanie podozrivého\n\n%1$S [%2$S]\n\nZ [%3$S]\n\nNoScript NEBUDE chrániť túto požiadavku!\n
-metaRefresh.notify=NoScript zablokoval presmerovanie <META> v rámci prvku <NOSCRIPT>: %S o %S s.
-metaRefresh.notify.follow=Nasledovať presmerovanie
-metaRefresh.notify.follow.accessKey=N
-notify.options=Možnosti
-notify.options.accessKey=M
-reset.title=NoScript – Vynulovanie
-reset.warning=VŠETKY predvoľby a povolenia stránok budú priamo vynulované na predvolené hodnoty.\nTento úkon nemožno vrátiť.\nChcete pokračovať?
-bookmarkSync.title=Záložka konfigurácie rozšírenia NoScript
-bookmarkSync.message=Táto záložka nie je určená na otváranie, ale na synchronizáciu využitím služieb rozšírení ako Weave či XMarks.
-bookmarkSync.confirm=NoScript našiel konfiguračnú záložku zdanlivo uloženú v\n%S.\nNaozaj chcete prepísať lokálnu konfiguráciu rozšírenia NoScript obsahom tejto záložky?
-ABE.notify=Žiadosť %1$S odfiltrovaná pomocou ABE: <%2$S> %3$S
-ABE.chooseEditor=Zvoľte textový editor pre sady pravidiel ABE
-allowFrom=Povoliť všetky z %S
-allowTempFrom=Dočasne povoliť všetky z %S
-ABE.syntaxError=Chyba syntaxe v sade pravidiel ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=Chystáte sa požiadať o informácie o stránke "%1$S"\nodoslaním požiadavky na %2$S.\nChcete pokračovať?
-siteInfo.tooltip=Informácie o stránke po kliknutí stredným tlačidlom alebo kombinácii Shift+kliknutie…
-ef.activate=Filter %S
-ef.options=Možnosti %S…
-ef.newName=Zadajte názov filtra:
-ef.locateExe=Zvoľte spustiteľný súbor pre filter %S
-disable=Vypnúť %S
-disable.accessKey=V
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/sl-SI/noscript/about.properties b/extensions/noscript/chrome/locale/sl-SI/noscript/about.properties
deleted file mode 100644
index 5e2d34c..0000000
--- a/extensions/noscript/chrome/locale/sl-SI/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Dodatna zaščita za vaš Firefox: NoScript omogoči izvajanje JavaScript, Java (in drugih vtičnikov) samo na zaupanja vrednih domenah po vaši izbiri (pr. domača stran vaše spletne banke). S pristopom varnih seznamov onemogočimo izkoriščanje varnostnih lukenj (znanih in neznanih!) brez izgub funkcionalnosti... Strokovnjaki se bodo strinjali: Firefox je bolj varen z uporabo NoScript-a :-)
-aboutTitle=O programu %S
-extensionContributors=Prispevali so:
-extensionContributors.tip=Ljudje, katerim se morate zahvaliti za to razširitev
-extensionCreatorLabel=Avtor:
-changelog=Dnevnik sprememb
-changelog.tip=Prikaži dnevnik sprememb
-license=Licenca
-license.tip=Preberi licenco za končnega uporabnika
-logo.tip=Pojdi na domačo stran razširitve
-sponsor.tip=Obišči domačo stran sponzorja
-informaction.tip=Obišči domačo stran InformAction
-extensionHomepage.tip=Obišči domačo stran razširitve
-extensionCreator.tip=Obišči domačo stran avtorja
-version=Različica %S
diff --git a/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.dtd b/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.dtd
deleted file mode 100644
index 1de57d5..0000000
--- a/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Možnosti...">
-<!ENTITY noscriptOptions.accesskey "M">
-<!ENTITY noscriptOptionsLong "NoScript Možnosti">
-<!ENTITY noscriptAbout "O NoScript 5.1.8.5 programu...">
-<!ENTITY noscriptPermissionsText "Določite lahko na katerih straneh bo izvajanje skript dovoljeno. Vnesite naslov ali domeno (pr. &quot;http://www.domena.com&quot; or &quot;domena.com&quot;) strani, na kateri želite omogočiti izvajanje skript in kliknite Dovoli.">
-<!ENTITY noscriptWebAddress "Naslov strani:">
-<!ENTITY noscriptAllow "Dovoli">
-<!ENTITY noscriptAllow.accesskey "D">
-<!ENTITY noscriptForbid "Prepreči">
-<!ENTITY noscriptForbid.accesskey "P">
-<!ENTITY noscriptTrust "Označi kot varno">
-<!ENTITY noscriptTrust.accesskey "V">
-<!ENTITY noscriptUntrust "Označi kot nevarno">
-<!ENTITY noscriptUntrust.accesskey "N">
-<!ENTITY noscriptRemoveSelected "Odstrani označene strani">
-<!ENTITY noscriptGloballyEnabled "Omogočeno vsesplošno izvajanje skript (nevarno)">
-<!ENTITY noscriptAutoReload "Avtomatsko osveži strani ob spremembi pravic">
-<!ENTITY noscriptGeneral "Splošno">
-<!ENTITY noscriptAppearance "Izgled">
-<!ENTITY noscriptShow "Prikaži...">
-<!ENTITY noscriptCtxMenu "Kontekstualni meni">
-<!ENTITY noscriptStatusIcon "Ikono v statusni vrstici">
-<!ENTITY noscriptFullAddr "Polen naslov (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Polne domene (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Osnovne domene drugega reda (noscript.net)">
-<!ENTITY noscriptTempCmd "Začasno omogoči [...]">
-<!ENTITY noscriptSound "Zvočni signal ob onemogočenih skriptah">
-<!ENTITY noscriptImport "Uvozi">
-<!ENTITY noscriptImport.accesskey "U">
-<!ENTITY noscriptExport "Izvozi">
-<!ENTITY noscriptExport.accesskey "I">
-<!ENTITY noscriptNotify "Prikaži sporočilo o blokiranih skriptah">
-<!ENTITY noscriptNotify.bottom "Prikaži sporočilo na dnu">
-<!ENTITY noscriptSound.choose "Prebrskaj">
-<!ENTITY noscriptSound.choose.accesskey "r">
-<!ENTITY noscriptSound.play "Predvajaj">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Ponastavi">
-<!ENTITY noscriptSound.reset.accesskey "o">
-<!ENTITY noscriptAdvanced "Napredno">
-<!ENTITY noscriptAdditionalPermissions "Dodatna dovoljenja za zaupanja vredne strani">
-<!ENTITY noscriptAllowClipboard "Omogoči kopiranje in lepljenje obogatenega besedila s sistemskega odložišča">
-<!ENTITY noscriptAdditionalRestrictions "Dodatne omejitve za zaupanja nevredne strani">
-<!ENTITY noscriptPlugins "Vtičniki">
-<!ENTITY noscriptContentBlocker "Uporabi te omejitve tudi na zaupanja vrednih straneh">
-<!ENTITY noscriptForbidJava "Onemogoči Javo™">
-<!ENTITY noscriptForbidXSLT "Onemogoči XSLT">
-<!ENTITY noscriptForbidSilverlight "Onemogoči Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Onemogoči &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Onemogoči &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Onemogoči @font-face">
-<!ENTITY noscriptForbidWebGL "Onemogoči WebGL">
-<!ENTITY noscriptForbidMedia "Onemogoči &lt;ZVOK&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Onemogoči Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Onemogoči druge vtičnike">
-<!ENTITY noscriptReloadWarn "Te nastavitve bodo stopile v veljavo na novih oz. (ročno) osveženih straneh">
-<!ENTITY noscriptConfirmUnblock "Zahtevaj potrditev preden začasno omogočiš določen predmet">
-<!ENTITY noscriptStatusLabel "Opis v statusni vrstici">
-<!ENTITY noscriptForbidBookmarklets "Onemogoči bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Prikaži ikono pri blokiranih predmetih">
-<!ENTITY noscriptTruncateTitle "Odreži naslove dokumentov">
-<!ENTITY noscriptFixLinks "Poskušaj popraviti JavaScript povezave">
-<!ENTITY noscriptAllowBookmarks "Dovoli odpiranje strani preko bookmarkov">
-<!ENTITY noscriptAllowViaBookmarks "Dovoli odpiranje strani preko bookmarkov">
-<!ENTITY noscriptAllowPing "Dovoli &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Dovoli lokalne povezave">
-<!ENTITY noscriptForbidPing "Onemogoči &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Onemogoči META preusmeritve znotraj &lt;NOSCRIPT&gt; elementov">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "P">
-<!ENTITY noscriptNotifyMeta "Prikaži obvestilo o blokiranih META preusmeritvah">
-<!ENTITY noscriptNotifyMeta.accesskey "P">
-<!ENTITY noscriptWhitelist "Seznam dovoljenih strani">
-<!ENTITY noscriptPermissions "Dovoljenja">
-<!ENTITY noscriptRefresh "Osveži">
-<!ENTITY noscriptNotifications "Obvestila">
-<!ENTITY noscriptToolbarToggle "Z levim klikom na NoScript gumbu v orodni vrstici se spremenijo dovoljenja za trenutno vrhnjo domeno">
-<!ENTITY noscriptTrusted "Varno">
-<!ENTITY noscriptUntrusted "Nevarno">
-<!ENTITY noscriptUnknown "Neznano">
-<!ENTITY noscriptAdd "Dodaj">
-<!ENTITY noscriptAdd.accesskey "D">
-<!ENTITY noscriptClose "Zapri">
-<!ENTITY noscriptSiteManager "Upravitelj strani">
-<!ENTITY noscriptSecurityManager "Upravitelj varnosti">
-<!ENTITY noscriptPolicies "Politike">
-<!ENTITY noscriptDefaultPolicies "Privzete politike">
-<!ENTITY noscriptSitePolicies "Specifične politike strani">
-<!ENTITY noscriptNselNever "Skrij &lt;NOSCRIPT&gt; elemente">
-<!ENTITY noscriptNselForce "Prikaži &lt;NOSCRIPT&gt; elemente, ki sledijo blokiranemu &lt;SCRIPT&gt; elementu">
-<!ENTITY noscriptAutoAllowTopLevel "Privzeto začasno dovoli vrhnje domene">
-<!ENTITY noscriptDescription "Dodatna zaščita za vaš Firefox: NoScript omogoči izvajanje JavaScript, Java (in drugih vtičnikov) samo na zaupanja vrednih domenah po vaši izbiri (pr. domača stran vaše spletne banke). S pristopom varnih seznamov onemogočimo izkoriščanje varnostnih lukenj (znanih in neznanih!) brez izgub funkcionalnosti... Strokovnjaki se bodo strinjali: Firefox je bolj varen z uporabo NoScript-a :-)">
-<!ENTITY noscriptOptBlockCssScanners "Prepreči CSS-osnovane skenerje">
-<!ENTITY noscriptOptFilterXGet "Saniraj sumljive zahtevke drugih strani">
-<!ENTITY noscriptOptFilterXPost "Preoblikuj cross-site POST zahtevke v data-less GET zahtevke">
-<!ENTITY noscriptShowConsole "Prikaži konzolo...">
-<!ENTITY noscriptShowConsole.accesskey "P">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Nevarna osvežitev">
-<!ENTITY noscriptUnsafeReload.accesskey "o">
-<!ENTITY noscriptXssExceptions "Izjeme pri XSS zaščiti">
-<!ENTITY noscriptXssExceptions.description "Naslovi, ki ustrezajo spodaj predpisanim vzorcem NE BODO zaščiteni pred XSS ranljivostmi">
-<!ENTITY noscriptMatchSample "Primer ujemanja vzorca:">
-<!ENTITY noscriptReset "Ponastavi">
-<!ENTITY noscriptReset.accesskey "P">
-<!ENTITY noscriptResetDef "Ponastavi na privzete vrednosti">
-<!ENTITY noscriptResetDef.accesskey "n">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Prekliči začasne pravice">
-<!ENTITY noscriptRevokeTemp.accesskey "Z">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ne prikaži okvirja predmetov, ki izvirajo iz zaupanja nevrednih strani">
-<!ENTITY noscriptCollapseBlockedObjects "Skrij blokirane predmete">
-<!ENTITY noscriptExceptions "Izjeme...">
-<!ENTITY noscriptBlockedObjects "Blokirani predmeti">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blokiraj vsak predmet, ki prihaja z zaupanja nevrednih strani">
-<!ENTITY noscriptTempAllowPage "Začasno omogoči vse na tej strani">
-<!ENTITY noscriptTempAllowPage.accesskey "S">
-<!ENTITY noscriptAllowPage "Dovoli vse na tej strani">
-<!ENTITY noscriptAllowPage.accesskey "D">
-<!ENTITY noscriptTempToPerm "Spremeni dovoljenja za stran v trajna">
-<!ENTITY noscriptTempToPerm.accesskey "t">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Delovanje">
-<!ENTITY noscriptHttps.cookies "Piškotki">
-<!ENTITY noscriptHttps.description "Onemogoči aktivno vsebino v kolikor ne prihaja iz varne (HTTPS) povezave:">
-<!ENTITY noscriptHttps.never "Nikoli">
-<!ENTITY noscriptHttps.proxy "Ko uporabljam proxy strežnik (priporočeno pri Tor)">
-<!ENTITY noscriptHttps.always "Vedno">
-<!ENTITY noscriptHttpsForced "Vsili slednjim stranem uporabo varne (HTTPS) povezave:">
-<!ENTITY noscriptHttpsForcedExceptions "Nikoli ne vsili varne (HTTPS) povezave sledečim stranem:">
-<!ENTITY noscriptSecureCookies "Omogoči avtomatsko varno upravljanje piškotkov">
-<!ENTITY noscriptSecureCookiesForced "Vsili šifriranje za vse piškotke ustvarjene preko HTTPS za sledeče strani:">
-<!ENTITY noscriptSecureCookiesExceptions "Prezri nevarne piškotke ustvarjene preko HTTPS za sledeče strani:">
-<!ENTITY noscriptClearClickTitle "ClearClick Opozorilo">
-<!ENTITY noscriptClearClickHeader "Morebiten poskus ugrabitve klika oz. uporabniškega vmesnika.">
-<!ENTITY noscriptClearClickDescription "NoScript je zaznal interakcijo miške oz. tipkovnice z delno prikritim elementom. Kliknite na zgornjo sliko za prikaz prikrite in prave različice.">
-<!ENTITY noscriptClearClickOpt "ClearClick zaščita na straneh...">
-<!ENTITY noscriptClearClickReport "Poročilo">
-<!ENTITY noscriptClearClickReport.accesskey "P">
-<!ENTITY noscriptClearClickReportId "ID poročila:">
-<!ENTITY noscriptTrustedPagesAdj "zaupljiv">
-<!ENTITY noscriptUntrustedPagesAdj "nezaupljiv">
-<!ENTITY noscriptKeepLocked "Naj bo ta element zaklenjen (priporočeno)">
-<!ENTITY noscriptEmbeddings "Vstavljeni predmeti">
-<!ENTITY noscriptPrev "Prejšnji">
-<!ENTITY noscriptNext "Naslednji">
-<!ENTITY noscriptFrameOptErr.title "Vsebine ni mogoče prikazati v okviru">
-<!ENTITY noscriptFrameOptErr.desc "Zaradi vaše varnosti, založnik ne dovoljuje objavo vsebine v okvirju">
-<!ENTITY noscriptFrameOptErr.link "Kliknite sem da se vsebina odpre v novem oknu">
-<!ENTITY noscriptBookmarkSync "Naredite varnostno kopijo NoScript med zaznamke za lažjo sinhronizacijo">
-<!ENTITY noscriptShowReleaseNotes "Prikaži opombe k izdaji ob posodobitvah">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Pravila:">
-<!ENTITY ABE.enabled.label "Omogoči ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Dovoli stranem vsiljevanje lastnih pravil">
-<!ENTITY ABE.edit.label "Uredi…">
-<!ENTITY ABE.edit.accesskey "U">
-<!ENTITY ABE.enable.label "Omogoči">
-<!ENTITY ABE.enable.accesskey "O">
-<!ENTITY ABE.disable.label "Onemogoči">
-<!ENTITY ABE.disable.accesskey "n">
-<!ENTITY ABE.refresh.label "Osveži">
-<!ENTITY ABE.refresh.accesskey "v">
-<!ENTITY noscriptUninstall "Odstrani">
-<!ENTITY noscriptRecentBlocked "Nedavno blokirane strani">
-<!ENTITY noscriptExternalFilters "Zunanji Filtri">
-<!ENTITY noscriptEF.enable "Omogoči zunanje filtre">
-<!ENTITY noscriptEF.add "Nov filter...">
-<!ENTITY noscriptEF.executable "Izvršilna datoteka:">
-<!ENTITY noscriptEF.browse "Prebrskaj...">
-<!ENTITY noscriptEF.contentType "Vrsta vsebine (MIME), ki jo je treba filtrirati (natančno ujemanje ali regularni izraz):">
-<!ENTITY noscriptEF.exceptions "Ne filtriraj predmetov, ki prihajajo iz teh strani:">
-<!ENTITY noscriptEF.remove "Odstrani">
-<!ENTITY noscriptPreset "Varnostni nivo">
-<!ENTITY noscriptPreset.off "Onemogočen (ali mislite resno?!)">
-<!ENTITY noscriptPreset.low "Lahkotno brskanje (Črni seznam + Spletna varnost)">
-<!ENTITY noscriptPreset.medium "Klasika (Beli seznam + Spletna varnost)">
-<!ENTITY noscriptPreset.high "Trdnjava (Popolna blokada)">
-<!ENTITY noscript.hoverUI "Odpri menu z dovoljenji, ko kurzor preleti NoScript ikono">
-<!ENTITY noscriptDonate "Doniraj">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.properties b/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.properties
deleted file mode 100644
index 1757c8f..0000000
--- a/extensions/noscript/chrome/locale/sl-SI/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Omogoči vsesplošno izvajanje skript (nevarno)
-forbidGlobal=Onemogoči vsesplošno izvajanje skript (priporočeno)
-allowLocal=Dovoli %S
-allowTemp=Začasno dovoli %S
-forbidLocal=Onemogoči %S
-allowed.glb=Pozor! Omogočeno vsesplošno izvajanje skript
-allowed.yes=Trenutno omogočene skripte
-allowed.prt=Trenutno delno omogočene skripte
-allowed.no=Trenutno onemogočene skripte
-global.warning.title=Pozor!
-global.warning.text=Izvajanje skript bo vsesplošno omogočeno (na vsaki strani).\n To je lahko potencialno nevarno početje.\nAli resnično želite nadaljevati?
-audio.samples=Zvočni posnetki
-confirm=Ste prepričani?
-alwaysAsk=Vedno zahtevaj potrditev
-notifyHide=Skrij po %S sekundah
-trust=Zaupaj %S
-distrust=Označi %S kot nevarno
-untrustedOrigin=zaupanja nevreden izvor
-xss.notify.generic=NoScript je prestrezel potencialno cross-site scripting (XSS) namero na strani %S. Tehnični detajli so zabeleženi v Konzoli.
-xss.notify.showConsole=Prikaži Konzolo...
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Saniran sumljiv zahtevek. Izvoren URL [%1$S] zahtevan s strani [%2$S]. Saniran URL: [%3$S].)
-xss.reason.filterXGetRef=Saniran sumljiv naslov zahtevka. URL [%1$S] zahtevan s strani [%2$S]. Saniran naslov: [%3$S].)
-xss.reason.filterXPost=Sanirano sumljivo nalaganje na [%1$S] s strani [%2$S]: preoblikovano v download-only GET zahtevek
-unsafeReload.warning=NEVARNO ponovno nalagam sumljivo\n\n%1$S [%2$S]\n\nS STRANI [%3$S]\n\nNoScript NE BO zaščitil tega zahtevka!\n
-metaRefresh.notify=NoScript je onemogočil <META> preusmeritev znotraj <NOSCRIPT> elementa: %S v %S sekundah.
-metaRefresh.notify.follow=Sledi preusmeritvi
-metaRefresh.notify.follow.accessKey=S
-notify.options=Možnosti
-notify.options.accessKey=M
-reset.title=NoScript ponastavitev
-reset.warning=VSE nastavitve NoScript-a in dovoljenja strani bodo ponastavljena na privzete vrednosti.\nDejanja ni mogoče preklicati.\nAli želite nadaljevati?
-bookmarkSync.title=NoScript nastavitveni Zaznamek
-bookmarkSync.message=Ta zaznamek, NI mišljen za branje, ampak za sinhronizacijo z uporabo storitev kot sta Weave ali XMarks vtičnika.
-bookmarkSync.confirm=NoScript je našel nastavitveni zaznamek dozdevno shranjen na\n%S.\nAli resnično želite prepisati lokalne nastavitve NoScript z nastavitvami iz zaznamka?
-ABE.notify=Zahtevaj %1$S filtrira ABE: <%2$S> %3$S
-ABE.chooseEditor=Izberite tekstovni urejevalnik za urejanje ABE pravil
-ABE.syntaxError=Napaka v sintaksi ABE pravil!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Omogoči vse z %S
-allowTempFrom=Začasno omogoči vse z %S
-siteInfo.confirm=Ste na tem, da zaprosite za informacije o "%1$S" strani\Ns poizvedbo na %2$S.\nAli želite nadaljevati?
-siteInfo.tooltip=Srednji klik ali shift + klik za info stran...
-ef.activate=Filtriraj %S
-ef.options=%S možnosti...
-ef.newName=Vnesite ime novega filtra:
-ef.locateExe=Izberite izvršilno datoteko za %S filter
-disable=Onemogoči %S
-disable.accessKey=O
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/sr-RS/noscript/about.properties b/extensions/noscript/chrome/locale/sr-RS/noscript/about.properties
deleted file mode 100644
index d5ea346..0000000
--- a/extensions/noscript/chrome/locale/sr-RS/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Додатна заштита за Ваш Firefox: NoScript дозвољава JavaScript, Java (и остале додатке) само доменима којима се верује по Вашем избору (нпр. Ваша е-banking веб страна). Овај превентивни приступ блокирања базиран на белој листи спречава искоришћавање безбедносних пропуста (познатих и чак и непознатих!) без икаквог губитка функционалности... Експерти ће се сложити: Firefox је заиста безбеднији са NoScript-ом :-)
-aboutTitle=О %S
-extensionContributors=Радили на пројекту:
-extensionContributors.tip=Људи којима би требало да захвалите за ово проширење
-extensionCreatorLabel=Аутор:
-changelog=Дневник промена
-changelog.tip=Прикажи дневник промена
-license=Лиценца
-license.tip=Прочитајте лиценцу за крајњег корисника
-logo.tip=Посетите веб страну проширења
-sponsor.tip=Посетите веб страну спонзора
-informaction.tip=Посетите InformAction веб страну
-extensionHomepage.tip=Посетите веб страну проширења
-extensionCreator.tip=Посетите веб страну аутора
-version=Верзија %S
diff --git a/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.dtd b/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.dtd
deleted file mode 100644
index 8083ced..0000000
--- a/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Подешавања...">
-<!ENTITY noscriptOptions.accesskey "П">
-<!ENTITY noscriptOptionsLong "NoScript подешавања">
-<!ENTITY noscriptAbout "О NoScript 5.1.8.5-у">
-<!ENTITY noscriptPermissionsText "Можете да наведете којим веб странама је дозвољено да извршавају скриптове. Унесите адресу или домен (нпр. &quot;http://www.site.com&quot; или &quot;site.com&quot;) стране којој желите да дате дозволу и онда кликните Дозволи.">
-<!ENTITY noscriptWebAddress "Адреса веб стране:">
-<!ENTITY noscriptAllow "Дозволи">
-<!ENTITY noscriptAllow.accesskey "Д">
-<!ENTITY noscriptForbid "Забрани">
-<!ENTITY noscriptForbid.accesskey "З">
-<!ENTITY noscriptTrust "Означи као проверено">
-<!ENTITY noscriptTrust.accesskey "в">
-<!ENTITY noscriptUntrust "Означи као непроверено">
-<!ENTITY noscriptUntrust.accesskey "н">
-<!ENTITY noscriptRemoveSelected "Уклони изабране стране">
-<!ENTITY noscriptGloballyEnabled "Скриптови су глобално дозвољени (опасно)">
-<!ENTITY noscriptAutoReload "Аутоматски поново учитај стране које су обухваћене променом дозвола">
-<!ENTITY noscriptGeneral "Опште">
-<!ENTITY noscriptAppearance "Изглед">
-<!ENTITY noscriptShow "Прикажи...">
-<!ENTITY noscriptCtxMenu "Контекстни мени">
-<!ENTITY noscriptStatusIcon "Икона на статусној линији">
-<!ENTITY noscriptFullAddr "Пуне адресе (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Пуни домени (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Базни домени другог нивоа (noscript.net)">
-<!ENTITY noscriptTempCmd "Привремено дозволи [...]">
-<!ENTITY noscriptSound "Звучно обавештење када су скриптови блокирани">
-<!ENTITY noscriptImport "Увоз">
-<!ENTITY noscriptImport.accesskey "У">
-<!ENTITY noscriptExport "Извоз">
-<!ENTITY noscriptExport.accesskey "И">
-<!ENTITY noscriptNotify "Прикажи поруку о блокираним скриптовима">
-<!ENTITY noscriptNotify.bottom "Постави поруку на дно">
-<!ENTITY noscriptSound.choose "Изаберите">
-<!ENTITY noscriptSound.choose.accesskey "з">
-<!ENTITY noscriptSound.play "Свирај">
-<!ENTITY noscriptSound.play.accesskey "С">
-<!ENTITY noscriptSound.reset "Врати на подразумевано">
-<!ENTITY noscriptSound.reset.accesskey "В">
-<!ENTITY noscriptAdvanced "Напредно">
-<!ENTITY noscriptAdditionalPermissions "Додатне дозволе за странице којима се верује">
-<!ENTITY noscriptAllowClipboard "Дозволи rich text копирање и налепљивање из ектерног клипборда">
-<!ENTITY noscriptAdditionalRestrictions "Додатне забране за странице којима се не верује">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Забрани Java™">
-<!ENTITY noscriptForbidXSLT "Забрани XSLT">
-<!ENTITY noscriptForbidSilverlight "Забрани Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Забрани &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Забрани &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Забрани @font-face">
-<!ENTITY noscriptForbidWebGL "Забрани WebGL">
-<!ENTITY noscriptForbidMedia "Забрани &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Забрани Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Забрани остале додатке">
-<!ENTITY noscriptReloadWarn "Ова подешавања ће бити примењена на нове или (ручно) поново учитане стране">
-<!ENTITY noscriptConfirmUnblock "Тражи потврду пре привременог скидања блокаде са објекта">
-<!ENTITY noscriptStatusLabel "Лабела на статусној линији">
-<!ENTITY noscriptForbidBookmarklets "Забрани bookmarklet-е">
-<!ENTITY noscriptShowPlaceholder "Прикажи икону места где стоји објекат">
-<!ENTITY noscriptTruncateTitle "Одсеци наслове докумената">
-<!ENTITY noscriptFixLinks "Покушај да поправиш JavaScript везе">
-<!ENTITY noscriptAllowBookmarks "Дозволи странице отворене преко Омиљено">
-<!ENTITY noscriptAllowViaBookmarks "Дозволи странице отворене преко Омиљено">
-<!ENTITY noscriptAllowPing "Дозволи &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Дозволи локалне везе">
-<!ENTITY noscriptForbidPing "Забрани &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Забрани META редирекције унутар &lt;NOSCRIPT&gt; елемената">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "М">
-<!ENTITY noscriptWhitelist "Бела листа">
-<!ENTITY noscriptPermissions "Дозволе">
-<!ENTITY noscriptRefresh "Освежи">
-<!ENTITY noscriptNotifications "Обавештења">
-<!ENTITY noscriptToolbarToggle "Леви клик на NoScript дугме у линији алата укључује/искључује дозволе top-level стране">
-<!ENTITY noscriptTrusted "Којима се верује">
-<!ENTITY noscriptUntrusted "Којима се не верује">
-<!ENTITY noscriptUnknown "Непознато">
-<!ENTITY noscriptAdd "Додај">
-<!ENTITY noscriptAdd.accesskey "ј">
-<!ENTITY noscriptClose "Затвори">
-<!ENTITY noscriptSiteManager "Менаџер страна">
-<!ENTITY noscriptSecurityManager "Менаџер сигурности">
-<!ENTITY noscriptPolicies "Полисе">
-<!ENTITY noscriptDefaultPolicies "Подразумеване полисе">
-<!ENTITY noscriptSitePolicies "Полисе специфичне за стране">
-<!ENTITY noscriptNselNever "Сакриј &lt;NOSCRIPT&gt; елементе">
-<!ENTITY noscriptNselForce "Прикажи &lt;NOSCRIPT&gt; који се налази иза блокираног &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Привремено дозволи top-level стране као подразумевано">
-<!ENTITY noscriptDescription "Додатна заштита за ваш Firefox: NoScript дозвољава JavaScript, Java (и остале додатке) само доменима којима се верује по вашем избору (нпр. Ваша е-banking веб страна). Овај превентивни приступ блокирања базиран на белој листи спречава искоришћавање безбедносних пропуста (познатих и чак и непознатих!) без икаквог губитка функционалности... Експерти ће се сложити: Firefox је заиста безбеднији са NoScript-ом :-)">
-<!ENTITY noscriptOptBlockCssScanners "Блокирај CSS-базиране скенере">
-<!ENTITY noscriptOptFilterXGet "Очисти сумњиве cross-site захтеве">
-<!ENTITY noscriptOptFilterXPost "Претвори cross-site POST захтеве у GET захтеве без података">
-<!ENTITY noscriptShowConsole "Прикажи конзолу...">
-<!ENTITY noscriptShowConsole.accesskey "р">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS ЧПП...">
-<!ENTITY noscriptXssFaq.accesskey "Ч">
-<!ENTITY noscriptUnsafeReload "Небезбедно поновно учитавање">
-<!ENTITY noscriptUnsafeReload.accesskey "б">
-<!ENTITY noscriptXssExceptions "Изузеци Anti-XSS заштите">
-<!ENTITY noscriptXssExceptions.description "Одредишта која задовољавају ове регуларне изразе НЕЋЕ бити заштићена од XSS">
-<!ENTITY noscriptMatchSample "Узорак шаблона за поклапање:">
-<!ENTITY noscriptReset "Врати подразумевано">
-<!ENTITY noscriptReset.accesskey "Р">
-<!ENTITY noscriptResetDef "Ресетуј на подразумевано">
-<!ENTITY noscriptResetDef.accesskey "т">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Пријави">
-<!ENTITY noscriptClearClickReport.accesskey "П">
-<!ENTITY noscriptClearClickReportId "ИД пријаве:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Уграђени објекти">
-<!ENTITY noscriptPrev "Претходно">
-<!ENTITY noscriptNext "Даље">
-<!ENTITY noscriptFrameOptErr.title "Овај садржај не може да буде приказан у оквиру">
-<!ENTITY noscriptFrameOptErr.desc "Ради заштите ваше сигурности, објављивач ове странице не дозвољава приказивање у оквиру.">
-<!ENTITY noscriptFrameOptErr.link "Кликните овде да бисте отворили овај садржај у новом прозору">
-<!ENTITY noscriptBookmarkSync "Направите резервну копију подешавања БезСкрити у забелешку ради лаког усклађивања">
-<!ENTITY noscriptShowReleaseNotes "Након дограђивања прикажи белешку о издању">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "А">
-<!ENTITY ABE.rulesets.label "Правила:">
-<!ENTITY ABE.enabled.label "Укључи ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Дозволи страницама да објаве своја правила">
-<!ENTITY ABE.edit.label "Уреди...">
-<!ENTITY ABE.edit.accesskey "У">
-<!ENTITY ABE.enable.label "Укључи">
-<!ENTITY ABE.enable.accesskey "у">
-<!ENTITY ABE.disable.label "Исључи">
-<!ENTITY ABE.disable.accesskey "И">
-<!ENTITY ABE.refresh.label "Освежи">
-<!ENTITY ABE.refresh.accesskey "О">
-<!ENTITY noscriptUninstall "Деинсталирај">
-<!ENTITY noscriptRecentBlocked "Недавно блокиране странице">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.properties b/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.properties
deleted file mode 100644
index 9b73525..0000000
--- a/extensions/noscript/chrome/locale/sr-RS/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Дозволи скрипте глобално (опасно)
-forbidGlobal=Забрани скрипте глобално (препоручљиво)
-allowLocal=Дозволи %S
-allowTemp=Привремено дозволи %S
-forbidLocal=Забрани %S
-allowed.glb=Опасност! Скрипте су глобално дозвољени
-allowed.yes=Скрипте су тренутно дозвољени
-allowed.prt=Скрипте су делимично дозвољени
-allowed.no=Скрипте су тренутно забрањени
-global.warning.title=Упозорење!
-global.warning.text=Скрипте ће глобално бити дозвољене (за све стране).\n Ово је потенцијално опасна радња.\nДа ли заиста желите да наставите?
-audio.samples=Звучни узорци
-confirm=Да ли сте сигурни?
-alwaysAsk=Увек тражи потврду
-notifyHide=Склони након %s секунди
-trust=Веруј %S
-distrust=Означи %S као непроверено
-untrustedOrigin=Порекло непроверено
-xss.notify.generic=БезСкрипти је филтритао потенцијални покушај cross-site скриптинга (XSS) од стране %S. Технички детаљи су забележени у конзолу.
-xss.notify.showConsole=Прикажи конзолу...
-xss.notify.showConsole.accessKey=к
-xss.reason.filterXGet=Очишћен сумњив захтев. Оригинални URL [%1$S] затражен од стране [%2$S]. Очишћен URL: [%3$S].)
-xss.reason.filterXGetRef=Очишћен пошиљалац сумњивог захтева. URL [%1$S] је захтеван од стране [%2$S]. Очишћен пошиљалац: [%3$S].)
-xss.reason.filterXPost=Очишћен сумњиви upload ка [%1$S] од [%2$S]: трансформисано у download-only GET захтев.
-unsafeReload.warning=НЕБЕЗБЕДНО поновно учитавање сумњивог \n\n%1$S [%2$S]\n\nОД [%3$S]\n\nNoScript НЕЋЕ заштитити овај захтев!\n
-metaRefresh.notify=БезСкрипти је блокирао <META> преусмеравање унутар <NOSCRIPT> елемента: %S за %S секунди.
-metaRefresh.notify.follow=Следи преусмеравање
-metaRefresh.notify.follow.accessKey=л
-notify.options=Опције
-notify.options.accessKey=O
-reset.title=Врати почетна подешавања БезСкрипти
-reset.warning=СВА NoScript подешавања и дозволе за веб стране ће тренутно бити враћени на подразумеване вредности.\nОву акцију не можете да поништите.\nЖелите ли да наставите?
-bookmarkSync.title=Забелешка за подешавање БезСкрипте
-bookmarkSync.message=Ова забелешка НИЈЕ предвиђена за отварање, већ за усклађивање коришћењем услуга као што су Weave или XMarks додатак.
-bookmarkSync.confirm=NoScript је пронашао забелешку са подешавањима наочиглед сачувану у\n%S.\nДа ли желите да препишете месна NoScript подешавања са садржајем ове забелешке?
-ABE.notify=Захтев %1$S је филтрирао ABE: <%2$S> %3$S
-ABE.chooseEditor=Изаберите уређивач текста за обраду ABE правила
-allowFrom=Дозволи све са %S
-allowTempFrom=Привремено дозволи све са %S
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/sr/noscript/about.properties b/extensions/noscript/chrome/locale/sr/noscript/about.properties
deleted file mode 100644
index cc7fa58..0000000
--- a/extensions/noscript/chrome/locale/sr/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Додатна заштита за фајерфокс. Носкрипт омогућава јаваскрипт, јаву и друге прикључке само за поверљиве сајтове. Ова бела листа заснована је на превентивном забрањивању приступа ради спречавања искоришћавања сигурносних рањивости без губљења функционалности. Стручњаци ће се сложити – фајерфокс је безбеднији уз носкрипт.
-aboutTitle=О додатку %S
-extensionContributors=Доприносиоци:
-extensionContributors.tip=Људи заслужни за овај додатак
-extensionCreatorLabel=Аутор:
-changelog=Попис измена
-changelog.tip=Прикажи попис измена
-license=Лиценца
-license.tip=Прочитајте лиценцу крајњег корисника
-logo.tip=Посетите страницу додатка
-sponsor.tip=Посетите страницу спонзора
-informaction.tip=Посетите страницу Информекшен
-extensionHomepage.tip=Посетите страницу додатка
-extensionCreator.tip=Посетите страницу аутора
-version=Издање %S
diff --git a/extensions/noscript/chrome/locale/sr/noscript/noscript.dtd b/extensions/noscript/chrome/locale/sr/noscript/noscript.dtd
deleted file mode 100644
index 9fd5109..0000000
--- a/extensions/noscript/chrome/locale/sr/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Поставке…">
-<!ENTITY noscriptOptions.accesskey "П">
-<!ENTITY noscriptOptionsLong "Поставке">
-<!ENTITY noscriptAbout "О додатку…">
-<!ENTITY noscriptPermissionsText "Можете изабрати којим сајтовима је дозвољено извршавање скриптова. Унесите адресу или домен сајта и кликните на „Дозволи“.">
-<!ENTITY noscriptWebAddress "Адреса сајта:">
-<!ENTITY noscriptAllow "Дозволи">
-<!ENTITY noscriptAllow.accesskey "Д">
-<!ENTITY noscriptForbid "Забрани">
-<!ENTITY noscriptForbid.accesskey "З">
-<!ENTITY noscriptTrust "Означи као поверљиво">
-<!ENTITY noscriptTrust.accesskey "п">
-<!ENTITY noscriptUntrust "Означи као неповерљиво">
-<!ENTITY noscriptUntrust.accesskey "з">
-<!ENTITY noscriptRemoveSelected "Уклони изабране сајтове">
-<!ENTITY noscriptGloballyEnabled "Скриптови су глобално дозвољени">
-<!ENTITY noscriptAutoReload "Самостално учитај странице при измени дозвола">
-<!ENTITY noscriptGeneral "Опште">
-<!ENTITY noscriptAppearance "Изглед">
-<!ENTITY noscriptShow "Прикажи…">
-<!ENTITY noscriptCtxMenu "Приручни мени">
-<!ENTITY noscriptStatusIcon "Иконица на линији стања">
-<!ENTITY noscriptFullAddr "Целе адресе (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Цели домени (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Домени другог нивоа (noscript.net)">
-<!ENTITY noscriptTempCmd "Привремено дозволи […]">
-<!ENTITY noscriptSound "Обавести ме звуком када се скриптови забране">
-<!ENTITY noscriptImport "Увези">
-<!ENTITY noscriptImport.accesskey "У">
-<!ENTITY noscriptExport "Извези">
-<!ENTITY noscriptExport.accesskey "И">
-<!ENTITY noscriptNotify "Прикажи поруку о забрањеним скриптовима">
-<!ENTITY noscriptNotify.bottom "Постави поруку на дно">
-<!ENTITY noscriptSound.choose "Изабери">
-<!ENTITY noscriptSound.choose.accesskey "з">
-<!ENTITY noscriptSound.play "Репродукуј">
-<!ENTITY noscriptSound.play.accesskey "Р">
-<!ENTITY noscriptSound.reset "Постави на подразумевано">
-<!ENTITY noscriptSound.reset.accesskey "п">
-<!ENTITY noscriptAdvanced "Напредно">
-<!ENTITY noscriptAdditionalPermissions "Додатне дозволе за поверљиве сајтове">
-<!ENTITY noscriptAllowClipboard "Дозволи умножавање и убацивање текста из спољне оставе">
-<!ENTITY noscriptAdditionalRestrictions "Додатна ограничења за неповерљиве сајтове">
-<!ENTITY noscriptPlugins "Прикључци">
-<!ENTITY noscriptContentBlocker "Примени ова ограничења и на сајтове у белој листи">
-<!ENTITY noscriptForbidJava "Забрани јаву">
-<!ENTITY noscriptForbidXSLT "Забрани XSLT">
-<!ENTITY noscriptForbidSilverlight "Забрани Мајкрософт силверлајт">
-<!ENTITY noscriptForbidIFrames "Забрани &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Забрани &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Забрани @font-face">
-<!ENTITY noscriptForbidWebGL "Забрани WebGL">
-<!ENTITY noscriptForbidMedia "Забрани &lt;AUDIO&gt;/&lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Забрани адоуб флеш">
-<!ENTITY noscriptForbidPlugins "Забрани остале прикључке">
-<!ENTITY noscriptReloadWarn "Ове поставке утицаће на нове или поновно отворене странице">
-<!ENTITY noscriptConfirmUnblock "Питај ме за потврду пре привременог деблокирања објекта">
-<!ENTITY noscriptStatusLabel "Ознака линије стања">
-<!ENTITY noscriptForbidBookmarklets "Забрани маркерчиће">
-<!ENTITY noscriptShowPlaceholder "Прикажи иконицу местодржача">
-<!ENTITY noscriptTruncateTitle "Одсеци наслове докумената">
-<!ENTITY noscriptFixLinks "Поправи везе јаваскрипте">
-<!ENTITY noscriptAllowBookmarks "Дозволи сајтове отворене преко забелешки">
-<!ENTITY noscriptAllowViaBookmarks "Дозволи сајтове отворене преко забелешки">
-<!ENTITY noscriptAllowPing "Дозволи &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Дозволи локалне везе">
-<!ENTITY noscriptForbidPing "Забрани &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Забрани мета преусмерења унутар елемента &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "м">
-<!ENTITY noscriptNotifyMeta "Прикажи поруку о забрањеним мета преусмерењима">
-<!ENTITY noscriptNotifyMeta.accesskey "р">
-<!ENTITY noscriptWhitelist "Бела листа">
-<!ENTITY noscriptPermissions "Дозволе">
-<!ENTITY noscriptRefresh "Освежи">
-<!ENTITY noscriptNotifications "Обавештења">
-<!ENTITY noscriptToolbarToggle "Левим кликом на алатницу носкрипт мења дозволе за текући домен првог нивоа">
-<!ENTITY noscriptTrusted "Поверљиво">
-<!ENTITY noscriptUntrusted "Неповерљиво">
-<!ENTITY noscriptUnknown "Непознато">
-<!ENTITY noscriptAdd "Додај">
-<!ENTITY noscriptAdd.accesskey "Д">
-<!ENTITY noscriptClose "Затвори">
-<!ENTITY noscriptSiteManager "Управљач сајтовима">
-<!ENTITY noscriptSecurityManager "Управљач сигурности">
-<!ENTITY noscriptPolicies "Полисе">
-<!ENTITY noscriptDefaultPolicies "Подразумеване полисе">
-<!ENTITY noscriptSitePolicies "Полисе одређених сајтова">
-<!ENTITY noscriptNselNever "Сакриј елементе &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Прикажи елемент &lt;NOSCRIPT&gt; који прати забрањен &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Привремено дозволи домене првог нивоа">
-<!ENTITY noscriptDescription "Додатна заштита за фајерфокс. Носкрипт омогућава јаваскрипт, јаву и друге прикључке само за поверљиве сајтове. Ова бела листа заснована је на превентивном забрањивању приступа ради спречавања искоришћавања сигурносних рањивости без губљења функционалности. Стручњаци ће се сложити — фајерфокс је безбеднији уз носкрипт.">
-<!ENTITY noscriptOptBlockCssScanners "Забрани скенере засноване на CSS-у">
-<!ENTITY noscriptOptFilterXGet "Уклони сумњиве захтеве међусајтовне скрипте">
-<!ENTITY noscriptOptFilterXPost "Пребаци међусајтовне POST захтеве у безподатковне GET захтеве">
-<!ENTITY noscriptShowConsole "Прикажи конзолу…">
-<!ENTITY noscriptShowConsole.accesskey "к">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS ЧПП…">
-<!ENTITY noscriptXssFaq.accesskey "Ч">
-<!ENTITY noscriptUnsafeReload "Небезбедно поновно учитавање">
-<!ENTITY noscriptUnsafeReload.accesskey "б">
-<!ENTITY noscriptXssExceptions "Анти-XSS изузеци заштите">
-<!ENTITY noscriptXssExceptions.description "Одредишта која се поклапају с регуларним изразима неће бити заштићена против XSS-а.">
-<!ENTITY noscriptMatchSample "Обрасци:">
-<!ENTITY noscriptReset "Поништи">
-<!ENTITY noscriptReset.accesskey "П">
-<!ENTITY noscriptResetDef "Постави на подразумевано">
-<!ENTITY noscriptResetDef.accesskey "с">
-<!ENTITY noscriptOptionsWidth "40 em">
-<!ENTITY noscriptRevokeTemp "Опозови привремене дозволе">
-<!ENTITY noscriptRevokeTemp.accesskey "з">
-<!ENTITY noscriptNoUntrustedPlaceholder "Ниједан местодржач за објекте не долази из неповерљивих сајтова">
-<!ENTITY noscriptCollapseBlockedObjects "Скупи забрањене објекте">
-<!ENTITY noscriptExceptions "Изузеци…">
-<!ENTITY noscriptBlockedObjects "Забрањени објекти">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Забрани сваки објекат који долази из неповерљивог сајта">
-<!ENTITY noscriptTempAllowPage "Привремено дозволи све на овој страници">
-<!ENTITY noscriptTempAllowPage.accesskey "р">
-<!ENTITY noscriptAllowPage "Дозволи све на овој страници">
-<!ENTITY noscriptAllowPage.accesskey "Д">
-<!ENTITY noscriptTempToPerm "Начини дозволе на страници као трајне">
-<!ENTITY noscriptTempToPerm.accesskey "Н">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS ЧПП…">
-<!ENTITY noscriptHttpsFaq.accesskey "Ч">
-<!ENTITY noscriptHttps.behavior "Понашање">
-<!ENTITY noscriptHttps.cookies "Колачићи">
-<!ENTITY noscriptHttps.description "Забрани активни садржај осим ако долази из безбедне (HTTPS) везе:">
-<!ENTITY noscriptHttps.never "Никада">
-<!ENTITY noscriptHttps.proxy "При коришћењу посредника (препоручује се тор)">
-<!ENTITY noscriptHttps.always "Увек">
-<!ENTITY noscriptHttpsForced "Приморај следеће сајтове да користе безбедну (HTTPS) везу:">
-<!ENTITY noscriptHttpsForcedExceptions "Не приморавај коришћење безбедне (HTTPS) везе за следеће сајтове:">
-<!ENTITY noscriptSecureCookies "Омогући Безбедно управљање колачићима">
-<!ENTITY noscriptSecureCookiesForced "Приморај шифровање за све колачиће HTTPS-а за следеће сајтове:">
-<!ENTITY noscriptSecureCookiesExceptions "Занемари небезбедне колачиће HTTPS-а за следеће сајтове:">
-<!ENTITY noscriptClearClickTitle "Клирклик ворнинг">
-<!ENTITY noscriptClearClickHeader "Покушај кликџекинга / UI реадресирања!">
-<!ENTITY noscriptClearClickDescription "Носкрипт је пресретнуо интеракцију миша или тастатуре с делимично сакривеним елементом. Кликните на слику испод да промените између започетог и чистог издања.">
-<!ENTITY noscriptClearClickOpt "Клирклик заштита на страницама…">
-<!ENTITY noscriptClearClickReport "Пријави">
-<!ENTITY noscriptClearClickReport.accesskey "П">
-<!ENTITY noscriptClearClickReportId "ID пријаве:">
-<!ENTITY noscriptTrustedPagesAdj "поверљиво">
-<!ENTITY noscriptUntrustedPagesAdj "неповерљиво">
-<!ENTITY noscriptKeepLocked "Задржи овај елемент закључаним (препоручено)">
-<!ENTITY noscriptEmbeddings "Уграђивања">
-<!ENTITY noscriptPrev "Претходно">
-<!ENTITY noscriptNext "Следеће">
-<!ENTITY noscriptFrameOptErr.title "Овај садржај не може бити приказан у оквиру">
-<!ENTITY noscriptFrameOptErr.desc "Да би вас задржао/ла безбедним, издавач овог садржаја не дозвољава његово приказивање у оквиру.">
-<!ENTITY noscriptFrameOptErr.link "Кликните овде да отворите садржај у новом прозору">
-<!ENTITY noscriptBookmarkSync "Направи резервни примерак подешавања у забелешци ради лакшег усклађивања">
-<!ENTITY noscriptShowReleaseNotes "Прикажи белешке издавача при доградњи">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Скупови правила:">
-<!ENTITY ABE.enabled.label "Омогући ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Дозволи сајтовима да поставе свој скуп правила">
-<!ENTITY ABE.edit.label "Уреди…">
-<!ENTITY ABE.edit.accesskey "У">
-<!ENTITY ABE.enable.label "Омогући">
-<!ENTITY ABE.enable.accesskey "м">
-<!ENTITY ABE.disable.label "Онемогући">
-<!ENTITY ABE.disable.accesskey "н">
-<!ENTITY ABE.refresh.label "Освежи">
-<!ENTITY ABE.refresh.accesskey "О">
-<!ENTITY noscriptUninstall "Уклони">
-<!ENTITY noscriptRecentBlocked "Забрањени сајтови">
-<!ENTITY noscriptExternalFilters "Спољни филтери">
-<!ENTITY noscriptEF.enable "Омогући спољне филтере">
-<!ENTITY noscriptEF.add "Нови филтер…">
-<!ENTITY noscriptEF.executable "Извршна датотека:">
-<!ENTITY noscriptEF.browse "Потражи…">
-<!ENTITY noscriptEF.contentType "Врста садржаја (MIME) за филтрирање (подударање или регуларни израз):">
-<!ENTITY noscriptEF.exceptions "Не филтрирај објекте који долази с ових сајтова:">
-<!ENTITY noscriptEF.remove "Уклони">
-<!ENTITY noscriptPreset "Ниво безбедности">
-<!ENTITY noscriptPreset.off "Искључено">
-<!ENTITY noscriptPreset.low "Једноставно (црна листа и веб безбедност)">
-<!ENTITY noscriptPreset.medium "Класично (бела листа и веб безбедност)">
-<!ENTITY noscriptPreset.high "Тврђава (пуно закључавање)">
-<!ENTITY noscript.hoverUI "Отвори мени за дозволе при преласку мишем преко иконице носкрипта">
-<!ENTITY noscriptDonate "Донирај">
-<!ENTITY noscriptDonate.accesskey "Д">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/sr/noscript/noscript.properties b/extensions/noscript/chrome/locale/sr/noscript/noscript.properties
deleted file mode 100644
index 7bf23ec..0000000
--- a/extensions/noscript/chrome/locale/sr/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Дозволи скриптове глобално
-forbidGlobal=Забрани скриптове глобално
-allowLocal=Дозволи %S
-allowTemp=Привремено дозволи %S
-forbidLocal=Забрани %S
-allowed.glb=Упозорење! Скриптови су дозвољени глобално
-allowed.yes=Скриптови су тренутно дозвољени
-allowed.prt=Скриптови су делимично дозвољени
-allowed.no=Скриптови су тренутно забрањени
-global.warning.title=Упозорење!
-global.warning.text=Скриптови ће бити дозвољени глобално (за сваки сајт).\nОва радња може бити опасна. Желите ли да наставите?
-audio.samples=Звучни примерци
-confirm=Јесте ли сигурни?
-alwaysAsk=Увек ме питај за потврду
-notifyHide=Сакриј после %S секунде/и
-trust=Означи %S као поверљиво
-distrust=Означи %S као неповерљиво
-untrustedOrigin=неповерљив извор
-xss.notify.generic=Носкрипт је филтрирао покушај међусајтовног скриптовања (XSS) из %S. Технички детаљи су забележени у конзоли.
-xss.notify.showConsole=Прикажи конзолу…
-xss.notify.showConsole.accessKey=к
-xss.reason.filterXGet=Саниран је сумњив захтев. Изворна адреса [%1$S] је затражена из [%2$S]. Санирана адреса: [%3$S].
-xss.reason.filterXGetRef=Саниран је сумњив упућивач захтева. Адреса [%1$S] је затражена из [%2$S]. Саниран упућивач: [%3$S].
-xss.reason.filterXPost=Санирано је сумњиво слање на [%1$S] из [%2$S]: претворено у GET захтев доступан само за преузимање.
-unsafeReload.warning=Небезбедно учитавање сумњивих\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nНоскрипт неће заштитити овај захтев!\n
-metaRefresh.notify=Носкрипт је блокирао преусмерење <META> унутар елемента <NOSCRIPT>: %S у %S секунде/и.
-metaRefresh.notify.follow=Прати преусмерење
-metaRefresh.notify.follow.accessKey=П
-notify.options=Поставке
-notify.options.accessKey=с
-reset.title=Поништавање
-reset.warning=Сва подешавања додатка и дозволе сајтова биће поништени на подразумеване вредности.\nОва радња се не може вратити.\nЖелите ли да наставите?
-bookmarkSync.title=Забелешка подешавања
-bookmarkSync.message=Ова забелешка није намењена за отварање, већ за усклађивање користећи додатке као што су Weave или XMarks.
-bookmarkSync.confirm=Носкрипт је пронашао забелешку подешавања која је сачувана у\n%S.\nЖелите ли да замените текуће поставке са поставкама из забелешке?
-ABE.notify=Затражи %1$S филтрирано од ABE: <%2$S> %3$S
-ABE.chooseEditor=Изаберите уређивач текста за скуп правила ABE
-ABE.syntaxError=Синтаксна грешка у скупу правила ABE!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Дозволи све са %S
-allowTempFrom=Привремено дозволи све са %S
-siteInfo.confirm=Управо ћете питати за податке о сајту „%1$S“\nслањем упита на %2$S.\nЖелите ли да наставите?
-siteInfo.tooltip=Притисните средњи клик или шифт и клик за податке о страници…
-ef.activate=Филтер %S
-ef.options=%S поставке…
-ef.newName=Унесите назив новог филтера:
-ef.locateExe=Изаберите извршну датотеку за филтер %S
-disable=Онемогући %S
-disable.accessKey=О
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/sv-SE/noscript/about.properties b/extensions/noscript/chrome/locale/sv-SE/noscript/about.properties
deleted file mode 100644
index c4d0cb1..0000000
--- a/extensions/noscript/chrome/locale/sv-SE/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra skydd för Firefox: NoScript tillåter JavaScript, Java (och andra tillägg) endast för betrodda domäner du valt (t ex din internetbank). Denna vitlistebaserade förebyggande blockering förhindrar uttnyttjande av säkerhetsproblem (både kända och okända) utan förlust av funktionalitet... Experter är överens: Firefox är verkligen säkrare med NoScript :-)
-aboutTitle=Om %S
-extensionContributors=Medverkande:
-extensionContributors.tip=Tack till:
-extensionCreatorLabel=Författare:
-changelog=Förändringslogg:
-changelog.tip=Visa förändringslogg:
-license=Licens
-license.tip=Läs slutanvändarlicens
-logo.tip=Besök tilläggets webbplats
-sponsor.tip=Besök sponsorns webbplats
-informaction.tip=Besök InformActions webbplats
-extensionHomepage.tip=Besök tilläggets webbplats
-extensionCreator.tip=Besök författarens webbplats
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.dtd b/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.dtd
deleted file mode 100644
index 94a0cde..0000000
--- a/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Alternativ...">
-<!ENTITY noscriptOptions.accesskey "A">
-<!ENTITY noscriptOptionsLong "NoScript-alternativ">
-<!ENTITY noscriptAbout "Om NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Ange vilka webbplatser som får köra skript. Skriv webbadressen eller domänen (t ex. &quot;http://www.webbplats.se&quot; eller &quot;webbplats.se&quot;) för den webbplats där skript ska tillåtas. Klicka sedan på &quot;Tillåt&quot;.">
-<!ENTITY noscriptWebAddress "Sidans adress:">
-<!ENTITY noscriptAllow "Tillåt">
-<!ENTITY noscriptAllow.accesskey "T">
-<!ENTITY noscriptForbid "Förbjud">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Markera som betrodd">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Markera som ej betrodd">
-<!ENTITY noscriptUntrust.accesskey "F">
-<!ENTITY noscriptRemoveSelected "Ta bort markerade platser">
-<!ENTITY noscriptGloballyEnabled "Skript är tillåtna globalt (farligt)">
-<!ENTITY noscriptAutoReload "Uppdatera berörda webbsidor när skripttillstånd ändras">
-<!ENTITY noscriptGeneral "Allmänt">
-<!ENTITY noscriptAppearance "Utseende">
-<!ENTITY noscriptShow "Visa...">
-<!ENTITY noscriptCtxMenu "Snabbmeny">
-<!ENTITY noscriptStatusIcon "Statusfältsikon">
-<!ENTITY noscriptFullAddr "Hela adresser (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Hela domäner (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Andranivå-domäner (noscript.net)">
-<!ENTITY noscriptTempCmd "Tillåt tillfälligt [...]">
-<!ENTITY noscriptSound "Spela upp ljud när skript blockeras">
-<!ENTITY noscriptImport "Importera">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Exportera">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Visa meddelande om blockerade skript">
-<!ENTITY noscriptNotify.bottom "Placera nya meddelande längst ned">
-<!ENTITY noscriptSound.choose "Välj">
-<!ENTITY noscriptSound.choose.accesskey "V">
-<!ENTITY noscriptSound.play "Spela">
-<!ENTITY noscriptSound.play.accesskey "S">
-<!ENTITY noscriptSound.reset "Återställ standard">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Avancerat">
-<!ENTITY noscriptAdditionalPermissions "Ytterligare tillstånd för betrodda webbplatser">
-<!ENTITY noscriptAllowClipboard "Tillåt klipp ut och kopiera från externt urklipp">
-<!ENTITY noscriptAdditionalRestrictions "Ytterliga restriktioner för ej betrodda webbplatser">
-<!ENTITY noscriptPlugins "Tillägg">
-<!ENTITY noscriptContentBlocker "Använd begränsingarna på betrodda platser också">
-<!ENTITY noscriptForbidJava "Förbjud Java™">
-<!ENTITY noscriptForbidXSLT "Förbjud XSLT">
-<!ENTITY noscriptForbidSilverlight "Förbjud Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Förbjud &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Förbjud &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Förbjud @font-face">
-<!ENTITY noscriptForbidWebGL "Förbjud WebGL">
-<!ENTITY noscriptForbidMedia "Förbjud &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Förbjud Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Förbjud andra tillägg">
-<!ENTITY noscriptReloadWarn "Dessa alternativ kommer att börja gälla för nya eller (manuellt) uppdaterade webbsidor">
-<!ENTITY noscriptConfirmUnblock "Fråga innan temporär avblockering av ett objekt sker">
-<!ENTITY noscriptStatusLabel "Statusfältsetikett">
-<!ENTITY noscriptForbidBookmarklets "Förbjud bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Visa platshållarikon">
-<!ENTITY noscriptTruncateTitle "Korta av dokumenttitlar">
-<!ENTITY noscriptFixLinks "Försök reparera JavaSkript-länkar">
-<!ENTITY noscriptAllowBookmarks "Tillåt webbplatser som öppnas från bokmärken">
-<!ENTITY noscriptAllowViaBookmarks "Tillåt webbplatser som öppnas från bokmärken">
-<!ENTITY noscriptAllowPing "Tillåt &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Tillåt lokala länkar">
-<!ENTITY noscriptForbidPing "Förbjud &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Förbjud META omdirigering inuti &lt;NOSCRIPT&gt; element">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "F">
-<!ENTITY noscriptWhitelist "Vitlista">
-<!ENTITY noscriptPermissions "Behörigheter">
-<!ENTITY noscriptRefresh "Uppdatera">
-<!ENTITY noscriptNotifications "Notifieringar">
-<!ENTITY noscriptToolbarToggle "Vänsterklicka på NoScripts verktygsknapp för att ändra behörighet för aktuell webbsida">
-<!ENTITY noscriptTrusted "Betrodd">
-<!ENTITY noscriptUntrusted "Ej betrodd">
-<!ENTITY noscriptUnknown "Okänd">
-<!ENTITY noscriptAdd "Lägg till">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Stäng">
-<!ENTITY noscriptSiteManager "Platshanterare">
-<!ENTITY noscriptSecurityManager "Säkerhetshanterare">
-<!ENTITY noscriptPolicies "Riktlinjer">
-<!ENTITY noscriptDefaultPolicies "Standardriktlinjer">
-<!ENTITY noscriptSitePolicies "Platsspecifika riktlinjer">
-<!ENTITY noscriptNselNever "Dölj &lt;NOSCRIPT&gt; element">
-<!ENTITY noscriptNselForce "Visa &lt;NOSCRIPT&gt; element som följer ett blockerat &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Tillåt top-nivå platser tillfälligt">
-<!ENTITY noscriptDescription "Extra skydd för Firefox: NoScript tillåter JavaScript, Java (och andra tillägg) endast för betrodda domäner du valt (t ex din internetbank). Denna vitlistebaserade förebyggande blockering förhindrar uttnyttjande av säkerhetsproblem (både kända och okända) utan förlust av funktionalitet... Experter är överens: Firefox är verkligen säkrare med NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Blockera CSS-baserade scanners">
-<!ENTITY noscriptOptFilterXGet "Tvätta misstänkta XSS förfrågningar">
-<!ENTITY noscriptOptFilterXPost "Ändra XSS POST förfrågningar till datalösa GET förfrågningar">
-<!ENTITY noscriptShowConsole "Visa konsoll...">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Osäker omladdning">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS undantag">
-<!ENTITY noscriptXssExceptions.description "Destinationer som matchar dessa reguljära uttryck kommer INTE att skyddas mot XSS.">
-<!ENTITY noscriptMatchSample "Exempel på mönster:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "Återställ till standard">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Återkalla temporära tillstånd">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "Visa inte platshållare för objekt från ej betrodda platser">
-<!ENTITY noscriptCollapseBlockedObjects "Minimera blockerade objekt">
-<!ENTITY noscriptExceptions "Undantag...">
-<!ENTITY noscriptBlockedObjects "Blockerade objekt">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Blockera alla objekt från ej betrodda platser">
-<!ENTITY noscriptTempAllowPage "Tillåt denna sida tillfälligt">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Tillåt allt på denna sida">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Spara sidtillstånd permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Beteende">
-<!ENTITY noscriptHttps.cookies "Kakor">
-<!ENTITY noscriptHttps.description "Förbjud aktivt innehåll utom om det kommer från en säker (HTTPS) anslutning:">
-<!ENTITY noscriptHttps.never "Aldrig">
-<!ENTITY noscriptHttps.proxy "Vid användande av proxy (rekommenderas för Tor)">
-<!ENTITY noscriptHttps.always "Alltid">
-<!ENTITY noscriptHttpsForced "Tvinga dessa platser att använda säkra anslutningar (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Tvinga aldrig dessa platser att använda säkra anslutningar (HTTPS):">
-<!ENTITY noscriptSecureCookies "Aktivera automatisk säker hantering av kakor">
-<!ENTITY noscriptSecureCookiesForced "Tvinga kryptering för alla kakor över HTTPS för dessa platser:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignorera osäkra kakor som skickas över HTTPS för dessa platser:">
-<!ENTITY noscriptClearClickTitle "ClearClick varning">
-<!ENTITY noscriptClearClickHeader "Potentiell Clickjacking /UI redressing försök!">
-<!ENTITY noscriptClearClickDescription "NoScript fångade upp musklick eller tangentbordsklick med ett delvis dolt element. Klicka på bilden ovan för att växla mellan dold och klartext version.">
-<!ENTITY noscriptClearClickOpt "ClearClick skydd på sidor...">
-<!ENTITY noscriptClearClickReport "Rapport">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Rapport ID:">
-<!ENTITY noscriptTrustedPagesAdj "betrodd">
-<!ENTITY noscriptUntrustedPagesAdj "ej betrodd">
-<!ENTITY noscriptKeepLocked "Lås detta element permanent (rekommenderas)">
-<!ENTITY noscriptEmbeddings "Inbäddade objekt">
-<!ENTITY noscriptPrev "Föregående">
-<!ENTITY noscriptNext "Nästa">
-<!ENTITY noscriptFrameOptErr.title "Innehållet kan inte visas i en ram">
-<!ENTITY noscriptFrameOptErr.desc "För att skydda dig, tillåter utgivaren att innehållet visas i en ram.">
-<!ENTITY noscriptFrameOptErr.link "Klicka här för att öppna innehållet i ett nytt fönster">
-<!ENTITY noscriptBookmarkSync "Spara NoScript konfigurationen i ett bokmärke för enkel synkronisering">
-<!ENTITY noscriptShowReleaseNotes "Visa nyheter vid uppdatering">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Regler:">
-<!ENTITY ABE.enabled.label "Aktivera ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Tillåt platser att använda sina egna regler">
-<!ENTITY ABE.edit.label "Redigera...">
-<!ENTITY ABE.edit.accesskey "W">
-<!ENTITY ABE.enable.label "Aktivera">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Inaktivera">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Uppdatera">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Avinstallera">
-<!ENTITY noscriptRecentBlocked "Nyligen blockerade platser">
-<!ENTITY noscriptNotifyMeta "Visa meddelande om blockerade META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptExternalFilters "Externa filter">
-<!ENTITY noscriptEF.enable "Aktivera externa filter">
-<!ENTITY noscriptEF.add "Nytt filter ...">
-<!ENTITY noscriptEF.executable "Körbar fil:">
-<!ENTITY noscriptEF.browse "Bläddra ...">
-<!ENTITY noscriptEF.contentType "Innehållstyp (MIME) som skall filtreras (exakt eller reguljärt uttryck):">
-<!ENTITY noscriptEF.exceptions "Filtrera inte objekt som kommer från dessa platser:">
-<!ENTITY noscriptEF.remove "Ta bort">
-<!ENTITY noscriptPreset "Skyddsnivå">
-<!ENTITY noscriptPreset.off "Av (är du seriös?!)">
-<!ENTITY noscriptPreset.low "Lättsam (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Klassisk (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Öppna behörighetsmenyn när muspekaren är över NoScript ikon">
-<!ENTITY noscriptDonate "Donera">
-<!ENTITY noscriptDonate.accesskey "O">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.properties b/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.properties
deleted file mode 100644
index 25670d6..0000000
--- a/extensions/noscript/chrome/locale/sv-SE/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Tillåt skript globalt (farligt)
-forbidGlobal=Förbjud skript globalt (rekommenderas)
-allowLocal=Tillåt %S
-allowTemp=Tillåt tillfälligt %S
-forbidLocal=Förbjud %S
-allowed.glb=Fara! Skript tillåtna globalt
-allowed.yes=För närvarande tillåtna skript
-allowed.prt=Delvis tillåtna skript
-allowed.no=För närvarande förbjudna skript
-global.warning.title=Varning!
-global.warning.text=Skript kommer att tillåtas globalt (för alla webbplatser)\n Detta kan vara farligt. \n Vill du fortsätta?
-audio.samples=Ljudprover
-confirm=Är du säker?
-alwaysAsk=Fråga alltid
-notifyHide=Dölj efter %S sekunder
-trust=Trust %S
-distrust=Markera %S som ej betrodd
-untrustedOrigin=ursprung ej betrodd
-xss.notify.generic=NoScript filtrerade bort ett potentiellt XSS försök från %S. Tekniska detaljer kan läsas i konsollen.
-xss.notify.showConsole=Visa konsoll...
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Tvättade misstänkta förfrågningar. Original URL [%1$S] begärd från [%2$S]. Tvättad URL: [%3$S].)
-xss.reason.filterXGetRef=Tvättade misstänkt förfrågningsursprung. URL [%1$S] begärd från [%2$S]. Tvättat ursprung: [%3$S].)
-xss.reason.filterXPost=Rensade misstänkt uppladdning till [%1$S] från [%2$S]: transformerad till en GET förfrågan för nerladdning.
-unsafeReload.warning=OSÄKER omladdning av misstänkt\n\n%1$S [%2$S]\n\nFRÅN [%3$S]\n\nNoScript kommer INTE att skydda denna förfrågan!\n
-metaRefresh.notify=NoScript blockerade en <META> omdirigering inuti ett <NOSCRIPT> element: %S i %S sekunder.
-metaRefresh.notify.follow=Följ omdirigering
-metaRefresh.notify.follow.accessKey=F
-notify.options=Inställningar
-notify.options.accessKey=I
-reset.title=Återställ NoScript
-reset.warning=ALLA NoScript inställningar och tillstånd kommer att återställas till sina standardvärden omedelbart.\nDetta kan inte ångras.\nVill du fortsätta?
-bookmarkSync.title=NoScript konfigurationsbokmärke
-bookmarkSync.message=Bokmärket skall INTE öppnas i ett fönster utan skall användas för synkronisering via tjänster som Weave eller XMarks.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-allowFrom=Tillåt allt från %S
-allowTempFrom=Tillåt allt från %S tillfälligt
-ABE.syntaxError=Syntaxfel i ABE regeluppsättning!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOKALA
-siteInfo.confirm=Du är på väg att be om information om platsen \"%1$S\"\n genom att skicka en förfrågan till %2$S.\nVill du fortsätta?
-siteInfo.tooltip=Mellanklicka eller shift + klicka för Site Info ...
-ef.activate=Filter %S
-ef.options=%S alternativ ...
-ef.newName=Skriv in namnet på det nya filtret:
-ef.locateExe=Välj den körbara filen för %S filtret
-disable=Inaktivera %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/te-IN/noscript/about.properties b/extensions/noscript/chrome/locale/te-IN/noscript/about.properties
deleted file mode 100644
index 9aa6835..0000000
--- a/extensions/noscript/chrome/locale/te-IN/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)
-aboutTitle=About %S
-extensionContributors=Contributors:
-extensionContributors.tip=People you should thank for this extension
-extensionCreatorLabel=Author:
-changelog=Changelog
-changelog.tip=Show changelog
-license=License
-license.tip=Read end-user license
-logo.tip=Visit extension home page
-sponsor.tip=Visit sponsor home page
-informaction.tip=Visit InformAction home page
-extensionHomepage.tip=Visit extension home page
-extensionCreator.tip=Visit author home page
-version=Version %S
diff --git a/extensions/noscript/chrome/locale/te-IN/noscript/noscript.dtd b/extensions/noscript/chrome/locale/te-IN/noscript/noscript.dtd
deleted file mode 100644
index c0ab05e..0000000
--- a/extensions/noscript/chrome/locale/te-IN/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Options…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript Options">
-<!ENTITY noscriptAbout "About NoScript 5.1.8.5…">
-<!ENTITY noscriptPermissionsText "You can specify which web sites are allowed to execute scripts. Type the address or the domain (e.g. &quot;http://www.site.com&quot; or &quot;site.com&quot;) of the site you want to allow and then click Allow.">
-<!ENTITY noscriptWebAddress "Address of web site:">
-<!ENTITY noscriptAllow "Allow">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "Forbid">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "Mark as Trusted">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Mark as Untrusted">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "Remove Selected Sites">
-<!ENTITY noscriptGloballyEnabled "Scripts Globally Allowed (dangerous)">
-<!ENTITY noscriptAutoReload "Automatically reload affected pages when permissions change">
-<!ENTITY noscriptGeneral "General">
-<!ENTITY noscriptAppearance "Appearance">
-<!ENTITY noscriptShow "Show…">
-<!ENTITY noscriptCtxMenu "Contextual menu">
-<!ENTITY noscriptStatusIcon "Status bar icon">
-<!ENTITY noscriptFullAddr "Full Addresses (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Full Domains (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Base 2nd level Domains (noscript.net)">
-<!ENTITY noscriptTempCmd "Temporarily allow […]">
-<!ENTITY noscriptSound "Audio feedback when scripts are blocked">
-<!ENTITY noscriptImport "Import">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "Export">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "Show message about blocked scripts">
-<!ENTITY noscriptNotify.bottom "Place message at the bottom">
-<!ENTITY noscriptSound.choose "Choose">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Play">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Reset default">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Advanced">
-<!ENTITY noscriptAdditionalPermissions "Additional permissions for trusted sites">
-<!ENTITY noscriptAllowClipboard "Allow rich text copy and paste from external clipboard">
-<!ENTITY noscriptAdditionalRestrictions "Additional restrictions for untrusted sites">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "Forbid Java™">
-<!ENTITY noscriptForbidSilverlight "Forbid Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Forbid &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Forbid &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Forbid @font-face">
-<!ENTITY noscriptForbidWebGL "Forbid WebGL">
-<!ENTITY noscriptForbidMedia "Forbid &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Forbid Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "Forbid other plugins">
-<!ENTITY noscriptReloadWarn "These options will take effect on new or (manually) reloaded pages">
-<!ENTITY noscriptConfirmUnblock "Ask for confirmation before temporarily unblocking an object">
-<!ENTITY noscriptStatusLabel "Status bar label">
-<!ENTITY noscriptForbidBookmarklets "Forbid bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Show placeholder icon">
-<!ENTITY noscriptTruncateTitle "Truncate document titles">
-<!ENTITY noscriptFixLinks "Attempt to fix JavaScript links">
-<!ENTITY noscriptAllowBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowViaBookmarks "Allow sites opened through bookmarks">
-<!ENTITY noscriptAllowPing "Allow &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Allow local links">
-<!ENTITY noscriptForbidPing "Forbid &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Forbid META redirections inside &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "Whitelist">
-<!ENTITY noscriptPermissions "Permissions">
-<!ENTITY noscriptRefresh "Refresh">
-<!ENTITY noscriptNotifications "Notifications">
-<!ENTITY noscriptToolbarToggle "Left clicking on NoScript toolbar button toggles permissions for current top-level site">
-<!ENTITY noscriptTrusted "Trusted">
-<!ENTITY noscriptUntrusted "Untrusted">
-<!ENTITY noscriptUnknown "Unknown">
-<!ENTITY noscriptAdd "Add">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "Close">
-<!ENTITY noscriptSiteManager "Site Manager">
-<!ENTITY noscriptSecurityManager "Security Manager">
-<!ENTITY noscriptPolicies "Policies">
-<!ENTITY noscriptDefaultPolicies "Default Policies">
-<!ENTITY noscriptSitePolicies "Site Specific Policies">
-<!ENTITY noscriptNselNever "Hide &lt;NOSCRIPT&gt; elements">
-<!ENTITY noscriptNselForce "Show the &lt;NOSCRIPT&gt; element which follows a blocked &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Temporarily allow top-level sites by default">
-<!ENTITY noscriptDescription "Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality… Experts will agree: Firefox is really safer with NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Block CSS-based scanners">
-<!ENTITY noscriptOptFilterXGet "Sanitize cross-site suspicious requests">
-<!ENTITY noscriptOptFilterXPost "Turn cross-site POST requests into data-less GET requests">
-<!ENTITY noscriptShowConsole "Show Console…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Unsafe Reload">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS Protection Exceptions">
-<!ENTITY noscriptXssExceptions.description "Destinations matching these regular expressions will NOT be protected against XSS.">
-<!ENTITY noscriptMatchSample "Pattern matching sample:">
-<!ENTITY noscriptReset "Reset">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Reset to defaults">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions…">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image below to cycle between the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/te-IN/noscript/noscript.properties b/extensions/noscript/chrome/locale/te-IN/noscript/noscript.properties
deleted file mode 100644
index 35e928f..0000000
--- a/extensions/noscript/chrome/locale/te-IN/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Allow Scripts Globally (dangerous)
-forbidGlobal=Forbid Scripts Globally (advised)
-allowLocal=Allow %S
-allowTemp=Temporarily allow %S
-forbidLocal=Forbid %S
-allowed.glb=Danger! Scripts Globally Allowed
-allowed.yes=Scripts Currently Allowed
-allowed.prt=Scripts Partially Allowed
-allowed.no=Scripts Currently Forbidden
-global.warning.title=Warning!
-global.warning.text=Scripts are going to be allowed globally (for every site).\nThis is a potentially dangerous action.\nDo you really want to proceed?
-audio.samples=Audio samples
-confirm=Are you sure?
-alwaysAsk=Always ask for confirmation
-notifyHide=Hide after %S seconds
-trust=Trust %S
-distrust=Mark %S as Untrusted
-untrustedOrigin=an untrusted origin
-xss.notify.generic=NoScript filtered a potential cross-site scripting (XSS) attempt from %S. Technical details have been logged to the Console.
-xss.notify.showConsole=Show Console…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=Sanitized suspicious request. Original URL [%1$S] requested from [%2$S]. Sanitized URL: [%3$S].
-xss.reason.filterXGetRef=Sanitized suspicious request referer. URL [%1$S] requested from [%2$S]. Sanitized Referrer: [%3$S].
-xss.reason.filterXPost=Sanitized suspicious upload to [%1$S] from [%2$S]: transformed into a download-only GET request.
-unsafeReload.warning=UNSAFELY reloading a suspicious\n\n%1$S [%2$S]\n\nFROM [%3$S]\n\nNoScript will NOT protect this request!\n
-metaRefresh.notify=NoScript blocked a <META> redirection inside a <NOSCRIPT> element: %S in %S seconds.
-metaRefresh.notify.follow=Follow Redirection
-metaRefresh.notify.follow.accessKey=F
-notify.options=Options
-notify.options.accessKey=O
-reset.title=NoScript Reset
-reset.warning=ALL the NoScript preferences and site permissions will be reset to their default values immediately.\nThis action cannot be reverted.\nDo you want to continue?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark\'s content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You\'re about to ask for information about the \"%1$S\" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/th/noscript/about.properties b/extensions/noscript/chrome/locale/th/noscript/about.properties
deleted file mode 100644
index 30aef49..0000000
--- a/extensions/noscript/chrome/locale/th/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=การป้องกันพิเศษสำหรับไฟร์ฟอกซ์ของคุณ: NoScript ยอมรับจาวาสคริปต์และจาวา(และตัวเสริมอื่นๆ)เฉพาะโดเมนที่คุณเลือก(เช่น เว็บไซต์ธุรกิจส่วนตัวของคุณ) บัญชีขาวนี้บล็อกการแสวงหาผลประโยชน์ที่คืบคลานเข้ามาก่อนของความปลอดภัยที่ไม่มั่นคง(ระบุและไม่ระบุ)ด้วยคุณประโยชน์...ผู้ใช้ระดับสูงจะเข้าใจ: ไฟร์ฟอกซ์จะปลอดภัยขึ้นด้วยโนสคริปต์ :-)
-aboutTitle=เกี่ยวกับ %S
-extensionContributors=ผู้สนับสนุน:
-extensionContributors.tip=คนที่คุณควรขอบคุณสำหรับส่วนขยายนี้
-extensionCreatorLabel=ผู้จัดทำ:
-changelog=บันทึกความเปลี่ยนแปลง
-changelog.tip=แสดงบันทึกความเปลี่ยนแปลง
-license=ลิขสิทธิ์
-license.tip=อ่านลิขสิทธิ์ผู้ใช้ขั้นปลาย
-logo.tip=เยี่ยมชมโฮมเพจส่วนขยาย
-sponsor.tip=เยี่ยมชมโฮมเพจผู้อุปถัมภ์
-informaction.tip=เยี่ยมชมโฮมเพจ InformAction
-extensionHomepage.tip=เยี่ยมชมโฮมเพจส่วนขยาย
-extensionCreator.tip=เยี่ยมชมโฮมเพจผู้จัดทำ
-version=รุ่น %S
diff --git a/extensions/noscript/chrome/locale/th/noscript/noscript.dtd b/extensions/noscript/chrome/locale/th/noscript/noscript.dtd
deleted file mode 100644
index 383ae0f..0000000
--- a/extensions/noscript/chrome/locale/th/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "ตัวเลือก...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "ตัวเลือก NoScript">
-<!ENTITY noscriptAbout "เกี่ยวกับ NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "คุณสามารถกำหนดเว็บไซต์ที่จะอนุญาตดำเนินการสคริปต์ พิมพ์ที่อยู่หรือโดเมน (เช่น &quot;http://www.site.com&quot; หรือ &quot;site.com&quot;) ของไซต์ที่คุณต้องการอนุญาตและคลิกอนุญาต">
-<!ENTITY noscriptWebAddress "ที่อยู่เว็บไซต์:">
-<!ENTITY noscriptAllow "อนุญาต">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "ห้าม">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "ทำเครื่องหมายเชื่อถือได้">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "ทำเครื่องหมายเชื่อถือไม่ได้">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "ลบไซต์ที่เลือก">
-<!ENTITY noscriptGloballyEnabled "อนุญาตสคริปต์ทั่วไป (อันตราย)">
-<!ENTITY noscriptAutoReload "เรียกใหม่หน้าที่ส่งผลอัตโนมัติเมื่อเปลี่ยนการอนุญาต">
-<!ENTITY noscriptGeneral "ทั่วไป">
-<!ENTITY noscriptAppearance "การปรากฏ">
-<!ENTITY noscriptShow "แสดง...">
-<!ENTITY noscriptCtxMenu "เมนูบริบท">
-<!ENTITY noscriptStatusIcon "แสดงสัญรูปแถบสถานะ">
-<!ENTITY noscriptFullAddr "ที่อยู่เต็ม (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "โดเมนเต็ม (www.noscript.net)">
-<!ENTITY noscriptBaseDom "โดเมนบนฐานที่สอง (noscript.net)">
-<!ENTITY noscriptTempCmd "อนุญาตชั่วคราว [...]">
-<!ENTITY noscriptSound "เสียงผลป้อนกลับเมื่อสคริปต์ถูกบล็อก">
-<!ENTITY noscriptImport "นำเข้า">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "ส่งออก">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "แสดงข้อความเกี่ยวกับสคริปต์ที่บล็อก">
-<!ENTITY noscriptNotify.bottom "วางข้อความที่ล่างสุด">
-<!ENTITY noscriptSound.choose "เลือก">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "เล่น">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "กลับไปยังค่าเริ่มต้น">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "ขั้นสูง">
-<!ENTITY noscriptAdditionalPermissions "การอนุญาตที่เพิ่มขึ้นสำหรับไซต์ที่เขื่อถือ">
-<!ENTITY noscriptAllowClipboard "อนุญาตให้ริชเท็กซ์คัดลอกและวางจากคลิปบอร์ดภายนอก">
-<!ENTITY noscriptAdditionalRestrictions "การควบคุมที่เพิ่มขึ้นสำหรับไซต์ที่ไม่เชื่อถือ">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Apply these restrictions to trusted sites too">
-<!ENTITY noscriptForbidJava "ไม่อนุญาตจาวาâ™">
-<!ENTITY noscriptForbidXSLT "Forbid XSLT">
-<!ENTITY noscriptForbidSilverlight "ไม่อนุญาต Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "ไม่อนุญาต &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "ไม่อนุญาต &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "ไม่อนุญาต @font-face">
-<!ENTITY noscriptForbidWebGL "ไม่อนุญาต WebGL">
-<!ENTITY noscriptForbidMedia "ไม่อนุญาต &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "ไม่อนุญาต Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "ไม่อนุญาตตัวเสริมอื่น">
-<!ENTITY noscriptReloadWarn "ตัวเลือกเหล่านี้จะส่งผลกระทบในหน้าใหม่หรือหน้าที่เรียกใหม่ (ด้วยตัวเอง)">
-<!ENTITY noscriptConfirmUnblock "ถามเรื่องการยืนยันก่อนถอนการบล็อกวัตถุชั่วคราว">
-<!ENTITY noscriptStatusLabel "ป้ายแถบสถานะ">
-<!ENTITY noscriptForbidBookmarklets "ไม่อนุญาต bookmarklet">
-<!ENTITY noscriptShowPlaceholder "แสดงสัญรูปตัวยึดตำแหน่ง">
-<!ENTITY noscriptTruncateTitle "ตัดปลายหัวเรื่องเอกสาร">
-<!ENTITY noscriptFixLinks "พยายามซ่อมแซมลิงก์ JavaScript">
-<!ENTITY noscriptAllowBookmarks "อนุญาตไซต์ให้เปิดผ่านที่คั่นหน้า">
-<!ENTITY noscriptAllowViaBookmarks "อนุญาตไซต์ให้เปิดผ่านที่คั่นหน้า">
-<!ENTITY noscriptAllowPing "อนุญาต &lt;ปิง...&gt;">
-<!ENTITY noscriptAllowLocalLinks "อนุญาตลิงก์ภายใน">
-<!ENTITY noscriptForbidPing "ไม่อนุญาต &lt;ปิง...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "ห้าม META เปลี่ยนทางภายในส่วนประกอบ &lt;noscript&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptWhitelist "บัญชีขาว">
-<!ENTITY noscriptPermissions "การอนุญาต">
-<!ENTITY noscriptRefresh "เรียกหน้าใหม่">
-<!ENTITY noscriptNotifications "การเตือน">
-<!ENTITY noscriptToolbarToggle "คลิกซ้ายบนปุ่มแถมเครื่องมือ NoScript จะสลับการอนุญาตให้ไซต์ระดับสูงสุดปัจจุบัน">
-<!ENTITY noscriptTrusted "เชื่อถือได้">
-<!ENTITY noscriptUntrusted "เชื่อถือไม่ได้">
-<!ENTITY noscriptUnknown "ไม่ระบุ">
-<!ENTITY noscriptAdd "เพิ่ม">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "ปิด">
-<!ENTITY noscriptSiteManager "ตัวจัดการไซต์">
-<!ENTITY noscriptSecurityManager "ตัวจัดการด้านความปลอดภัย">
-<!ENTITY noscriptPolicies "กฎ">
-<!ENTITY noscriptDefaultPolicies "กฎเดิม">
-<!ENTITY noscriptSitePolicies "กฎไซต์ที่ปรากฏ">
-<!ENTITY noscriptNselNever "ซ่อนส่วนประกอบ &lt;noscript&gt;">
-<!ENTITY noscriptNselForce "แสดงส่วนประกอบ &lt;noscript&gt; ที่ตาม &lt;SCRIPT&gt; ที่บล็อก">
-<!ENTITY noscriptAutoAllowTopLevel "อนุญาตไซต์ระดับสูงสุดโดยชั่วคราวด้วยค่าเริ่มต้น">
-<!ENTITY noscriptDescription "การป้องกันพิเศษสำหรับไฟร์ฟอกซ์ของคุณ: NoScript อนุญาตจาวาสคริปต์ จาวา(และตัวเสริมอื่นๆ)เฉพาะสำหรับโดเมนที่เชื่อถือได้ของตัวเลือกของคุณ(เช่นเว็บไซต์โฮมว่างของคุณ) บัญชีขาวนี้มีพื้นฐานอยู่บนการบล็อกพรี-เอมป์ทีฟคล้ายการป้องกันการหาประโยชน์อย่างไม่ถูกต้องของความอ่อนแอของความปลอดภัย(รู้แล้วและแม้แต่ไม่รู้!)ด้วยการใช้ให้เป็นประโยชน์อย่างไม่ผิดพลาด...ผู้เชี่ยวชาญจะยอมรับ: ไฟร์ฟอกซ์ปลอดภัยกว่าอย่างแท้จริงด้วย NoScript:-)">
-<!ENTITY noscriptOptBlockCssScanners "บล็อกเครื่องกราดตรวจที่มีซีเอสเอสเป็นรากฐาน">
-<!ENTITY noscriptOptFilterXGet "ไซต์ผสมปราศจากเชื้อโรคมีความต้องการน่าสงสัย">
-<!ENTITY noscriptOptFilterXPost "เปลี่ยนความต้องการไซต์ผสม POST ไปยังความต้องการไม่มีข้อมูล GET">
-<!ENTITY noscriptShowConsole "แสดงส่วนเฝ้าคุม...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "เอกซ์เอสเอส">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "คำถามพบบ่อยเอกซ์เอสเอส...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "โหลดใหม่ไม่ปลอดภัย">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "ข้อยกเว้นการปกป้องแอนทิ-เอกซ์เอสเอส">
-<!ENTITY noscriptXssExceptions.description "เป้าหมายการจับคู่การแสดงออกทั่วไปเหล่านี้จะไม่ถูกปกป้องกับเอกซ์เอสเอส">
-<!ENTITY noscriptMatchSample "ตัวอย่างการจับคู่พื้นผิว:">
-<!ENTITY noscriptReset "รีเซ็ต">
-<!ENTITY noscriptReset.accesskey "R">
-<!ENTITY noscriptResetDef "คืนค่าเป็นค่าดั้งเดิม">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Revoke Temporary Permissions">
-<!ENTITY noscriptRevokeTemp.accesskey "T">
-<!ENTITY noscriptNoUntrustedPlaceholder "No placeholder for objects coming from sites marked as untrusted">
-<!ENTITY noscriptCollapseBlockedObjects "Collapse blocked objects">
-<!ENTITY noscriptExceptions "Exceptions...">
-<!ENTITY noscriptBlockedObjects "Blocked Objects">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Block every object coming from a site marked as untrusted">
-<!ENTITY noscriptTempAllowPage "Temporarily allow all this page">
-<!ENTITY noscriptTempAllowPage.accesskey "P">
-<!ENTITY noscriptAllowPage "Allow all this page">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "Make page permissions permanent">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Behavior">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "Forbid active web content unless it comes from a secure (HTTPS) connection:">
-<!ENTITY noscriptHttps.never "Never">
-<!ENTITY noscriptHttps.proxy "When using a proxy (recommended with Tor)">
-<!ENTITY noscriptHttps.always "Always">
-<!ENTITY noscriptHttpsForced "Force the following sites to use secure (HTTPS) connections:">
-<!ENTITY noscriptHttpsForcedExceptions "Never force secure (HTTPS) connections for the following sites:">
-<!ENTITY noscriptSecureCookies "Enable Automatic Secure Cookies Management">
-<!ENTITY noscriptSecureCookiesForced "Force encryption for all the cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptSecureCookiesExceptions "Ignore unsafe cookies set over HTTPS by the following sites:">
-<!ENTITY noscriptClearClickTitle "ClearClick Warning">
-<!ENTITY noscriptClearClickHeader "Potential Clickjacking / UI Redressing Attempt!">
-<!ENTITY noscriptClearClickDescription "NoScript intercepted a mouse or keyboard interaction with a partially hidden element. Click on the image above to cycle beetween the obstructed and the clear version.">
-<!ENTITY noscriptClearClickOpt "ClearClick protection on pages…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "trusted">
-<!ENTITY noscriptUntrustedPagesAdj "untrusted">
-<!ENTITY noscriptKeepLocked "Keep this element locked (recommended)">
-<!ENTITY noscriptEmbeddings "Embedded Objects">
-<!ENTITY noscriptPrev "Previuous">
-<!ENTITY noscriptNext "Next">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/th/noscript/noscript.properties b/extensions/noscript/chrome/locale/th/noscript/noscript.properties
deleted file mode 100644
index 31235fa..0000000
--- a/extensions/noscript/chrome/locale/th/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=อนุญาตสคริปต์โดยรวม (อันตราย)
-forbidGlobal=ไม่อนุญาตสคริปต์โดยรวม (พิจารณาแล้ว)
-allowLocal=อนุญาต %S
-allowTemp=อนุญาต %S ชั่วคราว
-forbidLocal=ไม่อนุญาต %S
-allowed.glb=อันตราย! อนุญาตคริปต์โดยรวมแล้ว
-allowed.yes=อนุญาตสคริปต์ปัจจุบันแล้ว
-allowed.prt=อนุญาตสคริปต์บางส่วนแล้ว
-allowed.no=ไม่อนุญาตสคริปต์ปัจจุบันแล้ว
-global.warning.title=คำเตือน!
-global.warning.text=สคริปต์กำลังจะถูกอนุญาตโดยทั่วไป (สำหรับทุกไซต์)\n นี่คือการกระทำที่จะอันตรายได้\nคุณแน่ใจหรือว่าต้องการดำเนินการต่อ
-audio.samples=ตัวอย่างเสียง
-confirm=คุณแน่ใจหรือ
-alwaysAsk=ถามเรื่องการยืนยันเสมอ
-notifyHide=ซ่อนหลังจาก %S วินาที
-trust=เชื่อ %S
-distrust=ทำสัญลักษณ์ว่าเชื่อถือไม่ได้กับ %S
-untrustedOrigin=ที่มาไม่น่าไว้ใจ
-xss.notify.generic=NoScript กรองสคริปต์ไซต์ผสมที่อาจเป็นไปได้ (XSS) ซึ่งพยายามจาก %S รายละเอียดทางเทคนิคถูกบันทึกอยู่ที่ส่วนเฝ้าคุม
-xss.notify.showConsole=แสดงส่วนเฝ้าคุม...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=ความต้องการที่น่าสงสัยที่ปราศจากเชื้อโรคแล้ว ยูอาร์แอลดั้งเดิม [%1$S] ต้องการจาก [%2$S] ยูอาร์แอลที่ปราศจากเชื้อโรคแล้ว: [%3$S]
-xss.reason.filterXGetRef=ผู้เสนอความต้องการที่น่าสงสัยที่ปราศจากเชื้อโรคแล้ว ยูอาร์แอล [%1$S] ต้องการจาก [%2$S] ผู้เสนอที่ปราศจากเชื้อโรคแล้ว: [%3$S]
-xss.reason.filterXPost=ส่วนที่น่าสงสัยที่ปราศจากเชื้อโรคแล้วอัปโหลดสู่ [%1$S] จาก [%2$S]: แปลงสู่ความต้องการ GET งานดาวน์โหลดเท่านั้น
-unsafeReload.warning=โหลดสิ่งน่าสงสัยใหม่อย่างไม่ปลอดภัย\n\n%1$S [%2$S]\n\nจาก [%3$S]\n\nNoScript จะไม่ปกป้องคำขอนี้!\n
-metaRefresh.notify=NoScript บล็อก <META> เปลี่ยนทางภายในส่วนประกอบ <NOSCRIPT>: %S ใน %S วินาที
-metaRefresh.notify.follow=เปลี่ยนทางตาม
-metaRefresh.notify.follow.accessKey=F
-notify.options=ตัวเลือก
-notify.options.accessKey=O
-reset.title=รีเช็ต NoScript
-reset.warning=การตั้งค่า NoScript และการอนุญาตไซต์ทั้งหมดจะถูกคืนค่าไปยังค่าเริ่มต้นทีนที\nการกระทำนี้ไม่สามารถกลับคืนได้\nคุณต้องการทำต่อหรือไม่
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/tr/noscript/about.properties b/extensions/noscript/chrome/locale/tr/noscript/about.properties
deleted file mode 100644
index 4150405..0000000
--- a/extensions/noscript/chrome/locale/tr/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Firefox'unuz için ek koruma: NoScript sadece güvendiğiniz sitelerde (örneğin bankanızın web sitesi) JavaScript, Java (ve diğer eklentiler) kullanımına izin verebilir veya yasaklayabilirsiniz. Beyaz liste tabanlı öncelikli engelleme yaklaşımı, güvenlik açıklarının yayılmasını hiçbir işlev kaybı olmadan önler (bilinen veya bilinmeyen!)… Uzmanlar Firefox'un NoScript eklentisi ile daha güvenli olduğunda hemfikir olacaklardır :-)
-aboutTitle=%S Hakkında
-extensionContributors=Emeği geçenler:
-extensionContributors.tip=Bu eklenti için teşekkür etmeniz gerekenler
-extensionCreatorLabel=Yazar:
-changelog=Değişiklikler
-changelog.tip=Değişiklikleri göster
-license=Lisans
-license.tip=Son kullanıcı lisansını oku
-logo.tip=Uzantı ana sayfasına git
-sponsor.tip=Sponsor ana sayfasına git
-informaction.tip=InformAction ana sayfasına git
-extensionHomepage.tip=Uzantı ana sayfasına git
-extensionCreator.tip=Yazarın ana sayfasına git
-version=Sürüm %S \ No newline at end of file
diff --git a/extensions/noscript/chrome/locale/tr/noscript/noscript.dtd b/extensions/noscript/chrome/locale/tr/noscript/noscript.dtd
deleted file mode 100644
index c27cdd5..0000000
--- a/extensions/noscript/chrome/locale/tr/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Seçenekler">
-<!ENTITY noscriptOptions.accesskey "S">
-<!ENTITY noscriptOptionsLong "NoScript Seçenekleri">
-<!ENTITY noscriptAbout "NoScript 5.1.8.5 @VERSION@ Hakkında">
-<!ENTITY noscriptPermissionsText "Hangi web sayfalarında JavaScript'e izni vereceğinizi kolayca seçebilirsiniz. Lütfen adresi tam olarak girin (örn. &quot;http://www.site.com&quot; veya &quot;site.com&quot;) ve 'İzin ver' düğmesine tıklayarak sayfanın JavaScript kullanmasına izin verin.">
-<!ENTITY noscriptWebAddress "Site adresi:">
-<!ENTITY noscriptAllow "İzin ver">
-<!ENTITY noscriptAllow.accesskey "z">
-<!ENTITY noscriptForbid "Engelle">
-<!ENTITY noscriptForbid.accesskey "E">
-<!ENTITY noscriptTrust "Güvenilir Olarak İşaretle">
-<!ENTITY noscriptTrust.accesskey "G">
-<!ENTITY noscriptUntrust "Güvensiz Olarak İşaretle">
-<!ENTITY noscriptUntrust.accesskey "v">
-<!ENTITY noscriptRemoveSelected "Seçili Siteleri Kaldır">
-<!ENTITY noscriptGloballyEnabled "Betiklere Tüm Siteler İçin İzin Verilir (Tehlikelidir)">
-<!ENTITY noscriptAutoReload "İzinler değişince etkilenen sayfayı otomatik olarak tazele">
-<!ENTITY noscriptGeneral "Genel">
-<!ENTITY noscriptAppearance "Görünüm">
-<!ENTITY noscriptShow "Göster…">
-<!ENTITY noscriptCtxMenu "Bağlamsal menü">
-<!ENTITY noscriptStatusIcon "Durum çubugu simgesi">
-<!ENTITY noscriptFullAddr "Tam Adresler (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Tam Alan Adları (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Temel 2. Seviye Alan Adları (noscript.net)">
-<!ENTITY noscriptTempCmd "[…] eylemine geçici olarak izin ver">
-<!ENTITY noscriptSound "Kodlar engellenince ses dosyası çal">
-<!ENTITY noscriptImport "İçe aktar">
-<!ENTITY noscriptImport.accesskey "K">
-<!ENTITY noscriptExport "Dışa aktar">
-<!ENTITY noscriptExport.accesskey "A">
-<!ENTITY noscriptNotify "Betikler engellendiğinde ileti göster">
-<!ENTITY noscriptNotify.bottom "İletiyi aşağıdaki kenarda göster">
-<!ENTITY noscriptSound.choose "Seç">
-<!ENTITY noscriptSound.choose.accesskey "S">
-<!ENTITY noscriptSound.play "Çal">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "Varsayılanları yükle">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "Gelişmiş">
-<!ENTITY noscriptAdditionalPermissions "Güvenli siteler için ek izinler">
-<!ENTITY noscriptAllowClipboard "Harici panoda zengin Kopyala ve Yapıştır işlemlerine izin ver">
-<!ENTITY noscriptAdditionalRestrictions "Güvensiz siteler için ek kısıtlamalar">
-<!ENTITY noscriptPlugins "Eklentiler">
-<!ENTITY noscriptContentBlocker "Bu sınırlamaları güvenilen sitelere de uygula">
-<!ENTITY noscriptForbidJava "Java™'yı yasakla">
-<!ENTITY noscriptForbidXSLT "XSLT'yı yasakla">
-<!ENTITY noscriptForbidSilverlight "Microsoft® Silverlight™'ı yasakla">
-<!ENTITY noscriptForbidIFrames "&lt;IFRAME&gt;'leri yasakla">
-<!ENTITY noscriptForbidFrames "&lt;FRAME&gt;'leri yasakla">
-<!ENTITY noscriptForbidFonts "Yazıtipi @font-face tanımını yasakla">
-<!ENTITY noscriptForbidMedia "&lt;AUDIO&gt; / &lt;VIDEO&gt; yasakla">
-<!ENTITY noscriptForbidFlash "Adobe® Flash®'ı yasakla">
-<!ENTITY noscriptForbidPlugins "Diğer eklentileri yasakla">
-<!ENTITY noscriptForbidWebGL "Yazıtipi WebGL tanımını yasakla">
-<!ENTITY noscriptReloadWarn "Bu ayarlar sadece yeni veya kendinizin yeniden yüklediği sayfalar için geçerlidir.">
-<!ENTITY noscriptConfirmUnblock "Bir nesne engelini geçici olarak kaldırırken onay iste">
-<!ENTITY noscriptStatusLabel "Durum çubuğu etiketi">
-<!ENTITY noscriptForbidBookmarklets "Yer imlerini yasakla">
-<!ENTITY noscriptShowPlaceholder "Yer tutucu simgelerini göster">
-<!ENTITY noscriptTruncateTitle "Belge başlığını kes">
-<!ENTITY noscriptFixLinks "JavaScript bağlantılarını düzeltmeye çalış">
-<!ENTITY noscriptAllowBookmarks "Yer imlerimde kayıtlı sitelere izin ver">
-<!ENTITY noscriptAllowViaBookmarks "Yer imlerinden açılan sitelere izin ver">
-<!ENTITY noscriptAllowPing "&lt;A PING…&gt;'e izin ver">
-<!ENTITY noscriptAllowLocalLinks "Yerel bağlantılara izin ver">
-<!ENTITY noscriptForbidPing "&lt;A PING…&gt;'i yasakla">
-<!ENTITY noscriptForbidMetaRefresh "&lt;NOSCRIPT&gt; öğeleri içindeki META yeniden yönlendirmelerini engelle">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "M">
-<!ENTITY noscriptNotifyMeta "Engellenen META yeniden yönlendirmeleri hakkında bilgilendir">
-<!ENTITY noscriptNotifyMeta.accesskey "M">
-<!ENTITY noscriptWhitelist "Beyazliste">
-<!ENTITY noscriptPermissions "İzinler">
-<!ENTITY noscriptRefresh "Tazele">
-<!ENTITY noscriptNotifications "Bildirimler">
-<!ENTITY noscriptToolbarToggle "Araç çubuğundaki NoScript düğmesine sol tıklayarak üst seviye sitenin erişim izinlerini değiştirebilirsiniz">
-<!ENTITY noscriptTrusted "Güvenilen">
-<!ENTITY noscriptUntrusted "Güvenilmeyen">
-<!ENTITY noscriptUnknown "Bilinmeyen">
-<!ENTITY noscriptAdd "Ekle">
-<!ENTITY noscriptAdd.accesskey "E">
-<!ENTITY noscriptClose "Kapat">
-<!ENTITY noscriptSiteManager "Site Yöneticisi">
-<!ENTITY noscriptSecurityManager "Güvenlik Yöneticisi">
-<!ENTITY noscriptPolicies "İlkeler">
-<!ENTITY noscriptDefaultPolicies "Varsayılan İlkeler">
-<!ENTITY noscriptSitePolicies "Siteye özel ilkeler">
-<!ENTITY noscriptNselNever "&lt;NOSCRIPT&gt; öğelerini sakla">
-<!ENTITY noscriptNselForce "&lt;SCRIPT&gt;'den sonra oluşan &lt;NOSCRIPT&gt; öğelerini göster">
-<!ENTITY noscriptAutoAllowTopLevel "Varsayılan olarak üst seviye sitelere geçici izin ver">
-<!ENTITY noscriptDescription "Firefox'unuz için ek koruma: NoScript sadece güvendiğiniz sitelerde (örneğin bankanızın web sitesi) JavaScript, Java (ve diğer eklentiler) kullanımına izin verebilir veya yasaklayabilirsiniz. Beyaz liste tabanlı öncelikli engelleme yaklaşımı, güvenlik açıklarının yayılmasını hiçbir işlev kaybı olmadan önler (bilinen veya bilinmeyen!)… Uzmanlar Firefox'un NoScript eklentisi ile daha güvenli olduğunda hemfikir olacaklardır :-)">
-<!ENTITY noscriptOptBlockCssScanners "CSS temelli tarayıcıları engelle">
-<!ENTITY noscriptOptFilterXGet "Çapraz-site şüpheli isteklerini temizle">
-<!ENTITY noscriptOptFilterXPost "Çapraz-site POST isteklerini GET'e çevir">
-<!ENTITY noscriptShowConsole "Konsolu Göster…">
-<!ENTITY noscriptShowConsole.accesskey "K">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS SSS…">
-<!ENTITY noscriptXssFaq.accesskey "S">
-<!ENTITY noscriptUnsafeReload "Güvensiz Tekrar Yükleme">
-<!ENTITY noscriptUnsafeReload.accesskey "Y">
-<!ENTITY noscriptXssExceptions "Anti-XSS Koruma Ayrıcalıkları">
-<!ENTITY noscriptXssExceptions.description "Aşağıdaki tanımlara uyan hedefler XSS&apos;e karşı KORUNMAYACAKLAR.">
-<!ENTITY noscriptMatchSample "Eşleşen desen örneği:">
-<!ENTITY noscriptReset "Sıfırla">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "Varsayılana Sıfırla">
-<!ENTITY noscriptResetDef.accesskey "v">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Geçici İzinleri Kaldır">
-<!ENTITY noscriptRevokeTemp.accesskey "K">
-<!ENTITY noscriptNoUntrustedPlaceholder "Güvensiz işaretlenen sitelerden gelen nesnelerde yer tutucuları gösterme">
-<!ENTITY noscriptCollapseBlockedObjects "Engellenen nesneleri daralt">
-<!ENTITY noscriptExceptions "Hariç tutulanlar…">
-<!ENTITY noscriptBlockedObjects "Engellenen Nesneler">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Güvensiz olarak işaretlenen sitelerden gelen tüm nesneleri engelle">
-<!ENTITY noscriptTempAllowPage "Geçici olarak bu sayfanın tümüne izin ver">
-<!ENTITY noscriptTempAllowPage.accesskey "G">
-<!ENTITY noscriptAllowPage "Bu sayfanın tümüne izin ver">
-<!ENTITY noscriptAllowPage.accesskey "z">
-<!ENTITY noscriptTempToPerm "Sayfa izinlerini kalıcı yap">
-<!ENTITY noscriptTempToPerm.accesskey "k">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS SSS...">
-<!ENTITY noscriptHttpsFaq.accesskey "S">
-<!ENTITY noscriptHttps.behavior "Davranış">
-<!ENTITY noscriptHttps.cookies "Çerezler">
-<!ENTITY noscriptHttps.description "Etkin web içeriği, güvenli bağlantı üzerinden gelmezse (HTTPS) engelle:">
-<!ENTITY noscriptHttps.never "Asla">
-<!ENTITY noscriptHttps.proxy "Vekil sunucu kullanırken (Tor kullanırken tavsiye edilir)">
-<!ENTITY noscriptHttps.always "Her zaman">
-<!ENTITY noscriptHttpsForced "Bu siteleri güvenli bağlantı kullanmaya zorla (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Bu siteleri güvenli bağlantı (HTTPS) kullanmaya asla zorlama:">
-<!ENTITY noscriptSecureCookies "Otomatik Güvenli Çerez Yönetimini etkinleştir">
-<!ENTITY noscriptSecureCookiesForced "Bu sitelerin HTTPS üzerinden gönderilen çerezlerinin şifrelenmesini zorla:">
-<!ENTITY noscriptSecureCookiesExceptions "HTTPS üzerinden gönderilen güvensiz çerezleri bu siteler için yoksay:">
-<!ENTITY noscriptClearClickTitle "TemizTıklama Uyarısı">
-<!ENTITY noscriptClearClickHeader "Muhtemel Tıklama Hilesi/Yeniden Adresleme Denemesi">
-<!ENTITY noscriptClearClickDescription "NoScript kısmen gizlenmiş bir öğe ile fare veya klavyenin etkileşimini engelledi. Engellenmiş ve temiz sürüm arasında geçiş yapmak için üstteki resme tıklayın.">
-<!ENTITY noscriptClearClickOpt "Sayfalarda TemizTıklama koruması yap…">
-<!ENTITY noscriptClearClickReport "Bildir">
-<!ENTITY noscriptClearClickReport.accesskey "B">
-<!ENTITY noscriptClearClickReportId "Bildiri Kimliği:">
-<!ENTITY noscriptTrustedPagesAdj "güvenilenlerde">
-<!ENTITY noscriptUntrustedPagesAdj "güvenilmeyenlerde">
-<!ENTITY noscriptKeepLocked "Bu öğeyi kilitli olarak bırak (tavsiye edilir)">
-<!ENTITY noscriptEmbeddings "Gömülü Nesneler">
-<!ENTITY noscriptPrev "Önceki">
-<!ENTITY noscriptNext "Sonraki">
-<!ENTITY noscriptFrameOptErr.title "Bu içerik bir çerçeve içerisinde gösterilemez">
-<!ENTITY noscriptFrameOptErr.desc "Güvenliğinizi korumak için, bu içeriğin sağlayıcısı bir çerçeve içerisinde gösterilmesine izin vermiyor.">
-<!ENTITY noscriptFrameOptErr.link "İçeriği yeni bir pencere içerisinde açmak için buraya tıklayın">
-<!ENTITY noscriptBookmarkSync "NoScript yapılandırmasını kolay eşitleme için yer imlerine yedekle">
-<!ENTITY noscriptShowReleaseNotes "Güncelleme olduğunda sürüm notlarını görüntüle">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Kural Kümeleri:">
-<!ENTITY ABE.enabled.label "ABE (Uygulama Sınır Zorlayıcı) Etkinleştir">
-<!ENTITY ABE.siteEnabled.label "Sitelerin kendi kural kümelerini kullanmasına izin ver">
-<!ENTITY ABE.edit.label "Düzenle…">
-<!ENTITY ABE.edit.accesskey "D">
-<!ENTITY ABE.enable.label "Etkinleştir">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Devre Dışı Bırak">
-<!ENTITY ABE.disable.accesskey "E">
-<!ENTITY ABE.refresh.label "Yenile">
-<!ENTITY ABE.refresh.accesskey "Y">
-<!ENTITY noscriptUninstall "Kaldır">
-<!ENTITY noscriptRecentBlocked "Yakın zamanda engellenen siteler">
-<!ENTITY noscriptExternalFilters "Harici Süzgeçler">
-<!ENTITY noscriptEF.enable "Harici süzgeçleri etkinleştir">
-<!ENTITY noscriptEF.add "Yeni Süzgeç…">
-<!ENTITY noscriptEF.executable "Uygulama dosyası:">
-<!ENTITY noscriptEF.browse "Gözat...">
-<!ENTITY noscriptEF.contentType "Süzülecek içerik türü (MIME) (tam metin veya düzenli ifade):">
-<!ENTITY noscriptEF.exceptions "Bu sitelerden gelen nesneleri süzme:">
-<!ENTITY noscriptEF.remove "Kaldır">
-<!ENTITY noscriptPreset "Güvenlik Seviyesi">
-<!ENTITY noscriptPreset.off "Kapalı (ciddi misiniz?!)">
-<!ENTITY noscriptPreset.low "Kolay kullanım (Karaliste + Web Güvenliği)">
-<!ENTITY noscriptPreset.medium "Klasik (Beyazliste + Web Güvenliği)">
-<!ENTITY noscriptPreset.high "Kale (Tamamen kilitle)">
-<!ENTITY noscript.hoverUI "Fare ile NoScript simgesi üzerine gidince izinler listesini aç">
-<!ENTITY noscriptDonate "Bağış Yap">
-<!ENTITY noscriptDonate.accesskey "B">
-<!ENTITY noscriptAutoReload.currentTab "Sadece geçerli sekmeyi yeniden yükle">
-<!ENTITY noscriptCascadePermissions "Üst belge izinlerini 3. parti betiklere de indir">
-<!ENTITY noscriptRestrictSubdocScripting "Beyaz listede olmayan sayfaların, beyaz listedeki alt sayfalarında bulunan betikleri engelle">
-<!ENTITY noscriptGlobalHttpsWhitelist "HTTPS belgelerinde HTTPS betiklerine genel olarak izin ver">
-<!ENTITY noscriptPermanentInPrivate "Özel pencerelerdeki komutlara kalıcı olarak &quot;İzin Ver&quot;">
-<!ENTITY noscriptCustom "Custom">
diff --git a/extensions/noscript/chrome/locale/tr/noscript/noscript.properties b/extensions/noscript/chrome/locale/tr/noscript/noscript.properties
deleted file mode 100644
index ab88a07..0000000
--- a/extensions/noscript/chrome/locale/tr/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Betiklere Tüm Sitelerde İzin Ver (tehlikeli)
-forbidGlobal=Betikleri Tüm Sitelerde Yasakla (tavsiye edilen)
-allowLocal=%S adresine izin ver
-allowTemp=%S adresine geçici izin ver
-forbidLocal=%S adresini yasakla
-allowed.glb=Dikkat! Betiklere Tüm Sitelerde İzin Veriliyor
-allowed.yes=Betiklere Şu An İzin Veriliyor
-allowed.prt=Betiklere Şu An Kısmen İzin Veriliyor
-allowed.no=Betikler Şu An Yasaklı
-global.warning.title=Uyarı!
-global.warning.text=Betiklere genel olarak izin verilecek (her site için).\n Bu muhtemel tehlikeli bir eylemdir.\nDevam etmek istediğinizden emin misiniz?
-audio.samples=Ses örnekleri
-confirm=Emin misiniz?
-alwaysAsk=Her zaman onay iste
-notifyHide=%S saniye sonra gizle
-trust=%S adresine güven
-distrust=%S adresine güvenme
-untrustedOrigin=güvensiz bir kaynak
-xss.notify.generic=NoScript, %S adresinden olan potansiyel bir çapraz-site betiğini (XSS) filtreledi. Teknik detaylar Konsola kaydedildi.
-xss.notify.showConsole=Konsolu Göster…
-xss.notify.showConsole.accessKey=K
-xss.reason.filterXGet=Şüpheli istek temizlendi. Özgün URL [%1$S], [%2$S] sayfasından istendi. Temizlenen URL: [%3$S].
-xss.reason.filterXGetRef=Şüpheli yönlendirici isteği temizlendi. URL [%1$S], [%2$S] sayfasından istendi. Temizlenen Referrer: [%3$S].)
-xss.reason.filterXPost=[%2$S] adresinden [%1$S] üzerine şüpheli yükleme temizlendi: sadece-indir GET isteğine çevrildi.
-unsafeReload.warning=GÜVENSİZ yeniden yükleme\n\n%1$S [%2$S]\n\nKAYNAK [%3$S]\n\nNoScript bu isteği KORUMAYACAK!\n
-metaRefresh.notify=NoScript <NOSCRIPT> içindeki bir <META> yeniden yönlendirmesini engelledi: %S için son %S saniye.
-metaRefresh.notify.follow=Yeniden Yönlendirmeleri Takip Et
-metaRefresh.notify.follow.accessKey=Y
-notify.options=Seçenekler
-notify.options.accessKey=s
-reset.title=NoScript Sıfırla
-reset.warning=Tüm NoScript ayarları ve site izinleri varsayılan değerlerine alınacaktır.\nBu işlem geri alınamaz.\nDevam etmek istediğinize emin misiniz?
-bookmarkSync.title=NoScript Ayar Yer İmi
-bookmarkSync.message=Bu Yer İminin açılması gerekli DEĞİLDİR, fakat Weave veya XMarks uzantıları gibi hizmetler kullanarak eşitlemek içindir.
-bookmarkSync.confirm=NoScript %S tarihinde kaydedilen bir ayar yerimi buldu.\nYerel NoScript ayarınızın üzerine bu dosyayı yazmak istediğinize emin misiniz?
-ABE.notify=%1$S isteği ABE tarafından filtrelendi: <%2$S> %3$S
-ABE.chooseEditor=Lütfen ABE kural kümeleri için bir metin düzenleyici seçin
-ABE.syntaxError=ABE kural kümelerinde sözdizimi hatası var!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Şuradan gelen her şeye izin ver: %S
-allowTempFrom=Şuradan gelen her şeye geçici izin ver: %S
-siteInfo.confirm=%2$S sorgusunu yaparak \n"%1$S" sitesi hakkında bilgi istemek üzeresiniz.\nDevam etmek istiyor musunuz?
-siteInfo.tooltip=Site hakkında bilgi almak için orta tuş ile tıklayın veya Üst Karakter tuşu ile tıklayın
-ef.activate=Süz: %S
-ef.options=%S seçenekleri…
-ef.newName=Yeni süzgeç adını girin:
-ef.locateExe=%S süzgeci için yürütülebilir dosyayı seçin
-disable=%S Devre Dışı Bırak
-disable.accessKey=K
-allowed.glb-emb=Betiklere Genel Olarak İzin Veriliyor ancak Bazı Gömülü Nesneler Engelli
-removal.title=Güvenlik Düşürme Uyarısı
-removal.message=NoScript'i devre dışı bırakarak veya kaldırarak, NoScript tarafından sağlanan TÜM korumalardan vazgeçiyorsunuz.\n\nHer site için betik izinlerini ayarlamaktan yorulduysanız, daha güvenli bir seçenek var.\n\nNoScript hala güvenilmez olarak işaretlediğiniz betikleri engellerken, en gelişmiş güvenlik önlemleri ile sizi XSS, Tıklama Hilesi (Clickjacking), CSRF ve diğer web tehditlerine karşı koruyabilir.\n\nGerçekten tüm NoScript korumalarını kaldırmak istiyor musunuz?\n
-removal.no=Hayır, sadece betikleri engellemeyi durdur
-removal.yes=Evet, TÜM korumaları kaldır
-incompatibleOptions.title=Uyumsuz Seçenek Uyarısı
-incompatibleOptions="%1$S"\n seçeneği "%2$S" ile uyumsuz.\bİlkini etkinleştirip ikinciyi devre dışı bırakmak ister misiniz? \ No newline at end of file
diff --git a/extensions/noscript/chrome/locale/uk/noscript/about.properties b/extensions/noscript/chrome/locale/uk/noscript/about.properties
deleted file mode 100644
index bf56f7c..0000000
--- a/extensions/noscript/chrome/locale/uk/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Додатковий захист для вашого Firefox: NoScript дозволяє JavaScript, Java (та інші модулі) лише на довірених сайтах по вашому вибору. (Скажімо, сайт вашого банка). Такий превентивний підхід «білого списку» дозволяє вберегтись від усіх вразливостей (відомих та навіть невідомих!) без втрати функціональності. Знавці погодяться: Firefox з додатком NoScript дійсно безпечніший :-)
-aboutTitle=Про розширення %S
-extensionContributors=Учасники:
-extensionContributors.tip=Люді які допомагали вдосконалювати розширення
-extensionCreatorLabel=Автор:
-changelog=Історія версій
-changelog.tip=Подивитися історію версій NoScript
-license=Ліцензійна угода
-license.tip=Ліцензійна угода кінцевого користувача
-logo.tip=Відкрити домашню сторінку розширення
-sponsor.tip=Відкрити домашню сторінку спонсора
-informaction.tip=Відкрити домашню сторінку InformAction
-extensionHomepage.tip=Відкрити домашню сторінку розширення
-extensionCreator.tip=Відкрити домашню сторінку автора
-version=Версія %S
diff --git a/extensions/noscript/chrome/locale/uk/noscript/noscript.dtd b/extensions/noscript/chrome/locale/uk/noscript/noscript.dtd
deleted file mode 100644
index 8872813..0000000
--- a/extensions/noscript/chrome/locale/uk/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Налаштування…">
-<!ENTITY noscriptOptions.accesskey "ш">
-<!ENTITY noscriptOptionsLong "Налаштування NoScript">
-<!ENTITY noscriptAbout "Про розширення…">
-<!ENTITY noscriptPermissionsText "Ви можете встановити яким web-сайтам дозволено виконувати JavaScript. Введіть адресу або домен (напр. &quot;http://www.site.com&quot; або &quot;site.com&quot;) сайта якому ви бажаєте дозволити виконувати JavaScript і потім натисніть Дозволити.">
-<!ENTITY noscriptWebAddress "Адреса web-сайта:">
-<!ENTITY noscriptAllow "Дозволити">
-<!ENTITY noscriptAllow.accesskey "о">
-<!ENTITY noscriptForbid "Заборонити">
-<!ENTITY noscriptForbid.accesskey "б">
-<!ENTITY noscriptTrust "Помітити як «довірений»">
-<!ENTITY noscriptTrust.accesskey "в">
-<!ENTITY noscriptUntrust "Помітити як «не довірений»">
-<!ENTITY noscriptUntrust.accesskey "е">
-<!ENTITY noscriptRemoveSelected "Вилучити вибрані сайти">
-<!ENTITY noscriptGloballyEnabled "JavaScript повністю дозволений (небезпечно)">
-<!ENTITY noscriptAutoReload "Автоматично оновлювати сторінку після зміни для неї правил">
-<!ENTITY noscriptGeneral "Основні">
-<!ENTITY noscriptAppearance "Зовнішній вигляд">
-<!ENTITY noscriptShow "Показувати…">
-<!ENTITY noscriptCtxMenu "Контекстне меню">
-<!ENTITY noscriptStatusIcon "Іконку в рядку статусу">
-<!ENTITY noscriptFullAddr "Повні адреси (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Повні домени (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Базові домени другого рівня (noscript.net)">
-<!ENTITY noscriptTempCmd "Тимчасово дозволити […]">
-<!ENTITY noscriptSound "Програти аудіо-файл якщо заблокований скрипт">
-<!ENTITY noscriptImport "Імпорт">
-<!ENTITY noscriptImport.accesskey "м">
-<!ENTITY noscriptExport "Експорт">
-<!ENTITY noscriptExport.accesskey "к">
-<!ENTITY noscriptNotify "Показувати повідомлення про заблоковані скрипти">
-<!ENTITY noscriptNotify.bottom "Розташувати повідомлення знизу">
-<!ENTITY noscriptSound.choose "Вибрати">
-<!ENTITY noscriptSound.choose.accesskey "б">
-<!ENTITY noscriptSound.play "Тест">
-<!ENTITY noscriptSound.play.accesskey "с">
-<!ENTITY noscriptSound.reset "Скинути">
-<!ENTITY noscriptSound.reset.accesskey "н">
-<!ENTITY noscriptAdvanced "Додатково">
-<!ENTITY noscriptAdditionalPermissions "Додаткові права для довірених сайтів">
-<!ENTITY noscriptAllowClipboard "Дозволити розширене копіювання/вставку із зовнішнього буфера обміну">
-<!ENTITY noscriptAdditionalRestrictions "Додаткові обмеження для ненадійних сайтів">
-<!ENTITY noscriptPlugins "Модулі">
-<!ENTITY noscriptContentBlocker "Застосовувати ці обмеження і до довірених сайтів">
-<!ENTITY noscriptForbidJava "Заборонити Java™">
-<!ENTITY noscriptForbidXSLT "Заборонити XSLT">
-<!ENTITY noscriptForbidWebGL "Заборонити WebGL">
-<!ENTITY noscriptForbidSilverlight "Заборонити Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Заборонити &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Заборонити &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "Заборонити @font-face">
-<!ENTITY noscriptForbidMedia "Заборонити &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Заборонити Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "Заборонити інші модулі">
-<!ENTITY noscriptReloadWarn "Налаштування вступлять у силу на новій сторінці або після оновлення (вручну)">
-<!ENTITY noscriptConfirmUnblock "Питати підтвердження перед тимчасовим розблокуванням об’єкту">
-<!ENTITY noscriptStatusLabel "Повідомлення в рядку статусу">
-<!ENTITY noscriptForbidBookmarklets "Заборонити Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Показати розташування іконки">
-<!ENTITY noscriptTruncateTitle "Відсікати заголовки документів">
-<!ENTITY noscriptFixLinks "Пробувати виправляти посилання JavaScript">
-<!ENTITY noscriptAllowBookmarks "Дозволяти всім сайтам знайденим в закладках">
-<!ENTITY noscriptAllowViaBookmarks "Дозволити сайти, відкриті через закладки">
-<!ENTITY noscriptAllowPing "Дозволити &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "Дозволити локальні посилання">
-<!ENTITY noscriptForbidPing "Заборонити &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Заборонити перенаправлення META в елементах &lt;noscript&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "M">
-<!ENTITY noscriptWhitelist "Білий список">
-<!ENTITY noscriptPermissions "Дозволи">
-<!ENTITY noscriptRefresh "Оновлення">
-<!ENTITY noscriptNotifications "Сповіщення">
-<!ENTITY noscriptToolbarToggle "Клацання лівою клавішею мишки по кнопці NoScript перемикає дозволи для поточного сайту верхнього рівня">
-<!ENTITY noscriptTrusted "Довірені">
-<!ENTITY noscriptUntrusted "Недовірені">
-<!ENTITY noscriptUnknown "Невідомий">
-<!ENTITY noscriptAdd "Додати">
-<!ENTITY noscriptAdd.accesskey "о">
-<!ENTITY noscriptClose "Закрити">
-<!ENTITY noscriptSiteManager "Менеджер Сайтів">
-<!ENTITY noscriptSecurityManager "Менеджер Безпеки">
-<!ENTITY noscriptPolicies "Вподобання">
-<!ENTITY noscriptDefaultPolicies "Типові вподобання">
-<!ENTITY noscriptSitePolicies "Вподобання по окремих сайтах">
-<!ENTITY noscriptNselNever "Приховати елементи &lt;noscript&gt;">
-<!ENTITY noscriptNselForce "Показати елементи &lt;noscript&gt; при заблокованому &lt;SCRIPT&gt;">
-<!ENTITY noscriptAutoAllowTopLevel "Тимчасово дозволити за умовчанням сайти верхнього рівня">
-<!ENTITY noscriptDescription "Додатковий захист для вашого Firefox: NoScript дозволяє JavaScript, Java (та інші модулі) лише на довірених сайтах по вашому вибору. (Скажімо, сайт вашого банка). Такий превентивний підхід «білого списку» дозволяє вберегтись від усіх вразливостей (відомих та навіть невідомих!) без втрати функціональності… Знавці погодяться: Firefox з додатком NoScript дійсно безпечніший :-)">
-<!ENTITY noscriptOptBlockCssScanners "Блокувати основані на CSS сканери">
-<!ENTITY noscriptOptFilterXGet "Вичищати підозрілі міжсайтові запити">
-<!ENTITY noscriptOptFilterXPost "Перетворювати міжсайтові POST запити у GET запити без даних">
-<!ENTITY noscriptShowConsole "Показати Консоль…">
-<!ENTITY noscriptShowConsole.accesskey "К">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS FAQ...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "Небезпечне перезавантаження">
-<!ENTITY noscriptUnsafeReload.accesskey "п">
-<!ENTITY noscriptXssExceptions "Винятки у захисті від XSS">
-<!ENTITY noscriptXssExceptions.description "Місця що підходять під ці регулярні вирази НЕ будуть захищені від XSS">
-<!ENTITY noscriptMatchSample "Зразок відповідності шаблону:">
-<!ENTITY noscriptReset "Відновити">
-<!ENTITY noscriptReset.accesskey "в">
-<!ENTITY noscriptResetDef "Відновити до початкових налаштувань">
-<!ENTITY noscriptResetDef.accesskey "н">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Відкликати тимчасові дозволи">
-<!ENTITY noscriptRevokeTemp.accesskey "т">
-<!ENTITY noscriptNoUntrustedPlaceholder "Не показувати замінник для тих об’єктів що походять з недовірених сайтів.">
-<!ENTITY noscriptCollapseBlockedObjects "Приховувати заблоковані об’єкти">
-<!ENTITY noscriptExceptions "Винятки…">
-<!ENTITY noscriptBlockedObjects "Заблоковані об’єкти">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Блокувати кожен об’єкт що походить з недовірених сайтів">
-<!ENTITY noscriptTempAllowPage "Тимчасово дозволити всю цю сторінку">
-<!ENTITY noscriptTempAllowPage.accesskey "Т">
-<!ENTITY noscriptAllowPage "Дозволити всю цю сторінку">
-<!ENTITY noscriptAllowPage.accesskey "Д">
-<!ENTITY noscriptTempToPerm "Зробити зміни постійними">
-<!ENTITY noscriptTempToPerm.accesskey "п">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS FAQ…">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "Поведінка">
-<!ENTITY noscriptHttps.cookies "Куки">
-<!ENTITY noscriptHttps.description "Заборонити активний веб-зміст якщо він походить не з безпечного з’єднання (HTTPS):">
-<!ENTITY noscriptHttps.never "Ніколи">
-<!ENTITY noscriptHttps.proxy "Коли використовується проксі (рекомендовано з Tor)">
-<!ENTITY noscriptHttps.always "Завжди">
-<!ENTITY noscriptHttpsForced "Нав’язувати наступни сайтам безпечне з’єднання (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Ніколи не нав’язувати безпечне з’єднання (HTTPS) на наступних сайтах:">
-<!ENTITY noscriptSecureCookies "Дозволити автоматичне безпечне керування куками">
-<!ENTITY noscriptSecureCookiesForced "Примусити шифрувати всі куки, що ставляться через HTTPS з наступних сайтів:">
-<!ENTITY noscriptSecureCookiesExceptions "Ігнорувати небезпечні куки поставлені через HTTPS з наступних сайтів:">
-<!ENTITY noscriptClearClickTitle "Попередження ClearClick">
-<!ENTITY noscriptClearClickHeader "Потенційна спроба кражі клацань (clickjacking) /підміни інтерфейсу!">
-<!ENTITY noscriptClearClickDescription "NoScript перехопив взаємодію мишки чи клавіатури з частково прихованим елементом. Клацніть на малюнку зверху для перемикання між заслоненою та чистою версіями.">
-<!ENTITY noscriptClearClickOpt "Захист сторінок ClearClick…">
-<!ENTITY noscriptClearClickReport "Report">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "Report ID:">
-<!ENTITY noscriptTrustedPagesAdj "довірені">
-<!ENTITY noscriptUntrustedPagesAdj "недовірені">
-<!ENTITY noscriptKeepLocked "Продовжувати блокувати цей об’єкт (рекомендовано)">
-<!ENTITY noscriptEmbeddings "Вбудовані об’єкти">
-<!ENTITY noscriptPrev "Попереднє">
-<!ENTITY noscriptNext "Наступне">
-<!ENTITY noscriptFrameOptErr.title "This content cannot be displayed in a frame">
-<!ENTITY noscriptFrameOptErr.desc "To protect your security, the publisher of this content does not allow it to be displayed in a frame.">
-<!ENTITY noscriptFrameOptErr.link "Click here to open this content in a new window">
-<!ENTITY noscriptBookmarkSync "Backup NoScript configuration in a bookmark for easy synchronization">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptNotifyMeta "Show message about blocked META redirections">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptShowReleaseNotes "Display the release notes on updates">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Rulesets:">
-<!ENTITY ABE.enabled.label "Enable ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "Allow sites to push their own rulesets">
-<!ENTITY ABE.edit.label "Edit…">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "Enable">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "Disable">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "Refresh">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "Uninstall">
-<!ENTITY noscriptRecentBlocked "Recently blocked sites">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/uk/noscript/noscript.properties b/extensions/noscript/chrome/locale/uk/noscript/noscript.properties
deleted file mode 100644
index b6a5af8..0000000
--- a/extensions/noscript/chrome/locale/uk/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Дозволити JavaScript повністю (небезпечно)
-forbidGlobal=Заборонити JavaScript повністю (рекомендується)
-allowLocal=Дозволити %S
-allowTemp=Тимчасово дозволити %S
-forbidLocal=Заборонити %S
-allowed.glb=Небезпека! JavaScript повністю дозволений
-allowed.yes=В даний час JavaScript дозволений
-allowed.prt=JavaScript частково дозволений
-allowed.no=В даний час JavaScript заборонений
-global.warning.title=Увага!
-global.warning.text=JavaScript буде повністю дозволений (для всіх сайтів).\n Це потенційно небезпечна дія.\nВи дійсно бажаєте продовжити?
-audio.samples=Зразки аудіо
-confirm=Ви впевнені?
-alwaysAsk=Завжди питати підтвердження
-notifyHide=Приховувати після %S секунд
-trust=Довіряти %S
-distrust=Позначити %S як недовірений
-untrustedOrigin=недовірене походження
-xss.notify.generic=NoScript відфільтрував потенційну міжсайтову атаку (XSS) з %S. Технічні подробиці занесено в Консоль.
-xss.notify.showConsole=Показати Консоль…
-xss.notify.showConsole.accessKey=К
-xss.reason.filterXGet=Вичищено підозрілий запит. Початковий URL [%1$S] запитано з [%2$S]. Вичищений URL: [%3$S].
-xss.reason.filterXGetRef=Вичищено підозрілий реферер. URL [%1$S] запитано з [%2$S]. Підозрілий реферер: [%3$S].
-xss.reason.filterXPost=Вичищно підозріле відвінтаження на [%1$S] з [%2$S]: трансформовано в суто завантажувальний запит GET.
-unsafeReload.warning=НЕБЕЗПЕЧНЕ перезавантаження\n\n%1$S [%2$S]\n\nЗ [%3$S]\n\nNoScript НЕ захистить цей запит!\n
-metaRefresh.notify=NoScript заблокував <META> перенаправлення поставлене в середині елемента <NOSCRIPT>: %S через %S секунд.
-metaRefresh.notify.follow=Слідувати за перенаправленням
-metaRefresh.notify.follow.accessKey=С
-notify.options=Налаштування
-notify.options.accessKey=Н
-reset.title=Скинути NoScript
-reset.warning=ВСІ налаштування NoScript та переліки дозволів будуть негайно скинуті на початкові значення.\nЦю дію не можна буде повернути.\nХочете продовжити?
-bookmarkSync.title=NoScript Configuration Bookmark
-bookmarkSync.message=This bookmark is NOT meant to be opened, but to be synchronized using a service such as Weave or the XMarks extension.
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-bookmarkSync.confirm=NoScript has found a configuration bookmark seemingly saved on\n%S.\nDo you really want to overwrite your local NoScript configuration with this bookmark's content?
-ABE.notify=Request %1$S filtered by ABE: <%2$S> %3$S
-ABE.chooseEditor=Please choose a text editor for ABE rulesets
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=Allow all from %S
-allowTempFrom=Temporarily allow all from %S
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/vi/noscript/about.properties b/extensions/noscript/chrome/locale/vi/noscript/about.properties
deleted file mode 100644
index 4a0f1b1..0000000
--- a/extensions/noscript/chrome/locale/vi/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=Thêm sự bảo vệ cho Firefox của bạn: NoScript chỉ cho phép JavaScript, Java (và các plugins khác) được chạy trên những tên miền đáng tin mà bạn chọn (v.d., trang web ngân hàng của bạn). Hướng đi ngăn chặn trước dựa trên sổ trắng này ngăn chặn việc khai thác lổ hỏng bảo mật (biết trước và ngay cả chưa biết!) mà không mất đi tính năng... Các chuyên gia sẽ đồng ý rằng: Firefox thật sự an toàn hơn với NoScript :-)
-aboutTitle=Thông tin về %S
-extensionContributors=Những người đóng góp:
-extensionContributors.tip=Những người mà bạn nên cám ơn vì sự đóng góp cho phần mở rộng này:
-extensionCreatorLabel=Tác giả:
-changelog=Lưu kí thay đổi
-changelog.tip=Hiển thị lưu kí thay đổi
-license=Giấy phép
-license.tip=Đọc giấy phép người dùng cuối
-logo.tip=Thăm trang nhà của phần mở rộng này
-sponsor.tip=Thăm trang chủ nhà tài trợ
-informaction.tip=Thăm trang chủ của InformAction
-extensionHomepage.tip=Thăm trang chủ của phần mở rộng này
-extensionCreator.tip=Thăm trang chủ của tác giả
-version=Phiên bản %S
diff --git a/extensions/noscript/chrome/locale/vi/noscript/noscript.dtd b/extensions/noscript/chrome/locale/vi/noscript/noscript.dtd
deleted file mode 100644
index 51d10e8..0000000
--- a/extensions/noscript/chrome/locale/vi/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "Tùy chọn">
-<!ENTITY noscriptOptions.accesskey "y">
-<!ENTITY noscriptOptionsLong "Tùy chọn cho NoScript">
-<!ENTITY noscriptAbout "Thông tin về NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "Bạn có thể chỉ định trang web nào được phép chạy script. Gõ địa chỉ hay tên miền (v.d. &quot;http://www.nhaccodien.com&quot; hay &quot;nhaccodien.com&quot;) của trang mà bạn muốn cho phép, rồi nhấn Cho phép.">
-<!ENTITY noscriptWebAddress "Địa chỉ của trang web:">
-<!ENTITY noscriptAllow "Cho phép">
-<!ENTITY noscriptAllow.accesskey "C">
-<!ENTITY noscriptForbid "Ngăn cấm">
-<!ENTITY noscriptForbid.accesskey "N">
-<!ENTITY noscriptTrust "Đánh dấu Tin cậy">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "Đánh dấu Không tin cậy">
-<!ENTITY noscriptUntrust.accesskey "K">
-<!ENTITY noscriptRemoveSelected "Xóa Trang Đã Chọn">
-<!ENTITY noscriptGloballyEnabled "Script Được Cho Phép Ở Mọi Trang (nguy hiểm)">
-<!ENTITY noscriptAutoReload "Tự động tải lại trang bị ảnh hưởng khi quyền hạn thay đổi">
-<!ENTITY noscriptGeneral "Tổng quát">
-<!ENTITY noscriptAppearance "Giao diện">
-<!ENTITY noscriptShow "Hiển thị...">
-<!ENTITY noscriptCtxMenu "Trình đơn ngữ cảnh">
-<!ENTITY noscriptStatusIcon "Biểu tượng trong thanh trạng thái">
-<!ENTITY noscriptFullAddr "Địa chỉ đầy đủ (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "Tên miền đầy đủ (www.noscript.net)">
-<!ENTITY noscriptBaseDom "Tên miền cấp hai (noscript.net)">
-<!ENTITY noscriptTempCmd "Tạm thời cho phép [...]">
-<!ENTITY noscriptSound "Âm thanh cho biết khi script bị chặn">
-<!ENTITY noscriptImport "Nhập">
-<!ENTITY noscriptImport.accesskey "N">
-<!ENTITY noscriptExport "Xuất">
-<!ENTITY noscriptExport.accesskey "X">
-<!ENTITY noscriptNotify "Hiện thông tin về script bị chặn">
-<!ENTITY noscriptNotify.bottom "Đặt thông tin ở bên dưới">
-<!ENTITY noscriptSound.choose "Chọn">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "Nghe">
-<!ENTITY noscriptSound.play.accesskey "e">
-<!ENTITY noscriptSound.reset "Đưa về mặc định">
-<!ENTITY noscriptSound.reset.accesskey "v">
-<!ENTITY noscriptAdvanced "Nâng cao">
-<!ENTITY noscriptAdditionalPermissions "Quyền hạn bổ sung cho các trang tin cậy">
-<!ENTITY noscriptAllowClipboard "Cho phép chép và dán văn bản đa dạng từ clipboard bên ngoài">
-<!ENTITY noscriptAdditionalRestrictions "Những hạn chế bổ sung cho các trang không tin cậy">
-<!ENTITY noscriptPlugins "Plugins">
-<!ENTITY noscriptContentBlocker "Đồng thời áp dụng những hạn chế này cho các trang tin cậy">
-<!ENTITY noscriptForbidJava "Cấm Java™">
-<!ENTITY noscriptForbidXSLT "Cấm XSLT">
-<!ENTITY noscriptForbidSilverlight "Cấm Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "Cấm &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "Cấm &lt;FRAMES&gt;">
-<!ENTITY noscriptForbidFonts "Cấm @font-face">
-<!ENTITY noscriptForbidWebGL "Cấm WebGL">
-<!ENTITY noscriptForbidMedia "Cấm &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "Cấm Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "Cấm các plugins khác">
-<!ENTITY noscriptReloadWarn "Những tùy chọn này sẽ có hiệu quả trong trang mới hay trang được tải lại">
-<!ENTITY noscriptConfirmUnblock "Hỏi xác nhận trước khi tạm thời không chặn một đối tượng">
-<!ENTITY noscriptStatusLabel "Nhãn cho thanh trạng thái">
-<!ENTITY noscriptForbidBookmarklets "Cấm bookmarklets">
-<!ENTITY noscriptShowPlaceholder "Hiển thị biểu tượng giữ chỗ">
-<!ENTITY noscriptTruncateTitle "Cắt ngắn tựa đề của tài liệu">
-<!ENTITY noscriptFixLinks "Cố gắng sửa liên kết JavaScript">
-<!ENTITY noscriptAllowBookmarks "Cho phép các trang được mở qua Đánh dấu">
-<!ENTITY noscriptAllowViaBookmarks "Cho phép các trang được mở qua Đánh dấu">
-<!ENTITY noscriptAllowPing "Cho phép &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "Cho phép các liên kết nội tại">
-<!ENTITY noscriptForbidPing "Cấm &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "Cấm đổi hướng bằng META trong các phần tử &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "M">
-<!ENTITY noscriptNotifyMeta "Hiện thông báo về các chuyển hướng META bị chặn">
-<!ENTITY noscriptNotifyMeta.accesskey "y">
-<!ENTITY noscriptWhitelist "Sổ trắng">
-<!ENTITY noscriptPermissions "Quyền hạn">
-<!ENTITY noscriptRefresh "Tải lại">
-<!ENTITY noscriptNotifications "Khai báo">
-<!ENTITY noscriptToolbarToggle "Nhấn chuột trái vào nút NoScript trên thanh công cụ để tắt/mở quyền hạn cho trang miền cấp một hiện tại">
-<!ENTITY noscriptTrusted "Tin cậy">
-<!ENTITY noscriptUntrusted "Không tin cậy">
-<!ENTITY noscriptUnknown "Không biết">
-<!ENTITY noscriptAdd "Thêm">
-<!ENTITY noscriptAdd.accesskey "T">
-<!ENTITY noscriptClose "Đóng">
-<!ENTITY noscriptSiteManager "Quản lí Trang">
-<!ENTITY noscriptSecurityManager "Quản lí Bảo mật">
-<!ENTITY noscriptPolicies "Chính sách">
-<!ENTITY noscriptDefaultPolicies "Chính sách Mặc định">
-<!ENTITY noscriptSitePolicies "Chính sách Cho trang Riêng biệt">
-<!ENTITY noscriptNselNever "Ẩn các phần tử &lt;NOSCRIPT&gt;">
-<!ENTITY noscriptNselForce "Hiển thị phần tử &lt;noscript&gt; đi sau một phần tử &lt;SCRIPT&gt; bị chặn">
-<!ENTITY noscriptAutoAllowTopLevel "Tạm thời cho phép trang miền cấp một theo mặc định">
-<!ENTITY noscriptDescription "Thêm sự bảo vệ cho Firefox của bạn: NoScript chỉ cho phép JavaScript, Java (và các plugins khác) được chạy trên những tên miền đáng tin mà bạn chọn (v.d., trang web ngân hàng của bạn). Hướng đi chặn trước dựa trên sổ trắng này ngăn chặn việc khai thác lổ hỏng bảo mật (biết trước và ngay cả chưa biết!) mà không mất đi tính năng... Các chuyên gia sẽ đồng ý rằng: Firefox thật sự an toàn hơn với NoScript :-)">
-<!ENTITY noscriptOptBlockCssScanners "Chặn các trình quét dựa trên CSS">
-<!ENTITY noscriptOptFilterXGet "Làm sạch các yêu cầu cross-site đáng ngờ">
-<!ENTITY noscriptOptFilterXPost "Đổi các yêu cầu dạng POST cross-site sang yêu cầu dạng GET">
-<!ENTITY noscriptShowConsole "Hiển thị Bảng kiểm soát...">
-<!ENTITY noscriptShowConsole.accesskey "H">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS Câu Hỏi Thường Gặp...">
-<!ENTITY noscriptXssFaq.accesskey "C">
-<!ENTITY noscriptUnsafeReload "Tải Lại Không An Toàn">
-<!ENTITY noscriptUnsafeReload.accesskey "L">
-<!ENTITY noscriptXssExceptions "Các Ngoại Lệ Phòng Ngừa Anti-XSS">
-<!ENTITY noscriptXssExceptions.description "Đích đến phù hợp với các biểu thức quy tắc này sẽ KHÔNG được bảo vệ tránh khỏi XSS.">
-<!ENTITY noscriptMatchSample "Mẫu phù hợp:">
-<!ENTITY noscriptReset "Hoàn lại">
-<!ENTITY noscriptReset.accesskey "H">
-<!ENTITY noscriptResetDef "Hoàn lại về mặc định">
-<!ENTITY noscriptResetDef.accesskey "v">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "Hủy Bỏ Quyền Hạn Tạm Thời">
-<!ENTITY noscriptRevokeTemp.accesskey "Q">
-<!ENTITY noscriptNoUntrustedPlaceholder "Không có phần giữ chỗ nào cho các đối tượng đến từ các trang bị đánh dấu không tin cậy.">
-<!ENTITY noscriptCollapseBlockedObjects "Thu gọn các đối tượng bị chặn">
-<!ENTITY noscriptExceptions "Ngoại lệ...">
-<!ENTITY noscriptBlockedObjects "Các đối tượng bị Chặn">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "Chặn mọi đối tượng đến từ một trang bị đánh dấu không tin cậy.">
-<!ENTITY noscriptTempAllowPage "Tạm thời cho phép tất cả trên trang này">
-<!ENTITY noscriptTempAllowPage.accesskey "m">
-<!ENTITY noscriptAllowPage "Cho phép tất cả trên trang này">
-<!ENTITY noscriptAllowPage.accesskey "o">
-<!ENTITY noscriptTempToPerm "Đặt quyền hạn vĩnh viễn cho trang này">
-<!ENTITY noscriptTempToPerm.accesskey "q">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS Câu Hỏi Thường Gặp...">
-<!ENTITY noscriptHttpsFaq.accesskey "S">
-<!ENTITY noscriptHttps.behavior "Hành vi">
-<!ENTITY noscriptHttps.cookies "Cookie">
-<!ENTITY noscriptHttps.description "Cấm nội dung web hoạt động trừ khi nó đến từ một kết nối an toàn (HTTPS):">
-<!ENTITY noscriptHttps.never "Không bao giờ">
-<!ENTITY noscriptHttps.proxy "Khi sử dụng một proxy (khuyên dùng cho Tor)">
-<!ENTITY noscriptHttps.always "Luôn luôn">
-<!ENTITY noscriptHttpsForced "Cấm các trang sau sử dụng kết nối an toàn (HTTPS):">
-<!ENTITY noscriptHttpsForcedExceptions "Không bao giờ bắt buộc kết nối an toàn (HTTPS) cho các trang sau:">
-<!ENTITY noscriptSecureCookies "Kích Hoạt Việc Quản Lí Cookie An Toàn Tự Động">
-<!ENTITY noscriptSecureCookiesForced "Bắt buộc mã hóa đối với tất cả cookie được tạo qua HTTPS bởi các trang sau:">
-<!ENTITY noscriptSecureCookiesExceptions "Bỏ qua các cookie không an toàn được tạo qua HTTPS bởi các trang sau:">
-<!ENTITY noscriptClearClickTitle "Cảnh Báo XóaNhấn">
-<!ENTITY noscriptClearClickHeader "Tiềm Ẩn Hành Động Chuyển Hướng Giao Diện / Chiếm Quyền Nhấp Chuột!">
-<!ENTITY noscriptClearClickDescription "NoScript chặn một tương tác chuột hoặc bàn phím bởi một phần tử bị ẩn một phần. Nhấn lên hình ở trên để chuyển qua lại giữa phiên bản ban đầu và phiên bản đã chặn.">
-<!ENTITY noscriptClearClickOpt "Phòng ngừa XóaNhấn trên trang...">
-<!ENTITY noscriptClearClickReport "Báo cáo">
-<!ENTITY noscriptClearClickReport.accesskey "B">
-<!ENTITY noscriptClearClickReportId "ID Báo cáo:">
-<!ENTITY noscriptTrustedPagesAdj "tin cậy">
-<!ENTITY noscriptUntrustedPagesAdj "không tin cậy">
-<!ENTITY noscriptKeepLocked "Khóa phần tử này (khuyên dùng)">
-<!ENTITY noscriptEmbeddings "Các Đối Tượng Được Nhúng">
-<!ENTITY noscriptPrev "Trước">
-<!ENTITY noscriptNext "Tiếp">
-<!ENTITY noscriptFrameOptErr.title "Nội dung này không thể được hiển thị trong một frame">
-<!ENTITY noscriptFrameOptErr.desc "Để bảo vệ bạn, người xuất bản nội dung này không cho phép nó được hiển thị trong một frame.">
-<!ENTITY noscriptFrameOptErr.link "Nhấn vào đây để mở nội dung này trong một cửa sổ mới">
-<!ENTITY noscriptBookmarkSync "Sao lưu cấu hình NoScript trong một trang đánh dấu để đồng bộ hóa dễ dàng">
-<!ENTITY noscriptShowReleaseNotes "Hiển thị ghi chú phát hành khi cập nhật">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "Bộ lệnh:">
-<!ENTITY ABE.enabled.label "Bật ABE (Application Boundaries Enforcer - Bắt buộc Biên giới Chương trình)">
-<!ENTITY ABE.siteEnabled.label "Cho phép các trang đưa ra bộ lệnh riêng của chúng">
-<!ENTITY ABE.edit.label "Chỉnh sửa...">
-<!ENTITY ABE.edit.accesskey "C">
-<!ENTITY ABE.enable.label "Bật">
-<!ENTITY ABE.enable.accesskey "B">
-<!ENTITY ABE.disable.label "Vô hiệu hóa">
-<!ENTITY ABE.disable.accesskey "V">
-<!ENTITY ABE.refresh.label "Làm tươi">
-<!ENTITY ABE.refresh.accesskey "L">
-<!ENTITY noscriptUninstall "Gỡ bỏ">
-<!ENTITY noscriptRecentBlocked "Các trang bị chặn gần đây">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptExternalFilters "External Filters">
-<!ENTITY noscriptEF.enable "Enable external filters">
-<!ENTITY noscriptEF.add "New Filter…">
-<!ENTITY noscriptEF.executable "Executable file:">
-<!ENTITY noscriptEF.browse "Browse…">
-<!ENTITY noscriptEF.contentType "Content type (MIME) to be filtered (exact match or regular expression):">
-<!ENTITY noscriptEF.exceptions "Do not filter objects coming from these sites:">
-<!ENTITY noscriptEF.remove "Remove">
-<!ENTITY noscriptPreset "Security Level">
-<!ENTITY noscriptPreset.off "Off (are you serious?!)">
-<!ENTITY noscriptPreset.low "Easy going (Blacklist + Web Security)">
-<!ENTITY noscriptPreset.medium "Classic (Whitelist + Web Security)">
-<!ENTITY noscriptPreset.high "Fortress (Full lockdown)">
-<!ENTITY noscript.hoverUI "Open permissions menu when mouse hovers over NoScript's icon">
-<!ENTITY noscriptDonate "Donate">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/vi/noscript/noscript.properties b/extensions/noscript/chrome/locale/vi/noscript/noscript.properties
deleted file mode 100644
index 73ee049..0000000
--- a/extensions/noscript/chrome/locale/vi/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=Cho Phép Script Trên Mọi Trang (nguy hiểm)
-forbidGlobal=Cấm Phép Script Trên Mọi Trang (nên làm vậy)
-allowLocal=Cho phép %S
-allowTemp=Tạm thời cho phép %S
-forbidLocal=Cấm %S
-allowed.glb=Nguy hiểm! Script Được Phép Trên Mọi Trang
-allowed.yes=Các Script Đang Được Cho Phép
-allowed.prt=Các Script Đang Được Cho Phép Một Phần
-allowed.no=Các Script Đang Bị Cấm
-global.warning.title=Cảnh Báo!
-global.warning.text=Script sẽ được phép chạy ở mọi nơi (ở mọi trang).\n Đây là một thao tác nguy hiểm.\nBạn có thật sự muốn tiếp tục không?
-audio.samples=Âm thanh mẫu
-confirm=Bạn có chắc không?
-alwaysAsk=Luôn luôn hỏi xác nhận
-notifyHide=Ẩn sau %S giây
-trust=Tin tưởng %S
-distrust=Đánh dấu %S không tin cậy
-untrustedOrigin=một nguồn không tin cậy
-xss.notify.generic=NoScript đã lọc một nỗ lực cross-site scripting (XSS) từ %S. Các chi tiết kĩ thuật đã được lưu trong Bảng Kiểm Soát.
-xss.notify.showConsole=Hiển thị Bảng kiểm soát...
-xss.notify.showConsole.accessKey=H
-xss.reason.filterXGet=Đã làm sạch yêu cầu đáng ngờ. URL nguyên gốc [%1$S] được yêu cầu từ [%2$S]. URL được làm sạch: [%3$S].
-xss.reason.filterXGetRef=Đã làm sạch liên kết chỉ hướng yêu cầu đáng ngờ. URL [%1$S] được yêu cầu từ [%2$S]. Liên kết chỉ hướng được làm sạch: [%3$S].
-xss.reason.filterXPost=Đã làm sạch phần tải lên đáng ngờ [%1$S] từ [%2$S]: được đổi sang dạng yêu cầu GET chỉ-tải-xuống.
-unsafeReload.warning=Tải lại MỘT CÁCH KHÔNG AN TOÀN một\n\n%1$S [%2$S] đáng ngờ\n\nTỪ[%3$S]\n\nNoScript sẽ KHÔNG bảo vệ yêu cầu này!\n
-metaRefresh.notify=NoScript đã chặn một yêu cầu đổi hướng dạng <META> trong một phần tử <NOSCRIPT>: %S trong %S giây.
-metaRefresh.notify.follow=Đi theo Yêu cầu đổi hướng
-metaRefresh.notify.follow.accessKey=i
-notify.options=Tùy Chọn
-notify.options.accessKey=y
-reset.title=Trở Về Mặc Định
-reset.warning=TẤT CẢ các tùy chọn và quyền hạn cho các trang sẽ trở về các giá trị mặc định ngay lập tức.\nThao tác này không thể phục hồi.\nBạn có muốn tiếp tục không?
-bookmarkSync.title=Đánh dấu Cấu hình NoScript
-bookmarkSync.message=Trang đánh dấu này KHÔNG được mở, mà được đồng bộ hóa bằng một dịch vụ như Weave hoặc phần mở rộng XMarks.
-bookmarkSync.confirm=NoScript tìm thấy một trang đánh dấu cấu hình được lưu trên\n%S.\nBạn có thật sự muốn ghi đè cấu hình NoScript trong máy bằng nội dung của trang đánh dấu này không?
-ABE.notify=Yêu cầu %1$S bị lọc bởi ABE: <%2$S> %3$S
-ABE.chooseEditor=Vui lòng chọn một trình soạn thảo cho bộ lệnh ABE
-allowFrom=Cho phép tất cả từ %S
-allowTempFrom=Tạm thời cho phép tất cả từ %S
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-ABE.syntaxError=Syntax error in ABE ruleset!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-siteInfo.confirm=You're about to ask for information about the "%1$S" site\nby submitting a query to %2$S.\nDo you want to continue?
-siteInfo.tooltip=Middle-click or shift+click for site info...
-ef.activate=Filter %S
-ef.options=%S options…
-ef.newName=Enter the name of the new filter:
-ef.locateExe=Select the executable file for the %S filter
-disable=Disable %S
-disable.accessKey=D
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/zh-CN/noscript/about.properties b/extensions/noscript/chrome/locale/zh-CN/noscript/about.properties
deleted file mode 100644
index 5654aed..0000000
--- a/extensions/noscript/chrome/locale/zh-CN/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=为您的 Firefox 提供额外保护: NoScript 只允许在您选择的信任域(例如您的家庭银行网站)上执行 JavaScript、Java(和其他插件)。该白名单基于抢先阻止机制,在不损失任何功能的前提下,防止利用已知或未知安全漏洞的攻击。专家们同意:拥有 NoScript 的 Firefox 更安全 :-)
-aboutTitle=关于 %S
-extensionContributors=贡献者:
-extensionContributors.tip=对于此扩展你应该感谢的人
-extensionCreatorLabel=作者:
-changelog=更新日志
-changelog.tip=显示更新日志
-license=许可协议
-license.tip=阅读最终用户协议
-logo.tip=访问扩展主页
-sponsor.tip=访问赞助者主页
-informaction.tip=访问 InformAction 主页
-extensionHomepage.tip=访问扩展主页
-extensionCreator.tip=访问作者主页
-version=版本 %S
diff --git a/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.dtd b/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.dtd
deleted file mode 100644
index 7c12980..0000000
--- a/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "选项...">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript 选项">
-<!ENTITY noscriptAbout "关于 NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "您可以指定允许执行脚本的网站。请输入您想要允许的网站地址或域名(例如: “http://www.site.com”或者“site.com”)然后单击“允许”。">
-<!ENTITY noscriptWebAddress "网站地址:">
-<!ENTITY noscriptAllow "允许">
-<!ENTITY noscriptAllow.accesskey "l">
-<!ENTITY noscriptForbid "禁止">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "标记为可信的">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "标记为不可信的">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "删除选择的网站">
-<!ENTITY noscriptGloballyEnabled "全局允许脚本(危险)">
-<!ENTITY noscriptAutoReload "更改许可设置后自动重新载入相关页面">
-<!ENTITY noscriptGeneral "常规">
-<!ENTITY noscriptAppearance "外观">
-<!ENTITY noscriptShow "显示...">
-<!ENTITY noscriptCtxMenu "右键菜单">
-<!ENTITY noscriptStatusIcon "状态栏图标">
-<!ENTITY noscriptFullAddr "完整地址 (http://www.noscript.net)">
-<!ENTITY noscriptFullDom "全域名 (www.noscript.net)">
-<!ENTITY noscriptBaseDom "二级域名 (noscript.net)">
-<!ENTITY noscriptTempCmd "临时允许 [...]">
-<!ENTITY noscriptSound "脚本被阻止时发出声音">
-<!ENTITY noscriptImport "导入">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "导出">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "显示被阻止脚本的信息">
-<!ENTITY noscriptNotify.bottom "在浏览器底部显示信息">
-<!ENTITY noscriptSound.choose "选择">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "播放">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "恢复默认设置">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "高级">
-<!ENTITY noscriptAdditionalPermissions "对信任站点的额外许可">
-<!ENTITY noscriptAllowClipboard "允许由外部剪贴板进行富文本(rich text)的复制和粘贴">
-<!ENTITY noscriptAdditionalRestrictions "对不信任站点的额外限制">
-<!ENTITY noscriptPlugins "插件">
-<!ENTITY noscriptContentBlocker "对受信任站点仍然应用这些限制">
-<!ENTITY noscriptForbidJava "禁止 Java™">
-<!ENTITY noscriptForbidXSLT "禁止 XSLT">
-<!ENTITY noscriptForbidSilverlight "禁止 Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "禁止 &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "禁止 &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "禁止 @font-face">
-<!ENTITY noscriptForbidWebGL "禁止 WebGL">
-<!ENTITY noscriptForbidMedia "禁止 &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "禁止 Adobe® Flash®">
-<!ENTITY noscriptForbidPlugins "禁止其他插件">
-<!ENTITY noscriptReloadWarn "下面这些选项将在新页面中或手动重新载入后生效。">
-<!ENTITY noscriptConfirmUnblock "需要确认后再允许某些临时项目">
-<!ENTITY noscriptStatusLabel "状态栏标签">
-<!ENTITY noscriptForbidBookmarklets "禁止 Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "显示图像占位符">
-<!ENTITY noscriptTruncateTitle "截短文档标题">
-<!ENTITY noscriptFixLinks "尝试定位 JavaScript 链接">
-<!ENTITY noscriptAllowBookmarks "允许通过书签打开的网站(脚本)">
-<!ENTITY noscriptAllowViaBookmarks "允许通过书签打开的网站(脚本)">
-<!ENTITY noscriptAllowPing "允许 &lt;A PING...&gt;">
-<!ENTITY noscriptAllowLocalLinks "允许本地的链接">
-<!ENTITY noscriptForbidPing "禁止 &lt;A PING...&gt;">
-<!ENTITY noscriptForbidMetaRefresh "禁止 &lt;NOSCRIPT&gt; 元素内的 META 重定向">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "显示关于被屏蔽的 META 重定向信息">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "白名单">
-<!ENTITY noscriptPermissions "许可">
-<!ENTITY noscriptRefresh "刷新">
-<!ENTITY noscriptNotifications "通知">
-<!ENTITY noscriptToolbarToggle "左键单击 NoScript 工具栏按钮切换对当前顶层站点的许可">
-<!ENTITY noscriptTrusted "可信任的">
-<!ENTITY noscriptUntrusted "不可信任的">
-<!ENTITY noscriptUnknown "未知">
-<!ENTITY noscriptAdd "添加">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "关闭">
-<!ENTITY noscriptSiteManager "站点管理器">
-<!ENTITY noscriptSecurityManager "安全管理器">
-<!ENTITY noscriptPolicies "策略">
-<!ENTITY noscriptDefaultPolicies "默认策略">
-<!ENTITY noscriptSitePolicies "站点特殊策略">
-<!ENTITY noscriptNselNever "隐藏 &lt;NOSCRIPT&gt; 元素">
-<!ENTITY noscriptNselForce "显示已被屏蔽的 &lt;SCRIPT&gt; 标签下的 &lt;NOSCRIPT&gt; 元素">
-<!ENTITY noscriptAutoAllowTopLevel "默认临时允许顶层站点">
-<!ENTITY noscriptDescription "为您的 Firefox 提供额外保护: NoScript 只允许在您选择的信任域 (例如您的家庭银行网站) 上执行 JavaScript、Java(和其他插件)。该白名单基于抢先阻止机制,在不损失任何功能的前提下,防止利用已知或未知安全漏洞的攻击。专家们同意:拥有 NoScript 的 Firefox 更安全 :-)">
-<!ENTITY noscriptOptBlockCssScanners "阻止基于 CSS 的扫描器">
-<!ENTITY noscriptOptFilterXGet "净化跨站点的可疑请求">
-<!ENTITY noscriptOptFilterXPost "把跨站点 POST 请求转换为最少数据的 GET 请求">
-<!ENTITY noscriptShowConsole "显示控制台...">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS 问答...">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "非安全的重新载入">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "反 XSS 保护的例外情况">
-<!ENTITY noscriptXssExceptions.description "匹配以下正则表达式的目标将不会被保护不遭受 XSS (跨站脚本攻击)。">
-<!ENTITY noscriptMatchSample "模式匹配示例:">
-<!ENTITY noscriptReset "重置">
-<!ENTITY noscriptReset.accesskey "S">
-<!ENTITY noscriptResetDef "重置为默认值">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "撤销临时允许">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "对于已标记为不可信站点的对象不显示占位符">
-<!ENTITY noscriptCollapseBlockedObjects "瓦解已阻止的对象">
-<!ENTITY noscriptExceptions "例外...">
-<!ENTITY noscriptBlockedObjects "已阻止的对象">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "阻止来自已经标记为不可信站点的任何对象">
-<!ENTITY noscriptTempAllowPage "临时允许本页面所有对象">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "允许本页面所有对象">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "永久允许页面内的临时许可对象">
-<!ENTITY noscriptTempToPerm.accesskey "m">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS 问答...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "特性">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "禁止活动的页面內容除非它來自安全的 (HTTPS) 连接:">
-<!ENTITY noscriptHttps.never "从不">
-<!ENTITY noscriptHttps.proxy "当使用代理时 (推荐配合 Tor 使用)">
-<!ENTITY noscriptHttps.always "总是">
-<!ENTITY noscriptHttpsForced "强制以下站点使用安全的 (HTTPS) 连接:">
-<!ENTITY noscriptHttpsForcedExceptions "永不强制以下站点使用安全的 (HTTPS) 连接:">
-<!ENTITY noscriptSecureCookies "启用自动安全 Cookies 管理">
-<!ENTITY noscriptSecureCookiesForced "强制以下站点通过 HTTPS 加密所有 Cookies 设置:">
-<!ENTITY noscriptSecureCookiesExceptions "以下站点通过 HTTPS 忽略不安全的 Cookies 设置:">
-<!ENTITY noscriptClearClickTitle "ClearClick 警告">
-<!ENTITY noscriptClearClickHeader "潜在的点击劫持 / UI 跳转攻击!">
-<!ENTITY noscriptClearClickDescription "NoScript 拦截了一个部分隐藏元素的鼠标或键盘互动。点击图片切换拦截和取消拦截。">
-<!ENTITY noscriptClearClickOpt "启用 ClearClick 保护于...">
-<!ENTITY noscriptClearClickReport "报告">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "报告 ID:">
-<!ENTITY noscriptTrustedPagesAdj "可信任页面">
-<!ENTITY noscriptUntrustedPagesAdj "不可信任页面">
-<!ENTITY noscriptKeepLocked "保持锁定此元素 (推荐)">
-<!ENTITY noscriptEmbeddings "嵌入的对象">
-<!ENTITY noscriptPrev "上一个">
-<!ENTITY noscriptNext "下一个">
-<!ENTITY noscriptFrameOptErr.title "此内容不能被显示在帧中">
-<!ENTITY noscriptFrameOptErr.desc "为了保护你的安全, 此内容提供者不允许它被显示在帧中。">
-<!ENTITY noscriptFrameOptErr.link "点击这里在新窗口中打开此内容">
-<!ENTITY noscriptBookmarkSync "备份 NoScript 配置到书签以便轻松地同步">
-<!ENTITY noscriptShowReleaseNotes "更新时显示发布注释">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "规则集:">
-<!ENTITY ABE.enabled.label "启用 ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "允许网站推送它们自己的规则集">
-<!ENTITY ABE.edit.label "编辑...">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "启用">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "禁用">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "刷新">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "卸载">
-<!ENTITY noscriptRecentBlocked "最近被屏蔽的站点">
-<!ENTITY noscriptExternalFilters "外部过滤器">
-<!ENTITY noscriptEF.enable "启用外部过滤器">
-<!ENTITY noscriptEF.add "新建过滤器…">
-<!ENTITY noscriptEF.executable "可执行文件:">
-<!ENTITY noscriptEF.browse "浏览…">
-<!ENTITY noscriptEF.contentType "被过滤的内容类型(MIME)(精确匹配或使用正则表达式)">
-<!ENTITY noscriptEF.exceptions "不过滤来自这些网站的对象:">
-<!ENTITY noscriptEF.remove "移除">
-<!ENTITY noscriptPreset "安全级别">
-<!ENTITY noscriptPreset.off "关闭(你确定吗?)">
-<!ENTITY noscriptPreset.low "温和(黑名单+网络安全)">
-<!ENTITY noscriptPreset.medium "典型(白名单+网络安全)">
-<!ENTITY noscriptPreset.high "严密(全部锁定)">
-<!ENTITY noscript.hoverUI "当鼠标划过 NoScript 图标时打开许可菜单">
-<!ENTITY noscriptDonate "捐助">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.properties b/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.properties
deleted file mode 100644
index 789d5a8..0000000
--- a/extensions/noscript/chrome/locale/zh-CN/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=全局允许脚本(危险)
-forbidGlobal=全局禁止脚本(推荐)
-allowLocal=允许 %S
-allowTemp=临时允许 %S
-forbidLocal=禁止 %S
-allowed.glb=危险! 全局允许了脚本
-allowed.yes=当前允许的脚本
-allowed.prt=部分允许的脚本
-allowed.no=当前禁止的脚本
-global.warning.title=警告!
-global.warning.text=所有网站都将允许使用脚本。这是一个会有潜在危险的行为。\n您确定要这样做吗?
-audio.samples=音频文件示例
-confirm=您确定吗?
-alwaysAsk=总是需要确认
-notifyHide=%S 秒钟后隐藏
-trust=信任 %S
-distrust=标记 %S 为不可信的
-untrustedOrigin=不可信的来源
-xss.notify.generic=NoScript 过滤了一个来自 %S 的潜在跨站点脚本攻击(XSS)。已将详细的技术资料记录到控制台。
-xss.notify.showConsole=显示控制台...
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=净化可疑请求。从 [%2$S] 请求的原始 URL [%1$S] 已净化为 [%3$S]。
-xss.reason.filterXGetRef=净化可疑的引用请求。从 [%2$S] 请求的引用 URL [%1$S] 已净化为 [%3$S]。
-xss.reason.filterXPost=净化从 [%2$S] 至 [%1$S] 的可疑上传: 已转换为仅下载的 GET 请求。
-unsafeReload.warning=目前正从\n\n[%3$S]\n\n非安全地重新载入\n\n%1$S [%2$S]\n\nNoScript 不会保护该请求!\n
-metaRefresh.notify=NoScript 阻止了一个 <NOSCRIPT> 元素内的 <META> 重定向: %S 于 %S 秒。
-metaRefresh.notify.follow=允许重定向
-metaRefresh.notify.follow.accessKey=F
-notify.options=选项
-notify.options.accessKey=O
-reset.title=重置 NoScript
-reset.warning=所有的 NoScript 首选项和站点许可设置将被立即恢复为默认值。\n该操作无法还原。\n您想要继续吗?
-bookmarkSync.title=NoScript 配置书签
-bookmarkSync.message=此书签并不用于打开, 而是使用网络书签服务(如: Weave 或 XMarks 扩展)来同步 NoScript 配置。
-bookmarkSync.confirm=NoScript 发现了一个像是在 %S 保存的配置书签。\n你真的想要用你的 NoScript 本地配置来覆盖这个书签的内容?
-ABE.notify=%1$S 请求已经被 ABE 过滤: <%2$S> %3$S
-ABE.chooseEditor=请为 ABE 规则集选择一个文本编辑器
-ABE.syntaxError=ABE 规则设定存在句法错误!
-ABE.wanIpAsLocal=WAN IP (%S) ∈ LOCAL
-allowFrom=允许 %S 的全部内容
-allowTempFrom=临时允许 %S 的全部内容
-siteInfo.confirm=您正准备向%2$S提交一个查询以查看"%1$S"站点信息。您要继续吗?
-siteInfo.tooltip=中键点击或shift+左键点击以查看站点信息...
-ef.activate=过滤器 %S
-ef.options=%S 选项...
-ef.newName=输入新过滤器的名称:
-ef.locateExe=为 %S 过滤器选择可执行程序
-disable=禁用 %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/locale/zh-TW/noscript/about.properties b/extensions/noscript/chrome/locale/zh-TW/noscript/about.properties
deleted file mode 100644
index 1f69c68..0000000
--- a/extensions/noscript/chrome/locale/zh-TW/noscript/about.properties
+++ /dev/null
@@ -1,15 +0,0 @@
-extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description=為您的 Firefox 提供額外的保護
-aboutTitle=關於 %S 繁體中文化語系由FreeXD翻譯和修改
-extensionContributors=貢獻人員:
-extensionContributors.tip=您應該為此感謝這些人
-extensionCreatorLabel=作者:
-changelog=版本訊息
-changelog.tip=顯示版本訊息
-license=許可協議
-license.tip=閱讀使用者協議
-logo.tip=拜訪套件首頁
-sponsor.tip=拜訪贊助商首頁
-informaction.tip=拜訪 InformAction 首頁
-extensionHomepage.tip=拜訪套件首頁
-extensionCreator.tip=拜訪作者首頁
-version=版本 %S
diff --git a/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.dtd b/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.dtd
deleted file mode 100644
index 6ba36f7..0000000
--- a/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.dtd
+++ /dev/null
@@ -1,192 +0,0 @@
-<!ENTITY noscriptOptions "選項…">
-<!ENTITY noscriptOptions.accesskey "O">
-<!ENTITY noscriptOptionsLong "NoScript 選項">
-<!ENTITY noscriptAbout "關於 NoScript 5.1.8.5">
-<!ENTITY noscriptPermissionsText "您可以指定允許執行 JavaScript 的網站。輸入您要允許的網址或網域(例如 &quot;http://www.site.com&quot; 或 &quot;site.com&quot;),然後按下允許.">
-<!ENTITY noscriptWebAddress "網址:">
-<!ENTITY noscriptAllow "允許">
-<!ENTITY noscriptAllow.accesskey "A">
-<!ENTITY noscriptForbid "禁止">
-<!ENTITY noscriptForbid.accesskey "F">
-<!ENTITY noscriptTrust "標記為信任的">
-<!ENTITY noscriptTrust.accesskey "T">
-<!ENTITY noscriptUntrust "標記為不信任的">
-<!ENTITY noscriptUntrust.accesskey "U">
-<!ENTITY noscriptRemoveSelected "移除選取的網站">
-<!ENTITY noscriptGloballyEnabled "全面允許 JavaScript(危險)">
-<!ENTITY noscriptAutoReload "更改許可設定後自動重新讀取相關的頁面.">
-<!ENTITY noscriptGeneral "一般">
-<!ENTITY noscriptAppearance "外觀">
-<!ENTITY noscriptShow "顯示…">
-<!ENTITY noscriptCtxMenu "右鍵選單">
-<!ENTITY noscriptStatusIcon "狀態列圖示">
-<!ENTITY noscriptFullAddr "完整的網址(http://www.noscript.net)">
-<!ENTITY noscriptFullDom "完整的網域(www.noscript.net)">
-<!ENTITY noscriptBaseDom "第二層網域(noscript.net)">
-<!ENTITY noscriptTempCmd "暫時允許 […]">
-<!ENTITY noscriptSound "有 Script 被封鎖時播放音效">
-<!ENTITY noscriptImport "匯入">
-<!ENTITY noscriptImport.accesskey "I">
-<!ENTITY noscriptExport "匯出">
-<!ENTITY noscriptExport.accesskey "E">
-<!ENTITY noscriptNotify "顯示阻擋 Script 的訊息">
-<!ENTITY noscriptNotify.bottom "將訊息放在底部">
-<!ENTITY noscriptSound.choose "選擇">
-<!ENTITY noscriptSound.choose.accesskey "C">
-<!ENTITY noscriptSound.play "播放">
-<!ENTITY noscriptSound.play.accesskey "a">
-<!ENTITY noscriptSound.reset "恢復預設">
-<!ENTITY noscriptSound.reset.accesskey "R">
-<!ENTITY noscriptAdvanced "進階">
-<!ENTITY noscriptAdditionalPermissions "對於信任網站的額外許可">
-<!ENTITY noscriptAllowClipboard "允許從外部剪貼簿複製與貼上 Rich Format Text(RTF格式)">
-<!ENTITY noscriptAdditionalRestrictions "對不信任網站的額外限制">
-<!ENTITY noscriptPlugins "外掛">
-<!ENTITY noscriptContentBlocker "一併將這些限制應用到信任的網站">
-<!ENTITY noscriptForbidJava "禁止 Java™">
-<!ENTITY noscriptForbidXSLT "禁止 XSLT">
-<!ENTITY noscriptForbidSilverlight "禁止 Microsoft® Silverlight™">
-<!ENTITY noscriptForbidIFrames "禁止 &lt;IFRAME&gt;">
-<!ENTITY noscriptForbidFrames "禁止 &lt;FRAME&gt;">
-<!ENTITY noscriptForbidFonts "禁止 @font-face">
-<!ENTITY noscriptForbidWebGL "禁止 WebGL">
-<!ENTITY noscriptForbidMedia "禁止 &lt;AUDIO&gt; / &lt;VIDEO&gt;">
-<!ENTITY noscriptForbidFlash "禁止 Macromedia® Flash®">
-<!ENTITY noscriptForbidPlugins "禁止其他外掛">
-<!ENTITY noscriptReloadWarn "這些選項會套用在新的或(手動)重讀的頁面">
-<!ENTITY noscriptConfirmUnblock "暫時取消阻擋物件需要確認">
-<!ENTITY noscriptStatusLabel "狀態列標籤">
-<!ENTITY noscriptForbidBookmarklets "禁止 Bookmarklets">
-<!ENTITY noscriptShowPlaceholder "顯示圖片預留位置">
-<!ENTITY noscriptTruncateTitle "簡短文件標題">
-<!ENTITY noscriptFixLinks "嘗試修復 JavaScript 連結">
-<!ENTITY noscriptAllowBookmarks "允許書籤裡的所有網站">
-<!ENTITY noscriptAllowViaBookmarks "允許用書籤開啟網站">
-<!ENTITY noscriptAllowPing "允許 &lt;A PING…&gt;">
-<!ENTITY noscriptAllowLocalLinks "允許本機連結">
-<!ENTITY noscriptForbidPing "禁止 &lt;A PING…&gt;">
-<!ENTITY noscriptForbidMetaRefresh "禁止 &lt;NoScript&gt; 元素中的 META 重新導向">
-<!ENTITY noscriptForbidMetaRefresh.accesskey "R">
-<!ENTITY noscriptNotifyMeta "顯示關於被封鎖的 META 重導向">
-<!ENTITY noscriptNotifyMeta.accesskey "R">
-<!ENTITY noscriptWhitelist "白名單">
-<!ENTITY noscriptPermissions "許可">
-<!ENTITY noscriptRefresh "重新整理">
-<!ENTITY noscriptNotifications "通知">
-<!ENTITY noscriptToolbarToggle "在 NoScript 工具列按鈕上按左鍵來固定目前第一層網域的許可">
-<!ENTITY noscriptTrusted "信任的">
-<!ENTITY noscriptUntrusted "不信任的">
-<!ENTITY noscriptUnknown "未知">
-<!ENTITY noscriptAdd "新增">
-<!ENTITY noscriptAdd.accesskey "A">
-<!ENTITY noscriptClose "關閉">
-<!ENTITY noscriptSiteManager "網站管理">
-<!ENTITY noscriptSecurityManager "安全管理">
-<!ENTITY noscriptPolicies "原則">
-<!ENTITY noscriptDefaultPolicies "預設原則">
-<!ENTITY noscriptSitePolicies "網站特殊原則">
-<!ENTITY noscriptNselNever "隱藏 &lt;NoScript&gt; 元素">
-<!ENTITY noscriptNselForce "顯示被封鎖的 &lt;Script&gt; 的 &lt;NoScript&gt; 元素">
-<!ENTITY noscriptAutoAllowTopLevel "預設暫時允許第一層網域">
-<!ENTITY noscriptDescription "為您的 Firefox 提供額外保護: NoScript 只允許您選擇的信任網域 (例如您的家庭金融網站) 上的 JavaScript, Java (和其他的外掛). 這份白名單基於預先處理來防止安全弱點 (已知和未知的!) 被利用,且不損失功能… 專家們都同意: Firefox 加上 NoScript 真的是更加安全 :-)">
-<!ENTITY noscriptOptBlockCssScanners "封鎖基於 CSS 的掃瞄器">
-<!ENTITY noscriptOptFilterXGet "消除可疑的跨站請除">
-<!ENTITY noscriptOptFilterXPost "轉換跨站 POST 請求為不含數據的 GET 請求">
-<!ENTITY noscriptShowConsole "顯示控制台…">
-<!ENTITY noscriptShowConsole.accesskey "S">
-<!ENTITY noscriptXss "XSS">
-<!ENTITY noscriptXss.accesskey "X">
-<!ENTITY noscriptXssFaq "XSS 問與答…">
-<!ENTITY noscriptXssFaq.accesskey "Q">
-<!ENTITY noscriptUnsafeReload "不安全的重新讀取">
-<!ENTITY noscriptUnsafeReload.accesskey "R">
-<!ENTITY noscriptXssExceptions "Anti-XSS 保護例外">
-<!ENTITY noscriptXssExceptions.description "符合這些規則表答式的目標將不會被保護不受 XSS (跨站腳本攻擊)">
-<!ENTITY noscriptMatchSample "樣本符合範例:">
-<!ENTITY noscriptReset "恢復">
-<!ENTITY noscriptReset.accesskey "s">
-<!ENTITY noscriptResetDef "恢復預設">
-<!ENTITY noscriptResetDef.accesskey "d">
-<!ENTITY noscriptOptionsWidth "40em">
-<!ENTITY noscriptRevokeTemp "取消暫時許可">
-<!ENTITY noscriptRevokeTemp.accesskey "R">
-<!ENTITY noscriptNoUntrustedPlaceholder "無物件進入位置標誌符從標記信任的網站">
-<!ENTITY noscriptCollapseBlockedObjects "撤銷已封鎖的物件">
-<!ENTITY noscriptExceptions "例外…">
-<!ENTITY noscriptBlockedObjects "已封鎖物件">
-<!ENTITY noscriptAlwaysBlockUntrustedContent "封鎖每個來自不信任網站的物件">
-<!ENTITY noscriptTempAllowPage "暫時允許此頁面的所有物件">
-<!ENTITY noscriptTempAllowPage.accesskey "T">
-<!ENTITY noscriptAllowPage "全面允許本頁物件">
-<!ENTITY noscriptAllowPage.accesskey "A">
-<!ENTITY noscriptTempToPerm "為本頁建立永久許可">
-<!ENTITY noscriptTempToPerm.accesskey "M">
-<!ENTITY noscriptHttps "HTTPS">
-<!ENTITY noscriptHttpsFaq "HTTPS問與答...">
-<!ENTITY noscriptHttpsFaq.accesskey "Q">
-<!ENTITY noscriptHttps.behavior "特性">
-<!ENTITY noscriptHttps.cookies "Cookies">
-<!ENTITY noscriptHttps.description "禁止主動頁面的內容除非它來自安全的(HTTPS)連線:">
-<!ENTITY noscriptHttps.never "永不">
-<!ENTITY noscriptHttps.proxy "當使用代理時(需要搭配Tor)">
-<!ENTITY noscriptHttps.always "總是">
-<!ENTITY noscriptHttpsForced "強制下面網站使用安全的(HTTPS)連線:">
-<!ENTITY noscriptHttpsForcedExceptions "下面網站永不強制安全的(HTTPS)連線:">
-<!ENTITY noscriptSecureCookies "啟用自動安全Cookies管理">
-<!ENTITY noscriptSecureCookiesForced "強制下面網站藉由HTTPS加密所有Cookies:">
-<!ENTITY noscriptSecureCookiesExceptions "忽略下面網站不安全的Cookies藉由HTTPS:">
-<!ENTITY noscriptClearClickTitle "解除點選警告">
-<!ENTITY noscriptClearClickHeader "潛在的點選劫持/使用者介面補償企圖攻擊!">
-<!ENTITY noscriptClearClickDescription "NoScript 攔截一個滑鼠或鍵盤操作的隱藏元素. 點選圖片將會進行對上述過程之間的阻止和解除改變.">
-<!ENTITY noscriptClearClickOpt "解除頁面上的點選保護...">
-<!ENTITY noscriptClearClickReport "報告">
-<!ENTITY noscriptClearClickReport.accesskey "R">
-<!ENTITY noscriptClearClickReportId "報告ID:">
-<!ENTITY noscriptTrustedPagesAdj "可信任">
-<!ENTITY noscriptUntrustedPagesAdj "不信任">
-<!ENTITY noscriptKeepLocked "保持鎖定此元素(推薦)">
-<!ENTITY noscriptEmbeddings "嵌入的物件">
-<!ENTITY noscriptPrev "上一個">
-<!ENTITY noscriptNext "下一個">
-<!ENTITY noscriptFrameOptErr.title "此內容無法在框架頁中顯示">
-<!ENTITY noscriptFrameOptErr.desc "為保衛您的安全性,此提供者的內容不允許於框架頁中顯示。">
-<!ENTITY noscriptFrameOptErr.link "按此於一個新視窗中開啟此內容。">
-<!ENTITY noscriptBookmarkSync "輕鬆把 NoScript 組態備份到書籤中來達到同步">
-<!ENTITY noscriptShowReleaseNotes "顯示更新發行公告">
-<!ENTITY ABE "ABE">
-<!ENTITY ABE.accesskey "A">
-<!ENTITY ABE.rulesets.label "規則控制:">
-<!ENTITY ABE.enabled.label "啟用ABE (Application Boundaries Enforcer)">
-<!ENTITY ABE.siteEnabled.label "允許網站使用自己的規則">
-<!ENTITY ABE.edit.label "編輯">
-<!ENTITY ABE.edit.accesskey "E">
-<!ENTITY ABE.enable.label "啟用">
-<!ENTITY ABE.enable.accesskey "n">
-<!ENTITY ABE.disable.label "停用">
-<!ENTITY ABE.disable.accesskey "D">
-<!ENTITY ABE.refresh.label "重新整理">
-<!ENTITY ABE.refresh.accesskey "R">
-<!ENTITY noscriptUninstall "移除">
-<!ENTITY noscriptRecentBlocked "最近封鎖的網站">
-<!ENTITY noscriptExternalFilters "外部篩選器">
-<!ENTITY noscriptEF.enable "啟用外部篩選器">
-<!ENTITY noscriptEF.add "新增篩選器…">
-<!ENTITY noscriptEF.executable "可執行檔:">
-<!ENTITY noscriptEF.browse "瀏覽…">
-<!ENTITY noscriptEF.contentType "欲篩選的內容類型(MIME)(完全符合正規表達式)">
-<!ENTITY noscriptEF.exceptions "當進入這些網站時不篩選物件:">
-<!ENTITY noscriptEF.remove "移除">
-<!ENTITY noscriptPreset "安全層級">
-<!ENTITY noscriptPreset.off "關閉(您是認真的嗎?)">
-<!ENTITY noscriptPreset.low "輕鬆達成(黑名單+網頁安全)">
-<!ENTITY noscriptPreset.medium "傳統(白名單+網頁安全)">
-<!ENTITY noscriptPreset.high "堡壘(完全鎖定)">
-<!ENTITY noscript.hoverUI "當滑鼠移至 NoScript's 圖示時開啟權限選單">
-<!ENTITY noscriptDonate "贊助">
-<!ENTITY noscriptDonate.accesskey "o">
-<!ENTITY noscriptAutoReload.currentTab "Reload the current tab only">
-<!ENTITY noscriptCustom "Custom">
-<!ENTITY noscriptCascadePermissions "Cascade top document's permissions to 3rd party scripts">
-<!ENTITY noscriptRestrictSubdocScripting "Block scripting in whitelisted subdocuments of non-whitelisted pages">
-<!ENTITY noscriptGlobalHttpsWhitelist "Allow HTTPS scripts globally on HTTPS documents">
-<!ENTITY noscriptPermanentInPrivate "Permanent &quot;Allow&quot; commands in private windows">
diff --git a/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.properties b/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.properties
deleted file mode 100644
index 578eb88..0000000
--- a/extensions/noscript/chrome/locale/zh-TW/noscript/noscript.properties
+++ /dev/null
@@ -1,56 +0,0 @@
-allowGlobal=全面允許 JavaScript(危險)
-forbidGlobal=禁止全面允許 JavaScript(建議)
-allowLocal=允許 %S
-allowTemp=暫時允許 %S
-forbidLocal=禁止 %S
-allowed.glb=危險!已全面允許 JavaSript
-allowed.yes=已允許目前的 JavaScript
-allowed.prt=已允許部分的 JavaScript
-allowed.no=已禁止目前的 JavaScript
-global.warning.title=警告!
-global.warning.text=將全面允許 JavaScript (對每一個網站皆是)。這有潛在的危險性。您確定嗎?
-audio.samples=音效樣本
-confirm=您確定嗎?
-alwaysAsk=總是要求確認
-notifyHide=%S 秒鐘後隱藏
-trust=信任 %S
-distrust=標記 %S 為不信任
-untrustedOrigin=不信任原因
-xss.notify.generic=NoScript 已過濾掉一個潛在的跨站腳本 (XSS) 攻擊從 %S. 詳情已紀錄到控制台.
-xss.notify.showConsole=顯示控制台…
-xss.notify.showConsole.accessKey=S
-xss.reason.filterXGet=消除可疑的請求. 原始 URL [%1$S] 請求來自於 [%2$S]. 被處理的 URL: [%3$S].)
-xss.reason.filterXGetRef=消除可疑的請求引用. URL [%1$S] 請求來自於 [%2$S]. 被處理的引用: [%3$S].)
-xss.reason.filterXPost=從 [%2$S] 至 [%1$S] 的可疑上傳已被消除 : 改變成只下載的 GET 請求.
-unsafeReload.warning=不安全的重新讀取一個可疑的\n\n%1$S [%2$S]\n\n來自於 [%3$S]\n\nNoScript 將不保護這個請求!\n
-metaRefresh.notify=NoScript 封鎖了一個 <NOSCRIPT> 元素內的 <META> 重導向 : %S 在 %S 秒.
-metaRefresh.notify.follow=允許重導向
-metaRefresh.notify.follow.accessKey=F
-notify.options=選項
-notify.options.accessKey=O
-reset.title=恢復 NoScript
-reset.warning=所有 NoScript 偏好和網站許可將會立即恢復到它們的預設值.\n這個操作無法回覆.\n確定要繼續?
-bookmarkSync.title=NoScript 組態設定書籤
-bookmarkSync.message=此書籤不適用於開啟,但能夠使用像Weave或XMarks等擴充元件提供的線上書籤同步服務。
-bookmarkSync.confirm=NoScript發現一個組態書籤似乎儲存在\n%S。\n您確定要覆寫本機NoScript組態與這個書籤內容?
-ABE.notify=請求 %1$S 已由ABE過濾: <%2$S> %3$S
-ABE.chooseEditor=請選擇一個給ABE規則設定使用的文字編輯器
-ABE.syntaxError=ABE 規則集的語法錯誤!
-ABE.wanIpAsLocal=廣域網路IP (%S) ∈ 本機
-allowFrom=允許來自 %S 的所有內容
-allowTempFrom=暫時允許來自 %S 的所有內容
-siteInfo.confirm=您可能透過一個查詢給 %2$S 來索取關於 %1$S 網站的資訊,是否要繼續?
-siteInfo.tooltip=按一下滑鼠中鍵或Shift+左鍵顯示網站資訊...
-ef.activate=篩選 %S
-ef.options=%S 選項...
-ef.newName=輸入新篩選器名稱:
-ef.locateExe=選取 %S 篩選器的執行檔
-disable=停用 %S
-disable.accessKey=D
-allowed.glb-emb=Scripts Globally Allowed but Some Embeddings Blocked
-removal.title=Security Downgrade Warning
-removal.message=By disabling or uninstalling NoScript, you give up ALL the protections provided by NoScript.\n\nIf you're just tired of handling script permissions site by site, there's a safer choice.\n\nNoScript can stop blocking scripts, except those you mark as untrusted, while still protecting you with the most advanced security countermeasures against XSS, Clickjacking, CSRF and other web threats.\n\nDo you really want to remove ALL the NoScript protections?\n
-removal.no=No, just stop blocking scripts
-removal.yes=Yes, remove ALL protections
-incompatibleOptions.title=Incompatible Options Warning
-incompatibleOptions="%1$S"\nis incompatible with "%2$S".\nDo you want to enable the former and disable the latter?
diff --git a/extensions/noscript/chrome/skin/classic/noscript/abe16.png b/extensions/noscript/chrome/skin/classic/noscript/abe16.png
deleted file mode 100644
index b11dd73..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/abe16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/about.css b/extensions/noscript/chrome/skin/classic/noscript/about.css
deleted file mode 100644
index 59d7eb3..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/about.css
+++ /dev/null
@@ -1,88 +0,0 @@
-#genericAbout {
- padding: 0px 0px 10px 0px;
- background: #FFF none;
- background-image: none;
-}
-
-dialog, .dialog-content-box {
- background: white none;
- border: none;
-}
-
-#clientBox {
- color: #000;
- padding: 0px; margin: 0px;
- background: white none;
- border: none;
-}
-
-#clientBoxInternal {
- padding: 0px; margin: 10px;
- background: white none;
-}
-
-#headBox {
- border: solid #448;
- border-width: 0px 0px 1px 0px;
- padding: 0px;
- margin: 2px;
- background-image: none;
-}
-
-#extensionName {
- font-size: large;
- font-weight: bold;
- color: #448;
-}
-
-#extensionVersion {
- color: #448;
-}
-
-.sponsorline {
- color: #444;
-}
-
-#extensionDescription {
- color: #444;
- text-align: justify;
- max-width: 550px;
- overflow: auto;
-}
-
-#extensionHomepage {
-
-}
-
-.text-link, .text-link:focus {
- color: #00f;
- text-decoration: none;
- cursor: pointer;
-
-}
-.text-link:hover {
- color: #00f;
- text-decoration: underline ;
-}
-
-#contributorsBox {
- overflow: auto;
- border: 1px solid black;
- padding: 4px;
- margin: 0px 6px;
- height: 150px;
-}
-
-.contributor {
- margin: 0px;
- color: #444;
-}
-
-#extensionCreator, #extensionContributors, #extensionSponsor {
- font-weight: bold;
-}
-
-text-link {
- text-decoration: none;
-}
-
diff --git a/extensions/noscript/chrome/skin/classic/noscript/block.wav b/extensions/noscript/chrome/skin/classic/noscript/block.wav
deleted file mode 100644
index 48f92c1..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/block.wav
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/browser.css b/extensions/noscript/chrome/skin/classic/noscript/browser.css
deleted file mode 100644
index 173542d..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/browser.css
+++ /dev/null
@@ -1,322 +0,0 @@
-#palette-box #noscript-tbb {
- list-style-image: url("icon24.png");
-}
-#noscript-tbb[type="menu"]:not([cui-areatype="menu-panel"]) {
- -moz-box-orient: horizontal !important;
-}
-toolbar[mode="full"] #noscript-tbb[type="menu"] {
- -moz-binding: url("chrome://global/content/bindings/toolbarbutton.xml#menu-vertical");
-}
-
-
-#noscript-statusIcon,
-#noscript-statusRedirect,
-#noscript-statusXss {
- cursor: pointer;
-
-}
-
-.noscript-cmd {
- font-weight: normal;
-}
-
-.noscript-temp, .noscript-cmd.noscript-temp {
- font-style: italic;
- font-weight: normal;
-}
-
-.noscript-toplevel, .noscript-toplevel.noscript-temp.noscript-forbid,
-#noscript-menu-recent-blocked .noscript-embed.noscript-toplevel {
- font-weight: bold;
-}
-
-.noscript-embed .noscript-temp, .noscript-embed.noscript-temp {
- font-style: normal;
-}
-
-.noscript-unsafe-reload {
- list-style-image: url(unsafe-reload16.png);
-}
-
-
-
-.noscript-console {
- list-style-image: url(console16.png);
-}
-.noscript-faq {
- list-style-image: url(faq16.png);
-}
-
-.noscript-redirect,
-#noscript-statusRedirect {
- list-style-image: url(redirect16.png);
-}
-.noscript-xss,
-#noscript-statusXss {
- list-style-image: url(xss16.png);
-}
-
-.noscript-yes,
-#noscript-tbb.noscript-yes,
-#noscript-statusIcon.noscript-yes,
-.noscript-allow,
-.noscript-allow-from {
- list-style-image: url(yes16.png);
-}
-
-
-
-#noscript-tbb-temp-page,
-.noscript-temp.noscript-allow,
-.noscript-temp.noscript-allow-from {
- list-style-image: url(temp16.png);
-}
-
-
-
-.noscript-no,
-#noscript-tbb.noscript-no,
-#noscript-statusIcon.noscript-no,
-.noscript-forbid {
- list-style-image: url(no16.png);
-}
-.noscript-prt,
-#noscript-tbb.noscript-prt,
-#noscript-statusIcon.noscript-prt
-{
- list-style-image: url(prt16.png);
-}
-.noscript-subprt,
-#noscript-tbb.noscript-subprt,
-#noscript-statusIcon.noscript-subprt
-{
- list-style-image: url(subprt16.png);
-}
-
-.noscript-emb,
-#noscript-tbb.noscript-emb,
-#noscript-statusIcon.noscript-emb
-{
- list-style-image: url(emb16.png);
-}
-
-.noscript-no-emb,
-#noscript-tbb.noscript-no-emb,
-#noscript-statusIcon.noscript-no-emb
-{
- list-style-image: url(no-emb16.png);
-}
-
-.noscript-glb-emb,
-#noscript-tbb.noscript-glb-emb,
-#noscript-statusIcon.noscript-glb-emb,
-.noscript-inactive-glb-emb,
-#noscript-tbb.noscript-inactive-glb-emb,
-#noscript-statusIcon.noscript-inactive-glb-emb
-{
- list-style-image: url(glb-emb16.png);
-}
-
-
-.noscript-inactive-subprt,
-#noscript-tbb.noscript-inactive-subprt,
-#noscript-statusIcon.noscript-inactive-subprt,
-.noscript-inactive-prt,
-#noscript-tbb.noscript-inactive-prt,
-#noscript-statusIcon.noscript-inactive-prt
-{
- list-style-image: url(inactive-prt16.png);
-}
-
-.noscript-inactive-emb,
-#noscript-tbb.noscript-inactive-emb,
-#noscript-statusIcon.noscript-inactive-emb
-{
- list-style-image: url(inactive-emb16.png);
-}
-
-.noscript-yu,
-#noscript-tbb.noscript-yu,
-#noscript-statusIcon.noscript-yu {
- list-style-image: url(yu16.png);
-}
-
-
-.noscript-glb,
-#noscript-tbb.noscript-glb,
-#noscript-statusIcon.noscript-glb,
-.noscript-inactive-glb,
-#noscript-tbb.noscript-inactive-glb,
-#noscript-statusIcon.noscript-inactive-glb {
- list-style-image: url(glb16.png);
-}
-
-.noscript-no.noscript-glb, .noscript-forbid.noscript-glb {
- list-style-image: url(glb-no16.png);
-}
-
-.noscript-inactive-yes,
-#noscript-tbb.noscript-inactive-yes,
-#noscript-statusIcon.noscript-inactive-yes {
- list-style-image: url(inactive-yes16.png);
-}
-.noscript-inactive-no,
-#noscript-tbb.noscript-inactive-no,
-#noscript-statusIcon.noscript-inactive-no,
-#noscript-menu-recent-blocked {
- list-style-image: url(inactive-no16.png);
-}
-
-
-.noscript-inactive-no-emb,
-#noscript-tbb.noscript-inactive-no-emb,
-#noscript-statusIcon.noscript-inactive-no-emb,
-#noscript-menu-recent-blocked {
- list-style-image: url(inactive-no-emb16.png);
-}
-
-.noscript-distrust,
-.noscript-untrusted,
-#noscript-tbb.noscript-untrusted,
-#noscript-tbb.noscript-inactive-untrusted,
-#noscript-statusIcon.noscript-untrusted
-#noscript-statusIcon.noscript-inactive-untrusted
-{
- list-style-image: url(untrusted16.png);
-}
-
-
-
-
-.noscript-inactive-yu,
-#noscript-tbb.noscript-inactive-yu,
-#noscript-statusIcon.noscript-inactive-yu {
- list-style-image: url(inactive-yu16.png);
-}
-
-.noscript-yu-emb, .noscript-inactive-yu-emb,
-#noscript-tbb.noscript-yu-emb, #noscript-tbb.noscript-inactive-yu-emb,
-#noscript-statusIcon.noscript-yu-emb, #noscript-statusIcon.noscript-inactive-yu-emb {
- list-style-image: url(yu-emb16.png);
-}
-
-.noscript-yu-glb, .noscript-inactive-yu-glb,
-#noscript-tbb.noscript-yu-glb, #noscript-tbb.noscript-inactive-yu-glb,
-#noscript-statusIcon.noscript-yu-glb, #noscript-statusIcon.noscript-inactive-yu-glb {
- list-style-image: url(yu-glb16.png);
-}
-
-.noscript-untrusted-glb, .noscript-inactive-untrusted-glb,
-#noscript-tbb.noscript-untrusted-glb, #noscript-tbb.noscript-inactive-untrusted-glb,
-#noscript-statusIcon.noscript-untrusted-glb, #noscript-statusIcon.noscript-inactive-untrusted-glb {
- list-style-image: url(untrusted-glb16.png);
-}
-
-.noscript-https {
- list-style-image: url(https16.png);
-}
-.noscript-abe {
- list-style-image: url(abe16.png);
-}
-
-.noscript-clearclick {
- list-style-image: url(clearclick16.png);
-}
-
-
-.noscript-error {
- color: red !important;
- background: #ffa !important;
-}
-.noscript-error[selected="true"] {
- background: red !important;
- color: #ffa !important;
-}
-
-#noscript-tbb-revoke-temp,
-.noscript-revoke-temp {
- list-style-image: url(revtemp16.png);
-}
-
-.noscript-embed {
- list-style-image: url(embed-no16.png);
-}
-
-.noscript-allow-from.noscript-embed {
- list-style-image: url(embed16.png)
-}
-
-.noscript-ef {
- list-style-image: url(ef16.png);
-}
-
-.noscript-ef.inactive {
- list-style-image: url(ef-no16.png);
-}
-
-
-#noscript-sticky-ui {
- cursor: pointer;
- -moz-binding: url("chrome://noscript/content/noscript.xbl#scrollable-popup");
-}
-
-.noscript-menu, .noscript-menu menupopup {
- background-color: menu !important;
- opacity: 1.0;
- color: menutext;
- border: 1px solid #444;
- padding: 2px;
-}
-
-menupopup[sticky="true"] {
- border: 1px solid #444 !important;
-}
-
-menupopup[sticky="true"][disabled="true"] {
- border: 1px solid #ccc;
- cursor: wait;
- background-color: #ccc;
- color: #888;
-}
-
-#noscript-tbb-revoke-temp[disabled="true"], #noscript-tbb-temp-page[disabled="true"] {
- opacity: .5;
-}
-#noscript-tbb-revoke-temp > .toolbarbutton-icon, #noscript-tbb-temp-page > .toolbarbutton-icon, #noscript-tbb .toolbarbutton-icon[label=NoScript] {
- width: auto !important;
- height: auto !important;
-}
-
-toolbar #noscript-tbb-revoke-temp, toolbar #noscript-tbb-temp-page, toolbar #noscript-tbb {
- max-width: 48px;
-}
-#nav-bar-customization-target > #noscript-tbb {
- max-width: none;
-}
-
-
-#addon-bar > #noscript-tbb .toolbarbutton-text,
-#addon-bar > #noscript-tbb-page .toolbarbutton-text,
-#addon-bar > #noscript-tbb-revoke-temp .toolbarbutton-text
-{ display: none !important }
-#addon-bar > #noscript-tbb .toolbarbutton-icon,
-#addon-bar > #noscript-tbb-page .toolbarbutton-icon,
-#addon-bar > #noscript-tbb-revoke-temp .toolbarbutton-icon,
-#addon-bar[mode="full"] > #noscript-tbb .toolbarbutton-menubutton-button,
-#addon-bar[mode="full"] > #noscript-tbb-page .toolbarbutton-menubutton-button,
-#addon-bar[mode="full"] > #noscript-tbb-revoke-temp .toolbarbutton-menubutton-button
-{ min-width: 16px; display: -moz-box }
-#addon-bar > #noscript-tbb, #addon-bar > #noscript-tbb-page, #addon-bar > #noscript-tbb-revoke-temp
-{ min-width: 16px !important }
-
-notification {
- word-wrap: break-word !important;
-}
-
-.menu-iconic[id*="noscript-"] > .menu-iconic-left,
-.menu-iconic[class*="noscript-"] > .menu-iconic-left,
-.menuitem-iconic[class*="noscript-"] > .menu-iconic-left {
- visibility: visible !important;
-}
-
-#navigator-toolbox > #status-bar { display: none }
diff --git a/extensions/noscript/chrome/skin/classic/noscript/clearclick16.png b/extensions/noscript/chrome/skin/classic/noscript/clearclick16.png
deleted file mode 100644
index 1c8f1c9..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/clearclick16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/close.png b/extensions/noscript/chrome/skin/classic/noscript/close.png
deleted file mode 100644
index e559a70..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/close.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/console16.png b/extensions/noscript/chrome/skin/classic/noscript/console16.png
deleted file mode 100644
index 928fd83..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/console16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/content.css b/extensions/noscript/chrome/skin/classic/noscript/content.css
deleted file mode 100644
index 8b13789..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/content.css
+++ /dev/null
@@ -1 +0,0 @@
-
diff --git a/extensions/noscript/chrome/skin/classic/noscript/ef-no16.png b/extensions/noscript/chrome/skin/classic/noscript/ef-no16.png
deleted file mode 100644
index 024e158..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/ef-no16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/ef16.png b/extensions/noscript/chrome/skin/classic/noscript/ef16.png
deleted file mode 100644
index 1adfd74..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/ef16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/emb16.png b/extensions/noscript/chrome/skin/classic/noscript/emb16.png
deleted file mode 100644
index 6944ca9..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/embed-no16.png b/extensions/noscript/chrome/skin/classic/noscript/embed-no16.png
deleted file mode 100644
index 9130c40..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/embed-no16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/embed16.png b/extensions/noscript/chrome/skin/classic/noscript/embed16.png
deleted file mode 100644
index ab9a323..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/embed16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/faq16.png b/extensions/noscript/chrome/skin/classic/noscript/faq16.png
deleted file mode 100644
index 760b88d..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/faq16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/flash16.png b/extensions/noscript/chrome/skin/classic/noscript/flash16.png
deleted file mode 100644
index ee4a1b3..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/flash16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/flash32.png b/extensions/noscript/chrome/skin/classic/noscript/flash32.png
deleted file mode 100644
index 8535f07..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/flash32.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/folder_closed.png b/extensions/noscript/chrome/skin/classic/noscript/folder_closed.png
deleted file mode 100644
index e247603..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/folder_closed.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/folder_open.png b/extensions/noscript/chrome/skin/classic/noscript/folder_open.png
deleted file mode 100644
index d896bf7..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/folder_open.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/font.png b/extensions/noscript/chrome/skin/classic/noscript/font.png
deleted file mode 100644
index b7960db..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/font.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/glb-emb16.png b/extensions/noscript/chrome/skin/classic/noscript/glb-emb16.png
deleted file mode 100644
index 4bcbdd3..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/glb-emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/glb-no16.png b/extensions/noscript/chrome/skin/classic/noscript/glb-no16.png
deleted file mode 100644
index 02d167c..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/glb-no16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/glb16.png b/extensions/noscript/chrome/skin/classic/noscript/glb16.png
deleted file mode 100644
index e0b9084..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/glb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/https16.png b/extensions/noscript/chrome/skin/classic/noscript/https16.png
deleted file mode 100644
index 2ebc4f6..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/https16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/ia.png b/extensions/noscript/chrome/skin/classic/noscript/ia.png
deleted file mode 100644
index 1866fa6..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/ia.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/icon24.png b/extensions/noscript/chrome/skin/classic/noscript/icon24.png
deleted file mode 100644
index 1048eba..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/icon24.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/icon32.png b/extensions/noscript/chrome/skin/classic/noscript/icon32.png
deleted file mode 100644
index 8003d11..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/icon32.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/icon64.png b/extensions/noscript/chrome/skin/classic/noscript/icon64.png
deleted file mode 100644
index 0e528f7..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/icon64.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/icon80.png b/extensions/noscript/chrome/skin/classic/noscript/icon80.png
deleted file mode 100644
index fb62fbe..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/icon80.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-emb16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-emb16.png
deleted file mode 100644
index 02bb8bf..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-glb16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-glb16.png
deleted file mode 100644
index db669e1..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-glb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-no-emb16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-no-emb16.png
deleted file mode 100644
index a8fa907..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-no-emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-no16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-no16.png
deleted file mode 100644
index a1d3ac0..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-no16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-prt16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-prt16.png
deleted file mode 100644
index fe7acd8..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-prt16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-yes16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-yes16.png
deleted file mode 100644
index 4b55619..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-yes16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/inactive-yu16.png b/extensions/noscript/chrome/skin/classic/noscript/inactive-yu16.png
deleted file mode 100644
index 2964bab..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/inactive-yu16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/java16.png b/extensions/noscript/chrome/skin/classic/noscript/java16.png
deleted file mode 100644
index 97602f6..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/java16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/java32.png b/extensions/noscript/chrome/skin/classic/noscript/java32.png
deleted file mode 100644
index 8308284..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/java32.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/mobile.css b/extensions/noscript/chrome/skin/classic/noscript/mobile.css
deleted file mode 100644
index 8510e88..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/mobile.css
+++ /dev/null
@@ -1,67 +0,0 @@
-#noscript-tbb.noscript-fennec, #noscript-statusXss.noscript-fennec {
- -moz-appearance: none;
- background: transparent !important;
- -moz-box-orient: vertical;
- width: 44px;
- height: 44px;
- -moz-user-focus: ignore;
-}
-
-.noscript-options {
- display: none !important;
-}
-
-#noscriptPopupSet menu, #noscriptPopupSet menuitem {
- font-size: 24px;
- padding: 8px;
- margin: 0;
- border: none;
- background: -moz-linear-gradient(#fff, #fff, #fff, #ddd);
- border-top: 1px solid #ddd;
- border-bottom: 1px solid #ccc;
- min-height: 30px;
-}
-
-#noscriptPopupSet menu:hover, #noscriptPopupSet menuitem:hover,
-#noscriptPopupSet menu:focus, #noscriptPopupSet menuitem:focus,
-#noscriptPopupSet menu:active, #noscriptPopupSet menuitem:active,
-#noscriptPopupSet menu:active[active="true"], #noscriptPopupSet menuitem[active="true"]{
- background: -moz-linear-gradient(#ddd, #444, #666, #ddd);
- color: #fff;
-}
-
-#noscriptPopupSet menuseparator {
- padding: 8px 0;
- margin: 0;
- background: #eee;
- border: none;
-}
-
-menupopup[sticky="true"] {
- margin: 0;
-}
-
-.scrollbutton-up, .scrollbutton-down {
- height: 24px !important;
- border: 1px solid #888;
- -moz-image-region: auto;
- background: -moz-linear-gradient(#ddd, #fff, #fff, #eee);
-}
-
-.scrollbutton-up {
- list-style-image: url("chrome://browser/skin/images/arrowup-16.png");
-}
-
-.scrollbutton-down {
- list-style-image: url("chrome://browser/skin/images/arrowdown-16.png");
-}
-
-.scrollbutton-up[disabled="true"] {
- list-style-image: url("chrome://browser/skin/images/arrowupdark-16.png");
- -moz-image-region: auto; /* cut off inheritance */
-}
-
-.scrollbutton-down[disabled="true"] {
- list-style-image: url("chrome://browser/skin/images/arrowdowndark-16.png");
- -moz-image-region: auto; /* cut off inheritance */
-} \ No newline at end of file
diff --git a/extensions/noscript/chrome/skin/classic/noscript/no-emb16.png b/extensions/noscript/chrome/skin/classic/noscript/no-emb16.png
deleted file mode 100644
index eb37a09..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/no-emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/no16.png b/extensions/noscript/chrome/skin/classic/noscript/no16.png
deleted file mode 100644
index b023583..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/no16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/options.css b/extensions/noscript/chrome/skin/classic/noscript/options.css
deleted file mode 100644
index eb25a7f..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/options.css
+++ /dev/null
@@ -1,46 +0,0 @@
-.ia-indent {
- padding-left: 24px;
-}
-
-.text-link {
- text-decoration: none;
-}
-.text-link:hover {
- text-decoration: underline;
-}
-
-tabbox#nsopt-tabsAdvanced > tab image.tab-icon {
- width: 16px !important;
- height: 16px !important;
- max-height: 16px !important;
- max-width: 16px !important;
-}
-
-tabbox#nsopt-tabsAdvanced > tab {
- min-height: 16px;
- marker-offset: 24px;
-}
-
-#imgs-stack {
- -moz-user-focus: normal;
-}
-
-#imgs-stack:focus {
- outline: 1px dotted #444;
-}
-.flexible-cbx {
- white-space: normal;
-}
-
-#urlListDisplay treecols {
- height: 0px;
- overflow: hidden;
-}
-
-#urlListDisplay treechildren::-moz-tree-cell-text(temp) {
- font-style: italic;
-}
-
-#urlListDisplay treechildren::-moz-tree-cell-text(mandatory) {
- color: #999;
-}
diff --git a/extensions/noscript/chrome/skin/classic/noscript/prt16.png b/extensions/noscript/chrome/skin/classic/noscript/prt16.png
deleted file mode 100644
index 45b7ce3..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/prt16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/redirect16.png b/extensions/noscript/chrome/skin/classic/noscript/redirect16.png
deleted file mode 100644
index a03c916..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/redirect16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/revtemp16.png b/extensions/noscript/chrome/skin/classic/noscript/revtemp16.png
deleted file mode 100644
index b54f9fb..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/revtemp16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/somelight16.png b/extensions/noscript/chrome/skin/classic/noscript/somelight16.png
deleted file mode 100644
index ed139ce..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/somelight16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/somelight32.png b/extensions/noscript/chrome/skin/classic/noscript/somelight32.png
deleted file mode 100644
index a7e9635..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/somelight32.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/subprt16.png b/extensions/noscript/chrome/skin/classic/noscript/subprt16.png
deleted file mode 100644
index eb83756..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/subprt16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/temp16.png b/extensions/noscript/chrome/skin/classic/noscript/temp16.png
deleted file mode 100644
index a468951..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/temp16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/unsafe-reload16.png b/extensions/noscript/chrome/skin/classic/noscript/unsafe-reload16.png
deleted file mode 100644
index 5de9b2c..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/unsafe-reload16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/untrusted-glb16.png b/extensions/noscript/chrome/skin/classic/noscript/untrusted-glb16.png
deleted file mode 100644
index 09de467..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/untrusted-glb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/untrusted16.png b/extensions/noscript/chrome/skin/classic/noscript/untrusted16.png
deleted file mode 100644
index e0b9951..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/untrusted16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/webgl16.png b/extensions/noscript/chrome/skin/classic/noscript/webgl16.png
deleted file mode 100644
index 1b5969d..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/webgl16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/webgl32.png b/extensions/noscript/chrome/skin/classic/noscript/webgl32.png
deleted file mode 100644
index af27a3c..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/webgl32.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/xss16.png b/extensions/noscript/chrome/skin/classic/noscript/xss16.png
deleted file mode 100644
index 2804e73..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/xss16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/yes16.png b/extensions/noscript/chrome/skin/classic/noscript/yes16.png
deleted file mode 100644
index cf6ce95..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/yes16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/yu-emb16.png b/extensions/noscript/chrome/skin/classic/noscript/yu-emb16.png
deleted file mode 100644
index 7164ca5..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/yu-emb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/yu-glb16.png b/extensions/noscript/chrome/skin/classic/noscript/yu-glb16.png
deleted file mode 100644
index a13d822..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/yu-glb16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/chrome/skin/classic/noscript/yu16.png b/extensions/noscript/chrome/skin/classic/noscript/yu16.png
deleted file mode 100644
index daaefe5..0000000
--- a/extensions/noscript/chrome/skin/classic/noscript/yu16.png
+++ /dev/null
Binary files differ
diff --git a/extensions/noscript/components/noscriptService.js b/extensions/noscript/components/noscriptService.js
deleted file mode 100644
index dae3792..0000000
--- a/extensions/noscript/components/noscriptService.js
+++ /dev/null
@@ -1,15 +0,0 @@
-Components.utils.import("resource://gre/modules/Services.jsm");
-Services.scriptloader.loadSubScript("chrome://noscript/content/loader.js", this);
-
-Cu.import("resource://gre/modules/XPCOMUtils.jsm");
-
-INCLUDE("Main");
-
-Main.bootstrap();
-
-function NSGetFactory(cid) {
- if (cid.toString() === SERVICE_ID) {
- return ns;
- }
- throw Cr.NS_ERROR_FACTORY_NOT_REGISTERED;
-}
diff --git a/extensions/noscript/defaults/preferences/noscript.js b/extensions/noscript/defaults/preferences/noscript.js
deleted file mode 100644
index 8264271..0000000
--- a/extensions/noscript/defaults/preferences/noscript.js
+++ /dev/null
@@ -1,434 +0,0 @@
-pref("extensions.{73a6fe31-595d-460b-a920-fcc0f8843232}.description", "chrome://noscript/locale/about.properties");
-pref("noscript.autoReload", true);
-pref("noscript.autoReload.global", true);
-pref("noscript.autoReload.allTabs", true);
-pref("noscript.autoReload.allTabsOnPageAction", true);
-pref("noscript.autoReload.allTabsOnGlobal", false);
-pref("noscript.autoReload.onMultiContent", false);
-pref("noscript.autoReload.useHistory", false);
-pref("noscript.autoReload.useHistory.exceptCurrent", true);
-pref("noscript.autoReload.embedders", 1);
-pref("noscript.ctxMenu", true);
-pref("noscript.statusIcon", true);
-pref("noscript.sound", false);
-pref("noscript.sound.oncePerSite", true);
-pref("noscript.notify", true);
-pref("noscript.notify.bottom", true);
-pref("noscript.showAddress", false);
-pref("noscript.showDomain", false);
-pref("noscript.showTemp", true);
-pref("noscript.showPermanent", true);
-pref("noscript.showDistrust", true);
-pref("noscript.showUntrusted", true);
-pref("noscript.showBaseDomain", true);
-pref("noscript.showAbout", true);
-pref("noscript.showGlobal", true);
-pref("noscript.showTempToPerm", true);
-pref("noscript.showRevokeTemp", true);
-pref("noscript.showBlockedObjects", true);
-pref("noscript.showExternalFilters", true);
-pref("noscript.showTempAllowPage", true);
-pref("noscript.showAllowPage", true);
-pref("noscript.mandatory", "[System+Principal] about: about:addons about:blocked about:certerror about:config about:crashes about:feeds about:home about:memory about:neterror about:plugins about:preferences about:privatebrowsing about:sessionrestore about:srcdoc about:support about:tabcrashed blob: chrome: mediasource: moz-extension: moz-safe-about: resource:");
-pref("noscript.default", "about:blank about:pocket-saved about:pocket-signup addons.mozilla.org afx.ms ajax.aspnetcdn.com ajax.googleapis.com bootstrapcdn.com code.jquery.com firstdata.com firstdata.lv gfx.ms google.com googlevideo.com gstatic.com hotmail.com live.com live.net maps.googleapis.com mozilla.net netflix.com nflxext.com nflximg.com nflxvideo.net noscript.net outlook.com passport.com passport.net passportimages.com paypal.com paypalobjects.com securecode.com securesuite.net sfx.ms tinymce.cachefly.net wlxrs.com yahoo.com yahooapis.com yimg.com youtube.com ytimg.com");
-pref("noscript.allowWhitelistUpdates", true);
-pref("noscript.volatilePrivatePermissions", false);
-pref("noscript.showVolatilePrivatePermissionsToggle", true);
-
-pref("noscript.eraseFloatingElements", true);
-
-pref("noscript.bgThumbs.allowed", false);
-pref("noscript.bgThumbs.disableJS", true);
-
-pref("noscript.forbidJava", true);
-pref("noscript.forbidFlash", true);
-pref("noscript.forbidSilverlight", true);
-pref("noscript.forbidPlugins", true);
-pref("noscript.forbidMedia", true);
-pref("noscript.forbidFonts", true);
-pref("noscript.forbidWebGL", false);
-pref("noscript.forbidActiveContentParentTrustCheck", true);
-pref("noscript.forbidIFrames", false);
-pref("noscript.forbidIFramesContext", 3);
-pref("noscript.forbidIFramesParentTrustCheck", true);
-pref("noscript.forbidFrames", false);
-pref("noscript.forbidMixedFrames", true);
-
-pref("noscript.sound.block", "chrome://noscript/skin/block.wav");
-pref("noscript.allowClipboard", false);
-pref("noscript.allowLocalLinks", false);
-pref("noscript.allowLocalLinks.from", "");
-pref("noscript.allowLocalLinks.to", "");
-pref("noscript.allowCachingObjects", true);
-
-pref("noscript.showPlaceholder", true);
-pref("noscript.global", false);
-pref("noscript.globalHttpsWhitelist", false);
-
-pref("noscript.confirmUnblock", true);
-pref("noscript.confirmUnsafeReload", true);
-pref("noscript.statusLabel", false);
-pref("noscript.forbidBookmarklets", false);
-pref("noscript.allowBookmarkletImports", true);
-pref("noscript.allowBookmarks", false);
-pref("noscript.notify.hideDelay", 5);
-pref("noscript.notify.hidePermanent", true);
-
-pref("noscript.notify.hide", false);
-pref("noscript.truncateTitleLen", 255);
-pref("noscript.truncateTitle", true);
-pref("noscript.fixLinks", true);
-
-pref("noscript.noping", true);
-pref("noscript.consoleDump", 0);
-pref("noscript.excaps", true);
-pref("noscript.nselForce", true);
-pref("noscript.nselNever", false);
-pref("noscript.nselNoMeta", true);
-pref("noscript.autoAllow", 0);
-pref("noscript.toolbarToggle", 3);
-pref("noscript.allowPageLevel", 0);
-
-pref("noscript.forbidImpliesUntrust", false);
-pref("noscript.keys.toggle", "ctrl shift VK_BACK_SLASH.|");
-pref("noscript.keys.ui", "ctrl shift S");
-pref("noscript.keys.tempAllowPage", "");
-pref("noscript.keys.revokeTemp", "");
-
-pref("noscript.menuAccelerators", false);
-
-pref("noscript.forbidMetaRefresh", false);
-pref("noscript.forbidMetaRefresh.remember", false);
-pref("noscript.forbidMetaRefresh.notify", true);
-pref("noscript.forbidMetaRefresh.exceptions", "^https?://(?:www|encrypted)\\.google\\.(?:[a-z]{2,3}|[a-z]{2}\\.[a-z]{2,3})/ t.co");
-
-pref("noscript.contentBlocker", false);
-
-pref("noscript.toggle.temp", true);
-pref("noscript.firstRunRedirection", true);
-
-pref("noscript.xss.notify", true);
-pref("noscript.xss.notify.subframes", true);
-pref("noscript.xss.trustReloads", false);
-pref("noscript.xss.trustData", true);
-pref("noscript.xss.trustExternal", true);
-pref("noscript.xss.trustTemp", true);
-pref("noscript.xss.checkInclusions", true);
-pref("noscript.xss.checkInclusions.exceptions", "intensedebate.com/idc/js/");
-pref("noscript.xss.checkCharset.exceptions", "");
-
-pref("noscript.filterXPost", true);
-pref("noscript.filterXGet", true);
-pref("noscript.filterXGetRx", "<+(?=[^<>=\\d. /(-])|[\\\\\"\\x00-\\x07\\x09\\x0B\\x0C\\x0E-\\x1F\\x7F]");
-pref("noscript.filterXGetUserRx", "");
-pref("noscript.filterXExceptions", "^https?://([a-z]+)\\.google\\.(?:[a-z]{1,3}\\.)?[a-z]+/(?:search|custom|\\1)\\?\n^https?://([a-z]*)\\.?search\\.yahoo\\.com/search(?:\\?|/\\1\\b)\n^https?://[a-z]+\\.wikipedia\\.org/wiki/[^\"<>?%]+$\n^https?://translate\\.google\\.com/translate_t[^\"'<>?%]+$\n^https://secure\\.wikimedia\\.org/wikipedia/[a-z]+/wiki/[^\"<>\\?%]+$");
-pref("noscript.filterXExceptions.blogspot", true);
-pref("noscript.filterXExceptions.darla_name", true);
-pref("noscript.filterXExceptions.deviantart", true);
-pref("noscript.filterXExceptions.fbconnect", true);
-pref("noscript.filterXExceptions.ebay", true);
-pref("noscript.filterXExceptions.ggadgets", true);
-pref("noscript.filterXExceptions.letitbit", true);
-pref("noscript.filterXExceptions.livejournal", true);
-pref("noscript.filterXExceptions.lycosmail", true);
-pref("noscript.filterXExceptions.medicare", true);
-pref("noscript.filterXException.photobucket", true);
-pref("noscript.filterXExceptions.printfriendly", true);
-pref("noscript.filterXExceptions.readability", true);
-pref("noscript.filterXExceptions.yahoo", true);
-pref("noscript.filterXExceptions.visa", true);
-pref("noscript.filterXExceptions.verizon", true);
-pref("noscript.filterXExceptions.zendesk", true);
-pref("noscript.filterXExceptions.yt_comments", true);
-
-pref("noscript.protectWindowNameXAssignment", true);
-
-pref("noscript.injectionCheck", 2);
-pref("noscript.injectionCheckPost", true);
-pref("noscript.injectionCheckHTML", true);
-
-pref("noscript.globalwarning", true);
-
-pref("noscript.jsredirectIgnore", false);
-pref("noscript.jsredirectFollow", false);
-pref("noscript.jsredirectForceShow", false);
-
-pref("noscript.removeSMILKeySniffer", true);
-
-pref("noscript.utf7filter", true);
-
-pref("noscript.safeJSRx", "(?:window\\.)?close\\s*\\(\\)");
-
-pref("noscript.badInstall", false);
-
-pref("noscript.fixURI", true);
-pref("noscript.fixURI.exclude", "");
-
-pref("noscript.urivalid.aim", "\\w[^\\\\?&\\x00-\\x1f#]*(?:\\?[^\\\\\\x00-\\x1f#]*(?:#[\\w.@+-]{2,32})?)?");
-pref("noscript.urivalid.mailto", "[^\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f]*");
-
-pref("noscript.forbidExtProtSubdocs", true);
-
-pref("noscript.forbidXBL", 1);
-pref("noscript.forbidXHR", 1);
-
-pref("noscript.whitelistRegExp", "");
-
-pref("noscript.tempGlobal", false);
-
-pref("noscript.lockPrivilegedUI", false);
-
-pref("noscript.collapseObject", false);
-
-pref("noscript.showUntrustedPlaceholder", true);
-
-pref("noscript.jsHack", "");
-pref("noscript.jsHackRegExp", "");
-
-pref("noscript.canonicalFQDN", false);
-
-pref("noscript.allowedMimeRegExp", "");
-pref("noscript.alwaysBlockUntrustedContent", true);
-
-pref("noscript.consoleLog", false);
-
-pref("noscript.dropXssProtection", true);
-pref("noscript.flashPatch", true);
-pref("noscript.silverlightPatch", true);
-
-
-pref("noscript.allowURLBarJS", false);
-pref("noscript.allowURLBarImports", false);
-
-pref("noscript.hideOnUnloadRegExp", "video/.*");
-
-pref("noscript.untrusted", "");
-pref("noscript.untrustedGranularity", 3);
-pref("noscript.requireReloadRegExp", "application/x-vnd\\.moveplayer\\b.*");
-
-pref("noscript.restrictSubdocScripting", false);
-pref("noscript.cascadePermissions", false);
-
-pref("noscript.secureCookies", false);
-pref("noscript.secureCookiesExceptions", "");
-pref("noscript.secureCookiesForced", "");
-pref("noscript.secureCookies.recycle", false);
-pref("noscript.secureCookies.perTab", false);
-
-pref("noscript.httpsForced", "");
-pref("noscript.httpsForcedBuiltIn", "www.youtube.com");
-pref("noscript.httpsDefWhitelist", true);
-pref("noscript.allowHttpsOnly", 0);
-
-pref("noscript.https.showInConsole", true);
-
-pref("noscript.clearClick", 3);
-pref("noscript.clearClick.plugins", true);
-pref("noscript.clearClick.prompt", true);
-pref("noscript.clearClick.debug", false);
-pref("noscript.clearClick.exceptions", ".mail.yahoo.com https://mail.google.com/ *.ebay.com *.photobucket.com .youtube.com");
-pref("noscript.clearClick.subexceptions", "^http://bit(?:ly\\.com|\\.ly)/a/sidebar\\?u= http://*.uservoice.com/*/popin.html?* http://w.sharethis.com/share3x/lightbox.html?* http://disqus.com/embed/* *.disqus.com/*/reply.html* http://www.feedly.com/mini abine:*");
-pref("noscript.clearClick.rapidFireCheck", true);
-pref("noscript.clearClick.threshold", 18);
-
-pref("noscript.emulateFrameBreak", true);
-
-pref("noscript.stickyUI.liveReload", false);
-pref("noscript.stickyUI", true);
-pref("noscript.stickyUI.onKeyboard", true);
-pref("noscript.hoverUI", true);
-pref("noscript.hoverUI.delayEnter", 250);
-pref("noscript.hoverUI.delayStop", 50);
-pref("noscript.hoverUI.delayExit1", 250);
-pref("noscript.hoverUI.delayExit2", 300);
-pref("noscript.hoverUI.excludeToggling", true);
-
-pref("noscript.ignorePorts", true);
-
-pref("noscript.cp.last", true);
-
-pref("noscript.sanitizePaste", true);
-
-pref("noscript.surrogate.enabled", true);
-pref("noscript.surrogate.debug", false);
-pref("noscript.surrogate.sandbox", true);
-pref("noscript.surrogate.matchPrivileged", false);
-pref("noscript.surrogate.2mdn.replacement", "if('Proxy' in window){let _f=function(){}; google=$S(); Object.defineProperty(google,'__noSuchMethod__',{configurable:true,enumerable:false,value:_f});let ima={};ima.AdsManagerLoadedEvent=ima.AdErrorEvent={Type:new Proxy({},{get:function(){return 0}}),};ima.settings=new Proxy({},{get:function(){return _f}});ima.AdsLoader=ima.AdsRequest=ima.AdDisplayContainer=function(){return new Proxy({},{get:function(){return _f}});};google.ima=ima;}");
-pref("noscript.surrogate.2mdn.sources", ".2mdn.net");
-pref("noscript.surrogate.360Haven.sources", "@www.360haven.com");
-pref("noscript.surrogate.360Haven.replacement", "Object.defineProperty(window,'adblock',{get:function() false,set: function() false});Object.defineProperty(window,'google_ad_client',{get: function () { return $S({__noSuchMethod__: function() this})}});Object.defineProperty(window.HTMLBodyElement.prototype,'innerHTML',{get:function() ''});");
-pref("noscript.surrogate.adagionet.sources", ".adagionet.com");
-pref("noscript.surrogate.adagionet.replacement", "adagioWriteTag=adagioWriteBanner=function(){}");
-pref("noscript.surrogate.addthis.sources", "^https?://(?:[^/:]+\\.)?addthis\\.com/.*addthis_widget\\.js");
-pref("noscript.surrogate.addthis.replacement", "addthis=(function(){var f=$S(arguments.callee);return f.__noSuchMethod__=f.data=f.bar=f.dynamic=f.login=f.ad=f.util=f.user=f.session=f})();");
-pref("noscript.surrogate.adfly.sources", "!@^https?://adf.ly/\\w+/?$");
-pref("noscript.surrogate.adfly.replacement", "for(var a=/ysmm = '(.*?)';/gi.exec(document.documentElement.innerHTML)[1],b='',c='',d=0;d<a.length;d++)0==d%2?b+=a.charAt(d):c=a.charAt(d)+c;window.location=atob(b+c).substring(2)");
-pref("noscript.surrogate.ampush.sources", ".ampush.io");
-pref("noscript.surrogate.ampush.replacement", "window.ampt=$S({__noSuchMethod__:function(){}});");
-pref("noscript.surrogate.digg.sources", "!@digg.com/newsbar/*");
-pref("noscript.surrogate.digg.replacement", "window.location.href=document.querySelector('link[rel=canonical]').href");
-pref("noscript.surrogate.dimtus.sources", "!@^http://(?:dimtus|imageteam)\\.(?:com|org)/img-");
-pref("noscript.surrogate.dimtus.replacement", "document.querySelector('.overlay_ad').style.display='none'");
-pref("noscript.surrogate.ga.sources", "*.google-analytics.com");
-pref("noscript.surrogate.ga.replacement", "(function(){var _0=$S(function()_0),_u=function(){};_0.__noSuchMethod__=_0;('ga'in window)||(ga=_u);window.urchinTracker=window._u||_u;window._gaq=$S({__noSuchMethod__:_0,push:function(f){if(typeof f=='function')f();else if(f&&f.shift&&f[0]in this)this[f.shift()].apply(this,f)},_set:function(a,b){if(typeof b=='function')b()},_link:function(h){if(h)location.href=h},_linkByPost:function(f){if(f&&f.submit)f.submit();return true},_getLinkerUrl:function(u){return u},_trackEvent:_0});window._gat=$S({__noSuchMethod__:function(){return _gaq},_getTrackerByName:function(){return {_visitCode:function(){return 0}}}});window.cxApi=$S({__noSuchMethod__:_0,getChosenVariation:function(x){return typeof x == 'number' ? x : x[0]},chooseVariation:function(x){return 0}})})()");
-pref("noscript.surrogate.glinks.replacement", "['focus','mouseover','mousedown','click'].forEach(function(et){addEventListener(et,function(e){var a=e.target,href=a.href&&a.getAttribute&&a.getAttribute('href');if(href&&/^(?:http|\\/url)/.test(href)&&!a._href){a._href=a.href=a.href.replace(/.*\\/url.*[?&](?:url|q)=(http[^&]+).*/,function(a,b)decodeURIComponent(b));do{if(/\\brwt\\(/.test(a.getAttribute('onmousedown')))a.removeAttribute('onmousedown')}while((a=a.parentElement))}},true)})");
-pref("noscript.surrogate.glinks.sources", "!@^https?://[^/]+google\\..*/search");
-pref("noscript.surrogate.googletag.replacement", "if(typeof googletag==='undefined'){googletag={slots:{},cmd:$S({__noSuchMethod__:function(){return $S(this)},push:function(f){return f()}})};}googletag.defineSlot=function(){return $S({__noSuchMethod__:function(){return $S(this)}})};let _gt=googletag;googletag=new Proxy(_gt,{get:function(s,w,e){return w in s?s[w]:function(){return $S({__noSuchMethod__:function(){return googletag;}})};}});let _renderedAds=new Proxy({},{get:function(a,b){return b in a?a[b]:{size:[729,90]};}});let _adsRenderedInfo=new Proxy({get:function(n){return _renderedAds[n];}},{get:function(x,c){return c in x?x[c]:function(){};},set:function(x,c,v){}});Object.defineProperty(googletag,'adsRenderedInfo',{configurable:true,enumerable:true,set:function(){},get:function(){return _adsRenderedInfo;}});");
-pref("noscript.surrogate.googletag.sources", ".googletagservices.com");
-pref("noscript.surrogate.gravatar.sources", ".gravatar.com");
-pref("noscript.surrogate.gravatar.replacement", "Gravatar=$S({my_hash:'', profile_cb:function(){}, init:function(){}, __noSuchMethod__:function(){}})");
-pref("noscript.surrogate.microsoftSupport.replacement", "let c=document.getElementById('contentArea');if(c)c.style.display=''");
-pref("noscript.surrogate.microsoftSupport.sources", "!support.microsoft.com");
-pref("noscript.surrogate.modpagespeed.replacement", "let s=document.querySelector('noscript>meta[http-equiv=refresh]+style');if(s)s.parentNode.removeChild(s)");
-pref("noscript.surrogate.modpagespeed.sources", "!@^https?:");
-pref("noscript.surrogate.qs.sources", "*.quantserve.com");
-pref("noscript.surrogate.qs.replacement", "window.quantserve=function(){}");
-pref("noscript.surrogate.uniblue.sources", "!@.uniblue.com .liutilities.com");
-pref("noscript.surrogate.uniblue.replacement", "Array.forEach(document.links,function(l){if(/^https:\\/\\/store\\./.test(l.href)){l.setAttribute('href',l.href.replace(/.*?:/, ''));l.parentNode.replaceChild(l,l)}})");
-pref("noscript.surrogate.yieldman.sources", "*.yieldmanager.com");
-pref("noscript.surrogate.yieldman.replacement", "rmAddKey=rmAddCustomKey=rmShowAd=rmShowPop=rmShowInterstitial=rmGetQueryParameters=rmGetSize=rmGetWindowUrl=rmGetPubRedirect=rmGetClickUrl=rmReplace=rmTrim=rmUrlEncode=rmCanShowPop=rmCookieExists=rmWritePopFrequencyCookie=rmWritePopExpirationCookie=flashIntalledCookieExists=writeFlashInstalledCookie=flashDetection=rmGetCookie=function(){}");
-pref("noscript.surrogate.popunder.sources", "@^http:\\/\\/[\\w\\-\\.]+\\.[a-z]+ wyciwyg:");
-pref("noscript.surrogate.popunder.replacement", "(function(){var unloading=false;addEventListener('pagehide',function(){unloading=true;setTimeout(function(){unloading=false},100)},true);var cookie=document.__proto__.__lookupGetter__('cookie');document.__proto__.__defineGetter__('cookie',function() {if(unloading)return cookie.apply(this);var c='; popunder=yes; popundr=yes; setover18=1';return(cookie.apply(this).replace(c,'')+c).replace(/^; /, '')});var fid='_FID_'+(Date.now().toString(16));var open=window.__proto__.open;window.__proto__.open=function(url,target,features){try{if(!(/^_(?:top|parent|self)$/i.test(target)||target in frames)){var suspSrc,suspCall,ff=[],ss=new Error().stack.split('\\n').length;if(/popunde?r/i.test(target))return ko();for(var f,ev,aa=arguments;stackSize-->2&&aa.callee&&(f=aa.callee.caller)&&ff.indexOf(f)<0;ff.push(f)){aa=f.arguments;if(!aa)break;ev=aa[0];suspCall=f.name=='doPopUnder';if(!suspSrc)suspSrc=suspCall||/(?:\\bpopunde?r|\\bfocus\\b.*\\bblur|\\bblur\\b.*\\bfocus|[pP]uShown)\\b/.test(f.toSource());if(suspCall||ev&&typeof ev=='object'&&('type' in ev)&&ev.type=='click'&&ev.button===0&&(ev.currentTarget===document||('tagName' in ev.currentTarget)&&'body'==ev.currentTarget.tagName.toLowerCase())&&!(('href' in ev.target)&&ev.target.href&&(ev.target.href.indexOf(url)===0||url.indexOf(ev.target.href)===0))){if(suspSrc)return ko();}}}}catch(e){}return open.apply(null, arguments);function ko(){var fr=document.getElementById(fid)||document.body.appendChild(document.createElement('iframe'));fr.id=fid;fr.src='data:text/html,';fr.style.display='none';var w=fr.contentWindow;w.blur=function(){};return w;}}})()");
-pref("noscript.surrogate.popunder.exceptions", ".meebo.com");
-pref("noscript.surrogate.imdb.sources", "@*.imdb.com/video/*");
-pref("noscript.surrogate.imdb.replacement", "addEventListener('DOMContentLoaded',function(ev){ad_utils.render_ad=function(w){w.location=w.location.href.replace(/.*\\bTRAILER=([^&]+).*/,'$1')}},true)");
-pref("noscript.surrogate.nscookie.sources", "@*.facebook.com");
-pref("noscript.surrogate.nscookie.replacement", "document.cookie='noscript=; domain=.facebook.com; path=/; expires=Thu, 01-Jan-1970 00:00:01 GMT;'");
-pref("noscript.surrogate.imagebam.replacement", "(function(){if(\"over18\" in window){var _do=doOpen;doOpen=function(){};over18();doOpen=_do}else{var e=document.getElementById(Array.slice(document.getElementsByTagName(\"script\")).filter(function(s){return !!s.innerHTML})[0].innerHTML.match(/over18[\\s\\S]*?'([^']+)/)[1]);e.style.display='none'}})()");
-pref("noscript.surrogate.imagebam.sources", "!@*.imagebam.com");
-pref("noscript.surrogate.imagehaven.replacement", "['agreeCont','TransparentBlack'].forEach(function(id){var o=document.getElementById(id);if(o)o.style.display='none'})");
-pref("noscript.surrogate.imagehaven.sources", "!@*.imagehaven.net");
-pref("noscript.surrogate.imgreserve.sources", "!imgreserve.com");
-pref("noscript.surrogate.imgreserve.replacement", "let b=document.querySelector('input[value=\"YES\"]');if(b)b.addEventListener('click',function(){document.cookie='AgeVerification=1';location.href=location},true)");
-pref("noscript.surrogate.interstitialBox.replacement", "__defineSetter__('interstitialBox',function(){});__defineGetter__('interstitialBox',function(){return{}})");
-pref("noscript.surrogate.interstitialBox.sources", "@*.imagevenue.com");
-pref("noscript.surrogate.invodo.sources", ".invodo.com");
-pref("noscript.surrogate.invodo.replacement", "Invodo=$S({__noSuchMethod__:function(){}})");
-pref("noscript.surrogate.googleThumbs.replacement", "(function(){var ss=document.getElementsByTagName('script');var s,t,m,id,i;for(var j=ss.length;j-->0;)if(((s=ss[j])&&(t=s.firstChild&&s.firstChild.nodeValue)&&(id=t.match(/\\w+thumb\\d+/))&&(m=t.match(/['\"](data:[^'\"]+)/)))&&(i=document.getElementById(id)))i.src=m[1].replace(/\\\\(u[0-9a-f]{4}|x[0-9a-f]{2})/ig,function(a,b){return String.fromCharCode(parseInt(b.substring(1), 16))})})()");
-pref("noscript.surrogate.googleThumbs.sources", "!^https?://www\\.google\\.[a-z]+/search");
-pref("noscript.surrogate.amo.replacement", "addEventListener('click',function(e){if(e.button)return;var a=e.target.parentNode;var hash=a.getAttribute('data-hash');if(hash){var b=a.parentNode.parentNode;InstallTrigger.install({x:{URL:a.href,IconURL:b.getAttribute('data-icon'),Hash:hash,toString:function(){return a.href}}});e.preventDefault()}},false)");
-pref("noscript.surrogate.amo.sources", "!https://addons.mozilla.org/");
-pref("noscript.surrogate.ab_adsense.sources", "pagead2.googlesyndication.com");
-pref("noscript.surrogate.ab_adsense.replacement", "gaGlobal={}");
-pref("noscript.surrogate.ab_adscale.sources", "js.adscale.de");
-pref("noscript.surrogate.ab_adscale.replacement", "adscale={}");
-pref("noscript.surrogate.ab_adtiger.sources", "^http://ads\\.adtiger\\.");
-pref("noscript.surrogate.ab_adtiger.replacement", "adspirit_pid={}");
-pref("noscript.surrogate.ab_bidvertiser.sources", "^http://bdv\\.bidvert");
-pref("noscript.surrogate.ab_bidvertiser.replacement", "report_error=function(){}");
-pref("noscript.surrogate.ab_binlayer.sources", "^http://view\\.binlay(?:er)\\.");
-pref("noscript.surrogate.ab_binlayer.replacement", "blLayer={}");
-pref("noscript.surrogate.ab_mirago.sources", "^http://intext\\.mirago\\.");
-pref("noscript.surrogate.ab_mirago.replacement", "HLSysBannerUrl=''");
-pref("noscript.surrogate.ab_mirando.sources", "^http://get\\.mirando\\.");
-pref("noscript.surrogate.ab_mirando.replacement", "Mirando={}");
-pref("noscript.surrogate.facebook_connect.sources", "connect.facebook.net");
-pref("noscript.surrogate.facebook_connect.replacement", "FB=(function(){var f=$S(arguments.callee);return f.__noSuchMethod__=f.Event=f.XFBML=f;})();");
-pref("noscript.surrogate.revsci.sources", "js.revsci.net");
-pref("noscript.surrogate.revsci.replacement", "rsinetsegs=[];DM_addEncToLoc=DM_tag=function(){};");
-pref("noscript.surrogate.adriver.sources", "ad.adriver.ru/cgi-bin/erle.cgi");
-pref("noscript.surrogate.adriver.replacement", "if(top!==self&&top.location.href===location.href)setTimeout('try{document.close();}catch(e){}',100)");
-pref("noscript.surrogate.twitter.sources", "platform.twitter.com");
-pref("noscript.surrogate.twitter.replacement", "twttr=(function(){var f=$S(arguments.callee); var ro = f.__noSuchMethod__=f.events=f.anywhere=f; ro.widgets=$S({__noSuchMethod__:function(){}}); return ro})();");
-pref("noscript.surrogate.plusone.sources", "apis.google.com/js/plusone.js");
-pref("noscript.surrogate.plusone.replacement", "gapi=(function(){var f=$S(arguments.callee);return f.__noSuchMethod__=f.plusone=f;})();");
-pref("noscript.surrogate.disqus-theme.sources", ">.disqus.com/*/build/themes/t_c4ca4238a0b923820dcc509a6f75849b.js*");
-pref("noscript.surrogate.disqus-theme.replacement", "DISQUS.dtpl.actions.register('comments.reply.new.onLoadingStart', function() { DISQUS.dtpl.actions.remove('comments.reply.new.onLoadingStart'); DISQUS.dtpl.actions.remove('comments.reply.new.onLoadingEnd');});");
-pref("noscript.surrogate.skimlinks.sources", ".skimlinks.com/api/");
-pref("noscript.surrogate.skimlinks.replacement", "window.skimlinks=function(){}");
-pref("noscript.surrogate.picbucks.sources", "!*.picbucks.com http://www.imagebax.com/show.php/*");
-pref("noscript.surrogate.picbucks.replacement", "Array.forEach(document.getElementsByTagName('script'), function(s){let m = s.textContent.match(/(?:Lbjs\\.TargetUrl\\s*=\\s*|Array\\s*\\().*(\\bhttp[^'\"]*)/); if (m) { location.href = m[1]; throw 'break'; }})");
-pref("noscript.surrogate.imagebunk.sources", "!http://imagebunk.com/image/*");
-pref("noscript.surrogate.imagebunk.replacement", "document.body.insertBefore(document.getElementById('img_obj'), document.body.firstChild)");
-pref("noscript.surrogate.picsee.sources", "!^https?://picsee\\.net/2\\d.*\\.html");
-pref("noscript.surrogate.picsee.replacement", "location.replace(location.href.replace(/(\\/2\\d{3}[^\\/]*)(.*)\\.html/, '/upload$1/$2'));");
-pref("noscript.surrogate.owasp_antiClickjack.sources", "!^https?://");
-pref("noscript.surrogate.owasp_antiClickjack.replacement", "if(window.top===window&&document.body.offsetWidth===0)['body','documentElement'].forEach(function(e){document[e].style.setProperty('display','unset','important')})");
-pref("noscript.surrogate.gigya.replacement", "gigya=$S({__noSuchMethod__:function(){}, isGigya:true, __initialized:true});gigya.socialize=$S({__noSuchMethod__:function(){}, addEventHandlers:function(){}});gigya.accounts=$S({__noSuchMethod__:function(){}})");
-pref("noscript.surrogate.gigya.sources", ".gigya.com");
-pref("noscript.surrogate.stripe.replacement", "Stripe=$S({__noSuchMethod__:function(){}})");
-pref("noscript.surrogate.stripe.sources", "js.stripe.com");
-pref("noscript.surrogate.wp.sources", "!^.*\\/20\\d{2}\\/\\d{2}\\/\\d{2}\\/");
-pref("noscript.surrogate.wp.replacement", "let s=document.createElement('style');s.textContent='.site{opacity: 1 !important}';document.documentElement.appendChild(s)");
-
-pref("noscript.fakeScriptLoadEvents.enabled", true);
-pref("noscript.fakeScriptLoadEvents.onlyRequireJS", true);
-pref("noscript.fakeScriptLoadEvents.exceptions", "");
-pref("noscript.fakeScriptLoadEvents.docExceptions", "");
-
-pref("noscript.placeholderMinSize", 32);
-pref("noscript.placeholderLongTip", true);
-pref("noscript.placeholderCollapseOnClose", false);
-
-pref("noscript.compat.evernote", true);
-pref("noscript.compat.gnotes", true);
-
-pref("noscript.forbidXSLT", true);
-
-pref("noscript.oldStylePartial", false);
-pref("noscript.proxiedDNS", 0);
-pref("noscript.placesPrefs", false);
-
-pref("noscript.ABE.enabled", true);
-pref("noscript.ABE.siteEnabled", false);
-pref("noscript.ABE.allowRulesetRedir", false);
-pref("noscript.ABE.legacyPrompt", false);
-pref("noscript.ABE.disabledRulesetNames", "");
-pref("noscript.ABE.skipBrowserRequests", true);
-pref("noscript.ABE.notify", true);
-pref("noscript.ABE.notify.namedLoopback", false);
-pref("noscript.ABE.wanIpAsLocal", false);
-pref("noscript.ABE.wanIpCheckURL", "https://secure.informaction.com/ipecho/");
-pref("noscript.ABE.localExtras", "");
-
-pref("noscript.asyncNetworking", true);
-pref("noscript.inclusionTypeChecking", true);
-pref("noscript.inclusionTypeChecking.exceptions", "https://scache.vzw.com/ http://cache.vzw.com .sony-europe.com .amazonaws.com .hp-ww.com .yandex.st cdn.directvid.com/*.jsx");
-pref("noscript.inclusionTypeChecking.checkDynamic", false);
-pref("noscript.nosniff", true);
-
-pref("noscript.recentlyBlockedCount", 10);
-pref("noscript.showRecentlyBlocked", true);
-pref("noscript.recentlyBlockedLevel", 0);
-
-pref("noscript.frameOptions.enabled", true);
-pref("noscript.frameOptions.parentWhitelist", "https://mail.google.com/*");
-pref("noscript.logDNS", false);
-
-
-pref("noscript.subscription.lastCheck", 0);
-pref("noscript.subscription.checkInterval", 24);
-pref("noscript.subscription.trustedURL", "");
-pref("noscript.subscription.untrustedURL", "");
-
-pref("noscript.siteInfoProvider", "https://noscript.net/about/%utf8%;%ace%");
-pref("noscript.alwaysShowObjectSources", false);
-
-pref("noscript.ef.enabled", false);
-
-pref("noscript.showBlankSources", false);
-pref("noscript.preset", "medium");
-
-pref("noscript.forbidBGRefresh", 1);
-pref("noscript.forbidBGRefresh.exceptions", ".mozilla.org");
-
-pref("noscript.toStaticHTML", true);
-pref("noscript.liveConnectInterception", true);
-pref("noscript.audioApiInterception", true);
-
-pref("noscript.doNotTrack.enabled", true);
-pref("noscript.doNotTrack.exceptions", "");
-pref("noscript.doNotTrack.forced", "");
-
-pref("noscript.ajaxFallback.enabled", true);
-pref("noscript.sync.enabled", false);
-
-pref("noscript.ABE.rulesets.SYSTEM", "# Prevent Internet sites from requesting LAN resources.\r\nSite LOCAL\r\nAccept from LOCAL\r\nDeny");
-pref("noscript.ABE.rulesets.USER", "# User-defined rules. Feel free to experiment here.\r\n");
-pref("noscript.ABE.migration", 0);
-
-pref("noscript.smartClickToPlay", true);
-
-pref("noscript.removalWarning", true);
-pref("noscript.middlemouse_temp_allow_main_site", true);
-pref("noscript.webext.enabled", true);
diff --git a/extensions/noscript/install.rdf b/extensions/noscript/install.rdf
deleted file mode 100644
index 4d2fd5b..0000000
--- a/extensions/noscript/install.rdf
+++ /dev/null
@@ -1,102 +0,0 @@
-<?xml version="1.0"?>
-<RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:em="http://www.mozilla.org/2004/em-rdf#">
-
- <Description about="urn:mozilla:install-manifest">
-
- <em:id>{73a6fe31-595d-460b-a920-fcc0f8843232}</em:id>
- <em:name>NoScript</em:name>
- <em:version>5.1.8.5</em:version>
- <em:description>Extra protection for your Firefox: NoScript allows JavaScript, Java (and other plugins) only for trusted domains of your choice (e.g. your home-banking web site). This whitelist based pre-emptive blocking approach prevents exploitation of security vulnerabilities (known and even unknown!) with no loss of functionality... Experts will agree: Firefox is really safer with NoScript :-)</em:description>
- <em:creator>Giorgio Maone</em:creator>
- <em:type>2</em:type>
- <em:updateURL>https://secure.informaction.com/download/classic/?v=5.1.8.5</em:updateURL>
- <em:contributor>aivo (Estonian translation)</em:contributor>
- <em:contributor>Alberto Martínez, EduLeo &amp; Urko (Spanish translation)</em:contributor>
- <em:contributor>Algimantas Margevi&#x10d;ius (Lithuanian translation)</em:contributor>
- <em:contributor>Asaf Bartov &amp; baryoni (Hebrew translation)</em:contributor>
- <em:contributor>Alf and Liesbeth (Dutch translation)</em:contributor>
- <em:contributor>Alexander Sokolov, Sergei Smirnov and negodnik (Russian translation)</em:contributor>
- <em:contributor>Batuhan Çetin, Volkan Gezer and eveterinary (Turkish translation)</em:contributor>
- <em:contributor>Baurzhan Muftakhidinov (Kazakh translation)</em:contributor>
- <em:contributor>Beerboy &amp; Haebaru (Japanese translation)</em:contributor>
- <em:contributor>Carsten Winkler (Danish translation)</em:contributor>
- <em:contributor>Chiou Po-Jung (Chinese Traditional translation)</em:contributor>
- <em:contributor>Dario Ornelas (Portuguese translation)</em:contributor>
- <em:contributor>drAcOniS and Petr Jirsa (Czech translation)</em:contributor>
- <em:contributor>Drive DRKA and Dzmitry Drazdou (Belarusian translation)</em:contributor>
- <em:contributor>Engin Yazılan, Erkan Kaplan &amp; Fathi (Turkish translation)</em:contributor>
- <em:contributor>Georgi Marchev (Bulgarian translation)</em:contributor>
- <em:contributor>Håvard Mork (Norwegian bokmål translation)</em:contributor>
- <em:contributor>Hwasung Kim (Places bookmarklet patch)</em:contributor>
- <em:contributor>Ivan Pesic, dragan021 (Serbian translation)</em:contributor>
- <em:contributor>Ivan Jonoski (Macedonian translation)</em:contributor>
- <em:contributor>Jameka (Swedish translation)</em:contributor>
- <em:contributor>Joan-Josep Bargues (Catalan translation)</em:contributor>
- <em:contributor>Joshua Issac (Malay translation)</em:contributor>
- <em:contributor>Khaled Hosny &amp; Nassim Dhaher (Arabic translation)</em:contributor>
- <em:contributor>Krcko (Croatian translation)</em:contributor>
- <em:contributor>Ian Moody (English GB translation)</em:contributor>
- <em:contributor>LocaLiceR (Hungarian translation)</em:contributor>
- <em:contributor>Lukasz Biegaj &amp; Teo (Polish translation)</em:contributor>
- <em:contributor>Michela Venuto (inspiration)</em:contributor>
- <em:contributor>Mika Pirinen (Finnish translation)</em:contributor>
- <em:contributor>Mindaugas Jakutis (Lithuanian translation)</em:contributor>
- <em:contributor>Mikes Kaszmán István (Hungarian translation)</em:contributor>
- <em:contributor>MozUA (Ukrainian translation)</em:contributor>
- <em:contributor>Pedram Veisi (Persian translation)</em:contributor>
- <em:contributor>Peter Bradley (Welsh translation)</em:contributor>
- <em:contributor>Raryel Costa Souza (Brazilian Portuguese)</em:contributor>
- <em:contributor>regfreak (Indonesian translation)</em:contributor>
- <em:contributor>roebek (Galician translation)</em:contributor>
- <em:contributor>Qen (Thai translation)</em:contributor>
- <em:contributor>seaousak (Korean translation)</em:contributor>
- <em:contributor>SlovakSoft (Slovak translation)</em:contributor>
- <em:contributor>Sonickydon (Greek translation)</em:contributor>
- <em:contributor>Stiepan A. Kovac (Croatian translation)</em:contributor>
- <em:contributor>swarnava (Bengali translation)</em:contributor>
- <em:contributor>Tomaz Macus (Slovenian translation)</em:contributor>
- <em:contributor>Thomas, milupo &amp; Volker Hable (German translation)</em:contributor>
- <em:contributor>tonynguyen and loveleeyoungae (Vietnamese translation)</em:contributor>
- <em:contributor>x10firefox and Ultravioletu (Romanian translation)</em:contributor>
- <em:contributor>Xavier Robin &amp; BlackJack (French translation)</em:contributor>
- <em:contributor>X.F Mao &amp; George C. Tsoi (Simplified Chinese)</em:contributor>
- <em:optionsURL>chrome://noscript/content/noscriptOptions.xul</em:optionsURL>
- <em:homepageURL>https://noscript.net</em:homepageURL>
- <em:iconURL>chrome://noscript/skin/icon32.png</em:iconURL>
- <em:icon64URL>chrome://noscript/skin/icon64.png</em:icon64URL>
- <em:aboutURL>chrome://noscript/content/about.xul</em:aboutURL>
- <em:multiprocessCompatible>true</em:multiprocessCompatible>
- <em:hasEmbeddedWebExtension>true</em:hasEmbeddedWebExtension>
- <em:bootstrap>true</em:bootstrap>
- <!-- Firefox -->
- <em:targetApplication>
- <Description>
- <em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
- <em:minVersion>45.0</em:minVersion>
- <em:maxVersion>56.0</em:maxVersion>
- <em:strictCompatibility>true</em:strictCompatibility>
- </Description>
- </em:targetApplication>
-
- <!-- SeaMonkey -->
- <em:targetApplication>
- <Description>
- <em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
- <em:minVersion>2.42</em:minVersion>
- <em:maxVersion>*</em:maxVersion>
- </Description>
- </em:targetApplication>
- <!-- Pale Moon -->
- <em:targetApplication>
- <Description>
- <em:id>{8de7fcbb-c55c-4fbe-bfc5-fc555c87dbc4}</em:id>
- <em:minVersion>27.0.2</em:minVersion>
- <em:maxVersion>*</em:maxVersion>
- </Description>
- </em:targetApplication>
- </Description>
-
-
-
-
-</RDF>
diff --git a/extensions/noscript/mozilla.cfg b/extensions/noscript/mozilla.cfg
deleted file mode 100644
index cac13e4..0000000
--- a/extensions/noscript/mozilla.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-//
-// sample configuration to lock whitelist using the method explained here:
-// http://ilias.ca/blog/2005/03/locking-mozilla-firefox-settings/
-
-
-// you'd better copy the site list from the "capability.policy.maonoscript.sites"
-// key in the prefs.js file found in a test profile
-lockPref("noscript.default", "informaction.com https://informaction.com flashgot.net https://flashgot.net noscript.net https://noscript.net");
-
-lockPref("noscript.ctxMenu", false); // hide context menu
-lockPref("noscript.statusIcon", false); // hide statusIcon
-lockPref("noscript.notify", false); // hide notification bar
-lockPref("noscript.lockPrivilegedUI"); // disable DOM Inspector and Error Console (which may be used to programmatically unlock the prefs)
diff --git a/extensions/noscript/webextension/legacy.js b/extensions/noscript/webextension/legacy.js
deleted file mode 100644
index 80ed81d..0000000
--- a/extensions/noscript/webextension/legacy.js
+++ /dev/null
@@ -1,36 +0,0 @@
-var legacyPort;
-try {
- let oldBackupCleared = false;
- legacyPort = browser.runtime.connect({name: "legacy"});
- legacyPort.onMessage.addListener(msg => {
- switch(msg.type) {
- case "saveData":
- let backup = msg.data;
- browser.storage.local.set({legacyBackup: backup}).then(() => {
- console.log("NoScript preferences backup on the WebExtension side");
- if (!oldBackupCleared) {
- oldBackupCleared = true;
- browser.storage.local.remove(Object.keys(backup)).then(() => {
- console.log("Old format backup (pre-5.1) cleared");
- }, (e) => {
- console.error(e);
- });
-
- }
- }, (e) => {
- console.error("NoScript failed to back up non-default preference in WebExtension! %o", e);
- });
-
- break;
-
- case "dumpData":
- browser.storage.local.get(null, items => console.log(JSON.stringify(items)));
- break;
- }
- });
- browser.runtime.sendMessage("Hybrid WebExtension NoScript Ready");
-} catch(e) {
- legacyPort = null;
- console.error(e);
-}
-
diff --git a/extensions/noscript/webextension/manifest.json b/extensions/noscript/webextension/manifest.json
deleted file mode 100644
index c03347b..0000000
--- a/extensions/noscript/webextension/manifest.json
+++ /dev/null
@@ -1,28 +0,0 @@
-{
- "manifest_version": 2,
- "name": "NoScript",
- "applications": {
- "gecko": {
- "id": "{73a6fe31-595d-460b-a920-fcc0f8843232}",
- "strict_min_version": "52.0"
- }
- },
- "version": "10.1.0",
- "description": "NoScript Security Suite",
-
- "permissions": [
- "contextMenus",
- "privacy",
- "storage",
- "tabs",
- "unlimitedStorage",
- "webNavigation",
- "webRequest",
- "webRequestBlocking",
- "<all_urls>"
- ],
-
- "background": {
- "scripts": ["legacy.js"]
- }
-}