diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/static/js/ace2_inner.js | 2 | ||||
-rw-r--r-- | src/static/js/browser.js | 100 | ||||
-rw-r--r-- | src/templates/pad.html | 2 | ||||
-rw-r--r-- | src/templates/timeslider.html | 14 |
4 files changed, 92 insertions, 26 deletions
diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 220136af..2fd7978f 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -21,7 +21,7 @@ */ var _, $, jQuery, plugins, Ace2Common; -var browser = require('./browser').browser; +var browser = require('./browser'); if(browser.msie){ // Honestly fuck IE royally. // Basically every hack we have since V11 causes a problem diff --git a/src/static/js/browser.js b/src/static/js/browser.js index f763963e..5d5f741a 100644 --- a/src/static/js/browser.js +++ b/src/static/js/browser.js @@ -1,11 +1,11 @@ /*! * Bowser - a browser detector * https://github.com/ded/bowser - * MIT License | (c) Dustin Diaz 2014 + * MIT License | (c) Dustin Diaz 2015 */ !function (name, definition) { - if (typeof module != 'undefined' && module.exports) module.exports['browser'] = definition() + if (typeof module != 'undefined' && module.exports) module.exports = definition() else if (typeof define == 'function' && define.amd) define(definition) else this[name] = definition() }('bowser', function () { @@ -22,9 +22,24 @@ return (match && match.length > 1 && match[1]) || ''; } + function getSecondMatch(regex) { + var match = ua.match(regex); + return (match && match.length > 1 && match[2]) || ''; + } + var iosdevice = getFirstMatch(/(ipod|iphone|ipad)/i).toLowerCase() , likeAndroid = /like android/i.test(ua) , android = !likeAndroid && /android/i.test(ua) + , chromeos = /CrOS/.test(ua) + , silk = /silk/i.test(ua) + , sailfish = /sailfish/i.test(ua) + , tizen = /tizen/i.test(ua) + , webos = /(web|hpw)os/i.test(ua) + , windowsphone = /windows phone/i.test(ua) + , windows = !windowsphone && /windows/i.test(ua) + , mac = !iosdevice && !silk && /macintosh/i.test(ua) + , linux = !android && !sailfish && !tizen && !webos && /linux/i.test(ua) + , edgeVersion = getFirstMatch(/edge\/(\d+(\.\d+)?)/i) , versionIdentifier = getFirstMatch(/version\/(\d+(\.\d+)?)/i) , tablet = /tablet/i.test(ua) , mobile = !tablet && /[^-]mobi/i.test(ua) @@ -37,12 +52,25 @@ , version: versionIdentifier || getFirstMatch(/(?:opera|opr)[\s\/](\d+(\.\d+)?)/i) } } - else if (/windows phone/i.test(ua)) { + else if (/yabrowser/i.test(ua)) { + result = { + name: 'Yandex Browser' + , yandexbrowser: t + , version: versionIdentifier || getFirstMatch(/(?:yabrowser)[\s\/](\d+(\.\d+)?)/i) + } + } + else if (windowsphone) { result = { name: 'Windows Phone' , windowsphone: t - , msie: t - , version: getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) + } + if (edgeVersion) { + result.msedge = t + result.version = edgeVersion + } + else { + result.msie = t + result.version = getFirstMatch(/iemobile\/(\d+(\.\d+)?)/i) } } else if (/msie|trident/i.test(ua)) { @@ -51,6 +79,20 @@ , msie: t , version: getFirstMatch(/(?:msie |rv:)(\d+(\.\d+)?)/i) } + } else if (chromeos) { + result = { + name: 'Chrome' + , chromeos: t + , chromeBook: t + , chrome: t + , version: getFirstMatch(/(?:chrome|crios|crmo)\/(\d+(\.\d+)?)/i) + } + } else if (/chrome.+? edge/i.test(ua)) { + result = { + name: 'Microsoft Edge' + , msedge: t + , version: edgeVersion + } } else if (/chrome|crios|crmo/i.test(ua)) { result = { @@ -68,7 +110,7 @@ result.version = versionIdentifier } } - else if (/sailfish/i.test(ua)) { + else if (sailfish) { result = { name: 'Sailfish' , sailfish: t @@ -92,7 +134,7 @@ result.firefoxos = t } } - else if (/silk/i.test(ua)) { + else if (silk) { result = { name: 'Amazon Silk' , silk: t @@ -119,7 +161,7 @@ , version: versionIdentifier || getFirstMatch(/blackberry[\d]+\/(\d+(\.\d+)?)/i) } } - else if (/(web|hpw)os/i.test(ua)) { + else if (webos) { result = { name: 'WebOS' , webos: t @@ -134,7 +176,7 @@ , version: getFirstMatch(/dolfin\/(\d+(\.\d+)?)/i) }; } - else if (/tizen/i.test(ua)) { + else if (tizen) { result = { name: 'Tizen' , tizen: t @@ -148,10 +190,15 @@ , version: versionIdentifier } } - else result = {} + else { + result = { + name: getFirstMatch(/^(.*)\/(.*) /), + version: getSecondMatch(/^(.*)\/(.*) /) + }; + } // set webkit or gecko flag for browsers based on these engines - if (/(apple)?webkit/i.test(ua)) { + if (!result.msedge && /(apple)?webkit/i.test(ua)) { result.name = result.name || "Webkit" result.webkit = t if (!result.version && versionIdentifier) { @@ -164,22 +211,28 @@ } // set OS flags for platforms that have multiple browsers - if (android || result.silk) { + if (!result.msedge && (android || result.silk)) { result.android = t } else if (iosdevice) { result[iosdevice] = t result.ios = t + } else if (windows) { + result.windows = t + } else if (mac) { + result.mac = t + } else if (linux) { + result.linux = t } // OS version extraction var osVersion = ''; - if (iosdevice) { + if (result.windowsphone) { + osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); + } else if (iosdevice) { osVersion = getFirstMatch(/os (\d+([_\s]\d+)*) like mac os x/i); osVersion = osVersion.replace(/[_\s]/g, '.'); } else if (android) { osVersion = getFirstMatch(/android[ \/-](\d+(\.\d+)*)/i); - } else if (result.windowsphone) { - osVersion = getFirstMatch(/windows phone (?:os)?\s?(\d+(\.\d+)*)/i); } else if (result.webos) { osVersion = getFirstMatch(/(?:web|hpw)os\/(\d+(\.\d+)*)/i); } else if (result.blackberry) { @@ -203,7 +256,9 @@ // Graded Browser Support // http://developer.yahoo.com/yui/articles/gbs - if ((result.msie && result.version >= 10) || + if (result.msedge || + (result.msie && result.version >= 10) || + (result.yandexbrowser && result.version >= 15) || (result.chrome && result.version >= 20) || (result.firefox && result.version >= 20.0) || (result.safari && result.version >= 6) || @@ -228,6 +283,17 @@ var bowser = detect(typeof navigator !== 'undefined' ? navigator.userAgent : '') + bowser.test = function (browserList) { + for (var i = 0; i < browserList.length; ++i) { + var browserItem = browserList[i]; + if (typeof browserItem=== 'string') { + if (browserItem in bowser) { + return true; + } + } + } + return false; + } /* * Set our detect method to the main bowser object so we can @@ -237,4 +303,4 @@ bowser._detect = detect; return bowser -}); +});
\ No newline at end of file diff --git a/src/templates/pad.html b/src/templates/pad.html index 84f9fef8..7e38b472 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -390,7 +390,7 @@ require.setGlobalKeyPath("require"); $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK - browser = require('ep_etherpad-lite/static/js/browser').browser; + browser = require('ep_etherpad-lite/static/js/browser'); if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { document.domain = document.domain; // for comet } diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index 6ec27c05..af0a8f02 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -68,7 +68,7 @@ <button class="stepper" id="rightstep"></button> </div> </div> - + <div id="overlay"> <div id="overlay-inner"> <!-- --> @@ -231,20 +231,20 @@ <!-- Bootstrap --> <script type="text/javascript" > var clientVars = {}; - var BroadcastSlider; + var BroadcastSlider; (function () { var pathComponents = location.pathname.split('/'); - + // Strip 'p', the padname and 'timeslider' from the pathname and set as baseURL var baseURL = pathComponents.slice(0,pathComponents.length-3).join('/') + '/'; - - + + require.setRootURI(baseURL + "javascripts/src"); require.setLibraryURI(baseURL + "javascripts/lib"); require.setGlobalKeyPath("require"); $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK - browser = require('ep_etherpad-lite/static/js/browser').browser; + browser = require('ep_etherpad-lite/static/js/browser'); if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { document.domain = document.domain; // for comet @@ -254,7 +254,7 @@ var socket = require('ep_etherpad-lite/static/js/timeslider').socket; BroadcastSlider = require('ep_etherpad-lite/static/js/timeslider').BroadcastSlider; plugins.baseURL = baseURL; - + plugins.update(function () { var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); hooks.plugins = plugins; |