Вторник, 21.05.2024, 18:56
Приветствую Вас Гость | RSS
Меню сайта
Наш опрос
Оцените мой сайт
Всего ответов: 1
Статистика

Онлайн всего: 2
Гостей: 2
Пользователей: 0
Форма входа
Поиск
Календарь
«  Март 2013  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
25262728293031

Главная » 2013 » Март » 13 » Simple session manager(простой менеджер сессий)
07:50
 

Simple session manager(простой менеджер сессий)

Автор: NightsoN
Домашняя страница скрипта: Simple Session Manager
Перевод: Google
Интерпретация перевода: SendInfo
Автор блокировки повторного запуска функций и обработчиков при открытии настройки панелей: bunda1
Для использования с Сustom Buttons положить код в инициализацию любой готовой или новой кнопки. В меню "рыжей кнопки" появится подменю "Сохранить сеанс". Далее разберётесь :) После установки потребуется перезагрузка браузера, чтобы устранить повторы меню.(Возможно кто-то из творцов кнопок захочет устранить этот глюк.)

Выделить код

Код:

/*Initialization Code*/ // Блокировать повторный запуск функций и обработчиков при открытии настройки панелей .............. if (this.hasAttribute("stop")) return; // ==UserScript== // @name Simple Session Manager // @version 0.4b // @description Простой менеджер сессии // @author NightsoN // @include chrome://browser/content/browser.xul // ==/UserScript== (function () { var overwrite = 1, //Если восстановление сессии устанавливается для покрытия открытых страниц, 0 при отсутствии покрытия, чтобы покрыть 2 охвата и восстановления сессию в новом окне Cc = Components.classes, Ci = Components.interfaces, Cu = Components.utils, SS = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore); if (!window.Services) { Cu.import("resource://gre/modules/Services.jsm"); } //Сохранить функцию чтения файла, взятые из Griever из UserScriptLoader.uc.js function saveFile(data) { var file = Services.dirsvc.get('UChrm', Ci.nsIFile); file.append("simple_session_manager.json"); var suConverter = Cc["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Ci.nsIScriptableUnicodeConverter); suConverter.charset = 'UTF-8'; data = suConverter.ConvertFromUnicode(data); var foStream = Cc['@mozilla.org/network/file-output-stream;1'].createInstance(Ci.nsIFileOutputStream); foStream.init(file, 0x02 | 0x08 | 0x20, 0664, 0); foStream.write(data, data.length); foStream.close(); } function loadFile() { var file = Services.dirsvc.get('UChrm', Ci.nsIFile); file.append("simple_session_manager.json"); if (file.exists() === false) return false; var fstream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream); var sstream = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream); fstream.init(file, -1, 0, 0); sstream.init(fstream); var data = sstream.read(sstream.available()); try { data = decodeURIComponent(escape(data)); } catch (e) {} sstream.close(); fstream.close(); if (data === "undefined") return false; data = JSON.parse(data); return data; } //Получить текущее время function getTime() { var d = new Date(); function addzero(t) { (t < 10) ? t = "0" + t : t; return t; } var t = addzero(d.getDate()) + "." + addzero(d.getMonth()+1) + "." + d.getFullYear() + "-" + addzero(d.getHours()) + ":" + addzero(d.getMinutes()); return t; } //Сохранить сессию function saveSession(ssdata) { var name = prompt("Сохранить",getTime()); if (name != null) { if (loadFile() === false) { var data = {}; } else { var data = loadFile(); } if (data[name]) { alert("Сессия с тем же именем уже существует") return; } data[name] = JSON.parse(ssdata); saveFile(JSON.stringify(data)); makeitems(name); } } //Сохранить все окна сессии function saveCurrentSession() { var ssdata = SS.getBrowserState(); saveSession(ssdata); } //Сохранение текущей сессии окне function saveCurrentWindowSession() { var ssdata = SS.getWindowState(window); saveSession(ssdata); } //Удаление сессии function remove() { var node = this.parentNode.parentNode; var name = node.getAttribute("label"); var cf = confirm("Вы уверены, что хотите удалить " + name + " ?"); if (cf === true) { node.style.display = "none"; var data = loadFile(); delete data[name]; saveFile(JSON.stringify(data)); } } //Переименовать function rename() { var node = this.parentNode.parentNode; var name = node.getAttribute("label"); var newname = prompt("Переименовать " + name + " in", null); if (!newname) return; this.parentNode.parentNode.setAttribute("label", newname); var data = loadFile(); var value = data[name]; data[newname] = value; delete data[name]; saveFile(JSON.stringify(data)); } //Восстановление сессий function restoreSession(stateString) { if (typeof stateString === "string") { var state = stateString; } else { var name = this.parentNode.parentNode.getAttribute("label"); var data = loadFile(); var state = JSON.stringify(data[name]); } switch (overwrite) { case 0: SS.setWindowState(window, state, false); break; case 1: SS.setBrowserState(state); break; case 2: var watcher = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher); var argstring = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); var w = watcher.openWindow(null, "chrome://browser/content/browser.xul", "name", "chrome,all,dialog=no", argstring); w.addEventListener("load", function () { SS.setWindowState(w, state, true); }, true); break; } } //Селективный ответа восстановления (с помощью Firefox поставляется с краха механизм восстановления) function restoreSessionSelectively() { var name = this.parentNode.parentNode.getAttribute("label"); var data = loadFile(); var sessionValue = JSON.stringify(data[name]); var newTab = gBrowser.addTab("about:sessionrestore"); var newTabBrowser = gBrowser.getBrowserForTab(newTab); newTabBrowser.addEventListener("load", function () { var cDoc = newTabBrowser.contentDocument; var sessionData = cDoc.getElementById("sessionData"); sessionData.value = sessionValue; cDoc.getElementById("errorTitleText").innerHTML = "Выборочное восстановление"; cDoc.getElementById("errorShortDescText").hidden = true; cDoc.getElementById("errorLongDesc").innerHTML = "Вы собираетесь восстановить " + name + " . Вы можете отключить ненужные окна или вкладки"; var stateStringContainer = cDoc.createElement("div"); stateStringContainer.id = "stateStringContainer"; stateStringContainer.style.display = "none"; cDoc.getElementById("errorPageContainer").appendChild(stateStringContainer); var script = cDoc.createElement("script"); script.innerHTML = 'function restoreTwo() {\ document.getElementById("errorTryAgain").disabled = true;\ var ix = gStateObject.windows.length - 1;\ for (var t = gTreeData.length - 1; t >= 0; t--) {\ if (treeView.isContainer(t)) {\ if (gTreeData[t].checked === 0)\ gStateObject.windows[ix].tabs = gStateObject.windows[ix].tabs.filter(function (aTabData, aIx)\ gTreeData[t].tabs[aIx].checked);\ else if (!gTreeData[t].checked)\ gStateObject.windows.splice(ix, 1);\ ix--;\ }\ }\ var stateString = JSON.stringify(gStateObject);\ document.getElementById("stateStringContainer").setAttribute("stateString", encodeURIComponent(stateString));\ }'; stateStringContainer.addEventListener("DOMAttrModified", function () { this.removeEventListener('DOMAttrModified', arguments.callee, false); var stateString = decodeURIComponent(stateStringContainer.getAttribute("stateString")); gBrowser.removeCurrentTab(); restoreSession(stateString); }, false); cDoc.head.appendChild(script); var restoreBtn = cDoc.getElementById("errorTryAgain"); restoreBtn.setAttribute("oncommand", "restoreTwo();"); }, true); gBrowser.selectedTab = newTab; } //Создание сохранены ответил меню правой кнопки мыши function makeitems(name) { var ss = document.createElement("menu"); ss.setAttribute("label", name); ss.setAttribute("class", "savedSessions"); var ss_popup = document.createElement("menupopup"); var rs = document.createElement("menuitem"); rs.setAttribute("label", "Восстановление"); rs.addEventListener("command", restoreSession, false); var rss = document.createElement("menuitem"); rss.setAttribute("label", "Выборочное восстановление"); rss.addEventListener("command", restoreSessionSelectively, false) var rn = document.createElement("menuitem"); rn.setAttribute("label", "Переименовать"); rn.addEventListener("command", rename, false); var rm = document.createElement("menuitem"); rm.setAttribute("label", "Удалить"); rm.addEventListener("command", remove, false); ss_popup.appendChild(rs); ss_popup.appendChild(rss); ss_popup.appendChild(rn); ss_popup.appendChild(rm); ss.appendChild(ss_popup); menupopup.appendChild(ss); } //В appmenu В меню сборки var menu = document.createElement("menu"); //Главное меню menu.id = "ssm_menu"; var it = document.getElementById("appmenu_webDeveloper"); it.parentNode.insertBefore(menu, it); menu.setAttribute("label", "Сохранить сеанс"); //Всплывающие меню var menupopup = document.createElement("menupopup"); menupopup.id = "ssm_menupopup"; menu.appendChild(menupopup); var scs = document.createElement("menuitem"); //Сохранение текущей сессии scs.setAttribute("label", "Сохранить сеанс"); scs.addEventListener("command", saveCurrentSession, false); menupopup.appendChild(scs); var scws = document.createElement("menuitem"); //Сохранение текущей сессии окне scws.setAttribute("label", "Сохранить в новом окне"); scws.addEventListener("command", saveCurrentWindowSession, false); menupopup.appendChild(scws); var menusep = document.createElement("menuseparator"); //Меню сепаратор menupopup.appendChild(menusep); var savedSessions = loadFile(); //Сохраненный список for (name in savedSessions) { makeitems(name); } }()); // устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды this.setAttribute("stop","true");

Отредактировано SendInfo (29-11-2012 02:20:56)

Просмотров: 309 | Добавил: whortay | Рейтинг: 0.0/0
Всего комментариев: 0