Use a dedicated file for storing extension info

Chrome has getManifest(), Safari doesn't have anything, Firefox has an
asynchronous API...
So, instead of using extension APIs, store the common informations
(extension name, version, homepage url) in a file (vapi-appinfo.js), which
can be included when it's needed (its data will be available at vAPI.app.____).
The file's content is updated each time the extension is being built, so
it shouldn't be modified manually.
This commit is contained in:
Deathamns 2014-10-20 22:10:59 +02:00
parent fbffc5b07e
commit 749b6f186d
12 changed files with 68 additions and 45 deletions

View File

@ -15,7 +15,7 @@
<key>CFBundleShortVersionString</key> <key>CFBundleShortVersionString</key>
<string>0.7.0.7</string> <string>0.7.0.7</string>
<key>CFBundleVersion</key> <key>CFBundleVersion</key>
<string>1452564</string> <string>1452580</string>
<key>Chrome</key> <key>Chrome</key>
<dict> <dict>
<key>Database Quota</key> <key>Database Quota</key>

View File

@ -10,7 +10,7 @@
<body> <body>
<h2>µBlock <span id="aboutVersion"></span></h2> <h2 id="aboutNameVer"></h2>
<ul> <ul>
<li><a href="https://github.com/gorhill/uBlock/releases" data-i18n="aboutChangelog"></a> <li><a href="https://github.com/gorhill/uBlock/releases" data-i18n="aboutChangelog"></a>
<li><a href="https://github.com/gorhill/uBlock" data-i18n="aboutCode"></a> <li><a href="https://github.com/gorhill/uBlock" data-i18n="aboutCode"></a>
@ -28,12 +28,13 @@
<button type="button" id="import" data-i18n="aboutRestoreDataButton"></button> <button type="button" id="import" data-i18n="aboutRestoreDataButton"></button>
<input id="restoreFilePicker" type="file" accept="text/plain" style="display:none;"> <input id="restoreFilePicker" type="file" accept="text/plain" style="display:none;">
<p> <p>
<p><button type="button" id="reset" data-i18n="aboutResetDataButton">Start from scratch...</button> <p><button type="button" id="reset" data-i18n="aboutResetDataButton"></button>
</div> </div>
<script src="js/js-loader.js" data-jsList=" <script src="js/js-loader.js" data-jsList="
js/vapi-common.js js/vapi-common.js
js/vapi-client.js js/vapi-client.js
js/vapi-appinfo.js
js/udom.js js/udom.js
js/i18n.js js/i18n.js
js/dashboard-common.js js/dashboard-common.js

View File

@ -10,6 +10,7 @@
<script src="lib/yamd5.js"></script> <script src="lib/yamd5.js"></script>
<script src="js/vapi-common.js"></script> <script src="js/vapi-common.js"></script>
<script src="js/vapi-background.js"></script> <script src="js/vapi-background.js"></script>
<script src="js/vapi-appinfo.js"></script>
<script src="js/background.js"></script> <script src="js/background.js"></script>
<script src="js/xal.js"></script> <script src="js/xal.js"></script>
<script src="js/async.js"></script> <script src="js/async.js"></script>

View File

@ -108,7 +108,7 @@ uDom('#export').on('click', exportToFile);
uDom('#import').on('click', startImportFilePicker); uDom('#import').on('click', startImportFilePicker);
uDom('#reset').on('click', resetUserData); uDom('#reset').on('click', resetUserData);
uDom('#restoreFilePicker').on('change', handleImportFilePicker); uDom('#restoreFilePicker').on('change', handleImportFilePicker);
uDom('#aboutVersion').html(µBlock.version); uDom('#aboutNameVer').html(vAPI.app.name + ' v' + vAPI.app.version);
/******************************************************************************/ /******************************************************************************/

View File

@ -97,7 +97,7 @@ var cachedAssetsManager = (function() {
// Flush cached non-user assets if these are from a prior version. // Flush cached non-user assets if these are from a prior version.
// https://github.com/gorhill/httpswitchboard/issues/212 // https://github.com/gorhill/httpswitchboard/issues/212
var onLastVersionRead = function(store) { var onLastVersionRead = function(store) {
var currentVersion = µBlock.version; var currentVersion = vAPI.app.version;
var lastVersion = store.extensionLastVersion || '0.0.0.0'; var lastVersion = store.extensionLastVersion || '0.0.0.0';
if ( currentVersion !== lastVersion ) { if ( currentVersion !== lastVersion ) {
vAPI.storage.set({ 'extensionLastVersion': currentVersion }); vAPI.storage.set({ 'extensionLastVersion': currentVersion });

View File

@ -51,9 +51,6 @@ var defaultExternalLists = [
/******************************************************************************/ /******************************************************************************/
return { return {
name: "µBlock",
version: "0.7.0",
userSettings: { userSettings: {
autoUpdate: true, autoUpdate: true,
collapseBlocked: true, collapseBlocked: true,

View File

@ -677,7 +677,7 @@ var getUserData = function(callback) {
var onUserFiltersReady = function(details) { var onUserFiltersReady = function(details) {
callback({ callback({
'timeStamp': Date.now(), 'timeStamp': Date.now(),
'version': µb.version, 'version': vAPI.app.version,
'userSettings': µb.userSettings, 'userSettings': µb.userSettings,
'filterLists': µb.remoteBlacklists, 'filterLists': µb.remoteBlacklists,
'netWhitelist': µb.stringFromWhitelist(µb.netWhitelist), 'netWhitelist': µb.stringFromWhitelist(µb.netWhitelist),

View File

@ -181,7 +181,8 @@ var toggleNetFilteringSwitch = function(ev) {
var renderHeader = function() { var renderHeader = function() {
var hdr = uDom('#version'); var hdr = uDom('#version');
hdr.html(hdr.html() + 'v'); // + chrome.runtime.getManifest().version); hdr.nodes[0].previousSibling.textContent = vAPI.app.name;
hdr.html(hdr.html() + 'v' + vAPI.app.version);
}; };
/******************************************************************************/ /******************************************************************************/

View File

@ -592,47 +592,47 @@
// - Initialize internal state with maybe already existing tabs. // - Initialize internal state with maybe already existing tabs.
// - Schedule next update operation. // - Schedule next update operation.
var onAllDone = function() { var onAllDone = function() {
// http://code.google.com/p/chromium/issues/detail?id=410868#c11
// Need to be sure to access `chrome.runtime.lastError` to prevent
// spurious warnings in the console.
var scriptDone = function() {
chrome.runtime.lastError;
};
var scriptEnd = function(tabId) {
if ( chrome.runtime.lastError ) {
return;
}
vAPI.tabs.injectScript(tabId, {
file: 'js/contentscript-end.js',
allFrames: true,
runAt: 'document_idle'
}, scriptDone);
};
var scriptStart = function(tabId) {
vAPI.tabs.injectScript(tabId, {
file: 'js/contentscript-start.js',
allFrames: true,
runAt: 'document_idle'
}, function(){ scriptEnd(tabId); });
};
var bindToTabs = function(tabs) {
var i = tabs.length, tab;
while ( i-- ) {
tab = tabs[i];
µb.bindTabToPageStats(tab.id, tab.url);
// https://github.com/gorhill/uBlock/issues/129
scriptStart(tab.id);
}
};
if (vAPI.chrome) { if (vAPI.chrome) {
// http://code.google.com/p/chromium/issues/detail?id=410868#c11
// Need to be sure to access `chrome.runtime.lastError` to prevent
// spurious warnings in the console.
var scriptDone = function() {
chrome.runtime.lastError;
};
var scriptEnd = function(tabId) {
if ( chrome.runtime.lastError ) {
return;
}
vAPI.tabs.injectScript(tabId, {
file: 'js/contentscript-end.js',
allFrames: true,
runAt: 'document_idle'
}, scriptDone);
};
var scriptStart = function(tabId) {
vAPI.tabs.injectScript(tabId, {
file: 'js/contentscript-start.js',
allFrames: true,
runAt: 'document_idle'
}, function(){ scriptEnd(tabId); });
};
var bindToTabs = function(tabs) {
var i = tabs.length, tab;
while ( i-- ) {
tab = tabs[i];
µb.bindTabToPageStats(tab.id, tab.url);
// https://github.com/gorhill/uBlock/issues/129
scriptStart(tab.id);
}
};
chrome.tabs.query({ url: 'http://*/*' }, bindToTabs); chrome.tabs.query({ url: 'http://*/*' }, bindToTabs);
chrome.tabs.query({ url: 'https://*/*' }, bindToTabs); chrome.tabs.query({ url: 'https://*/*' }, bindToTabs);
} }
// https://github.com/gorhill/uBlock/issues/184 // https://github.com/gorhill/uBlock/issues/184
// If we restored a selfie, check for updates not too far // If we restored a selfie, check for updates not too far
// in the future. // in the future.
var nextUpdate = fromSelfie === false && µb.userSettings.autoUpdate ? var nextUpdate = fromSelfie === false && µb.userSettings.autoUpdate ?
µb.nextUpdateAfter : µb.nextUpdateAfter :
µb.firstUpdateAfter; µb.firstUpdateAfter;

10
src/js/vapi-appinfo.js Normal file
View File

@ -0,0 +1,10 @@
// can be included anywhere if it's needed
'use strict';
window.vAPI = window.vAPI || {};
vAPI.app = {
/**/name: 'µBlock',
/**/version: '0.7.0.7',
/**/url: 'https://github.com/gorhill/uBlock',
};

View File

@ -9,7 +9,7 @@
</head> </head>
<body> <body>
<h4 title="popupTipDashboard">µBlock<span id="version"></span></h4> <h4 title="popupTipDashboard">v<span id="version"></span></h4>
<div> <div>
<p id="switch" data-i18n-tip="popupPowerSwitchInfo"><span class="fa">&#xf011;</span></p> <p id="switch" data-i18n-tip="popupPowerSwitchInfo"><span class="fa">&#xf011;</span></p>
<p id="switch-hint"></p> <p id="switch-hint"></p>
@ -55,6 +55,7 @@
<script src="js/js-loader.js" data-jsList=" <script src="js/js-loader.js" data-jsList="
js/vapi-common.js js/vapi-common.js
js/vapi-client.js js/vapi-client.js
js/vapi-appinfo.js
js/udom.js js/udom.js
js/i18n.js js/i18n.js
js/popup.js js/popup.js

View File

@ -46,6 +46,18 @@ config['build_number'] = strftime('%y' + str(int(tmp.total_seconds() * 65535 / 3
rmtree(target_locale_dir) rmtree(target_locale_dir)
with open(pj(src_dir, 'js', 'vapi-appinfo.js'), 'r+t', encoding='utf-8', newline='\n') as f:
tmp = f.read()
f.seek(0)
f.write(re.sub(
r'/\*\*/([^:]+:).+',
lambda m: '/**/' + m.group(1) + " '" + config[m.group(1)[:-1]] + "',",
tmp
))
for alpha2 in os.listdir(source_locale_dir): for alpha2 in os.listdir(source_locale_dir):
with open(pj(source_locale_dir, alpha2, 'messages.json'), encoding='utf-8') as f: with open(pj(source_locale_dir, alpha2, 'messages.json'), encoding='utf-8') as f:
string_data = json.load(f, object_pairs_hook=OrderedDict) string_data = json.load(f, object_pairs_hook=OrderedDict)