blob: df2e1b675fd9a0fa8990797d526ce03f5fe7b1fe [file] [log] [blame]
// Copyright (c) 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
/**
* @implements {UI.ContextMenu.Provider}
* @unrestricted
*/
export class ContextMenuProvider {
/**
* @override
* @param {!Event} event
* @param {!UI.ContextMenu} contextMenu
* @param {!Object} target
*/
appendApplicableItems(event, contextMenu, target) {
const contentProvider = /** @type {!Common.ContentProvider} */ (target);
async function saveAs() {
if (contentProvider instanceof Workspace.UISourceCode) {
/** @type {!Workspace.UISourceCode} */ (contentProvider).commitWorkingCopy();
}
let content = (await contentProvider.requestContent()).content || '';
if (await contentProvider.contentEncoded()) {
content = window.atob(content);
}
const url = contentProvider.contentURL();
Workspace.fileManager.save(url, /** @type {string} */ (content), true);
Workspace.fileManager.close(url);
}
if (contentProvider.contentType().isDocumentOrScriptOrStyleSheet()) {
contextMenu.saveSection().appendItem(Common.UIString('Save as...'), saveAs);
}
// Retrieve uiSourceCode by URL to pick network resources everywhere.
const uiSourceCode = Workspace.workspace.uiSourceCodeForURL(contentProvider.contentURL());
if (uiSourceCode && Persistence.networkPersistenceManager.canSaveUISourceCodeForOverrides(uiSourceCode)) {
contextMenu.saveSection().appendItem(Common.UIString('Save for overrides'), () => {
uiSourceCode.commitWorkingCopy();
Persistence.networkPersistenceManager.saveUISourceCodeForOverrides(
/** @type {!Workspace.UISourceCode} */ (uiSourceCode));
Common.Revealer.reveal(uiSourceCode);
});
}
const binding = uiSourceCode && Persistence.persistence.binding(uiSourceCode);
const fileURL = binding ? binding.fileSystem.contentURL() : contentProvider.contentURL();
if (fileURL.startsWith('file://')) {
const path = Common.ParsedURL.urlToPlatformPath(fileURL, Host.isWin());
contextMenu.revealSection().appendItem(
Common.UIString('Open in containing folder'), () => Host.InspectorFrontendHost.showItemInFolder(path));
}
}
}
/* Legacy exported object */
self.Persistence = self.Persistence || {};
/* Legacy exported object */
Persistence = Persistence || {};
Persistence.PersistenceActions = {};
/** @constructor */
Persistence.PersistenceActions.ContextMenuProvider = ContextMenuProvider;