mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-10-17 20:57:30 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
339
toolkit/content/aboutProfiles.js
Normal file
339
toolkit/content/aboutProfiles.js
Normal file
|
|
@ -0,0 +1,339 @@
|
|||
/* 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';
|
||||
|
||||
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
|
||||
|
||||
Cu.import('resource://gre/modules/Services.jsm');
|
||||
Cu.import('resource://gre/modules/XPCOMUtils.jsm');
|
||||
Cu.import('resource://gre/modules/AppConstants.jsm');
|
||||
|
||||
XPCOMUtils.defineLazyServiceGetter(
|
||||
this,
|
||||
'ProfileService',
|
||||
'@mozilla.org/toolkit/profile-service;1',
|
||||
'nsIToolkitProfileService'
|
||||
);
|
||||
|
||||
const bundle = Services.strings.createBundle(
|
||||
'chrome://global/locale/aboutProfiles.properties');
|
||||
|
||||
// nsIToolkitProfileService.selectProfile can be used only during the selection
|
||||
// of the profile in the ProfileManager. If we are showing about:profiles in a
|
||||
// tab, the selectedProfile returns the default profile.
|
||||
// In this function we use the ProfD to find the current profile.
|
||||
function findCurrentProfile() {
|
||||
let cpd;
|
||||
try {
|
||||
cpd = Cc["@mozilla.org/file/directory_service;1"]
|
||||
.getService(Ci.nsIProperties)
|
||||
.get("ProfD", Ci.nsIFile);
|
||||
} catch (e) {}
|
||||
|
||||
if (cpd) {
|
||||
let itr = ProfileService.profiles;
|
||||
while (itr.hasMoreElements()) {
|
||||
let profile = itr.getNext().QueryInterface(Ci.nsIToolkitProfile);
|
||||
if (profile.rootDir.path == cpd.path) {
|
||||
return profile;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// selectedProfile can trow if nothing is selected or if the selected profile
|
||||
// has been deleted.
|
||||
try {
|
||||
return ProfileService.selectedProfile;
|
||||
} catch (e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
function refreshUI() {
|
||||
let parent = document.getElementById('profiles');
|
||||
while (parent.firstChild) {
|
||||
parent.removeChild(parent.firstChild);
|
||||
}
|
||||
|
||||
let defaultProfile;
|
||||
try {
|
||||
defaultProfile = ProfileService.defaultProfile;
|
||||
} catch (e) {}
|
||||
|
||||
let currentProfile = findCurrentProfile() || defaultProfile;
|
||||
|
||||
let iter = ProfileService.profiles;
|
||||
while (iter.hasMoreElements()) {
|
||||
let profile = iter.getNext().QueryInterface(Ci.nsIToolkitProfile);
|
||||
display({ profile: profile,
|
||||
isDefault: profile == defaultProfile,
|
||||
isCurrentProfile: profile == currentProfile });
|
||||
}
|
||||
|
||||
let createButton = document.getElementById('create-button');
|
||||
createButton.onclick = createProfileWizard;
|
||||
|
||||
let restartSafeModeButton = document.getElementById('restart-in-safe-mode-button');
|
||||
restartSafeModeButton.onclick = function() { restart(true); }
|
||||
|
||||
let restartNormalModeButton = document.getElementById('restart-button');
|
||||
restartNormalModeButton.onclick = function() { restart(false); }
|
||||
}
|
||||
|
||||
function openDirectory(dir) {
|
||||
let nsLocalFile = Components.Constructor("@mozilla.org/file/local;1",
|
||||
"nsILocalFile", "initWithPath");
|
||||
new nsLocalFile(dir).reveal();
|
||||
}
|
||||
|
||||
function display(profileData) {
|
||||
let parent = document.getElementById('profiles');
|
||||
|
||||
let div = document.createElement('div');
|
||||
parent.appendChild(div);
|
||||
|
||||
let nameStr = bundle.formatStringFromName('name', [profileData.profile.name], 1);
|
||||
|
||||
let name = document.createElement('h2');
|
||||
name.appendChild(document.createTextNode(nameStr));
|
||||
|
||||
div.appendChild(name);
|
||||
|
||||
if (profileData.isCurrentProfile) {
|
||||
let currentProfile = document.createElement('h3');
|
||||
let currentProfileStr = bundle.GetStringFromName('currentProfile');
|
||||
currentProfile.appendChild(document.createTextNode(currentProfileStr));
|
||||
div.appendChild(currentProfile);
|
||||
}
|
||||
|
||||
let table = document.createElement('table');
|
||||
div.appendChild(table);
|
||||
|
||||
let tbody = document.createElement('tbody');
|
||||
table.appendChild(tbody);
|
||||
|
||||
function createItem(title, value, dir = false) {
|
||||
let tr = document.createElement('tr');
|
||||
tbody.appendChild(tr);
|
||||
|
||||
let th = document.createElement('th');
|
||||
th.setAttribute('class', 'column');
|
||||
th.appendChild(document.createTextNode(title));
|
||||
tr.appendChild(th);
|
||||
|
||||
let td = document.createElement('td');
|
||||
td.appendChild(document.createTextNode(value));
|
||||
tr.appendChild(td);
|
||||
|
||||
if (dir) {
|
||||
td.appendChild(document.createTextNode(' '));
|
||||
let button = document.createElement('button');
|
||||
let string = 'openDir';
|
||||
if (AppConstants.platform == "win") {
|
||||
string = 'winOpenDir2';
|
||||
} else if (AppConstants.platform == "macosx") {
|
||||
string = 'macOpenDir';
|
||||
}
|
||||
let buttonText = document.createTextNode(bundle.GetStringFromName(string));
|
||||
button.appendChild(buttonText);
|
||||
td.appendChild(button);
|
||||
|
||||
button.addEventListener('click', function(e) {
|
||||
openDirectory(value);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
createItem(bundle.GetStringFromName('isDefault'),
|
||||
profileData.isDefault ? bundle.GetStringFromName('yes') : bundle.GetStringFromName('no'));
|
||||
|
||||
createItem(bundle.GetStringFromName('rootDir'), profileData.profile.rootDir.path, true);
|
||||
|
||||
if (profileData.profile.localDir.path != profileData.profile.rootDir.path) {
|
||||
createItem(bundle.GetStringFromName('localDir'), profileData.profile.localDir.path, true);
|
||||
}
|
||||
|
||||
let renameButton = document.createElement('button');
|
||||
renameButton.appendChild(document.createTextNode(bundle.GetStringFromName('rename')));
|
||||
renameButton.onclick = function() {
|
||||
renameProfile(profileData.profile);
|
||||
};
|
||||
div.appendChild(renameButton);
|
||||
|
||||
if (!profileData.isCurrentProfile) {
|
||||
let removeButton = document.createElement('button');
|
||||
removeButton.appendChild(document.createTextNode(bundle.GetStringFromName('remove')));
|
||||
removeButton.onclick = function() {
|
||||
removeProfile(profileData.profile);
|
||||
};
|
||||
|
||||
div.appendChild(removeButton);
|
||||
}
|
||||
|
||||
if (!profileData.isDefault) {
|
||||
let defaultButton = document.createElement('button');
|
||||
defaultButton.appendChild(document.createTextNode(bundle.GetStringFromName('setAsDefault')));
|
||||
defaultButton.onclick = function() {
|
||||
defaultProfile(profileData.profile);
|
||||
};
|
||||
div.appendChild(defaultButton);
|
||||
}
|
||||
|
||||
if (!profileData.isCurrentProfile) {
|
||||
let runButton = document.createElement('button');
|
||||
runButton.appendChild(document.createTextNode(bundle.GetStringFromName('launchProfile')));
|
||||
runButton.onclick = function() {
|
||||
openProfile(profileData.profile);
|
||||
};
|
||||
div.appendChild(runButton);
|
||||
}
|
||||
|
||||
let sep = document.createElement('hr');
|
||||
div.appendChild(sep);
|
||||
}
|
||||
|
||||
function CreateProfile(profile) {
|
||||
ProfileService.selectedProfile = profile;
|
||||
ProfileService.flush();
|
||||
refreshUI();
|
||||
}
|
||||
|
||||
function createProfileWizard() {
|
||||
// This should be rewritten in HTML eventually.
|
||||
window.openDialog('chrome://mozapps/content/profile/createProfileWizard.xul',
|
||||
'', 'centerscreen,chrome,modal,titlebar',
|
||||
ProfileService);
|
||||
}
|
||||
|
||||
function renameProfile(profile) {
|
||||
let title = bundle.GetStringFromName('renameProfileTitle');
|
||||
let msg = bundle.formatStringFromName('renameProfile', [profile.name], 1);
|
||||
let newName = { value: profile.name };
|
||||
|
||||
if (Services.prompt.prompt(window, title, msg, newName, null,
|
||||
{ value: 0 })) {
|
||||
newName = newName.value;
|
||||
|
||||
if (newName == profile.name) {
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
profile.name = newName;
|
||||
} catch (e) {
|
||||
let title = bundle.GetStringFromName('invalidProfileNameTitle');
|
||||
let msg = bundle.formatStringFromName('invalidProfileName', [newName], 1);
|
||||
Services.prompt.alert(window, title, msg);
|
||||
return;
|
||||
}
|
||||
|
||||
ProfileService.flush();
|
||||
refreshUI();
|
||||
}
|
||||
}
|
||||
|
||||
function removeProfile(profile) {
|
||||
let deleteFiles = false;
|
||||
|
||||
if (profile.rootDir.exists()) {
|
||||
let title = bundle.GetStringFromName('deleteProfileTitle');
|
||||
let msg = bundle.formatStringFromName('deleteProfileConfirm',
|
||||
[profile.rootDir.path], 1);
|
||||
|
||||
let buttonPressed = Services.prompt.confirmEx(window, title, msg,
|
||||
(Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_0) +
|
||||
(Services.prompt.BUTTON_TITLE_CANCEL * Services.prompt.BUTTON_POS_1) +
|
||||
(Services.prompt.BUTTON_TITLE_IS_STRING * Services.prompt.BUTTON_POS_2),
|
||||
bundle.GetStringFromName('dontDeleteFiles'),
|
||||
null,
|
||||
bundle.GetStringFromName('deleteFiles'),
|
||||
null, {value:0});
|
||||
if (buttonPressed == 1) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (buttonPressed == 2) {
|
||||
deleteFiles = true;
|
||||
}
|
||||
}
|
||||
|
||||
// If we are deleting the selected or the default profile we must choose a
|
||||
// different one.
|
||||
let isSelected = false;
|
||||
try {
|
||||
isSelected = ProfileService.selectedProfile == profile;
|
||||
} catch (e) {}
|
||||
|
||||
let isDefault = false;
|
||||
try {
|
||||
isDefault = ProfileService.defaultProfile == profile;
|
||||
} catch (e) {}
|
||||
|
||||
if (isSelected || isDefault) {
|
||||
let itr = ProfileService.profiles;
|
||||
while (itr.hasMoreElements()) {
|
||||
let p = itr.getNext().QueryInterface(Ci.nsIToolkitProfile);
|
||||
if (profile == p) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isSelected) {
|
||||
ProfileService.selectedProfile = p;
|
||||
}
|
||||
|
||||
if (isDefault) {
|
||||
ProfileService.defaultProfile = p;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
profile.remove(deleteFiles);
|
||||
ProfileService.flush();
|
||||
refreshUI();
|
||||
}
|
||||
|
||||
function defaultProfile(profile) {
|
||||
ProfileService.defaultProfile = profile;
|
||||
ProfileService.selectedProfile = profile;
|
||||
ProfileService.flush();
|
||||
refreshUI();
|
||||
}
|
||||
|
||||
function openProfile(profile) {
|
||||
let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
|
||||
.createInstance(Ci.nsISupportsPRBool);
|
||||
Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
|
||||
|
||||
if (cancelQuit.data) {
|
||||
return;
|
||||
}
|
||||
|
||||
Services.startup.createInstanceWithProfile(profile);
|
||||
}
|
||||
|
||||
function restart(safeMode) {
|
||||
let cancelQuit = Cc["@mozilla.org/supports-PRBool;1"]
|
||||
.createInstance(Ci.nsISupportsPRBool);
|
||||
Services.obs.notifyObservers(cancelQuit, "quit-application-requested", "restart");
|
||||
|
||||
if (cancelQuit.data) {
|
||||
return;
|
||||
}
|
||||
|
||||
let flags = Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestartNotSameProfile;
|
||||
|
||||
if (safeMode) {
|
||||
Services.startup.restartInSafeMode(flags);
|
||||
} else {
|
||||
Services.startup.quit(flags);
|
||||
}
|
||||
}
|
||||
|
||||
window.addEventListener('DOMContentLoaded', function load() {
|
||||
window.removeEventListener('DOMContentLoaded', load);
|
||||
refreshUI();
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue