You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by pm...@apache.org on 2013/05/22 19:31:56 UTC

[2/9] adds support for all browsers

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor-override/webkit/WebCore/inspector/front-end/utilities.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor-override/webkit/WebCore/inspector/front-end/utilities.js b/weinre.build/vendor-override/webkit/WebCore/inspector/front-end/utilities.js
new file mode 100644
index 0000000..f64ed53
--- /dev/null
+++ b/weinre.build/vendor-override/webkit/WebCore/inspector/front-end/utilities.js
@@ -0,0 +1,1087 @@
+/*
+ * Copyright (C) 2007 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1.  Redistributions of source code must retain the above copyright
+ *     notice, this list of conditions and the following disclaimer. 
+ * 2.  Redistributions in binary form must reproduce the above copyright
+ *     notice, this list of conditions and the following disclaimer in the
+ *     documentation and/or other materials provided with the distribution. 
+ * 3.  Neither the name of Apple Computer, Inc. ("Apple") nor the names of
+ *     its contributors may be used to endorse or promote products derived
+ *     from this software without specific prior written permission. 
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * Contains diff method based on Javascript Diff Algorithm By John Resig
+ * http://ejohn.org/files/jsdiff.js (released under the MIT license).
+ */
+
+Function.prototype.bind = function(thisObject)
+{
+    var func = this;
+    var args = Array.prototype.slice.call(arguments, 1);
+    function bound()
+    {
+        return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments, 0)));
+    }
+    bound.toString = function() {
+        return "bound: " + func;
+    };
+    return bound;
+}
+
+Node.prototype.rangeOfWord = function(offset, stopCharacters, stayWithinNode, direction)
+{
+    var startNode;
+    var startOffset = 0;
+    var endNode;
+    var endOffset = 0;
+
+    if (!stayWithinNode)
+        stayWithinNode = this;
+
+    if (!direction || direction === "backward" || direction === "both") {
+        var node = this;
+        while (node) {
+            if (node === stayWithinNode) {
+                if (!startNode)
+                    startNode = stayWithinNode;
+                break;
+            }
+
+            if (node.nodeType === Node.TEXT_NODE) {
+                var start = (node === this ? (offset - 1) : (node.nodeValue.length - 1));
+                for (var i = start; i >= 0; --i) {
+                    if (stopCharacters.indexOf(node.nodeValue[i]) !== -1) {
+                        startNode = node;
+                        startOffset = i + 1;
+                        break;
+                    }
+                }
+            }
+
+            if (startNode)
+                break;
+
+            node = node.traversePreviousNode(stayWithinNode);
+        }
+
+        if (!startNode) {
+            startNode = stayWithinNode;
+            startOffset = 0;
+        }
+    } else {
+        startNode = this;
+        startOffset = offset;
+    }
+
+    if (!direction || direction === "forward" || direction === "both") {
+        node = this;
+        while (node) {
+            if (node === stayWithinNode) {
+                if (!endNode)
+                    endNode = stayWithinNode;
+                break;
+            }
+
+            if (node.nodeType === Node.TEXT_NODE) {
+                var start = (node === this ? offset : 0);
+                for (var i = start; i < node.nodeValue.length; ++i) {
+                    if (stopCharacters.indexOf(node.nodeValue[i]) !== -1) {
+                        endNode = node;
+                        endOffset = i;
+                        break;
+                    }
+                }
+            }
+
+            if (endNode)
+                break;
+
+            node = node.traverseNextNode(stayWithinNode);
+        }
+
+        if (!endNode) {
+            endNode = stayWithinNode;
+            endOffset = stayWithinNode.nodeType === Node.TEXT_NODE ? stayWithinNode.nodeValue.length : stayWithinNode.childNodes.length;
+        }
+    } else {
+        endNode = this;
+        endOffset = offset;
+    }
+
+    var result = this.ownerDocument.createRange();
+    result.setStart(startNode, startOffset);
+    result.setEnd(endNode, endOffset);
+
+    return result;
+}
+
+Node.prototype.traverseNextTextNode = function(stayWithin)
+{
+    var node = this.traverseNextNode(stayWithin);
+    if (!node)
+        return;
+
+    while (node && node.nodeType !== Node.TEXT_NODE)
+        node = node.traverseNextNode(stayWithin);
+
+    return node;
+}
+
+Node.prototype.rangeBoundaryForOffset = function(offset)
+{
+    var node = this.traverseNextTextNode(this);
+    while (node && offset > node.nodeValue.length) {
+        offset -= node.nodeValue.length;
+        node = node.traverseNextTextNode(this);
+    }
+    if (!node)
+        return { container: this, offset: 0 };
+    return { container: node, offset: offset };
+}
+
+Element.prototype.removeStyleClass = function(className) 
+{
+    // Test for the simple case first.
+    if (this.className === className) {
+        this.className = "";
+        return;
+    }
+
+    var index = this.className.indexOf(className);
+    if (index === -1)
+        return;
+
+    this.className = this.className.split(" ").filter(function(s) {
+        return s && s !== className;
+    }).join(" ");
+}
+
+Element.prototype.removeMatchingStyleClasses = function(classNameRegex)
+{
+    var regex = new RegExp("(^|\\s+)" + classNameRegex + "($|\\s+)");
+    if (regex.test(this.className))
+        this.className = this.className.replace(regex, " ");
+}
+
+Element.prototype.addStyleClass = function(className) 
+{
+    if (className && !this.hasStyleClass(className))
+        this.className += (this.className.length ? " " + className : className);
+}
+
+Element.prototype.hasStyleClass = function(className) 
+{
+    if (!className)
+        return false;
+    // Test for the simple case
+    if (this.className === className)
+        return true;
+
+    var index = this.className.indexOf(className);
+    if (index === -1)
+        return false;
+    var toTest = " " + this.className + " ";
+    return toTest.indexOf(" " + className + " ", index) !== -1;
+}
+
+Element.prototype.positionAt = function(x, y)
+{
+    this.style.left = x + "px";
+    this.style.top = y + "px";
+}
+
+Element.prototype.pruneEmptyTextNodes = function()
+{
+    var sibling = this.firstChild;
+    while (sibling) {
+        var nextSibling = sibling.nextSibling;
+        if (sibling.nodeType === this.TEXT_NODE && sibling.nodeValue === "")
+            this.removeChild(sibling);
+        sibling = nextSibling;
+    }
+}
+
+Element.prototype.isScrolledToBottom = function()
+{
+    // This code works only for 0-width border
+    return this.scrollTop + this.clientHeight === this.scrollHeight;
+}
+
+Node.prototype.enclosingNodeOrSelfWithNodeNameInArray = function(nameArray)
+{
+    for (var node = this; node && node !== this.ownerDocument; node = node.parentNode)
+        for (var i = 0; i < nameArray.length; ++i)
+            if (node.nodeName.toLowerCase() === nameArray[i].toLowerCase())
+                return node;
+    return null;
+}
+
+Node.prototype.enclosingNodeOrSelfWithNodeName = function(nodeName)
+{
+    return this.enclosingNodeOrSelfWithNodeNameInArray([nodeName]);
+}
+
+Node.prototype.enclosingNodeOrSelfWithClass = function(className)
+{
+    for (var node = this; node && node !== this.ownerDocument; node = node.parentNode)
+        if (node.nodeType === Node.ELEMENT_NODE && node.hasStyleClass(className))
+            return node;
+    return null;
+}
+
+Node.prototype.enclosingNodeWithClass = function(className)
+{
+    if (!this.parentNode)
+        return null;
+    return this.parentNode.enclosingNodeOrSelfWithClass(className);
+}
+
+Element.prototype.query = function(query) 
+{
+    return this.ownerDocument.evaluate(query, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
+}
+
+Element.prototype.removeChildren = function()
+{
+    if (this.firstChild)
+        this.textContent = "";
+}
+
+Element.prototype.isInsertionCaretInside = function()
+{
+    var selection = window.getSelection();
+    if (!selection.rangeCount || !selection.isCollapsed)
+        return false;
+    var selectionRange = selection.getRangeAt(0);
+    return selectionRange.startContainer === this || selectionRange.startContainer.isDescendant(this);
+}
+
+Element.prototype.createChild = function(elementName, className)
+{
+    var element = document.createElement(elementName);
+    if (className)
+        element.className = className;
+    this.appendChild(element);
+    return element;
+}
+
+Object.defineProperty(Element.prototype, "totalOffsetLeft", {get: function()
+{
+    var total = 0;
+    for (var element = this; element; element = element.offsetParent)
+        total += element.offsetLeft + (this !== element ? element.clientLeft : 0);
+    return total;
+}});
+
+Object.defineProperty(Element.prototype, "totalOffsetTop", {get: function()
+{
+    var total = 0;
+    for (var element = this; element; element = element.offsetParent)
+        total += element.offsetTop + (this !== element ? element.clientTop : 0);
+    return total;
+}});
+
+Element.prototype.offsetRelativeToWindow = function(targetWindow)
+{
+    var elementOffset = {x: 0, y: 0};
+    var curElement = this;
+    var curWindow = this.ownerDocument.defaultView;
+    while (curWindow && curElement) {
+        elementOffset.x += curElement.totalOffsetLeft;
+        elementOffset.y += curElement.totalOffsetTop;
+        if (curWindow === targetWindow)
+            break;
+
+        curElement = curWindow.frameElement;
+        curWindow = curWindow.parent;
+    }
+
+    return elementOffset;
+}
+
+Object.defineProperty(KeyboardEvent.prototype, "data", {get: function()
+{
+    // Emulate "data" attribute from DOM 3 TextInput event.
+    // See http://www.w3.org/TR/DOM-Level-3-Events/#events-Events-TextEvent-data
+    switch (this.type) {
+        case "keypress":
+            if (!this.ctrlKey && !this.metaKey)
+                return String.fromCharCode(this.charCode);
+            else
+                return "";
+        case "keydown":
+        case "keyup":
+            if (!this.ctrlKey && !this.metaKey && !this.altKey)
+                return String.fromCharCode(this.which);
+            else
+                return "";
+    }
+}});
+
+Text.prototype.select = function(start, end)
+{
+    start = start || 0;
+    end = end || this.textContent.length;
+
+    if (start < 0)
+        start = end + start;
+
+    var selection = window.getSelection();
+    selection.removeAllRanges();
+    var range = document.createRange();
+    range.setStart(this, start);
+    range.setEnd(this, end);
+    selection.addRange(range);
+    return this;
+}
+
+Object.defineProperty(Element.prototype, "selectionLeftOffset", {get: function() {
+    // Calculate selection offset relative to the current element.
+
+    var selection = window.getSelection();
+    if (!selection.containsNode(this, true))
+        return null;
+
+    var leftOffset = selection.anchorOffset;
+    var node = selection.anchorNode;
+
+    while (node !== this) {
+        while (node.previousSibling) {
+            node = node.previousSibling;
+            leftOffset += node.textContent.length;
+        }
+        node = node.parentNode;
+    }
+
+    return leftOffset;
+}});
+
+Node.prototype.isWhitespace = isNodeWhitespace;
+Node.prototype.displayName = nodeDisplayName;
+Node.prototype.isAncestor = function(node)
+{
+    return isAncestorNode(this, node);
+};
+Node.prototype.isDescendant = isDescendantNode;
+Node.prototype.traverseNextNode = traverseNextNode;
+Node.prototype.traversePreviousNode = traversePreviousNode;
+Node.prototype.onlyTextChild = onlyTextChild;
+
+String.prototype.hasSubstring = function(string, caseInsensitive)
+{
+    if (!caseInsensitive)
+        return this.indexOf(string) !== -1;
+    return this.match(new RegExp(string.escapeForRegExp(), "i"));
+}
+
+String.prototype.findAll = function(string)
+{
+    var matches = [];
+    var i = this.indexOf(string);
+    while (i !== -1) {
+        matches.push(i);
+        i = this.indexOf(string, i + string.length);
+    }
+    return matches;
+}
+
+String.prototype.lineEndings = function()
+{
+    if (!this._lineEndings) {
+        this._lineEndings = this.findAll("\n");
+        this._lineEndings.push(this.length);
+    }
+    return this._lineEndings;
+}
+
+String.prototype.asParsedURL = function()
+{
+    // RegExp groups:
+    // 1 - scheme
+    // 2 - hostname
+    // 3 - ?port
+    // 4 - ?path
+    // 5 - ?fragment
+    var match = this.match(/^([^:]+):\/\/([^\/:]*)(?::([\d]+))?(?:(\/[^#]*)(?:#(.*))?)?$/i);
+    if (!match)
+        return null;
+    var result = {};
+    result.scheme = match[1].toLowerCase();
+    result.host = match[2];
+    result.port = match[3];
+    result.path = match[4] || "/";
+    result.fragment = match[5];
+    return result;
+}
+
+String.prototype.escapeCharacters = function(chars)
+{
+    var foundChar = false;
+    for (var i = 0; i < chars.length; ++i) {
+        if (this.indexOf(chars.charAt(i)) !== -1) {
+            foundChar = true;
+            break;
+        }
+    }
+
+    if (!foundChar)
+        return this;
+
+    var result = "";
+    for (var i = 0; i < this.length; ++i) {
+        if (chars.indexOf(this.charAt(i)) !== -1)
+            result += "\\";
+        result += this.charAt(i);
+    }
+
+    return result;
+}
+
+String.prototype.escapeForRegExp = function()
+{
+    return this.escapeCharacters("^[]{}()\\.$*+?|");
+}
+
+String.prototype.escapeHTML = function()
+{
+    return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
+}
+
+String.prototype.collapseWhitespace = function()
+{
+    return this.replace(/[\s\xA0]+/g, " ");
+}
+
+String.prototype.trimURL = function(baseURLDomain)
+{
+    var result = this.replace(/^(https|http|file):\/\//i, "");
+    if (baseURLDomain)
+        result = result.replace(new RegExp("^" + baseURLDomain.escapeForRegExp(), "i"), "");
+    return result;
+}
+
+function isNodeWhitespace()
+{
+    if (!this || this.nodeType !== Node.TEXT_NODE)
+        return false;
+    if (!this.nodeValue.length)
+        return true;
+    return this.nodeValue.match(/^[\s\xA0]+$/);
+}
+
+function nodeDisplayName()
+{
+    if (!this)
+        return "";
+
+    switch (this.nodeType) {
+        case Node.DOCUMENT_NODE:
+            return "Document";
+
+        case Node.ELEMENT_NODE:
+            var name = "<" + this.nodeName.toLowerCase();
+
+            if (this.hasAttributes()) {
+                var value = this.getAttribute("id");
+                if (value)
+                    name += " id=\"" + value + "\"";
+                value = this.getAttribute("class");
+                if (value)
+                    name += " class=\"" + value + "\"";
+                if (this.nodeName.toLowerCase() === "a") {
+                    value = this.getAttribute("name");
+                    if (value)
+                        name += " name=\"" + value + "\"";
+                    value = this.getAttribute("href");
+                    if (value)
+                        name += " href=\"" + value + "\"";
+                } else if (this.nodeName.toLowerCase() === "img") {
+                    value = this.getAttribute("src");
+                    if (value)
+                        name += " src=\"" + value + "\"";
+                } else if (this.nodeName.toLowerCase() === "iframe") {
+                    value = this.getAttribute("src");
+                    if (value)
+                        name += " src=\"" + value + "\"";
+                } else if (this.nodeName.toLowerCase() === "input") {
+                    value = this.getAttribute("name");
+                    if (value)
+                        name += " name=\"" + value + "\"";
+                    value = this.getAttribute("type");
+                    if (value)
+                        name += " type=\"" + value + "\"";
+                } else if (this.nodeName.toLowerCase() === "form") {
+                    value = this.getAttribute("action");
+                    if (value)
+                        name += " action=\"" + value + "\"";
+                }
+            }
+
+            return name + ">";
+
+        case Node.TEXT_NODE:
+            if (isNodeWhitespace.call(this))
+                return "(whitespace)";
+            return "\"" + this.nodeValue + "\"";
+
+        case Node.COMMENT_NODE:
+            return "<!--" + this.nodeValue + "-->";
+            
+        case Node.DOCUMENT_TYPE_NODE:
+            var docType = "<!DOCTYPE " + this.nodeName;
+            if (this.publicId) {
+                docType += " PUBLIC \"" + this.publicId + "\"";
+                if (this.systemId)
+                    docType += " \"" + this.systemId + "\"";
+            } else if (this.systemId)
+                docType += " SYSTEM \"" + this.systemId + "\"";
+            if (this.internalSubset)
+                docType += " [" + this.internalSubset + "]";
+            return docType + ">";
+    }
+
+    return this.nodeName.toLowerCase().collapseWhitespace();
+}
+
+function isAncestorNode(ancestor, node)
+{
+    if (!node || !ancestor)
+        return false;
+
+    var currentNode = node.parentNode;
+    while (currentNode) {
+        if (ancestor === currentNode)
+            return true;
+        currentNode = currentNode.parentNode;
+    }
+    return false;
+}
+
+function isDescendantNode(descendant)
+{
+    return isAncestorNode(descendant, this);
+}
+
+function traverseNextNode(stayWithin)
+{
+    if (!this)
+        return;
+
+    var node = this.firstChild;
+    if (node)
+        return node;
+
+    if (stayWithin && this === stayWithin)
+        return null;
+
+    node = this.nextSibling;
+    if (node)
+        return node;
+
+    node = this;
+    while (node && !node.nextSibling && (!stayWithin || !node.parentNode || node.parentNode !== stayWithin))
+        node = node.parentNode;
+    if (!node)
+        return null;
+
+    return node.nextSibling;
+}
+
+function traversePreviousNode(stayWithin)
+{
+    if (!this)
+        return;
+    if (stayWithin && this === stayWithin)
+        return null;
+    var node = this.previousSibling;
+    while (node && node.lastChild)
+        node = node.lastChild;
+    if (node)
+        return node;
+    return this.parentNode;
+}
+
+function onlyTextChild()
+{
+    if (!this)
+        return null;
+
+    var firstChild = this.firstChild;
+    if (!firstChild || firstChild.nodeType !== Node.TEXT_NODE)
+        return null;
+
+    var sibling = firstChild.nextSibling;
+    return sibling ? null : firstChild;
+}
+
+function appropriateSelectorForNode(node, justSelector)
+{
+    if (!node)
+        return "";
+
+    var lowerCaseName = node.localName || node.nodeName.toLowerCase();
+
+    var id = node.getAttribute("id");
+    if (id) {
+        var selector = "#" + id;
+        return (justSelector ? selector : lowerCaseName + selector);
+    }
+
+    var className = node.getAttribute("class");
+    if (className) {
+        var selector = "." + className.replace(/\s+/, ".");
+        return (justSelector ? selector : lowerCaseName + selector);
+    }
+
+    if (lowerCaseName === "input" && node.getAttribute("type"))
+        return lowerCaseName + "[type=\"" + node.getAttribute("type") + "\"]";
+
+    return lowerCaseName;
+}
+
+function getDocumentForNode(node)
+{
+    return node.nodeType == Node.DOCUMENT_NODE ? node : node.ownerDocument;
+}
+
+function parentNode(node)
+{
+    return node.parentNode;
+}
+
+Number.millisToString = function(ms, higherResolution)
+{
+    return Number.secondsToString(ms / 1000, higherResolution);
+}
+
+Number.secondsToString = function(seconds, higherResolution)
+{
+    if (seconds === 0)
+        return "0";
+
+    var ms = seconds * 1000;
+    if (higherResolution && ms < 1000)
+        return WebInspector.UIString("%.3fms", ms);
+    else if (ms < 1000)
+        return WebInspector.UIString("%.0fms", ms);
+
+    if (seconds < 60)
+        return WebInspector.UIString("%.2fs", seconds);
+
+    var minutes = seconds / 60;
+    if (minutes < 60)
+        return WebInspector.UIString("%.1fmin", minutes);
+
+    var hours = minutes / 60;
+    if (hours < 24)
+        return WebInspector.UIString("%.1fhrs", hours);
+
+    var days = hours / 24;
+    return WebInspector.UIString("%.1f days", days);
+}
+
+Number.bytesToString = function(bytes, higherResolution)
+{
+    if (typeof higherResolution === "undefined")
+        higherResolution = true;
+
+    if (bytes < 1024)
+        return WebInspector.UIString("%.0fB", bytes);
+
+    var kilobytes = bytes / 1024;
+    if (higherResolution && kilobytes < 1024)
+        return WebInspector.UIString("%.2fKB", kilobytes);
+    else if (kilobytes < 1024)
+        return WebInspector.UIString("%.0fKB", kilobytes);
+
+    var megabytes = kilobytes / 1024;
+    if (higherResolution)
+        return WebInspector.UIString("%.2fMB", megabytes);
+    else
+        return WebInspector.UIString("%.0fMB", megabytes);
+}
+
+Number.constrain = function(num, min, max)
+{
+    if (num < min)
+        num = min;
+    else if (num > max)
+        num = max;
+    return num;
+}
+
+HTMLTextAreaElement.prototype.moveCursorToEnd = function()
+{
+    var length = this.value.length;
+    this.setSelectionRange(length, length);
+}
+
+Object.defineProperty(Array.prototype, "remove", { value: function(value, onlyFirst)
+{
+    if (onlyFirst) {
+        var index = this.indexOf(value);
+        if (index !== -1)
+            this.splice(index, 1);
+        return;
+    }
+
+    var length = this.length;
+    for (var i = 0; i < length; ++i) {
+        if (this[i] === value)
+            this.splice(i, 1);
+    }
+}});
+
+Object.defineProperty(Array.prototype, "keySet", { value: function()
+{
+    var keys = {};
+    for (var i = 0; i < this.length; ++i)
+        keys[this[i]] = true;
+    return keys;
+}});
+
+Object.defineProperty(Array.prototype, "upperBound", { value: function(value)
+{
+    var first = 0;
+    var count = this.length;
+    while (count > 0) {
+      var step = count >> 1;
+      var middle = first + step;
+      if (value >= this[middle]) {
+          first = middle + 1;
+          count -= step + 1;
+      } else
+          count = step;
+    }
+    return first;
+}});
+
+Array.diff = function(left, right)
+{
+    var o = left;
+    var n = right;
+
+    var ns = {};
+    var os = {};
+
+    for (var i = 0; i < n.length; i++) {
+        if (ns[n[i]] == null)
+            ns[n[i]] = { rows: [], o: null };
+        ns[n[i]].rows.push(i);
+    }
+
+    for (var i = 0; i < o.length; i++) {
+        if (os[o[i]] == null)
+            os[o[i]] = { rows: [], n: null };
+        os[o[i]].rows.push(i);
+    }
+
+    for (var i in ns) {
+        if (ns[i].rows.length == 1 && typeof(os[i]) != "undefined" && os[i].rows.length == 1) {
+            n[ns[i].rows[0]] = { text: n[ns[i].rows[0]], row: os[i].rows[0] };
+            o[os[i].rows[0]] = { text: o[os[i].rows[0]], row: ns[i].rows[0] };
+        }
+    }
+
+    for (var i = 0; i < n.length - 1; i++) {
+        if (n[i].text != null && n[i + 1].text == null && n[i].row + 1 < o.length && o[n[i].row + 1].text == null && n[i + 1] == o[n[i].row + 1]) {
+            n[i + 1] = { text: n[i + 1], row: n[i].row + 1 };
+            o[n[i].row + 1] = { text: o[n[i].row + 1], row: i + 1 };
+        }
+    }
+
+    for (var i = n.length - 1; i > 0; i--) {
+        if (n[i].text != null && n[i - 1].text == null && n[i].row > 0 && o[n[i].row - 1].text == null && 
+            n[i - 1] == o[n[i].row - 1]) {
+            n[i - 1] = { text: n[i - 1], row: n[i].row - 1 };
+            o[n[i].row - 1] = { text: o[n[i].row - 1], row: i - 1 };
+        }
+    }
+
+    return { left: o, right: n };
+}
+
+Array.convert = function(list)
+{
+    // Cast array-like object to an array.
+    return Array.prototype.slice.call(list);
+}
+
+function insertionIndexForObjectInListSortedByFunction(anObject, aList, aFunction)
+{
+    var first = 0;
+    var last = aList.length - 1;
+    var floor = Math.floor;
+    var mid, c;
+
+    while (first <= last) {
+        mid = floor((first + last) / 2);
+        c = aFunction(anObject, aList[mid]);
+
+        if (c > 0)
+            first = mid + 1;
+        else if (c < 0)
+            last = mid - 1;
+        else {
+            // Return the first occurance of an item in the list.
+            while (mid > 0 && aFunction(anObject, aList[mid - 1]) === 0)
+                mid--;
+            first = mid;
+            break;
+        }
+    }
+
+    return first;
+}
+
+String.sprintf = function(format)
+{
+    return String.vsprintf(format, Array.prototype.slice.call(arguments, 1));
+}
+
+String.tokenizeFormatString = function(format)
+{
+    var tokens = [];
+    var substitutionIndex = 0;
+
+    function addStringToken(str)
+    {
+        tokens.push({ type: "string", value: str });
+    }
+
+    function addSpecifierToken(specifier, precision, substitutionIndex)
+    {
+        tokens.push({ type: "specifier", specifier: specifier, precision: precision, substitutionIndex: substitutionIndex });
+    }
+
+    var index = 0;
+    for (var precentIndex = format.indexOf("%", index); precentIndex !== -1; precentIndex = format.indexOf("%", index)) {
+        addStringToken(format.substring(index, precentIndex));
+        index = precentIndex + 1;
+
+        if (format[index] === "%") {
+            addStringToken("%");
+            ++index;
+            continue;
+        }
+
+        if (!isNaN(format[index])) {
+            // The first character is a number, it might be a substitution index.
+            var number = parseInt(format.substring(index));
+            while (!isNaN(format[index]))
+                ++index;
+            // If the number is greater than zero and ends with a "$",
+            // then this is a substitution index.
+            if (number > 0 && format[index] === "$") {
+                substitutionIndex = (number - 1);
+                ++index;
+            }
+        }
+
+        var precision = -1;
+        if (format[index] === ".") {
+            // This is a precision specifier. If no digit follows the ".",
+            // then the precision should be zero.
+            ++index;
+            precision = parseInt(format.substring(index));
+            if (isNaN(precision))
+                precision = 0;
+            while (!isNaN(format[index]))
+                ++index;
+        }
+
+        addSpecifierToken(format[index], precision, substitutionIndex);
+
+        ++substitutionIndex;
+        ++index;
+    }
+
+    addStringToken(format.substring(index));
+
+    return tokens;
+}
+
+String.standardFormatters = {
+    d: function(substitution)
+    {
+        if (typeof substitution == "object" && WebInspector.RemoteObject.type(substitution) === "number")
+            substitution = substitution.description;
+        substitution = parseInt(substitution);
+        return !isNaN(substitution) ? substitution : 0;
+    },
+
+    f: function(substitution, token)
+    {
+        if (typeof substitution == "object" && WebInspector.RemoteObject.type(substitution) === "number")
+            substitution = substitution.description;
+        substitution = parseFloat(substitution);
+        if (substitution && token.precision > -1)
+            substitution = substitution.toFixed(token.precision);
+        return !isNaN(substitution) ? substitution : (token.precision > -1 ? Number(0).toFixed(token.precision) : 0);
+    },
+
+    s: function(substitution)
+    {
+        if (typeof substitution == "object" && WebInspector.RemoteObject.type(substitution) !== "null")
+            substitution = substitution.description;
+        return substitution;
+    },
+};
+
+String.vsprintf = function(format, substitutions)
+{
+    return String.format(format, substitutions, String.standardFormatters, "", function(a, b) { return a + b; }).formattedResult;
+}
+
+String.format = function(format, substitutions, formatters, initialValue, append)
+{
+    if (!format || !substitutions || !substitutions.length)
+        return { formattedResult: append(initialValue, format), unusedSubstitutions: substitutions };
+
+    function prettyFunctionName()
+    {
+        return "String.format(\"" + format + "\", \"" + substitutions.join("\", \"") + "\")";
+    }
+
+    function warn(msg)
+    {
+        console.warn(prettyFunctionName() + ": " + msg);
+    }
+
+    function error(msg)
+    {
+        console.error(prettyFunctionName() + ": " + msg);
+    }
+
+    var result = initialValue;
+    var tokens = String.tokenizeFormatString(format);
+    var usedSubstitutionIndexes = {};
+
+    for (var i = 0; i < tokens.length; ++i) {
+        var token = tokens[i];
+
+        if (token.type === "string") {
+            result = append(result, token.value);
+            continue;
+        }
+
+        if (token.type !== "specifier") {
+            error("Unknown token type \"" + token.type + "\" found.");
+            continue;
+        }
+
+        if (token.substitutionIndex >= substitutions.length) {
+            // If there are not enough substitutions for the current substitutionIndex
+            // just output the format specifier literally and move on.
+            error("not enough substitution arguments. Had " + substitutions.length + " but needed " + (token.substitutionIndex + 1) + ", so substitution was skipped.");
+            result = append(result, "%" + (token.precision > -1 ? token.precision : "") + token.specifier);
+            continue;
+        }
+
+        usedSubstitutionIndexes[token.substitutionIndex] = true;
+
+        if (!(token.specifier in formatters)) {
+            // Encountered an unsupported format character, treat as a string.
+            warn("unsupported format character \u201C" + token.specifier + "\u201D. Treating as a string.");
+            result = append(result, substitutions[token.substitutionIndex]);
+            continue;
+        }
+
+        result = append(result, formatters[token.specifier](substitutions[token.substitutionIndex], token));
+    }
+
+    var unusedSubstitutions = [];
+    for (var i = 0; i < substitutions.length; ++i) {
+        if (i in usedSubstitutionIndexes)
+            continue;
+        unusedSubstitutions.push(substitutions[i]);
+    }
+
+    return { formattedResult: result, unusedSubstitutions: unusedSubstitutions };
+}
+
+function isEnterKey(event) {
+    // Check if in IME.
+    return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode == 13 || event.charCode == 13;
+}
+
+
+function highlightSearchResult(element, offset, length)
+{
+    var lineText = element.textContent;
+    var endOffset = offset + length;
+    var highlightNode = document.createElement("span");
+    highlightNode.className = "webkit-search-result";
+    highlightNode.textContent = lineText.substring(offset, endOffset);
+
+    var boundary = element.rangeBoundaryForOffset(offset);
+    var textNode = boundary.container;
+    var text = textNode.textContent;
+
+    if (boundary.offset + length < text.length) {
+        // Selection belong to a single split mode.
+        textNode.textContent = text.substring(boundary.offset + length);
+        textNode.parentElement.insertBefore(highlightNode, textNode);
+        var prefixNode = document.createTextNode(text.substring(0, boundary.offset));
+        textNode.parentElement.insertBefore(prefixNode, highlightNode);
+        return highlightNode;
+    }
+
+    var parentElement = textNode.parentElement;
+    var anchorElement = textNode.nextSibling;
+
+    length -= text.length - boundary.offset;
+    textNode.textContent = text.substring(0, boundary.offset);
+    textNode = textNode.traverseNextTextNode(element);
+
+    while (textNode) {
+        var text = textNode.textContent;
+        if (length < text.length) {
+            textNode.textContent = text.substring(length);
+            break;
+        }
+
+        length -= text.length;
+        textNode.textContent = "";
+        textNode = textNode.traverseNextTextNode(element);
+    }
+
+    parentElement.insertBefore(highlightNode, anchorElement);
+    return highlightNode;
+}
+
+function createSearchRegex(query)
+{
+    var regex = "";
+    for (var i = 0; i < query.length; ++i) {
+        var char = query.charAt(i);
+        if (char === "]")
+            char = "\\]";
+        regex += "[" + char + "]";
+    }
+    return new RegExp(regex, "i");
+}
+
+function offerFileForDownload(contents)
+{
+    var builder = new BlobBuilder();
+    builder.append(contents);
+    var blob = builder.getBlob("application/octet-stream");
+    var url = window.webkitURL.createObjectURL(blob);
+    window.open(url);
+}

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/AuditLauncherView.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/AuditLauncherView.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/AuditLauncherView.js
index df16a41..e7ab735 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/AuditLauncherView.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/AuditLauncherView.js
@@ -101,7 +101,7 @@ WebInspector.AuditLauncherView.prototype = {
             return aTitle.localeCompare(bTitle);
         }
         var insertBefore = insertionIndexForObjectInListSortedByFunction(category, this._sortedCategories, compareCategories);
-        this._categoriesElement.insertBefore(categoryElement, this._categoriesElement.children[insertBefore]);
+        this._categoriesElement.insertBefore(categoryElement, this._categoriesElement.children[insertBefore] || null);
         this._sortedCategories.splice(insertBefore, 0, category);
         this._updateButton();
     },

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/ConsoleView.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/ConsoleView.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/ConsoleView.js
index 35d1ebf..42fd799 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/ConsoleView.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/ConsoleView.js
@@ -45,6 +45,7 @@ WebInspector.ConsoleView = function(drawer)
     this.messagesElement.addEventListener("click", this._messagesClicked.bind(this), true);
 
     this.promptElement = document.getElementById("console-prompt");
+    this.promptElement.setAttribute("contenteditable", "true");
     this.promptElement.className = "source-code";
     this.promptElement.addEventListener("keydown", this._promptKeyDown.bind(this), true);
     this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), ExpressionStopCharacters + ".");

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js
index 56c3e75..dab33a6 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/ElementsTreeOutline.js
@@ -1060,7 +1060,11 @@ WebInspector.ElementsTreeElement.prototype = {
             var previous = element.previousSibling;
             if (!previous || previous.nodeType !== Node.TEXT_NODE)
                 element.parentNode.insertBefore(document.createTextNode(" "), element);
-            element.outerHTML = this._attributeHTML(name, value);
+
+            // outerHTML should not be used to replace node content in IE, updated with replaceChild usage
+			element.innerHTML = this._attributeHTML(name, value);
+			element.parentNode.replaceChild(element.firstChild, element);
+            //element.outerHTML = this._attributeHTML(name, value);
         }
 
         var parseContainerElement = document.createElement("span");

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/Settings.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/Settings.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/Settings.js
index 68b81a5..f20078a 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/Settings.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/Settings.js
@@ -85,14 +85,17 @@ WebInspector.Settings.prototype = {
         if (key in this)
             return;
 
-        this.__defineGetter__(key, this._get.bind(this, key, defaultValue));
-        this.__defineSetter__(key, this._set.bind(this, key));
+        Object.defineProperty(this, key,{
+            get : this._get.bind(this, key, defaultValue),
+            set : this._set.bind(this, key)});
     },
 
     installProjectSetting: function(key, defaultValue)
     {
-        this.__defineGetter__(key, this._getProjectSetting.bind(this, key, defaultValue));
-        this.__defineSetter__(key, this._setProjectSetting.bind(this, key));
+        Object.defineProperty(this, key,{
+            get : this._getProjectSetting.bind(this, key, defaultValue),
+            set : this._setProjectSetting.bind(this, key)});
+
     },
 
     inspectedURLChanged: function(url)

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/StylesSidebarPane.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/StylesSidebarPane.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/StylesSidebarPane.js
index 57d3b76..211b059 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/StylesSidebarPane.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/StylesSidebarPane.js
@@ -402,6 +402,7 @@ WebInspector.StylesSidebarPane.prototype = {
 
     _rebuildSectionsForStyleRules: function(styleRules, usedProperties, disabledComputedProperties, pseudoId, anchorElement)
     {
+        anchorElement = anchorElement || null;
         // Make a property section for each style rule.
         var sections = [];
         var lastWasSeparator = true;
@@ -1534,7 +1535,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
             expanded: this.expanded,
             hasChildren: this.hasChildren,
             keyDownListener: isEditingName ? null : this.editingValueKeyDown.bind(this),
-            isEditingName: isEditingName,
+            isEditingName: isEditingName
         };
 
         // Lie about our children to prevent expanding on double click and to collapse shorthands.
@@ -1625,8 +1626,9 @@ WebInspector.StylePropertyTreeElement.prototype = {
     {
         if (event.handled)
             return;
-        var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down");
-        var pageKeyPressed = (event.keyIdentifier === "PageUp" || event.keyIdentifier === "PageDown");
+        var key = event.keyIdentifier || event.key;
+        var arrowKeyPressed = (key === "Up" || key === "Down");
+        var pageKeyPressed = (key === "PageUp" || key === "PageDown");
         if (!arrowKeyPressed && !pageKeyPressed)
             return;
 
@@ -1650,13 +1652,13 @@ WebInspector.StylePropertyTreeElement.prototype = {
 
             // If the number is near zero or the number is one and the direction will take it near zero.
             var numberNearZero = (number < 1 && number > -1);
-            if (number === 1 && event.keyIdentifier === "Down")
+            if (number === 1 && key === "Down")
                 numberNearZero = true;
-            else if (number === -1 && event.keyIdentifier === "Up")
+            else if (number === -1 && key === "Up")
                 numberNearZero = true;
 
             if (numberNearZero && event.altKey && arrowKeyPressed) {
-                if (event.keyIdentifier === "Down")
+                if (key === "Down")
                     number = Math.ceil(number - 1);
                 else
                     number = Math.floor(number + 1);
@@ -1671,7 +1673,7 @@ WebInspector.StylePropertyTreeElement.prototype = {
                 else if (event.altKey || numberNearZero)
                     changeAmount = 0.1;
 
-                if (event.keyIdentifier === "Down" || event.keyIdentifier === "PageDown")
+                if (key === "Down" || key === "PageDown")
                     changeAmount *= -1;
 
                 // Make the new number and constrain it to a precision of 6, this matches numbers the engine returns.
@@ -1926,7 +1928,7 @@ WebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = {
 
     _handleNameOrValueUpDown: function(event)
     {
-        var reverse = event.keyIdentifier === "Up";
+        var reverse = (event.keyIdentifier || event.key) === "Up";
         if (this.autoCompleteElement)
             this.complete(false, reverse); // Accept the current suggestion, if any.
         else {
@@ -1956,6 +1958,8 @@ WebInspector.StylesSidebarPane.CSSPropertyPrompt.prototype = {
 
     _buildPropertyCompletions: function(wordRange, bestMatchOnly, completionsReadyCallback)
     {
+        if (!this._cssCompletions) return;
+
         var prefix = wordRange.toString().toLowerCase();
         var results;
         if (bestMatchOnly) {

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/TextPrompt.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/TextPrompt.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/TextPrompt.js
index 36a38cc..684dfa7 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/TextPrompt.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/TextPrompt.js
@@ -51,7 +51,12 @@ WebInspector.TextPrompt.prototype = {
         if (!x) {
             // Append a break element instead of setting textContent to make sure the selection is inside the prompt.
             this.element.removeChildren();
+
+            // For IE  we don't need a <br> to correctly set console caret; otherwise there will be two lines (incorrect) instead of one
+            if (!navigator.userAgent.match(/MSIE/i)) {
+			
             this.element.appendChild(document.createElement("br"));
+            }
         } else
             this.element.textContent = x;
 
@@ -75,9 +80,10 @@ WebInspector.TextPrompt.prototype = {
         if (event.handled)
             return;
 
-        var handled = false;
+        var handled = false,
+            key = event.keyIdentifier || event.key;
 
-        switch (event.keyIdentifier) {
+        switch (key) {
             case "Up":
                 this.upKeyPressed(event);
                 break;
@@ -118,6 +124,11 @@ WebInspector.TextPrompt.prototype = {
                 break;
         }
 
+        if (event.keyCode == 13 || event.charCode == 13) {
+            handled = true;
+            event.target.blur();
+        }
+
         handled |= event.handled;
         if (handled) {
             event.handled = true;

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.css
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.css b/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.css
index c992806..d188ce4 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.css
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.css
@@ -43,11 +43,17 @@ body {
     font-size: 10px;
     margin: 0;
     -webkit-text-size-adjust: none;
+    -ms-text-size-adjust: none;
+	-moz-text-size-adjust: none;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
 }
 
 * {
     -webkit-box-sizing: border-box;
+    box-sizing: border-box;
+	-moz-box-sizing: border-box;
 }
 
 :focus {
@@ -77,16 +83,24 @@ img {
     right: 0;
     height: 56px;
     display: -webkit-box;
+    display: -ms-flexbox;
+	display: -moz-box;
     padding: 0 5px;
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(191, 191, 191)), to(rgb(151, 151, 151)));
+    background-image: linear-gradient(to bottom, rgb(191, 191, 191) 0%, rgb(151, 151, 151) 100%);
     border-bottom: 1px solid rgb(80, 80, 80);
     -webkit-box-orient: horizontal;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    -ms-flex-direction: row;
+	-moz-box-orient: horizontal;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 body.inactive #toolbar {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(233, 233, 233)), to(rgb(207, 207, 207)));
+    background-image: linear-gradient(to bottom, rgb(233, 233, 233) 0%, rgb(207, 207, 207) 100%);
     border-bottom: 1px solid rgb(64%, 64%, 64%);
 }
 
@@ -112,6 +126,8 @@ body.attached.inactive #toolbar {
 
 .toolbar-item {
     display: -webkit-box;
+    display: -ms-flexbox;
+	display: -moz-box;
     padding: 4px 6px;
     margin: 0;
     background-color: transparent;
@@ -120,16 +136,26 @@ body.attached.inactive #toolbar {
     -webkit-box-orient: vertical;
     -webkit-box-align: center;
     -webkit-box-pack: end;
+    -ms-flex-direction: column;
+    -ms-flex-align: center;
+    -ms-flex-pack: end;
+	-moz-box-orient: vertical;
+	-moz-box-align: center;
+	-moz-box-pack: end;
 }
 
 .toolbar-item.toggleable.toggled-on {
     border-width: 0 2px 0 2px;
     padding: 4px 4px;
     -webkit-border-image: url(Images/toolbarItemSelected.png) 0 2 0 2;
+	border-image: url(Images/toolbarItemSelected.png) 0 2 0 2;
+	border-style: solid;
 }
 
 .toolbar-item.flexable-space {
     -webkit-box-flex: 1;
+    -ms-flex: 1;
+	-moz-box-flex: 1;
     visibility: hidden;
 }
 
@@ -142,6 +168,7 @@ body.attached.inactive #toolbar {
     width: 32px;
     height: 32px;
     -webkit-background-size: 100% auto;
+    background-size: 100% auto;
 }
 
 body.attached .toolbar-icon {
@@ -399,13 +426,17 @@ select.status-bar-item {
     color: rgb(48, 48, 48);
     text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0;
     -webkit-border-image: url(Images/statusbarMenuButton.png) 0 17 0 2;
+	border-image: url(Images/statusbarMenuButton.png) 0 17 0 2;
     -webkit-border-radius: 0;
+	border-radius: 0;
     -webkit-appearance: none;
+	-moz-appearance: none;
 }
 
 select.status-bar-item:active {
     color: black;
     -webkit-border-image: url(Images/statusbarMenuButtonSelected.png) 0 17 0 2;
+	border-image: url(Images/statusbarMenuButtonSelected.png) 0 17 0 2;
 }
 
 #dock-status-bar-item .glyph {
@@ -525,10 +556,15 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     right: 0;
     bottom: 23px;
     padding: 2px 0;
-    overflow-y: overlay;
+	overflow-y: auto;
+	overflow-y: overlay;
     word-wrap: break-word;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     -webkit-text-size-adjust: auto;
+    -ms-text-size-adjust: auto;
+	-moz-text-size-adjust: auto;
 }
 
 #console-prompt {
@@ -537,6 +573,7 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     min-height: 16px; 
     white-space: pre-wrap;
     -webkit-user-modify: read-write-plaintext-only;
+	-moz-user-modify: read-write;
 }
 
 #console-prompt::before {
@@ -572,6 +609,68 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     height: 10px;
     margin-top: -5px;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
+}
+
+/* Hack to detect IE*/
+@media screen\0 {
+    /* Set image directly to console div element instead of using pseudo selector
+    since it causes displaying caret in incorrecty place*/
+    #console-prompt {
+        background: url(Images/userInputIcon.png) 7px 5px no-repeat;
+    }
+
+    #console-prompt::before{
+        content: none !important;
+    }
+
+    /*Set icons as background-image since IE doesn't support -webkit-mask-image*/
+    #console-status-bar-item .glyph {
+        background-image: url(Images/consoleButtonGlyph.png);
+    }
+
+    .clear-status-bar-item .glyph {
+        background-image: url(Images/clearConsoleButtonGlyph.png);
+    }
+
+    .node-search-status-bar-item .glyph {
+        background-image: url(Images/nodeSearchButtonGlyph.png);
+    }
+
+    #console-status-bar-item .glyph,
+    .clear-status-bar-item .glyph,
+    .node-search-status-bar-item .glyph{
+        background-color: transparent;
+    }
+
+    /*Set background image for selected tab since IE doesn't support border-image property*/
+    .toolbar-item.toggleable.toggled-on {
+        background: url(Images/toolbarItemSelected.png);
+        background-size: 1px 100%;
+    }
+}
+
+/* Hack to detect Firefox*/
+@-moz-document url-prefix() {
+  	/*Set icons as background-image since FF doesn't support mask-image*/
+    #console-status-bar-item .glyph {
+        background-image: url(Images/consoleButtonGlyph.png);
+    }
+
+    .clear-status-bar-item .glyph {
+        background-image: url(Images/clearConsoleButtonGlyph.png);
+    }
+
+    .node-search-status-bar-item .glyph {
+        background-image: url(Images/nodeSearchButtonGlyph.png);
+    }
+
+    #console-status-bar-item .glyph,
+    .clear-status-bar-item .glyph,
+    .node-search-status-bar-item .glyph{
+        background-color: transparent;
+    }
 }
 
 .console-message .bubble {
@@ -591,6 +690,7 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     text-shadow: none;
     color: white;
     -webkit-border-radius: 7px;
+    border-radius: 7px;
 }
 
 .console-message-text {
@@ -770,7 +870,10 @@ body.platform-linux .monospace, body.platform-linux .source-code {
 .auto-complete-text, .editing .auto-complete-text {
     color: rgb(128, 128, 128) !important;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
     -webkit-user-modify: read-only;
+	-moz-user-modify: read-only;
 }
 
 .panel {
@@ -830,6 +933,8 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     padding-bottom: 10px;
     font-size: 11px;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
 }
 
 .resource-view.image img.resource-image-view {
@@ -837,7 +942,10 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     max-height: 1000px;
     background-image: url(Images/checker.png);
     -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.5);
+    box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.5);
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     -webkit-user-drag: auto;
 }
 
@@ -932,6 +1040,7 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     height: 24px;
     border-width: 0 12px 0 2px;
     -webkit-border-image: url(Images/segment.png) 0 12 0 2;
+	border-image: url(Images/segment.png) 0 12 0 2;
     margin-right: -12px;
     padding-left: 18px;
     padding-right: 2px;
@@ -965,34 +1074,41 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     border-width: 0 2px 0 2px;
     padding-right: 6px;
     -webkit-border-image: url(Images/segmentEnd.png) 0 2 0 2;
+	border-image: url(Images/segmentEnd.png) 0 2 0 2;
 }
 
 .crumbs .crumb.selected {
     -webkit-border-image: url(Images/segmentSelected.png) 0 12 0 2;
+	border-image: url(Images/segmentSelected.png) 0 12 0 2;
     color: black;
     text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;
 }
 
 .crumbs .crumb.selected:hover {
     -webkit-border-image: url(Images/segmentSelected.png) 0 12 0 2;
+	border-image: url(Images/segmentSelected.png) 0 12 0 2;
 }
 
 .crumbs .crumb.selected.end, .crumbs .crumb.selected.end:hover {
     -webkit-border-image: url(Images/segmentSelectedEnd.png) 0 2 0 2;
+	border-image: url(Images/segmentSelectedEnd.png) 0 2 0 2;
 }
 
 .crumbs .crumb:hover {
     -webkit-border-image: url(Images/segmentHover.png) 0 12 0 2;
+	border-image: url(Images/segmentHover.png) 0 12 0 2;
     color: black;
 }
 
 .crumbs .crumb.dimmed:hover {
     -webkit-border-image: url(Images/segmentHover.png) 0 12 0 2;
+	border-image: url(Images/segmentHover.png) 0 12 0 2;
     color: rgba(0, 0, 0, 0.75);
 }
 
 .crumbs .crumb.end:hover {
     -webkit-border-image: url(Images/segmentHoverEnd.png) 0 2 0 2;
+	border-image: url(Images/segmentHoverEnd.png) 0 2 0 2;
 }
 
 .outline-disclosure li.hovered:not(.selected) .selection {
@@ -1001,11 +1117,13 @@ body.platform-linux .monospace, body.platform-linux .source-code {
     right: 3px;
     background-color: rgba(56, 121, 217, 0.1);
     -webkit-border-radius: 5px;
+    border-radius: 5px;
 }
 
 .outline-disclosure li.highlighted .highlight {
     background-color: rgb(255, 230, 179);
     -webkit-border-radius: 4px;
+    border-radius: 4px;
     padding-bottom: 2px;
     margin-bottom: -2px;
 }
@@ -1050,6 +1168,7 @@ body.platform-linux .monospace, body.platform-linux .source-code {
 .outline-disclosure, .outline-disclosure ol {
     list-style-type: none;
     -webkit-padding-start: 12px;
+	-moz-padding-start: 12px;
     margin: 0;
 }
 
@@ -1141,18 +1260,23 @@ body.platform-linux .monospace, body.platform-linux .source-code {
 .placard.selected {
     border-top: 1px solid rgb(145, 160, 192);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(162, 177, 207)), to(rgb(120, 138, 177)));
+    background-image: linear-gradient(to bottom, rgb(162, 177, 207) 0%, rgb(120, 138, 177) 100%);
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 :focus .placard.selected {
     border-top: 1px solid rgb(68, 128, 200);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(21, 83, 170)));
+    background-image: linear-gradient(to bottom, rgb(92, 147, 213) 0%, rgb(21, 83, 170) 100%);
 }
 
 body.inactive .placard.selected {
     border-top: 1px solid rgb(151, 151, 151);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(180, 180, 180)), to(rgb(138, 138, 138)));
+    background-image: linear-gradient(to bottom, rgb(180, 180, 180) 0%, rgb(138, 138, 138) 100%);
 }
 
 .placard .title {
@@ -1209,6 +1333,8 @@ body.inactive .placard.selected {
     white-space: nowrap;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 .section .header::before {
@@ -1286,6 +1412,8 @@ body.inactive .placard.selected {
     text-overflow: ellipsis;
     overflow: hidden;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     cursor: auto;
 }
 
@@ -1302,6 +1430,8 @@ body.inactive .placard.selected {
     margin-top: 0;
     padding-right: 3px;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
     cursor: default;
 }
 
@@ -1319,6 +1449,7 @@ body.inactive .placard.selected {
     display: none;
     margin: 0;
     -webkit-padding-start: 12px;
+	-moz-padding-start: 12px;
     list-style: none;
 }
 
@@ -1366,6 +1497,8 @@ body.inactive .placard.selected {
     white-space: nowrap;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 .event-bars .event-bar .header .title {
@@ -1394,10 +1527,14 @@ body.inactive .placard.selected {
 
 .editing {
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     -webkit-box-shadow: rgba(0, 0, 0, .5) 3px 3px 4px;
+    box-shadow: rgba(0, 0, 0, .5) 3px 3px 4px;
     outline: 1px solid rgb(66%, 66%, 66%) !important;
     background-color: white;
     -webkit-user-modify: read-write-plaintext-only;
+	-moz-user-modify: read-write;
     text-overflow: clip !important;
     padding-left: 2px;
     margin-left: -2px;
@@ -1425,7 +1562,10 @@ body.inactive .placard.selected {
 
 .elements-tree-editor {
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     -webkit-user-modify: read-write-plaintext-only;
+	-moz-user-modify: read-write-plaintext-only;
 }
 
 .section .properties li.editing {
@@ -1512,6 +1652,7 @@ li.editing .swatch, li.editing .enabled-button,  li.editing-sub-part .delete-but
 
 .pane > .title {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(243, 243, 243)), color-stop(0.05, rgb(243, 243, 243)), color-stop(0.05, rgb(230, 230, 230)), to(rgb(209, 209, 209)));
+    background-image: linear-gradient(to bottom, rgb(243, 243, 243) 0%, rgb(243, 243, 243) 10%, rgb(230, 230, 230) 40%, rgb(209, 209, 209) 100%);
     height: 20px;
     padding: 0 5px;
     border-top: 1px solid rgb(189, 189, 189);
@@ -1523,10 +1664,13 @@ li.editing .swatch, li.editing .enabled-button,  li.editing-sub-part .delete-but
     text-shadow: white 0 1px 0;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 .pane > .title:active {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(231, 231, 231)), color-stop(0.05, rgb(231, 231, 231)), color-stop(0.05, rgb(207, 207, 207)), to(rgb(186, 186, 186)));
+    background-image: linear-gradient(to bottom, rgb(231, 231, 231) 0%,rgb(231, 231, 231) 10%, rgb(207, 207, 207) 40%, rgb(186, 186, 186) 100%);
     border-top: 1px solid rgb(178, 178, 178);
     border-bottom: 1px solid rgb(178, 178, 178);
 }
@@ -1556,7 +1700,12 @@ li.editing .swatch, li.editing .enabled-button,  li.editing-sub-part .delete-but
     margin: 1px 0 0 0;
     padding: 0;
     -webkit-border-radius: 0;
+    border-radius: 0;
     -webkit-appearance: none;
+	-moz-appearance: none;
+	/* hack for appearance for non-webkit browsers */
+	padding-left: 10px;
+	padding-right: 13px;
 }
 
 .pane > .title > select:hover {
@@ -1583,7 +1732,9 @@ li.editing .swatch, li.editing .enabled-button,  li.editing-sub-part .delete-but
     margin: 1px 0 0 0;
     padding: 0;
     -webkit-border-radius: 0;
+    border-radius: 0;
     -webkit-appearance: none;
+	-moz-appearance: none;
 }
 
 .pane > .title > button.add:hover {
@@ -1655,7 +1806,9 @@ body.platform-windows .sidebar-pane-subtitle {
     margin-left: 0;
     margin-top: 0;
     margin-bottom: 0.25em;
-    vertical-align: bottom;
+    vertical-align: middle;
+    /*Hack for IE - 'box-sizing: border-box' significantly reduce checkbox size so we set it to default*/
+    box-sizing: content-box;
 }
 
 .metrics {
@@ -1833,17 +1986,20 @@ body.inactive .sidebar {
 
 .resources.panel .sidebar li.selected .selection {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(162, 177, 207)), to(rgb(120, 138, 177)));
+    background-image: linear-gradient(to bottom, rgb(162, 177, 207) 0%, rgb(120, 138, 177) 100%);
     border-top: 1px solid #979797;
     height: 17px;
 }
 
 .resources.panel .sidebar :focus li.selected .selection {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(21, 83, 170)));
+    background-image: linear-gradient(to bottom, rgb(92, 147, 213) 0%, rgb(21, 83, 170) 100%);
     border-top: 1px solid rgb(68, 128, 200);
 }
 
 body.inactive .resources.panel .sidebar li.selected .selection {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(180, 180, 180)), to(rgb(138, 138, 138)));
+    background-image: linear-gradient(to bottom, rgb(180, 180, 180) 0%, rgb(138, 138, 138) 100%);
     border-top: 1px solid rgb(151, 151, 151);
 }
 
@@ -2003,7 +2159,9 @@ li.selected .base-storage-tree-element-subtitle {
     height: 100%;
     border-top: 0 none transparent;
     background-image: -webkit-gradient(linear, left top, left bottom, from(white), color-stop(0.5, white), color-stop(0.5, rgb(234, 243, 255)), to(rgb(234, 243, 255)));
+    background-image: linear-gradient(to bottom, white 0%, white 10%, rgb(234, 243, 255) 40%, rgb(234, 243, 255) 100%);
     -webkit-background-size: 1px 32px;
+    background-size: 1px 32px;
 }
 
 .data-grid.inline table.data {
@@ -2026,6 +2184,8 @@ li.selected .base-storage-tree-element-subtitle {
     white-space: nowrap;
     border-right: 1px solid #aaa;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
 }
 
 .data-grid td > div, .data-grid th > div {
@@ -2102,6 +2262,8 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     height: 8px;
     margin-right: 2px;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
 }
 
 .data-grid tr.expanded td.disclosure::before {
@@ -2147,6 +2309,8 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     overflow-y: overlay;
     overflow-x: hidden;
     -webkit-text-size-adjust: auto;
+    -ms-text-size-adjust: auto;
+	-moz-text-size-adjust: auto;
 }
 
 .database-query-prompt {
@@ -2155,7 +2319,10 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     min-height: 16px; 
     white-space: pre-wrap;
     -webkit-user-modify: read-write-plaintext-only;
+	-moz-user-modify: read-write;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
 }
 
 .database-user-query::before, .database-query-prompt::before, .database-query-result::before {
@@ -2168,6 +2335,8 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     height: 10px;
     margin-top: -5px;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
 }
 
 .database-query-prompt::before {
@@ -2188,6 +2357,8 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
 .database-query-text {
     color: rgb(0, 128, 255);
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: none;
 }
 
 .database-query-result {
@@ -2201,6 +2372,8 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
 .database-query-result.error {
     color: red;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: none;
 }
 
 .database-query-result.error::before {
@@ -2295,8 +2468,11 @@ body.inactive .data-grid th.sort-ascending, body.inactive .data-grid th.sort-des
     border: 1px solid rgb(165, 165, 165);
     background-color: rgb(237, 237, 237);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252) 0%, rgb(233, 233, 233) 100%);
     -webkit-border-radius: 12px;
+    border-radius: 12px;
     -webkit-appearance: none;
+	-moz-appearance: none;
 }
 
 .panel-enabler-view button:not(.status-bar-item) {
@@ -2347,6 +2523,7 @@ button.show-all-nodes {
 .panel-enabler-view button:active:not(.status-bar-item), .pane button:active, button.show-all-nodes:active {
     background-color: rgb(215, 215, 215);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194) 0%, rgb(239, 239, 239) 100%);
 }
 
 body.inactive .panel-enabler-view button:not(.status-bar-item), .panel-enabler-view button:disabled:not(.status-bar-item), body.inactive .pane button, .pane button:disabled, body.inactive button.show-all-nodes {
@@ -2354,6 +2531,7 @@ body.inactive .panel-enabler-view button:not(.status-bar-item), .panel-enabler-v
     border-color: rgb(212, 212, 212);
     background-color: rgb(239, 239, 239);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(250, 250, 250)), to(rgb(235, 235, 235)));
+    background-image: linear-gradient(to bottom, rgb(250, 250, 250) 0%, rgb(235, 235, 235) 100%);
 }
 
 .panel-enabler-view input {
@@ -2361,19 +2539,24 @@ body.inactive .panel-enabler-view button:not(.status-bar-item), .panel-enabler-v
     width: 17px;
     border: 1px solid rgb(165, 165, 165);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252) 0%, rgb(223, 223, 223) 100%);
     -webkit-border-radius: 8px;
+    border-radius: 8px;
     -webkit-appearance: none;
+	-moz-appearance: none;
     vertical-align: middle;
     margin: 0 5px 5px 0;
 }
 
 .panel-enabler-view input:active {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(194, 194, 194)), to(rgb(239, 239, 239)));
+    background-image: linear-gradient(to bottom, rgb(194, 194, 194) 0%, rgb(239, 239, 239) 100%);
 }
 
 .panel-enabler-view input:checked {
     background: url(Images/radioDot.png) center no-repeat,
                 -webkit-gradient(linear, left top, left bottom, from(rgb(252, 252, 252)), to(rgb(223, 223, 223)));
+    background-image: linear-gradient(to bottom, rgb(252, 252, 252) 0%, rgb(223, 223, 223) 100%);
 }
 
 .panel-enabler-view.scripts img {
@@ -2527,6 +2710,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
 
 #resources-filter, #console-filter.console-filter-top {
     background: -webkit-gradient(linear, left top, left bottom, from(rgb(236, 236, 236)), to(rgb(217, 217, 217)));
+    background-image: linear-gradient(to bottom, rgb(236, 236, 236) 0%, rgb(217, 217, 217) 100%);
     border-bottom: 1px solid rgb(64%, 64%, 64%);
     width: 100%;
 }
@@ -2541,11 +2725,15 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
 
 .tabbed-pane {
     -webkit-box-orient: vertical;
+    -ms-flex-direction: column;
+	-moz-box-orient: vertical;
     height: 100%;
 }
 
 .tabbed-pane-content {
     -webkit-box-flex: 1;
+    -ms-flex: 1;
+	-moz-box-flex: 1;
     position: relative;
 }
 
@@ -2593,6 +2781,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     background: transparent;
     text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0;
     -webkit-border-radius: 8px;
+    border-radius: 8px;
     vertical-align: middle;
 }
 
@@ -2617,11 +2806,13 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
 .scope-bar li.selected {
     background: rgba(0, 0, 0, 0.3);
     -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 -1px 1px rgba(255, 255, 255, 0.25) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 -1px 1px rgba(255, 255, 255, 0.25) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
 }
 
 .scope-bar li:active {
     background: rgba(0, 0, 0, 0.5);
     -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 -1px 1px rgba(255, 255, 255, 0.25) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
+    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5) inset, 0 -1px 1px rgba(255, 255, 255, 0.25) inset, 0 1px 0 rgba(255, 255, 255, 0.5);
 }
 
 #resources-container {
@@ -2675,6 +2866,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     border-left: 1px solid rgb(102, 102, 102);
     background-color: rgb(101, 111, 130);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgba(0, 0, 0, 0)), to(rgba(0, 0, 0, 0.5)));
+    background-image: linear-gradient(to bottom, rgb(0, 0, 0) 0%, rgb(0, 0, 0) 50%);
     background-repeat: repeat-x;
     background-position: bottom;
     text-align: center;
@@ -2684,6 +2876,9 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     -webkit-background-size: 1px 6px;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-size: 1px 6px;
+    background-origin: padding;
+    background-clip: padding;
     z-index: 400;
 }
 
@@ -2831,6 +3026,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     font-weight: bold;
     opacity: 0;
     -webkit-transition: opacity 250ms ease-in-out;
+    transition: opacity 250ms ease-in-out;
 }
 
 .resources-graph-side:hover .resources-graph-label {
@@ -2885,6 +3081,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     min-width: 14px;
     opacity: 0.65;
     -webkit-border-image: url(Images/timelinePillGray.png) 6 7 6 7;
+	border-image: url(Images/timelinePillGray.png) 6 7 6 7;
 }
 
 .resources-category-documents, .resources-category-stylesheets, .resources-category-images,
@@ -2925,63 +3122,78 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
 
 .resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillGray.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillGray.png) 6 7 6 7;
 }
 
 .resources-category-documents .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillBlue.png) 6 7 6 7;
+	border-image: url(Images/timelinePillBlue.png) 6 7 6 7;
 }
 
 .resources-category-documents.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillBlue.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillBlue.png) 6 7 6 7;
 }
 
 .resources-category-stylesheets .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillGreen.png) 6 7 6 7;
+	border-image: url(Images/timelinePillGreen.png) 6 7 6 7;
 }
 
 .resources-category-stylesheets.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillGreen.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillGreen.png) 6 7 6 7;
 }
 
 .resources-category-images .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillPurple.png) 6 7 6 7;
+	border-image: url(Images/timelinePillPurple.png) 6 7 6 7;
 }
 
 .resources-category-images.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillPurple.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillPurple.png) 6 7 6 7;
 }
 
 .resources-category-fonts .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillRed.png) 6 7 6 7;
+	border-image: url(Images/timelinePillRed.png) 6 7 6 7;
 }
 
 .resources-category-fonts.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillRed.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillRed.png) 6 7 6 7;
 }
 
 .resources-category-scripts .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillOrange.png) 6 7 6 7;
+	border-image: url(Images/timelinePillOrange.png) 6 7 6 7;
 }
 
 .resources-category-scripts.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillOrange.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillOrange.png) 6 7 6 7;
 }
 
 .resources-category-xhr .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillYellow.png) 6 7 6 7;
+	border-image: url(Images/timelinePillYellow.png) 6 7 6 7;
 }
 
 .resources-category-xhr.resource-cached .resources-graph-bar {
     -webkit-border-image: url(Images/timelineHollowPillYellow.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillYellow.png) 6 7 6 7;
 }
 
 /* FIXME: Create bar images for WebSocket. */
 .resources-category-websockets .resources-graph-bar {
     -webkit-border-image: url(Images/timelinePillGray.png) 6 7 6 7;
+	border-image: url(Images/timelinePillGray.png) 6 7 6 7;
 }
 
 .resources-category-websockets.resource-cached .resources-graph-bar {
    -webkit-border-image: url(Images/timelineHollowPillGray.png) 6 7 6 7;
+	border-image: url(Images/timelineHollowPillGray.png) 6 7 6 7;
 }
 
 #resource-views {
@@ -3085,6 +3297,7 @@ button.enable-toggle-status-bar-item.toggled-on .glyph {
     background-repeat: no-repeat;
     background-position: center;
     -webkit-apearance: none;
+	-moz-apearance: none;
 }
 
 .sidebar-tree.hide-disclosure-buttons .sidebar-tree-item .disclosure-button {
@@ -3160,6 +3373,7 @@ li .status .bubble {
     text-shadow: none;
     color: white;
     -webkit-border-radius: 7px;
+    border-radius: 7px;
 }
 
 li .status .bubble:empty {
@@ -3196,20 +3410,25 @@ body.inactive li.selected .status .bubble {
     color: white;
     border-top: 1px solid rgb(145, 160, 192);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(162, 177, 207)), to(rgb(120, 138, 177)));
+    background-image: linear-gradient(to bottom, rgb(162, 177, 207) 0%, rgb(120, 138, 177) 100%);
     text-shadow: rgba(0, 0, 0, 0.33) 0 1px 0;
     font-weight: bold;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 :focus .sidebar-tree-item.selected {
     border-top: 1px solid rgb(68, 128, 200);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(92, 147, 213)), to(rgb(21, 83, 170)));
+    background-image: linear-gradient(to bottom, rgb(92, 147, 213) 0%, rgb(21, 83, 170) 100%);
 }
 
 body.inactive .sidebar-tree-item.selected {
     border-top: 1px solid rgb(151, 151, 151);
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(180, 180, 180)), to(rgb(138, 138, 138)));
+    background-image: linear-gradient(to bottom, rgb(180, 180, 180) 0%, rgb(138, 138, 138) 100%);
 }
 
 .sidebar-tree-item .titles {
@@ -3440,6 +3659,7 @@ body.inactive li.selected .bubble.search-matches {
     left: 0;
     right: 0;
     background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(253, 253, 253)), to(rgb(213, 213, 213)));
+    background-image: linear-gradient(to bottom, rgb(253, 253, 253) 0%, rgb(213, 213, 213) 100%);
     border-top: 1px solid rgb(140, 140, 140);
     border-bottom: 1px solid rgb(115, 115, 115);
     height: 10px;
@@ -3453,6 +3673,7 @@ body.inactive li.selected .bubble.search-matches {
     left: 0px;
     padding-top: 2px;
     background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(rgb(242, 242, 242)), to(rgb(209, 209, 209)));
+    background-image: linear-gradient(to bottom, rgb(242, 242, 242) 0%, rgb(209, 209, 209) 100%);
     border-right: 1px solid rgb(163, 163, 163);
 }
 
@@ -3513,7 +3734,9 @@ body.inactive li.selected .bubble.search-matches {
     z-index: 500;
     cursor: col-resize;
     -webkit-border-radius: 2px;
+    border-radius: 2px;
     -webkit-box-shadow: white 1px 0 0, white -1px 0 0, white 0 1px 0, white 0 -1px 0;
+    box-shadow: white 1px 0 0, white -1px 0 0, white 0 1px 0, white 0 -1px 0;
 }
 
 #timeline-overview-grid #resources-graphs {
@@ -3555,6 +3778,7 @@ body.inactive li.selected .bubble.search-matches {
     background-position: 0 -66px;
     vertical-align: -1px;
     -webkit-appearance: none;
+	-moz-appearance: none;
 }
 
 .timeline-category-statusbar-item .timeline-category-checkbox:checked {
@@ -3705,6 +3929,7 @@ body.inactive li.selected .bubble.search-matches {
     min-width: 5px;
     opacity: 0.8;
     -webkit-border-image: url(Images/timelineBarGray.png) 4 4 5 4;
+	border-image: url(Images/timelineBarGray.png) 4 4 5 4;
     z-index: 180;
     pointer-events: visibleFill;
 }
@@ -3723,14 +3948,17 @@ body.inactive li.selected .bubble.search-matches {
 
 .timeline-category-loading .timeline-graph-bar {
     -webkit-border-image: url(Images/timelineBarBlue.png) 4 4 5 4;
+	border-image: url(Images/timelineBarBlue.png) 4 4 5 4;
 }
 
 .timeline-category-scripting .timeline-graph-bar {
     -webkit-border-image: url(Images/timelineBarOrange.png) 4 4 5 4;
+	border-image: url(Images/timelineBarOrange.png) 4 4 5 4;
 }
 
 .timeline-category-rendering .timeline-graph-bar {
     -webkit-border-image: url(Images/timelineBarPurple.png) 4 4 5 4;
+	border-image: url(Images/timelineBarPurple.png) 4 4 5 4;
 }
 
 .timeline-aggregated-category {
@@ -3745,14 +3973,17 @@ body.inactive li.selected .bubble.search-matches {
 
 .timeline-loading {
     -webkit-border-image: url(Images/timelineBarBlue.png) 4 4 5 4;
+	border-image: url(Images/timelineBarBlue.png) 4 4 5 4;
 }
 
 .timeline-scripting {
     -webkit-border-image: url(Images/timelineBarOrange.png) 4 4 5 4;
+	border-image: url(Images/timelineBarOrange.png) 4 4 5 4;
 }
 
 .timeline-rendering {
     -webkit-border-image: url(Images/timelineBarPurple.png) 4 4 5 4;
+	border-image: url(Images/timelineBarPurple.png) 4 4 5 4;
 }
 
 .popover .timeline-aggregated-category.timeline-loading {
@@ -3773,6 +4004,8 @@ body.inactive li.selected .bubble.search-matches {
 
 .timeline-details {
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
     vertical-align: top;
 }
 
@@ -3983,6 +4216,7 @@ button.enable-toggle-status-bar-item .glyph {
 
 ol.breakpoint-list {
     -webkit-padding-start: 0;
+	-moz-padding-start: 0;
     list-style: none;
     margin: 0;
 }
@@ -4037,6 +4271,7 @@ li.breakpoint-hit .breakpoint-hit-marker {
     padding: 4px;
     background-color: rgb(203, 226, 255);
     -webkit-border-radius: 7px;
+    border-radius: 7px;
     border: 2px solid rgb(169, 172, 203); 
     width: 90%; 
 }
@@ -4060,6 +4295,7 @@ li.breakpoint-hit .breakpoint-hit-marker {
     box-shadow: none !important;
     outline: none !important;
     -webkit-user-modify: read-write;
+	-moz-user-modify: read-write;
 }
 
 .source-frame-popover-title {
@@ -4088,6 +4324,7 @@ li.breakpoint-hit .breakpoint-hit-marker {
 
 .styles-sidebar-separator {
     background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(243, 243, 243)), color-stop(0.05, rgb(243, 243, 243)), color-stop(0.05, rgb(230, 230, 230)), to(rgb(209, 209, 209)));
+    background-image: linear-gradient(to bottom, rgb(243, 243, 243) 0%,rgb(243, 243 ,243) 10%, rgb(230, 230, 230) 40%, rgb(209, 209, 209) 100%);
     padding: 0 5px;
     border-top: 1px solid rgb(189, 189, 189);
     border-bottom: 1px solid rgb(189, 189, 189);
@@ -4129,7 +4366,11 @@ a.worker-item {
     white-space: nowrap;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
     -webkit-user-select: text;
+	-ms-user-select: text;
+	-moz-user-select: text;
 }
 
 .styles-section:not(.first-styles-section) {
@@ -4154,6 +4395,8 @@ a.worker-item {
     padding-right: 5px;
     vertical-align: sub;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
     cursor: default;
 }
 
@@ -4161,6 +4404,8 @@ a.worker-item {
     white-space: nowrap;
     -webkit-background-origin: padding;
     -webkit-background-clip: padding;
+    background-origin: padding;
+    background-clip: padding;
 }
 
 .styles-section .header .title {
@@ -4220,6 +4465,7 @@ a.worker-item {
     display: none;
     margin: 0;
     -webkit-padding-start: 12px;
+	-moz-padding-start: 12px;
     list-style: none;
 }
 
@@ -4236,6 +4482,8 @@ a.worker-item {
     margin-top: 0;
     padding-right: 3px;
     -webkit-user-select: none;
+	-ms-user-select: none;
+	-moz-user-select: none;
     cursor: default;
 }
 
@@ -4265,6 +4513,8 @@ a.worker-item {
     vertical-align: top;
     position: relative;
     z-index: 1;
+    /*Removes checkbox padding that is set in IE by default*/
+    padding: 0;
 }
 
 .styles-section .properties .overloaded, .styles-section .properties .inactive, .styles-section .properties .disabled {

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.js
index 0959289..9707cb3 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/inspector.js
@@ -120,9 +120,14 @@ var WebInspector = {
             this._previousFocusElement = this._currentFocusElement;
         this._currentFocusElement = x;
 
-        if (this._currentFocusElement) {
+        if (this._currentFocusElement && typeof(this._currentFocusElement.focus) === 'function') {
             this._currentFocusElement.focus();
 
+            // Hack for IE - return if 'select' is in focus; otherwise it will lost the focus after we call addRange.
+            if(this._currentFocusElement.nodeName.toUpperCase() == 'SELECT'){
+                return;
+            }
+
             // Make a caret selection inside the new element if there isn't a range selection and
             // there isn't already a caret selection inside.
             var selection = window.getSelection();
@@ -134,7 +139,8 @@ var WebInspector = {
                 selection.removeAllRanges();
                 selection.addRange(selectionRange);
             }
-        } else if (this._previousFocusElement)
+        } // Hack for IE - do not call blur() for body element; otherwise browser window will become inactive
+        else if (this._previousFocusElement && this._previousFocusElement.nodeName.toUpperCase() != 'BODY')
             this._previousFocusElement.blur();
     },
 
@@ -755,9 +761,9 @@ WebInspector.documentKeyDown = function(event)
     var isInputElement = event.target.nodeName === "INPUT";
     var isInEditMode = event.target.enclosingNodeOrSelfWithClass("text-prompt") || WebInspector.isEditingAnyField();
     const helpKey = WebInspector.isMac() ? "U+003F" : "U+00BF"; // "?" for both platforms
-
-    if (event.keyIdentifier === "F1" ||
-        (event.keyIdentifier === helpKey && event.shiftKey && (!isInEditMode && !isInputElement || event.metaKey))) {
+    var key = event.keyIdentifier || event.key;
+    if (key === "F1" ||
+        (key === helpKey && event.shiftKey && (!isInEditMode && !isInputElement || event.metaKey))) {
         WebInspector.shortcutsHelp.show();
         event.stopPropagation();
         event.preventDefault();
@@ -784,7 +790,7 @@ WebInspector.documentKeyDown = function(event)
     }
 
     var isMac = WebInspector.isMac();
-    switch (event.keyIdentifier) {
+    switch (key) {
         case "Left":
             var isBackKey = !isInEditMode && (isMac ? event.metaKey : event.ctrlKey);
             if (isBackKey && this._panelHistory.canGoBack()) {
@@ -1562,7 +1568,7 @@ WebInspector._searchKeyDown = function(event)
 
 WebInspector.performSearch = function(event)
 {
-    var forceSearch = event.keyIdentifier === "Enter";
+    var forceSearch = (event.keyIdentifier || event.key) === "Enter";
     this.doPerformSearch(event.target.value, forceSearch, event.shiftKey, false);
 }
 
@@ -1732,6 +1738,7 @@ WebInspector.startEditing = function(element, config)
     var moveDirection = "";
 
     element.addStyleClass("editing");
+    element.setAttribute("contenteditable", "true");
 
     var oldTabIndex = element.tabIndex;
     if (element.tabIndex < 0)
@@ -1753,6 +1760,8 @@ WebInspector.startEditing = function(element, config)
         delete WebInspector.__editing;
 
         this.removeStyleClass("editing");
+        this.removeAttribute("contenteditable");
+
         this.tabIndex = oldTabIndex;
         this.scrollTop = 0;
         this.scrollLeft = 0;
@@ -1794,7 +1803,7 @@ WebInspector.startEditing = function(element, config)
             return "commit";
         else if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Esc.code)
             return "cancel";
-        else if (event.keyIdentifier === "U+0009") // Tab key
+        else if ((event.keyIdentifier || event.key) === "U+0009") // Tab key
             return "move-" + (event.shiftKey ? "backward" : "forward");
     }
 
@@ -1810,7 +1819,7 @@ WebInspector.startEditing = function(element, config)
             event.stopPropagation();
         } else if (result && result.indexOf("move-") === 0) {
             moveDirection = result.substring(5);
-            if (event.keyIdentifier !== "U+0009")
+            if ((event.keyIdentifier || event.key) !== "U+0009")
                 blurEventListener();
         }
     }

http://git-wip-us.apache.org/repos/asf/cordova-weinre/blob/4992e917/weinre.build/vendor/webkit/WebCore/inspector/front-end/utilities.js
----------------------------------------------------------------------
diff --git a/weinre.build/vendor/webkit/WebCore/inspector/front-end/utilities.js b/weinre.build/vendor/webkit/WebCore/inspector/front-end/utilities.js
index 64670e1..f64ed53 100644
--- a/weinre.build/vendor/webkit/WebCore/inspector/front-end/utilities.js
+++ b/weinre.build/vendor/webkit/WebCore/inspector/front-end/utilities.js
@@ -280,21 +280,21 @@ Element.prototype.createChild = function(elementName, className)
     return element;
 }
 
-Element.prototype.__defineGetter__("totalOffsetLeft", function()
+Object.defineProperty(Element.prototype, "totalOffsetLeft", {get: function()
 {
     var total = 0;
     for (var element = this; element; element = element.offsetParent)
         total += element.offsetLeft + (this !== element ? element.clientLeft : 0);
     return total;
-});
+}});
 
-Element.prototype.__defineGetter__("totalOffsetTop", function()
+Object.defineProperty(Element.prototype, "totalOffsetTop", {get: function()
 {
     var total = 0;
     for (var element = this; element; element = element.offsetParent)
         total += element.offsetTop + (this !== element ? element.clientTop : 0);
     return total;
-});
+}});
 
 Element.prototype.offsetRelativeToWindow = function(targetWindow)
 {
@@ -314,7 +314,7 @@ Element.prototype.offsetRelativeToWindow = function(targetWindow)
     return elementOffset;
 }
 
-KeyboardEvent.prototype.__defineGetter__("data", function()
+Object.defineProperty(KeyboardEvent.prototype, "data", {get: function()
 {
     // Emulate "data" attribute from DOM 3 TextInput event.
     // See http://www.w3.org/TR/DOM-Level-3-Events/#events-Events-TextEvent-data
@@ -331,7 +331,7 @@ KeyboardEvent.prototype.__defineGetter__("data", function()
             else
                 return "";
     }
-});
+}});
 
 Text.prototype.select = function(start, end)
 {
@@ -350,7 +350,7 @@ Text.prototype.select = function(start, end)
     return this;
 }
 
-Element.prototype.__defineGetter__("selectionLeftOffset", function() {
+Object.defineProperty(Element.prototype, "selectionLeftOffset", {get: function() {
     // Calculate selection offset relative to the current element.
 
     var selection = window.getSelection();
@@ -369,7 +369,7 @@ Element.prototype.__defineGetter__("selectionLeftOffset", function() {
     }
 
     return leftOffset;
-});
+}});
 
 Node.prototype.isWhitespace = isNodeWhitespace;
 Node.prototype.displayName = nodeDisplayName;
@@ -1017,7 +1017,7 @@ String.format = function(format, substitutions, formatters, initialValue, append
 
 function isEnterKey(event) {
     // Check if in IME.
-    return event.keyCode !== 229 && event.keyIdentifier === "Enter";
+    return (event.keyCode !== 229 && event.keyIdentifier === "Enter") || event.keyCode == 13 || event.charCode == 13;
 }