merge autoland to mozilla-central a=merge
@ -23,6 +23,7 @@ var gFxAccounts = {
|
||||
"weave:service:ready",
|
||||
"weave:service:login:change",
|
||||
"weave:service:setup-complete",
|
||||
"weave:service:sync:error",
|
||||
"weave:ui:login:error",
|
||||
"fxa-migration:state-changed",
|
||||
this.FxAccountsCommon.ONLOGIN_NOTIFICATION,
|
||||
|
@ -1850,7 +1850,10 @@ nsContextMenu.prototype = {
|
||||
},
|
||||
|
||||
createContainerMenu: function(aEvent) {
|
||||
return createUserContextMenu(aEvent, true,
|
||||
gContextMenuContentData.userContextId);
|
||||
let createMenuOptions = {
|
||||
isContextMenu: true,
|
||||
excludeUserContextId: gContextMenuContentData.userContextId,
|
||||
};
|
||||
return createUserContextMenu(aEvent, createMenuOptions);
|
||||
},
|
||||
};
|
||||
|
@ -7142,7 +7142,7 @@
|
||||
<handler event="popupshowing">
|
||||
<![CDATA[
|
||||
if (event.target.getAttribute("id") == "alltabs_containersMenuTab") {
|
||||
createUserContextMenu(event);
|
||||
createUserContextMenu(event, {useAccessKeys: false});
|
||||
return;
|
||||
}
|
||||
|
||||
@ -7150,7 +7150,7 @@
|
||||
|
||||
if (event.target.getAttribute("anonid") == "newtab-popup" ||
|
||||
event.target.id == "newtab-popup") {
|
||||
createUserContextMenu(event);
|
||||
createUserContextMenu(event, {useAccessKeys: false});
|
||||
} else {
|
||||
document.getElementById("alltabs-popup-separator-1").hidden = !containersEnabled;
|
||||
let containersTab = document.getElementById("alltabs_containersTab");
|
||||
|
@ -449,7 +449,11 @@ function checkForMiddleClick(node, event) {
|
||||
|
||||
// Populate a menu with user-context menu items. This method should be called
|
||||
// by onpopupshowing passing the event as first argument.
|
||||
function createUserContextMenu(event, isContextMenu = false, excludeUserContextId = 0) {
|
||||
function createUserContextMenu(event, {
|
||||
isContextMenu = false,
|
||||
excludeUserContextId = 0,
|
||||
useAccessKeys = true
|
||||
} = {}) {
|
||||
while (event.target.hasChildNodes()) {
|
||||
event.target.removeChild(event.target.firstChild);
|
||||
}
|
||||
@ -483,7 +487,7 @@ function createUserContextMenu(event, isContextMenu = false, excludeUserContextI
|
||||
menuitem.setAttribute("data-usercontextid", identity.userContextId);
|
||||
menuitem.setAttribute("label", ContextualIdentityService.getUserContextLabel(identity.userContextId));
|
||||
|
||||
if (identity.accessKey) {
|
||||
if (identity.accessKey && useAccessKeys) {
|
||||
menuitem.setAttribute("accesskey", bundle.getString(identity.accessKey));
|
||||
}
|
||||
|
||||
@ -505,8 +509,10 @@ function createUserContextMenu(event, isContextMenu = false, excludeUserContextI
|
||||
let menuitem = document.createElement("menuitem");
|
||||
menuitem.setAttribute("label",
|
||||
bundle.getString("userContext.aboutPage.label"));
|
||||
menuitem.setAttribute("accesskey",
|
||||
bundle.getString("userContext.aboutPage.accesskey"));
|
||||
if (useAccessKeys) {
|
||||
menuitem.setAttribute("accesskey",
|
||||
bundle.getString("userContext.aboutPage.accesskey"));
|
||||
}
|
||||
menuitem.setAttribute("command", "Browser:OpenAboutContainers");
|
||||
docfrag.appendChild(menuitem);
|
||||
}
|
||||
|
@ -234,8 +234,9 @@ BrowserAction.prototype = {
|
||||
const menu = event.target;
|
||||
const trigger = menu.triggerNode;
|
||||
const node = window.document.getElementById(this.id);
|
||||
const contexts = ["toolbar-context-menu", "customizationPanelItemContextMenu"];
|
||||
|
||||
if (menu.localName === "menupopup" && node && isAncestorOrSelf(node, trigger)) {
|
||||
if (contexts.includes(menu.id) && node && isAncestorOrSelf(node, trigger)) {
|
||||
global.actionContextMenu({
|
||||
extension: this.extension,
|
||||
onBrowserAction: true,
|
||||
|
@ -167,7 +167,7 @@ PageAction.prototype = {
|
||||
const menu = event.target;
|
||||
const trigger = menu.triggerNode;
|
||||
|
||||
if (menu.localName === "menupopup" && trigger && trigger.id === this.id) {
|
||||
if (menu.id === "toolbar-context-menu" && trigger && trigger.id === this.id) {
|
||||
global.actionContextMenu({
|
||||
extension: this.extension,
|
||||
onPageAction: true,
|
||||
|
@ -42,7 +42,10 @@ add_task(function* () {
|
||||
|
||||
is(submenu.tagName, "menu", "Correct submenu type");
|
||||
is(submenu.label, "parent", "Correct submenu title");
|
||||
is(submenu.firstChild.children.length, 2, "Correct number of submenu items");
|
||||
|
||||
const popup = yield openActionSubmenu(submenu);
|
||||
is(popup, submenu.firstChild, "Correct submenu opened");
|
||||
is(popup.children.length, 2, "Correct number of submenu items");
|
||||
|
||||
is(second.tagName, "menuitem", "Second menu item type is correct");
|
||||
is(second.label, "click 1", "Second menu item title is correct");
|
||||
@ -50,7 +53,7 @@ add_task(function* () {
|
||||
is(last.label, "click 5", "Last menu item title is correct");
|
||||
is(separator.tagName, "menuseparator", "Separator after last menu item");
|
||||
|
||||
yield closeActionContextMenu(last);
|
||||
yield closeActionContextMenu(popup.firstChild);
|
||||
const {info, tab} = yield extension.awaitMessage("click");
|
||||
is(info.pageUrl, "http://example.com/", "Click info pageUrl is correct");
|
||||
is(tab.id, tabId, "Click event tab ID is correct");
|
||||
|
@ -10,7 +10,7 @@
|
||||
* promisePopupShown promisePopupHidden
|
||||
* openContextMenu closeContextMenu
|
||||
* openExtensionContextMenu closeExtensionContextMenu
|
||||
* openActionContextMenu closeActionContextMenu
|
||||
* openActionContextMenu openActionSubmenu closeActionContextMenu
|
||||
* imageBuffer getListStyleImage getPanelForNode
|
||||
* awaitExtensionPanel awaitPopupResize
|
||||
* promiseContentDimensions alterContent
|
||||
@ -254,6 +254,14 @@ function* openActionContextMenu(extension, kind, win = window) {
|
||||
return menu;
|
||||
}
|
||||
|
||||
function* openActionSubmenu(submenuItem, win = window) {
|
||||
const submenu = submenuItem.firstChild;
|
||||
const shown = BrowserTestUtils.waitForEvent(submenu, "popupshown");
|
||||
EventUtils.synthesizeMouseAtCenter(submenuItem, {}, win);
|
||||
yield shown;
|
||||
return submenu;
|
||||
}
|
||||
|
||||
function closeActionContextMenu(itemToSelect, win = window) {
|
||||
const menu = win.document.getElementById("toolbar-context-menu");
|
||||
const hidden = BrowserTestUtils.waitForEvent(menu, "popuphidden");
|
||||
|
@ -15,15 +15,13 @@ add_task(function() {
|
||||
try {
|
||||
// Setup a public tab and a private tab
|
||||
info("Setting up public tab");
|
||||
tab1 = gBrowser.addTab(URL_PUBLIC);
|
||||
yield promiseBrowserLoaded(tab1.linkedBrowser);
|
||||
tab1 = yield BrowserTestUtils.openNewForegroundTab(gBrowser, URL_PUBLIC);
|
||||
|
||||
info("Setting up private tab");
|
||||
tab2 = gBrowser.addTab();
|
||||
yield promiseBrowserLoaded(tab2.linkedBrowser);
|
||||
tab2 = yield BrowserTestUtils.openNewForegroundTab(gBrowser);
|
||||
yield setUsePrivateBrowsing(tab2.linkedBrowser, true);
|
||||
tab2.linkedBrowser.loadURI(URL_PRIVATE);
|
||||
yield promiseBrowserLoaded(tab2.linkedBrowser);
|
||||
yield BrowserTestUtils.browserLoaded(tab2.linkedBrowser, false, URL_PRIVATE);
|
||||
|
||||
info("Flush to make sure chrome received all data.");
|
||||
yield TabStateFlusher.flush(tab1.linkedBrowser);
|
||||
@ -32,16 +30,15 @@ add_task(function() {
|
||||
info("Checking out state");
|
||||
let state = yield promiseRecoveryFileContents();
|
||||
|
||||
info("State: " + state);
|
||||
// Ensure that sessionstore.js only knows about the public tab
|
||||
ok(state.indexOf(URL_PUBLIC) != -1, "State contains public tab");
|
||||
ok(state.indexOf(URL_PRIVATE) == -1, "State does not contain private tab");
|
||||
|
||||
// Ensure that we can close and undo close the public tab but not the private tab
|
||||
gBrowser.removeTab(tab2);
|
||||
yield BrowserTestUtils.removeTab(tab2);
|
||||
tab2 = null;
|
||||
|
||||
gBrowser.removeTab(tab1);
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
tab1 = null;
|
||||
|
||||
tab1 = ss.undoCloseTab(window, 0);
|
||||
@ -51,10 +48,10 @@ add_task(function() {
|
||||
|
||||
} finally {
|
||||
if (tab1) {
|
||||
gBrowser.removeTab(tab1);
|
||||
yield BrowserTestUtils.removeTab(tab1);
|
||||
}
|
||||
if (tab2) {
|
||||
gBrowser.removeTab(tab2);
|
||||
yield BrowserTestUtils.removeTab(tab2);
|
||||
}
|
||||
}
|
||||
});
|
||||
@ -67,14 +64,13 @@ add_task(function () {
|
||||
forgetClosedWindows();
|
||||
|
||||
// Create a new window to attach our frame script to.
|
||||
let win = yield promiseNewWindowLoaded();
|
||||
let win = yield BrowserTestUtils.openNewBrowserWindow();
|
||||
let mm = win.getGroupMessageManager("browsers");
|
||||
mm.loadFrameScript(FRAME_SCRIPT, true);
|
||||
|
||||
// Create a new tab in the new window that will load the frame script.
|
||||
let tab = win.gBrowser.addTab("about:mozilla");
|
||||
let tab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser, "about:mozilla");
|
||||
let browser = tab.linkedBrowser;
|
||||
yield promiseBrowserLoaded(browser);
|
||||
yield TabStateFlusher.flush(browser);
|
||||
|
||||
// Check that we consider the tab as private.
|
||||
@ -82,13 +78,12 @@ add_task(function () {
|
||||
ok(state.isPrivate, "tab considered private");
|
||||
|
||||
// Ensure we don't allow restoring closed private tabs in non-private windows.
|
||||
win.gBrowser.removeTab(tab);
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
is(ss.getClosedTabCount(win), 0, "no tabs to restore");
|
||||
|
||||
// Create a new tab in the new window that will load the frame script.
|
||||
tab = win.gBrowser.addTab("about:mozilla");
|
||||
tab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser, "about:mozilla");
|
||||
browser = tab.linkedBrowser;
|
||||
yield promiseBrowserLoaded(browser);
|
||||
yield TabStateFlusher.flush(browser);
|
||||
|
||||
// Check that we consider the tab as private.
|
||||
@ -106,12 +101,11 @@ add_task(function () {
|
||||
forgetClosedWindows();
|
||||
|
||||
// Create a new window to attach our frame script to.
|
||||
let win = yield promiseNewWindowLoaded({private: true});
|
||||
let win = yield BrowserTestUtils.openNewBrowserWindow({private: true});
|
||||
|
||||
// Create a new tab in the new window that will load the frame script.
|
||||
let tab = win.gBrowser.addTab("about:mozilla");
|
||||
let tab = yield BrowserTestUtils.openNewForegroundTab(win.gBrowser, "about:mozilla");
|
||||
let browser = tab.linkedBrowser;
|
||||
yield promiseBrowserLoaded(browser);
|
||||
yield TabStateFlusher.flush(browser);
|
||||
|
||||
// Check that we consider the tab as private.
|
||||
@ -119,7 +113,7 @@ add_task(function () {
|
||||
ok(state.isPrivate, "tab considered private");
|
||||
|
||||
// Ensure that closed tabs in a private windows can be restored.
|
||||
win.gBrowser.removeTab(tab);
|
||||
yield BrowserTestUtils.removeTab(tab);
|
||||
is(ss.getClosedTabCount(win), 1, "there is a single tab to restore");
|
||||
|
||||
// Ensure that closed private windows can never be restored.
|
||||
|
@ -23,6 +23,10 @@ registerCleanupFunction(() => {
|
||||
for (let script of FRAME_SCRIPTS) {
|
||||
mm.removeDelayedFrameScript(script, true);
|
||||
}
|
||||
|
||||
// Force a garbage collect after the end of each test run, to make sure that it
|
||||
// won't interfere with the timing of the next test to be run from the suite.
|
||||
window.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIDOMWindowUtils).garbageCollect();
|
||||
});
|
||||
|
||||
const {Promise} = Cu.import("resource://gre/modules/Promise.jsm", {});
|
||||
|
Before Width: | Height: | Size: 236 B |
@ -991,30 +991,16 @@ html|span.ac-emphasize-text-url {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-star.svg#star-inverted");
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(bookmark, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/autocomplete-star.png");
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword],
|
||||
.ac-site-icon[type=searchengine],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage) {
|
||||
.ac-site-icon[type=searchengine] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon);
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword][selected],
|
||||
.ac-site-icon[type=searchengine][selected],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage, selected) {
|
||||
.ac-site-icon[type=searchengine][selected] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon-inverted);
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(tag, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/tag.png");
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.ac-type-icon[type=switchtab],
|
||||
.ac-type-icon[type=remotetab] {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-tab.svg#tab");
|
||||
|
@ -1,7 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
.alwaysUse {
|
||||
padding: 5px;
|
||||
}
|
@ -10,7 +10,6 @@ browser.jar:
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
skin/classic/browser/actionicon-tab.png
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/devedition.css
|
||||
* skin/classic/browser/browser-lightweightTheme.css
|
||||
@ -55,9 +54,7 @@ browser.jar:
|
||||
skin/classic/browser/feeds/feedIcon.png (feeds/feedIcon.png)
|
||||
skin/classic/browser/feeds/feedIcon16.png (feeds/feedIcon16.png)
|
||||
skin/classic/browser/feeds/subscribe.css (feeds/subscribe.css)
|
||||
skin/classic/browser/feeds/subscribe-ui.css (feeds/subscribe-ui.css)
|
||||
* skin/classic/browser/newtab/newTab.css (newtab/newTab.css)
|
||||
skin/classic/browser/places/autocomplete-star.png (places/autocomplete-star.png)
|
||||
skin/classic/browser/places/bookmarksMenu.png (places/bookmarksMenu.png)
|
||||
skin/classic/browser/places/bookmarksToolbar.png (places/bookmarksToolbar.png)
|
||||
skin/classic/browser/places/bookmarksToolbar-menuPanel.png (places/bookmarksToolbar-menuPanel.png)
|
||||
|
Before Width: | Height: | Size: 636 B |
Before Width: | Height: | Size: 645 B |
Before Width: | Height: | Size: 1.3 KiB |
@ -1827,35 +1827,20 @@ html|span.ac-emphasize-text-url {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-star.svg#star");
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(bookmark, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/autocomplete-star.png");
|
||||
-moz-image-region: rect(0, 16px, 16px, 0);
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(selected, current, bookmark, treecolAutoCompleteImage) {
|
||||
-moz-image-region: rect(0, 32px, 16px, 16px);
|
||||
}
|
||||
|
||||
.ac-type-icon[type=bookmark][selected][current] {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-star.svg#star-inverted");
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword],
|
||||
.ac-site-icon[type=searchengine],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage) {
|
||||
.ac-site-icon[type=searchengine] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon);
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword][selected],
|
||||
.ac-site-icon[type=searchengine][selected],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage, selected) {
|
||||
.ac-site-icon[type=searchengine][selected] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon-inverted);
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(tag, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/tag.png");
|
||||
}
|
||||
|
||||
.ac-type-icon[type=switchtab],
|
||||
.ac-type-icon[type=remotetab] {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-tab.svg#tab");
|
||||
|
@ -1,8 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
.alwaysUse {
|
||||
padding: 3px;
|
||||
}
|
||||
|
@ -9,8 +9,6 @@ browser.jar:
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
skin/classic/browser/actionicon-tab.png
|
||||
skin/classic/browser/actionicon-tab@2x.png
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/devedition.css
|
||||
* skin/classic/browser/browser-lightweightTheme.css
|
||||
@ -76,7 +74,6 @@ browser.jar:
|
||||
skin/classic/browser/downloads/download-notification-start@2x.png (downloads/download-notification-start@2x.png)
|
||||
* skin/classic/browser/downloads/downloads.css (downloads/downloads.css)
|
||||
skin/classic/browser/feeds/subscribe.css (feeds/subscribe.css)
|
||||
skin/classic/browser/feeds/subscribe-ui.css (feeds/subscribe-ui.css)
|
||||
skin/classic/browser/feeds/feedIcon.png (feeds/feedIcon.png)
|
||||
skin/classic/browser/feeds/feedIcon16.png (feeds/feedIcon16.png)
|
||||
* skin/classic/browser/newtab/newTab.css (newtab/newTab.css)
|
||||
@ -84,8 +81,6 @@ browser.jar:
|
||||
skin/classic/browser/monitor.png
|
||||
skin/classic/browser/monitor_16-10.png
|
||||
skin/classic/browser/places/allBookmarks.png (places/allBookmarks.png)
|
||||
skin/classic/browser/places/autocomplete-star.png (places/autocomplete-star.png)
|
||||
skin/classic/browser/places/autocomplete-star@2x.png (places/autocomplete-star@2x.png)
|
||||
* skin/classic/browser/places/places.css (places/places.css)
|
||||
skin/classic/browser/places/organizer.css (places/organizer.css)
|
||||
skin/classic/browser/places/query.png (places/query.png)
|
||||
@ -104,10 +99,6 @@ browser.jar:
|
||||
skin/classic/browser/places/folderDropArrow.png (places/folderDropArrow.png)
|
||||
skin/classic/browser/places/folderDropArrow@2x.png (places/folderDropArrow@2x.png)
|
||||
skin/classic/browser/places/editBookmarkOverlay.css (places/editBookmarkOverlay.css)
|
||||
skin/classic/browser/places/minus.png (places/minus.png)
|
||||
skin/classic/browser/places/minus-active.png (places/minus-active.png)
|
||||
skin/classic/browser/places/plus.png (places/plus.png)
|
||||
skin/classic/browser/places/plus-active.png (places/plus-active.png)
|
||||
skin/classic/browser/places/starred48.png (places/starred48.png)
|
||||
skin/classic/browser/places/starred48@2x.png (places/starred48@2x.png)
|
||||
skin/classic/browser/places/unstarred48.png (places/unstarred48.png)
|
||||
|
Before Width: | Height: | Size: 653 B |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 573 B |
Before Width: | Height: | Size: 599 B |
Before Width: | Height: | Size: 585 B |
Before Width: | Height: | Size: 600 B |
Before Width: | Height: | Size: 421 B |
Before Width: | Height: | Size: 194 B |
Before Width: | Height: | Size: 324 B |
@ -1649,56 +1649,16 @@ html|span.ac-emphasize-text-url {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-star.svg#star-inverted");
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(bookmark, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/autocomplete-star.png");
|
||||
-moz-image-region: rect(0 16px 16px 0);
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.autocomplete-treebody::-moz-tree-image(bookmark, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/autocomplete-star@2x.png");
|
||||
-moz-image-region: rect(0 32px 32px 0);
|
||||
}
|
||||
}
|
||||
|
||||
@media not all and (-moz-os-version: windows-vista) and (-moz-windows-default-theme) {
|
||||
@media not all and (-moz-os-version: windows-win7) and (-moz-windows-default-theme) {
|
||||
.autocomplete-treebody::-moz-tree-image(selected, current, bookmark, treecolAutoCompleteImage) {
|
||||
-moz-image-region: rect(0 32px 16px 16px);
|
||||
}
|
||||
|
||||
@media (min-resolution: 1.1dppx) {
|
||||
.autocomplete-treebody::-moz-tree-image(selected, current, bookmark, treecolAutoCompleteImage) {
|
||||
-moz-image-region: rect(0 64px 32px 32px);
|
||||
}
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage, selected) {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon-inverted);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword],
|
||||
.ac-site-icon[type=searchengine],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage) {
|
||||
.ac-site-icon[type=searchengine] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon);
|
||||
}
|
||||
|
||||
.ac-type-icon[type=keyword][selected],
|
||||
.ac-site-icon[type=searchengine][selected],
|
||||
.autocomplete-treebody::-moz-tree-image(keyword, treecolAutoCompleteImage, selected) {
|
||||
.ac-site-icon[type=searchengine][selected] {
|
||||
list-style-image: url(chrome://global/skin/icons/autocomplete-search.svg#search-icon-inverted);
|
||||
}
|
||||
|
||||
.autocomplete-treebody::-moz-tree-image(tag, treecolAutoCompleteImage) {
|
||||
list-style-image: url("chrome://browser/skin/places/tag.png");
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
}
|
||||
|
||||
.ac-type-icon[type=switchtab],
|
||||
.ac-type-icon[type=remotetab] {
|
||||
list-style-image: url("chrome://browser/skin/urlbar-tab.svg#tab");
|
||||
|
@ -1,7 +0,0 @@
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
.alwaysUse {
|
||||
padding: 5px;
|
||||
}
|
@ -9,9 +9,6 @@ browser.jar:
|
||||
skin/classic/browser/aboutSessionRestore-window-icon.png
|
||||
skin/classic/browser/aboutSyncTabs.css
|
||||
* skin/classic/browser/syncedtabs/sidebar.css (syncedtabs/sidebar.css)
|
||||
skin/classic/browser/actionicon-tab.png
|
||||
skin/classic/browser/actionicon-tab@2x.png
|
||||
skin/classic/browser/actionicon-tab-XPVista7.png
|
||||
* skin/classic/browser/browser.css
|
||||
* skin/classic/browser/devedition.css
|
||||
* skin/classic/browser/browser-lightweightTheme.css
|
||||
@ -87,11 +84,7 @@ browser.jar:
|
||||
skin/classic/browser/feeds/feedIcon-XP.png (feeds/feedIcon-XP.png)
|
||||
skin/classic/browser/feeds/feedIcon16-XP.png (feeds/feedIcon16-XP.png)
|
||||
skin/classic/browser/feeds/subscribe.css (feeds/subscribe.css)
|
||||
skin/classic/browser/feeds/subscribe-ui.css (feeds/subscribe-ui.css)
|
||||
* skin/classic/browser/newtab/newTab.css (newtab/newTab.css)
|
||||
skin/classic/browser/places/autocomplete-star.png (places/autocomplete-star.png)
|
||||
skin/classic/browser/places/autocomplete-star@2x.png (places/autocomplete-star@2x.png)
|
||||
skin/classic/browser/places/autocomplete-star-XPVista7.png (places/autocomplete-star-XPVista7.png)
|
||||
skin/classic/browser/places/places.css (places/places.css)
|
||||
* skin/classic/browser/places/organizer.css (places/organizer.css)
|
||||
skin/classic/browser/places/query.png (places/query.png)
|
||||
@ -230,7 +223,6 @@ browser.jar:
|
||||
% override chrome://browser/skin/preferences/application.png chrome://browser/skin/preferences/application-XP.png os=WINNT osversion<6
|
||||
% override chrome://browser/skin/preferences/saveFile.png chrome://browser/skin/preferences/saveFile-XP.png os=WINNT osversion<6
|
||||
|
||||
% override chrome://browser/skin/actionicon-tab.png chrome://browser/skin/actionicon-tab-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/privatebrowsing-mask-tabstrip.png chrome://browser/skin/privatebrowsing-mask-tabstrip-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/privatebrowsing-mask-titlebar.png chrome://browser/skin/privatebrowsing-mask-titlebar-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/reload-stop-go.png chrome://browser/skin/reload-stop-go-XPVista7.png os=WINNT osversion<=6.1
|
||||
@ -245,7 +237,6 @@ browser.jar:
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/urlbar-history-dropmarker@2x.png chrome://browser/skin/urlbar-history-dropmarker-XPVista7@2x.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/downloads/download-glow-menuPanel.png chrome://browser/skin/downloads/download-glow-menuPanel-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/places/autocomplete-star.png chrome://browser/skin/places/autocomplete-star-XPVista7.png os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab.svg chrome://browser/skin/tabbrowser/newtab-XPVista7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/newtab-inverted.svg chrome://browser/skin/tabbrowser/newtab-inverted-XPVista7.svg os=WINNT osversion<=6.1
|
||||
% override chrome://browser/skin/tabbrowser/tab-arrow-left.svg chrome://browser/skin/tabbrowser/tab-arrow-left-XPVista7.svg os=WINNT osversion<=6.1
|
||||
|
Before Width: | Height: | Size: 813 B |
Before Width: | Height: | Size: 493 B |
Before Width: | Height: | Size: 870 B |
@ -310,8 +310,8 @@ AnimationTimeBlock.prototype = {
|
||||
text += "\n";
|
||||
}
|
||||
|
||||
// Adding the direction mode.
|
||||
if (state.direction) {
|
||||
// Adding the direction mode if it is not "normal".
|
||||
if (state.direction && state.direction !== "normal") {
|
||||
text += L10N.getStr("player.animationDirectionLabel") + " ";
|
||||
text += state.direction;
|
||||
text += "\n";
|
||||
|
@ -23,26 +23,33 @@ add_task(function* () {
|
||||
ok(el.hasAttribute("title"), "The tooltip is defined for animation " + i);
|
||||
|
||||
let title = el.getAttribute("title");
|
||||
if (controller.animationPlayers[i].state.delay) {
|
||||
let state = controller.animationPlayers[i].state;
|
||||
|
||||
if (state.delay) {
|
||||
ok(title.match(/Delay: [\d.-]+s/), "The tooltip shows the delay");
|
||||
}
|
||||
ok(title.match(/Duration: [\d.]+s/), "The tooltip shows the duration");
|
||||
if (controller.animationPlayers[i].state.endDelay) {
|
||||
if (state.endDelay) {
|
||||
ok(title.match(/End delay: [\d.-]+s/), "The tooltip shows the endDelay");
|
||||
}
|
||||
if (controller.animationPlayers[i].state.iterationCount !== 1) {
|
||||
if (state.iterationCount !== 1) {
|
||||
ok(title.match(/Repeats: /), "The tooltip shows the iterations");
|
||||
} else {
|
||||
ok(!title.match(/Repeats: /), "The tooltip doesn't show the iterations");
|
||||
}
|
||||
if (controller.animationPlayers[i].state.easing) {
|
||||
if (state.easing) {
|
||||
ok(title.match(/Easing: /), "The tooltip shows the easing");
|
||||
}
|
||||
if (controller.animationPlayers[i].state.fill) {
|
||||
if (state.fill) {
|
||||
ok(title.match(/Fill: /), "The tooltip shows the fill");
|
||||
}
|
||||
if (controller.animationPlayers[i].state.direction) {
|
||||
ok(title.match(/Direction: /), "The tooltip shows the direction");
|
||||
if (state.direction) {
|
||||
if (state.direction === "normal") {
|
||||
ok(!title.match(/Direction: /),
|
||||
"The tooltip doesn't show the direction if it is 'normal'");
|
||||
} else {
|
||||
ok(title.match(/Direction: /), "The tooltip shows the direction");
|
||||
}
|
||||
}
|
||||
ok(!title.match(/Iteration start:/),
|
||||
"The tooltip doesn't show the iteration start");
|
||||
|
@ -54,7 +54,7 @@
|
||||
left: 10px;
|
||||
background: red;
|
||||
|
||||
animation: simple-animation 2s;
|
||||
animation: simple-animation 2s normal;
|
||||
}
|
||||
|
||||
.long {
|
||||
|
@ -32,6 +32,8 @@ this.DevTools = function DevTools() {
|
||||
this._tools = new Map(); // Map<toolId, tool>
|
||||
this._themes = new Map(); // Map<themeId, theme>
|
||||
this._toolboxes = new Map(); // Map<target, toolbox>
|
||||
// List of toolboxes that are still in process of creation
|
||||
this._creatingToolboxes = new Map(); // Map<target, toolbox Promise>
|
||||
|
||||
// destroy() is an observer's handler so we need to preserve context.
|
||||
this.destroy = this.destroy.bind(this);
|
||||
@ -417,25 +419,41 @@ DevTools.prototype = {
|
||||
|
||||
toolbox.raise();
|
||||
} else {
|
||||
let manager = new ToolboxHostManager(target, hostType, hostOptions);
|
||||
|
||||
toolbox = yield manager.create(toolId);
|
||||
this._toolboxes.set(target, toolbox);
|
||||
|
||||
this.emit("toolbox-created", toolbox);
|
||||
|
||||
toolbox.once("destroy", () => {
|
||||
this.emit("toolbox-destroy", target);
|
||||
});
|
||||
|
||||
toolbox.once("destroyed", () => {
|
||||
this._toolboxes.delete(target);
|
||||
this.emit("toolbox-destroyed", target);
|
||||
});
|
||||
|
||||
yield toolbox.open();
|
||||
this.emit("toolbox-ready", toolbox);
|
||||
// As toolbox object creation is async, we have to be careful about races
|
||||
// Check for possible already in process of loading toolboxes before
|
||||
// actually trying to create a new one.
|
||||
let promise = this._creatingToolboxes.get(target);
|
||||
if (promise) {
|
||||
return yield promise;
|
||||
}
|
||||
let toolboxPromise = this.createToolbox(target, toolId, hostType, hostOptions);
|
||||
this._creatingToolboxes.set(target, toolboxPromise);
|
||||
toolbox = yield toolboxPromise;
|
||||
this._creatingToolboxes.delete(target);
|
||||
}
|
||||
return toolbox;
|
||||
}),
|
||||
|
||||
createToolbox: Task.async(function* (target, toolId, hostType, hostOptions) {
|
||||
let manager = new ToolboxHostManager(target, hostType, hostOptions);
|
||||
|
||||
let toolbox = yield manager.create(toolId);
|
||||
|
||||
this._toolboxes.set(target, toolbox);
|
||||
|
||||
this.emit("toolbox-created", toolbox);
|
||||
|
||||
toolbox.once("destroy", () => {
|
||||
this.emit("toolbox-destroy", target);
|
||||
});
|
||||
|
||||
toolbox.once("destroyed", () => {
|
||||
this._toolboxes.delete(target);
|
||||
this.emit("toolbox-destroyed", target);
|
||||
});
|
||||
|
||||
yield toolbox.open();
|
||||
this.emit("toolbox-ready", toolbox);
|
||||
|
||||
return toolbox;
|
||||
}),
|
||||
|
@ -8,9 +8,10 @@ support-files =
|
||||
doc_markup_dragdrop_autoscroll_01.html
|
||||
doc_markup_dragdrop_autoscroll_02.html
|
||||
doc_markup_edit.html
|
||||
doc_markup_events1.html
|
||||
doc_markup_events2.html
|
||||
doc_markup_events3.html
|
||||
doc_markup_events_01.html
|
||||
doc_markup_events_02.html
|
||||
doc_markup_events_03.html
|
||||
doc_markup_events_04.html
|
||||
doc_markup_events_form.html
|
||||
doc_markup_events_jquery.html
|
||||
doc_markup_events-overflow.html
|
||||
@ -34,6 +35,7 @@ support-files =
|
||||
doc_markup_xul.xul
|
||||
head.js
|
||||
helper_attributes_test_runner.js
|
||||
helper_diff.js
|
||||
helper_events_test_runner.js
|
||||
helper_markup_accessibility_navigation.js
|
||||
helper_outerhtml_test_runner.js
|
||||
@ -80,9 +82,10 @@ subsuite = clipboard
|
||||
[browser_markup_dragdrop_invalidNodes.js]
|
||||
[browser_markup_dragdrop_reorder.js]
|
||||
[browser_markup_dragdrop_tooltip.js]
|
||||
[browser_markup_events1.js]
|
||||
[browser_markup_events2.js]
|
||||
[browser_markup_events3.js]
|
||||
[browser_markup_events_01.js]
|
||||
[browser_markup_events_02.js]
|
||||
[browser_markup_events_03.js]
|
||||
[browser_markup_events_04.js]
|
||||
[browser_markup_events_form.js]
|
||||
[browser_markup_events_jquery_1.0.js]
|
||||
[browser_markup_events_jquery_1.1.js]
|
||||
|
@ -8,7 +8,7 @@
|
||||
// Test that markup view event bubbles show the correct event info for DOM
|
||||
// events.
|
||||
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events1.html";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_01.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
@ -23,7 +23,9 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
],
|
||||
handler: "init();"
|
||||
handler: "function onload(event) {\n" +
|
||||
" init();\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -122,7 +124,9 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
],
|
||||
handler: "alert('DOM0')"
|
||||
handler: "function onclick(event) {\n" +
|
||||
" alert('DOM0')\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -136,7 +140,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handleEvent: function(blah) {\n" +
|
||||
handler: "function(blah) {\n" +
|
||||
" alert(\"handleEvent\");\n" +
|
||||
"}"
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
// Test that markup view event bubbles show the correct event info for DOM
|
||||
// events.
|
||||
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events2.html";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_02.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
@ -70,7 +70,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function boundClickHandler(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" alert(\"Bound event\");\n" +
|
||||
"}"
|
||||
}
|
||||
@ -86,7 +86,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handleEvent: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" alert(\"boundHandleEvent\");\n" +
|
||||
"}"
|
||||
}
|
||||
@ -134,7 +134,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "anonObjectMethod: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" alert(\"obj.anonObjectMethod\");\n" +
|
||||
"}"
|
||||
}
|
||||
@ -150,7 +150,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "objectMethod: function kay() {\n" +
|
||||
handler: "function kay() {\n" +
|
||||
" alert(\"obj.objectMethod\");\n" +
|
||||
"}"
|
||||
}
|
@ -8,7 +8,7 @@
|
||||
// Test that markup view event bubbles show the correct event info for DOM
|
||||
// events.
|
||||
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events3.html";
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_03.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
@ -18,12 +18,12 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":91",
|
||||
filename: TEST_URL + ":66",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "es6Method() {\n" +
|
||||
handler: "function es6Method(foo, bar) {\n" +
|
||||
" alert(\"obj.es6Method\");\n" +
|
||||
"}"
|
||||
}
|
||||
@ -34,7 +34,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":96",
|
||||
filename: TEST_URL + ":85",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
@ -50,7 +50,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":55",
|
||||
filename: TEST_URL + ":43",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
@ -66,15 +66,14 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":23",
|
||||
filename: TEST_URL + ":20",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "let namedFunctionExpression =\n" +
|
||||
" function foo() {\n" +
|
||||
" alert(\"namedFunctionExpression\");\n" +
|
||||
" }"
|
||||
handler: "function foo() {\n" +
|
||||
" alert(\"namedFunctionExpression\");\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -83,12 +82,12 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":27",
|
||||
filename: TEST_URL + ":24",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "let anonFunctionExpression = function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" alert(\"anonFunctionExpression\");\n" +
|
||||
"}"
|
||||
}
|
||||
@ -99,7 +98,7 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":32",
|
||||
filename: TEST_URL + ":29",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
@ -110,50 +109,6 @@ const TEST_DATA = [ // eslint-disable-line
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#constructed-function",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":0",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: ""
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#constructed-function-with-body-string",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":0",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "alert(\"constructedFuncWithBodyString\");"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#multiple-assignment",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":42",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "let multipleAssignment = foo = bar = function multi() {\n" +
|
||||
" alert(\"multipleAssignment\");\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
add_task(function* () {
|
@ -0,0 +1,157 @@
|
||||
/* vim: set ts=2 et sw=2 tw=80: */
|
||||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
/* import-globals-from helper_events_test_runner.js */
|
||||
|
||||
"use strict";
|
||||
|
||||
// Test that markup view event bubbles show the correct event info for DOM
|
||||
// events.
|
||||
|
||||
const TEST_URL = URL_ROOT + "doc_markup_events_04.html";
|
||||
|
||||
loadHelperScript("helper_events_test_runner.js");
|
||||
|
||||
const TEST_DATA = [ // eslint-disable-line
|
||||
{
|
||||
selector: "html",
|
||||
expected: [
|
||||
{
|
||||
type: "load",
|
||||
filename: TEST_URL,
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
],
|
||||
handler: "function onload(event) {\n" +
|
||||
" init();\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":56",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function(foo2, bar2) {\n" +
|
||||
" alert(\"documentElement event listener clicked\");\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":52",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function(foo, bar) {\n" +
|
||||
" alert(\"document event listener clicked\");\n" +
|
||||
"}"
|
||||
},
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#constructed-function",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL,
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function anonymous() {\n" +
|
||||
"\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#constructed-function-with-body-string",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL,
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function anonymous(a, b, c) {\n" +
|
||||
" alert(\"constructedFuncWithBodyString\");\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#multiple-assignment",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":24",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function multi() {\n" +
|
||||
" alert(\"multipleAssignment\");\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#promise",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: "[native code]",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" [native code]\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#arraysort",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: "[native code]",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function sort(arr, comparefn) {\n" +
|
||||
" [native code]\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
selector: "#handleEvent",
|
||||
expected: [
|
||||
{
|
||||
type: "click",
|
||||
filename: TEST_URL + ":77",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function(event) {\n" +
|
||||
" switch (event.type) {\n" +
|
||||
" case \"click\":\n" +
|
||||
" alert(\"handleEvent click\");\n" +
|
||||
" }\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
];
|
||||
|
||||
add_task(function* () {
|
||||
yield runEventPopupTests(TEST_URL, TEST_DATA);
|
||||
});
|
@ -19,11 +19,11 @@ const TEST_DATA = [
|
||||
expected: [
|
||||
{
|
||||
type: "load",
|
||||
filename: URL_ROOT + TEST_LIB,
|
||||
filename: URL_ROOT + TEST_LIB + ":1117",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "ready: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" // Make sure that the DOM is not already loaded\n" +
|
||||
" if (!jQuery.isReady) {\n" +
|
||||
" // Remember that the DOM is ready\n" +
|
||||
@ -43,10 +43,10 @@ const TEST_DATA = [
|
||||
},
|
||||
{
|
||||
type: "load",
|
||||
filename: TEST_URL,
|
||||
filename: TEST_URL + ":27",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
"DOM2"
|
||||
],
|
||||
handler: "() => {\n" +
|
||||
" var handler1 = function liveDivDblClick() {\n" +
|
||||
@ -104,12 +104,12 @@ const TEST_DATA = [
|
||||
},
|
||||
{
|
||||
type: "load",
|
||||
filename: URL_ROOT + TEST_LIB,
|
||||
filename: URL_ROOT + TEST_LIB + ":894",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return;\n" +
|
||||
"\n" +
|
||||
" event = event || jQuery.event.fix(window.event);\n" +
|
||||
@ -131,6 +131,31 @@ const TEST_DATA = [
|
||||
"\n" +
|
||||
" return returnValue;\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "DOMContentLoaded",
|
||||
filename: URL_ROOT + TEST_LIB + ":1117",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" // Make sure that the DOM is not already loaded\n" +
|
||||
" if (!jQuery.isReady) {\n" +
|
||||
" // Remember that the DOM is ready\n" +
|
||||
" jQuery.isReady = true;\n" +
|
||||
"\n" +
|
||||
" // If there are functions bound, to execute\n" +
|
||||
" if (jQuery.readyList) {\n" +
|
||||
" // Execute all of them\n" +
|
||||
" for (var i = 0; i < jQuery.readyList.length; i++)\n" +
|
||||
" jQuery.readyList[i].apply(document);\n" +
|
||||
"\n" +
|
||||
" // Reset the list of functions\n" +
|
||||
" jQuery.readyList = null;\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -143,7 +168,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -153,7 +178,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -164,7 +189,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return;\n" +
|
||||
"\n" +
|
||||
" event = event || jQuery.event.fix(window.event);\n" +
|
||||
@ -193,7 +218,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -204,7 +229,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return;\n" +
|
||||
"\n" +
|
||||
" event = event || jQuery.event.fix(window.event);\n" +
|
||||
|
@ -19,11 +19,11 @@ const TEST_DATA = [
|
||||
expected: [
|
||||
{
|
||||
type: "load",
|
||||
filename: URL_ROOT + TEST_LIB,
|
||||
filename: URL_ROOT + TEST_LIB + ":1387",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "ready: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" // Make sure that the DOM is not already loaded\n" +
|
||||
" if (!jQuery.isReady) {\n" +
|
||||
" // Remember that the DOM is ready\n" +
|
||||
@ -47,10 +47,10 @@ const TEST_DATA = [
|
||||
},
|
||||
{
|
||||
type: "load",
|
||||
filename: TEST_URL,
|
||||
filename: TEST_URL + ":27",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
"DOM2"
|
||||
],
|
||||
handler: "() => {\n" +
|
||||
" var handler1 = function liveDivDblClick() {\n" +
|
||||
@ -108,12 +108,12 @@ const TEST_DATA = [
|
||||
},
|
||||
{
|
||||
type: "load",
|
||||
filename: URL_ROOT + TEST_LIB,
|
||||
filename: URL_ROOT + TEST_LIB + ":1224",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return false;\n" +
|
||||
"\n" +
|
||||
" // Empty object is for triggered events with no data\n" +
|
||||
@ -157,7 +157,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -167,7 +167,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -178,7 +178,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return false;\n" +
|
||||
"\n" +
|
||||
" // Empty object is for triggered events with no data\n" +
|
||||
@ -217,7 +217,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -228,7 +228,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return false;\n" +
|
||||
"\n" +
|
||||
" // Empty object is for triggered events with no data\n" +
|
||||
|
@ -90,7 +90,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -100,41 +100,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "k = r.handle = function(a) {\n" +
|
||||
" return typeof m === K || a && m.event.triggered === a.type ? void 0 : m.event.dispatch.apply(k.elem, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "k = r.handle = function(a) {\n" +
|
||||
" return typeof m === K || a && m.event.triggered === a.type ? void 0 : m.event.dispatch.apply(k.elem, arguments)\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -149,7 +127,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler4 = function liveDivDragEnd() {\n" +
|
||||
handler: "function liveDivDragEnd() {\n" +
|
||||
" alert(4);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -160,7 +138,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler3 = function liveDivDragLeave() {\n" +
|
||||
handler: "function liveDivDragLeave() {\n" +
|
||||
" alert(3);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -171,7 +149,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler6 = function liveDivDragOver() {\n" +
|
||||
handler: "function liveDivDragOver() {\n" +
|
||||
" alert(6);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -182,7 +160,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler5 = function liveDivDrop() {\n" +
|
||||
handler: "function liveDivDrop() {\n" +
|
||||
" alert(5);\n" +
|
||||
"}"
|
||||
}
|
||||
|
@ -85,7 +85,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM0"
|
||||
],
|
||||
handler: "handle: function(event) {\n" +
|
||||
handler: "function(event) {\n" +
|
||||
" if (typeof jQuery == \"undefined\") return false;\n" +
|
||||
"\n" +
|
||||
" // Empty object is for triggered events with no data\n" +
|
||||
@ -129,7 +129,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -139,7 +139,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -163,7 +163,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
|
@ -23,7 +23,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "ready: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" if (!n.isReady) {\n" +
|
||||
" n.isReady = true;\n" +
|
||||
" if (n.readyList) {\n" +
|
||||
@ -97,17 +97,6 @@ const TEST_DATA = [
|
||||
" $(div).keydown(handler9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "load",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return typeof n !== \"undefined\" && !n.event.triggered ? n.event.handle.apply(arguments.callee.elem, arguments) : g\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "unload",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
@ -120,14 +109,93 @@ const TEST_DATA = [
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "unload",
|
||||
type: "dblclick",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function c(G) {\n" +
|
||||
" var D = RegExp(\"(^|\\\\.)\" + G.type + \"(\\\\.|$)\"),\n" +
|
||||
" F = true,\n" +
|
||||
" E = [];\n" +
|
||||
" n.each(n.data(this, \"events\").live || [], function(H, I) {\n" +
|
||||
" if (D.test(I.type)) {\n" +
|
||||
" var J = n(G.target).closest(I.data)[0];\n" +
|
||||
" if (J) {\n" +
|
||||
" E.push({\n" +
|
||||
" elem: J,\n" +
|
||||
" fn: I\n" +
|
||||
" })\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" });\n" +
|
||||
" n.each(E, function() {\n" +
|
||||
" if (!G.isImmediatePropagationStopped() && " + "this.fn.call(this.elem, G, this.fn.data) === false) {\n" +
|
||||
" F = false\n" +
|
||||
" }\n" +
|
||||
" });\n" +
|
||||
" return F\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "DOMContentLoaded",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return typeof n !== \"undefined\" && !n.event.triggered ? n.event.handle.apply(arguments.callee.elem, arguments) : g\n" +
|
||||
" document.removeEventListener(\"DOMContentLoaded\", arguments.callee, false);\n" +
|
||||
" n.ready()\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "dragstart",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function c(G) {\n" +
|
||||
" var D = RegExp(\"(^|\\\\.)\" + G.type + \"(\\\\.|$)\"),\n" +
|
||||
" F = true,\n" +
|
||||
" E = [];\n" +
|
||||
" n.each(n.data(this, \"events\").live || [], function(H, I) {\n" +
|
||||
" if (D.test(I.type)) {\n" +
|
||||
" var J = n(G.target).closest(I.data)[0];\n" +
|
||||
" if (J) {\n" +
|
||||
" E.push({\n" +
|
||||
" elem: J,\n" +
|
||||
" fn: I\n" +
|
||||
" })\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" });\n" +
|
||||
" n.each(E, function() {\n" +
|
||||
" if (!G.isImmediatePropagationStopped() && " + "this.fn.call(this.elem, G, this.fn.data) === false) {\n" +
|
||||
" F = false\n" +
|
||||
" }\n" +
|
||||
" });\n" +
|
||||
" return F\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "live",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return E.apply(this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "live",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return E.apply(this, arguments)\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
@ -141,7 +209,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -151,41 +219,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return typeof n !== \"undefined\" && !n.event.triggered ? n.event.handle.apply(arguments.callee.elem, arguments) : g\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":19",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return typeof n !== \"undefined\" && !n.event.triggered ? n.event.handle.apply(arguments.callee.elem, arguments) : g\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -199,8 +245,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler1 = function liveDivDblClick() {\n" +
|
||||
" alert(1);\n" +
|
||||
handler: "function() {\n" +
|
||||
" return E.apply(this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
@ -210,8 +256,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler2 = function liveDivDragStart() {\n" +
|
||||
" alert(2);\n" +
|
||||
handler: "function() {\n" +
|
||||
" return E.apply(this, arguments)\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
|
@ -85,7 +85,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "ready: function() {\n" +
|
||||
handler: "function() {\n" +
|
||||
" if (!c.isReady) {\n" +
|
||||
" if (!s.body) return setTimeout(c.ready, 13);\n" +
|
||||
" c.isReady = true;\n" +
|
||||
@ -96,6 +96,38 @@ const TEST_DATA = [
|
||||
" c.fn.triggerHandler && c(s).triggerHandler(\"ready\")\n" +
|
||||
" }\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "dblclick",
|
||||
filename: URL_ROOT + TEST_LIB + ":31",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "DOMContentLoaded",
|
||||
filename: URL_ROOT + TEST_LIB + ":32",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" s.removeEventListener(\"DOMContentLoaded\", M, false);\n" +
|
||||
" c.ready()\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "dragstart",
|
||||
filename: URL_ROOT + TEST_LIB + ":31",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -108,7 +140,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -118,41 +150,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":48",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "j = function() {\n" +
|
||||
" return typeof c !== \"undefined\" && !c.event.triggered ? c.event.handle.apply(j.elem, arguments) : w\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":48",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "j = function() {\n" +
|
||||
" return typeof c !== \"undefined\" && !c.event.triggered ? c.event.handle.apply(j.elem, arguments) : w\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -166,8 +176,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler1 = function liveDivDblClick() {\n" +
|
||||
" alert(1);\n" +
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
@ -177,45 +187,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "function qa(a) {\n" +
|
||||
" var b = true,\n" +
|
||||
" d = [],\n" +
|
||||
" f = [],\n" +
|
||||
" e = arguments,\n" +
|
||||
" i, j, o, p, n, t = c.extend({}, c.data(this, \"events\").live);\n" +
|
||||
" for (p in t) {\n" +
|
||||
" j = t[p];\n" +
|
||||
" if (j.live === a.type || j.altLive && c.inArray(a.type, j.altLive) > -1) {\n" +
|
||||
" i = j.data;\n" +
|
||||
" i.beforeFilter && i.beforeFilter[a.type] && !i.beforeFilter[a.type](a) || f.push(j.selector)\n" +
|
||||
" } else delete t[p]\n" +
|
||||
" }\n" +
|
||||
" i = c(a.target).closest(f, a.currentTarget);\n" +
|
||||
" n = 0;\n" +
|
||||
" for (l = i.length; n < l; n++)\n" +
|
||||
" for (p in t) {\n" +
|
||||
" j = t[p];\n" +
|
||||
" o = i[n].elem;\n" +
|
||||
" f = null;\n" +
|
||||
" if (i[n].selector === j.selector) {\n" +
|
||||
" if (j.live === \"mouseenter\" || j.live === \"mouseleave\") f = c(a.relatedTarget).closest(j.selector)[0];\n" +
|
||||
" if (!f || f !== o) d.push({\n" +
|
||||
" elem: o,\n" +
|
||||
" fn: j\n" +
|
||||
" })\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" n = 0;\n" +
|
||||
" for (l = d.length; n < l; n++) {\n" +
|
||||
" i = d[n];\n" +
|
||||
" a.currentTarget = i.elem;\n" +
|
||||
" a.data = i.fn.data;\n" +
|
||||
" if (i.fn.apply(i.elem, e) === false) {\n" +
|
||||
" b = false;\n" +
|
||||
" break\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" return b\n" +
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
@ -225,8 +198,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler2 = function liveDivDragStart() {\n" +
|
||||
" alert(2);\n" +
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
@ -236,45 +209,8 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "function qa(a) {\n" +
|
||||
" var b = true,\n" +
|
||||
" d = [],\n" +
|
||||
" f = [],\n" +
|
||||
" e = arguments,\n" +
|
||||
" i, j, o, p, n, t = c.extend({}, c.data(this, \"events\").live);\n" +
|
||||
" for (p in t) {\n" +
|
||||
" j = t[p];\n" +
|
||||
" if (j.live === a.type || j.altLive && c.inArray(a.type, j.altLive) > -1) {\n" +
|
||||
" i = j.data;\n" +
|
||||
" i.beforeFilter && i.beforeFilter[a.type] && !i.beforeFilter[a.type](a) || f.push(j.selector)\n" +
|
||||
" } else delete t[p]\n" +
|
||||
" }\n" +
|
||||
" i = c(a.target).closest(f, a.currentTarget);\n" +
|
||||
" n = 0;\n" +
|
||||
" for (l = i.length; n < l; n++)\n" +
|
||||
" for (p in t) {\n" +
|
||||
" j = t[p];\n" +
|
||||
" o = i[n].elem;\n" +
|
||||
" f = null;\n" +
|
||||
" if (i[n].selector === j.selector) {\n" +
|
||||
" if (j.live === \"mouseenter\" || j.live === \"mouseleave\") f = c(a.relatedTarget).closest(j.selector)[0];\n" +
|
||||
" if (!f || f !== o) d.push({\n" +
|
||||
" elem: o,\n" +
|
||||
" fn: j\n" +
|
||||
" })\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" n = 0;\n" +
|
||||
" for (l = d.length; n < l; n++) {\n" +
|
||||
" i = d[n];\n" +
|
||||
" a.currentTarget = i.elem;\n" +
|
||||
" a.data = i.fn.data;\n" +
|
||||
" if (i.fn.apply(i.elem, e) === false) {\n" +
|
||||
" b = false;\n" +
|
||||
" break\n" +
|
||||
" }\n" +
|
||||
" }\n" +
|
||||
" return b\n" +
|
||||
handler: "function() {\n" +
|
||||
" return a.apply(d || this, arguments)\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
|
@ -87,7 +87,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "ready: function(a) {\n" +
|
||||
handler: "function(a) {\n" +
|
||||
" if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {\n" +
|
||||
" if (!c.body) return setTimeout(e.ready, 1);\n" +
|
||||
" e.isReady = !0;\n" +
|
||||
@ -95,6 +95,17 @@ const TEST_DATA = [
|
||||
" y.resolveWith(c, [e]), e.fn.trigger && e(c).trigger(\"ready\").unbind(\"ready\")\n" +
|
||||
" }\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "DOMContentLoaded",
|
||||
filename: URL_ROOT + TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" c.removeEventListener(\"DOMContentLoaded\", z, !1), e.ready()\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -107,7 +118,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -117,41 +128,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "i.handle = k = function(a) {\n" +
|
||||
" return typeof f != \"undefined\" && (!a || f.event.triggered !== a.type) ? f.event.handle.apply(k.elem, arguments) : b\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":16",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "i.handle = k = function(a) {\n" +
|
||||
" return typeof f != \"undefined\" && (!a || f.event.triggered !== a.type) ? f.event.handle.apply(k.elem, arguments) : b\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -165,7 +154,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler1 = function liveDivDblClick() {\n" +
|
||||
handler: "function liveDivDblClick() {\n" +
|
||||
" alert(1);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -220,7 +209,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler4 = function liveDivDragEnd() {\n" +
|
||||
handler: "function liveDivDragEnd() {\n" +
|
||||
" alert(4);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -275,7 +264,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler3 = function liveDivDragLeave() {\n" +
|
||||
handler: "function liveDivDragLeave() {\n" +
|
||||
" alert(3);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -330,7 +319,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler2 = function liveDivDragStart() {\n" +
|
||||
handler: "function liveDivDragStart() {\n" +
|
||||
" alert(2);\n" +
|
||||
"}"
|
||||
},
|
||||
|
@ -87,7 +87,7 @@ const TEST_DATA = [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "ready: function(a) {\n" +
|
||||
handler: "function(a) {\n" +
|
||||
" if (a === !0 && !--e.readyWait || a !== !0 && !e.isReady) {\n" +
|
||||
" if (!c.body) return setTimeout(e.ready, 1);\n" +
|
||||
" e.isReady = !0;\n" +
|
||||
@ -95,6 +95,17 @@ const TEST_DATA = [
|
||||
" B.fireWith(c, [e]), e.fn.trigger && e(c).trigger(\"ready\").unbind(\"ready\")\n" +
|
||||
" }\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "DOMContentLoaded",
|
||||
filename: URL_ROOT + TEST_LIB + ":2",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "function() {\n" +
|
||||
" c.removeEventListener(\"DOMContentLoaded\", C, !1), e.ready()\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -107,7 +118,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -117,41 +128,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "h.handle = i = function(a) {\n" +
|
||||
" return typeof f != \"undefined\" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "h.handle = i = function(a) {\n" +
|
||||
" return typeof f != \"undefined\" && (!a || f.event.triggered !== a.type) ? f.event.dispatch.apply(i.elem, arguments) : b\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -165,7 +154,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler1 = function liveDivDblClick() {\n" +
|
||||
handler: "function liveDivDblClick() {\n" +
|
||||
" alert(1);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -176,7 +165,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler4 = function liveDivDragEnd() {\n" +
|
||||
handler: "function liveDivDragEnd() {\n" +
|
||||
" alert(4);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -187,7 +176,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler3 = function liveDivDragLeave() {\n" +
|
||||
handler: "function liveDivDragLeave() {\n" +
|
||||
" alert(3);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -198,7 +187,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler6 = function liveDivDragOver() {\n" +
|
||||
handler: "function liveDivDragOver() {\n" +
|
||||
" alert(6);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -209,7 +198,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler2 = function liveDivDragStart() {\n" +
|
||||
handler: "function liveDivDragStart() {\n" +
|
||||
" alert(2);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -220,7 +209,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler5 = function liveDivDrop() {\n" +
|
||||
handler: "function liveDivDrop() {\n" +
|
||||
" alert(5);\n" +
|
||||
"}"
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler7 = function divClick1() {\n" +
|
||||
handler: "function divClick1() {\n" +
|
||||
" alert(7);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -101,41 +101,19 @@ const TEST_DATA = [
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler8 = function divClick2() {\n" +
|
||||
handler: "function divClick2() {\n" +
|
||||
" alert(8);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "click",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "g = r.handle = function(b) {\n" +
|
||||
" return typeof n !== U && n.event.triggered !== b.type ? n.event.dispatch.apply(a, arguments) : void 0\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: TEST_URL + ":36",
|
||||
attributes: [
|
||||
"jQuery"
|
||||
],
|
||||
handler: "var handler9 = function divKeyDown() {\n" +
|
||||
handler: "function divKeyDown() {\n" +
|
||||
" alert(9);\n" +
|
||||
"}"
|
||||
},
|
||||
{
|
||||
type: "keydown",
|
||||
filename: URL_ROOT + TEST_LIB + ":3",
|
||||
attributes: [
|
||||
"Bubbling",
|
||||
"DOM2"
|
||||
],
|
||||
handler: "g = r.handle = function(b) {\n" +
|
||||
" return typeof n !== U && n.event.triggered !== b.type ? n.event.dispatch.apply(a, arguments) : void 0\n" +
|
||||
"}"
|
||||
}
|
||||
]
|
||||
},
|
||||
@ -149,7 +127,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler4 = function liveDivDragEnd() {\n" +
|
||||
handler: "function liveDivDragEnd() {\n" +
|
||||
" alert(4);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -160,7 +138,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler3 = function liveDivDragLeave() {\n" +
|
||||
handler: "function liveDivDragLeave() {\n" +
|
||||
" alert(3);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -171,7 +149,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler6 = function liveDivDragOver() {\n" +
|
||||
handler: "function liveDivDragOver() {\n" +
|
||||
" alert(6);\n" +
|
||||
"}"
|
||||
},
|
||||
@ -182,7 +160,7 @@ const TEST_DATA = [
|
||||
"jQuery",
|
||||
"Live"
|
||||
],
|
||||
handler: "var handler5 = function liveDivDrop() {\n" +
|
||||
handler: "function liveDivDrop() {\n" +
|
||||
" alert(5);\n" +
|
||||
"}"
|
||||
}
|
||||
|
@ -8,10 +8,7 @@
|
||||
#anon-generator,
|
||||
#named-function-expression,
|
||||
#anon-function-expression,
|
||||
#returned-function,
|
||||
#constructed-function,
|
||||
#constructed-function-with-body-string,
|
||||
#multiple-assignment {
|
||||
#returned-function {
|
||||
border: 1px solid #000;
|
||||
width: 200px;
|
||||
min-height: 1em;
|
||||
@ -34,19 +31,10 @@
|
||||
}
|
||||
})();
|
||||
|
||||
let constructedFunc = new Function();
|
||||
|
||||
let constructedFuncWithBodyString =
|
||||
new Function('a', 'b', 'c', 'alert("constructedFuncWithBodyString");');
|
||||
|
||||
let multipleAssignment = foo = bar = function multi() {
|
||||
alert("multipleAssignment");
|
||||
}
|
||||
|
||||
function init() {
|
||||
let he = new handleEventClick();
|
||||
let em = new Es6Method();
|
||||
let es6Method = document.getElementById("es6-method");
|
||||
es6Method.addEventListener("click", he.es6Method);
|
||||
es6Method.addEventListener("click", em.es6Method);
|
||||
|
||||
let generatorNode = document.getElementById("generator");
|
||||
generatorNode.addEventListener("click", generator);
|
||||
@ -68,31 +56,32 @@
|
||||
|
||||
let returnedFunctionNode = document.getElementById("returned-function");
|
||||
returnedFunctionNode.addEventListener("click", returnedFunction);
|
||||
|
||||
let constructedFunctionNode =
|
||||
document.getElementById("constructed-function");
|
||||
constructedFunctionNode.addEventListener("click", constructedFunc);
|
||||
|
||||
let constructedFunctionWithBodyStringNode =
|
||||
document.getElementById("constructed-function-with-body-string");
|
||||
constructedFunctionWithBodyStringNode
|
||||
.addEventListener("click", constructedFuncWithBodyString);
|
||||
|
||||
let multipleAssignmentNode =
|
||||
document.getElementById("multiple-assignment");
|
||||
multipleAssignmentNode.addEventListener("click", multipleAssignment);
|
||||
}
|
||||
|
||||
function handleEventClick(hehe) {
|
||||
function Es6Method(hehe) {
|
||||
|
||||
}
|
||||
|
||||
handleEventClick.prototype = {
|
||||
es6Method() {
|
||||
Es6Method.prototype = {
|
||||
es6Method(foo, bar) {
|
||||
alert("obj.es6Method");
|
||||
}
|
||||
};
|
||||
|
||||
function HandleEvent() {
|
||||
let handleEventNode = document.getElementById("handleEvent");
|
||||
handleEventNode.addEventListener("click", this);
|
||||
}
|
||||
|
||||
HandleEvent.prototype = {
|
||||
handleEvent: function(event) {
|
||||
switch (event.type) {
|
||||
case "click":
|
||||
alert("handleEvent click");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function* generator() {
|
||||
alert("generator");
|
||||
}
|
||||
@ -106,10 +95,5 @@
|
||||
<div id="named-function-expression">Named Function Expression</div>
|
||||
<div id="anon-function-expression">Anonymous Function Expression</div>
|
||||
<div id="returned-function">Returned Function</div>
|
||||
<div id="constructed-function">Constructed Function</div>
|
||||
<div id="constructed-function-with-body-string">
|
||||
Constructed Function with body string
|
||||
</div>
|
||||
<div id="multiple-assignment">Multiple Assignment</div>
|
||||
</body>
|
||||
</html>
|
101
devtools/client/inspector/markup/test/doc_markup_events_04.html
Normal file
@ -0,0 +1,101 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<style>
|
||||
#constructed-function,
|
||||
#constructed-function-with-body-string,
|
||||
#multiple-assignment,
|
||||
#promise,
|
||||
#arraysort,
|
||||
#handleEvent {
|
||||
border: 1px solid #000;
|
||||
width: 200px;
|
||||
min-height: 1em;
|
||||
cursor: pointer;
|
||||
}
|
||||
</style>
|
||||
<script type="application/javascript;version=1.8">
|
||||
let constructedFunc = new Function();
|
||||
|
||||
let constructedFuncWithBodyString =
|
||||
new Function('a', 'b', 'c', 'alert("constructedFuncWithBodyString");');
|
||||
|
||||
let multipleAssignment = foo = bar = function multi() {
|
||||
alert("multipleAssignment");
|
||||
}
|
||||
|
||||
function init() {
|
||||
let constructedFunctionNode =
|
||||
document.getElementById("constructed-function");
|
||||
constructedFunctionNode.addEventListener("click", constructedFunc);
|
||||
|
||||
let constructedFunctionWithBodyStringNode =
|
||||
document.getElementById("constructed-function-with-body-string");
|
||||
constructedFunctionWithBodyStringNode
|
||||
.addEventListener("click", constructedFuncWithBodyString);
|
||||
|
||||
let multipleAssignmentNode =
|
||||
document.getElementById("multiple-assignment");
|
||||
multipleAssignmentNode.addEventListener("click", multipleAssignment);
|
||||
|
||||
let promiseNode = document.getElementById("promise");
|
||||
new Promise((resolve, reject) => {
|
||||
promiseNode.addEventListener("click", resolve);
|
||||
});
|
||||
|
||||
let arraySortNode = document.getElementById("arraysort");
|
||||
arraySortNode.addEventListener("click", Array.sort);
|
||||
|
||||
new HandleEvent();
|
||||
|
||||
document.addEventListener("click", function(foo, bar) {
|
||||
alert("document event listener clicked");
|
||||
});
|
||||
|
||||
document.documentElement.addEventListener("click", function(foo2, bar2) {
|
||||
alert("documentElement event listener clicked");
|
||||
});
|
||||
}
|
||||
|
||||
function Es6Method(hehe) {
|
||||
|
||||
}
|
||||
|
||||
Es6Method.prototype = {
|
||||
es6Method(foo, bar) {
|
||||
alert("obj.es6Method");
|
||||
}
|
||||
};
|
||||
|
||||
function HandleEvent() {
|
||||
let handleEventNode = document.getElementById("handleEvent");
|
||||
handleEventNode.addEventListener("click", this);
|
||||
}
|
||||
|
||||
HandleEvent.prototype = {
|
||||
handleEvent: function(event) {
|
||||
switch (event.type) {
|
||||
case "click":
|
||||
alert("handleEvent click");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
function* generator() {
|
||||
alert("generator");
|
||||
}
|
||||
</script>
|
||||
</head>
|
||||
<body onload="init();">
|
||||
<h1>Events test 4</h1>
|
||||
<div id="constructed-function">Constructed Function</div>
|
||||
<div id="constructed-function-with-body-string">
|
||||
Constructed Function with body string
|
||||
</div>
|
||||
<div id="multiple-assignment">Multiple Assignment</div>
|
||||
<div id="promise">Promise</div>
|
||||
<div id="arraysort">Array.sort</div>
|
||||
<div id="handleEvent">HandleEvent</div>
|
||||
</body>
|
||||
</html>
|
288
devtools/client/inspector/markup/test/helper_diff.js
Normal file
@ -0,0 +1,288 @@
|
||||
/**
|
||||
* This diff utility is taken from:
|
||||
* https://github.com/Slava/diff.js
|
||||
*
|
||||
* The MIT License (MIT)
|
||||
*
|
||||
* Copyright (c) 2014 Slava
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
/* eslint-disable */
|
||||
|
||||
/**
|
||||
* USAGE:
|
||||
* diff(text1, text2);
|
||||
*/
|
||||
|
||||
/**
|
||||
* Longest Common Subsequence
|
||||
*
|
||||
* @param A - sequence of atoms - Array
|
||||
* @param B - sequence of atoms - Array
|
||||
* @param equals - optional comparator of atoms - returns true or false,
|
||||
* if not specified, triple equals operator is used
|
||||
* @returns Array - sequence of atoms, one of LCSs, edit script from A to B
|
||||
*/
|
||||
var LCS = function (A, B, /* optional */ equals) {
|
||||
// We just compare atoms with default equals operator by default
|
||||
if (equals === undefined)
|
||||
equals = function (a, b) { return a === b; };
|
||||
|
||||
// NOTE: all intervals from now on are both sides inclusive
|
||||
// Get the points in Edit Graph, one of the LCS paths goes through.
|
||||
// The points are located on the same diagonal and represent the middle
|
||||
// snake ([D/2] out of D+1) in the optimal edit path in edit graph.
|
||||
// @param startA, endA - substring of A we are working on
|
||||
// @param startB, endB - substring of B we are working on
|
||||
// @returns Array - [
|
||||
// [x, y], - beginning of the middle snake
|
||||
// [u, v], - end of the middle snake
|
||||
// D, - optimal edit distance
|
||||
// LCS ] - length of LCS
|
||||
var findMidSnake = function (startA, endA, startB, endB) {
|
||||
var N = endA - startA + 1;
|
||||
var M = endB - startB + 1;
|
||||
var Max = N + M;
|
||||
var Delta = N - M;
|
||||
var halfMaxCeil = (Max + 1) / 2 | 0;
|
||||
|
||||
var foundOverlap = false;
|
||||
var overlap = null;
|
||||
|
||||
// Maps -Max .. 0 .. +Max, diagonal index to endpoints for furthest reaching
|
||||
// D-path on current iteration.
|
||||
var V = {};
|
||||
// Same but for reversed paths.
|
||||
var U = {};
|
||||
|
||||
// Special case for the base case, D = 0, k = 0, x = y = 0
|
||||
V[1] = 0;
|
||||
// Special case for the base case reversed, D = 0, k = 0, x = N, y = M
|
||||
U[Delta - 1] = N;
|
||||
|
||||
// Iterate over each possible length of edit script
|
||||
for (var D = 0; D <= halfMaxCeil; D++) {
|
||||
// Iterate over each diagonal
|
||||
for (var k = -D; k <= D && !overlap; k += 2) {
|
||||
// Positions in sequences A and B of furthest going D-path on diagonal k.
|
||||
var x, y;
|
||||
|
||||
// Choose from each diagonal we extend
|
||||
if (k === -D || (k !== D && V[k - 1] < V[k + 1]))
|
||||
// Extending path one point down, that's why x doesn't change, y
|
||||
// increases implicitly
|
||||
x = V[k + 1];
|
||||
else
|
||||
// Extending path one point to the right, x increases
|
||||
x = V[k - 1] + 1;
|
||||
|
||||
// We can calculate the y out of x and diagonal index.
|
||||
y = x - k;
|
||||
|
||||
if (isNaN(y) || x > N || y > M)
|
||||
continue;
|
||||
|
||||
var xx = x;
|
||||
// Try to extend the D-path with diagonal paths. Possible only if atoms
|
||||
// A_x match B_y
|
||||
while (x < N && y < M // if there are atoms to compare
|
||||
&& equals(A[startA + x], B[startB + y])) {
|
||||
x++; y++;
|
||||
}
|
||||
|
||||
// We can safely update diagonal k, since on every iteration we consider
|
||||
// only even or only odd diagonals and the result of one depends only on
|
||||
// diagonals of different iteration.
|
||||
V[k] = x;
|
||||
|
||||
// Check feasibility, Delta is checked for being odd.
|
||||
if ((Delta & 1) === 1 && inRange(k, Delta - (D - 1), Delta + (D - 1)))
|
||||
// Forward D-path can overlap with reversed D-1-path
|
||||
if (V[k] >= U[k])
|
||||
// Found an overlap, the middle snake, convert X-components to dots
|
||||
overlap = [xx, x].map(toPoint, k); // XXX ES5
|
||||
}
|
||||
|
||||
if (overlap)
|
||||
var SES = D * 2 - 1;
|
||||
|
||||
// Iterate over each diagonal for reversed case
|
||||
for (var k = -D; k <= D && !overlap; k += 2) {
|
||||
// The real diagonal we are looking for is k + Delta
|
||||
var K = k + Delta;
|
||||
var x, y;
|
||||
if (k === D || (k !== -D && U[K - 1] < U[K + 1]))
|
||||
x = U[K - 1];
|
||||
else
|
||||
x = U[K + 1] - 1;
|
||||
|
||||
y = x - K;
|
||||
if (isNaN(y) || x < 0 || y < 0)
|
||||
continue;
|
||||
var xx = x;
|
||||
while (x > 0 && y > 0 && equals(A[startA + x - 1], B[startB + y - 1])) {
|
||||
x--; y--;
|
||||
}
|
||||
U[K] = x;
|
||||
|
||||
if (Delta % 2 === 0 && inRange(K, -D, D))
|
||||
if (U[K] <= V[K])
|
||||
overlap = [x, xx].map(toPoint, K); // XXX ES5
|
||||
}
|
||||
|
||||
if (overlap) {
|
||||
SES = SES || D * 2;
|
||||
// Remember we had offset of each sequence?
|
||||
for (var i = 0; i < 2; i++) for (var j = 0; j < 2; j++)
|
||||
overlap[i][j] += [startA, startB][j] - i;
|
||||
return overlap.concat([ SES, (Max - SES) / 2 ]);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var lcsAtoms = [];
|
||||
var lcs = function (startA, endA, startB, endB) {
|
||||
var N = endA - startA + 1;
|
||||
var M = endB - startB + 1;
|
||||
|
||||
if (N > 0 && M > 0) {
|
||||
var middleSnake = findMidSnake(startA, endA, startB, endB);
|
||||
// A[x;u] == B[y,v] and is part of LCS
|
||||
var x = middleSnake[0][0], y = middleSnake[0][1];
|
||||
var u = middleSnake[1][0], v = middleSnake[1][1];
|
||||
var D = middleSnake[2];
|
||||
|
||||
if (D > 1) {
|
||||
lcs(startA, x - 1, startB, y - 1);
|
||||
if (x <= u) {
|
||||
[].push.apply(lcsAtoms, A.slice(x, u + 1));
|
||||
}
|
||||
lcs(u + 1, endA, v + 1, endB);
|
||||
} else if (M > N)
|
||||
[].push.apply(lcsAtoms, A.slice(startA, endA + 1));
|
||||
else
|
||||
[].push.apply(lcsAtoms, B.slice(startB, endB + 1));
|
||||
}
|
||||
};
|
||||
|
||||
lcs(0, A.length - 1, 0, B.length - 1);
|
||||
return lcsAtoms;
|
||||
};
|
||||
|
||||
// Helpers
|
||||
var inRange = function (x, l, r) {
|
||||
return (l <= x && x <= r) || (r <= x && x <= l);
|
||||
};
|
||||
|
||||
// Takes X-component as argument, diagonal as context,
|
||||
// returns array-pair of form x, y
|
||||
var toPoint = function (x) {
|
||||
return [x, x - this]; // XXX context is not the best way to pass diagonal
|
||||
};
|
||||
|
||||
// Wrappers
|
||||
LCS.StringLCS = function (A, B) {
|
||||
return LCS(A.split(''), B.split('')).join('');
|
||||
};
|
||||
|
||||
/**
|
||||
* Diff sequence
|
||||
*
|
||||
* @param A - sequence of atoms - Array
|
||||
* @param B - sequence of atoms - Array
|
||||
* @param equals - optional comparator of atoms - returns true or false,
|
||||
* if not specified, triple equals operator is used
|
||||
* @returns Array - sequence of objects in a form of:
|
||||
* - operation: one of "none", "add", "delete"
|
||||
* - atom: the atom found in either A or B
|
||||
* Applying operations from diff sequence you should be able to transform A to B
|
||||
*/
|
||||
function diff(A, B, equals) {
|
||||
// We just compare atoms with default equals operator by default
|
||||
if (equals === undefined)
|
||||
equals = function (a, b) { return a === b; };
|
||||
|
||||
var diff = [];
|
||||
var i = 0, j = 0;
|
||||
var N = A.length, M = B.length, K = 0;
|
||||
|
||||
while (i < N && j < M && equals(A[i], B[j]))
|
||||
i++, j++;
|
||||
|
||||
while (i < N && j < M && equals(A[N-1], B[M-1]))
|
||||
N--, M--, K++;
|
||||
|
||||
[].push.apply(diff, A.slice(0, i).map(function (atom) {
|
||||
return { operation: "none", atom: atom }; }));
|
||||
|
||||
var lcs = LCS(A.slice(i, N), B.slice(j, M), equals);
|
||||
|
||||
for (var k = 0; k < lcs.length; k++) {
|
||||
var atom = lcs[k];
|
||||
var ni = customIndexOf.call(A, atom, i, equals);
|
||||
var nj = customIndexOf.call(B, atom, j, equals);
|
||||
|
||||
// XXX ES5 map
|
||||
// Delete unmatched atoms from A
|
||||
[].push.apply(diff, A.slice(i, ni).map(function (atom) {
|
||||
return { operation: "delete", atom: atom };
|
||||
}));
|
||||
|
||||
// Add unmatched atoms from B
|
||||
[].push.apply(diff, B.slice(j, nj).map(function (atom) {
|
||||
return { operation: "add", atom: atom };
|
||||
}));
|
||||
|
||||
// Add the atom found in both sequences
|
||||
diff.push({ operation: "none", atom: atom });
|
||||
|
||||
i = ni + 1;
|
||||
j = nj + 1;
|
||||
}
|
||||
|
||||
// Don't forget about the rest
|
||||
|
||||
[].push.apply(diff, A.slice(i, N).map(function (atom) {
|
||||
return { operation: "delete", atom: atom };
|
||||
}));
|
||||
|
||||
[].push.apply(diff, B.slice(j, M).map(function (atom) {
|
||||
return { operation: "add", atom: atom };
|
||||
}));
|
||||
|
||||
[].push.apply(diff, A.slice(N, N + K).map(function (atom) {
|
||||
return { operation: "none", atom: atom }; }));
|
||||
|
||||
return diff;
|
||||
};
|
||||
|
||||
// Accepts custom comparator
|
||||
var customIndexOf = function(item, start, equals){
|
||||
var arr = this;
|
||||
for (var i = start; i < arr.length; i++)
|
||||
if (equals(item, arr[i]))
|
||||
return i;
|
||||
return -1;
|
||||
};
|
||||
|
||||
function textDiff(text1, text2) {
|
||||
return diff(text1.split("\n"), text2.split("\n"));
|
||||
}
|
@ -3,8 +3,11 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
/* eslint no-unused-vars: [2, {"vars": "local"}] */
|
||||
/* import-globals-from head.js */
|
||||
/* import-globals-from helper_diff.js */
|
||||
"use strict";
|
||||
|
||||
loadHelperScript("helper_diff.js");
|
||||
|
||||
/**
|
||||
* Generator function that runs checkEventsForNode() for each object in the
|
||||
* TEST_DATA array.
|
||||
@ -83,6 +86,8 @@ function* checkEventsForNode(test, inspector, testActor) {
|
||||
let attributes = header.querySelectorAll(".event-tooltip-attributes");
|
||||
let contentBox = header.nextElementSibling;
|
||||
|
||||
info("Looking for " + type.textContent);
|
||||
|
||||
is(type.textContent, expected[i].type,
|
||||
"type matches for " + cssSelector);
|
||||
is(filename.textContent, expected[i].filename,
|
||||
@ -103,9 +108,47 @@ function* checkEventsForNode(test, inspector, testActor) {
|
||||
yield tooltip.once("event-tooltip-ready");
|
||||
|
||||
let editor = tooltip.eventTooltip._eventEditors.get(contentBox).editor;
|
||||
is(editor.getText(), expected[i].handler,
|
||||
"handler matches for " + cssSelector);
|
||||
testDiff(editor.getText(), expected[i].handler,
|
||||
"handler matches for " + cssSelector, ok);
|
||||
}
|
||||
|
||||
tooltip.hide();
|
||||
}
|
||||
|
||||
/**
|
||||
* Create diff of two strings.
|
||||
*
|
||||
* @param {String} text1
|
||||
* String to compare with text2.
|
||||
* @param {String} text2 [description]
|
||||
* String to compare with text1.
|
||||
* @param {String} msg
|
||||
* Message to display on failure. A diff will be displayed after this
|
||||
* message.
|
||||
*/
|
||||
function testDiff(text1, text2, msg) {
|
||||
let out = "";
|
||||
|
||||
if (text1 === text2) {
|
||||
ok(true, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
let result = textDiff(text1, text2);
|
||||
|
||||
for (let {atom, operation} of result) {
|
||||
switch (operation) {
|
||||
case "add":
|
||||
out += "+ " + atom + "\n";
|
||||
break;
|
||||
case "delete":
|
||||
out += "- " + atom + "\n";
|
||||
break;
|
||||
case "none":
|
||||
out += " " + atom + "\n";
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ok(false, msg + "\nDIFF:\n==========\n" + out + "==========\n");
|
||||
}
|
||||
|
@ -673,6 +673,12 @@ MarkupContainer.prototype = {
|
||||
},
|
||||
|
||||
_onToggle: function (event) {
|
||||
// Prevent the html tree from expanding when an event bubble is clicked.
|
||||
if (event.target.dataset.event) {
|
||||
event.stopPropagation();
|
||||
return;
|
||||
}
|
||||
|
||||
this.markup.navigate(this);
|
||||
if (this.hasChildren) {
|
||||
this.markup.setNodeExpanded(this.node, !this.expanded, event.altKey);
|
||||
|
@ -235,20 +235,6 @@ devtools.jar:
|
||||
skin/floating-scrollbars-responsive-design.css (themes/floating-scrollbars-responsive-design.css)
|
||||
skin/inspector.css (themes/inspector.css)
|
||||
skin/images/profiler-stopwatch.svg (themes/images/profiler-stopwatch.svg)
|
||||
skin/images/emojis/emoji-command-pick.svg (themes/images/emojis/emoji-command-pick.svg)
|
||||
skin/images/emojis/emoji-tool-webconsole.svg (themes/images/emojis/emoji-tool-webconsole.svg)
|
||||
skin/images/emojis/emoji-tool-canvas.svg (themes/images/emojis/emoji-tool-canvas.svg)
|
||||
skin/images/emojis/emoji-tool-debugger.svg (themes/images/emojis/emoji-tool-debugger.svg)
|
||||
skin/images/emojis/emoji-tool-inspector.svg (themes/images/emojis/emoji-tool-inspector.svg)
|
||||
skin/images/emojis/emoji-tool-shadereditor.svg (themes/images/emojis/emoji-tool-shadereditor.svg)
|
||||
skin/images/emojis/emoji-tool-styleeditor.svg (themes/images/emojis/emoji-tool-styleeditor.svg)
|
||||
skin/images/emojis/emoji-tool-storage.svg (themes/images/emojis/emoji-tool-storage.svg)
|
||||
skin/images/emojis/emoji-tool-profiler.svg (themes/images/emojis/emoji-tool-profiler.svg)
|
||||
skin/images/emojis/emoji-tool-network.svg (themes/images/emojis/emoji-tool-network.svg)
|
||||
skin/images/emojis/emoji-tool-scratchpad.svg (themes/images/emojis/emoji-tool-scratchpad.svg)
|
||||
skin/images/emojis/emoji-tool-webaudio.svg (themes/images/emojis/emoji-tool-webaudio.svg)
|
||||
skin/images/emojis/emoji-tool-memory.svg (themes/images/emojis/emoji-tool-memory.svg)
|
||||
skin/images/emojis/emoji-tool-dom.svg (themes/images/emojis/emoji-tool-dom.svg)
|
||||
skin/images/debugging-addons.svg (themes/images/debugging-addons.svg)
|
||||
skin/images/debugging-devices.svg (themes/images/debugging-devices.svg)
|
||||
skin/images/debugging-tabs.svg (themes/images/debugging-tabs.svg)
|
||||
|
@ -9,6 +9,7 @@
|
||||
const {LocalizationHelper} = require("devtools/shared/l10n");
|
||||
const L10N = new LocalizationHelper("devtools/client/locales/inspector.properties");
|
||||
|
||||
const viewSource = require("devtools/client/shared/view-source");
|
||||
const Editor = require("devtools/client/sourceeditor/editor");
|
||||
const beautify = require("devtools/shared/jsbeautify/beautify");
|
||||
|
||||
@ -79,6 +80,10 @@ EventTooltip.prototype = {
|
||||
let openInDebugger = L10N.getStr("eventsTooltip.openInDebugger");
|
||||
debuggerIcon.setAttribute("title", openInDebugger);
|
||||
header.appendChild(debuggerIcon);
|
||||
} else {
|
||||
let debuggerDiv = doc.createElementNS(XHTML_NS, "div");
|
||||
debuggerDiv.className = "event-tooltip-debugger-spacer";
|
||||
header.appendChild(debuggerDiv);
|
||||
}
|
||||
|
||||
if (!listener.hide.type) {
|
||||
@ -145,10 +150,10 @@ EventTooltip.prototype = {
|
||||
this._eventEditors.set(content, {
|
||||
editor: editor,
|
||||
handler: listener.handler,
|
||||
searchString: listener.searchString,
|
||||
uri: listener.origin,
|
||||
dom0: listener.DOM0,
|
||||
appended: false
|
||||
native: listener.native,
|
||||
appended: false,
|
||||
});
|
||||
|
||||
content.className = "event-tooltip-content-box";
|
||||
@ -222,7 +227,7 @@ EventTooltip.prototype = {
|
||||
let header = event.currentTarget;
|
||||
let content = header.nextElementSibling;
|
||||
|
||||
let {uri, searchString, dom0} = this._eventEditors.get(content);
|
||||
let {uri} = this._eventEditors.get(content);
|
||||
|
||||
if (uri && uri !== "?") {
|
||||
// Save a copy of toolbox as it will be set to null when we hide the tooltip.
|
||||
@ -232,51 +237,15 @@ EventTooltip.prototype = {
|
||||
|
||||
uri = uri.replace(/"/g, "");
|
||||
|
||||
let showSource = ({ DebuggerView }) => {
|
||||
let matches = uri.match(/(.*):(\d+$)/);
|
||||
let line = 1;
|
||||
let matches = uri.match(/(.*):(\d+$)/);
|
||||
let line = 1;
|
||||
|
||||
if (matches) {
|
||||
uri = matches[1];
|
||||
line = matches[2];
|
||||
}
|
||||
if (matches) {
|
||||
uri = matches[1];
|
||||
line = matches[2];
|
||||
}
|
||||
|
||||
let item = DebuggerView.Sources.getItemForAttachment(a => a.source.url === uri);
|
||||
if (item) {
|
||||
let actor = item.attachment.source.actor;
|
||||
DebuggerView.setEditorLocation(
|
||||
actor, line, {noDebug: true}
|
||||
).then(() => {
|
||||
if (dom0) {
|
||||
let text = DebuggerView.editor.getText();
|
||||
let index = text.indexOf(searchString);
|
||||
let lastIndex = text.lastIndexOf(searchString);
|
||||
|
||||
// To avoid confusion we only search for DOM0 event handlers when
|
||||
// there is only one possible match in the file.
|
||||
if (index !== -1 && index === lastIndex) {
|
||||
text = text.substr(0, index);
|
||||
let newlineMatches = text.match(/\n/g);
|
||||
|
||||
if (newlineMatches) {
|
||||
DebuggerView.editor.setCursor({
|
||||
line: newlineMatches.length
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
let debuggerAlreadyOpen = toolbox.getPanel("jsdebugger");
|
||||
toolbox.selectTool("jsdebugger").then(({ panelWin: dbg }) => {
|
||||
if (debuggerAlreadyOpen) {
|
||||
showSource(dbg);
|
||||
} else {
|
||||
dbg.once(dbg.EVENTS.SOURCES_ADDED, () => showSource(dbg));
|
||||
}
|
||||
});
|
||||
viewSource.viewSourceInDebugger(toolbox, uri, line);
|
||||
}
|
||||
},
|
||||
|
||||
|
@ -1,7 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" opacity="1.0">
|
||||
<path fill="#C89979" d="M57.2 20.6c-1 0-2 .4-2.7 1 0 0-.1 0-.2.1-.8.8-1.6.8-2.4 0-.7-.7-1.7-1.1-2.8-1.1-1.1 0-2 .4-2.7 1 0 0-.1 0-.2.1-.8.8-1.6.8-2.4.1-.7-.7-1.8-1.2-2.9-1.2-1.1 0-2 .4-2.7 1 0 0-.1 0-.2.1-.3.3-.6.5-.9.6V4c0-2.2-1.8-4.1-4.1-4.1S29 1.7 29 4v35c-1-1.2-1.9-1.6-3.2-2.9-7.2-6.9-10.7-5-12.3-3.6-1.5 1.5-1.1 4 .5 5.5 7.9 6.8 12.1 17.5 13.8 20.8 0 0 0 .1.1.1.2.4.4.7.5.8 1 1.4 2.3 2.5 3.8 3.2V69c0 1.6 1.3 2.9 2.9 2.9h18.6c1.6 0 2.9-1.3 2.9-2.9v-8c2.8-2.3 4.6-5.9 4.6-9.8V24.7c.1-2.3-1.8-4.1-4-4.1z"/>
|
||||
<path fill="#AD7E5E" d="M48.6 63.9h-.2H36.1c-1.4 0-2.7-.3-3.9-.9v1.3c0 1.2 1 2.2 2.2 2.2h20c1.2 0 2.2-1 2.2-2.2V61c-2.2 1.8-5 2.9-8 2.9z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 975 B |
@ -1,11 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" opacity="1.0">
|
||||
<path fill="#98D4FA" d="M488.95 10.383H21.717c-6.6 0-12 5.4-12 12v467.234c0 6.6 5.4 12 12 12H488.95c6.6 0 12-5.4 12-12V22.383c0-6.6-5.4-12-12-12z"/>
|
||||
<path fill="#0096D1" d="M215.218 489.383c0 4.1.107 8.176.278 12.234h40.953c-.2-4.053-.306-8.132-.306-12.234 0-135.203 109.604-244.807 244.807-244.807V203.65c-157.805 0-285.732 127.927-285.732 285.733z"/>
|
||||
<path fill="#21C14B" d="M167.45 489.383c0 4.098.1 8.172.247 12.234h47.8c-.172-4.06-.28-8.134-.28-12.234 0-157.806 127.928-285.733 285.734-285.733v-47.768c-184.187 0-333.5 149.313-333.5 333.5z"/>
|
||||
<path fill="#FFD469" d="M121.973 489.383c0 4.094.073 8.17.2 12.234h45.524c-.147-4.062-.247-8.136-.247-12.234 0-184.187 149.313-333.5 333.5-333.5v-45.478c-209.303 0-378.977 169.674-378.977 378.978z"/>
|
||||
<path fill="#FF7B39" d="M70.294 489.383c0 4.092.063 8.17.176 12.234h51.704c-.13-4.063-.2-8.14-.2-12.234 0-209.304 169.673-378.978 378.977-378.978v-51.68c-237.845 0-430.656 192.813-430.656 430.658z"/>
|
||||
<path fill="#FF473E" d="M488.95 10.383H400.24c-221.962 46.434-388.67 243.245-388.67 479 0 2.228.017 4.45.047 6.672 2.138 3.335 5.868 5.563 10.102 5.563H70.47c-.113-4.065-.176-8.142-.176-12.234 0-237.845 192.812-430.657 430.657-430.657V22.383c0-6.6-5.4-12-12-12z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.5 KiB |
@ -1,11 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" opacity="1.0">
|
||||
<path fill="#EDC0A2" d="M44.3 11.6c-.2 0-.5 0-.7.1V6.4c0-2.2-1.8-4-4-4-1.7 0-3.1 1-3.7 2.4-.6-1.4-2-2.4-3.7-2.4-2.2 0-4 1.8-4 4v5.3c-.2 0-.5-.1-.7-.1-2.2 0-4 1.8-4 4v31.7c0 2.2 1.8 4 4 4 1.1 0 2.2-.5 2.9-1.2.5.3 1.2.5 1.8.5v.2h10.1c.6.3 1.2.5 2 .5 2.2 0 4-1.8 4-4V15.6c0-2.2-1.7-4-4-4z"/>
|
||||
<path fill="#357BA8" d="M66.7 44.5c-.3-.5-.6-.9-1-1.3-3.5-3.5-10.8-1.7-16.4 3.9-5.6 5.6-7.4 13-3.9 16.4.3.3.5.5.8.7L54 72h17.8l.2-22.2-5.3-5.3z"/>
|
||||
<path fill="#FFD3B6" d="M61.1 42.5c-.2-.4-.5-.8-.9-1.1-6.8-6-14.5-14.8-14.5-17.9V7.7c0-2.2-1.8-4-4-4s-4 1.8-4 4v32.5c0 12.5 7.3 19.7 7.6 20 .6.5 1.4.9 2.2 1.1h.8c1.8 0 5.5-.7 10-5.2 5.2-5.1 4.2-10.9 2.8-13.6z"/>
|
||||
<path fill="#357BA8" d="M22.6 47.1c-5.6-5.6-13-7.4-16.4-3.9-.4.4-.7.8-1 1.3l-5.3 5.3L0 72h17.8l7.8-7.8c.3-.2.6-.4.8-.7 3.6-3.5 1.8-10.8-3.8-16.4z"/>
|
||||
<path fill="#FFD3B6" d="M30.2 3.7c-2.2 0-4 1.8-4 4v15.8c0 3.1-7.6 11.9-14.5 17.9-.4.3-.7.7-.9 1.1-1.4 2.7-2.4 8.5 2.7 13.7 4.5 4.5 8.2 5.2 10 5.2h.8c.8-.1 1.6-.5 2.2-1.1.3-.3 7.6-7.4 7.6-20V7.7c.1-2.2-1.7-4-3.9-4z"/>
|
||||
<path fill="#00BEEA" d="M54.5 13.8c.1 0 .1 0 .2-.1l7.1-4c.1-.1.2-.2.2-.3 0-.1 0-.2-.1-.3L58.8 6c-.1 0-.2-.1-.4 0-.1 0-.2.1-.3.2l-4 7.1c-.1.2-.1.3.1.5h.3zM10.5 9.8l7.1 4c.1 0 .1.1.2.1.3 0 .4-.2.4-.4 0-.1 0-.2-.1-.3l-3.9-7c-.1-.2-.2-.2-.3-.2-.1 0-.2 0-.3.1l-3.1 3.1c-.1.1-.1.2-.1.3 0 .1 0 .2.1.3zM62.1 18.7c-.1-.1-.2-.1-.3-.1L54 20.8c-.2 0-.3.2-.3.4s.1.3.3.4l7.8 2.2h.1c.1 0 .2 0 .2-.1.1-.1.2-.2.2-.3V19c-.1-.1-.1-.3-.2-.3zM18.4 20.8l-7.8-2.2c-.1 0-.2 0-.3.1-.2 0-.3.2-.3.3v4.3c0 .1.1.2.2.3.1.1.2.1.2.1h.1l7.8-2.2c.2 0 .3-.2.3-.4s-.1-.3-.2-.3z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,11 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
|
||||
<path fill="#51BA7B" d="M487.819 258.669H439.1c-10.041 0-18.181-8.14-18.181-18.181s8.14-18.181 18.181-18.181h48.719c10.041 0 18.181 8.14 18.181 18.181s-8.14 18.181-18.181 18.181z"/>
|
||||
<path fill="#BADEBE" d="M415.747 69.674s-.387.603-1.059 1.667a8.05 8.05 0 0 1-.638.799 59.208 59.208 0 0 0-1.057 1.933c-.357.806-.812 1.618-1.199 2.599a55.875 55.875 0 0 0-1.233 3.083c-.433 1.086-.783 2.248-1.19 3.426-.364 1.183-.742 2.395-1.064 3.614-.316 1.219-.645 2.445-.884 3.643-.286 1.219-.475 2.381-.679 3.523-.188 1.142-.308 2.214-.434 3.243-.041.505-.077.988-.118 1.457-.043.483-.07.939-.063 1.338-.007.812-.063 1.646 0 2.221.014.315.034.609.048.882 0 .14.007.273.015.399.014.105.027.209.041.301.113.777.161 1.26.161 1.26l.19 2.025a7.085 7.085 0 0 1-6.396 7.712c-2.829.267-5.421-1.177-6.774-3.467 0 0-.489-.826-1.308-2.353-.099-.189-.204-.392-.316-.603-.084-.203-.181-.413-.274-.63-.195-.448-.398-.932-.616-1.45-.484-1.058-.806-2.164-1.233-3.432a23.41 23.41 0 0 1-.561-1.933c-.174-.665-.349-1.352-.532-2.066-.301-1.387-.622-2.879-.876-4.393-.231-1.506-.491-3.089-.638-4.659-.195-1.583-.308-3.18-.419-4.784-.106-1.604-.147-3.201-.19-4.791 0-1.576-.027-3.145.043-4.665.034-1.513.125-2.998.238-4.42.077-1.408.28-2.802.414-4.063.188-1.31.371-2.48.588-3.622.301-1.31.622-2.529.853-3.411.31-1.212.477-1.913.477-1.913 1.968-7.887 9.967-12.692 17.856-10.724 7.894 1.975 12.691 9.968 10.725 17.862a14.708 14.708 0 0 1-1.815 4.266l-.083.126zm-56.35 17.01a14.892 14.892 0 0 0 1.036-4.518c.559-8.111-5.562-15.145-13.681-15.705-8.118-.56-15.151 5.562-15.711 13.681 0 0-.05.715-.133 1.976a70.1 70.1 0 0 0-.258 4.133c.014.665.055 1.233.091 1.912.048.638.063 1.366.154 2.025.174 1.331.308 2.823.595 4.245l.407 2.221c.168.729.335 1.478.511 2.234.322 1.527.783 3.033 1.19 4.575.477 1.526.91 3.068 1.457 4.574a88.52 88.52 0 0 0 1.654 4.483c.552 1.464 1.211 2.893 1.806 4.259a121.46 121.46 0 0 0 1.905 3.936c.694 1.254 1.255 2.41 1.948 3.496.665 1.086 1.226 2.052 1.864 2.936.622.882 1.079 1.611 1.618 2.248l1.59 1.941c1.849 2.255 4.973 3.243 7.887 2.234 3.74-1.289 5.715-5.373 4.426-9.107l-.469-1.338s-.168-.497-.469-1.366c-.162-.386-.303-1.051-.498-1.688-.204-.631-.357-1.478-.554-2.347-.217-.833-.344-1.891-.532-2.906a93.503 93.503 0 0 1-.428-3.362c-.097-1.198-.231-2.396-.274-3.664a61.991 61.991 0 0 1-.118-3.797c-.029-1.268.041-2.543.063-3.775.091-1.219.111-2.438.251-3.566.063-.56.12-1.121.174-1.661.077-.518.162-1.03.233-1.526.132-1.016.371-1.829.525-2.627.077-.407.21-.693.301-1.016.097-.294.181-.645.267-.841.188-.127.258-.147.342-.294l.751-1.829.079-.176z"/>
|
||||
<path fill="#8ACCA0" d="M456.112 143.24c-11.449-34.634-48.8-53.434-83.441-41.983-34.634 11.449-53.431 48.807-41.982 83.442 17.717 53.598 16.873 94.849-2.59 126.04-1.716 2.393-3.661 5.076-4.907 6.585a66.228 66.228 0 0 0-7.289 6.104 66.535 66.535 0 0 0-3.758 2.035l-2.851 1.674c-.113.077-.154.112-.246.189-.041.035-.077.07-.125.112-.022.021-.029.035-.07.07l-.233.127c-.301.182-.629.371-.973.575-.364.203-.749.413-1.156.637a56.07 56.07 0 0 1-6.494 2.956c-2.711 1.044-6.03 2.109-10.03 3.04a104.442 104.442 0 0 1-13.996 2.179c-5.317.483-11.27.672-17.694.476a202.645 202.645 0 0 1-4.912-.224c-1.597-.105-3.208-.21-4.826-.322-4.134-.393-8.308-.784-12.517-1.191-1.907-.168-3.875-.42-5.821-.623-1.962-.217-3.776-.469-5.681-.693-1.828-.259-3.656-.504-5.437-.777-1.765-.287-3.537-.553-5.288-.882-1.738-.294-3.538-.673-5.331-1.023l-2.774-.603c-.925-.203-1.864-.406-2.865-.652l-2.943-.693-3.095-.77c-2.136-.539-4.26-1.078-6.382-1.618-8.713-2.241-17.861-4.617-26.604-6.732l-1.64-.398-.202-.05-.099-.028c-1.233-.357-.398-.104-.699-.189l-.4-.07-.792-.147a365.722 365.722 0 0 1-3.152-.56c-2.634-.476-5.24-.953-7.824-1.415a44.945 44.945 0 0 0-1.955-.322c-.631-.097-1.26-.196-1.891-.287-1.254-.189-2.5-.371-3.74-.56-2.516-.316-4.966-.658-7.439-.924-9.863-1.1-19.447-1.646-28.545-1.619-9.107.05-17.682.61-25.54 1.661-7.839 1.023-14.949 2.522-21.051 4.175a137.419 137.419 0 0 0-8.419 2.578 129.198 129.198 0 0 0-6.851 2.592c-2.032.847-3.79 1.646-5.204 2.326l-2.039 1.001c-.982.505-1.479.757-1.479.757-26.17 13.548-36.403 45.75-22.857 71.92 13.555 26.178 45.756 36.405 71.927 22.857l-1.45.735c-.301.14-.742.351-1.324.63-.344.155-.848.386-1.507.693-.251.133-.342.203-.21.21.169.015.504-.014 1.072-.063 1.163-.091 3.138-.259 5.955-.231 2.774 0 6.41.231 10.661.757 4.272.54 9.225 1.457 14.668 2.767 1.358.321 2.767.721 4.175 1.071.715.203 1.437.413 2.165.617l1.086.308c.378.105.735.203 1.023.302 1.394.441 2.808.882 4.231 1.331 1.765.575 3.544 1.149 5.337 1.731 7.824 2.472 15.711 5.092 24.357 7.978 2.227.743 4.462 1.478 6.709 2.221l3.496 1.142 3.692 1.17 1.864.589 1.946.588 3.923 1.177c2.704.77 5.387 1.555 8.175 2.269 2.76.75 5.527 1.415 8.294 2.087 2.745.658 5.464 1.248 8.168 1.843 2.634.54 5.344 1.121 7.901 1.604 2.584.476 5.107.981 7.704 1.429 2.543.441 5.072.876 7.586 1.31 2.208.364 4.407.722 6.6 1.086 1.443.217 2.885.427 4.315.644 1.366.182 2.724.371 4.077.553 2.711.351 5.428.666 8.139.946 10.851 1.128 21.682 1.647 32.23 1.513a239.007 239.007 0 0 0 30.479-2.291c9.666-1.366 18.689-3.313 26.716-5.548a191.408 191.408 0 0 0 20.791-7.061c1.428-.595 2.781-1.162 4.055-1.695 1.269-.568 2.459-1.093 3.566-1.59l.812-.364.912-.434c.602-.295 1.177-.568 1.731-.834 1.086-.54 2.073-1.023 2.955-1.464 1.919-.981 2.943-1.5 2.943-1.5l1.975-1.008a66.247 66.247 0 0 0 15.966-11.503 66.576 66.576 0 0 0 6.185-3.588c18.693-12.238 30.142-28.256 38.55-40.018l.926-1.294.862-1.338c23.738-36.839 36.169-79.029 36.947-125.397.602-35.782-5.867-74.417-19.227-114.833z"/>
|
||||
<path fill="#FFF" d="M379.069 155.928l4.301 16.062h-.021c.007.028.027.028.034.042 1.688 6.311-2.059 12.798-8.363 14.486-6.312 1.688-12.799-2.059-14.487-8.364-.007-.014-.007-.021-.014-.049l-.05.014-4.301-16.062.14-.035c-1.057-5.989 2.55-11.887 8.532-13.492 5.969-1.597 12.048 1.709 14.116 7.425l.113-.027zm48.159-20.587c-2.697-5.45-9.107-8.048-14.858-5.792-5.765 2.263-8.693 8.532-6.971 14.367l-.132.049 6.08 15.481.05-.021c.007.021.007.027.014.042 2.387 6.08 9.254 9.071 15.334 6.683 6.08-2.381 9.071-9.254 6.682-15.334 0-.008-.027-.008-.034-.028l.021-.015-6.08-15.474-.106.042z"/>
|
||||
<path fill="#51BA7B" d="M386.722 311.106l40.557 17.233c9.247 3.93 13.555 14.612 9.632 23.859-3.93 9.253-14.619 13.561-23.866 9.632a21.165 21.165 0 0 1-1.24-.581l-39.143-20.223c-8.118-4.196-11.292-14.171-7.104-22.29 3.994-7.728 13.284-10.95 21.164-7.63"/>
|
||||
<path fill="#74C48D" d="M394.574 405.513c-12.623 0-25.31-3.56-36.185-10.523a5.688 5.688 0 0 1 6.134-9.581c15.343 9.826 35.001 11.501 51.304 4.37a5.69 5.69 0 0 1 4.558 10.424c-8.137 3.557-16.959 5.31-25.811 5.31zm-52.133 40.603a5.69 5.69 0 0 0-5.396-5.966c-14.406-.721-28.217-7.446-37.895-18.452a5.689 5.689 0 0 0-8.542 7.513c11.694 13.299 28.412 21.428 45.868 22.301a5.686 5.686 0 0 0 5.965-5.396zm81.464-133.345c15.644-.293 30.09-5.857 41.777-16.091a5.688 5.688 0 0 0-7.496-8.558c-9.641 8.443-21.568 13.033-34.493 13.275a5.69 5.69 0 0 0-5.581 5.794 5.687 5.687 0 0 0 5.684 5.581l.109-.001z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 7.0 KiB |
@ -1,13 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" opacity="1.0">
|
||||
<path fill="#FFB636" d="M378.553 355.648L45.117 500.733c-21.735 8.65-43.335-12.764-34.874-34.572l145.71-338.683"/>
|
||||
<path fill="#FFD469" d="M10.243 466.16l11.58-26.915c.993-1.514 1.983-3.03 2.977-4.543 57.597-87.744 116.038-174.952 176.475-260.768l67.765 69.46C217.91 278.496 51.89 450.064 17.115 495.57c-7.57-6.962-11.25-18.127-6.872-29.41z"/>
|
||||
<path fill="#A06C33" d="M304.382 204.434c61.854 61.854 95.685 128.308 75.564 148.43-20.12 20.12-86.575-13.71-148.43-75.564s-95.685-128.308-75.564-148.43 86.575 13.71 148.43 75.564z"/>
|
||||
<path fill="#F7F9AA" d="M155.6 327.572c0 6.012-4.873 10.885-10.884 10.885s-10.885-4.873-10.885-10.885 4.874-10.885 10.886-10.885 10.885 4.873 10.885 10.885z"/>
|
||||
<path fill="#FFB636" d="M501.986 213.16c0 8.628-6.994 15.622-15.622 15.622s-15.622-6.994-15.622-15.622 6.994-15.622 15.622-15.622 15.622 6.994 15.622 15.622zM397.663 421.182c-8.628 0-15.622 6.994-15.622 15.622s6.995 15.622 15.623 15.622 15.622-6.994 15.622-15.622-6.995-15.622-15.622-15.622z"/>
|
||||
<path fill="#BEA4FF" d="M355.95 79.523c-1.34 9.065-7.198 17.072-16.07 21.968-6.127 3.38-13.33 5.138-20.808 5.138-2.354 0-4.734-.174-7.117-.526-5.288-.782-10.58.016-14.52 2.19-1.766.973-4.8 3.104-5.293 6.437-.492 3.332 1.796 6.25 3.203 7.693 3.058 3.135 7.725 5.38 12.85 6.22.14.015.28.02.42.04 21.62 3.197 37.062 20.32 34.422 38.174-1.34 9.066-7.197 17.073-16.07 21.97-6.127 3.38-13.33 5.136-20.807 5.136-2.354 0-4.734-.174-7.117-.526-5.287-.783-10.582.015-14.52 2.19-1.767.973-4.8 3.104-5.294 6.437-.79 5.35 5.777 12.41 16.47 13.99 5.816.86 9.835 6.274 8.975 12.092-.782 5.29-5.328 9.092-10.52 9.092-.52 0-1.043-.038-1.57-.116-21.62-3.196-37.06-20.32-34.422-38.173 1.34-9.067 7.197-17.074 16.07-21.97 8.056-4.444 17.973-6.082 27.925-4.61 5.288.78 10.58-.017 14.52-2.19 1.766-.974 4.8-3.105 5.293-6.438.778-5.262-5.576-12.17-15.962-13.898-.17-.017-.34-.03-.512-.056-9.95-1.472-18.97-5.908-25.395-12.493-7.076-7.254-10.366-16.614-9.025-25.68 1.34-9.066 7.197-17.073 16.07-21.97 8.055-4.443 17.972-6.08 27.924-4.61 5.285.78 10.58-.016 14.52-2.19 1.765-.973 4.8-3.104 5.292-6.437s-1.796-6.25-3.203-7.694c-3.143-3.22-7.978-5.516-13.268-6.297-5.817-.86-9.836-6.273-8.976-12.09.86-5.82 6.274-9.833 12.09-8.978 9.952 1.47 18.972 5.907 25.396 12.492 7.078 7.255 10.368 16.615 9.027 25.68z"/>
|
||||
<path fill="#FF6E83" d="M81.73 159.69c0 9.776-7.925 17.702-17.702 17.702s-17.703-7.926-17.703-17.703c0-9.778 7.926-17.704 17.703-17.704S81.73 149.91 81.73 159.69zm316.446-20.454c-11.296 0-20.452 9.157-20.452 20.452s9.157 20.452 20.452 20.452 20.452-9.157 20.452-20.452-9.156-20.452-20.452-20.452zM215.53 395.9c-11.297 0-20.453 9.156-20.453 20.45s9.157 20.453 20.452 20.453c11.295 0 20.45-9.157 20.45-20.452s-9.155-20.45-20.45-20.45zm271.302-93.647c3.093-5.99.745-13.352-5.244-16.445-2.388-1.232-5.238-2.868-8.538-4.76-28.993-16.634-89.32-51.243-160.352 6.108-5.245 4.234-6.063 11.92-1.83 17.163 4.234 5.244 11.918 6.064 17.164 1.828 58.035-46.856 104.882-19.985 132.87-3.928 3.404 1.952 6.618 3.796 9.484 5.276 1.79.925 3.705 1.363 5.59 1.363 4.42 0 8.688-2.41 10.856-6.607z"/>
|
||||
<path fill="#59CAFC" d="M434.834 62.776c0 6.012-4.874 10.885-10.885 10.885-6.013 0-10.886-4.872-10.886-10.884s4.873-10.885 10.885-10.885c6.01 0 10.884 4.874 10.884 10.886zM46.324 11.894c-6.012 0-10.885 4.873-10.885 10.885s4.872 10.884 10.884 10.884S57.21 28.79 57.21 22.78s-4.874-10.886-10.886-10.886zm170.68 142.057c1.232-2.413 2.75-5.162 4.357-8.072 8.155-14.77 19.32-35 19.993-58.56.807-28.303-13.934-54-43.812-76.38-5.186-3.884-12.538-2.827-16.42 2.358-3.884 5.186-2.83 12.538 2.357 16.42 23.75 17.79 35.01 36.412 34.425 56.934-.51 17.872-9.697 34.516-17.08 47.89-1.7 3.082-3.31 5.993-4.713 8.746-2.946 5.77-.655 12.836 5.115 15.78 1.708.873 3.53 1.286 5.323 1.286 4.267 0 8.384-2.338 10.457-6.4z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.0 KiB |
@ -1,9 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" opacity="1.0">
|
||||
<path fill="#A9B8C2" d="M509.507 277.512c-.132-6.324-.47-12.764-1.04-19.213-.632-6.447-1.428-12.904-2.614-19.245-1.206-6.336-2.63-12.568-4.475-18.537-1.87-5.96-3.99-11.684-6.497-16.98-.595-1.332-1.307-2.607-1.945-3.884l-.975-1.893-1.06-1.824c-.712-1.2-1.388-2.395-2.105-3.543l-2.23-3.322c-.705-1.1-1.51-2.11-2.28-3.112-.78-.994-1.507-1.99-2.287-2.913l-2.348-2.653-1.13-1.268-1.182-1.164c-1.56-1.52-2.987-2.98-4.48-4.16-1.473-1.22-2.712-2.35-4.158-3.326-1.088-.78-2.095-1.49-3-2.118-17.824-20.005-42.044-32.73-73.602-32.262-65.688.978-93.648 12.662-135.097-21.204-18.746-41.434-58.357-72.004-117.605-57.282C50.467 79.708 17.34 103.01 10.62 151.743c-1.177 3.953-1.833 8.13-1.86 12.463l-.058 9.042-.018 2.794-.056 2.945c-.038 1.238-.08 2.662-.13 4.256-.217 6.425-.762 15.903-1.466 27.59-.686 11.68-1.51 25.55-1.832 40.698-.166 7.57-.185 15.47.016 23.567.214 8.102.645 16.406 1.457 24.8.798 8.392 1.978 16.873 3.64 25.29 1.69 8.415 3.835 16.766 6.67 24.84 2.778 8.07 6.28 15.85 10.322 23.028 4.088 7.17 8.782 13.704 13.74 19.314 4.985 5.6 10.21 10.248 15.127 13.945 4.91 3.723 9.528 6.466 13.38 8.522l2.747 1.44c.874.414 1.694.8 2.457 1.16 1.526.725 2.832 1.31 3.903 1.732l3.276 1.337c7.498 3.063 16.404.77 21.39-6.07 5.868-8.047 4.1-19.328-3.946-25.196l-4.27-3.112-1.967-1.435c-.647-.447-1.408-1.05-2.277-1.77l-1.4-1.138-1.507-1.362c-2.102-1.915-4.49-4.328-6.8-7.322-2.325-2.975-4.593-6.484-6.567-10.504-1.954-4.048-3.62-8.6-4.9-13.612-1.242-5.053-2.145-10.52-2.577-16.423-.47-5.864-.484-12.145-.174-18.62.17-3.342.436-6.743.782-10.183 2.13-5.07 4.632-11.54 7.39-19.013 2.704.653 5.46 1.06 8.26 1.23l.002.014c7.48 1.072 23.013 9.41 23.51 16.948 2.443 37.036 15.236 59.378 26.407 72.06 10.125 11.492 16.997 25.48 20.296 40.437 7.742 35.107.006 76.796 46.07 76.796s20.08-48.648 34.932-78.647c14.85-30 51.294-24 51.294-24 32.974 0 47.557 10.897 55.47 25.767 10.23 19.23-3.268 76.878 47.38 76.878 49.846 0 35.89-67.9 50.29-86.76 18.117-23.724 41.402-51.33 54.37-84.85-.154 2.273-.32 4.483-.492 6.603-.398 4.603-.795 8.822-1.228 12.556-.387 3.738-.84 6.987-1.168 9.668l-1.175 8.41-.013.09c-.468 3.384 1.82 6.558 5.213 7.158 3.472.613 6.783-1.704 7.397-5.175 0 0 .55-3.12 1.516-8.58.435-2.74 1.02-6.057 1.557-9.887.583-3.823 1.15-8.152 1.73-12.882.558-4.734 1.1-9.874 1.552-15.33.2-2.73.46-5.532.603-8.408l.254-4.357.18-4.45c.248-5.99.284-12.198.185-18.52z"/>
|
||||
<path fill="#2B3B47" d="M80.323 159.56c-8.07-.432-14.963 5.762-15.394 13.833l-1.35 25.27c-.43 8.072 5.763 14.964 13.834 15.395 8.07.43 14.963-5.763 15.394-13.834l1.35-25.27c.43-8.072-5.764-14.964-13.835-15.395z"/>
|
||||
<path fill="#7E9AA8" d="M155.92 254.302l.545.627.67.768c.26.278.558.6.897.966 1.375 1.45 3.472 3.58 6.338 5.903 2.878 2.305 6.577 4.818 11.15 6.742 4.558 1.923 9.945 3.32 15.91 3.456 5.952.167 12.446-.82 19.002-3.106 6.56-2.253 13.2-5.68 19.5-10.12 6.315-4.412 12.35-9.754 17.747-15.804 5.403-6.053 10.17-12.735 14.56-19.53 4.383-6.795 8.28-13.91 10.84-21.304 2.587-7.375 3.857-14.943 3.643-22.166-.105-3.612-.592-7.137-1.44-10.51-.212-.842-.44-1.678-.7-2.5l-.405-1.277-.47-1.426-1.845-5.463c-2.468-7.185-5.09-13.94-7.617-20.116-2.512-6.19-5.044-11.765-7.338-16.683-2.314-4.908-4.522-9.077-6.41-12.475-1.93-3.36-3.527-5.955-4.663-7.686l-1.782-2.63-.063-.093c-.648-.957-.4-2.258.558-2.906.846-.572 1.96-.443 2.657.256l2.36 2.37c1.52 1.56 3.67 3.92 6.24 7.056 2.53 3.15 5.532 7.045 8.752 11.65 3.233 4.6 6.64 9.935 10.217 15.844 3.557 5.925 7.206 12.444 10.864 19.52.906 1.786 1.846 3.653 2.698 5.42l.657 1.35.352.733.347.79c.47 1.057.9 2.138 1.31 3.235 1.643 4.386 2.833 9.065 3.514 13.883 1.38 9.652.618 19.764-1.692 29.466-2.33 9.71-6.1 19.137-11.242 27.675-5.142 8.547-11.762 16.038-18.96 22.523-7.2 6.49-14.974 12.09-23.122 16.485-8.143 4.383-16.626 7.64-25.07 9.388-8.43 1.745-16.805 2.01-24.324.718-7.525-1.26-14.11-3.94-19.253-7.182-5.183-3.21-9.01-6.814-11.86-9.924-2.86-3.128-4.708-5.822-5.948-7.694l-.812-1.252-.53-.872-.43-.71c-.828-1.365-.393-3.14.97-3.97 1.22-.74 2.77-.47 3.676.572z"/>
|
||||
<path fill="#E8EBED" d="M88.503 271.766l-1.664 1.06-2.395 1.56c-1.02.69-2.11 1.282-3.305 1.943-1.196.655-2.56 1.31-3.992 1.95l-2.24.927c-.77.293-1.57.556-2.372.832-.798.29-1.628.498-2.456.73-.83.237-1.664.45-2.507.615-1.684.39-3.368.628-5.034.87-1.654.162-3.297.342-4.87.387-1.585.1-3.098.074-4.562.082-1.453-.027-2.84-.078-4.145-.14l-3.636-.25c-2.228-.2-4.065-.38-5.34-.542l-2.003-.233c-2.678-.313-4.597-2.737-4.286-5.415.234-2.008 1.655-3.59 3.48-4.124l.13-.035 1.852-.54c1.183-.33 2.847-.85 4.817-1.48l3.128-1.073c1.09-.403 2.223-.835 3.37-1.296 1.127-.49 2.305-.962 3.41-1.526 1.14-.52 2.198-1.14 3.26-1.716 1.006-.636 2.008-1.242 2.884-1.915.458-.313.88-.654 1.278-.997.402-.34.812-.648 1.163-1.008.36-.35.72-.67 1.05-1.007l.936-1.013c.587-.684 1.12-1.315 1.59-1.953.465-.64.914-1.22 1.16-1.69.295-.493.47-.798.904-1.41l1.122-1.625c4.45-6.442 13.282-8.055 19.724-3.604 6.442 4.45 8.055 13.282 3.604 19.724-1.096 1.586-2.457 2.88-3.982 3.86l-.075.05z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 5.1 KiB |
@ -1,8 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" opacity="1.0">
|
||||
<path fill="#FFA1E0" d="M464.142 414.09l-1.358-.873-3.944-2.48c-3.46-2.172-8.603-5.185-15.26-8.886-3.328-1.855-7.038-3.87-11.11-6.027-4.07-2.172-8.512-4.446-13.312-6.755-9.597-4.637-20.576-9.7-32.827-14.838-12.24-5.22-25.786-10.227-40.458-15.154-7.34-2.45-14.965-4.768-22.865-7.003-3.88-1.142-8.122-2.202-12.357-3.29l-5.8-1.557c-.953-.26-1.91-.518-2.868-.777l-.36-.098c-.218-.016.236-.033-.535-.048l-.136-.034-.542-.137-1.086-.272c-11.586-2.748-21.596-8.346-27.23-14.272-2.876-2.97-4.743-5.804-6.32-8.223-1.587-2.436-2.93-4.598-4.884-6.982-1.902-2.393-4.34-5.185-7.156-8.804-1.372-1.822-2.726-3.88-4.222-6.077-.73-1.113-1.458-2.27-2.185-3.476-.71-1.22-1.456-2.46-2.23-3.74-6.005-10.315-12.3-23.12-19.05-36.77-3.392-6.83-6.876-13.896-10.57-21.048-3.73-7.144-7.543-14.41-11.644-21.65-4.12-7.233-8.497-14.457-13.318-21.5-4.782-7.053-10-13.954-15.843-20.344-5.85-6.367-12.246-12.29-19.073-17.195-6.814-4.91-13.93-8.87-20.864-11.594-3.406-1.368-6.757-2.46-9.987-3.312.233-1.248.453-2.515.64-3.806.37-2.414.66-4.892.857-7.394.216-2.5.295-5.03.298-7.54.007-2.51-.145-5.008-.383-7.443-.236-2.435-.65-4.813-1.148-7.08-.493-2.266-1.18-4.42-1.914-6.405-.755-1.985-1.626-3.794-2.52-5.375-.442-.79-.928-1.515-1.35-2.19l-1.318-1.81c-.872-1.064-1.583-1.89-2.13-2.418l-.815-.824c-.227-.226-.5-.473-.76-.675-3.37-2.612-8.217-1.998-10.83 1.37s-1.997 8.216 1.37 10.828l.18.14.436.34c.298.197.697.568 1.23 1.035l.84.867c.283.358.618.713.943 1.147.654.862 1.36 1.917 2.05 3.188.67 1.283 1.376 2.736 1.97 4.404.597 1.66 1.175 3.477 1.623 5.44.45 1.96.856 4.03 1.128 6.187.274 2.153.497 4.372.59 6.618.113 2.244.14 4.51.088 6.747-.013.924-.054 1.838-.1 2.75-.174-.026-.354-.06-.528-.083-6-.85-11.352-1.042-16.037-.84-2.52.085-4.844.282-6.99.53.02-.635.048-1.26.06-1.91.03-2.3.036-4.69-.08-7.125-.093-2.435-.277-4.918-.557-7.407-.26-2.49-.662-4.984-1.133-7.444-.47-2.46-1.09-4.88-1.785-7.222-.692-2.342-1.55-4.594-2.467-6.72-.912-2.13-1.995-4.11-3.09-5.916-1.118-1.802-2.316-3.41-3.493-4.79-.585-.692-1.2-1.31-1.742-1.893l-1.64-1.525c-1.058-.877-1.913-1.55-2.55-1.965l-.958-.653c-.298-.2-.65-.408-.982-.57-3.836-1.863-8.456-.263-10.318 3.573-1.863 3.836-.263 8.456 3.573 10.318l.168.08.496.242c.333.132.8.414 1.418.763l1.003.677c.352.293.754.573 1.162.933.82.713 1.73 1.604 2.666 2.712.92 1.123 1.91 2.407 2.834 3.924.926 1.51 1.863 3.177 2.704 5.014.84 1.834 1.66 3.787 2.367 5.85.708 2.06 1.378 4.196 1.926 6.384.567 2.182 1.054 4.4 1.457 6.612.424 2.207.73 4.41 1.01 6.55.113.912.208 1.807.298 2.695-.745.15-1.458.304-2.13.457-1.42.335-2.617.604-3.835.915-1.18.302-2.222.568-3.122.8l-1.818.648-1.48.535c-3.023 1.095-5.71 3.215-7.467 6.203-4 6.808-1.724 15.57 5.084 19.57l4.115 2.42.397.232c.263.16.654.376 1.17.652.515.272 1.16.642 1.918 1.02.636.396 1.373.854 2.207 1.37 1.656 1.048 3.78 2.25 6.04 3.635 2.263 1.432 4.734 2.96 7.195 4.75 2.475 1.707 4.91 3.712 7.16 5.728 1.1 1.076 2.203 2.05 3.178 3.194.51.53.987 1.08 1.467 1.622.455.576.918 1.128 1.345 1.716 1.747 2.3 3.135 4.883 4.322 7.815 1.183 2.938 2.178 6.265 3.04 10.19 1.718 7.817 2.865 18.03 3.547 30.368.39 6.15.76 12.794 1.08 19.934.368 7.128.852 14.708 1.567 22.754 1.484 16.086 3.876 34.026 9.6 53.96 2.888 9.948 6.627 20.44 11.828 31.207 5.104 10.79 11.837 21.844 20.557 32.22 8.664 10.374 19.436 19.857 31.322 27.306 2.955 1.884 5.992 3.62 9.066 5.223 3.062 1.628 6.172 3.122 9.308 4.455 6.242 2.747 12.604 4.848 18.834 6.613 12.494 3.533 24.638 5.127 35.972 5.852 2.852.192 5.63.268 8.4.345 2.74.022 5.472.05 8.126.025 5.34-.033 10.51-.267 15.515-.657l1.875-.146.935-.075.234-.02c-.797-.01-.118-.018-.25-.027l.362-.055 2.878-.442 5.594-.866c3.233-.527 6.35-1.092 9.82-1.542 6.765-.992 13.448-1.706 20.007-2.47 6.56-.748 12.99-1.322 19.242-1.83l9.242-.655c3.036-.224 6.022-.415 8.953-.577 5.863-.34 11.503-.57 16.883-.738 5.39-.225 10.51-.334 15.335-.418l13.54-.145c4.19-.024 8.043-.01 11.512.04 6.947.09 12.365.312 16.018.373 3.656.098 5.46.17 5.24.105 8.083 2.4 16.582-2.204 18.983-10.286 2.402-8.083-2.204-16.58-10.286-18.983z" id="Layer_2"/>
|
||||
<path fill="#D19B61" d="M420.322 245.86c-48.02-73.215-148.485-87.3-222.8-41.717-1.518.93-3.028 1.877-4.523 2.857 0 0 14 91.176 71.178 122.95-5.975 17.118-4.205 36.725 6.507 53.057 25.402 38.73 77.39 49.534 116.12 24.132 9.452-6.2 17.7-13.54 24.693-21.72 32.814-38.37 37.907-95.22 8.824-139.56z" id="Layer_3"/>
|
||||
<path fill="#B7834F" d="M340.81 426.833c-6.172 0-12.386-.634-18.568-1.92-23.63-4.91-43.932-18.728-57.168-38.908-11.687-17.817-14.357-39.587-7.327-59.727 4.965-14.225 14.263-26.12 26.888-34.4 11.587-7.6 25.438-10.23 39.004-7.413 13.564 2.82 25.22 10.752 32.82 22.34 5.9 8.994 7.943 19.748 5.754 30.28-2.188 10.534-8.35 19.584-17.345 25.483-7.13 4.677-15.655 6.297-24.004 4.562-8.35-1.735-15.522-6.617-20.2-13.747-7.835-11.947-4.49-28.042 7.458-35.878 4.825-3.166 11.305-1.82 14.47 3.008 3.167 4.826 1.82 11.306-3.007 14.47-2.31 1.516-2.956 4.627-1.44 6.937 1.613 2.46 4.09 4.146 6.973 4.745 2.886.603 5.826.04 8.286-1.574 4.327-2.837 7.29-7.19 8.343-12.256 1.052-5.066.07-10.24-2.77-14.565-9.364-14.28-28.602-18.278-42.88-8.913-8.744 5.735-15.182 13.97-18.618 23.812-4.87 13.953-3.02 29.033 5.07 41.372 10.175 15.513 25.78 26.134 43.943 29.908 18.16 3.773 36.707.25 52.22-9.924 22.452-14.726 37.825-37.313 43.29-63.603 5.462-26.29.36-53.13-14.365-75.583-43.45-66.246-132.694-84.792-198.94-41.343-4.828 3.166-11.306 1.82-14.472-3.007-3.166-4.827-1.82-11.306 3.007-14.47 75.884-49.772 178.113-28.53 227.884 47.356 17.787 27.12 23.95 59.545 17.35 91.3-6.6 31.756-25.17 59.04-52.29 76.828-14.903 9.772-31.957 14.83-49.37 14.83z" />
|
||||
</svg>
|
Before Width: | Height: | Size: 5.7 KiB |
@ -1,11 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 511.9 511.9" opacity="1.0">
|
||||
<circle fill="#E2A042" cx="254.5" cy="206.8" r="170.9"/>
|
||||
<path fill="#AF773F" d="M494.6 226.6c0-37.9-30.7-68.6-68.6-68.6-7 0-13.8 1.1-20.2 3-18.5-18.8-44.2-30.5-72.7-30.5-23 0-44.1 7.6-61.1 20.4-10.9 8.2-25.6 8.3-36.5 0-19.6-14.8-44.7-22.7-71.8-19.9-23.4 2.4-46.2 12.8-63 28.6-4.7-1-9.7-1.6-14.8-1.6-37.9 0-68.6 30.7-68.6 68.6 0 37.5 30.1 68 67.5 68.5 27.3 83.3 99.9 115 169.7 115 76.7 0 148.3-33.6 172.1-114.9 37.6-.4 68-30.9 68-68.6z"/>
|
||||
<path fill="#FFB636" d="M330.2 165.8c-25.3-.3-47.7 11.8-61.7 30.6-6.7 9.1-19.8 9.1-26.5 0-13.9-18.8-36.4-30.9-61.7-30.6-39.6.5-72.9 32.9-74.4 72.5-1.5 39.9 27.9 73.2 66.2 77.8 5.2.6 9.2 4.7 9.8 9.8 4.6 36.4 35.7 64.6 73.4 64.6 37.5 0 68.4-27.9 73.3-64 .7-5.5 5-9.8 10.5-10.5 38-4.9 67.1-38.1 65.6-77.8-1.6-39.4-34.9-71.9-74.5-72.4z"/>
|
||||
<path fill="#E576CB" d="M271.8 272.4s-2.3 2.9-5.6 5c-4.2 2.9-9.2 4.7-12.4 3.7-4.5-.1-9-1.5-12.4-3.7-3.4-2.1-5.6-5-5.6-5-.5-.7-.5-1.6 0-2.2 0 0 2.3-2.9 5.6-5 3.4-2.2 7.9-3.7 12.4-3.7 4.5.1 9 1.5 12.4 3.7 3.4 2.1 5.6 5 5.6 5 .6.6.5 1.6 0 2.2zM253.8 376.9c-18.1 0-34.1-14.9-41.6-38.8-.3-1-.4-1.9-.4-2.9 0-1.8.5-3.7 1.7-5.3 9.8-13.7 24.2-21.8 39.7-22.1 15.6-.3 31 8 41 22.1 1.1 1.5 1.7 3.4 1.7 5.2v.3c0 .9-.1 1.8-.4 2.7-7.6 23.9-23.6 38.8-41.7 38.8zm-23-40c5.3 13.7 13.9 22 23 22s17.6-8.3 23-22c-6.4-7.1-15-11.3-23.2-11.1-8.4.1-16.6 4.2-22.8 11.1z"/>
|
||||
<path fill="#E2A042" d="M221.7 196.3c-18.8-18.8-49.2-18.8-67.9 0l-17.3 17.3c2.8-5 2.1-11.3-2.1-15.6-5.1-5.1-13.3-5.1-18.4 0-10.5 10.5-21.5 23.7-22.7 41.1-.5 7.6.8 15.3 4.1 23.3-2.4 2.5-4.6 5-7.1 7.9-1.4 1.6-2.8 3.4-4.3 5.1-1.5 1.8-3 3.6-4.5 5.7-1.5 2-3.1 4-4.5 6.2l-4.5 6.6c-1.5 2.3-3 4.7-4.4 7.1-1.4 2.5-2.9 4.9-4.3 7.5-1.3 2.6-2.7 5.2-4 7.8-.6 1.3-1.3 2.7-1.9 4-.6 1.3-1.3 2.7-1.8 4.1-1.2 2.7-2.4 5.5-3.4 8.3-.5 1.4-1.1 2.8-1.6 4.2l-1.5 4.2c-1 2.8-1.8 5.6-2.7 8.4-.8 2.8-1.6 5.6-2.2 8.4-1.3 5.5-2.4 11-3.2 16.2-.8 5.2-1.4 10.2-1.7 14.9-.4 4.7-.5 9-.5 13 0 3.9.1 7.5.3 10.5.2 3 .5 5.6.7 7.5.1.5.1 1 .2 1.4.1.5.1.9.2 1.2.1.4.1.8.2 1 .1.4.1.5.1.5 5.5 25.8 30.8 42.2 56.6 36.7 25.6-5.5 42-30.5 36.8-56.2V404.9s0 .1 0 0v-.1c-.1-.3-.3-.9-.5-1.9-.2-1.1-.5-2.5-.7-4.3-.2-1.8-.4-3.9-.5-6.3-.1-2.4-.1-5 0-7.8s.3-5.8.7-8.9c.2-1.5.4-3.1.7-4.7.3-1.6.5-3.2.9-4.8.2-.8.4-1.6.5-2.5.2-.8.4-1.6.6-2.5.4-1.7.9-3.3 1.4-4.9.2-.8.5-1.6.8-2.5l.8-2.4 1.8-4.8c.7-1.6 1.4-3.2 2-4.7.7-1.5 1.5-3.1 2.2-4.6.8-1.5 1.6-2.9 2.3-4.4.7-1.4 1.6-2.8 2.4-4.1.8-1.4 1.6-2.6 2.4-3.9.8-1.2 1.5-2.5 2.4-3.6 1.6-2.2 3.1-4.5 4.3-5.9.6-.8 1.2-1.6 1.7-2.3.1-.2.3-.3.4-.5l.2-.3.3-.3c.4-.4.7-.8 1.1-1.2.3-.4.6-.7.9-1 9.6-1.5 18.9-6 26.3-13.4l32-32c18.6-18.8 18.6-49.2-.1-68zM473.8 388.8c-.3-4.7-.9-9.7-1.7-14.9-.8-5.2-1.9-10.6-3.2-16.2-.7-2.8-1.4-5.5-2.2-8.4-.9-2.8-1.7-5.6-2.7-8.4l-1.5-4.2c-.5-1.4-1.1-2.8-1.6-4.2-1-2.8-2.2-5.5-3.4-8.3-.6-1.4-1.2-2.7-1.8-4.1-.6-1.3-1.3-2.7-1.9-4-1.3-2.7-2.7-5.2-4-7.8-1.4-2.5-2.9-5-4.3-7.5-1.5-2.4-3-4.8-4.4-7.1-1.5-2.3-3-4.5-4.5-6.6-1.5-2.2-3.1-4.2-4.5-6.2-1.5-2-3-3.9-4.5-5.7-1.5-1.8-2.9-3.6-4.3-5.1-2.1-2.4-4-4.6-6-6.7 3.7-8.4 5.2-16.5 4.6-24.5-1.3-17.5-12.2-30.6-22.7-41.1-5.1-5.1-13.3-5.1-18.4 0-4.2 4.2-4.9 10.6-2.1 15.6l-17.3-17.3c-18.8-18.8-49.2-18.8-67.9 0s-18.8 49.2 0 67.9l32 32c6.9 6.9 15.4 11.3 24.3 13.1.4.4.8.9 1.2 1.4.3.4.7.8 1.1 1.2l.3.3.2.3c.1.2.3.3.4.5.5.7 1.1 1.4 1.7 2.3 1.2 1.5 2.7 3.7 4.3 5.9.8 1.1 1.5 2.4 2.4 3.6.8 1.2 1.7 2.5 2.4 3.9.8 1.4 1.6 2.7 2.4 4.1.8 1.4 1.5 2.9 2.3 4.4.7 1.5 1.5 3 2.2 4.6.7 1.6 1.3 3.1 2 4.7.6 1.6 1.3 3.2 1.8 4.8l.8 2.4c.3.8.6 1.6.8 2.5.5 1.6 1 3.3 1.4 4.9.2.8.4 1.6.6 2.5.2.8.4 1.6.5 2.5.4 1.6.6 3.2.9 4.8.2 1.6.5 3.2.7 4.7.4 3.1.6 6.1.7 8.9.1 2.8.1 5.4 0 7.8-.1 2.4-.3 4.5-.5 6.3-.2 1.8-.5 3.2-.7 4.3-.2 1.1-.4 1.7-.5 1.9v-.1-.1c-5.2 25.6 11.2 50.7 36.8 56.2 25.8 5.5 51.1-10.9 56.6-36.7 0 0 0-.2.1-.5 0-.2.1-.6.2-1 0-.3.1-.7.2-1.2.1-.4.1-.9.2-1.4.2-1.9.5-4.5.7-7.5.2-3 .3-6.6.3-10.5 0-3.9-.1-8.3-.5-13z"/>
|
||||
<path fill="#2B3B47" d="M230.8 336.9c5.3 13.7 13.9 22 23 22s17.6-8.3 23-22c-6.4-7.1-15-11.3-23.2-11.1-8.4.1-16.6 4.2-22.8 11.1z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.1 KiB |
@ -1,10 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" opacity="1.0">
|
||||
<path fill="#D1CFC3" d="M22.54 39.677c-8.686 0-16.823-3.548-21.237-9.26-1.818-2.352-1.386-5.733.968-7.553 2.35-1.814 5.734-1.385 7.552.97 2.383 3.082 7.375 5.074 12.72 5.074 2.975 0 5.384 2.41 5.384 5.384s-2.41 5.385-5.385 5.385zm48.324-9.26c1.818-2.352 1.386-5.733-.968-7.553-2.35-1.814-5.73-1.385-7.55.97-2.384 3.082-7.376 5.074-12.72 5.074-2.976 0-5.385 2.41-5.385 5.384s2.41 5.384 5.385 5.384c8.687 0 16.825-3.546 21.24-9.26z"/>
|
||||
<path fill="#E5E4DF" d="M60.38 68.154c-.842.896-2.084 1.43-3.32 1.43-.036-.004-.078-.004-.118 0-1.786 0-3.454-.942-4.462-2.514-.562-.874-1.437-1.383-2.4-1.397-.924.013-1.796.522-2.358 1.397-1.026 1.597-2.652 2.513-4.462 2.513h-.117c-1.786 0-3.454-.94-4.462-2.513-.56-.874-1.436-1.383-2.398-1.397-.925.013-1.797.522-2.36 1.397-1.025 1.597-2.654 2.513-4.464 2.513-.035-.003-.075-.003-.115 0-1.786 0-3.454-.94-4.462-2.513-.56-.874-1.436-1.383-2.398-1.397-.925.013-1.8.522-2.36 1.394-1.025 1.6-2.654 2.516-4.464 2.516-.075 0-.152-.008-.227-.024-1.302-.057-2.43-.577-3.21-1.406-.61-.642-1.31-1.783-1.206-3.577.138-2.402 4.83-40.32 5.078-42.323C16.15 11.17 25.18 2.168 36.278 2.168c11.097 0 20.13 9 20.188 20.083.247 1.987 4.98 39.922 5.118 42.327.105 1.794-.596 2.937-1.204 3.577z"/>
|
||||
<path fill="#2B3B47" d="M29.464 22.523v3.656h-.005c0 .004.004.006.004.01 0 1.435-1.165 2.6-2.6 2.6s-2.602-1.165-2.602-2.6v-.01h-.01v-3.657h.03c.116-1.332 1.22-2.38 2.58-2.38s2.462 1.048 2.576 2.38h.026zm18.708-1.126c-.18-2.103-1.92-3.758-4.066-3.758-2.15 0-3.892 1.654-4.075 3.757h-.048v5.773H40v.016c0 2.267 1.84 4.107 4.107 4.107s4.107-1.84 4.107-4.107c0-.004-.01-.007-.01-.016h.01v-5.773h-.042zM49.78 33.91c-.053-.1-.13-.18-.24-.192-1.108-.11-25.417-.106-26.522 0-.048.004-.095.027-.14.057-.005.004-.013.003-.02.008-.15.115-.185.344-.08.51l.24.386c.553.873 1.105 1.625 1.658 2.26.554.657 1.105 1.206 1.66 1.73 1.1 1.02 2.212 1.765 3.314 2.41.45.265.655.325.906.43.018-.012.046-.023.065-.035 1.797.874 3.726 1.375 5.747 1.375 1.982 0 3.876-.482 5.643-1.324l.004.002c.298-.138.597-.258.898-.423 1.104-.637 2.21-1.39 3.314-2.414.553-.523 1.105-1.074 1.655-1.736.553-.636 1.106-1.39 1.66-2.274l.242-.388c.03-.052.052-.112.056-.177.006-.077-.026-.142-.06-.204z"/>
|
||||
<path fill="#FF473E" d="M42.35 33.637v7.606c0 3.358-2.716 6.08-6.066 6.08-3.358 0-6.077-2.722-6.077-6.08v-7.606H42.35z"/>
|
||||
<path fill="#2B3B47" d="M29.62 36.086v-.83c0-2.12-5.67-1.62 6.227-1.62s7.09-.502 7.09 1.62v.83H29.62zm7.6 8.15v-6.395c0-.517-.42-.94-.94-.94s-.942.422-.942.94v6.397c0 .518.42.94.94.94s.942-.422.942-.94z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 2.8 KiB |
@ -1,96 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 277.9 279.4">
|
||||
<style>
|
||||
.st0{fill:#344555;} .st1{fill:url(#SVGID_1_);} .st2{fill:url(#SVGID_2_);} .st3{fill:url(#SVGID_3_);} .st4{fill:url(#SVGID_4_);} .st5{fill:url(#SVGID_5_);} .st6{fill:url(#SVGID_6_);} .st7{fill:url(#SVGID_7_);} .st8{fill:url(#SVGID_8_);} .st9{fill:url(#SVGID_9_);} .st10{fill:url(#SVGID_10_);} .st11{fill:#E9CCFF;} .st12{fill:none;stroke:#344555;stroke-width:0.4;stroke-miterlimit:10;} .st13{fill:#FBF6FA;} .st14{fill:#CEDAE6;} .st15{fill:#A2B3BF;}
|
||||
</style>
|
||||
<path class="st0" d="M245.8 78c-1.1-1.5-2.3-2.9-3.6-4.2 1-1.2 1.9-2.5 2.4-4 .5-1.3.7-2.5.7-3.8 0-.8-.1-1.4-.1-1.7 1.5-1.3 2.5-2.6 3.2-3.6 1.9-2.8 2.4-5.3 2.5-6.5.2-1.9-.2-3.1-.3-3.6l-.5-1.5c2.8-1.6 5.2-3.9 6.6-6.4 1.9-3.4 1.7-6.3 1.5-7.8-.1-.6-.3-1.3-.5-1.8.9-.9 1.6-1.8 2.1-2.8 1.2-2.3 1.7-4.8 1.1-7-.1-.6-.4-1.2-.7-1.7.4-.4.8-.9 1.1-1.4 1.2-1.8 1.7-3.9 1.4-5.7-.2-1-.5-1.9-1.1-2.6.8-1.1 1.4-2.3 1.7-3.6.3-1.2.4-2.5.2-3.6-.3-2.3-2.4-3.2-3.4-3.7-.3-.1-1.4-.6-2.2-.8-1-.2-1.9-.3-2.8-.3l-.1.1c-.7 0-1.3.1-1.9.2-.3 0-.5.1-.9.2h-.6l-.2.1c-.3.1-.5.2-.7.3-3.1 1.5-5.1 4.1-5.8 7.4-.1.8-.2 1.4-.2 1.9-1.3.4-2.5.8-3.5 1.5-2 1.2-3.6 2.9-4.6 4.8-.9 1.7-1 3.3-1 4.3-1.3.5-2.5 1.1-3.7 1.9-2.2 1.5-4.1 3.5-5.2 5.7-.2 0-.5-.1-.7-.1-.9 0-1.8.3-2.5.9-1.3 1-1.8 2.7-1.3 4.2v.6c0 .2-.1.4-.1.5-.1.2-.3.4-.5.6-.4.3-1.1.7-1.9 1.1-.7.3-1.6.6-2.7.9-.3.1-.5.1-.7.2-.4.1-.7.2-1.2.3l-.1-1.6V35c-.2-3.4-.4-6.7-.7-9.5-.4-5.3-.9-8.6-.9-8.7-.2-1.6-1.4-2.9-3-3.4-.3-.1-.7-.1-1-.1-1.3 0-2.5.6-3.2 1.6-.1.1-1.9 2.6-4.3 6.7-.9 1.5-1.7 3-2.4 4.5-.3-.4-.5-.8-.8-1.1-1.5-1.9-3.1-3.5-4.8-4.8-1.2-1-2-1.5-2.2-1.5-.6-.4-1.3-.5-2-.5-.8 0-1.6.2-2.3.7-1.3.9-1.9 2.5-1.6 4 0 0 .1.5.1 1.3.1 1.2 0 2.7-.2 4.2-.1.9-.3 1.9-.5 2.9l-.2 1.1-.1.6V33.3c-.1.6-.2 1.4-.3 2.1-.1.9-.2 1.9-.2 2.8-.5-.8-.9-1.5-1.3-2.2-3.1-5.2-5.3-8.3-5.4-8.4-.8-1.1-2-1.7-3.3-1.7h-.6c-1.5.2-2.7 1.3-3.2 2.8-.1.2-1.3 4.1-2.4 10.4-.7 3.9-1.1 7.6-1.2 11.2 0 1.1-.1 2.3 0 3.5-1.6-1.7-3.1-3.2-4.4-4.5-3.7-3.5-6.2-5.4-6.3-5.5-.7-.5-1.6-.8-2.4-.8-.7 0-1.3.2-1.9.5-1.4.7-2.2 2.2-2.1 3.8 0 .2.3 3.9 1.3 9.6.6 3.5 1.4 6.8 2.2 9.9.2.8.5 1.7.7 2.5l-5.1-4.1c-.7-.6-1.6-.9-2.5-.9-.7 0-1.4.2-2 .5-1.4.8-2.2 2.5-1.9 4.1.1.3.6 3.5 2.5 7.8.2.4.4.8.5 1.1-2.5-.8-5.1-1.4-7.8-1.8-2-.3-4-.4-6-.4h-1c-1.7 0-2.6.2-2.7.2-1.3.2-2.4 1-3 2.1s-.6 2.5 0 3.7c.1.1 1.6 3 4 7.3.6 1 1.2 2.1 1.9 3.2-5.5-3.3-9.7-4.8-10-4.9-.4-.1-.9-.2-1.3-.2-1.1 0-2.1.4-2.9 1.2-1.1 1.1-1.4 2.8-.9 4.2.1.4 2.6 6.8 7.5 14-.4-.1-.7-.2-1.1-.3-.1-.1-.3-.1-.4-.2h-.1c-2-.7-4.1-1.2-6.3-1.4-.9-.1-1.9-.1-2.7-.1-1.9 0-3.1.2-3.4.3-1.6.3-2.8 1.5-3.2 3.1-.3 1.6.4 3.2 1.7 4.1-.7.5-1.3 1.2-1.6 2-.1.2-.1.3-.1.5s-.1.3-.1.5c-.1.4-.2 1.7.1 3.5.1.8.5 2.6 1.6 4.5-6.3 1.9-12.2 4.7-17.5 8.4 0-.8-.1-1.5-.2-2.4-.8-5.2-2.7-8.4-4.1-10.2-.8-.9-1.6-1.8-2.5-2.3-.8-.5-1.4-.8-1.8-.9-.4-.1-.8-.2-1.2-.2-.4 0-.7 0-1.1.1-.1-.2-.3-.4-.5-.6-1.3-1.7-2.7-3.2-4.4-4.5-2.6-2.1-4.3-2.8-4.7-3-.4-.2-.9-.2-1.3-.2-.9 0-1.7.3-2.4.8-.9-.8-1.7-1.6-2.5-2.3-2.2-2-4.5-3.7-6.8-5.2-1.5-1-2.9-1.8-4.3-2.5-1-.5-1.5-.7-1.6-.8-.5-.2-1-.3-1.5-.3-1.4 0-2.7.7-3.4 1.9l-.3.6c-3.2-1.6-6.4-2.9-9.7-4.1-2.8-1-5.3-1.7-7.6-2.1-1.7-.4-2.7-.4-2.8-.5h-.3c-1.4 0-2.7.8-3.5 2-.2.4-.4.8-.5 1.3-1.4-1-2.8-2-4.2-2.9-3.1-2-6-3.5-8.7-4.7-2-.9-3.1-1.2-3.3-1.2-.3-.1-.7-.1-1-.1-1.2 0-2.4.6-3.2 1.6-1 1.3-1.1 3-.3 4.4 0 0 .6 1 1.7 2.8 1 1.5 2.6 4.1 5.1 7.7 2.4 3.5 5.5 7.9 8.5 12.2-.7-.3-1.4-.5-2.1-.7-.9-.3-1.6-.4-2.1-.5l-.5-.1c-.2 0-.4-.1-.7-.1-1.3 0-2.4.6-3.2 1.6-.9 1.2-1 2.8-.4 4.2.1.1 1.6 3.2 4.8 8.8 1.7 3.1 3.8 6.6 6.1 10.4l1.7 2.9 2.2 3.8v.1c.4.6.8 1.3 1.2 1.9-.3-.1-.6-.1-.9-.1-.8 0-1.7.3-2.4.8-1.2.9-1.8 2.4-1.6 3.8 0 .2.2 1 .6 2.4.6 1.8 1.5 3.6 2.5 5.5 1.7 2.9 3.7 5.6 6.1 8.1 1.8 1.9 3.5 3.4 5.3 4.7 2.2 1.6 4.6 3.2 7.9 4.5 3 1.1 5.8 1.8 8.6 2.1 1 .1 2 .2 2.9.2h1.6c.9 0 1.8 0 2.7-.1 2.4-.2 4.7-.5 6.9-1.1-.1.7-.1 1.5-.2 2.2-.6 9.2 1.3 18.4 5.4 26.6-1.3 1.8-2.5 3.5-3.6 5.2-4.5 6.8-11.4 20.6-14.2 26.2l-.1.3c-1.6 3.1-1.6 7.3 0 12 2.5 7.2 9.9 17.8 22.6 23.7 6.2 2.9 13.1 4.4 20.1 4.4 11.4 0 20.3-4 22.6-10.3.2-.6.4-1.2.5-1.9h.2v-1.6c.1-.8 0-1.7 0-2.6 0-.2-.3-14.4 1-26.7 2.7.4 5.5.8 8.4.8.9 0 1.7 0 2.5-.1 4.8-.4 9.5-1.2 14-2.4 4.3 11.9 7.3 24.4 7.7 25.9.2 1.3.7 4.1 1.6 5.7 2.5 4.5 8.7 7.1 17 7.1 8.9 0 18.4-3 26-8.2 11.5-7.9 17.1-19.5 18.4-27.1.8-4.9.2-9-1.9-11.9l-.1-.1c-3.6-5.1-12.7-17.6-18.2-23.6-1.8-2-3.9-4.1-6.1-6.2 2-5.8 2.9-11.9 2.8-18.2 0-1.8-.2-3.5-.4-5.3 1.1-3.8 3.1-10.1 6.1-15.4 3.1-5.5 6.9-10.6 9.1-13.3 3.9 2.5 8.6 4.5 14.1 4.5.9 0 1.8-.1 2.7-.2 7.2-.8 13.3-2.3 18.3-4.4.1 0 .2-.1.3-.1h.1c1.9.3 3.8.5 5.6.5 8.9 0 17.2-3.9 23.4-11.1 5.8-6.7 9.1-15.6 9.1-24.5 0-16.8-12.8-29-32.1-30.7z"/>
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="22.015" y1="164.168" x2="71.347" y2="164.168">
|
||||
<stop offset="0" stop-color="#D116C5"/>
|
||||
<stop offset="1" stop-color="#B50DD8"/>
|
||||
</linearGradient>
|
||||
<path class="st1" d="M69.5 170.7c-1.2-.2-3-.6-5.3-1s-5.1-.9-8.4-1.5c-3.2-.6-6.9-1.4-10.6-2.8-3.5-1.4-6.8-3.4-9.6-5.2-2.9-1.8-5.3-3.3-7.3-4.5-4-2.5-6.4-3.6-6.4-3.6s.1.6.5 1.7 1 2.7 2.2 4.8c1.2 2.1 2.9 4.6 5.5 7.3 1.3 1.4 2.9 2.8 4.7 4.2 1.9 1.4 4.1 2.8 6.9 3.9 2.7 1 5.3 1.6 7.7 1.8 1.2.2 2.3.2 3.4.2s2.1 0 3-.1c3.8-.3 6.8-1 9.1-1.8s3.8-1.6 4.8-2.2c1-.6 1.4-1 1.4-1s-.4 0-1.6-.2z"/>
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="10.494" y1="142.827" x2="68.624" y2="142.827">
|
||||
<stop offset="0" stop-color="#F83510"/>
|
||||
<stop offset="1" stop-color="#D92E0E"/>
|
||||
</linearGradient>
|
||||
<path class="st2" d="M68.6 166.5s-2.3-1.5-7.5-4.7c-2.6-1.7-5.8-3.8-9.6-6.7-1.9-1.4-3.9-3.1-6-4.9-1.1-.9-2.1-2-3.2-3-.5-.5-1-1.1-1.6-1.7-.5-.6-1.1-1.1-1.6-1.8-1-1.3-2.1-2.4-2.9-3.7-.4-.6-.9-1.2-1.3-1.8-.4-.6-.9-1.3-1.3-1.9-1.7-2.5-3.5-4.6-5.2-6.5-3.4-3.7-6.7-6.2-9.4-7.9-2.7-1.6-4.9-2.5-6.3-2.9-.7-.2-1.2-.3-1.6-.4-.4-.1-.5-.1-.5-.1s1.5 3 4.7 8.6c1.6 2.8 3.6 6.2 6 10.3 1.2 2 2.5 4.2 4 6.6 1.5 2.4 2.7 4.8 5 7.8.5.8 1.1 1.4 1.7 2.1.6.6 1.2 1.3 1.7 1.9.6.6 1.2 1.1 1.9 1.7.6.5 1.2 1.1 1.9 1.5 2.5 1.9 5 3.3 7.4 4.4 4.8 2.1 9.1 2.9 12.4 3.3 3.4.3 5.9.1 7.6-.1 1.7-.2 2.5-.5 2.5-.5s-.1 0-.2-.1c.9.4 1.4.5 1.4.5z"/>
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="4" y1="129.162" x2="77.422" y2="129.162">
|
||||
<stop offset="0" stop-color="#F6A500"/>
|
||||
<stop offset="1" stop-color="#F5A100"/>
|
||||
</linearGradient>
|
||||
<path class="st3" d="M72 160c1.1.8 2.1 1.4 2.8 2 .4.3.8.6 1.1.8.3.3.6.5.8.6.4.3.6.5.6.5s-.1-.2-.3-.7c-.2-.4-.6-1.1-1.1-2-1.1-1.7-3-4.2-5.7-7.3-2.8-3.2-6.5-7-11-11.7-4.5-4.7-9.9-10.3-15.4-17.3-1.4-1.8-2.8-3.6-4.1-5.3-1.3-1.7-2.8-3.3-4.1-4.8-1.4-1.5-2.7-2.9-4-4.2-1.3-1.3-2.6-2.6-3.8-3.7-5-4.6-9.4-7.8-13-10.1-3.6-2.3-6.4-3.6-8.2-4.5-1.8-.8-2.8-1-2.8-1s.5.9 1.6 2.6c1.1 1.7 2.7 4.3 5 7.6s5.2 7.4 8.6 12.3c1.7 2.4 3.6 5 5.6 7.9 1 1.4 2 2.9 3 4.4 1 1.5 2.1 3.2 3.2 4.8 9.1 13.6 18.7 22.3 26.3 26.1 3.7 1.9 6.7 2.8 8.6 3.4 1 .3 1.7.5 2.2.6 5.5 4.2 8.7 5.9 8.7 5.9s-.9-2.4-4.6-6.9z"/>
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="25.262" y1="129.634" x2="83.392" y2="129.634">
|
||||
<stop offset="0" stop-color="#6EDC00"/>
|
||||
<stop offset="1" stop-color="#66CB00"/>
|
||||
</linearGradient>
|
||||
<path class="st4" d="M79.7 143.1c-1.3-3-3-6.9-5.7-11.5-1.3-2.3-2.9-4.8-4.8-7.4-1.9-2.6-4.1-5.4-6.9-8.1-1.3-1.4-2.8-2.6-4.1-3.8-.7-.6-1.4-1.1-2.1-1.6-.7-.5-1.4-1-2-1.5-2.7-1.8-5.2-3.3-7.6-4.6-4.7-2.5-8.7-4.1-11.8-5.2-3.2-1.1-5.5-1.7-7.1-2-1.6-.3-2.3-.4-2.3-.4s.5.8 1.6 2.2c1.1 1.5 2.7 3.6 4.9 6.4 1.1 1.4 2.2 3 3.6 4.7.6.9 1.3 1.8 2 2.8.7 1 1.4 2 2.1 3.1 3.1 4.4 6.9 9.4 11.6 14.9 2.3 2.7 4.6 5.2 6.8 7.5l3.3 3.3c1 1 2 1.9 3 2.8 1.8 1.7 3.4 3.5 4.9 5.1 1.5 1.6 2.8 3.1 4 4.4 2.4 2.6 4.3 4.6 5.6 5.9 1.3 1.3 2 1.9 2 1.9s-.1-.8-.6-2.4c-.5-1.6-1.3-4-2.7-7.3-1.4-3.2-3.3-7.3-6.7-12-.4-.6-.9-1.2-1.4-1.8-.5-.6-.9-1.1-1.4-1.7-.9-1.1-1.9-2.3-2.9-3.5-2.1-2.5-4.3-5.2-6.8-8.1-.4-.5-.9-1-1.3-1.5 4.1 4.1 7.4 8.2 10.4 11.7 3.2 3.8 5.9 7.1 8.3 9.6 2.3 2.5 4.3 4.3 5.7 5.4.7.6 1.3.9 1.6 1.1l.6.3s-1.2-2.6-3.8-8.7z"/>
|
||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="49.456" y1="121.778" x2="86.397" y2="121.778">
|
||||
<stop offset="0" stop-color="#0F92F7"/>
|
||||
<stop offset="1" stop-color="#0988F5"/>
|
||||
</linearGradient>
|
||||
<path class="st5" d="M86.1 130c-.6-4.1-2.1-6.8-3.3-8.3-.6-.8-1.2-1.3-1.6-1.6-.4-.3-.7-.4-.7-.4v.8c0 .5-.1 1.2-.1 2.2 0 1.3 0 2.9.1 4.9-.2-.8-.5-1.7-.7-2.6-.5-1.5-1.1-3-1.8-4.2-.7-1.2-1.4-2.2-2.1-3.1-1.4-1.8-2.7-3-3.8-3.9-2.2-1.8-3.5-2.3-3.5-2.3s.4 1.5 1.5 4.1c.5 1.3 1.3 2.9 2.1 4.7.4.9.8 1.9 1.3 2.9.2.5.4 1.1.6 1.6l.6 1.8v.1c-1.5-2.6-3.3-5.6-5.6-8.9-2.8-3.8-5.6-6.6-8.1-8.8-2.5-2.2-4.7-3.7-6.4-4.9-1.7-1.1-3.1-1.9-3.9-2.3-.9-.4-1.3-.6-1.3-.6s.4.4 1.2 1.1c.8.7 2 1.8 3.6 3.2 1.6 1.4 3.5 3.3 5.7 5.5 2.2 2.3 4.7 5 7.1 8.4 4.8 6.9 8.2 12.4 10.6 15.9.3.5.7 1 1 1.5.3.6.5 1.1.8 1.6 1.3 2.6 2.3 3.8 2.3 3.8s.4-1.3.4-4.1c0-.6 0-1.4-.1-2.2.3 1.1.5 2 .7 2.7.6 1.9.8 2.8.8 2.8s.2-.1.6-.5c.3-.4.8-1 1.2-1.9.8-1.8 1.5-4.8.8-9z"/>
|
||||
<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="110.05" y1="107.846" x2="147.716" y2="107.846">
|
||||
<stop offset="0" stop-color="#D116C5"/>
|
||||
<stop offset="1" stop-color="#B50DD8"/>
|
||||
</linearGradient>
|
||||
<path class="st6" d="M118.8 118.8c-1-1.1-2.2-1.7-3.2-2.2-1-.4-2-.6-2.8-.8-1.6-.2-2.7-.1-2.7-.1s.2.3.6.7c-.4-.3-.7-.4-.7-.4s-.1.9.1 2.2c.2 1.3.8 3.1 2.1 4.4.9 1 2 1.4 2.8 1.5h1c.2 0 .4-.1.4-.1s.1-.6 0-1.3c0-.3-.1-.6-.2-.9 1.1 1 2.1 1.5 2.9 1.7.9.2 1.5.2 1.5.2s.1-.6-.1-1.6c-.2-.9-.6-2.1-1.7-3.3zm12-5c-2.8-1.4-5.5-2.3-7.9-2.9-.6-.2-1.1-.3-1.7-.4-.2-.1-.4-.2-.6-.2-2-.7-3.8-1-5.4-1.2-3.1-.3-4.9.1-4.9.1s1.5 1 3.5 2.8c2 1.7 4.4 4.1 6.8 6.7 1.9 2 3.4 3.2 4.6 4 1.2.8 2 1.2 2 1.2s.4-.9.3-2.5v-.3c.7.4 1.3.6 1.8.8 1.5.6 2.5.6 2.5.6s0-.9-.6-2.4c2.1 1.1 3.8 1.8 5.1 2.4 1.8.7 2.9 1 2.9 1s-.1-1.2-1.2-3c-1.1-2.1-3.2-4.6-7.2-6.7zm10.3-8.3c-10-10.1-21.5-14-21.5-14s4.6 12.1 14 21.5c7.3 7.3 14.1 6.6 14.1 6.6s.6-6.9-6.6-14.1z"/>
|
||||
<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="128.647" y1="96.959" x2="162.052" y2="96.959">
|
||||
<stop offset="0" stop-color="#F83510"/>
|
||||
<stop offset="1" stop-color="#D92E0E"/>
|
||||
</linearGradient>
|
||||
<path class="st7" d="M161.2 97.1c-.7-2.2-2-4.8-4.2-7.2-3.1-3.4-6.8-5.6-10.3-7-3.5-1.4-6.7-2-9.4-2.4-2.7-.4-4.8-.4-6.3-.4s-2.3.1-2.3.1 1.5 2.9 3.9 7.2c1.2 2.1 2.7 4.6 4.3 7.2.8 1.3 1.6 2.7 2.5 4 .9 1.4 1.7 2.7 2.6 4.2 2.9 4.5 5.8 7.2 7.9 8.8 2.1 1.6 3.6 2.1 3.6 2.1s.3-1.5-.2-4.2-1.7-6.5-4.6-11c-.3-.4-.5-.8-.8-1.2-.3-.4-.6-.8-.8-1.2-.5-.8-1.1-1.5-1.7-2.2-1.2-1.4-2.3-2.7-3.5-3.8-2.3-2.3-4.6-4.2-6.5-5.7l-1.2-.9 1.8 1.2c2.1 1.5 4.5 3.3 6.9 5.5 1.2 1.1 2.4 2.3 3.5 3.5 1.1 1.3 2.2 2.6 3.1 4.1 3.1 4.5 4.9 8 6.3 10.3 1.3 2.3 2.1 3.5 2.1 3.5s.1-.3.3-1c.1-.7.3-1.8.2-3.2-.1-1.4-.3-3.3-1-5.4-.7-2.1-1.7-4.6-3.5-7.1-.6-.9-1.3-1.7-1.9-2.5l-.4-.4 1.5 1.5c3.6 4 5.3 7.6 6.5 10 1.2 2.5 1.7 3.7 1.7 3.7s.2-.3.4-1 .4-1.8.5-3.3c-.1-1.6-.3-3.6-1-5.8z"/>
|
||||
<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="146.483" y1="72.45" x2="176.962" y2="72.45">
|
||||
<stop offset="0" stop-color="#F6A500"/>
|
||||
<stop offset="1" stop-color="#F5A100"/>
|
||||
</linearGradient>
|
||||
<path class="st8" d="M164.2 83.5c-.3-.4-.6-.8-.9-1.1l-.5-.6-.6-.6-.6-.5-.4-.3c-.3-.2-.6-.4-.8-.6-1.1-.9-2.2-1.7-3.2-2.5-2.1-1.7-3.9-3.2-5.5-4.4-3.3-2.6-5.2-4.2-5.2-4.2s.5 2.8 2.2 6.9c.9 2 2.1 4.3 3.8 6.6.8 1.2 1.8 2.3 2.9 3.5 1.4 1.3 1.7 1.7 2.4 2.7 1.1 1.5 2.2 3 3.3 4.3 1 1.2 2 2.2 2.9 3 1.7 1.5 3 2.1 3 2.1s.6-1.3.7-3.7c0-1.2-.1-2.7-.6-4.5-.5-1.9-1.2-3.9-2.9-6.1zm12.6-4.6c-.2-1.3-.6-3-1.3-4.9-.7-1.9-1.7-4.1-3.2-6.5-4.2-6.7-9-11.5-12.5-15-3.5-3.4-6-5.2-6-5.2s.2 3.6 1.2 9.2c.5 2.8 1.2 6 2.1 9.6 1 3.5 2.2 7.3 4.2 11.1.4.8.7 1.4 1.1 2 .4.6.7 1.2 1 1.8.7 1.1 1.3 2.2 1.8 3.1 1.1 1.9 2.1 3.4 2.9 4.6 1.6 2.4 2.5 3.5 2.5 3.5s.3-.3.6-.9c.4-.7.9-1.7 1.3-3.2.4-1.5.7-3.5.5-6-.1-1.4-.4-3-.9-4.6.8 1.1 1.4 2 2 2.7.8 1 1.4 1.7 1.8 2.2.4.5.6.8.6.8s.1-.3.2-1c.3-1 .3-2 .1-3.3z"/>
|
||||
<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="170.938" y1="55.875" x2="192.731" y2="55.875">
|
||||
<stop offset="0" stop-color="#6EDC00"/>
|
||||
<stop offset="1" stop-color="#66CB00"/>
|
||||
</linearGradient>
|
||||
<path class="st9" d="M192.1 63.9c-.2-.8-.5-1.6-.8-2.5-.3-.8-.6-1.5-.9-2.2-3.8-8.4-7.7-15.7-10.8-20.8-3.1-5.1-5.2-8.2-5.2-8.2s-1.2 3.8-2.2 9.8c-.5 3-1 6.6-1.2 10.6-.1 4-.1 8.4 1.2 13.1 2 6.5 3.8 10.8 5.2 13.7 1.4 2.8 2.3 4.1 2.3 4.1s.4-1.6.3-4.8c-.1-2.2-.4-5.1-1.1-8.7.1.3.3.6.4.9.1.3.2.5.3.8.1.3.2.5.2.8.2.5.3 1 .4 1.5.5 1.9.5 3.6.4 5-.1 1.4-.4 2.6-.6 3.4l-.3 1.2s.5 0 1.3-.4 2-1.1 3.2-2.6c1.1-1.4 2.3-3.5 2.6-6.3.1.7.2 1.4.2 2.1.1 1.4 0 2.5-.1 3.3-.1.8-.2 1.2-.2 1.2s.4-.1 1.2-.5c.8-.4 1.9-1.3 2.9-2.9 1-1.6 1.9-3.9 1.9-6.9.1-1.5-.2-3.1-.6-4.7z"/>
|
||||
<linearGradient id="SVGID_10_" gradientUnits="userSpaceOnUse" x1="188.198" y1="40.946" x2="228.677" y2="40.946">
|
||||
<stop offset="0" stop-color="#0F92F7"/>
|
||||
<stop offset="1" stop-color="#0988F5"/>
|
||||
</linearGradient>
|
||||
<path class="st10" d="M228.6 37c-.2-1.1-.6-2-1-2.6-.4-.6-.8-1-1.1-1.2-.3-.2-.4-.3-.4-.3s.1.2.1.6c.1.4.1.9 0 1.5s-.2 1.3-.6 2c-.4.7-.9 1.3-1.6 1.8-.7.6-1.6 1-2.6 1.5s-2.1.8-3.4 1.2c-1.3.4-2.8.7-4.7 1.6-.6.3-1.3.6-1.9 1.1 0-1-.1-2.1-.1-3-.1-1.9-.2-3.8-.3-5.6-.2-3.5-.4-6.7-.6-9.4-.4-5.3-.9-8.5-.9-8.5s-1.7 2.4-4 6.3c-1.1 2-2.4 4.3-3.6 7.1-.9 1.9-1.6 4.1-2.1 6.4-.1-.5-.2-.9-.3-1.4-.7-3.6-2.4-6.3-3.9-8.3-1.6-2-3-3.3-4.1-4.2-1.1-.8-1.7-1.2-1.7-1.2s.1.7.2 1.9 0 2.9-.2 4.9c-.1 1-.3 2.1-.5 3.2-.1.6-.2 1.1-.3 1.7l-.3 2.1c-.3 2.8-.4 5.8-.2 8.9.3 4.7 1.7 8 2.9 10s2.3 2.9 2.3 2.9.9-1.1 1.6-3.4c.6-1.8 1.2-4.3 1.2-7.5v.2c1.2 5.4 3 9 4.3 11.3 1.4 2.2 2.4 3.1 2.4 3.1s.2-1.3.1-3.9c-.1-2-.4-4.8-1-8.4.2-2.2.4-4.9.8-8.4.2-1.6.4-3.2.8-4.7.1-.8.3-1.5.5-2.2l.6-2.1c.1-.2.1-.4.2-.6-.3 1.4-.7 2.8-1 4.3-.7 3.6-1 7.5-.9 11.5.1 6.2 1 10.5 1.7 13.3.8 2.8 1.4 4 1.4 4s.3-.4.7-1.1c.5.8.8 1.2.8 1.2s1.2-1.1 2.7-3.2c.7-1 1.6-2.3 2.4-3.8.4-.7.8-1.5 1.3-2.3.2-.4.4-.8.7-1.2l.3-.6c.1-.1.2-.3.3-.4.5-.8 1-1.3 2.1-2 1-.7 2.6-1.4 4.1-2.4 1.5-1 2.9-2.1 4-3.4 1.1-1.2 1.9-2.6 2.4-4 .5-1.8.6-3.2.4-4.3z"/>
|
||||
<path class="st0" d="M255.1 30.5l-1.3 2.1c-.1.1-.2.3-.6.5-.4.3-1.3.9-2.7 1.3-1.2.4-2.7.5-4.7.6h-.9c-.8 0-1.7 0-2.7-.1h-1.5l-.6-.1c-.8-.1-2.1-.1-3.3-.1h-.3c-4.7 0-9.5 1.4-13.2 3.9-3.7 2.4-5.5 5.4-6.5 7.5-.8 1.9-1.3 3.8-1.2 5.7 0 .6.1 1.2.2 1.6.1.3.1.5.2.6l.8 2.3 2.1-1.2 1.4-.8c1.2-.6 2.4-1.2 3.6-1.7 1.6-.6 3.4-1.1 5.4-1.4 2.3-.4 4.6-.5 7.1-.5H239.3c1 0 2.2 0 3.4-.2l1.2-.2h.5c.5-.1.9-.2 1.3-.3l.2-.1c1.1-.3 2.1-.7 2.9-1 3.5-1.4 6.5-4 8.1-6.9 1.7-3.1 1.5-5.8 1.3-6.8-.1-.9-.4-1.5-.7-1.9-.2-.4-.4-.6-.5-.7l-1.9-2.1z"/>
|
||||
<path class="st0" d="M255.9 20.5l-1.1 1.5s-.1.1-.3.2c-.2.1-.9.4-1.8.4h-.6c-.8 0-1.6-.1-2.8-.2-.3 0-.7-.1-1.1-.1-.4 0-.9-.1-1.4-.1h-.2c-.3 0-.6-.1-1-.1l-.5-.1c-.5-.1-1.5-.1-2.4-.1h-.2c-3.6 0-7.1 1-9.8 2.9-3 2-4.4 4.5-4.9 5.8-.6 1.5-.9 3.1-.8 4.6.1 1.1.4 1.7.5 1.9l.8 1.6 1.7-.7s.4-.2 1.1-.4c.6-.2 1.6-.5 2.7-.7 1-.2 2.3-.3 3.8-.4 1.2-.1 2.5-.1 4.2-.1H244.6c.8 0 1.6-.1 2.4-.2.6-.1 1.5-.2 2.3-.5.3-.1.7-.2 1-.3h.2l.6-.2.4-.2c1.3-.5 2.6-1.3 3.7-2.3 1.1-1 1.9-2 2.4-3 1.4-2.6 1.1-4.7.9-5.6-.2-.8-.5-1.3-.7-1.6-.2-.3-.4-.5-.6-.7l-1.3-1.3zM249 54.3c.2-1.5-.1-2.4-.2-2.7l-.5-1.4-1.5.1h-.1c-.2 0-.6 0-1.1-.1-.8-.1-2-.3-3.6-.6l-.3-.1c-1.5-.3-3.1-.6-5.1-.8h-.5c-.4 0-.7-.1-1.1-.1H230c-.6.1-1.1.1-1.7.2-4.1.6-7.7 2.2-10.8 4.7-2 1.6-3.5 3.5-4.7 5.5l-.1.1-.1.1c-.5 1.2-1.7 3.5-.5 4.7 6.5 6.3 24.1 11 28.5 11.6-.1-5.1-.9-9.8 0-10.2 2.6-1.5 4.9-3.5 6.4-5.8 1.5-2 1.9-4.1 2-5.2z"/>
|
||||
<path class="st11" d="M240.7 65.8c-.4.2-1 .6-1.8 1.1-.8.4-1.7 1-2.7 1.4-1.1.4-2.3.8-3.8.9-.8.1-1.7.1-2.5.1s-1.6 0-2.2.1c-1.4.1-2.6.2-3.5.3-.3 0-.6.1-.8.1 1.1.4 2.2.9 3.3 1.3 3.1 1.1 6.2 2 9.2 2.7 1-.4 1.9-1 2.6-1.6 1.3-1.2 2-2.4 2.4-3.5.4-1 .5-1.9.5-2.4 0-.6-.1-.8-.1-.8s-.1.1-.6.3zm13.5-31.6c-.2-.3-.2-.4-.2-.4s-.3.5-1 1-1.7 1.2-3.1 1.6c-1.4.4-2.9.6-5 .7-1 0-2.2 0-3.5-.1-.3 0-.7 0-1-.1-.4 0-.7-.1-1.1-.1-.6-.1-1.8-.1-2.9-.1-4.6-.1-8.7 1.5-11.5 3.5-2.9 2-4.5 4.5-5.4 6.5-.9 2.1-1 3.7-1 4.7 0 .5.1.9.1 1.2.1.3.1.4.1.4s.5-.3 1.4-.8c.9-.5 2.1-1.1 3.7-1.8 1.5-.6 3.4-1.1 5.4-1.5 2.1-.3 4.4-.6 7.3-.6H238.9c1 0 1.9 0 2.9-.2.5-.1.9-.1 1.4-.2.5-.1.9-.2 1.3-.3.9-.2 1.7-.6 2.5-.9 3.2-1.4 5.5-3.7 6.6-5.9 1.2-2.2 1.2-4.2 1-5.4 0-.5-.2-1-.4-1.2zm-8.9 18.1c-1-.1-2.3-.3-3.8-.6s-3.2-.6-5.3-.8c-.5 0-1-.1-1.6-.1-.5 0-1.1-.1-1.7-.1H229.8c-.5.1-1 .1-1.6.2-4.3.7-7.5 2.5-9.8 4.3-2 1.6-3.3 3.4-4.2 4.9-.3.9-.7 2.4-.4 3.6.1.5.3 1 .5 1.4 1.2.8 2.6 1.5 3.9 2.2h.2c1.7.1 3.7.1 5.8 0 2.1-.1 4.2-.3 6.5-.7.8-.1 2.9-.5 4.4-.9 1.6-.5 3-1.1 4.3-1.8 2.6-1.5 4.5-3.3 5.7-5.1 1.2-1.8 1.7-3.5 1.8-4.7.1-1.2-.1-1.8-.1-1.8s-.5.1-1.5 0zm11.2-28.7c-.1-.2-.2-.3-.2-.3s-.3.3-.9.6c-.6.3-1.5.6-2.6.6-1.1.1-2.2 0-3.6-.2-.7-.1-1.5-.1-2.5-.3-.5 0-1-.1-1.5-.2-.4 0-1.4-.1-2.2-.1-3.5 0-6.7 1-8.9 2.5-2.3 1.5-3.6 3.4-4.2 4.9-.6 1.6-.7 2.8-.6 3.7.1.8.3 1.2.3 1.2s.4-.2 1.2-.4c.7-.3 1.8-.6 3-.8 1.2-.2 2.6-.4 4.1-.4 1.5-.1 3.1-.1 5.2-.1h1.8c.8 0 1.5 0 2.2-.2.7-.1 1.4-.2 2.1-.4.3-.1.7-.2 1-.3.3-.1.6-.3.9-.4 1.2-.5 2.3-1.2 3.2-2 .9-.8 1.6-1.6 2-2.5.9-1.7 1-3.2.8-4.1-.3-.3-.4-.6-.6-.8zm1.8-9s-.2.2-.7.3c-.4.1-1.1.1-1.8 0s-1.5-.3-2.5-.5c-.3 0-.5-.1-.8-.1-.3 0-.6-.1-.9-.1-.7-.1-1.2-.2-2.5-.2-2.3 0-4.3.6-5.9 1.5-1.5.9-2.5 2.1-3.1 3.1-.5 1.1-.6 1.9-.6 2.5 0 .6.2.9.2.9s1.3-.4 3-.4 3.6.2 6.4.2h1.1c.5 0 1 0 1.4-.1.9-.1 1.8-.4 2.6-.7 1.6-.7 2.9-1.7 3.6-2.8.8-1.1.9-2.2.8-2.9.1-.5-.3-.7-.3-.7zm1.3-8.9c0-.3-.1-.5-.2-.6l-.1-.1s-.1.1-.2.1-.3 0-.5-.1c-.4-.1-.9-.3-1.5-.4-.6-.1-1.3-.2-2.1-.2-.4 0-.8 0-1.2.1-.2 0-.4.1-.6.1h-.2l-.2.1c-.2.1-.3.1-.5.2-2.4 1.2-3.4 3.1-3.7 4.6-.2.8-.1 1.5 0 1.9.1.5.3.7.3.7.1-.4 3.8 1.4 6.8-.1.2-.1.3-.2.6-.3.3-.1.5-.3.7-.5.5-.3.8-.7 1.1-1.1.6-.8 1-1.6 1.2-2.4.4-.7.4-1.5.3-2z"/>
|
||||
<path class="st12" d="M240.7 65.8c-.4.2-1 .6-1.8 1.1-.8.4-1.7 1-2.7 1.4-1.1.4-2.3.8-3.8.9-.8.1-1.7.1-2.5.1s-1.6 0-2.2.1c-1.4.1-2.6.2-3.5.3-.3 0-.6.1-.8.1 1.1.4 2.2.9 3.3 1.3 3.1 1.1 6.2 2 9.2 2.7 1-.4 1.9-1 2.6-1.6 1.3-1.2 2-2.4 2.4-3.5.4-1 .5-1.9.5-2.4 0-.6-.1-.8-.1-.8s-.1.1-.6.3zm13.5-31.6c-.2-.3-.2-.4-.2-.4s-.3.5-1 1-1.7 1.2-3.1 1.6c-1.4.4-2.9.6-5 .7-1 0-2.2 0-3.5-.1-.3 0-.7 0-1-.1-.4 0-.7-.1-1.1-.1-.6-.1-1.8-.1-2.9-.1-4.6-.1-8.7 1.5-11.5 3.5-2.9 2-4.5 4.5-5.4 6.5-.9 2.1-1 3.7-1 4.7 0 .5.1.9.1 1.2.1.3.1.4.1.4s.5-.3 1.4-.8c.9-.5 2.1-1.1 3.7-1.8 1.5-.6 3.4-1.1 5.4-1.5 2.1-.3 4.4-.6 7.3-.6H238.9c1 0 1.9 0 2.9-.2.5-.1.9-.1 1.4-.2.5-.1.9-.2 1.3-.3.9-.2 1.7-.6 2.5-.9 3.2-1.4 5.5-3.7 6.6-5.9 1.2-2.2 1.2-4.2 1-5.4 0-.5-.2-1-.4-1.2zm-8.9 18.1c-1-.1-2.3-.3-3.8-.6s-3.2-.6-5.3-.8c-.5 0-1-.1-1.6-.1-.5 0-1.1-.1-1.7-.1H229.8c-.5.1-1 .1-1.6.2-4.3.7-7.5 2.5-9.8 4.3-2 1.6-3.3 3.4-4.2 4.9-.3.9-.7 2.4-.4 3.6.1.5.3 1 .5 1.4 1.2.8 2.6 1.5 3.9 2.2h.2c1.7.1 3.7.1 5.8 0 2.1-.1 4.2-.3 6.5-.7.8-.1 2.9-.5 4.4-.9 1.6-.5 3-1.1 4.3-1.8 2.6-1.5 4.5-3.3 5.7-5.1 1.2-1.8 1.7-3.5 1.8-4.7.1-1.2-.1-1.8-.1-1.8s-.5.1-1.5 0zm11.2-28.7c-.1-.2-.2-.3-.2-.3s-.3.3-.9.6c-.6.3-1.5.6-2.6.6-1.1.1-2.2 0-3.6-.2-.7-.1-1.5-.1-2.5-.3-.5 0-1-.1-1.5-.2-.4 0-1.4-.1-2.2-.1-3.5 0-6.7 1-8.9 2.5-2.3 1.5-3.6 3.4-4.2 4.9-.6 1.6-.7 2.8-.6 3.7.1.8.3 1.2.3 1.2s.4-.2 1.2-.4c.7-.3 1.8-.6 3-.8 1.2-.2 2.6-.4 4.1-.4 1.5-.1 3.1-.1 5.2-.1h1.8c.8 0 1.5 0 2.2-.2.7-.1 1.4-.2 2.1-.4.3-.1.7-.2 1-.3.3-.1.6-.3.9-.4 1.2-.5 2.3-1.2 3.2-2 .9-.8 1.6-1.6 2-2.5.9-1.7 1-3.2.8-4.1-.3-.3-.4-.6-.6-.8zm1.8-9s-.2.2-.7.3c-.4.1-1.1.1-1.8 0s-1.5-.3-2.5-.5c-.3 0-.5-.1-.8-.1-.3 0-.6-.1-.9-.1-.7-.1-1.2-.2-2.5-.2-2.3 0-4.3.6-5.9 1.5-1.5.9-2.5 2.1-3.1 3.1-.5 1.1-.6 1.9-.6 2.5 0 .6.2.9.2.9s1.3-.4 3-.4 3.6.2 6.4.2h1.1c.5 0 1 0 1.4-.1.9-.1 1.8-.4 2.6-.7 1.6-.7 2.9-1.7 3.6-2.8.8-1.1.9-2.2.8-2.9.1-.5-.3-.7-.3-.7zm1.3-8.9c0-.3-.1-.5-.2-.6l-.1-.1s-.1.1-.2.1-.3 0-.5-.1c-.4-.1-.9-.3-1.5-.4-.6-.1-1.3-.2-2.1-.2-.4 0-.8 0-1.2.1-.2 0-.4.1-.6.1h-.2l-.2.1c-.2.1-.3.1-.5.2-2.4 1.2-3.4 3.1-3.7 4.6-.2.8-.1 1.5 0 1.9.1.5.3.7.3.7.1-.4 3.8 1.4 6.8-.1.2-.1.3-.2.6-.3.3-.1.5-.3.7-.5.5-.3.8-.7 1.1-1.1.6-.8 1-1.6 1.2-2.4.4-.7.4-1.5.3-2z"/>
|
||||
<path class="st0" d="M182.3 46.7c8.9 2.9 18.2 11 23.1 18.3 1.6-.2 3.2-.3 4.8-.3 14.2 0 26.6 7 33.4 17.5h.9c16.2 1.1 29.4 10.6 29.4 26.9 0 16.3-12.2 31.6-28.5 31.6-1.7 0-3.3-.1-5-.4-.3 0-.5-.1-.8-.1-.6 0-1.2.1-1.8.4-4.3 1.8-9.9 3.3-17.2 4.1-.8.1-1.5.1-2.2.1-5.3 0-9.8-2.3-14.7-5.7-.5 0-7 7.6-12 16.5-3.3 5.9-5.5 12.9-6.7 17 .2 1.9.4 3.8.4 5.7.1 6.9-1.1 13.3-3.4 19.2 2.3 2.2 5.1 4.9 7.8 7.8 6.4 6.9 17.8 23 18.1 23.4 4.4 6.1-1.1 23.4-15.6 33.3-7.6 5.2-16.5 7.5-23.7 7.5-6.5 0-11.7-1.8-13.5-5.1-.7-1.2-1.2-4.5-1.2-4.5s-3.5-14.8-8.5-28.3c-.2-.6-.4-1.2-.6-1.7-5.3 1.7-10.9 2.8-16.8 3.3-.7.1-1.4.1-2.2.1-4.1 0-8.1-.9-11.9-1.4-1.9 13.6-1.5 31.4-1.5 31.4.2 1.8.1 3.3-.4 4.7-1.7 4.5-9.4 7.7-18.8 7.7-5.8 0-12.3-1.2-18.4-4.1-15.8-7.4-24.1-23.6-20.7-30.3.2-.5 8.9-18.3 14.1-26.1 1.7-2.5 3.4-4.9 5-7.1-4.5-7.9-6.8-17.1-6.1-26.7 2-30.2 24.9-56 57.8-56.6h1.3c4.1 0 8.1.4 11.9 1.1 3.5-1.1 10.5-3.9 18-11.3 7.7-7.5 13.5-17 16.2-21.8 1.2-4.8 3.5-9.3 6.5-13.2-.8-2.7-1.2-5.9-1.2-9.6-.1-9 1.7-17.1 4.7-23.3m-1.5-3.7l-1.2 2.3c-3.3 6.7-5.1 15.3-5.1 24.6 0 3.3.3 6.3 1 9-2.8 3.9-4.9 8.2-6.1 12.7-2.8 4.9-8.3 13.8-15.5 20.8-6.6 6.5-12.7 9.2-16.1 10.4-3.9-.7-7.8-1-11.7-1h-1.3c-16.3.3-31.4 6.8-42.6 18.1-10.7 10.9-17.1 25.6-18.1 41.3-.6 9.3 1.3 18.4 5.6 26.6-1.4 2-2.8 3.9-4 5.7-4.5 6.7-11.4 20.5-14.1 26.1l-.1.3c-1.5 2.9-1.4 6.8.1 11.3 2.4 7.1 9.7 17.4 22 23.2 6.1 2.8 12.9 4.3 19.7 4.3 10.8 0 19.5-3.9 21.6-9.7.3-.8.5-1.7.6-2.6h.1v-.5c.1-.8 0-1.7 0-2.6v-.1c0-.2-.3-15.2 1.1-27.9h.2c2.9.5 5.9 1 9.1 1 .8 0 1.6 0 2.4-.1 5-.4 10-1.3 14.7-2.6 4.5 12.3 7.7 25.6 8 27 .2 1.2.7 3.9 1.5 5.4 2.4 4.2 8.2 6.6 16.2 6.6 8.7 0 18-2.9 25.4-8 11.3-7.7 16.8-19.1 18-26.4.8-4.7.2-8.5-1.7-11.1l-.2-.3c-3.6-5.1-12.6-17.5-18.2-23.5-2-2.1-4.1-4.3-6.5-6.6 2.1-5.9 3-12.1 2.9-18.5 0-1.8-.2-3.6-.4-5.4 1.1-3.8 3.2-10.3 6.3-15.8 3.5-6.1 7.6-11.6 9.8-14.1 4 2.6 8.7 4.9 14.3 4.9.8 0 1.7-.1 2.6-.2 7.1-.8 13.1-2.3 18-4.3.2-.1.4-.1.6-.1h.3c1.8.3 3.6.5 5.5.5 8.6 0 16.6-3.8 22.6-10.7 5.6-6.5 8.9-15.2 8.9-23.9 0-16.4-12.7-28.4-31.6-29.8-7.8-11-20.8-17.5-35-17.5-1.1 0-2.2 0-3.4.1-5-6.8-14.1-14.9-23.7-18l-2.5-.9z"/>
|
||||
<path class="st0" d="M206.7 67.2l3.7-2.9c-6.1-9-17.2-18.1-26.8-21.2l-3.3-1.1-1.5 3.1c-3.4 6.9-5.2 15.5-5.2 25.1 0 3.2.1 5.4 1 8.9s3.2 5.5 3.2 5.5l4-3.7 24.9-13.7z"/>
|
||||
<path class="st13" d="M244.5 82.2h-.9c-6.8-10.5-19.2-17.5-33.4-17.5-1.6 0-3.2.1-4.8.3-4.9-7.4-14.3-15.5-23.1-18.3-3.1 6.2-4.8 14.3-4.8 23.3 0 3.7.4 6.9 1.2 9.6-3.1 3.9-5.3 8.4-6.5 13.2-2.7 4.8-8.5 14.3-16.2 21.8-7.6 7.4-14.5 10.2-18 11.3-4.3-.8-8.7-1.2-13.2-1.1-32.9.7-55.8 26.5-57.8 56.6-.6 9.6 1.6 18.8 6.1 26.7-1.6 2.1-3.3 4.6-5 7.1-5.2 7.8-13.9 25.6-14.1 26.1-3.4 6.7 4.9 22.9 20.7 30.4 15.8 7.4 34.5 3.7 37.2-3.6.5-1.3.6-2.9.4-4.7 0 0-.4-17.8 1.5-31.4 4.5.6 9.2 1.8 14.1 1.3 5.9-.5 11.5-1.6 16.8-3.3.2.6.4 1.1.6 1.7 5 13.6 8.5 28.3 8.5 28.3s.5 3.3 1.2 4.5c3.8 6.8 22.9 7.5 37.3-2.4 14.4-9.9 20-27.2 15.6-33.3-.3-.4-11.7-16.6-18.1-23.4-2.7-2.9-5.4-5.6-7.8-7.8 2.3-5.9 3.6-12.3 3.4-19.2 0-1.9-.2-3.8-.4-5.7 1.2-4.2 3.4-11.1 6.7-17 5.1-9.1 11.8-16.7 12.1-16.5 5.5 3.9 10.6 6.3 16.9 5.6 7.3-.9 13-2.3 17.2-4.1.8-.3 1.7-.4 2.6-.3 1.6.3 3.3.4 5 .4 16.3 0 28.5-15.3 28.5-31.6-.1-16.4-13.3-25.9-29.5-27z"/>
|
||||
<path class="st13" d="M205.5 65c-4.9-7.4-14.3-15.5-23.1-18.3-3.1 6.2-4.8 14.3-4.8 23.3 0 3.7.4 6.9 1.2 9.6 1.3 3.7 7.6 11.6 19.4 4 11.9-7.6 8.7-16.3 7.3-18.6z"/>
|
||||
<path class="st0" d="M249.3 140.9c-10.1-.9-18.5-6.8-23.1-15.1 1.8 6.5 5.9 12.2 11.3 16.1 1 .2 2 .3 3 .4 3.8.4 7.4-.2 10.8-1.4-.7.1-1.3.1-2 0z"/>
|
||||
<ellipse transform="rotate(-14.647 259.34 101.424)" class="st0" cx="259.3" cy="101.4" rx="1.9" ry="4.2"/>
|
||||
<path class="st0" d="M218.8 99.9c-1.2-2.3-.5-5.1 1.7-6.5 2.2-1.4 5-.8 6.5 1.1l4.1-2.7c-2.7-3.8-7.9-4.8-11.9-2.3-4 2.6-5.3 7.8-2.9 12l2.5-1.6zM197.1 121.8c0-5.8 1.6-9.8 4.6-12.6-4.8 2.7-7.3 6.9-7.3 14.1 0 12.6 10.3 24.5 22.8 23.1-12.4-2.5-20.1-12.6-20.1-24.6zM178 77.4l-1.8 2.8c2.3 4.4 5.6 6.6 9.7 7.3-3.4-2-6.1-5.3-7.9-10.1zM207.8 63.1c-1 0-2.1.1-3 .1 1.1 2.3 2 4.6 2.5 6.7.4 1.7.8 3.3 1.1 4.8.9-2.7 1.2-5.4.7-7.7-.4-1.2-.8-2.5-1.3-3.9zM185.5 60.4s-.6 7.9 2.3 13.8c2.1 4.1 4.3 6.5 5.4 7.5.4.4 1 .5 1.6.4 1-.3 2.8-1.1 4.4-2.5 1.3-1.2 2.1-2.1 2.5-2.7.4-.5.4-1.1.1-1.6-.7-1.2-2.3-3.9-6.3-7.8-4.2-4.3-10-7.1-10-7.1zM94 236.1c-13.3-6.2-27.6-4.3-33.9.5 7.3-2.8 18.8-3.2 29.6 1.9 15.8 7.4 24 22.8 21.3 30.2-.5 1.3-1.4 2.4-2.7 3.4 3.6-1.4 5.1-6.6 5.3-9.2.5-8.4-3.8-19.4-19.6-26.8zM155.3 264c1.2-7.1 9.5-18.5 22.2-25.9 15.5-9.1 29.9-7.6 33.2-2.5.1.2.3.5.4.7.3-2 0-3.6-.7-4.8-3.3-5.1-17.8-6.7-33.2 2.5-13.2 7.9-22.6 20.5-21.9 30 0-.1 0-.1 0 0z"/>
|
||||
<path class="st0" d="M78.6 252.8c2.3 0 5 .4 7.7 1.5 6.9 2.8 11.1 8.5 10.3 11.2-.5 1.6-3.4 2.7-7.3 2.7-2.5 0-5.3-.5-8-1.6-6.9-2.8-11.1-8.8-10.1-11.2.7-1.5 3.6-2.6 7.4-2.6m0-3c-3.9 0-8.6 1.2-10.1 4.4-.4 1-.8 2.6.2 4.9 1.4 3.4 5.4 7.9 11.5 10.3 2.9 1.2 6.1 1.8 9.1 1.8 5.5 0 9.3-1.8 10.1-4.9 1.3-4.7-4.3-11.6-12.1-14.8-2.7-1.1-5.8-1.7-8.7-1.7zM195.6 244.2c.6 0 1.1.1 1.3.4 1.2 1.2-3.6 7.3-10.6 12-5.5 3.6-11 5.6-13.6 5.6-.7 0-1.2-.2-1.4-.5-.8-1.4 3.5-7.1 10.5-11.8 5.7-3.8 11.2-5.7 13.8-5.7m0-3c-3.6 0-9.8 2.5-15.4 6.1-4.1 2.7-14.2 10.9-11.5 15.7.5.9 1.6 2 4 2 3.6 0 9.8-2.5 15.2-6.1 5.6-3.7 11.8-9.7 12.2-13.5.1-1.2-.2-2.3-1-3.1-.9-.7-2.1-1.1-3.5-1.1z"/>
|
||||
<path class="st11" d="M96.6 265.5c-.8 2.7-8.3 4-15.3 1.2-6.9-2.8-11.1-8.8-10.1-11.2 1.1-2.4 8.1-3.9 15-1.1 7 2.7 11.1 8.4 10.4 11.1zM196.9 244.6c1.2 1.2-3.6 7.3-10.6 12s-14.1 6.5-14.9 5.1c-.8-1.4 3.5-7.1 10.5-11.8 7-4.7 13.8-6.5 15-5.3z"/>
|
||||
<path class="st0" d="M103.9 196.3c-9.7-3.4-19.7-.8-22.6 2.5 4-1.9 11.7-2.8 19.5-.1 10.2 3.6 16.5 11.6 16 15.2-.4 2.1-1 5-1.6 8-1.1 5.9-1.6 12.4-1.6 12.4l2.9.1s.1-3.9 1-9.4c.9-5.8 2-10 2-10 .3-.4.5-.9.6-1.5.9-4.1-5.4-13.4-16.2-17.2zM178.8 190.3c-.9-1-2.9-3.4-3.9-4.5-.1-.2-.2-.4-.4-.5-1.9-2-11.6.2-21.3 6.6-8.6 5.7-11.8 11.6-14.2 16 2.2-3.2 6.7-7.7 12.7-11.7 9.2-6.1 19.8-9.3 21.5-7.8 0 0 1.5 1.8 4 4.3 2.4 2.5 5 5.1 5 5.1l1.7-2.2s-3.9-4-5.1-5.3z"/>
|
||||
<path class="st14" d="M172.3 194.4l-4.5 3.8M167.8 198.8c-.2 0-.3-.1-.5-.2-.2-.3-.2-.6.1-.8l4.5-3.8c.3-.2.6-.2.8.1.2.3.2.6-.1.8l-4.5 3.8c-.1 0-.2.1-.3.1zM124.2 221.8l-.5 7.8M134.9 222.8l2.3 5.1M175.6 200.6l-5.3 2.6M170.3 203.8c-.2 0-.4-.1-.5-.3-.1-.3 0-.7.3-.8l5.3-2.6c.3-.1.7 0 .8.3.1.3 0 .7-.3.8l-5.3 2.6h-.3zM186.1 220.5l-4.3 2.8M181.8 223.8c-.2 0-.3-.1-.4-.2-.2-.2-.1-.5.1-.7l4.3-2.8c.2-.2.5-.1.7.1.2.2.1.5-.1.7l-4.3 2.8c-.1.1-.2.1-.3.1zM185.8 162.6c-.2-.2-.5-.2-.7-.1l-1 .8c-.1-.3-.1-.5-.2-.8l1.1-.7c.3-.2.3-.6.2-.8-.2-.3-.6-.3-.8-.2l-.8.5c-2.1-6.6-5.4-12.6-9.8-17.8l1.3-1.1c.3-.3.4-.7.1-1.1-.3-.3-.7-.4-1.1-.1l-1.3 1.1c-4-4.5-8.8-8.3-14.1-11.4l1.4-2c.2-.2.1-.5-.1-.7-.2-.2-.5-.1-.7.1l-1.5 2.1-3.3-1.8c-.3-.1-.6-.1-.8.1l-.6.5c-.4.3-.3 1 .2 1.2 1.1.5 2.2 1.1 3.2 1.7l-.7 1c-.2.2-.1.5.1.7.1.1.2.1.3.1.2 0 .3-.1.4-.2l.8-1c5.1 3 9.7 6.8 13.6 11.1l-.8.7c-.3.3-.4.7-.1 1.1.1.2.4.3.6.3.2 0 .3-.1.5-.2l.8-.7c4.4 5.2 7.8 11 10 17.4l-1.2.8c-.3.2-.3.6-.2.8.1.2.3.3.5.3.1 0 .2 0 .3-.1l.9-.6.3.9-1.2 1c-.2.2-.2.5-.1.7.1.1.2.2.4.2.1 0 .2 0 .3-.1l.8-.7.6 2.4 1.1-1.9c.1-.2.1-.4.1-.5l-.3-1.2 1.3-1.1c.4-.2.4-.5.2-.7zM93.9 198.2c-.2 0-.5.3-.7.8l-3.2 6.5-2.1-.5c-.3-.1-.6.1-.7.4-.1.3.1.6.4.7l1.8.5-6.2 12.6-1.9.1c-.3 0-.5.2-.5.5s.2.5.5.5l1.3-.1-.9 1.8-1.7-.5c-.3-.1-.5.1-.6.3-.1.3.1.5.3.6l1.6.5-3.1 6.4c-.2.5-.1.9.3.9s1-.4 1.2-.9l2.8-6 1 .3h.1c.2 0 .4-.1.5-.4.1-.3-.1-.5-.3-.6l-.9-.3 1-2.2 1.3-.1c.3 0 .5-.2.5-.5s-.3-.5-.5-.5h-.8l5.7-12.4 1.2.3h.1c.3 0 .5-.2.6-.5.1-.3-.1-.6-.4-.7l-1-.2 3-6.6c.4-.3.5-.7.3-.7z"/>
|
||||
<path class="st14" d="M185.6 226.8c-.2 0-.4-.1-.5-.3 0-.1-2.1-6.2-9-18.5s-10.3-16.3-10.3-16.3c-.2-.2-.2-.5 0-.7.2-.2.5-.2.7 0 .1.2 3.5 4.1 10.4 16.5s9 18.7 9 18.7c.1.3-.1.5-.3.6.1 0 0 0 0 0zM140.6 223.5c-.2-.4-.7-.6-1.1-.4 0 0-1.3.6-3.3 1.3l-.8-1.9c-.1-.2-.3-.3-.5-.2-.2.1-.3.3-.2.5l.8 1.8c-2 .6-4.5 1.2-7.4 1.5-1.4.1-2.7.2-3.7.2l.3-4.5c0-.2-.2-.4-.4-.4s-.4.2-.4.4l-.3 4.6c-2.8-.1-3.8-.4-3.9-.5-.4-.2-.9 0-1.1.5-.2.4 0 .9.5 1.1.2.1 1.4.5 4.4.6l-.1 1.6c0 .2.2.4.4.4s.4-.2.4-.4l.1-1.6c1.1 0 2.4 0 3.9-.2 3.1-.2 5.8-.9 7.9-1.6l.8 1.8c.1.1.2.2.4.2h.2c.2-.1.3-.3.2-.5l-.8-1.7c2-.7 3.3-1.3 3.4-1.4.3-.2.5-.8.3-1.2z"/>
|
||||
<path class="st0" d="M46.4 112.8s2.4 2.5 6 6.6c1.8 2 3.8 4.4 6 7.2 1.1 1.4 2.1 2.8 3.2 4.3s2.2 3.1 3.3 4.7c3.6 4.9 6.5 8 8.5 10s3.1 2.7 3.1 2.7-.6-1.2-2.1-3.6c-1.5-2.4-3.9-5.9-7.4-10.7-1.2-1.7-2.4-3.3-3.6-4.8-1.2-1.6-2.4-3-3.6-4.3-2.4-2.6-4.7-4.8-6.7-6.6-4-3.7-6.7-5.5-6.7-5.5zM5.7 93.4s4.5 5.4 11.3 13.9c3.4 4.3 7.4 9.3 11.6 14.9 2.1 2.8 4.2 5.8 6 8.9 1.9 3.4 4.1 6.6 6.5 9.8 3.8 4.9 7.5 8.7 10.8 11.6 3.3 3 6.4 5 8.9 6.3 2.5 1.3 4.4 2 5.7 2.5 1.3.4 1.9.6 1.9.6s-.6-.3-1.8-1c-1.2-.7-3-1.7-5.3-3.3-2.3-1.6-5-3.8-8-6.8s-6.5-6.8-10.1-11.5c-2.5-3.3-4.8-6.6-6.7-10-2.1-3.4-4.4-6.4-6.7-9.2-4.5-5.6-8.8-10.3-12.3-14.3-7.2-7.9-11.8-12.4-11.8-12.4z"/>
|
||||
<path class="st0" d="M27.1 136.4s.2.9.8 2.5c.6 1.6 1.7 3.9 3.4 6.4 1.7 2.5 4.1 5.3 7.3 7.7l1.2.9c.4.3.9.6 1.3.8.4.3.9.6 1.3.8.5.2.9.5 1.4.8 1.9 1 3.8 1.8 5.8 2.7 6.2 2.6 10.9 3.8 14 4.3 3.1.5 4.5.4 4.5.4s-1.4-.5-4.2-1.7c-2.9-1.1-7.2-2.9-13.2-5.4-1-.5-2.1-.9-3.1-1.3-.5-.2-1-.4-1.5-.7-.5-.2-.9-.5-1.4-.7-.5-.2-.9-.4-1.4-.7-.4-.3-.9-.5-1.3-.8-.9-.5-1.7-1.1-2.5-1.6-3.1-2.2-5.6-4.6-7.4-6.8-1.8-2.2-3.1-4.2-3.9-5.5-.8-1.2-1.1-2.1-1.1-2.1zM121.8 114.8s2.1 3.6 5.5 6.5c2.6 2.3 4.5 2.2 4.5 2.2s-.3-2-2.8-4.2c-3.6-3.2-7.2-4.5-7.2-4.5zM112.5 118.4s1 2.1 2.7 4c1.3 1.5 2.3 1.6 2.3 1.6s-.1-1.1-1.3-2.5c-1.8-1.9-3.7-3.1-3.7-3.1zM124.2 98.4s1.1 2.1 3.2 5.3c1.1 1.6 2.4 3.4 4 5.2.8.9 1.7 1.9 2.6 2.8.9.9 2 1.8 3.1 2.6 3.3 2.5 6 4 7.7 4.8 1.8.8 2.7 1 2.7 1s-.6-.8-2-2.1c-1.4-1.4-3.6-3.3-6.8-5.8-1.2-.9-2.2-1.7-3.2-2.5-1-.9-1.9-1.7-2.8-2.5-1.7-1.7-3.3-3.2-4.5-4.5-2.5-2.7-4-4.3-4-4.3zM145.2 89.1s1.2 1.4 2.9 3.8c.8 1.2 1.7 2.6 2.6 4.2.8 1.6 1.5 3.4 2.1 5.3.9 3 1.5 5.2 2 6.6.5 1.4.8 2.1.8 2.1s.3-.7.5-2.3c.2-1.6.2-4-.8-7.2-.7-2.2-1.7-4.3-2.9-5.9-1.2-1.6-2.4-2.9-3.5-3.9-2.2-1.9-3.7-2.7-3.7-2.7z"/>
|
||||
<g>
|
||||
<path class="st0" d="M158.5 58.1s-.1 2.7.4 6.9c.3 2.1.7 4.6 1.4 7.2.4 1.3.9 2.7 1.5 4.1.3.7.7 1.4 1.1 2.1.4.7.8 1.3 1.3 1.9 2.8 3.8 5.3 6.1 7 7.5 1.7 1.4 2.6 1.8 2.6 1.8s-.5-.9-1.7-2.7c-1.2-1.8-3.1-4.5-5.8-8.1-.5-.6-.9-1.3-1.3-1.9l-.6-.9c-.2-.3-.3-.6-.5-.9-.6-1.3-1.2-2.5-1.7-3.8-.9-2.5-1.6-4.8-2.2-6.7-.9-4.1-1.5-6.5-1.5-6.5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M152.2 77.7s1.5 1.1 3.7 3c1.1 1 2.3 2.1 3.4 3.6.6.7 1 1.5 1.5 2.4.5.9.9 1.8 1.4 2.7 1.4 2.9 2.5 4.9 3.2 6.2.7 1.3 1.2 1.8 1.2 1.8s-.1-.7-.6-2.1c-.5-1.4-1.2-3.6-2.7-6.5-1-2-2-3.9-3.3-5.4-1.3-1.4-2.7-2.5-3.9-3.3-2.3-1.6-3.9-2.4-3.9-2.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M174.5 37.4s-.2 1.3-.2 3.3c0 1 0 2.2.1 3.5.1 1.3.3 2.7.7 4.1.5 2.2 1 3.7 1.4 4.7.4 1 .7 1.4.7 1.4s0-.5-.1-1.6c-.1-1-.3-2.6-.8-4.8-.7-3-1.1-5.6-1.4-7.6-.2-1.8-.4-3-.4-3z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M206.2 30.7s-1.2 1.7-2.3 4.8c-.6 1.5-1.2 3.4-1.6 5.4-.4 2.1-.6 4.3-.7 6.7-.1 3.6.2 6.1.6 7.8.4 1.6.7 2.4.7 2.4s.3-.8.6-2.4c.3-1.6.6-4.2.7-7.6.1-2.4.2-4.7.3-6.7.2-2 .4-3.8.7-5.4.5-3.2 1-5 1-5z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M194.9 33.4s.5 1.5 1.1 4c.3 1.2.5 2.6.7 4.2.2 1.6.4 3.3.8 5.1 1 5.5 2.8 7.5 2.8 7.5s.9-2.6-.2-8c-.4-1.9-.8-3.6-1.2-5.3-.5-1.6-1.1-3-1.7-4.1-1.3-2.3-2.3-3.4-2.3-3.4z"/>
|
||||
</g>
|
||||
<g>
|
||||
<path class="st0" d="M192.6 36.4s.3 4.1 1.2 8.5c.7 3.5 1.5 4.8 1.5 4.8s.2-1.6-.5-5c-1-4.8-2.2-8.3-2.2-8.3z"/>
|
||||
</g>
|
||||
<path class="st15" d="M98.2 155c.8-.8 2.2-2.8 2.2-4.6v.1s-.2.3-.6.8v-.2c.3-.6.5-1.3.6-2 .2-1.1-.3-2.1-.6-2.5v.1l-.1-.1v.3c-.2-.8-.8-1.3-.8-1.3s0 .1-.1.4c-.9-1.5-2.5-2.6-4.5-3-2-.4-4.1.1-6 1.2 0 .1.1.2.1.4 0 0 .6 0 1.2.2 1.4-.6 2.9-.8 4.3-.6 1.8.3 3.2 1.4 4 2.9 0 .1.1.2.1.2-.3-.4-.7-.7-1-.8.5.7 1.1 2.2.2 4.5 0-.4-.2-.8-.3-1-.6 2.4-1 2.9-1.3 3.5.1-.3 0-.5 0-.7 0 0-.3.7-1.1 1.7-.6.7-1.1.9-1.2.9-.1-.1 0-.2 0-.3 0 0-.3.1-.6.3-.3.2-.6.4-.7.3l.3-.3c-.1 0-.4.2-.9.2-.2 0-1.2 0-2.1-.8.2 0 .5 0 .6.2-.1-.3-.6-.3-.9-.5-.3-.2-.5-.7-.6-.9.8.4 1.8.4 2.5.1.7-.3 1.1-.5 1.4-.4.3.1.6-.2.4-.5-.1-.3-.6-.8-1.4-.7-.6 0-1.5.5-2.3-.3-.7-.7-.5-1.1-.4-1.4.1-.2.3-.4.5-.5.1.1.2.1.2.1v-.1c.1 0 .3.2.3.2.1.1.1.2.1.2v-.1s0-.1-.1-.2c.1 0 .1.1.2.2.1-.1.2-.3.2-.5v-.3c0-.1 0-.1.1 0v-.1c.2-.2 1.5-.6 1.6-.6.1-.1.3-.2.4-.3.1 0 .3-.3.4-.5 0-.1-.1-.2-.2-.3 0 0-.2-.1-.4-.1s-.4-.1-.8-.2c-.3-.1-.5-.3-.6-.5v-.1-.2c.3-.5.8-1 1.4-1.3h-.1l.3-.1c.1 0-.2-.1-.4-.1s-.3 0-.4.1c.1 0 .2-.1.2-.1-.3 0-.6.1-.9.3v-.1c-.1 0-.5.2-.6.4v-.1c-.1.1-.2.1-.3.2-.7-.3-1.3-.4-1.9-.3-.1-.2-.3-.5-.4-.9 0 0 0 .1-.1 0v-.9-.1s-.1 0-.3.2c-.1.1-.2.2-.2.3 0 .1-.1.1-.1.2 0 0 .1-.1 0-.1l-.2.2c0 .1-.1.1-.1.2v-.1c-.1.2-.2.3-.4.5-.1.1-.2.3-.3.5-.1.2-.2.5-.3.8v.1c-.3.2-.5.5-.6.6-.4.4-.9 1.1-1.5 2.3 0 0 .3-.4.7-.9-.4.6-.9 1.5-1.3 3 0 0 .2-.4.5-.9-.3 1-.4 2.2-.1 3.6.2 1 .6 1.9 1.1 2.5.1.1.2.3.3.4.6.8 1.7 1.9 2.8 2.3-.4-.2-.5-.5-.5-.5s1.2.7 2.2.8c-.3-.1-.3-.3-.3-.3s2.8.7 4.7-.3c.4-.2.7-.5.9-.7.5-.2 1.1-.4 1.8-.8 1.1-.7 1.4-1.3 1.7-1.9v.1c.4-.3.4-.5.4-.6z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 32 KiB |
@ -1,8 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" opacity="1.0">
|
||||
<path fill="#D19B61" d="M30.588 157.435C45.694 92.48 111.838 11.252 210.984 8.688S399.89 31.77 458.878 108.708s58.986 220.88 25.646 265.6-41.87 142.173-192.764 131.914c-150.894-10.258-204.75-42.22-253.48-112.154S10.037 245.802 30.59 157.435z"/>
|
||||
<path fill="#4F3D30" d="M161.834 173.737c0 10.843-18.425 19.634-41.154 19.634s-41.154-8.79-41.154-19.633c0-26.124 43.257-30.846 43.79-41.152.1-1.933 2.78-3.17 5.054-2.25 11.912 4.824 33.464 17.178 33.464 43.402zm161.668 236.25c-2.04-.663-4.442.227-4.532 1.617-.48 7.408-39.28 10.802-39.28 29.58 0 7.793 16.527 14.11 36.914 14.11s36.915-6.317 36.915-14.11c0-18.85-19.333-27.73-30.018-31.198zm87.547-118.38c-2.04-.968-4.443.333-4.533 2.366-.48 10.834-39.28 15.797-39.28 43.258 0 11.4 16.527 20.64 36.914 20.64s36.916-9.24 36.916-20.64c0-27.565-19.333-40.55-30.017-45.623z"/>
|
||||
<path fill="#332A23" d="M264.82 274.863c0 10.345-16.527 18.73-36.914 18.73s-36.915-8.385-36.915-18.73c0-24.923 38.803-29.428 39.282-39.26.09-1.846 2.494-3.027 4.532-2.148 10.684 4.603 30.017 16.39 30.017 41.408zm6.9-210.826c-2.04-.662-4.443.228-4.533 1.618-.48 7.408-39.28 10.802-39.28 29.58 0 7.793 16.527 14.11 36.914 14.11s36.916-6.317 36.916-14.11c0-18.85-19.333-27.73-30.017-31.198zm121.1 54.782c-1.857-.914-4.048.314-4.13 2.232-.437 10.227-35.806 14.912-35.806 40.833 0 10.76 15.065 19.482 33.65 19.482 18.584 0 33.65-8.722 33.65-19.482-.002-26.02-17.624-38.28-27.363-43.066zM157.535 356.05c-2.272-1.118-4.95.384-5.052 2.73-.534 12.504-43.782 18.233-43.782 49.93 0 13.155 18.42 23.82 41.145 23.82 22.724 0 41.145-10.665 41.145-23.82 0-31.82-21.548-46.807-33.456-52.66z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.9 KiB |
@ -1,11 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 72 72" opacity="1.0">
|
||||
<path fill="#FF473E" d="M45.4 35.2V2.1c0-4.9-18.8 9.8-18.8 15.1v18h18.8z"/>
|
||||
<path fill="#D1CFC3" d="M25.8 41.1c-.4 0-.7-.3-.7-.7v-7.2c0-.4.3-.7.7-.7h20.9c.4 0 .7.3.7.7v7.2c0 .4-.3.7-.7.7H25.8z"/>
|
||||
<path fill="#BFBCAF" d="M50.1 39.6c0-.4-.3-.7-.7-.7H22.6c-.4 0-.7.3-.7.7V67.5C21.9 70 28.2 72 36 72s14.1-2 14.1-4.5v-.1-27.8z"/>
|
||||
<ellipse transform="rotate(45 35.977 9.37)" fill="#FF6E83" cx="36" cy="9.4" rx="4" ry="12.6"/>
|
||||
<path fill="#FC7570" d="M41.9 30.5c-.8 0-1.5-.7-1.5-1.5V17.5c0-.8.7-1.5 1.5-1.5s1.5.7 1.5 1.5V29c-.1.9-.7 1.5-1.5 1.5z"/>
|
||||
<circle fill="#C4F0F2" cx="36" cy="53.9" r="3.8"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 921 B |
@ -1,12 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 511.9 511.9" opacity="1.0">
|
||||
<circle fill="#E2A042" cx="254.5" cy="217.6" r="167.4"/>
|
||||
<path fill="#AF773F" d="M443.1 215.3c-2.3-14-4.1-29.8-3.8-43.5-5.4-1.4-11-2.1-16.8-2.1-6.9 0-13.5 1-19.8 3-18.1-18.4-43.3-29.9-71.2-29.9-22.5 0-43.2 7.5-59.9 20-10.7 8.1-25.1 8.1-35.8 0-19.2-14.5-43.8-22.2-70.3-19.5-22.9 2.3-45.2 12.6-61.7 28-4.7-1-9.5-1.6-14.5-1.6-5.1 0-10.1.6-14.9 1.7.4 13.8-1.4 29.7-3.8 43.9 0 0 8.2 52.1-5.1 82.4.7.9 1.3 1.8 1.9 2.7 6.5 2.2 13.5 3.5 20.8 3.6 26.7 81.6 97.9 112.6 166.2 112.6 75.1 0 145.3-32.9 168.6-112.6 7.8-.1 15.3-1.5 22.3-4 .7-1.2 1.5-2.3 2.3-3.3-12.5-30.3-4.5-81.4-4.5-81.4z"/>
|
||||
<path fill="#FFB636" d="M328.7 177.4c-24.8-.3-46.8 11.5-60.4 30-6.6 8.9-19.4 8.9-26 0-13.6-18.4-35.6-30.3-60.4-30-38.8.5-71.4 32.3-72.9 71-1.5 39.1 27.3 71.7 64.8 76.3 5.1.6 9 4.6 9.6 9.6 4.5 35.7 34.9 63.3 71.9 63.3 36.7 0 67-27.3 71.8-62.7.7-5.4 4.9-9.6 10.3-10.3 37.2-4.8 65.7-37.3 64.2-76.2-1.4-38.7-34.1-70.5-72.9-71z"/>
|
||||
<path fill="#E576CB" d="M271.5 281.8s-2.2 2.9-5.5 4.9c-3.3 2.2-7.7 3.6-12.2 3.7-4.4-.1-8.8-1.5-12.2-3.6-3.3-2-5.5-4.9-5.5-4.9-.5-.7-.5-1.6 0-2.2 0 0 2.2-2.9 5.5-4.9 3.3-2.2 7.7-3.6 12.2-3.6 4.4.1 8.8 1.5 12.2 3.7 3.3 2 5.5 4.9 5.5 4.9.5.5.5 1.4 0 2zM293.4 338.1c-9.8-13.9-24.8-22-40.2-21.7-15.2.3-29.4 8.2-38.9 21.7-1.1 1.6-1.6 3.4-1.6 5.2 0 .9.1 1.9.4 2.8 7.4 23.5 23 38 40.8 38s33.4-14.6 40.8-38c.3-.9.4-1.8.4-2.7v-.3c-.1-1.7-.6-3.5-1.7-5z"/>
|
||||
<path fill="#2B3B47" d="M253.8 366.5c-8.9 0-17.3-8.1-22.5-21.5 6-6.7 14.1-10.7 22.2-10.9 8.1-.2 16.5 3.9 22.8 10.9-5.2 13.4-13.6 21.5-22.5 21.5z"/>
|
||||
<path fill="#E2A042" d="M147.3 412.6s.1.1.3.2c0 0 .1.1.2.1l.1.1v.1s0 .1.1.1v.1s-.1.1-.2.1c-.4 0-1.1-.1-2.4-.5-1.2-.4-2.8-1-4.7-1.9-1.9-.9-4.1-2-6.4-3.4-2.4-1.4-4.9-3-7.6-4.9-2.7-1.9-5.4-4.1-8.2-6.5-1.4-1.2-2.8-2.5-4.2-3.8-1.4-1.4-2.8-2.7-4.2-4.2-.7-.7-1.4-1.5-2.1-2.2-.7-.8-1.3-1.5-2-2.3-1.4-1.5-2.7-3.2-4-4.8-.7-.8-1.3-1.6-1.9-2.5l-1.9-2.5c-1.2-1.7-2.4-3.5-3.6-5.2l-3.3-5.4c-1-1.8-2.1-3.7-3.1-5.4-1-1.8-1.8-3.7-2.8-5.5-.9-1.8-1.7-3.6-2.5-5.4-.8-1.8-1.5-3.5-2.2-5.2-.7-1.7-1.4-3.4-1.9-5-1.1-3.2-2.2-6.3-3-8.9-.8-2.6-1.6-4.7-2-7.1-1-4.4-1.6-6.9-1.6-6.9l-1-4.5c-1-4.3-3-8.3-5.7-11.7 13.3-30.3 5.1-82.4 5.1-82.4 5.4-32.2 7.9-74-12-77.3-20-3.3-44.9 26.4-53.8 80-6.4 38.5-1.6 71.8 9 88.6-.9 2.7-1.5 5.7-1.6 8.7 0 0-.1 2.5-.2 6.9 0 .6 0 1.1-.1 1.7V326.3c0 1.7.1 3.6.1 5.6 0 4.1.3 8.1.6 12.8.1 2.3.4 4.7.7 7.2.2 2.5.5 5 .9 7.7.4 2.6.7 5.3 1.2 8.1s1 5.6 1.6 8.5c.6 2.9 1.3 5.8 2 8.7.8 2.9 1.6 5.9 2.4 8.9.9 3 1.8 6 2.9 9 .5 1.5 1.1 3 1.6 4.5s1.1 3 1.7 4.5c1.2 3 2.4 6 3.7 8.9.7 1.5 1.3 2.9 2 4.4.7 1.4 1.4 2.9 2.1 4.3 1.4 2.9 2.9 5.6 4.4 8.4 1.5 2.7 3.1 5.4 4.7 8 3.2 5.2 6.5 10.1 9.8 14.7 3.4 4.6 6.7 8.8 10 12.6 3.3 3.8 6.4 7.2 9.4 10.2 3 3 5.8 5.6 8.2 7.7 2.4 2.1 4.6 3.9 6.2 5.2l1.2.9c.4.3.8.6 1 .8.4.3.7.5.9.6.3.2.5.3.5.3 23.7 15.4 55.4 8.6 70.8-15.2s8.5-55.6-15.2-71zM505.2 348.8c-.1-2.3-.1-4.5-.3-6.7-.4-4.3-.6-8.1-1.1-11.7-.4-3.5-.8-6.7-1.2-8.8-.8-4.4-1.3-6.9-1.3-6.9l-.9-4.6c-.2-1-.4-2-.7-3 10.9-16.7 15.9-50.2 9.3-89.2-9-53.5-33.9-83.3-53.8-80-20 3.3-17.4 45.1-12 77.3 0 0-8 51 4.7 81.4-3.7 4.6-6.2 10.3-6.7 16.7 0 0-.2 2.5-.5 6.9 0 .5-.1 1.1-.1 1.7v.8c0 .2-.1.4-.1.7-.1.9-.3 1.9-.4 3-.2 2-.8 4.9-1.3 7.8-.2 1.5-.6 3-.9 4.5-.3 1.6-.7 3.2-1.1 4.8-.4 1.6-.8 3.3-1.3 4.9-.5 1.7-1 3.4-1.6 5.1l-1.8 5.1c-.7 1.7-1.4 3.4-2 5.1-.8 1.7-1.5 3.4-2.3 5.1l-1.2 2.5c-.4.8-.8 1.7-1.3 2.5-.9 1.6-1.7 3.3-2.7 4.8-.5.8-.9 1.6-1.4 2.3-.5.8-1 1.5-1.5 2.3-.9 1.5-2 2.9-3 4.4-1 1.4-2 2.8-3.1 4.1-2.1 2.6-4.2 5.1-6.2 7.3-2.1 2.2-4 4.2-5.9 5.9-1.9 1.7-3.6 3.2-5.1 4.4-1.5 1.2-2.8 2.1-3.8 2.8-1 .7-1.6 1-1.9 1.1h-.1s.1 0 .1-.1l.1-.1c.1 0 .1-.1.1-.1-23.4 15.5-30 46.9-14.7 70.5 15.4 23.7 47.1 30.5 70.8 15.2 0 0 .2-.1.5-.3.1-.1.2-.1.3-.2 0 0 .1-.1.2-.1l.1-.1c.1-.1.2-.2.4-.3.1-.1.3-.2.5-.4.1-.1.2-.1.3-.2.1-.1.2-.1.2-.2.3-.3.7-.6 1.1-1 1.5-1.4 3.5-3.4 5.7-5.8s4.7-5.3 7.3-8.6c2.6-3.3 5.4-7 8.1-11.2 2.8-4.1 5.6-8.7 8.3-13.5 2.7-4.9 5.3-10.1 7.8-15.5 1.2-2.7 2.4-5.5 3.5-8.3 1.1-2.8 2.2-5.7 3.2-8.6.5-1.5 1-2.9 1.5-4.4.4-1.5.9-2.9 1.3-4.4.9-2.9 1.6-5.9 2.4-8.9.4-1.5.7-3 1-4.5.3-1.5.6-3 .9-4.4.6-3 1.1-5.9 1.6-8.8.4-2.9.8-5.8 1.1-8.7.3-2.9.5-5.7.8-8.4.2-2.8.3-5.5.4-8.1.1-2.6.1-5.2.1-7.7-.2-2.5-.3-4.9-.4-7.2z"/>
|
||||
<path fill="#2B3B47" d="M188.5 241.3c-1-11.2-10.2-20-21.6-20-11.4 0-20.7 8.8-21.7 20L145 272h.1v.1c0 12.1 9.8 21.8 21.8 21.8 12.1 0 21.8-9.8 21.8-21.8v-.1l-.2-30.7zM363.9 241.3c-1-11.2-10.2-20-21.7-20-11.4 0-20.7 8.8-21.6 20l-.3 30.7h.1v.1c0 12.1 9.8 21.8 21.8 21.8 12.1 0 21.8-9.8 21.8-21.8v-.1l-.1-30.7z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 4.6 KiB |
@ -1,8 +0,0 @@
|
||||
<!-- This Source Code Form is subject to the terms of the Mozilla Public
|
||||
- License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
- file, You can obtain one at http://mozilla.org/MPL/2.0/. -->
|
||||
<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 511.9 511.9" opacity="1.0">
|
||||
<path fill="#FFD469" d="M255.9 35.3C134 35.3 35.2 134.1 35.2 256c0 3.3.1 6.6.2 9.9-12.8 1.7-22.8 12.6-22.8 25.9 0 14.5 11.7 26.2 26.2 26.2H44c26.8 91.7 111.4 158.7 211.7 158.7 121.8 0 220.6-98.8 220.6-220.6.2-122-98.6-220.8-220.4-220.8z"/>
|
||||
<path fill="#FFB636" d="M476.2 265.8c.1-3.3.2-6.6.2-9.9 0-58.9-23.1-112.5-60.8-152 21.3 34.5 33.6 75.2 33.6 118.8 0 125.2-101.5 226.7-226.7 226.7-43.6 0-84.2-12.3-118.8-33.6 39.6 37.7 93.1 60.8 152 60.8 100.3 0 185-67 211.7-158.7h5.2c14.5 0 26.2-11.7 26.2-26.2.2-13.3-9.7-24.2-22.6-25.9z"/>
|
||||
<path fill="#2B3B47" d="M172.3 251.3H121c-6.8 0-12.3-5.5-12.3-12.3 0-6.8 5.5-12.3 12.3-12.3h51.3c6.8 0 12.3 5.5 12.3 12.3 0 6.8-5.5 12.3-12.3 12.3zM391.4 251.3h-51.3c-6.8 0-12.3-5.5-12.3-12.3 0-6.8 5.5-12.3 12.3-12.3h51.3c6.8 0 12.3 5.5 12.3 12.3 0 6.8-5.5 12.3-12.3 12.3zM328.6 342.6H185c-6.8 0-12.3-5.5-12.3-12.3 0-6.8 5.5-12.3 12.3-12.3h143.6c6.8 0 12.3 5.5 12.3 12.3-.1 6.8-5.6 12.3-12.3 12.3z"/>
|
||||
</svg>
|
Before Width: | Height: | Size: 1.2 KiB |
@ -292,7 +292,8 @@
|
||||
direction: rtl;
|
||||
}
|
||||
|
||||
.event-tooltip-debugger-icon {
|
||||
.event-tooltip-debugger-icon,
|
||||
.event-tooltip-debugger-spacer {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
margin-inline-end: 4px;
|
||||
|
@ -87,8 +87,6 @@ const HIDDEN_CLASS = "__fx-devtools-hide-shortcut__";
|
||||
const XHTML_NS = "http://www.w3.org/1999/xhtml";
|
||||
const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";
|
||||
const IMAGE_FETCHING_TIMEOUT = 500;
|
||||
const RX_FUNC_NAME =
|
||||
/((var|const|let)\s+)?([\w$.]+\s*[:=]\s*)*(function)?\s*\*?\s*([\w$]+)?\s*$/;
|
||||
|
||||
// The possible completions to a ':' with added score to give certain values
|
||||
// some preference.
|
||||
@ -433,22 +431,22 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
getEventListeners: function (node) {
|
||||
let parsers = this._eventParsers;
|
||||
let dbg = this.parent().tabActor.makeDebugger();
|
||||
let listeners = [];
|
||||
let listenerArray = [];
|
||||
|
||||
for (let [, {getListeners, normalizeHandler}] of parsers) {
|
||||
for (let [, {getListeners, normalizeListener}] of parsers) {
|
||||
try {
|
||||
let eventInfos = getListeners(node);
|
||||
let listeners = getListeners(node);
|
||||
|
||||
if (!eventInfos) {
|
||||
if (!listeners) {
|
||||
continue;
|
||||
}
|
||||
|
||||
for (let eventInfo of eventInfos) {
|
||||
if (normalizeHandler) {
|
||||
eventInfo.normalizeHandler = normalizeHandler;
|
||||
for (let listener of listeners) {
|
||||
if (normalizeListener) {
|
||||
listener.normalizeListener = normalizeListener;
|
||||
}
|
||||
|
||||
this.processHandlerForEvent(node, listeners, dbg, eventInfo);
|
||||
this.processHandlerForEvent(node, listenerArray, dbg, listener);
|
||||
}
|
||||
} catch (e) {
|
||||
// An object attached to the node looked like a listener but wasn't...
|
||||
@ -456,11 +454,11 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
}
|
||||
}
|
||||
|
||||
listeners.sort((a, b) => {
|
||||
listenerArray.sort((a, b) => {
|
||||
return a.type.localeCompare(b.type);
|
||||
});
|
||||
|
||||
return listeners;
|
||||
return listenerArray;
|
||||
},
|
||||
|
||||
/**
|
||||
@ -468,8 +466,8 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
*
|
||||
* @param {Node} node
|
||||
* The node for which we want information.
|
||||
* @param {Array} events
|
||||
* The events array contains all event objects that we have gathered
|
||||
* @param {Array} listenerArray
|
||||
* listenerArray contains all event objects that we have gathered
|
||||
* so far.
|
||||
* @param {Debugger} dbg
|
||||
* JSDebugger instance.
|
||||
@ -488,22 +486,28 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
* DOM0: true,
|
||||
* capturing: true,
|
||||
* hide: {
|
||||
* dom0: true
|
||||
* }
|
||||
* DOM0: true
|
||||
* },
|
||||
* native: false
|
||||
* }
|
||||
*/
|
||||
processHandlerForEvent: function (node, listeners, dbg, eventInfo) {
|
||||
let type = eventInfo.type || "";
|
||||
let handler = eventInfo.handler;
|
||||
let tags = eventInfo.tags || "";
|
||||
let hide = eventInfo.hide || {};
|
||||
let override = eventInfo.override || {};
|
||||
processHandlerForEvent: function (node, listenerArray, dbg, listener) {
|
||||
let { capturing, handler, normalizeListener } = listener;
|
||||
let dom0 = false;
|
||||
let functionSource = handler.toString();
|
||||
let global = Cu.getGlobalForObject(handler);
|
||||
let globalDO = dbg.addDebuggee(global);
|
||||
let hide = listener.hide || {};
|
||||
let line = 0;
|
||||
let listenerDO = globalDO.makeDebuggeeValue(handler);
|
||||
let native = false;
|
||||
let override = listener.override || {};
|
||||
let tags = listener.tags || "";
|
||||
let type = listener.type || "";
|
||||
let url = "";
|
||||
|
||||
if (eventInfo.normalizeHandler) {
|
||||
listenerDO = eventInfo.normalizeHandler(listenerDO);
|
||||
if (normalizeListener) {
|
||||
listenerDO = normalizeListener(listenerDO);
|
||||
}
|
||||
|
||||
// If the listener is an object with a 'handleEvent' method, use that.
|
||||
@ -520,70 +524,94 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
}
|
||||
}
|
||||
|
||||
// If the listener is bound to a different context then we need to switch
|
||||
// to the bound function.
|
||||
if (listenerDO.isBoundFunction) {
|
||||
listenerDO = listenerDO.boundTargetFunction;
|
||||
}
|
||||
|
||||
let script = listenerDO.script;
|
||||
let scriptSource = script.source.text;
|
||||
let functionSource =
|
||||
scriptSource.substr(script.sourceStart, script.sourceLength);
|
||||
let { isArrowFunction, name, script, parameterNames } = listenerDO;
|
||||
|
||||
/*
|
||||
The script returned is the whole script and
|
||||
scriptSource.substr(script.sourceStart, script.sourceLength) returns
|
||||
something like this:
|
||||
() { doSomething(); }
|
||||
if (script) {
|
||||
let scriptSource = script.source.text;
|
||||
|
||||
So we need to use some regex magic to get the appropriate function info
|
||||
e.g.:
|
||||
() => { ... }
|
||||
function doit() { ... }
|
||||
doit: function() { ... }
|
||||
es6func() { ... }
|
||||
var|let|const foo = function () { ... }
|
||||
function generator*() { ... }
|
||||
*/
|
||||
let scriptBeforeFunc = scriptSource.substr(0, script.sourceStart);
|
||||
let matches = scriptBeforeFunc.match(RX_FUNC_NAME);
|
||||
if (matches && matches.length > 0) {
|
||||
functionSource = matches[0].trim() + functionSource;
|
||||
// Scripts are provided via script tags. If it wasn't provided by a
|
||||
// script tag it must be a DOM0 event.
|
||||
if (script.source.element) {
|
||||
dom0 = script.source.element.class !== "HTMLScriptElement";
|
||||
} else {
|
||||
dom0 = false;
|
||||
}
|
||||
|
||||
line = script.startLine;
|
||||
url = script.url;
|
||||
|
||||
// Checking for the string "[native code]" is the only way at this point
|
||||
// to check for native code. Even if this provides a false positive then
|
||||
// grabbing the source code a second time is harmless.
|
||||
if (functionSource === "[object Object]" ||
|
||||
functionSource === "[object XULElement]" ||
|
||||
functionSource.includes("[native code]")) {
|
||||
functionSource =
|
||||
scriptSource.substr(script.sourceStart, script.sourceLength);
|
||||
|
||||
// At this point the script looks like this:
|
||||
// () { ... }
|
||||
// We prefix this with "function" if it is not a fat arrow function.
|
||||
if (!isArrowFunction) {
|
||||
functionSource = "function " + functionSource;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// If the listener is a native one (provided by C++ code) then we have no
|
||||
// access to the script. We use the native flag to prevent showing the
|
||||
// debugger button because the script is not available.
|
||||
native = true;
|
||||
}
|
||||
|
||||
let dom0 = false;
|
||||
// Fat arrow function text always contains the parameters. Function
|
||||
// parameters are often missing e.g. if Array.sort is used as a handler.
|
||||
// If they are missing we provide the parameters ourselves.
|
||||
if (parameterNames && parameterNames.length > 0) {
|
||||
let prefix = "function " + name + "()";
|
||||
let paramString = parameterNames.join(", ");
|
||||
|
||||
if (typeof node.hasAttribute !== "undefined") {
|
||||
dom0 = !!node.hasAttribute("on" + type);
|
||||
} else {
|
||||
dom0 = !!node["on" + type];
|
||||
if (functionSource.startsWith(prefix)) {
|
||||
functionSource = functionSource.substr(prefix.length);
|
||||
|
||||
functionSource = `function ${name} (${paramString})${functionSource}`;
|
||||
}
|
||||
}
|
||||
|
||||
let line = script.startLine;
|
||||
let url = script.url;
|
||||
let origin = url + (dom0 ? "" : ":" + line);
|
||||
let searchString;
|
||||
|
||||
if (dom0) {
|
||||
searchString = "on" + type + "=\"" + script.source.text + "\"";
|
||||
// If the listener is native code we display the filename "[native code]."
|
||||
// This is the official string and should *not* be translated.
|
||||
let origin;
|
||||
if (native) {
|
||||
origin = "[native code]";
|
||||
} else {
|
||||
scriptSource = " " + scriptSource;
|
||||
origin = url + ((dom0 || line === 0) ? "" : ":" + line);
|
||||
}
|
||||
|
||||
let eventObj = {
|
||||
type: typeof override.type !== "undefined" ? override.type : type,
|
||||
handler: functionSource.trim(),
|
||||
origin: typeof override.origin !== "undefined" ?
|
||||
override.origin : origin,
|
||||
searchString: typeof override.searchString !== "undefined" ?
|
||||
override.searchString : searchString,
|
||||
tags: tags,
|
||||
type: override.type || type,
|
||||
handler: override.handler || functionSource.trim(),
|
||||
origin: override.origin || origin,
|
||||
tags: override.tags || tags,
|
||||
DOM0: typeof override.dom0 !== "undefined" ? override.dom0 : dom0,
|
||||
capturing: typeof override.capturing !== "undefined" ?
|
||||
override.capturing : eventInfo.capturing,
|
||||
hide: hide
|
||||
override.capturing : capturing,
|
||||
hide: typeof override.hide !== "undefined" ? override.hide : hide,
|
||||
native
|
||||
};
|
||||
|
||||
listeners.push(eventObj);
|
||||
// Hide the debugger icon for DOM0 and native listeners. DOM0 listeners are
|
||||
// generated dynamically from e.g. an onclick="" attribute so the script
|
||||
// doesn't actually exist.
|
||||
if (native || dom0) {
|
||||
eventObj.hide.debugger = true;
|
||||
}
|
||||
|
||||
listenerArray.push(eventObj);
|
||||
|
||||
dbg.removeDebuggee(globalDO);
|
||||
},
|
||||
@ -643,10 +671,16 @@ var NodeActor = exports.NodeActor = protocol.ActorClassWithSpec(nodeSpec, {
|
||||
* Get all event listeners that are listening on this node.
|
||||
*/
|
||||
getEventListenerInfo: function () {
|
||||
let node = this.rawNode;
|
||||
|
||||
if (this.rawNode.nodeName.toLowerCase() === "html") {
|
||||
return this.getEventListeners(this.rawNode.ownerGlobal);
|
||||
let winListeners = this.getEventListeners(node.ownerGlobal) || [];
|
||||
let docElementListeners = this.getEventListeners(node) || [];
|
||||
let docListeners = this.getEventListeners(node.parentNode) || [];
|
||||
|
||||
return [...winListeners, ...docElementListeners, ...docListeners];
|
||||
}
|
||||
return this.getEventListeners(this.rawNode);
|
||||
return this.getEventListeners(node);
|
||||
},
|
||||
|
||||
/**
|
||||
|
@ -7,7 +7,10 @@
|
||||
|
||||
"use strict";
|
||||
|
||||
const {Cc, Ci, Cu} = require("chrome");
|
||||
const {Cc, Ci} = require("chrome");
|
||||
|
||||
// eslint-disable-next-line
|
||||
const JQUERY_LIVE_REGEX = /return typeof \w+.*.event\.triggered[\s\S]*\.event\.(dispatch|handle).*arguments/;
|
||||
|
||||
loader.lazyGetter(this, "eventListenerService", () => {
|
||||
return Cc["@mozilla.org/eventlistenerservice;1"]
|
||||
@ -22,7 +25,7 @@ var parsers = [
|
||||
let hasJQuery = global.jQuery && global.jQuery.fn && global.jQuery.fn.jquery;
|
||||
|
||||
if (!hasJQuery) {
|
||||
return;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let jQuery = global.jQuery;
|
||||
@ -36,6 +39,11 @@ var parsers = [
|
||||
let events = eventsObj[type];
|
||||
for (let key in events) {
|
||||
let event = events[key];
|
||||
|
||||
if (node.wrappedJSObject == global.document && event.selector) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof event === "object" || typeof event === "function") {
|
||||
let eventInfo = {
|
||||
type: type,
|
||||
@ -63,6 +71,12 @@ var parsers = [
|
||||
for (let type in entry.events) {
|
||||
let events = entry.events[type];
|
||||
for (let key in events) {
|
||||
let event = events[key];
|
||||
|
||||
if (node.wrappedJSObject == global.document && event.selector) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (typeof events[key] === "function") {
|
||||
let eventInfo = {
|
||||
type: type,
|
||||
@ -90,7 +104,7 @@ var parsers = [
|
||||
getListeners: function (node) {
|
||||
return jQueryLiveGetListeners(node, false);
|
||||
},
|
||||
normalizeHandler: function (handlerDO) {
|
||||
normalizeListener: function (handlerDO) {
|
||||
let paths = [
|
||||
[".event.proxy/", ".event.proxy/", "*"],
|
||||
[".proxy/", "*"]
|
||||
@ -140,7 +154,14 @@ var parsers = [
|
||||
let listeners;
|
||||
|
||||
if (node.nodeName.toLowerCase() === "html") {
|
||||
listeners = eventListenerService.getListenerInfoFor(node.ownerGlobal) || [];
|
||||
let winListeners =
|
||||
eventListenerService.getListenerInfoFor(node.ownerGlobal) || [];
|
||||
let docElementListeners =
|
||||
eventListenerService.getListenerInfoFor(node) || [];
|
||||
let docListeners =
|
||||
eventListenerService.getListenerInfoFor(node.parentNode) || [];
|
||||
|
||||
listeners = [...winListeners, ...docElementListeners, ...docListeners];
|
||||
} else {
|
||||
listeners = eventListenerService.getListenerInfoFor(node) || [];
|
||||
}
|
||||
@ -165,7 +186,7 @@ var parsers = [
|
||||
let listener = listenerObj.listenerObject;
|
||||
|
||||
// If there is no JS event listener skip this.
|
||||
if (!listener) {
|
||||
if (!listener || JQUERY_LIVE_REGEX.test(listener.toString())) {
|
||||
continue;
|
||||
}
|
||||
|
||||
@ -188,7 +209,7 @@ function jQueryLiveGetListeners(node, boolOnEventFound) {
|
||||
let hasJQuery = global.jQuery && global.jQuery.fn && global.jQuery.fn.jquery;
|
||||
|
||||
if (!hasJQuery) {
|
||||
return;
|
||||
return undefined;
|
||||
}
|
||||
|
||||
let jQuery = global.jQuery;
|
||||
@ -235,7 +256,8 @@ function jQueryLiveGetListeners(node, boolOnEventFound) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!boolOnEventFound && (typeof event === "object" || typeof event === "function")) {
|
||||
if (!boolOnEventFound &&
|
||||
(typeof event === "object" || typeof event === "function")) {
|
||||
let eventInfo = {
|
||||
type: event.origType || event.type.substr(selector.length + 1),
|
||||
handler: event.handler || event,
|
||||
@ -273,7 +295,8 @@ this.EventParsers = function EventParsers() {
|
||||
exports.EventParsers = EventParsers;
|
||||
|
||||
EventParsers.prototype = {
|
||||
_eventParsers: new Map(), // NOTE: This is shared amongst all instances.
|
||||
// NOTE: This is shared amongst all instances.
|
||||
_eventParsers: new Map(),
|
||||
|
||||
get parsers() {
|
||||
return this._eventParsers;
|
||||
@ -286,26 +309,27 @@ EventParsers.prototype = {
|
||||
* Each parser must contain the following properties:
|
||||
* - parser, which must take the following form:
|
||||
* {
|
||||
* id {String}: "jQuery events", // Unique id.
|
||||
* getListeners: function(node) { }, // Function that takes a node and
|
||||
* // returns an array of eventInfo
|
||||
* // objects (see below).
|
||||
* id {String}: "jQuery events", // Unique id.
|
||||
* getListeners: function(node) { }, // Function that takes a node
|
||||
* // and returns an array of
|
||||
* // eventInfo objects (see
|
||||
* // below).
|
||||
*
|
||||
* hasListeners: function(node) { }, // Optional function that takes a
|
||||
* // node and returns a boolean
|
||||
* // indicating whether a node has
|
||||
* // listeners attached.
|
||||
* hasListeners: function(node) { }, // Optional function that takes
|
||||
* // a node and returns a boolean
|
||||
* // indicating whether a node has
|
||||
* // listeners attached.
|
||||
*
|
||||
* normalizeHandler: function(fnDO) { }, // Optional function that takes a
|
||||
* // Debugger.Object instance and
|
||||
* // climbs the scope chain to get
|
||||
* // the function that should be
|
||||
* // displayed in the event bubble
|
||||
* // see the following url for
|
||||
* // details:
|
||||
* // https://developer.mozilla.org/
|
||||
* // docs/Tools/Debugger-API/
|
||||
* // Debugger.Object
|
||||
* normalizeListener: function(fnDO) { }, // Optional function that takes a
|
||||
* // Debugger.Object instance and
|
||||
* // climbs the scope chain to get
|
||||
* // the function that should be
|
||||
* // displayed in the event bubble
|
||||
* // see the following url for
|
||||
* // details:
|
||||
* // https://developer.mozilla.org/
|
||||
* // docs/Tools/Debugger-API/
|
||||
* // Debugger.Object
|
||||
* }
|
||||
*
|
||||
* An eventInfo object should take the following form:
|
||||
@ -326,7 +350,7 @@ EventParsers.prototype = {
|
||||
* type: "click",
|
||||
* origin: "http://www.mozilla.com",
|
||||
* searchString: 'onclick="doSomething()"',
|
||||
* DOM0: true,
|
||||
* dom0: true,
|
||||
* capturing: true
|
||||
* }
|
||||
* }
|
||||
@ -344,7 +368,7 @@ EventParsers.prototype = {
|
||||
this._eventParsers.set(parserId, {
|
||||
getListeners: parserObj.getListeners,
|
||||
hasListeners: parserObj.hasListeners,
|
||||
normalizeHandler: parserObj.normalizeHandler
|
||||
normalizeListener: parserObj.normalizeListener
|
||||
});
|
||||
},
|
||||
|
||||
|
@ -191,11 +191,13 @@ exports.CSS_PROPERTIES = {
|
||||
"supports": [],
|
||||
"values": [
|
||||
"-moz-gtk-info-bar",
|
||||
"-moz-mac-active-source-list-selection",
|
||||
"-moz-mac-disclosure-button-closed",
|
||||
"-moz-mac-disclosure-button-open",
|
||||
"-moz-mac-fullscreen-button",
|
||||
"-moz-mac-help-button",
|
||||
"-moz-mac-source-list",
|
||||
"-moz-mac-source-list-selection",
|
||||
"-moz-mac-vibrancy-dark",
|
||||
"-moz-mac-vibrancy-light",
|
||||
"-moz-win-borderless-glass",
|
||||
@ -1243,25 +1245,6 @@ exports.CSS_PROPERTIES = {
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"-moz-text-align-last": {
|
||||
"isInherited": true,
|
||||
"subproperties": [
|
||||
"text-align-last"
|
||||
],
|
||||
"supports": [],
|
||||
"values": [
|
||||
"auto",
|
||||
"center",
|
||||
"end",
|
||||
"inherit",
|
||||
"initial",
|
||||
"justify",
|
||||
"left",
|
||||
"right",
|
||||
"start",
|
||||
"unset"
|
||||
]
|
||||
},
|
||||
"-moz-text-size-adjust": {
|
||||
"isInherited": true,
|
||||
"subproperties": [
|
||||
@ -3137,11 +3120,13 @@ exports.CSS_PROPERTIES = {
|
||||
"-moz-inline-stack",
|
||||
"-moz-left",
|
||||
"-moz-linear-gradient",
|
||||
"-moz-mac-active-source-list-selection",
|
||||
"-moz-mac-disclosure-button-closed",
|
||||
"-moz-mac-disclosure-button-open",
|
||||
"-moz-mac-fullscreen-button",
|
||||
"-moz-mac-help-button",
|
||||
"-moz-mac-source-list",
|
||||
"-moz-mac-source-list-selection",
|
||||
"-moz-mac-vibrancy-dark",
|
||||
"-moz-mac-vibrancy-light",
|
||||
"-moz-max-content",
|
||||
|
@ -626,7 +626,7 @@ EffectCompositor::ComposeAnimationRule(dom::Element* aElement,
|
||||
// priority except properties in propertiesToSkip.
|
||||
const nsCSSPropertyIDSet& propertiesToSkip =
|
||||
aCascadeLevel == CascadeLevel::Animations
|
||||
? nsCSSPropertyIDSet()
|
||||
? effects->PropertiesForAnimationsLevel().Invert()
|
||||
: effects->PropertiesForAnimationsLevel();
|
||||
for (KeyframeEffectReadOnly* effect : sortedEffectList) {
|
||||
effect->GetAnimation()->ComposeStyle(animationRule, propertiesToSkip);
|
||||
|
@ -450,9 +450,7 @@ nsDocumentEncoder::SerializeToStringRecursive(nsINode* aNode,
|
||||
if (aNode->IsNodeOfType(nsINode::eCONTENT)) {
|
||||
nsIFrame* frame = static_cast<nsIContent*>(aNode)->GetPrimaryFrame();
|
||||
if (frame) {
|
||||
bool isSelectable;
|
||||
frame->IsSelectable(&isSelectable, nullptr);
|
||||
if (!isSelectable){
|
||||
if (!frame->IsSelectable(nullptr)) {
|
||||
aDontSerializeRoot = true;
|
||||
}
|
||||
}
|
||||
|
@ -3260,7 +3260,7 @@ nsRange::ExcludeNonSelectableNodes(nsTArray<RefPtr<nsRange>>* aOutRanges)
|
||||
frame = p->GetPrimaryFrame();
|
||||
}
|
||||
if (frame) {
|
||||
frame->IsSelectable(&selectable, nullptr);
|
||||
selectable = frame->IsSelectable(nullptr);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,7 +48,6 @@ class MediaResource;
|
||||
class MediaDecoder;
|
||||
class VideoFrameContainer;
|
||||
namespace dom {
|
||||
class AudioChannelAgent;
|
||||
class MediaKeys;
|
||||
class TextTrack;
|
||||
class TimeRanges;
|
||||
@ -59,7 +58,6 @@ class VideoStreamTrack;
|
||||
} // namespace dom
|
||||
} // namespace mozilla
|
||||
|
||||
class AutoNotifyAudioChannelAgent;
|
||||
class nsIChannel;
|
||||
class nsIHttpChannel;
|
||||
class nsILoadGroup;
|
||||
@ -82,12 +80,9 @@ class VideoTrackList;
|
||||
class HTMLMediaElement : public nsGenericHTMLElement,
|
||||
public nsIDOMHTMLMediaElement,
|
||||
public MediaDecoderOwner,
|
||||
public nsIAudioChannelAgentCallback,
|
||||
public PrincipalChangeObserver<DOMMediaStream>,
|
||||
public SupportsWeakPtr<HTMLMediaElement>
|
||||
{
|
||||
friend AutoNotifyAudioChannelAgent;
|
||||
|
||||
public:
|
||||
typedef mozilla::TimeStamp TimeStamp;
|
||||
typedef mozilla::layers::ImageContainer ImageContainer;
|
||||
@ -118,8 +113,6 @@ public:
|
||||
// nsIDOMHTMLMediaElement
|
||||
NS_DECL_NSIDOMHTMLMEDIAELEMENT
|
||||
|
||||
NS_DECL_NSIAUDIOCHANNELAGENTCALLBACK
|
||||
|
||||
// nsISupports
|
||||
NS_DECL_ISUPPORTS_INHERITED
|
||||
NS_DECL_CYCLE_COLLECTION_CLASS_INHERITED(HTMLMediaElement,
|
||||
@ -757,6 +750,7 @@ public:
|
||||
protected:
|
||||
virtual ~HTMLMediaElement();
|
||||
|
||||
class AudioChannelAgentCallback;
|
||||
class ChannelLoader;
|
||||
class ErrorSink;
|
||||
class MediaLoadListener;
|
||||
@ -1206,9 +1200,6 @@ protected:
|
||||
// next block of audio samples) preceeding seek target.
|
||||
already_AddRefed<Promise> Seek(double aTime, SeekTarget::Type aSeekType, ErrorResult& aRv);
|
||||
|
||||
// A method to check if we are playing through the AudioChannel.
|
||||
bool IsPlayingThroughTheAudioChannel() const;
|
||||
|
||||
// Update the audio channel playing state
|
||||
void UpdateAudioChannelPlayingState(bool aForcePlaying = false);
|
||||
|
||||
@ -1224,67 +1215,20 @@ protected:
|
||||
// Recomputes ready state and fires events as necessary based on current state.
|
||||
void UpdateReadyStateInternal();
|
||||
|
||||
// Notifies the audio channel agent when the element starts or stops playing.
|
||||
void NotifyAudioChannelAgent(bool aPlaying);
|
||||
|
||||
// True if we create the audio channel agent successfully or we already have
|
||||
// one. The agent is used to communicate with the AudioChannelService. eg.
|
||||
// notify we are playing/audible and receive muted/unmuted/suspend/resume
|
||||
// commands from AudioChannelService.
|
||||
bool MaybeCreateAudioChannelAgent();
|
||||
|
||||
// Determine if the element should be paused because of suspend conditions.
|
||||
bool ShouldElementBePaused();
|
||||
|
||||
// Create or destroy the captured stream depend on mAudioCapturedByWindow.
|
||||
void AudioCaptureStreamChangeIfNeeded();
|
||||
|
||||
/**
|
||||
* We have different kinds of suspended cases,
|
||||
* - SUSPENDED_PAUSE
|
||||
* It's used when we temporary lost platform audio focus. MediaElement can
|
||||
* only be resumed when we gain the audio focus again.
|
||||
*
|
||||
* - SUSPENDED_PAUSE_DISPOSABLE
|
||||
* It's used when user press the pause botton on the remote media-control.
|
||||
* MediaElement can be resumed by reomte media-control or via play().
|
||||
*
|
||||
* - SUSPENDED_BLOCK
|
||||
* It's used to reduce the power comsuption, we won't play the auto-play
|
||||
* audio/video in the page we have never visited before. MediaElement would
|
||||
* be resumed when the page is active. See bug647429 for more details.
|
||||
*
|
||||
* - SUSPENDED_STOP_DISPOSABLE
|
||||
* When we permanently lost platform audio focus, we shuold stop playing
|
||||
* and stop the audio channel agent. MediaElement can only be restarted by
|
||||
* play().
|
||||
*/
|
||||
void PauseByAudioChannel(SuspendTypes aSuspend);
|
||||
void BlockByAudioChannel();
|
||||
|
||||
void ResumeFromAudioChannel();
|
||||
void ResumeFromAudioChannelPaused(SuspendTypes aSuspend);
|
||||
void ResumeFromAudioChannelBlocked();
|
||||
|
||||
bool IsSuspendedByAudioChannel() const;
|
||||
void SetAudioChannelSuspended(SuspendTypes aSuspend);
|
||||
// Create or destroy the captured stream.
|
||||
void AudioCaptureStreamChange(bool aCapture);
|
||||
|
||||
// A method to check whether the media element is allowed to start playback.
|
||||
bool IsAllowedToPlay();
|
||||
bool IsAllowedToPlayByAudioChannel();
|
||||
|
||||
// If the network state is empty and then we would trigger DoLoad().
|
||||
void MaybeDoLoad();
|
||||
|
||||
// True if the tab which media element belongs to has been to foreground at
|
||||
// least once or activated by manually clicking the unblocking tab icon.
|
||||
bool IsTabActivated() const;
|
||||
|
||||
bool IsAudible() const;
|
||||
|
||||
// It's used for fennec only, send the notification when the user resumes the
|
||||
// media which was paused by media control.
|
||||
void MaybeNotifyMediaResumed(SuspendTypes aSuspend);
|
||||
// Anything we need to check after played success and not related with spec.
|
||||
void UpdateCustomPolicyAfterPlayed();
|
||||
|
||||
class nsAsyncEventRunner;
|
||||
using nsGenericHTMLElement::DispatchEvent;
|
||||
@ -1506,7 +1450,6 @@ protected:
|
||||
};
|
||||
|
||||
uint32_t mMuted;
|
||||
SuspendTypes mAudioChannelSuspended;
|
||||
|
||||
// True if the media statistics are currently being shown by the builtin
|
||||
// video controls
|
||||
@ -1523,19 +1466,12 @@ protected:
|
||||
// True if the sound is being captured.
|
||||
bool mAudioCaptured;
|
||||
|
||||
// True if the sound is being captured by the window.
|
||||
bool mAudioCapturedByWindow;
|
||||
|
||||
// If TRUE then the media element was actively playing before the currently
|
||||
// in progress seeking. If FALSE then the media element is either not seeking
|
||||
// or was not actively playing before the current seek. Used to decide whether
|
||||
// to raise the 'waiting' event as per 4.7.1.8 in HTML 5 specification.
|
||||
bool mPlayingBeforeSeek;
|
||||
|
||||
// if TRUE then the seek started while content was in active playing state
|
||||
// if FALSE then the seek started while the content was not playing.
|
||||
bool mPlayingThroughTheAudioChannelBeforeSeek;
|
||||
|
||||
// True iff this element is paused because the document is inactive or has
|
||||
// been suspended by the audio channel service.
|
||||
bool mPausedForInactiveDocumentOrChannel;
|
||||
@ -1631,21 +1567,11 @@ protected:
|
||||
// Audio Channel.
|
||||
AudioChannel mAudioChannel;
|
||||
|
||||
// The audio channel volume
|
||||
float mAudioChannelVolume;
|
||||
|
||||
// Is this media element playing?
|
||||
bool mPlayingThroughTheAudioChannel;
|
||||
|
||||
// Disable the video playback by track selection. This flag might not be
|
||||
// enough if we ever expand the ability of supporting multi-tracks video
|
||||
// playback.
|
||||
bool mDisableVideo;
|
||||
|
||||
// An agent used to join audio channel service and its life cycle would equal
|
||||
// to media element.
|
||||
RefPtr<AudioChannelAgent> mAudioChannelAgent;
|
||||
|
||||
RefPtr<TextTrackManager> mTextTrackManager;
|
||||
|
||||
RefPtr<AudioTrackList> mAudioTrackList;
|
||||
@ -1737,12 +1663,14 @@ private:
|
||||
// True if the audio track is not silent.
|
||||
bool mIsAudioTrackAudible;
|
||||
|
||||
// True if media element is audible for users.
|
||||
bool mAudible;
|
||||
|
||||
Visibility mVisibilityState;
|
||||
|
||||
UniquePtr<ErrorSink> mErrorSink;
|
||||
|
||||
// This wrapper will handle all audio channel related stuffs, eg. the operations
|
||||
// of tab audio indicator, Fennec's media control.
|
||||
// Note: mAudioChannelWrapper might be null after GC happened.
|
||||
RefPtr<AudioChannelAgentCallback> mAudioChannelWrapper;
|
||||
};
|
||||
|
||||
} // namespace dom
|
||||
|
@ -1807,6 +1807,7 @@ nsTextEditorState::InitializeRootNode()
|
||||
disp->mOverflowX != NS_STYLE_OVERFLOW_CLIP) {
|
||||
classValue.AppendLiteral(" inherit-overflow");
|
||||
}
|
||||
classValue.AppendLiteral(" inherit-scroll-behavior");
|
||||
}
|
||||
nsresult rv = mRootNode->SetAttr(kNameSpaceID_None, nsGkAtoms::_class,
|
||||
classValue, false);
|
||||
|
@ -392,6 +392,15 @@ MediaRawData::MediaRawData(const uint8_t* aData, size_t aSize)
|
||||
{
|
||||
}
|
||||
|
||||
MediaRawData::MediaRawData(const uint8_t* aData, size_t aSize,
|
||||
const uint8_t* aAlphaData, size_t aAlphaSize)
|
||||
: MediaData(RAW_DATA, 0)
|
||||
, mCrypto(mCryptoInternal)
|
||||
, mBuffer(aData, aSize)
|
||||
, mAlphaBuffer(aAlphaData, aAlphaSize)
|
||||
{
|
||||
}
|
||||
|
||||
already_AddRefed<MediaRawData>
|
||||
MediaRawData::Clone() const
|
||||
{
|
||||
@ -408,6 +417,9 @@ MediaRawData::Clone() const
|
||||
if (!s->mBuffer.Append(mBuffer.Data(), mBuffer.Length())) {
|
||||
return nullptr;
|
||||
}
|
||||
if (!s->mAlphaBuffer.Append(mAlphaBuffer.Data(), mAlphaBuffer.Length())) {
|
||||
return nullptr;
|
||||
}
|
||||
return s.forget();
|
||||
}
|
||||
|
||||
|
@ -617,15 +617,22 @@ private:
|
||||
class MediaRawData : public MediaData {
|
||||
public:
|
||||
MediaRawData();
|
||||
MediaRawData(const uint8_t* aData, size_t mSize);
|
||||
MediaRawData(const uint8_t* aData, size_t aSize);
|
||||
MediaRawData(const uint8_t* aData, size_t aSize,
|
||||
const uint8_t* aAlphaData, size_t aAlphaSize);
|
||||
|
||||
// Pointer to data or null if not-yet allocated
|
||||
const uint8_t* Data() const { return mBuffer.Data(); }
|
||||
// Pointer to alpha data or null if not-yet allocated
|
||||
const uint8_t* AlphaData() const { return mAlphaBuffer.Data(); }
|
||||
// Size of buffer.
|
||||
size_t Size() const { return mBuffer.Length(); }
|
||||
size_t AlphaSize() const { return mAlphaBuffer.Length(); }
|
||||
size_t ComputedSizeOfIncludingThis() const
|
||||
{
|
||||
return sizeof(*this) + mBuffer.ComputedSizeOfExcludingThis();
|
||||
return sizeof(*this)
|
||||
+ mBuffer.ComputedSizeOfExcludingThis()
|
||||
+ mAlphaBuffer.ComputedSizeOfExcludingThis();
|
||||
}
|
||||
|
||||
const CryptoSample& mCrypto;
|
||||
@ -650,6 +657,7 @@ protected:
|
||||
private:
|
||||
friend class MediaRawDataWriter;
|
||||
AlignedByteBuffer mBuffer;
|
||||
AlignedByteBuffer mAlphaBuffer;
|
||||
CryptoSample mCryptoInternal;
|
||||
MediaRawData(const MediaRawData&); // Not implemented
|
||||
};
|
||||
|
@ -985,9 +985,14 @@ MediaDecoder::PlaybackEnded()
|
||||
MOZ_DIAGNOSTIC_ASSERT(!IsShutdown());
|
||||
|
||||
if (mLogicallySeeking || mPlayState == PLAY_STATE_LOADING) {
|
||||
DECODER_LOG("MediaDecoder::PlaybackEnded bailed out, "
|
||||
"mLogicallySeeking=%d mPlayState=%s",
|
||||
mLogicallySeeking.Ref(), ToPlayStateStr(mPlayState));
|
||||
return;
|
||||
}
|
||||
|
||||
DECODER_LOG("MediaDecoder::PlaybackEnded");
|
||||
|
||||
ChangeState(PLAY_STATE_ENDED);
|
||||
InvalidateWithFlags(VideoFrameContainer::INVALIDATE_FORCE);
|
||||
mOwner->PlaybackEnded();
|
||||
|
@ -194,9 +194,7 @@ media::TimeIntervals
|
||||
MediaDecoderReader::GetBuffered()
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
if (!HaveStartTime()) {
|
||||
return media::TimeIntervals();
|
||||
}
|
||||
|
||||
AutoPinned<MediaResource> stream(mDecoder->GetResource());
|
||||
|
||||
if (!mDuration.Ref().isSome()) {
|
||||
@ -217,6 +215,9 @@ MediaDecoderReader::AsyncReadMetadata()
|
||||
nsresult rv = ReadMetadata(&metadata->mInfo, getter_Transfers(metadata->mTags));
|
||||
metadata->mInfo.AssertValid();
|
||||
|
||||
// Update the buffer ranges before resolving the metadata promise. Bug 1320258.
|
||||
UpdateBuffered();
|
||||
|
||||
// We're not waiting for anything. If we didn't get the metadata, that's an
|
||||
// error.
|
||||
if (NS_FAILED(rv) || !metadata->mInfo.HasValidMedia()) {
|
||||
|
@ -79,8 +79,6 @@ public:
|
||||
using WaitForDataPromise =
|
||||
MozPromise<MediaData::Type, WaitForDataRejectValue, IsExclusive>;
|
||||
|
||||
using BufferedUpdatePromise = MozPromise<bool, bool, IsExclusive>;
|
||||
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaDecoderReader)
|
||||
|
||||
// The caller must ensure that Shutdown() is called before aDecoder is
|
||||
@ -204,16 +202,6 @@ public:
|
||||
UpdateBuffered();
|
||||
}
|
||||
|
||||
// Update the buffered ranges and upon doing so return a promise
|
||||
// to indicate success. Overrides may need to do extra work to ensure
|
||||
// buffered is up to date.
|
||||
virtual RefPtr<BufferedUpdatePromise> UpdateBufferedWithPromise()
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
UpdateBuffered();
|
||||
return BufferedUpdatePromise::CreateAndResolve(true, __func__);
|
||||
}
|
||||
|
||||
virtual MediaQueue<AudioData>& AudioQueue() { return mAudioQueue; }
|
||||
virtual MediaQueue<VideoData>& VideoQueue() { return mVideoQueue; }
|
||||
|
||||
@ -222,20 +210,6 @@ public:
|
||||
return &mBuffered;
|
||||
}
|
||||
|
||||
void DispatchSetStartTime(int64_t aStartTime)
|
||||
{
|
||||
RefPtr<MediaDecoderReader> self = this;
|
||||
nsCOMPtr<nsIRunnable> r =
|
||||
NS_NewRunnableFunction([self, aStartTime] () -> void
|
||||
{
|
||||
MOZ_ASSERT(self->OnTaskQueue());
|
||||
MOZ_ASSERT(!self->HaveStartTime());
|
||||
self->mStartTime.emplace(aStartTime);
|
||||
self->UpdateBuffered();
|
||||
});
|
||||
OwnerThread()->Dispatch(r.forget());
|
||||
}
|
||||
|
||||
TaskQueue* OwnerThread() const
|
||||
{
|
||||
return mTaskQueue;
|
||||
@ -277,6 +251,9 @@ public:
|
||||
protected:
|
||||
virtual ~MediaDecoderReader();
|
||||
|
||||
// Recomputes mBuffered.
|
||||
virtual void UpdateBuffered();
|
||||
|
||||
// Populates aBuffered with the time ranges which are buffered. This may only
|
||||
// be called on the decode task queue, and should only be used internally by
|
||||
// UpdateBuffered - mBuffered (or mirrors of it) should be used for everything
|
||||
@ -297,14 +274,6 @@ protected:
|
||||
|
||||
RefPtr<MediaDataPromise> DecodeToFirstVideoData();
|
||||
|
||||
bool HaveStartTime()
|
||||
{
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
return mStartTime.isSome();
|
||||
}
|
||||
|
||||
int64_t StartTime() { MOZ_ASSERT(HaveStartTime()); return mStartTime.ref(); }
|
||||
|
||||
// Queue of audio frames. This queue is threadsafe, and is accessed from
|
||||
// the audio, decoder, state machine, and main threads.
|
||||
MediaQueue<AudioData> mAudioQueue;
|
||||
@ -342,18 +311,6 @@ protected:
|
||||
// what we support.
|
||||
bool mIgnoreAudioOutputFormat;
|
||||
|
||||
// The start time of the media, in microseconds. This is the presentation
|
||||
// time of the first frame decoded from the media. This is initialized to -1,
|
||||
// and then set to a value >= by MediaDecoderStateMachine::SetStartTime(),
|
||||
// after which point it never changes (though SetStartTime may be called
|
||||
// multiple times with the same value).
|
||||
//
|
||||
// This is an ugly breach of abstractions - it's currently necessary for the
|
||||
// readers to return the correct value of GetBuffered. We should refactor
|
||||
// things such that all GetBuffered calls go through the MDSM, which would
|
||||
// offset the range accordingly.
|
||||
Maybe<int64_t> mStartTime;
|
||||
|
||||
// This is a quick-and-dirty way for DecodeAudioData implementations to
|
||||
// communicate the presence of a decoding error to RequestAudioData. We should
|
||||
// replace this with a promise-y mechanism as we make this stuff properly
|
||||
@ -383,9 +340,6 @@ private:
|
||||
MOZ_CRASH();
|
||||
}
|
||||
|
||||
// Recomputes mBuffered.
|
||||
virtual void UpdateBuffered();
|
||||
|
||||
virtual void VisibilityChanged();
|
||||
|
||||
virtual void NotifyDataArrivedInternal() {}
|
||||
|
@ -168,14 +168,6 @@ MediaDecoderReaderWrapper::WaitRequestRef(MediaData::Type aType)
|
||||
return aType == MediaData::AUDIO_DATA ? mAudioWaitRequest : mVideoWaitRequest;
|
||||
}
|
||||
|
||||
RefPtr<MediaDecoderReaderWrapper::BufferedUpdatePromise>
|
||||
MediaDecoderReaderWrapper::UpdateBufferedWithPromise()
|
||||
{
|
||||
MOZ_ASSERT(mOwnerThread->IsCurrentThreadIn());
|
||||
return InvokeAsync(mReader->OwnerThread(), mReader.get(), __func__,
|
||||
&MediaDecoderReader::UpdateBufferedWithPromise);
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderReaderWrapper::ReleaseResources()
|
||||
{
|
||||
@ -229,10 +221,6 @@ MediaDecoderReaderWrapper::OnMetadataRead(MetadataHolder* aMetadata)
|
||||
|
||||
if (mStartTime.isNothing()) {
|
||||
mStartTime.emplace(aMetadata->mInfo.mStartTime);
|
||||
// Note: MFR should be able to setup its start time by itself without going
|
||||
// through here. MediaDecoderReader::DispatchSetStartTime() will be removed
|
||||
// once we remove all the legacy readers' code in the following bugs.
|
||||
mReader->DispatchSetStartTime(StartTime().ToMicroseconds());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,7 +34,6 @@ class MediaDecoderReaderWrapper {
|
||||
typedef MediaDecoderReader::MediaDataPromise MediaDataPromise;
|
||||
typedef MediaDecoderReader::SeekPromise SeekPromise;
|
||||
typedef MediaDecoderReader::WaitForDataPromise WaitForDataPromise;
|
||||
typedef MediaDecoderReader::BufferedUpdatePromise BufferedUpdatePromise;
|
||||
typedef MediaDecoderReader::TrackSet TrackSet;
|
||||
NS_INLINE_DECL_THREADSAFE_REFCOUNTING(MediaDecoderReaderWrapper);
|
||||
|
||||
@ -70,7 +69,6 @@ public:
|
||||
|
||||
RefPtr<SeekPromise> Seek(const SeekTarget& aTarget,
|
||||
const media::TimeUnit& aEndTime);
|
||||
RefPtr<BufferedUpdatePromise> UpdateBufferedWithPromise();
|
||||
RefPtr<ShutdownPromise> Shutdown();
|
||||
|
||||
void ReleaseResources();
|
||||
|
@ -348,6 +348,7 @@ private:
|
||||
* Purpose: wait for the CDM to start decoding.
|
||||
*
|
||||
* Transition to other states when CDM is ready:
|
||||
* SEEKING if any pending seek request.
|
||||
* DECODING_FIRSTFRAME otherwise.
|
||||
*/
|
||||
class MediaDecoderStateMachine::WaitForCDMState
|
||||
@ -462,7 +463,7 @@ private:
|
||||
*
|
||||
* Transition to:
|
||||
* SHUTDOWN if any decode error.
|
||||
* SEEKING if any pending seek and seek is possible.
|
||||
* SEEKING if any seek request.
|
||||
* DECODING when the 'loadeddata' event is fired.
|
||||
*/
|
||||
class MediaDecoderStateMachine::DecodingFirstFrameState
|
||||
@ -471,14 +472,7 @@ class MediaDecoderStateMachine::DecodingFirstFrameState
|
||||
public:
|
||||
explicit DecodingFirstFrameState(Master* aPtr) : StateObject(aPtr) {}
|
||||
|
||||
void Enter(SeekJob aPendingSeek);
|
||||
|
||||
void Exit() override
|
||||
{
|
||||
// mPendingSeek is either moved before transition to SEEKING,
|
||||
// or should be rejected here before transition to SHUTDOWN.
|
||||
mPendingSeek.RejectIfExists(__func__);
|
||||
}
|
||||
void Enter();
|
||||
|
||||
State GetState() const override
|
||||
{
|
||||
@ -502,8 +496,6 @@ public:
|
||||
MaybeFinishDecodeFirstFrame();
|
||||
}
|
||||
|
||||
RefPtr<MediaDecoder::SeekPromise> HandleSeek(SeekTarget aTarget) override;
|
||||
|
||||
void HandleVideoSuspendTimeout() override
|
||||
{
|
||||
// Do nothing for we need to decode the 1st video frame to get the dimensions.
|
||||
@ -519,8 +511,6 @@ private:
|
||||
// Notify FirstFrameLoaded if having decoded first frames and
|
||||
// transition to SEEKING if there is any pending seek, or DECODING otherwise.
|
||||
void MaybeFinishDecodeFirstFrame();
|
||||
|
||||
SeekJob mPendingSeek;
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1282,7 +1272,7 @@ DecodeMetadataState::OnMetadataRead(MetadataHolder* aMetadata)
|
||||
// to become available so that we can build the correct decryptor/decoder.
|
||||
SetState<WaitForCDMState>();
|
||||
} else {
|
||||
SetState<DecodingFirstFrameState>(SeekJob{});
|
||||
SetState<DecodingFirstFrameState>();
|
||||
}
|
||||
}
|
||||
|
||||
@ -1302,21 +1292,17 @@ void
|
||||
MediaDecoderStateMachine::
|
||||
WaitForCDMState::HandleCDMProxyReady()
|
||||
{
|
||||
SetState<DecodingFirstFrameState>(Move(mPendingSeek));
|
||||
if (mPendingSeek.Exists()) {
|
||||
SetState<SeekingState>(Move(mPendingSeek), EventVisibility::Observable);
|
||||
} else {
|
||||
SetState<DecodingFirstFrameState>();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderStateMachine::
|
||||
DecodingFirstFrameState::Enter(SeekJob aPendingSeek)
|
||||
DecodingFirstFrameState::Enter()
|
||||
{
|
||||
// Handle pending seek.
|
||||
if (aPendingSeek.Exists() &&
|
||||
(mMaster->mSentFirstFrameLoadedEvent ||
|
||||
Reader()->ForceZeroStartTime())) {
|
||||
SetState<SeekingState>(Move(aPendingSeek), EventVisibility::Observable);
|
||||
return;
|
||||
}
|
||||
|
||||
// Transition to DECODING if we've decoded first frames.
|
||||
if (mMaster->mSentFirstFrameLoadedEvent) {
|
||||
SetState<DecodingState>();
|
||||
@ -1325,34 +1311,10 @@ DecodingFirstFrameState::Enter(SeekJob aPendingSeek)
|
||||
|
||||
MOZ_ASSERT(!mMaster->mVideoDecodeSuspended);
|
||||
|
||||
mPendingSeek = Move(aPendingSeek);
|
||||
|
||||
// Dispatch tasks to decode first frames.
|
||||
mMaster->DispatchDecodeTasksIfNeeded();
|
||||
}
|
||||
|
||||
RefPtr<MediaDecoder::SeekPromise>
|
||||
MediaDecoderStateMachine::
|
||||
DecodingFirstFrameState::HandleSeek(SeekTarget aTarget)
|
||||
{
|
||||
// Should've transitioned to DECODING in Enter()
|
||||
// if mSentFirstFrameLoadedEvent is true.
|
||||
MOZ_ASSERT(!mMaster->mSentFirstFrameLoadedEvent);
|
||||
|
||||
if (!Reader()->ForceZeroStartTime()) {
|
||||
SLOG("Not Enough Data to seek at this stage, queuing seek");
|
||||
mPendingSeek.RejectIfExists(__func__);
|
||||
mPendingSeek.mTarget = aTarget;
|
||||
return mPendingSeek.mPromise.Ensure(__func__);
|
||||
}
|
||||
|
||||
// Since ForceZeroStartTime() is true, we should've transitioned to SEEKING
|
||||
// in Enter() if there is any pending seek.
|
||||
MOZ_ASSERT(!mPendingSeek.Exists());
|
||||
|
||||
return StateObject::HandleSeek(aTarget);
|
||||
}
|
||||
|
||||
void
|
||||
MediaDecoderStateMachine::
|
||||
DecodingFirstFrameState::MaybeFinishDecodeFirstFrame()
|
||||
@ -1365,12 +1327,7 @@ DecodingFirstFrameState::MaybeFinishDecodeFirstFrame()
|
||||
}
|
||||
|
||||
mMaster->FinishDecodeFirstFrame();
|
||||
|
||||
if (mPendingSeek.Exists()) {
|
||||
SetState<SeekingState>(Move(mPendingSeek), EventVisibility::Observable);
|
||||
} else {
|
||||
SetState<DecodingState>();
|
||||
}
|
||||
SetState<DecodingState>();
|
||||
}
|
||||
|
||||
void
|
||||
@ -1483,8 +1440,6 @@ SeekingState::SeekCompleted()
|
||||
// Notify FirstFrameLoaded now if we haven't since we've decoded some data
|
||||
// for readyState to transition to HAVE_CURRENT_DATA and fire 'loadeddata'.
|
||||
if (!mMaster->mSentFirstFrameLoadedEvent) {
|
||||
// Only MSE can start seeking before finishing decoding first frames.
|
||||
MOZ_ASSERT(Reader()->ForceZeroStartTime());
|
||||
mMaster->FinishDecodeFirstFrame();
|
||||
}
|
||||
|
||||
@ -1572,7 +1527,6 @@ ShutdownState::Enter()
|
||||
|
||||
master->mIsShutdown = true;
|
||||
master->mDelayedScheduler.Reset();
|
||||
master->mBufferedUpdateRequest.DisconnectIfExists();
|
||||
|
||||
// Shutdown happens while decode timer is active, we need to disconnect and
|
||||
// dispose of the timer.
|
||||
@ -2703,22 +2657,11 @@ MediaDecoderStateMachine::EnqueueFirstFrameLoadedEvent()
|
||||
// Track value of mSentFirstFrameLoadedEvent from before updating it
|
||||
bool firstFrameBeenLoaded = mSentFirstFrameLoadedEvent;
|
||||
mSentFirstFrameLoadedEvent = true;
|
||||
RefPtr<MediaDecoderStateMachine> self = this;
|
||||
mBufferedUpdateRequest.Begin(
|
||||
mReader->UpdateBufferedWithPromise()
|
||||
->Then(OwnerThread(),
|
||||
__func__,
|
||||
// Resolve
|
||||
[self, firstFrameBeenLoaded]() {
|
||||
self->mBufferedUpdateRequest.Complete();
|
||||
MediaDecoderEventVisibility visibility =
|
||||
firstFrameBeenLoaded ? MediaDecoderEventVisibility::Suppressed
|
||||
: MediaDecoderEventVisibility::Observable;
|
||||
self->mFirstFrameLoadedEvent.Notify(
|
||||
nsAutoPtr<MediaInfo>(new MediaInfo(self->Info())), visibility);
|
||||
},
|
||||
// Reject
|
||||
[]() { MOZ_CRASH("Should not reach"); }));
|
||||
MediaDecoderEventVisibility visibility =
|
||||
firstFrameBeenLoaded ? MediaDecoderEventVisibility::Suppressed
|
||||
: MediaDecoderEventVisibility::Observable;
|
||||
mFirstFrameLoadedEvent.Notify(
|
||||
nsAutoPtr<MediaInfo>(new MediaInfo(Info())), visibility);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -691,9 +691,6 @@ private:
|
||||
|
||||
mozilla::MediaMetadataManager mMetadataManager;
|
||||
|
||||
// Track our request to update the buffered ranges
|
||||
MozPromiseRequestHolder<MediaDecoderReader::BufferedUpdatePromise> mBufferedUpdateRequest;
|
||||
|
||||
// True if we are back from DECODER_STATE_DORMANT state and
|
||||
// LoadedMetadataEvent was already sent.
|
||||
bool mSentLoadedMetadataEvent;
|
||||
|
@ -790,6 +790,9 @@ MediaFormatReader::MaybeResolveMetadataPromise()
|
||||
mInfo.mStartTime = startTime; // mInfo.mStartTime is initialized to 0.
|
||||
}
|
||||
|
||||
mHasStartTime = true;
|
||||
UpdateBuffered();
|
||||
|
||||
RefPtr<MetadataHolder> metadata = new MetadataHolder();
|
||||
metadata->mInfo = mInfo;
|
||||
metadata->mTags = mTags->Count() ? mTags.release() : nullptr;
|
||||
@ -2177,16 +2180,10 @@ MediaFormatReader::GetBuffered()
|
||||
media::TimeIntervals audioti;
|
||||
media::TimeIntervals intervals;
|
||||
|
||||
if (!mInitDone) {
|
||||
if (!mInitDone || !mHasStartTime) {
|
||||
return intervals;
|
||||
}
|
||||
int64_t startTime = 0;
|
||||
if (!ForceZeroStartTime()) {
|
||||
if (!HaveStartTime()) {
|
||||
return intervals;
|
||||
}
|
||||
startTime = StartTime();
|
||||
}
|
||||
|
||||
// Ensure we have up to date buffered time range.
|
||||
if (HasVideo()) {
|
||||
UpdateReceivedNewData(TrackType::kVideoTrack);
|
||||
@ -2213,21 +2210,7 @@ MediaFormatReader::GetBuffered()
|
||||
// IntervalSet already starts at 0 or is empty, nothing to shift.
|
||||
return intervals;
|
||||
}
|
||||
return intervals.Shift(media::TimeUnit::FromMicroseconds(-startTime));
|
||||
}
|
||||
|
||||
// For the MediaFormatReader override we need to force an update to the
|
||||
// buffered ranges, so we call NotifyDataArrive
|
||||
RefPtr<MediaDecoderReader::BufferedUpdatePromise>
|
||||
MediaFormatReader::UpdateBufferedWithPromise() {
|
||||
MOZ_ASSERT(OnTaskQueue());
|
||||
// Call NotifyDataArrive to force a recalculation of the buffered
|
||||
// ranges. UpdateBuffered alone will not force a recalculation, so we
|
||||
// use NotifyDataArrived which sets flags to force this recalculation.
|
||||
// See MediaFormatReader::UpdateReceivedNewData for an example of where
|
||||
// the new data flag is used.
|
||||
NotifyDataArrived();
|
||||
return BufferedUpdatePromise::CreateAndResolve(true, __func__);
|
||||
return intervals.Shift(media::TimeUnit() - mInfo.mStartTime);
|
||||
}
|
||||
|
||||
void MediaFormatReader::ReleaseResources()
|
||||
|
@ -56,8 +56,6 @@ protected:
|
||||
public:
|
||||
media::TimeIntervals GetBuffered() override;
|
||||
|
||||
RefPtr<BufferedUpdatePromise> UpdateBufferedWithPromise() override;
|
||||
|
||||
bool ForceZeroStartTime() const override;
|
||||
|
||||
// For Media Resource Management
|
||||
@ -586,6 +584,9 @@ private:
|
||||
void MaybeResolveMetadataPromise();
|
||||
|
||||
UniquePtr<MetadataTags> mTags;
|
||||
|
||||
// A flag indicating if the start time is known or not.
|
||||
bool mHasStartTime = false;
|
||||
};
|
||||
|
||||
} // namespace mozilla
|
||||
|
@ -215,6 +215,7 @@ public:
|
||||
, mExtraData(aOther.mExtraData)
|
||||
, mRotation(aOther.mRotation)
|
||||
, mImageRect(aOther.mImageRect)
|
||||
, mAlphaPresent(aOther.mAlphaPresent)
|
||||
{
|
||||
}
|
||||
|
||||
@ -238,6 +239,16 @@ public:
|
||||
return MakeUnique<VideoInfo>(*this);
|
||||
}
|
||||
|
||||
void SetAlpha(bool aAlphaPresent)
|
||||
{
|
||||
mAlphaPresent = aAlphaPresent;
|
||||
}
|
||||
|
||||
bool HasAlpha() const
|
||||
{
|
||||
return mAlphaPresent;
|
||||
}
|
||||
|
||||
nsIntRect ImageRect() const
|
||||
{
|
||||
if (mImageRect.width < 0 || mImageRect.height < 0) {
|
||||
@ -309,6 +320,9 @@ private:
|
||||
// mImage may be cropped; currently only used with the WebM container.
|
||||
// A negative width or height indicate that no cropping is to occur.
|
||||
nsIntRect mImageRect;
|
||||
|
||||
// Indicates whether or not frames may contain alpha information.
|
||||
bool mAlphaPresent = false;
|
||||
};
|
||||
|
||||
class AudioInfo : public TrackInfo {
|
||||
|
@ -60,6 +60,7 @@ skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not
|
||||
[test_DurationUpdated.html]
|
||||
[test_DurationUpdated_mp4.html]
|
||||
skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
|
||||
[test_EndedEvent.html]
|
||||
[test_EndOfStream.html]
|
||||
[test_EndOfStream_mp4.html]
|
||||
skip-if = ((os == "win" && os_version == "5.1") || (toolkit == 'android')) # Not supported on xp and android 2.3
|
||||
|