From e647d4d8b3c62ab449255571c681494e2466a6a2 Mon Sep 17 00:00:00 2001 From: Masataka Yakura Date: Wed, 2 May 2012 20:35:27 +0900 Subject: [PATCH] support for showing the earliest Safari version that (might) ships with the feature landed on the changeset. closes #3 --- manifest.json | 2 +- wkversion.js | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 58 insertions(+), 2 deletions(-) diff --git a/manifest.json b/manifest.json index 92d1e09..d79a0bd 100644 --- a/manifest.json +++ b/manifest.json @@ -1,6 +1,6 @@ { "name": "Dicentra", - "version": "0.3.3", + "version": "0.4", "description": "enhances WebKit changeset page.", "manifest_version": 2, diff --git a/wkversion.js b/wkversion.js index 7110e2f..1ea6e9c 100644 --- a/wkversion.js +++ b/wkversion.js @@ -55,12 +55,68 @@ xhr.send(); }; + /** + * Canonicalizes the version string by zero-padding for making it easier in comparison. + * @param {(Array.|string)} version WebKit Version string + * @return {string} canonicalized version string; zero-pads if necessary + */ + var canonicalizeWebKitVersion = function (version) { + + if (Array.isArray(version) && version.length >= 2) { + version = version.join('.'); + } + + var regVersion = /^(\d{3})\.(\d{1,2})\.?\d*$/; + if (typeof version === 'string' && regVersion.test(version)) { + return version.replace(regVersion, function(m, p1, p2) { + return p1 + '.' + (p2.length === 2 ? p2 : '0' + p2); + }); + } else { + console.error('Invalid argument: ', version); + return; + } + }; + + /** + * Returns the Safari version number in which feature might be available with the associated WebKit Version + * @param {string} version canonicalized version string + * @return {string} the Safari version number in which feature might be available with the associated WebKit Version + */ + var findSafariVersion = function (version) { + var safari = [ + { "product": "5.1", "webkit" : "534.55.3" }, + { "product": "5.0", "webkit" : "534.22.3" }, + { "product": "4.1", "webkit" : "533.19.4" }, + { "product": "4.0", "webkit" : "531.22.7" }, + { "product": "3.2", "webkit" : "525.28" }, + { "product": "3.1", "webkit" : "525.21" }, + { "product": "3.0", "webkit" : "523.10" }, + ]; + var i = 0, + l = safari.length, + candidate; + + if (version > safari[0].webkit) { return 'Nightly'; } + if (version < safari[l-1].webkit) { return ''; } + + while (i < l) { + if (version <= safari[i].webkit) { + candidate = i; + } else { + return safari[candidate].product; + } + i++; + } + }; + /** * Adds corresponding WebKit version to the changeset heading. * @param {string} version WebKit version string */ var updateChangesetHeading = function (version) { - document.querySelector('h1').textContent += ' (' + version + ')'; + var canoVersion = canonicalizeWebKitVersion(version); + var safariVersion = findSafariVersion(canoVersion); + document.querySelector('h1').textContent += ' (' + version + ' / Safari ' + safariVersion + ')'; };