Added environment variable scanning and app name caching per page

main
ElbertF 14 years ago
parent 3531f643a7
commit 3cdb11e0b2

@ -2,4 +2,4 @@ content wappalyzer chrome/content/
locale wappalyzer en-US chrome/locale/en-US/
skin wappalyzer classic/1.0 chrome/skin/
overlay chrome://browser/content/browser.xul chrome://wappalyzer/content/overlay.xul
overlay chrome://browser/content/browser.xul chrome://wappalyzer/content/wappalyzer.xul

@ -26,7 +26,8 @@ wappalyzer.cats = {
20: { name: 'Editor', plural: 'Editors' },
21: { name: 'LMS', plural: 'LMS' },
22: { name: 'Web server', plural: 'Web servers' },
23: { name: 'Cache tool', plural: 'Cache tools' }
23: { name: 'Cache tool', plural: 'Cache tools' },
24: { name: 'Rich text editor', plural: 'Rich text editors' }
};
wappalyzer.apps = {
@ -65,7 +66,7 @@ wappalyzer.apps = {
'DataLife Engine': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+DataLife Engine/i },
'DirectAdmin': { cats: { 1: 9 }, html: /<a[^>]+>DirectAdmin<\/a> Web Control Panel/i },
'Disqus': { cats: { 1: 15 }, html: /(<div[^>]+id=("|')disqus_thread("|')|<script[^>]+disqus_url)/ },
'dojo': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*dojo(\.xd)?\.js/i },
'dojo': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*dojo(\.xd)?\.js/i, env: /dojo/ },
'Dokeos': { cats: { 1: 21 }, html: /(<meta name=("|')generator("|') [^>]+Dokeos|Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue)/i, headers: { 'X-Powered-By': /Dokeos/ } },
'DokuWiki': { cats: { 1: 8 }, html: /<meta name=("|')generator("|') [^>]+DokuWiki/i },
'DotNetNuke': { cats: { 1: 1 }, html: /(<meta name=("|')generator("|') [^>]+DotNetNuke|<!\-\- by DotNetNuke Corporation)/i },
@ -73,7 +74,7 @@ wappalyzer.apps = {
'Drupal': { cats: { 1: 1 }, html: /(<script [^>]+drupal\.js|jQuery\.extend\(Drupal\.settings, \{|Drupal\.extend\(\{ settings: \{|<link[^>]+sites\/(default|all)\/themes\/|<style[^>]+sites\/(default|all)\/(themes|modules)\/)/i, headers: { 'X-Drupal-Cache': /.*/, 'Expires': /19 Nov 1978/ } },
'Dynamicweb': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+Dynamicweb/i },
'e107': { cats: { 1: 1 }, html: /<script [^>]+e107\.js/i },
'ExtJS': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*ext\-base\.js("|')/i },
'ExtJS': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*ext\-base\.js("|')/i, env: /^Ext$/ },
'ExpressionEngine': { cats: { 1: 1 }, headers: { 'Set-Cookie': /exp_last_activity/ } },
'eZ Publish': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+eZ Publish/i },
'FluxBB': { cats: { 1: 2 }, html: /Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i },
@ -94,7 +95,7 @@ wappalyzer.apps = {
'Jalios': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+Jalios/i },
'Joomla': { cats: { 1: 1 }, html: /(<meta name=("|')generator("|') [^>]+Joomla|<!\-\- JoomlaWorks "K2")/i, headers: { 'X-Content-Encoded-By': /Joomla/ } },
'jQuery UI': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*jquery\-ui[^>]*\.js/i },
'jQuery': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*jquery[^>]*\.js/i, js: 'window.jQuery' },
'jQuery': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*jquery[^>]*\.js/i, js: 'window.jQuery', env: /^jQuery$/ },
'JTL Shop': { cats: { 1: 6 }, html: /(<input[^>]+name=('|")JTLSHOP|<a href=('|")jtl\.php)/i },
'K2': { cats: { 1: 19 }, html: /<!\-\- JoomlaWorks "K2"/ },
'Kampyle': { cats: { 1: 10 }, html: /<script[^>]* src=("|')http:\/\/cf\.kampyle\.com\/k_button\.js("|')/ },
@ -109,19 +110,19 @@ wappalyzer.apps = {
'Mambo': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+Mambo/i },
'MantisBT': { cats: { 1: 13 }, html: /<img[^>]+ alt=("|')Powered by Mantis Bugtracker/i },
'MaxSite CMS': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+MaxSite CMS/i },
'MediaWiki': { cats: { 1: 8 }, html: /(<meta name=("|')generator("|') [^>]+MediaWiki|<a[^>]+>Powered by MediaWiki<\/a>)/i },
'MediaWiki': { cats: { 1: 8 }, html: /(<meta name=("|')generator("|') [^>]+MediaWiki|<a[^>]+>Powered by MediaWiki<\/a>|<[^>]+id=("|')t\-specialpages)/i },
'Meebo': { cats: { 1: 5 }, html: /(<iframe id=("|')meebo\-iframe("|')|Meebo\('domReady'\))/ },
'Microsoft ASP.NET': { cats: { 1: 18 }, html: /<input[^>]+name=("|')__VIEWSTATE/, headers: { 'X-Powered-By': /ASP\.NET/, 'X-AspNet-Version': /.+/ } },
'Microsoft SharePoint': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+Microsoft SharePoint/i, headers: { 'MicrosoftSharePointTeamServices': /.*/, 'X-SharePointHealthScore': /.*/, 'SPRequestGuid': /.*/ } },
'MiniBB': { cats: { 1: 2 }, html: /<a href=("|')[^>]+minibb.+\s+<!--End of copyright link/i },
'Mint': { cats: { 1: 10 }, html: /<script[^>]* src=("|')[^>]*mint\/\?js/i },
'MochiKit': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*MochiKit\.js/i },
'MochiKit': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*MochiKit\.js/i, env: /^MochiKit$/ },
'Modernizr': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*modernizr[^>]*\.js/i },
'MODx': { cats: { 1: 1 }, html: /(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)/i },
'Mollom': { cats: { 1: 16 }, html: /(<script[^>]* src=("|')[^>]*mollom\.js|<img[^>]+\/.mollom\/.com)/i },
'Moodle': { cats: { 1: 21 }, html: /(var moodleConfigFn = function\(me\)|<img[^>]+moodlelogo)/i },
'Moogo': { cats: { 1: 1 }, html: /<script[^>]* src=("|')[^"']+kotisivukone.js/ },
'MooTools': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*mootools[^>]*\.js("|')/i },
'MooTools': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*mootools[^>]*\.js("|')/i, env: /^MooTools$/ },
'Movable Type': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+Movable Type/i },
'MyBB': { cats: { 1: 2 }, html: /(<script [^>]+\s+<!--\s+lang\.no_new_posts|<a[^>]* title=("|')Powered By MyBB)/i },
'MyBlogLog': { cats: { 1: 5 }, html: /<script[^>]* src=("|')[^>]*pub\.mybloglog\.com/i },
@ -147,17 +148,17 @@ wappalyzer.apps = {
'Plura': { cats: { 1: 19 }, html: /<iframe src="http:\/\/pluraserver\.com/ },
'posterous': { cats: { 1: 1, 2: 11 }, html: /<div class=("|')posterous/i },
'Prestashop': { cats: { 1: 6 }, html: /(<meta name=("|')generator("|') [^>]+PrestaShop|Powered by <a href=("|')[^>]+PrestaShop)/i },
'Prototype': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*(prototype|protoaculous)\.js("|')/i },
'Prototype': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*(prototype|protoaculous)\.js("|')/i, env: /^Prototype$/ },
'punBB': { cats: { 1: 2 }, html: /Powered by <a href=("|')[^>]+punbb/i },
'Quantcast': { cats: { 1: 10 }, html: /<script[^>]* src=("|')http:\/\/edge\.quantserve\.com\/quant\.js("|')>/i },
'Quick.Cart': { cats: { 1: 6 }, html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'reCAPTCHA': { cats: { 1: 16 }, html: /(<div[^>]+id=("|')recaptcha_image|<script[^>]+ src=("|')https:\/\/api\-secure\.recaptcha\.net)/ },
'reCAPTCHA': { cats: { 1: 16 }, html: /(<div[^>]+id=("|')recaptcha_image|<script[^>]+ src=("|')(api\-secure\.recaptcha\.net|recaptcha_ajax\.js))/ },
'Reddit': { cats: { 1: 2 }, html: /(<script[^>]+>var reddit = {|<a[^>]+Powered by Reddit|powered by <a[^>]+>reddit<)/i, url: /^(www.)?reddit\.com/ },
'Redmine': { cats: { 1: 13 }, html: /(<meta name=("|')description("|')Redmine("|')|Powered by <a href=("|')[^>]+Redmine)/i },
'Reinvigorate': { cats: { 1: 10 }, html: /reinvigorate\.track\("/ },
'S.Builder': { cats: { 1: 1 }, html: /<meta name=("|')generator("|') [^>]+S\.Builder/i },
's9y': { cats: { 1: 1 }, html: /<meta name=("|')Powered-By("|') [^>]+Serendipity/i },
'script.aculo.us': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*(scriptaculous|protoaculous)\.js("|')/i },
'script.aculo.us': { cats: { 1: 12 }, html: /<script[^>]* src=("|')[^>]*(scriptaculous|protoaculous)\.js("|')/i, env: /^Scriptaculous$/ },
'ShareThis': { cats: { 1: 5 }, html: /<script[^>]+ src=("|')[^"']+w\.sharethis\.com\//i },
'sIFR': { cats: { 1: 17 }, html: /<script[^>]* src=("|')[^>]*sifr\.js/i },
'Site Meter': { cats: { 1: 10 }, html: /<script[^>]* src=("|')http:\/\/[^.]+\.sitemeter.com\/js\/counter\.js\?site=/i },
@ -184,8 +185,9 @@ wappalyzer.apps = {
'TypePad': { cats: { 1: 11 }, html: /<meta name=("|')generator("|') [^>]+typepad/i, url: /^(www.)?.+\.typepad\.com/i },
'TYPO3': { cats: { 1: 1 }, html: /(<meta name=("|')generator("|') [^>]+TYPO3|<(script[^>]* src|link[^>]* href)=[^>]*fileadmin)/i, url: /\/typo3/i },
'Ubercart': { cats: { 1: 6 }, html: /<script[^>]* src=("|')[^>]*uc_cart\/uc_cart_block\.js/i },
'Umbraco': { cats: { 1: 1 }, headers: { 'X-Umbraco-Version': /.+/ } },
'Vanilla': { cats: { 1: 2 }, html: /<body id=("|')(DiscussionsPage|vanilla)/i, headers: { 'X-Powered-By': /Vanilla/ } },
'Varnish': { cats: { 1: 22 }, headers: { 'X-Varnish': /.+/, 'Via': /Varnish/ } },
'Varnish': { cats: { 1: 22 }, headers: { 'X-Varnish': /.+/, 'X-Varnish-Age': /.+/, 'X-Varnish-Cache': /.+/, 'X-Varnish-Action': /.+/, 'X-Varnish-Hostname': /.+/, 'Via': /Varnish/ } },
'vBulletin': { cats: { 1: 2 }, html: /<meta name=("|')generator("|') [^>]+vBulletin/i },
'viennaCMS': { cats: { 1: 1 }, html: /powered by <a href=("|')[^>]+viennacms/i },
'Vignette': { cats: { 1: 1 }, html: /<[^>]+?=("|')(vgn\-ext|vgnext)/i },
@ -218,7 +220,7 @@ wappalyzer.apps = {
'Yandex.Metrika': { cats: { 1: 10 }, html: /<script[^>]* src=("|')[^"']+mc\.yandex\.ru\/metrika\/watch\.js("|')/ },
'YouTube': { cats: { 1: 14 }, html: /<(param|embed)[^>]+youtube\.com\/v/i },
'YUI Doc': { cats: { 1: 12 }, html: /<html[^>]* yuilibrary\.com\/rdf\/[0-9.]+\/yui\.rdf/i },
'YUI': { cats: { 1: 4 }, html: /<script[^>]* src=("|')[^'"]*(\/yui\/|yui\.yahooapis\.com)[^'"]*("|')/ },
'YUI': { cats: { 1: 4 }, html: /<script[^>]* src=("|')[^'"]*(\/yui\/|yui\.yahooapis\.com)[^'"]*("|')/, env: /^YAHOO$/ },
'Zen Cart': { cats: { 1: 6 }, html: /<meta name=("|')generator("|') [^>]+Zen Cart/i },
'Zend': { cats: { 1: 18 }, headers: { 'X-Powered-By': /Zend/ } }
};

@ -25,7 +25,8 @@ wappalyzer =
sendAsyncMessage('wappalyzer:onPageLoad', {
href: content.document.location.href,
html: content.document.documentElement.innerHTML,
headers: []
headers: [],
environmentVars: wappalyzer.getEnvironmentVars()
});
},
@ -69,6 +70,29 @@ wappalyzer =
onProgressChange: function(a, b, c, d, e, f) {},
onStatusChange: function(a, b, c, d) {},
onSecurityChange: function(a, b, c) {}
},
getEnvironmentVars: function()
{
var element = content.document.createElement('wappalyzerData');
element.setAttribute('id', 'wappalyzer-data');
element.setAttribute('style', 'display: none;');
content.document.documentElement.appendChild(element);
var script = content.document.createElement('script');
script.innerHTML = 'for ( i in window ) document.getElementById("wappalyzer-data").innerHTML += i + " ";';
content.document.documentElement.appendChild(script);
var environmentVars = content.document.getElementById('wappalyzer-data').innerHTML.split(' ');
element.parentNode.removeChild(element);
script .parentNode.removeChild(script);
return environmentVars;
}
};

@ -1,9 +1,9 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/overlay.css"?>
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/wappalyzer.css"?>
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.dtd">
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/wappalyzer.dtd">
<prefwindow
id="wappalyzer-options"
@ -18,7 +18,7 @@
<preference id="wappalyzer-location" name="wappalyzer.location" type="int" />
<preference id="wappalyzer-auto-detect" name="wappalyzer.autoDetect" type="bool" />
<preference id="wappalyzer-enable-tracking" name="wappalyzer.enableTracking" type="bool" />
<preference id="wappalyzer-show-names" name="wappalyzer.showNames" type="bool" />
<preference id="wappalyzer-show-apps" name="wappalyzer.showApps" type="int" />
<preference id="wappalyzer-custom-apps" name="wappalyzer.customApps" type="string"/>
<preference id="wappalyzer-cat1" name="wappalyzer.cat1" type="bool" />
<preference id="wappalyzer-cat2" name="wappalyzer.cat2" type="bool" />
@ -75,26 +75,14 @@
</row>
<row>
<hbox align="center">
<label control="wappalyzer-auto-detect" value="&wappalyzer.detect;:"/>
<label control="wappalyzer-show-apps" value="&wappalyzer.showApps;:"/>
</hbox>
<hbox align="center">
<menulist preference="wappalyzer-auto-detect" id="wappalyzer-option-auto-detect">
<menulist preference="wappalyzer-show-apps" id="wappalyzer-show-apps">
<menupopup>
<menuitem label="&wappalyzer.auto;" value="true"/>
<menuitem label="&wappalyzer.manual;" value="false"/>
</menupopup>
</menulist>
</hbox>
</row>
<row>
<hbox align="center">
<label control="wappalyzer-auto-detect" value="&wappalyzer.showNames;:"/>
</hbox>
<hbox align="center">
<menulist preference="wappalyzer-show-names" id="wappalyzer-show-names">
<menupopup>
<menuitem label="&wappalyzer.inline;" value="true"/>
<menuitem label="&wappalyzer.popup;" value="false"/>
<menuitem label="&wappalyzer.labels;" value="0"/>
<menuitem label="&wappalyzer.icons;" value="1"/>
<menuitem label="&wappalyzer.popup;" value="2"/>
</menupopup>
</menulist>
</hbox>

@ -24,10 +24,11 @@ wappalyzer =
newInstall: false,
prevUrl: '',
prefs: {},
regexBlacklist: /(dev\.|\/admin|\.local)/,
regexDomain: /^[a-z0-9._\-]+\.[a-z]+/,
req: false,
request: false,
showNames: 0,
showApps: 1,
showCats: [],
strings: {},
version: '',
@ -46,7 +47,7 @@ wappalyzer =
wappalyzer.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
wappalyzer.prefs.addObserver('', wappalyzer, false);
wappalyzer.showNames = wappalyzer.prefs.getBoolPref('showNames');
wappalyzer.showApps = wappalyzer.prefs.getIntPref('showApps');
wappalyzer.autoDetect = wappalyzer.prefs.getBoolPref('autoDetect');
wappalyzer.customApps = wappalyzer.prefs.getCharPref('customApps');
wappalyzer.debug = wappalyzer.prefs.getBoolPref('debug');
@ -54,7 +55,7 @@ wappalyzer =
wappalyzer.newInstall = wappalyzer.prefs.getBoolPref('newInstall');
wappalyzer.version = wappalyzer.prefs.getCharPref('version');
for ( i = 1; i <= 23; i ++ )
for ( var i = 1; i <= 23; i ++ )
{
wappalyzer.showCats[i] = wappalyzer.prefs.getBoolPref('cat' + i);
}
@ -71,7 +72,7 @@ wappalyzer =
var enabledItems = prefs.getCharPref('extensions.enabledItems');
var version = enabledItems.replace(/(^.*wappalyzer[^:]+:)([^,]+),.*$/, '$2');
if ( wappalyzer.version != version )
if ( version && wappalyzer.version != version )
{
wappalyzer.browser.addEventListener('load', wappalyzer.upgradeSuccess, false);
@ -92,7 +93,7 @@ wappalyzer =
wappalyzer.browser.addEventListener('load', wappalyzer.installSuccess, false);
}
if ( typeof(messageManager) != 'undefined' )
if ( typeof messageManager != 'undefined' )
{
// Listen messages sent from the content process
messageManager.addMessageListener('wappalyzer:onPageLoad', wappalyzer.onContentPageLoad);
@ -144,8 +145,8 @@ wappalyzer =
wappalyzer.enableTracking = wappalyzer.prefs.getBoolPref('enableTracking');
break;
case 'showNames':
wappalyzer.showNames = wappalyzer.prefs.getBoolPref('showNames');
case 'showApps':
wappalyzer.showApps = wappalyzer.prefs.getIntPref('showApps');
break;
case 'location':
@ -191,7 +192,7 @@ wappalyzer =
switch ( locationPref )
{
case 1:
containerId = 'wappalyzer-statusbar';
var containerId = 'wappalyzer-statusbar';
// Show status bar panel
document.getElementById('wappalyzer-statusbar').style.visibility = '';
@ -224,10 +225,10 @@ wappalyzer =
}
wappalyzer.analyzePage(
target,
target.location.href,
target.documentElement.innerHTML,
[],
[],
true,
false
);
@ -238,10 +239,10 @@ wappalyzer =
wappalyzer.log('onContentPageLoad');
wappalyzer.analyzePage(
null,
message.json.href,
message.json.html,
message.json.headers,
message.json.environmentVars,
true,
false
);
@ -265,10 +266,10 @@ wappalyzer =
wappalyzer.currentTab = false;
wappalyzer.analyzePage(
wappalyzer.browser.contentWindow,
doc.location.href ? doc.location.href : '',
doc.documentElement ? doc.documentElement.innerHTML : '',
[],
[],
false,
false
);
@ -313,7 +314,7 @@ wappalyzer =
onSecurityChange: function(a, b, c) {}
},
analyzePage: function(windowObject, href, html, headers, doCount, manualDetect)
analyzePage: function(href, html, headers, environmentVars, doCount, manualDetect)
{
wappalyzer.log('analyzePage');
@ -326,7 +327,7 @@ wappalyzer =
wappalyzer.clearDetectedApps();
}
if ( typeof(html) == 'undefined' )
if ( typeof html == 'undefined' )
{
html = '';
}
@ -341,12 +342,28 @@ wappalyzer =
if ( html )
{
// Check cached application names
if ( typeof wappalyzer.browser.contentDocument.wappalyzerApps != 'undefined' )
{
for ( i in wappalyzer.browser.contentDocument.wappalyzerApps )
{
var appName = wappalyzer.browser.contentDocument.wappalyzerApps[i];
if ( typeof wappalyzer.checkUnique[appName] == 'undefined' )
{
wappalyzer.showApp(appName, href, doCount);
wappalyzer.checkUnique[appName] = true;
}
}
}
for ( var appName in wappalyzer.apps )
{
if ( typeof(wappalyzer.checkUnique[appName]) == 'undefined' ) // Don't scan for apps that have already been detected
if ( typeof wappalyzer.checkUnique[appName] == 'undefined' ) // Don't scan for apps that have already been detected
{
// Scan HTML
if ( typeof(wappalyzer.apps[appName].html) != 'undefined' )
if ( typeof wappalyzer.apps[appName].html != 'undefined' )
{
var regex = wappalyzer.apps[appName].html;
@ -357,7 +374,7 @@ wappalyzer =
}
// Scan URL
if ( href && typeof(wappalyzer.apps[appName].url) != 'undefined' )
if ( href && typeof wappalyzer.apps[appName].url != 'undefined' )
{
var regex = wappalyzer.apps[appName].url;
@ -368,7 +385,7 @@ wappalyzer =
}
// Scan response headers
if ( typeof(wappalyzer.apps[appName].headers) != 'undefined' && wappalyzer.request )
if ( typeof wappalyzer.apps[appName].headers != 'undefined' && wappalyzer.request )
{
for ( var header in wappalyzer.apps[appName].headers )
{
@ -386,6 +403,26 @@ wappalyzer =
}
}
}
// Scan environment variables
if ( environmentVars && typeof wappalyzer.apps[appName].env != 'undefined' )
{
var regex = wappalyzer.apps[appName].env;
for ( var i in environmentVars )
{
try
{
if ( regex.test(environmentVars[i]) )
{
wappalyzer.showApp(appName, href, doCount);
}
}
catch(e)
{
}
}
}
}
}
}
@ -398,13 +435,21 @@ wappalyzer =
{
wappalyzer.log('showApp ' + detectedApp);
// Keep detected application names in memory
if ( typeof wappalyzer.browser.contentDocument.wappalyzerApps == 'undefined' )
{
wappalyzer.browser.contentDocument.wappalyzerApps = [];
}
wappalyzer.browser.contentDocument.wappalyzerApps.push(detectedApp);
wappalyzer.report(detectedApp, href);
if ( detectedApp && typeof(wappalyzer.checkUnique[detectedApp]) == 'undefined' )
if ( detectedApp && typeof wappalyzer.checkUnique[detectedApp] == 'undefined' )
{
var show = false;
for ( i in wappalyzer.apps[detectedApp].cats )
for ( var i in wappalyzer.apps[detectedApp].cats )
{
if ( wappalyzer.showCats[wappalyzer.apps[detectedApp].cats[i]] )
{
@ -419,14 +464,25 @@ wappalyzer =
var e = document.getElementById('wappalyzer-detected-apps');
if ( wappalyzer.autoDetect )
{
if ( wappalyzer.showApps == 2 )
{
document.getElementById('wappalyzer-icon').setAttribute('src', 'chrome://wappalyzer/skin/icon16x16_hot.ico');
document.getElementById('wappalyzer-detected-apps').style.display = 'none';
}
else
{
// Hide Wappalyzer icon
document.getElementById('wappalyzer-icon').style.display = 'none';
document.getElementById('wappalyzer-detected-apps').style.display = '';
}
// Show app icon and label
var child = document.createElement('image');
if ( typeof(wappalyzer.apps[detectedApp].icon) == 'string' )
if ( typeof wappalyzer.apps[detectedApp].icon == 'string' )
{
child.setAttribute('src', wappalyzer.apps[detectedApp].icon);
}
@ -445,17 +501,15 @@ wappalyzer =
e.appendChild(child);
}
child = document.createElement('label');
if ( wappalyzer.showApps == 0 )
{
var child = document.createElement('label');
child.setAttribute('value', detectedApp);
child.setAttribute('class', 'wappalyzer-app-name');
if ( !wappalyzer.showNames )
{
child.setAttribute('style', 'display: none;');
}
e.appendChild(child);
}
// Show application in popup
var e = document.getElementById('wappalyzer-apps');
@ -478,7 +532,7 @@ wappalyzer =
child.setAttribute('type', '');
child.setAttribute('oncommand', 'wappalyzer.openTab(\'' + wappalyzer.homeUrl + 'stats/app/' + escape(detectedApp) + '\');');
if ( typeof(wappalyzer.apps[detectedApp].custom) == 'undefined' )
if ( typeof wappalyzer.apps[detectedApp].custom == 'undefined' )
{
child.setAttribute('label', detectedApp);
child.setAttribute('image', 'chrome://wappalyzer/skin/icons/' + detectedApp + '.ico');
@ -494,7 +548,7 @@ wappalyzer =
if ( wappalyzer.apps[detectedApp].cats )
{
for ( i in wappalyzer.apps[detectedApp].cats )
for ( var i in wappalyzer.apps[detectedApp].cats )
{
var child = document.createElement('menuitem');
@ -521,18 +575,21 @@ wappalyzer =
{
wappalyzer.log('report');
if ( typeof(wappalyzer.apps[detectedApp].custom) == 'undefined' )
if ( typeof wappalyzer.apps[detectedApp].custom == 'undefined' )
{
var domain = href.match(regex = /:\/\/(.[^/]+)/) ? href.match(regex)[1] : '';
var
regex = /:\/\/(.[^/]+)/,
domain = href.match(regex) ? href.match(regex)[1] : ''
;
if ( wappalyzer.enableTracking && wappalyzer.regexDomain.test(domain) )
if ( wappalyzer.enableTracking && wappalyzer.regexDomain.test(domain) && !wappalyzer.regexBlacklist.test(href) )
{
if ( typeof(wappalyzer.history[domain]) == 'undefined' )
if ( typeof wappalyzer.history[domain] == 'undefined' )
{
wappalyzer.history[domain] = [];
}
if ( typeof(wappalyzer.history[domain][detectedApp]) == 'undefined' )
if ( typeof wappalyzer.history[domain][detectedApp] == 'undefined' )
{
wappalyzer.history[domain][detectedApp] = 0;
}
@ -560,15 +617,13 @@ wappalyzer =
{
var report = '';
var i, j;
if ( wappalyzer.history )
{
for ( i in wappalyzer.history )
for ( var i in wappalyzer.history )
{
report += '[' + i;
for ( j in wappalyzer.history[i] )
for ( var j in wappalyzer.history[i] )
{
report += '|' + j + ':' + wappalyzer.history[i][j];
}
@ -617,10 +672,11 @@ wappalyzer =
wappalyzer.checkUnique = [];
// Show Wappalyzer icon
document.getElementById('wappalyzer-icon').setAttribute('src', 'chrome://wappalyzer/skin/icon16x16.ico');
document.getElementById('wappalyzer-icon').style.display = '';
// Clear app icons and labels
e = document.getElementById('wappalyzer-detected-apps');
var e = document.getElementById('wappalyzer-detected-apps');
while ( e.childNodes.length > 0 )
{
@ -628,7 +684,7 @@ wappalyzer =
}
// Clear application popup
e = document.getElementById('wappalyzer-apps');
var e = document.getElementById('wappalyzer-apps');
while ( e.childNodes.length > 0 )
{

@ -1,16 +1,16 @@
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/overlay.css"?>
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/wappalyzer.css"?>
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.dtd">
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/wappalyzer.dtd">
<overlay id="wappalyzer-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
<script type="application/x-javascript" src="chrome://wappalyzer/content/overlay.js"/>
<script type="application/x-javascript" src="chrome://wappalyzer/content/wappalyzer.js"/>
<script type="application/x-javascript" src="chrome://wappalyzer/content/evaluate.js"/>
<script type="application/x-javascript" src="chrome://wappalyzer/content/apps.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="wappalyzer-strings" src="chrome://wappalyzer/locale/overlay.properties"/>
<stringbundle id="wappalyzer-strings" src="chrome://wappalyzer/locale/wappalyzer.properties"/>
</stringbundleset>
<hbox>
@ -18,7 +18,7 @@
id="wappalyzer-container"
context="wappalyzer-menu"
popup="wappalyzer-apps"
onmouseover="wappalyzer.hoverTimeout = setTimeout(function() { document.getElementById('wappalyzer-apps').openPopup(document.getElementById('wappalyzer-container'), 'after_end'); }, 1000);"
onmouseover="wappalyzer.hoverTimeout = setTimeout(function() { document.getElementById('wappalyzer-apps').openPopup(document.getElementById('wappalyzer-container'), 'after_end'); }, 200);"
onmouseout="clearTimeout(wappalyzer.hoverTimeout);"
>
<image
@ -29,8 +29,7 @@
<box align="start" id="wappalyzer-detected-apps"/>
<menupopup id="wappalyzer-apps" position="after_end">
</menupopup>
<menupopup id="wappalyzer-apps" position="after_end"></menupopup>
<menupopup id="wappalyzer-menu">
<menuitem label="&wappalyzer.options;" oncommand="
@ -46,7 +45,6 @@
<hbox
id="urlbar-icons"
onclick="if ( !wappalyzer.autoDetect ) wappalyzer.analyzePage(wappalyzer.browser.contentDocument.location.href, wappalyzer.browser.contentDocument.documentElement.innerHTML, false, true, true);"
/>
<statusbar id="status-bar">
@ -55,7 +53,6 @@
class="statusbarpanel-iconic"
context="wappalyzer-menu"
popup="wappalyzer-apps"
onclick="if ( !wappalyzer.autoDetect ) wappalyzer.analyzePage(wappalyzer.browser.contentDocument.location.href, wappalyzer.browser.contentDocument.documentElement.innerHTML, false, true, true);"
/>
</statusbar>
</overlay>

@ -6,13 +6,11 @@
<!ENTITY wappalyzer.general "General">
<!ENTITY wappalyzer.location "Display icons in">
<!ENTITY wappalyzer.addressBar "Address bar">
<!ENTITY wappalyzer.statusBar "Status bar">
<!ENTITY wappalyzer.detect "Detect applications">
<!ENTITY wappalyzer.auto "Automatically">
<!ENTITY wappalyzer.manual "On click">
<!ENTITY wappalyzer.inline "Inline">
<!ENTITY wappalyzer.popup "In popup on click">
<!ENTITY wappalyzer.showNames "Show application names">
<!ENTITY wappalyzer.statusBar "Add-on bar">
<!ENTITY wappalyzer.showApps "Show applications as">
<!ENTITY wappalyzer.labels "Icons, text and popup">
<!ENTITY wappalyzer.icons "Icons and popup">
<!ENTITY wappalyzer.popup "Popup only">
<!ENTITY wappalyzer.categories "Categories">
<!ENTITY wappalyzer.home "Go to Wappalyzer">
<!ENTITY wappalyzer.privacy "Privacy">

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

@ -1,9 +0,0 @@
.wappalyzer-icon {
background: transparent !important;
-moz-box-orient: vertical;
list-style-image: url('chrome://wappalyzer/skin/icon32x32.png');
margin-left: 7px;
width: 32px;
height: 32px;
}

@ -13,6 +13,7 @@
}
#wappalyzer-detected-apps label {
padding-top: 2px;
margin: 0 1px 0 4px;
}

@ -3,7 +3,7 @@ pref('wappalyzer.debug', false);
pref('wappalyzer.location', 0);
pref('wappalyzer.enableTracking', true);
pref('wappalyzer.newInstall', true);
pref('wappalyzer.showNames', false);
pref('wappalyzer.showApps', 1);
pref('wappalyzer.customApps', '');
pref('wappalyzer.version', '');
@ -30,5 +30,3 @@ pref('wappalyzer.cat20', true);
pref('wappalyzer.cat21', true);
pref('wappalyzer.cat22', true);
pref('wappalyzer.cat23', true);
pref('browser.preferences.instantApply', true);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 12 KiB

@ -5,7 +5,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>1.13.1</em:version>
<em:version>1.15</em:version>
<em:type>2</em:type>
<em:unpack>true</em:unpack>
@ -14,7 +14,7 @@
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>4.0</em:minVersion>
<em:maxVersion>4.0.*</em:maxVersion>
<em:maxVersion>7.*</em:maxVersion>
</Description>
</em:targetApplication>

Binary file not shown.