Added support for Firefox Mobile and moved icons to the address bar

main
ElbertF 14 years ago
parent 1f9e465cd7
commit cb1f636b97

@ -3,3 +3,7 @@ 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
override chrome://wappalyzer/content/overlay.xul chrome://wappalyzer/content/mobile/overlay.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66}
override chrome://wappalyzer/content/options.xul chrome://wappalyzer/content/mobile/options.xul application={a23983c0-fd0e-11dc-95ff-0800200c9a66}
override chrome://wappalyzer/skin/overlay.css chrome://wappalyzer/skin/mobile/overlay.css application={a23983c0-fd0e-11dc-95ff-0800200c9a66}

@ -0,0 +1,160 @@
if ( typeof(wappalyzer) != 'undefined' )
{
wappalyzer.apps = {
'phpBB': { html: /(Powered by (<a href=("|')[^>]+)?phpBB|<meta name=("|')copyright("|') [^>]+phpBB Group)/i },
'WordPress': { html: /(<link rel=("|')stylesheet("|') [^>]+wp-content|<meta name=("|')generator("|') [^>]+WordPress)/i },
'MediaWiki': { html: /(<meta name=("|')generator("|') [^>]+MediaWiki|<a[^>]+>Powered by MediaWiki<\/a>)/i },
'Joomla': { html: /(<meta name=("|')generator("|') [^>]+Joomla|<!\-\- JoomlaWorks "K2")/i, headers: { 'X-Content-Encoded-By': /Joomla/ } },
'Drupal': { 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': /.*/ } },
'Kolibri CMS': { html: /<meta name=("|')copyright("|') [^>]+Kolibri/i },
'vBulletin': { html: /<meta name=("|')generator("|') [^>]+vBulletin/i },
'SMF': { html: /<script .+\s+var smf_/i },
'IPB': { html: /<script [^>]+jscripts\/ips_/i },
'Coppermine': { html: /<!--Coppermine Photo Gallery/i },
'MiniBB': { html: /<a href=("|')[^>]+minibb.+\s+<!--End of copyright link/i },
'punBB': { html: /Powered by <a href=("|')[^>]+punbb/i },
'XMB': { html: /<!-- Powered by XMB/i },
'YaBB': { html: /Powered by <a href=("|')[^>]+yabbforum/i },
's9y': { html: /<meta name=("|')Powered-By("|') [^>]+Serendipity/i },
'e107': { html: /<script [^>]+e107\.js/i },
'PHP-Fusion': { html: /Powered by <a href=("|')[^>]+php-fusion/i },
'DokuWiki': { html: /<meta name=("|')generator("|') [^>]+DokuWiki/i },
'Squarespace': { html: /Squarespace\.Constants\.CURRENT_MODULE_ID/i },
'MyBB': { html: /(<script .+\s+<!--\s+lang\.no_new_posts|<a[^>]* title=("|')Powered By MyBB)/i },
'FluxBB': { html: /Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i },
'Vanilla': { html: /<body id=("|')(DiscussionsPage|vanilla)/i, headers: { 'X-Powered-By': /Vanilla/ } },
'TYPO3': { html: /(<meta name=("|')generator("|') [^>]+TYPO3|<(script[^>]* src|link[^>]* href)=[^>]*fileadmin)/i, url: /\/typo3/i },
'Prestashop': { html: /(<meta name=("|')generator("|') [^>]+PrestaShop|Powered by <a href=("|')[^>]+PrestaShop)/i },
'Zen Cart': { html: /<meta name=("|')generator("|') [^>]+Zen Cart/i },
'osCommerce': { html: /<!-- header_eof \/\/-->/i },
'WikkaWiki': { html: /(Powered by <a href=("|')[^>]+WikkaWiki|<meta name=("|')generator("|') [^>]+WikkaWiki)/i },
'osCSS': { html: /<body onload=("|')window\.defaultStatus='oscss templates';("|')/i },
'Google Analytics': { html: /(\.google\-analytics\.com\/ga\.js|<script src=("|')[^"]+google-analytics\.com\/urchin\.js("|'))/i },
'Crazy Egg': { html: /<script type=("|')text\/javascript("|') src=("|')http:\/\/cetrk\.com\/pages\/scripts\/[0-9]+\/[0-9]+\.js("|')/ },
'OneStat': { html: /var p=("|')http("|')\+\(d\.URL\.indexOf\('https:'\)==0\?'s':''\)\+("|'):\/\/stat\.onestat\.com\/stat\.aspx\?tagver/i },
'Clicky': { html: /<script src=("|')http:\/\/static\.getclicky\.com/i },
'Quantcast': { html: /<script[^>]* src=("|')http:\/\/edge\.quantserve\.com\/quant\.js("|')>/i },
'StatCounter': { html: /<script[^>]* src=("|')http:\/\/www\.statcounter\.com\/counter\/counter/i },
'W3Counter': { html: /<script[^>]* src=("|')http:\/\/www\.w3counter\.com\/tracker\.js("|')>/i },
'Site Meter': { html: /<script[^>]* src=("|')http:\/\/[^.]+\.sitemeter.com\/js\/counter\.js\?site=/i },
'CubeCart': { html: /Powered by <a href=.http:\/\/www\.cubecart\.com/i },
'jQuery': { html: /<script[^>]* src=("|')[^>]*jquery[^>]*\.js/i },
'MooTools': { html: /<script[^>]* src=("|')[^>]*mootools[^>]*\.js("|')/i },
'Prototype': { html: /<script[^>]* src=("|')[^>]*prototype\.js("|')/i },
'MochiKit': { html: /<script[^>]* src=("|')[^>]*MochiKit\.js/i },
'viennaCMS': { html: /powered by <a href=("|')[^>]+viennacms/i },
'Movable Type': { html: /<meta name=("|')generator("|') [^>]+Movable Type/i },
'Tumblr': { html: /<iframe src=("|')http:\/\/www\.tumblr\.com/i, url: /^(www.)?.+\.tumblr\.com/i, headers: { 'X-Tumblr-Usec': /.*/ } },
'Google Friend Connect': { html: /<script[^>]* src=("|')[^>]*google.com\/friendconnect/i },
'MyBlogLog': { html: /<script[^>]* src=("|')[^>]*pub\.mybloglog\.com/i },
'Google Maps': { html: /(<script[^>]* src=("|')[^>]*maps\.google\.com\/maps\?file=api|maps\.google\.com\/maps\/api\/staticmap)/i },
'AWStats': { html: /<meta name=("|')generator("|') [^>]+AWStats/i },
'phpMyAdmin': { html: /(var pma_absolute_uri = '|PMA_sendHeaderLocation\(|<title>phpMyAdmin<\/title>)/i },
'phpDocumentor': { html: /<!-- Generated by phpDocumentor/ },
'BigDump': { html: /<!-- <h1>BigDump: Staggered MySQL Dump Importer/ },
'MODx': { html: /(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)/i },
'VP-ASP': { html: /(<a[^>]+>Powered By VP\-ASP Shopping Cart<\/a>|<script[^>]* src=("|')[^>]*vs350\.js)/ },
'SPIP': { html: /<meta name=("|')generator("|') [^>]+SPIP/i, headers: { 'X-Spip-Cache': /.*/ } },
'Plesk': { html: /<script[^>]* src=("|')[^>]*common\.js\?plesk/i },
'Magento': { html: /var BLANK_URL = '[^>]+js\/blank\.html'/i },
'DirectAdmin': { html: /<a[^>]+>DirectAdmin<\/a> Web Control Panel/i },
'cPanel': { html: /<!-- cPanel/i },
'webEdition': { html: /(<meta name=("|')generator("|') [^>]+webEdition|<meta name=("|')DC.title("|') [^>]+webEdition)/i },
'CMS Made Simple': { html: /<meta name=("|')generator("|') [^>]+CMS Made Simple/i },
'xtCommerce': { html: /(<meta name=("|')generator("|') [^>]+xt:Commerce|<div class=("|')copyright("|')>.+<a[^>]+>xt:Commerce)/i },
'BIGACE': { html: /(<meta name=("|')generator("|') [^>]+BIGACE|Powered by <a href=("|')[^>]+BIGACE|<!--\s+Site is running BIGACE)/i },
'Ubercart': { html: /<script[^>]* src=("|')[^>]*uc_cart\/uc_cart_block\.js/i },
'Contao': { html: /(<!--\s+This website is powered by (TYPOlight|Contao)|<link[^>]+(typolight|contao).css)/i },
'posterous': { html: /<div class=("|')posterous/i },
'papaya CMS': { html: /<link[^>]*\/papaya-themes\//i },
'eZ Publish': { html: /<meta name=("|')generator("|') [^>]+eZ Publish/i },
'script.aculo.us': { html: /<script[^>]* src=("|')[^>]*scriptaculous\.js("|')/i },
'dojo': { html: /<script[^>]* src=("|')[^>]*dojo(\.xd)?\.js("|')/i },
'ExtJS': { html: /<script[^>]* src=("|')[^>]*ext\-base\.js("|')/i },
'WebPublisher': { html: /<meta name=("|')generator("|') [^>]+WEB\|Publisher/i },
'ConversionLab': { html: /<script[^>]* src=("|')http:\/\/conversionlab\.trackset\.com\/track\/tsend\.js("|')/ },
'Koego': { html: /<script[^>]* src=("|')http\:\/\/tracking\.koego\.com\/end\/ego\.js("|')/ },
'YUI': { html: /<script[^>]* src=("|')[^'"]*(\/yui\/|yui\.yahooapis\.com)[^'"]*("|')/ },
'VisualPath': { html: /<script[^>]* src=("|')http:\/\/visualpath[^\/]*\.trackset\.it\/[^\/]+\/track\/include\.js("|')/ },
'WebGUI': { html: /<meta name=("|')generator("|') [^>]+WebGUI/i },
'Plone': { html: /<meta name=("|')generator("|') [^>]+Plone/i },
'CS Cart': { html: /&nbsp;Powered by (<a href=.http:\/\/www\.cs\-cart\.com|CS\-Cart)/i },
'Web Optimizer': { html: /<title [^>]*lang=("|')wo("|')>/ },
'K2': { html: /<!\-\- JoomlaWorks "K2"/ },
'AddThis': { html: /<script[^>]* src=("|')[^>]*addthis\.com\/js/ },
'Koobi': { html: /<meta name=("|')generator("|') [^>]+Koobi/i },
'XiTi': { html: /<[^>]+src=("|')[^>]+xiti.com\/hit.xiti/i },
'Kampyle': { html: /<script[^>]* src=("|')http:\/\/cf\.kampyle\.com\/k_button\.js("|')/ },
'ClickTale': { html: /if\(typeof ClickTale(Tag)*==("|')function("|')\)/ },
'Yahoo! Web Analytics': { html: /<script[^>]* src=("|')[^>]*http:\/\/d\.yimg\.com\/mi\/ywa\.js/ },
'XOOPS': { html: /<meta name=("|')generator("|') [^>]+XOOPS/i },
'Amiro.CMS': { html: /<meta name=("|')generator("|') [^>]+Amiro/i },
'Blogger': { html: /<meta content=("|')blogger("|') [^>]+generator/i, url: /^(www.)?.+\.blogspot\.com/i },
'DataLife Engine': { html: /<meta name=("|')generator("|') [^>]+DataLife Engine/i },
'Nedstat': { html: /sitestat\(("|')http:\/\/nl\.sitestat\.com/ },
'Microsoft ASP.NET': { html: /<input[^>]+name=("|')__VIEWSTATE/ },
'Yandex.Metrika': { html: /<script[^>]* src=("|')[^"']+mc\.yandex\.ru\/metrika\/watch\.js("|')/ },
'Snoobi': { html: /<script[^>]* src=("|')[^"']+snoobi\.com\/snoop\.php/ },
'Moogo': { html: /<script[^>]* src=("|')[^"']+kotisivukone.js/ },
'Trac': { html: /(<a id=("|')tracpowered)/i },
'MantisBT': { html: /<img[^>]+ alt=("|')Powered by Mantis Bugtracker/i },
'Bugzilla': { html: /<[^>]+(id|title|name)=("|')bugzilla/i },
'Redmine': { html: /(<meta name=("|')description("|')Redmine("|')|Powered by <a href=("|')[^>]+Redmine)/i },
'2z Project': { html: /<meta name=("|')generator("|') [^>]+2z project/i },
'Get Satisfaction': { html: /var feedback_widget = new GSFN\.feedback_widget\(feedback_widget_options\)/ },
'Swiftlet': { html: /(<meta name=("|')generator("|') [^>]+Swiftlet|Powered by <a href=("|')[^>]+Swiftlet)/i, headers: { 'X-Swiftlet-Cache': /.*/, 'X-Powered-By': /Swiftlet/ } },
'YouTube': { html: /<(param|embed)[^>]+youtube\.com\/v/i },
'Vimeo': { html: /<(param|embed)[^>]+vimeo\.com\/moogaloop/i },
'blip.tv': { html: /<(param|embed)[^>]+blip\.tv\/play/i },
'SWFObject': { html: /<script[^>]+swfobject\.js/i },
'Textpattern CMS': { html: /<meta name=("|')generator("|') [^>]+Textpattern/i },
'1C-Bitrix': { html: /(<link[^>]+components\/bitrix|<script[^>]+1c\-bitrix)/i },
'InstantCMS': { html: /<meta name=("|')generator("|') [^>]+InstantCMS/i },
'MaxSite CMS': { html: /<meta name=("|')generator("|') [^>]+MaxSite CMS/i },
'S.Builder': { html: /<meta name=("|')generator("|') [^>]+S\.Builder/i },
'openEngine': { html: /<meta[^>]+openEngine/i },
'SiteEdit': { html: /<meta name=("|')generator("|') [^>]+SiteEdit/i },
'Kentico CMS': { html: /<meta name=("|')generator("|') [^>]+Kentico CMS/i },
'ShareThis': { html: /<script[^>]+ src=("|')[^"']+w\.sharethis\.com\//i },
'chartbeat': { html: /function loadChartbeat\(\) {/i },
'Meebo': { html: /(<iframe id=("|')meebo\-iframe("|')|Meebo\('domReady'\))/ },
'Gravity Insights': { html: /gravityInsightsParams\.site_guid = '/ },
'Disqus': { html: /(<div[^>]+id=("|')disqus_thread("|')|<script[^>]+disqus_url)/ },
'reCAPTCHA': { html: /(<div[^>]+id=("|')recaptcha_image|<script[^>]+ src=("|')https:\/\/api\-secure\.recaptcha\.net)/ },
'DotNetNuke': { html: /(<meta name=("|')generator("|') [^>]+DotNetNuke|<!\-\- by DotNetNuke Corporation)/i },
'jQuery UI': { html: /<script[^>]* src=("|')[^>]*jquery\-ui[^>]*\.js/i },
'Typekit': { html: /<script[^>]* src=("|')[^>]*use.typekit.com/i },
'Mint': { html: /<script[^>]* src=("|')[^>]*mint\/\?js/i },
'cufon': { html: /(<script[^>]* src=("|')[^>]*cufon\-yui\.js|<script[^>]*>[^<]+Cufon\.now\(\))/i },
'sIFR': { html: /<script[^>]* src=("|')[^>]*sifr\.js/i },
'Mollom': { html: /(<script[^>]* src=("|')[^>]*mollom\.js|<img[^>]+\/.mollom\/.com)/i },
'YUI Doc': { html: /<html[^>]* yuilibrary\.com\/rdf\/[0-9.]+\/yui\.rdf/i },
'Piwik': { html: /var piwikTracker = Piwik\.getTracker\(/i },
'SOBI 2': { html: /(<!\-\- start of Sigsiu Online Business Index|<div[^>]* class=("|')sobi2)/i },
'DreamWeaver': { html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'FrontPage': { html: /<meta name=("|')GENERATOR("|') [^>]+Microsoft FrontPage/i },
'TypePad': { html: /<meta name=("|')generator("|') [^>]+typepad/i, url: /^(www.)?.+\.typepad\.com/i },
'LiveJournal': { url: /^(www.)?.+\.livejournal\.com/i },
'Vox': { url: /^(www.)?.+\.vox\.com/i },
'xajax': { html: /<script[^>]* src=("|')[^>]*xajax_core\.js/i },
'OpenCart': { html: /(Powered By <a href=("|')[^>]+OpenCart|route = getURLVar\(("|')route)/i },
'SQL Buddy': { html: /(<title>SQL Buddy<\/title>|<[^>]+onclick=("|')sideMainClick\(("|')home\.php)/i },
'phpPgAdmin': { html: /(<title>phpPgAdmin<\/title>|<span class=("|')appname("|')>phpPgAdmin)/i },
'Flyspray': { html: /(<a[^>]+>Powered by Flyspray|<map id=("|')projectsearchform)/ },
'swift.engine': { headers: { 'X-Powered-By': /swift\.engine/ } },
'sNews': { html: /<meta name=("|')Generator("|') [^>]+sNews/ },
'Plura': { html: /<iframe src="http:\/\/pluraserver\.com/ },
'comScore': { html: /<iframe[^>]* (id=("|')comscore("|')|scr=[^>]+comscore)/ },
'Google Font API': { html: /<link[^>]* href=("|')http:\/\/fonts\.googleapis\.com/ },
'CO2Stats': { html: /src=("|')http:\/\/www\.co2stats\.com\/propres\.php/ },
'Woopra': { html: /<script[^>]* src=("|')[^>]*static\.woopra\.com/i },
'Webtrekk': { html: /var webtrekk = new Object/ },
'Reinvigorate': { html: /reinvigorate\.track\("/ },
'Quick.Cart': { html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'VirtueMart': { html: /<div id=("|')vmMainPage/ },
'Cotonti': { html: /<meta name=("|')generator("|') [^>]+Cotonti/i },
'Mambo': { html: /<meta name=("|')generator("|') [^>]+Mambo/i },
'Concrete5': { html: /<meta name=("|')generator("|') [^>]+concrete5/i },
'Webtrends': { html: /<img[^>]+id=("|')DCSIMG("|')[^>]+webtrends/i }
};
}

@ -0,0 +1,75 @@
var wappalyzer = {};
wappalyzer =
{
prevUrl: '',
init: function()
{
wappalyzer.log('init');
addEventListener('DOMContentLoaded', wappalyzer.onPageLoad, false);
//Browser.selectedBrowser.addProgressListener(wappalyzer.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
},
log: function(message)
{
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
consoleService.logStringMessage("Wappalyzer content.js: " + message);
},
onPageLoad: function(e)
{
sendAsyncMessage('wappalyzer:onPageLoad', {
href: content.document.location.href,
html: content.document.documentElement.innerHTML,
headers: []
});
},
onUrlChange: function(request)
{
wappalyzer.log('onUrlChange');
},
urlChange:
{
QueryInterface: function(iid)
{
if ( iid.equals(Components.interfaces.nsIWebProgressListener) ||
iid.equals(Components.interfaces.nsISupportsWeakReference) ||
iid.equals(Components.interfaces.nsISupports) )
{
return this;
}
throw Components.results.NS_NOINTERFACE;
},
onLocationChange: function(progress, request, url)
{
if ( !url )
{
wappalyzer.prevUrl = '';
return;
}
if ( url.spec != wappalyzer.prevUrl )
{
wappalyzer.prevUrl = url.spec;
wappalyzer.onUrlChange(request);
}
},
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) {}
}
};
wappalyzer.init();

@ -0,0 +1,19 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.dtd">
<dialog id="wappalyzer-prompt"
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
title="TEST"
buttons="accept,cancel"
style="min-height: 100px;"
onload=""
ondialogaccept="">
<hbox>
<vbox align="center" pack="start">
<image src="chrome://wappalyzer/skin/icon32x32.png" style="padding: 20px;"/>
</vbox>
</hbox>
</dialog>

@ -0,0 +1,8 @@
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/overlay.dtd">
<vbox xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
</vbox>

@ -0,0 +1,31 @@
<?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"/>
<script type="application/x-javascript" src="chrome://wappalyzer/content/apps.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="wappalyzer-strings" src="chrome://wappalyzer/locale/overlay.properties" />
</stringbundleset>
<script type="application/x-javascript">
<![CDATA[
if ( typeof(wappalyzer) != 'undefined' )
{
wappalyzer.isMobile = true;
}
]]>
</script>
<hbox id="urlbar-container">
<hbox id="wappalyzer-detected-apps" align="middle">
</hbox>
<hbox id="wappalyzer-icon" align="middle">
<image src="chrome://wappalyzer/skin/icon32x32.png" class="wappalyzer-icon"/>
</hbox>
</hbox>
</overlay>

@ -2,191 +2,35 @@
var wappalyzer = {};
window.addEventListener('load', function() { wappalyzer.init(); }, false);
window.addEventListener('unload', function() { wappalyzer.sendReport(); }, false);
addEventListener('load', function() { wappalyzer.init(); }, false);
addEventListener('unload', function() { wappalyzer.sendReport(); }, false);
wappalyzer =
{
homeUrl: 'http://wappalyzer.com/',
prevUrl: '',
regexDomain: /^[a-z0-9._\-]+\.[a-z]+$/,
apps: {},
appsDetected: 0,
checkUnique: {},
currentTab: false,
prefs: null,
autoDetect: true,
browser: {},
currentTab: false,
checkUnique: {},
enableTracking: true,
newInstall: false,
showAppNames: 3,
history: {},
hitCount: 0,
homeUrl: 'http://wappalyzer.com/',
isBookmarklet: false,
isMobile: false,
newInstall: false,
prevUrl: '',
prefs: {},
regexDomain: /^[a-z0-9._\-]+\.[a-z]+/,
req: false,
apps: {
'phpBB': { html: /(Powered by (<a href=("|')[^>]+)?phpBB|<meta name=("|')copyright("|') [^>]+phpBB Group)/i },
'WordPress': { html: /(<link rel=("|')stylesheet("|') [^>]+wp-content|<meta name=("|')generator("|') [^>]+WordPress)/i },
'MediaWiki': { html: /(<meta name=("|')generator("|') [^>]+MediaWiki|<a[^>]+>Powered by MediaWiki<\/a>)/i },
'Joomla': { html: /(<meta name=("|')generator("|') [^>]+Joomla|<!\-\- JoomlaWorks "K2")/i, headers: { 'X-Content-Encoded-By': /Joomla/ } },
'Drupal': { 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': /.*/ } },
'Kolibri CMS': { html: /<meta name=("|')copyright("|') [^>]+Kolibri/i },
'vBulletin': { html: /<meta name=("|')generator("|') [^>]+vBulletin/i },
'SMF': { html: /<script .+\s+var smf_/i },
'IPB': { html: /<script [^>]+jscripts\/ips_/i },
'Coppermine': { html: /<!--Coppermine Photo Gallery/i },
'MiniBB': { html: /<a href=("|')[^>]+minibb.+\s+<!--End of copyright link/i },
'punBB': { html: /Powered by <a href=("|')[^>]+punbb/i },
'XMB': { html: /<!-- Powered by XMB/i },
'YaBB': { html: /Powered by <a href=("|')[^>]+yabbforum/i },
's9y': { html: /<meta name=("|')Powered-By("|') [^>]+Serendipity/i },
'e107': { html: /<script [^>]+e107\.js/i },
'PHP-Fusion': { html: /Powered by <a href=("|')[^>]+php-fusion/i },
'DokuWiki': { html: /<meta name=("|')generator("|') [^>]+DokuWiki/i },
'Squarespace': { html: /Squarespace\.Constants\.CURRENT_MODULE_ID/i },
'MyBB': { html: /(<script .+\s+<!--\s+lang\.no_new_posts|<a[^>]* title=("|')Powered By MyBB)/i },
'FluxBB': { html: /Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i },
'Vanilla': { html: /<body id=("|')(DiscussionsPage|vanilla)/i, headers: { 'X-Powered-By': /Vanilla/ } },
'TYPO3': { html: /(<meta name=("|')generator("|') [^>]+TYPO3|<(script[^>]* src|link[^>]* href)=[^>]*fileadmin)/i, url: /\/typo3/i },
'Prestashop': { html: /(<meta name=("|')generator("|') [^>]+PrestaShop|Powered by <a href=("|')[^>]+PrestaShop)/i },
'Zen Cart': { html: /<meta name=("|')generator("|') [^>]+Zen Cart/i },
'osCommerce': { html: /<!-- header_eof \/\/-->/i },
'WikkaWiki': { html: /(Powered by <a href=("|')[^>]+WikkaWiki|<meta name=("|')generator("|') [^>]+WikkaWiki)/i },
'osCSS': { html: /<body onload=("|')window\.defaultStatus='oscss templates';("|')/i },
'Google Analytics': { html: /(\.google\-analytics\.com\/ga\.js|<script src=("|')[^"]+google-analytics\.com\/urchin\.js("|'))/i },
'Crazy Egg': { html: /<script type=("|')text\/javascript("|') src=("|')http:\/\/cetrk\.com\/pages\/scripts\/[0-9]+\/[0-9]+\.js("|')/ },
'OneStat': { html: /var p=("|')http("|')\+\(d\.URL\.indexOf\('https:'\)==0\?'s':''\)\+("|'):\/\/stat\.onestat\.com\/stat\.aspx\?tagver/i },
'Clicky': { html: /<script src=("|')http:\/\/static\.getclicky\.com/i },
'Quantcast': { html: /<script[^>]* src=("|')http:\/\/edge\.quantserve\.com\/quant\.js("|')>/i },
'StatCounter': { html: /<script[^>]* src=("|')http:\/\/www\.statcounter\.com\/counter\/counter/i },
'W3Counter': { html: /<script[^>]* src=("|')http:\/\/www\.w3counter\.com\/tracker\.js("|')>/i },
'Site Meter': { html: /<script[^>]* src=("|')http:\/\/[^.]+\.sitemeter.com\/js\/counter\.js\?site=/i },
'CubeCart': { html: /Powered by <a href=.http:\/\/www\.cubecart\.com/i },
'jQuery': { html: /<script[^>]* src=("|')[^>]*jquery[^>]*\.js/i },
'MooTools': { html: /<script[^>]* src=("|')[^>]*mootools[^>]*\.js("|')/i },
'Prototype': { html: /<script[^>]* src=("|')[^>]*prototype\.js("|')/i },
'MochiKit': { html: /<script[^>]* src=("|')[^>]*MochiKit\.js/i },
'viennaCMS': { html: /powered by <a href=("|')[^>]+viennacms/i },
'Movable Type': { html: /<meta name=("|')generator("|') [^>]+Movable Type/i },
'Tumblr': { html: /<iframe src=("|')http:\/\/www\.tumblr\.com/i, url: /^(www.)?.+\.tumblr\.com/i, headers: { 'X-Tumblr-Usec': /.*/ } },
'Google Friend Connect': { html: /<script[^>]* src=("|')[^>]*google.com\/friendconnect/i },
'MyBlogLog': { html: /<script[^>]* src=("|')[^>]*pub\.mybloglog\.com/i },
'Google Maps': { html: /(<script[^>]* src=("|')[^>]*maps\.google\.com\/maps\?file=api|maps\.google\.com\/maps\/api\/staticmap)/i },
'AWStats': { html: /<meta name=("|')generator("|') [^>]+AWStats/i },
'phpMyAdmin': { html: /(var pma_absolute_uri = '|PMA_sendHeaderLocation\(|<title>phpMyAdmin<\/title>)/i },
'phpDocumentor': { html: /<!-- Generated by phpDocumentor/ },
'BigDump': { html: /<!-- <h1>BigDump: Staggered MySQL Dump Importer/ },
'MODx': { html: /(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)/i },
'VP-ASP': { html: /(<a[^>]+>Powered By VP\-ASP Shopping Cart<\/a>|<script[^>]* src=("|')[^>]*vs350\.js)/ },
'SPIP': { html: /<meta name=("|')generator("|') [^>]+SPIP/i, headers: { 'X-Spip-Cache': /.*/ } },
'Plesk': { html: /<script[^>]* src=("|')[^>]*common\.js\?plesk/i },
'Magento': { html: /var BLANK_URL = '[^>]+js\/blank\.html'/i },
'DirectAdmin': { html: /<a[^>]+>DirectAdmin<\/a> Web Control Panel/i },
'cPanel': { html: /<!-- cPanel/i },
'webEdition': { html: /(<meta name=("|')generator("|') [^>]+webEdition|<meta name=("|')DC.title("|') [^>]+webEdition)/i },
'CMS Made Simple': { html: /<meta name=("|')generator("|') [^>]+CMS Made Simple/i },
'xtCommerce': { html: /(<meta name=("|')generator("|') [^>]+xt:Commerce|<div class=("|')copyright("|')>.+<a[^>]+>xt:Commerce)/i },
'BIGACE': { html: /(<meta name=("|')generator("|') [^>]+BIGACE|Powered by <a href=("|')[^>]+BIGACE|<!--\s+Site is running BIGACE)/i },
'Ubercart': { html: /<script[^>]* src=("|')[^>]*uc_cart\/uc_cart_block\.js/i },
'Contao': { html: /(<!--\s+This website is powered by (TYPOlight|Contao)|<link[^>]+(typolight|contao).css)/i },
'posterous': { html: /<div class=("|')posterous/i },
'papaya CMS': { html: /<link[^>]*\/papaya-themes\//i },
'eZ Publish': { html: /<meta name=("|')generator("|') [^>]+eZ Publish/i },
'script.aculo.us': { html: /<script[^>]* src=("|')[^>]*scriptaculous\.js("|')/i },
'dojo': { html: /<script[^>]* src=("|')[^>]*dojo(\.xd)?\.js("|')/i },
'ExtJS': { html: /<script[^>]* src=("|')[^>]*ext\-base\.js("|')/i },
'WebPublisher': { html: /<meta name=("|')generator("|') [^>]+WEB\|Publisher/i },
'ConversionLab': { html: /<script[^>]* src=("|')http:\/\/conversionlab\.trackset\.com\/track\/tsend\.js("|')/ },
'Koego': { html: /<script[^>]* src=("|')http\:\/\/tracking\.koego\.com\/end\/ego\.js("|')/ },
'YUI': { html: /<script[^>]* src=("|')[^'"]*(\/yui\/|yui\.yahooapis\.com)[^'"]*("|')/ },
'VisualPath': { html: /<script[^>]* src=("|')http:\/\/visualpath[^\/]*\.trackset\.it\/[^\/]+\/track\/include\.js("|')/ },
'WebGUI': { html: /<meta name=("|')generator("|') [^>]+WebGUI/i },
'Plone': { html: /<meta name=("|')generator("|') [^>]+Plone/i },
'CS Cart': { html: /&nbsp;Powered by (<a href=.http:\/\/www\.cs\-cart\.com|CS\-Cart)/i },
'Web Optimizer': { html: /<title [^>]*lang=("|')wo("|')>/ },
'K2': { html: /<!\-\- JoomlaWorks "K2"/ },
'AddThis': { html: /<script[^>]* src=("|')[^>]*addthis\.com\/js/ },
'Koobi': { html: /<meta name=("|')generator("|') [^>]+Koobi/i },
'XiTi': { html: /<[^>]+src=("|')[^>]+xiti.com\/hit.xiti/i },
'Kampyle': { html: /<script[^>]* src=("|')http:\/\/cf\.kampyle\.com\/k_button\.js("|')/ },
'ClickTale': { html: /if\(typeof ClickTale(Tag)*==("|')function("|')\)/ },
'Yahoo! Web Analytics': { html: /<script[^>]* src=("|')[^>]*http:\/\/d\.yimg\.com\/mi\/ywa\.js/ },
'XOOPS': { html: /<meta name=("|')generator("|') [^>]+XOOPS/i },
'Amiro.CMS': { html: /<meta name=("|')generator("|') [^>]+Amiro/i },
'Blogger': { html: /<meta content=("|')blogger("|') [^>]+generator/i, url: /^(www.)?.+\.blogspot\.com/i },
'DataLife Engine': { html: /<meta name=("|')generator("|') [^>]+DataLife Engine/i },
'Nedstat': { html: /sitestat\(("|')http:\/\/nl\.sitestat\.com/ },
'Microsoft ASP.NET': { html: /<input[^>]+name=("|')__VIEWSTATE/ },
'Yandex.Metrika': { html: /<script[^>]* src=("|')[^"']+mc\.yandex\.ru\/metrika\/watch\.js("|')/ },
'Snoobi': { html: /<script[^>]* src=("|')[^"']+snoobi\.com\/snoop\.php/ },
'Moogo': { html: /<script[^>]* src=("|')[^"']+kotisivukone.js/ },
'Trac': { html: /(<a id=("|')tracpowered)/i },
'MantisBT': { html: /<img[^>]+ alt=("|')Powered by Mantis Bugtracker/i },
'Bugzilla': { html: /<[^>]+(id|title|name)=("|')bugzilla/i },
'Redmine': { html: /(<meta name=("|')description("|')Redmine("|')|Powered by <a href=("|')[^>]+Redmine)/i },
'2z Project': { html: /<meta name=("|')generator("|') [^>]+2z project/i },
'Get Satisfaction': { html: /var feedback_widget = new GSFN\.feedback_widget\(feedback_widget_options\)/ },
'Swiftlet': { html: /(<meta name=("|')generator("|') [^>]+Swiftlet|Powered by <a href=("|')[^>]+Swiftlet)/i, headers: { 'X-Swiftlet-Cache': /.*/, 'X-Powered-By': /Swiftlet/ } },
'YouTube': { html: /<(param|embed)[^>]+youtube\.com\/v/i },
'Vimeo': { html: /<(param|embed)[^>]+vimeo\.com\/moogaloop/i },
'blip.tv': { html: /<(param|embed)[^>]+blip\.tv\/play/i },
'SWFObject': { html: /<script[^>]+swfobject\.js/i },
'Textpattern CMS': { html: /<meta name=("|')generator("|') [^>]+Textpattern/i },
'1C-Bitrix': { html: /(<link[^>]+components\/bitrix|<script[^>]+1c\-bitrix)/i },
'InstantCMS': { html: /<meta name=("|')generator("|') [^>]+InstantCMS/i },
'MaxSite CMS': { html: /<meta name=("|')generator("|') [^>]+MaxSite CMS/i },
'S.Builder': { html: /<meta name=("|')generator("|') [^>]+S\.Builder/i },
'openEngine': { html: /<meta[^>]+openEngine/i },
'SiteEdit': { html: /<meta name=("|')generator("|') [^>]+SiteEdit/i },
'Kentico CMS': { html: /<meta name=("|')generator("|') [^>]+Kentico CMS/i },
'ShareThis': { html: /<script[^>]+ src=("|')[^"']+w\.sharethis\.com\//i },
'chartbeat': { html: /function loadChartbeat\(\) {/i },
'Meebo': { html: /(<iframe id=("|')meebo\-iframe("|')|Meebo\('domReady'\))/ },
'Gravity Insights': { html: /gravityInsightsParams\.site_guid = '/ },
'Disqus': { html: /(<div[^>]+id=("|')disqus_thread("|')|<script[^>]+disqus_url)/ },
'reCAPTCHA': { html: /(<div[^>]+id=("|')recaptcha_image|<script[^>]+ src=("|')https:\/\/api\-secure\.recaptcha\.net)/ },
'DotNetNuke': { html: /(<meta name=("|')generator("|') [^>]+DotNetNuke|<!\-\- by DotNetNuke Corporation)/i },
'jQuery UI': { html: /<script[^>]* src=("|')[^>]*jquery\-ui[^>]*\.js/i },
'Typekit': { html: /<script[^>]* src=("|')[^>]*use.typekit.com/i },
'Mint': { html: /<script[^>]* src=("|')[^>]*mint\/\?js/i },
'cufon': { html: /(<script[^>]* src=("|')[^>]*cufon\-yui\.js|<script[^>]*>[^<]+Cufon\.now\(\))/i },
'sIFR': { html: /<script[^>]* src=("|')[^>]*sifr\.js/i },
'Mollom': { html: /(<script[^>]* src=("|')[^>]*mollom\.js|<img[^>]+\/.mollom\/.com)/i },
'YUI Doc': { html: /<html[^>]* yuilibrary\.com\/rdf\/[0-9.]+\/yui\.rdf/i },
'Piwik': { html: /var piwikTracker = Piwik\.getTracker\(/i },
'SOBI 2': { html: /(<!\-\- start of Sigsiu Online Business Index|<div[^>]* class=("|')sobi2)/i },
'DreamWeaver': { html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'FrontPage': { html: /<meta name=("|')GENERATOR("|') [^>]+Microsoft FrontPage/i },
'TypePad': { html: /<meta name=("|')generator("|') [^>]+typepad/i, url: /^(www.)?.+\.typepad\.com/i },
'LiveJournal': { url: /^(www.)?.+\.livejournal\.com/i },
'Vox': { url: /^(www.)?.+\.vox\.com/i },
'xajax': { html: /<script[^>]* src=("|')[^>]*xajax_core\.js/i },
'OpenCart': { html: /Powered By <a href=("|')[^>]+OpenCart/i },
'SQL Buddy': { html: /(<title>SQL Buddy<\/title>|<[^>]+onclick=("|')sideMainClick\(("|')home\.php)/i },
'phpPgAdmin': { html: /(<title>phpPgAdmin<\/title>|<span class=("|')appname("|')>phpPgAdmin)/i },
'Flyspray': { html: /(<a[^>]+>Powered by Flyspray|<map id=("|')projectsearchform)/ },
'swift.engine': { headers: { 'X-Powered-By': /swift\.engine/ } },
'sNews': { html: /<meta name=("|')Generator("|') [^>]+sNews/ },
'Plura': { html: /<iframe src="http:\/\/pluraserver\.com/ },
'comScore': { html: /<iframe[^>]* (id=("|')comscore("|')|scr=[^>]+comscore)/ },
'Google Font API': { html: /<link[^>]* href=("|')http:\/\/fonts\.googleapis\.com/ },
'CO2Stats': { html: /src=("|')http:\/\/www\.co2stats\.com\/propres\.php/ },
'Woopra': { html: /<script[^>]* src=("|')[^>]*static\.woopra\.com/i },
'Webtrekk': { html: /var webtrekk = new Object/ },
'Reinvigorate': { html: /reinvigorate\.track\("/ },
'Quick.Cart': { html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'VirtueMart': { html: /<div id=("|')vmMainPage/ },
'Cotonti': { html: /<meta name=("|')generator("|') [^>]+Cotonti/i },
'Mambo': { html: /<meta name=("|')generator("|') [^>]+Mambo/i },
'Concrete5': { html: /<meta name=("|')generator("|') [^>]+concrete5/i },
'Webtrends': { html: /<img[^>]+id=("|')DCSIMG("|')[^>]+webtrends/i }
},
showAppNames: 3,
init: function()
{
if ( wappalyzer.isBookmarklet )
{
return;
}
wappalyzer.log('init');
wappalyzer.browser = typeof(Browser) != 'undefined' ? Browser.selectedBrowser : gBrowser;
// Preferences
wappalyzer.prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService).getBranch('wappalyzer.');
@ -204,18 +48,30 @@ wappalyzer =
{
wappalyzer.prefs.setBoolPref('newInstall', false);
gBrowser.addEventListener('load', wappalyzer.installSuccess, false);
wappalyzer.browser.addEventListener('load', wappalyzer.installSuccess, false);
}
// Listen messages sent from the content process
messageManager.addMessageListener('wappalyzer:onPageLoad', wappalyzer.onContentPageLoad);
messageManager.loadFrameScript('chrome://wappalyzer/content/content.js', true);
// Listen for URL changes
gBrowser.addProgressListener(wappalyzer.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
wappalyzer.browser.addProgressListener(wappalyzer.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
// Listen for page loads
wappalyzer.browser.addEventListener('DOMContentLoaded', wappalyzer.onPageLoad, true);
},
log: function(message) {
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
var appContent = document.getElementById('appcontent');
consoleService.logStringMessage("Wappalyzer: " + message);
},
if ( appContent )
get strings()
{
appContent.addEventListener('DOMContentLoaded', wappalyzer.onPageLoad, true);
}
return document.getElementById('wappalyzer-strings');
},
observe: function(subject, topic, data)
@ -244,18 +100,54 @@ wappalyzer =
onPageLoad: function(event)
{
wappalyzer.log('onPageLoad');
/*
var prompts = Components.classes["@mozilla.org/embedcomp/prompt-service;1"]
.getService(Components.interfaces.nsIPromptService);
var re = prompts.alert(null, 'Wappalyzer', 'Wappalyzer for Firefox Mobile is not yet functional.');
*/
var doc = event.originalTarget;
wappalyzer.analyzePage(doc, true, false);
wappalyzer.analyzePage(
document.location.href,
document.documentElement.innerHTML,
[],
true,
false
);
},
onContentPageLoad: function(message)
{
wappalyzer.log('onContentPageLoad');
wappalyzer.analyzePage(
message.json.href,
message.json.html,
message.json.headers,
true,
false
);
},
onUrlChange: function(request)
{
var doc = gBrowser.selectedBrowser.contentDocument;
wappalyzer.log('onUrlChange');
var doc = wappalyzer.browser.contentDocument;
doc.request = request;
wappalyzer.analyzePage(doc, false, false);
wappalyzer.analyzePage(
doc.location.href,
doc.documentElement.innerHTML,
[],
false,
false
);
},
urlChange:
@ -295,13 +187,15 @@ wappalyzer =
onSecurityChange: function(a, b, c) {}
},
analyzePage: function(doc, doCount, manualDetect)
analyzePage: function(href, html, headers, doCount, manualDetect)
{
wappalyzer.log('analyzePage');
wappalyzer.currentTab = false;
if ( !wappalyzer.isBookmarklet )
{
if ( doc.location && doc.location.href == gBrowser.selectedBrowser.contentDocument.location.href )
if ( href == wappalyzer.browser.contentDocument.location.href )
{
wappalyzer.currentTab = true;
@ -309,11 +203,14 @@ wappalyzer =
}
}
if ( typeof(html) == 'undefined' )
{
html = '';
}
if ( wappalyzer.autoDetect || ( !wappalyzer.autoDetect && manualDetect ) )
{
// Scan URL, domain and response headers for patterns
var html = doc.documentElement.innerHTML;
if ( html.length > 50000 ) // Prevent large documents from slowing things down
{
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
@ -332,21 +229,22 @@ wappalyzer =
if ( regex.test(html) )
{
wappalyzer.showApp(appName, doc, doCount);
wappalyzer.showApp(appName, href, doCount);
}
}
// Scan URL
if ( typeof(wappalyzer.apps[appName].url) != 'undefined' && typeof(doc.location.href) != 'undefined' )
if ( href && typeof(wappalyzer.apps[appName].url) != 'undefined' )
{
var regex = wappalyzer.apps[appName].url;
if ( regex.test(doc.location.href) )
if ( regex.test(href) )
{
wappalyzer.showApp(appName, doc, doCount);
wappalyzer.showApp(appName, href, doCount);
}
}
/*
// Scan response header
if ( typeof(wappalyzer.apps[appName].headers) != 'undefined' && typeof(doc.request) != 'undefined' )
{
@ -366,6 +264,7 @@ wappalyzer =
}
}
}
*/
}
}
}
@ -374,21 +273,34 @@ wappalyzer =
}
},
showApp: function(detectedApp, doc, doCount)
showApp: function(detectedApp, href, doCount)
{
wappalyzer.log('showApp ' + detectedApp);
if ( !wappalyzer.currentTab && !wappalyzer.isBookmarklet )
{
wappalyzer.report(detectedApp, doc.domain);
wappalyzer.report(detectedApp, href);
return;
}
if ( detectedApp && typeof(wappalyzer.checkUnique[detectedApp]) == 'undefined' )
{
domain = doc.domain;
if ( !wappalyzer.isBookmarklet )
switch ( true )
{
case wappalyzer.isBookmarklet:
var e = document.getElementById('wappalyzer-bookmarklet-apps');
e.innerHTML =
( wappalyzer.appsDetected ? e.innerHTML : '' ) +
'<a href="' + wappalyzer.homeUrl + 'stats/app/' + escape(wappalyzer.app[i]) + '" style="color: #332;">' +
wappalyzer.app[i] +
'</a><br/>'
;
break;
case wappalyzer.isMobile:
default:
// Hide Wappalyzer icon
document.getElementById('wappalyzer-icon').style.display = 'none';
@ -400,13 +312,15 @@ wappalyzer =
child.setAttribute('src', 'chrome://wappalyzer/skin/app_icons/' + detectedApp + '.ico');
child.setAttribute('class', 'wappalyzer-icon');
if ( !wappalyzer.isMobile )
{
if ( wappalyzer.showAppNames == 2 )
{
var panel = document.getElementById('wappalyzer-panel');
var urlbar = document.getElementById('wappalyzer-urlbar');
var tooltiptext = panel.getAttribute('tooltiptext') + ( panel.getAttribute('tooltiptext') ? '\n' : '' ) + detectedApp;
var tooltiptext = urlbar.getAttribute('tooltiptext') + '\n' + detectedApp;
panel.setAttribute('tooltiptext', tooltiptext);
urlbar.setAttribute('tooltiptext', tooltiptext);
}
if ( wappalyzer.showAppNames == 3 )
@ -419,9 +333,12 @@ wappalyzer =
{
child.setAttribute('style', 'margin-left: .5em');
}
}
e.appendChild(child);
if ( !wappalyzer.isMobile )
{
child = document.createElement('label');
child.setAttribute('value', detectedApp);
@ -439,26 +356,7 @@ wappalyzer =
}
e.appendChild(child);
}
else
{
var e = document.getElementById('wappalyzer-bookmarklet-apps');
e.innerHTML =
( wappalyzer.appsDetected ? e.innerHTML : '' ) +
'<a href="' + wappalyzer.homeUrl + 'stats/app/' + escape(wappalyzer.app[i]) + '" style="color: #332;">' +
wappalyzer.app[i] +
'</a><br/>'
;
}
if ( doCount )
{
wappalyzer.report(detectedApp, domain);
}
if ( !wappalyzer.isBookmarklet )
{
// Enable application statistics menu item
var e = document.getElementById('wappalyzer-app-stats');
@ -474,6 +372,12 @@ wappalyzer =
e.appendChild(child);
}
}
if ( doCount )
{
wappalyzer.report(detectedApp, href);
}
wappalyzer.appsDetected ++;
@ -481,8 +385,12 @@ wappalyzer =
}
},
report: function(detectedApp, domain)
report: function(detectedApp, href)
{
wappalyzer.log('report');
domain = href.match(/:\/\/(.[^/]+)/)[1];
if ( wappalyzer.enableTracking && wappalyzer.regexDomain.test(domain) )
{
if ( typeof(wappalyzer.history[domain]) == 'undefined' )
@ -511,6 +419,8 @@ wappalyzer =
// 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
{
wappalyzer.log('sendReport');
if ( wappalyzer.enableTracking && !wappalyzer.req )
{
var report = '';
@ -566,11 +476,13 @@ wappalyzer =
clearDetectedApps: function()
{
wappalyzer.log('clearDetectedApps');
wappalyzer.appsDetected = 0;
wappalyzer.checkUnique = [];
// Show Wappalyzer icon
document.getElementById('wappalyzer-icon').style.display = 'inline';
document.getElementById('wappalyzer-icon').style.display = '';
// Clear app icons and labels
e = document.getElementById('wappalyzer-detected-apps');
@ -580,12 +492,13 @@ wappalyzer =
e.removeChild(e.childNodes.item(0));
}
if ( !wappalyzer.isMobile )
{
// Clear tooltip
var panel = document.getElementById('wappalyzer-panel');
var urlbar = document.getElementById('wappalyzer-urlbar');
panel.setAttribute('tooltiptext', '');
urlbar.setAttribute('tooltiptext', wappalyzer.strings.getString('wappalyzer.title') + '\n---');
/* */
// Disable and clear application statistics menu item
e = document.getElementById('wappalyzer-app-stats');
@ -595,7 +508,7 @@ wappalyzer =
{
e.removeChild(e.childNodes.item(0));
}
/* */
}
},
showLabels: function(show)
@ -610,19 +523,19 @@ wappalyzer =
installSuccess: function()
{
gBrowser.removeEventListener('load', wappalyzer.installSuccess, false);
wappalyzer.browser.removeEventListener('load', wappalyzer.installSuccess, false);
wappalyzer.openTab(wappalyzer.homeUrl + 'install/success/');
},
openTab: function(url)
{
gBrowser.selectedTab = gBrowser.addTab(url);
wappalyzer.browser.selectedTab = wappalyzer.browser.addTab(url);
},
bookmarklet: function()
{
if ( typeof(gBrowser) == 'undefined' )
if ( typeof(gBrowser) == 'undefined' && typeof(Browser) == 'undefined' )
{
wappalyzer.isBookmarklet = true;
@ -671,7 +584,12 @@ wappalyzer =
body.appendChild(container);
wappalyzer.analyzePage(document, false, false);
wappalyzer.analyzePage(
document.location.href,
document.documentElement.innerHTML,
[],
false
);
}
}
}

@ -6,7 +6,43 @@
<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/apps.js"/>
<stringbundleset id="stringbundleset">
<stringbundle id="wappalyzer-strings" src="chrome://wappalyzer/locale/overlay.properties" />
</stringbundleset>
<hbox id="urlbar-icons">
<hbox
id="wappalyzer-urlbar"
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);"/>
<menuseparator/>
<menu label="&wappalyzer.appStats;" disabled="true">
<menupopup id="wappalyzer-app-stats"/>
</menu>
</menupopup>
</hbox>
</hbox>
<!--
<statusbar id="status-bar">
<statusbarpanel
id="wappalyzer-panel"
@ -37,4 +73,5 @@
</menupopup>
</statusbarpanel>
</statusbar>
-->
</overlay>

@ -0,0 +1 @@
wappalyzer.title=Wappalyzer

Binary file not shown.

Before

Width:  |  Height:  |  Size: 894 B

After

Width:  |  Height:  |  Size: 21 KiB

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

@ -1,13 +1,13 @@
#wappalyzer-urlbar {
margin-left: 2px;
}
.wappalyzer-icon {
margin-left: 4px !important;
width: 16px;
height: 16px;
}
#wappalyzer-tag {
display: none;
margin-right: .5em;
}
#wappalyzer-detected-apps label {
margin: 0 0 0 .3em;
}

@ -9,10 +9,20 @@
<em:type>2</em:type>
<em:targetApplication>
<!-- Firefox -->
<Description>
<em:id>{ec8030f7-c20a-464f-9b0e-13a3a9e97384}</em:id>
<em:minVersion>3.0</em:minVersion>
<em:maxVersion>4.0b7pre</em:maxVersion>
<em:maxVersion>4.0b8pre</em:maxVersion>
</Description>
</em:targetApplication>
<em:targetApplication>
<!-- Firefox Mobile -->
<Description>
<em:id>{a23983c0-fd0e-11dc-95ff-0800200c9a66}</em:id>
<em:minVersion>1.1</em:minVersion>
<em:maxVersion>4.0b1</em:maxVersion>
</Description>
</em:targetApplication>