Firefox driver: fixed AJAX requests being analyzed, icon flickering

main
ElbertF 12 years ago
parent 361cf8ffd5
commit dc783cca09

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

@ -121,7 +121,7 @@
'Dojo': { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
'Dokeos': { cats: [ 21 ], meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ }, implies: [ 'PHP', 'xajax', 'jQuery', 'CKEditor' ] },
'DokuWiki': { cats: [ 8 ], meta: { 'generator': /DokuWiki/i }, implies: [ 'PHP' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'Doxygen': { cats: [ 4 ], html: /(<!-- Generated by Doxygen|<link[^>]+doxygen.css)/i },
'DreamWeaver': { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'Drupal': { cats: [ 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': /.*/, 'X-Generator': /Drupal/, 'Expires': /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
@ -275,7 +275,7 @@
'Quantcast': { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
'Quick.Cart': { cats: [ 6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'Raphael': { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
'RBS Change': { cats: [ 1, 6 ], html: /xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'RBS Change': { cats: [ 1, 6 ], html: /<html[^>]+xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'ReallyCMS': { cats: [ 1 ], meta: { 'generator': /ReallyCMS/ } },
'reCAPTCHA': { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
'Red Hat': { cats: [ 28 ], headers: { 'Server': /(Red Hat|rhel[0-9]+)/i, 'X-Powered-By': /Red Hat/i } },

@ -40,7 +40,6 @@ var wappalyzer = wappalyzer || (function() {
websiteURL: 'http://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/ElbertF/Wappalyzer',
gplusURL: 'https://plus.google.com/107008529118023432137/posts',
firstRun: false,
upgraded: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

@ -121,7 +121,7 @@
'Dojo': { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
'Dokeos': { cats: [ 21 ], meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ }, implies: [ 'PHP', 'xajax', 'jQuery', 'CKEditor' ] },
'DokuWiki': { cats: [ 8 ], meta: { 'generator': /DokuWiki/i }, implies: [ 'PHP' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'Doxygen': { cats: [ 4 ], html: /(<!-- Generated by Doxygen|<link[^>]+doxygen.css)/i },
'DreamWeaver': { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'Drupal': { cats: [ 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': /.*/, 'X-Generator': /Drupal/, 'Expires': /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
@ -275,7 +275,7 @@
'Quantcast': { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
'Quick.Cart': { cats: [ 6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'Raphael': { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
'RBS Change': { cats: [ 1, 6 ], html: /xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'RBS Change': { cats: [ 1, 6 ], html: /<html[^>]+xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'ReallyCMS': { cats: [ 1 ], meta: { 'generator': /ReallyCMS/ } },
'reCAPTCHA': { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
'Red Hat': { cats: [ 28 ], headers: { 'Server': /(Red Hat|rhel[0-9]+)/i, 'X-Powered-By': /Red Hat/i } },

@ -53,7 +53,7 @@ var wappalyzer = {};
response.tabCache.appsDetected.map(function(appName) {
html =
'<div class="detected-app">' +
'<a target="_blank" href="http://wappalyzer.com/applications/' + appName.toLowerCase().replace(/ /g, '-').replace(/[^\w]/g, '') + '">' +
'<a target="_blank" href="http://wappalyzer.com/applications/' + appName.toLowerCase().replace(/ /g, '-').replace(/[^\w-]/g, '') + '">' +
'<img src="images/icons/' + appName + '.png"/>' +
'<span class="label">' + appName + '</span>' +
'</a>';

@ -40,7 +40,6 @@ var wappalyzer = wappalyzer || (function() {
websiteURL: 'http://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/ElbertF/Wappalyzer',
gplusURL: 'https://plus.google.com/107008529118023432137/posts',
firstRun: false,
upgraded: false

@ -121,7 +121,7 @@
'Dojo': { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
'Dokeos': { cats: [ 21 ], meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ }, implies: [ 'PHP', 'xajax', 'jQuery', 'CKEditor' ] },
'DokuWiki': { cats: [ 8 ], meta: { 'generator': /DokuWiki/i }, implies: [ 'PHP' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'Doxygen': { cats: [ 4 ], html: /(<!-- Generated by Doxygen|<link[^>]+doxygen.css)/i },
'DreamWeaver': { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'Drupal': { cats: [ 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': /.*/, 'X-Generator': /Drupal/, 'Expires': /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
@ -275,7 +275,7 @@
'Quantcast': { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
'Quick.Cart': { cats: [ 6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'Raphael': { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
'RBS Change': { cats: [ 1, 6 ], html: /xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'RBS Change': { cats: [ 1, 6 ], html: /<html[^>]+xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'ReallyCMS': { cats: [ 1 ], meta: { 'generator': /ReallyCMS/ } },
'reCAPTCHA': { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
'Red Hat': { cats: [ 28 ], headers: { 'Server': /(Red Hat|rhel[0-9]+)/i, 'X-Powered-By': /Red Hat/i } },

@ -4,12 +4,14 @@
addEventListener('DOMContentLoaded', onLoad, false);
function onLoad() {
if ( content.document.contentType != 'text/html' ) return;
if ( content.document.contentType != 'text/html' ) { return };
// HTML
var html = content.document.documentElement.outerHTML
if ( html.length > 50000 ) html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
if ( html.length > 50000 ) {
html = html.substring(0, 25000) + html.substring(html.length - 25000, html.length);
}
sendAsyncMessage('wappalyzer', {
hostname: content.location.hostname,
@ -17,5 +19,7 @@
env: Object.keys(content.wrappedJSObject),
url: content.location.href
});
removeEventListener('DOMContentLoaded', onLoad, false);
}
})();

@ -71,14 +71,14 @@
// Get response headers
onStateChange: function(progress, request, flags, status) {
if ( request && request.nsIHttpChannel && flags & Ci.nsIWebProgressListener.STATE_STOP ) {
if ( request && request.nsIHttpChannel && request.name == progress.currentURI.spec && request.contentType == 'text/html' && flags & Ci.nsIWebProgressListener.STATE_STOP ) {
var headers = new Object();
request.nsIHttpChannel.visitResponseHeaders(function(header, value) {
headers[header] = value;
});
if ( progress.currentURI ) w.analyze(progress.currentURI.host, progress.currentURI.spec, { headers: headers });
w.analyze(progress.currentURI.host, progress.currentURI.spec, { headers: headers });
}
}
});
@ -99,7 +99,8 @@
displayApps: function() {
var url = gBrowser.currentURI.spec.split('#')[0];
$('#wappalyzer-container > image, #wappalyzer-menu > menuitem, #wappalyzer-menu > menuseparator').remove();
// Removing immediately causes flickering
$('#wappalyzer-container > image, #wappalyzer-menu > menuitem, #wappalyzer-menu > menuseparator').addClass('remove');
if ( w.detected[url] != null && w.detected[url].length ) {
if ( !prefs.getBoolPref('showIcons') ) {
@ -174,6 +175,8 @@
$('#wappalyzer-menu').append(menuItem);
}
$('#wappalyzer-container > .remove, #wappalyzer-menu > .remove, #wappalyzer-menu > .remove').remove();
},
/**

@ -40,7 +40,6 @@ var wappalyzer = wappalyzer || (function() {
websiteURL: 'http://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/ElbertF/Wappalyzer',
gplusURL: 'https://plus.google.com/107008529118023432137/posts',
firstRun: false,
upgraded: false

@ -24,15 +24,14 @@
<menuseparator/>
<menuitem id="wappalyzer-menu-donate" label="&wappalyzer.donate;" image="chrome://wappalyzer/skin/images/donate.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-feedback" label="&wappalyzer.feedback;" image="chrome://wappalyzer/skin/images/feedback.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-website" label="&wappalyzer.website;" image="chrome://wappalyzer/skin/images/icon_hot.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-donate" label="&wappalyzer.donate;" image="chrome://wappalyzer/skin/images/donate.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-feedback" label="&wappalyzer.feedback;" image="chrome://wappalyzer/skin/images/feedback.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-website" label="&wappalyzer.website;" image="chrome://wappalyzer/skin/images/icon_hot.png" class="menuitem-iconic"/>
<menuseparator/>
<menuitem id="wappalyzer-menu-github" label="&wappalyzer.github;" image="chrome://wappalyzer/skin/images/github.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-twitter" label="&wappalyzer.twitter;" image="chrome://wappalyzer/skin/images/twitter.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-gplus" label="&wappalyzer.gplus;" image="chrome://wappalyzer/skin/images/gplus.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-github" label="&wappalyzer.github;" image="chrome://wappalyzer/skin/images/github.png" class="menuitem-iconic"/>
<menuitem id="wappalyzer-menu-twitter" label="&wappalyzer.twitter;" image="chrome://wappalyzer/skin/images/twitter.png" class="menuitem-iconic"/>
</menupopup>
</menu>

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 872 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 729 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

@ -121,7 +121,7 @@
'Dojo': { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
'Dokeos': { cats: [ 21 ], meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ }, implies: [ 'PHP', 'xajax', 'jQuery', 'CKEditor' ] },
'DokuWiki': { cats: [ 8 ], meta: { 'generator': /DokuWiki/i }, implies: [ 'PHP' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'Doxygen': { cats: [ 4 ], html: /(<!-- Generated by Doxygen|<link[^>]+doxygen.css)/i },
'DreamWeaver': { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'Drupal': { cats: [ 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': /.*/, 'X-Generator': /Drupal/, 'Expires': /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
@ -275,7 +275,7 @@
'Quantcast': { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
'Quick.Cart': { cats: [ 6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'Raphael': { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
'RBS Change': { cats: [ 1, 6 ], html: /xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'RBS Change': { cats: [ 1, 6 ], html: /<html[^>]+xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'ReallyCMS': { cats: [ 1 ], meta: { 'generator': /ReallyCMS/ } },
'reCAPTCHA': { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
'Red Hat': { cats: [ 28 ], headers: { 'Server': /(Red Hat|rhel[0-9]+)/i, 'X-Powered-By': /Red Hat/i } },

@ -40,7 +40,6 @@ var wappalyzer = wappalyzer || (function() {
websiteURL: 'http://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/ElbertF/Wappalyzer',
gplusURL: 'https://plus.google.com/107008529118023432137/posts',
firstRun: false,
upgraded: false

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 714 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 801 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 581 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 747 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 930 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 564 B

@ -121,7 +121,7 @@
'Dojo': { cats: [ 12 ], script: /dojo(\.xd)?\.js/, env: /^dojo$/ },
'Dokeos': { cats: [ 21 ], meta: { 'generator': /Dokeos/i }, html: /Portal <a[^>]+>Dokeos|@import "[^"]+dokeos_blue/i, headers: { 'X-Powered-By': /Dokeos/ }, implies: [ 'PHP', 'xajax', 'jQuery', 'CKEditor' ] },
'DokuWiki': { cats: [ 8 ], meta: { 'generator': /DokuWiki/i }, implies: [ 'PHP' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /(<!\-\- by DotNetNuke Corporation|<link[^>]+\/portals\/_default\/[^>]+\.css)/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'DotNetNuke': { cats: [ 1 ], meta: { 'generator': /DotNetNuke/i }, html: /<!\-\- by DotNetNuke Corporation/i, env: /^(DDN|DotNetNuke)/i, implies: [ 'Microsoft ASP.NET' ] },
'Doxygen': { cats: [ 4 ], html: /(<!-- Generated by Doxygen|<link[^>]+doxygen.css)/i },
'DreamWeaver': { cats: [ 20 ], html: /(<!\-\-[^>]*(InstanceBeginEditable|Dreamweaver[^>]+target|DWLayoutDefaultTable)|function MM_preloadImages\(\) {)/ },
'Drupal': { cats: [ 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': /.*/, 'X-Generator': /Drupal/, 'Expires': /19 Nov 1978/ }, env: /^Drupal$/, implies: [ 'PHP' ] },
@ -275,7 +275,7 @@
'Quantcast': { cats: [ 10 ], script: /edge\.quantserve\.com\/quant\.js/, env: /^quantserve$/ },
'Quick.Cart': { cats: [ 6 ], html: /<a href="[^>]+opensolution\.org\/">Powered by/i },
'Raphael': { cats: [ 25 ], script: /raphael.*\.js/, env: /^Raphael$/ },
'RBS Change': { cats: [ 1, 6 ], html: /xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'RBS Change': { cats: [ 1, 6 ], html: /<html[^>]+xmlns:change=/, meta: { 'generator': /RBS Change/i }, implies: [ 'PHP' ] },
'ReallyCMS': { cats: [ 1 ], meta: { 'generator': /ReallyCMS/ } },
'reCAPTCHA': { cats: [ 16 ], script: /(api\-secure\.recaptcha\.net|recaptcha_ajax\.js)/, html: /<div[^>]+id=("|')recaptcha_image/, env: /^Recaptcha$/ },
'Red Hat': { cats: [ 28 ], headers: { 'Server': /(Red Hat|rhel[0-9]+)/i, 'X-Powered-By': /Red Hat/i } },

@ -40,7 +40,6 @@ var wappalyzer = wappalyzer || (function() {
websiteURL: 'http://wappalyzer.com/',
twitterURL: 'https://twitter.com/Wappalyzer',
githubURL: 'https://github.com/ElbertF/Wappalyzer',
gplusURL: 'https://plus.google.com/107008529118023432137/posts',
firstRun: false,
upgraded: false