Diff
Modified: trunk/LayoutTests/ChangeLog (207023 => 207024)
--- trunk/LayoutTests/ChangeLog 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/LayoutTests/ChangeLog 2016-10-10 21:17:47 UTC (rev 207024)
@@ -1,3 +1,20 @@
+2016-10-10 Antoine Quint <grao...@apple.com>
+
+ [Modern Media Controls] Placards
+ https://bugs.webkit.org/show_bug.cgi?id=163110
+ <rdar://problem/28669342>
+
+ Reviewed by Dean Jackson.
+
+ Testing the properties of the new Placard class and its subclasses.
+
+ * media/modern-media-controls/airplay-placard/airplay-placard-expected.txt: Added.
+ * media/modern-media-controls/airplay-placard/airplay-placard.html: Added.
+ * media/modern-media-controls/pip-placard/pip-placard-expected.txt: Added.
+ * media/modern-media-controls/pip-placard/pip-placard.html: Added.
+ * media/modern-media-controls/placard/placard-expected.txt: Added.
+ * media/modern-media-controls/placard/placard.html: Added.
+
2016-10-10 Ryan Haddad <ryanhad...@apple.com>
Marking fast/replaced/preferred-widths.html as flaky on mac.
Added: trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard-expected.txt (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard-expected.txt 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,13 @@
+Testing the AirplayPlacard class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Placard with all parameters
+PASS placard.children[0].children[0].iconName is Icons.AirplayPlacard
+PASS placard.children[0].children[1].element.innerText is "AirPlay"
+PASS placard.children[0].children[2].element.innerText is "This video is playing on your Apple TV"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard.html (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/airplay-placard/airplay-placard.html 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,29 @@
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<script type="text/_javascript_">
+
+description("Testing the <code>AirplayPlacard</code> class.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+debug("Placard with all parameters");
+const placard = new AirplayPlacard({ layoutTraits: LayoutTraits.macOS });
+
+shouldBe("placard.children[0].children[0].iconName", "Icons.AirplayPlacard");
+shouldBeEqualToString("placard.children[0].children[1].element.innerText", "AirPlay");
+shouldBeEqualToString("placard.children[0].children[2].element.innerText", "This video is playing on your Apple TV");
+
+</script>
+<script src=""
+</body>
Added: trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard-expected.txt (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard-expected.txt 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,12 @@
+Testing the PiPPlacard class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Placard with all parameters
+PASS placard.children[0].children[0].iconName is Icons.PiPPlacard
+PASS placard.children[0].children[1].element.innerText is "This video is playing in Picture in Picture"
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard.html (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/pip-placard/pip-placard.html 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,28 @@
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<script type="text/_javascript_">
+
+description("Testing the <code>PiPPlacard</code> class.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+debug("Placard with all parameters");
+const placard = new PiPPlacard({ layoutTraits: LayoutTraits.macOS });
+
+shouldBe("placard.children[0].children[0].iconName", "Icons.PiPPlacard");
+shouldBeEqualToString("placard.children[0].children[1].element.innerText", "This video is playing in Picture in Picture");
+
+</script>
+<script src=""
+</body>
Added: trunk/LayoutTests/media/modern-media-controls/placard/placard-expected.txt (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/placard/placard-expected.txt (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/placard/placard-expected.txt 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,43 @@
+Testing the Placard class.
+
+On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".
+
+
+Placard with all parameters
+PASS placard.element.localName is "div"
+PASS placard.element.className is "placard"
+PASS placard.children.length is 1
+PASS placard.children[0].element.localName is "div"
+PASS placard.children[0].element.className is "container"
+PASS placard.children[0].children.length is 3
+PASS placard.children[0].children[0] instanceof IconButton is true
+PASS placard.children[0].children[0].iconName is Icons.AirplayPlacard
+PASS placard.children[0].children[1] instanceof LayoutNode is true
+PASS placard.children[0].children[1].element.localName is "div"
+PASS placard.children[0].children[1].element.className is "title"
+PASS placard.children[0].children[1].element.innerText is "My title"
+PASS placard.children[0].children[2] instanceof LayoutNode is true
+PASS placard.children[0].children[2].element.localName is "div"
+PASS placard.children[0].children[2].element.className is "description"
+PASS placard.children[0].children[2].element.innerText is "My description"
+
+Placard without any parameter
+PASS defaultPlacard.children[0].children.length is 0
+
+Placard with only a description
+PASS onlyDescriptionPlacard.children[0].children.length is 1
+PASS onlyDescriptionPlacard.children[0].children[0] instanceof LayoutNode is true
+PASS onlyDescriptionPlacard.children[0].children[0].element.className is "description"
+
+Placard with only a title
+PASS onlyTitlePlacard.children[0].children.length is 1
+PASS onlyTitlePlacard.children[0].children[0] instanceof LayoutNode is true
+PASS onlyTitlePlacard.children[0].children[0].element.className is "title"
+
+Placard with only an icon
+PASS onlyIconPlacard.children[0].children.length is 1
+PASS onlyIconPlacard.children[0].children[0] instanceof IconButton is true
+PASS successfullyParsed is true
+
+TEST COMPLETE
+
Added: trunk/LayoutTests/media/modern-media-controls/placard/placard.html (0 => 207024)
--- trunk/LayoutTests/media/modern-media-controls/placard/placard.html (rev 0)
+++ trunk/LayoutTests/media/modern-media-controls/placard/placard.html 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,71 @@
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<link rel="stylesheet" href="" type="text/css" media="screen">
+<script src=""
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<script src="" type="text/_javascript_"></script>
+<body>
+<script type="text/_javascript_">
+
+description("Testing the <code>Placard</code> class.");
+
+iconService.directoryPath = "../../../../Source/WebCore/Modules/modern-media-controls/images";
+
+debug("Placard with all parameters");
+const placard = new Placard({
+ iconName: Icons.AirplayPlacard,
+ title: "My title",
+ description: "My description",
+ layoutDelegate: { layoutTraits: LayoutTraits.macOS }
+});
+
+shouldBeEqualToString("placard.element.localName", "div");
+shouldBeEqualToString("placard.element.className", "placard");
+shouldBe("placard.children.length", "1");
+shouldBeEqualToString("placard.children[0].element.localName", "div");
+shouldBeEqualToString("placard.children[0].element.className", "container");
+shouldBe("placard.children[0].children.length", "3");
+shouldBeTrue("placard.children[0].children[0] instanceof IconButton");
+shouldBe("placard.children[0].children[0].iconName", "Icons.AirplayPlacard");
+shouldBeTrue("placard.children[0].children[1] instanceof LayoutNode");
+shouldBeEqualToString("placard.children[0].children[1].element.localName", "div");
+shouldBeEqualToString("placard.children[0].children[1].element.className", "title");
+shouldBeEqualToString("placard.children[0].children[1].element.innerText", "My title");
+shouldBeTrue("placard.children[0].children[2] instanceof LayoutNode");
+shouldBeEqualToString("placard.children[0].children[2].element.localName", "div");
+shouldBeEqualToString("placard.children[0].children[2].element.className", "description");
+shouldBeEqualToString("placard.children[0].children[2].element.innerText", "My description");
+
+debug("");
+debug("Placard without any parameter");
+const defaultPlacard = new Placard;
+shouldBe("defaultPlacard.children[0].children.length", "0");
+
+debug("");
+debug("Placard with only a description");
+const _onlyDescriptionPlacard_ = new Placard({ description: "My description" });
+shouldBe("onlyDescriptionPlacard.children[0].children.length", "1");
+shouldBeTrue("onlyDescriptionPlacard.children[0].children[0] instanceof LayoutNode");
+shouldBeEqualToString("onlyDescriptionPlacard.children[0].children[0].element.className", "description");
+
+debug("");
+debug("Placard with only a title");
+const _onlyTitlePlacard_ = new Placard({ title: "My title" });
+shouldBe("onlyTitlePlacard.children[0].children.length", "1");
+shouldBeTrue("onlyTitlePlacard.children[0].children[0] instanceof LayoutNode");
+shouldBeEqualToString("onlyTitlePlacard.children[0].children[0].element.className", "title");
+
+debug("");
+debug("Placard with only an icon");
+const _onlyIconPlacard_ = new Placard({ iconName: Icons.AirplayPlacard, layoutDelegate: { layoutTraits: LayoutTraits.macOS } });
+shouldBe("onlyIconPlacard.children[0].children.length", "1");
+shouldBeTrue("onlyIconPlacard.children[0].children[0] instanceof IconButton");
+
+</script>
+<script src=""
+</body>
Modified: trunk/Source/WebCore/ChangeLog (207023 => 207024)
--- trunk/Source/WebCore/ChangeLog 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/ChangeLog 2016-10-10 21:17:47 UTC (rev 207024)
@@ -1,3 +1,45 @@
+2016-10-10 Antoine Quint <grao...@apple.com>
+
+ [Modern Media Controls] Placards
+ https://bugs.webkit.org/show_bug.cgi?id=163110
+ <rdar://problem/28669342>
+
+ Reviewed by Dean Jackson.
+
+ Inline media controls need to display placards when the video is no longer playing inline,
+ such as when the video is playing fullscreen or via AirPlay. To that end, we introduce a
+ new Placard class and two subclasses for display during fullscreen or AirPlay playback.
+ Note that localization will be done in a later patch.
+
+ Tests: media/modern-media-controls/airplay-placard/airplay-placard.html
+ media/modern-media-controls/pip-placard/pip-placard.html
+ media/modern-media-controls/placard/placard.html
+
+ * Modules/modern-media-controls/controls/airplay-placard.js:
+ (AirplayPlacard):
+ * Modules/modern-media-controls/controls/icon-service.js:
+ * Modules/modern-media-controls/controls/pip-placard.js:
+ (PiPPlacard):
+ * Modules/modern-media-controls/controls/placard.css:
+ (.placard):
+ (.placard .container):
+ (.placard .icon):
+ (.placard .title,):
+ (.placard .title):
+ (.placard .description):
+ * Modules/modern-media-controls/controls/placard.js:
+ (Placard.):
+ * Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png: Added.
+ * Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png: Added.
+ * Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png: Added.
+ * Modules/modern-media-controls/images/iOS/pip-plac...@1x.png: Added.
+ * Modules/modern-media-controls/images/iOS/pip-plac...@2x.png: Added.
+ * Modules/modern-media-controls/images/iOS/pip-plac...@3x.png: Added.
+ * Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png: Added.
+ * Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png: Added.
+ * Modules/modern-media-controls/images/macOS/pip-plac...@1x.png: Added.
+ * Modules/modern-media-controls/images/macOS/pip-plac...@2x.png: Added.
+
2016-10-10 Chris Dumez <cdu...@apple.com>
Add support for Navigator.languages attribute
Added: trunk/Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js (0 => 207024)
--- trunk/Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/airplay-placard.js 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+class AirplayPlacard extends Placard
+{
+
+ constructor(layoutDelegate)
+ {
+ super({
+ iconName: Icons.AirplayPlacard,
+ title: "AirPlay",
+ description: "This video is playing on your Apple TV",
+ layoutDelegate
+ });
+ }
+
+}
Modified: trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js (207023 => 207024)
--- trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/icon-service.js 2016-10-10 21:17:47 UTC (rev 207024)
@@ -25,11 +25,13 @@
const Icons = {
Airplay : "airplay",
+ AirplayPlacard : "airplay-placard",
EnterFullscreen : "enter-fullscreen",
EnterPiP : "pip-in",
ExitFullscreen : "exit-fullscreen",
Forward : "forward",
Pause : "pause",
+ PiPPlacard : "pip-placard",
Play : "play",
Rewind : "rewind",
ScaleToFill : "scale-to-fill",
Added: trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js (0 => 207024)
--- trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/pip-placard.js 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,38 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+class PiPPlacard extends Placard
+{
+
+ constructor(layoutDelegate)
+ {
+ super({
+ iconName: Icons.PiPPlacard,
+ description: "This video is playing in Picture in Picture",
+ layoutDelegate
+ });
+ }
+
+}
Added: trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.css (0 => 207024)
--- trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.css (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.css 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+.placard {
+ position: absolute;
+ left: 0;
+ top: 0;
+ width: 100%;
+ height: 100%;
+
+ background-color: black;
+ color: rgb(164, 164, 164);
+
+ font-family: -apple-system;
+}
+
+.placard .container {
+ position: absolute;
+ left: 50%;
+ top: 50%;
+ max-width: 402px;
+
+ transform: translate(-50%, -50%);
+}
+
+.placard .icon {
+ position: relative;
+ left: 50%;
+ -webkit-mask-repeat: no-repeat;
+ background-color: rgb(164, 164, 164) !important;
+
+ margin-bottom: 10px;
+
+ transform: translateX(-50%);
+}
+
+.placard .title,
+.placard .description {
+ text-align: center;
+}
+
+.placard .title {
+ font-size: 20px;
+}
+
+.placard .description {
+ font-size: 13px;
+}
Added: trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.js (0 => 207024)
--- trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.js (rev 0)
+++ trunk/Source/WebCore/Modules/modern-media-controls/controls/placard.js 2016-10-10 21:17:47 UTC (rev 207024)
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2016 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.
+ */
+
+class Placard extends LayoutItem
+{
+
+ constructor({ iconName = null, title = "", description = "", layoutDelegate = null } = {})
+ {
+ super({
+ element: `<div class="placard"></div>`,
+ layoutDelegate
+ });
+
+ const container = this.addChild(new LayoutNode(`<div class="container"></div>`));
+
+ if (iconName)
+ container.addChild(new IconButton(this)).iconName = iconName;
+
+ if (!!title)
+ container.addChild(new LayoutNode(`<div class="title">${title}</div>`));
+
+ if (!!description)
+ container.addChild(new LayoutNode(`<div class="description">${description}</div>`));
+ }
+
+}
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@1x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@2x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/airplay-plac...@3x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@1x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@1x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@1x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@1x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@1x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@2x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@2x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@2x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@2x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@2x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@3x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@3x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@3x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@3x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/iOS/pip-plac...@3x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@1x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/airplay-plac...@2x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@1x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@1x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@1x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@1x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@1x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property
Added: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@2x.png
(Binary files differ)
Index: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@2x.png
===================================================================
--- trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@2x.png 2016-10-10 21:13:26 UTC (rev 207023)
+++ trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@2x.png 2016-10-10 21:17:47 UTC (rev 207024)
Property changes on: trunk/Source/WebCore/Modules/modern-media-controls/images/macOS/pip-plac...@2x.png
___________________________________________________________________
Added: svn:mime-type
+image/png
\ No newline at end of property