Files
tubestation/browser/base/content/aboutTabGroupsMigration.js

64 lines
2.3 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/. */
"use strict";
Cu.import("resource:///modules/TabGroupsMigrator.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "PlacesUtils",
"resource://gre/modules/PlacesUtils.jsm");
const SUPPORT_URL = "https://support.mozilla.org/kb/tab-groups-removal";
function fillInDescription() {
let descElement = document.getElementById("mainDescription");
let text = descElement.getAttribute("_description_label");
let learnMoreText = descElement.getAttribute("_learnmore_label");
let link = document.createElement("a");
link.href = SUPPORT_URL;
link.target = "_blank";
link.textContent = learnMoreText;
// We don't want to assign the label (plaintext, because we took it out of
// getAttribute, so html entities have been resolved) directly to innerHTML.
// Using a separate element and then using innerHTML on that would mean we
// depend on the HTML encoding (or lack thereof) of %S, which l10n tools
// might change.
// So instead, split the plaintext we have and create textNodes:
let nodes = text.split(/%S/).map(document.createTextNode.bind(document));
// then insert the link:
nodes.splice(1, 0, link);
// then append all of these in turn:
for (let node of nodes) {
descElement.appendChild(node);
}
}
let loadPromise = new Promise(resolve => {
let loadHandler = e => {
window.removeEventListener("DOMContentLoaded", loadHandler);
fillInDescription();
resolve();
};
window.addEventListener("DOMContentLoaded", loadHandler, false);
});
let tabGroupsBookmarkItemId;
// If the session wasn't restored this run/session, this might be null.
// Then we shouldn't show the button:
if (TabGroupsMigrator.bookmarkedGroupsPromise) {
let bookmarkPromise = TabGroupsMigrator.bookmarkedGroupsPromise.then(bm => {
return PlacesUtils.promiseItemId(bm.guid);
}).then(itemId => { tabGroupsBookmarkItemId = itemId });
Promise.all([bookmarkPromise, loadPromise]).then(function() {
document.getElementById("show-migrated-bookmarks-button").style.removeProperty("display");
});
}
function showMigratedGroups() {
let browserWin = getBrowserWindow();
browserWin.PlacesCommandHook.showPlacesOrganizer(["BookmarksMenu", tabGroupsBookmarkItemId]);
}