Before Width: | Height: | Size: 294 B |
@ -1,5 +0,0 @@
|
|||||||
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/wappalyzer.xul
|
|
@ -1,260 +0,0 @@
|
|||||||
if ( typeof wappalyzer != 'undefined' ) {
|
|
||||||
wappalyzer.cats = {
|
|
||||||
1: { name: 'CMS', plural: 'CMS' },
|
|
||||||
2: { name: 'Message Board', plural: 'Message Boards' },
|
|
||||||
3: { name: 'Database manager', plural: 'Database managers' },
|
|
||||||
4: { name: 'Documentation tool', plural: 'Documentation tools' },
|
|
||||||
5: { name: 'Widget', plural: 'Widgets' },
|
|
||||||
6: { name: 'Web shop', plural: 'Web shops' },
|
|
||||||
7: { name: 'Photo gallery', plural: 'Photo galleries' },
|
|
||||||
8: { name: 'Wiki', plural: 'Wikis' },
|
|
||||||
9: { name: 'Hosting panel', plural: 'Hosting panels' },
|
|
||||||
10: { name: 'Analytics', plural: 'Analytics' },
|
|
||||||
11: { name: 'Blog', plural: 'Blogs' },
|
|
||||||
12: { name: 'JavaScript framework', plural: 'JavaScript frameworks' },
|
|
||||||
13: { name: 'Issue tracker', plural: 'Issue trackers' },
|
|
||||||
14: { name: 'Video Player', plural: 'Video Players' },
|
|
||||||
15: { name: 'Comment System', plural: 'Comment Systems' },
|
|
||||||
16: { name: 'CAPTCHA', plural: 'CAPTCHAs' },
|
|
||||||
17: { name: 'Font script', plural: 'Font scripts' },
|
|
||||||
18: { name: 'Web framework', plural: 'Web frameworks' },
|
|
||||||
19: { name: 'Miscellaneous', plural: 'Miscellaneous' },
|
|
||||||
20: { name: 'Editor', plural: 'Editors' },
|
|
||||||
21: { name: 'LMS', plural: 'LMS' },
|
|
||||||
22: { name: 'Web server', plural: 'Web servers' },
|
|
||||||
23: { name: 'Cache tool', plural: 'Cache tools' },
|
|
||||||
24: { name: 'Rich text editor', plural: 'Rich text editors' },
|
|
||||||
25: { name: 'Javascript Graphics', plural: 'Javascript Graphics' },
|
|
||||||
26: { name: 'Mobile framework', plural: 'Mobile frameworks' }
|
|
||||||
};
|
|
||||||
|
|
||||||
wappalyzer.apps = {
|
|
||||||
'1C-Bitrix': { cats: { 1: 1 }, html: /<link[^>]+components\/bitrix/i, script: /1c\-bitrix/i },
|
|
||||||
'2z Project': { cats: { 1: 1 }, meta: { 'generator': /2z project/i } },
|
|
||||||
'AddThis': { cats: { 1: 5 }, script: /addthis\.com\/js/ },
|
|
||||||
'Adobe GoLive': { cats: { 1: 20 }, meta: { 'generator': /Adobe GoLive/i } },
|
|
||||||
'Advanced Web Stats': { cats: { 1: 10 }, html: /aws.src = [^<]+caphyon\-analytics/i },
|
|
||||||
'Amiro.CMS': { cats: { 1: 1 }, meta: { 'generator': /Amiro/i } },
|
|
||||||
'Apache': { cats: { 1: 22 }, headers: { 'Server': /Apache/i } },
|
|
||||||
'Apache Tomcat': { cats: { 1: 22 }, headers: { 'Server': /Apache-Coyote/i } },
|
|
||||||
'Atlassian Confluence': { cats: { 1: 8 }, html: /Powered by <a href=.http:\/\/www\.atlassian\.com\/software\/confluence/i },
|
|
||||||
'Atlassian Jira': { cats: { 1: 13 }, html: /Powered by <a href=.http:\/\/www\.atlassian\.com\/software\/jira/i },
|
|
||||||
'AWStats': { cats: { 1: 10 }, meta: { 'generator': /AWStats/i } },
|
|
||||||
'Banshee': { cats: { 1: 1, 2: 18 }, html: /Built upon the <a href=("|')[^>]+banshee-php\.org/i },
|
|
||||||
'Backbone.js': { cats: { 1: 12 }, script: /backbone.*\.js/, env: /^Backbone$/ },
|
|
||||||
'BIGACE': { cats: { 1: 1 }, meta: { 'generator': /BIGACE/ }, html: /Powered by <a href=("|')[^>]+BIGACE|<!--\s+Site is running BIGACE/i },
|
|
||||||
'BigDump': { cats: { 1: 3 }, html: /<!-- <h1>BigDump: Staggered MySQL Dump Importer/ },
|
|
||||||
'blip.tv': { cats: { 1: 14 }, html: /<(param|embed)[^>]+blip\.tv\/play/i },
|
|
||||||
'Blogger': { cats: { 1: 11 }, meta: { 'generator': /blogger/i }, url: /^(www.)?.+\.blogspot\.com/i },
|
|
||||||
'Bugzilla': { cats: { 1: 13 }, html: /<[^>]+(id|title|name)=("|')bugzilla/i },
|
|
||||||
'Burning Board': { cats: { 1: 2 }, html: /<a href=('|")[^>]+woltlab\.com.+Burning Board/i },
|
|
||||||
'chartbeat': { cats: { 1: 10 }, html: /function loadChartbeat\(\) {/i },
|
|
||||||
'Chamilo': { cats: { 1: 21 }, meta: { 'generator': /Chamilo/i }, headers: { 'X-Powered-By': /Chamilo/ } },
|
|
||||||
'Cherokee': { cats: { 1: 22 }, headers: { 'Server': /Cherokee/i } },
|
|
||||||
'ClickHeat': { cats: { 1: 10 }, script: /clickheat.*\.js/i, env: '/^clickHeatBrowser$/' },
|
|
||||||
'ClickTale': { cats: { 1: 10 }, html: /if\(typeof ClickTale(Tag)*==("|')function("|')\)/ },
|
|
||||||
'Clicky': { cats: { 1: 10 }, script: /static\.getclicky\.com/ },
|
|
||||||
'CMS Made Simple': { cats: { 1: 1 }, meta: { 'generator': /CMS Made Simple/i } },
|
|
||||||
'CO2Stats': { cats: { 1: 10 }, html: /src=("|')http:\/\/www\.co2stats\.com\/propres\.php/ },
|
|
||||||
'comScore': { cats: { 1: 10 }, html: /<i{1}frame[^>]* (id=("|')comscore("|')|scr=[^>]+comscore)/ },
|
|
||||||
'Concrete5': { cats: { 1: 1 }, meta: { 'generator': /concrete5/i } },
|
|
||||||
'Contao': { cats: { 1: 1 }, html: /(<!--\s+This website is powered by (TYPOlight|Contao)|<link[^>]+(typolight|contao).css)/i },
|
|
||||||
'Contens': { cats: { 1: 1 }, meta: { 'generator': /contens/i } },
|
|
||||||
'ConversionLab': { cats: { 1: 10 }, script: /conversionlab\.trackset\.com\/track\/tsend\.js/ },
|
|
||||||
'Coppermine': { cats: { 1: 7 }, html: /<!--Coppermine Photo Gallery/i },
|
|
||||||
'Cotonti': { cats: { 1: 1 }, meta: { 'generator': /Cotonti/i } },
|
|
||||||
'cPanel': { cats: { 1: 9 }, html: /<!-- cPanel/i },
|
|
||||||
'Crazy Egg': { cats: { 1: 10 }, script: /cetrk\.com\/pages\/scripts\/[0-9]+\/[0-9]+\.js/ },
|
|
||||||
'CS Cart': { cats: { 1: 6 }, html: / Powered by (<a href=.http:\/\/www\.cs\-cart\.com|CS\-Cart)/i },
|
|
||||||
'CubeCart': { cats: { 1: 6 }, html: /Powered by <a href=.http:\/\/www\.cubecart\.com/i },
|
|
||||||
'cufon': { cats: { 1: 17 }, script: /cufon\-yui\.js/, env: /^Cufon$/ },
|
|
||||||
'd3': { cats: { 1: 25 }, script: /d3(\.min)?\.js/, env: '/^d3$/' },
|
|
||||||
'Danneo CMS': { cats: { 1: 1 }, meta: { 'generator': /Danneo/i } },
|
|
||||||
'DataLife Engine': { cats: { 1: 1 }, meta: { 'generator': /DataLife Engine/i } },
|
|
||||||
'DHTMLX': { cats: { 1: 12 }, script: /dhtmlxcommon\.js/ },
|
|
||||||
'DirectAdmin': { cats: { 1: 9 }, html: /<a[^>]+>DirectAdmin<\/a> Web Control Panel/i },
|
|
||||||
'Disqus': { cats: { 1: 15 }, script: /disqus_url/, html: /<div[^>]+id=("|')disqus_thread("|')/ },
|
|
||||||
'dojo': { cats: { 1: 12 }, script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
|
|
||||||
'Dokeos': { cats: { 1: 21 }, meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ } },
|
|
||||||
'DokuWiki': { cats: { 1: 8 }, meta: { 'generator': /DokuWiki/i } },
|
|
||||||
'DotNetNuke': { cats: { 1: 1 }, meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i },
|
|
||||||
'DreamWeaver': { cats: { 1: 20 }, html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
|
|
||||||
'Drupal': { cats: { 1: 1 }, script: /drupal\.js/, html: /(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/ }, env: /^Drupal$/ },
|
|
||||||
'Dynamicweb': { cats: { 1: 1 }, meta: { 'generator': /Dynamicweb/i } },
|
|
||||||
'e107': { cats: { 1: 1 }, script: /e107\.js/ },
|
|
||||||
'Exhibit': { cats: { 1: 25 }, script: /exhibit.*\.js/, env: '/^Exhibit$/' },
|
|
||||||
'ExtJS': { cats: { 1: 12 }, script: /ext\-base\.js/, env: /^Ext$/ },
|
|
||||||
'ExpressionEngine': { cats: { 1: 1 }, headers: { 'Set-Cookie': /exp_last_activity/ } },
|
|
||||||
'eZ Publish': { cats: { 1: 1 }, meta: { 'generator': /eZ Publish/i } },
|
|
||||||
'FluxBB': { cats: { 1: 2 }, html: /Powered by (<strong>)?<a href=("|')[^>]+fluxbb/i },
|
|
||||||
'Flyspray': { cats: { 1: 13 }, html: /(<a[^>]+>Powered by Flyspray|<map id=("|')projectsearchform)/ },
|
|
||||||
'FrontPage': { cats: { 1: 20 }, meta: { 'generator': /Microsoft FrontPage/ }, html: /<html[^>]+urn:schemas\-microsoft\-com:office:office/i },
|
|
||||||
'Get Satisfaction': { cats: { 1: 13 }, html: /var feedback_widget = new GSFN\.feedback_widget\(feedback_widget_options\)/ },
|
|
||||||
'Google Analytics': { cats: { 1: 10 }, script: /(\.google\-analytics\.com\/ga\.js|google-analytics\.com\/urchin\.js)/, env: /^gaGlobal$/ },
|
|
||||||
'Google App Engine': { cats: { 1: 22 }, headers: { 'Server': /Google Frontend/i } },
|
|
||||||
'Google Font API': { cats: { 1: 17 }, html: /<link[^>]* href=("|')http:\/\/fonts\.googleapis\.com/ },
|
|
||||||
'Google Friend Connect': { cats: { 1: 5 }, script: /google.com\/friendconnect/ },
|
|
||||||
'Google Maps': { cats: { 1: 5 }, script: /(maps\.google\.com\/maps\?file=api|maps\.google\.com\/maps\/api\/staticmap)/ },
|
|
||||||
'Graffiti CMS': { cats: { 1: 1 }, meta: { 'generator': /Graffiti CMS/i } },
|
|
||||||
'Gravity Insights': { cats: { 1: 10 }, html: /gravityInsightsParams\.site_guid = '/ },
|
|
||||||
'Hiawatha': { cats: { 1: 22 }, headers: { 'Server': /Hiawatha/i } },
|
|
||||||
'Highcharts': { cats: { 1: 25 }, script: /highcharts.*\.js/, env: '/^Highcharts$/' },
|
|
||||||
'Hotaru CMS': { cats: { 1: 1 }, meta: { 'generator': /Hotaru CMS/i } },
|
|
||||||
'IIS': { cats: { 1: 22 }, headers: { 'Server': /IIS/i } },
|
|
||||||
'InstantCMS': { cats: { 1: 1 }, meta: { 'generator': /InstantCMS/i } },
|
|
||||||
'IPB': { cats: { 1: 2 }, script: /jscripts\/ips_/ },
|
|
||||||
'iWeb': { cats: { 1: 20 }, meta: { 'generator': /iWeb/i } },
|
|
||||||
'Jalios': { cats: { 1: 1 }, meta: { 'generator': /Jalios/i } },
|
|
||||||
'Javascript Infovis Toolkit': { cats: { 1: 25 }, script: /jit.*\.js/, env: '/^\$jit$/' },
|
|
||||||
'Jo': { cats: { 1: 26, 2: 12 }, script: /[^a-zA-Z]jo.*\.js/i },
|
|
||||||
'Joomla': { cats: { 1: 1 }, meta: { 'generator': /Joomla/i }, html: /<!\-\- JoomlaWorks "K2"/i, headers: { 'X-Content-Encoded-By': /Joomla/ } },
|
|
||||||
'jqPlot': { cats: { 1: 25 }, script: /jqplot.*\.js/, env: '/^jQuery.jqplot$/' },
|
|
||||||
'jQTouch': { cats: { 1: 26 }, script: /jqtouch.*\.js/i, env:/^jQT$/ },
|
|
||||||
'jQuery UI': { cats: { 1: 12 }, script: /jquery\-ui.*\.js/ },
|
|
||||||
'jQuery': { cats: { 1: 12 }, script: /jquery.*.js/, env: /^jQuery$/ },
|
|
||||||
'jQuery Mobile': { cats: { 1: 26 }, script: /jquery\.mobile.*\.js/i },
|
|
||||||
'jQuery Sparklines': { cats: { 1: 25 }, script: /jquery\.sparkline.*\.js/i },
|
|
||||||
'JS Charts': { cats: { 1: 25 }, script: /jscharts.*\.js/i, env: '/^JSChart$/' },
|
|
||||||
'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 }, script: /cf\.kampyle\.com\/k_button\.js/ },
|
|
||||||
'Kentico CMS': { cats: { 1: 1 }, meta: { 'generator': /Kentico CMS/i } },
|
|
||||||
'Koego': { cats: { 1: 10 }, script: /tracking\.koego\.com\/end\/ego\.js/ },
|
|
||||||
'Kolibri CMS': { cats: { 1: 1 }, meta: { 'generator': /Kolibri/i } },
|
|
||||||
'Koobi': { cats: { 1: 1 }, meta: { 'generator': /Koobi/i } },
|
|
||||||
'lighttpd': { cats: { 1: 22 }, headers: { 'Server': /lighttpd/i } },
|
|
||||||
'LiveJournal': { cats: { 1: 11 }, url: /^(www.)?.+\.livejournal\.com/i },
|
|
||||||
'Lotus Domino': { cats: { 1: 22 }, headers: { 'Server': /Lotus\-Domino/i } },
|
|
||||||
'Magento': { cats: { 1: 6 }, html: /var BLANK_URL = '[^>]+js\/blank\.html'/i },
|
|
||||||
'Mambo': { cats: { 1: 1 }, meta: { 'generator': /Mambo/i } },
|
|
||||||
'MantisBT': { cats: { 1: 13 }, html: /<img[^>]+ alt=("|')Powered by Mantis Bugtracker/i },
|
|
||||||
'MaxSite CMS': { cats: { 1: 1 }, meta: { 'generator': /MaxSite CMS/i } },
|
|
||||||
'MediaWiki': { cats: { 1: 8 }, meta: { 'generator': /MediaWiki/i }, html: /(<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 }, meta: { '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 }, script: /mint\/\?js/ },
|
|
||||||
'Mixpanel': { cats: { 1: 10 }, script: /api\.mixpanel\.com\/track/ },
|
|
||||||
'MochiKit': { cats: { 1: 12 }, script: /MochiKit\.js/, env: /^MochiKit$/ },
|
|
||||||
'Modernizr': { cats: { 1: 12 }, script: /modernizr.*\.js/ },
|
|
||||||
'MODx': { cats: { 1: 1 }, html: /(<a[^>]+>Powered by MODx<\/a>|var el= \$\('modxhost'\);|<script type=("|')text\/javascript("|')>var MODX_MEDIA_PATH = "media";)|<(link|script)[^>]+assets\/(templates|snippets)\//i },
|
|
||||||
'Mollom': { cats: { 1: 16 }, script: /mollom\.js/, html: /<img[^>]+\/.mollom\/.com/i },
|
|
||||||
'Moodle': { cats: { 1: 21 }, html: /(var moodleConfigFn = function\(me\)|<img[^>]+moodlelogo)/i },
|
|
||||||
'Moogo': { cats: { 1: 1 }, script: /kotisivukone.js/ },
|
|
||||||
'MooTools': { cats: { 1: 12 }, script: /mootools.*\.js/, env: /^MooTools$/ },
|
|
||||||
'Movable Type': { cats: { 1: 1 }, meta: { '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 }, script: /pub\.mybloglog\.com/i },
|
|
||||||
'Mynetcap': { cats: { 1: 1 }, meta: { 'generator': /Mynetcap/i } },
|
|
||||||
'Nedstat': { cats: { 1: 10 }, html: /sitestat\(("|')http:\/\/nl\.sitestat\.com/ },
|
|
||||||
'Nginx': { cats: { 1: 22 }, headers: { 'Server': /nginx/i } },
|
|
||||||
'NOIX': { cats: { 1: 19 }, html: /<[^>]+(src|href)=[^>]*(\/media\/noix)|<!\-\- NOIX/i },
|
|
||||||
'nopCommerce': { cats: { 1: 6 }, html: /(<!\-\-Powered by nopCommerce|Powered by: <a[^>]+nopcommerce)/i },
|
|
||||||
'OneStat': { cats: { 1: 10 }, html: /var p=("|')http("|')\+\(d\.URL\.indexOf\('https:'\)==0\?'s':''\)\+("|'):\/\/stat\.onestat\.com\/stat\.aspx\?tagver/i },
|
|
||||||
'OpenCart': { cats: { 1: 6 }, html: /(Powered By <a href=("|')[^>]+OpenCart|route = getURLVar\(("|')route)/i },
|
|
||||||
'openEngine': { cats: { 1: 1 }, html: /<meta[^>]+openEngine/i },
|
|
||||||
'OpenLayers': { cats: { 1: 5 }, script: /openlayers/, env:/^OpenLayers$/ },
|
|
||||||
'osCommerce': { cats: { 1: 6 }, html: /<!-- header_eof \/\/-->|<a[^>]*(osCsid|cPath)/i },
|
|
||||||
'osCSS': { cats: { 1: 6 }, html: /<body onload=("|')window\.defaultStatus='oscss templates';("|')/i },
|
|
||||||
'PANSITE': { cats: { 1: 1 }, meta: { 'generator': /PANSITE/i } },
|
|
||||||
'papaya CMS': { cats: { 1: 1 }, html: /<link[^>]*\/papaya-themes\//i },
|
|
||||||
'PHP-Fusion': { cats: { 1: 1 }, html: /Powered by <a href=("|')[^>]+php-fusion/i },
|
|
||||||
'PHP-Nuke': { cats: { 1: 2 }, meta: { 'generator': /PHP-Nuke/i }, html: /<[^>]+Powered by PHP\-Nuke/i },
|
|
||||||
'phpBB': { cats: { 1: 2 }, meta: { 'copyright': /phpBB Group/ }, html: /Powered by (<a href=("|')[^>]+)?phpBB/i },
|
|
||||||
'phpDocumentor': { cats: { 1: 4 }, html: /<!-- Generated by phpDocumentor/ },
|
|
||||||
'phpMyAdmin': { cats: { 1: 3 }, html: /(var pma_absolute_uri = '|PMA_sendHeaderLocation\(|<title>phpMyAdmin<\/title>)/i },
|
|
||||||
'phpPgAdmin': { cats: { 1: 3 }, html: /(<title>phpPgAdmin<\/title>|<span class=("|')appname("|')>phpPgAdmin)/i },
|
|
||||||
'Piwik': { cats: { 1: 10 }, html: /var piwikTracker = Piwik\.getTracker\(/i },
|
|
||||||
'Plesk': { cats: { 1: 9 }, script: /common\.js\?plesk/i },
|
|
||||||
'Plone': { cats: { 1: 1 }, meta: { 'generator': /Plone/i } },
|
|
||||||
'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 }, meta: { 'generator': /PrestaShop/i }, html: /Powered by <a href=("|')[^>]+PrestaShop/i },
|
|
||||||
'Prototype': { cats: { 1: 12 }, script: /(prototype|protoaculous)\.js/, env: /^Prototype$/ },
|
|
||||||
'Protovis': { cats: { 1: 25 }, script: /protovis.*\.js/, env: /^protovis$/ },
|
|
||||||
'punBB': { cats: { 1: 2 }, html: /Powered by <a href=("|')[^>]+punbb/i },
|
|
||||||
'Quantcast': { cats: { 1: 10 }, script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
|
|
||||||
'Quick.Cart': { cats: { 1: 6 }, html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
|
|
||||||
'Raphael': { cats: { 1: 25 }, script: /raphael.*\.js/, env: /^Raphael$/ },
|
|
||||||
'reCAPTCHA': { cats: { 1: 16 }, script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/ },
|
|
||||||
'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 }, meta: { 'description': /Redmine/i }, html: /Powered by <a href=("|')[^>]+Redmine/i },
|
|
||||||
'Reinvigorate': { cats: { 1: 10 }, html: /reinvigorate\.track\("/ },
|
|
||||||
'RequireJS': { cats: { 1: 12 }, script: /require.*\.js/ , env: /^requirejs$/},
|
|
||||||
'S.Builder': { cats: { 1: 1 }, meta: { 'generator': /S\.Builder/i } },
|
|
||||||
's9y': { cats: { 1: 1 }, meta: { 'generator': /Serendipity/i } },
|
|
||||||
'script.aculo.us': { cats: { 1: 12 }, script: /(scriptaculous|protoaculous)\.js/, env: /^Scriptaculous$/ },
|
|
||||||
'Sencha Touch': { cats: { 1: 26, 2: 12}, script: /sencha\-touch.*\.js/},
|
|
||||||
'ShareThis': { cats: { 1: 5 }, script: /w\.sharethis\.com\// },
|
|
||||||
'sIFR': { cats: { 1: 17 }, script: /sifr\.js/ },
|
|
||||||
'Site Meter': { cats: { 1: 10 }, script: /sitemeter.com\/js\/counter\.js\?site=/ },
|
|
||||||
'SiteCatalyst': { cats: { 1: 10 }, html: /var s_code=s\.t\(\);if\(s_code\)document\.write\(s_code\)/i },
|
|
||||||
'SiteEdit': { cats: { 1: 1 }, meta: { 'generator': /SiteEdit/i } },
|
|
||||||
'SMF': { cats: { 1: 2 }, html: /<script [^>]+\s+var smf_/i },
|
|
||||||
'sNews': { cats: { 1: 1 }, meta: { 'generator': /sNews/ } },
|
|
||||||
'Snoobi': { cats: { 1: 10 }, script: /snoobi\.com\/snoop\.php/ },
|
|
||||||
'SOBI 2': { cats: { 1: 19 }, html: /(<!\-\- start of Sigsiu Online Business Index|<div[^>]* class=("|')sobi2)/i },
|
|
||||||
'SPIP': { cats: { 1: 1 }, meta: { 'generator': /SPIP/i }, headers: { 'X-Spip-Cache': /.*/ } },
|
|
||||||
'SQL Buddy': { cats: { 1: 3 }, html: /(<title>SQL Buddy<\/title>|<[^>]+onclick=("|')sideMainClick\(("|')home\.php)/i },
|
|
||||||
'Squarespace': { cats: { 1: 1 }, html: /Squarespace\.Constants\.CURRENT_MODULE_ID/i },
|
|
||||||
'Squiz Matrix': { cats: { 1: 1 }, meta: { 'generator': /Squiz Matrix/ }, html: / Running (MySource|Squiz) Matrix/i, 'X-Powered-By': /Squiz Matrix/ },
|
|
||||||
'StatCounter': { cats: { 1: 10 }, script: /statcounter\.com\/counter\/counter/ },
|
|
||||||
'SWFObject': { cats: { 1: 19 }, script: /swfobject.*\.js/i },
|
|
||||||
'swift.engine': { cats: { 1: 1 }, headers: { 'X-Powered-By': /swift\.engine/ } },
|
|
||||||
'Swiftlet': { cats: { 1: 1, 2: 18 }, meta: { 'generator': /Swiftlet/i }, html: /Powered by <a href=("|')[^>]+Swiftlet/i, headers: { 'X-Swiftlet-Cache': /.*/, 'X-Powered-By': /Swiftlet/ } },
|
|
||||||
'Textpattern CMS': { cats: { 1: 1 }, meta: { 'generator': /Textpattern/i } },
|
|
||||||
'Timeline': { cats: { 1: 25 }, script: /timeline.*\.js/, env: '/^Timeline$/' },
|
|
||||||
'Timeplot': { cats: { 1: 25 }, script: /timeplot.*\.js/, env: '/^Timeplot$/' },
|
|
||||||
'TomatoCart': { cats: { 1: 6 }, meta: { 'generator': /TomatoCart/i } },
|
|
||||||
'Trac': { cats: { 1: 13 }, html: /(<a id=("|')tracpowered)/i },
|
|
||||||
'Tumblr': { cats: { 1: 11 }, html: /<iframe src=("|')http:\/\/www\.tumblr\.com/i, url: /^(www.)?.+\.tumblr\.com/i, headers: { 'X-Tumblr-Usec': /.*/ } },
|
|
||||||
'Twilight CMS': { cats: { 1: 1 }, headers: { 'X-Powered-CMS': /Twilight CMS/ } },
|
|
||||||
'Typekit': { cats: { 1: 17 }, script: /use.typekit.com/, env: /^Typekit$/ },
|
|
||||||
'TypePad': { cats: { 1: 11 }, meta: { 'generator': /typepad/i }, url: /^(www.)?.+\.typepad\.com/i },
|
|
||||||
'TYPO3': { cats: { 1: 1 }, meta: { 'generator': /TYPO3/i }, html: /(<(script[^>]* src|link[^>]* href)=[^>]*fileadmin)/i, url: /\/typo3/i },
|
|
||||||
'Ubercart': { cats: { 1: 6 }, script: /uc_cart\/uc_cart_block\.js/ },
|
|
||||||
'Umbraco': { cats: { 1: 1 }, headers: { 'X-Umbraco-Version': /.+/ } },
|
|
||||||
'Underscore.js': { cats: { 1: 12 }, script: /underscore.*\.js/ },
|
|
||||||
'UserRules': { cats: { 1: 13 }, html: /var _usrp =/ , env: /^\_usrp$/ },
|
|
||||||
'Vanilla': { cats: { 1: 2 }, html: /<body id=("|')(DiscussionsPage|vanilla)/i, headers: { 'X-Powered-By': /Vanilla/ } },
|
|
||||||
'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 }, meta: { 'generator': /vBulletin/i } },
|
|
||||||
'viennaCMS': { cats: { 1: 1 }, html: /powered by <a href=("|')[^>]+viennacms/i },
|
|
||||||
'Vignette': { cats: { 1: 1 }, html: /<[^>]+?=("|')(vgn\-ext|vgnext)/i },
|
|
||||||
'Vimeo': { cats: { 1: 14 }, html: /<(param|embed)[^>]+vimeo\.com\/moogaloop/i },
|
|
||||||
'VirtueMart': { cats: { 1: 6 }, html: /<div id=("|')vmMainPage/ },
|
|
||||||
'VisualPath': { cats: { 1: 10 }, script: /visualpath[^\/]*\.trackset\.it\/[^\/]+\/track\/include\.js/ },
|
|
||||||
'Vox': { cats: { 1: 11 }, url: /^(www.)?.+\.vox\.com/i },
|
|
||||||
'VP-ASP': { cats: { 1: 6 }, script: /vs350\.js/, html: /<a[^>]+>Powered By VP\-ASP Shopping Cart<\/a>/ },
|
|
||||||
'W3Counter': { cats: { 1: 10 }, script: /w3counter\.com\/tracker\.js/ },
|
|
||||||
'Web Optimizer': { cats: { 1: 10 }, html: /<title [^>]*lang=("|')wo("|')>/ },
|
|
||||||
'webEdition': { cats: { 1: 1 }, meta: { 'generator': /webEdition/i, 'DC.title': /webEdition/i } },
|
|
||||||
'WebGUI': { cats: { 1: 1 }, meta: { 'generator': /WebGUI/i } },
|
|
||||||
'WebPublisher': { cats: { 1: 1 }, meta: { 'generator': /WEB\|Publisher/i } },
|
|
||||||
'WebsiteBaker': { cats: { 1: 1 }, meta: { 'generator': /WebsiteBaker/i } },
|
|
||||||
'Webtrekk': { cats: { 1: 10 }, html: /var webtrekk = new Object/ },
|
|
||||||
'Webtrends': { cats: { 1: 10 }, html: /<img[^>]+id=("|')DCSIMG("|')[^>]+webtrends/i },
|
|
||||||
'Weebly': { cats: { 1: 1 }, html: /<[^>]+class=("|')weebly/i },
|
|
||||||
'WikkaWiki': { cats: { 1: 8 }, meta: { 'generator': /WikkaWiki/ }, html: /Powered by <a href=("|')[^>]+WikkaWiki/i },
|
|
||||||
'wink': { cats: { 1: 26, 2: 12 }, script: /(\_base\/js\/base|wink).*\.js/i, env:/^wink$/ },
|
|
||||||
'Wolf CMS': { cats: { 1: 1 }, html: /<a href=("|')[^>]+wolfcms.org.+Wolf CMS.+inside/i },
|
|
||||||
'Woopra': { cats: { 1: 10 }, script: /static\.woopra\.com/ },
|
|
||||||
'WordPress': { cats: { 1: 1, 2: 11 }, meta: { 'generator': /WordPress/i }, html: /<link rel=("|')stylesheet("|') [^>]+wp-content/i },
|
|
||||||
'xajax': { cats: { 1: 12 }, script: /xajax_core.*\.js/i },
|
|
||||||
'XenForo': { cats: { 1: 2 }, html: /(jQuery\.extend\(true, XenForo|Forum software by XenForo™|<!\-\-XF:branding)/ },
|
|
||||||
'XiTi': { cats: { 1: 10 }, html: /<[^>]+src=("|')[^>]+xiti.com\/hit.xiti/i },
|
|
||||||
'XMB': { cats: { 1: 2 }, html: /<!-- Powered by XMB/i },
|
|
||||||
'XUI': { cats: { 1: 26, 2: 12 }, script: /[^a-zA-Z]xui.*\.js/i, env:/^x\$$/ },
|
|
||||||
'XOOPS': { cats: { 1: 1 }, meta: { 'generator': /XOOPS/i } },
|
|
||||||
'xtCommerce': { cats: { 1: 6 }, meta: { 'generator': /xt:Commerce/ }, html: /<div class=("|')copyright("|')>.+<a[^>]+>xt:Commerce/i },
|
|
||||||
'YaBB': { cats: { 1: 2 }, html: /Powered by <a href=("|')[^>]+yabbforum/i },
|
|
||||||
'Yahoo! Web Analytics': { cats: { 1: 10 }, script: /d\.yimg\.com\/mi\/ywa\.js/ },
|
|
||||||
'Yandex.Metrika': { cats: { 1: 10 }, script: /mc\.yandex\.ru\/metrika\/watch\.js/ },
|
|
||||||
'YouTube': { cats: { 1: 14 }, html: /<(param|embed)[^>]+youtube\.com\/v/i },
|
|
||||||
'YUI Doc': { cats: { 1: 4 }, html: /<html[^>]* yuilibrary\.com\/rdf\/[0-9.]+\/yui\.rdf/i },
|
|
||||||
'YUI': { cats: { 1: 12 }, script: /\/yui\/|yui\.yahooapis\.com/, env: /^YAHOO$/ },
|
|
||||||
'Zen Cart': { cats: { 1: 6 }, meta: { 'generator': /Zen Cart/i } },
|
|
||||||
'Zend': { cats: { 1: 18 }, headers: { 'X-Powered-By': /Zend/ } }
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,122 +0,0 @@
|
|||||||
(function() {
|
|
||||||
var self = {
|
|
||||||
element: false,
|
|
||||||
prevUrl: '',
|
|
||||||
|
|
||||||
init: function() {
|
|
||||||
self.log('init');
|
|
||||||
|
|
||||||
addEventListener('DOMContentLoaded', self.onPageLoad, false);
|
|
||||||
},
|
|
||||||
|
|
||||||
log: function(message) {
|
|
||||||
return; //
|
|
||||||
|
|
||||||
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
|
|
||||||
|
|
||||||
consoleService.logStringMessage("Wappalyzer content.js: " + message);
|
|
||||||
},
|
|
||||||
|
|
||||||
onPageLoad: function(e) {
|
|
||||||
self.log('onPageLoad');
|
|
||||||
|
|
||||||
self.getEnvironmentVars();
|
|
||||||
},
|
|
||||||
|
|
||||||
onUrlChange: function(request) {
|
|
||||||
self.log('onUrlChange');
|
|
||||||
|
|
||||||
self.getEnvironmentVars();
|
|
||||||
},
|
|
||||||
|
|
||||||
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 ) {
|
|
||||||
self.prevUrl = '';
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( url.spec != self.prevUrl ) {
|
|
||||||
self.prevUrl = url.spec;
|
|
||||||
|
|
||||||
self.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) {}
|
|
||||||
},
|
|
||||||
|
|
||||||
getEnvironmentVars: function() {
|
|
||||||
self.log('getEnvironmentVars');
|
|
||||||
|
|
||||||
if ( content.document.contentType != 'text/html' || typeof content.document.html == 'undefined' ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
var environmentVars = '';
|
|
||||||
|
|
||||||
try {
|
|
||||||
var element = content.document.createElement('wappalyzerData');
|
|
||||||
|
|
||||||
element.setAttribute('id', 'wappalyzerData');
|
|
||||||
element.setAttribute('style', 'display: none');
|
|
||||||
|
|
||||||
content.document.documentElement.appendChild(element);
|
|
||||||
|
|
||||||
content.location.href = 'javascript:' +
|
|
||||||
'(function() {' +
|
|
||||||
'try {' +
|
|
||||||
'var event = document.createEvent("Events");' +
|
|
||||||
|
|
||||||
'event.initEvent("wappalyzerEvent", true, false);' +
|
|
||||||
|
|
||||||
'var environmentVars = "";' +
|
|
||||||
|
|
||||||
'for ( var i in window ) environmentVars += i + " ";' +
|
|
||||||
|
|
||||||
'document.getElementById("wappalyzerData").appendChild(document.createComment(environmentVars));' +
|
|
||||||
|
|
||||||
'document.getElementById("wappalyzerData").dispatchEvent(event);' +
|
|
||||||
'}' +
|
|
||||||
'catch(e) { }' +
|
|
||||||
'})();';
|
|
||||||
|
|
||||||
element.addEventListener('wappalyzerEvent', (function(event) {
|
|
||||||
environmentVars = event.target.childNodes[0].nodeValue;
|
|
||||||
|
|
||||||
self.log('getEnvironmentVars: ' + environmentVars);
|
|
||||||
|
|
||||||
element.parentNode.removeChild(element);
|
|
||||||
|
|
||||||
sendAsyncMessage('wappalyzer:onPageLoad', {
|
|
||||||
href: content.document.location.href,
|
|
||||||
html: content.document.documentElement.innerHTML,
|
|
||||||
headers: [],
|
|
||||||
environmentVars: environmentVars.split(' ')
|
|
||||||
});
|
|
||||||
}), true);
|
|
||||||
}
|
|
||||||
catch(e) { }
|
|
||||||
|
|
||||||
return environmentVars;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
self.init();
|
|
||||||
|
|
||||||
return self;
|
|
||||||
})();
|
|
@ -1,62 +0,0 @@
|
|||||||
if ( typeof 'wappalyzer' != 'undefined' ) {
|
|
||||||
wappalyzer.evaluateCustomApps = function(feedback) {
|
|
||||||
wappalyzer.log('evaluateCustomApps');
|
|
||||||
|
|
||||||
if ( wappalyzer.customApps ) {
|
|
||||||
try {
|
|
||||||
var customAppsJSON = JSON.parse(wappalyzer.customApps);
|
|
||||||
|
|
||||||
for ( appName in customAppsJSON ) {
|
|
||||||
wappalyzer.apps[appName] = {};
|
|
||||||
|
|
||||||
// Icon
|
|
||||||
if ( typeof(customAppsJSON[appName].icon) == 'string' ) {
|
|
||||||
wappalyzer.apps[appName].icon = customAppsJSON[appName].icon;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
wappalyzer.apps[appName].icon = 'chrome://wappalyzer/skin/app_icons/_placeholder.ico';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Categories
|
|
||||||
if ( typeof(customAppsJSON[appName].categories) == 'object' ) {
|
|
||||||
wappalyzer.apps[appName].cats = {};
|
|
||||||
|
|
||||||
for ( i in customAppsJSON[appName].categories ) {
|
|
||||||
wappalyzer.apps[appName].cats[i] = parseInt(customAppsJSON[appName].categories[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTML
|
|
||||||
if ( typeof(customAppsJSON[appName].html) == 'string' ) {
|
|
||||||
wappalyzer.apps[appName].html = new RegExp(customAppsJSON[appName].html, 'i');
|
|
||||||
}
|
|
||||||
|
|
||||||
// URL
|
|
||||||
if ( typeof(customAppsJSON[appName].url) == 'string' ) {
|
|
||||||
wappalyzer.apps[appName].url = new RegExp(customAppsJSON[appName].url, 'i');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Headers
|
|
||||||
if ( typeof(customAppsJSON[appName].headers) == 'object' ) {
|
|
||||||
wappalyzer.apps[appName].headers = {};
|
|
||||||
|
|
||||||
for ( headerName in customAppsJSON[appName].headers ) {
|
|
||||||
wappalyzer.apps[appName].headers[headerName] = new RegExp(customAppsJSON[appName].headers[headerName], 'i');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( feedback ) {
|
|
||||||
alert('Ok');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e) {
|
|
||||||
wappalyzer.log('JSON error in custom applications');
|
|
||||||
|
|
||||||
if ( feedback ) {
|
|
||||||
alert('Error: malformed JSON');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
@ -1,147 +0,0 @@
|
|||||||
if ( typeof(wappalyzer) == 'undefined' )
|
|
||||||
{
|
|
||||||
var wappalyzer = {};
|
|
||||||
|
|
||||||
wappalyzer.log = function(message)
|
|
||||||
{
|
|
||||||
if ( message )
|
|
||||||
{
|
|
||||||
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
|
|
||||||
|
|
||||||
consoleService.logStringMessage("Wappalyzer: " + message);
|
|
||||||
}
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
wappalyzer.evaluateCustomApps = function(customApps, feedback)
|
|
||||||
{
|
|
||||||
wappalyzer.log('evaluateCustomApps');
|
|
||||||
|
|
||||||
var appsAdded = {};
|
|
||||||
|
|
||||||
if ( customApps || wappalyzer.customApps )
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var customAppsJSON = JSON.parse(feedback ? customApps : wappalyzer.customApps);
|
|
||||||
|
|
||||||
for ( appName in customAppsJSON )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName] = {
|
|
||||||
custom: true
|
|
||||||
};
|
|
||||||
|
|
||||||
appsAdded[appName] = true;
|
|
||||||
|
|
||||||
// Icon
|
|
||||||
if ( typeof(customAppsJSON[appName].icon) == 'string' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].icon = customAppsJSON[appName].icon;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].icon = 'chrome://wappalyzer/skin/app_icons/_placeholder.ico';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Categories
|
|
||||||
if ( typeof(customAppsJSON[appName].categories) == 'object' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].cats = {};
|
|
||||||
|
|
||||||
for ( i in customAppsJSON[appName].categories )
|
|
||||||
{
|
|
||||||
var id = parseInt(customAppsJSON[appName].categories[i]);
|
|
||||||
|
|
||||||
if ( typeof(wappalyzer.cats[id]) != 'undefined' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].cats[i] = id;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// HTML
|
|
||||||
if ( typeof(customAppsJSON[appName].html) == 'string' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].html = new RegExp(customAppsJSON[appName].html, 'i');
|
|
||||||
}
|
|
||||||
|
|
||||||
// URL
|
|
||||||
if ( typeof(customAppsJSON[appName].url) == 'string' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].url = new RegExp(customAppsJSON[appName].url, 'i');
|
|
||||||
}
|
|
||||||
|
|
||||||
// Headers
|
|
||||||
if ( typeof(customAppsJSON[appName].headers) == 'object' )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].headers = {};
|
|
||||||
|
|
||||||
for ( headerName in customAppsJSON[appName].headers )
|
|
||||||
{
|
|
||||||
wappalyzer.apps[appName].headers[headerName] = new RegExp(customAppsJSON[appName].headers[headerName], 'i');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( feedback )
|
|
||||||
{
|
|
||||||
var text = '';
|
|
||||||
var count = 0;
|
|
||||||
|
|
||||||
for ( appName in appsAdded )
|
|
||||||
{
|
|
||||||
text += ' \n\n' + appName;
|
|
||||||
|
|
||||||
if ( typeof(wappalyzer.apps[appName].cats) == 'object' )
|
|
||||||
{
|
|
||||||
for ( i in wappalyzer.apps[appName].cats )
|
|
||||||
{
|
|
||||||
text += ' [' + wappalyzer.cats[wappalyzer.apps[appName].cats[i]].name + ']';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
text += '\n Icon [' + ( wappalyzer.apps[appName].icon != 'chrome://wappalyzer/skin/app_icons/_placeholder.ico' ? 'Yes' : 'No' ) + ']';
|
|
||||||
|
|
||||||
text +=
|
|
||||||
' HTML [' + ( typeof(wappalyzer.apps[appName].html) == 'object' ? 'Yes' : 'No' ) + ']' +
|
|
||||||
' URL [' + ( typeof(wappalyzer.apps[appName].url) == 'object' ? 'Yes' : 'No' ) + ']'
|
|
||||||
;
|
|
||||||
|
|
||||||
text += ' Headers';
|
|
||||||
|
|
||||||
if ( typeof(wappalyzer.apps[appName].headers) == 'object' )
|
|
||||||
{
|
|
||||||
for ( header in wappalyzer.apps[appName].headers )
|
|
||||||
{
|
|
||||||
text += ' [' + header + ']';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
text += ' [No]';
|
|
||||||
}
|
|
||||||
|
|
||||||
count ++;
|
|
||||||
}
|
|
||||||
|
|
||||||
alert('Ok. Found ' + count + ' application(s):' + text);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e)
|
|
||||||
{
|
|
||||||
wappalyzer.log('evaluateCustomApps: malformed JSON');
|
|
||||||
|
|
||||||
if ( feedback )
|
|
||||||
{
|
|
||||||
alert('Error: malformed JSON.');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if ( feedback )
|
|
||||||
{
|
|
||||||
alert('Nothing to evaluate!');
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
@ -1,19 +0,0 @@
|
|||||||
addEventListener('load', function() {
|
|
||||||
if ( typeof wappalyzer != undefined ) {
|
|
||||||
var preferences = document.getElementById('wappalyzer-options')
|
|
||||||
.getElementsByTagName('preferences')[0]
|
|
||||||
;
|
|
||||||
|
|
||||||
if ( preferences ) {
|
|
||||||
for ( i in wappalyzer.cats ) {
|
|
||||||
var preference = document.createElement('preference');
|
|
||||||
|
|
||||||
preference.setAttribute('id', 'wappalyzer-cat' + i);
|
|
||||||
preference.setAttribute('name', 'wappalyzer.cat' + i);
|
|
||||||
preference.setAttribute('type', 'bool');
|
|
||||||
|
|
||||||
preferences.appendChild(preference);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, false);
|
|
@ -1,248 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
|
|
||||||
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/wappalyzer.css"?>
|
|
||||||
|
|
||||||
<!DOCTYPE overlay SYSTEM "chrome://wappalyzer/locale/wappalyzer.dtd">
|
|
||||||
|
|
||||||
<prefwindow
|
|
||||||
id="wappalyzer-options"
|
|
||||||
title="&wappalyzer.options;"
|
|
||||||
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
|
|
||||||
|
|
||||||
<script type="application/x-javascript" src="chrome://wappalyzer/content/evaluate.js"/>
|
|
||||||
<script type="application/x-javascript" src="chrome://wappalyzer/content/apps.js"/>
|
|
||||||
<script type="application/x-javascript" src="chrome://wappalyzer/content/options.js"/>
|
|
||||||
|
|
||||||
<prefpane label="&wappalyzer.options;">
|
|
||||||
<preferences>
|
|
||||||
<preference id="wappalyzer-location" name="wappalyzer.location" type="int" />
|
|
||||||
<preference id="wappalyzer-enable-tracking" name="wappalyzer.enableTracking" type="bool" />
|
|
||||||
<preference id="wappalyzer-show-apps" name="wappalyzer.showApps" type="int" />
|
|
||||||
<preference id="wappalyzer-popup" name="wappalyzer.popupOnHover" type="bool" />
|
|
||||||
<preference id="wappalyzer-custom-apps" name="wappalyzer.customApps" type="string"/>
|
|
||||||
<!-- Category preferences are injected by options.js -->
|
|
||||||
</preferences>
|
|
||||||
|
|
||||||
<tabbox>
|
|
||||||
<tabs>
|
|
||||||
<tab label="&wappalyzer.general;" />
|
|
||||||
<tab label="&wappalyzer.categories;"/>
|
|
||||||
<tab label="&wappalyzer.custom;" />
|
|
||||||
</tabs>
|
|
||||||
<tabpanels>
|
|
||||||
<tabpanel id="tab-general">
|
|
||||||
<groupbox>
|
|
||||||
<grid>
|
|
||||||
<columns>
|
|
||||||
<column/>
|
|
||||||
<column flex="1"/>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<label control="wappalyzer-location" value="&wappalyzer.location;:"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<menulist preference="wappalyzer-location" id="wappalyzer-option-location">
|
|
||||||
<menupopup>
|
|
||||||
<menuitem label="&wappalyzer.addressBar;" value="0"/>
|
|
||||||
<menuitem label="&wappalyzer.statusBar;" value="1"/>
|
|
||||||
</menupopup>
|
|
||||||
</menulist>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<label control="wappalyzer-show-apps" value="&wappalyzer.showApps;:"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<menulist preference="wappalyzer-show-apps" id="wappalyzer-show-apps">
|
|
||||||
<menupopup>
|
|
||||||
<menuitem label="&wappalyzer.labels;" value="0"/>
|
|
||||||
<menuitem label="&wappalyzer.icons;" value="1"/>
|
|
||||||
<menuitem label="&wappalyzer.popup;" value="2"/>
|
|
||||||
</menupopup>
|
|
||||||
</menulist>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<label control="wappalyzer-popup" value="&wappalyzer.popupOnHover;:"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<menulist preference="wappalyzer-popup" id="wappalyzer-popup">
|
|
||||||
<menupopup>
|
|
||||||
<menuitem label="&wappalyzer.onHover;" value="true" />
|
|
||||||
<menuitem label="&wappalyzer.onClick;" value="false"/>
|
|
||||||
</menupopup>
|
|
||||||
</menulist>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
</grid>
|
|
||||||
|
|
||||||
<separator/>
|
|
||||||
|
|
||||||
<grid>
|
|
||||||
<columns>
|
|
||||||
<column flex="1"/>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-enable-tracking" id="wappalyzer-option-enable-tracking" label="&wappalyzer.enableTracking;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
</grid>
|
|
||||||
</groupbox>
|
|
||||||
</tabpanel>
|
|
||||||
<tabpanel id="tab-categories">
|
|
||||||
<groupbox>
|
|
||||||
<grid>
|
|
||||||
<columns>
|
|
||||||
<column flex="1"/>
|
|
||||||
<column flex="1"/>
|
|
||||||
<column flex="1"/>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat1" id="wappalyzer-option-cat1" label="&wappalyzer.cat1;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat2" id="wappalyzer-option-cat2" label="&wappalyzer.cat2;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat3" id="wappalyzer-option-cat3" label="&wappalyzer.cat3;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat4" id="wappalyzer-option-cat4" label="&wappalyzer.cat4;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat5" id="wappalyzer-option-cat5" label="&wappalyzer.cat5;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat6" id="wappalyzer-option-cat6" label="&wappalyzer.cat6;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat7" id="wappalyzer-option-cat7" label="&wappalyzer.cat7;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat8" id="wappalyzer-option-cat8" label="&wappalyzer.cat8;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat9" id="wappalyzer-option-cat9" label="&wappalyzer.cat9;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat10" id="wappalyzer-option-cat10" label="&wappalyzer.cat10;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat11" id="wappalyzer-option-cat11" label="&wappalyzer.cat11;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat12" id="wappalyzer-option-cat12" label="&wappalyzer.cat12;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat13" id="wappalyzer-option-cat13" label="&wappalyzer.cat13;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat14" id="wappalyzer-option-cat14" label="&wappalyzer.cat14;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat15" id="wappalyzer-option-cat15" label="&wappalyzer.cat15;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat16" id="wappalyzer-option-cat16" label="&wappalyzer.cat16;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat17" id="wappalyzer-option-cat17" label="&wappalyzer.cat17;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat18" id="wappalyzer-option-cat18" label="&wappalyzer.cat18;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat19" id="wappalyzer-option-cat19" label="&wappalyzer.cat19;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat20" id="wappalyzer-option-cat20" label="&wappalyzer.cat20;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat21" id="wappalyzer-option-cat21" label="&wappalyzer.cat21;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat22" id="wappalyzer-option-cat22" label="&wappalyzer.cat22;"/>
|
|
||||||
</hbox>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat23" id="wappalyzer-option-cat23" label="&wappalyzer.cat23;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat24" id="wappalyzer-option-cat24" label="&wappalyzer.cat24;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat25" id="wappalyzer-option-cat25" label="&wappalyzer.cat25;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<checkbox preference="wappalyzer-cat26" id="wappalyzer-option-cat26" label="&wappalyzer.cat26;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
</grid>
|
|
||||||
</groupbox>
|
|
||||||
</tabpanel>
|
|
||||||
<tabpanel id="tab-custom">
|
|
||||||
<groupbox>
|
|
||||||
<grid>
|
|
||||||
<columns>
|
|
||||||
<column flex="0"/>
|
|
||||||
</columns>
|
|
||||||
<rows>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<description>&wappalyzer.customBody;</description>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<label class="text-link" onclick="window.open('http://wappalyzer.com/custom/', 'helpWindow'); void(0);" value="&wappalyzer.customMoreInfo;"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<textbox preference="wappalyzer-custom-apps" id="wappalyzer-option-custom-apps" multiline="true" rows="10" cols="60"></textbox>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
<row>
|
|
||||||
<hbox align="center">
|
|
||||||
<button label="&wappalyzer.evaluate;" oncommand="wappalyzer.evaluateCustomApps(document.getElementById('wappalyzer-option-custom-apps').value, true);"/>
|
|
||||||
</hbox>
|
|
||||||
</row>
|
|
||||||
</rows>
|
|
||||||
</grid>
|
|
||||||
</groupbox>
|
|
||||||
</tabpanel>
|
|
||||||
</tabpanels>
|
|
||||||
</tabbox>
|
|
||||||
</prefpane>
|
|
||||||
</prefwindow>
|
|
@ -1,675 +0,0 @@
|
|||||||
// Wappalyzer by ElbertF 2009 http://elbertf.com
|
|
||||||
|
|
||||||
var wappalyzer = (function() {
|
|
||||||
var self = {
|
|
||||||
apps: {},
|
|
||||||
appsDetected: 0,
|
|
||||||
browser: false,
|
|
||||||
cats: {},
|
|
||||||
checkUnique: {},
|
|
||||||
currentTab: false,
|
|
||||||
customApps: '',
|
|
||||||
debug: false,
|
|
||||||
enableTracking: true,
|
|
||||||
githubUrl: 'https://github.com/ElbertF/Wappalyzer',
|
|
||||||
history: {},
|
|
||||||
hitCount: 0,
|
|
||||||
homeUrl: 'http://wappalyzer.com/',
|
|
||||||
hoverTimeout: false,
|
|
||||||
newInstall: false,
|
|
||||||
popupOnHover: true,
|
|
||||||
prevUrl: '',
|
|
||||||
prefs: {},
|
|
||||||
regexBlacklist: /(dev\.|\/admin|\.local)/,
|
|
||||||
regexDomain: /^[a-z0-9._\-]+\.[a-z]+/,
|
|
||||||
req: false,
|
|
||||||
request: false,
|
|
||||||
showApps: 1,
|
|
||||||
showCats: [],
|
|
||||||
strings: {},
|
|
||||||
twitterUrl: 'https://twitter.com/Wappalyzer',
|
|
||||||
version: '',
|
|
||||||
|
|
||||||
init: function() {
|
|
||||||
self.log('init');
|
|
||||||
|
|
||||||
self.browser = gBrowser;
|
|
||||||
|
|
||||||
self.strings = document.getElementById('wappalyzer-strings');
|
|
||||||
|
|
||||||
// Preferences
|
|
||||||
self.prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components.interfaces.nsIPrefService).getBranch('wappalyzer.');
|
|
||||||
|
|
||||||
self.prefs.QueryInterface(Components.interfaces.nsIPrefBranch2);
|
|
||||||
self.prefs.addObserver('', wappalyzer, false);
|
|
||||||
|
|
||||||
self.showApps = self.prefs.getIntPref( 'showApps');
|
|
||||||
self.customApps = self.prefs.getCharPref('customApps');
|
|
||||||
self.debug = self.prefs.getBoolPref('debug');
|
|
||||||
self.enableTracking = self.prefs.getBoolPref('enableTracking');
|
|
||||||
self.popupOnHover = self.prefs.getBoolPref('popupOnHover');
|
|
||||||
self.newInstall = self.prefs.getBoolPref('newInstall');
|
|
||||||
self.version = self.prefs.getCharPref('version');
|
|
||||||
|
|
||||||
var i = 0;
|
|
||||||
|
|
||||||
while ( ++ i ) {
|
|
||||||
try {
|
|
||||||
self.showCats[i] = self.prefs.getBoolPref('cat' + i);
|
|
||||||
} catch (e) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var locationPref = self.prefs.getIntPref('location');
|
|
||||||
|
|
||||||
self.moveLocation(locationPref);
|
|
||||||
|
|
||||||
// Open page after installation
|
|
||||||
if ( self.newInstall ) {
|
|
||||||
self.prefs.setBoolPref('newInstall', false);
|
|
||||||
|
|
||||||
gBrowser.addEventListener('DOMContentLoaded', self.installSuccess, false);
|
|
||||||
} else {
|
|
||||||
// Open page after upgrade
|
|
||||||
try {
|
|
||||||
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefBranch);
|
|
||||||
|
|
||||||
var enabledItems = prefs.getCharPref('extensions.enabledAddons');
|
|
||||||
var version = enabledItems.replace(/(^.*wappalyzer[^:]+:)([^,]+),.*$/, '$2');
|
|
||||||
|
|
||||||
if ( version && self.version != version ) {
|
|
||||||
gBrowser.addEventListener('DOMContentLoaded', self.upgradeSuccess, false);
|
|
||||||
|
|
||||||
self.version = version;
|
|
||||||
|
|
||||||
self.prefs.setCharPref('version', self.version);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e) { }
|
|
||||||
}
|
|
||||||
|
|
||||||
// Listen messages sent from the content process
|
|
||||||
if ( typeof messageManager != 'undefined' ) {
|
|
||||||
messageManager.addMessageListener('wappalyzer:onPageLoad', self.onContentPageLoad);
|
|
||||||
|
|
||||||
messageManager.loadFrameScript('chrome://wappalyzer/content/content.js', true);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Listen for URL changes
|
|
||||||
self.browser.addProgressListener(self.urlChange, Components.interfaces.nsIWebProgress.NOTIFY_LOCATION);
|
|
||||||
|
|
||||||
// Listen for page loads
|
|
||||||
self.browser.addEventListener('DOMContentLoaded', self.onPageLoad, true);
|
|
||||||
|
|
||||||
self.evaluateCustomApps();
|
|
||||||
},
|
|
||||||
|
|
||||||
// Log messages to console
|
|
||||||
log: function(message) {
|
|
||||||
if ( self.debug && message ) {
|
|
||||||
var consoleService = Components.classes["@mozilla.org/consoleservice;1"].getService(Components.interfaces.nsIConsoleService);
|
|
||||||
|
|
||||||
consoleService.logStringMessage("Wappalyzer: " + message);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// Listen for preference changes
|
|
||||||
observe: function(subject, topic, data) {
|
|
||||||
if ( topic != 'nsPref:changed' ) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
switch(true) {
|
|
||||||
case data == 'customApps':
|
|
||||||
self.customApps = self.prefs.getCharPref('customApps');
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data == 'debug':
|
|
||||||
self.debug = self.prefs.getBoolPref('debug');
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data == 'enableTracking':
|
|
||||||
self.enableTracking = self.prefs.getBoolPref('enableTracking');
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data == 'popupOnHover':
|
|
||||||
self.popupOnHover = self.prefs.getBoolPref('popupOnHover');
|
|
||||||
|
|
||||||
self.moveLocation();
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data == 'showApps':
|
|
||||||
self.showApps = self.prefs.getIntPref('showApps');
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data == 'location':
|
|
||||||
var locationPref = self.prefs.getIntPref('location');
|
|
||||||
|
|
||||||
self.moveLocation(locationPref);
|
|
||||||
|
|
||||||
break;
|
|
||||||
case data.test(/^cat[0-9]+$/):
|
|
||||||
var cat = data.replace(/^cat([0-9]+)$/, '$1');
|
|
||||||
|
|
||||||
self.showCats[cat] = self.prefs.getIntPref('cat' + cat);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
openTab: function(url) {
|
|
||||||
self.browser.selectedTab = self.browser.addTab(url);
|
|
||||||
},
|
|
||||||
|
|
||||||
moveLocation: function(locationPref) {
|
|
||||||
self.log('moveLocation');
|
|
||||||
|
|
||||||
switch ( locationPref ) {
|
|
||||||
case 1:
|
|
||||||
var containerId = 'wappalyzer-statusbar';
|
|
||||||
|
|
||||||
// Show status bar panel
|
|
||||||
document.getElementById('wappalyzer-statusbar').style.visibility = '';
|
|
||||||
document.getElementById('wappalyzer-statusbar').style.padding = '1px';
|
|
||||||
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
var containerId = 'urlbar-icons';
|
|
||||||
|
|
||||||
// Hide status bar panel
|
|
||||||
document.getElementById('wappalyzer-statusbar').style.visibility = 'hidden';
|
|
||||||
document.getElementById('wappalyzer-statusbar').style.padding = '0';
|
|
||||||
}
|
|
||||||
|
|
||||||
var e = document.getElementById(containerId);
|
|
||||||
var container = document.getElementById('wappalyzer-container');
|
|
||||||
|
|
||||||
if ( self.popupOnHover ) {
|
|
||||||
container.addEventListener('mouseover', function() {
|
|
||||||
self.hoverTimeout = setTimeout(function() {
|
|
||||||
document.getElementById('wappalyzer-apps').openPopup(document.getElementById('wappalyzer-container'), 'after_end');
|
|
||||||
}, 200);
|
|
||||||
}, false);
|
|
||||||
|
|
||||||
container.addEventListener('mouseout', function() { clearTimeout(self.hoverTimeout); }, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.appendChild(container);
|
|
||||||
},
|
|
||||||
|
|
||||||
onPageLoad: function(event) {
|
|
||||||
self.log('onPageLoad');
|
|
||||||
|
|
||||||
var target = event.originalTarget;
|
|
||||||
|
|
||||||
if ( !target.request ) {
|
|
||||||
self.request = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.analyzePage(
|
|
||||||
target.documentElement,
|
|
||||||
target.location.href,
|
|
||||||
target.documentElement.innerHTML,
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
true
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
onContentPageLoad: function(message) {
|
|
||||||
self.log('onContentPageLoad');
|
|
||||||
|
|
||||||
self.analyzePage(
|
|
||||||
null,
|
|
||||||
message.json.href,
|
|
||||||
message.json.html,
|
|
||||||
message.json.headers,
|
|
||||||
message.json.environmentVars,
|
|
||||||
true
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
onUrlChange: function(request) {
|
|
||||||
self.log('onUrlChange');
|
|
||||||
|
|
||||||
self.clearDetectedApps();
|
|
||||||
|
|
||||||
var doc = self.browser.contentDocument;
|
|
||||||
|
|
||||||
self.request = doc.request ? doc.request : request;
|
|
||||||
|
|
||||||
self.currentTab = false;
|
|
||||||
|
|
||||||
self.analyzePage(
|
|
||||||
doc,
|
|
||||||
doc.location.href ? doc.location.href : '',
|
|
||||||
doc.documentElement ? doc.documentElement.innerHTML : '',
|
|
||||||
[],
|
|
||||||
[],
|
|
||||||
false
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
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) {
|
|
||||||
self.log('urlChange.onLocationChange');
|
|
||||||
|
|
||||||
if ( !url ) {
|
|
||||||
self.prevUrl = '';
|
|
||||||
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( url.spec != self.prevUrl ) {
|
|
||||||
self.prevUrl = url.spec;
|
|
||||||
|
|
||||||
self.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) {}
|
|
||||||
},
|
|
||||||
|
|
||||||
analyzePage: function(doc, href, html, headers, environmentVars, doCount) {
|
|
||||||
self.log('analyzePage');
|
|
||||||
|
|
||||||
self.currentTab = false;
|
|
||||||
|
|
||||||
if ( href == self.browser.contentDocument.location.href ) {
|
|
||||||
self.currentTab = true;
|
|
||||||
|
|
||||||
if ( !doc ) {
|
|
||||||
doc = self.browser.contentDocument;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.clearDetectedApps();
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( typeof html == 'undefined' ) {
|
|
||||||
html = '';
|
|
||||||
}
|
|
||||||
|
|
||||||
// Prevent large documents from slowing things down
|
|
||||||
if ( html.length > 50000 ) {
|
|
||||||
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan URL, domain and response headers for patterns
|
|
||||||
if ( html || self.request ) {
|
|
||||||
// Check cached application names
|
|
||||||
if ( doc && typeof doc.detectedApps != 'undefined' ) {
|
|
||||||
for ( i in doc.detectedApps ) {
|
|
||||||
var appName = doc.detectedApps[i];
|
|
||||||
|
|
||||||
if ( typeof self.checkUnique[appName] == 'undefined' ) {
|
|
||||||
self.log('CACHE'); //
|
|
||||||
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
|
|
||||||
self.checkUnique[appName] = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for ( var appName in self.apps ) {
|
|
||||||
// Don't scan for apps that have already been detected
|
|
||||||
if ( typeof self.checkUnique[appName] == 'undefined' ) {
|
|
||||||
// Scan HTML
|
|
||||||
if ( html && typeof self.apps[appName].html != 'undefined' ) {
|
|
||||||
if ( self.apps[appName].html.test(html) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan script tags
|
|
||||||
if ( html && typeof self.apps[appName].script != 'undefined' ) {
|
|
||||||
var
|
|
||||||
regex = /<script[^>]+src=("|')([^"']+)\1/ig,
|
|
||||||
match = []
|
|
||||||
;
|
|
||||||
|
|
||||||
while ( match = regex.exec(html) ) {
|
|
||||||
if ( self.apps[appName].script.test(match[2]) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan meta tags
|
|
||||||
if ( html && typeof self.apps[appName].meta != 'undefined' ) {
|
|
||||||
var
|
|
||||||
regex = /<meta[^>]+>/ig,
|
|
||||||
match = []
|
|
||||||
;
|
|
||||||
|
|
||||||
while ( match = regex.exec(html) ) {
|
|
||||||
for ( meta in self.apps[appName].meta ) {
|
|
||||||
if ( new RegExp('name=["\']' + meta + '["\']', 'i').test(match) ) {
|
|
||||||
var content = match.toString().match(/content=("|')([^"']+)("|')/i);
|
|
||||||
|
|
||||||
if ( self.apps[appName].meta[meta].test(content[2]) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan URL
|
|
||||||
if ( href && typeof self.apps[appName].url != 'undefined' ) {
|
|
||||||
var regex = self.apps[appName].url;
|
|
||||||
|
|
||||||
if ( regex.test(href) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan response headers
|
|
||||||
if ( typeof self.apps[appName].headers != 'undefined' && self.request ) {
|
|
||||||
for ( var header in self.apps[appName].headers ) {
|
|
||||||
var regex = self.apps[appName].headers[header];
|
|
||||||
|
|
||||||
try {
|
|
||||||
if ( regex.test(self.request.nsIHttpChannel.getResponseHeader(header)) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e) { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Scan environment variables
|
|
||||||
if ( environmentVars && typeof self.apps[appName].env != 'undefined' ) {
|
|
||||||
var regex = self.apps[appName].env;
|
|
||||||
|
|
||||||
for ( var i in environmentVars ) {
|
|
||||||
try {
|
|
||||||
if ( regex.test(environmentVars[i]) ) {
|
|
||||||
self.showApp(appName, doc, href, doCount);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
catch(e) { }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
html = ''; // Free memory
|
|
||||||
},
|
|
||||||
|
|
||||||
showApp: function(detectedApp, doc, href, doCount) {
|
|
||||||
self.log('showApp ' + detectedApp);
|
|
||||||
|
|
||||||
self.report(detectedApp, href);
|
|
||||||
|
|
||||||
// Keep detected application names in memory
|
|
||||||
if ( doc ) {
|
|
||||||
if ( typeof doc.detectedApps == 'undefined' ) {
|
|
||||||
doc.detectedApps = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
doc.detectedApps.push(detectedApp);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( detectedApp && typeof self.checkUnique[detectedApp] == 'undefined' ) {
|
|
||||||
var show = false;
|
|
||||||
|
|
||||||
for ( var i in self.apps[detectedApp].cats ) {
|
|
||||||
if ( self.showCats[self.apps[detectedApp].cats[i]] ) {
|
|
||||||
show = true;
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( show && self.currentTab ) {
|
|
||||||
var e = document.getElementById('wappalyzer-detected-apps');
|
|
||||||
|
|
||||||
if ( self.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 self.apps[detectedApp].icon == 'string' ) {
|
|
||||||
child.setAttribute('src', self.apps[detectedApp].icon);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
child.setAttribute('src', 'chrome://wappalyzer/skin/icons/' + detectedApp + '.ico');
|
|
||||||
}
|
|
||||||
|
|
||||||
child.setAttribute('class', 'wappalyzer-icon');
|
|
||||||
|
|
||||||
if ( self.appsDetected ) {
|
|
||||||
child.setAttribute('style', 'margin-left: .5em');
|
|
||||||
}
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
|
|
||||||
if ( self.showApps == 0 ) {
|
|
||||||
var child = document.createElement('label');
|
|
||||||
|
|
||||||
child.setAttribute('value', detectedApp);
|
|
||||||
child.setAttribute('class', 'wappalyzer-app-name');
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Show application in popup
|
|
||||||
var e = document.getElementById('wappalyzer-apps');
|
|
||||||
|
|
||||||
if ( !self.appsDetected ) {
|
|
||||||
// Remove "no apps detected" message
|
|
||||||
document.getElementById('wappalyzer-apps').removeChild(document.getElementById('wappalyzer-no-detected-apps'));
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
var child = document.createElement('menuseparator');
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
}
|
|
||||||
|
|
||||||
var child = document.createElement('menuitem');
|
|
||||||
|
|
||||||
child.setAttribute('class', 'menuitem-iconic');
|
|
||||||
child.setAttribute('type', '');
|
|
||||||
|
|
||||||
child.addEventListener('command', function() { self.openTab(self.homeUrl + 'stats/app/' + escape(detectedApp)); }, false);
|
|
||||||
|
|
||||||
if ( typeof self.apps[detectedApp].custom == 'undefined' ) {
|
|
||||||
child.setAttribute('label', detectedApp);
|
|
||||||
child.setAttribute('image', 'chrome://wappalyzer/skin/icons/' + detectedApp + '.ico');
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
child.setAttribute('label', detectedApp + ' (' + self.strings.getString('wappalyzer.custom') + ')');
|
|
||||||
child.setAttribute('disabled', 'true');
|
|
||||||
child.setAttribute('image', self.apps[detectedApp].icon);
|
|
||||||
}
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
|
|
||||||
if ( self.apps[detectedApp].cats ) {
|
|
||||||
for ( var i in self.apps[detectedApp].cats ) {
|
|
||||||
var child = document.createElement('menuitem');
|
|
||||||
|
|
||||||
child.setAttribute('label', self.cats[self.apps[detectedApp].cats[i]].name);
|
|
||||||
child.setAttribute('disabled', 'true');
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( doCount ) {
|
|
||||||
self.report(detectedApp, href);
|
|
||||||
}
|
|
||||||
|
|
||||||
self.appsDetected ++;
|
|
||||||
|
|
||||||
self.checkUnique[detectedApp] = true;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
report: function(detectedApp, href) {
|
|
||||||
self.log('report');
|
|
||||||
|
|
||||||
if ( typeof self.apps[detectedApp].custom == 'undefined' ) {
|
|
||||||
var
|
|
||||||
regex = /:\/\/(.[^/]+)/,
|
|
||||||
domain = href.match(regex) ? href.match(regex)[1] : ''
|
|
||||||
;
|
|
||||||
|
|
||||||
if ( self.enableTracking && self.regexDomain.test(domain) && !self.regexBlacklist.test(href) ) {
|
|
||||||
if ( typeof self.history[domain] == 'undefined' ) {
|
|
||||||
self.history[domain] = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
if ( typeof self.history[domain][detectedApp] == 'undefined' ) {
|
|
||||||
self.history[domain][detectedApp] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
self.history[domain][detectedApp] ++;
|
|
||||||
|
|
||||||
self.hitCount ++;
|
|
||||||
|
|
||||||
if ( self.hitCount > 200 ) {
|
|
||||||
self.sendReport();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
// 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 distribution of software, stats are publicly available on the site
|
|
||||||
sendReport: function() {
|
|
||||||
self.log('sendReport');
|
|
||||||
|
|
||||||
if ( self.enableTracking && !self.req ) {
|
|
||||||
var report = '';
|
|
||||||
|
|
||||||
if ( self.history ) {
|
|
||||||
for ( var i in self.history ) {
|
|
||||||
report += '[' + i;
|
|
||||||
|
|
||||||
for ( var j in self.history[i] ) {
|
|
||||||
report += '|' + j + ':' + self.history[i][j];
|
|
||||||
}
|
|
||||||
|
|
||||||
report += ']';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Make POST request
|
|
||||||
self.req = new XMLHttpRequest();
|
|
||||||
|
|
||||||
self.req.open('POST', self.homeUrl + 'report/', true);
|
|
||||||
|
|
||||||
self.req.channel.loadFlags |= Components.interfaces.nsIRequest.LOAD_BYPASS_CACHE;
|
|
||||||
|
|
||||||
self.req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
|
|
||||||
|
|
||||||
self.req.onreadystatechange = function(e) {
|
|
||||||
if ( self.req.readyState == 4 ) {
|
|
||||||
if ( self.req.status == 200 ) {
|
|
||||||
// Reset
|
|
||||||
report = '';
|
|
||||||
|
|
||||||
self.hitCount = 0;
|
|
||||||
self.history = [];
|
|
||||||
}
|
|
||||||
|
|
||||||
self.req.close();
|
|
||||||
|
|
||||||
self.req = false;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
self.req.send('d=' + encodeURIComponent(report));
|
|
||||||
}
|
|
||||||
},
|
|
||||||
|
|
||||||
clearDetectedApps: function() {
|
|
||||||
self.log('clearDetectedApps');
|
|
||||||
|
|
||||||
self.appsDetected = 0;
|
|
||||||
self.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
|
|
||||||
var e = document.getElementById('wappalyzer-detected-apps');
|
|
||||||
|
|
||||||
while ( e.childNodes.length > 0 ) {
|
|
||||||
e.removeChild(e.childNodes.item(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
// Clear application popup
|
|
||||||
var e = document.getElementById('wappalyzer-apps');
|
|
||||||
|
|
||||||
while ( e.childNodes.length > 0 ) {
|
|
||||||
e.removeChild(e.childNodes.item(0));
|
|
||||||
}
|
|
||||||
|
|
||||||
var child = document.createElement('menuitem');
|
|
||||||
|
|
||||||
child.setAttribute('label', self.strings.getString('wappalyzer.noDetectedApps'));
|
|
||||||
child.setAttribute('id', 'wappalyzer-no-detected-apps');
|
|
||||||
child.setAttribute('class', 'menuitem-iconic');
|
|
||||||
child.setAttribute('disabled', 'true');
|
|
||||||
child.setAttribute('type', '');
|
|
||||||
|
|
||||||
e.appendChild(child);
|
|
||||||
},
|
|
||||||
|
|
||||||
installSuccess: function() {
|
|
||||||
self.log('installSuccess');
|
|
||||||
|
|
||||||
gBrowser.removeEventListener('DOMContentLoaded', self.installSuccess, false);
|
|
||||||
|
|
||||||
self.openTab(self.homeUrl + 'install/success/');
|
|
||||||
},
|
|
||||||
|
|
||||||
upgradeSuccess: function() {
|
|
||||||
self.log('upgradeSuccess');
|
|
||||||
|
|
||||||
gBrowser.removeEventListener('DOMContentLoaded', self.upgradeSuccess, false);
|
|
||||||
|
|
||||||
self.openTab(self.homeUrl + 'install/upgraded/');
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
addEventListener('load', function() { self.init(); }, false);
|
|
||||||
addEventListener('unload', function() { self.sendReport(); }, false);
|
|
||||||
|
|
||||||
return self;
|
|
||||||
})();
|
|
@ -1,58 +0,0 @@
|
|||||||
<?xml version="1.0"?>
|
|
||||||
|
|
||||||
<?xml-stylesheet type="text/css" href="chrome://wappalyzer/skin/wappalyzer.css"?>
|
|
||||||
|
|
||||||
<!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/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/wappalyzer.properties"/>
|
|
||||||
</stringbundleset>
|
|
||||||
|
|
||||||
<hbox>
|
|
||||||
<hbox
|
|
||||||
id="wappalyzer-container"
|
|
||||||
context="wappalyzer-menu"
|
|
||||||
popup="wappalyzer-apps"
|
|
||||||
>
|
|
||||||
<image
|
|
||||||
id="wappalyzer-icon"
|
|
||||||
class="wappalyzer-icon"
|
|
||||||
label="&wappalyzer.title;"
|
|
||||||
src="chrome://wappalyzer/skin/icon16x16.ico"/>
|
|
||||||
|
|
||||||
<box align="start" id="wappalyzer-detected-apps"/>
|
|
||||||
|
|
||||||
<menupopup id="wappalyzer-apps" position="after_end"></menupopup>
|
|
||||||
|
|
||||||
<menupopup id="wappalyzer-menu">
|
|
||||||
<menuitem label="&wappalyzer.options;" oncommand="
|
|
||||||
window.openDialog('chrome://wappalyzer/content/options.xul', 'wappalyzer-options', 'chrome, dialog, centerscreen');
|
|
||||||
" image="chrome://wappalyzer/skin/options.png"/>
|
|
||||||
<menuseparator/>
|
|
||||||
<menuitem label="&wappalyzer.donate;" oncommand="wappalyzer.openTab(wappalyzer.homeUrl + 'donate/');" image="chrome://wappalyzer/skin/donate.png"/>
|
|
||||||
<menuitem label="&wappalyzer.feedback;" oncommand="wappalyzer.openTab(wappalyzer.homeUrl + '?redirect=feedback');" image="chrome://wappalyzer/skin/feedback.png"/>
|
|
||||||
<menuitem label="&wappalyzer.forkOnGithub;" oncommand="wappalyzer.openTab(wappalyzer.githubUrl);" image="chrome://wappalyzer/skin/github.ico"/>
|
|
||||||
<menuitem label="&wappalyzer.twitter;" oncommand="wappalyzer.openTab(wappalyzer.twitterUrl);" image="chrome://wappalyzer/skin/twitter.ico"/>
|
|
||||||
<menuitem label="&wappalyzer.home;" oncommand="wappalyzer.openTab(wappalyzer.homeUrl);" image="chrome://wappalyzer/skin/icon16x16_hot.ico"/>
|
|
||||||
</menupopup>
|
|
||||||
</hbox>
|
|
||||||
</hbox>
|
|
||||||
|
|
||||||
<hbox
|
|
||||||
id="urlbar-icons"
|
|
||||||
/>
|
|
||||||
|
|
||||||
<statusbar id="status-bar">
|
|
||||||
<statusbarpanel
|
|
||||||
id="wappalyzer-statusbar"
|
|
||||||
class="statusbarpanel-iconic"
|
|
||||||
context="wappalyzer-menu"
|
|
||||||
popup="wappalyzer-apps"
|
|
||||||
/>
|
|
||||||
</statusbar>
|
|
||||||
</overlay>
|
|
@ -1,52 +0,0 @@
|
|||||||
<!ENTITY wappalyzer.title "Wappalyzer">
|
|
||||||
<!ENTITY wappalyzer.feedback "Feedback">
|
|
||||||
<!ENTITY wappalyzer.forkOnGithub "Fork on Github">
|
|
||||||
<!ENTITY wappalyzer.options "Settings">
|
|
||||||
<!ENTITY wappalyzer.custom "Custom code">
|
|
||||||
<!ENTITY wappalyzer.enableTracking "Allow anonymous application data collection for research">
|
|
||||||
<!ENTITY wappalyzer.general "General">
|
|
||||||
<!ENTITY wappalyzer.location "Display icons in">
|
|
||||||
<!ENTITY wappalyzer.addressBar "Address bar">
|
|
||||||
<!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.popupOnHover "Show popup">
|
|
||||||
<!ENTITY wappalyzer.onHover "On hover and click">
|
|
||||||
<!ENTITY wappalyzer.onClick "On click only">
|
|
||||||
<!ENTITY wappalyzer.categories "Categories">
|
|
||||||
<!ENTITY wappalyzer.twitter "Twitter">
|
|
||||||
<!ENTITY wappalyzer.home "Go to Wappalyzer">
|
|
||||||
<!ENTITY wappalyzer.privacy "Privacy">
|
|
||||||
<!ENTITY wappalyzer.donate "Donate">
|
|
||||||
<!ENTITY wappalyzer.evaluate "Evaluate code">
|
|
||||||
<!ENTITY wappalyzer.customBody "Add applications for personal use with JSON and regular expressions.">
|
|
||||||
<!ENTITY wappalyzer.customMoreInfo "Click here to learn more">
|
|
||||||
|
|
||||||
<!ENTITY wappalyzer.cat1 "CMS">
|
|
||||||
<!ENTITY wappalyzer.cat2 "Message boards">
|
|
||||||
<!ENTITY wappalyzer.cat3 "Database managers">
|
|
||||||
<!ENTITY wappalyzer.cat4 "Documentation tools">
|
|
||||||
<!ENTITY wappalyzer.cat5 "Widgets">
|
|
||||||
<!ENTITY wappalyzer.cat6 "Web shops">
|
|
||||||
<!ENTITY wappalyzer.cat7 "Photo galleries">
|
|
||||||
<!ENTITY wappalyzer.cat8 "Wikis">
|
|
||||||
<!ENTITY wappalyzer.cat9 "Hosting panels">
|
|
||||||
<!ENTITY wappalyzer.cat10 "Analytics">
|
|
||||||
<!ENTITY wappalyzer.cat11 "Blogs">
|
|
||||||
<!ENTITY wappalyzer.cat12 "JavaScript frameworks">
|
|
||||||
<!ENTITY wappalyzer.cat13 "Issue trackers">
|
|
||||||
<!ENTITY wappalyzer.cat14 "Video players">
|
|
||||||
<!ENTITY wappalyzer.cat15 "Comment systems">
|
|
||||||
<!ENTITY wappalyzer.cat16 "CAPTCHAs">
|
|
||||||
<!ENTITY wappalyzer.cat17 "Font scripts">
|
|
||||||
<!ENTITY wappalyzer.cat18 "Web frameworks">
|
|
||||||
<!ENTITY wappalyzer.cat19 "Miscellaneous">
|
|
||||||
<!ENTITY wappalyzer.cat20 "Editors">
|
|
||||||
<!ENTITY wappalyzer.cat21 "LMS">
|
|
||||||
<!ENTITY wappalyzer.cat22 "Web servers">
|
|
||||||
<!ENTITY wappalyzer.cat23 "Cache tools">
|
|
||||||
<!ENTITY wappalyzer.cat24 "Rich text editors">
|
|
||||||
<!ENTITY wappalyzer.cat25 "Javascript Graphics">
|
|
||||||
<!ENTITY wappalyzer.cat26 "Mobile Frameworks">
|
|
@ -1,3 +0,0 @@
|
|||||||
wappalyzer.title = Wappalyzer
|
|
||||||
wappalyzer.noDetectedApps = No applications detected
|
|
||||||
wappalyzer.custom = custom
|
|
Before Width: | Height: | Size: 714 B |
Before Width: | Height: | Size: 782 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 8.9 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 486 B |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 2.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.6 KiB |
Before Width: | Height: | Size: 815 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1014 B |
Before Width: | Height: | Size: 60 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 11 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 81 KiB |
Before Width: | Height: | Size: 7.2 KiB |
Before Width: | Height: | Size: 15 KiB |
Before Width: | Height: | Size: 2.7 KiB |
Before Width: | Height: | Size: 2.2 KiB |
Before Width: | Height: | Size: 5.3 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 894 B |
Before Width: | Height: | Size: 4.5 KiB |
Before Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 22 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.1 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 369 B |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 3.2 KiB |
Before Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 8.8 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 318 B |