Changeset 82674 in webkit


Ignore:
Timestamp:
Apr 1, 2011 6:14:24 AM (13 years ago)
Author:
apavlov@chromium.org
Message:

2011-04-01 Alexander Pavlov <apavlov@chromium.org>

Reviewed by Yury Semikhatsky.

Web Inspector: up/down keys are not treating hex numbers properly while editing styles.
https://bugs.webkit.org/show_bug.cgi?id=40522

Drive-by: fix inc/dec for numbers like ".5"

Test: inspector/styles/up-down-numerics-and-colors.html

WebCore:

  • inspector/front-end/StylesSidebarPane.js: (WebInspector.StylePropertyTreeElement.prototype):

LayoutTests:

  • http/tests/inspector/inspector-test.js: (initialize_InspectorTest.InspectorTest.createKeyEvent): Added arguments for key modifiers.
  • inspector/styles/up-down-numerics-and-colors-expected.txt: Added.
  • inspector/styles/up-down-numerics-and-colors.html: Added.
Location:
trunk
Files:
2 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r82669 r82674  
     12011-04-01  Alexander Pavlov  <apavlov@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: up/down keys are not treating hex numbers properly while editing styles.
     6        https://bugs.webkit.org/show_bug.cgi?id=40522
     7
     8        * http/tests/inspector/inspector-test.js:
     9        (initialize_InspectorTest.InspectorTest.createKeyEvent): Added arguments for key modifiers.
     10        * inspector/styles/up-down-numerics-and-colors-expected.txt: Added.
     11        * inspector/styles/up-down-numerics-and-colors.html: Added.
     12
    1132011-04-01  Sheriff Bot  <webkit.review.bot@gmail.com>
    214
  • trunk/LayoutTests/http/tests/inspector/inspector-test.js

    r82281 r82674  
    158158}
    159159
    160 InspectorTest.createKeyEvent = function(keyIdentifier)
     160InspectorTest.createKeyEvent = function(keyIdentifier, ctrlKey, altKey, shiftKey, metaKey)
    161161{
    162162    var evt = document.createEvent("KeyboardEvent");
    163     evt.initKeyboardEvent("keydown", true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, "");
     163    evt.initKeyboardEvent("keydown", true /* can bubble */, true /* can cancel */, null /* view */, keyIdentifier, "", ctrlKey, altKey, shiftKey, metaKey);
    164164    return evt;
    165165}
  • trunk/Source/WebCore/ChangeLog

    r82670 r82674  
     12011-04-01  Alexander Pavlov  <apavlov@chromium.org>
     2
     3        Reviewed by Yury Semikhatsky.
     4
     5        Web Inspector: up/down keys are not treating hex numbers properly while editing styles.
     6        https://bugs.webkit.org/show_bug.cgi?id=40522
     7
     8        Drive-by: fix inc/dec for numbers like ".5"
     9
     10        Test: inspector/styles/up-down-numerics-and-colors.html
     11
     12        * inspector/front-end/StylesSidebarPane.js:
     13        (WebInspector.StylePropertyTreeElement.prototype):
     14
    1152011-03-30  Pavel Podivilov  <podivilov@chromium.org>
    216
  • trunk/Source/WebCore/inspector/front-end/StylesSidebarPane.js

    r80713 r82674  
    16441644        var wordRange = selectionRange.startContainer.rangeOfWord(selectionRange.startOffset, WebInspector.StylesSidebarPane.StyleValueDelimiters, this.valueElement);
    16451645        var wordString = wordRange.toString();
    1646         var replacementString = wordString;
    1647 
    1648         var matches = /(.*?)(-?\d+(?:\.\d+)?)(.*)/.exec(wordString);
     1646        var replacementString;
     1647        var prefix, suffix, number;
     1648
     1649        var matches;
     1650        matches = /(.*#)([\da-fA-F]+)(.*)/.exec(wordString);
    16491651        if (matches && matches.length) {
    1650             var prefix = matches[1];
    1651             var number = parseFloat(matches[2]);
    1652             var suffix = matches[3];
    1653 
    1654             // If the number is near zero or the number is one and the direction will take it near zero.
    1655             var numberNearZero = (number < 1 && number > -1);
    1656             if (number === 1 && event.keyIdentifier === "Down")
    1657                 numberNearZero = true;
    1658             else if (number === -1 && event.keyIdentifier === "Up")
    1659                 numberNearZero = true;
    1660 
    1661             if (numberNearZero && event.altKey && arrowKeyPressed) {
    1662                 if (event.keyIdentifier === "Down")
    1663                     number = Math.ceil(number - 1);
    1664                 else
    1665                     number = Math.floor(number + 1);
    1666             } else {
    1667                 // Jump by 10 when shift is down or jump by 0.1 when near zero or Alt/Option is down.
    1668                 // Also jump by 10 for page up and down, or by 100 if shift is held with a page key.
    1669                 var changeAmount = 1;
    1670                 if (event.shiftKey && pageKeyPressed)
    1671                     changeAmount = 100;
    1672                 else if (event.shiftKey || pageKeyPressed)
    1673                     changeAmount = 10;
    1674                 else if (event.altKey || numberNearZero)
    1675                     changeAmount = 0.1;
    1676 
    1677                 if (event.keyIdentifier === "Down" || event.keyIdentifier === "PageDown")
    1678                     changeAmount *= -1;
    1679 
    1680                 // Make the new number and constrain it to a precision of 6, this matches numbers the engine returns.
    1681                 // Use the Number constructor to forget the fixed precision, so 1.100000 will print as 1.1.
    1682                 number = Number((number + changeAmount).toFixed(6));
    1683             }
     1652            prefix = matches[1];
     1653            suffix = matches[3];
     1654            number = this._alteredHexNumber(matches[2], event);
    16841655
    16851656            replacementString = prefix + number + suffix;
    1686 
     1657        } else {
     1658            matches = /(.*?)(-?(?:\d+(?:\.\d+)?|\.\d+))(.*)/.exec(wordString);
     1659            if (matches && matches.length) {
     1660                prefix = matches[1];
     1661                suffix = matches[3];
     1662                number = this._alteredFloatNumber(parseFloat(matches[2]), event);
     1663
     1664                replacementString = prefix + number + suffix;
     1665            }
     1666        }
     1667
     1668        if (replacementString) {
    16871669            var replacementTextNode = document.createTextNode(replacementString);
    16881670
     
    17091691            this.applyStyleText(this.nameElement.textContent + ": " + this.valueElement.textContent);
    17101692        }
     1693    },
     1694
     1695    _alteredFloatNumber: function(number, event)
     1696    {
     1697        var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down");
     1698        // If the number is near zero or the number is one and the direction will take it near zero.
     1699        var numberNearZero = (number < 1 && number > -1);
     1700        if (number === 1 && event.keyIdentifier === "Down")
     1701            numberNearZero = true;
     1702        else if (number === -1 && event.keyIdentifier === "Up")
     1703            numberNearZero = true;
     1704
     1705        var result;
     1706        if (numberNearZero && event.altKey && arrowKeyPressed) {
     1707            if (event.keyIdentifier === "Down")
     1708                result = Math.ceil(number - 1);
     1709            else
     1710                result = Math.floor(number + 1);
     1711        } else {
     1712            // Jump by 10 when shift is down or jump by 0.1 when near zero or Alt/Option is down.
     1713            // Also jump by 10 for page up and down, or by 100 if shift is held with a page key.
     1714            var changeAmount = 1;
     1715            if (event.shiftKey && !arrowKeyPressed)
     1716                changeAmount = 100;
     1717            else if (event.shiftKey || !arrowKeyPressed)
     1718                changeAmount = 10;
     1719            else if (event.altKey || numberNearZero)
     1720                changeAmount = 0.1;
     1721
     1722            if (event.keyIdentifier === "Down" || event.keyIdentifier === "PageDown")
     1723                changeAmount *= -1;
     1724
     1725            // Make the new number and constrain it to a precision of 6, this matches numbers the engine returns.
     1726            // Use the Number constructor to forget the fixed precision, so 1.100000 will print as 1.1.
     1727            result = Number((number + changeAmount).toFixed(6));
     1728        }
     1729
     1730        return result;
     1731    },
     1732
     1733    _alteredHexNumber: function(hexString, event)
     1734    {
     1735        var number = parseInt(hexString, 16);
     1736        if (isNaN(number) || !isFinite(number))
     1737            return hexString;
     1738
     1739        var maxValue = Math.pow(16, hexString.length) - 1;
     1740        var arrowKeyPressed = (event.keyIdentifier === "Up" || event.keyIdentifier === "Down");
     1741
     1742        var delta;
     1743        if (arrowKeyPressed)
     1744            delta = (event.keyIdentifier === "Up") ? 1 : -1;
     1745        else
     1746            delta = (event.keyIdentifier === "PageUp") ? 16 : -16;
     1747
     1748        if (event.shiftKey)
     1749            delta *= 16;
     1750
     1751        var result = number + delta;
     1752        if (result < 0)
     1753            result = 0; // Color hex values are never negative, so clamp to 0.
     1754        else if (result > maxValue)
     1755            return hexString;
     1756
     1757        // Ensure the result length is the same as the original hex value.
     1758        var resultString = result.toString(16).toUpperCase();
     1759        for (var i = 0, lengthDelta = hexString.length - resultString.length; i < lengthDelta; ++i)
     1760            resultString = "0" + resultString;
     1761        return resultString;
    17111762    },
    17121763
Note: See TracChangeset for help on using the changeset viewer.