forked from mirrors/gecko-dev
137 lines
3.8 KiB
JavaScript
137 lines
3.8 KiB
JavaScript
/* 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/. */
|
|
|
|
import { MozLitElement } from "chrome://global/content/lit-utils.mjs";
|
|
|
|
// eslint-disable-next-line import/no-unassigned-import
|
|
import "chrome://browser/content/firefoxview/card-container.mjs";
|
|
// eslint-disable-next-line import/no-unassigned-import
|
|
import "chrome://browser/content/firefoxview/fxview-empty-state.mjs";
|
|
// eslint-disable-next-line import/no-unassigned-import
|
|
import "chrome://browser/content/firefoxview/fxview-tab-list.mjs";
|
|
|
|
const lazy = {};
|
|
|
|
ChromeUtils.defineESModuleGetters(lazy, {
|
|
PlacesUtils: "resource://gre/modules/PlacesUtils.sys.mjs",
|
|
});
|
|
|
|
export class ViewPage extends MozLitElement {
|
|
static get properties() {
|
|
return {
|
|
selectedTab: { type: Boolean },
|
|
recentBrowsing: { type: Boolean },
|
|
};
|
|
}
|
|
|
|
constructor() {
|
|
super();
|
|
this.selectedTab = false;
|
|
this.recentBrowsing = Boolean(this.closest("VIEW-RECENTBROWSING"));
|
|
}
|
|
|
|
connectedCallback() {
|
|
super.connectedCallback();
|
|
this.ownerDocument.addEventListener("visibilitychange", this);
|
|
}
|
|
|
|
disconnectedCallback() {
|
|
super.disconnectedCallback();
|
|
this.ownerDocument.removeEventListener("visibilitychange", this);
|
|
}
|
|
|
|
handleEvent(event) {
|
|
switch (event.type) {
|
|
case "visibilitychange":
|
|
if (this.ownerDocument.visibilityState === "visible") {
|
|
this.viewTabVisibleCallback();
|
|
} else {
|
|
this.viewTabHiddenCallback();
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Override this function to run a callback whenever Firefox View is visible.
|
|
*/
|
|
viewTabVisibleCallback() {}
|
|
|
|
/**
|
|
* Override this function to run a callback whenever Firefox View is hidden.
|
|
*/
|
|
viewTabHiddenCallback() {}
|
|
|
|
enter() {
|
|
this.selectedTab = true;
|
|
}
|
|
|
|
exit() {
|
|
this.selectedTab = false;
|
|
}
|
|
|
|
getWindow() {
|
|
return window.browsingContext.embedderWindowGlobal.browsingContext.window;
|
|
}
|
|
|
|
/**
|
|
* This function doesn't just copy the link to the clipboard, it creates a
|
|
* URL object on the clipboard, so when it's pasted into an application that
|
|
* supports it, it displays the title as a link.
|
|
*/
|
|
copyLink(e) {
|
|
// Copied from doCommand/placesCmd_copy in PlacesUIUtils.sys.mjs
|
|
|
|
// This is a little hacky, but there is a lot of code in Places that handles
|
|
// clipboard stuff, so it's easier to reuse.
|
|
let node = {};
|
|
node.type = 0;
|
|
node.title = this.triggerNode.title;
|
|
node.uri = this.triggerNode.url;
|
|
|
|
// This order is _important_! It controls how this and other applications
|
|
// select data to be inserted based on type.
|
|
let contents = [
|
|
{ type: lazy.PlacesUtils.TYPE_X_MOZ_URL, entries: [] },
|
|
{ type: lazy.PlacesUtils.TYPE_HTML, entries: [] },
|
|
{ type: lazy.PlacesUtils.TYPE_PLAINTEXT, entries: [] },
|
|
];
|
|
|
|
contents.forEach(function (content) {
|
|
content.entries.push(lazy.PlacesUtils.wrapNode(node, content.type));
|
|
});
|
|
|
|
let xferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(
|
|
Ci.nsITransferable
|
|
);
|
|
xferable.init(null);
|
|
|
|
function addData(type, data) {
|
|
xferable.addDataFlavor(type);
|
|
xferable.setTransferData(type, lazy.PlacesUtils.toISupportsString(data));
|
|
}
|
|
|
|
contents.forEach(function (content) {
|
|
addData(content.type, content.entries.join(lazy.PlacesUtils.endl));
|
|
});
|
|
|
|
Services.clipboard.setData(
|
|
xferable,
|
|
null,
|
|
Ci.nsIClipboard.kGlobalClipboard
|
|
);
|
|
}
|
|
|
|
openInNewWindow(e) {
|
|
this.getWindow().openTrustedLinkIn(this.triggerNode.url, "window", {
|
|
private: false,
|
|
});
|
|
}
|
|
|
|
openInNewPrivateWindow(e) {
|
|
this.getWindow().openTrustedLinkIn(this.triggerNode.url, "window", {
|
|
private: true,
|
|
});
|
|
}
|
|
}
|