diff options
author | suVene | 2008-12-28 21:49:43 +0000 |
---|---|---|
committer | suVene | 2008-12-28 21:49:43 +0000 |
commit | 6b77a1418152d1bd6d50239e2805679f0338c2d1 (patch) | |
tree | f14722f4336ad797091324d6ff1c488f4bdb8cd5 /pluginManager.js | |
parent | 1a755ede025009c46e7ba92f49c1a7f51f0cdbd6 (diff) | |
download | vimperator-plugins-6b77a1418152d1bd6d50239e2805679f0338c2d1.tar.bz2 |
version の比較を厳密に。
git-svn-id: http://svn.coderepos.org/share/lang/javascript/vimperator-plugins/trunk@27536 d0d07461-0603-4401-acd4-de1884942a52
Diffstat (limited to 'pluginManager.js')
-rw-r--r-- | pluginManager.js | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/pluginManager.js b/pluginManager.js index 33901f4..fcf2be4 100644 --- a/pluginManager.js +++ b/pluginManager.js @@ -198,7 +198,7 @@ function updatePlugin(plugin, checkOnly){ var [localResource, serverResource, store] = getResourceInfo(plugin); var localDate = Date.parse(localResource['Last-Modified']) || 0; var serverDate = Date.parse(serverResource.headers['Last-Modified']) || 0; - + var data = { 'Local Version': plugin.info.version || 'unknown', 'Local Last-Modified': localResource['Last-Modified'] || 'unkonwn', @@ -215,7 +215,7 @@ function updatePlugin(plugin, checkOnly){ } else if (plugin.info.version == serverResource.version && localResource['Last-Modified'] == serverResource.headers['Last-Modified']){ data.Information = 'up to date.'; - } else if (plugin.info.version > serverResource.version || + } else if (compVersion(plugin.info.version, serverResource.version) > 0 || localDate > serverDate){ data.information = '<span highlight="WarningMsg">local version is newest.</span>'; } else { @@ -227,6 +227,18 @@ function updatePlugin(plugin, checkOnly){ } return template.table(plugin.name, data); } +function compVersion(a, b){ + a = (a || '').split('.'); + b = (b || '').split('.'); + if (!a.length && b.length) return -1; + if (a.length && !b.length) return 1; + for (let [i, bv] in Iterator(b)) { + var av = i < a.length ? a[i] : 0; + if (av == bv) continue; + return av < bv ? -1 : 1; + } + return 0; +} function getResourceInfo(plugin){ var store = storage.newMap('plugins-pluginManager', true); var url = plugin.info.updateURL; |