Merge remote-tracking branch 'upstream/master'

main
Anthony 11 years ago
commit 44415efbfe

3
.gitignore vendored

@ -1,8 +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/*

@ -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
@ -16,3 +16,8 @@ Refer to the [wiki](https://github.com/ElbertF/Wappalyzer/wiki) for
[more](https://github.com/ElbertF/Wappalyzer/wiki/_pages).
*Licensed under the [GPL](https://github.com/ElbertF/Wappalyzer/blob/master/LICENSE).*
Donate Bitcoin: 16gb4uGDAjaeRJwKVmKr2EXa8x2fmvT8EQ - *Thanks!*
![QR Code](https://wappalyzer.com/sites/default/themes/wappalyzer/images/bitcoinqrcode.png)

@ -2,9 +2,11 @@
<html>
<head>
<meta charset="utf-8">
<title>Wappalyzer</title>
<script type="text/javascript" src="js/lib/jquery.min.js"></script>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<style type="text/css">
body {
@ -48,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'),

File diff suppressed because it is too large Load Diff

@ -113,6 +113,7 @@
w.log('func: diplayApps');
var
first = true,
category,
html
;
@ -124,10 +125,10 @@
'<div id="wappalyzer-apps">'
;
if ( w.detected[url] != null && w.detected[url].length ) {
w.detected[url].forEach(function(app, i) {
if ( w.detected[url] != null && Object.keys(w.detected[url]).length ) {
for ( app in w.detected[url] ) {
html +=
'<div class="wappalyzer-app' + ( !i ? ' wappalyzer-first' : '' ) + '">' +
'<div class="wappalyzer-app' + ( first ? ' wappalyzer-first' : '' ) + '">' +
'<a target="_blank" class="wappalyzer-application" href="' + w.config.websiteURL + 'applications/' + app.toLowerCase().replace(/ /g, '-').replace(/[^a-z0-9-]/g, '') + '">' +
'<strong>' +
'<img src="' + w.config.websiteURL + 'bookmarklet/images/icons/' + app + '.png" width="16" height="16"/> ' + app +
@ -135,14 +136,16 @@
'</a>'
;
for ( cat in w.apps[app].cats ) {
category = w.apps[app].cats[cat];
for ( i in w.apps[app].cats ) {
category = w.apps[app].cats[i];
html += '<a target="_blank" class="wappalyzer-category" href="' + w.config.websiteURL + 'categories/' + w.categories[category] + '">' + categoryNames[category] + '</a>';
}
html += '</div>';
});
first = false;
}
} else {
html += '<div id="wappalyzer-empty">No applications detected</div>';
}

@ -0,0 +1,51 @@
{
"github": { "message": "¡Forkea Wappalyzer en GitHub!" },
"twitter": { "message": "Sigue Wappalyzer en Twitter" },
"website": { "message": "Ir a wappalyzer.com" },
"options": { "message": "Opciones de Wappalyzer" },
"optionsSave": { "message": "Guardar opciones" },
"optionsSaved": { "message": "Guardado" },
"optionAutoAnalyzeHeaders": { "message": "Analizar cabeceras automáticamente al hacer clic" },
"optionUpgradeMessage": { "message": "Indicarme actualizaciones" },
"optionTracking": { "message": "Enviar informes anónimos sobre las aplicaciones detectadas a wappalyzer.com para análisis" },
"analyzeHeaders": { "message": "Analizar cabeceras" },
"analyzeHeadersDone": { "message": "Completado" },
"nothingToDo": { "message": "Nada que hacer aquí." },
"noAppsDetected": { "message": "Aplicaciones no detectadas." },
"categoryName1": { "message": "Gestor de Contenido" },
"categoryName2": { "message": "Foro" },
"categoryName3": { "message": "Gestor de Bases de Datos" },
"categoryName4": { "message": "Herramienta de Documentación" },
"categoryName5": { "message": "Widget" },
"categoryName6": { "message": "Tienda Web" },
"categoryName7": { "message": "Galería fotográfica" },
"categoryName8": { "message": "Wiki" },
"categoryName9": { "message": "Panel de Hosting" },
"categoryName10": { "message": "Analítica" },
"categoryName11": { "message": "Blog" },
"categoryName12": { "message": "Framework Javascript" },
"categoryName13": { "message": "Gestor de Incidencias" },
"categoryName14": { "message": "Reproductor de Vídeo" },
"categoryName15": { "message": "Sistema de Comentarios" },
"categoryName16": { "message": "Captcha" },
"categoryName17": { "message": "Tipografía" },
"categoryName18": { "message": "Framework Web" },
"categoryName19": { "message": "Miscelánea" },
"categoryName20": { "message": "Editor" },
"categoryName21": { "message": "LMS" },
"categoryName22": { "message": "Servidor Web" },
"categoryName23": { "message": "Herramienta de Cache" },
"categoryName24": { "message": "Editor de Texto Enriquecido" },
"categoryName25": { "message": "Gráficos Javascript" },
"categoryName26": { "message": "Framework Móvil" },
"categoryName27": { "message": "Lenguaje de programación" },
"categoryName28": { "message": "Sistema Operativo" },
"categoryName29": { "message": "Motor de Búsqueda" },
"categoryName30": { "message": "Correo Web" },
"categoryName31": { "message": "CDN" },
"categoryName32": { "message": "Automatización de Marketing" },
"categoryName33": { "message": "Extensión de Servidor Web" },
"categoryName34": { "message": "Base de Datos" },
"categoryName35": { "message": "Mapa" },
"categoryName36": { "message": "Red de Publicidad" }
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 B

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 797 B

After

Width:  |  Height:  |  Size: 525 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 373 B

@ -60,4 +60,4 @@
}
c.init();
})();
}());

@ -116,11 +116,14 @@
});
if ( firstRun ) {
driver('goToURL', { url: w.config.websiteURL + 'installed', medium: 'install' });
firstRun = false;
}
w.driver.goToURL({ url: w.config.websiteURL + 'installed', medium: 'install' });
firstRun = false;
}
if ( upgraded ) {
driver('goToURL', { url: w.config.websiteURL + 'upgraded', medium: 'upgrade' });
w.driver.goToURL({ url: w.config.websiteURL + 'upgraded', medium: 'upgrade' });
upgraded = false;
}
},
@ -181,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)));

@ -63,14 +63,14 @@ document.addEventListener('DOMContentLoaded', function() {
html =
'<div class="detected-app">' +
'<a target="_blank" href="http://wappalyzer.com/applications/' + appName.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, '') + '?utm_source=chrome&utm_medium=popup&utm_campaign=extensions">' +
'<a target="_blank" href="https://wappalyzer.com/applications/' + appName.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, '') + '?utm_source=chrome&utm_medium=popup&utm_campaign=extensions">' +
'<img src="images/icons/' + appName + '.png"/>' +
'<span class="label">' + appName + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) + '</span>' +
'</a>';
response.apps[appName].cats.forEach(function(cat) {
html +=
'<a target="_blank" href="http://wappalyzer.com/categories/' + response.categories[cat] + '?utm_source=chrome&utm_medium=popup&utm_campaign=extensions">' +
'<a target="_blank" href="https://wappalyzer.com/categories/' + response.categories[cat] + '?utm_source=chrome&utm_medium=popup&utm_campaign=extensions">' +
'<span class="category">' + chrome.i18n.getMessage('categoryName' + cat) + '</span>' +
'</a>';
});

@ -1,7 +1,7 @@
{ "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.26",
"version": "2.29",
"default_locale": "en",
"manifest_version": 2,
"icons": {

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

@ -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();
})();

@ -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"
}

@ -1,6 +0,0 @@
var main = require("main");
exports.test_run = function(test) {
test.pass("Unit test running!");
};

@ -0,0 +1,61 @@
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;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

@ -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;
}
})();

@ -0,0 +1,42 @@
(function() {
self.port.on('displayApps', function(message) {
var
detectedApps = document.getElementById('detected-apps')
empty = document.getElementById('empty');
detectedApps.innerHTML = '';
if ( message.tabCache.count > 0 ) {
empty.style.display = 'none';
for ( appName in message.tabCache.appsDetected ) {
confidence = message.tabCache.appsDetected[appName].confidenceTotal;
version = message.tabCache.appsDetected[appName].version;
html =
'<div class="detected-app">' +
'<a target="_blank" href="https://wappalyzer.com/applications/' + appName.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, '') + '?utm_source=firefox&utm_medium=panel&utm_campaign=extensions">' +
'<img src="images/icons/' + appName + '.png"/>' +
'<span class="label">' + appName + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ) + '</span>' +
'</a>';
message.apps[appName].cats.forEach(function(cat) {
html +=
'<a target="_blank" href="https://wappalyzer.com/categories/' + message.categories[cat] + '?utm_source=firefox&utm_medium=panel&utm_campaign=extensions">' +
'<span class="category">' + message.categoryNames[cat] + '</span>' +
'</a>';
});
html +=
'</a>' +
'</div>';
detectedApps.innerHTML = detectedApps.innerHTML + html;
}
} else {
empty.style.display = 'block';
}
self.port.emit('resize', document.body.offsetHeight);
});
}());

@ -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);
}
}());

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html>
<head>
<title>Panel</title>
<link rel="stylesheet" href="css/panel.css">
</head>
<body>
<div id="empty" data-l10n-id="noAppsDetected"></div>
<div id="detected-apps"></div>
</body>
</html>

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

@ -0,0 +1,324 @@
(function() {
'use strict';
var
{Cc, Ci} = require('chrome'),
main = require('wappalyzer'),
w = main.wappalyzer,
mediator = Cc['@mozilla.org/appshell/window-mediator;1'].getService(Ci.nsIWindowMediator),
doc = mediator.getMostRecentWindow('navigator:browser').document,
urlBar = doc.getElementById('urlbar-icons'),
tabCache = {},
headersCache = {},
categoryNames = {},
data = require('sdk/self').data,
ss = require('sdk/simple-storage'),
sp = require("sdk/simple-prefs"),
tabs = require('sdk/tabs'),
panel = require('sdk/panel').Panel({
width: 250,
height: 50,
contentURL: data.url('panel.html'),
contentScriptFile: data.url('js/panel.js'),
position: { right: 30, top: 30 }
}),
widget = require('sdk/widget').Widget({
id: 'wappalyzer',
label: 'Wappalyzer',
contentURL: data.url('images/icon32.png'),
panel: panel
}),
initTab,
addIcon,
removeIcons;
initTab = function(tab) {
tabCache[tab.id] = { count: 0, appsDetected: [] };
tab.on('ready', function(tab) {
var worker = tab.attach({
contentScriptFile: data.url('js/tab.js')
});
worker.port.on('analyze', function(message) {
var url = message.url.replace(/#.*$/, '');
if ( headersCache[url] !== undefined ) {
message.analyze.headers = headersCache[url];
}
w.analyze(message.hostname, url, message.analyze);
});
worker.port.on('log', function(message) {
w.log('[ tab.js ] ' + message);
});
});
};
tabs.on('open', initTab);
tabs.on('close', function(tab) {
tabCache[tab.id] = null;
});
tabs.on('activate', function(tab) {
w.driver.displayApps();
});
panel.port.on('resize', function(height) {
panel.height = height;
});
addIcon = function(url) {
var
icon = doc.createElement('image'),
show = true;
icon.setAttribute('src', data.url(url));
icon.setAttribute('class', 'wappalyzer-icon');
icon.setAttribute('width', '16');
icon.setAttribute('height', '16');
icon.setAttribute('style', 'cursor: pointer; margin-right: 2px;');
icon.addEventListener('mouseover', function() {
if ( panel.isShowing ) {
show = false;
}
});
icon.addEventListener('mouseout', function() {
show = true;
});
icon.addEventListener('click', function() {
if ( show ) {
panel.show();
show = false;
} else {
panel.hide();
show = true;
}
}, false);
urlBar.appendChild(icon);
return icon;
};
removeIcons = function() {
var icons;
do {
icons = urlBar.getElementsByClassName('wappalyzer-icon');
if ( icons.length ) {
urlBar.removeChild(icons[0]);
}
} while ( icons.length );
};
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'));
try {
var version = require('sdk/self').version;
if ( !ss.storage.version ) {
w.driver.goToURL({ url: w.config.websiteURL + 'installed', medium: 'install' });
} else if ( version !== ss.storage.version ) {
w.driver.goToURL({ url: w.config.websiteURL + 'upgraded', medium: 'upgrade' });
}
ss.storage.version = version;
} catch(e) { }
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 ) {
initTab(tab);
}
sp.on('urlbar', function() {
if ( !sp.prefs.urlbar ) {
removeIcons();
}
});
var httpRequestObserver = {
init: function() {
var observerService = Cc['@mozilla.org/observer-service;1'].getService(Ci.nsIObserverService);
observerService.addObserver(this, 'http-on-examine-response', false);
},
observe: function(subject, topic, data) {
if ( topic == 'http-on-examine-response' ) {
subject.QueryInterface(Ci.nsIHttpChannel);
this.onExamineResponse(subject);
}
},
onExamineResponse: function (subject) {
var uri = subject.URI.spec.replace(/#.*$/, ''); // Remove hash
if ( headersCache.length > 50 ) {
headersCache = {};
}
if ( subject.contentType === 'text/html' ) {
if ( headersCache[uri] === undefined ) {
headersCache[uri] = {};
}
subject.visitResponseHeaders(function(header, value) {
headersCache[uri][header.toLowerCase()] = value;
});
}
}
};
httpRequestObserver.init();
},
goToURL: function(args) {
var url = args.url + ( typeof args.medium === 'undefined' ? '' : '?utm_source=firefox&utm_medium=' + args.medium + '&utm_campaign=extensions');
tabs.open(url);
},
displayApps: function() {
var
url = tabs.activeTab.url.replace(/#.*$/, ''),
count = w.detected[url] ? Object.keys(w.detected[url]).length : 0;
w.log('display apps');
if ( tabCache[tabs.activeTab.id] === undefined ) {
initTab(tabs.activeTab);
}
tabCache[tabs.activeTab.id].count = count;
tabCache[tabs.activeTab.id].appsDetected = w.detected[url];
if ( sp.prefs.urlbar ) {
removeIcons();
// Add icons
if ( count ) {
for ( appName in tabCache[tabs.activeTab.id].appsDetected ) {
addIcon('images/icons/' + appName + '.png');
}
} else {
addIcon('images/icon32.png');
}
}
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[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() {
var Request = require('sdk/request').Request;
if ( Object.keys(w.ping.hostnames).length && sp.prefs.tracking ) {
Request({
url: w.config.websiteURL + 'ping/v2/',
content: { json: encodeURIComponent(JSON.stringify(w.ping)) },
onComplete: function (response) {
w.log('w.driver.ping: status ' + response.status);
}
}).post();
w.log('w.driver.ping: ' + JSON.stringify(w.ping));
w.ping = { hostnames: {} };
}
},
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();
}());

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = Keine Applikationen erkannt
preferences = Weitere Optionen ...
categories = Kategorienverwaltung
tracking_title = Tracken
tracking_description = Sende anonyme Reports über gefundene Applikationen zu Forschungszwecken an wappalyzer.com
urlbar_title = Display icons in URL bar
feedback = Feedback
github = Github
twitter = Twitter
website = Zu wappalyzer.com browsen
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

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = No applications detected
preferences = Options
categories = Categories
tracking_title = Tracking
tracking_description = Anonymously send reports on detected applications to wappalyzer.com for analysis
urlbar_title = Display icons in URL bar
feedback = Feedback
github = Github
twitter = Twitter
website = Go to wappalyzer.com
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

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = No applications detected
preferences = Options
categories = Categories
tracking_title = Tracking
research_description = Anonymously send reports on detected applications to wappalyzer.com for analysis
urlbar_title = Display icons in URL bar
feedback = Feedback
github = Github
twitter = Twitter
website = Go to wappalyzer.com
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

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = Aplicaciones no detectadas
preferences = Opciones
categories = Categorías
tracking_title = Seguimiento
tracking_description = Enviar informes anónimos sobre las aplicaciones detectadas a wappalyzer.com para análisis
urlbar_title = Display icons in URL bar
feedback = Opinión
github = Github
twitter = Twitter
website = Ir a wappalyzer.com
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

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = Pas d'applications détectées
preferences = Plus d'options...
categories = Gérer les catégories
tracking_title = Traçage
tracking_description = Envoyer anonymement des rapports sur les applications détectées à wappalyzer.com pour la recherche
urlbar_title = Display icons in URL bar
feedback = Donner votre avis
github = Github
twitter = Twitter
website = Aller à wappalyzer.com
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

@ -0,0 +1,54 @@
name = Wappalyzer
noAppsDetected = Geen applications gedetecteerd
preferences = Meer opties...
categories = Beheer categorien
tracking_title = Tracking
tracking_description = Verzend anonieme informatie over applicaties naar wappalyzer.com voor onderzoek
urlbar_title = Display icons in URL bar
feedback = Feedback
github = Github
twitter = Twitter
website = Ga naar wappalyzer.com
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

@ -0,0 +1,24 @@
{
"name": "wappalyzer",
"title": "Wappalyzer",
"icon": "images/icon48_hot.png",
"icon64": "images/icon64_hot.png",
"id": "ec8030f7-c20a-464f-9b0e-13a3a9e97384",
"description": "Identifies software on the web",
"author": "Elbert Alias",
"license": "GPLv3",
"version": "3.0.0",
"main": "driver",
"preferences": [{
"name": "tracking",
"title": "Tracking",
"description": "Anonymously send reports on detected applications to wappalyzer.com for analysis",
"type": "bool",
"value": true
}, {
"name": "urlbar",
"title": "Display icons in URL bar",
"type": "bool",
"value": true
}]
}

@ -2,6 +2,7 @@ content wappalyzer content/
locale wappalyzer en-US locale/en-US/
locale wappalyzer de-DE locale/de-DE/
locale wappalyzer fr-FR locale/fr-FR/
locale wappalyzer es-ES locale/es-ES/
skin wappalyzer classic/1.0 skin/
overlay chrome://browser/content/browser.xul chrome://wappalyzer/content/xul/wappalyzer.xul

@ -113,13 +113,15 @@
gBrowser.tabContainer.addEventListener('TabSelect', w.driver.displayApps, false);
if ( firstRun ) {
driver('goToURL', { url: w.config.websiteURL + 'installed', medium: 'install' });
w.driver.goToURL({ url: w.config.websiteURL + 'installed', medium: 'install' });
firstRun = false;
}
if ( upgraded ) {
driver('goToURL', { url: w.config.websiteURL + 'upgraded', medium: 'upgrade' });
setTimeout(function() {
w.driver.goToURL({ url: w.config.websiteURL + 'upgraded', medium: 'upgrade' });
}, 500);
upgraded = false;
}
@ -203,11 +205,11 @@
menuSeparator = d.createElement('menuseparator');
menuItem = d.createElement('menuitem');
menuItem.setAttribute('class', 'wappalyzer-application menuitem-iconic');
menuItem.setAttribute('image', 'chrome://wappalyzer/skin/images/icons/' + app + '.png');
menuItem.setAttribute('label', app + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ));
menuItem.setAttribute('name', app);
menuItem.setAttribute('data-url', w.config.websiteURL + 'applications/' + app.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, ''));
menuItem.setAttribute('class', 'wappalyzer-application menuitem-iconic');
menuItem.setAttribute('image', 'chrome://wappalyzer/skin/images/icons/' + app + '.png');
menuItem.setAttribute('label', app + ( version ? ' ' + version : '' ) + ( confidence < 100 ? ' (' + confidence + '% sure)' : '' ));
menuItem.setAttribute('name', app);
menuItem.setAttribute('data-url', w.config.websiteURL + 'applications/' + app.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, ''));
menuItem.addEventListener('command', function() {
w.driver.goToURL({ url: this.getAttribute('data-url'), medium: 'menu' });

@ -166,7 +166,7 @@
<vbox>
<hbox>
<label class="header" value="Tracking"/>
<label class="header" value="&wappalyzer.tracking;"/>
</hbox>
<groupbox>

@ -3,7 +3,7 @@
<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>wappalyzer@crunchlabz.com</em:id>
<em:version>2.7.4</em:version>
<em:version>2.7.8</em:version>
<em:type>2</em:type>
<em:unpack>true</em:unpack>
@ -12,7 +12,7 @@
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>4.0</em:minVersion>
<em:maxVersion>25.*</em:maxVersion>
<em:maxVersion>28.*</em:maxVersion>
</Description>
</em:targetApplication>
@ -21,7 +21,7 @@
<Description>
<em:id>{92650c4d-4b8e-4d2a-b7eb-24ecf4f6b63a}</em:id>
<em:minVersion>2.0</em:minVersion>
<em:maxVersion>2.24.*</em:maxVersion>
<em:maxVersion>2.26.*</em:maxVersion>
</Description>
</em:targetApplication>
@ -33,6 +33,6 @@
<em:iconURL>chrome://wappalyzer/skin/images/icon32.png</em:iconURL>
<em:icon64URL>chrome://wappalyzer/skin/images/icon64.png</em:icon64URL>
<em:creator>Elbert Alias</em:creator>
<em:homepageURL>http://wappalyzer.com</em:homepageURL>
<em:homepageURL>https://wappalyzer.com</em:homepageURL>
</Description>
</RDF>

@ -0,0 +1,60 @@
<!ENTITY wappalyzer.name "Wappalyzer">
<!ENTITY wappalyzer.help "Wappalyzer - Clic para mas detalles y configuración">
<!ENTITY wappalyzer.showIcons "Mostrar iconos de aplicaciones">
<!ENTITY wappalyzer.preferences "Opciones">
<!ENTITY wappalyzer.addonBar "Colocar en barra de complementos (pulsa Ctrl+/ o Cmd+/ para alternar)">
<!ENTITY wappalyzer.categories "Categorías">
<!ENTITY wappalyzer.performance "Rendimiento">
<!ENTITY wappalyzer.interface "Interfaz">
<!ENTITY wappalyzer.tracking "Seguimiento">
<!ENTITY wappalyzer.research "Enviar informes anónimos sobre las aplicaciones detectadas a wappalyzer.com para análisis">
<!ENTITY wappalyzer.analyzeHeaders "Analizar cabeceras de respuesta">
<!ENTITY wappalyzer.analyzeJavaScript "Analizar JavaScript">
<!ENTITY wappalyzer.analyzeOnload "Analizar eventos onLoad">
<!ENTITY wappalyzer.feedback "Opinión">
<!ENTITY wappalyzer.github "Github">
<!ENTITY wappalyzer.twitter "Twitter">
<!ENTITY wappalyzer.website "Ir a wappalyzer.com">
<!ENTITY wappalyzer.cat1 "Gestores de Contenido">
<!ENTITY wappalyzer.cat2 "Foros">
<!ENTITY wappalyzer.cat3 "Gestores de Bases de Datos">
<!ENTITY wappalyzer.cat4 "Herramientas de Documentación">
<!ENTITY wappalyzer.cat5 "Widgets">
<!ENTITY wappalyzer.cat6 "Tiendas Web">
<!ENTITY wappalyzer.cat7 "Galerías fotográfica">
<!ENTITY wappalyzer.cat8 "Wikis">
<!ENTITY wappalyzer.cat9 "Paneles de Hosting">
<!ENTITY wappalyzer.cat10 "Analítica">
<!ENTITY wappalyzer.cat11 "Blogs">
<!ENTITY wappalyzer.cat12 "Framework JavaScript">
<!ENTITY wappalyzer.cat13 "Gestores de Incidencias">
<!ENTITY wappalyzer.cat14 "Reproductores de Vídeo">
<!ENTITY wappalyzer.cat15 "Sistemas de Comentarios">
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
<!ENTITY wappalyzer.cat17 "Tipografías">
<!ENTITY wappalyzer.cat18 "Framework Web">
<!ENTITY wappalyzer.cat19 "Miscelánea">
<!ENTITY wappalyzer.cat20 "Editores">
<!ENTITY wappalyzer.cat21 "LMS">
<!ENTITY wappalyzer.cat22 "Servidores Web">
<!ENTITY wappalyzer.cat23 "Herramientas de Cache">
<!ENTITY wappalyzer.cat24 "Editores de Texto Enriquecido">
<!ENTITY wappalyzer.cat25 "Gráficos Javascript">
<!ENTITY wappalyzer.cat26 "Framework Móvil">
<!ENTITY wappalyzer.cat27 "Lenguajes de programación">
<!ENTITY wappalyzer.cat28 "Sistemas Operativos">
<!ENTITY wappalyzer.cat29 "Motor de Búsqueda">
<!ENTITY wappalyzer.cat30 "Correos Web">
<!ENTITY wappalyzer.cat31 "CDN">
<!ENTITY wappalyzer.cat32 "Lenguajes de programación">
<!ENTITY wappalyzer.cat33 "Extensiones de Servidor Web">
<!ENTITY wappalyzer.cat34 "Bases de Datos">
<!ENTITY wappalyzer.cat35 "Mapa">
<!ENTITY wappalyzer.cat36 "Redes de Publicidad">
<!ENTITY wappalyzer.cat37 "Dispositivos de Red">
<!ENTITY wappalyzer.cat38 "Servidores de Contenido">
<!ENTITY wappalyzer.cat39 "Cámaras Web">
<!ENTITY wappalyzer.cat40 "Impresoras">

@ -0,0 +1,44 @@
wappalyzer.name = Wappalyzer
wappalyzer.noAppsDetected = Aplicaciones no detectadas
wappalyzer.addonBar = Wappalyzer se ha colocado en la barra de complementos.\n\nPara mostrar la barra de complementos, cierra esta ventana y pulsa Ctrl+/.
wappalyzer.cat1 = Gestor de Contenido
wappalyzer.cat2 = Foro
wappalyzer.cat3 = estor de Bases de Datos
wappalyzer.cat4 = Herramienta de Documentación
wappalyzer.cat5 = Widget
wappalyzer.cat6 = Tienda Web
wappalyzer.cat7 = Galería fotográfica
wappalyzer.cat8 = Wiki
wappalyzer.cat9 = Panel de Hosting
wappalyzer.cat10 = Analítica
wappalyzer.cat11 = Blog
wappalyzer.cat12 = Framework JavaScript
wappalyzer.cat13 = Gestor de Incidencias
wappalyzer.cat14 = Reproductor de Vídeo
wappalyzer.cat15 = Sistema de Comentarios
wappalyzer.cat16 = CAPTCHA
wappalyzer.cat17 = Tipografía
wappalyzer.cat18 = Framework Web
wappalyzer.cat19 = Miscelánea
wappalyzer.cat20 = Editor
wappalyzer.cat21 = LMS
wappalyzer.cat22 = Servidor Web
wappalyzer.cat23 = Herramienta de Cache
wappalyzer.cat24 = Editor de Texto Enriquecido
wappalyzer.cat25 = Gráficos Javascript
wappalyzer.cat26 = Framework Móvil
wappalyzer.cat27 = Lenguaje de programación
wappalyzer.cat28 = Sistema Operativo
wappalyzer.cat29 = Motor de Búsqueda
wappalyzer.cat30 = Correo Web
wappalyzer.cat31 = CDN
wappalyzer.cat32 = Automatización de Marketing
wappalyzer.cat33 = Extensión de Servidor Web
wappalyzer.cat34 = Base de Datos
wappalyzer.cat35 = Mapa
wappalyzer.cat36 = Red de Publicidad
wappalyzer.cat37 = Dispositivo de Red
wappalyzer.cat38 = Servidores de Contenido
wappalyzer.cat39 = Webcam
wappalyzer.cat40 = Impresora

Binary file not shown.

Before

Width:  |  Height:  |  Size: 729 B

After

Width:  |  Height:  |  Size: 716 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 325 B

After

Width:  |  Height:  |  Size: 281 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 694 B

After

Width:  |  Height:  |  Size: 613 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.9 KiB

After

Width:  |  Height:  |  Size: 4.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 714 B

After

Width:  |  Height:  |  Size: 634 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 566 B

After

Width:  |  Height:  |  Size: 373 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 10 KiB

After

Width:  |  Height:  |  Size: 9.5 KiB

@ -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
mklink /h drivers\php\js\wappalyzer.js share\js\wappalyzer.js

@ -1,24 +1,24 @@
#!/bin/sh
ln -f share/images/icons/*.png drivers/firefox/skin/images/icons
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/skin/images/icons
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/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/apps.json drivers/chrome
ln -f share/js/wappalyzer.js drivers/chrome/js
ln -f share/images/icons/*.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/apps.json drivers/bookmarklet/json
ln -f share/js/wappalyzer.js drivers/bookmarklet/js
ln -f share/images/icons/*.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/apps.json drivers/html
ln -f share/js/wappalyzer.js drivers/html/js
ln -f share/images/icons/*.png drivers/html/images/icons
ln -f share/apps.json drivers/html
ln -f share/js/wappalyzer.js drivers/html/js
ln -f share/apps.json drivers/php
ln -f share/js/wappalyzer.js drivers/php/js
ln -f share/apps.json drivers/php
ln -f share/js/wappalyzer.js drivers/php/js

@ -1,5 +1,5 @@
:: package.cmd
:: Copyright (c) 2012 q-- <https://github.com/q-->
:: Copyright (c) 2012-2014 q-- <https://github.com/q-->
::
:: Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
::
@ -8,17 +8,6 @@
:: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@echo off
::Detect HTA host
if exist %windir%\SysWOW64\mshta.exe goto hta64
if exist %windir%\System32\mshta.exe goto hta32
:hta32
set hta=%windir%\System32\mshta.exe
goto endDetection
:hta64
set hta=%windir%\SysWOW64\mshta.exe
goto endDetection
:endDetection
::Links
call links.cmd
@ -26,19 +15,45 @@ call links.cmd
if exist wappalyzer-chrome.zip del wappalyzer-chrome.zip
if exist wappalyzer-firefox.xpi del wappalyzer-firefox.xpi
::Check if where.exe is present
where.exe /Q cmd.exe
IF NOT %ERRORLEVEL%==0 GOTO noWhere
::Check for 7-Zip
where.exe 7z.exe
IF %ERRORLEVEL%==0 GOTO sevenZipIsInPath
::Ok, WHERE can't find 7-Zip. Check at the default install location
IF EXIST "C:\Program Files\7-zip\7z.exe" (
set zip="C:\Program Files\7-zip\7z.exe"
GOTO Package
) ELSE (
echo.7-Zip was not found.
echo.Please download 7-Zip from http://7-zip.org/ and add 7z.exe ^(the command-line edition^) to PATH.
pause
goto :end
)
::WHERE command isn't found. Try it anyway.
::(WHERE is present by default in Vista and newer, older Windows versions require that you install it yourself.)
:noWhere
echo.WHERE.exe was not found on your system.
echo.If the script fails, please download 7-Zip from http://7-zip.org/ and add 7z.exe (the command-line edition) to PATH.
::Prompt to download 7-Zip if necessary
set dl7zfile=.windows_zip\Download 7-Zip.hta
:retry
if not exist .windows_zip\7za.exe cd .windows_zip&%hta% "%cd%\%dl7zfile%"&cd ..&goto retry
::7-Zip command line is found in PATH
:sevenZipIsInPath
set zip=7z.exe
:Package
::Pack Chrome extension
cd drivers\chrome&&..\..\.windows_zip\7za.exe a -tzip -mx9 ..\..\wappalyzer-chrome.zip *
cd drivers\chrome&&%zip% a -tzip -mx9 ..\..\wappalyzer-chrome.zip *
cd..\..
::Pack Firefox extension
cd drivers\firefox&&..\..\.windows_zip\7za.exe a -tzip -mx9 ..\..\wappalyzer-firefox.xpi *
cd drivers\firefox&&%zip% a -tzip -mx9 ..\..\wappalyzer-firefox.xpi *
cd..\..

@ -0,0 +1,19 @@
{
"name": "Wappalyzer",
"version": "1.1.2",
"description": "Wappalyzer is a cross-platform utility that uncovers the technologies used on websites. It detects content management systems, web shops, web servers, JavaScript frameworks, analytics tools and many more.",
"main": "./share/js/wappalyzer.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "https://github.com/ElbertF/Wappalyzer"
},
"author": "ElbertF",
"license": "GNU GPL",
"bugs": {
"url": "https://github.com/ElbertF/Wappalyzer/issues"
},
"homepage": "https://wappalyzer.com/"
}

@ -116,6 +116,11 @@
"html": "aws\\.src = [^<]+caphyon-analytics",
"implies": "Java"
},
"Akamai": {
"website": "akamai.com",
"cats": [ 31 ],
"headers": { "X-Akamai-Transformed": ".*" }
},
"AlloyUI": {
"website": "www.alloyui.com",
"cats": [ 12 ],
@ -155,6 +160,11 @@
"env": "^amp_js_init$",
"implies": "PHP"
},
"Anchor CMS": {
"website": "anchorcms.com",
"cats": [ 1, 11 ],
"meta": { "generator": "Anchor CMS" }
},
"AngularJS": {
"website": "angularjs.org",
"cats": [ 12 ],
@ -257,7 +267,7 @@
"implies": "PHP"
},
"basket.js": {
"website": "http://addyosmani.github.io/basket.js/",
"website": "addyosmani.github.io/basket.js/",
"cats": [ 12 ],
"script": "basket.*\\.js",
"env": "^basket$"
@ -403,7 +413,7 @@
"Chartbeat": {
"website": "chartbeat.com",
"cats": [ 10 ],
"html": "function loadChartbeat\\(\\) {",
"html": "function loadChartbeat\\(\\) \\{",
"script": "chartbeat\\.js"
},
"Cherokee": {
@ -494,7 +504,8 @@
"comScore": {
"website": "comscore.com",
"cats": [ 10 ],
"html": "<iframe[^>]* (?:id=\"comscore\"|scr=[^>]+comscore)",
"script": "\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon",
"html": "<iframe[^>]* (?:id=\"comscore\"|scr=[^>]+comscore)|\\.scorecardresearch\\.com/beacon\\.js|COMSCORE\\.beacon",
"env": "^_?COMSCORE$"
},
"Concrete5": {
@ -607,10 +618,11 @@
"script": "cufon-yui\\.js",
"env": "^Cufon$"
},
"d3": {
"website": "mbostock.github.com/d3",
"D3": {
"website": "d3js.org",
"cats": [ 25 ],
"script": "d3(?:\\.v2)?(?:\\.min)?\\.js"
"script": "d3(?:\\. v[0-9]+)?(?:\\.min)?\\.js",
"env": "^d3$"
},
"Dancer": {
"website": "perldancer.org",
@ -728,7 +740,6 @@
"Dotclear": {
"website": "dotclear.org",
"cats": [ 1 ],
"meta": { "dc.title": ".*" },
"implies": "PHP"
},
"DotNetNuke": {
@ -749,7 +760,7 @@
"DreamWeaver": {
"website": "www.adobe.com/products/dreamweaver",
"cats": [ 20 ],
"html": "(?:<!--[^>]*(?:InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) {)\\;version:\\1"
"html": "(?:<!--[^>]*(?:InstanceBeginEditable|Dreamweaver([^>]+)target|DWLayoutDefaultTable)|function MM_preloadImages\\(\\) \\{)\\;version:\\1"
},
"Drupal": {
"website": "drupal.org",
@ -997,6 +1008,11 @@
"meta": { "generator": "GetSimple" },
"implies": "PHP"
},
"Ghost": {
"website": "ghost.org",
"cats": [ 11 ],
"headers": { "X-Ghost-Cache-Status": ".*" }
},
"GoAhead": {
"website": "embedthis.com/products/goahead/index.html",
"cats": [ 22 ],
@ -1005,8 +1021,8 @@
"Google Analytics": {
"website": "google.com/analytics",
"cats": [ 10 ],
"html": "_gaq\\.push\\(\\['_setAccount",
"script": "(?:\\.google-analytics\\.com/ga\\.js|google-analytics\\.com/urchin\\.js)",
"html": "_gaq\\.push\\(\\['_setAccount|i\\['GoogleAnalyticsObject'\\]|ga\\.async = true",
"script": "(?:\\.google-analytics\\.com\/ga\\.js|\/urchin\\.js|\\.google-analytics\\.com\/analytics\\.js)",
"headers": { "Set-Cookie": "__utma" },
"env": "^gaGlobal$"
},
@ -1108,6 +1124,11 @@
"cats": [ 12 ],
"env": "^Handlebars$"
},
"Hello Bar": {
"cats": [ 5 ],
"script": "(hellobar\\.com/hellobar\\.js|new HelloBar)",
"html": "/hellobar\\.js"
},
"Hiawatha": {
"website": "hiawatha-webserver.org",
"cats": [ 22 ],
@ -1152,6 +1173,11 @@
"headers": { "Set-Cookie": "_hybris" },
"implies": "Java"
},
"IBM Coremetrics": {
"website": "ibm.com/software/marketing-solutions/coremetrics",
"cats": [ 10 ],
"script": "cmdatatagutils\\.js"
},
"IBM HTTP Server": {
"website": "ibm.com/software/webservers/httpservers",
"cats": [ 22 ],
@ -1196,6 +1222,11 @@
"meta": { "generator": "ImpressPages CMS ([\\d.]+)\\;version:\\1" },
"implies": "PHP"
},
"Incapsula": {
"website": "www.incapsula.com",
"cats": [ 31 ],
"headers": { "X-CDN": "Incapsula" }
},
"Indexhibit": {
"website": "www.indexhibit.org",
"cats": [ 1 ],
@ -1521,6 +1552,11 @@
"cats": [ 11 ],
"url": "\\.livejournal\\.com"
},
"LiveStreet CMS": {
"website": "livestreetcms.com",
"cats": [ 1 ],
"headers": { "X-Powered-By": "LiveStreet CMS" }
},
"Lockerz Share": {
"website": "share.lockerz.com",
"cats": [ 5 ],
@ -1561,12 +1597,24 @@
"cats": [ 13 ],
"html": "<img[^>]+ alt=\"Powered by Mantis Bugtracker"
},
"ManyContacts": {
"website": "www.manycontacts.com",
"cats": [ 5 ],
"html": "\/assets\/js\/manycontacts\\.min\\.js",
"script": "\/assets\/js\/manycontacts\\.min\\.js"
},
"Marketo": {
"website": "www.marketo.com",
"cats": [ 32 ],
"script": "munchkin\\.marketo\\.net/munchkin\\.js",
"env": "^Munchkin$"
},
"MathJax": {
"website": "mathjax.org",
"cats": [ 25 ],
"script": "mathjax.js",
"env": "^MathJax$"
},
"MaxSite CMS": {
"website": "max-3000.com",
"cats": [ 1 ],
@ -1588,10 +1636,10 @@
"cats": [ 5 ],
"html": "(?:<iframe id=\"meebo-iframe\"|Meebo\\(?:'domReady'\\))"
},
"Méthode": {
"Methode": {
"website": "www.eidosmedia.com/solutions",
"cats": [ 1 ],
"env": "^eidosBase$;\\confidence:99",
"env": "^eidosBase$\\;confidence:99",
"html": "<!-- Methode uuid: \"[a-f0-9]+\" ?-->",
"meta": { "eomportal-instanceid": "[0-9]+", "eomportal-id": "[0-9]+", "eomportal-loid": "[0-9.]+", "eomportal-uuid": "[a-f0-9]+", "eomportal-lastUpdate": ".*" }
},
@ -1600,7 +1648,7 @@
"cats": [ 18 ],
"url": "\\.aspx(?:$|\\?)",
"html": "<input[^>]+name=\"__VIEWSTATE",
"headers": { "X-Powered-By": "ASP\\.NET;\\confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1" },
"headers": { "X-Powered-By": "ASP\\.NET\\;confidence:50", "X-AspNet-Version": "(.+)\\;version:\\1" },
"implies": "IIS\\;confidence:50"
},
"Microsoft SharePoint": {
@ -1903,9 +1951,15 @@
"html": "<!--[^>]+published by Open Text Web Solutions",
"implies": "Microsoft ASP.NET"
},
"Ophal": {
"website": "ophal.org",
"cats": [ 1, 11, 18 ],
"headers": { "X-Powered-By": "^Ophal/" }
},
"Optimizely": {
"website": "optimizely.com",
"cats": [ 10 ],
"script": "optimizely\\.com.*\\.js",
"env": "^optimizely$"
},
"Oracle Application Server": {
@ -2052,6 +2106,7 @@
"Piwik": {
"website": "piwik.org",
"cats": [ 10 ],
"script": "piwik\\.js|piwik\\.php",
"html": "var piwikTracker = Piwik\\.getTracker\\(",
"env": [ "^Piwik$", "^_paq$" ]
},
@ -2145,7 +2200,14 @@
"Quick.Cart": {
"website": "opensolution.org",
"cats": [ 6 ],
"html": "<a href=\"[^>]+opensolution\\.org/\">Powered by"
"meta": { "generator": "Quick\\.Cart(?: v([\\d.]+))?\\;version:\\1" },
"html": "<a href=\"[^>]+opensolution\\.org/\">(?:Shopping cart by|Sklep internetowy)"
},
"Quick.CMS": {
"website": "opensolution.org",
"cats": [ 1 ],
"meta": { "generator": "Quick\\.CMS(?: v([\\d.]+))?\\;version:\\1" },
"html": "<a href=\"[^>]+opensolution\\.org/\">CMS by"
},
"RackCache": {
"website": "github.com/rtomayko/rack-cache",
@ -2329,7 +2391,7 @@
"env": "^Shopify$"
},
"Shopware": {
"website": "shopware.de",
"website": "shopware.com",
"cats": [ 6 ],
"meta": { "application-name": "Shopware" },
"script": "shopware\\.js",
@ -2357,8 +2419,10 @@
"script": "sitemeter\\.com/js/counter\\.js\\?site="
},
"SiteCatalyst": {
"website": "www.omniture.com/en/products/online_analytics/sitecatalyst",
"website": "www.omniture.com\/en\/products\/online_analytics\/sitecatalyst",
"cats": [ 10 ],
"script": "\/s_code.js",
"html": "var s_code=s\\.t\\(\\);if\\(s_code\\)document\\.write\\(s_code\\)",
"env": "^s_account$"
},
"SiteEdit": {
@ -2618,7 +2682,7 @@
"website": "typo3.com",
"cats": [ 1 ],
"headers": { "Set-Cookie": "fe_typo_user" },
"meta": { "generator": "TYPO3" },
"meta": { "generator": "TYPO3\\s?([\\d.]+)?\\;version:\\1" },
"html": "(?:<(?:script[^>]* src|link[^>]* href)=[^>]*fileadmin|<!--TYPO3SEARCH)",
"url": "/typo3/",
"implies": "PHP"
@ -2641,6 +2705,11 @@
"meta": { "generator": "uCore PHP Framework" },
"implies": "PHP"
},
"UIKit": {
"website": "getuikit.com",
"cats": [ 18 ],
"script": "uikit.*\\.js"
},
"Umbraco": {
"website": "umbraco.com",
"cats": [ 1 ],
@ -2755,6 +2824,19 @@
"headers": { "X-Powered-By": "W3 Total Cache(?:/([\\d.]+))?\\;version:\\1" },
"implies": "WordPress"
},
"Web2py": {
"website": "http://web2py.com",
"cats": [ 18 ],
"script": "web2py\\.js",
"headers": { "X-Powered-By": "web2py" },
"implies": [ "Python" , "jQuery" ]
},
"Webix": {
"website": "webix.com",
"cats": [ 12 ],
"script": [ "\bwebix.js" ],
"env": "^webix$"
},
"Web Optimizer": {
"website": "www.web-optimizer.us",
"cats": [ 10 ],
@ -2836,6 +2918,15 @@
"cats": [ 1 ],
"html": "(?:<a href=\"[^>]+wolfcms\\.org.+Wolf CMS.+inside|Thank you for using <a[^>]+>Wolf CMS)"
},
"WooCommerce": {
"website": "www.woothemes.com/woocommerce",
"cats": [ 6 ],
"env": "woocommerce",
"html": "<!-- WooCommerce",
"script": "woocommerce",
"meta": { "generator": "WooCommerce ([\\d.]+);version:\\1" },
"implies": [ "WordPress", "PHP" ]
},
"Woopra": {
"website": "www.woopra.com",
"cats": [ 10 ],
@ -2860,6 +2951,13 @@
"cats": [ 38 ],
"html": "<title>Wowza Media Server \\d+ ((\\w+ Edition )?\\d+\\.[\\d\\.]+( build\\d+)?)?\\;version:\\1"
},
"WP Rocket": {
"website": "wp-rocket.me",
"cats": [ 23 ],
"html": "<!--[^>]+WP Rocket",
"headers": { "X-Powered-By": "WP Rocket(?:/([\\d.]+))?\\;version:\\1" },
"implies": "WordPress"
},
"Xajax": {
"website": "xajax-project.org",
"cats": [ 12 ],
@ -2938,7 +3036,8 @@
"Yandex.Metrika": {
"website": "metrika.yandex.com",
"cats": [ 10 ],
"script": "mc\\.yandex\\.ru/metrika/watch\\.js"
"html": "mc\\.yandex\\.ru\/metrika\/watch\\.js|\\b(?:yaParams|yaCounter|yandex_metrika_callbacks)\\b",
"script": "mc\\.yandex\\.ru\/metrika\/watch\\.js"
},
"YouTube": {
"website": "www.youtube.com",
@ -3001,37 +3100,6 @@
"website": "foundation.zurb.com",
"cats": [ 18 ],
"html": "<link[^>]+foundation[^>\"]+css"
},
"WooCommerce": {
"website": "www.woothemes.com/woocommerce",
"cats": [ 6 ],
"env": "woocommerce",
"html": "<!-- WooCommerce",
"script": "woocommerce",
"meta": { "generator": "WooCommerce ([\\d.]+);version:\\1" },
"implies": [ "WordPress", "PHP" ]
},
"LiveStreet CMS": {
"website": "livestreetcms.com",
"cats": [ 1 ],
"headers": { "X-Powered-By": "LiveStreet CMS" }
},
"Ophal": {
"website": "ophal.org",
"cats": [ 1, 11, 18 ],
"headers": { "X-Powered-By": "^Ophal/" }
},
"UIKit": {
"website": "getuikit.com",
"cats": [ 18 ],
"script": "uikit.*\\.js"
},
"Web2py": {
"website": "http://web2py.com",
"cats": [ 18 ],
"script": "web2py\\.js",
"headers": { "X-Powered-By": "web2py" },
"implies": [ "Python" , "jQuery" ]
}
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 884 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 589 B

After

Width:  |  Height:  |  Size: 535 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 341 B

After

Width:  |  Height:  |  Size: 340 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 786 B

After

Width:  |  Height:  |  Size: 782 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 329 B

After

Width:  |  Height:  |  Size: 312 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 651 B

After

Width:  |  Height:  |  Size: 647 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 138 B

After

Width:  |  Height:  |  Size: 133 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 690 B

After

Width:  |  Height:  |  Size: 684 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 832 B

After

Width:  |  Height:  |  Size: 742 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 323 B

After

Width:  |  Height:  |  Size: 310 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 872 B

After

Width:  |  Height:  |  Size: 852 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 267 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 414 B

After

Width:  |  Height:  |  Size: 349 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 408 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 587 B

After

Width:  |  Height:  |  Size: 546 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 572 B

After

Width:  |  Height:  |  Size: 567 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.3 KiB

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 830 B

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 582 B

After

Width:  |  Height:  |  Size: 1.7 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 177 B

After

Width:  |  Height:  |  Size: 132 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 472 B

After

Width:  |  Height:  |  Size: 452 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 583 B

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 666 B

After

Width:  |  Height:  |  Size: 623 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 806 B

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 621 B

After

Width:  |  Height:  |  Size: 954 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 711 B

After

Width:  |  Height:  |  Size: 1.6 KiB

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save