ant-http/build/htdocs/dist/packages/default/Settings/combined.js
2016-10-29 14:34:29 +02:00

2725 lines
96 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, GUI, Dialogs, Utils, API, VFS) {
// jscs:disable validateQuoteMarks
'use strict';
/////////////////////////////////////////////////////////////////////////////
// LOCALES
/////////////////////////////////////////////////////////////////////////////
var _Locales = {
bg_BG : {
'Background Type' : 'Тип на фон',
'Image (Repeat)' : 'Изображение (повтарящо се)',
'Image (Centered)' : 'Изображение (Центрирано)',
'Image (Fill)' : 'Изображение (Запълващо)',
'Image (Streched)' : 'Изображение (Разтеглено)',
'Desktop Margin ({0}px)' : 'Размер на работен плот ({0}px)',
'Enable Animations' : 'Разреши анимации',
'Language (requires restart)' : 'Език (нуждае се от рестарт)',
'Enable Sounds' : 'Включи звуци',
'Enable Window Switcher' : 'Включи превключване на прозорци',
'Enable Hotkeys' : 'Включи горещи клавиши',
'Enable Icon View' : 'Включи иконен-изглед'
},
de_DE : {
'Background Type' : 'Hintergrundtyp',
'Image (Repeat)' : 'Bild (Wiederholend)',
'Image (Centered)' : 'Bild (Zentriert)',
'Image (Fill)' : 'Bild (Ausgefüllt)',
'Image (Streched)' : 'Bild (Gestreckt)',
'Desktop Margin ({0}px)' : 'Arbeitsoberflächen Margin ({0}px)',
'Enable Animations' : 'Animationen verwenden',
'Language (requires restart)' : 'Sprache (benötigt Neustart)',
'Enable Sounds' : 'Aktiviere Sounds',
'Enable Window Switcher' : 'Aktiviere Fensterwechsler',
'Enable Hotkeys' : 'Aktiviere Hotkeys',
'Enable Icon View' : 'Aktiviere Icon-Ansicht',
},
es_ES : {
'Background Type' : 'Tipo de fondo',
'Image (Repeat)' : 'Imagen (Repetir)',
'Image (Centered)' : 'Imagen (Centrada)',
'Image (Fill)' : 'Imagen (Estirar)',
'Image (Streched)' : 'Imagen (Ajustar)',
'Desktop Margin ({0}px)' : 'Margen del escritorio ({0}px)',
'Enable Animations' : 'Habilitar animaciones',
'Language (requires restart)' : 'Idioma (requiere reiniciar)',
'Enable Sounds' : 'Activar sonidos',
'Enable Window Switcher' : 'Activar el alternador de ventanas',
'Enable Hotkeys' : 'Activar Hotkeys',
'Enable Icon View' : 'Activar la vista de icono',
},
ar_DZ : {
'Background Type' : 'نوع الخلفية',
'Image (Repeat)' : 'صورة (إعادة)',
'Image (Centered)' : 'صورة (وسط)',
'Image (Fill)' : 'صورة (ملئ)',
'Image (Streched)' : 'صورة (تمدد)',
'Desktop Margin ({0}px)' : 'هوامش المكتب ({0}px)',
'Enable Animations' : 'تفعيل الحركة',
'Language (requires restart)' : 'اللغة (تتطب إعادة التشغيل)',
'Enable Sounds' : 'تفعيل الأصوات',
'Enable Window Switcher' : 'تفعيل محول النوافذ',
'Enable Hotkeys' : 'تفعيل إختصارات لوحة المفاتيح',
'Enable Icon View' : 'تفعيل مظهر الأيقونات',
'Remove shortcut' : 'حذف الإختصار',
'File View': 'خصائص الملفات',
'Show Hidden Files': 'إظهار الملفات المخفية',
'Show File Extensions': 'إظهار لواحق الملفات',
'File View Options': 'خيارات إظهار الملفات',
'Invert Text Color' : 'عكس لون الخط',
'Icon View' : 'إظهار الأيقونات',
'Installed Packages' : 'حزم مثبتة',
'App Store' : 'متجر التطبيقات',
'Regenerate metadata' : 'إعادة توليد المعلومات',
'Install from zip' : 'تثبيت من ملف مضغوط',
'Install selected' : 'تثبيت المختار',
'Enable TouchMenu' : 'تفعيل قائمة اللمس'
},
fr_FR : {
'Background Type' : 'Type de fond d\'écran',
'Image (Repeat)' : 'Image (Répéter)',
'Image (Centered)' : 'Image (Centrer)',
'Image (Fill)' : 'Image (Remplir)',
'Image (Streched)' : 'Image (Étiré)',
'Desktop Margin ({0}px)' : 'Marge du bureau ({0}px)',
'Desktop Corner Snapping ({0}px)' : 'Délimitation des coins du bureau ({0}px)',
'Window Snapping ({0}px)' : 'Accrochage des fenêtres ({0}px)',
'Enable Animations' : 'Activer les animations',
'Language (requires restart)' : 'Langue (redémarrage requis)',
'Enable Sounds' : 'Activer la musique',
'Enable Window Switcher' : 'Activer Window Switcher',
'Enable Hotkeys' : 'Activer les raccourcis clavier',
'Enable Icon View' : 'Activer l\'affichage des icônes sur le bureau',
'Remove shortcut' : 'Supprimer le raccourci',
'File View': 'Options des fichiers',
'Show Hidden Files': 'Montrer les fichiers cachés',
'Show File Extensions': 'Montrer les extensions de fichiers',
'File View Options': 'Options d\'affichage des fichier',
'Invert Text Color' : 'Inverser la couleur du texte',
'Icon View' : 'Affichage des icônes',
'Installed Packages' : 'Paquets installés',
'App Store' : 'Magasin d\'applications',
'Regenerate metadata' : 'Régénérer les métadonnées',
'Install from zip' : 'Installer à partir du fichier zip',
'Install selected' : 'Installer la sélection',
'Enable TouchMenu' : 'Activer le TouchMenu'
},
it_IT : {
'Background Type' : 'Tipo di sfondo',
'Image (Repeat)' : 'Immagine (Ripeti)',
'Image (Centered)' : 'Immagine (Centrata)',
'Image (Fill)' : 'Immagine (Riempi)',
'Image (Streched)' : 'Immagine (Distorci)',
'Desktop Margin ({0}px)' : 'Margini Scrivania ({0}px)',
'Enable Animations' : 'Abilita animazioni',
'Language (requires restart)' : 'Lingua (necessita riavvio)',
'Enable Sounds' : 'Abilita Suoni',
'Enable Window Switcher' : 'Abilita Cambia-Finestre',
'Enable Hotkeys' : 'Abilita Scorciatoie da tastiera',
'Enable Icon View' : 'Abilita Visualizzazione ad icona',
'Remove shortcut' : 'Rimuovi scorciatoia',
'File View': 'Visualizza file',
'Show Hidden Files': 'Mostra file nascosti',
'Show File Extensions': 'Mostra estenzioni dei file',
'File View Options': 'Opzioni visualizza file',
'Invert Text Color' : 'Inverti colore testi',
'Icon View' : 'Visualizzazione ad icone',
'Installed Packages' : 'Installa pacchetti',
'App Store' : 'Negozio applicazioni',
'Application' : 'Applicazione',
'Scope' : 'Scope (namespace)',
'Regenerate metadata' : 'Rigenerazione metadata',
'Install from zip' : 'Installa da zip',
'Install selected' : 'Installa selezionato',
'Enable TouchMenu' : 'Abilita TouchMenu'
},
ko_KR : {
'Background Type' : '바탕화면 타입',
'Image (Repeat)' : '이미지 (반복)',
'Image (Centered)' : '이미지 (가운데)',
'Image (Fill)' : '이미지 (채우기)',
'Image (Streched)' : '이미지 (늘이기)',
'Desktop Margin ({0}px)' : '데스크탑 여백 ({0}px)',
'Enable Animations' : '애니메이션 효과 켜기',
'Language (requires restart)' : '언어 (재시작 필요)',
'Enable Sounds' : '사운드 켜기',
'Enable Window Switcher' : '윈도우 전환 활성',
'Enable Hotkeys' : '단축키 활성',
'Enable Icon View' : '아이콘 보이기',
'Desktop Corner Snapping ({0}px)' : '바탕화면 가장자리에 붙이기 ({0}px)',
'Window Snapping ({0}px)' : '창 가장자리에 붙이기 ({0}px)',
'File View': '파일보기',
'Show Hidden Files': '숨긴 파일 보이기',
'Show File Extensions': '파일 확장자 보이기',
'File View Options': '파일보기 옵션',
'Invert Text Color' : '텍스트 색상 반전',
'Icon View' : '아이콘 보기',
'Installed Packages' : '설치된 패키지',
'App Store' : '앱스토어',
'Regenerate metadata' : '메타데이터 재생성',
'Install from zip' : 'zip 파일로부터 설치하기',
'Install selected' : '선택된 항목 설치',
'Enable TouchMenu' : '터치메뉴 활성화',
'Search Options' : '검색 옵션',
'Enable Application Search' : '어플리케이션 검색 활성화',
'Enable File Search' : '파일 검색 활성화'
},
nl_NL : {
'Background Type' : 'Achtergrond type',
'Image (Repeat)' : 'Afbeelding (Herhalend)',
'Image (Centered)' : 'Afbeelding (Gecentreerd)',
'Image (Fill)' : 'Afbeelding (Passend)',
'Image (Streched)' : 'Afbeelding (Uitrekken)',
'Desktop Margin ({0}px)' : 'Achtergrondmarge ({0}px)',
'Enable Animations' : 'Animaties gebruiken',
'Language (requires restart)' : 'Taal (Herstarten vereist)',
'Enable Sounds' : 'Activeer Geluiden',
'Enable Window Switcher' : 'Activeer Venster Wisselaar',
'Enable Hotkeys' : 'Activeer Hotkeys',
'Enable Icon View' : 'Activeer Iconen-weergave'
},
no_NO : {
'Background Type' : 'Bakgrunn type',
'Image (Repeat)' : 'Bilde (Gjenta)',
'Image (Centered)' : 'Bilde (Sentrert)',
'Image (Fill)' : 'Bilde (Fyll)',
'Image (Streched)' : 'Bilde (Strekk)',
'Desktop Margin ({0}px)' : 'Skrivebord Margin ({0}px)',
'Enable Animations' : 'Bruk animasjoner',
'Language (requires restart)' : 'Språk (krever omstart)',
'Enable Sounds' : 'Skru på lyder',
'Enable Window Switcher' : 'Skru på Vindu-bytter',
'Enable Hotkeys' : 'Skru på Hurtigtaster',
'Enable Icon View' : 'Skru på Ikonvisning',
'Remove shortcut' : 'Fjern snarvei',
'Search path \'{0}\' is already handled by another entry': 'Søkestien \'{0}\' er allrede håndtert av en annen oppføring'
},
pl_PL : {
'Background Type' : 'Typ Tła',
'Image (Repeat)' : 'Powtarzający się',
'Image (Centered)' : 'Wycentrowany',
'Image (Fill)' : 'Wypełniony',
'Image (Streched)' : 'Rozciągnięty',
'Desktop Margin ({0}px)' : 'Margines Pulpitu ({0}px)',
'Desktop Corner Snapping ({0}px)' : 'Przyciąganie do Narożników Pulpitu ({0}px)',
'Window Snapping ({0}px)' : 'Przyciąganie do Okien ({0}px)',
'Enable Animations' : 'Włączone Animacje',
'Icon View' : 'Widok Ikon',
'Language (requires restart)' : 'Język (zmiana wymaga restartu)',
'Enable Sounds' : 'Włączone Dźwięki',
'Enable TouchMenu' : 'Włączone Menu Dotykowe',
'Enable Window Switcher' : 'Właczony Zmieniacz Okien',
'Enable Hotkeys' : 'Włączone Skróty Klawiaturowe',
'Enable Icon View' : 'Włączone Pokazywanie Ikon',
'Remove shortcut' : 'Usuwanie skrótu',
'File View': 'Widok Plików',
'Show Hidden Files': 'Pokazuj Ukryte Pliki',
'Show File Extensions': 'Pokazuj Rozszerzenia Plików',
'File View Options': 'Opcje Widoku Plików',
'Invert Text Color' : 'Odwróć Kolor Tekstu',
'Installed Packages' : 'Zainstalowane Pakiety',
'App Store' : 'Sklep App',
'Regenerate metadata' : 'Zregeneruj metadane',
'Install from zip' : 'Zainstaluj z pliku zip',
'Install selected' : 'Zainstaluj wybrane'
},
ru_RU : {
'Background Type' : 'Тип фона',
'Image (Repeat)' : 'Изображение (повторяющееся)',
'Image (Centered)' : 'Изображение (по центру)',
'Image (Fill)' : 'Изображение (заполнить)',
'Image (Streched)' : 'Изображение (растянуть)',
'Desktop Margin ({0}px)' : 'Отступ рабочего стола ({0}px)',
'Enable Animations' : 'Использовать анимацию',
'Enable TouchMenu' : 'Крупное меню',
'Language (requires restart)' : 'Язык (необходим перезапуск)',
'Enable Sounds' : 'Включить звук',
'Enable Window Switcher' : 'Включить растягивание окон',
'Enable Hotkeys' : 'Включить горячии клавиши',
'Enable Icon View' : 'Включить ярлыки',
'Icon View' : 'Ярлыки рабочего стола',
'Invert Text Color' : 'Обратить цвет текста'
},
sk_SK : {
'Background Type' : 'Typ pozadia',
'Image (Repeat)' : 'Dlaždice',
'Image (Centered)' : 'Na stred',
'Image (Fill)' : 'Vyplniť',
'Image (Streched)' : 'Roztiahnutý',
'Desktop Margin ({0}px)' : 'Hranice pracovnej plochy ({0}px)',
'Enable Animations' : 'Povoliť animácie',
'Language (requires restart)' : 'Jazyk (vyžaduje reštart)',
'Enable Sounds' : 'Povoliť zvuky',
'Enable Window Switcher' : 'Povoliť Prepínač Okien',
'Enable Hotkeys' : 'Klávesové skratky',
'Enable Icon View' : 'Ikony na ploche',
'Remove shortcut' : 'Odstrániť skratku'
},
tr_TR : {
'Background Type' : 'arkaplan türü',
'Image (Repeat)' : 'resim (tekrarla)',
'Image (Centered)' : 'resm(ortala)',
'Image (Fill)' : 'resm (kapla/doldur)',
'Image (Streched)' : 'resm (uzat)',
'Desktop Margin ({0}px)' : 'masaüstü kenar ({0}px)',
'Enable Animations' : 'animasyonlar etkin',
'Language (requires restart)' : 'Dil(yeniden başlatma gerektirir)',
'Enable Sounds' : 'Müzik etkin',
'Enable Window Switcher' : 'Ekran(pencere) değiştirme etkin',
'Enable Hotkeys' : 'kısayol tuşları etkin',
'Enable Icon View' : 'icon görünümü etkin',
'Remove shortcut' : 'kısayolları kaldır'
},
vi_VN : {
'Background Type' : 'Kiểu nền',
'Image (Repeat)' : 'Lặp lại',
'Image (Centered)' : 'Căn giữa',
'Image (Fill)' : 'Lấp đầy',
'Image (Streched)' : 'Trải dài',
'Desktop Margin ({0}px)' : 'Phần biên màn hình ({0}px)',
'Enable Animations' : 'Bật hiệu ứng',
'Language (requires restart)' : 'Ngôn ngữ (cần khởi động lại)',
'Enable Sounds' : 'Bật âm thanh',
'Enable Window Switcher' : 'Bật chuyển đổi cửa sổ',
'Enable Hotkeys' : 'Bật phím nóng',
'Enable Icon View' : 'Hiện biểu tượng',
'Remove shortcut' : 'Xóa lối tắt',
'File View': 'Quản lí tệp',
'Show Hidden Files': 'Hiện tập tin ẩn',
'Show File Extensions': 'Hiện đuôi tập tin',
'File View Options': 'Cài đặt quản lí tệp',
'Icon View' : 'Biểu tượng',
'Installed Packages' : 'Các phần mềm đã cài',
'App Store' : 'Chợ ứng dụng',
'Regenerate metadata' : 'Làm mới metadata',
'Install from zip' : 'Cài từ file zip',
'Install selected' : 'Cài mục đã chọn',
'Enable TouchMenu' : 'Bật Menu cảm ứng',
'Invert Text Color' : 'Đảo màu chữ',
'Search Options' : 'Cài đặt tìm kiếm',
'Enable Application Search' : 'Cho phép tìm kiếm phần mềm',
'Enable File Search' : 'Cho phép tìm kiếm tập tin',
'Search path \'{0}\' is already handled by another entry': 'Đường dẫn tìm kiếm \'{0}\' đã bị xử lý bởi mục khác'
}
};
function _() {
var args = Array.prototype.slice.call(arguments, 0);
args.unshift(_Locales);
return API.__.apply(this, args);
}
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings._ = _;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.GUI, OSjs.Dialogs, OSjs.Utils, OSjs.API, OSjs.VFS);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
var DEFAULT_GROUP = 'misc';
var _groups = {
personal: {
label: 'LBL_PERSONAL'
},
system: {
label: 'LBL_SYSTEM'
},
user: {
label: 'LBL_USER'
},
misc: {
label: 'LBL_OTHER'
}
};
var categoryMap = {
'theme': 'Theme',
'desktop': 'Desktop',
'panel': 'Panel',
'user': 'User',
'fileview': 'VFS',
'search': 'Search'
};
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function ApplicationSettingsWindow(app, metadata, scheme, initialCategory) {
Window.apply(this, ['ApplicationSettingsWindow', {
icon: metadata.icon,
title: metadata.name,
width: 500,
height: 450,
allow_resize: true
}, app, scheme]);
this.initialCategory = initialCategory;
}
ApplicationSettingsWindow.prototype = Object.create(Window.prototype);
ApplicationSettingsWindow.constructor = Window.prototype;
ApplicationSettingsWindow.prototype.init = function(wmRef, app, scheme) {
var self = this;
var root = Window.prototype.init.apply(this, arguments);
var wm = OSjs.Core.getWindowManager();
var _ = OSjs.Applications.ApplicationSettings._;
// Load and render `scheme.html` file
scheme.render(this, 'SettingsWindow', root, null, null, {_: _});
this._find('ButtonOK').son('click', this, this.onButtonOK);
this._find('ButtonCancel').son('click', this, this.onButtonCancel);
// Adds all groups and their respective entries
var container = document.createElement('div');
container.className = 'ListView gui-generic-zebra-container';
var containers = {};
var tmpcontent = document.createDocumentFragment();
Object.keys(_groups).forEach(function(k) {
var c = document.createElement('ul');
var h = document.createElement('span');
var d = document.createElement('div');
d.className = 'gui-generic-double-padded';
h.appendChild(document.createTextNode(_(_groups[k].label)));
containers[k] = c;
d.appendChild(h);
d.appendChild(c);
container.appendChild(d);
});
app.modules.forEach(function(m) {
if ( containers[m.group] ) {
var i = document.createElement('img');
i.setAttribute('src', API.getIcon(m.icon, '32x32'));
i.setAttribute('title', m.name);
var s = document.createElement('span');
s.appendChild(document.createTextNode(_(m.label || m.name)));
var c = document.createElement('li');
c.className = 'gui-generic-hoverable';
c.setAttribute('data-module', String(m.name));
c.appendChild(i);
c.appendChild(s);
containers[m.group].appendChild(c);
root.querySelector('[data-module="' + m.name + '"]').className = 'gui-generic-padded';
var settings = Utils.cloneObject(wm.getSettings());
m.render(self, scheme, tmpcontent, settings, wm);
m.update(self, scheme, settings, wm);
m._inited = true;
}
});
Object.keys(containers).forEach(function(k) {
if ( !containers[k].children.length ) {
containers[k].parentNode.style.display = 'none';
}
});
Utils.$bind(container, 'click', function(ev) {
var t = ev.isTrusted ? ev.target : (ev.relatedTarget || ev.target);
if ( t && t.tagName === 'LI' && t.hasAttribute('data-module') ) {
ev.preventDefault();
var m = t.getAttribute('data-module');
self.onModuleSelect(m);
}
}, true);
root.querySelector('[data-id="ContainerSelection"]').appendChild(container);
containers = {};
tmpcontent = null;
if ( this.initialCategory ) {
this.onExternalAttention(this.initialCategory);
}
return root;
};
ApplicationSettingsWindow.prototype.destroy = function() {
// This is where you remove objects, dom elements etc attached to your
// instance. You can remove this if not used.
if ( Window.prototype.destroy.apply(this, arguments) ) {
this.currentModule = null;
return true;
}
return false;
};
ApplicationSettingsWindow.prototype.onModuleSelect = function(name) {
var _ = OSjs.Applications.ApplicationSettings._;
var wm = OSjs.Core.getWindowManager();
var root = this._$element;
var self = this;
function _d(d) {
root.querySelector('[data-id="ContainerSelection"]').style.display = d ? 'block' : 'none';
root.querySelector('[data-id="ContainerContent"]').style.display = d ? 'none' : 'block';
root.querySelector('[data-id="ContainerButtons"]').style.display = d ? 'none' : 'block';
}
root.querySelectorAll('div[data-module]').forEach(function(mod) {
mod.style.display = 'none';
});
_d(true);
this._setTitle(null);
var found;
if ( name ) {
this._app.modules.forEach(function(m) {
if ( !found && m.name === name ) {
found = m;
}
});
}
if ( found ) {
var mod = root.querySelector('div[data-module="' + found.name + '"]');
if ( mod ) {
mod.style.display = 'block';
var settings = Utils.cloneObject(wm.getSettings());
found.update(this, this._scheme, settings, wm, true);
_d(false);
this._setTitle(_(found.name), true);
if ( found.button === false ) {
this._find('ButtonOK').hide();
} else {
this._find('ButtonOK').show();
}
}
} else {
if ( !name ) { // Resets values to original (or current)
var settings = Utils.cloneObject(wm.getSettings());
this._app.modules.forEach(function(m) {
if ( m._inited ) {
m.update(self, self._scheme, settings, wm);
}
});
}
}
this._app.setModule(found);
};
ApplicationSettingsWindow.prototype.onButtonOK = function() {
var self = this;
var settings = {};
var wm = OSjs.Core.getWindowManager();
var saves = [];
this._app.modules.forEach(function(m) {
if ( m._inited ) {
var res = m.save(self, self._scheme, settings, wm);
if ( typeof res === 'function' ) {
saves.push(res);
}
}
});
this._toggleLoading(true);
this._app.saveSettings(settings, saves, function() {
self._toggleLoading(false);
});
};
ApplicationSettingsWindow.prototype.onButtonCancel = function() {
this.onModuleSelect(null);
};
ApplicationSettingsWindow.prototype.onExternalAttention = function(cat) {
this.onModuleSelect(categoryMap[cat] || cat);
this._focus();
};
/////////////////////////////////////////////////////////////////////////////
// APPLICATION
/////////////////////////////////////////////////////////////////////////////
function ApplicationSettings(args, metadata) {
Application.apply(this, ['ApplicationSettings', args, metadata]);
var self = this;
var registered = OSjs.Applications.ApplicationSettings.Modules;
this.watches = {};
this.currentModule = null;
this.modules = Object.keys(registered).map(function(name) {
var opts = Utils.argumentDefaults(registered[name], {
_inited: false,
name: name,
group: DEFAULT_GROUP,
icon: 'status/error.png',
init: function() {},
update: function() {},
render: function() {},
save: function() {}
});
if ( Object.keys(_groups).indexOf(opts.group) === -1 ) {
opts.group = DEFAULT_GROUP;
}
Object.keys(opts).forEach(function(k) {
if ( typeof opts[k] === 'function' ) {
opts[k] = opts[k].bind(opts);
}
});
return opts;
});
this.modules.forEach(function(m) {
m.init(self);
if ( m.watch && m.watch instanceof Array ) {
m.watch.forEach(function(w) {
self.watches[m.name] = OSjs.Core.getSettingsManager().watch(w, function() {
var win = self._getMainWindow();
if ( m && win ) {
if ( self.currentModule && self.currentModule.name === m.name ) {
win.onModuleSelect(m.name);
}
}
});
});
}
});
}
ApplicationSettings.prototype = Object.create(Application.prototype);
ApplicationSettings.constructor = Application;
ApplicationSettings.prototype.destroy = function() {
// This is where you remove objects, dom elements etc attached to your
// instance. You can remove this if not used.
if ( Application.prototype.destroy.apply(this, arguments) ) {
var self = this;
Object.keys(this.watches).forEach(function(k) {
OSjs.Core.getSettingsManager().unwatch(self.watches[k]);
});
this.watches = {};
return true;
}
return false;
};
ApplicationSettings.prototype.init = function(settings, metadata, scheme) {
Application.prototype.init.apply(this, arguments);
var category = this._getArgument('category') || settings.category;
var win = this._addWindow(new ApplicationSettingsWindow(this, metadata, scheme, category));
this._on('attention', function(args) {
if ( win && args.category ) {
win.onExternalAttention(args.category);
}
});
};
ApplicationSettings.prototype.saveSettings = function(settings, saves, cb) {
var wm = OSjs.Core.getWindowManager();
wm.applySettings(settings, false, function() {
Utils.asyncs(saves, function(iter, idx, next) {
iter(next);
}, cb);
}, false);
};
ApplicationSettings.prototype.setModule = function(m) {
this.currentModule = m;
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Class = Object.seal(ApplicationSettings);
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'personal',
name: 'Theme',
label: 'LBL_THEME',
icon: 'apps/background.png',
watch: ['CoreWM'],
init: function() {
},
update: function(win, scheme, settings, wm) {
win._find('BackgroundImage').set('value', settings.wallpaper);
win._find('BackgroundColor').set('value', settings.backgroundColor);
win._find('FontName').set('value', settings.fontFamily);
win._find('StyleThemeName').set('value', settings.styleTheme);
win._find('IconThemeName').set('value', settings.iconTheme);
win._find('EnableTouchMenu').set('value', settings.useTouchMenu);
win._find('BackgroundStyle').set('value', settings.background);
win._find('BackgroundImage').set('value', settings.wallpaper);
win._find('BackgroundColor').set('value', settings.backgroundColor);
},
render: function(win, scheme, root, settings, wm) {
var _ = OSjs.Applications.ApplicationSettings._;
function _createDialog(n, a, done) {
win._toggleDisabled(true);
API.createDialog(n, a, function(ev, button, result) {
win._toggleDisabled(false);
if ( button === 'ok' && result ) {
done(result);
}
}, win);
}
win._find('StyleThemeName').add(wm.getStyleThemes().map(function(t) {
return {label: t.title, value: t.name};
}));
win._find('IconThemeName').add((function(tmp) {
return Object.keys(tmp).map(function(t) {
return {label: tmp[t], value: t};
});
})(wm.getIconThemes()));
win._find('BackgroundImage').on('open', function(ev) {
_createDialog('File', {
mime: ['^image'],
file: new VFS.File(ev.detail)
}, function(result) {
win._find('BackgroundImage').set('value', result.path);
});
});
win._find('BackgroundColor').on('open', function(ev) {
_createDialog('Color', {
color: ev.detail
}, function(result) {
win._find('BackgroundColor').set('value', result.hex);
}, win);
});
win._find('FontName').on('click', function() {
_createDialog('Font', {
fontName: settings.fontFamily,
fontSize: -1
}, function(result) {
win._find('FontName').set('value', result.fontName);
}, win);
});
win._find('BackgroundStyle').add([
{value: 'image', label: API._('LBL_IMAGE')},
{value: 'image-repeat', label: _('Image (Repeat)')},
{value: 'image-center', label: _('Image (Centered)')},
{value: 'image-fill', label: _('Image (Fill)')},
{value: 'image-strech', label: _('Image (Streched)')},
{value: 'color', label: API._('LBL_COLOR')}
]);
},
save: function(win, scheme, settings, wm) {
settings.styleTheme = win._find('StyleThemeName').get('value');
settings.iconTheme = win._find('IconThemeName').get('value');
settings.useTouchMenu = win._find('EnableTouchMenu').get('value');
settings.wallpaper = win._find('BackgroundImage').get('value');
settings.backgroundColor = win._find('BackgroundColor').get('value');
settings.background = win._find('BackgroundStyle').get('value');
settings.fontFamily = win._find('FontName').get('value');
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Theme = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
function updateLabel(win, lbl, value) {
var _ = OSjs.Applications.ApplicationSettings._;
var map = {
DesktopMargin: 'Desktop Margin ({0}px)',
CornerSnapping: 'Desktop Corner Snapping ({0}px)',
WindowSnapping: 'Window Snapping ({0}px)'
};
var label = Utils.format(_(map[lbl]), value);
win._find(lbl + 'Label').set('value', label);
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'personal',
name: 'Desktop',
label: 'LBL_DESKTOP',
icon: 'devices/display.png',
watch: ['CoreWM'],
init: function(app) {
},
update: function(win, scheme, settings, wm) {
win._find('EnableAnimations').set('value', settings.animations);
win._find('EnableTouchMenu').set('value', settings.useTouchMenu);
win._find('EnableWindowSwitcher').set('value', settings.enableSwitcher);
win._find('DesktopMargin').set('value', settings.desktopMargin);
win._find('CornerSnapping').set('value', settings.windowCornerSnap);
win._find('WindowSnapping').set('value', settings.windowSnap);
updateLabel(win, 'DesktopMargin', settings.desktopMargin);
updateLabel(win, 'CornerSnapping', settings.windowCornerSnap);
updateLabel(win, 'WindowSnapping', settings.windowSnap);
},
render: function(win, scheme, root, settings, wm) {
win._find('DesktopMargin').on('change', function(ev) {
updateLabel(win, 'DesktopMargin', ev.detail);
});
win._find('CornerSnapping').on('change', function(ev) {
updateLabel(win, 'CornerSnapping', ev.detail);
});
win._find('WindowSnapping').on('change', function(ev) {
updateLabel(win, 'WindowSnapping', ev.detail);
});
win._find('EnableIconView').set('value', settings.enableIconView);
win._find('EnableIconViewInvert').set('value', settings.invertIconViewColor);
},
save: function(win, scheme, settings, wm) {
settings.animations = win._find('EnableAnimations').get('value');
settings.useTouchMenu = win._find('EnableTouchMenu').get('value');
settings.enableSwitcher = win._find('EnableWindowSwitcher').get('value');
settings.desktopMargin = win._find('DesktopMargin').get('value');
settings.windowCornerSnap = win._find('CornerSnapping').get('value');
settings.windowSnap = win._find('WindowSnapping').get('value');
settings.enableIconView = win._find('EnableIconView').get('value');
settings.invertIconViewColor = win._find('EnableIconViewInvert').get('value');
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Desktop = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Search Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'system',
name: 'Search',
label: 'LBL_SEARCH',
icon: 'actions/search.png',
init: function() {
},
update: function(win, scheme, settings, wm) {
var sm = OSjs.Core.getSettingsManager();
var searchOptions = Utils.cloneObject(sm.get('SearchEngine') || {});
win._find('SearchEnableApplications').set('value', searchOptions.applications === true);
win._find('SearchEnableFiles').set('value', searchOptions.files === true);
var view = win._find('SearchPaths').clear();
view.set('columns', [
{label: 'Path'}
]);
var list = (searchOptions.paths || []).map(function(l) {
return {
value: l,
id: l,
columns: [
{label: l}
]
};
});
view.add(list);
},
render: function(win, scheme, root, settings, wm) {
function openAddDialog() {
win._toggleDisabled(true);
API.createDialog('File', {
select: 'dir',
mfilter: [
function(m) {
return m.module.searchable === true;
}
]
}, function(ev, button, result) {
win._toggleDisabled(false);
if ( button === 'ok' && result ) {
win._find('SearchPaths').add([{
value: result.path,
id: result.path,
columns: [
{label: result.path}
]
}]);
}
}, win);
}
function removeSelected() {
var view = win._find('SearchPaths');
var current = view.get('value') || [];
current.forEach(function(c) {
view.remove(c.index);
});
}
win._find('SearchAdd').on('click', openAddDialog);
win._find('SearchRemove').on('click', removeSelected);
},
save: function(win, scheme, settings, wm) {
var _ = OSjs.Applications.ApplicationSettings._;
var tmpPaths = win._find('SearchPaths').get('entry', null, null, true).sort();
var paths = [];
function isChildOf(tp) {
var result = false;
paths.forEach(function(p) {
if ( !result ) {
result = tp.substr(0, p.length) === p;
}
});
return result;
}
tmpPaths.forEach(function(tp) {
var c = isChildOf(tp);
if ( c ) {
wm.notification({
title: API._('LBL_SEARCH'),
message: _('Search path \'{0}\' is already handled by another entry', tp)
});
}
if ( !paths.length || !c ) {
paths.push(tp);
}
});
var searchSettings = {
applications: win._find('SearchEnableApplications').get('value'),
files: win._find('SearchEnableFiles').get('value'),
paths: paths
};
return function(cb) {
var sm = OSjs.Core.getSettingsManager();
sm.instance('SearchEngine').set(null, searchSettings, cb, false);
};
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Search = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Sound Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
var sounds = {};
function renderList(win, scheme) {
win._find('SoundsList').clear().add(Object.keys(sounds).map(function(name) {
return {
value: {
name: name,
value: sounds[name]
},
columns: [
{label: name},
{label: sounds[name]}
]
};
}));
}
function editList(win, scheme, key) {
var _ = OSjs.Applications.ApplicationSettings._;
win._toggleDisabled(true);
API.createDialog('Input', {
message: _('Enter filename for:') + ' ' + key.name,
value: key.value
}, function(ev, button, value) {
win._toggleDisabled(false);
value = value || '';
if ( value.length ) {
sounds[key.name] = value;
}
renderList(win, scheme);
})
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'personal',
name: 'Sounds',
label: 'LBL_SOUNDS',
icon: 'status/stock_volume-max.png',
init: function() {
},
update: function(win, scheme, settings, wm) {
win._find('SoundThemeName').set('value', settings.soundTheme);
win._find('EnableSounds').set('value', settings.enableSounds);
sounds = Utils.cloneObject(settings.sounds);
renderList(win, scheme);
},
render: function(win, scheme, root, settings, wm) {
var soundThemes = (function(tmp) {
return Object.keys(tmp).map(function(t) {
return {label: tmp[t], value: t};
});
})(wm.getSoundThemes());
win._find('SoundThemeName').add(soundThemes);
win._find('SoundsEdit').on('click', function() {
var selected = win._find('SoundsList').get('selected');
if ( selected && selected[0] ) {
editList(win, scheme, selected[0].data);
}
});
},
save: function(win, scheme, settings, wm) {
settings.soundTheme = win._find('SoundThemeName').get('value');
settings.enableSounds = win._find('EnableSounds').get('value');
if ( sounds && Object.keys(sounds).length ) {
settings.sounds = sounds;
}
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Sounds = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Locale Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'user',
name: 'Locale',
label: 'LBL_LOCALE',
icon: 'apps/locale.png',
init: function() {
},
update: function(win, scheme, settings, wm) {
var config = OSjs.Core.getConfig();
var locales = config.Languages;
win._find('UserLocale').clear().add(Object.keys(locales).filter(function(l) {
return !!OSjs.Locales[l];
}).map(function(l) {
return {label: locales[l], value: l};
})).set('value', API.getLocale());
},
render: function(win, scheme, root, settings, wm) {
},
save: function(win, scheme, settings, wm) {
settings.language = win._find('UserLocale').get('value');
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Locale = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web Desktop Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
var hotkeys = {};
function renderList(win, scheme) {
win._find('HotkeysList').clear().add(Object.keys(hotkeys).map(function(name) {
return {
value: {
name: name,
value: hotkeys[name]
},
columns: [
{label: name},
{label: hotkeys[name]}
]
};
}));
}
function editList(win, scheme, key) {
var _ = OSjs.Applications.ApplicationSettings._;
win._toggleDisabled(true);
API.createDialog('Input', {
message: _('Enter shortcut for:') + ' ' + key.name,
value: key.value
}, function(ev, button, value) {
win._toggleDisabled(false);
value = value || '';
if ( value.indexOf('+') !== -1 ) {
hotkeys[key.name] = value;
}
renderList(win, scheme);
})
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'personal',
name: 'Input',
label: 'LBL_INPUT',
icon: 'apps/key_bindings.png',
init: function() {
},
update: function(win, scheme, settings, wm) {
win._find('EnableHotkeys').set('value', settings.enableHotkeys);
hotkeys = Utils.cloneObject(settings.hotkeys);
renderList(win, scheme);
},
render: function(win, scheme, root, settings, wm) {
win._find('HotkeysEdit').on('click', function() {
var selected = win._find('HotkeysList').get('selected');
if ( selected && selected[0] ) {
editList(win, scheme, selected[0].data);
}
});
},
save: function(win, scheme, settings, wm) {
settings.enableHotkeys = win._find('EnableHotkeys').get('value');
if ( hotkeys && Object.keys(hotkeys).length ) {
settings.hotkeys = hotkeys;
}
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Input = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web VFS Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, VFS, GUI) {
'use strict';
function createMountWindow(win, scheme, selected, ondone) {
var nwin = new Window('SettingsMountWindow', {
icon: win._app.__metadata.icon,
title: win._app.__metadata.name,
width: 400,
height: 440
}, win._app, scheme);
nwin._on('destroy', function(root) {
win._toggleDisabled(false);
});
nwin._on('inited', function(root) {
win._toggleDisabled(true);
});
nwin._on('init', function(root) {
var self = this;
function add(conn) {
try {
OSjs.Core.getMountManager().add(conn);
} catch ( e ) {
API.error(self._title, 'An error occured while trying to mount', e);
console.warn(e.stack, e);
return false;
}
return true;
}
function done() {
var conn = {
transport: scheme.find(self, 'MountType').get('value'),
name: scheme.find(self, 'MountName').get('value'),
description: scheme.find(self, 'MountDescription').get('value'),
options: {
host: scheme.find(self, 'MountHost').get('value'),
ns: scheme.find(self, 'MountNamespace').get('value'),
username: scheme.find(self, 'MountUsername').get('value'),
password: scheme.find(self, 'MountPassword').get('value'),
cors: scheme.find(self, 'MountCORS').get('value')
}
};
if ( selected ) {
try {
OSjs.Core.getMountManager().remove(selected.name, function() {
if ( add(conn) ) {
ondone(conn, selected);
}
self._close();
});
return;
} catch ( e ) {
console.warn('Settings Mount modification failure', e, e.stack);
}
} else {
if ( !add(conn) ) {
conn = null;
}
}
self._close();
ondone();
}
scheme.render(this, this._name, root)
if ( selected ) {
scheme.find(self, 'MountType').set('value', selected.transport);
scheme.find(self, 'MountName').set('value', selected.name);
scheme.find(self, 'MountDescription').set('value', selected.description);
if ( selected.options ) {
scheme.find(self, 'MountHost').set('value', selected.options.host);
scheme.find(self, 'MountNamespace').set('value', selected.options.ns);
scheme.find(self, 'MountUsername').set('value', selected.options.username);
scheme.find(self, 'MountPassword').set('value', selected.options.password);
scheme.find(self, 'MountCORS').set('value', selected.options.cors);
}
}
scheme.find(this, 'ButtonClose').on('click', function() {
self._close();
});
scheme.find(this, 'ButtonOK').on('click', function() {
done();
});
});
return win._addChild(nwin, true, true);
}
function renderMounts(win, scheme) {
var sm = OSjs.Core.getSettingsManager();
var sf = sm.instance('VFS');
var entries = sf.get('mounts', []).map(function(i, idx) {
return {
value: idx,
columns: [
{label: i.name},
{label: i.description}
]
};
});
win._find('MountList').clear().add(entries);
}
function _save(sf, win, scheme, mounts) {
win._toggleLoading(true);
sf.set(null, {mounts: mounts}, function() {
renderMounts(win, scheme);
win._toggleLoading(false);
}, false);
}
function removeMount(win, scheme, index) {
var sm = OSjs.Core.getSettingsManager();
var sf = sm.instance('VFS');
var mounts = sf.get('mounts', []);
if ( typeof mounts[index] !== 'undefined' ) {
mounts.splice(index, 1);
_save(sf, win, scheme, mounts);
}
}
function addMount(conn, replace, win, scheme) {
if ( !conn ) {
return;
}
var sm = OSjs.Core.getSettingsManager();
var sf = sm.instance('VFS');
var mounts = sf.get('mounts', []).filter(function(iter) {
if ( replace && replace.name === iter.name ) {
return false;
}
return true;
});
mounts.push(conn);
_save(sf, win, scheme, mounts);
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'system',
name: 'VFS',
label: 'VFS',
icon: 'devices/harddrive.png',
watch: ['VFS'],
init: function(app) {
},
update: function(win, scheme, settings, wm) {
var vfsOptions = Utils.cloneObject(OSjs.Core.getSettingsManager().get('VFS') || {});
var scandirOptions = vfsOptions.scandir || {};
win._find('ShowFileExtensions').set('value', scandirOptions.showFileExtensions === true);
win._find('ShowHiddenFiles').set('value', scandirOptions.showHiddenFiles === true);
renderMounts(win, scheme);
},
render: function(win, scheme, root, settings, wm) {
function ondone(connection, replace) {
addMount(connection, replace, win, scheme);
}
win._find('MountList').set('columns', [
{label: 'Name'},
{label: 'Description'}
]);
win._find('MountRemove').on('click', function() {
var sel = win._find('MountList').get('selected');
if ( sel && sel.length ) {
removeMount(win, scheme, sel[0].data);
}
});
win._find('MountAdd').on('click', function() {
createMountWindow(win, scheme, null, ondone);
});
win._find('MountEdit').on('click', function() {
var sel = win._find('MountList').get('selected');
var sm = OSjs.Core.getSettingsManager();
var mounts = sm.instance('VFS').get('mounts', []);
if ( sel && sel.length ) {
var mount = mounts[sel[0].data];
if ( mount ) {
createMountWindow(win, scheme, mount, ondone);
}
}
});
},
save: function(win, scheme, settings, wm) {
var vfsSettings = {
scandir: {
showHiddenFiles: win._find('ShowHiddenFiles').get('value'),
showFileExtensions: win._find('ShowFileExtensions').get('value')
}
};
return function(cb) {
var sm = OSjs.Core.getSettingsManager();
sm.instance('VFS').set(null, vfsSettings, cb, false);
};
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.VFS = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web PM Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, PM, GUI, VFS) {
'use strict';
var list, hidden;
function updateEnabledStates() {
var pacman = OSjs.Core.getPackageManager();
var sm = OSjs.Core.getSettingsManager();
var pool = sm.instance('PackageManager', {Hidden: []});
list = pacman.getPackages(false);
hidden = pool.get('Hidden');
}
function renderInstalled(win, scheme) {
win._find('ButtonUninstall').set('disabled', true);
updateEnabledStates();
var view = win._find('InstalledPackages');
var rows = [];
Object.keys(list).forEach(function(k, idx) {
rows.push({
index: idx,
value: k,
columns: [
{label: ''},
{label: k},
{label: list[k].scope},
{label: list[k].name}
]
});
});
view.clear();
view.add(rows);
view.$element.querySelectorAll('gui-list-view-body > gui-list-view-row').forEach(function(row) {
var col = row.children[0];
var name = row.getAttribute('data-value');
var enabled = hidden.indexOf(name) >= 0;
scheme.create(win, 'gui-checkbox', {value: enabled}, col).on('change', function(ev) {
var idx = hidden.indexOf(name);
if ( ev.detail ) {
if ( idx < 0 ) {
hidden.push(name);
}
} else {
if ( idx >= 0 ) {
hidden.splice(idx, 1);
}
}
});
});
}
function renderPaths(win, scheme) {
var sm = OSjs.Core.getSettingsManager();
var paths = sm.instance('PackageManager').get('PackagePaths', []);
win._find('PackagePaths').clear().add(paths.map(function(iter, idx) {
return {
value: idx,
columns: [
{label: iter}
]
};
}));
}
function _save(sf, win, scheme, paths) {
win._toggleLoading(true);
sf.set(null, {PackagePaths: paths}, function() {
renderPaths(win, scheme);
win._toggleLoading(false);
}, false);
}
function addPath(win, scheme) {
var sm = OSjs.Core.getSettingsManager();
var sf = sm.instance('PackageManager');
var paths = sf.get('PackagePaths', []);
win._toggleDisabled(true);
API.createDialog('Input', {
message: 'Enter path',
placeholder: 'mount:///path'
}, function(ev, btn, value) {
win._toggleDisabled(false);
if ( value ) {
if ( paths.indexOf(value) === -1 ) {
paths.push(value);
_save(sf, win, scheme, paths);
}
}
});
}
function removePath(win, scheme, index) {
var sm = OSjs.Core.getSettingsManager();
var sf = sm.instance('PackageManager');
var paths = sf.get('PackagePaths', []);
if ( typeof paths[index] !== 'undefined' ) {
paths.splice(index, 1);
_save(sf, win, scheme, paths);
}
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'misc',
name: 'Packages',
label: 'LBL_PACKAGES',
icon: 'apps/system-software-install.png',
button: false,
init: function() {
},
update: function(win, scheme, settings, wm) {
renderInstalled(win, scheme);
renderPaths(win, scheme);
},
render: function(win, scheme, root, settings, wm) {
var pacman = OSjs.Core.getPackageManager();
var sm = OSjs.Core.getSettingsManager();
var pool = sm.instance('PackageManager', {Hidden: []});
win._find('ButtonUninstall').on('click', function() {
var selected = win._find('InstalledPackages').get('selected');
if ( selected && selected[0] ) {
var pkg = pacman.getPackage(selected[0].data);
if ( pkg && pkg.scope === 'user' ) {
win._toggleLoading(true);
var file = new VFS.File(pkg.path);
pacman.uninstall(file, function(e) {
win._toggleLoading(false);
renderInstalled(win, scheme);
if ( e ) {
alert(e);
}
});
}
}
});
win._find('InstalledPackages').on('select', function(ev) {
var d = true;
var e = ev.detail.entries || [];
if ( e.length ) {
var pkg = pacman.getPackage(e[0].data);
if ( pkg && pkg.scope === 'user' ) {
d = false;
}
}
win._find('ButtonUninstall').set('disabled', d);
});
win._find('ButtonSaveHidden').on('click', function() {
win._toggleLoading(true);
pool.set('Hidden', hidden, function() {
win._toggleLoading(false);
});
});
win._find('ButtonRegen').on('click', function() {
win._toggleLoading(true);
pacman.generateUserMetadata(function() {
win._toggleLoading(false);
renderInstalled(win, scheme);
});
});
win._find('ButtonZipInstall').on('click', function() {
win._toggleDisabled(true);
API.createDialog('File', {
filter: ['application/zip']
}, function(ev, button, result) {
if ( button !== 'ok' || !result ) {
win._toggleDisabled(false);
} else {
OSjs.Core.getPackageManager().install(result, true, function(e) {
win._toggleDisabled(false);
renderInstalled(win, scheme);
if ( e ) {
alert(e);
}
});
}
}, win);
});
win._find('PackagePathsRemove').on('click', function() {
var sel = win._find('PackagePaths').get('selected');
if ( sel && sel.length ) {
removePath(win, scheme, sel[0].data);
}
});
win._find('PackagePathsAdd').on('click', function() {
addPath(win, scheme);
});
},
save: function(win, scheme, settings, wm) {
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.PM = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.PM, OSjs.GUI, OSjs.VFS);
/*!
* OS.js - JavaScript Cloud/Web PM Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, PM, GUI, VFS) {
'use strict';
function installSelected(download, cb) {
var pacman = OSjs.Core.getPackageManager();
var file = new VFS.File(download, 'application/zip');
VFS.read(file, function(error, ab) {
if ( error ) {
cb(error);
return;
}
var dest = new VFS.File({
filename: Utils.filename(download),
type: 'file',
path: 'home:///' + Utils.filename(download),
mime: 'application/zip'
});
VFS.write(dest, ab, function(error, success) {
if ( error ) {
cb('Failed to write package: ' + error); // FIXME
return;
}
OSjs.Core.getPackageManager().install(dest, true, function(error) {
if ( error ) {
cb('Failed to install package: ' + error); // FIXME
return;
}
pacman.generateUserMetadata(function() {
cb(false, true);
});
});
});
});
}
function renderStore(win) {
win._toggleLoading(true);
var pacman = OSjs.Core.getPackageManager();
pacman.getStorePackages({}, function(error, result) {
var rows = result.map(function(i, idx) {
var a = document.createElement('a');
a.href = i._repository;
return {
index: idx,
value: i.download,
columns: [
{label: i.name},
{label: a.hostname},
{label: i.version},
{label: i.author}
]
};
});
win._toggleLoading(false);
win._find('AppStorePackages').clear().add(rows);
});
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'user',
name: 'Store',
label: 'LBL_STORE',
icon: 'apps/system-software-update.png',
button: false,
init: function() {
},
update: function(win, scheme, settings, wm, clicked) {
if ( clicked ) {
renderStore(win);
}
},
render: function(win, scheme, root, settings, wm) {
win._find('ButtonStoreRefresh').on('click', function() {
renderStore(win);
});
win._find('ButtonStoreInstall').on('click', function() {
var selected = win._find('AppStorePackages').get('selected');
if ( selected.length && selected[0].data ) {
win._toggleLoading(true);
installSelected(selected[0].data, function(error, result) {
win._toggleLoading(false);
if ( error ) {
alert(error); // FIXME
return;
}
});
}
});
},
save: function(win, scheme, settings, wm) {
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Store = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.PM, OSjs.GUI, OSjs.VFS);
/*!
* OS.js - JavaScript Cloud/Web Panel Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, Panel, GUI) {
'use strict';
var panelItems = [];
var items = [];
var max = 0;
var panel;
/////////////////////////////////////////////////////////////////////////////
// WINDOWS
/////////////////////////////////////////////////////////////////////////////
function PanelItemDialog(app, metadata, scheme, callback) {
Window.apply(this, ['ApplicationSettingsPanelItemsWindow', {
icon: metadata.icon,
title: metadata.name + ' - Panel Items',
width: 400,
height: 300
}, app, scheme]);
this.callback = callback;
this.closed = false;
}
PanelItemDialog.prototype = Object.create(Window.prototype);
PanelItemDialog.constructor = Window;
PanelItemDialog.prototype.init = function(wm, app, scheme) {
var self = this;
var root = Window.prototype.init.apply(this, arguments);
// Load and set up scheme (GUI) here
scheme.render(this, 'PanelSettingWindow', root, null, null, {
_: OSjs.Applications.ApplicationSettings._
});
var pacman = OSjs.Core.getPackageManager();
var avail = pacman.getPackage('CoreWM').panelItems;
scheme.find(this, 'List').clear().add(Object.keys(avail).map(function(i, idx) {
return {
value: i,
columns: [{
icon: API.getIcon(avail[i].Icon),
label: Utils.format('{0} ({1})', avail[i].Name, avail[i].Description)
}]
};
}));
scheme.find(this, 'ButtonPanelOK').on('click', function() {
self.closed = true;
var selected = scheme.find(self, 'List').get('selected');
self.callback('ok', selected.length ? selected[0] : null);
self._close();
});
scheme.find(this, 'ButtonPanelCancel').on('click', function() {
self._close();
});
return root;
};
PanelItemDialog.prototype._close = function() {
if ( !this.closed ) {
this.callback('cancel');
}
return Window.prototype._close.apply(this, arguments);
};
/////////////////////////////////////////////////////////////////////////////
// HELPERS
/////////////////////////////////////////////////////////////////////////////
function openOptions(wm, idx) {
// FIXME
try {
wm.panels[0]._items[idx].openSettings();
} catch ( e ) {}
}
function checkSelection(win, idx) {
var hasOptions = true;
try {
var it = items[panel.items[idx].name];
hasOptions = it.HasOptions === true;
} catch ( e ) {}
win._find('PanelButtonOptions').set('disabled', idx < 0 || !hasOptions);
win._find('PanelButtonRemove').set('disabled', idx < 0);
win._find('PanelButtonUp').set('disabled', idx <= 0);
win._find('PanelButtonDown').set('disabled', idx < 0 || idx >= max);
}
function renderItems(win, setSelected) {
var list = [];
panelItems.forEach(function(i, idx) {
var name = i.name;
if ( items[name] ) {
list.push({
value: idx,
columns: [{
icon: API.getIcon(items[name].Icon),
label: Utils.format('{0} ({1})', items[name].Name, items[name].Description)
}]
});
}
});
max = panelItems.length - 1;
var view = win._find('PanelItems');
view.clear();
view.add(list);
if ( typeof setSelected !== 'undefined' ) {
view.set('selected', setSelected);
checkSelection(win, setSelected);
} else {
checkSelection(win, -1);
}
}
function movePanelItem(win, index, pos) {
var value = panelItems[index];
var newIndex = index + pos;
panelItems.splice(index, 1);
panelItems.splice(newIndex, 0, value);
renderItems(win, newIndex);
}
function createDialog(win, scheme, cb) {
if ( scheme ) {
var app = win._app;
win._addChild(new PanelItemDialog(app, app.__metadata, scheme, cb), true, true);
}
}
function createColorDialog(win, color, cb) {
win._toggleDisabled(true);
API.createDialog('Color', {
color: color
}, function(ev, button, result) {
win._toggleDisabled(false);
if ( button === 'ok' && result ) {
cb(result.hex);
}
}, win);
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'personal',
name: 'Panel',
label: 'LBL_PANELS',
icon: 'apps/gnome-panel.png',
init: function() {
},
update: function(win, scheme, settings, wm) {
panel = settings.panels[0];
var opacity = 85;
if ( typeof panel.options.opacity === 'number' ) {
opacity = panel.options.opacity;
}
win._find('PanelPosition').set('value', panel.options.position);
win._find('PanelAutoHide').set('value', panel.options.autohide);
win._find('PanelOntop').set('value', panel.options.ontop);
win._find('PanelBackgroundColor').set('value', panel.options.background || '#101010');
win._find('PanelForegroundColor').set('value', panel.options.foreground || '#ffffff');
win._find('PanelOpacity').set('value', opacity);
items = OSjs.Core.getPackageManager().getPackage('CoreWM').panelItems;
panelItems = panel.items || [];
renderItems(win);
},
render: function(win, scheme, root, settings, wm) {
win._find('PanelPosition').add([
{value: 'top', label: API._('LBL_TOP')},
{value: 'bottom', label: API._('LBL_BOTTOM')}
]);
win._find('PanelBackgroundColor').on('open', function(ev) {
createColorDialog(win, ev.detail, function(result) {
win._find('PanelBackgroundColor').set('value', result);
});
});
win._find('PanelForegroundColor').on('open', function(ev) {
createColorDialog(win, ev.detail, function(result) {
win._find('PanelForegroundColor').set('value', result);
});
});
win._find('PanelItems').on('select', function(ev) {
if ( ev && ev.detail && ev.detail.entries && ev.detail.entries.length ) {
checkSelection(win, ev.detail.entries[0].index);
}
});
win._find('PanelButtonAdd').on('click', function() {
win._toggleDisabled(true);
createDialog(win, scheme, function(ev, result) {
win._toggleDisabled(false);
if ( result ) {
panelItems.push({name: result.data});
renderItems(win);
}
});
});
win._find('PanelButtonRemove').on('click', function() {
var selected = win._find('PanelItems').get('selected');
if ( selected.length ) {
panelItems.splice(selected[0].index, 1);
renderItems(win);
}
});
win._find('PanelButtonUp').on('click', function() {
var selected = win._find('PanelItems').get('selected');
if ( selected.length ) {
movePanelItem(win, selected[0].index, -1);
}
});
win._find('PanelButtonDown').on('click', function() {
var selected = win._find('PanelItems').get('selected');
if ( selected.length ) {
movePanelItem(win, selected[0].index, 1);
}
});
win._find('PanelButtonReset').on('click', function() {
var defaults = wm.getDefaultSetting('panels');
panelItems = defaults[0].items;
renderItems(win);
});
win._find('PanelButtonOptions').on('click', function() {
var selected = win._find('PanelItems').get('selected');
if ( selected.length ) {
openOptions(wm, selected[0].index);
}
});
},
save: function(win, scheme, settings, wm) {
settings.panels = settings.panels || [{}];
settings.panels[0].options = settings.panels[0].options || {};
settings.panels[0].options.position = win._find('PanelPosition').get('value');
settings.panels[0].options.autohide = win._find('PanelAutoHide').get('value');
settings.panels[0].options.ontop = win._find('PanelOntop').get('value');
settings.panels[0].options.background = win._find('PanelBackgroundColor').get('value') || '#101010';
settings.panels[0].options.foreground = win._find('PanelForegroundColor').get('value') || '#ffffff';
settings.panels[0].options.opacity = win._find('PanelOpacity').get('value');
settings.panels[0].items = panelItems;
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Panel = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.Panel, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web User Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, User, GUI) {
'use strict';
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'user',
name: 'User',
label: 'LBL_USER',
icon: 'apps/user-info.png',
button: false,
init: function() {
},
update: function(win, scheme, settings, wm) {
var user = OSjs.Core.getHandler().getUserData();
win._find('UserID').set('value', user.id);
win._find('UserName').set('value', user.name);
win._find('UserUsername').set('value', user.username);
win._find('UserGroups').set('value', user.groups);
},
render: function(win, scheme, root, settings, wm) {
},
save: function(win, scheme, settings, wm) {
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.User = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.User, OSjs.GUI);
/*!
* OS.js - JavaScript Cloud/Web User Platform
*
* Copyright (c) 2011-2016, Anders Evenrud <andersevenrud@gmail.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice, this
* list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* @author Anders Evenrud <andersevenrud@gmail.com>
* @licence Simplified BSD License
*/
(function(Application, Window, Utils, API, User, GUI) {
'use strict';
function renderUsers(win, scheme) {
API.call('users', {command: 'list'}, function(err, users) {
if ( users instanceof Array ) {
win._find('UsersList').clear().add(users.map(function(iter, idx) {
return {
value: iter,
columns: [
{label: iter.username},
{label: iter.name}
]
};
}));
}
});
}
function showDialog(win, scheme, data, passwd) {
var _ = OSjs.Applications.ApplicationSettings._;
data = data || {};
win._toggleDisabled(true);
if ( passwd ) {
API.createDialog('Input', {
message: _('Set user password'),
type: 'password'
}, function(ev, button, value) {
if ( !value ) {
win._toggleDisabled(false);
return;
}
API.call('users', {command: 'passwd', user: {password: value}}, function(err, users) {
win._toggleDisabled(false);
if ( err ) {
API.error('Settings', _('Error while managing users'), err);
}
renderUsers(win, scheme);
});
});
return;
}
var nwin = new Window('SettingsUserWindow', {
icon: win._app.__metadata.icon,
title: win._app.__metadata.name,
width: 400,
height: 250
}, win._app, scheme);
nwin._on('destroy', function(root) {
win._toggleDisabled(false);
});
nwin._on('init', function(root) {
var self = this;
scheme.render(this, this._name, root)
if ( Object.keys(data).length ) {
scheme.find(self, 'UserUsername').set('value', data.username);
scheme.find(self, 'UserName').set('value', data.name);
scheme.find(self, 'UserGroups').set('value', JSON.stringify(data.groups));
}
scheme.find(this, 'ButtonClose').on('click', function() {
self._close();
});
scheme.find(this, 'ButtonOK').on('click', function() {
data.username = scheme.find(self, 'UserUsername').get('value');
data.name = scheme.find(self, 'UserName').get('value') || data.username;
data.groups = [];
try {
data.groups = JSON.parse(scheme.find(self, 'UserGroups').get('value'));
} catch ( e ) {
}
if ( !data.username || !data.groups ) {
return self._close();
}
API.call('users', {command: 'edit', user: data}, function(err, users) {
if ( err ) {
API.error('Settings', _('Error while managing users'), err);
}
renderUsers(win, scheme);
self._close();
});
});
});
return win._addChild(nwin, true, true);
}
function removeUser(win, scheme, data) {
var _ = OSjs.Applications.ApplicationSettings._;
API.call('users', {command: 'remove', user: {id: data.id}}, function(err, users) {
if ( err ) {
API.error('Settings', _('Error while managing users'), err);
}
renderUsers(win, scheme);
});
}
/////////////////////////////////////////////////////////////////////////////
// MODULE
/////////////////////////////////////////////////////////////////////////////
var module = {
group: 'system',
name: 'Users',
label: 'LBL_USERS',
icon: 'apps/system-users.png',
button: false,
init: function() {
},
update: function(win, scheme, settings, wm) {
renderUsers(win, scheme);
},
render: function(win, scheme, root, settings, wm) {
function _action(cb, te) {
var sel = win._find('UsersList').get('selected');
if ( sel && sel.length ) {
cb(sel[0].data)
} else {
if ( te ) {
cb(null);
}
}
}
win._find('UsersAdd').on('click', function() {
_action(function(data) {
showDialog(win, scheme, data)
}, true);
});
win._find('UsersRemove').on('click', function() {
_action(function(data) {
removeUser(win, scheme, data);
});
});
win._find('UsersEdit').on('click', function() {
_action(function(data) {
showDialog(win, scheme, data)
});
});
win._find('UsersPasswd').on('click', function() {
_action(function(data) {
showDialog(win, scheme, null, true)
});
});
},
save: function(win, scheme, settings, wm) {
}
};
/////////////////////////////////////////////////////////////////////////////
// EXPORTS
/////////////////////////////////////////////////////////////////////////////
OSjs.Applications = OSjs.Applications || {};
OSjs.Applications.ApplicationSettings = OSjs.Applications.ApplicationSettings || {};
OSjs.Applications.ApplicationSettings.Modules = OSjs.Applications.ApplicationSettings.Modules || {};
OSjs.Applications.ApplicationSettings.Modules.Users = module;
})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.User, OSjs.GUI);