X-Git-Url: http://git.roojs.org/?p=roojs1;a=blobdiff_plain;f=Roo.js;h=67147c5ee6efd7a6f1be03c969fb9561af26ca52;hp=eb034779327d0445184aeab5ad84dfc729d3d6fe;hb=refs%2Fheads%2Fwip_alan_T6102_issue_with_word_clean;hpb=4d9cd83949f3c24871af08cebb30b1f8102ac4c9 diff --git a/Roo.js b/Roo.js index eb03477932..67147c5ee6 100644 --- a/Roo.js +++ b/Roo.js @@ -53,22 +53,42 @@ Roo.apply = function(o, c, defaults){ var isStrict = document.compatMode == "CSS1Compat", isOpera = ua.indexOf("opera") > -1, isSafari = (/webkit|khtml/).test(ua), + isFirefox = ua.indexOf("firefox") > -1, isIE = ua.indexOf("msie") > -1, isIE7 = ua.indexOf("msie 7") > -1, + isIE11 = /trident.*rv\:11\./.test(ua), + isEdge = ua.indexOf("edge") > -1, isGecko = !isSafari && ua.indexOf("gecko") > -1, isBorderBox = isIE && !isStrict, isWindows = (ua.indexOf("windows") != -1 || ua.indexOf("win32") != -1), isMac = (ua.indexOf("macintosh") != -1 || ua.indexOf("mac os x") != -1), isLinux = (ua.indexOf("linux") != -1), - isSecure = window.location.href.toLowerCase().indexOf("https") === 0; - + isSecure = window.location.href.toLowerCase().indexOf("https") === 0, + isIOS = /iphone|ipad/.test(ua), + isAndroid = /android/.test(ua), + isTouch = (function() { + try { + if (ua.indexOf('chrome') != -1 && ua.indexOf('android') == -1) { + window.addEventListener('touchstart', function __set_has_touch__ () { + Roo.isTouch = true; + window.removeEventListener('touchstart', __set_has_touch__); + }); + return false; // no touch on chrome!? + } + document.createEvent("TouchEvent"); + return true; + } catch (e) { + return false; + } + + })(); // remove css image flicker if(isIE && !isIE7){ try{ document.execCommand("BackgroundImageCache", false, true); }catch(e){} } - + Roo.apply(Roo, { /** * True if the browser is in strict mode @@ -85,6 +105,12 @@ Roo.apply = function(o, c, defaults){ * @type Boolean */ isReady : false, + /** + * Turn on debugging output (currently only the factory uses this) + * @type Boolean + */ + + debug: false, /** * True to automatically uncache orphaned Roo.Elements periodically (defaults to true) @@ -114,7 +140,7 @@ Roo.apply = function(o, c, defaults){ BLANK_IMAGE_URL : "http:/"+"/localhost/s.gif", emptyFn : function(){}, - + /** * Copies all the properties of config to obj if they don't already exist. * @param {Object} obj The receiver of the properties @@ -297,6 +323,7 @@ Roo.factory(conf, Roo.data); return c; } if (ns[c.xtype]) { + if (Roo.debug) { Roo.log("Roo.Factory(" + c.xtype + ")"); } var ret = new ns[c.xtype](c); ret.xns = false; return ret; @@ -304,7 +331,20 @@ Roo.factory(conf, Roo.data); c.xns = false; // prevent recursion.. return c; }, - + /** + * Logs to console if it can. + * + * @param {String|Object} string + * @method log + */ + log : function(s) + { + if ((typeof(console) == 'undefined') || (typeof(console.log) == 'undefined')) { + return; // alerT? + } + + console.log(s); + }, /** * Takes an object and converts it to an encoded URL. e.g. Roo.urlEncode({foo: 1, bar: 2}); would return "foo=1&bar=2". Optionally, property values can be arrays, instead of keys and the resulting string that's returned will contain a name/value pair for each array value. * @param {Object} o @@ -316,16 +356,16 @@ Roo.factory(conf, Roo.data); } var buf = []; for(var key in o){ - var ov = o[key], k = encodeURIComponent(key); + var ov = o[key], k = Roo.encodeURIComponent(key); var type = typeof ov; if(type == 'undefined'){ buf.push(k, "=&"); }else if(type != "function" && type != "object"){ - buf.push(k, "=", encodeURIComponent(ov), "&"); + buf.push(k, "=", Roo.encodeURIComponent(ov), "&"); }else if(ov instanceof Array){ if (ov.length) { for(var i = 0, len = ov.length; i < len; i++) { - buf.push(k, "=", encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&"); + buf.push(k, "=", Roo.encodeURIComponent(ov[i] === undefined ? '' : ov[i]), "&"); } } else { buf.push(k, "=&"); @@ -334,6 +374,60 @@ Roo.factory(conf, Roo.data); } buf.pop(); return buf.join(""); + }, + /** + * Safe version of encodeURIComponent + * @param {String} data + * @return {String} + */ + + encodeURIComponent : function (data) + { + try { + return encodeURIComponent(data); + } catch(e) {} // should be an uri encode error. + + if (data == '' || data == null){ + return ''; + } + // http://stackoverflow.com/questions/2596483/unicode-and-uri-encoding-decoding-and-escaping-in-javascript + function nibble_to_hex(nibble){ + var chars = '0123456789ABCDEF'; + return chars.charAt(nibble); + } + data = data.toString(); + var buffer = ''; + for(var i=0; i 0x10000){ + // 4 bytes + bs[0] = 0xF0 | ((c & 0x1C0000) >>> 18); + bs[1] = 0x80 | ((c & 0x3F000) >>> 12); + bs[2] = 0x80 | ((c & 0xFC0) >>> 6); + bs[3] = 0x80 | (c & 0x3F); + }else if (c > 0x800){ + // 3 bytes + bs[0] = 0xE0 | ((c & 0xF000) >>> 12); + bs[1] = 0x80 | ((c & 0xFC0) >>> 6); + bs[2] = 0x80 | (c & 0x3F); + }else if (c > 0x80){ + // 2 bytes + bs[0] = 0xC0 | ((c & 0x7C0) >>> 6); + bs[1] = 0x80 | (c & 0x3F); + }else{ + // 1 byte + bs[0] = c; + } + for(var j=0; j>> 4) + + nibble_to_hex(b &0x0F); + buffer += '%'+hex; + } + } + return buffer; + }, /** @@ -442,7 +536,7 @@ Roo.factory(conf, Roo.data); getCmp : function(id){ return Roo.ComponentMgr.get(id); }, - + num : function(v, defaultValue){ if(typeof v != 'number'){ return defaultValue; @@ -528,10 +622,16 @@ Roo.factory(conf, Roo.data); /** @type Boolean */ isSafari : isSafari, /** @type Boolean */ + isFirefox : isFirefox, + /** @type Boolean */ isIE : isIE, /** @type Boolean */ isIE7 : isIE7, /** @type Boolean */ + isIE11 : isIE11, + /** @type Boolean */ + isEdge : isEdge, + /** @type Boolean */ isGecko : isGecko, /** @type Boolean */ isBorderBox : isBorderBox, @@ -541,17 +641,42 @@ Roo.factory(conf, Roo.data); isLinux : isLinux, /** @type Boolean */ isMac : isMac, + /** @type Boolean */ + isIOS : isIOS, + /** @type Boolean */ + isAndroid : isAndroid, + /** @type Boolean */ + isTouch : isTouch, /** * By default, Ext intelligently decides whether floating elements should be shimmed. If you are using flash, * you may want to set this to true. * @type Boolean */ - useShims : ((isIE && !isIE7) || (isGecko && isMac)) + useShims : ((isIE && !isIE7) || (isGecko && isMac)), + + + + /** + * Selects a single element as a Roo Element + * This is about as close as you can get to jQuery's $('do crazy stuff') + * @param {String} selector The selector/xpath query + * @param {Node} root (optional) The start of the query (defaults to document). + * @return {Roo.Element} + */ + selectNode : function(selector, root) + { + var node = Roo.DomQuery.selectNode(selector,root); + return node ? Roo.get(node) : new Roo.Element(false); + } + }); })(); Roo.namespace("Roo", "Roo.util", "Roo.grid", "Roo.dd", "Roo.tree", "Roo.data", - "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout", "Roo.app", "Roo.ux"); + "Roo.form", "Roo.menu", "Roo.state", "Roo.lib", "Roo.layout", + "Roo.app", "Roo.ux", + "Roo.bootstrap", + "Roo.bootstrap.dash");