diff --git a/.gitignore b/.gitignore
index 11d4ec716..3c2aaf799 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,10 +1,9 @@
wappalyzer-chrome.zip
wappalyzer-firefox.xpi
+wappalyzer.xpi
drivers/**/apps.json
drivers/**/wappalyzer.js
drivers/**/icons/*.png
-drivers/firefox-jetpack/data
-
-node_modules/*
\ No newline at end of file
+node_modules/*
diff --git a/README.md b/README.md
index a273f10c0..d3b8982b4 100644
--- a/README.md
+++ b/README.md
@@ -1,14 +1,14 @@
# Wappalyzer
-[Wappalyzer](http://wappalyzer.com/) is a
+[Wappalyzer](https://wappalyzer.com/) is a
[cross-platform](https://github.com/ElbertF/Wappalyzer/wiki/Drivers) utility that uncovers the
technologies used on websites. It detects
-[content management systems](http://wappalyzer.com/categories/cms),
-[web shops](http://wappalyzer.com/categories/web-shops),
-[web servers](http://wappalyzer.com/categories/web-servers),
-[JavaScript frameworks](http://wappalyzer.com/categories/javascript-frameworks),
-[analytics tools](http://wappalyzer.com/categories/analytics) and
-[many more](http://wappalyzer.com/applications).
+[content management systems](https://wappalyzer.com/categories/cms),
+[web shops](https://wappalyzer.com/categories/web-shops),
+[web servers](https://wappalyzer.com/categories/web-servers),
+[JavaScript frameworks](https://wappalyzer.com/categories/javascript-frameworks),
+[analytics tools](https://wappalyzer.com/categories/analytics) and
+[many more](https://wappalyzer.com/applications).
Refer to the [wiki](https://github.com/ElbertF/Wappalyzer/wiki) for
[screenshots](https://github.com/ElbertF/Wappalyzer/wiki/Screenshots), information on how to
@@ -18,5 +18,6 @@ Refer to the [wiki](https://github.com/ElbertF/Wappalyzer/wiki) for
*Licensed under the [GPL](https://github.com/ElbertF/Wappalyzer/blob/master/LICENSE).*
Donate Bitcoin: 16gb4uGDAjaeRJwKVmKr2EXa8x2fmvT8EQ - *Thanks!*
-![QR Code](http://wappalyzer.com/sites/default/themes/wappalyzer/images/bitcoinqrcode.png)
+![QR Code](https://wappalyzer.com/sites/default/themes/wappalyzer/images/bitcoinqrcode.png)
+
diff --git a/drivers/bookmarklet/index.html b/drivers/bookmarklet/index.html
index fbbd2dd74..78bfee9d8 100644
--- a/drivers/bookmarklet/index.html
+++ b/drivers/bookmarklet/index.html
@@ -50,7 +50,7 @@
if ( e !== null ) { d.body.removeChild(e); }
var
- u = 'http://wappalyzer.com/bookmarklet/',
+ u = 'https://wappalyzer.com/bookmarklet/',
t = new Date().getTime(),
c = d.createElement('div'),
p = d.createElement('div'),
diff --git a/drivers/chrome/js/content.js b/drivers/chrome/js/content.js
index e160070dd..7a3bf3e79 100644
--- a/drivers/chrome/js/content.js
+++ b/drivers/chrome/js/content.js
@@ -60,4 +60,4 @@
}
c.init();
-})();
+}());
diff --git a/drivers/chrome/js/driver.js b/drivers/chrome/js/driver.js
index d5b9944e0..1c7565d68 100644
--- a/drivers/chrome/js/driver.js
+++ b/drivers/chrome/js/driver.js
@@ -184,7 +184,7 @@
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function(e) {
- if ( request.readyState == 4 ) { w.log('w.driver.ping: status ' + request.status); }
+ if ( xhr.readyState == 4 ) { w.log('w.driver.ping: status ' + xhr.status); }
};
xhr.send('json=' + encodeURIComponent(JSON.stringify(w.ping)));
diff --git a/drivers/chrome/js/popup.js b/drivers/chrome/js/popup.js
index d21be18fb..e9c7b926e 100644
--- a/drivers/chrome/js/popup.js
+++ b/drivers/chrome/js/popup.js
@@ -63,14 +63,14 @@ document.addEventListener('DOMContentLoaded', function() {
html =
'
' +
- '
' +
+ '' +
'' +
'' + appName + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) + '' +
'';
response.apps[appName].cats.forEach(function(cat) {
html +=
- '
' +
+ '' +
'' + chrome.i18n.getMessage('categoryName' + cat) + '' +
'';
});
diff --git a/drivers/chrome/manifest.json b/drivers/chrome/manifest.json
index 9a7e06ee6..4ce60b463 100644
--- a/drivers/chrome/manifest.json
+++ b/drivers/chrome/manifest.json
@@ -1,5 +1,5 @@
{ "name": "Wappalyzer",
- "homepage_url": "http://wappalyzer.com?utm_source=chrome&utm_medium=context&utm_campaign=extensions",
+ "homepage_url": "https://wappalyzer.com?utm_source=chrome&utm_medium=context&utm_campaign=extensions",
"description": "Identifies software on the web",
"version": "2.27",
"default_locale": "en",
diff --git a/drivers/firefox-jetpack/lib/driver.js b/drivers/firefox-jetpack/lib/driver.js
deleted file mode 100644
index 02acb325a..000000000
--- a/drivers/firefox-jetpack/lib/driver.js
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Jetpack driver
- */
-
-(function() {
- 'use strict';
-
- var
- { Cc, Ci } = require('chrome'),
- tabs = require('tabs'),
- self = require('self'),
- main = require('wappalyzer'),
- w = main.wappalyzer
- ;
-
- w.driver = {
- /**
- * Log messages to console
- */
- log: function(args) {
- console.log(args.message);
- },
-
- /**
- * Initialize
- */
- init: function(callback) {
- }
- }
-
- w.init();
-})();
diff --git a/drivers/firefox-jetpack/package.json b/drivers/firefox-jetpack/package.json
deleted file mode 100644
index 1494c1a67..000000000
--- a/drivers/firefox-jetpack/package.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "id": "wappalyzer@crunchlabz.com",
- "name": "wappalyzer",
- "fullName": "Wappalyzer",
- "description": "Identifies software on the web",
- "icon": "images/icon48.png",
- "icon64": "images/icon64.png",
- "homepage": "http://wappalyzer.com",
- "author": "Elbert Alias",
- "license": "GPLv3",
- "version": "3.0.0",
- "main": "driver"
-}
diff --git a/drivers/firefox-jetpack/test/test-main.js b/drivers/firefox-jetpack/test/test-main.js
deleted file mode 100644
index fdd945127..000000000
--- a/drivers/firefox-jetpack/test/test-main.js
+++ /dev/null
@@ -1,6 +0,0 @@
-var main = require("main");
-
-exports.test_run = function(test) {
- test.pass("Unit test running!");
-};
-
diff --git a/drivers/firefox-jetpack/README.md b/drivers/firefox-sdk/README.md
similarity index 100%
rename from drivers/firefox-jetpack/README.md
rename to drivers/firefox-sdk/README.md
diff --git a/drivers/firefox-sdk/data/css/panel.css b/drivers/firefox-sdk/data/css/panel.css
new file mode 100644
index 000000000..8670ae7df
--- /dev/null
+++ b/drivers/firefox-sdk/data/css/panel.css
@@ -0,0 +1,92 @@
+body {
+ background: #fff;
+ color: #000;
+ font-family: Helvetica, Arial, sans-serif;
+ font-size: 13px;
+ line-height: 16px;
+ margin: 0;
+ min-width: 200px;
+ padding: 15px;
+}
+
+img {
+ display: inline-block;
+ height: 16px;
+ margin-right: 8px;
+ vertical-align: top;
+ width: 16px;
+}
+
+.detected-app {
+ padding: 7px 0;
+}
+
+.detected-app:first-child {
+ padding-top: 0;
+}
+
+.detected-app:last-child {
+ border: none;
+ padding-bottom: 0;
+}
+
+ .detected-app a {
+ color: #000;
+ display: block;
+ text-decoration: none;
+ }
+
+ .detected-app a:hover .label {
+ text-decoration: underline;
+ }
+
+ .detected-app a:hover .category {
+ text-decoration: underline;
+ }
+
+.label {
+ font-weight: bold;
+}
+
+.category {
+ color: #999;
+ display: block;
+ margin: 5px 0 0 24px;
+}
+
+.empty {
+ color: #999;
+ font-style: italic;
+ text-align: center;
+}
+
+#buttons {
+ margin-top: 12px;
+ overflow: hidden;
+}
+
+ #buttons button {
+ height: 32px;
+ }
+
+#analyze-headers {
+ float: left;
+ width: 158px;
+}
+
+ #analyze-headers.pending {
+ background-image: url('../images/pending2.gif');
+ background-position: center center;
+ background-repeat: no-repeat;
+ text-indent: -999px;
+ }
+
+#options {
+ background-image: url('../images/options.png');
+ background-position: center center;
+ background-repeat: no-repeat;
+ float: right;
+ height: 32px;
+ min-width: 32px;
+ width: 32px;
+}
diff --git a/drivers/firefox-sdk/data/images/icon32.png b/drivers/firefox-sdk/data/images/icon32.png
new file mode 100644
index 000000000..37a4df7b7
Binary files /dev/null and b/drivers/firefox-sdk/data/images/icon32.png differ
diff --git a/drivers/firefox-sdk/data/images/icon32_hot.png b/drivers/firefox-sdk/data/images/icon32_hot.png
new file mode 100644
index 000000000..a8356656b
Binary files /dev/null and b/drivers/firefox-sdk/data/images/icon32_hot.png differ
diff --git a/drivers/firefox-sdk/data/js/content.js b/drivers/firefox-sdk/data/js/content.js
new file mode 100644
index 000000000..35559c4dd
--- /dev/null
+++ b/drivers/firefox-sdk/data/js/content.js
@@ -0,0 +1,72 @@
+(function() {
+ 'use strict';
+
+ var
+ data = {},
+ lastEnv = [],
+ prefs = sendSyncMessage('wappalyzer', { action: 'get prefs' })[0]
+ ;
+
+ addEventListener('DOMContentLoaded', function() {
+ removeEventListener('DOMContentLoaded', onLoad, false);
+
+ onLoad();
+ }, false);
+
+ function onLoad() {
+ if ( content.document.contentType != 'text/html' ) {
+ return;
+ }
+
+ if ( prefs.analyzeJavaScript && prefs.analyzeOnLoad ) {
+ content.document.documentElement.addEventListener('load', function() {
+ var env = Object.keys(content.wrappedJSObject).slice(0, 500);
+
+ lastEnv = env;
+
+ // Only analyze new variables
+ env = { env: env.filter(function(i) { return lastEnv.indexOf(i) === -1; }) };
+
+ if ( env.length ) {
+ sendAsyncMessage('wappalyzer', {
+ action: 'analyze',
+ analyze: { env: env }
+ });
+ }
+
+ env = null;
+
+ removeEventListener('load', onLoad, true);
+ }, true);
+ }
+
+ // HTML
+ var html = content.document.documentElement.outerHTML;
+
+ // Comments outside HTML
+ //if ( content.document.lastChild.nodeType === 8 ) {
+ //content.alert(content.document.lastChild.nodeValue);
+ //}
+
+ if ( html.length > 50000 ) {
+ html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
+ }
+
+ data = { html: html };
+
+ if ( prefs.analyzeJavaScript ) {
+ data.env = Object.keys(content.wrappedJSObject).slice(0, 500);
+
+ lastEnv = data.env;
+ }
+
+ sendAsyncMessage('wappalyzer', {
+ action: 'analyze',
+ hostname: content.location.hostname,
+ url: content.location.href,
+ analyze: data
+ });
+
+ data = null;
+ }
+})();
diff --git a/drivers/firefox-sdk/data/js/panel.js b/drivers/firefox-sdk/data/js/panel.js
new file mode 100644
index 000000000..eb68f80b9
--- /dev/null
+++ b/drivers/firefox-sdk/data/js/panel.js
@@ -0,0 +1,36 @@
+(function() {
+ self.port.on('displayApps', function(message) {
+ var detectedApps = document.getElementById('detected-apps');
+
+ detectedApps.innerHTML = '';
+
+ if ( message.tabCache.count > 0 ) {
+ for ( appName in message.tabCache.appsDetected ) {
+ confidence = message.tabCache.appsDetected[appName].confidenceTotal;
+ version = message.tabCache.appsDetected[appName].version;
+
+ html =
+ '
';
+
+ detectedApps.innerHTML = detectedApps.innerHTML + html;
+ }
+ }
+
+ self.port.emit('resize', document.body.offsetHeight);
+ });
+}());
diff --git a/drivers/firefox-sdk/data/js/tab.js b/drivers/firefox-sdk/data/js/tab.js
new file mode 100644
index 000000000..78c0e61d7
--- /dev/null
+++ b/drivers/firefox-sdk/data/js/tab.js
@@ -0,0 +1,31 @@
+(function() {
+ var lastEnv = [];
+
+ if ( document.contentType === 'text/html' ) {
+ var
+ html = document.documentElement.outerHTML
+ env = [];
+
+ self.port.emit('log', 'init');
+
+ if ( html.length > 50000 ) {
+ html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
+ }
+
+ self.port.emit('analyze', {
+ hostname: location.hostname,
+ url: location.href,
+ analyze: { html: html }
+ });
+
+ setTimeout(function() {
+ var env = Object.keys(unsafeWindow).slice(0, 500);
+
+ self.port.emit('analyze', {
+ hostname: location.hostname,
+ url: location.href,
+ analyze: { env: env }
+ });
+ }, 1000);
+ }
+}());
diff --git a/drivers/firefox-sdk/data/panel.html b/drivers/firefox-sdk/data/panel.html
new file mode 100644
index 000000000..b64badd09
--- /dev/null
+++ b/drivers/firefox-sdk/data/panel.html
@@ -0,0 +1,12 @@
+
+
+
+
+
Panel
+
+
+
+
+
+
+
diff --git a/drivers/firefox-jetpack/doc/main.md b/drivers/firefox-sdk/doc/main.md
similarity index 100%
rename from drivers/firefox-jetpack/doc/main.md
rename to drivers/firefox-sdk/doc/main.md
diff --git a/drivers/firefox-jetpack/images/icon128.png b/drivers/firefox-sdk/images/icon128.png
similarity index 100%
rename from drivers/firefox-jetpack/images/icon128.png
rename to drivers/firefox-sdk/images/icon128.png
diff --git a/drivers/firefox-jetpack/images/icon16.png b/drivers/firefox-sdk/images/icon16.png
similarity index 100%
rename from drivers/firefox-jetpack/images/icon16.png
rename to drivers/firefox-sdk/images/icon16.png
diff --git a/drivers/firefox-jetpack/images/icon16_hot.png b/drivers/firefox-sdk/images/icon16_hot.png
similarity index 100%
rename from drivers/firefox-jetpack/images/icon16_hot.png
rename to drivers/firefox-sdk/images/icon16_hot.png
diff --git a/drivers/firefox-jetpack/images/icon48.png b/drivers/firefox-sdk/images/icon48.png
similarity index 100%
rename from drivers/firefox-jetpack/images/icon48.png
rename to drivers/firefox-sdk/images/icon48.png
diff --git a/drivers/firefox-jetpack/images/icon64.png b/drivers/firefox-sdk/images/icon64.png
similarity index 100%
rename from drivers/firefox-jetpack/images/icon64.png
rename to drivers/firefox-sdk/images/icon64.png
diff --git a/drivers/firefox-sdk/lib/driver.js b/drivers/firefox-sdk/lib/driver.js
new file mode 100644
index 000000000..a798aa451
--- /dev/null
+++ b/drivers/firefox-sdk/lib/driver.js
@@ -0,0 +1,169 @@
+(function() {
+ 'use strict';
+
+ var
+ main = require('wappalyzer'),
+ w = main.wappalyzer,
+ tabCache = {},
+ categoryNames = {},
+ data = require('sdk/self').data,
+ tabs = require('sdk/tabs'),
+ panel = require('sdk/panel').Panel({
+ width: 250,
+ height: 50,
+ contentURL: data.url('panel.html'),
+ contentScriptFile: data.url('js/panel.js')
+ }),
+ widget = require('sdk/widget').Widget({
+ id: 'wappalyzer',
+ label: 'Wappalyzer',
+ contentURL: data.url('images/icon32.png'),
+ panel: panel
+ });
+
+ tabs.on('open', function(tab) {
+ tabCache[tab.id] = {
+ count: 0,
+ appsDetected: [],
+ analyzed: []
+ };
+ });
+
+ tabs.on('close', function(tab) {
+ tabCache[tab.id] = null;
+ });
+
+ tabs.on('activate', function(tab) {
+ w.driver.displayApps();
+
+ tabs.activeTab.on('ready', function(tab) {
+ var worker = tab.attach({
+ contentScriptFile: data.url('js/tab.js')
+ });
+
+ worker.port.on('analyze', function(message) {
+ w.analyze(message.hostname, message.url, message.analyze);
+ });
+
+ worker.port.on('log', function(message) {
+ w.log('[ tab.js ] ' + message);
+ });
+ });
+ });
+
+ panel.port.on('resize', function(height) {
+ panel.height = height;
+ });
+
+ w.driver = {
+ /**
+ * Log messages to console
+ */
+ log: function(args) {
+ console.log(args.message);
+ },
+
+ /**
+ * Initialize
+ */
+ init: function(callback) {
+ var json = JSON.parse(data.load('apps.json'));
+
+ w.apps = json.apps;
+ w.categories = json.categories;
+
+ for ( var id in w.categories ) {
+ categoryNames[id] = require('sdk/l10n').get('cat' + id);
+ }
+
+ for each ( var tab in tabs ) {
+ tabCache[tab.id] = {
+ count: 0,
+ appsDetected: [],
+ analyzed: []
+ };
+ }
+ },
+
+ displayApps: function() {
+ var count = w.detected[tabs.activeTab.url] ? Object.keys(w.detected[tabs.activeTab.url]).length.toString() : '0';
+
+ w.log('display apps');
+
+ tabCache[tabs.activeTab.id].count = count;
+ tabCache[tabs.activeTab.id].appsDetected = w.detected[tabs.activeTab.url];
+
+ widget.contentURL = data.url('images/icon32.png');
+
+ if ( count > 0 ) {
+ // Find the main application to display
+ var i, appName, found = false;
+
+ widget.contentURL = data.url('images/icon32_hot.png'),
+
+ w.driver.categoryOrder.forEach(function(match) {
+ for ( appName in w.detected[tabs.activeTab.url] ) {
+ w.apps[appName].cats.forEach(function(cat) {
+ if ( cat == match && !found ) {
+ widget.contentURL = data.url('images/icons/' + appName + '.png'),
+
+ found = true;
+ }
+ });
+ }
+ });
+ };
+
+ panel.port.emit('displayApps', { tabCache: tabCache[tabs.activeTab.id], apps: w.apps, categories: w.categories, categoryNames: categoryNames });
+ },
+
+ ping: function() {
+ w.log('ping');
+ },
+
+ categoryOrder: [ // Used to pick the main application
+ 1, // CMS
+ 11, // Blog
+ 6, // Web Shop
+ 2, // Message Board
+ 8, // Wiki
+ 13, // Issue Tracker
+ 30, // Web Mail
+ 18, // Web Framework
+ 21, // LMS
+ 7, // Photo Gallery
+ 3, // Database Manager
+ 34, // Database
+ 4, // Documentation Tool
+ 9, // Hosting Panel
+ 29, // Search Engine
+ 12, // Javascript Framework
+ 26, // Mobile Framework
+ 25, // Javascript Graphics
+ 22, // Web Server
+ 27, // Programming Language
+ 28, // Operating System
+ 15, // Comment System
+ 20, // Editor
+ 10, // Analytics
+ 32, // Marketing Automation
+ 38, // Media Server
+ 31, // CDN
+ 23, // Cache Tool
+ 17, // Font Script
+ 24, // Rich Text Editor
+ 35, // Map
+ 5, // Widget
+ 14, // Video Player
+ 16, // Captcha
+ 33, // Web Server Extension
+ 37, // Network Device
+ 39, // Webcam
+ 40, // Printer
+ 36, // Advertising Network
+ 19 // Miscellaneous
+ ]
+ }
+
+ w.init();
+}());
diff --git a/drivers/firefox-sdk/locale/de-DE.properties b/drivers/firefox-sdk/locale/de-DE.properties
new file mode 100755
index 000000000..4b4c8314a
--- /dev/null
+++ b/drivers/firefox-sdk/locale/de-DE.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = Keine Applikationen erkannt
+addonBar = Wappalyzer has been placed in the add-on bar.\n\nTo show the add-on bar, close this window and press Ctrl+/.
+
+cat1 = CMS
+cat2 = Message Board
+cat3 = Database Manager
+cat4 = Documentation Tool
+cat5 = Widget
+cat6 = Web Shop
+cat7 = Photo Gallery
+cat8 = Wiki
+cat9 = Hosting Panel
+cat10 = Analytics
+cat11 = Blog
+cat12 = JavaScript Framework
+cat13 = Issue Tracker
+cat14 = Video Player
+cat15 = Comment System
+cat16 = CAPTCHA
+cat17 = Font Script
+cat18 = Web Framework
+cat19 = Miscellaneous
+cat20 = Editor
+cat21 = LMS
+cat22 = Web Server
+cat23 = Cache Tool
+cat24 = Rich Text Editor
+cat25 = Javascript Graphics
+cat26 = Mobile Framework
+cat27 = Programming Language
+cat28 = Operating System
+cat29 = Search Engine
+cat30 = Web mail
+cat31 = CDN
+cat32 = Marketing Automation
+cat33 = Web Server Extension
+cat34 = Database
+cat35 = Map
+cat36 = Advertizing Network
+cat37 = Network Device
+cat38 = Media Server
+cat39 = Webcam
+cat40 = Printer
diff --git a/drivers/firefox-sdk/locale/en-UK.properties b/drivers/firefox-sdk/locale/en-UK.properties
new file mode 100755
index 000000000..ce1f53fbf
--- /dev/null
+++ b/drivers/firefox-sdk/locale/en-UK.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = No applications detected
+addonBar = Wappalyzer has been placed in the add-on bar.\n\nTo show the add-on bar, close this window and press Ctrl+/.
+
+cat1 = CMS
+cat2 = Message Board
+cat3 = Database Manager
+cat4 = Documentation Tool
+cat5 = Widget
+cat6 = Web Shop
+cat7 = Photo Gallery
+cat8 = Wiki
+cat9 = Hosting Panel
+cat10 = Analytics
+cat11 = Blog
+cat12 = JavaScript Framework
+cat13 = Issue Tracker
+cat14 = Video Player
+cat15 = Comment System
+cat16 = CAPTCHA
+cat17 = Font Script
+cat18 = Web Framework
+cat19 = Miscellaneous
+cat20 = Editor
+cat21 = LMS
+cat22 = Web Server
+cat23 = Cache Tool
+cat24 = Rich Text Editor
+cat25 = Javascript Graphics
+cat26 = Mobile Framework
+cat27 = Programming Language
+cat28 = Operating System
+cat29 = Search Engine
+cat30 = Web Mail
+cat31 = CDN
+cat32 = Marketing Automation
+cat33 = Web Server Extension
+cat34 = Database
+cat35 = Map
+cat36 = Advertising Network
+cat37 = Network Device
+cat38 = Media Server
+cat39 = Webcam
+cat40 = Printer
diff --git a/drivers/firefox-sdk/locale/en-US.properties b/drivers/firefox-sdk/locale/en-US.properties
new file mode 100755
index 000000000..ce1f53fbf
--- /dev/null
+++ b/drivers/firefox-sdk/locale/en-US.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = No applications detected
+addonBar = Wappalyzer has been placed in the add-on bar.\n\nTo show the add-on bar, close this window and press Ctrl+/.
+
+cat1 = CMS
+cat2 = Message Board
+cat3 = Database Manager
+cat4 = Documentation Tool
+cat5 = Widget
+cat6 = Web Shop
+cat7 = Photo Gallery
+cat8 = Wiki
+cat9 = Hosting Panel
+cat10 = Analytics
+cat11 = Blog
+cat12 = JavaScript Framework
+cat13 = Issue Tracker
+cat14 = Video Player
+cat15 = Comment System
+cat16 = CAPTCHA
+cat17 = Font Script
+cat18 = Web Framework
+cat19 = Miscellaneous
+cat20 = Editor
+cat21 = LMS
+cat22 = Web Server
+cat23 = Cache Tool
+cat24 = Rich Text Editor
+cat25 = Javascript Graphics
+cat26 = Mobile Framework
+cat27 = Programming Language
+cat28 = Operating System
+cat29 = Search Engine
+cat30 = Web Mail
+cat31 = CDN
+cat32 = Marketing Automation
+cat33 = Web Server Extension
+cat34 = Database
+cat35 = Map
+cat36 = Advertising Network
+cat37 = Network Device
+cat38 = Media Server
+cat39 = Webcam
+cat40 = Printer
diff --git a/drivers/firefox-sdk/locale/es-ES.properties b/drivers/firefox-sdk/locale/es-ES.properties
new file mode 100755
index 000000000..77dfb7ec7
--- /dev/null
+++ b/drivers/firefox-sdk/locale/es-ES.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = Aplicaciones no detectadas
+addonBar = Wappalyzer se ha colocado en la barra de complementos.\n\nPara mostrar la barra de complementos, cierra esta ventana y pulsa Ctrl+/.
+
+cat1 = Gestor de Contenido
+cat2 = Foro
+cat3 = estor de Bases de Datos
+cat4 = Herramienta de Documentación
+cat5 = Widget
+cat6 = Tienda Web
+cat7 = Galería fotográfica
+cat8 = Wiki
+cat9 = Panel de Hosting
+cat10 = Analítica
+cat11 = Blog
+cat12 = Framework JavaScript
+cat13 = Gestor de Incidencias
+cat14 = Reproductor de Vídeo
+cat15 = Sistema de Comentarios
+cat16 = CAPTCHA
+cat17 = Tipografía
+cat18 = Framework Web
+cat19 = Miscelánea
+cat20 = Editor
+cat21 = LMS
+cat22 = Servidor Web
+cat23 = Herramienta de Cache
+cat24 = Editor de Texto Enriquecido
+cat25 = Gráficos Javascript
+cat26 = Framework Móvil
+cat27 = Lenguaje de programación
+cat28 = Sistema Operativo
+cat29 = Motor de Búsqueda
+cat30 = Correo Web
+cat31 = CDN
+cat32 = Automatización de Marketing
+cat33 = Extensión de Servidor Web
+cat34 = Base de Datos
+cat35 = Mapa
+cat36 = Red de Publicidad
+cat37 = Dispositivo de Red
+cat38 = Servidores de Contenido
+cat39 = Webcam
+cat40 = Impresora
diff --git a/drivers/firefox-sdk/locale/fr-FR.properties b/drivers/firefox-sdk/locale/fr-FR.properties
new file mode 100644
index 000000000..e00a4da26
--- /dev/null
+++ b/drivers/firefox-sdk/locale/fr-FR.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = Pas d'applications détectées
+addonBar = Wappalyzer a été placé dans la barre des modules.\n\n Pour voir la barre des modules pressez Ctrl+/ ou Cmd+/.
+
+cat1 = CMS
+cat2 = Forum
+cat3 = Gestionnaire de base de données
+cat4 = Outil de documentation
+cat5 = Widget
+cat6 = Boutique en ligne
+cat7 = Galerie photo
+cat8 = Wiki
+cat9 = Gestionnaires de serveur
+cat10 = Outil de statistiques
+cat11 = Blog
+cat12 = Framework JavaScript
+cat13 = Outils de suivi de problèmes
+cat14 = Lecteur de vidéos
+cat15 = Système de commentaires
+cat16 = CAPTCHA
+cat17 = Script de police
+cat18 = Framework web
+cat19 = Divers
+cat20 = Editeur
+cat21 = LMS
+cat22 = Serveur web
+cat23 = Outil de cache
+cat24 = Editeur WYSIWYG
+cat25 = Graphismes JavaScript
+cat26 = Framework pour mobiles
+cat27 = Language de programmation
+cat28 = Système d'exploitation
+cat29 = Moteur de recherche
+cat30 = Web Mail
+cat31 = CDN
+cat32 = Logiciel de marketing
+cat33 = Web Server Extension
+cat34 = Database
+cat35 = Map
+cat36 = Advertizing Network
+cat37 = Network Device
+cat38 = Media Server
+cat39 = Webcam
+cat40 = Printer
diff --git a/drivers/firefox-sdk/locale/nl-NL.properties b/drivers/firefox-sdk/locale/nl-NL.properties
new file mode 100755
index 000000000..3a2ed07bb
--- /dev/null
+++ b/drivers/firefox-sdk/locale/nl-NL.properties
@@ -0,0 +1,44 @@
+name = Wappalyzer
+noAppsDetected = Geen applications gedetecteerd
+addonBar = Wappalyzer is in de add-on balk geplaatst. Om de add-on te laten zien, sluit dit bericht en druk Ctrl+/.
+
+cat1 = CMS
+cat2 = Forum
+cat3 = Database Manager
+cat4 = Documentatie Tool
+cat5 = Widget
+cat6 = Web Winkel
+cat7 = Photo Gallerij
+cat8 = Wiki
+cat9 = Hosting Paneel
+cat10 = Analytics
+cat11 = Blog
+cat12 = JavaScript Framework
+cat13 = Issue Tracker
+cat14 = Video Speler
+cat15 = Comment Systeem
+cat16 = CAPTCHA
+cat17 = Font Script
+cat18 = Web Framework
+cat19 = Overige
+cat20 = Editor
+cat21 = LMS
+cat22 = Web Server
+cat23 = Cache Tool
+cat24 = Rich Text Editor
+cat25 = Javascript Graphics
+cat26 = Mobiel Framework
+cat27 = Programmeer Taal
+cat28 = Operating System
+cat29 = Zoek Machine
+cat30 = Web Mail
+cat31 = CDN
+cat32 = Marketing Automatisering
+cat33 = Web Server Extentie
+cat34 = Database
+cat35 = Landkaart
+cat36 = Advertentie Netwerk
+cat37 = Network Apparaat
+cat38 = Media Server
+cat39 = Webcam
+cat40 = Printer
diff --git a/drivers/firefox-sdk/package.json b/drivers/firefox-sdk/package.json
new file mode 100644
index 000000000..cb2974343
--- /dev/null
+++ b/drivers/firefox-sdk/package.json
@@ -0,0 +1,12 @@
+{
+ "name": "wappalyzer",
+ "title": "Wappalyzer",
+ "icon": "images/icon48.png",
+ "icon64": "images/icon64.png",
+ "id": "jid1-GkgHgreNo1BZ4g",
+ "description": "Identifies software on the web",
+ "author": "Elbert Alias",
+ "license": "GPLv3",
+ "version": "3.0.0",
+ "main": "driver"
+}
diff --git a/drivers/firefox-sdk/test/test-main.js b/drivers/firefox-sdk/test/test-main.js
new file mode 100644
index 000000000..147f98adf
--- /dev/null
+++ b/drivers/firefox-sdk/test/test-main.js
@@ -0,0 +1,12 @@
+var main = require("./main");
+
+exports["test main"] = function(assert) {
+ assert.pass("Unit test running!");
+};
+
+exports["test main async"] = function(assert, done) {
+ assert.pass("async Unit test running!");
+ done();
+};
+
+require("sdk/test").run(exports);
diff --git a/drivers/firefox/content/js/driver.js b/drivers/firefox/content/js/driver.js
index 504fd3a8a..626b69968 100644
--- a/drivers/firefox/content/js/driver.js
+++ b/drivers/firefox/content/js/driver.js
@@ -340,6 +340,9 @@
d.getElementById('urlbar-icons').insertBefore(d.getElementById('wappalyzer-container'), d.getElementById('urlbar-icons').childNodes[0]);
}
+ w.log('xxx');
+ w.log(CustomizableUI.getPlacementOfWidget('wappalyzer-addonbar'));
+
d.getElementById('wappalyzer-addonbar').setAttribute('collapsed', prefs.getBoolPref('addonBar') ? 'false' : 'true');
}
diff --git a/drivers/firefox/install.rdf b/drivers/firefox/install.rdf
index 8c6e70184..b7a734571 100644
--- a/drivers/firefox/install.rdf
+++ b/drivers/firefox/install.rdf
@@ -33,6 +33,6 @@
chrome://wappalyzer/skin/images/icon32.png
chrome://wappalyzer/skin/images/icon64.png
Elbert Alias
-
http://wappalyzer.com
+
https://wappalyzer.com
diff --git a/drivers/firefox/skin/images/icons-32/Backbone.js.png b/drivers/firefox/skin/images/icons-32/Backbone.js.png
deleted file mode 100644
index e17c0b9c0..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Backbone.js.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Blogger.png b/drivers/firefox/skin/images/icons-32/Blogger.png
deleted file mode 100644
index 17bd56bd6..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Blogger.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Google AdSense.png b/drivers/firefox/skin/images/icons-32/Google AdSense.png
deleted file mode 100644
index 8169e9683..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Google AdSense.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Google PageSpeed.png b/drivers/firefox/skin/images/icons-32/Google PageSpeed.png
deleted file mode 100644
index 8f830f0e4..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Google PageSpeed.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Gravatar.png b/drivers/firefox/skin/images/icons-32/Gravatar.png
deleted file mode 100644
index 81617329d..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Gravatar.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Magento.png b/drivers/firefox/skin/images/icons-32/Magento.png
deleted file mode 100644
index cd5eee00f..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Magento.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/MathJax.png b/drivers/firefox/skin/images/icons-32/MathJax.png
deleted file mode 100644
index 0ad53b380..000000000
Binary files a/drivers/firefox/skin/images/icons-32/MathJax.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Python.png b/drivers/firefox/skin/images/icons-32/Python.png
deleted file mode 100644
index 8fabdeb3f..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Python.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Ruby.png b/drivers/firefox/skin/images/icons-32/Ruby.png
deleted file mode 100644
index 918cd5a15..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Ruby.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Snap.svg.png b/drivers/firefox/skin/images/icons-32/Snap.svg.png
deleted file mode 100644
index df78fc588..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Snap.svg.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Varnish.png b/drivers/firefox/skin/images/icons-32/Varnish.png
deleted file mode 100644
index e547d7467..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Varnish.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Vimeo.png b/drivers/firefox/skin/images/icons-32/Vimeo.png
deleted file mode 100644
index c18915a4f..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Vimeo.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/Webix.png b/drivers/firefox/skin/images/icons-32/Webix.png
deleted file mode 100644
index 0b46bc9de..000000000
Binary files a/drivers/firefox/skin/images/icons-32/Webix.png and /dev/null differ
diff --git a/drivers/firefox/skin/images/icons-32/WooCommerce.png b/drivers/firefox/skin/images/icons-32/WooCommerce.png
deleted file mode 100644
index 9772015ac..000000000
Binary files a/drivers/firefox/skin/images/icons-32/WooCommerce.png and /dev/null differ
diff --git a/links.cmd b/links.cmd
index d6a53d307..7b3276dd5 100644
--- a/links.cmd
+++ b/links.cmd
@@ -34,22 +34,22 @@ mklink /h drivers\firefox\content\js\wappalyzer.js share\js\wappalyzer.js
-:: FIREFOX JETPACK
+:: FIREFOX SKD
::
::Sync icons folder
-::ln -f share\images\icons drivers\firefox-jetpack\images\icons
-if exist drivers\firefox-jetpack\images\icons rmdir /q /s drivers\firefox-jetpack\images\icons
-mklink /j drivers\firefox-jetpack\images\icons share\images\icons
+::ln -f share\images\icons drivers\firefox-sdk\images\icons
+if exist drivers\firefox-sdk\images\icons rmdir /q /s drivers\firefox-jetpack\images\icons
+mklink /j drivers\firefox-sdk\images\icons share\images\icons
::Sync apps JSON
-::ln -f share\apps.json drivers\firefox-jetpack\data
-if exist drivers\firefox-jetpack\data\apps.json del drivers\firefox-jetpack\data\apps.json
-mklink /h drivers\firefox-jetpack\data\apps.json share\apps.json
+::ln -f share\apps.json drivers\firefox-sdk\data
+if exist drivers\firefox-sdk\data\apps.json del drivers\firefox-jetpack\data\apps.json
+mklink /h drivers\firefox-sdk\data\apps.json share\apps.json
::Sync Wappalyzer.js
-::ln -f share\js\wappalyzer.js drivers\firefox-jetpack\lib
-if exist drivers\firefox-jetpack\lib\wappalyzer.js del drivers\firefox-jetpack\lib\wappalyzer.js
-mklink /h drivers\firefox-jetpack\lib\wappalyzer.js share\js\wappalyzer.js
+::ln -f share\js\wappalyzer.js drivers\firefox-sdk\lib
+if exist drivers\firefox-sdk\lib\wappalyzer.js del drivers\firefox-jetpack\lib\wappalyzer.js
+mklink /h drivers\firefox-sdk\lib\wappalyzer.js share\js\wappalyzer.js
@@ -120,4 +120,4 @@ mklink /h drivers\php\apps.json share\apps.json
::Sync Wappalyzer.js
::ln -f share\js\wappalyzer.js drivers\php\js
if exist drivers\php\js\wappalyzer.js del drivers\php\js\wappalyzer.js
-mklink /h drivers\php\js\wappalyzer.js share\js\wappalyzer.js
\ No newline at end of file
+mklink /h drivers\php\js\wappalyzer.js share\js\wappalyzer.js
diff --git a/links.sh b/links.sh
index 8b9beafae..5572552cb 100755
--- a/links.sh
+++ b/links.sh
@@ -1,27 +1,22 @@
#!/bin/sh
ln -f share/images/icons/*.png drivers/firefox/skin/images/icons
-ln -f share/images/icons-32/*.png drivers/firefox/skin/images/icons-32
ln -f share/apps.json drivers/firefox/content
ln -f share/js/wappalyzer.js drivers/firefox/content/js
-ln -f share/images/icons/*.png drivers/firefox-jetpack/images/icons
-ln -f share/images/icons-32/*.png drivers/firefox-jetpack/images/icons
-ln -f share/apps.json drivers/firefox-jetpack/data
-ln -f share/js/wappalyzer.js drivers/firefox-jetpack/lib
+ln -f share/images/icons/*.png drivers/firefox-sdk/data/images/icons
+ln -f share/apps.json drivers/firefox-sdk/data
+ln -f share/js/wappalyzer.js drivers/firefox-sdk/lib
ln -f share/images/icons/*.png drivers/chrome/images/icons
-ln -f share/images/icons-32/*.png drivers/chrome/images/icons
ln -f share/apps.json drivers/chrome
ln -f share/js/wappalyzer.js drivers/chrome/js
ln -f share/images/icons/*.png drivers/bookmarklet/images/icons
-ln -f share/images/icons-32/*.png drivers/bookmarklet/images/icons
ln -f share/apps.json drivers/bookmarklet/json
ln -f share/js/wappalyzer.js drivers/bookmarklet/js
ln -f share/images/icons/*.png drivers/html/images/icons
-ln -f share/images/icons-32/*.png drivers/html/images/icons
ln -f share/apps.json drivers/html
ln -f share/js/wappalyzer.js drivers/html/js
diff --git a/package.json b/package.json
index 6061f8ac7..d5d5a4b18 100644
--- a/package.json
+++ b/package.json
@@ -15,5 +15,5 @@
"bugs": {
"url": "https://github.com/ElbertF/Wappalyzer/issues"
},
- "homepage": "http://wappalyzer.com/"
+ "homepage": "https://wappalyzer.com/"
}
diff --git a/share/apps.json b/share/apps.json
index c180d67fe..3bd67e598 100644
--- a/share/apps.json
+++ b/share/apps.json
@@ -1621,7 +1621,7 @@
"cats": [ 5 ],
"html": "(?: