@ -0,0 +1,5 @@
|
||||
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
|
@ -0,0 +1,61 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
|
||||
|
||||
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.dtd">
|
||||
|
||||
<prefwindow
|
||||
id="wappalyzer-options"
|
||||
title="&wappalyzer.options;"
|
||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
||||
<prefpane label="&wappalyzer.options;">
|
||||
<preferences>
|
||||
<preference id="wappalyzer-auto-detect" name="wappalyzer.autoDetect" type="int" />
|
||||
<preference id="wappalyzer-enable-tracking" name="wappalyzer.enableTracking" type="bool"/>
|
||||
<preference id="wappalyzer-show-app-names" name="wappalyzer.showAppNames" type="int" />
|
||||
</preferences>
|
||||
|
||||
<groupbox>
|
||||
<caption label="&wappalyzer.behavior;"/>
|
||||
<grid>
|
||||
<columns>
|
||||
<column/>
|
||||
<column flex="1"/>
|
||||
</columns>
|
||||
<rows>
|
||||
<row>
|
||||
<hbox align="center">
|
||||
<label control="wappalyzer-auto-detect" value="&wappalyzer.detect;:"/>
|
||||
</hbox>
|
||||
<hbox align="center">
|
||||
<menulist preference="wappalyzer-detect" id="refresh-interval">
|
||||
<menupopup>
|
||||
<menuitem label="&wappalyzer.auto;" value="1"/>
|
||||
<menuitem label="&wappalyzer.manual;" value="0"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</hbox>
|
||||
</row>
|
||||
<row>
|
||||
<hbox align="center">
|
||||
<label control="wappalyzer-show-app-names" value="&wappalyzer.appNames;:"/>
|
||||
</hbox>
|
||||
<hbox align="center">
|
||||
<menulist preference="wappalyzer-show-app-names" id="refresh-interval">
|
||||
<menupopup>
|
||||
<menuitem label="&wappalyzer.always;" value="1"/>
|
||||
<menuitem label="&wappalyzer.tooltip;" value="2"/>
|
||||
<menuitem label="&wappalyzer.hover;" value="3"/>
|
||||
</menupopup>
|
||||
</menulist>
|
||||
</hbox>
|
||||
</row>
|
||||
</rows>
|
||||
</grid>
|
||||
</groupbox>
|
||||
|
||||
<hbox align="center">
|
||||
<checkbox preference="wappalyzer-enable-tracking" id="wappalyzer-option-enable-tracking" label="&wappalyzer.enableTracking;"/>
|
||||
</hbox>
|
||||
</prefpane>
|
||||
</prefwindow>
|
@ -0,0 +1,684 @@
|
||||
// Wappalyzer by ElbertF 2009 http://elbertf.com
|
||||
|
||||
var wappalyzer = {};
|
||||
|
||||
window.addEventListener('load', function() { wappalyzer.init(); }, false);
|
||||
window.addEventListener('unload', function() { wappalyzer.sendReport(); }, false);
|
||||
|
||||
wappalyzer =
|
||||
{
|
||||
homeUrl: 'http://wappalyzer.com/',
|
||||
prevUrl: '',
|
||||
regexDomain: /^[a-z0-9._\-]+\.[a-z]+$/,
|
||||
appsDetected: 0,
|
||||
checkUnique: [],
|
||||
currentTab: false,
|
||||
prefs: null,
|
||||
autoDetect: 1,
|
||||
enableTracking: true,
|
||||
newInstall: false,
|
||||
showAppNames: 3,
|
||||
history: [],
|
||||
hitCount: 0,
|
||||
isBookmarklet: false,
|
||||
|
||||
app: [
|
||||
'phpBB',
|
||||
'WordPress',
|
||||
'MediaWiki',
|
||||
'Joomla',
|
||||
'Drupal',
|
||||
'Kolibri CMS',
|
||||
'vBulletin',
|
||||
'SMF',
|
||||
'IPB',
|
||||
'Coppermine',
|
||||
'MiniBB',
|
||||
'punBB',
|
||||
'XMB',
|
||||
'YaBB',
|
||||
's9y',
|
||||
'e107',
|
||||
'PHP-Fusion',
|
||||
'DokuWiki',
|
||||
'Squarespace',
|
||||
'MyBB',
|
||||
'FluxBB',
|
||||
'Vanilla',
|
||||
'TYPO3',
|
||||
'Prestashop',
|
||||
'Zen Cart',
|
||||
'osCommerce',
|
||||
'WikkaWiki',
|
||||
'osCSS',
|
||||
'Google Analytics',
|
||||
'Crazy Egg',
|
||||
'OneStat',
|
||||
'Clicky',
|
||||
'Quantcast',
|
||||
'StatCounter',
|
||||
'W3Counter',
|
||||
'Site Meter',
|
||||
'CubeCart',
|
||||
'jQuery',
|
||||
'MooTools',
|
||||
'Prototype',
|
||||
'MochiKit',
|
||||
'viennaCMS',
|
||||
'Movable Type',
|
||||
'Tumblr',
|
||||
'Google Friend Connect',
|
||||
'MyBlogLog',
|
||||
'Google Maps',
|
||||
'AWStats',
|
||||
'phpMyAdmin',
|
||||
'phpDocumentor',
|
||||
'BigDump',
|
||||
'MODx',
|
||||
'VP-ASP',
|
||||
'SPIP',
|
||||
'Plesk',
|
||||
'Magento',
|
||||
'DirectAdmin',
|
||||
'cPanel',
|
||||
'webEdition',
|
||||
'CMS Made Simple',
|
||||
'xtCommerce',
|
||||
'BIGACE',
|
||||
'Ubercart',
|
||||
'TYPOlight',
|
||||
'posterous',
|
||||
'papaya CMS',
|
||||
'eZ Publish',
|
||||
'script.aculo.us',
|
||||
'dojo',
|
||||
'ExtJS',
|
||||
'WebPublisher',
|
||||
'ConversionLab',
|
||||
'Koego',
|
||||
'YUI',
|
||||
'VisualPath',
|
||||
'WebGUI',
|
||||
'Plone',
|
||||
'CS Cart',
|
||||
'Web Optimizer',
|
||||
'K2',
|
||||
'AddThis',
|
||||
'Koobi',
|
||||
'XiTi',
|
||||
'Kampyle',
|
||||
'ClickTale',
|
||||
'Yahoo! Web Analytics',
|
||||
'XOOPS',
|
||||
'Amiro.CMS'
|
||||
],
|
||||
|
||||
match: [
|
||||
/(Powered by (<a href=("|')[^>]+)?phpBB|<meta name=("|')copyright("|') [^>]+phpBB Group)/i,
|
||||
/(<link rel=("|')stylesheet("|') [^>]+wp-content|<meta name=("|')generator("|') [^>]+WordPress)/i,
|
||||
/(<meta name=("|')generator("|') [^>]+MediaWiki|<a[^>]+>Powered by MediaWiki<\/a>)/i,
|
||||
/<meta name=("|')generator("|') [^>]+Joomla/i,
|
||||
/(<script [^>]+drupal\.js|jQuery\.extend\(Drupal\.settings, \{|Drupal\.extend\(\{ settings: \{)/i,
|
||||
/<meta name=("|')copyright("|') [^>]+Kolibri/i,
|
||||
/<meta name=("|')generator("|') [^>]+vBulletin/i,
|
||||
/<script .+\s+var smf_/i,
|
||||
/<script [^>]+jscripts\/ips_/i,
|
||||
/<!--Coppermine Photo Gallery/i,
|
||||
/<a href=("|')[^>]+minibb.+\s+<!--End of copyright link/i,
|
||||
/Powered by <a href=("|')[^>]+punbb/i,
|
||||
/<!-- Powered by XMB/i,
|
||||
/Powered by <a href=("|')[^>]+yabbforum/i,
|
||||
/<meta name=("|')Powered-By("|') [^>]+Serendipity/i,
|
||||
/<script [^>]+e107\.js/i,
|
||||
/Powered by <a href=("|')[^>]+php-fusion/i,
|
||||
/<meta name=("|')generator("|') [^>]+DokuWiki/i,
|
||||
/Squarespace\.Constants\.CURRENT_MODULE_ID/i,
|
||||
/(<script .+\s+<!--\s+lang\.no_new_posts|<a[^>]* title=("|')Powered By MyBB)/i,
|
||||
/Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i,
|
||||
/<body id=("|')DiscussionsPage("|')/i,
|
||||
/<meta name=("|')generator("|') [^>]+TYPO3/i,
|
||||
/Powered by <a href=("|')[^>]+PrestaShop/i,
|
||||
/<meta name=("|')generator("|') [^>]+Zen Cart/i,
|
||||
/<!-- header_eof \/\/-->/i,
|
||||
/Powered by <a href=("|')[^>]+WikkaWiki/i,
|
||||
/<body onload=("|')window\.defaultStatus='oscss templates';("|')/i,
|
||||
/(document\.write\(unescape\(("|')%3Cscript src=\'("|') \+ gaJsHost \+ ("|')google\-analytics\.com\/ga\.js|<script src=("|')http:\/\/www\.google-analytics\.com\/urchin\.js("|'))/i,
|
||||
/<script type=("|')text\/javascript("|') src=("|')http:\/\/cetrk\.com\/pages\/scripts\/[0-9]+\/[0-9]+\.js("|')/,
|
||||
/var p=("|')http("|')\+\(d\.URL\.indexOf\('https:'\)==0\?'s':''\)\+("|'):\/\/stat\.onestat\.com\/stat\.aspx\?tagver/i,
|
||||
/<script src=("|')http:\/\/static\.getclicky\.com\/[0-9]+\.js("|')/i,
|
||||
/<script[^>]* src=("|')http:\/\/edge\.quantserve\.com\/quant\.js("|')>/i,
|
||||
/<script[^>]* src=("|')http:\/\/www\.statcounter\.com\/counter\/counter/i,
|
||||
/<script[^>]* src=("|')http:\/\/www\.w3counter\.com\/tracker\.js("|')>/i,
|
||||
/<script[^>]* src=("|')http:\/\/[^.]+\.sitemeter.com\/js\/counter\.js\?site=/i,
|
||||
/Powered by <a href=.http:\/\/www\.cubecart\.com/i,
|
||||
/<script[^>]* src=("|')[^>]*jquery[^>]*\.js/i,
|
||||
/<script[^>]* src=("|')[^>]*mootools[^>]*\.js("|')/i,
|
||||
/<script[^>]* src=("|')[^>]*prototype\.js("|')/i,
|
||||
/<script[^>]* src=("|')[^>]*MochiKit\.js/i,
|
||||
/Powered by <a href=("|')[^>]+viennacms/i,
|
||||
/<meta name=("|')generator("|') [^>]+Movable Type/i,
|
||||
/<iframe src=("|')http:\/\/www\.tumblr\.com/i,
|
||||
/<script[^>]* src=("|')[^>]*google.com\/friendconnect/i,
|
||||
/<script[^>]* src=("|')[^>]*pub\.mybloglog\.com/i,
|
||||
/<script[^>]* src=("|')[^>]*maps\.google\.com\/maps\?file=api/i,
|
||||
/<meta name=("|')generator("|') [^>]+AWStats/i,
|
||||
/var pma_absolute_uri = '/i,
|
||||
/<!-- Generated by phpDocumentor/,
|
||||
/<!-- <h1>BigDump: Staggered MySQL Dump Importer/,
|
||||
/(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)/i,
|
||||
/(<a[^>]+>Powered By VP\-ASP Shopping Cart<\/a>|<script[^>]* src=("|')[^>]*vs350\.js)/,
|
||||
/<meta name=("|')generator("|') [^>]+SPIP/i,
|
||||
/<script[^>]* src=("|')[^>]*common\.js\?plesk/i,
|
||||
/var BLANK_URL = '[^>]+js\/blank\.html'/i,
|
||||
/<a[^>]+>DirectAdmin<\/a> Web Control Panel/i,
|
||||
/<!-- cPanel/i,
|
||||
/(<meta name=("|')generator("|') [^>]+webEdition|<meta name=("|')DC.title("|') [^>]+webEdition)/i,
|
||||
/<meta name=("|')generator("|') [^>]+CMS Made Simple/i,
|
||||
/(<meta name=("|')generator("|') [^>]+xt:Commerce|<div class=("|')copyright("|')>.+<a[^>]+>xt:Commerce)/i,
|
||||
/(<meta name=("|')generator("|') [^>]+BIGACE|Powered by <a href=("|')[^>]+BIGACE|<!--\s+Site is running BIGACE)/i,
|
||||
/<script[^>]* src=("|')[^>]*uc_cart\/uc_cart_block\.js/i,
|
||||
/<!--\s+This website is powered by TYPOlight webCMS/i,
|
||||
/<div class=("|')posterous/i,
|
||||
/<link[^>]*\/papaya-themes\//i,
|
||||
/<meta name=("|')generator("|') [^>]+eZ Publish/i,
|
||||
/<script[^>]* src=("|')[^>]*scriptaculous\.js("|')/i,
|
||||
/<script[^>]* src=("|')[^>]*dojo(\.xd)?\.js("|')/i,
|
||||
/<script[^>]* src=("|')[^>]*ext\-base\.js("|')/i,
|
||||
/<meta name=("|')generator("|') [^>]+WEB\|Publisher/i,
|
||||
/<script[^>]* src=("|')http:\/\/conversionlab\.trackset\.com\/track\/tsend\.js("|')/,
|
||||
/<script[^>]* src=("|')http\:\/\/tracking\.koego\.com\/end\/ego\.js("|')/,
|
||||
/<script[^>]* src=("|')[^'"]*(\/yui\/|yui\.yahooapis\.com)[^'"]*("|')/,
|
||||
/<script[^>]* src=("|')http:\/\/visualpath[^\/]*\.trackset\.it\/[^\/]+\/track\/include\.js("|')/,
|
||||
/<meta name=("|')generator("|') [^>]+WebGUI/i,
|
||||
/<meta name=("|')generator("|') [^>]+Plone/i,
|
||||
/ Powered by (<a href=.http:\/\/www\.cs\-cart\.com|CS\-Cart)/i,
|
||||
/<title [^>]*lang=("|')wo("|')>/,
|
||||
/<!-- JoomlaWorks "K2"/,
|
||||
/<script[^>]* src=("|')[^>]*addthis\.com\/js/,
|
||||
/<meta name=("|')generator("|') [^>]+Koobi/i,
|
||||
/<[^>]+src=("|')[^>]+xiti.com\/hit.xiti/i,
|
||||
/<script[^>]* src=("|')http:\/\/cf\.kampyle\.com\/k_button\.js("|')/,
|
||||
/if\(typeof ClickTale(Tag)*==("|')function("|')\)/,
|
||||
/<script[^>]* src=("|')[^>]*http:\/\/d\.yimg\.com\/mi\/ywa\.js/,
|
||||
/<meta name=("|')generator("|') [^>]+XOOPS/i,
|
||||
/<meta name=("|')generator("|') [^>]+Amiro/i
|
||||
],
|
||||
|
||||
appDomain: [
|
||||
'Blogger',
|
||||
'TypePad',
|
||||
'LiveJournal',
|
||||
'Vox'
|
||||
],
|
||||
|
||||
matchDomain: [
|
||||
/(www.)?.+\.blogspot\.com$/i,
|
||||
/(www.)?.+\.typepad\.com$/i,
|
||||
/(www.)?.+\.livejournal\.com$/i,
|
||||
/(www.)?.+\.vox\.com$/i
|
||||
],
|
||||
|
||||
init: function()
|
||||
{
|
||||
if ( wappalyzer.isBookmarklet )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Preferences
|
||||
wappalyzer.prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService).getBranch('wappalyzer.');
|
||||
|
||||
wappalyzer.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
||||
wappalyzer.prefs.addObserver('', wappalyzer, false);
|
||||
|
||||
wappalyzer.autoDetect = wappalyzer.prefs.getIntPref( 'autoDetect');
|
||||
wappalyzer.showAppNames = wappalyzer.prefs.getIntPref( 'showAppNames');
|
||||
wappalyzer.enableTracking = wappalyzer.prefs.getBoolPref('enableTracking');
|
||||
wappalyzer.newInstall = wappalyzer.prefs.getBoolPref('newInstall');
|
||||
|
||||
// Show splash page after installation
|
||||
if ( wappalyzer.newInstall )
|
||||
{
|
||||
wappalyzer.addTab(wappalyzer.homeUrl + 'install/success/');
|
||||
|
||||
wappalyzer.prefs.setBoolPref('newInstall', false);
|
||||
}
|
||||
|
||||
// Listen for URL changes
|
||||
gBrowser.addProgressListener(wappalyzer.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
|
||||
|
||||
var appContent = document.getElementById('appcontent');
|
||||
|
||||
if ( appContent )
|
||||
{
|
||||
appContent.addEventListener('DOMContentLoaded', wappalyzer.onPageLoad, true);
|
||||
}
|
||||
},
|
||||
|
||||
observe: function(subject, topic, data)
|
||||
{
|
||||
if ( topic != 'nsPref:changed' )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
switch(data)
|
||||
{
|
||||
case 'autoDetect':
|
||||
wappalyzer.autoDetect = wappalyzer.prefs.getIntPref('autoDetect');
|
||||
|
||||
break;
|
||||
case 'enableTracking':
|
||||
wappalyzer.enableTracking = wappalyzer.prefs.getBoolPref('enableTracking');
|
||||
|
||||
break;
|
||||
case 'showAppNames':
|
||||
wappalyzer.showAppNames = wappalyzer.prefs.getIntPref('showAppNames');
|
||||
|
||||
break;
|
||||
}
|
||||
},
|
||||
|
||||
onPageLoad: function(event)
|
||||
{
|
||||
var doc = event.originalTarget;
|
||||
|
||||
wappalyzer.analyzePage(doc, true, false);
|
||||
},
|
||||
|
||||
onUrlChange: function()
|
||||
{
|
||||
var doc = gBrowser.selectedBrowser.contentDocument;
|
||||
|
||||
wappalyzer.analyzePage(doc, false, false);
|
||||
},
|
||||
|
||||
urlChange:
|
||||
{
|
||||
QueryInterface: function( aIID )
|
||||
{
|
||||
if ( aIID.equals(Components.interfaces.nsIWebProgressListener) ||
|
||||
aIID.equals(Components.interfaces.nsISupportsWeakReference) ||
|
||||
aIID.equals(Components.interfaces.nsISupports) )
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
||||
throw Components.results.NS_NOINTERFACE;
|
||||
},
|
||||
|
||||
onLocationChange: function(aProgress, aRequest, aURI)
|
||||
{
|
||||
if ( aURI.spec != wappalyzer.prevUrl )
|
||||
{
|
||||
wappalyzer.prevUrl = aURI.spec;
|
||||
|
||||
// A tiny pauze to let the page load, otherwise some elements are displayed incorrectly
|
||||
setTimeout(wappalyzer.onUrlChange(), 50);
|
||||
}
|
||||
},
|
||||
|
||||
onStateChange: function(a, b, c, d) {},
|
||||
onProgressChange: function(a, b, c, d, e, f) {},
|
||||
onStatusChange: function(a, b, c, d) {},
|
||||
onSecurityChange: function(a, b, c) {}
|
||||
},
|
||||
|
||||
analyzePage: function(doc, doCount, manualDetect)
|
||||
{
|
||||
wappalyzer.currentTab = false;
|
||||
|
||||
if ( !wappalyzer.isBookmarklet )
|
||||
{
|
||||
if ( doc.location.href == gBrowser.selectedBrowser.contentDocument.location.href )
|
||||
{
|
||||
wappalyzer.currentTab = true;
|
||||
|
||||
wappalyzer.clearDetectedApps();
|
||||
}
|
||||
}
|
||||
|
||||
if ( wappalyzer.autoDetect || ( !wappalyzer.autoDetect && manualDetect ) )
|
||||
{
|
||||
// Scan URL for patterns
|
||||
for ( i = 0; i < wappalyzer.appDomain.length; i ++ )
|
||||
{
|
||||
if ( typeof(wappalyzer.checkUnique[wappalyzer.appDomain[i]]) == 'undefined' ) // Don't scan for apps that have already been detected
|
||||
{
|
||||
var regexDomain = wappalyzer.matchDomain[i];
|
||||
|
||||
if ( regexDomain.test(doc.domain) )
|
||||
{
|
||||
wappalyzer.showApp(wappalyzer.appDomain[i], doc, doCount);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Scan HTML for patterns
|
||||
var html = doc.getElementsByTagName('html')[0].innerHTML;
|
||||
|
||||
if ( html && html.length < 500000 ) // Skip long pages
|
||||
{
|
||||
for ( i = 0; i < wappalyzer.app.length; i ++ )
|
||||
{
|
||||
if ( typeof(wappalyzer.checkUnique[wappalyzer.app[i]]) == 'undefined' ) // Don't scan for apps that have already been detected
|
||||
{
|
||||
var regex = wappalyzer.match[i];
|
||||
|
||||
if ( regex.test(html) )
|
||||
{
|
||||
if ( wappalyzer.currentTab || wappalyzer.isBookmarklet )
|
||||
{
|
||||
wappalyzer.showApp(wappalyzer.app[i], doc, doCount);
|
||||
}
|
||||
else
|
||||
{
|
||||
wappalyzer.report(wappalyzer.app[i], doc.domain);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
html = ''; // Free memory
|
||||
}
|
||||
},
|
||||
|
||||
showApp: function(detectedApp, doc, doCount)
|
||||
{
|
||||
if ( detectedApp && typeof(wappalyzer.checkUnique[detectedApp]) == 'undefined' )
|
||||
{
|
||||
domain = doc.domain;
|
||||
|
||||
if ( !wappalyzer.isBookmarklet )
|
||||
{
|
||||
// Hide Wappalyzer icon
|
||||
document.getElementById('wappalyzer-icon').style.display = 'none';
|
||||
|
||||
// Show app icon and label
|
||||
var e = document.getElementById('wappalyzer-detected-apps');
|
||||
|
||||
var child = document.createElement('image');
|
||||
|
||||
child.setAttribute('src', 'chrome://wappalyzer/skin/app_icons/' + detectedApp + '.ico');
|
||||
child.setAttribute('class', 'wappalyzer-icon');
|
||||
|
||||
if ( wappalyzer.showAppNames == 2 )
|
||||
{
|
||||
var panel = document.getElementById('wappalyzer-panel');
|
||||
|
||||
var tooltiptext = panel.getAttribute('tooltiptext') + ( panel.getAttribute('tooltiptext') ? '\n' : '' ) + detectedApp;
|
||||
|
||||
panel.setAttribute('tooltiptext', tooltiptext);
|
||||
}
|
||||
|
||||
if ( wappalyzer.showAppNames == 3 )
|
||||
{
|
||||
child.setAttribute('onmouseover', 'wappalyzer.showLabels(true)');
|
||||
child.setAttribute('onmouseout', 'wappalyzer.showLabels(false)');
|
||||
}
|
||||
|
||||
if ( wappalyzer.appsDetected )
|
||||
{
|
||||
child.setAttribute('style', 'margin-left: .5em');
|
||||
}
|
||||
|
||||
e.appendChild(child);
|
||||
|
||||
child = document.createElement('label');
|
||||
|
||||
child.setAttribute('value', detectedApp);
|
||||
child.setAttribute('class', 'wappalyzer-app-name');
|
||||
|
||||
if ( wappalyzer.showAppNames != 1 )
|
||||
{
|
||||
child.setAttribute('style', 'display: none;');
|
||||
}
|
||||
|
||||
if ( wappalyzer.showAppNames == 3 )
|
||||
{
|
||||
child.setAttribute('onmouseover', 'wappalyzer.showLabels(true)');
|
||||
child.setAttribute('onmouseout', 'wappalyzer.showLabels(false)');
|
||||
}
|
||||
|
||||
e.appendChild(child);
|
||||
}
|
||||
else
|
||||
{
|
||||
var e = document.getElementById('wappalyzer-bookmarklet-apps');
|
||||
|
||||
e.innerHTML =
|
||||
( wappalyzer.appsDetected ? e.innerHTML : '' ) +
|
||||
wappalyzer.app[i] +
|
||||
'<br/>'
|
||||
;
|
||||
}
|
||||
|
||||
if ( doCount )
|
||||
{
|
||||
wappalyzer.report(detectedApp, domain);
|
||||
}
|
||||
|
||||
/*
|
||||
// Enable domain details menu item
|
||||
var e = document.getElementById('wappalyzer_domain_details');
|
||||
|
||||
e.setAttribute('label', 'View details about ' + domain);
|
||||
e.setAttribute('class', 'menuitem-iconic');
|
||||
e.setAttribute('image', 'http://' + domain + '/favicon.ico');
|
||||
e.setAttribute('disabled', false);
|
||||
|
||||
// Enable application details menu item
|
||||
var e = document.getElementById('wappalyzer_app_details');
|
||||
|
||||
e.parentNode.setAttribute('disabled', false);
|
||||
|
||||
var child = document.createElement('menuitem');
|
||||
|
||||
child.setAttribute('label', detectedApp);
|
||||
child.setAttribute('class', 'menuitem-iconic');
|
||||
child.setAttribute('image', 'chrome://wappalyzer/skin/app_icons/' + detectedApp + '.ico');
|
||||
child.setAttribute('oncommand', 'gBrowser.selectedTab = gBrowser.addTab(\'' + wappalyzer.homeUrl + 'detail/?app=' + escape(detectedApp) + '\');');
|
||||
|
||||
e.appendChild(child);
|
||||
*/
|
||||
|
||||
wappalyzer.appsDetected ++;
|
||||
|
||||
wappalyzer.checkUnique[detectedApp] = true;
|
||||
}
|
||||
},
|
||||
|
||||
report: function(detectedApp, domain)
|
||||
{
|
||||
if ( wappalyzer.enableTracking && wappalyzer.regexDomain.test(domain) )
|
||||
{
|
||||
if ( typeof(wappalyzer.history[domain]) == 'undefined' )
|
||||
{
|
||||
wappalyzer.history[domain] = [];
|
||||
}
|
||||
|
||||
if ( typeof(wappalyzer.history[domain][detectedApp]) == 'undefined' )
|
||||
{
|
||||
wappalyzer.history[domain][detectedApp] = 0;
|
||||
}
|
||||
|
||||
wappalyzer.history[domain][detectedApp] ++;
|
||||
|
||||
wappalyzer.hitCount ++;
|
||||
|
||||
if ( wappalyzer.hitCount > 100 )
|
||||
{
|
||||
wappalyzer.sendReport();
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
sendReport: function()
|
||||
// Anonymously send the name of the detected apps and domains to wappalyzer.com
|
||||
// You can turn this off in the options dialog
|
||||
// This is used to track the distibution of software, stats are publically available on the site
|
||||
{
|
||||
if ( wappalyzer.enableTracking )
|
||||
{
|
||||
var report = '';
|
||||
|
||||
var i, j;
|
||||
|
||||
if ( wappalyzer.history )
|
||||
{
|
||||
for ( i in wappalyzer.history )
|
||||
{
|
||||
report += '[' + i;
|
||||
|
||||
for ( j in wappalyzer.history[i] )
|
||||
{
|
||||
report += '|' + j + ':' + wappalyzer.history[i][j];
|
||||
}
|
||||
|
||||
report += ']';
|
||||
}
|
||||
}
|
||||
|
||||
// Make POST request
|
||||
var req = new XMLHttpRequest();
|
||||
|
||||
req.open('POST', wappalyzer.homeUrl + 'report/', true);
|
||||
|
||||
req.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
|
||||
|
||||
req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
||||
|
||||
req.onreadystatechange = function(e)
|
||||
{
|
||||
if ( req.readyState == 4 )
|
||||
{
|
||||
if ( req.status == 200 )
|
||||
{
|
||||
// Reset
|
||||
report = '';
|
||||
|
||||
wappalyzer.hitCount = 0;
|
||||
wappalyzer.history = [];
|
||||
}
|
||||
|
||||
req.close();
|
||||
}
|
||||
}
|
||||
|
||||
req.send('d=' + encodeURIComponent(report));
|
||||
}
|
||||
},
|
||||
|
||||
clearDetectedApps: function()
|
||||
{
|
||||
wappalyzer.appsDetected = 0;
|
||||
wappalyzer.checkUnique = [];
|
||||
|
||||
// Show Wappalyzer icon
|
||||
document.getElementById('wappalyzer-icon').style.display = 'inline';
|
||||
|
||||
// Clear app icons and labels
|
||||
e = document.getElementById('wappalyzer-detected-apps');
|
||||
|
||||
while ( e.childNodes.length > 0 )
|
||||
{
|
||||
e.removeChild(e.childNodes.item(0));
|
||||
}
|
||||
|
||||
// Clear tooltip
|
||||
var panel = document.getElementById('wappalyzer-panel');
|
||||
|
||||
panel.setAttribute('tooltiptext', '');
|
||||
|
||||
/*
|
||||
// Disable domain details menu item
|
||||
var e = document.getElementById('wappalyzer_domain_details');
|
||||
|
||||
e.setAttribute('label', 'View domain details');
|
||||
e.setAttribute('disabled', true);
|
||||
e.setAttribute('image', false);
|
||||
|
||||
// Disable and clear application details menu item
|
||||
e = document.getElementById('wappalyzer_app_details');
|
||||
|
||||
e.parentNode.setAttribute('disabled', true);
|
||||
|
||||
while ( e.childNodes.length > 0 ) e.removeChild(e.childNodes.item(0));
|
||||
*/
|
||||
},
|
||||
|
||||
showLabels: function(show)
|
||||
{
|
||||
e = document.getElementsByClassName('wappalyzer-app-name');
|
||||
|
||||
for ( i = 0; i < e.length; i ++ )
|
||||
{
|
||||
e[i].style.display = show ? 'inline' : 'none';
|
||||
}
|
||||
},
|
||||
|
||||
openTab: function(url)
|
||||
{
|
||||
gBrowser.selectedTab = gBrowser.addTab(url);
|
||||
},
|
||||
|
||||
bookmarklet: function()
|
||||
{
|
||||
if ( typeof(gBrowser) == 'undefined' )
|
||||
{
|
||||
wappalyzer.isBookmarklet = true;
|
||||
|
||||
if ( !document.getElementById('wappalyzer-bookmarklet') )
|
||||
{
|
||||
var body = document.getElementsByTagName('body')[0];
|
||||
|
||||
if ( body )
|
||||
{
|
||||
var container = document.createElement('div');
|
||||
|
||||
container.innerHTML =
|
||||
'<div id="wappalyzer-bookmarklet" style="' +
|
||||
' color: #332;' +
|
||||
' font: 12px \'Trebuchet MS\';' +
|
||||
' position: fixed;' +
|
||||
' text-align: right;' +
|
||||
' right: 2em;' +
|
||||
' top: 2em;' +
|
||||
' z-index: 9999999999;' +
|
||||
' ">' +
|
||||
' <div id="wappalyzer-container" style="' +
|
||||
' -moz-border-radius: 7px;' +
|
||||
' -webkit-border-radius: 7px;' +
|
||||
' background: #FAFAFA;' +
|
||||
' border: 7px solid #332;' +
|
||||
' margin-bottom: .3em;' +
|
||||
' min-width: 15em;' +
|
||||
' padding: 1em 2em;' +
|
||||
' text-align: center;' +
|
||||
' ">' +
|
||||
' <div style="' +
|
||||
' border-bottom: 1px solid #332;' +
|
||||
' font-size: 13px;' +
|
||||
' padding-bottom: 1em;' +
|
||||
' margin-bottom: 1em;' +
|
||||
' "><strong>Wappalyzer</strong></div>' +
|
||||
' <span id="wappalyzer-bookmarklet-apps"><em>No apps detected</em></span>' +
|
||||
' </div>' +
|
||||
' <span style="float: left;"><a href="http://wappalyzer.com" style="color: #332 !important;">home</a> | <a href="http://twitter.com/ElbertF" style="color: #332 !important;">follow me</a></span>' +
|
||||
' <span style="float: right;">click to close</span>' +
|
||||
'</div>'
|
||||
;
|
||||
|
||||
container.onclick = function() { body.removeChild(container) };
|
||||
|
||||
body.appendChild(container);
|
||||
|
||||
wappalyzer.analyzePage(document, false, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
wappalyzer.bookmarklet();
|
@ -0,0 +1,48 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/overlay.css"?>
|
||||
|
||||
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.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"/>
|
||||
|
||||
<statusbar id="status-bar">
|
||||
<statusbarpanel
|
||||
id="wappalyzer-panel"
|
||||
label="&wappalyzer.title;"
|
||||
context="wappalyzer-menu"
|
||||
>
|
||||
<image
|
||||
id="wappalyzer-icon"
|
||||
onclick="wappalyzer.analyzePage(gBrowser.selectedBrowser.contentDocument, true, true);"
|
||||
class="wappalyzer-icon"
|
||||
tooltiptext="&wappalyzer.title;"
|
||||
label="&wappalyzer.title;"
|
||||
src="chrome://wappalyzer/skin/icon16x16.ico"/>
|
||||
|
||||
<box align="start" id="wappalyzer-detected-apps"/>
|
||||
|
||||
<menupopup id="wappalyzer-menu" position="at_pointer">
|
||||
<menuitem label="&wappalyzer.options;" oncommand="
|
||||
window.openDialog('chrome://wappalyzer/content/options.xul', 'wappalyzer-options', 'chrome, centerscreen, modal');
|
||||
"/>
|
||||
<menuseparator/>
|
||||
<menuitem label="&wappalyzer.feedback;" oncommand="wappalyzer.openTab(wappalyzer.homeUrl + '?redirect=feedback');"/>
|
||||
<menuitem label="&wappalyzer.home;" oncommand="wappalyzer.openTab(wappalyzer.homeUrl);"/>
|
||||
<!--menuitem id="wappalyzer_domain_details" label="&wappalyzer.domainDetails;" disabled="true" oncommand="
|
||||
var doc = gBrowser.selectedBrowser.contentDocument;
|
||||
|
||||
if ( doc.domain )
|
||||
{
|
||||
gBrowser.selectedTab = wappalyzer.openTab(wappalyzer.homeUrl + 'detail/?domain=' + escape(doc.domain));
|
||||
}
|
||||
"/>
|
||||
<menu label="&wappalyzer.appDetails;" disabled="true">
|
||||
<menupopup id="wappalyze-app-details"/>
|
||||
</menu>
|
||||
<menuseparator/-->
|
||||
</menupopup>
|
||||
</statusbarpanel>
|
||||
</statusbar>
|
||||
</overlay>
|
@ -0,0 +1,16 @@
|
||||
<!ENTITY wappalyzer.title "Wappalyzer">
|
||||
<!ENTITY wappalyzer.feedback "Feedback">
|
||||
<!ENTITY wappalyzer.options "Settings">
|
||||
<!ENTITY wappalyzer.enableTracking "Allow Wappalyzer to collect anonymous statistics">
|
||||
<!ENTITY wappalyzer.behavior "Behavior">
|
||||
<!ENTITY wappalyzer.detect "Detect applications">
|
||||
<!ENTITY wappalyzer.auto "Automatically">
|
||||
<!ENTITY wappalyzer.manual "On click">
|
||||
<!ENTITY wappalyzer.appNames "Show application names">
|
||||
<!ENTITY wappalyzer.always "Always">
|
||||
<!ENTITY wappalyzer.tooltip "Tooltip">
|
||||
<!ENTITY wappalyzer.hover "Expand on mouse over">
|
||||
<!ENTITY wappalyzer.home "Go to Wappalyzer">
|
||||
<!ENTITY wappalyzer.privacy "Privacy">
|
||||
<!ENTITY wappalyzer.domainDetails "View domain details">
|
||||
<!ENTITY wappalyzer.appDetails "View application details">
|
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 486 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 7.2 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 5.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 5.3 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 318 B |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 824 B |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 3.6 KiB |
After Width: | Height: | Size: 18 KiB |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 894 B |
After Width: | Height: | Size: 15 KiB |
After Width: | Height: | Size: 1000 B |
@ -0,0 +1,13 @@
|
||||
.wappalyzer-icon {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
#wappalyzer-tag {
|
||||
display: none;
|
||||
margin-right: .5em;
|
||||
}
|
||||
|
||||
#wappalyzer-detected-apps label {
|
||||
margin: 0 0 0 .3em;
|
||||
}
|