diff options
author | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-21 01:06:06 +0000 |
---|---|---|
committer | ojan@google.com <ojan@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2008-11-21 01:06:06 +0000 |
commit | 1da5be7443776464d14daff37f35ad1709ce9868 (patch) | |
tree | cc0626b005deb1b6d3fd68baea8938987ca1bc81 | |
parent | 876d21bcde61953d9e304a5bc107c800c597500f (diff) | |
download | chromium_src-1da5be7443776464d14daff37f35ad1709ce9868.zip chromium_src-1da5be7443776464d14daff37f35ad1709ce9868.tar.gz chromium_src-1da5be7443776464d14daff37f35ad1709ce9868.tar.bz2 |
Landing change by yury.semikhatsky@gmail.com to unfork inspector JS files.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@5808 0039d316-1c4b-4281-b951-d872f2087c98
32 files changed, 287 insertions, 12310 deletions
@@ -12,7 +12,7 @@ deps = { "http://googletest.googlecode.com/svn/trunk@63", "src/third_party/WebKit": - "/trunk/deps/third_party/WebKit@5802", + "/trunk/deps/third_party/WebKit@5806", "src/third_party/icu38": "/trunk/deps/third_party/icu38@5749", diff --git a/webkit/build/port/port.vcproj b/webkit/build/port/port.vcproj index 0a042f0..20200c5 100644 --- a/webkit/build/port/port.vcproj +++ b/webkit/build/port/port.vcproj @@ -204,446 +204,622 @@ Name="inspector" > <File - RelativePath="..\..\port\page\inspector\BreakpointsSidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Breakpoint.js" > </File> <File - RelativePath="..\..\port\page\inspector\CallStackSidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\BreakpointsSidebarPane.js" > </File> <File - RelativePath="..\..\port\page\inspector\Console.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\CallStackSidebarPane.js" > </File> <File - RelativePath="..\..\port\page\inspector\Database.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Console.js" > </File> <File - RelativePath="..\..\port\page\inspector\DatabaseQueryView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Database.js" > </File> <File - RelativePath="..\..\port\page\inspector\DatabasesPanel.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\DatabaseQueryView.js" > </File> <File - RelativePath="..\..\port\page\inspector\DatabaseTableView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\DatabasesPanel.js" > </File> <File - RelativePath="..\..\port\page\inspector\ElementsPanel.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\DatabaseTableView.js" > </File> <File - RelativePath="..\..\port\page\inspector\FontView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\DataGrid.js" > </File> <File - RelativePath="..\..\port\page\inspector\ImageView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ElementsPanel.js" > </File> <File - RelativePath="..\..\port\page\inspector\inspector.css" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ElementsTreeOutline.js" > </File> <File - RelativePath="..\..\port\page\inspector\inspector.html" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\FontView.js" > </File> <File - RelativePath="..\..\port\page\inspector\inspector.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ImageView.js" > </File> <File - RelativePath="..\..\port\page\inspector\MetricsSidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\inspector.css" > </File> <File - RelativePath="..\..\port\page\inspector\Panel.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\inspector.html" > </File> <File - RelativePath="..\..\port\page\inspector\PropertiesSection.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\inspector.js" > </File> <File - RelativePath="..\..\port\page\inspector\PropertiesSidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\MetricsSidebarPane.js" > </File> <File - RelativePath="..\..\port\page\inspector\Resource.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Object.js" > </File> <File - RelativePath="..\..\port\page\inspector\ResourceCategory.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ObjectPropertiesSection.js" > </File> <File - RelativePath="..\..\port\page\inspector\ResourcesPanel.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Panel.js" > </File> <File - RelativePath="..\..\port\page\inspector\ResourceView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\PanelEnablerView.js" > </File> <File - RelativePath="..\..\port\page\inspector\ScriptsPanel.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Placard.js" > </File> <File - RelativePath="..\..\port\page\inspector\SidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ProfilesPanel.js" > </File> <File - RelativePath="..\..\port\page\inspector\SidebarTreeElement.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ProfileView.js" > </File> <File - RelativePath="..\..\port\page\inspector\SourceView.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\PropertiesSection.js" > </File> <File - RelativePath="..\..\port\page\inspector\StylesSidebarPane.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\PropertiesSidebarPane.js" > </File> <File - RelativePath="..\..\port\page\inspector\TextPrompt.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Resource.js" > </File> <File - RelativePath="..\..\port\page\inspector\treeoutline.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ResourceCategory.js" > </File> <File - RelativePath="..\..\port\page\inspector\utilities.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ResourcesPanel.js" > </File> <File - RelativePath="..\..\port\page\inspector\View.js" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ResourceView.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ScopeChainSidebarPane.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Script.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ScriptsPanel.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\ScriptView.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\SidebarPane.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\SidebarTreeElement.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\SourceFrame.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\SourceView.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\StylesSidebarPane.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\TextPrompt.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\treeoutline.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\utilities.js" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\View.js" > </File> <Filter Name="images" > <File - RelativePath="..\..\port\page\inspector\Images\back.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\back.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\checker.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\clearConsoleButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\closeButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\consoleButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\database.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\databasesIcon.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\databaseTable.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\debuggerContinue.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\debuggerPause.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\debuggerStepInto.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\debuggerStepOut.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\debuggerStepOver.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallDown.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallDownBlack.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallDownWhite.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRight.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRightBlack.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRightDown.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRightDownBlack.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRightDownWhite.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\disclosureTriangleSmallRightWhite.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\dockButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\elementsIcon.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\enableButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\errorIcon.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\errorMediumIcon.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\excludeButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\focusButtons.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\forward.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\glossyHeader.png" + > + </File> + <File + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\glossyHeaderPressed.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\checker.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\glossyHeaderSelected.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\clearConsoleButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\glossyHeaderSelectedPressed.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\consoleButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\goArrow.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\database.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\graphLabelCalloutLeft.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\databasesIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\graphLabelCalloutRight.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\databaseTable.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\largerResourcesButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggerContinue.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\nodeSearchButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggerPause.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\paneBottomGrow.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggerStepInto.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\paneBottomGrowActive.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggerStepOut.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\paneGrowHandleLine.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggerStepOver.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\pauseOnExceptionButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\debuggingButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\percentButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallDown.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\profileGroupIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallDownBlack.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\profileIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallDownWhite.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\profilesIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRight.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\profileSmallIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRightBlack.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\profilesSilhouette.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRightDown.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\recordButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRightDownBlack.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\reloadButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRightDownWhite.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourceCSSIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\disclosureTriangleSmallRightWhite.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourceDocumentIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\dockButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourceDocumentIconSmall.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\elementsIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourceJSIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\errorIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourcePlainIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\errorMediumIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourcePlainIconSmall.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\forward.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourcesIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\glossyHeader.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourcesSizeGraphIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\glossyHeaderPressed.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\resourcesTimeGraphIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\goArrow.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\scriptsIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\largerResourcesButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\scriptsSilhouette.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\paneBottomGrow.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\searchSmallBlue.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\paneBottomGrowActive.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\searchSmallBrightBlue.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\paneGrowHandleLine.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\searchSmallGray.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourceCSSIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\searchSmallWhite.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourceDocumentIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segment.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourceDocumentIconSmall.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segmentEnd.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourceJSIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segmentHover.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourcePlainIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segmentHoverEnd.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourcePlainIconSmall.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segmentSelected.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourcesIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\segmentSelectedEnd.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourcesSizeGraphIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\splitviewDimple.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\resourcesTimeGraphIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\splitviewDividerBackground.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\scriptsIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarBackground.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segment.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarBottomBackground.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segmentEnd.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarButtons.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segmentHover.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarMenuButton.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segmentHoverEnd.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarMenuButtonSelected.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segmentSelected.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarResizerHorizontal.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\segmentSelectedEnd.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\statusbarResizerVertical.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\splitviewDimple.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillBlue.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\splitviewDividerBackground.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillGray.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarBackground.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillGreen.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarBottomBackground.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillOrange.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarButtons.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillPurple.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarMenuButton.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillRed.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarMenuButtonSelected.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelineHollowPillYellow.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarResizerHorizontal.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillBlue.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\statusbarResizerVertical.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillGray.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillBlue.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillGreen.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillGray.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillOrange.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillGreen.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillPurple.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillOrange.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillRed.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillPurple.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\timelinePillYellow.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillRed.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\tipBalloon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\timelinePillYellow.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\tipBalloonBottom.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\tipBalloon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\tipIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\tipBalloonBottom.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\tipIconPressed.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\tipIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\toolbarItemSelected.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\tipIconPressed.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeDownTriangleBlack.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\toolbarItemSelected.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeDownTriangleWhite.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\treeDownTriangleBlack.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeRightTriangleBlack.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\treeDownTriangleWhite.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeRightTriangleWhite.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\treeRightTriangleBlack.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeUpTriangleBlack.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\treeRightTriangleWhite.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\treeUpTriangleWhite.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\userInputIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\userInputIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\userInputPreviousIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\userInputPreviousIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\warningIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\warningIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\warningMediumIcon.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\warningMediumIcon.png" > </File> <File - RelativePath="..\..\port\page\inspector\Images\warningsErrors.png" + RelativePath="..\..\..\third_party\WebKit\WebCore\inspector\front-end\Images\warningsErrors.png" > </File> </Filter> diff --git a/webkit/port/page/inspector/BreakpointsSidebarPane.js b/webkit/port/page/inspector/BreakpointsSidebarPane.js index 3bb33dc..e69de29 100644 --- a/webkit/port/page/inspector/BreakpointsSidebarPane.js +++ b/webkit/port/page/inspector/BreakpointsSidebarPane.js @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.BreakpointsSidebarPane = function() -{ - WebInspector.SidebarPane.call(this, WebInspector.UIString("Breakpoints")); -} - -WebInspector.BreakpointsSidebarPane.prototype = { - -} - -WebInspector.BreakpointsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; diff --git a/webkit/port/page/inspector/CallStackSidebarPane.js b/webkit/port/page/inspector/CallStackSidebarPane.js index 849e562d..e69de29 100644 --- a/webkit/port/page/inspector/CallStackSidebarPane.js +++ b/webkit/port/page/inspector/CallStackSidebarPane.js @@ -1,35 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.CallStackSidebarPane = function() -{ - WebInspector.SidebarPane.call(this, WebInspector.UIString("Call Stack")); -} - -WebInspector.CallStackSidebarPane.prototype = { - -} - -WebInspector.CallStackSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; diff --git a/webkit/port/page/inspector/Console.js b/webkit/port/page/inspector/Console.js index 18e3537..e69de29 100644 --- a/webkit/port/page/inspector/Console.js +++ b/webkit/port/page/inspector/Console.js @@ -1,701 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.Console = function() -{ - this.messages = []; - - WebInspector.View.call(this, document.getElementById("console")); - - this.messagesElement = document.getElementById("console-messages"); - this.messagesElement.addEventListener("selectstart", this._messagesSelectStart.bind(this), false); - this.messagesElement.addEventListener("click", this._messagesClicked.bind(this), true); - - // The messagesElement is the focusable element so clicking anywhere in the - // console area will focus the prompt. - this.messagesElement.focused = this._messagesFocused.bind(this); - this.messagesElement.handleKeyEvent = this._promptKeyDown.bind(this); - - this.promptElement = document.getElementById("console-prompt"); - this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " .=:[({;"); - - this.toggleButton = document.getElementById("console-status-bar-item"); - this.toggleButton.title = WebInspector.UIString("Show console."); - this.toggleButton.addEventListener("click", this._toggleButtonClicked.bind(this), false); - - this.clearButton = document.getElementById("clear-console-status-bar-item"); - this.clearButton.title = WebInspector.UIString("Clear console log."); - this.clearButton.addEventListener("click", this._clearButtonClicked.bind(this), false); - - document.getElementById("main-status-bar").addEventListener("mousedown", this._startStatusBarDragging.bind(this), true); -} - -WebInspector.Console.prototype = { - show: function() - { - if (this._animating || this.visible) - return; - - WebInspector.View.prototype.show.call(this); - - this._animating = true; - - this.toggleButton.addStyleClass("toggled-on"); - this.toggleButton.title = WebInspector.UIString("Hide console."); - - document.body.addStyleClass("console-visible"); - - var anchoredItems = document.getElementById("anchored-status-bar-items"); - // Temporally set properties and classes to mimic the post-animation values so panels - // like Elements in their updateStatusBarItems call will size things to fit the final location. - document.getElementById("main-status-bar").style.setProperty("padding-left", (anchoredItems.offsetWidth - 1) + "px"); - document.body.removeStyleClass("console-visible"); - if ("updateStatusBarItems" in WebInspector.currentPanel) - WebInspector.currentPanel.updateStatusBarItems(); - document.body.addStyleClass("console-visible"); - var animations = [ - {element: document.getElementById("main"), end: {bottom: this.element.offsetHeight}}, - {element: document.getElementById("main-status-bar"), start: {"padding-left": anchoredItems.offsetWidth - 1}, end: {"padding-left": 0}}, - {element: document.getElementById("other-console-status-bar-items"), start: {opacity: 0}, end: {opacity: 1}} - ]; - - var consoleStatusBar = document.getElementById("console-status-bar"); - consoleStatusBar.insertBefore(anchoredItems, consoleStatusBar.firstChild); - - function animationFinished() - { - if ("updateStatusBarItems" in WebInspector.currentPanel) - WebInspector.currentPanel.updateStatusBarItems(); - WebInspector.currentFocusElement = this.messagesElement; - delete this._animating; - } - - WebInspector.animateStyle(animations, window.event && window.event.shiftKey ? 2000 : 250, animationFinished.bind(this)); - - if (!this.prompt.isCaretInsidePrompt()) - this.prompt.moveCaretToEndOfPrompt(); - }, - - hide: function() - { - if (this._animating || !this.visible) - return; - - WebInspector.View.prototype.hide.call(this); - - this._animating = true; - - this.toggleButton.removeStyleClass("toggled-on"); - this.toggleButton.title = WebInspector.UIString("Show console."); - - if (WebInspector.currentFocusElement === this.messagesElement) - WebInspector.currentFocusElement = this._previousFocusElement; - delete this._previousFocusElement; - - var anchoredItems = document.getElementById("anchored-status-bar-items"); - - var animations = [ - {element: document.getElementById("main"), end: {bottom: 0}}, - {element: document.getElementById("main-status-bar"), start: {"padding-left": 0}, end: {"padding-left": anchoredItems.offsetWidth - 1}}, - {element: document.getElementById("other-console-status-bar-items"), start: {opacity: 1}, end: {opacity: 0}} - ]; - - function animationFinished() - { - var mainStatusBar = document.getElementById("main-status-bar"); - mainStatusBar.insertBefore(anchoredItems, mainStatusBar.firstChild); - mainStatusBar.style.removeProperty("padding-left"); - document.body.removeStyleClass("console-visible"); - delete this._animating; - } - - WebInspector.animateStyle(animations, window.event && window.event.shiftKey ? 2000 : 250, animationFinished.bind(this)); - }, - - addMessage: function(msg) - { - if (msg.url in WebInspector.resourceURLMap) { - msg.resource = WebInspector.resourceURLMap[msg.url]; - WebInspector.panels.resources.addMessageToResource(msg.resource, msg); - } else { - // If the resource was loaded before the inspector, we still want to - // add to the global error/warning counts. Normally, this is done - // through the resource. - switch (msg.level) { - case WebInspector.ConsoleMessage.MessageLevel.Warning: - ++WebInspector.warnings; - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - ++WebInspector.errors; - break; - } - } - - this.messages.push(msg); - - var element = msg.toMessageElement(); - this.messagesElement.insertBefore(element, this.promptElement); - this.promptElement.scrollIntoView(false); - }, - - clearMessages: function() - { - WebInspector.panels.resources.clearMessages(); - - this.messages = []; - - while (this.messagesElement.firstChild != this.promptElement) - this.messagesElement.removeChild(this.messagesElement.firstChild); - - // Note: If the resources are loaded, panels.resources.clearMessages() - // will reset each resource's warning/error count to 0, which will in - // turn reset the global counters. But if we don't have the resources - // loaded, then this needs to be done manually here. We could do this - // only in the case of !WebInspector.panels.resources, but there are - // edge cases to handle with some resources loaded and some not, and - // since this is just a reset to 0, its safe to do it twice. - WebInspector.warnings = 0; - WebInspector.errors = 0; - }, - - completions: function(wordRange, bestMatchOnly) - { - // Pass less characters to scanBackwards so the range will be a more complete expression. - var expression = this.prompt.scanBackwards(" =:{;", wordRange.startContainer, wordRange.startOffset); - var expressionString = expression.toString(); - var lastIndex = expressionString.length - 1; - - var dotNotation = (expressionString[lastIndex] === "."); - var bracketNotation = (expressionString[lastIndex] === "["); - - if (dotNotation || bracketNotation) - expressionString = expressionString.substr(0, lastIndex); - - var prefix = wordRange.toString(); - if (!expressionString && !prefix) - return; - - var result = InspectorController.inspectedWindow(); - if (expressionString) { - try { - result = this._evalInInspectedWindow(expressionString); - } catch(e) { - // Do nothing, the prefix will be considered a window property. - } - } - - if (bracketNotation) { - if (prefix.length && prefix[0] === "'") - var quoteUsed = "'"; - else - var quoteUsed = "\""; - } - - var results = []; - var properties = Object.sortedProperties(result); - for (var i = 0; i < properties.length; ++i) { - var property = properties[i]; - if (bracketNotation) - property = quoteUsed + property.escapeCharacters(quoteUsed + "\\") + quoteUsed + "]"; - if (property.length < prefix.length) - continue; - if (property.indexOf(prefix) !== 0) - continue; - results.push(property); - if (bestMatchOnly) - break; - } - - return results; - }, - - _toggleButtonClicked: function() - { - this.visible = !this.visible; - }, - - _clearButtonClicked: function() - { - this.clearMessages(); - }, - - _messagesSelectStart: function(event) - { - if (this._selectionTimeout) - clearTimeout(this._selectionTimeout); - - this.prompt.clearAutoComplete(); - - function moveBackIfOutside() - { - delete this._selectionTimeout; - if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) - this.prompt.moveCaretToEndOfPrompt(); - this.prompt.autoCompleteSoon(); - } - - this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); - }, - - _messagesClicked: function(event) - { - var link = event.target.enclosingNodeOrSelfWithNodeName("a"); - if (!link) { - return; - } else if (!link.representedNode) { - // TODO(jparent): Be more user friendly here. Can we at least - // navigate to a cached view of the resource? - alert("Please load this page with the inspector open to view resources."); - event.preventDefault(); - return; - } - - WebInspector.updateFocusedNode(link.representedNode); - event.stopPropagation(); - event.preventDefault(); - }, - - _promptKeyDown: function(event) - { - switch (event.keyIdentifier) { - case "Enter": - this._enterKeyPressed(event); - return; - } - - this.prompt.handleKeyEvent(event); - }, - - _messagesFocused: function(previousFocusElement) - { - this._previousFocusElement = previousFocusElement; - if (!this.prompt.isCaretInsidePrompt()) - this.prompt.moveCaretToEndOfPrompt(); - }, - - _startStatusBarDragging: function(event) - { - if (!this.visible || event.target !== document.getElementById("main-status-bar")) - return; - - WebInspector.elementDragStart(document.getElementById("main-status-bar"), this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, "row-resize"); - - this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop; - - event.stopPropagation(); - }, - - _statusBarDragging: function(event) - { - var mainElement = document.getElementById("main"); - - var height = window.innerHeight - event.pageY + this._statusBarDragOffset; - height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - mainElement.totalOffsetTop - Preferences.minConsoleHeight); - - mainElement.style.bottom = height + "px"; - this.element.style.height = height + "px"; - - event.preventDefault(); - event.stopPropagation(); - }, - - _endStatusBarDragging: function(event) - { - WebInspector.elementDragEnd(event); - - delete this._statusBarDragOffset; - - event.stopPropagation(); - }, - - _evalInInspectedWindow: function(expression) - { - return InspectorController.inspectedWindow().eval(expression); - }, - - _enterKeyPressed: function(event) - { - if (event.altKey) - return; - - event.preventDefault(); - event.stopPropagation(); - - this.prompt.clearAutoComplete(true); - - var str = this.prompt.text; - if (!str.length) - return; - - var result; - var exception = false; - try { - result = this._evalInInspectedWindow(str); - } catch(e) { - result = e; - exception = true; - } - - this.prompt.history.push(str); - this.prompt.historyOffset = 0; - this.prompt.text = ""; - - var level = exception ? WebInspector.ConsoleMessage.MessageLevel.Error : WebInspector.ConsoleMessage.MessageLevel.Log; - this.addMessage(new WebInspector.ConsoleCommand(str, result, this._format(result), level)); - }, - - _format: function(output, plaintext) - { - var type = Object.type(output, InspectorController.inspectedWindow()); - if (type === "object") { - if (output instanceof InspectorController.inspectedWindow().Node) - type = "node"; - } - - // We don't perform any special formatting on these types, so we just - // pass them through the simple _formatvalue function. - var undecoratedTypes = { - "undefined": 1, - "null": 1, - "boolean": 1, - "number": 1, - "date": 1, - "function": 1, - }; - - var formatter; - if (type in undecoratedTypes) - formatter = "_formatvalue"; - else { - formatter = "_format" + type; - if (!(formatter in this)) { - formatter = "_formatobject"; - type = "object"; - } - } - - var span = document.createElement("span"); - span.addStyleClass("console-formatted-" + type); - this[formatter](output, span, plaintext); - return span; - }, - - _formatvalue: function(val, elem, plaintext) - { - elem.appendChild(document.createTextNode(val)); - }, - - _formatstring: function(str, elem, plaintext) - { - elem.appendChild(document.createTextNode("\"" + str + "\"")); - }, - - _formatregexp: function(re, elem, plaintext) - { - var formatted = String(re).replace(/([\\\/])/g, "\\$1").replace(/\\(\/[gim]*)$/, "$1").substring(1); - elem.appendChild(document.createTextNode(formatted)); - }, - - _formatarray: function(arr, elem, plaintext) - { - elem.appendChild(document.createTextNode("[")); - for (var i = 0; i < arr.length; ++i) { - elem.appendChild(this._format(arr[i])); - if (i < arr.length - 1) - elem.appendChild(document.createTextNode(", ")); - } - elem.appendChild(document.createTextNode("]")); - }, - - _formatnode: function(node, elem, plaintext) - { - var anchor = document.createElement("a"); - anchor.innerHTML = nodeTitleInfo.call(node).title; - anchor.representedNode = node; - anchor.addEventListener("mouseover", function() { WebInspector.highlightDOMNode(node) }, false); - anchor.addEventListener("mouseout", function() { WebInspector.hideDOMNodeHighlight() }, false); - elem.appendChild(anchor); - }, - - _formatobject: function(obj, elem, plaintext) - { - elem.appendChild(document.createTextNode(Object.describe(obj))); - }, - - _formaterror: function(obj, elem, plaintext) - { - elem.appendChild(document.createTextNode(obj.name + ": " + obj.message + " ")); - - if (obj.sourceURL) { - var urlElement = document.createElement("a"); - urlElement.className = "console-message-url webkit-html-resource-link"; - urlElement.href = obj.sourceURL; - urlElement.lineNumber = obj.line; - - if (obj.line > 0) - urlElement.textContent = WebInspector.UIString("%s (line %d)", obj.sourceURL, obj.line); - else - urlElement.textContent = obj.sourceURL; - - elem.appendChild(urlElement); - } - }, -} - -WebInspector.Console.prototype.__proto__ = WebInspector.View.prototype; - -WebInspector.ConsoleMessage = function(source, level, line, url) -{ - this.source = source; - this.level = level; - this.line = line; - this.url = url; - - // This _format call passes in true for the plainText argument. The result's textContent is - // used for inline message bubbles in SourceFrames, or other plain-text representations. - this.message = this._format(Array.prototype.slice.call(arguments, 4), true).textContent; - - // The formatedMessage property is used for the rich and interactive console. - this.formattedMessage = this._format(Array.prototype.slice.call(arguments, 4), false); -} - -WebInspector.ConsoleMessage.prototype = { - _format: function(parameters, plaintext) - { - var formattedResult = document.createElement("span"); - - if (!parameters.length) - return formattedResult; - - function formatForConsole(obj) - { - return WebInspector.console._format(obj, plaintext); - } - - if (Object.type(parameters[0], InspectorController.inspectedWindow()) === "string") { - var formatters = {} - for (var i in String.standardFormatters) - formatters[i] = String.standardFormatters[i]; - - // Firebug uses %o for formatting objects. - formatters.o = formatForConsole; - // Firebug allows both %i and %d for formatting integers. - formatters.i = formatters.d; - - function append(a, b) - { - if (!(b instanceof Node)) - b = document.createTextNode(b); - - a.appendChild(b); - return a; - } - - var result = String.format(parameters[0], parameters.slice(1), formatters, formattedResult, append); - formattedResult = result.formattedResult; - parameters = result.unusedSubstitutions; - if (parameters.length) - formattedResult.appendChild(document.createTextNode(" ")); - } - - for (var i = 0; i < parameters.length; ++i) { - formattedResult.appendChild(formatForConsole(parameters[i])); - if (i < parameters.length - 1) - formattedResult.appendChild(document.createTextNode(" ")); - } - return formattedResult; - }, - - get shortURL() - { - if (this.resource) - return this.resource.displayName; - return this.url; - }, - - toMessageElement: function() - { - var element = document.createElement("div"); - element.message = this; - element.className = "console-message"; - - switch (this.source) { - case WebInspector.ConsoleMessage.MessageSource.HTML: - element.addStyleClass("console-html-source"); - break; - case WebInspector.ConsoleMessage.MessageSource.XML: - element.addStyleClass("console-xml-source"); - break; - case WebInspector.ConsoleMessage.MessageSource.JS: - element.addStyleClass("console-js-source"); - break; - case WebInspector.ConsoleMessage.MessageSource.CSS: - element.addStyleClass("console-css-source"); - break; - case WebInspector.ConsoleMessage.MessageSource.Other: - element.addStyleClass("console-other-source"); - break; - } - - switch (this.level) { - case WebInspector.ConsoleMessage.MessageLevel.Tip: - element.addStyleClass("console-tip-level"); - break; - case WebInspector.ConsoleMessage.MessageLevel.Log: - element.addStyleClass("console-log-level"); - break; - case WebInspector.ConsoleMessage.MessageLevel.Warning: - element.addStyleClass("console-warning-level"); - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - element.addStyleClass("console-error-level"); - } - - var messageTextElement = document.createElement("span"); - messageTextElement.className = "console-message-text"; - messageTextElement.appendChild(this.formattedMessage); - element.appendChild(messageTextElement); - - element.appendChild(document.createTextNode(" ")); - - if (this.url && this.url !== "undefined") { - var urlElement = document.createElement("a"); - urlElement.className = "console-message-url webkit-html-resource-link"; - urlElement.href = this.url; - urlElement.lineNumber = this.line; - - if (this.line > 0) - urlElement.textContent = WebInspector.UIString("%s (line %d)", this.url, this.line); - else - urlElement.textContent = this.url; - - element.appendChild(urlElement); - } - - return element; - }, - - toString: function() - { - var sourceString; - switch (this.source) { - case WebInspector.ConsoleMessage.MessageSource.HTML: - sourceString = "HTML"; - break; - case WebInspector.ConsoleMessage.MessageSource.XML: - sourceString = "XML"; - break; - case WebInspector.ConsoleMessage.MessageSource.JS: - sourceString = "JS"; - break; - case WebInspector.ConsoleMessage.MessageSource.CSS: - sourceString = "CSS"; - break; - case WebInspector.ConsoleMessage.MessageSource.Other: - sourceString = "Other"; - break; - } - - var levelString; - switch (this.level) { - case WebInspector.ConsoleMessage.MessageLevel.Tip: - levelString = "Tip"; - break; - case WebInspector.ConsoleMessage.MessageLevel.Log: - levelString = "Log"; - break; - case WebInspector.ConsoleMessage.MessageLevel.Warning: - levelString = "Warning"; - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - levelString = "Error"; - break; - } - - return sourceString + " " + levelString + ": " + this.formattedMessage.textContent + "\n" + this.url + " line " + this.line; - } -} - -// Note: Keep these constants in sync with the ones in Chrome.h -WebInspector.ConsoleMessage.MessageSource = { - HTML: 0, - XML: 1, - JS: 2, - CSS: 3, - Other: 4, -} - -WebInspector.ConsoleMessage.MessageLevel = { - Tip: 0, - Log: 1, - Warning: 2, - Error: 3 -} - -WebInspector.ConsoleCommand = function(command, result, formattedResultElement, level) -{ - this.command = command; - this.formattedResultElement = formattedResultElement; - this.level = level; -} - -WebInspector.ConsoleCommand.prototype = { - toMessageElement: function() - { - var element = document.createElement("div"); - element.command = this; - element.className = "console-user-command"; - - var commandTextElement = document.createElement("span"); - commandTextElement.className = "console-message-text"; - commandTextElement.textContent = this.command; - element.appendChild(commandTextElement); - - var resultElement = document.createElement("div"); - resultElement.className = "console-message"; - element.appendChild(resultElement); - - switch (this.level) { - case WebInspector.ConsoleMessage.MessageLevel.Log: - resultElement.addStyleClass("console-log-level"); - break; - case WebInspector.ConsoleMessage.MessageLevel.Warning: - resultElement.addStyleClass("console-warning-level"); - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - resultElement.addStyleClass("console-error-level"); - } - - var resultTextElement = document.createElement("span"); - resultTextElement.className = "console-message-text"; - resultTextElement.appendChild(this.formattedResultElement); - resultElement.appendChild(resultTextElement); - - return element; - } -} diff --git a/webkit/port/page/inspector/Database.js b/webkit/port/page/inspector/Database.js index ef42e15..e69de29 100644 --- a/webkit/port/page/inspector/Database.js +++ b/webkit/port/page/inspector/Database.js @@ -1,95 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.Database = function(database, domain, name, version) -{ - this.database = database; - this.domain = domain; - this.name = name; - this.version = version; -} - -WebInspector.Database.prototype = { - get database() - { - return this._database; - }, - - set database(x) - { - if (this._database === x) - return; - this._database = x; - }, - - get name() - { - return this._name; - }, - - set name(x) - { - if (this._name === x) - return; - this._name = x; - }, - - get version() - { - return this._version; - }, - - set version(x) - { - if (this._version === x) - return; - this._version = x; - }, - - get domain() - { - return this._domain; - }, - - set domain(x) - { - if (this._domain === x) - return; - this._domain = x; - }, - - get displayDomain() - { - return WebInspector.Resource.prototype.__lookupGetter__("displayDomain").call(this); - }, - - get tableNames() - { - return InspectorController.databaseTableNames(this.database).sort(); - } -} diff --git a/webkit/port/page/inspector/DatabaseQueryView.js b/webkit/port/page/inspector/DatabaseQueryView.js index c5792af..e69de29 100644 --- a/webkit/port/page/inspector/DatabaseQueryView.js +++ b/webkit/port/page/inspector/DatabaseQueryView.js @@ -1,200 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.DatabaseQueryView = function(database) -{ - WebInspector.View.call(this); - - this.database = database; - - this.element.addStyleClass("database-view"); - this.element.addStyleClass("query"); - this.element.addStyleClass("focusable"); - - this.element.addEventListener("selectstart", this._selectStart.bind(this), false); - this.element.focused = this._focused.bind(this); - this.element.handleKeyEvent = this._promptKeyDown.bind(this); - - this.promptElement = document.createElement("div"); - this.promptElement.className = "database-query-prompt"; - this.promptElement.appendChild(document.createElement("br")); - this.element.appendChild(this.promptElement); - - this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " "); -} - -WebInspector.DatabaseQueryView.prototype = { - show: function(parentElement) - { - WebInspector.View.prototype.show.call(this, parentElement); - - function moveBackIfOutside() - { - if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) - this.prompt.moveCaretToEndOfPrompt(); - } - - setTimeout(moveBackIfOutside.bind(this), 0); - }, - - completions: function(wordRange, bestMatchOnly) - { - var prefix = wordRange.toString().toLowerCase(); - if (!prefix.length) - return; - - var results = []; - - function accumulateMatches(textArray) - { - if (bestMatchOnly && results.length) - return; - for (var i = 0; i < textArray.length; ++i) { - var text = textArray[i].toLowerCase(); - if (text.length < prefix.length) - continue; - if (text.indexOf(prefix) !== 0) - continue; - results.push(textArray[i]); - if (bestMatchOnly) - return; - } - } - - accumulateMatches(this.database.tableNames.map(function(name) { return name + " " })); - accumulateMatches(["SELECT ", "FROM ", "WHERE ", "LIMIT ", "DELETE FROM ", "CREATE ", "DROP ", "TABLE ", "INDEX ", "UPDATE ", "INSERT INTO ", "VALUES ("]); - - return results; - }, - - _promptKeyDown: function(event) - { - switch (event.keyIdentifier) { - case "Enter": - this._enterKeyPressed(event); - return; - } - - this.prompt.handleKeyEvent(event); - }, - - _focused: function(previousFocusElement) - { - this._previousFocusElement = previousFocusElement; - if (!this.prompt.isCaretInsidePrompt()) - this.prompt.moveCaretToEndOfPrompt(); - }, - - _selectStart: function(event) - { - if (this._selectionTimeout) - clearTimeout(this._selectionTimeout); - - this.prompt.clearAutoComplete(); - - function moveBackIfOutside() - { - delete this._selectionTimeout; - if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed) - this.prompt.moveCaretToEndOfPrompt(); - this.prompt.autoCompleteSoon(); - } - - this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100); - }, - - _enterKeyPressed: function(event) - { - event.preventDefault(); - event.stopPropagation(); - - this.prompt.clearAutoComplete(true); - - var query = this.prompt.text; - if (!query.length) - return; - - this.prompt.history.push(query); - this.prompt.historyOffset = 0; - this.prompt.text = ""; - - function queryTransaction(tx) - { - tx.executeSql(query, null, InspectorController.wrapCallback(this._queryFinished.bind(this, query)), InspectorController.wrapCallback(this._queryError.bind(this, query))); - } - - this.database.database.transaction(InspectorController.wrapCallback(queryTransaction.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this, query))); - }, - - _queryFinished: function(query, tx, result) - { - this._appendQueryResult(query, WebInspector.panels.databases._tableForResult(result)); - - if (query.match(/^create /i) || query.match(/^drop table /i)) - WebInspector.panels.databases.updateDatabaseTables(this.database); - }, - - _queryError: function(query, tx, error) - { - if (error.code == 1) - var message = error.message; - else if (error.code == 2) - var message = WebInspector.UIString("Database no longer has expected version."); - else - var message = WebInspector.UIString("An unexpected error %s occured.", error.code); - - this._appendQueryResult(query, message, "error"); - }, - - _appendQueryResult: function(query, result, resultClassName) - { - var element = document.createElement("div"); - element.className = "database-user-query"; - - var commandTextElement = document.createElement("span"); - commandTextElement.className = "database-query-text"; - commandTextElement.textContent = query; - element.appendChild(commandTextElement); - - var resultElement = document.createElement("div"); - resultElement.className = "database-query-result"; - - if (resultClassName) - resultElement.addStyleClass(resultClassName); - - if (typeof result === "string" || result instanceof String) - resultElement.textContent = result; - else if (result && result.nodeName) - resultElement.appendChild(result); - - if (resultElement.childNodes.length) - element.appendChild(resultElement); - - this.element.insertBefore(element, this.promptElement); - this.promptElement.scrollIntoView(false); - } -} - -WebInspector.DatabaseQueryView.prototype.__proto__ = WebInspector.View.prototype; diff --git a/webkit/port/page/inspector/DatabaseTableView.js b/webkit/port/page/inspector/DatabaseTableView.js index ccf7590..e69de29 100644 --- a/webkit/port/page/inspector/DatabaseTableView.js +++ b/webkit/port/page/inspector/DatabaseTableView.js @@ -1,97 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.DatabaseTableView = function(database, tableName) -{ - WebInspector.View.call(this); - - this.database = database; - this.tableName = tableName; - - this.element.addStyleClass("database-view"); - this.element.addStyleClass("table"); -} - -WebInspector.DatabaseTableView.prototype = { - show: function(parentElement) - { - WebInspector.View.prototype.show.call(this, parentElement); - this.update(); - }, - - update: function() - { - function queryTransaction(tx) - { - tx.executeSql("SELECT * FROM " + this.tableName, null, InspectorController.wrapCallback(this._queryFinished.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this))); - } - - this.database.database.transaction(InspectorController.wrapCallback(queryTransaction.bind(this)), InspectorController.wrapCallback(this._queryError.bind(this))); - }, - - _queryFinished: function(tx, result) - { - this.element.removeChildren(); - - var table = WebInspector.panels.databases._tableForResult(result); - if (!table) { - var emptyMsgElement = document.createElement("div"); - emptyMsgElement.className = "database-table-empty"; - emptyMsgElement.textContent = WebInspector.UIString("The “%s”\ntable is empty.", this.tableName); - this.element.appendChild(emptyMsgElement); - return; - } - - var rowCount = table.getElementsByTagName("tr").length; - var columnCount = table.getElementsByTagName("tr").item(0).getElementsByTagName("th").length; - - var tr = document.createElement("tr"); - tr.className = "database-result-filler-row"; - table.appendChild(tr); - - if (!(rowCount % 2)) - tr.addStyleClass("alternate"); - - for (var i = 0; i < columnCount; ++i) { - var td = document.createElement("td"); - tr.appendChild(td); - } - - this.element.appendChild(table); - }, - - _queryError: function(tx, error) - { - this.element.removeChildren(); - - var errorMsgElement = document.createElement("div"); - errorMsgElement.className = "database-table-error"; - errorMsgElement.textContent = WebInspector.UIString("An error occurred trying to\nread the “%s” table.", this.tableName); - this.element.appendChild(errorMsgElement); - }, - -} - -WebInspector.DatabaseTableView.prototype.__proto__ = WebInspector.View.prototype; diff --git a/webkit/port/page/inspector/DatabasesPanel.js b/webkit/port/page/inspector/DatabasesPanel.js index 79adab0..e69de29 100644 --- a/webkit/port/page/inspector/DatabasesPanel.js +++ b/webkit/port/page/inspector/DatabasesPanel.js @@ -1,367 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.DatabasesPanel = function(database) -{ - WebInspector.Panel.call(this); - - this.sidebarElement = document.createElement("div"); - this.sidebarElement.id = "databases-sidebar"; - this.sidebarElement.className = "sidebar"; - this.element.appendChild(this.sidebarElement); - - this.sidebarResizeElement = document.createElement("div"); - this.sidebarResizeElement.className = "sidebar-resizer-vertical"; - this.sidebarResizeElement.addEventListener("mousedown", this._startSidebarDragging.bind(this), false); - this.element.appendChild(this.sidebarResizeElement); - - this.sidebarTreeElement = document.createElement("ol"); - this.sidebarTreeElement.className = "sidebar-tree"; - this.sidebarElement.appendChild(this.sidebarTreeElement); - - this.sidebarTree = new TreeOutline(this.sidebarTreeElement); - - this.databaseViews = document.createElement("div"); - this.databaseViews.id = "database-views"; - this.element.appendChild(this.databaseViews); - - this.reset(); -} - -WebInspector.DatabasesPanel.prototype = { - toolbarItemClass: "databases", - - get toolbarItemLabel() - { - return WebInspector.UIString("Databases"); - }, - - show: function() - { - WebInspector.Panel.prototype.show.call(this); - this._updateSidebarWidth(); - }, - - reset: function() - { - if (this._databases) { - var databasesLength = this._databases.length; - for (var i = 0; i < databasesLength; ++i) { - var database = this._databases[i]; - - delete database._tableViews; - delete database._queryView; - } - } - - this._databases = []; - - this.sidebarTree.removeChildren(); - this.databaseViews.removeChildren(); - }, - - handleKeyEvent: function(event) - { - this.sidebarTree.handleKeyEvent(event); - }, - - addDatabase: function(database) - { - this._databases.push(database); - - var databaseTreeElement = new WebInspector.DatabaseSidebarTreeElement(database); - database._databasesTreeElement = databaseTreeElement; - - this.sidebarTree.appendChild(databaseTreeElement); - }, - - showDatabase: function(database, tableName) - { - if (!database) - return; - - if (this.visibleDatabaseView) - this.visibleDatabaseView.hide(); - - var view; - if (tableName) { - if (!("_tableViews" in database)) - database._tableViews = {}; - view = database._tableViews[tableName]; - if (!view) { - view = new WebInspector.DatabaseTableView(database, tableName); - database._tableViews[tableName] = view; - } - } else { - view = database._queryView; - if (!view) { - view = new WebInspector.DatabaseQueryView(database); - database._queryView = view; - } - } - - view.show(this.databaseViews); - - this.visibleDatabaseView = view; - }, - - closeVisibleView: function() - { - if (this.visibleDatabaseView) - this.visibleDatabaseView.hide(); - delete this.visibleDatabaseView; - }, - - updateDatabaseTables: function(database) - { - if (!database || !database._databasesTreeElement) - return; - - database._databasesTreeElement.shouldRefreshChildren = true; - - if (!("_tableViews" in database)) - return; - - var tableNamesHash = {}; - var tableNames = database.tableNames; - var tableNamesLength = tableNames.length; - for (var i = 0; i < tableNamesLength; ++i) - tableNamesHash[tableNames[i]] = true; - - for (var tableName in database._tableViews) { - if (!(tableName in tableNamesHash)) { - if (this.visibleDatabaseView === database._tableViews[tableName]) - this.closeVisibleView(); - delete database._tableViews[tableName]; - } - } - }, - - _tableForResult: function(result) - { - if (!result.rows.length) - return null; - - var rows = result.rows; - var length = rows.length; - var columnWidths = []; - - var table = document.createElement("table"); - table.className = "database-result-table"; - - var headerRow = document.createElement("tr"); - table.appendChild(headerRow); - - var j = 0; - for (var column in rows.item(0)) { - var th = document.createElement("th"); - headerRow.appendChild(th); - - var div = document.createElement("div"); - div.textContent = column; - div.title = column; - th.appendChild(div); - - columnWidths[j++] = column.length; - } - - for (var i = 0; i < length; ++i) { - var row = rows.item(i); - var tr = document.createElement("tr"); - if (i % 2) - tr.className = "alternate"; - table.appendChild(tr); - - var j = 0; - for (var column in row) { - var td = document.createElement("td"); - tr.appendChild(td); - - var text = row[column]; - var div = document.createElement("div"); - div.textContent = text; - div.title = text; - td.appendChild(div); - - if (text.length > columnWidths[j]) - columnWidths[j] = text.length; - ++j; - } - } - - var totalColumnWidths = 0; - length = columnWidths.length; - for (var i = 0; i < length; ++i) - totalColumnWidths += columnWidths[i]; - - // Calculate the percentage width for the columns. - var minimumPrecent = 5; - var recoupPercent = 0; - for (var i = 0; i < length; ++i) { - columnWidths[i] = Math.round((columnWidths[i] / totalColumnWidths) * 100); - if (columnWidths[i] < minimumPrecent) { - recoupPercent += (minimumPrecent - columnWidths[i]); - columnWidths[i] = minimumPrecent; - } - } - - // Enforce the minimum percentage width. - while (recoupPercent > 0) { - for (var i = 0; i < length; ++i) { - if (columnWidths[i] > minimumPrecent) { - --columnWidths[i]; - --recoupPercent; - if (!recoupPercent) - break; - } - } - } - - length = headerRow.childNodes.length; - for (var i = 0; i < length; ++i) { - var th = headerRow.childNodes[i]; - th.style.width = columnWidths[i] + "%"; - } - - return table; - }, - - _startSidebarDragging: function(event) - { - WebInspector.elementDragStart(this.sidebarResizeElement, this._sidebarDragging.bind(this), this._endSidebarDragging.bind(this), event, "col-resize"); - }, - - _sidebarDragging: function(event) - { - this._updateSidebarWidth(event.pageX); - - event.preventDefault(); - }, - - _endSidebarDragging: function(event) - { - WebInspector.elementDragEnd(event); - }, - - _updateSidebarWidth: function(width) - { - if (this.sidebarElement.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this._updateSidebarWidth.bind(this), 0, width); - return; - } - - if (!("_currentSidebarWidth" in this)) - this._currentSidebarWidth = this.sidebarElement.offsetWidth; - - if (typeof width === "undefined") - width = this._currentSidebarWidth; - - width = Number.constrain(width, Preferences.minSidebarWidth, window.innerWidth / 2); - - this._currentSidebarWidth = width; - - this.sidebarElement.style.width = width + "px"; - this.databaseViews.style.left = width + "px"; - this.sidebarResizeElement.style.left = (width - 3) + "px"; - } -} - -WebInspector.DatabasesPanel.prototype.__proto__ = WebInspector.Panel.prototype; - -WebInspector.DatabaseSidebarTreeElement = function(database) -{ - this.database = database; - - WebInspector.SidebarTreeElement.call(this, "database-sidebar-tree-item", "", "", database, true); - - this.refreshTitles(); -} - -WebInspector.DatabaseSidebarTreeElement.prototype = { - onselect: function() - { - WebInspector.panels.databases.showDatabase(this.database); - }, - - oncollapse: function() - { - // Request a refresh after every collapse so the next - // expand will have an updated table list. - this.shouldRefreshChildren = true; - }, - - onpopulate: function() - { - this.removeChildren(); - - var tableNames = this.database.tableNames; - var tableNamesLength = tableNames.length; - for (var i = 0; i < tableNamesLength; ++i) - this.appendChild(new WebInspector.SidebarDatabaseTableTreeElement(this.database, tableNames[i])); - }, - - get mainTitle() - { - return this.database.name; - }, - - set mainTitle(x) - { - // Do nothing. - }, - - get subtitle() - { - return this.database.displayDomain; - }, - - set subtitle(x) - { - // Do nothing. - } -} - -WebInspector.DatabaseSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; - -WebInspector.SidebarDatabaseTableTreeElement = function(database, tableName) -{ - this.database = database; - this.tableName = tableName; - - WebInspector.SidebarTreeElement.call(this, "database-table-sidebar-tree-item small", tableName, "", null, false); -} - -WebInspector.SidebarDatabaseTableTreeElement.prototype = { - onselect: function() - { - WebInspector.panels.databases.showDatabase(this.database, this.tableName); - } -} - -WebInspector.SidebarDatabaseTableTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; diff --git a/webkit/port/page/inspector/ElementsPanel.js b/webkit/port/page/inspector/ElementsPanel.js index 6a5978a..e69de29 100644 --- a/webkit/port/page/inspector/ElementsPanel.js +++ b/webkit/port/page/inspector/ElementsPanel.js @@ -1,1182 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.ElementsPanel = function() -{ - WebInspector.Panel.call(this); - - this.element.addStyleClass("elements"); - - this.contentElement = document.createElement("div"); - this.contentElement.id = "elements-content"; - this.contentElement.className = "outline-disclosure"; - - function clearNodeHighlight(event) - { - if (!event.relatedTarget || - !this.contentElement.isAncestor(event.relatedTarget) && - !this.crumbsElement.isAncestor(event.relatedTarget)) { - WebInspector.hideDOMNodeHighlight(); - } - } - - this.treeListElement = document.createElement("ol"); - this.treeListElement.addEventListener("mousedown", this._onmousedown.bind(this), false); - this.treeListElement.addEventListener("dblclick", this._ondblclick.bind(this), false); - this.treeListElement.addEventListener("mousemove", this._onmousemove.bind(this), false); - this.treeListElement.addEventListener("mouseout", clearNodeHighlight.bind(this), false); - - this.treeOutline = new TreeOutline(this.treeListElement); - this.treeOutline.panel = this; - - this.contentElement.appendChild(this.treeListElement); - - this.crumbsElement = document.createElement("div"); - this.crumbsElement.className = "crumbs"; - this.crumbsElement.addEventListener("mouseout", clearNodeHighlight.bind(this), false); - - this.sidebarPanes = {}; - this.sidebarPanes.styles = new WebInspector.StylesSidebarPane(); - this.sidebarPanes.metrics = new WebInspector.MetricsSidebarPane(); - this.sidebarPanes.properties = new WebInspector.PropertiesSidebarPane(); - - this.sidebarPanes.styles.onexpand = this.updateStyles.bind(this); - this.sidebarPanes.metrics.onexpand = this.updateMetrics.bind(this); - this.sidebarPanes.properties.onexpand = this.updateProperties.bind(this); - - this.sidebarPanes.styles.expanded = true; - - this.sidebarElement = document.createElement("div"); - this.sidebarElement.id = "elements-sidebar"; - - this.sidebarElement.appendChild(this.sidebarPanes.styles.element); - this.sidebarElement.appendChild(this.sidebarPanes.metrics.element); - this.sidebarElement.appendChild(this.sidebarPanes.properties.element); - - this.sidebarResizeElement = document.createElement("div"); - this.sidebarResizeElement.className = "sidebar-resizer-vertical"; - this.sidebarResizeElement.addEventListener("mousedown", this.rightSidebarResizerDragStart.bind(this), false); - - this.element.appendChild(this.contentElement); - this.element.appendChild(this.sidebarElement); - this.element.appendChild(this.sidebarResizeElement); - - this.reset(); -} - -WebInspector.ElementsPanel.prototype = { - toolbarItemClass: "elements", - - get toolbarItemLabel() - { - return WebInspector.UIString("Elements"); - }, - - get statusBarItems() - { - return [this.crumbsElement]; - }, - - updateStatusBarItems: function() - { - this.updateBreadcrumbSizes(); - }, - - show: function() - { - WebInspector.Panel.prototype.show.call(this); - this.sidebarResizeElement.style.right = (this.sidebarElement.offsetWidth - 3) + "px"; - this.updateBreadcrumb(); - this.updateTreeSelection(); - }, - - hide: function() - { - WebInspector.Panel.prototype.hide.call(this); - WebInspector.hideDOMNodeHighlight(); - }, - - resize: function() - { - this.updateTreeSelection(); - this.updateBreadcrumbSizes(); - }, - - reset: function() - { - this.rootDOMNode = null; - this.focusedDOMNode = null; - - var inspectedWindow = InspectorController.inspectedWindow(); - if (!inspectedWindow || !inspectedWindow.document) - return; - - if (!inspectedWindow.document.firstChild) { - // FIXME: This whole if block can be simplified once we can add an event listener to - // the inspected page and have it get called in the Inspector's context. - - var elementsPanel = this; - /* We don't implement wrapCallback yet (if ever) - var contentLoaded = InspectorController.wrapCallback(function() - { - // This function will be called in the inspected page's context. - elementsPanel._domContentLoaded = true; - }); - */ - var contentLoaded = function() - { - // This function will be called in the inspected page's context. - elementsPanel._domContentLoaded = true; - }; - - function checkContentLoaded() - { - if (!this._domContentLoaded) - return; - this.reset(); - inspectedWindow.document.removeEventListener("DOMContentLoaded", contentLoaded, false); - clearInterval(contentLoadedPollingInterval); - delete this._domContentLoaded; - } - - this._domContentLoaded = false; - var contentLoadedPollingInterval = setInterval(checkContentLoaded.bind(this), 100); - - inspectedWindow.document.addEventListener("DOMContentLoaded", contentLoaded, false); - return; - } - - var inspectedRootDocument = inspectedWindow.document; - this.rootDOMNode = inspectedRootDocument; - - var canidateFocusNode = inspectedRootDocument.body || inspectedRootDocument.documentElement; - if (canidateFocusNode) { - this.focusedDOMNode = canidateFocusNode; - if (this.treeOutline.selectedTreeElement) - this.treeOutline.selectedTreeElement.expand(); - } - }, - - updateTreeSelection: function() - { - if (!this.treeOutline || !this.treeOutline.selectedTreeElement) - return; - var element = this.treeOutline.selectedTreeElement; - element.updateSelection(); - }, - - get rootDOMNode() - { - return this._rootDOMNode; - }, - - set rootDOMNode(x) - { - if (this._rootDOMNode === x) - return; - - this._rootDOMNode = x; - - this.updateBreadcrumb(); - this.updateTreeOutline(); - }, - - get focusedDOMNode() - { - return this._focusedDOMNode; - }, - - set focusedDOMNode(x) - { - if (this._focusedDOMNode === x) { - var nodeItem = this.revealNode(x); - if (nodeItem) - nodeItem.select(); - return; - } - - this._focusedDOMNode = x; - - this._focusedNodeChanged(); - - var nodeItem = this.revealNode(x); - if (nodeItem) - nodeItem.select(); - }, - - _focusedNodeChanged: function(forceUpdate) - { - this.updateBreadcrumb(forceUpdate); - - for (var pane in this.sidebarPanes) - this.sidebarPanes[pane].needsUpdate = true; - - this.updateStyles(true); - this.updateMetrics(); - this.updateProperties(); - }, - - revealNode: function(node) - { - var nodeItem = this.treeOutline.findTreeElement(node, this._isAncestorIncludingParentFrames.bind(this), this._parentNodeOrFrameElement.bind(this)); - if (!nodeItem) - return; - - nodeItem.reveal(); - return nodeItem; - }, - - updateTreeOutline: function() - { - this.treeOutline.removeChildrenRecursive(); - - if (!this.rootDOMNode) - return; - - // FIXME: this could use findTreeElement to reuse a tree element if it already exists - var node = (Preferences.ignoreWhitespace ? firstChildSkippingWhitespace.call(this.rootDOMNode) : this.rootDOMNode.firstChild); - while (node) { - this.treeOutline.appendChild(new WebInspector.DOMNodeTreeElement(node)); - node = Preferences.ignoreWhitespace ? nextSiblingSkippingWhitespace.call(node) : node.nextSibling; - } - - this.updateTreeSelection(); - }, - - updateBreadcrumb: function(forceUpdate) - { - if (!this.visible) - return; - - var crumbs = this.crumbsElement; - - var handled = false; - var foundRoot = false; - var crumb = crumbs.firstChild; - while (crumb) { - if (crumb.representedObject === this.rootDOMNode) - foundRoot = true; - - if (foundRoot) - crumb.addStyleClass("dimmed"); - else - crumb.removeStyleClass("dimmed"); - - if (crumb.representedObject === this.focusedDOMNode) { - crumb.addStyleClass("selected"); - handled = true; - } else { - crumb.removeStyleClass("selected"); - } - - crumb = crumb.nextSibling; - } - - if (handled && !forceUpdate) { - // We don't need to rebuild the crumbs, but we need to adjust sizes - // to reflect the new focused or root node. - this.updateBreadcrumbSizes(); - return; - } - - crumbs.removeChildren(); - - var panel = this; - var selectCrumbFunction = function(event) { - var crumb = event.currentTarget; - if (crumb.hasStyleClass("collapsed")) { - // Clicking a collapsed crumb will expose the hidden crumbs. - if (crumb === panel.crumbsElement.firstChild) { - // If the focused crumb is the first child, pick the farthest crumb - // that is still hidden. This allows the user to expose every crumb. - var currentCrumb = crumb; - while (currentCrumb) { - var hidden = currentCrumb.hasStyleClass("hidden"); - var collapsed = currentCrumb.hasStyleClass("collapsed"); - if (!hidden && !collapsed) - break; - crumb = currentCrumb; - currentCrumb = currentCrumb.nextSibling; - } - } - - panel.updateBreadcrumbSizes(crumb); - } else { - // Clicking a dimmed crumb or double clicking (event.detail >= 2) - // will change the root node in addition to the focused node. - if (event.detail >= 2 || crumb.hasStyleClass("dimmed")) - panel.rootDOMNode = crumb.representedObject.parentNode; - panel.focusedDOMNode = crumb.representedObject; - } - - WebInspector.currentFocusElement = document.getElementById("main-panels"); - - event.preventDefault(); - }; - - var mouseOverCrumbFunction = function(event) { - if (event.currentTarget.isDescendant(event.relatedTarget)) { - return; - } - panel.mouseOverCrumb = true; - - WebInspector.highlightDOMNode(event.currentTarget.representedObject); - - if ("mouseOutTimeout" in panel) { - clearTimeout(panel.mouseOutTimeout); - delete panel.mouseOutTimeout; - } - }; - - var mouseOutCrumbFunction = function(event) { - if (event.currentTarget.isDescendant(event.relatedTarget) || - event.relatedTarget && event.relatedTarget.representedObject) { - return; - } - - delete panel.mouseOverCrumb; - - if ("mouseOutTimeout" in panel) { - clearTimeout(panel.mouseOutTimeout); - delete panel.mouseOutTimeout; - } - - var timeoutFunction = function() { - if (!panel.mouseOverCrumb) - panel.updateBreadcrumbSizes(); - }; - - panel.mouseOutTimeout = setTimeout(timeoutFunction, 500); - }; - - foundRoot = false; - for (var current = this.focusedDOMNode; current; current = this._parentNodeOrFrameElement(current)) { - if (current.nodeType === Node.DOCUMENT_NODE) - continue; - - if (current === this.rootDOMNode) - foundRoot = true; - - var crumb = document.createElement("span"); - crumb.className = "crumb"; - crumb.representedObject = current; - crumb.addEventListener("mousedown", selectCrumbFunction, false); - crumb.addEventListener("mouseover", mouseOverCrumbFunction.bind(crumb), false); - crumb.addEventListener("mouseout", mouseOutCrumbFunction, false); - - var crumbTitle; - switch (current.nodeType) { - case Node.ELEMENT_NODE: - crumbTitle = current.nodeName.toLowerCase(); - - var nameElement = document.createElement("span"); - nameElement.textContent = crumbTitle; - crumb.appendChild(nameElement); - - var idAttribute = current.getAttribute("id"); - if (idAttribute) { - var idElement = document.createElement("span"); - crumb.appendChild(idElement); - - var part = "#" + idAttribute; - crumbTitle += part; - idElement.appendChild(document.createTextNode(part)); - - // Mark the name as extra, since the ID is more important. - nameElement.className = "extra"; - } - - var classAttribute = current.getAttribute("class"); - if (classAttribute) { - var classes = classAttribute.split(/\s+/); - var foundClasses = {}; - - if (classes.length) { - var classesElement = document.createElement("span"); - classesElement.className = "extra"; - crumb.appendChild(classesElement); - - for (var i = 0; i < classes.length; ++i) { - var className = classes[i]; - if (className && !(className in foundClasses)) { - var part = "." + className; - crumbTitle += part; - classesElement.appendChild(document.createTextNode(part)); - foundClasses[className] = true; - } - } - } - } - - break; - - case Node.TEXT_NODE: - if (isNodeWhitespace.call(current)) - crumbTitle = WebInspector.UIString("(whitespace)"); - else - crumbTitle = WebInspector.UIString("(text)"); - break - - case Node.COMMENT_NODE: - crumbTitle = "<!-->"; - break; - - case Node.DOCUMENT_TYPE_NODE: - crumbTitle = "<!DOCTYPE>"; - break; - - default: - crumbTitle = current.nodeName.toLowerCase(); - } - - if (!crumb.childNodes.length) { - var nameElement = document.createElement("span"); - nameElement.textContent = crumbTitle; - crumb.appendChild(nameElement); - } - - crumb.title = crumbTitle; - - if (foundRoot) - crumb.addStyleClass("dimmed"); - if (current === this.focusedDOMNode) - crumb.addStyleClass("selected"); - if (!crumbs.childNodes.length) - crumb.addStyleClass("end"); - - crumbs.appendChild(crumb); - } - - if (crumbs.hasChildNodes()) - crumbs.lastChild.addStyleClass("start"); - - this.updateBreadcrumbSizes(); - }, - - updateBreadcrumbSizes: function(focusedCrumb) - { - if (!this.visible) - return; - - if (document.body.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this.updateBreadcrumbSizes.bind(this), 0); - return; - } - - var crumbs = this.crumbsElement; - if (!crumbs.childNodes.length || crumbs.offsetWidth <= 0) - return; // No crumbs, do nothing. - - // A Zero index is the right most child crumb in the breadcrumb. - var selectedIndex = 0; - var focusedIndex = 0; - var selectedCrumb; - - var i = 0; - var crumb = crumbs.firstChild; - while (crumb) { - // Find the selected crumb and index. - if (!selectedCrumb && crumb.hasStyleClass("selected")) { - selectedCrumb = crumb; - selectedIndex = i; - } - - // Find the focused crumb index. - if (crumb === focusedCrumb) - focusedIndex = i; - - // Remove any styles that affect size before - // deciding to shorten any crumbs. - if (crumb !== crumbs.lastChild) - crumb.removeStyleClass("start"); - if (crumb !== crumbs.firstChild) - crumb.removeStyleClass("end"); - - crumb.removeStyleClass("compact"); - crumb.removeStyleClass("collapsed"); - crumb.removeStyleClass("hidden"); - - crumb = crumb.nextSibling; - ++i; - } - - // Restore the start and end crumb classes in case they got removed in coalesceCollapsedCrumbs(). - // The order of the crumbs in the document is opposite of the visual order. - crumbs.firstChild.addStyleClass("end"); - crumbs.lastChild.addStyleClass("start"); - - function crumbsAreSmallerThanContainer() - { - var rightPadding = 20; - var errorWarningElement = document.getElementById("error-warning-count"); - if (!WebInspector.console.visible && errorWarningElement) - rightPadding += errorWarningElement.offsetWidth; - return ((crumbs.totalOffsetLeft + crumbs.offsetWidth + rightPadding) < window.innerWidth); - } - - if (crumbsAreSmallerThanContainer()) - return; // No need to compact the crumbs, they all fit at full size. - - var BothSides = 0; - var AncestorSide = -1; - var ChildSide = 1; - - function makeCrumbsSmaller(shrinkingFunction, direction, significantCrumb) - { - if (!significantCrumb) - significantCrumb = (focusedCrumb || selectedCrumb); - - if (significantCrumb === selectedCrumb) - var significantIndex = selectedIndex; - else if (significantCrumb === focusedCrumb) - var significantIndex = focusedIndex; - else { - var significantIndex = 0; - for (var i = 0; i < crumbs.childNodes.length; ++i) { - if (crumbs.childNodes[i] === significantCrumb) { - significantIndex = i; - break; - } - } - } - - function shrinkCrumbAtIndex(index) - { - var shrinkCrumb = crumbs.childNodes[index]; - if (shrinkCrumb && shrinkCrumb !== significantCrumb) - shrinkingFunction(shrinkCrumb); - if (crumbsAreSmallerThanContainer()) - return true; // No need to compact the crumbs more. - return false; - } - - // Shrink crumbs one at a time by applying the shrinkingFunction until the crumbs - // fit in the container or we run out of crumbs to shrink. - if (direction) { - // Crumbs are shrunk on only one side (based on direction) of the signifcant crumb. - var index = (direction > 0 ? 0 : crumbs.childNodes.length - 1); - while (index !== significantIndex) { - if (shrinkCrumbAtIndex(index)) - return true; - index += (direction > 0 ? 1 : -1); - } - } else { - // Crumbs are shrunk in order of descending distance from the signifcant crumb, - // with a tie going to child crumbs. - var startIndex = 0; - var endIndex = crumbs.childNodes.length - 1; - while (startIndex != significantIndex || endIndex != significantIndex) { - var startDistance = significantIndex - startIndex; - var endDistance = endIndex - significantIndex; - if (startDistance >= endDistance) - var index = startIndex++; - else - var index = endIndex--; - if (shrinkCrumbAtIndex(index)) - return true; - } - } - - // We are not small enough yet, return false so the caller knows. - return false; - } - - function coalesceCollapsedCrumbs() - { - var crumb = crumbs.firstChild; - var collapsedRun = false; - var newStartNeeded = false; - var newEndNeeded = false; - while (crumb) { - var hidden = crumb.hasStyleClass("hidden"); - if (!hidden) { - var collapsed = crumb.hasStyleClass("collapsed"); - if (collapsedRun && collapsed) { - crumb.addStyleClass("hidden"); - crumb.removeStyleClass("compact"); - crumb.removeStyleClass("collapsed"); - - if (crumb.hasStyleClass("start")) { - crumb.removeStyleClass("start"); - newStartNeeded = true; - } - - if (crumb.hasStyleClass("end")) { - crumb.removeStyleClass("end"); - newEndNeeded = true; - } - - continue; - } - - collapsedRun = collapsed; - - if (newEndNeeded) { - newEndNeeded = false; - crumb.addStyleClass("end"); - } - } else - collapsedRun = true; - crumb = crumb.nextSibling; - } - - if (newStartNeeded) { - crumb = crumbs.lastChild; - while (crumb) { - if (!crumb.hasStyleClass("hidden")) { - crumb.addStyleClass("start"); - break; - } - crumb = crumb.previousSibling; - } - } - } - - function compact(crumb) - { - if (crumb.hasStyleClass("hidden")) - return; - crumb.addStyleClass("compact"); - } - - function collapse(crumb, dontCoalesce) - { - if (crumb.hasStyleClass("hidden")) - return; - crumb.addStyleClass("collapsed"); - crumb.removeStyleClass("compact"); - if (!dontCoalesce) - coalesceCollapsedCrumbs(); - } - - function compactDimmed(crumb) - { - if (crumb.hasStyleClass("dimmed")) - compact(crumb); - } - - function collapseDimmed(crumb) - { - if (crumb.hasStyleClass("dimmed")) - collapse(crumb); - } - - if (!focusedCrumb) { - // When not focused on a crumb we can be biased and collapse less important - // crumbs that the user might not care much about. - - // Compact child crumbs. - if (makeCrumbsSmaller(compact, ChildSide)) - return; - - // Collapse child crumbs. - if (makeCrumbsSmaller(collapse, ChildSide)) - return; - - // Compact dimmed ancestor crumbs. - if (makeCrumbsSmaller(compactDimmed, AncestorSide)) - return; - - // Collapse dimmed ancestor crumbs. - if (makeCrumbsSmaller(collapseDimmed, AncestorSide)) - return; - } - - // Compact ancestor crumbs, or from both sides if focused. - if (makeCrumbsSmaller(compact, (focusedCrumb ? BothSides : AncestorSide))) - return; - - // Collapse ancestor crumbs, or from both sides if focused. - if (makeCrumbsSmaller(collapse, (focusedCrumb ? BothSides : AncestorSide))) - return; - - if (!selectedCrumb) - return; - - // Compact the selected crumb. - compact(selectedCrumb); - if (crumbsAreSmallerThanContainer()) - return; - - // Collapse the selected crumb as a last resort. Pass true to prevent coalescing. - collapse(selectedCrumb, true); - }, - - updateStyles: function(forceUpdate) - { - var stylesSidebarPane = this.sidebarPanes.styles; - if (!stylesSidebarPane.expanded || !stylesSidebarPane.needsUpdate) - return; - - stylesSidebarPane.update(this.focusedDOMNode, null, forceUpdate); - stylesSidebarPane.needsUpdate = false; - }, - - updateMetrics: function() - { - var metricsSidebarPane = this.sidebarPanes.metrics; - if (!metricsSidebarPane.expanded || !metricsSidebarPane.needsUpdate) - return; - - metricsSidebarPane.update(this.focusedDOMNode); - metricsSidebarPane.needsUpdate = false; - }, - - updateProperties: function() - { - var propertiesSidebarPane = this.sidebarPanes.properties; - if (!propertiesSidebarPane.expanded || !propertiesSidebarPane.needsUpdate) - return; - - propertiesSidebarPane.update(this.focusedDOMNode); - propertiesSidebarPane.needsUpdate = false; - }, - - handleKeyEvent: function(event) - { - this.treeOutline.handleKeyEvent(event); - }, - - handleCopyEvent: function(event) - { - // Don't prevent the normal copy if the user has a selection. - if (!window.getSelection().isCollapsed) - return; - - switch (this.focusedDOMNode.nodeType) { - case Node.ELEMENT_NODE: - var data = this.focusedDOMNode.outerHTML; - break; - - case Node.COMMENT_NODE: - var data = "<!--" + this.focusedDOMNode.nodeValue + "-->"; - break; - - default: - case Node.TEXT_NODE: - var data = this.focusedDOMNode.nodeValue; - } - - event.clipboardData.clearData(); - event.preventDefault(); - - if (data) - event.clipboardData.setData("text/plain", data); - }, - - rightSidebarResizerDragStart: function(event) - { - WebInspector.elementDragStart(this.sidebarElement, this.rightSidebarResizerDrag.bind(this), this.rightSidebarResizerDragEnd.bind(this), event, "col-resize"); - }, - - rightSidebarResizerDragEnd: function(event) - { - WebInspector.elementDragEnd(event); - }, - - rightSidebarResizerDrag: function(event) - { - var x = event.pageX; - var newWidth = Number.constrain(window.innerWidth - x, Preferences.minElementsSidebarWidth, window.innerWidth * 0.66); - - this.sidebarElement.style.width = newWidth + "px"; - this.contentElement.style.right = newWidth + "px"; - this.sidebarResizeElement.style.right = (newWidth - 3) + "px"; - - this.updateTreeSelection(); - - event.preventDefault(); - }, - - _getDocumentForNode: function(node) - { - return node.nodeType == Node.DOCUMENT_NODE ? node : node.ownerDocument; - }, - - _parentNodeOrFrameElement: function(node) - { - var parent = node.parentNode; - if (parent) - return parent; - - var document = this._getDocumentForNode(node); - return document.defaultView.frameElement; - }, - - _isAncestorIncludingParentFrames: function(a, b) - { - for (var node = b; node; node = this._getDocumentForNode(node).defaultView.frameElement) - if (isAncestorNode.call(a, node)) - return true; - return false; - }, - - _treeElementFromEvent: function(event) - { - var outline = this.treeOutline; - - var root = this.treeListElement; - - // We choose this X coordinate based on the knowledge that our list - // items extend nearly to the right edge of the outer <ol>. - var x = root.totalOffsetLeft + root.offsetWidth - 20; - - var y = event.pageY; - - // Our list items have 1-pixel cracks between them vertically. We avoid - // the cracks by checking slightly above and slightly below the mouse - // and seeing if we hit the same element each time. - var elementUnderMouse = outline.treeElementFromPoint(x, y); - var elementAboveMouse = outline.treeElementFromPoint(x, y - 2); - var element; - if (elementUnderMouse === elementAboveMouse) - element = elementUnderMouse; - else - element = outline.treeElementFromPoint(x, y + 2); - - return element; - }, - - _ondblclick: function(event) - { - var element = this._treeElementFromEvent(event); - - if (!element) - return; - - element.ondblclick(); - }, - - _onmousedown: function(event) - { - var element = this._treeElementFromEvent(event); - - if (!element || element.isEventWithinDisclosureTriangle(event)) - return; - - element.select(); - }, - - _onmousemove: function(event) - { - var element = this._treeElementFromEvent(event); - if (element) - WebInspector.highlightDOMNode(element.representedObject); - else - WebInspector.hideDOMNodeHighlight(); - }, -} - -WebInspector.ElementsPanel.prototype.__proto__ = WebInspector.Panel.prototype; - -WebInspector.DOMNodeTreeElement = function(node) -{ - var hasChildren = node.contentDocument || (Preferences.ignoreWhitespace ? (firstChildSkippingWhitespace.call(node) ? true : false) : node.hasChildNodes()); - var titleInfo = nodeTitleInfo.call(node, hasChildren, WebInspector.linkifyURL); - - if (titleInfo.hasChildren) - this.whitespaceIgnored = Preferences.ignoreWhitespace; - - TreeElement.call(this, titleInfo.title, node, titleInfo.hasChildren); -} - -WebInspector.DOMNodeTreeElement.prototype = { - updateSelection: function() - { - var listItemElement = this.listItemElement; - if (!listItemElement) - return; - - if (document.body.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this.updateSelection.bind(this), 0); - return; - } - - if (!this.selectionElement) { - this.selectionElement = document.createElement("div"); - this.selectionElement.className = "selection selected"; - listItemElement.insertBefore(this.selectionElement, listItemElement.firstChild); - } - - this.selectionElement.style.height = listItemElement.offsetHeight + "px"; - }, - - onattach: function() - { - this.listItemElement.addEventListener("mousedown", this.onmousedown.bind(this), false); - - this._makeURLsActivateOnModifiedClick(); - }, - - _makeURLsActivateOnModifiedClick: function() - { - var links = this.listItemElement.querySelectorAll("li > .webkit-html-tag > .webkit-html-attribute > .webkit-html-external-link, li > .webkit-html-tag > .webkit-html-attribute > .webkit-html-resource-link"); - if (!links) - return; - - var isMac = InspectorController.platform().indexOf("mac") == 0; - - for (var i = 0; i < links.length; ++i) { - var link = links[i]; - var isExternal = link.hasStyleClass("webkit-html-external-link"); - var href = link.getAttribute("href"); - var title; - if (isMac) { - if (isExternal) - title = WebInspector.UIString("Option-click to visit %s.", href); - else - title = WebInspector.UIString("Option-click to show %s.", href); - } else { - if (isExternal) - title = WebInspector.UIString("Alt-click to visit %s.", href); - else - title = WebInspector.UIString("Alt-click to show %s.", href); - } - link.setAttribute("title", title); - link.followOnAltClick = true; - } - }, - - onpopulate: function() - { - if (this.children.length || this.whitespaceIgnored !== Preferences.ignoreWhitespace) - return; - - this.removeChildren(); - this.whitespaceIgnored = Preferences.ignoreWhitespace; - - var treeElement = this; - function appendChildrenOfNode(node) - { - var child = (Preferences.ignoreWhitespace ? firstChildSkippingWhitespace.call(node) : node.firstChild); - while (child) { - treeElement.appendChild(new WebInspector.DOMNodeTreeElement(child)); - child = Preferences.ignoreWhitespace ? nextSiblingSkippingWhitespace.call(child) : child.nextSibling; - } - } - - if (this.representedObject.contentDocument) - appendChildrenOfNode(this.representedObject.contentDocument); - - appendChildrenOfNode(this.representedObject); - - if (this.representedObject.nodeType == Node.ELEMENT_NODE) { - var title = "<span class=\"webkit-html-tag close\"></" + this.representedObject.nodeName.toLowerCase().escapeHTML() + "></span>"; - var item = new TreeElement(title, this.representedObject, false); - item.selectable = false; - this.appendChild(item); - } - }, - - onexpand: function() - { - this.treeOutline.panel.updateTreeSelection(); - }, - - oncollapse: function() - { - this.treeOutline.panel.updateTreeSelection(); - }, - - onreveal: function() - { - if (this.listItemElement) - this.listItemElement.scrollIntoViewIfNeeded(false); - }, - - onselect: function() - { - this._selectedByCurrentMouseDown = true; - this.treeOutline.panel.focusedDOMNode = this.representedObject; - this.updateSelection(); - }, - - onmousedown: function(event) - { - if (this._editing) - return; - - if (this._selectedByCurrentMouseDown) - delete this._selectedByCurrentMouseDown; - else if (this._startEditing(event)) { - event.preventDefault(); - return; - } - - // Prevent selecting the nearest word on double click. - if (event.detail >= 2) - event.preventDefault(); - }, - - ondblclick: function(treeElement, event) - { - if (this._editing) - return; - - var panel = this.treeOutline.panel; - panel.rootDOMNode = this.parent.representedObject; - panel.focusedDOMNode = this.representedObject; - - if (this.hasChildren && !this.expanded) - this.expand(); - }, - - _startEditing: function(event) - { - if (this.treeOutline.panel.focusedDOMNode != this.representedObject) - return; - - if (this.representedObject.nodeType != Node.ELEMENT_NODE && this.representedObject.nodeType != Node.TEXT_NODE) - return false; - - var textNode = event.target.enclosingNodeOrSelfWithClass("webkit-html-text-node"); - if (textNode) - return this._startEditingTextNode(textNode); - - var attribute = event.target.enclosingNodeOrSelfWithClass("webkit-html-attribute"); - if (attribute) - return this._startEditingAttribute(attribute, event); - - return false; - }, - - _startEditingAttribute: function(attribute, event) - { - if (WebInspector.isBeingEdited(attribute)) - return true; - - var attributeNameElement = attribute.getElementsByClassName("webkit-html-attribute-name")[0]; - if (!attributeNameElement) - return false; - - var isURL = event.target.enclosingNodeOrSelfWithClass("webkit-html-external-link") || event.target.enclosingNodeOrSelfWithClass("webkit-html-resource-link"); - if (isURL && event.altKey) - return false; - - var attributeName = attributeNameElement.innerText; - - function removeZeroWidthSpaceRecursive(node) - { - if (node.nodeType === Node.TEXT_NODE) { - node.nodeValue = node.nodeValue.replace(/\u200B/g, ""); - return; - } - - if (node.nodeType !== Node.ELEMENT_NODE) - return; - - for (var child = node.firstChild; child; child = child.nextSibling) - removeZeroWidthSpaceRecursive(child); - } - - // Remove zero-width spaces that were added by nodeTitleInfo. - removeZeroWidthSpaceRecursive(attribute); - - this._editing = true; - - WebInspector.startEditing(attribute, this._attributeEditingCommitted.bind(this), this._editingCancelled.bind(this), attributeName); - window.getSelection().setBaseAndExtent(event.target, 0, event.target, 1); - - return true; - }, - - _startEditingTextNode: function(textNode) - { - if (WebInspector.isBeingEdited(textNode)) - return true; - - this._editing = true; - - WebInspector.startEditing(textNode, this._textNodeEditingCommitted.bind(this), this._editingCancelled.bind(this)); - window.getSelection().setBaseAndExtent(textNode, 0, textNode, 1); - - return true; - }, - - _attributeEditingCommitted: function(element, newText, oldText, attributeName) - { - delete this._editing; - - var parseContainerElement = document.createElement("span"); - parseContainerElement.innerHTML = "<span " + newText + "></span>"; - var parseElement = parseContainerElement.firstChild; - if (!parseElement || !parseElement.hasAttributes()) { - editingCancelled(element, context); - return; - } - - var foundOriginalAttribute = false; - for (var i = 0; i < parseElement.attributes.length; ++i) { - var attr = parseElement.attributes[i]; - foundOriginalAttribute = foundOriginalAttribute || attr.name === attributeName; - InspectorController.inspectedWindow().Element.prototype.setAttribute.call(this.representedObject, attr.name, attr.value); - } - - if (!foundOriginalAttribute) - InspectorController.inspectedWindow().Element.prototype.removeAttribute.call(this.representedObject, attributeName); - - this._updateTitle(); - this.treeOutline.panel._focusedNodeChanged(true); - }, - - _textNodeEditingCommitted: function(element, newText) - { - delete this._editing; - - var textNode; - if (this.representedObject.nodeType == Node.ELEMENT_NODE) { - // We only show text nodes inline in elements if the element only - // has a single child, and that child is a text node. - textNode = this.representedObject.firstChild; - } else if (this.representedObject.nodeType == Node.TEXT_NODE) - textNode = this.representedObject; - - textNode.nodeValue = newText; - this._updateTitle(); - }, - - - _editingCancelled: function(element, context) - { - delete this._editing; - - this._updateTitle(); - }, - - _updateTitle: function() - { - this.title = nodeTitleInfo.call(this.representedObject, this.hasChildren, WebInspector.linkifyURL).title; - delete this.selectionElement; - this.updateSelection(); - this._makeURLsActivateOnModifiedClick(); - }, -} - -WebInspector.DOMNodeTreeElement.prototype.__proto__ = TreeElement.prototype; diff --git a/webkit/port/page/inspector/FontView.js b/webkit/port/page/inspector/FontView.js index 2059c04..e69de29 100644 --- a/webkit/port/page/inspector/FontView.js +++ b/webkit/port/page/inspector/FontView.js @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.FontView = function(resource) -{ - WebInspector.ResourceView.call(this, resource); - - this.element.addStyleClass("font"); - - var uniqueFontName = "WebInspectorFontPreview" + this.resource.identifier; - - this.fontPreviewElement = document.createElement("div"); - this.fontPreviewElement.className = "preview"; - this.contentElement.appendChild(this.fontPreviewElement); - - this.fontPreviewElement.style.setProperty("font-family", uniqueFontName, null); - this.fontPreviewElement.innerHTML = "ABCDEFGHIJKLM<br>NOPQRSTUVWXYZ<br>abcdefghijklm<br>nopqrstuvwxyz<br>1234567890"; - - this.updateFontPreviewSize(); -} - -WebInspector.FontView.prototype = { - show: function() - { - WebInspector.ResourceView.prototype.show.call(this); - this.updateFontPreviewSize(); - }, - - resize: function() - { - this.updateFontPreviewSize(); - }, - - updateFontPreviewSize: function () - { - if (!this.fontPreviewElement || !this.visible) - return; - - this.fontPreviewElement.removeStyleClass("preview"); - - var measureFontSize = 50; - this.fontPreviewElement.style.setProperty("position", "absolute", null); - this.fontPreviewElement.style.setProperty("font-size", measureFontSize + "px", null); - this.fontPreviewElement.style.removeProperty("height"); - - var height = this.fontPreviewElement.offsetHeight; - var width = this.fontPreviewElement.offsetWidth; - - var containerHeight = this.contentElement.offsetHeight; - var containerWidth = this.contentElement.offsetWidth; - - if (!height || !width || !containerHeight || !containerWidth) { - this.fontPreviewElement.style.removeProperty("font-size"); - this.fontPreviewElement.style.removeProperty("position"); - this.fontPreviewElement.addStyleClass("preview"); - return; - } - - var lineCount = this.fontPreviewElement.getElementsByTagName("br").length + 1; - var realLineHeight = Math.floor(height / lineCount); - var fontSizeLineRatio = measureFontSize / realLineHeight; - var widthRatio = containerWidth / width; - var heightRatio = containerHeight / height; - - if (heightRatio < widthRatio) - var finalFontSize = Math.floor(realLineHeight * heightRatio * fontSizeLineRatio) - 1; - else - var finalFontSize = Math.floor(realLineHeight * widthRatio * fontSizeLineRatio) - 1; - - this.fontPreviewElement.style.setProperty("font-size", finalFontSize + "px", null); - this.fontPreviewElement.style.setProperty("height", this.fontPreviewElement.offsetHeight + "px", null); - this.fontPreviewElement.style.removeProperty("position"); - - this.fontPreviewElement.addStyleClass("preview"); - } -} - -WebInspector.FontView.prototype.__proto__ = WebInspector.ResourceView.prototype; diff --git a/webkit/port/page/inspector/ImageView.js b/webkit/port/page/inspector/ImageView.js index 001ffdd..e69de29 100644 --- a/webkit/port/page/inspector/ImageView.js +++ b/webkit/port/page/inspector/ImageView.js @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.ImageView = function(resource) -{ - WebInspector.ResourceView.call(this, resource); - - this.element.addStyleClass("image"); - - var container = document.createElement("div"); - container.className = "image"; - this.contentElement.appendChild(container); - - this.imagePreviewElement = document.createElement("img"); - this.imagePreviewElement.setAttribute("src", this.resource.url); - - container.appendChild(this.imagePreviewElement); - - container = document.createElement("div"); - container.className = "info"; - this.contentElement.appendChild(container); - - var imageNameElement = document.createElement("h1"); - imageNameElement.className = "title"; - imageNameElement.textContent = this.resource.displayName; - container.appendChild(imageNameElement); - - var infoListElement = document.createElement("dl"); - infoListElement.className = "infoList"; - - var imageProperties = [ - { name: WebInspector.UIString("Dimensions"), value: WebInspector.UIString("%d × %d", this.imagePreviewElement.naturalWidth, this.imagePreviewElement.height) }, - { name: WebInspector.UIString("File size"), value: Number.bytesToString(this.resource.contentLength, WebInspector.UIString.bind(WebInspector)) }, - { name: WebInspector.UIString("MIME type"), value: this.resource.mimeType } - ]; - - var listHTML = ''; - for (var i = 0; i < imageProperties.length; ++i) - listHTML += "<dt>" + imageProperties[i].name + "</dt><dd>" + imageProperties[i].value + "</dd>"; - - infoListElement.innerHTML = listHTML; - container.appendChild(infoListElement); -} - -WebInspector.ImageView.prototype = { - -} - -WebInspector.ImageView.prototype.__proto__ = WebInspector.ResourceView.prototype; diff --git a/webkit/port/page/inspector/MetricsSidebarPane.js b/webkit/port/page/inspector/MetricsSidebarPane.js index e805560..e69de29 100644 --- a/webkit/port/page/inspector/MetricsSidebarPane.js +++ b/webkit/port/page/inspector/MetricsSidebarPane.js @@ -1,140 +0,0 @@ -/* - * 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. - */ - -WebInspector.MetricsSidebarPane = function() -{ - WebInspector.SidebarPane.call(this, WebInspector.UIString("Metrics")); -} - -WebInspector.MetricsSidebarPane.prototype = { - update: function(node) - { - var body = this.bodyElement; - - body.removeChildren(); - - if (!node) - return; - - var style; - if (node.nodeType === Node.ELEMENT_NODE) - style = node.ownerDocument.defaultView.getComputedStyle(node); - if (!style) - return; - - var metricsElement = document.createElement("div"); - metricsElement.className = "metrics"; - - function boxPartValue(style, name, suffix) - { - var value = style.getPropertyValue(name + suffix); - if (value === "" || value === "0px") - value = "\u2012"; - return value.replace(/px$/, ""); - } - - // Display types for which margin is ignored. - var noMarginDisplayType = { - "table-cell": true, - "table-column": true, - "table-column-group": true, - "table-footer-group": true, - "table-header-group": true, - "table-row": true, - "table-row-group": true - }; - - // Display types for which padding is ignored. - var noPaddingDisplayType = { - "table-column": true, - "table-column-group": true, - "table-footer-group": true, - "table-header-group": true, - "table-row": true, - "table-row-group": true - }; - - var boxes = ["content", "padding", "border", "margin"]; - var boxLabels = [WebInspector.UIString("content"), WebInspector.UIString("padding"), WebInspector.UIString("border"), WebInspector.UIString("margin")]; - var previousBox; - for (var i = 0; i < boxes.length; ++i) { - var name = boxes[i]; - - if (name === "margin" && noMarginDisplayType[style.display]) - continue; - if (name === "padding" && noPaddingDisplayType[style.display]) - continue; - - var boxElement = document.createElement("div"); - boxElement.className = name; - - if (name === "content") { - var width = style.width.replace(/px$/, ""); - var height = style.height.replace(/px$/, ""); - boxElement.textContent = width + " \u00D7 " + height; - } else { - var suffix = (name === "border" ? "-width" : ""); - - var labelElement = document.createElement("div"); - labelElement.className = "label"; - labelElement.textContent = boxLabels[i]; - boxElement.appendChild(labelElement); - - var topElement = document.createElement("div"); - topElement.className = "top"; - topElement.textContent = boxPartValue(style, name + "-top", suffix); - boxElement.appendChild(topElement); - - var leftElement = document.createElement("div"); - leftElement.className = "left"; - leftElement.textContent = boxPartValue(style, name + "-left", suffix); - boxElement.appendChild(leftElement); - - if (previousBox) - boxElement.appendChild(previousBox); - - var rightElement = document.createElement("div"); - rightElement.className = "right"; - rightElement.textContent = boxPartValue(style, name + "-right", suffix); - boxElement.appendChild(rightElement); - - var bottomElement = document.createElement("div"); - bottomElement.className = "bottom"; - bottomElement.textContent = boxPartValue(style, name + "-bottom", suffix); - boxElement.appendChild(bottomElement); - } - - previousBox = boxElement; - } - - metricsElement.appendChild(previousBox); - body.appendChild(metricsElement); - } -} - -WebInspector.MetricsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; diff --git a/webkit/port/page/inspector/Panel.js b/webkit/port/page/inspector/Panel.js index edf5751..e69de29 100644 --- a/webkit/port/page/inspector/Panel.js +++ b/webkit/port/page/inspector/Panel.js @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.Panel = function() -{ - WebInspector.View.call(this); - - this.element.addStyleClass("panel"); -} - -WebInspector.Panel.prototype = { - get toolbarItem() - { - if (this._toolbarItem) - return this._toolbarItem; - - // Sample toolbar item as markup: - // <button class="toolbar-item resources toggleable"> - // <img class="toolbar-icon"> - // <div class="toolbar-label">Resources</div> - // </button> - - this._toolbarItem = document.createElement("button"); - this._toolbarItem.className = "toolbar-item toggleable"; - this._toolbarItem.panel = this; - - if ("toolbarItemClass" in this) - this._toolbarItem.addStyleClass(this.toolbarItemClass); - - var iconElement = document.createElement("img"); - iconElement.className = "toolbar-icon"; - this._toolbarItem.appendChild(iconElement); - - if ("toolbarItemLabel" in this) { - var labelElement = document.createElement("div"); - labelElement.className = "toolbar-label"; - labelElement.textContent = this.toolbarItemLabel; - this._toolbarItem.appendChild(labelElement); - } - - return this._toolbarItem; - }, - - show: function() - { - WebInspector.View.prototype.show.call(this); - - var statusBarItems = this.statusBarItems; - if (statusBarItems) { - this._statusBarItemContainer = document.createElement("div"); - for (var i = 0; i < statusBarItems.length; ++i) - this._statusBarItemContainer.appendChild(statusBarItems[i]); - document.getElementById("main-status-bar").appendChild(this._statusBarItemContainer); - } - - if ("_toolbarItem" in this) - this._toolbarItem.addStyleClass("toggled-on"); - - WebInspector.currentFocusElement = document.getElementById("main-panels"); - }, - - hide: function() - { - WebInspector.View.prototype.hide.call(this); - - if (this._statusBarItemContainer && this._statusBarItemContainer.parentNode) - this._statusBarItemContainer.parentNode.removeChild(this._statusBarItemContainer); - delete this._statusBarItemContainer; - if ("_toolbarItem" in this) - this._toolbarItem.removeStyleClass("toggled-on"); - }, - - attach: function() - { - document.getElementById("main-panels").appendChild(this.element); - } -} - -WebInspector.Panel.prototype.__proto__ = WebInspector.View.prototype; diff --git a/webkit/port/page/inspector/PropertiesSection.js b/webkit/port/page/inspector/PropertiesSection.js index 160dae4..e69de29 100644 --- a/webkit/port/page/inspector/PropertiesSection.js +++ b/webkit/port/page/inspector/PropertiesSection.js @@ -1,140 +0,0 @@ -/* - * 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. - */ - -WebInspector.PropertiesSection = function(title, subtitle) -{ - this.element = document.createElement("div"); - this.element.className = "section"; - - this.headerElement = document.createElement("div"); - this.headerElement.className = "header"; - - this.titleElement = document.createElement("div"); - this.titleElement.className = "title"; - - this.subtitleElement = document.createElement("div"); - this.subtitleElement.className = "subtitle"; - - this.headerElement.appendChild(this.subtitleElement); - this.headerElement.appendChild(this.titleElement); - - this.headerElement.addEventListener("click", this.toggleExpanded.bind(this), false); - - this.propertiesElement = document.createElement("ol"); - this.propertiesElement.className = "properties"; - this.propertiesTreeOutline = new TreeOutline(this.propertiesElement); - this.propertiesTreeOutline.section = this; - - this.element.appendChild(this.headerElement); - this.element.appendChild(this.propertiesElement); - - this.title = title; - this.subtitle = subtitle; - this.expanded = false; -} - -WebInspector.PropertiesSection.prototype = { - get title() - { - return this._title; - }, - - set title(x) - { - if (this._title === x) - return; - this._title = x; - this.titleElement.textContent = x; - }, - - get subtitle() - { - return this._subtitle; - }, - - set subtitle(x) - { - if (this._subtitle === x) - return; - this._subtitle = x; - this.subtitleElement.innerHTML = x; - }, - - get expanded() - { - return this._expanded; - }, - - set expanded(x) - { - if (x) - this.expand(); - else - this.collapse(); - }, - - get populated() - { - return this._populated; - }, - - set populated(x) - { - this._populated = x; - if (!x && this.onpopulate && this._expanded) { - this.onpopulate(this); - this._populated = true; - } - }, - - expand: function() - { - if (this._expanded) - return; - this._expanded = true; - this.element.addStyleClass("expanded"); - - if (!this._populated && this.onpopulate) { - this.onpopulate(this); - this._populated = true; - } - }, - - collapse: function() - { - if (!this._expanded) - return; - this._expanded = false; - this.element.removeStyleClass("expanded"); - }, - - toggleExpanded: function() - { - this.expanded = !this.expanded; - } -} diff --git a/webkit/port/page/inspector/PropertiesSidebarPane.js b/webkit/port/page/inspector/PropertiesSidebarPane.js index 0266d53..e69de29 100644 --- a/webkit/port/page/inspector/PropertiesSidebarPane.js +++ b/webkit/port/page/inspector/PropertiesSidebarPane.js @@ -1,139 +0,0 @@ -/* - * 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. - */ - -WebInspector.PropertiesSidebarPane = function() -{ - WebInspector.SidebarPane.call(this, WebInspector.UIString("Properties")); -} - -WebInspector.PropertiesSidebarPane.prototype = { - update: function(object) - { - var body = this.bodyElement; - - body.removeChildren(); - - this.sections = []; - - if (!object) - return; - - for (var prototype = object; prototype; prototype = prototype.__proto__) { - var section = new WebInspector.ObjectPropertiesSection(prototype); - this.sections.push(section); - body.appendChild(section.element); - } - } -} - -WebInspector.PropertiesSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; - -WebInspector.ObjectPropertiesSection = function(object) -{ - var title = Object.describe(object); - var subtitle; - if (title.match(/Prototype$/)) { - title = title.replace(/Prototype$/, ""); - subtitle = WebInspector.UIString("Prototype"); - } - - this.object = object; - - WebInspector.PropertiesSection.call(this, title, subtitle); -} - -WebInspector.ObjectPropertiesSection.prototype = { - onpopulate: function() - { - var properties = Object.sortedProperties(this.object); - for (var i = 0; i < properties.length; ++i) { - var propertyName = properties[i]; - if (!this.object.hasOwnProperty(propertyName) || propertyName === "__treeElementIdentifier") - continue; - this.propertiesTreeOutline.appendChild(new WebInspector.ObjectPropertyTreeElement(this.object, propertyName)); - } - } -} - -WebInspector.ObjectPropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; - -WebInspector.ObjectPropertyTreeElement = function(parentObject, propertyName) -{ - this.parentObject = parentObject; - this.propertyName = propertyName; - - var childObject = this.safePropertyValue(parentObject, propertyName); - var isGetter = parentObject.__lookupGetter__(propertyName); - - var title = "<span class=\"name\">" + propertyName.escapeHTML() + "</span>: "; - if (!isGetter) - title += "<span class=\"value\">" + Object.describe(childObject, true).escapeHTML() + "</span>"; - else - // FIXME: this should show something like "getter" once we can change localization (bug 16734). - title += "<span class=\"value dimmed\">—</span>"; - - var hasSubProperties = false; - var type = typeof childObject; - if (childObject && (type === "object" || type === "function")) { - for (subPropertyName in childObject) { - if (subPropertyName === "__treeElementIdentifier") - continue; - hasSubProperties = true; - break; - } - } - - TreeElement.call(this, title, null, hasSubProperties); -} - -WebInspector.ObjectPropertyTreeElement.prototype = { - safePropertyValue: function(object, propertyName) - { - var getter = object.__lookupGetter__(propertyName); - if (getter) - return; - return object[propertyName]; - }, - - onpopulate: function() - { - if (this.children.length) - return; - - var childObject = this.safePropertyValue(this.parentObject, this.propertyName); - var properties = Object.sortedProperties(childObject); - for (var i = 0; i < properties.length; ++i) { - var propertyName = properties[i]; - if (propertyName === "__treeElementIdentifier") - continue; - this.appendChild(new WebInspector.ObjectPropertyTreeElement(childObject, propertyName)); - } - } -} - -WebInspector.ObjectPropertyTreeElement.prototype.__proto__ = TreeElement.prototype; diff --git a/webkit/port/page/inspector/Resource.js b/webkit/port/page/inspector/Resource.js index b21cebd..e69de29 100644 --- a/webkit/port/page/inspector/Resource.js +++ b/webkit/port/page/inspector/Resource.js @@ -1,544 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.Resource = function(requestHeaders, url, domain, path, lastPathComponent, identifier, mainResource, cached) -{ - this.identifier = identifier; - - this.startTime = -1; - this.endTime = -1; - this.mainResource = mainResource; - this.requestHeaders = requestHeaders; - this.url = url; - this.domain = domain; - this.path = path; - this.lastPathComponent = lastPathComponent; - this.cached = cached; - - this.category = WebInspector.resourceCategories.other; -} - -// Keep these in sync with WebCore::InspectorResource::Type -WebInspector.Resource.Type = { - Document: 0, - Stylesheet: 1, - Image: 2, - Font: 3, - Script: 4, - XHR: 5, - Other: 6, - - isTextType: function(type) - { - return (type === this.Document) || (type === this.Stylesheet) || (type === this.Script) || (type === this.XHR); - }, - - toString: function(type) - { - switch (type) { - case this.Document: - return WebInspector.UIString("document"); - case this.Stylesheet: - return WebInspector.UIString("stylesheet"); - case this.Image: - return WebInspector.UIString("image"); - case this.Font: - return WebInspector.UIString("font"); - case this.Script: - return WebInspector.UIString("script"); - case this.XHR: - return WebInspector.UIString("XHR"); - case this.Other: - default: - return WebInspector.UIString("other"); - } - } -} - -WebInspector.Resource.prototype = { - get url() - { - return this._url; - }, - - set url(x) - { - if (this._url === x) - return; - - var oldURL = this._url; - this._url = x; - WebInspector.resourceURLChanged(this, oldURL); - }, - - get domain() - { - return this._domain; - }, - - set domain(x) - { - if (this._domain === x) - return; - this._domain = x; - }, - - get lastPathComponent() - { - return this._lastPathComponent; - }, - - set lastPathComponent(x) - { - if (this._lastPathComponent === x) - return; - this._lastPathComponent = x; - this._lastPathComponentLowerCase = x ? x.toLowerCase() : null; - }, - - get displayName() - { - var title = this.lastPathComponent; - if (!title) - title = this.displayDomain; - if (!title) - title = this.url; - return title; - }, - - get displayDomain() - { - // WebInspector.Database calls this, so don't access more than this.domain. - if (this.domain && (!WebInspector.mainResource || (WebInspector.mainResource && this.domain !== WebInspector.mainResource.domain))) - return this.domain; - return ""; - }, - - get startTime() - { - return this._startTime; - }, - - set startTime(x) - { - if (this._startTime === x) - return; - - this._startTime = x; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get responseReceivedTime() - { - return this._responseReceivedTime; - }, - - set responseReceivedTime(x) - { - if (this._responseReceivedTime === x) - return; - - this._responseReceivedTime = x; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get endTime() - { - return this._endTime; - }, - - set endTime(x) - { - if (this._endTime === x) - return; - - this._endTime = x; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get contentLength() - { - return this._contentLength; - }, - - set contentLength(x) - { - if (this._contentLength === x) - return; - - this._contentLength = x; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get expectedContentLength() - { - return this._expectedContentLength; - }, - - set expectedContentLength(x) - { - if (this._expectedContentLength === x) - return; - this._expectedContentLength = x; - }, - - get finished() - { - return this._finished; - }, - - set finished(x) - { - if (this._finished === x) - return; - - this._finished = x; - - if (x) { - this._checkTips(); - this._checkWarnings(); - } - }, - - get failed() - { - return this._failed; - }, - - set failed(x) - { - this._failed = x; - }, - - get category() - { - return this._category; - }, - - set category(x) - { - if (this._category === x) - return; - - var oldCategory = this._category; - if (oldCategory) - oldCategory.removeResource(this); - - this._category = x; - - if (this._category) - this._category.addResource(this); - - if (WebInspector.panels.resources) { - WebInspector.panels.resources.refreshResource(this); - WebInspector.panels.resources.recreateViewForResourceIfNeeded(this); - } - }, - - get mimeType() - { - return this._mimeType; - }, - - set mimeType(x) - { - if (this._mimeType === x) - return; - - this._mimeType = x; - }, - - get type() - { - return this._type; - }, - - set type(x) - { - if (this._type === x) - return; - - this._type = x; - - switch (x) { - case WebInspector.Resource.Type.Document: - this.category = WebInspector.resourceCategories.documents; - break; - case WebInspector.Resource.Type.Stylesheet: - this.category = WebInspector.resourceCategories.stylesheets; - break; - case WebInspector.Resource.Type.Script: - this.category = WebInspector.resourceCategories.scripts; - break; - case WebInspector.Resource.Type.Image: - this.category = WebInspector.resourceCategories.images; - break; - case WebInspector.Resource.Type.Font: - this.category = WebInspector.resourceCategories.fonts; - break; - case WebInspector.Resource.Type.XHR: - this.category = WebInspector.resourceCategories.xhr; - break; - case WebInspector.Resource.Type.Other: - default: - this.category = WebInspector.resourceCategories.other; - break; - } - }, - - get documentNode() { - if ("identifier" in this) - return InspectorController.getResourceDocumentNode(this.identifier); - return null; - }, - - get requestHeaders() - { - if (this._requestHeaders === undefined) - this._requestHeaders = {}; - return this._requestHeaders; - }, - - set requestHeaders(x) - { - if (this._requestHeaders === x) - return; - - this._requestHeaders = x; - delete this._sortedRequestHeaders; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get sortedRequestHeaders() - { - if (this._sortedRequestHeaders !== undefined) - return this._sortedRequestHeaders; - - this._sortedRequestHeaders = []; - for (var key in this.requestHeaders) - this._sortedRequestHeaders.push({header: key, value: this.requestHeaders[key]}); - this._sortedRequestHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); - - return this._sortedRequestHeaders; - }, - - get responseHeaders() - { - if (this._responseHeaders === undefined) - this._responseHeaders = {}; - return this._responseHeaders; - }, - - set responseHeaders(x) - { - if (this._responseHeaders === x) - return; - - this._responseHeaders = x; - delete this._sortedResponseHeaders; - - if (WebInspector.panels.resources) - WebInspector.panels.resources.refreshResource(this); - }, - - get sortedResponseHeaders() - { - if (this._sortedResponseHeaders !== undefined) - return this._sortedResponseHeaders; - - this._sortedResponseHeaders = []; - for (var key in this.responseHeaders) - this._sortedResponseHeaders.push({header: key, value: this.responseHeaders[key]}); - this._sortedResponseHeaders.sort(function(a,b) { return a.header.localeCompare(b.header) }); - - return this._sortedResponseHeaders; - }, - - get errors() - { - if (!("_errors" in this)) - this._errors = 0; - return this._errors; - }, - - set errors(x) - { - if (this._errors === x) - return; - - var difference = x - this._errors; - WebInspector.errors += difference; - this._errors = x; - }, - - get warnings() - { - if (!("_warnings" in this)) - this._warnings = 0; - return this._warnings; - }, - - set warnings(x) - { - if (this._warnings === x) - return; - - var difference = x - this._warnings; - WebInspector.warnings += difference; - this._warnings = x; - }, - - get tips() - { - if (!("_tips" in this)) - this._tips = {}; - return this._tips; - }, - - _addTip: function(tip) - { - if (tip.id in this.tips) - return; - - this.tips[tip.id] = tip; - - // FIXME: Re-enable this code once we have a scope bar in the Console. - // Otherwise, we flood the Console with too many tips. - /* - var msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other, - WebInspector.ConsoleMessage.MessageLevel.Tip, -1, this.url, tip.message); - WebInspector.consolePanel.addMessage(msg); - */ - }, - - _checkTips: function() - { - for (var tip in WebInspector.Tips) - this._checkTip(WebInspector.Tips[tip]); - }, - - _checkTip: function(tip) - { - var addTip = false; - switch (tip.id) { - case WebInspector.Tips.ResourceNotCompressed.id: - addTip = this._shouldCompress(); - break; - } - - if (addTip) - this._addTip(tip); - }, - - _shouldCompress: function() - { - return WebInspector.Resource.Type.isTextType(this.type) - && this.domain - && !("Content-Encoding" in this.responseHeaders) - && this.contentLength !== undefined - && this.contentLength >= 512; - }, - - _mimeTypeIsConsistentWithType: function() - { - if (typeof this.type === "undefined" - || this.type === WebInspector.Resource.Type.Other - || this.type === WebInspector.Resource.Type.XHR) - return true; - - if (this.mimeType in WebInspector.MIMETypes) - return this.type in WebInspector.MIMETypes[this.mimeType]; - - return true; - }, - - _checkWarnings: function() - { - for (var warning in WebInspector.Warnings) - this._checkWarning(WebInspector.Warnings[warning]); - }, - - _checkWarning: function(warning) - { - var addWarning = false; - var msg; - switch (warning.id) { - case WebInspector.Warnings.IncorrectMIMEType.id: - if (!this._mimeTypeIsConsistentWithType()) - msg = new WebInspector.ConsoleMessage(WebInspector.ConsoleMessage.MessageSource.Other, - WebInspector.ConsoleMessage.MessageLevel.Warning, -1, this.url, - String.sprintf(WebInspector.Warnings.IncorrectMIMEType.message, - WebInspector.Resource.Type.toString(this.type), this.mimeType)); - break; - } - - if (msg) - WebInspector.console.addMessage(msg); - } -} - -WebInspector.Resource.CompareByTime = function(a, b) -{ - if (a.responseReceivedTime < b.responseReceivedTime) - return -1; - if (a.responseReceivedTime > b.responseReceivedTime) - return 1; - if (a.startTime < b.startTime) - return -1; - if (a.startTime > b.startTime) - return 1; - if (a.endTime < b.endTime) - return -1; - if (a.endTime > b.endTime) - return 1; - return 0; -} - -WebInspector.Resource.CompareBySize = function(a, b) -{ - if (a.contentLength < b.contentLength) - return -1; - if (a.contentLength > b.contentLength) - return 1; - return 0; -} - -WebInspector.Resource.CompareByDescendingSize = function(a, b) -{ - return this.CompareBySize(a, b) * -1; -} diff --git a/webkit/port/page/inspector/ResourceCategory.js b/webkit/port/page/inspector/ResourceCategory.js index c5591ea..e69de29 100644 --- a/webkit/port/page/inspector/ResourceCategory.js +++ b/webkit/port/page/inspector/ResourceCategory.js @@ -1,74 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.ResourceCategory = function(title, name) -{ - this.name = name; - this.title = title; - this.resources = []; -} - -WebInspector.ResourceCategory.prototype = { - toString: function() - { - return this.title; - }, - - addResource: function(resource) - { - var a = resource; - var resourcesLength = this.resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var b = this.resources[i]; - if (a._lastPathComponentLowerCase && b._lastPathComponentLowerCase) - if (a._lastPathComponentLowerCase < b._lastPathComponentLowerCase) - break; - else if (a.name && b.name) - if (a.name < b.name) - break; - } - - this.resources.splice(i, 0, resource); - }, - - removeResource: function(resource) - { - var resourcesLength = this.resources.length; - for (var i = 0; i < resourcesLength; ++i) { - if (this.resources[i] === resource) { - this.resources.splice(i, 1); - break; - } - } - }, - - removeAllResources: function(resource) - { - this.resources = []; - } -} diff --git a/webkit/port/page/inspector/ResourceView.js b/webkit/port/page/inspector/ResourceView.js index 46d8a66..e69de29 100644 --- a/webkit/port/page/inspector/ResourceView.js +++ b/webkit/port/page/inspector/ResourceView.js @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.ResourceView = function(resource) -{ - WebInspector.View.call(this); - - this.element.addStyleClass("resource-view"); - - this.resource = resource; - - this.contentElement = document.createElement("div"); - this.contentElement.className = "resource-view-content"; - this.element.appendChild(this.contentElement); -} - -WebInspector.ResourceView.prototype = { - attach: function() - { - document.getElementById("resource-views").appendChild(this.element); - } -} - -WebInspector.ResourceView.prototype.__proto__ = WebInspector.View.prototype; diff --git a/webkit/port/page/inspector/ResourcesPanel.js b/webkit/port/page/inspector/ResourcesPanel.js index 57c45c7..e69de29 100644 --- a/webkit/port/page/inspector/ResourcesPanel.js +++ b/webkit/port/page/inspector/ResourcesPanel.js @@ -1,1354 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.ResourcesPanel = function() -{ - WebInspector.Panel.call(this); - - this.element.addStyleClass("resources"); - - this.resourceViews = document.createElement("div"); - this.resourceViews.id = "resource-views"; - this.element.appendChild(this.resourceViews); - - this.containerElement = document.createElement("div"); - this.containerElement.id = "resources-container"; - this.containerElement.addEventListener("scroll", this._updateDividersLabelBarPosition.bind(this), false); - this.element.appendChild(this.containerElement); - - this.sidebarElement = document.createElement("div"); - this.sidebarElement.id = "resources-sidebar"; - this.sidebarElement.className = "sidebar"; - this.containerElement.appendChild(this.sidebarElement); - - this.sidebarResizeElement = document.createElement("div"); - this.sidebarResizeElement.className = "sidebar-resizer-vertical"; - this.sidebarResizeElement.addEventListener("mousedown", this._startSidebarDragging.bind(this), false); - this.element.appendChild(this.sidebarResizeElement); - - this.containerContentElement = document.createElement("div"); - this.containerContentElement.id = "resources-container-content"; - this.containerElement.appendChild(this.containerContentElement); - - this.summaryElement = document.createElement("div"); - this.summaryElement.id = "resources-summary"; - this.containerContentElement.appendChild(this.summaryElement); - - this.dividersElement = document.createElement("div"); - this.dividersElement.id = "resources-dividers"; - this.containerContentElement.appendChild(this.dividersElement); - - this.dividersLabelBarElement = document.createElement("div"); - this.dividersLabelBarElement.id = "resources-dividers-label-bar"; - this.containerContentElement.appendChild(this.dividersLabelBarElement); - - this.summaryGraphElement = document.createElement("canvas"); - this.summaryGraphElement.setAttribute("width", "450"); - this.summaryGraphElement.setAttribute("height", "38"); - this.summaryGraphElement.id = "resources-summary-graph"; - this.summaryElement.appendChild(this.summaryGraphElement); - - this.legendElement = document.createElement("div"); - this.legendElement.id = "resources-graph-legend"; - this.summaryElement.appendChild(this.legendElement); - - this.sidebarTreeElement = document.createElement("ol"); - this.sidebarTreeElement.className = "sidebar-tree"; - this.sidebarElement.appendChild(this.sidebarTreeElement); - - this.sidebarTree = new TreeOutline(this.sidebarTreeElement); - - var timeGraphItem = new WebInspector.SidebarTreeElement("resources-time-graph-sidebar-item", WebInspector.UIString("Time")); - timeGraphItem.calculator = new WebInspector.ResourceTransferTimeCalculator(); - timeGraphItem.onselect = this._graphSelected.bind(this); - timeGraphItem.calculator._graphsTreeElement = timeGraphItem; - - var sizeGraphItem = new WebInspector.SidebarTreeElement("resources-size-graph-sidebar-item", WebInspector.UIString("Size")); - sizeGraphItem.calculator = new WebInspector.ResourceTransferSizeCalculator(); - sizeGraphItem.onselect = this._graphSelected.bind(this); - sizeGraphItem.calculator._graphsTreeElement = sizeGraphItem; - - this.graphsTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("GRAPHS"), {}, true); - this.sidebarTree.appendChild(this.graphsTreeElement); - - this.graphsTreeElement.appendChild(timeGraphItem); - this.graphsTreeElement.appendChild(sizeGraphItem); - this.graphsTreeElement.expand(); - - this.resourcesTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("RESOURCES"), {}, true); - this.sidebarTree.appendChild(this.resourcesTreeElement); - - this.resourcesTreeElement.expand(); - - this.largerResourcesButton = document.createElement("button"); - this.largerResourcesButton.id = "resources-larger-resources-status-bar-item"; - this.largerResourcesButton.className = "status-bar-item toggled-on"; - this.largerResourcesButton.title = WebInspector.UIString("Use large resource rows."); - this.largerResourcesButton.addEventListener("click", this._toggleLargerResources.bind(this), false); - - this.sortingSelectElement = document.createElement("select"); - this.sortingSelectElement.className = "status-bar-item"; - this.sortingSelectElement.addEventListener("change", this._changeSortingFunction.bind(this), false); - - var sortingOption = document.createElement("option"); - sortingOption.label = WebInspector.UIString("Sort by Time"); - sortingOption.sortingFunction = WebInspector.ResourceSidebarTreeElement.CompareByTime; - this.sortingSelectElement.appendChild(sortingOption); - - sortingOption = document.createElement("option"); - sortingOption.label = WebInspector.UIString("Sort by Size"); - sortingOption.sortingFunction = WebInspector.ResourceSidebarTreeElement.CompareByDescendingSize; - this.sortingSelectElement.appendChild(sortingOption); - - this.sortingFunction = WebInspector.ResourceSidebarTreeElement.CompareByTime; - - this.reset(); - - timeGraphItem.select(); -} - -WebInspector.ResourcesPanel.prototype = { - toolbarItemClass: "resources", - - get toolbarItemLabel() - { - return WebInspector.UIString("Resources"); - }, - - get statusBarItems() - { - return [this.largerResourcesButton, this.sortingSelectElement]; - }, - - show: function() - { - WebInspector.Panel.prototype.show.call(this); - this._updateDividersLabelBarPosition(); - this._updateSidebarWidth(); - this.refreshIfNeeded(); - }, - - resize: function() - { - this._updateGraphDividersIfNeeded(); - this._updateGraphBars(); - - var visibleResourceView = this.visibleResourceView; - if (visibleResourceView && "resize" in visibleResourceView) - visibleResourceView.resize(); - }, - - get visibleResourceView() - { - if (this.visibleResource) - return this.visibleResource._resourcesView; - return null; - }, - - get calculator() - { - return this._calculator; - }, - - set calculator(x) - { - this._calculator = x; - if (this._calculator) - this._calculator.reset(); - this._refreshAllResources(false, true, true); - this._updateGraphDividersIfNeeded(true); - this._updateSummaryGraph(); - }, - - get sortingFunction() - { - return this._sortingFunction; - }, - - set sortingFunction(x) - { - this._sortingFunction = x; - this._sortResourcesIfNeeded(); - }, - - get needsRefresh() - { - return this._needsRefresh; - }, - - set needsRefresh(x) - { - if (this._needsRefresh === x) - return; - this._needsRefresh = x; - if (x && this.visible) - this.refresh(); - }, - - refreshIfNeeded: function() - { - if (this.needsRefresh) - this.refresh(); - }, - - refresh: function() - { - this.needsRefresh = false; - - var staleResourcesLength = this._staleResources.length; - for (var i = 0; i < staleResourcesLength; ++i) - this.refreshResource(this._staleResources[i], false, true, true); - - this._staleResources = []; - - this._updateGraphDividersIfNeeded(); - this._sortResourcesIfNeeded(); - this._updateSummaryGraph(); - }, - - reset: function() - { - this.closeVisibleResource(); - - if (this._calculator) - this._calculator.reset(); - - if (this._resources) { - var resourcesLength = this._resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resource = this._resources[i]; - - resource.warnings = 0; - resource.errors = 0; - - delete resource._resourcesTreeElement; - delete resource._resourcesView; - } - } - - this._resources = []; - this._staleResources = []; - - this.resourcesTreeElement.removeChildren(); - this.resourceViews.removeChildren(); - - this._updateGraphDividersIfNeeded(true); - - this._drawSummaryGraph(); // draws an empty graph - }, - - addResource: function(resource) - { - this._resources.push(resource); - - var resourceTreeElement = new WebInspector.ResourceSidebarTreeElement(resource); - resource._resourcesTreeElement = resourceTreeElement; - - resourceTreeElement.updateGraphSideWidth(this.dividersElement.offsetWidth); - - this.resourcesTreeElement.appendChild(resourceTreeElement); - - this.refreshResource(resource); - }, - - removeResource: function(resource) - { - if (this.visibleResourceView === resource._resourcesView) - this.closeVisibleResource(); - - var resourcesLength = this._resources.length; - for (var i = 0; i < resourcesLength; ++i) { - if (this._resources[i] === resource) { - this._resources.splice(i, 1); - break; - } - } - - this.resourcesTreeElement.removeChild(resource._resourcesTreeElement); - - resource.warnings = 0; - resource.errors = 0; - - delete resource._resourcesTreeElement; - delete resource._resourcesView; - }, - - addMessageToResource: function(resource, msg) - { - if (!resource) - return; - - switch (msg.level) { - case WebInspector.ConsoleMessage.MessageLevel.Warning: - ++resource.warnings; - break; - case WebInspector.ConsoleMessage.MessageLevel.Error: - ++resource.errors; - break; - } - - resource._resourcesTreeElement.updateErrorsAndWarnings(); - - var view = this._resourceView(resource); - if (view.addMessage) - view.addMessage(msg); - }, - - clearMessages: function() - { - var resourcesLength = this._resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resource = this._resources[i]; - resource.warnings = 0; - resource.errors = 0; - - resource._resourcesTreeElement.updateErrorsAndWarnings(); - - var view = resource._resourcesView; - if (!view || !view.clearMessages) - continue; - view.clearMessages(); - } - }, - - refreshResource: function(resource, skipBoundaryUpdate, skipSort, immediate) - { - if (!this.visible) { - this._staleResources.push(resource); - this.needsRefresh = true; - return; - } - - if (!skipBoundaryUpdate) { - if (this._updateGraphBoundriesIfNeeded(resource, immediate)) - return; // _updateGraphBoundriesIfNeeded refreshes all resources if it returns true, so just return. - } - - if (!skipSort) { - if (immediate) - this._sortResourcesIfNeeded(); - else - this._sortResourcesSoonIfNeeded(); - } - - this._updateSummaryGraphSoon(); - - if (!resource._resourcesTreeElement) - return; - - resource._resourcesTreeElement.refresh(); - - var percentages = this.calculator.computeBarGraphPercentages(resource); - - var barLeftElement = resource._resourcesTreeElement.barLeftElement; - barLeftElement.style.left = percentages.start + "%"; - barLeftElement.style.right = (100 - percentages.end) + "%"; - - var barRightElement = resource._resourcesTreeElement.barRightElement; - barRightElement.style.left = percentages.middle + "%"; - barRightElement.style.right = (100 - percentages.end) + "%"; - }, - - recreateViewForResourceIfNeeded: function(resource) - { - if (!resource || !resource._resourcesView) - return; - - var newView = this._createResourceView(resource); - if (newView.prototype === resource._resourcesView.prototype) - return; - - resource.warnings = 0; - resource.errors = 0; - - resource._resourcesTreeElement.updateErrorsAndWarnings(); - - resource._resourcesView.detach(); - delete resource._resourcesView; - - resource._resourcesView = newView; - - if (resource !== this.visibleResource) - return; - - newView.show(); - }, - - showResource: function(resource, line) - { - if (!resource) - return; - - this.containerElement.addStyleClass("viewing-resource"); - - if (this.visibleResource && this.visibleResource._resourcesView) - this.visibleResource._resourcesView.hide(); - - var view = this._resourceView(resource); - view.show(); - - if (line && view.showLine) - view.showLine(line); - - if (resource._resourcesTreeElement) { - resource._resourcesTreeElement.reveal(); - resource._resourcesTreeElement.select(true); - } - - this.visibleResource = resource; - - this._updateSidebarWidth(); - }, - - closeVisibleResource: function() - { - this.containerElement.removeStyleClass("viewing-resource"); - this._updateDividersLabelBarPosition(); - - if (this.visibleResource && this.visibleResource._resourcesView) - this.visibleResource._resourcesView.hide(); - delete this.visibleResource; - - if (this._calculator && this._calculator._graphsTreeElement) - this._calculator._graphsTreeElement.select(true); - - this._updateSidebarWidth(); - }, - - sourceFrameForResource: function(resource) - { - var view = this._resourceView(resource); - if (!view) - return null; - - if (!view.setupSourceFrameIfNeeded) - return null; - - // Setting up the source frame requires that we be attached. - if (!this.element.parentNode) - this.attach(); - - view.setupSourceFrameIfNeeded(); - return view.frameElement; - }, - - handleKeyEvent: function(event) - { - this.sidebarTree.handleKeyEvent(event); - }, - - _makeLegendElement: function(label, value, color) - { - var legendElement = document.createElement("label"); - legendElement.className = "resources-graph-legend-item"; - - if (color) { - var swatch = document.createElement("canvas"); - swatch.className = "resources-graph-legend-swatch"; - swatch.setAttribute("width", "13"); - swatch.setAttribute("height", "24"); - - legendElement.appendChild(swatch); - - this._drawSwatch(swatch, color); - } - - var labelElement = document.createElement("div"); - labelElement.className = "resources-graph-legend-label"; - legendElement.appendChild(labelElement); - - var headerElement = document.createElement("div"); - var headerElement = document.createElement("div"); - headerElement.className = "resources-graph-legend-header"; - headerElement.textContent = label; - labelElement.appendChild(headerElement); - - var valueElement = document.createElement("div"); - valueElement.className = "resources-graph-legend-value"; - valueElement.textContent = value; - labelElement.appendChild(valueElement); - - return legendElement; - }, - - _sortResourcesSoonIfNeeded: function() - { - if ("_sortResourcesTimeout" in this) - return; - this._sortResourcesTimeout = setTimeout(this._sortResourcesIfNeeded.bind(this), 500); - }, - - _sortResourcesIfNeeded: function() - { - if ("_sortResourcesTimeout" in this) { - clearTimeout(this._sortResourcesTimeout); - delete this._sortResourcesTimeout; - } - - var sortedElements = [].concat(this.resourcesTreeElement.children); - sortedElements.sort(this.sortingFunction); - - var sortedElementsLength = sortedElements.length; - for (var i = 0; i < sortedElementsLength; ++i) { - var treeElement = sortedElements[i]; - if (treeElement === this.resourcesTreeElement.children[i]) - continue; - this.resourcesTreeElement.removeChild(treeElement); - this.resourcesTreeElement.insertChild(treeElement, i); - } - }, - - _updateGraphBoundriesIfNeeded: function(resource, immediate) - { - var didChange = this.calculator.updateBoundries(resource); - - if (didChange) { - if (immediate) { - this._refreshAllResources(true, true, immediate); - this._updateGraphDividersIfNeeded(); - } else { - this._refreshAllResourcesSoon(true, true, immediate); - this._updateGraphDividersSoonIfNeeded(); - } - } - - return didChange; - }, - - _updateGraphDividersSoonIfNeeded: function() - { - if ("_updateGraphDividersTimeout" in this) - return; - this._updateGraphDividersTimeout = setTimeout(this._updateGraphDividersIfNeeded.bind(this), 500); - }, - - _updateGraphDividersIfNeeded: function(force) - { - if ("_updateGraphDividersTimeout" in this) { - clearTimeout(this._updateGraphDividersTimeout); - delete this._updateGraphDividersTimeout; - } - - if (!this.visible) { - this.needsRefresh = true; - return; - } - - if (document.body.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this._updateGraphDividersIfNeeded.bind(this), 0); - return; - } - - var dividerCount = Math.round(this.dividersElement.offsetWidth / 64); - var slice = this.calculator.boundarySpan / dividerCount; - if (!force && this._currentDividerSlice === slice) - return; - - this._currentDividerSlice = slice; - - this.dividersElement.removeChildren(); - this.dividersLabelBarElement.removeChildren(); - - for (var i = 1; i <= dividerCount; ++i) { - var divider = document.createElement("div"); - divider.className = "resources-divider"; - if (i === dividerCount) - divider.addStyleClass("last"); - divider.style.left = ((i / dividerCount) * 100) + "%"; - - this.dividersElement.appendChild(divider); - } - - for (var i = 1; i <= dividerCount; ++i) { - var divider = document.createElement("div"); - divider.className = "resources-divider"; - if (i === dividerCount) - divider.addStyleClass("last"); - divider.style.left = ((i / dividerCount) * 100) + "%"; - - var label = document.createElement("div"); - label.className = "resources-divider-label"; - if (!isNaN(slice)) - label.textContent = this.calculator.formatValue(slice * i); - divider.appendChild(label); - - this.dividersLabelBarElement.appendChild(divider); - } - }, - - _updateGraphBars: function() - { - if (!this.visible) { - this.needsRefresh = true; - return; - } - - if (document.body.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this._updateGraphBars.bind(this), 0); - return; - } - - var dividersElementWidth = this.dividersElement.offsetWidth; - var resourcesLength = this._resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resourceTreeItem = this._resources[i]._resourcesTreeElement; - if (!resourceTreeItem) - continue; - resourceTreeItem.updateGraphSideWidth(dividersElementWidth); - } - }, - - _refreshAllResourcesSoon: function(skipBoundaryUpdate, skipSort, immediate) - { - if ("_refreshAllResourcesTimeout" in this) - return; - this._refreshAllResourcesTimeout = setTimeout(this._refreshAllResources.bind(this), 500, skipBoundaryUpdate, skipSort, immediate); - }, - - _refreshAllResources: function(skipBoundaryUpdate, skipSort, immediate) - { - if ("_refreshAllResourcesTimeout" in this) { - clearTimeout(this._refreshAllResourcesTimeout); - delete this._refreshAllResourcesTimeout; - } - - var resourcesLength = this._resources.length; - for (var i = 0; i < resourcesLength; ++i) - this.refreshResource(this._resources[i], skipBoundaryUpdate, skipSort, immediate); - }, - - _fadeOutRect: function(ctx, x, y, w, h, a1, a2) - { - ctx.save(); - - var gradient = ctx.createLinearGradient(x, y, x, y + h); - gradient.addColorStop(0.0, "rgba(0, 0, 0, " + (1.0 - a1) + ")"); - gradient.addColorStop(0.8, "rgba(0, 0, 0, " + (1.0 - a2) + ")"); - gradient.addColorStop(1.0, "rgba(0, 0, 0, 1.0)"); - - ctx.globalCompositeOperation = "destination-out"; - - ctx.fillStyle = gradient; - ctx.fillRect(x, y, w, h); - - ctx.restore(); - }, - - _drawSwatch: function(canvas, color) - { - var ctx = canvas.getContext("2d"); - - function drawSwatchSquare() { - ctx.fillStyle = color; - ctx.fillRect(0, 0, 13, 13); - - var gradient = ctx.createLinearGradient(0, 0, 13, 13); - gradient.addColorStop(0.0, "rgba(255, 255, 255, 0.2)"); - gradient.addColorStop(1.0, "rgba(255, 255, 255, 0.0)"); - - ctx.fillStyle = gradient; - ctx.fillRect(0, 0, 13, 13); - - gradient = ctx.createLinearGradient(13, 13, 0, 0); - gradient.addColorStop(0.0, "rgba(0, 0, 0, 0.2)"); - gradient.addColorStop(1.0, "rgba(0, 0, 0, 0.0)"); - - ctx.fillStyle = gradient; - ctx.fillRect(0, 0, 13, 13); - - ctx.strokeStyle = "rgba(0, 0, 0, 0.6)"; - ctx.strokeRect(0.5, 0.5, 12, 12); - } - - ctx.clearRect(0, 0, 13, 24); - - drawSwatchSquare(); - - ctx.save(); - - ctx.translate(0, 25); - ctx.scale(1, -1); - - drawSwatchSquare(); - - ctx.restore(); - - this._fadeOutRect(ctx, 0, 13, 13, 13, 0.5, 0.0); - }, - - _drawSummaryGraph: function(segments) - { - if (!this.summaryGraphElement) - return; - - if (!segments || !segments.length) { - segments = [{color: "white", value: 1}]; - this._showingEmptySummaryGraph = true; - } else - delete this._showingEmptySummaryGraph; - - // Calculate the total of all segments. - var total = 0; - for (var i = 0; i < segments.length; ++i) - total += segments[i].value; - - // Calculate the percentage of each segment, rounded to the nearest percent. - var percents = segments.map(function(s) { return Math.max(Math.round(100 * s.value / total), 1) }); - - // Calculate the total percentage. - var percentTotal = 0; - for (var i = 0; i < percents.length; ++i) - percentTotal += percents[i]; - - // Make sure our percentage total is not greater-than 100, it can be greater - // if we rounded up for a few segments. - while (percentTotal > 100) { - for (var i = 0; i < percents.length && percentTotal > 100; ++i) { - if (percents[i] > 1) { - --percents[i]; - --percentTotal; - } - } - } - - // Make sure our percentage total is not less-than 100, it can be less - // if we rounded down for a few segments. - while (percentTotal < 100) { - for (var i = 0; i < percents.length && percentTotal < 100; ++i) { - ++percents[i]; - ++percentTotal; - } - } - - var ctx = this.summaryGraphElement.getContext("2d"); - - var x = 0; - var y = 0; - var w = 450; - var h = 19; - var r = (h / 2); - - function drawPillShadow() - { - // This draws a line with a shadow that is offset away from the line. The line is stroked - // twice with different X shadow offsets to give more feathered edges. Later we erase the - // line with destination-out 100% transparent black, leaving only the shadow. This only - // works if nothing has been drawn into the canvas yet. - - ctx.beginPath(); - ctx.moveTo(x + 4, y + h - 3 - 0.5); - ctx.lineTo(x + w - 4, y + h - 3 - 0.5); - ctx.closePath(); - - ctx.save(); - - ctx.shadowBlur = 2; - ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; - ctx.shadowOffsetX = 3; - ctx.shadowOffsetY = 5; - - ctx.strokeStyle = "white"; - ctx.lineWidth = 1; - - ctx.stroke(); - - ctx.shadowOffsetX = -3; - - ctx.stroke(); - - ctx.restore(); - - ctx.save(); - - ctx.globalCompositeOperation = "destination-out"; - ctx.strokeStyle = "rgba(0, 0, 0, 1)"; - ctx.lineWidth = 1; - - ctx.stroke(); - - ctx.restore(); - } - - function drawPill() - { - // Make a rounded rect path. - ctx.beginPath(); - ctx.moveTo(x, y + r); - ctx.lineTo(x, y + h - r); - ctx.quadraticCurveTo(x, y + h, x + r, y + h); - ctx.lineTo(x + w - r, y + h); - ctx.quadraticCurveTo(x + w, y + h, x + w, y + h - r); - ctx.lineTo(x + w, y + r); - ctx.quadraticCurveTo(x + w, y, x + w - r, y); - ctx.lineTo(x + r, y); - ctx.quadraticCurveTo(x, y, x, y + r); - ctx.closePath(); - - // Clip to the rounded rect path. - ctx.save(); - ctx.clip(); - - // Fill the segments with the associated color. - var previousSegmentsWidth = 0; - for (var i = 0; i < segments.length; ++i) { - var segmentWidth = Math.round(w * percents[i] / 100); - ctx.fillStyle = segments[i].color; - ctx.fillRect(x + previousSegmentsWidth, y, segmentWidth, h); - previousSegmentsWidth += segmentWidth; - } - - // Draw the segment divider lines. - ctx.lineWidth = 1; - for (var i = 1; i < 20; ++i) { - ctx.beginPath(); - ctx.moveTo(x + (i * Math.round(w / 20)) + 0.5, y); - ctx.lineTo(x + (i * Math.round(w / 20)) + 0.5, y + h); - ctx.closePath(); - - ctx.strokeStyle = "rgba(0, 0, 0, 0.2)"; - ctx.stroke(); - - ctx.beginPath(); - ctx.moveTo(x + (i * Math.round(w / 20)) + 1.5, y); - ctx.lineTo(x + (i * Math.round(w / 20)) + 1.5, y + h); - ctx.closePath(); - - ctx.strokeStyle = "rgba(255, 255, 255, 0.2)"; - ctx.stroke(); - } - - // Draw the pill shading. - var lightGradient = ctx.createLinearGradient(x, y, x, y + (h / 1.5)); - lightGradient.addColorStop(0.0, "rgba(220, 220, 220, 0.6)"); - lightGradient.addColorStop(0.4, "rgba(220, 220, 220, 0.2)"); - lightGradient.addColorStop(1.0, "rgba(255, 255, 255, 0.0)"); - - var darkGradient = ctx.createLinearGradient(x, y + (h / 3), x, y + h); - darkGradient.addColorStop(0.0, "rgba(0, 0, 0, 0.0)"); - darkGradient.addColorStop(0.8, "rgba(0, 0, 0, 0.2)"); - darkGradient.addColorStop(1.0, "rgba(0, 0, 0, 0.5)"); - - ctx.fillStyle = darkGradient; - ctx.fillRect(x, y, w, h); - - ctx.fillStyle = lightGradient; - ctx.fillRect(x, y, w, h); - - ctx.restore(); - } - - ctx.clearRect(x, y, w, (h * 2)); - - drawPillShadow(); - drawPill(); - - ctx.save(); - - ctx.translate(0, (h * 2) + 1); - ctx.scale(1, -1); - - drawPill(); - - ctx.restore(); - - this._fadeOutRect(ctx, x, y + h + 1, w, h, 0.5, 0.0); - }, - - _updateSummaryGraphSoon: function() - { - if ("_updateSummaryGraphTimeout" in this) - return; - this._updateSummaryGraphTimeout = setTimeout(this._updateSummaryGraph.bind(this), (this._showingEmptySummaryGraph ? 0 : 500)); - }, - - _updateSummaryGraph: function() - { - if ("_updateSummaryGraphTimeout" in this) { - clearTimeout(this._updateSummaryGraphTimeout); - delete this._updateSummaryGraphTimeout; - } - - var graphInfo = this.calculator.computeSummaryValues(this._resources); - - var categoryOrder = ["documents", "stylesheets", "images", "scripts", "xhr", "fonts", "other"]; - var categoryColors = {documents: {r: 47, g: 102, b: 236}, stylesheets: {r: 157, g: 231, b: 119}, images: {r: 164, g: 60, b: 255}, scripts: {r: 255, g: 121, b: 0}, xhr: {r: 231, g: 231, b: 10}, fonts: {r: 255, g: 82, b: 62}, other: {r: 186, g: 186, b: 186}}; - var fillSegments = []; - - this.legendElement.removeChildren(); - - if (this.totalLegendLabel) - this.totalLegendLabel.parentNode.removeChild(this.totalLegendLabel); - - for (var i = 0; i < categoryOrder.length; ++i) { - var category = categoryOrder[i]; - var size = graphInfo.categoryValues[category]; - if (!size) - continue; - - var color = categoryColors[category]; - var colorString = "rgb(" + color.r + ", " + color.g + ", " + color.b + ")"; - - var fillSegment = {color: colorString, value: size}; - fillSegments.push(fillSegment); - - var legendLabel = this._makeLegendElement(WebInspector.resourceCategories[category].title, this.calculator.formatValue(size), colorString); - this.legendElement.appendChild(legendLabel); - } - - if (graphInfo.total) { - var totalLegendLabel = this._makeLegendElement(WebInspector.UIString("Total"), this.calculator.formatValue(graphInfo.total)); - totalLegendLabel.addStyleClass("total"); - this.legendElement.appendChild(totalLegendLabel); - } - - this._drawSummaryGraph(fillSegments); - }, - - _updateDividersLabelBarPosition: function() - { - var scrollTop = this.containerElement.scrollTop; - var dividersTop = (scrollTop < this.summaryElement.offsetHeight ? this.summaryElement.offsetHeight : scrollTop); - this.dividersElement.style.top = scrollTop + "px"; - this.dividersLabelBarElement.style.top = dividersTop + "px"; - }, - - _graphSelected: function(treeElement) - { - this.calculator = treeElement.calculator; - this.closeVisibleResource(); - this.containerElement.scrollTop = 0; - }, - - _toggleLargerResources: function() - { - if (!this.resourcesTreeElement._childrenListNode) - return; - - if (this.resourcesTreeElement._childrenListNode.hasStyleClass("small")) { - this.resourcesTreeElement._childrenListNode.removeStyleClass("small"); - this.largerResourcesButton.addStyleClass("toggled-on"); - } else { - this.resourcesTreeElement._childrenListNode.addStyleClass("small"); - this.largerResourcesButton.removeStyleClass("toggled-on"); - } - }, - - _changeSortingFunction: function() - { - var selectedOption = this.sortingSelectElement[this.sortingSelectElement.selectedIndex]; - this.sortingFunction = selectedOption.sortingFunction; - }, - - _resourceView: function(resource) - { - if (!resource) - return null; - if (!resource._resourcesView) - resource._resourcesView = this._createResourceView(resource); - return resource._resourcesView; - }, - - _createResourceView: function(resource) - { - switch (resource.category) { - case WebInspector.resourceCategories.documents: - case WebInspector.resourceCategories.stylesheets: - case WebInspector.resourceCategories.scripts: - case WebInspector.resourceCategories.xhr: - return new WebInspector.SourceView(resource); - case WebInspector.resourceCategories.images: - return new WebInspector.ImageView(resource); - case WebInspector.resourceCategories.fonts: - return new WebInspector.FontView(resource); - default: - return new WebInspector.ResourceView(resource); - } - }, - - _startSidebarDragging: function(event) - { - WebInspector.elementDragStart(this.sidebarResizeElement, this._sidebarDragging.bind(this), this._endSidebarDragging.bind(this), event, "col-resize"); - }, - - _sidebarDragging: function(event) - { - this._updateSidebarWidth(event.pageX); - - event.preventDefault(); - }, - - _endSidebarDragging: function(event) - { - WebInspector.elementDragEnd(event); - }, - - _updateSidebarWidth: function(width) - { - if (this.sidebarElement.offsetWidth <= 0) { - // The stylesheet hasn't loaded yet, so we need to update later. - setTimeout(this._updateSidebarWidth.bind(this), 0, width); - return; - } - - if (!("_currentSidebarWidth" in this)) - this._currentSidebarWidth = this.sidebarElement.offsetWidth; - - if (typeof width === "undefined") - width = this._currentSidebarWidth; - - width = Number.constrain(width, Preferences.minSidebarWidth, window.innerWidth / 2); - - this._currentSidebarWidth = width; - - if (this.visibleResource) { - this.containerElement.style.width = width + "px"; - this.sidebarElement.style.removeProperty("width"); - } else { - this.sidebarElement.style.width = width + "px"; - this.containerElement.style.removeProperty("width"); - } - - this.containerContentElement.style.left = width + "px"; - this.resourceViews.style.left = width + "px"; - this.sidebarResizeElement.style.left = (width - 3) + "px"; - - this._updateGraphBars(); - this._updateGraphDividersIfNeeded(); - } -} - -WebInspector.ResourcesPanel.prototype.__proto__ = WebInspector.Panel.prototype; - -WebInspector.ResourceCalculator = function() -{ -} - -WebInspector.ResourceCalculator.prototype = { - computeSummaryValues: function(resources) - { - var total = 0; - var categoryValues = {}; - - var resourcesLength = resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resource = resources[i]; - var value = this._value(resource); - if (typeof value === "undefined") - continue; - if (!(resource.category.name in categoryValues)) - categoryValues[resource.category.name] = 0; - categoryValues[resource.category.name] += value; - total += value; - } - - return {categoryValues: categoryValues, total: total}; - }, - - computeBarGraphPercentages: function(resource) - { - return {start: 0, middle: 0, end: (this._value(resource) / this.boundarySpan) * 100}; - }, - - get boundarySpan() - { - return this.maximumBoundary - this.minimumBoundary; - }, - - updateBoundries: function(resource) - { - this.minimumBoundary = 0; - - var value = this._value(resource); - if (typeof this.maximumBoundary === "undefined" || value > this.maximumBoundary) { - this.maximumBoundary = value; - return true; - } - - return false; - }, - - reset: function() - { - delete this.minimumBoundary; - delete this.maximumBoundary; - }, - - _value: function(resource) - { - return 0; - }, - - formatValue: function(value) - { - return value.toString(); - } -} - -WebInspector.ResourceTransferTimeCalculator = function() -{ - WebInspector.ResourceCalculator.call(this); -} - -WebInspector.ResourceTransferTimeCalculator.prototype = { - computeSummaryValues: function(resources) - { - var resourcesByCategory = {}; - var resourcesLength = resources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resource = resources[i]; - if (!(resource.category.name in resourcesByCategory)) - resourcesByCategory[resource.category.name] = []; - resourcesByCategory[resource.category.name].push(resource); - } - - var earliestStart; - var latestEnd; - var categoryValues = {}; - for (var category in resourcesByCategory) { - resourcesByCategory[category].sort(WebInspector.Resource.CompareByTime); - categoryValues[category] = 0; - - var segment = {start: -1, end: -1}; - - var categoryResources = resourcesByCategory[category]; - var resourcesLength = categoryResources.length; - for (var i = 0; i < resourcesLength; ++i) { - var resource = categoryResources[i]; - if (resource.startTime === -1 || resource.endTime === -1) - continue; - - if (typeof earliestStart === "undefined") - earliestStart = resource.startTime; - else - earliestStart = Math.min(earliestStart, resource.startTime); - - if (typeof latestEnd === "undefined") - latestEnd = resource.endTime; - else - latestEnd = Math.max(latestEnd, resource.endTime); - - if (resource.startTime <= segment.end) { - segment.end = Math.max(segment.end, resource.endTime); - continue; - } - - categoryValues[category] += segment.end - segment.start; - - segment.start = resource.startTime; - segment.end = resource.endTime; - } - - // Add the last segment - categoryValues[category] += segment.end - segment.start; - } - - return {categoryValues: categoryValues, total: latestEnd - earliestStart}; - }, - - computeBarGraphPercentages: function(resource) - { - if (resource.startTime !== -1) - var start = ((resource.startTime - this.minimumBoundary) / this.boundarySpan) * 100; - else - var start = 100; - - if (resource.responseReceivedTime !== -1) - var middle = ((resource.responseReceivedTime - this.minimumBoundary) / this.boundarySpan) * 100; - else - var middle = 100; - - if (resource.endTime !== -1) - var end = ((resource.endTime - this.minimumBoundary) / this.boundarySpan) * 100; - else - var end = 100; - - return {start: start, middle: middle, end: end}; - }, - - updateBoundries: function(resource) - { - var didChange = false; - if (resource.startTime !== -1 && (typeof this.minimumBoundary === "undefined" || resource.startTime < this.minimumBoundary)) { - this.minimumBoundary = resource.startTime; - didChange = true; - } - - if (resource.endTime !== -1 && (typeof this.maximumBoundary === "undefined" || resource.endTime > this.maximumBoundary)) { - this.maximumBoundary = resource.endTime; - didChange = true; - } - - return didChange; - }, - - formatValue: function(value) - { - return Number.secondsToString(value, WebInspector.UIString.bind(WebInspector)); - } -} - -WebInspector.ResourceTransferTimeCalculator.prototype.__proto__ = WebInspector.ResourceCalculator.prototype; - -WebInspector.ResourceTransferSizeCalculator = function() -{ - WebInspector.ResourceCalculator.call(this); -} - -WebInspector.ResourceTransferSizeCalculator.prototype = { - _value: function(resource) - { - return resource.contentLength; - }, - - formatValue: function(value) - { - return Number.bytesToString(value, WebInspector.UIString.bind(WebInspector)); - } -} - -WebInspector.ResourceTransferSizeCalculator.prototype.__proto__ = WebInspector.ResourceCalculator.prototype; - -WebInspector.ResourceSidebarTreeElement = function(resource) -{ - this.resource = resource; - - WebInspector.SidebarTreeElement.call(this, "resource-sidebar-tree-item", "", "", resource); - - this.refreshTitles(); - - this.graphSideElement = document.createElement("div"); - this.graphSideElement.className = "resources-graph-side"; - - this.barAreaElement = document.createElement("div"); - this.barAreaElement.className = "resources-graph-bar-area"; - this.graphSideElement.appendChild(this.barAreaElement); - - this.barLeftElement = document.createElement("div"); - this.barLeftElement.className = "resources-graph-bar waiting"; - this.barAreaElement.appendChild(this.barLeftElement); - - this.barRightElement = document.createElement("div"); - this.barRightElement.className = "resources-graph-bar"; - this.barAreaElement.appendChild(this.barRightElement); -} - -WebInspector.ResourceSidebarTreeElement.prototype = { - onattach: function() - { - WebInspector.SidebarTreeElement.prototype.onattach.call(this); - - this._listItemNode.appendChild(this.graphSideElement); - this._listItemNode.addStyleClass("resources-category-" + this.resource.category.name); - }, - - onselect: function() - { - WebInspector.panels.resources.showResource(this.resource); - }, - - get mainTitle() - { - return this.resource.displayName; - }, - - set mainTitle(x) - { - // Do nothing. - }, - - get subtitle() - { - var subtitle = this.resource.displayDomain; - - if (this.resource.path && this.resource.lastPathComponent) { - var lastPathComponentIndex = this.resource.path.lastIndexOf("/" + this.resource.lastPathComponent); - if (lastPathComponentIndex != -1) - subtitle += this.resource.path.substring(0, lastPathComponentIndex); - } - - return subtitle; - }, - - set subtitle(x) - { - // Do nothing. - }, - - refresh: function() - { - this.refreshTitles(); - - var newClassName = "sidebar-tree-item resource-sidebar-tree-item resources-category-" + this.resource.category.name; - if (this._listItemNode && this._listItemNode.className !== newClassName) - this._listItemNode.className = newClassName; - }, - - updateErrorsAndWarnings: function() - { - if (this.resource.warnings || this.resource.errors) - this.bubbleText = (this.resource.warnings + this.resource.errors); - else - this.bubbleText = ""; - - if (this.resource.warnings) - this.bubbleElement.addStyleClass("warning"); - else - this.bubbleElement.removeStyleClass("warning"); - - if (this.resource.errors) - this.bubbleElement.addStyleClass("error"); - else - this.bubbleElement.removeStyleClass("error"); - }, - - updateGraphSideWidth: function(width) - { - width += 1; // Add one to account for the sidebar border width. - this.graphSideElement.style.right = -width + "px"; - this.graphSideElement.style.width = width + "px"; - } -} - -WebInspector.ResourceSidebarTreeElement.CompareByTime = function(a, b) -{ - return WebInspector.Resource.CompareByTime(a.resource, b.resource); -} - -WebInspector.ResourceSidebarTreeElement.CompareBySize = function(a, b) -{ - return WebInspector.Resource.CompareBySize(a.resource, b.resource); -} - -WebInspector.ResourceSidebarTreeElement.CompareByDescendingSize = function(a, b) -{ - return WebInspector.Resource.CompareByDescendingSize(a.resource, b.resource); -} - -WebInspector.ResourceSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype; diff --git a/webkit/port/page/inspector/ScriptsPanel.js b/webkit/port/page/inspector/ScriptsPanel.js index dbc0e4c..e69de29 100644 --- a/webkit/port/page/inspector/ScriptsPanel.js +++ b/webkit/port/page/inspector/ScriptsPanel.js @@ -1,215 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.ScriptsPanel = function() -{ - WebInspector.Panel.call(this); - - this.element.addStyleClass("scripts"); - - this.topStatusBar = document.createElement("div"); - this.topStatusBar.className = "status-bar"; - this.topStatusBar.id = "scripts-status-bar"; - this.element.appendChild(this.topStatusBar); - - this.backButton = document.createElement("button"); - this.backButton.className = "status-bar-item"; - this.backButton.id = "scripts-back"; - this.backButton.title = WebInspector.UIString("Show the previous script resource."); - this.backButton.disabled = true; - this.backButton.appendChild(document.createElement("img")); - this.topStatusBar.appendChild(this.backButton); - - this.forwardButton = document.createElement("button"); - this.forwardButton.className = "status-bar-item"; - this.forwardButton.id = "scripts-forward"; - this.forwardButton.title = WebInspector.UIString("Show the next script resource."); - this.forwardButton.disabled = true; - this.forwardButton.appendChild(document.createElement("img")); - this.topStatusBar.appendChild(this.forwardButton); - - this.filesSelectElement = document.createElement("select"); - this.filesSelectElement.className = "status-bar-item"; - this.filesSelectElement.id = "scripts-files"; - this.topStatusBar.appendChild(this.filesSelectElement); - - this.functionsSelectElement = document.createElement("select"); - this.functionsSelectElement.className = "status-bar-item"; - this.functionsSelectElement.id = "scripts-functions"; - this.topStatusBar.appendChild(this.functionsSelectElement); - - this.sidebarButtonsElement = document.createElement("div"); - this.sidebarButtonsElement.id = "scripts-sidebar-buttons"; - this.topStatusBar.appendChild(this.sidebarButtonsElement); - - this.pauseButton = document.createElement("button"); - this.pauseButton.className = "status-bar-item"; - this.pauseButton.id = "scripts-pause"; - this.pauseButton.title = WebInspector.UIString("Pause script execution."); - this.pauseButton.disabled = true; - this.pauseButton.appendChild(document.createElement("img")); - this.sidebarButtonsElement.appendChild(this.pauseButton); - - this.stepOverButton = document.createElement("button"); - this.stepOverButton.className = "status-bar-item"; - this.stepOverButton.id = "scripts-step-over"; - this.stepOverButton.title = WebInspector.UIString("Step over next function call."); - this.stepOverButton.disabled = true; - this.stepOverButton.appendChild(document.createElement("img")); - this.sidebarButtonsElement.appendChild(this.stepOverButton); - - this.stepIntoButton = document.createElement("button"); - this.stepIntoButton.className = "status-bar-item"; - this.stepIntoButton.id = "scripts-step-into"; - this.stepIntoButton.title = WebInspector.UIString("Step into next function call."); - this.stepIntoButton.disabled = true; - this.stepIntoButton.appendChild(document.createElement("img")); - this.sidebarButtonsElement.appendChild(this.stepIntoButton); - - this.stepOutButton = document.createElement("button"); - this.stepOutButton.className = "status-bar-item"; - this.stepOutButton.id = "scripts-step-out"; - this.stepOutButton.title = WebInspector.UIString("Step out of current function."); - this.stepOutButton.disabled = true; - this.stepOutButton.appendChild(document.createElement("img")); - this.sidebarButtonsElement.appendChild(this.stepOutButton); - - this.debuggerStatusElement = document.createElement("div"); - this.debuggerStatusElement.id = "scripts-debugger-status"; - this.sidebarButtonsElement.appendChild(this.debuggerStatusElement); - - this.scriptResourceViews = document.createElement("div"); - this.scriptResourceViews.id = "script-resource-views"; - - this.sidebarElement = document.createElement("div"); - this.sidebarElement.id = "scripts-sidebar"; - - this.sidebarResizeElement = document.createElement("div"); - this.sidebarResizeElement.className = "sidebar-resizer-vertical"; - this.sidebarResizeElement.addEventListener("mousedown", this._startSidebarResizeDrag.bind(this), false); - - this.sidebarResizeWidgetElement = document.createElement("div"); - this.sidebarResizeWidgetElement.id = "scripts-sidebar-resizer-widget"; - this.sidebarResizeWidgetElement.addEventListener("mousedown", this._startSidebarResizeDrag.bind(this), false); - this.topStatusBar.appendChild(this.sidebarResizeWidgetElement); - - this.sidebarPanes = {}; - this.sidebarPanes.callstack = new WebInspector.CallStackSidebarPane(); - this.sidebarPanes.breakpoints = new WebInspector.BreakpointsSidebarPane(); - - for (var pane in this.sidebarPanes) - this.sidebarElement.appendChild(this.sidebarPanes[pane].element); - - this.element.appendChild(this.scriptResourceViews); - this.element.appendChild(this.sidebarElement); - this.element.appendChild(this.sidebarResizeElement); - - this.debuggingButton = document.createElement("button"); - this.debuggingButton.id = "scripts-debugging-status-bar-item"; - this.debuggingButton.className = "status-bar-item"; - this.debuggingButton.addEventListener("click", this._toggleDebugging.bind(this), false); - - this.reset(); -} - -WebInspector.ScriptsPanel.prototype = { - toolbarItemClass: "scripts", - - get toolbarItemLabel() - { - return WebInspector.UIString("Scripts"); - }, - - get statusBarItems() - { - return [this.debuggingButton]; - }, - - show: function() - { - WebInspector.Panel.prototype.show.call(this); - this.sidebarResizeElement.style.right = (this.sidebarElement.offsetWidth - 3) + "px"; - }, - - reset: function() - { - this._updateDebuggerButtons(); - }, - - _startSidebarResizeDrag: function(event) - { - WebInspector.elementDragStart(this.sidebarElement, this._sidebarResizeDrag.bind(this), this._endSidebarResizeDrag.bind(this), event, "col-resize"); - - if (event.target === this.sidebarResizeWidgetElement) - this._dragOffset = (event.target.offsetWidth - (event.pageX - event.target.totalOffsetLeft)); - else - this._dragOffset = 0; - }, - - _endSidebarResizeDrag: function(event) - { - WebInspector.elementDragEnd(event); - - delete this._dragOffset; - }, - - _sidebarResizeDrag: function(event) - { - var x = event.pageX + this._dragOffset; - var newWidth = Number.constrain(window.innerWidth - x, Preferences.minScriptsSidebarWidth, window.innerWidth * 0.66); - - this.sidebarElement.style.width = newWidth + "px"; - this.sidebarButtonsElement.style.width = newWidth + "px"; - this.scriptResourceViews.style.right = newWidth + "px"; - this.sidebarResizeWidgetElement.style.right = newWidth + "px"; - this.sidebarResizeElement.style.right = (newWidth - 3) + "px"; - - event.preventDefault(); - }, - - _updateDebuggerButtons: function() - { - if (InspectorController.debuggerAttached()) { - this.debuggingButton.title = WebInspector.UIString("Stop debugging."); - this.debuggingButton.addStyleClass("toggled-on"); - this.pauseButton.disabled = false; - } else { - this.debuggingButton.title = WebInspector.UIString("Start debugging and reload inspected page."); - this.debuggingButton.removeStyleClass("toggled-on"); - this.pauseButton.disabled = true; - } - }, - - _toggleDebugging: function() - { - if (InspectorController.debuggerAttached()) - InspectorController.stopDebugging(); - else - InspectorController.startDebuggingAndReloadInspectedPage(); - this._updateDebuggerButtons(); - }, -} - -WebInspector.ScriptsPanel.prototype.__proto__ = WebInspector.Panel.prototype; diff --git a/webkit/port/page/inspector/SidebarPane.js b/webkit/port/page/inspector/SidebarPane.js index 53f9d6d..e69de29 100644 --- a/webkit/port/page/inspector/SidebarPane.js +++ b/webkit/port/page/inspector/SidebarPane.js @@ -1,123 +0,0 @@ -/* - * 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. - */ - -WebInspector.SidebarPane = function(title) -{ - this.element = document.createElement("div"); - this.element.className = "pane"; - - this.titleElement = document.createElement("div"); - this.titleElement.className = "title"; - this.titleElement.addEventListener("click", this.toggleExpanded.bind(this), false); - - this.bodyElement = document.createElement("div"); - this.bodyElement.className = "body"; - - this.element.appendChild(this.titleElement); - this.element.appendChild(this.bodyElement); - - this.title = title; - this.growbarVisible = false; - this.expanded = false; -} - -WebInspector.SidebarPane.prototype = { - get title() - { - return this._title; - }, - - set title(x) - { - if (this._title === x) - return; - this._title = x; - this.titleElement.textContent = x; - }, - - get growbarVisible() - { - return this._growbarVisible; - }, - - set growbarVisible(x) - { - if (this._growbarVisible === x) - return; - - this._growbarVisible = x; - - if (x && !this._growbarElement) { - this._growbarElement = document.createElement("div"); - this._growbarElement.className = "growbar"; - this.element.appendChild(this._growbarElement); - } else if (!x && this._growbarElement) { - if (this._growbarElement.parentNode) - this._growbarElement.parentNode(this._growbarElement); - delete this._growbarElement; - } - }, - - get expanded() - { - return this._expanded; - }, - - set expanded(x) - { - if (x) - this.expand(); - else - this.collapse(); - }, - - expand: function() - { - if (this._expanded) - return; - this._expanded = true; - this.element.addStyleClass("expanded"); - if (this.onexpand) - this.onexpand(this); - }, - - collapse: function() - { - if (!this._expanded) - return; - this._expanded = false; - this.element.removeStyleClass("expanded"); - if (this.oncollapse) - this.oncollapse(this); - }, - - toggleExpanded: function() - { - this.expanded = !this.expanded; - } -} diff --git a/webkit/port/page/inspector/SidebarTreeElement.js b/webkit/port/page/inspector/SidebarTreeElement.js index 3d3ba4c..e69de29 100644 --- a/webkit/port/page/inspector/SidebarTreeElement.js +++ b/webkit/port/page/inspector/SidebarTreeElement.js @@ -1,161 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.SidebarSectionTreeElement = function(title, representedObject, hasChildren) -{ - TreeElement.call(this, title.escapeHTML(), representedObject || {}, hasChildren); -} - -WebInspector.SidebarSectionTreeElement.prototype = { - selectable: false, - - onattach: function() - { - this._listItemNode.addStyleClass("sidebar-tree-section"); - }, - - onreveal: function() - { - if (this.listItemElement) - this.listItemElement.scrollIntoViewIfNeeded(false); - } -} - -WebInspector.SidebarSectionTreeElement.prototype.__proto__ = TreeElement.prototype; - -WebInspector.SidebarTreeElement = function(className, title, subtitle, representedObject, hasChildren) -{ - TreeElement.call(this, "", representedObject || {}, hasChildren); - - if (hasChildren) { - this.disclosureButton = document.createElement("button"); - this.disclosureButton.className = "disclosure-button"; - } - - this.statusElement = document.createElement("div"); - this.statusElement.className = "status"; - - this.titlesElement = document.createElement("div"); - this.titlesElement.className = "titles"; - - this.titleElement = document.createElement("span"); - this.titleElement.className = "title"; - this.titlesElement.appendChild(this.titleElement); - - this.subtitleElement = document.createElement("span"); - this.subtitleElement.className = "subtitle"; - this.titlesElement.appendChild(this.subtitleElement); - - this.className = className; - this.mainTitle = title; - this.subtitle = subtitle; -} - -WebInspector.SidebarTreeElement.prototype = { - get mainTitle() - { - return this._mainTitle; - }, - - set mainTitle(x) - { - this._mainTitle = x; - this.refreshTitles(); - }, - - get subtitle() - { - return this._subtitle; - }, - - set subtitle(x) - { - this._subtitle = x; - this.refreshTitles(); - }, - - get bubbleText() - { - return this._bubbleText; - }, - - set bubbleText(x) - { - if (!this.bubbleElement) { - this.bubbleElement = document.createElement("div"); - this.bubbleElement.className = "bubble"; - this.statusElement.appendChild(this.bubbleElement); - } - - this._bubbleText = x; - this.bubbleElement.textContent = x; - }, - - refreshTitles: function() - { - var mainTitle = this.mainTitle; - if (this.titleElement.textContent !== mainTitle) - this.titleElement.textContent = mainTitle; - - var subtitle = this.subtitle; - if (subtitle) { - if (this.subtitleElement.textContent !== subtitle) - this.subtitleElement.textContent = subtitle; - this.titlesElement.removeStyleClass("no-subtitle"); - } else - this.titlesElement.addStyleClass("no-subtitle"); - }, - - isEventWithinDisclosureTriangle: function(event) - { - return event.target === this.disclosureButton; - }, - - onattach: function() - { - this._listItemNode.addStyleClass("sidebar-tree-item"); - - if (this.className) - this._listItemNode.addStyleClass(this.className); - - if (this.hasChildren && this.disclosureButton) - this._listItemNode.appendChild(this.disclosureButton); - - var iconElement = document.createElement("img"); - iconElement.className = "icon"; - - this._listItemNode.appendChild(iconElement); - this._listItemNode.appendChild(this.statusElement); - this._listItemNode.appendChild(this.titlesElement); - }, - - onreveal: function() - { - if (this._listItemNode) - this._listItemNode.scrollIntoViewIfNeeded(false); - } -} - -WebInspector.SidebarTreeElement.prototype.__proto__ = TreeElement.prototype; diff --git a/webkit/port/page/inspector/SourceView.js b/webkit/port/page/inspector/SourceView.js index 8d888e4..e69de29 100644 --- a/webkit/port/page/inspector/SourceView.js +++ b/webkit/port/page/inspector/SourceView.js @@ -1,162 +0,0 @@ -/* - * Copyright (C) 2007, 2008 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. - */ - -WebInspector.SourceView = function(resource) -{ - WebInspector.ResourceView.call(this, resource); - - this.element.addStyleClass("source"); - - this.messages = []; - this._frameNeedsSetup = true; - - this.frameElement = document.createElement("iframe"); - this.frameElement.className = "source-view-frame"; - this.frameElement.setAttribute("viewsource", "true"); - this.contentElement.appendChild(this.frameElement); -} - -WebInspector.SourceView.prototype = { - show: function() - { - WebInspector.ResourceView.prototype.show.call(this); - this.setupSourceFrameIfNeeded(); - }, - - setupSourceFrameIfNeeded: function() - { - if (this.resource.finished && !this.resource.failed && this._frameNeedsSetup) { - delete this._frameNeedsSetup; - - this.attach(); - - InspectorController.addSourceToFrame(this.resource.identifier, this.frameElement); - WebInspector.addMainEventListeners(this.frameElement.contentDocument); - - var length = this.messages.length; - for (var i = 0; i < length; ++i) - this._addMessageToSource(this.messages[i]); - } - }, - - sourceRow: function(lineNumber) - { - if (!lineNumber) - return; - - this.setupSourceFrameIfNeeded(); - - var doc = this.frameElement.contentDocument; - var rows = doc.getElementsByTagName("table")[0].rows; - - // Line numbers are a 1-based index, but the rows collection is 0-based. - --lineNumber; - if (lineNumber >= rows.length) - lineNumber = rows.length - 1; - - return rows[lineNumber]; - }, - - showLine: function(lineNumber) - { - var row = this.sourceRow(lineNumber); - if (!row) - return; - row.scrollIntoViewIfNeeded(true); - }, - - addMessage: function(msg) - { - this.messages.push(msg); - if (!this._frameNeedsSetup) - this._addMessageToSource(msg); - }, - - clearMessages: function() - { - this.messages = []; - - if (this._frameNeedsSetup) - return; - - var bubbles = this.frameElement.contentDocument.querySelectorAll(".webkit-html-message-bubble"); - if (!bubbles) - return; - - for (var i = 0; i < bubbles.length; ++i) { - var bubble = bubbles[i]; - bubble.parentNode.removeChild(bubble); - } - }, - - _addMessageToSource: function(msg) - { - var row = this.sourceRow(msg.line); - if (!row) - return; - - var doc = this.frameElement.contentDocument; - var cell = row.getElementsByTagName("td")[1]; - - var errorDiv = cell.lastChild; - if (!errorDiv || errorDiv.nodeName.toLowerCase() !== "div" || !errorDiv.hasStyleClass("webkit-html-message-bubble")) { - errorDiv = doc.createElement("div"); - errorDiv.className = "webkit-html-message-bubble"; - cell.appendChild(errorDiv); - } - - var imageURL; - switch (msg.level) { - case WebInspector.ConsoleMessage.MessageLevel.Error: - errorDiv.addStyleClass("webkit-html-error-message"); - imageURL = "Images/errorIcon.png"; - break; - case WebInspector.ConsoleMessage.MessageLevel.Warning: - errorDiv.addStyleClass("webkit-html-warning-message"); - imageURL = "Images/warningIcon.png"; - break; - } - - var lineDiv = doc.createElement("div"); - lineDiv.className = "webkit-html-message-line"; - errorDiv.appendChild(lineDiv); - - // Create the image element in the Inspector's document so we can use relative image URLs. - var image = document.createElement("img"); - image.src = imageURL; - image.className = "webkit-html-message-icon"; - - // Adopt the image element since it wasn't created in doc. - image = doc.adoptNode(image); - lineDiv.appendChild(image); - - lineDiv.appendChild(doc.createTextNode(msg.message)); - } -} - -WebInspector.SourceView.prototype.__proto__ = WebInspector.ResourceView.prototype; diff --git a/webkit/port/page/inspector/StylesSidebarPane.js b/webkit/port/page/inspector/StylesSidebarPane.js index d68d604..e69de29 100644 --- a/webkit/port/page/inspector/StylesSidebarPane.js +++ b/webkit/port/page/inspector/StylesSidebarPane.js @@ -1,652 +0,0 @@ -/* - * 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. - */ - -WebInspector.StylesSidebarPane = function() -{ - WebInspector.SidebarPane.call(this, WebInspector.UIString("Styles")); -} - -WebInspector.StylesSidebarPane.prototype = { - update: function(node, editedSection, forceUpdate) - { - var refresh = false; - - if (forceUpdate) - delete this.node; - - if (!forceUpdate && (!node || node === this.node)) - refresh = true; - - if (node && node.nodeType === Node.TEXT_NODE && node.parentNode) - node = node.parentNode; - - if (node && node.nodeType !== Node.ELEMENT_NODE) - node = null; - - if (node) - this.node = node; - else - node = this.node; - - var body = this.bodyElement; - if (!refresh || !node) { - body.removeChildren(); - this.sections = []; - } - - if (!node) - return; - - var styleRules = []; - - if (refresh) { - for (var i = 0; i < this.sections.length; ++i) { - var section = this.sections[i]; - if (section.computedStyle) - section.styleRule.style = node.ownerDocument.defaultView.getComputedStyle(node); - var styleRule = { section: section, style: section.styleRule.style, computedStyle: section.computedStyle }; - styleRules.push(styleRule); - } - } else { - var computedStyle = node.ownerDocument.defaultView.getComputedStyle(node); - styleRules.push({ computedStyle: true, selectorText: WebInspector.UIString("Computed Style"), style: computedStyle, editable: false }); - - var nodeName = node.nodeName.toLowerCase(); - for (var i = 0; i < node.attributes.length; ++i) { - var attr = node.attributes[i]; - if (attr.style) { - var attrStyle = { style: attr.style, editable: false }; - attrStyle.subtitle = WebInspector.UIString("element’s “%s” attribute", attr.name); - attrStyle.selectorText = nodeName + "[" + attr.name; - if (attr.value.length) - attrStyle.selectorText += "=" + attr.value; - attrStyle.selectorText += "]"; - styleRules.push(attrStyle); - } - } - - if (node.style && node.style.length) { - var inlineStyle = { selectorText: WebInspector.UIString("Inline Style Attribute"), style: node.style }; - inlineStyle.subtitle = WebInspector.UIString("element’s “%s” attribute", "style"); - styleRules.push(inlineStyle); - } - - var matchedStyleRules = node.ownerDocument.defaultView.getMatchedCSSRules(node, "", !Preferences.showUserAgentStyles); - if (matchedStyleRules) { - // Add rules in reverse order to match the cascade order. - for (var i = (matchedStyleRules.length - 1); i >= 0; --i) { - var rule = matchedStyleRules[i]; - styleRules.push({ style: rule.style, selectorText: rule.selectorText, parentStyleSheet: rule.parentStyleSheet }); - } - } - } - - var usedProperties = {}; - var priorityUsed = false; - - // Walk the style rules and make a list of all used and overloaded properties. - for (var i = 0; i < styleRules.length; ++i) { - var styleRule = styleRules[i]; - if (styleRule.computedStyle) - continue; - - styleRule.usedProperties = {}; - - var style = styleRule.style; - for (var j = 0; j < style.length; ++j) { - var name = style[j]; - - if (!priorityUsed && style.getPropertyPriority(name).length) - priorityUsed = true; - - // If the property name is already used by another rule then this rule's - // property is overloaded, so don't add it to the rule's usedProperties. - if (!(name in usedProperties)) - styleRule.usedProperties[name] = true; - - if (name === "font") { - // The font property is not reported as a shorthand. Report finding the individual - // properties so they are visible in computed style. - // FIXME: remove this when http://bugs.webkit.org/show_bug.cgi?id=15598 is fixed. - styleRule.usedProperties["font-family"] = true; - styleRule.usedProperties["font-size"] = true; - styleRule.usedProperties["font-style"] = true; - styleRule.usedProperties["font-variant"] = true; - styleRule.usedProperties["font-weight"] = true; - styleRule.usedProperties["line-height"] = true; - } - } - - // Add all the properties found in this style to the used properties list. - // Do this here so only future rules are affect by properties used in this rule. - for (var name in styleRules[i].usedProperties) - usedProperties[name] = true; - } - - if (priorityUsed) { - // Walk the properties again and account for !important. - var foundPriorityProperties = []; - - // Walk in reverse to match the order !important overrides. - for (var i = (styleRules.length - 1); i >= 0; --i) { - if (styleRules[i].computedStyle) - continue; - - var style = styleRules[i].style; - var uniqueProperties = getUniqueStyleProperties(style); - for (var j = 0; j < uniqueProperties.length; ++j) { - var name = uniqueProperties[j]; - if (style.getPropertyPriority(name).length) { - if (!(name in foundPriorityProperties)) - styleRules[i].usedProperties[name] = true; - else - delete styleRules[i].usedProperties[name]; - foundPriorityProperties[name] = true; - } else if (name in foundPriorityProperties) - delete styleRules[i].usedProperties[name]; - } - } - } - - if (refresh) { - // Walk the style rules and update the sections with new overloaded and used properties. - for (var i = 0; i < styleRules.length; ++i) { - var styleRule = styleRules[i]; - var section = styleRule.section; - section._usedProperties = (styleRule.usedProperties || usedProperties); - section.update((section === editedSection) || styleRule.computedStyle); - } - } else { - // Make a property section for each style rule. - for (var i = 0; i < styleRules.length; ++i) { - var styleRule = styleRules[i]; - var subtitle = styleRule.subtitle; - delete styleRule.subtitle; - - var computedStyle = styleRule.computedStyle; - delete styleRule.computedStyle; - - var ruleUsedProperties = styleRule.usedProperties; - delete styleRule.usedProperties; - - var editable = styleRule.editable; - delete styleRule.editable; - - // Default editable to true if it was omitted. - if (typeof editable === "undefined") - editable = true; - - var section = new WebInspector.StylePropertiesSection(styleRule, subtitle, computedStyle, (ruleUsedProperties || usedProperties), editable); - section.expanded = true; - section.pane = this; - - body.appendChild(section.element); - this.sections.push(section); - } - } - } -} - -WebInspector.StylesSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype; - -WebInspector.StylePropertiesSection = function(styleRule, subtitle, computedStyle, usedProperties, editable) -{ - WebInspector.PropertiesSection.call(this, styleRule.selectorText); - - this.styleRule = styleRule; - this.computedStyle = computedStyle; - this.editable = (editable && !computedStyle); - - // Prevent editing the user agent rules. - if (this.styleRule.parentStyleSheet && !this.styleRule.parentStyleSheet.ownerNode && !this.styleRule.parentStyleSheet.href) - this.editable = false; - - this._usedProperties = usedProperties; - - if (computedStyle) { - if (Preferences.showInheritedComputedStyleProperties) - this.element.addStyleClass("show-inherited"); - - var showInheritedLabel = document.createElement("label"); - var showInheritedInput = document.createElement("input"); - showInheritedInput.type = "checkbox"; - showInheritedInput.checked = Preferences.showInheritedComputedStyleProperties; - - var computedStyleSection = this; - var showInheritedToggleFunction = function(event) { - Preferences.showInheritedComputedStyleProperties = showInheritedInput.checked; - if (Preferences.showInheritedComputedStyleProperties) - computedStyleSection.element.addStyleClass("show-inherited"); - else - computedStyleSection.element.removeStyleClass("show-inherited"); - event.stopPropagation(); - }; - - showInheritedLabel.addEventListener("click", showInheritedToggleFunction, false); - - showInheritedLabel.appendChild(showInheritedInput); - showInheritedLabel.appendChild(document.createTextNode(WebInspector.UIString("Show inherited"))); - this.subtitleElement.appendChild(showInheritedLabel); - } else { - if (!subtitle) { - if (this.styleRule.parentStyleSheet && this.styleRule.parentStyleSheet.href) { - var url = this.styleRule.parentStyleSheet.href; - subtitle = WebInspector.linkifyURL(url, url.trimURL(WebInspector.mainResource ? WebInspector.mainResource.domain : "").escapeHTML()); - this.subtitleElement.addStyleClass("file"); - } else if (this.styleRule.parentStyleSheet && !this.styleRule.parentStyleSheet.ownerNode) - subtitle = WebInspector.UIString("user agent stylesheet"); - else - subtitle = WebInspector.UIString("inline stylesheet"); - } - - this.subtitle = subtitle; - } -} - -WebInspector.StylePropertiesSection.prototype = { - get usedProperties() - { - return this._usedProperties || {}; - }, - - set usedProperties(x) - { - this._usedProperties = x; - this.update(); - }, - - isPropertyInherited: function(property) - { - if (!this.computedStyle || !this._usedProperties) - return false; - // These properties should always show for Computed Style. - var alwaysShowComputedProperties = { "display": true, "height": true, "width": true }; - return !(property in this.usedProperties) && !(property in alwaysShowComputedProperties); - }, - - isPropertyOverloaded: function(property, shorthand) - { - if (this.computedStyle || !this._usedProperties) - return false; - - var used = (property in this.usedProperties); - if (used || !shorthand) - return !used; - - // Find out if any of the individual longhand properties of the shorthand - // are used, if none are then the shorthand is overloaded too. - var longhandProperties = getLonghandProperties(this.styleRule.style, property); - for (var j = 0; j < longhandProperties.length; ++j) { - var individualProperty = longhandProperties[j]; - if (individualProperty in this.usedProperties) - return false; - } - - return true; - }, - - update: function(full) - { - if (full || this.computedStyle) { - this.propertiesTreeOutline.removeChildren(); - this.populated = false; - } else { - var child = this.propertiesTreeOutline.children[0]; - while (child) { - child.overloaded = this.isPropertyOverloaded(child.name, child.shorthand); - child = child.traverseNextTreeElement(false, null, true); - } - } - }, - - onpopulate: function() - { - var style = this.styleRule.style; - if (!style.length) - return; - - var foundShorthands = {}; - var uniqueProperties = getUniqueStyleProperties(style); - uniqueProperties.sort(); - - for (var i = 0; i < uniqueProperties.length; ++i) { - var name = uniqueProperties[i]; - var shorthand = style.getPropertyShorthand(name); - - if (shorthand && shorthand in foundShorthands) - continue; - - if (shorthand) { - foundShorthands[shorthand] = true; - name = shorthand; - } - - var isShorthand = (shorthand ? true : false); - var inherited = this.isPropertyInherited(name); - var overloaded = this.isPropertyOverloaded(name, isShorthand); - - var item = new WebInspector.StylePropertyTreeElement(style, name, isShorthand, inherited, overloaded); - this.propertiesTreeOutline.appendChild(item); - } - } -} - -WebInspector.StylePropertiesSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype; - -WebInspector.StylePropertyTreeElement = function(style, name, shorthand, inherited, overloaded) -{ - this.style = style; - this.name = name; - this.shorthand = shorthand; - this._inherited = inherited; - this._overloaded = overloaded; - - // Pass an empty title, the title gets made later in onattach. - TreeElement.call(this, "", null, shorthand); -} - -WebInspector.StylePropertyTreeElement.prototype = { - get inherited() - { - return this._inherited; - }, - - set inherited(x) - { - if (x === this._inherited) - return; - this._inherited = x; - this.updateState(); - }, - - get overloaded() - { - return this._overloaded; - }, - - set overloaded(x) - { - if (x === this._overloaded) - return; - this._overloaded = x; - this.updateState(); - }, - - onattach: function() - { - this.updateTitle(); - }, - - updateTitle: function() - { - // "Nicknames" for some common values that are easier to read. - var valueNicknames = { - "rgb(0, 0, 0)": "black", - "#000": "black", - "#000000": "black", - "rgb(255, 255, 255)": "white", - "#fff": "white", - "#ffffff": "white", - "#FFF": "white", - "#FFFFFF": "white", - "rgba(0, 0, 0, 0)": "transparent", - "rgb(255, 0, 0)": "red", - "rgb(0, 255, 0)": "lime", - "rgb(0, 0, 255)": "blue", - "rgb(255, 255, 0)": "yellow", - "rgb(255, 0, 255)": "magenta", - "rgb(0, 255, 255)": "cyan" - }; - - var priority = (this.shorthand ? getShorthandPriority(this.style, this.name) : this.style.getPropertyPriority(this.name)); - var value = (this.shorthand ? getShorthandValue(this.style, this.name) : this.style.getPropertyValue(this.name)); - var htmlValue = value; - - if (priority && !priority.length) - delete priority; - if (priority) - priority = "!" + priority; - - if (value) { - var urls = value.match(/url\([^)]+\)/); - if (urls) { - for (var i = 0; i < urls.length; ++i) { - var url = urls[i].substring(4, urls[i].length - 1); - htmlValue = htmlValue.replace(urls[i], "url(" + WebInspector.linkifyURL(url) + ")"); - } - } else { - if (value in valueNicknames) - htmlValue = valueNicknames[value]; - htmlValue = htmlValue.escapeHTML(); - } - } else - htmlValue = value = ""; - - this.updateState(); - - var nameElement = document.createElement("span"); - nameElement.className = "name"; - nameElement.textContent = this.name; - - var valueElement = document.createElement("span"); - valueElement.className = "value"; - valueElement.innerHTML = htmlValue; - - if (priority) { - var priorityElement = document.createElement("span"); - priorityElement.className = "priority"; - priorityElement.textContent = priority; - } - - this.listItemElement.removeChildren(); - - this.listItemElement.appendChild(nameElement); - this.listItemElement.appendChild(document.createTextNode(": ")); - this.listItemElement.appendChild(valueElement); - - if (priorityElement) { - this.listItemElement.appendChild(document.createTextNode(" ")); - this.listItemElement.appendChild(priorityElement); - } - - this.listItemElement.appendChild(document.createTextNode(";")); - - if (value) { - // FIXME: this dosen't catch keyword based colors like black and white - var colors = value.match(/((rgb|hsl)a?\([^)]+\))|(#[0-9a-fA-F]{6})|(#[0-9a-fA-F]{3})/g); - if (colors) { - var colorsLength = colors.length; - for (var i = 0; i < colorsLength; ++i) { - var swatchElement = document.createElement("span"); - swatchElement.className = "swatch"; - swatchElement.style.setProperty("background-color", colors[i]); - this.listItemElement.appendChild(swatchElement); - } - } - } - - this.tooltip = this.name + ": " + (valueNicknames[value] || value) + (priority ? " " + priority : ""); - }, - - updateState: function() - { - if (!this.listItemElement) - return; - - var value = (this.shorthand ? getShorthandValue(this.style, this.name) : this.style.getPropertyValue(this.name)); - if (this.style.isPropertyImplicit(this.name) || value === "initial") - this.listItemElement.addStyleClass("implicit"); - else - this.listItemElement.removeStyleClass("implicit"); - - if (this.inherited) - this.listItemElement.addStyleClass("inherited"); - else - this.listItemElement.removeStyleClass("inherited"); - - if (this.overloaded) - this.listItemElement.addStyleClass("overloaded"); - else - this.listItemElement.removeStyleClass("overloaded"); - }, - - onpopulate: function() - { - // Only populate once and if this property is a shorthand. - if (this.children.length || !this.shorthand) - return; - - var longhandProperties = getLonghandProperties(this.style, this.name); - for (var i = 0; i < longhandProperties.length; ++i) { - var name = longhandProperties[i]; - - if (this.treeOutline.section) { - var inherited = this.treeOutline.section.isPropertyInherited(name); - var overloaded = this.treeOutline.section.isPropertyOverloaded(name); - } - - var item = new WebInspector.StylePropertyTreeElement(this.style, name, false, inherited, overloaded); - this.appendChild(item); - } - }, - - ondblclick: function(element, event) - { - this.startEditing(event.target); - }, - - startEditing: function(selectElement) - { - // FIXME: we don't allow editing of longhand properties under a shorthand right now. - if (this.parent.shorthand) - return; - - if (WebInspector.isBeingEdited(this.listItemElement) || (this.treeOutline.section && !this.treeOutline.section.editable)) - return; - - var wasExpanded = this.expanded; - this.collapse(); - // Lie about out children to prevent toggling on click. - this.hasChildren = false; - - if (!selectElement) - selectElement = this.listItemElement; - - window.getSelection().setBaseAndExtent(selectElement, 0, selectElement, 1); - - WebInspector.startEditing(this.listItemElement, this.editingCommitted.bind(this), this.editingCancelled.bind(this), wasExpanded); - }, - - editingEnded: function(wasExpanded) - { - this.hasChildren = (this.children.length ? true : false); - if (wasExpanded) - this.expand(); - }, - - editingCancelled: function(e, wasExpanded) - { - this.editingEnded(wasExpanded); - this.updateTitle(); - }, - - editingCommitted: function(e, userInput, previousContent, wasExpanded) - { - this.editingEnded(); - - if (userInput === previousContent) - return; // nothing changed, so do nothing else - - var userInputLength = userInput.trimWhitespace().length; - - // Create a new element to parse the user input CSS. - var parseElement = document.createElement("span"); - parseElement.setAttribute("style", userInput); - - var userInputStyle = parseElement.style; - if (userInputStyle.length || !userInputLength) { - // The input was parsable or the user deleted everything, so remove the - // original property from the real style declaration. If this represents - // a shorthand remove all the longhand properties. - if (this.shorthand) { - var longhandProperties = getLonghandProperties(this.style, this.name); - for (var i = 0; i < longhandProperties.length; ++i) - this.style.removeProperty(longhandProperties[i]); - } else - this.style.removeProperty(this.name); - } - - if (!userInputLength) { - // The user deleted the everything, so remove the tree element and update. - if (this.treeOutline.section && this.treeOutline.section.pane) - this.treeOutline.section.pane.update(); - this.parent.removeChild(this); - return; - } - - if (!userInputStyle.length) { - // The user typed something, but it didn't parse. Just abort and restore - // the original title for this property. - this.updateTitle(); - return; - } - - // Iterate of the properties on the test element's style declaration and - // add them to the real style declaration. We take care to move shorthands. - var foundShorthands = {}; - var uniqueProperties = getUniqueStyleProperties(userInputStyle); - for (var i = 0; i < uniqueProperties.length; ++i) { - var name = uniqueProperties[i]; - var shorthand = userInputStyle.getPropertyShorthand(name); - - if (shorthand && shorthand in foundShorthands) - continue; - - if (shorthand) { - var value = getShorthandValue(userInputStyle, shorthand); - var priority = getShorthandPriority(userInputStyle, shorthand); - foundShorthands[shorthand] = true; - } else { - var value = userInputStyle.getPropertyValue(name); - var priority = userInputStyle.getPropertyPriority(name); - } - - // Set the property on the real style declaration. - this.style.setProperty((shorthand || name), value, priority); - } - - if (this.treeOutline.section && this.treeOutline.section.pane) - this.treeOutline.section.pane.update(null, this.treeOutline.section); - else if (this.treeOutline.section) - this.treeOutline.section.update(true); - else - this.updateTitle(); // FIXME: this will not show new properties. But we don't hit his case yet. - } -} - -WebInspector.StylePropertyTreeElement.prototype.__proto__ = TreeElement.prototype; diff --git a/webkit/port/page/inspector/TextPrompt.js b/webkit/port/page/inspector/TextPrompt.js index 264cb4c..e69de29 100644 --- a/webkit/port/page/inspector/TextPrompt.js +++ b/webkit/port/page/inspector/TextPrompt.js @@ -1,354 +0,0 @@ -/* - * Copyright (C) 2008 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. - */ - -WebInspector.TextPrompt = function(element, completions, stopCharacters) -{ - this.element = element; - this.completions = completions; - this.completionStopCharacters = stopCharacters; - this.history = []; - this.historyOffset = 0; -} - -WebInspector.TextPrompt.prototype = { - get text() - { - return this.element.textContent; - }, - - set text(x) - { - if (!x) { - // Append a break element instead of setting textContent to make sure the selection is inside the prompt. - this.element.removeChildren(); - this.element.appendChild(document.createElement("br")); - } else - this.element.textContent = x; - - this.moveCaretToEndOfPrompt(); - }, - - handleKeyEvent: function(event) - { - switch (event.keyIdentifier) { - case "Up": - this._upKeyPressed(event); - break; - case "Down": - this._downKeyPressed(event); - break; - case "U+0009": // Tab - this._tabKeyPressed(event); - break; - case "Right": - if (!this.acceptAutoComplete()) - this.autoCompleteSoon(); - break; - default: - this.clearAutoComplete(); - this.autoCompleteSoon(); - break; - } - }, - - acceptAutoComplete: function() - { - if (!this.autoCompleteElement || !this.autoCompleteElement.parentNode) - return false; - - var text = this.autoCompleteElement.textContent; - var textNode = document.createTextNode(text); - this.autoCompleteElement.parentNode.replaceChild(textNode, this.autoCompleteElement); - delete this.autoCompleteElement; - - var finalSelectionRange = document.createRange(); - finalSelectionRange.setStart(textNode, text.length); - finalSelectionRange.setEnd(textNode, text.length); - - var selection = window.getSelection(); - selection.removeAllRanges(); - selection.addRange(finalSelectionRange); - - return true; - }, - - clearAutoComplete: function(includeTimeout) - { - if (includeTimeout && "_completeTimeout" in this) { - clearTimeout(this._completeTimeout); - delete this._completeTimeout; - } - - if (!this.autoCompleteElement) - return; - - if (this.autoCompleteElement.parentNode) - this.autoCompleteElement.parentNode.removeChild(this.autoCompleteElement); - delete this.autoCompleteElement; - - if (!this._userEnteredRange || !this._userEnteredText) - return; - - this._userEnteredRange.deleteContents(); - - var userTextNode = document.createTextNode(this._userEnteredText); - this._userEnteredRange.insertNode(userTextNode); - - var selectionRange = document.createRange(); - selectionRange.setStart(userTextNode, this._userEnteredText.length); - selectionRange.setEnd(userTextNode, this._userEnteredText.length); - - var selection = window.getSelection(); - selection.removeAllRanges(); - selection.addRange(selectionRange); - - delete this._userEnteredRange; - delete this._userEnteredText; - }, - - autoCompleteSoon: function() - { - if (!("_completeTimeout" in this)) - this._completeTimeout = setTimeout(this.complete.bind(this, true), 250); - }, - - complete: function(auto) - { - this.clearAutoComplete(true); - - var selection = window.getSelection(); - if (!selection.rangeCount) - return; - - var selectionRange = selection.getRangeAt(0); - if (!selectionRange.commonAncestorContainer.isDescendant(this.element)) - return; - if (auto && !this.isCaretAtEndOfPrompt()) - return; - - var wordPrefixRange = this.scanBackwards(this.completionStopCharacters, selectionRange.startContainer, selectionRange.startOffset, this.element); - - var completions = this.completions(wordPrefixRange, auto); - - if (!completions || !completions.length) - return; - - var fullWordRange = document.createRange(); - fullWordRange.setStart(wordPrefixRange.startContainer, wordPrefixRange.startOffset); - fullWordRange.setEnd(selectionRange.endContainer, selectionRange.endOffset); - - if (completions.length === 1 || selection.isCollapsed || auto) { - var completionText = completions[0]; - } else { - var currentText = fullWordRange.toString(); - - var foundIndex = null; - for (var i = 0; i < completions.length; ++i) { - if (completions[i] === currentText) - foundIndex = i; - } - - if (foundIndex === null || (foundIndex + 1) >= completions.length) - var completionText = completions[0]; - else - var completionText = completions[foundIndex + 1]; - } - - var wordPrefixLength = wordPrefixRange.toString().length; - - this._userEnteredRange = fullWordRange; - this._userEnteredText = fullWordRange.toString(); - - fullWordRange.deleteContents(); - - var finalSelectionRange = document.createRange(); - - if (auto) { - var prefixText = completionText.substring(0, wordPrefixLength); - var suffixText = completionText.substring(wordPrefixLength); - - var prefixTextNode = document.createTextNode(prefixText); - fullWordRange.insertNode(prefixTextNode); - - this.autoCompleteElement = document.createElement("span"); - this.autoCompleteElement.className = "auto-complete-text"; - this.autoCompleteElement.textContent = suffixText; - - prefixTextNode.parentNode.insertBefore(this.autoCompleteElement, prefixTextNode.nextSibling); - - finalSelectionRange.setStart(prefixTextNode, wordPrefixLength); - finalSelectionRange.setEnd(prefixTextNode, wordPrefixLength); - } else { - var completionTextNode = document.createTextNode(completionText); - fullWordRange.insertNode(completionTextNode); - - if (completions.length > 1) - finalSelectionRange.setStart(completionTextNode, wordPrefixLength); - else - finalSelectionRange.setStart(completionTextNode, completionText.length); - - finalSelectionRange.setEnd(completionTextNode, completionText.length); - } - - selection.removeAllRanges(); - selection.addRange(finalSelectionRange); - }, - - scanBackwards: function(stopCharacters, endNode, endOffset, stayWithinElement) - { - var startNode; - var startOffset = 0; - var node = endNode; - - if (!stayWithinElement) - stayWithinElement = this.element; - - while (node) { - if (node === stayWithinElement) { - if (!startNode) - startNode = stayWithinElement; - break; - } - - if (node.nodeType === Node.TEXT_NODE) { - var start = (node === endNode ? endOffset : node.nodeValue.length); - for (var i = (start - 1); i >= 0; --i) { - var character = node.nodeValue[i]; - if (stopCharacters.indexOf(character) !== -1) { - startNode = node; - startOffset = i + 1; - break; - } - } - } - - if (startNode) - break; - - node = node.traversePreviousNode(); - } - - var result = document.createRange(); - result.setStart(startNode, startOffset); - result.setEnd(endNode, endOffset); - - return result; - }, - - isCaretInsidePrompt: function() - { - return this.element.isInsertionCaretInside(); - }, - - isCaretAtEndOfPrompt: function() - { - var selection = window.getSelection(); - if (!selection.rangeCount || !selection.isCollapsed) - return false; - - var selectionRange = selection.getRangeAt(0); - var node = selectionRange.startContainer; - if (node !== this.element && !node.isDescendant(this.element)) - return false; - - if (node.nodeType === Node.TEXT_NODE && selectionRange.startOffset < node.nodeValue.length) - return false; - - var foundNextText = false; - while (node) { - if (node.nodeType === Node.TEXT_NODE && node.nodeValue.length) { - if (foundNextText) - return false; - foundNextText = true; - } - - node = node.traverseNextNode(false, this.element); - } - - return true; - }, - - moveCaretToEndOfPrompt: function() - { - var selection = window.getSelection(); - var selectionRange = document.createRange(); - - var offset = this.element.childNodes.length; - selectionRange.setStart(this.element, offset); - selectionRange.setEnd(this.element, offset); - - selection.removeAllRanges(); - selection.addRange(selectionRange); - }, - - _tabKeyPressed: function(event) - { - event.preventDefault(); - event.stopPropagation(); - - this.complete(); - }, - - _upKeyPressed: function(event) - { - event.preventDefault(); - event.stopPropagation(); - - if (this.historyOffset == this.history.length) - return; - - this.clearAutoComplete(true); - - if (this.historyOffset == 0) - this.tempSavedCommand = this.text; - - ++this.historyOffset; - this.text = this.history[this.history.length - this.historyOffset]; - }, - - _downKeyPressed: function(event) - { - event.preventDefault(); - event.stopPropagation(); - - if (this.historyOffset == 0) - return; - - this.clearAutoComplete(true); - - --this.historyOffset; - - if (this.historyOffset == 0) { - this.text = this.tempSavedCommand; - delete this.tempSavedCommand; - return; - } - - this.text = this.history[this.history.length - this.historyOffset]; - } -} diff --git a/webkit/port/page/inspector/View.js b/webkit/port/page/inspector/View.js index 9e22482..e69de29 100644 --- a/webkit/port/page/inspector/View.js +++ b/webkit/port/page/inspector/View.js @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2008 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. - * - * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``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 INC. OR - * 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. - */ - -WebInspector.View = function(element) -{ - this.element = element || document.createElement("div"); - this._visible = false; -} - -WebInspector.View.prototype = { - get visible() - { - return this._visible; - }, - - set visible(x) - { - if (this._visible === x) - return; - - if (x) - this.show(); - else - this.hide(); - }, - - show: function(parentElement) - { - this._visible = true; - if (!this.element.parentNode && parentElement) - parentElement.appendChild(this.element); - if (!this.element.parentNode && this.attach) - this.attach(); - this.element.addStyleClass("visible"); - }, - - hide: function() - { - this.element.removeStyleClass("visible"); - this._visible = false; - }, - - detach: function() - { - if (this.element.parentNode) - this.element.parentNode.removeChild(this.element); - } -} diff --git a/webkit/port/page/inspector/inspector.css b/webkit/port/page/inspector/inspector.css index 946a4b1..e69de29 100644 --- a/webkit/port/page/inspector/inspector.css +++ b/webkit/port/page/inspector/inspector.css @@ -1,2103 +0,0 @@ -/* - * Copyright (C) 2006, 2007, 2008 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. - */ - -body { - cursor: default; - height: 100%; - width: 100%; - overflow: hidden; - font-family: Lucida Grande, sans-serif; - font-size: 10px; - margin: 0; - -webkit-text-size-adjust: none; - -webkit-user-select: none; -} - -* { - -webkit-box-sizing: border-box; -} - -iframe, a img { - border: none; -} - -img { - -webkit-user-drag: none; -} - -.hidden { - display: none !important; -} - -#toolbar { - position: absolute; - top: 0; - left: 0; - right: 0; - height: 56px; - display: -webkit-box; - padding: 0 5px; - /*background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(191, 191, 191)), to(rgb(151, 151, 151)));*/ - background-color: rgb(191, 191, 191); - border-bottom: 1px solid rgb(80, 80, 80); - -webkit-box-orient: horizontal; - -webkit-background-origin: padding; - -webkit-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-color: rgb(233, 233, 233); -} - -body.detached.platform-mac-leopard #toolbar { - background: transparent !important; -} - -.toolbar-item { - display: -webkit-box; - padding: 4px 6px; - margin: 0; - background-color: transparent; - border-style: none; - border-color: transparent; - outline: none; - -webkit-box-orient: vertical; - -webkit-box-align: center; - -webkit-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; -} - -.toolbar-item.flexable-space { - -webkit-box-flex: 1; - visibility: hidden; -} - -.toolbar-item input { - margin-bottom: 8px; -} - -.toolbar-icon { - width: 32px; - height: 32px; -} - -.toolbar-label { - font-size: 11px; - font-family: Lucida Grande, sans-serif; - text-shadow: rgba(255, 255, 255, 0.5) 0 1px 0; -} - -.toolbar-item.elements .toolbar-icon { - content: url(Images/elementsIcon.png); -} - -.toolbar-item.resources .toolbar-icon { - content: url(Images/resourcesIcon.png); -} - -.toolbar-item.scripts .toolbar-icon { - content: url(Images/scriptsIcon.png); -} - -.toolbar-item.databases .toolbar-icon { - content: url(Images/databasesIcon.png); -} - -#searchResults { - position: absolute; - top: -100px; - left: 0; - right: 0; - height: 100px; - z-index: -1; - background-color: white; - border-bottom: 1px solid rgb(180, 180, 180); - overflow-y: auto; - overflow-x: hidden; - -webkit-box-sizing: border-box; -} - -.search-results-section { - color: gray; - width: 28px; - float: left; - margin-left: -45px; - text-align: right; - font-size: 10px; - margin-top: 1px; - white-space: nowrap; -} - -.selected .search-results-section { - color: rgba(255, 255, 255, 0.8); -} - -body.inactive .focused .selected .search-results-section { - color: rgba(0, 0, 0, 0.5); -} - -.blurred .selected .search-results-section { - color: rgba(0, 0, 0, 0.5); -} - -#searchResults > ol > ol > li { - padding-left: 45px; - white-space: nowrap; -} - -.search-matched-string { - background-color: #ff8; -} - -.selected .search-matched-string { - background-color: transparent; -} - -#searchResultsResizer { - position: absolute; - height: 5px; - left: 0; - right: 0; - cursor: row-resize; -} - -#main { - position: absolute; - z-index: 1; - top: 56px; - left: 0; - right: 0; - bottom: 0; - overflow: hidden; - background-color: white; -} - -#main-panels { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 23px; - overflow: hidden; -} - -#main-status-bar { - position: absolute; - bottom: 0; - left: 0; - right: 0; -} - -body.console-visible #main-status-bar { - height: 24px; - background-image: url(Images/statusbarResizerVertical.png), url(Images/statusbarBackground.png); - background-repeat: no-repeat, repeat-x; - background-position: right center, center; - cursor: row-resize; -} - -body.console-visible #main-status-bar * { - cursor: default; -} - -body.console-visible #main-panels { - bottom: 24px; -} - -.status-bar { - background-color: rgb(235, 235, 235); - background-image: url(Images/statusbarBackground.png); - background-repeat: repeat-x; - white-space: nowrap; - height: 23px; - overflow: hidden; - z-index: 12; -} - -.status-bar > div { - display: inline-block; - vertical-align: top; -} - -.status-bar-item { - display: inline-block; - height: 24px; - padding: 0; - margin-left: -1px; - margin-right: 0; - vertical-align: top; - border: 0 transparent none; - background-color: transparent; -} - -.status-bar-item:active { - position: relative; - z-index: 200; -} - -button.status-bar-item { - width: 32px; - background-image: url(Images/statusbarButtons.png); - background-position: 0 0; - outline: none; -} - -button.status-bar-item:active { - background-position: 32px 0; -} - -button.status-bar-item:disabled { - background-position: 0 0 !important; -} - -select.status-bar-item { - min-width: 48px; - border-width: 0 17px 0 2px; - outline: none; - padding: 0 2px 0 6px; - font-weight: bold; - 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; - -webkit-border-radius: 0; - -webkit-appearance: none; -} - -select.status-bar-item:active { - color: black; - -webkit-border-image: url(Images/statusbarMenuButtonSelected.png) 0 17 0 2; -} - -#dock-status-bar-item { - background-image: url(Images/dockButtons.png); -} - -body.attached #dock-status-bar-item:active { - background-position: 32px 0; -} - -body.detached #dock-status-bar-item { - background-position: 0 24px; -} - -body.detached #dock-status-bar-item.toggled-on:active { - background-position: 32px 24px; -} - -#console-status-bar-item { - background-image: url(Images/consoleButtons.png); -} - -#console-status-bar-item:active { - background-position: 32px 0; -} - -#console-status-bar-item.toggled-on { - background-position: 0 24px; -} - -#console-status-bar-item.toggled-on:active { - background-position: 32px 24px; -} - -#clear-console-status-bar-item { - background-image: url(Images/clearConsoleButtons.png); -} - -#clear-console-status-bar-item:active { - background-position: 32px 0; -} - -#error-warning-count { - position: absolute; - right: 16px; - top: 0; - cursor: pointer; - padding: 6px 2px; - font-size: 10px; - height: 19px; -} - -#error-warning-count:hover { - border-bottom: 1px solid rgb(96, 96, 96); -} - -#error-count::before { - content: url(Images/errorIcon.png); - width: 10px; - height: 10px; - vertical-align: -1px; - margin-right: 2px; -} - -#error-count + #warning-count { - margin-left: 6px; -} - -#warning-count::before { - content: url(Images/warningIcon.png); - width: 10px; - height: 10px; - vertical-align: -1px; - margin-right: 2px; -} - -#console { - display: none; - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 200px; - background-color: white; - background-image: url(Images/statusbarBottomBackground.png); - background-repeat: repeat-x; - background-position: bottom; -} - -body.console-visible #console { - display: block; -} - -#console-status-bar { - position: absolute; - bottom: 0; - left: 0; - right: 0; - background: none; -} - -#console-messages { - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 23px; - font-size: 10px; - font-family: Monaco, Lucida Console, monospace; - padding: 2px 0; - overflow-y: overlay; - -webkit-user-select: text; - -webkit-text-size-adjust: auto; -} - -#console-prompt { - position: relative; - outline: none; - padding: 1px 22px 1px 24px; - min-height: 16px; - white-space: pre-wrap; - -webkit-user-modify: read-write-plaintext-only; -} - -#console-prompt::before { - background-image: url(Images/userInputIcon.png); -} - -.console-message, .console-user-command { - position: relative; - border-bottom: 1px solid rgb(240, 240, 240); - padding: 1px 22px 1px 24px; - min-height: 16px; -} - -.console-message::before, .console-user-command::before, #console-prompt::before { - position: absolute; - display: block; - content: ""; - left: 7px; - top: 0.8em; - width: 10px; - height: 10px; - margin-top: -5px; - -webkit-user-select: none; -} - -.console-message-text { - white-space: pre-wrap; -} - -.console-error-level .console-message-text { - color: red; -} - -.console-error-level::before { - background-image: url(Images/errorIcon.png); -} - -.console-warning-level::before { - background-image: url(Images/warningIcon.png); -} - -.console-user-command .console-message { - margin-left: -24px; - padding-right: 0; - border-bottom: none; -} - -.console-user-command::before { - background-image: url(Images/userInputPreviousIcon.png); -} - -.console-user-command > .console-message-text { - color: rgb(0, 128, 255); -} - -.console-message-url { - color: rgb(33%, 33%, 33%) !important; - cursor: pointer; -} - -.console-message-url::after { - display: inline-block; - content: url(Images/goArrow.png); - margin-left: 3px; - width: 12px; - height: 12px; - vertical-align: top; - opacity: 0.75; - -webkit-user-select: none; -} - -.console-message-url:hover { - color: rgb(15%, 15%, 15%); -} - -.console-message-url:hover::after { - opacity: 1; -} - -.auto-complete-text { - color: rgb(128, 128, 128); - -webkit-user-select: none; - -webkit-user-modify: read-only; -} - -.panel { - display: none; - overflow: hidden; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.panel.visible { - display: block; -} - -.resource-view { - display: none; - overflow: hidden; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.resource-view.visible { - display: block; -} - -.resource-view .resource-view-content { - position: absolute; - top: 0; - right: 0; - left: 0; - bottom: 0; -} - -.resource-view.font { - font-size: 60px; - white-space: pre-wrap; - word-wrap: break-word; - text-align: center; -} - -.resource-view.font .preview { - position: absolute; - margin-top: auto; - margin-bottom: auto; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.resource-view.image .resource-view-content > .image { - position: relative; - height: 70%; - padding: 20px; -} - -.resource-view.image .resource-view-content > .info { - position: relative; - height: 30%; - padding-top: 10px; - overflow: auto; - font-size: 11px; -} - -.resource-view.image img { - margin: auto; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; - max-width: 80%; - max-height: 80%; - background-image: url(Images/checker.png); - -webkit-box-shadow: 0px 5px 10px rgba(0, 0, 0, 0.5); -} - -.resource-view.image .title { - text-align: center; - font-size: 13px; -} - -.resource-view.image .infoList { - margin: 0; -} - -.resource-view.image .infoList dt { - font-weight: bold; - display: inline-block; - width: 50%; - text-align: right; -} - -.resource-view.image .infoList dd { - display: inline-block; - padding-left: 10px; - width: 50%; - text-align: left; - margin: 0; -} - -.resource-view.image .infoList dd::after { - white-space: pre; - content: "\A"; -} - -#elements-content { - display: block; - overflow: auto; - padding: 0; - position: absolute; - top: 0; - left: 0; - right: 225px; - bottom: 0; -} - -#elements-sidebar { - position: absolute; - top: 0; - right: 0; - bottom: 0; - width: 225px; - background-color: rgb(232, 232, 232); - border-left: 1px solid rgb(64%, 64%, 64%); - cursor: default; - overflow: auto; -} - -.crumbs { - font-size: 11px; - line-height: 19px; - text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0; - color: rgb(20, 20, 20); - margin-left: -1px; - padding-right: 12px; -} - -.crumbs .crumb { - height: 24px; - border-width: 0 12px 0 2px; - -webkit-border-image: url(Images/segment.png) 0 12 0 2; - margin-right: -12px; - padding-left: 18px; - padding-right: 2px; - white-space: nowrap; - line-height: 23px; - float: right; -} - -.crumbs .crumb.collapsed > * { - display: none; -} - -.crumbs .crumb.collapsed::before { - content: "\2026"; - font-weight: bold; -} - -.crumbs .crumb.compact .extra { - display: none; -} - -.crumbs .crumb.dimmed { - color: rgba(0, 0, 0, 0.45); -} - -.crumbs .crumb.start { - padding-left: 7px; -} - -.crumbs .crumb.end { - border-width: 0 2px 0 2px; - padding-right: 6px; - -webkit-border-image: url(Images/segmentEnd.png) 0 2 0 2; -} - -.crumbs .crumb.selected { - -webkit-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; -} - -.crumbs .crumb.selected.end, .crumbs .crumb.selected.end:hover { - -webkit-border-image: url(Images/segmentSelectedEnd.png) 0 2 0 2; -} - -.crumbs .crumb:hover { - -webkit-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; - color: rgba(0, 0, 0, 0.75); -} - -.crumbs .crumb.end:hover { - -webkit-border-image: url(Images/segmentHoverEnd.png) 0 2 0 2; -} - -.outline-disclosure li .selection { - display: none; - position: absolute; - left: 0; - right: 0; - height: 15px; - z-index: -1; -} - -.outline-disclosure li.selected .selection { - display: block; -} - -.focused .outline-disclosure li.selected .selection { - background-color: rgb(56, 121, 217); -} - -.blurred .outline-disclosure li.selected .selection, body.inactive .outline-disclosure li.selected .selection { - background-color: rgb(212, 212, 212); -} - -.outline-disclosure > ol { - position: relative; - padding: 2px 6px !important; - margin: 0; - color: black; - cursor: default; - min-width: 100%; -} - -.outline-disclosure, .outline-disclosure ol { - list-style-type: none; - font-size: 11px; - -webkit-padding-start: 12px; - margin: 0; -} - -.outline-disclosure li { - padding: 0 0 2px 14px; - margin-top: 1px; - margin-bottom: 1px; - word-wrap: break-word; - text-indent: -2px -} - -.blurred .outline-disclosure li.selected, body.inactive .outline-disclosure li.selected { - color: black; -} - -.outline-disclosure li.selected { - color: white; -} - -.outline-disclosure li.parent { - text-indent: -12px -} - -.elements.panel .outline-disclosure li .webkit-html-tag.close { - margin-left: -12px; -} - -.outline-disclosure li.parent::before { - content: url(Images/treeRightTriangleBlack.png); - float: left; - width: 8px; - height: 8px; - margin-top: 1px; - padding-right: 2px; -} - -.blurred .outline-disclosure li.parent.selected::before, body.inactive .outline-disclosure li.parent.selected::before { - content: url(Images/treeRightTriangleBlack.png); -} - -.outline-disclosure li.parent.selected::before { - content: url(Images/treeRightTriangleWhite.png); -} - -.blurred .outline-disclosure li.parent.expanded.selected::before, body.inactive .outline-disclosure li.parent.expanded.selected::before { - content: url(Images/treeDownTriangleBlack.png); -} - -.outline-disclosure li.parent.expanded::before { - content: url(Images/treeDownTriangleBlack.png); -} - -.outline-disclosure li.parent.expanded.selected::before { - content: url(Images/treeDownTriangleWhite.png); -} - -.outline-disclosure ol.children { - display: none; -} - -.outline-disclosure ol.children.expanded { - display: block; -} - -.webkit-html-comment { - /* Keep this in sync with view-source.css (.webkit-html-comment) */ - color: rgb(35, 110, 37); -} - -.webkit-html-tag { - /* Keep this in sync with view-source.css (.webkit-html-tag) */ - color: rgb(136, 18, 128); -} - -.webkit-html-doctype { - /* Keep this in sync with view-source.css (.webkit-html-doctype) */ - color: rgb(192, 192, 192); -} - -.webkit-html-attribute-name { - /* Keep this in sync with view-source.css (.webkit-html-attribute-name) */ - color: rgb(153, 69, 0); -} - -.webkit-html-attribute-value { - /* Keep this in sync with view-source.css (.webkit-html-attribute-value) */ - color: rgb(26, 26, 166); -} - -.webkit-html-external-link, .webkit-html-resource-link { - /* Keep this in sync with view-source.css (.webkit-html-external-link, .webkit-html-resource-link) */ - color: #00e; -} - -.webkit-html-external-link { - /* Keep this in sync with view-source.css (.webkit-html-external-link) */ - text-decoration: none; -} - -.webkit-html-external-link:hover { - /* Keep this in sync with view-source.css (.webkit-html-external-link:hover) */ - text-decoration: underline; -} - -body:not(.inactive) .focused .outline-disclosure li.selected * { - color: inherit; -} - -.section { - position: relative; - margin-top: 1px; -} - -.section .header { - padding: 3px 8px 4px 16px; - /*background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(160, 172, 205)), to(rgb(132, 146, 190)));*/ - background-color: rgb(160, 172, 205); - min-height: 18px; - white-space: nowrap; -} - -.section .header::before { - position: absolute; - top: 4px; - left: 6px; - width: 8px; - height: 8px; - content: url(Images/treeRightTriangleWhite.png); -} - -.section.expanded .header::before { - content: url(Images/treeDownTriangleWhite.png); -} - -.section .header .title { - color: white; - font-weight: bold; - word-wrap: break-word; - white-space: normal; -} - -.section .header label { - display: none; -} - -.section.expanded .header label { - display: inline; -} - -.section .header input[type=checkbox] { - height: 10px; - width: 10px; - margin-left: 0; - margin-top: 0; - margin-bottom: 0; - vertical-align: 2px; -} - -.section .header .subtitle { - float: right; - font-size: 10px; - margin-left: 5px; - max-width: 55%; - color: rgba(255, 255, 255, 0.7); - text-overflow: ellipsis; - overflow: hidden; -} - -.section .header .subtitle a { - color: inherit; -} - -.section .properties { - display: none; - margin: 0; - padding: 2px 6px 5px; - list-style: none; - background-color: white; -} - -.section.expanded .properties { - display: block; -} - -.section .properties li { - margin-left: 10px; - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; - -webkit-user-select: text; - cursor: auto; - outline: none; -} - -.section .properties li.parent { - margin-left: 0; -} - -.section .properties ol { - display: none; - margin: 0; - -webkit-padding-start: 12px; - list-style: none; -} - -.section .properties ol.expanded { - display: block; -} - -.section .properties li.parent::before { - content: url(Images/treeRightTriangleBlack.png); - opacity: 0.75; - float: left; - width: 8px; - height: 8px; - margin-top: 0; - padding-right: 2px; - -webkit-user-select: none; - cursor: default; -} - -.section .properties li.parent.expanded::before { - content: url(Images/treeDownTriangleBlack.png); - margin-top: 1px; -} - -.editing { - -webkit-user-select: text; - -webkit-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; - text-overflow: clip; - padding-left: 2px; - margin-bottom: -1px; - padding-bottom: 1px; - text-decoration: none !important; - opacity: 1.0 !important; -} - -.editing, .editing * { - color: black !important; -} - -.section .properties li.editing { - margin-left: 8px; - text-overflow: clip; -} - -.section .properties li.editing.parent::before { - display: none; -} - -.section .properties .overloaded { - text-decoration: line-through; -} - -.section .properties .implicit, .section .properties .inherited { - opacity: 0.5; -} - -.section:not(.show-inherited) .properties .inherited { - display: none; -} - -.section .properties .name { - color: rgb(136, 19, 145); -} - -.section .properties .value.dimmed { - color: rgb(100, 100, 100); -} - -.section .properties .number { - color: blue; -} - -.section .properties .priority { - color: rgb(128, 0, 0); -} - -.section .properties .keyword { - color: rgb(136, 19, 79); -} - -.section .properties .color { - color: rgb(118, 15, 21); -} - -.swatch { - display: inline-block; - vertical-align: baseline; - margin-left: 4px; - margin-bottom: -1px; - width: 1em; - height: 1em; - border: 1px solid rgb(180, 180, 180); -} - -.pane { - margin-top: 1px; -} - -.pane > .title { - /*background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(221, 226, 239)), color-stop(0.5, rgb(220, 225, 238)), color-stop(0.5, rgb(194, 203, 219)), to(rgb(217, 222, 234)));*/ - background-color: rgb(221, 226, 239); - height: 16px; - padding: 0 6px; - border-top: 1px solid rgb(129, 129, 129); - border-bottom: 1px solid rgb(129, 129, 129); - font-weight: bold; - font-size: 11px; - color: rgb(85, 85, 85); - -webkit-background-origin: padding; - -webkit-background-clip: padding; -} - -.pane > .title:active { - /*background-image: -webkit-gradient(linear, left top, left bottom, from(rgb(186, 191, 202)), color-stop(0.5, rgb(185, 190, 201)), color-stop(0.5, rgb(163, 171, 185)), to(rgb(183, 187, 197)));*/ - background-color: rgb(186, 191, 202); -} - -.pane > .title::before { - content: url(Images/treeRightTriangleBlack.png); - opacity: 0.75; - float: left; - width: 8px; - height: 8px; - margin-right: 3px; - margin-top: 0; -} - -.pane.expanded > .title::before { - margin-top: 1px; - content: url(Images/treeDownTriangleBlack.png); -} - -.pane > .body { - position: relative; - display: none; - overflow-y: auto; - overflow-x: hidden; -} - -.pane.expanded > .body, .pane.expanded > .growbar { - display: block; -} - -.pane > .growbar { - display: none; - background-image: url(Images/paneGrowHandleLine.png), url(Images/paneBottomGrow.png); - background-repeat: no-repeat, repeat-x; - background-position: center center, bottom; - height: 5px; -} - -.metrics { - padding: 8px; - font-size: 10px; - text-align: center; - white-space: nowrap; -} - -.metrics .label { - position: absolute; - margin-top: -10px; - font-size: 9px; - color: grey; - background-color: rgb(232, 232, 232); - margin-left: 3px; - padding-left: 2px; - padding-right: 2px; -} - -.metrics .margin { - border: 1px dashed; - display: inline-block; - padding: 3px; - margin: 3px; -} - -.metrics .border { - border: 1px black solid; - display: inline-block; - vertical-align: middle; - padding: 3px; - margin: 3px; -} - -.metrics .padding { - border: 1px grey dashed; - display: inline-block; - vertical-align: middle; - padding: 3px; - margin: 3px; -} - -.metrics .content { - position: static; - border: 1px grey solid; - display: inline-block; - vertical-align: middle; - padding: 3px; - margin: 3px; - min-width: 80px; - text-align: center; - overflow: visible; -} - -.metrics .left { - display: inline-block; - text-align: center; - vertical-align: middle; -} - -.metrics .right { - display: inline-block; - text-align: center; - vertical-align: middle; -} - -.metrics .top { - text-align: center; -} - -.metrics .bottom { - text-align: center; -} - -.sidebar { - position: absolute; - top: 0; - left: 0; - bottom: 0; - width: 200px; - overflow-y: auto; - overflow-x: hidden; - background-color: rgb(214, 221, 229); - border-right: 1px solid rgb(64%, 64%, 64%); -} - -body.inactive .sidebar { - background-color: rgb(232, 232, 232); -} - -/** - Comment back in to support databases -.database-sidebar-tree-item .icon { - content: url(Images/database.png); -} - -.database-table-sidebar-tree-item .icon { - content: url(Images/databaseTable.png); -} - -#database-views { - position: absolute; - top: 0; - right: 0; - left: 200px; - bottom: 0; -} - -.database-view { - display: none; - overflow: hidden; - position: absolute; - top: 0; - left: 0; - right: 0; - bottom: 0; -} - -.database-view.visible { - display: block; -} - -.database-view.table { - font-size: 10px; - overflow-y: auto; - overflow-x: hidden; -} - -.database-view.table .database-result-table { - border: none; - height: 100%; -} - -.database-view.table .database-table-empty, .database-view.table .database-table-error { - position: absolute; - top: 0; - bottom: 25%; - left: 0; - right: 0; - font-size: 24px; - color: rgb(75%, 75%, 75%); - margin-top: auto; - margin-bottom: auto; - height: 50px; - line-height: 26px; - text-align: center; - font-weight: bold; - padding: 10px; - white-space: pre-wrap; -} - -.database-view.table .database-table-error { - color: rgb(66%, 33%, 33%); -} - -.database-result-table .database-result-filler-row { - height: auto; -} - -.database-result-table .database-result-filler-row.alternate td { - background-position-y: 16px; -} - -.database-result-filler-row td { - //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-color: white; - -webkit-background-size: auto 32px; - -webkit-background-origin: padding; - -webkit-background-clip: padding; -} - -.database-result-table { - border: 1px solid #aaa; - table-layout: fixed; - border-spacing: 0; - border-collapse: collapse; - width: 100%; -} - -.database-result-table th { - text-align: left; - background: url(Images/glossyHeader.png) repeat-x; - border-right: 1px solid #aaa; - height: 15px; - border-bottom: 1px solid #aaa; - font-weight: normal; - vertical-align: middle; - padding: 0 4px; - white-space: nowrap; -} - -.database-result-table tr { - height: 16px; -} - -.database-result-table tr.alternate { - background-color: rgb(236, 243, 254); -} - -.database-result-table td { - vertical-align: top; - padding: 2px 4px; - white-space: nowrap; - border-right: 1px solid #aaa; - -webkit-user-select: text; -} - -.database-result-table td > div, .database-result-table th > div { - white-space: nowrap; - text-overflow: ellipsis; - overflow: hidden; -} - -.database-view.query { - font-size: 10px; - font-family: Monaco, Lucida Console, monospace; - padding: 2px 0; - overflow-y: overlay; - overflow-x: hidden; - -webkit-text-size-adjust: auto; -} - -.database-query-prompt { - position: relative; - outline: none; - padding: 1px 22px 1px 24px; - min-height: 16px; - white-space: pre-wrap; - -webkit-user-modify: read-write-plaintext-only; - -webkit-user-select: text; -} - -.database-user-query::before, .database-query-prompt::before, .database-query-result::before { - position: absolute; - display: block; - content: ""; - left: 7px; - top: 0.8em; - width: 10px; - height: 10px; - margin-top: -5px; - -webkit-user-select: none; -} - -.database-query-prompt::before { - background-image: url(Images/userInputIcon.png); -} - -.database-user-query { - position: relative; - border-bottom: 1px solid rgb(240, 240, 240); - padding: 1px 22px 1px 24px; - min-height: 16px; -} - -.database-user-query::before { - background-image: url(Images/userInputPreviousIcon.png); -} - -.database-query-text { - color: rgb(0, 128, 255); - -webkit-user-select: text; -} - -.database-query-result { - position: relative; - padding: 1px 22px 1px 24px; - min-height: 16px; - margin-left: -24px; - padding-right: 0; -} - -.database-query-result.error { - color: red; - -webkit-user-select: text; -} - -.database-query-result.error::before { - background-image: url(Images/errorIcon.png); -}*/ - -#scripts-debugging-status-bar-item { - background-image: url(Images/debuggingButtons.png); -} - -#scripts-debugging-status-bar-item:active { - background-position: 32px 0; -} - -#scripts-debugging-status-bar-item.toggled-on { - background-position: 0 24px; -} - -#scripts-debugging-status-bar-item.toggled-on:active { - background-position: 32px 24px; -} - -#scripts-status-bar { - position: absolute; - top: -1px; - left: 0; - right: 0; - height: 24px; -} - -#scripts-status-bar .status-bar-item img { - margin-top: 2px; -} - -#scripts-status-bar .status-bar-item:disabled img { - opacity: 0.5; -} - -#scripts-back img { - content: url(Images/back.png); -} - -#scripts-forward img { - content: url(Images/forward.png); -} - -#scripts-pause img { - content: url(Images/debuggerPause.png); -} - -#scripts-step-over img { - content: url(Images/debuggerStepOver.png); -} - -#scripts-step-into img { - content: url(Images/debuggerStepInto.png); -} - -#scripts-step-out img { - content: url(Images/debuggerStepOut.png); -} - -#scripts-debugger-status { - position: absolute; - line-height: 24px; - top: 0; - right: 8px; -} - -#scripts-debugger-status:empty { - display: none; -} - -#scripts-sidebar-resizer-widget { - position: absolute; - top: 0; - bottom: 0; - right: 225px; - width: 16px; - cursor: col-resize; - background-image: url(Images/statusbarResizerHorizontal.png); - background-repeat: no-repeat; - background-position: center; -} - -#scripts-sidebar-buttons { - position: absolute; - right: 0; - top: 0; - bottom: 0; - width: 225px; - overflow: hidden; - border-left: 1px solid rgb(64%, 64%, 64%); -} - -#script-resource-views { - display: block; - overflow: auto; - padding: 0; - position: absolute; - top: 23px; - left: 0; - right: 225px; - bottom: 0; -} - -#scripts-sidebar { - position: absolute; - top: 23px; - right: 0; - bottom: 0; - width: 225px; - background-color: rgb(232, 232, 232); - border-left: 1px solid rgb(64%, 64%, 64%); - cursor: default; - overflow: auto; -} - -#resources-larger-resources-status-bar-item { - background-image: url(Images/largerResourcesButtons.png); -} - -#resources-larger-resources-status-bar-item:active { - background-position: 32px 0; -} - -#resources-larger-resources-status-bar-item.toggled-on { - background-position: 0 24px; -} - -#resources-larger-resources-status-bar-item.toggled-on:active { - background-position: 32px 24px; -} - -#resources-container { - position: absolute; - top: 0; - left: 0; - bottom: 0; - right: 0; - border-right: 0 none transparent; - overflow-y: auto; - overflow-x: hidden; -} - -#resources-container.viewing-resource { - right: auto; - width: 200px; - border-right: 1px solid rgb(64%, 64%, 64%); -} - -#resources-container.viewing-resource #resources-sidebar { - width: 100%; - border-right: 0 none transparent; -} - -#resources-sidebar { - min-height: 100%; - bottom: auto; - overflow: visible; -} - -#resources-container-content { - position: absolute; - top: 0; - right: 0; - left: 200px; - min-height: 100%; -} - -#resources-container.viewing-resource #resources-container-content { - display: none; -} - -#resources-summary { - position: absolute; - padding-top: 20px; - top: 0; - left: 0; - right: 0; - height: 93px; - margin-left: -1px; - 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-color: transparent; - background-repeat: repeat-x; - background-position: bottom; - text-align: center; - text-shadow: black 0 1px 1px; - white-space: nowrap; - color: white; - -webkit-background-size: 1px 6px; - -webkit-background-origin: padding; - -webkit-background-clip: padding; -} - -#resources-graph-legend { - margin-top: -10px; - padding-left: 15px; -} - -.resources-graph-legend-item { - display: inline-block; - font-weight: bold; - margin-right: 15px; - vertical-align: top; -} - -.resources-graph-legend-item.total { - margin-left: 10px; -} - -.resources-graph-legend-label { - display: inline-block; - text-align: left; -} - -.resources-graph-legend-header { - font-size: 12px; -} - -.resources-graph-legend-value { - font-size: 10px; -} - -.resources-graph-legend-swatch { - vertical-align: top; - margin-top: 1px; - margin-right: 3px; -} - -.resources-summary-graph { - vertical-align: middle; -} - -#resources-dividers { - position: absolute; - left: 0; - right: 0; - height: 100%; - top: 0; - z-index: -100; -} - -#resources-dividers-label-bar { - position: absolute; - top: 93px; - left: 0px; - right: 0; - background-color: rgba(255, 255, 255, 0.8); - background-clip: padding; - border-bottom: 1px solid rgba(0, 0, 0, 0.3); - height: 20px; - z-index: 200; -} - -.resources-divider { - position: absolute; - width: 1px; - top: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.1); -} - -.resources-divider.last { - background-color: transparent; -} - -.resources-divider-label { - position: absolute; - top: 4px; - right: 3px; - font-size: 9px; - color: rgb(50%, 50%, 50%); - white-space: nowrap; -} - -.resources-graph-bar { - position: absolute; - top: 0; - bottom: 0; - margin: auto -7px; - border-width: 6px 7px 6px 7px; - height: 13px; - min-width: 14px; - opacity: 0.65; - -webkit-border-image: url(Images/timelinePillGray.png) 6 7 6 7; -} - -.resources-graph-bar.waiting { - opacity: 0.35; -} - -.resource-sidebar-tree-item.resources-category-documents .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillBlue.png) 6 7 6 7; -} - -.resource-sidebar-tree-item.resources-category-stylesheets .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillGreen.png) 6 7 6 7; -} - -.resource-sidebar-tree-item.resources-category-images .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillPurple.png) 6 7 6 7; -} - -.resource-sidebar-tree-item.resources-category-fonts .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillRed.png) 6 7 6 7; -} - -.resource-sidebar-tree-item.resources-category-scripts .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillOrange.png) 6 7 6 7; -} - -.resource-sidebar-tree-item.resources-category-xhr .resources-graph-bar { - -webkit-border-image: url(Images/timelinePillYellow.png) 6 7 6 7; -} - -.tip-button { - background-image: url(Images/tipIcon.png); - border: none; - width: 16px; - height: 16px; - float: right; - background-color: transparent; - margin-top: 1px; -} - -.tip-button:active { - background-image: url(Images/tipIconPressed.png); -} - -.tip-balloon { - position: absolute; - left: 145px; - top: -5px; - z-index: 1000; - border-width: 51px 15px 18px 37px; - -webkit-border-image: url(Images/tipBalloon.png) 51 15 18 37; - width: 265px; -} - -.tip-balloon.bottom { - position: absolute; - left: 145px; - top: auto; - bottom: -7px; - z-index: 1000; - border-width: 18px 15px 51px 37px; - -webkit-border-image: url(Images/tipBalloonBottom.png) 18 15 51 37; -} - -.tip-balloon-content { - margin-top: -40px; - margin-bottom: -2px; - margin-left: 2px; -} - -.tip-balloon.bottom .tip-balloon-content { - margin-top: -10px; - margin-bottom: -35px; -} - -#resource-views { - position: absolute; - top: 0; - right: 0; - left: 200px; - bottom: 0; -} - -.source-view-frame { - width: 100%; - height: 100%; -} - -.sidebar-resizer-vertical { - position: absolute; - top: 0; - bottom: 0; - width: 5px; - z-index: 500; - cursor: col-resize; -} - -.sidebar-tree, .sidebar-tree .children { - position: relative; - padding: 0; - margin: 0; - list-style: none; - font-size: 11px; -} - -.sidebar-tree-section { - position: relative; - height: 18px; - padding: 4px 10px 6px 10px; - white-space: nowrap; - margin-top: 1px; - color: rgb(92, 110, 129); - font-weight: bold; - text-shadow: rgba(255, 255, 255, 0.75) 0 1px 0; -} - -.sidebar-tree-item { - position: relative; - height: 36px; - padding: 0 5px 0 5px; - white-space: nowrap; - margin-top: 1px; - line-height: 34px; - border-top: 1px solid transparent; -} - -.sidebar-tree .children { - display: none; -} - -.sidebar-tree .children.expanded { - display: block; -} - -.sidebar-tree-section + .children > .sidebar-tree-item { - padding-left: 10px !important; -} - -.sidebar-tree-section + .children.small > .sidebar-tree-item { - padding-left: 17px !important; -} - -.sidebar-tree > .children > .sidebar-tree-item { - padding-left: 37px; -} - -.sidebar-tree.hide-disclosure-buttons > .children { - display: none; -} - -.sidebar-tree > .children.hide-disclosure-buttons > .children { - display: none; -} - -.sidebar-tree.some-expandable:not(.hide-disclosure-buttons) > .sidebar-tree-item:not(.parent) .icon { - margin-left: 16px; -} - -.sidebar-tree-item .disclosure-button { - float: left; - width: 16px; - height: 100%; - border: 0; - background-color: transparent; - background-image: url(Images/disclosureTriangleSmallRight.png); - background-repeat: no-repeat; - background-position: center; - -webkit-apearance: none; -} - -.sidebar-tree.hide-disclosure-buttons .sidebar-tree-item .disclosure-button { - display: none; -} - -body.inactive .sidebar-tree-item .disclosure-button { - background-image: url(Images/disclosureTriangleSmallRightBlack.png); -} - -body.inactive .sidebar-tree-item.expanded .disclosure-button { - background-image: url(Images/disclosureTriangleSmallDownBlack.png); -} - -body.inactive .sidebar-tree-item .disclosure-button:active { - background-image: url(Images/disclosureTriangleSmallRightDownBlack.png); -} - -.sidebar-tree-item.selected .disclosure-button { - background-image: url(Images/disclosureTriangleSmallRightWhite.png) !important; -} - -.sidebar-tree-item.expanded .disclosure-button { - background-image: url(Images/disclosureTriangleSmallDown.png); -} - -.sidebar-tree-item.selected.expanded .disclosure-button { - background-image: url(Images/disclosureTriangleSmallDownWhite.png) !important; -} - -.sidebar-tree-item.selected .disclosure-button:active { - background-image: url(Images/disclosureTriangleSmallRightDownWhite.png) !important; -} - -.sidebar-tree-item .disclosure-button:active { - background-image: url(Images/disclosureTriangleSmallRightDown.png); -} - -.sidebar-tree-item .icon { - float: left; - width: 32px; - height: 32px; - margin-top: 1px; - margin-right: 3px; -} - -.sidebar-tree-item .status { - float: right; - height: 16px; - margin-top: 9px; - margin-left: 4px; - line-height: 1em; -} - -.sidebar-tree-item .status:empty { - display: none; -} - -.sidebar-tree-item .status .bubble { - display: inline-block; - height: 14px; - min-width: 16px; - margin-top: 1px; - background-color: rgb(128, 151, 189); - vertical-align: middle; - white-space: nowrap; - padding: 1px 4px; - text-align: center; - font-size: 11px; - font-family: Helvetia, Arial, sans-serif; - font-weight: bold; - text-shadow: none; - color: white; - -webkit-border-radius: 7px; -} - -.sidebar-tree-item .status .bubble:empty { - display: none; -} - -.sidebar-tree-item.selected .status .bubble { - background-color: white !important; - color: rgb(132, 154, 190) !important; -} - -.focused .sidebar-tree-item.selected .status .bubble { - color: rgb(36, 98, 172) !important; -} - -body.inactive .sidebar-tree-item.selected .status .bubble { - color: rgb(159, 159, 159) !important; -} - -.sidebar-tree.small .sidebar-tree-item, .sidebar-tree .children.small .sidebar-tree-item, .sidebar-tree-item.small { - height: 20px; - line-height: 18px; -} - -.sidebar-tree.small .sidebar-tree-item .icon, .sidebar-tree .children.small .sidebar-tree-item .icon, .sidebar-tree-item.small .icon { - width: 16px; - height: 16px; -} - -.sidebar-tree.small .sidebar-tree-item .status, .sidebar-tree .children.small .sidebar-tree-item .status, .sidebar-tree-item.small .status { - margin-top: 1px; -} - -.sidebar-tree-item.selected { - 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-color: rgb(162, 177, 207); - text-shadow: rgba(0, 0, 0, 0.33) 0 1px 0; - font-weight: bold; - -webkit-background-origin: padding; - -webkit-background-clip: padding; -} - -.focused .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-color: rgb(92, 147, 213); -} - -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-color: rgb(180, 180, 180); -} - -.sidebar-tree-item .titles { - position: relative; - top: 5px; - line-height: 11px; - padding-bottom: 1px; - text-overflow: ellipsis; - overflow: hidden; - white-space: nowrap; -} - -.sidebar-tree-item .titles.no-subtitle { - top: 10px; -} - -.sidebar-tree.small .sidebar-tree-item .titles, .sidebar-tree .children.small .sidebar-tree-item .titles, .sidebar-tree-item.small .titles { - top: 2px; - line-height: normal; -} - -.sidebar-tree:not(.small) .sidebar-tree-item:not(.small) .title::after, .sidebar-tree .children:not(.small) .sidebar-tree-item .title::after { - content: "\A"; - white-space: pre; -} - -.sidebar-tree-item .subtitle { - font-size: 9px; - color: rgba(0, 0, 0, 0.7); -} - -.sidebar-tree.small .sidebar-tree-item .subtitle, .sidebar-tree .children.small .sidebar-tree-item .subtitle, .sidebar-tree-item.small .subtitle { - display: none; -} - -.sidebar-tree-item.selected .subtitle { - color: rgba(255, 255, 255, 0.9); -} - -.sidebar-tree-item .resources-graph-side { - position: absolute; - height: 100%; - top: 0; - right: 0; -} - -.sidebar-tree-item .resources-graph-bar-area { - position: absolute; - top: 0; - bottom: 0; - right: 8px; - left: 9px; -} - -#resources-container:not(.viewing-resource) .resource-sidebar-tree-item:nth-of-type(2n) { - background-color: rgba(0, 0, 0, 0.05); -} - -#resources-container:not(.viewing-resource) .resource-sidebar-tree-item:nth-of-type(2n) .resources-graph-side { - background-color: rgba(0, 0, 0, 0.05); -} - -#resources-container.viewing-resource #resources-sidebar .sidebar-tree-item .resources-graph-side { - display: none; -} - -.resources-time-graph-sidebar-item .icon { - content: url(Images/resourcesTimeGraphIcon.png); -} - -.resources-size-graph-sidebar-item .icon { - content: url(Images/resourcesSizeGraphIcon.png); -} - -.resources-size-graph-sidebar-item .icon { - content: url(Images/resourcesSizeGraphIcon.png); -} - -.resource-sidebar-tree-item .icon { - content: url(Images/resourcePlainIcon.png); -} - -.children.small .resource-sidebar-tree-item .icon { - content: url(Images/resourcePlainIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-documents .icon { - content: url(Images/resourceDocumentIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-documents .icon { - content: url(Images/resourceDocumentIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-stylesheets .icon { - content: url(Images/resourceCSSIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-stylesheets .icon { - content: url(Images/resourceDocumentIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-images .icon { - content: url(Images/resourcePlainIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-images .icon { - content: url(Images/resourcePlainIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-fonts .icon { - content: url(Images/resourcePlainIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-fonts .icon { - content: url(Images/resourcePlainIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-scripts .icon { - content: url(Images/resourceJSIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-scripts .icon { - content: url(Images/resourceDocumentIconSmall.png); -} - -.resource-sidebar-tree-item.resources-category-xhr .icon { - content: url(Images/resourcePlainIcon.png); -} - -.children.small .resource-sidebar-tree-item.resources-category-xhr .icon { - content: url(Images/resourceDocumentIconSmall.png); -} - -.resource-sidebar-tree-item .bubble.warning { - background-color: rgb(232, 164, 0); -} - -.resource-sidebar-tree-item .bubble.error { - background-color: rgb(216, 35, 35); -} diff --git a/webkit/port/page/inspector/inspector.html b/webkit/port/page/inspector/inspector.html index 1c0d49e..e69de29 100644 --- a/webkit/port/page/inspector/inspector.html +++ b/webkit/port/page/inspector/inspector.html @@ -1,78 +0,0 @@ -<!-- -Copyright (C) 2006, 2007, 2008 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. ---> -<!DOCTYPE html> -<html> -<head> - <meta http-equiv="content-type" content="text/html; charset=utf-8"> - <link rel="stylesheet" type="text/css" href="inspector.css"> - <script type="text/javascript" src="utilities.js"></script> - <script type="text/javascript" src="treeoutline.js"></script> - <script type="text/javascript" src="inspector.js"></script> - <script type="text/javascript" src="TextPrompt.js"></script> - <script type="text/javascript" src="View.js"></script> - <script type="text/javascript" src="Console.js"></script> - <script type="text/javascript" src="Resource.js"></script> - <script type="text/javascript" src="ResourceCategory.js"></script> - <script type="text/javascript" src="Database.js"></script> - <script type="text/javascript" src="SidebarPane.js"></script> - <script type="text/javascript" src="SidebarTreeElement.js"></script> - <script type="text/javascript" src="PropertiesSection.js"></script> - <script type="text/javascript" src="BreakpointsSidebarPane.js"></script> - <script type="text/javascript" src="CallStackSidebarPane.js"></script> - <script type="text/javascript" src="MetricsSidebarPane.js"></script> - <script type="text/javascript" src="PropertiesSidebarPane.js"></script> - <script type="text/javascript" src="StylesSidebarPane.js"></script> - <script type="text/javascript" src="Panel.js"></script> - <script type="text/javascript" src="ElementsPanel.js"></script> - <script type="text/javascript" src="ResourcesPanel.js"></script> - <script type="text/javascript" src="ScriptsPanel.js"></script> - <!--script type="text/javascript" src="DatabasesPanel.js"></script--> - <script type="text/javascript" src="ResourceView.js"></script> - <script type="text/javascript" src="SourceView.js"></script> - <script type="text/javascript" src="FontView.js"></script> - <script type="text/javascript" src="ImageView.js"></script> - <!--script type="text/javascript" src="DatabaseTableView.js"></script> - <script type="text/javascript" src="DatabaseQueryView.js"></script--> -</head> -<body class="detached"> - <div id="toolbar"> - <div class="toolbar-item flexable-space"></div> - <div class="toolbar-item"><input id="search" type="search" results="20" incremental="incremental" onsearch="WebInspector.performSearch(this.value)"><div id="search-toolbar-label" class="toolbar-label"></div></div> - </div> - <div id="main"> - <div id="searchResults" class="focusable hidden"></div> - <div id="searchResultsResizer" class="hidden"></div> - <div id="main-panels" class="focusable focused"></div> - <div id="main-status-bar" class="status-bar"><div id="anchored-status-bar-items"><button id="dock-status-bar-item" class="status-bar-item toggled"></button><button id="console-status-bar-item" class="status-bar-item"></button><div id="error-warning-count" class="hidden"></div></div></div> - </div> - <div id="console"> - <div id="console-messages" class="focusable blurred"><div id="console-prompt"><br></div></div> - <div id="console-status-bar" class="status-bar"><div id="other-console-status-bar-items"><button id="clear-console-status-bar-item" class="status-bar-item"></button></div></div> - </div> -</body> -</html> diff --git a/webkit/port/page/inspector/inspector.js b/webkit/port/page/inspector/inspector.js index dfd9d07..e69de29 100644 --- a/webkit/port/page/inspector/inspector.js +++ b/webkit/port/page/inspector/inspector.js @@ -1,1184 +0,0 @@ -/* - * Copyright (C) 2006, 2007, 2008 Apple Inc. All rights reserved. - * Copyright (C) 2007 Matt Lilek (pewtermoose@gmail.com). - * - * 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. - */ - -var Preferences = { - ignoreWhitespace: true, - showUserAgentStyles: true, - maxInlineTextChildLength: 80, - maxTextSearchResultLength: 80, - minConsoleHeight: 75, - minSidebarWidth: 100, - minElementsSidebarWidth: 200, - minScriptsSidebarWidth: 200, - showInheritedComputedStyleProperties: false, - showMissingLocalizedStrings: false -} - -var WebInspector = { - resources: [], - resourceURLMap: {}, - searchResultsHeight: 100, - localizedStrings: {}, - missingLocalizedStrings: {}, - - get currentFocusElement() - { - return this._currentFocusElement; - }, - - set currentFocusElement(x) - { - if (!x || this._currentFocusElement === x) - return; - - if (this._currentFocusElement) { - this._currentFocusElement.removeStyleClass("focused"); - this._currentFocusElement.addStyleClass("blurred"); - if (this._currentFocusElement.blur) - this._currentFocusElement.blur(); - if (this._currentFocusElement.blurred) - this._currentFocusElement.blurred(x); - } - - var previousFocusElement = this._currentFocusElement; - this._currentFocusElement = x; - - if (x) { - x.addStyleClass("focused"); - x.removeStyleClass("blurred"); - if (this._currentFocusElement.focus) - this._currentFocusElement.focus(); - if (this._currentFocusElement.focused) - this._currentFocusElement.focused(previousFocusElement); - - // 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(); - if (selection.isCollapsed && !this._currentFocusElement.isInsertionCaretInside()) { - var selectionRange = document.createRange(); - selectionRange.setStart(this._currentFocusElement, 0); - selectionRange.setEnd(this._currentFocusElement, 0); - - selection.removeAllRanges(); - selection.addRange(selectionRange); - } - } - }, - - get currentPanel() - { - return this._currentPanel; - }, - - set currentPanel(x) - { - if (this._currentPanel === x) - return; - - if (this._currentPanel) - this._currentPanel.hide(); - - this._currentPanel = x; - - if (x) - x.show(); - }, - - get attached() - { - return this._attached; - }, - - set attached(x) - { - if (this._attached === x) - return; - - this._attached = x; - - var dockToggleButton = document.getElementById("dock-status-bar-item"); - var body = document.body; - - if (x) { - InspectorController.attach(); - body.removeStyleClass("detached"); - body.addStyleClass("attached"); - dockToggleButton.title = WebInspector.UIString("Undock into separate window."); - } else { - InspectorController.detach(); - body.removeStyleClass("attached"); - body.addStyleClass("detached"); - dockToggleButton.title = WebInspector.UIString("Dock to main window."); - } - }, - - get showingSearchResults() - { - return this._showingSearchResults; - }, - - set showingSearchResults(x) - { - if (this._showingSearchResults === x) - return; - - this._showingSearchResults = x; - - var resultsContainer = document.getElementById("searchResults"); - var searchResultsResizer = document.getElementById("searchResultsResizer"); - - if (x) { - resultsContainer.removeStyleClass("hidden"); - searchResultsResizer.removeStyleClass("hidden"); - - var animations = [ - {element: resultsContainer, end: {top: 0}}, - {element: searchResultsResizer, end: {top: WebInspector.searchResultsHeight - 3}}, - {element: document.getElementById("main-panels"), end: {top: WebInspector.searchResultsHeight}} - ]; - - WebInspector.animateStyle(animations, 250); - } else { - searchResultsResizer.addStyleClass("hidden"); - - var animations = [ - {element: resultsContainer, end: {top: -WebInspector.searchResultsHeight}}, - {element: searchResultsResizer, end: {top: 0}}, - {element: document.getElementById("main-panels"), end: {top: 0}} - ]; - - var animationFinished = function() - { - resultsContainer.addStyleClass("hidden"); - resultsContainer.removeChildren(); - delete this.searchResultsTree; - }; - - WebInspector.animateStyle(animations, 250, animationFinished); - } - }, - get errors() - { - return this._errors || 0; - }, - - set errors(x) - { - x = Math.max(x, 0); - - if (this._errors === x) - return; - this._errors = x; - this._updateErrorAndWarningCounts(); - }, - - get warnings() - { - return this._warnings || 0; - }, - - set warnings(x) - { - x = Math.max(x, 0); - - if (this._warnings === x) - return; - this._warnings = x; - this._updateErrorAndWarningCounts(); - }, - - _updateErrorAndWarningCounts: function() - { - var errorWarningElement = document.getElementById("error-warning-count"); - if (!errorWarningElement) - return; - if (!this.errors && !this.warnings) { - errorWarningElement.addStyleClass("hidden"); - return; - } - - errorWarningElement.removeStyleClass("hidden"); - - errorWarningElement.removeChildren(); - - if (this.errors) { - var errorElement = document.createElement("span"); - errorElement.id = "error-count"; - errorElement.textContent = this.errors; - errorWarningElement.appendChild(errorElement); - } - - if (this.warnings) { - var warningsElement = document.createElement("span"); - warningsElement.id = "warning-count"; - warningsElement.textContent = this.warnings; - errorWarningElement.appendChild(warningsElement); - } - - if (this.errors) { - if (this.warnings) { - if (this.errors == 1) { - if (this.warnings == 1) - errorWarningElement.title = WebInspector.UIString("%d error, %d warning", this.errors, this.warnings); - else - errorWarningElement.title = WebInspector.UIString("%d error, %d warnings", this.errors, this.warnings); - } else if (this.warnings == 1) - errorWarningElement.title = WebInspector.UIString("%d errors, %d warning", this.errors, this.warnings); - else - errorWarningElement.title = WebInspector.UIString("%d errors, %d warnings", this.errors, this.warnings); - } else if (this.errors == 1) - errorWarningElement.title = WebInspector.UIString("%d error", this.errors); - else - errorWarningElement.title = WebInspector.UIString("%d errors", this.errors); - } else if (this.warnings == 1) - errorWarningElement.title = WebInspector.UIString("%d warning", this.warnings); - else if (this.warnings) - errorWarningElement.title = WebInspector.UIString("%d warnings", this.warnings); - else - errorWarningElement.title = null; - } -} - -WebInspector.loaded = function() -{ - var platform = InspectorController.platform(); - document.body.addStyleClass("platform-" + platform); - - this.console = new WebInspector.Console(); - - this.panels = { - elements: new WebInspector.ElementsPanel(), - resources: new WebInspector.ResourcesPanel() - // We don't use the databases tab, so don't show it. - // , databases: new WebInspector.DatabasesPanel() - }; - - var toolbarElement = document.getElementById("toolbar"); - for (var panelName in this.panels) { - var panel = this.panels[panelName]; - var panelToolbarItem = panel.toolbarItem; - panelToolbarItem.addEventListener("click", this._toolbarItemClicked.bind(this)); - if (previousToolbarItem) - toolbarElement.insertBefore(panelToolbarItem, previousToolbarItem.nextSibling); - else - toolbarElement.insertBefore(panelToolbarItem, toolbarElement.firstChild); - var previousToolbarItem = panelToolbarItem; - } - - this.currentPanel = this.panels.elements; - - this.resourceCategories = { - documents: new WebInspector.ResourceCategory(WebInspector.UIString("Documents"), "documents"), - stylesheets: new WebInspector.ResourceCategory(WebInspector.UIString("Stylesheets"), "stylesheets"), - images: new WebInspector.ResourceCategory(WebInspector.UIString("Images"), "images"), - scripts: new WebInspector.ResourceCategory(WebInspector.UIString("Scripts"), "scripts"), - xhr: new WebInspector.ResourceCategory(WebInspector.UIString("XHR"), "xhr"), - fonts: new WebInspector.ResourceCategory(WebInspector.UIString("Fonts"), "fonts"), - other: new WebInspector.ResourceCategory(WebInspector.UIString("Other"), "other") - }; - - this.Tips = { - ResourceNotCompressed: {id: 0, message: WebInspector.UIString("You could save bandwidth by having your web server compress this transfer with gzip or zlib.")} - }; - - this.Warnings = { - IncorrectMIMEType: {id: 0, message: WebInspector.UIString("Resource interpreted as %s but transferred with MIME type %s.")} - }; - - this.addMainEventListeners(document); - - window.addEventListener("unload", this.windowUnload.bind(this), true); - window.addEventListener("resize", this.windowResize.bind(this), true); - - document.addEventListener("mousedown", this.changeFocus.bind(this), true); - document.addEventListener("focus", this.changeFocus.bind(this), true); - document.addEventListener("keydown", this.documentKeyDown.bind(this), true); - document.addEventListener("beforecopy", this.documentCanCopy.bind(this), true); - document.addEventListener("copy", this.documentCopy.bind(this), true); - - document.getElementById("searchResultsResizer").addEventListener("mousedown", this.searchResultsResizerDragStart, true); - - var mainPanelsElement = document.getElementById("main-panels"); - mainPanelsElement.handleKeyEvent = this.mainKeyDown.bind(this); - mainPanelsElement.handleCopyEvent = this.mainCopy.bind(this); - - this.currentFocusElement = mainPanelsElement; - - var dockToggleButton = document.getElementById("dock-status-bar-item"); - dockToggleButton.addEventListener("click", this.toggleAttach.bind(this), false); - - if (this.attached) - dockToggleButton.title = WebInspector.UIString("Undock into separate window."); - else - dockToggleButton.title = WebInspector.UIString("Dock to main window."); - - var errorWarningCount = document.getElementById("error-warning-count"); - errorWarningCount.addEventListener("click", this.console.show.bind(this.console), false); - this._updateErrorAndWarningCounts(); - document.getElementById("search-toolbar-label").textContent = WebInspector.UIString("Search"); - - if (platform === "mac-leopard") - document.getElementById("toolbar").addEventListener("mousedown", this.toolbarDragStart, true); - - InspectorController.loaded(); -} - -var windowLoaded = function() -{ - var localizedStringsURL = InspectorController.localizedStringsURL(); - if (localizedStringsURL) { - var localizedStringsScriptElement = document.createElement("script"); - localizedStringsScriptElement.addEventListener("load", WebInspector.loaded.bind(WebInspector), false); - localizedStringsScriptElement.type = "text/javascript"; - localizedStringsScriptElement.src = localizedStringsURL; - document.getElementsByTagName("head").item(0).appendChild(localizedStringsScriptElement); - } else - WebInspector.loaded(); - - window.removeEventListener("load", windowLoaded, false); - delete windowLoaded; -}; - -window.addEventListener("load", windowLoaded, false); - -WebInspector.windowUnload = function(event) -{ - InspectorController.windowUnloading(); -} - -WebInspector.windowResize = function(event) -{ - if (this.currentPanel && this.currentPanel.resize) - this.currentPanel.resize(); -} - -WebInspector.windowFocused = function(event) -{ - if (event.target.nodeType === Node.DOCUMENT_NODE) - document.body.removeStyleClass("inactive"); -} - -WebInspector.windowBlured = function(event) -{ - if (event.target.nodeType === Node.DOCUMENT_NODE) - document.body.addStyleClass("inactive"); - this.hideDOMNodeHighlight(); -} - -WebInspector.changeFocus = function(event) -{ - var nextFocusElement; - - var current = event.target; - while (current) { - if (current.nodeName.toLowerCase() === "input") - nextFocusElement = current; - current = current.parentNode; - } - - if (!nextFocusElement) - nextFocusElement = event.target.enclosingNodeOrSelfWithClass("focusable"); - - this.currentFocusElement = nextFocusElement; -} - -WebInspector.documentClick = function(event) -{ - var anchor = event.target.enclosingNodeOrSelfWithNodeName("a"); - if (!anchor) - return; - - if (anchor.followOnAltClick && !event.altKey) { - event.preventDefault(); - return; - } - - if (!anchor.hasStyleClass("webkit-html-resource-link")) - return; - - if (WebInspector.showResourceForURL(anchor.href, anchor.lineNumber)) { - event.preventDefault(); - event.stopPropagation(); - } -} - -WebInspector.documentKeyDown = function(event) -{ - if (!this.currentFocusElement) - return; - if (this.currentFocusElement.handleKeyEvent) - this.currentFocusElement.handleKeyEvent(event); - else if (this.currentFocusElement.id && this.currentFocusElement.id.length && WebInspector[this.currentFocusElement.id + "KeyDown"]) - WebInspector[this.currentFocusElement.id + "KeyDown"](event); - - if (!event.handled) { - switch (event.keyIdentifier) { - case "U+001B": // Escape key - this.console.visible = !this.console.visible; - event.preventDefault(); - break; - } - } -} - -WebInspector.documentCanCopy = function(event) -{ - if (!this.currentFocusElement) - return; - // Calling preventDefault() will say "we support copying, so enable the Copy menu". - if (this.currentFocusElement.handleCopyEvent) - event.preventDefault(); - else if (this.currentFocusElement.id && this.currentFocusElement.id.length && WebInspector[this.currentFocusElement.id + "Copy"]) - event.preventDefault(); -} - -WebInspector.documentCopy = function(event) -{ - if (!this.currentFocusElement) - return; - if (this.currentFocusElement.handleCopyEvent) - this.currentFocusElement.handleCopyEvent(event); - else if (this.currentFocusElement.id && this.currentFocusElement.id.length && WebInspector[this.currentFocusElement.id + "Copy"]) - WebInspector[this.currentFocusElement.id + "Copy"](event); -} - -WebInspector.mainKeyDown = function(event) -{ - if (this.currentPanel && this.currentPanel.handleKeyEvent) - this.currentPanel.handleKeyEvent(event); -} - -WebInspector.mainCopy = function(event) -{ - if (this.currentPanel && this.currentPanel.handleCopyEvent) - this.currentPanel.handleCopyEvent(event); -} - -WebInspector.searchResultsKeyDown = function(event) -{ - if (this.searchResultsTree) - this.searchResultsTree.handleKeyEvent(event); -} - -WebInspector.animateStyle = function(animations, duration, callback, complete) -{ - if (complete === undefined) - complete = 0; - var slice = (1000 / 30); // 30 frames per second - - var defaultUnit = "px"; - var propertyUnit = {opacity: ""}; - - for (var i = 0; i < animations.length; ++i) { - var animation = animations[i]; - var element = null; - var start = null; - var current = null; - var end = null; - for (key in animation) { - if (key === "element") - element = animation[key]; - else if (key === "start") - start = animation[key]; - else if (key === "current") - current = animation[key]; - else if (key === "end") - end = animation[key]; - } - - if (!element || !end) - continue; - - var computedStyle = element.ownerDocument.defaultView.getComputedStyle(element); - if (!start) { - start = {}; - for (key in end) - start[key] = parseInt(computedStyle.getPropertyValue(key)); - animation.start = start; - } else if (complete == 0) - for (key in start) - element.style.setProperty(key, start[key] + (key in propertyUnit ? propertyUnit[key] : defaultUnit)); - - if (!current) { - current = {}; - for (key in start) - current[key] = start[key]; - animation.current = current; - } - - function cubicInOut(t, b, c, d) - { - if ((t/=d/2) < 1) return c/2*t*t*t + b; - return c/2*((t-=2)*t*t + 2) + b; - } - - var style = element.style; - for (key in end) { - var startValue = start[key]; - var currentValue = current[key]; - var endValue = end[key]; - if ((complete + slice) < duration) { - var delta = (endValue - startValue) / (duration / slice); - var newValue = cubicInOut(complete, startValue, endValue - startValue, duration); - style.setProperty(key, newValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit)); - current[key] = newValue; - } else { - style.setProperty(key, endValue + (key in propertyUnit ? propertyUnit[key] : defaultUnit)); - } - } - } - - if (complete < duration) - setTimeout(WebInspector.animateStyle, slice, animations, duration, callback, complete + slice); - else if (callback) - callback(); -} - -WebInspector.toggleAttach = function() -{ - this.attached = !this.attached; -} - -WebInspector.toolbarDragStart = function(event) -{ - if (WebInspector.attached) - return; - - var target = event.target; - if (target.hasStyleClass("toolbar-item") && target.hasStyleClass("toggleable")) - return; - - var toolbar = document.getElementById("toolbar"); - if (target !== toolbar && !target.hasStyleClass("toolbar-item")) - return; - - toolbar.lastScreenX = event.screenX; - toolbar.lastScreenY = event.screenY; - - document.addEventListener("mousemove", WebInspector.toolbarDrag, true); - document.addEventListener("mouseup", WebInspector.toolbarDragEnd, true); - document.body.style.cursor = "default"; - - event.preventDefault(); -} - -WebInspector.toolbarDragEnd = function(event) -{ - var toolbar = document.getElementById("toolbar"); - delete toolbar.lastScreenX; - delete toolbar.lastScreenY; - - document.removeEventListener("mousemove", WebInspector.toolbarDrag, true); - document.removeEventListener("mouseup", WebInspector.toolbarDragEnd, true); - document.body.style.removeProperty("cursor"); - - event.preventDefault(); -} - -WebInspector.toolbarDrag = function(event) -{ - var toolbar = document.getElementById("toolbar"); - - var x = event.screenX - toolbar.lastScreenX; - var y = event.screenY - toolbar.lastScreenY; - - toolbar.lastScreenX = event.screenX; - toolbar.lastScreenY = event.screenY; - - // We cannot call window.moveBy here because it restricts the movement of the window - // at the edges. - InspectorController.moveByUnrestricted(x, y); - - event.preventDefault(); -} - -WebInspector.searchResultsResizerDragStart = function(event) -{ - WebInspector.elementDragStart(document.getElementById("searchResults"), WebInspector.searchResultsResizerDrag, WebInspector.searchResultsResizerDragEnd, event, "row-resize"); -} - -WebInspector.searchResultsResizerDragEnd = function(event) -{ - WebInspector.elementDragEnd(event); -} - -WebInspector.searchResultsResizerDrag = function(event) -{ - var y = event.pageY - document.getElementById("main").offsetTop; - var newHeight = Number.constrain(y, 100, window.innerHeight - 100); - - WebInspector.searchResultsHeight = newHeight; - - document.getElementById("searchResults").style.height = WebInspector.searchResultsHeight + "px"; - document.getElementById("main-panels").style.top = newHeight + "px"; - document.getElementById("searchResultsResizer").style.top = (newHeight - 3) + "px"; - - event.preventDefault(); -} - -WebInspector.elementDragStart = function(element, dividerDrag, elementDragEnd, event, cursor) -{ - if (this._elementDraggingEventListener || this._elementEndDraggingEventListener) - this.elementDragEnd(event); - - this._elementDraggingEventListener = dividerDrag; - this._elementEndDraggingEventListener = elementDragEnd; - - document.addEventListener("mousemove", dividerDrag, true); - document.addEventListener("mouseup", elementDragEnd, true); - - document.body.style.cursor = cursor; - - event.preventDefault(); -} - -WebInspector.elementDragEnd = function(event) -{ - document.removeEventListener("mousemove", this._elementDraggingEventListener, true); - document.removeEventListener("mouseup", this._elementEndDraggingEventListener, true); - - document.body.style.removeProperty("cursor"); - - delete this._elementDraggingEventListener; - delete this._elementEndDraggingEventListener; - - event.preventDefault(); -} - -WebInspector.showConsole = function() -{ - this.console.show(); -} - -WebInspector.showTimeline = function() -{ - this.currentPanel = this.panels.resources; -} - -WebInspector.addResource = function(resource) -{ - this.resources.push(resource); - this.resourceURLMap[resource.url] = resource; - - if (resource.mainResource) { - this.mainResource = resource; - this.panels.elements.reset(); - } - - this.panels.resources.addResource(resource); -} - -WebInspector.removeResource = function(resource) -{ - resource.category.removeResource(resource); - delete this.resourceURLMap[resource.url]; - - var resourcesLength = this.resources.length; - for (var i = 0; i < resourcesLength; ++i) { - if (this.resources[i] === resource) { - this.resources.splice(i, 1); - break; - } - } - - this.panels.resources.removeResource(resource); -} - -WebInspector.addDatabase = function(database) -{ - if (this.panels.databases) - this.panels.databases.addDatabase(database); -} - -WebInspector.reset = function() -{ - for (var panelName in this.panels) { - var panel = this.panels[panelName]; - if ("reset" in panel) - panel.reset(); - } - - for (var category in this.resourceCategories) - this.resourceCategories[category].removeAllResources(); - - this.resources = []; - this.resourceURLMap = {}; - - delete this.mainResource; - - this.console.clearMessages(); -} - -WebInspector.resourceURLChanged = function(resource, oldURL) -{ - delete this.resourceURLMap[oldURL]; - this.resourceURLMap[resource.url] = resource; -} - -WebInspector.addMessageToConsole = function(msg) -{ - this.console.addMessage(msg); -} - -WebInspector.drawLoadingPieChart = function(canvas, percent) { - var g = canvas.getContext("2d"); - var darkColor = "rgb(122, 168, 218)"; - var lightColor = "rgb(228, 241, 251)"; - var cx = 8; - var cy = 8; - var r = 7; - - g.beginPath(); - g.arc(cx, cy, r, 0, Math.PI * 2, false); - g.closePath(); - - g.lineWidth = 1; - g.strokeStyle = darkColor; - g.fillStyle = lightColor; - g.fill(); - g.stroke(); - - var startangle = -Math.PI / 2; - var endangle = startangle + (percent * Math.PI * 2); - - g.beginPath(); - g.moveTo(cx, cy); - g.arc(cx, cy, r, startangle, endangle, false); - g.closePath(); - - g.fillStyle = darkColor; - g.fill(); -} - -WebInspector.updateFocusedNode = function(node) -{ - if (!node) - // FIXME: Should we deselect if null is passed in? - return; - - this.currentPanel = this.panels.elements; - this.panels.elements.focusedDOMNode = node; -} - -WebInspector.resourceForURL = function(url) -{ - for (var resourceURL in this.resourceURLMap) { - if (resourceURL.hasSubstring(url)) - return this.resourceURLMap[resourceURL]; - } - - return null; -} - -WebInspector.showResourceForURL = function(url, line) -{ - var resource = this.resourceForURL(url); - if (!resource) - return false; - - this.currentPanel = this.panels.resources; - this.panels.resources.showResource(resource, line); - return true; -} - -WebInspector.linkifyURL = function(url, linkText, classes, isExternal) -{ - url = url.escapeHTML(); - if (linkText === undefined) - linkText = url; - classes = (classes === undefined) ? "" : classes + " "; - classes += isExternal ? "webkit-html-external-link" : "webkit-html-resource-link"; - var link = "<a href=\"" + url + "\" class=\"" + classes.escapeHTML() + "\" title=\"" + url + "\" target=\"_blank\">" + linkText + "</a>"; - return link; -} - -WebInspector.addMainEventListeners = function(doc) -{ - doc.defaultView.addEventListener("focus", this.windowFocused.bind(this), true); - doc.defaultView.addEventListener("blur", this.windowBlured.bind(this), true); - doc.addEventListener("click", this.documentClick.bind(this), true); -} - -WebInspector.performSearch = function(query) -{ - if (!query || !query.length) { - this.showingSearchResults = false; - return; - } - - var resultsContainer = document.getElementById("searchResults"); - resultsContainer.removeChildren(); - - var isXPath = query.indexOf("/") !== -1; - - var xpathQuery; - if (isXPath) - xpathQuery = query; - else { - var escapedQuery = query.escapeCharacters("'"); - xpathQuery = "//*[contains(name(),'" + escapedQuery + "') or contains(@*,'" + escapedQuery + "')] | //text()[contains(.,'" + escapedQuery + "')] | //comment()[contains(.,'" + escapedQuery + "')]"; - } - - var resourcesToSearch = [].concat(this.resourceCategories.documents.resources, this.resourceCategories.stylesheets.resources, this.resourceCategories.scripts.resources, this.resourceCategories.other.resources); - - var files = []; - for (var i = 0; i < resourcesToSearch.length; ++i) { - var resource = resourcesToSearch[i]; - - var sourceResults = []; - if (!isXPath) { - var sourceFrame = this.panels.resources.sourceFrameForResource(resource); - if (sourceFrame) - sourceResults = InspectorController.search(sourceFrame.contentDocument, query); - } - - var domResults = []; - const searchResultsProperty = "__includedInInspectorSearchResults"; - function addNodesToDOMResults(nodes, length, getItem) - { - for (var i = 0; i < length; ++i) { - var node = getItem(nodes, i); - if (searchResultsProperty in node) - continue; - node[searchResultsProperty] = true; - domResults.push(node); - } - } - - function cleanUpDOMResultsNodes() - { - for (var i = 0; i < domResults.length; ++i) - delete domResults[i][searchResultsProperty]; - } - - if (resource.category === this.resourceCategories.documents) { - var doc = resource.documentNode; - try { - var result = InspectorController.inspectedWindow().Document.prototype.evaluate.call(doc, xpathQuery, doc, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE); - addNodesToDOMResults(result, result.snapshotLength, function(l, i) { return l.snapshotItem(i); }); - } catch(err) { - // ignore any exceptions. the query might be malformed, but we allow that. - } - - var result = InspectorController.inspectedWindow().Document.prototype.querySelectorAll.call(doc, query); - addNodesToDOMResults(result, result.length, function(l, i) { return l.item(i); }); - - cleanUpDOMResultsNodes(); - } - - if ((!sourceResults || !sourceResults.length) && !domResults.length) - continue; - - files.push({resource: resource, sourceResults: sourceResults, domResults: domResults}); - } - - if (!files.length) - return; - - this.showingSearchResults = true; - - var fileList = document.createElement("ol"); - fileList.className = "outline-disclosure"; - resultsContainer.appendChild(fileList); - - this.searchResultsTree = new TreeOutline(fileList); - this.searchResultsTree.expandTreeElementsWhenArrowing = true; - - var sourceResultSelected = function(element) - { - var selection = window.getSelection(); - selection.removeAllRanges(); - selection.addRange(element.representedObject.range); - - var oldFocusElement = this.currentFocusElement; - this.currentPanel = this.panels.resources; - this.currentFocusElement = oldFocusElement; - - this.panels.resources.showResource(element.representedObject.resource); - - element.representedObject.line.scrollIntoViewIfNeeded(true); - element.listItemElement.scrollIntoViewIfNeeded(false); - } - - var domResultSelected = function(element) - { - var oldFocusElement = this.currentFocusElement; - this.currentPanel = this.panels.elements; - this.currentFocusElement = oldFocusElement; - - this.panels.elements.focusedDOMNode = element.representedObject.node; - element.listItemElement.scrollIntoViewIfNeeded(false); - } - - for (var i = 0; i < files.length; ++i) { - var file = files[i]; - - var fileItem = new TreeElement(file.resource.displayName, {}, true); - fileItem.expanded = true; - fileItem.selectable = false; - this.searchResultsTree.appendChild(fileItem); - - if (file.sourceResults && file.sourceResults.length) { - for (var j = 0; j < file.sourceResults.length; ++j) { - var range = file.sourceResults[j]; - var sourceDocument = range.startContainer.ownerDocument; - - var line = range.startContainer; - while (line.parentNode && line.nodeName.toLowerCase() != "tr") - line = line.parentNode; - var lineRange = sourceDocument.createRange(); - lineRange.selectNodeContents(line); - - // Don't include any error bubbles in the search result - var end = line.lastChild.lastChild; - if (end.nodeName.toLowerCase() == "div" && end.hasStyleClass("webkit-html-message-bubble")) { - while (end && end.nodeName.toLowerCase() == "div" && end.hasStyleClass("webkit-html-message-bubble")) - end = end.previousSibling; - lineRange.setEndAfter(end); - } - - var beforeRange = sourceDocument.createRange(); - beforeRange.setStart(lineRange.startContainer, lineRange.startOffset); - beforeRange.setEnd(range.startContainer, range.startOffset); - - var afterRange = sourceDocument.createRange(); - afterRange.setStart(range.endContainer, range.endOffset); - afterRange.setEnd(lineRange.endContainer, lineRange.endOffset); - - var beforeText = beforeRange.toString().trimLeadingWhitespace(); - var text = range.toString(); - var afterText = afterRange.toString().trimTrailingWhitespace(); - - var length = beforeText.length + text.length + afterText.length; - if (length > Preferences.maxTextSearchResultLength) { - var beforeAfterLength = (Preferences.maxTextSearchResultLength - text.length) / 2; - if (beforeText.length > beforeAfterLength) - beforeText = "\u2026" + beforeText.substr(-beforeAfterLength); - if (afterText.length > beforeAfterLength) - afterText = afterText.substr(0, beforeAfterLength) + "\u2026"; - } - - var title = "<div class=\"selection selected\"></div>"; - if (j == 0) - title += "<div class=\"search-results-section\">" + WebInspector.UIString("Source") + "</div>"; - title += beforeText.escapeHTML() + "<span class=\"search-matched-string\">" + text.escapeHTML() + "</span>" + afterText.escapeHTML(); - var item = new TreeElement(title, {resource: file.resource, line: line, range: range}, false); - item.onselect = sourceResultSelected.bind(this); - fileItem.appendChild(item); - } - } - - if (file.domResults.length) { - for (var j = 0; j < file.domResults.length; ++j) { - var node = file.domResults[j]; - var title = "<div class=\"selection selected\"></div>"; - if (j == 0) - title += "<div class=\"search-results-section\">" + WebInspector.UIString("DOM") + "</div>"; - title += nodeTitleInfo.call(node).title; - var item = new TreeElement(title, {resource: file.resource, node: node}, false); - item.onselect = domResultSelected.bind(this); - fileItem.appendChild(item); - } - } - } -} - -WebInspector.UIString = function(string) -{ - if (string in this.localizedStrings) - string = this.localizedStrings[string]; - else { - if (!(string in this.missingLocalizedStrings)) { - console.error("Localized string \"" + string + "\" not found."); - this.missingLocalizedStrings[string] = true; - } - - if (Preferences.showMissingLocalizedStrings) - string += " (not localized)"; - } - - return String.vsprintf(string, Array.prototype.slice.call(arguments, 1)); -} - -WebInspector.isBeingEdited = function(element) -{ - return element.__editing; -} - -WebInspector.startEditing = function(element, committedCallback, cancelledCallback, context) -{ - if (element.__editing) - return; - element.__editing = true; - - var oldText = element.textContent; - var handleKeyEvent = element.handleKeyEvent; - var blurred = element.blurred; - - element.addStyleClass("editing"); - element.addStyleClass("focusable"); - - var previousFocusElement = WebInspector.currentFocusElement; - - function cleanUpAfterEditing() { - delete this.__editing; - - this.removeStyleClass("editing"); - this.removeStyleClass("focusable"); - - this.handleKeyEvent = handleKeyEvent; - this.blurred = blurred; - - WebInspector.currentFocusElement = previousFocusElement; - } - - function editingCancelled() { - this.innerText = oldText; - - cleanUpAfterEditing.call(this); - - cancelledCallback(this, context); - } - - function editingCommitted() { - cleanUpAfterEditing.call(this); - - committedCallback(this, this.textContent, oldText, context); - } - - element.handleKeyEvent = function(event) { - if (event.keyIdentifier === "Enter") { - editingCommitted.call(element); - event.preventDefault(); - } else if (event.keyCode === 27) { // Escape key - editingCancelled.call(element); - event.preventDefault(); - event.handled = true; - } - } - - element.blurred = function() { editingCancelled.call(element); } - - WebInspector.currentFocusElement = element; -} - -WebInspector._toolbarItemClicked = function(event) -{ - var toolbarItem = event.currentTarget; - this.currentPanel = toolbarItem.panel; -} - -// This table maps MIME types to the Resource.Types which are valid for them. -// The following line: -// "text/html": {0: 1}, -// means that text/html is a valid MIME type for resources that have type -// WebInspector.Resource.Type.Document (which has a value of 0). -WebInspector.MIMETypes = { - "text/html": {0: true}, - "text/xml": {0: true}, - "text/plain": {0: true}, - "application/xhtml+xml": {0: true}, - "text/css": {1: true}, - "text/xsl": {1: true}, - "image/jpeg": {2: true}, - "image/png": {2: true}, - "image/gif": {2: true}, - "image/bmp": {2: true}, - "image/x-icon": {2: true}, - "image/x-xbitmap": {2: true}, - "font/ttf": {3: true}, - "font/opentype": {3: true}, - "application/x-font-type1": {3: true}, - "application/x-font-ttf": {3: true}, - "application/x-truetype-font": {3: true}, - "text/javascript": {4: true}, - "text/ecmascript": {4: true}, - "application/javascript": {4: true}, - "application/ecmascript": {4: true}, - "application/x-javascript": {4: true}, - "text/javascript1.1": {4: true}, - "text/javascript1.2": {4: true}, - "text/javascript1.3": {4: true}, - "text/jscript": {4: true}, - "text/livescript": {4: true}, -} - -/** - * This is used to keep track of the timer that is being used to highlight a - * node. - * @type {number} - * @private - */ -WebInspector._showTimerId = 0; - -/** - * Whether we are currently highlighting any node at the moment. - * @type {boolean} - * @private - */ -WebInspector._highlightIsShown = false; - -/** - * The time to wait before showing the highlighting of a node. - * @type {number} - */ -WebInspector._showHighlightDelayMs = 300; - -/** - * Highlights the given node after a short timeout. If there is already a shown - * node then the current node is highlighted immediately. - * @param {Node} node The node to highlight. - */ -WebInspector.highlightDOMNode = function(node) { - if (this._highlightIsShown) { - InspectorController.highlightDOMNode(node); - } else { - if (this._showTimerId) { - clearTimeout(this._showTimerId); - } - this._showTimerId = setTimeout((function() { - InspectorController.highlightDOMNode(node); - this._highlightIsShown = true; - }).bind(this), this._showHighlightDelayMs); - } -}; - -/** - * Removes the highlight of the current node. - */ -WebInspector.hideDOMNodeHighlight = function() -{ - if (this._highlightIsShown) { - InspectorController.hideDOMNodeHighlight(); - this._highlightIsShown = false; - } - if (this._showTimerId) { - clearTimeout(this._showTimerId); - } -}; diff --git a/webkit/port/page/inspector/treeoutline.js b/webkit/port/page/inspector/treeoutline.js index 1248055..e69de29 100644 --- a/webkit/port/page/inspector/treeoutline.js +++ b/webkit/port/page/inspector/treeoutline.js @@ -1,756 +0,0 @@ -/* - * 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. - */ - -function TreeOutline(listNode) -{ - this.children = []; - this.selectedTreeElement = null; - this._childrenListNode = listNode; - this._childrenListNode.removeChildren(); - this._knownTreeElements = []; - this._treeElementsExpandedState = []; - this.expandTreeElementsWhenArrowing = false; - this.root = true; - this.hasChildren = false; - this.expanded = true; - this.selected = false; - this.treeOutline = this; -} - -TreeOutline._knownTreeElementNextIdentifier = 1; - -TreeOutline._appendChild = function(child) -{ - if (!child) - throw("child can't be undefined or null"); - - var lastChild = this.children[this.children.length - 1]; - if (lastChild) { - lastChild.nextSibling = child; - child.previousSibling = lastChild; - } else { - child.previousSibling = null; - child.nextSibling = null; - } - - this.children.push(child); - this.hasChildren = true; - child.parent = this; - child.treeOutline = this.treeOutline; - child.treeOutline._rememberTreeElement(child); - - var current = child.children[0]; - while (current) { - current.treeOutline = this.treeOutline; - current.treeOutline._rememberTreeElement(current); - current = current.traverseNextTreeElement(false, child, true); - } - - if (child.hasChildren && child.treeOutline._treeElementsExpandedState[child.identifier] !== undefined) - child.expanded = child.treeOutline._treeElementsExpandedState[child.identifier]; - - if (!this._childrenListNode) { - this._childrenListNode = this.treeOutline._childrenListNode.ownerDocument.createElement("ol"); - this._childrenListNode.parentTreeElement = this; - this._childrenListNode.addStyleClass("children"); - if (this.hidden) - this._childrenListNode.addStyleClass("hidden"); - } - - child._attach(); -} - -TreeOutline._insertChild = function(child, index) -{ - if (!child) - throw("child can't be undefined or null"); - - var previousChild = (index > 0 ? this.children[index - 1] : null); - if (previousChild) { - previousChild.nextSibling = child; - child.previousSibling = previousChild; - } else { - child.previousSibling = null; - } - - var nextChild = this.children[index]; - if (nextChild) { - nextChild.previousSibling = child; - child.nextSibling = nextChild; - } else { - child.nextSibling = null; - } - - this.children.splice(index, 0, child); - this.hasChildren = true; - child.parent = this; - child.treeOutline = this.treeOutline; - child.treeOutline._rememberTreeElement(child); - - var current = child.children[0]; - while (current) { - current.treeOutline = this.treeOutline; - current.treeOutline._rememberTreeElement(current); - current = current.traverseNextTreeElement(false, child, true); - } - - if (child.hasChildren && child.treeOutline._treeElementsExpandedState[child.identifier] !== undefined) - child.expanded = child.treeOutline._treeElementsExpandedState[child.identifier]; - - if (!this._childrenListNode) { - this._childrenListNode = this.treeOutline._childrenListNode.ownerDocument.createElement("ol"); - this._childrenListNode.parentTreeElement = this; - this._childrenListNode.addStyleClass("children"); - if (this.hidden) - this._childrenListNode.addStyleClass("hidden"); - } - - child._attach(); -} - -TreeOutline._removeChild = function(child) -{ - if (!child) - throw("child can't be undefined or null"); - - for (var i = 0; i < this.children.length; ++i) { - if (this.children[i] === child) { - this.children.splice(i, 1); - break; - } - } - - child.deselect(); - - if (child.previousSibling) - child.previousSibling.nextSibling = child.nextSibling; - if (child.nextSibling) - child.nextSibling.previousSibling = child.previousSibling; - - if (child.treeOutline) - child.treeOutline._forgetTreeElement(child); - child._detach(); - child.treeOutline = null; - child.parent = null; - child.nextSibling = null; - child.previousSibling = null; -} - -TreeOutline._removeChildren = function() -{ - for (var i = 0; i < this.children.length; ++i) { - var child = this.children[i]; - child.deselect(); - if (child.treeOutline) - child.treeOutline._forgetTreeElement(child); - child._detach(); - child.treeOutline = null; - child.parent = null; - child.nextSibling = null; - child.previousSibling = null; - } - - this.children = []; - - if (this._childrenListNode) - this._childrenListNode.offsetTop; // force layout -} - -TreeOutline._removeChildrenRecursive = function() -{ - var childrenToRemove = this.children; - - var child = this.children[0]; - while (child) { - if (child.children.length) - childrenToRemove = childrenToRemove.concat(child.children); - child = child.traverseNextTreeElement(false, this, true); - } - - for (var i = 0; i < childrenToRemove.length; ++i) { - var child = childrenToRemove[i]; - child.deselect(); - if (child.treeOutline) - child.treeOutline._forgetTreeElement(child); - child._detach(); - child.children = []; - child.treeOutline = null; - child.parent = null; - child.nextSibling = null; - child.previousSibling = null; - } - - this.children = []; -} - -TreeOutline.prototype._rememberTreeElement = function(element) -{ - if (!this._knownTreeElements[element.identifier]) - this._knownTreeElements[element.identifier] = []; - - // check if the element is already known - var elements = this._knownTreeElements[element.identifier]; - for (var i = 0; i < elements.length; ++i) - if (elements[i] === element) - return; - - // add the element - elements.push(element); -} - -TreeOutline.prototype._forgetTreeElement = function(element) -{ - if (!this._knownTreeElements[element.identifier]) - return; - - var elements = this._knownTreeElements[element.identifier]; - for (var i = 0; i < elements.length; ++i) { - if (elements[i] === element) { - elements.splice(i, 1); - break; - } - } -} - -TreeOutline.prototype.findTreeElement = function(representedObject, isAncestor, getParent) -{ - if (!representedObject) - return null; - - if ("__treeElementIdentifier" in representedObject) { - var elements = this._knownTreeElements[representedObject.__treeElementIdentifier]; - if (elements) { - for (var i = 0; i < elements.length; ++i) - if (elements[i].representedObject === representedObject) - return elements[i]; - } - } - - if (!isAncestor || !(isAncestor instanceof Function) || !getParent || !(getParent instanceof Function)) - return null; - - var item; - var found = false; - for (var i = 0; i < this.children.length; ++i) { - item = this.children[i]; - if (item.representedObject === representedObject || isAncestor(item.representedObject, representedObject)) { - found = true; - break; - } - } - - if (!found) - return null; - - var ancestors = []; - var currentObject = representedObject; - while (currentObject) { - ancestors.unshift(currentObject); - if (currentObject === item.representedObject) - break; - currentObject = getParent(currentObject); - } - - for (var i = 0; i < ancestors.length; ++i) { - item = this.findTreeElement(ancestors[i], isAncestor, getParent); - if (ancestors[i] !== representedObject && item && item.onpopulate) - item.onpopulate(item); - } - - return item; -} - -TreeOutline.prototype.treeElementFromPoint = function(x, y) -{ - var node = this._childrenListNode.ownerDocument.elementFromPoint(x, y); - var listNode = node.enclosingNodeOrSelfWithNodeNameInArray(["ol", "li"]); - if (listNode) - return listNode.parentTreeElement || listNode.treeElement; - return null; -} - -TreeOutline.prototype.handleKeyEvent = function(event) -{ - if (!this.selectedTreeElement || event.shiftKey || event.metaKey || event.ctrlKey) - return false; - - var handled = false; - var nextSelectedElement; - if (event.keyIdentifier === "Up" && !event.altKey) { - nextSelectedElement = this.selectedTreeElement.traversePreviousTreeElement(true); - while (nextSelectedElement && !nextSelectedElement.selectable) - nextSelectedElement = nextSelectedElement.traversePreviousTreeElement(!this.expandTreeElementsWhenArrowing); - handled = nextSelectedElement ? true : false; - } else if (event.keyIdentifier === "Down" && !event.altKey) { - nextSelectedElement = this.selectedTreeElement.traverseNextTreeElement(true); - while (nextSelectedElement && !nextSelectedElement.selectable) - nextSelectedElement = nextSelectedElement.traverseNextTreeElement(!this.expandTreeElementsWhenArrowing); - handled = nextSelectedElement ? true : false; - } else if (event.keyIdentifier === "Left") { - if (this.selectedTreeElement.expanded) { - if (event.altKey) - this.selectedTreeElement.collapseRecursively(); - else - this.selectedTreeElement.collapse(); - handled = true; - } else if (this.selectedTreeElement.parent && !this.selectedTreeElement.parent.root) { - handled = true; - if (this.selectedTreeElement.parent.selectable) { - nextSelectedElement = this.selectedTreeElement.parent; - handled = nextSelectedElement ? true : false; - } else if (this.selectedTreeElement.parent) - this.selectedTreeElement.parent.collapse(); - } - } else if (event.keyIdentifier === "Right") { - if (!this.selectedTreeElement.revealed()) { - this.selectedTreeElement.reveal(); - handled = true; - } else if (this.selectedTreeElement.hasChildren) { - handled = true; - if (this.selectedTreeElement.expanded) { - nextSelectedElement = this.selectedTreeElement.children[0]; - handled = nextSelectedElement ? true : false; - } else { - if (event.altKey) - this.selectedTreeElement.expandRecursively(); - else - this.selectedTreeElement.expand(); - } - } - } - - if (nextSelectedElement) { - nextSelectedElement.reveal(); - nextSelectedElement.select(); - } - - if (handled) { - event.preventDefault(); - event.stopPropagation(); - } - - return handled; -} - -TreeOutline.prototype.expand = function() -{ - // this is the root, do nothing -} - -TreeOutline.prototype.collapse = function() -{ - // this is the root, do nothing -} - -TreeOutline.prototype.revealed = function() -{ - return true; -} - -TreeOutline.prototype.reveal = function() -{ - // this is the root, do nothing -} - -TreeOutline.prototype.appendChild = TreeOutline._appendChild; -TreeOutline.prototype.insertChild = TreeOutline._insertChild; -TreeOutline.prototype.removeChild = TreeOutline._removeChild; -TreeOutline.prototype.removeChildren = TreeOutline._removeChildren; -TreeOutline.prototype.removeChildrenRecursive = TreeOutline._removeChildrenRecursive; - -function TreeElement(title, representedObject, hasChildren) -{ - this._title = title; - this.representedObject = (representedObject || {}); - - if (this.representedObject.__treeElementIdentifier) - this.identifier = this.representedObject.__treeElementIdentifier; - else { - this.identifier = TreeOutline._knownTreeElementNextIdentifier++; - this.representedObject.__treeElementIdentifier = this.identifier; - } - - this._hidden = false; - this.expanded = false; - this.selected = false; - this.hasChildren = hasChildren; - this.children = []; - this.treeOutline = null; - this.parent = null; - this.previousSibling = null; - this.nextSibling = null; - this._listItemNode = null; -} - -TreeElement.prototype = { - selectable: true, - arrowToggleWidth: 10, - - get listItemElement() { - return this._listItemNode; - }, - - get childrenListElement() { - return this._childrenListNode; - }, - - get title() { - return this._title; - }, - - set title(x) { - this._title = x; - if (this._listItemNode) - this._listItemNode.innerHTML = x; - }, - - get tooltip() { - return this._tooltip; - }, - - set tooltip(x) { - this._tooltip = x; - if (this._listItemNode) - this._listItemNode.title = x ? x : ""; - }, - - get hidden() { - return this._hidden; - }, - - set hidden(x) { - if (this._hidden === x) - return; - - this._hidden = x; - - if (x) { - if (this._listItemNode) - this._listItemNode.addStyleClass("hidden"); - if (this._childrenListNode) - this._childrenListNode.addStyleClass("hidden"); - } else { - if (this._listItemNode) - this._listItemNode.removeStyleClass("hidden"); - if (this._childrenListNode) - this._childrenListNode.removeStyleClass("hidden"); - } - }, - - get shouldRefreshChildren() { - return this._shouldRefreshChildren; - }, - - set shouldRefreshChildren(x) { - this._shouldRefreshChildren = x; - if (x && this.expanded) - this.expand(); - } -} - -TreeElement.prototype.appendChild = TreeOutline._appendChild; -TreeElement.prototype.insertChild = TreeOutline._insertChild; -TreeElement.prototype.removeChild = TreeOutline._removeChild; -TreeElement.prototype.removeChildren = TreeOutline._removeChildren; -TreeElement.prototype.removeChildrenRecursive = TreeOutline._removeChildrenRecursive; - -TreeElement.prototype._attach = function() -{ - if (!this._listItemNode || this.parent._shouldRefreshChildren) { - if (this._listItemNode && this._listItemNode.parentNode) - this._listItemNode.parentNode.removeChild(this._listItemNode); - - this._listItemNode = this.treeOutline._childrenListNode.ownerDocument.createElement("li"); - this._listItemNode.treeElement = this; - this._listItemNode.innerHTML = this._title; - this._listItemNode.title = this._tooltip ? this._tooltip : ""; - - if (this.hidden) - this._listItemNode.addStyleClass("hidden"); - if (this.hasChildren) - this._listItemNode.addStyleClass("parent"); - if (this.expanded) - this._listItemNode.addStyleClass("expanded"); - if (this.selected) - this._listItemNode.addStyleClass("selected"); - - this._listItemNode.addEventListener("mousedown", TreeElement.treeElementSelected, false); - this._listItemNode.addEventListener("click", TreeElement.treeElementToggled, false); - this._listItemNode.addEventListener("dblclick", TreeElement.treeElementDoubleClicked, false); - - if (this.onattach) - this.onattach(this); - } - - this.parent._childrenListNode.insertBefore(this._listItemNode, (this.nextSibling ? this.nextSibling._listItemNode : null)); - if (this._childrenListNode) - this.parent._childrenListNode.insertBefore(this._childrenListNode, this._listItemNode.nextSibling); - if (this.selected) - this.select(); - if (this.expanded) - this.expand(); -} - -TreeElement.prototype._detach = function() -{ - if (this._listItemNode && this._listItemNode.parentNode) - this._listItemNode.parentNode.removeChild(this._listItemNode); - if (this._childrenListNode && this._childrenListNode.parentNode) - this._childrenListNode.parentNode.removeChild(this._childrenListNode); -} - -TreeElement.treeElementSelected = function(event) -{ - var element = event.currentTarget; - if (!element || !element.treeElement || !element.treeElement.selectable) - return; - - if (element.treeElement.isEventWithinDisclosureTriangle(event)) - return; - - element.treeElement.select(); -} - -TreeElement.treeElementToggled = function(event) -{ - var element = event.currentTarget; - if (!element || !element.treeElement) - return; - - if (!element.treeElement.isEventWithinDisclosureTriangle(event)) - return; - - if (element.treeElement.expanded) { - if (event.altKey) - element.treeElement.collapseRecursively(); - else - element.treeElement.collapse(); - } else { - if (event.altKey) - element.treeElement.expandRecursively(); - else - element.treeElement.expand(); - } -} - -TreeElement.treeElementDoubleClicked = function(event) -{ - var element = event.currentTarget; - if (!element || !element.treeElement) - return; - - if (element.treeElement.ondblclick) - element.treeElement.ondblclick(element.treeElement, event); - else if (element.treeElement.hasChildren && !element.treeElement.expanded) - element.treeElement.expand(); -} - -TreeElement.prototype.collapse = function() -{ - if (this._listItemNode) - this._listItemNode.removeStyleClass("expanded"); - if (this._childrenListNode) - this._childrenListNode.removeStyleClass("expanded"); - - this.expanded = false; - if (this.treeOutline) - this.treeOutline._treeElementsExpandedState[this.identifier] = true; - - if (this.oncollapse) - this.oncollapse(this); -} - -TreeElement.prototype.collapseRecursively = function() -{ - var item = this; - while (item) { - if (item.expanded) - item.collapse(); - item = item.traverseNextTreeElement(false, this, true); - } -} - -TreeElement.prototype.expand = function() -{ - if (!this.hasChildren || (this.expanded && !this._shouldRefreshChildren && this._childrenListNode)) - return; - - if (!this._childrenListNode || this._shouldRefreshChildren) { - if (this._childrenListNode && this._childrenListNode.parentNode) - this._childrenListNode.parentNode.removeChild(this._childrenListNode); - - this._childrenListNode = this.treeOutline._childrenListNode.ownerDocument.createElement("ol"); - this._childrenListNode.parentTreeElement = this; - this._childrenListNode.addStyleClass("children"); - - if (this.hidden) - this._childrenListNode.addStyleClass("hidden"); - - if (this.onpopulate) - this.onpopulate(this); - - for (var i = 0; i < this.children.length; ++i) - this.children[i]._attach(); - - delete this._shouldRefreshChildren; - } - - if (this._listItemNode) { - this._listItemNode.addStyleClass("expanded"); - if (this._childrenListNode.parentNode != this._listItemNode.parentNode) - this.parent._childrenListNode.insertBefore(this._childrenListNode, this._listItemNode.nextSibling); - } - - if (this._childrenListNode) - this._childrenListNode.addStyleClass("expanded"); - - this.expanded = true; - if (this.treeOutline) - this.treeOutline._treeElementsExpandedState[this.identifier] = true; - - if (this.onexpand) - this.onexpand(this); -} - -TreeElement.prototype.expandRecursively = function() -{ - var item = this; - while (item) { - item.expand(); - item = item.traverseNextTreeElement(false, this); - } -} - -TreeElement.prototype.reveal = function() -{ - var currentAncestor = this.parent; - while (currentAncestor && !currentAncestor.root) { - if (!currentAncestor.expanded) - currentAncestor.expand(); - currentAncestor = currentAncestor.parent; - } - - if (this.onreveal) - this.onreveal(this); -} - -TreeElement.prototype.revealed = function() -{ - var currentAncestor = this.parent; - while (currentAncestor && !currentAncestor.root) { - if (!currentAncestor.expanded) - return false; - currentAncestor = currentAncestor.parent; - } - - return true; -} - -TreeElement.prototype.select = function(supressOnSelect) -{ - if (!this.treeOutline || !this.selectable || this.selected) - return; - - if (this.treeOutline.selectedTreeElement) - this.treeOutline.selectedTreeElement.deselect(); - - this.selected = true; - this.treeOutline.selectedTreeElement = this; - if (this._listItemNode) - this._listItemNode.addStyleClass("selected"); - - if (this.onselect && !supressOnSelect) - this.onselect(this); -} - -TreeElement.prototype.deselect = function(supressOnDeselect) -{ - if (!this.treeOutline || this.treeOutline.selectedTreeElement !== this || !this.selected) - return; - - this.selected = false; - this.treeOutline.selectedTreeElement = null; - if (this._listItemNode) - this._listItemNode.removeStyleClass("selected"); - - if (this.ondeselect && !supressOnDeselect) - this.ondeselect(this); -} - -TreeElement.prototype.traverseNextTreeElement = function(skipHidden, stayWithin, dontPopulate) -{ - if (!dontPopulate && this.hasChildren && this.onpopulate) - this.onpopulate(this); - - var element = skipHidden ? (this.revealed() ? this.children[0] : null) : this.children[0]; - if (element && (!skipHidden || (skipHidden && this.expanded))) - return element; - - if (this === stayWithin) - return null; - - element = skipHidden ? (this.revealed() ? this.nextSibling : null) : this.nextSibling; - if (element) - return element; - - element = this; - while (element && !element.root && !(skipHidden ? (element.revealed() ? element.nextSibling : null) : element.nextSibling) && element.parent !== stayWithin) - element = element.parent; - - if (!element) - return null; - - return (skipHidden ? (element.revealed() ? element.nextSibling : null) : element.nextSibling); -} - -TreeElement.prototype.traversePreviousTreeElement = function(skipHidden, dontPopulate) -{ - var element = skipHidden ? (this.revealed() ? this.previousSibling : null) : this.previousSibling; - if (!dontPopulate && element && element.hasChildren && element.onpopulate) - element.onpopulate(element); - - while (element && (skipHidden ? (element.revealed() && element.expanded ? element.children[element.children.length - 1] : null) : element.children[element.children.length - 1])) { - if (!dontPopulate && element.hasChildren && element.onpopulate) - element.onpopulate(element); - element = (skipHidden ? (element.revealed() && element.expanded ? element.children[element.children.length - 1] : null) : element.children[element.children.length - 1]); - } - - if (element) - return element; - - if (!this.parent || this.parent.root) - return null; - - return this.parent; -} - -TreeElement.prototype.isEventWithinDisclosureTriangle = function(event) -{ - var left = this._listItemNode.totalOffsetLeft; - return event.pageX >= left && event.pageX <= left + this.arrowToggleWidth && this.hasChildren; -} diff --git a/webkit/port/page/inspector/utilities.js b/webkit/port/page/inspector/utilities.js index 9dcf71c..e69de29 100644 --- a/webkit/port/page/inspector/utilities.js +++ b/webkit/port/page/inspector/utilities.js @@ -1,908 +0,0 @@ -/* - * 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. - */ - -Object.type = function(obj, win) -{ - if (obj === null) - return "null"; - - var type = typeof obj; - if (type !== "object" && type !== "function") - return type; - - win = win || window; - - if (obj instanceof win.String) - return "string"; - if (obj instanceof win.Array) - return "array"; - if (obj instanceof win.Boolean) - return "boolean"; - if (obj instanceof win.Number) - return "number"; - if (obj instanceof win.Date) - return "date"; - if (obj instanceof win.RegExp) - return "regexp"; - if (obj instanceof win.Error) - return "error"; - return type; -} - -Object.describe = function(obj, abbreviated) -{ - var type1 = Object.type(obj); - var type2 = Object.prototype.toString.call(obj).replace(/^\[object (.*)\]$/i, "$1"); - - switch (type1) { - case "object": - return type2; - case "array": - return "[" + obj.toString() + "]"; - case "string": - if (obj.length > 100) - return "\"" + obj.substring(0, 100) + "\u2026\""; - return "\"" + obj + "\""; - case "function": - var objectText = String(obj); - if (!/^function /.test(objectText)) - objectText = (type2 == "object") ? type1 : type2; - else if (abbreviated) - objectText = /.*/.exec(obj)[0].replace(/ +$/g, ""); - return objectText; - case "regexp": - return String(obj).replace(/([\\\/])/g, "\\$1").replace(/\\(\/[gim]*)$/, "$1").substring(1); - default: - return String(obj); - } -} - -Object.sortedProperties = function(obj) -{ - var properties = []; - for (var prop in obj) - properties.push(prop); - properties.sort(); - return properties; -} - -Function.prototype.bind = function(thisObject) -{ - var func = this; - var args = Array.prototype.slice.call(arguments, 1); - return function() { return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments, 0))) }; -} - -Element.prototype.removeStyleClass = function(className) -{ - // Test for the simple case before using a RegExp. - if (this.className === className) { - this.className = ""; - return; - } - - var regex = new RegExp("(^|\\s+)" + className.escapeForRegExp() + "($|\\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 before using a RegExp. - if (this.className === className) - return true; - var regex = new RegExp("(^|\\s)" + className.escapeForRegExp() + "($|\\s)"); - return regex.test(this.className); -} - -Node.prototype.enclosingNodeOrSelfWithNodeNameInArray = function(nameArray) -{ - for (var node = this; node && (node !== document); 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 !== document); 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 document.evaluate(query, this, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue; -} - -Element.prototype.removeChildren = function() -{ - while (this.firstChild) - this.removeChild(this.firstChild); -} - -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.__defineGetter__("totalOffsetLeft", function() -{ - var total = 0; - for (var element = this; element; element = element.offsetParent) - total += element.offsetLeft; - return total; -}); - -Element.prototype.__defineGetter__("totalOffsetTop", function() -{ - var total = 0; - for (var element = this; element; element = element.offsetParent) - total += element.offsetTop; - return total; -}); - -Element.prototype.firstChildSkippingWhitespace = firstChildSkippingWhitespace; -Element.prototype.lastChildSkippingWhitespace = lastChildSkippingWhitespace; - -Node.prototype.isWhitespace = isNodeWhitespace; -Node.prototype.nodeTypeName = nodeTypeName; -Node.prototype.displayName = nodeDisplayName; -Node.prototype.contentPreview = nodeContentPreview; -Node.prototype.isAncestor = isAncestorNode; -Node.prototype.isDescendant = isDescendantNode; -Node.prototype.firstCommonAncestor = firstCommonNodeAncestor; -Node.prototype.nextSiblingSkippingWhitespace = nextSiblingSkippingWhitespace; -Node.prototype.previousSiblingSkippingWhitespace = previousSiblingSkippingWhitespace; -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.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, "&").replace(/</g, "<").replace(/>/g, ">").replace(/\"/g, """).replace(/\'/g, "'"); -} - -String.prototype.collapseWhitespace = function() -{ - return this.replace(/[\s\xA0]+/g, " "); -} - -String.prototype.trimLeadingWhitespace = function() -{ - return this.replace(/^[\s\xA0]+/g, ""); -} - -String.prototype.trimTrailingWhitespace = function() -{ - return this.replace(/[\s\xA0]+$/g, ""); -} - -String.prototype.trimWhitespace = function() -{ - return this.replace(/^[\s\xA0]+|[\s\xA0]+$/g, ""); -} - -String.prototype.trimURL = function(baseURLDomain) -{ - var result = this.replace(new RegExp("^http[s]?:\/\/", "i"), ""); - if (baseURLDomain) - result = result.replace(new RegExp("^" + baseURLDomain.escapeForRegExp(), "i"), ""); - return result; -} - -function getShorthandValue(style, shorthandProperty) -{ - var value = style.getPropertyValue(shorthandProperty); - if (!value) { - // Some shorthands (like border) return a null value, so compute a shorthand value. - // FIXME: remove this when http://bugs.webkit.org/show_bug.cgi?id=15823 is fixed. - - var foundProperties = {}; - for (var i = 0; i < style.length; ++i) { - var individualProperty = style[i]; - if (individualProperty in foundProperties || style.getPropertyShorthand(individualProperty) !== shorthandProperty) - continue; - - var individualValue = style.getPropertyValue(individualProperty); - if (style.isPropertyImplicit(individualProperty) || individualValue === "initial") - continue; - - foundProperties[individualProperty] = true; - - if (!value) - value = ""; - else if (value.length) - value += " "; - value += individualValue; - } - } - return value; -} - -function getShorthandPriority(style, shorthandProperty) -{ - var priority = style.getPropertyPriority(shorthandProperty); - if (!priority) { - for (var i = 0; i < style.length; ++i) { - var individualProperty = style[i]; - if (style.getPropertyShorthand(individualProperty) !== shorthandProperty) - continue; - priority = style.getPropertyPriority(individualProperty); - break; - } - } - return priority; -} - -function getLonghandProperties(style, shorthandProperty) -{ - var properties = []; - var foundProperties = {}; - - for (var i = 0; i < style.length; ++i) { - var individualProperty = style[i]; - if (individualProperty in foundProperties || style.getPropertyShorthand(individualProperty) !== shorthandProperty) - continue; - foundProperties[individualProperty] = true; - properties.push(individualProperty); - } - - return properties; -} - -function getUniqueStyleProperties(style) -{ - var properties = []; - var foundProperties = {}; - - for (var i = 0; i < style.length; ++i) { - var property = style[i]; - if (property in foundProperties) - continue; - foundProperties[property] = true; - properties.push(property); - } - - return properties; -} - -function isNodeWhitespace() -{ - if (!this || this.nodeType !== Node.TEXT_NODE) - return false; - if (!this.nodeValue.length) - return true; - return this.nodeValue.match(/^[\s\xA0]+$/); -} - -function nodeTypeName() -{ - if (!this) - return "(unknown)"; - - switch (this.nodeType) { - case Node.ELEMENT_NODE: return "Element"; - case Node.ATTRIBUTE_NODE: return "Attribute"; - case Node.TEXT_NODE: return "Text"; - case Node.CDATA_SECTION_NODE: return "Character Data"; - case Node.ENTITY_REFERENCE_NODE: return "Entity Reference"; - case Node.ENTITY_NODE: return "Entity"; - case Node.PROCESSING_INSTRUCTION_NODE: return "Processing Instruction"; - case Node.COMMENT_NODE: return "Comment"; - case Node.DOCUMENT_NODE: return "Document"; - case Node.DOCUMENT_TYPE_NODE: return "Document Type"; - case Node.DOCUMENT_FRAGMENT_NODE: return "Document Fragment"; - case Node.NOTATION_NODE: return "Notation"; - } - - return "(unknown)"; -} - -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 nodeContentPreview() -{ - if (!this || !this.hasChildNodes || !this.hasChildNodes()) - return ""; - - var limit = 0; - var preview = ""; - - // always skip whitespace here - var currentNode = traverseNextNode.call(this, true, this); - while (currentNode) { - if (currentNode.nodeType === Node.TEXT_NODE) - preview += currentNode.nodeValue.escapeHTML(); - else - preview += nodeDisplayName.call(currentNode).escapeHTML(); - - currentNode = traverseNextNode.call(currentNode, true, this); - - if (++limit > 4) { - preview += "…"; // ellipsis - break; - } - } - - return preview.collapseWhitespace(); -} - -function isAncestorNode(ancestor) -{ - if (!this || !ancestor) - return false; - - var currentNode = ancestor.parentNode; - while (currentNode) { - if (this === currentNode) - return true; - currentNode = currentNode.parentNode; - } - - return false; -} - -function isDescendantNode(descendant) -{ - return isAncestorNode.call(descendant, this); -} - -function firstCommonNodeAncestor(node) -{ - if (!this || !node) - return; - - var node1 = this.parentNode; - var node2 = node.parentNode; - - if ((!node1 || !node2) || node1 !== node2) - return null; - - while (node1 && node2) { - if (!node1.parentNode || !node2.parentNode) - break; - if (node1 !== node2) - break; - - node1 = node1.parentNode; - node2 = node2.parentNode; - } - - return node1; -} - -function nextSiblingSkippingWhitespace() -{ - if (!this) - return; - var node = this.nextSibling; - while (node && node.nodeType === Node.TEXT_NODE && isNodeWhitespace.call(node)) - node = node.nextSibling; - return node; -} - -function previousSiblingSkippingWhitespace() -{ - if (!this) - return; - var node = this.previousSibling; - while (node && node.nodeType === Node.TEXT_NODE && isNodeWhitespace.call(node)) - node = node.previousSibling; - return node; -} - -function firstChildSkippingWhitespace() -{ - if (!this) - return; - var node = this.firstChild; - while (node && node.nodeType === Node.TEXT_NODE && isNodeWhitespace.call(node)) - node = nextSiblingSkippingWhitespace.call(node); - return node; -} - -function lastChildSkippingWhitespace() -{ - if (!this) - return; - var node = this.lastChild; - while (node && node.nodeType === Node.TEXT_NODE && isNodeWhitespace.call(node)) - node = previousSiblingSkippingWhitespace.call(node); - return node; -} - -function traverseNextNode(skipWhitespace, stayWithin) -{ - if (!this) - return; - - var node = skipWhitespace ? firstChildSkippingWhitespace.call(this) : this.firstChild; - if (node) - return node; - - if (stayWithin && this === stayWithin) - return null; - - node = skipWhitespace ? nextSiblingSkippingWhitespace.call(this) : this.nextSibling; - if (node) - return node; - - node = this; - while (node && !(skipWhitespace ? nextSiblingSkippingWhitespace.call(node) : node.nextSibling) && (!stayWithin || !node.parentNode || node.parentNode !== stayWithin)) - node = node.parentNode; - if (!node) - return null; - - return skipWhitespace ? nextSiblingSkippingWhitespace.call(node) : node.nextSibling; -} - -function traversePreviousNode(skipWhitespace) -{ - if (!this) - return; - var node = skipWhitespace ? previousSiblingSkippingWhitespace.call(this) : this.previousSibling; - while (node && (skipWhitespace ? lastChildSkippingWhitespace.call(node) : node.lastChild) ) - node = skipWhitespace ? lastChildSkippingWhitespace.call(node) : node.lastChild; - if (node) - return node; - return this.parentNode; -} - -function onlyTextChild(ignoreWhitespace) -{ - if (!this) - return null; - - var firstChild = ignoreWhitespace ? firstChildSkippingWhitespace.call(this) : this.firstChild; - if (!firstChild || firstChild.nodeType !== Node.TEXT_NODE) - return null; - - var sibling = ignoreWhitespace ? nextSiblingSkippingWhitespace.call(firstChild) : firstChild.nextSibling; - return sibling ? null : firstChild; -} - -function nodeTitleInfo(hasChildren, linkify) -{ - var info = {title: "", hasChildren: hasChildren}; - - switch (this.nodeType) { - case Node.DOCUMENT_NODE: - info.title = "Document"; - break; - - case Node.ELEMENT_NODE: - info.title = "<span class=\"webkit-html-tag\"><" + this.nodeName.toLowerCase().escapeHTML(); - - if (this.hasAttributes()) { - for (var i = 0; i < this.attributes.length; ++i) { - var attr = this.attributes[i]; - var value = attr.value.escapeHTML(); - value = value.replace(/([\/;:\)\]\}])/g, "$1​"); - - info.title += " <span class=\"webkit-html-attribute\"><span class=\"webkit-html-attribute-name\">" + attr.name.escapeHTML() + "</span>=​\""; - - if (linkify && (attr.name === "src" || attr.name === "href")) - info.title += linkify(attr.value, value, "webkit-html-attribute-value", this.nodeName.toLowerCase() == "a"); - else - info.title += "<span class=\"webkit-html-attribute-value\">" + value + "</span>"; - info.title += "\"</span>"; - } - } - info.title += "></span>​"; - - // If this element only has a single child that is a text node, - // just show that text and the closing tag inline rather than - // create a subtree for them - - var textChild = onlyTextChild.call(this, Preferences.ignoreWhitespace); - var showInlineText = textChild && textChild.textContent.length < Preferences.maxInlineTextChildLength; - - if (showInlineText) { - info.title += "<span class=\"webkit-html-text-node\">" + textChild.nodeValue.escapeHTML() + "</span>​<span class=\"webkit-html-tag\"></" + this.nodeName.toLowerCase().escapeHTML() + "></span>"; - info.hasChildren = false; - } - break; - - case Node.TEXT_NODE: - if (isNodeWhitespace.call(this)) - info.title = "(whitespace)"; - else - info.title = "\"<span class=\"webkit-html-text-node\">" + this.nodeValue.escapeHTML() + "</span>\""; - break - - case Node.COMMENT_NODE: - info.title = "<span class=\"webkit-html-comment\"><!--" + this.nodeValue.escapeHTML() + "--></span>"; - break; - - case Node.DOCUMENT_TYPE_NODE: - info.title = "<span class=\"webkit-html-doctype\"><!DOCTYPE " + this.nodeName.escapeHTML(); - if (this.publicId) { - info.title += " PUBLIC \"" + this.publicId.escapeHTML() + "\""; - if (this.systemId) - info.title += " \"" + this.systemId.escapeHTML() + "\""; - } else if (this.systemId) - info.title += " SYSTEM \"" + this.systemId.escapeHTML() + "\""; - if (this.internalSubset) - info.title += " [" + this.internalSubset.escapeHTML() + "]"; - info.title += "></span>"; - break; - default: - info.title = this.nodeName.toLowerCase().collapseWhitespace().escapeHTML(); - } - - return info; -} - -Number.secondsToString = function(seconds, formatterFunction) -{ - if (!formatterFunction) - formatterFunction = String.sprintf; - - var ms = seconds * 1000; - if (ms < 1000) - return formatterFunction("%.0fms", ms); - - if (seconds < 60) - return formatterFunction("%.2fs", seconds); - - var minutes = seconds / 60; - if (minutes < 60) - return formatterFunction("%.1fmin", minutes); - - var hours = minutes / 60; - if (hours < 24) - return formatterFunction("%.1fhrs", hours); - - var days = hours / 24; - return formatterFunction("%.1f days", days); -} - -Number.bytesToString = function(bytes, formatterFunction) -{ - if (!formatterFunction) - formatterFunction = String.sprintf; - - if (bytes < 1024) - return formatterFunction("%.0fB", bytes); - - var kilobytes = bytes / 1024; - if (kilobytes < 1024) - return formatterFunction("%.2fKB", kilobytes); - - var megabytes = kilobytes / 1024; - return formatterFunction("%.3fMB", 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); -} - -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) - { - substitution = parseInt(substitution); - return !isNaN(substitution) ? substitution : 0; - }, - - f: function(substitution, token) - { - 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) - { - 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 }; -} |