| 
     | 
    @@ -0,0 +1,76 @@ | 
  
    
     | 
     | 
  
    /** | 
    
     | 
     | 
  
     * Compares two software version numbers (e.g. "1.7.1" or "1.2b"). | 
    
     | 
     | 
  
     * | 
    
     | 
     | 
  
     * This function was born in http://stackoverflow.com/a/6832721. | 
    
     | 
     | 
  
     * | 
    
     | 
     | 
  
     * @param {string} v1 The first version to be compared. | 
    
     | 
     | 
  
     * @param {string} v2 The second version to be compared. | 
    
     | 
     | 
  
     * @param {object} [options] Optional flags that affect comparison behavior: | 
    
     | 
     | 
  
     * <ul> | 
    
     | 
     | 
  
     *     <li> | 
    
     | 
     | 
  
     *         <tt>lexicographical: true</tt> compares each part of the version strings lexicographically instead of | 
    
     | 
     | 
  
     *         naturally; this allows suffixes such as "b" or "dev" but will cause "1.10" to be considered smaller than | 
    
     | 
     | 
  
     *         "1.2". | 
    
     | 
     | 
  
     *     </li> | 
    
     | 
     | 
  
     *     <li> | 
    
     | 
     | 
  
     *         <tt>zeroExtend: true</tt> changes the result if one version string has less parts than the other. In | 
    
     | 
     | 
  
     *         this case the shorter string will be padded with "zero" parts instead of being considered smaller. | 
    
     | 
     | 
  
     *     </li> | 
    
     | 
     | 
  
     * </ul> | 
    
     | 
     | 
  
     * @returns {number|NaN} | 
    
     | 
     | 
  
     * <ul> | 
    
     | 
     | 
  
     *    <li>0 if the versions are equal</li> | 
    
     | 
     | 
  
     *    <li>a negative integer iff v1 < v2</li> | 
    
     | 
     | 
  
     *    <li>a positive integer iff v1 > v2</li> | 
    
     | 
     | 
  
     *    <li>NaN if either version string is in the wrong format</li> | 
    
     | 
     | 
  
     * </ul> | 
    
     | 
     | 
  
     * | 
    
     | 
     | 
  
     * @copyright by Jon Papaioannou (["john", "papaioannou"].join(".") + "@gmail.com") | 
    
     | 
     | 
  
     * @license This function is in the public domain. Do what you want with it, no strings attached. | 
    
     | 
     | 
  
     */ | 
    
     | 
     | 
  
    function versionCompare(v1, v2, options) { | 
    
     | 
     | 
  
        var lexicographical = options && options.lexicographical, | 
    
     | 
     | 
  
            zeroExtend = options && options.zeroExtend, | 
    
     | 
     | 
  
            v1parts = v1.split('.'), | 
    
     | 
     | 
  
            v2parts = v2.split('.'); | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        function isValidPart(x) { | 
    
     | 
     | 
  
            return (lexicographical ? /^\d+[A-Za-z]*$/ : /^\d+$/).test(x); | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        if (!v1parts.every(isValidPart) || !v2parts.every(isValidPart)) { | 
    
     | 
     | 
  
            return NaN; | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        if (zeroExtend) { | 
    
     | 
     | 
  
            while (v1parts.length < v2parts.length) v1parts.push("0"); | 
    
     | 
     | 
  
            while (v2parts.length < v1parts.length) v2parts.push("0"); | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        if (!lexicographical) { | 
    
     | 
     | 
  
            v1parts = v1parts.map(Number); | 
    
     | 
     | 
  
            v2parts = v2parts.map(Number); | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        for (var i = 0; i < v1parts.length; ++i) { | 
    
     | 
     | 
  
            if (v2parts.length == i) { | 
    
     | 
     | 
  
                return 1; | 
    
     | 
     | 
  
            } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
            if (v1parts[i] == v2parts[i]) { | 
    
     | 
     | 
  
                continue; | 
    
     | 
     | 
  
            } | 
    
     | 
     | 
  
            else if (v1parts[i] > v2parts[i]) { | 
    
     | 
     | 
  
                return 1; | 
    
     | 
     | 
  
            } | 
    
     | 
     | 
  
            else { | 
    
     | 
     | 
  
                return -1; | 
    
     | 
     | 
  
            } | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        if (v1parts.length != v2parts.length) { | 
    
     | 
     | 
  
            return -1; | 
    
     | 
     | 
  
        } | 
    
     | 
     | 
  
    
  | 
    
     | 
     | 
  
        return 0; | 
    
     | 
     | 
  
    } |