diff --git a/build/htdocs/dist/.htaccess b/build/htdocs/dist/.htaccess new file mode 100644 index 0000000..c9f2ba9 --- /dev/null +++ b/build/htdocs/dist/.htaccess @@ -0,0 +1,96 @@ +# Generated with `make apache-htaccess` + +Options +FollowSymlinks +RewriteEngine on +#RewriteBase / +RewriteCond %{REQUEST_URI} !^index.html +RewriteCond %{REQUEST_URI} !^/http-bind-jabber +RewriteCond %{REQUEST_FILENAME} !-d +RewriteCond %{REQUEST_FILENAME} !-f +RewriteRule ^ api.php [QSA,L] +AddCharset UTF-8 .js +AddCharset UTF-8 .html + +# For binding to other services + + + RewriteRule http-bind-jabber/ http://localhost:5280/http-bind/ [P] + + + + + + FileETag None + Header unset ETag + Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" + Header set Pragma "no-cache" + Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" + + + + Header set Cache-Control "max-age=86400, public, must-revalidate" + + + + FileETag None + Header unset ETag + Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate" + Header set Pragma "no-cache" + Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT" + + + + Header set Cache-Control "max-age=2592000, public" + + + + + AddType image/bmp .bmp + AddType text/css .css + AddType image/gif .gif + AddType text/html .htm + AddType text/html .html + AddType image/jpeg .jpg + AddType image/jpeg .jpeg + AddType application/javascript .js + AddType application/json .json + AddType application/x-lua .lua + AddType application/x-shellscript .sh + AddType text/x-c .c + AddType text/x-cplusplus .cpp + AddType text/x-cplusplus .cc + AddType font/opentype .otf + AddType font/opentype .ttf + AddType image/png .png + AddType application/zip .zip + AddType audio/aac .aac + AddType video/mp4 .mp4 + AddType audio/mp4 .m4a + AddType audio/mpeg .mp1 + AddType audio/mpeg .mp2 + AddType audio/mpeg .mp3 + AddType audio/mpeg .mpg + AddType audio/mpeg .mpeg + AddType audio/ogg .oga + AddType audio/ogg .ogg + AddType audio/wav .wav + AddType video/webm .webm + AddType video/mp4 .m4v + AddType video/ogg .ogv + AddType video/x-ms-video .avi + AddType video/x-flv .flv + AddType video/x-matroska .mkv + AddType application/x-python .py + AddType text/xml .xml + AddType text/plain .md + AddType text/plain .txt + AddType text/plain .log + AddType text/plain .doc + AddType application/pdf .pdf + AddType application/x-ipkg .ipk + AddType osjs/dbeat .odbeat + AddType osjs/playlist .oplist + AddType osjs/document .odoc + AddType osjs/draw .odraw + AddType osjs/project .oproj + diff --git a/build/htdocs/dist/api.php b/build/htdocs/dist/api.php new file mode 100644 index 0000000..657b54e --- /dev/null +++ b/build/htdocs/dist/api.php @@ -0,0 +1,6 @@ + diff --git a/build/htdocs/dist/blank.css b/build/htdocs/dist/blank.css new file mode 100644 index 0000000..6be9730 --- /dev/null +++ b/build/htdocs/dist/blank.css @@ -0,0 +1,2 @@ +@charset "UTF-8"; + diff --git a/build/htdocs/dist/dialogs.html b/build/htdocs/dist/dialogs.html new file mode 100644 index 0000000..f5852a3 --- /dev/null +++ b/build/htdocs/dist/dialogs.html @@ -0,0 +1,335 @@ + + + + + DIALOG_ERROR_MESSAGE + + + + DIALOG_ERROR_SUMMARY + + + + + + + + DIALOG_ERROR_TRACE + + + + + + + + + LBL_CLOSE + LBL_BUGREPORT + + + + + + + + + + + DIALOG_APPCHOOSER_MSG + + + + filename (mime) + + + + + + + + + + + + + + LBL_OK + LBL_CANCEL + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LBL_OK + LBL_CANCEL + + + + + + + + + + LBL_LOADING + + + + + + + + + LBL_CANCEL + + + + + + + + + + DIALOG_UPLOAD_DESC + + + + + + + + + LBL_CANCEL + + + + + + + + + + + + + + + LBL_OK + + + + + + + + + + DIALOG_INPUT_TITLE + + + + + + + + + LBL_OK + LBL_CANCEL + + + + + + + + + + DIALOG_ALERT_TITLE + + + + + LBL_OK + + + + + + + + + + DIALOG_CONFIRM_TITLE + + + + + LBL_YES + LBL_NO + LBL_CANCEL + + + + + + + + + + + + + + + + + + + + + + + + + Red + + + + + + + Green + + + + + + + Blue + + + + + + + Alpha + + + + + + + + + + + + LBL_OK + LBL_CANCEL + + + + + + + + + + + + + + + + + + + + + + + + + + LBL_OK + LBL_CANCEL + + + + diff --git a/build/htdocs/dist/favicon.ico b/build/htdocs/dist/favicon.ico new file mode 100644 index 0000000..69f839d Binary files /dev/null and b/build/htdocs/dist/favicon.ico differ diff --git a/build/htdocs/dist/favicon.png b/build/htdocs/dist/favicon.png new file mode 100644 index 0000000..694ec13 Binary files /dev/null and b/build/htdocs/dist/favicon.png differ diff --git a/build/htdocs/dist/index.html b/build/htdocs/dist/index.html new file mode 100644 index 0000000..d67464c --- /dev/null +++ b/build/htdocs/dist/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + OS.js + + + + + + + + + + + + + + + +
+ +
+ +
+
+
+ + +
+
+ + +
+
+ +
+
+
+ + + diff --git a/build/htdocs/dist/locales.js b/build/htdocs/dist/locales.js new file mode 100644 index 0000000..eaf9193 --- /dev/null +++ b/build/htdocs/dist/locales.js @@ -0,0 +1,5539 @@ +window.OSjs = window.OSjs || {}; +/** + * @preserve OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +(function() { + 'use strict'; + OSjs.Locales.en_EN = { + 'ERR_FILE_OPEN' : 'Error opening file', + 'ERR_WM_NOT_RUNNING' : 'Window manager is not running', + 'ERR_FILE_OPEN_FMT' : 'The file \'**{0}**\' could not be opened', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Could not find any Applications with support for \'{0}\' files', + 'ERR_APP_LAUNCH_FAILED' : 'Failed to launch Application', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'An error occured while trying to launch: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Application \'{0}\' construct failed: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Application \'{0}\' init() failed: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Application resources missing for \'{0}\' or it failed to load!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Application \'{0}\' preloading failed: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'The application \'{0}\' is already launched and allows only one instance!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Failed to launch \'{0}\'. Application manifest data not found!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Failed to launch \'{0}\'. Your browser does not support: {1}', + 'ERR_NO_WM_RUNNING' : 'No window manager is running', + 'ERR_CORE_INIT_FAILED' : 'Failed to initialize OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'An error occured while initializing OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Cannot launch OS.js: No window manager defined!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Cannot launch OS.js: Failed to launch Window Manager: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Cannot launch OS.js: Failed to preload resources...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Error Report', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'An unexpected error occured, maybe a bug.', + 'ERR_APP_API_ERROR' : 'Application API error', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Application {0} failed to perform operation \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Missing argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Unknown error', + 'ERR_OPERATION_TIMEOUT' : 'Operation Timeout', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Operation Timeout ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' expects \'{1}\' to be a \'{2}\', \'{3}\' given', + 'ERR_WIN_DUPLICATE_FMT' : 'You already have a Window named \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimize', + 'WINDOW_MAXIMIZE' : 'Maximize', + 'WINDOW_RESTORE' : 'Restore', + 'WINDOW_CLOSE' : 'Close', + 'WINDOW_ONTOP_ON' : 'Ontop (Enable)', + 'WINDOW_ONTOP_OFF': 'Ontop (Disable)', + 'TITLE_SIGN_OUT' : 'Sign out', + 'TITLE_SIGNED_IN_AS_FMT' : 'Signed in as: {0}', + 'ERR_LOGIN_FMT' : 'Login error: {0}', + 'ERR_LOGIN_INVALID' : 'Invalid login', + 'ERR_NO_SESSION': 'No session was created by the server. Do you want to retry login?', + 'MSG_SESSION_WARNING' : 'Are you sure you want to quit OS.js? All unsaved settings and application data will be lost!', + 'BUGREPORT_MSG' : 'Please report this if you think this is a bug.\nInclude a brief description on how the error occured, and if you can; how to replicate it', + 'SERVICENOTIFICATION_TOOLTIP' : 'Logged into external services: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Fatal Error', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR Error: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Log out (Exit)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Logging out user \'{0}\'.\nDo you want to save current session?', + 'DIALOG_CLOSE' : 'Close', + 'DIALOG_CANCEL': 'Cancel', + 'DIALOG_APPLY' : 'Apply', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Alert Dialog', + 'DIALOG_COLOR_TITLE' : 'Color Dialog', + 'DIALOG_COLOR_R' : 'Red: {0}', + 'DIALOG_COLOR_G' : 'Green: {0}', + 'DIALOG_COLOR_B' : 'Blue: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Confirm Dialog', + 'DIALOG_ERROR_MESSAGE' : 'Message', + 'DIALOG_ERROR_SUMMARY' : 'Summary', + 'DIALOG_ERROR_TRACE' : 'Trace', + 'DIALOG_ERROR_BUGREPORT' : 'Report Bug', + 'DIALOG_FILE_SAVE' : 'Save', + 'DIALOG_FILE_OPEN' : 'Open', + 'DIALOG_FILE_MKDIR' : 'New Folder', + 'DIALOG_FILE_MKDIR_MSG' : 'Create a new directory in **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Are you sure you want to overwrite the file \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'View type', + 'DIALOG_FILE_MNU_LISTVIEW' : 'List View', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Tree View', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Icon View', + 'DIALOG_FILE_ERROR' : 'FileDialog Error', + 'DIALOG_FILE_ERROR_SCANDIR': 'Failed listing directory \'{0}\' because an error occured', + 'DIALOG_FILE_ERROR_FIND': 'Failed searching directory \'{0}\' because an error occured', + 'DIALOG_FILE_MISSING_FILENAME' : 'You need to select a file or enter new filename!', + 'DIALOG_FILE_MISSING_SELECTION': 'You need to select a file!', + 'DIALOG_FILEINFO_TITLE' : 'File Information', + 'DIALOG_FILEINFO_LOADING' : 'Loading file information for: {0}', + 'DIALOG_FILEINFO_ERROR' : 'FileInformationDialog Error', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Failed to get file information for **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Failed to get file information for: {0}', + 'DIALOG_INPUT_TITLE' : 'Input Dialog', + 'DIALOG_FILEPROGRESS_TITLE' : 'File Operation Progress', + 'DIALOG_FILEPROGRESS_LOADING' : 'Loading...', + 'DIALOG_UPLOAD_TITLE' : 'Upload Dialog', + 'DIALOG_UPLOAD_DESC' : 'Upload file to **{0}**.
Maximum size: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Uploading \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Uploading file...', + 'DIALOG_UPLOAD_FAILED' : 'Upload failed', + 'DIALOG_UPLOAD_FAILED_MSG' : 'The upload has failed', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Reason unknown...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Cancelled by user...', + 'DIALOG_UPLOAD_TOO_BIG': 'File is too big', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'File is too big, exceeds {0}', + 'DIALOG_FONT_TITLE' : 'Font Dialog', + 'DIALOG_APPCHOOSER_TITLE' : 'Choose Application', + 'DIALOG_APPCHOOSER_MSG' : 'Choose an application to open', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'You need to select an application', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Use as default application for {0}', + 'GAPI_DISABLED' : 'GoogleAPI Module not configured or disabled', + 'GAPI_SIGN_OUT' : 'Sign out from Google API Services', + 'GAPI_REVOKE' : 'Revoke permissions and Sign Out', + 'GAPI_AUTH_FAILURE' : 'Google API Authentication failed or did not take place', + 'GAPI_AUTH_FAILURE_FMT' : 'Failed to authenticate: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Failed to load Google API', + 'WLAPI_DISABLED' : 'Windows Live API module not configured or disabled', + 'WLAPI_SIGN_OUT' : 'Sign out from Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Failed to load Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Failed to log into Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Failed to log into Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API returned {0} status', + 'IDB_MISSING_DBNAME' : 'Cannot create IndexedDB without Database Name', + 'IDB_NO_SUCH_ITEM' : 'No such item', + 'ERR_VFS_FATAL' : 'Fatal Error', + 'ERR_VFS_UNAVAILABLE' : 'Not available', + 'ERR_VFS_FILE_ARGS' : 'File expects at least one argument', + 'ERR_VFS_NUM_ARGS' : 'Not enough arguments', + 'ERR_VFS_EXPECT_FILE' : 'Expects a file-object', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Expects a source file-object', + 'ERR_VFS_EXPECT_DST_FILE' : 'Expects a destination file-object', + 'ERR_VFS_FILE_EXISTS' : 'Destination already exists', + 'ERR_VFS_TARGET_NOT_EXISTS': 'Target does not exist', + 'ERR_VFS_TRANSFER_FMT' : 'An error occured while transfering between storage: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Cannot upload a file without a destination', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Cannot upload without any files defined', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'File upload failed: {0}', + 'ERR_VFS_UPLOAD_CANCELLED' : 'File upload was cancelled', + 'ERR_VFS_DOWNLOAD_NO_FILE' : 'Cannot download a path without a path', + 'ERR_VFS_DOWNLOAD_FAILED' : 'An error occured while downloading: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY' : 'Response was empty', + 'ERR_VFSMODULE_INVALID' : 'Invalid VFS Module', + 'ERR_VFSMODULE_INVALID_FMT' : 'Invalid VFS Module: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Invalid VFS Method', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Invalid VFS Method: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Invalid VFS Module type', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Invalid VFS Module type: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Invalid VFS Module configuration', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Invalid VFS Module configuration: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'VFS Module already mounted', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'VFS Module \'{0}\' already mounted', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'VFS Module not mounted', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'VFS Module \'{0}\' not mounted', + 'ERR_VFSMODULE_EXCEPTION' : 'VFS Module Exception', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'VFS Module Exception: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'No VFS Module matches {0}. Wrong path or format ?', + 'ERR_VFSMODULE_READONLY' : 'This VFS Module is read-only', + 'ERR_VFSMODULE_READONLY_FMT' : 'This VFS Module is read-only: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Downloading file', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR Error', + 'ERR_VFSMODULE_ROOT_ID' : 'Failed to find root folder id', + 'ERR_VFSMODULE_NOSUCH' : 'File does not exist', + 'ERR_VFSMODULE_PARENT' : 'No such parent', + 'ERR_VFSMODULE_PARENT_FMT' : 'Failed to look up parent: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Failed to scan directory', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Failed to scan directory: {0}', + 'ERR_VFSMODULE_READ' : 'Failed to read file', + 'ERR_VFSMODULE_READ_FMT' : 'Failed to read file: {0}', + 'ERR_VFSMODULE_WRITE' : 'Failed to write file', + 'ERR_VFSMODULE_WRITE_FMT' : 'Failed to write file: {0}', + 'ERR_VFSMODULE_COPY' : 'Failed to copy', + 'ERR_VFSMODULE_COPY_FMT' : 'Failed to copy: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Failed to unlink file', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Failed to unlink file: {0}', + 'ERR_VFSMODULE_MOVE' : 'Failed to move file', + 'ERR_VFSMODULE_MOVE_FMT' : 'Failed to move file: {0}', + 'ERR_VFSMODULE_EXIST' : 'Failed to check file existence', + 'ERR_VFSMODULE_EXIST_FMT' : 'Failed to check file existence: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Failed to get file information', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Failed to get file information: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Failed to create directory', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Failed to create directory: {0}', + 'ERR_VFSMODULE_MKFILE' : 'Failed to create file', + 'ERR_VFSMODULE_MKFILE_FMT' : 'Failed to create file: {0}', + 'ERR_VFSMODULE_URL' : 'Failed to get URL for file', + 'ERR_VFSMODULE_URL_FMT' : 'Failed to get URL for file: {0}', + 'ERR_VFSMODULE_TRASH' : 'Failed to move file to trash', + 'ERR_VFSMODULE_TRASH_FMT' : 'Failed to move file to trash: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Failed to move file out of trash', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Failed to move file out of trash: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Failed to empty trash', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Failed to empty trash: {0}', + 'ERR_VFSMODULE_FIND' : 'Failed to search', + 'ERR_VFSMODULE_FIND_FMT' : 'Failed to search: {0}', + 'ERR_VFSMODULE_FREESPACE' : 'Failed to get free space', + 'ERR_VFSMODULE_FREESPACE_FMT' : 'Failed to get free space: {0}', + 'ERR_VFSMODULE_EXISTS' : 'Failed to check if exists', + 'ERR_VFSMODULE_EXISTS_FMT' : 'Failed to check if exists: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'You are signed in to Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Sign out from Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'Failed to resolve path: item not found', + 'ZIP_PRELOAD_FAIL' : 'Failed to load zip.js', + 'ZIP_VENDOR_FAIL' : 'zip.js library was not found. Did it load properly?', + 'ZIP_NO_RESOURCE' : 'No zip resource was given', + 'ZIP_NO_PATH' : 'No path given', + 'SEARCH_LOADING': 'Searching...', + 'SEARCH_NO_RESULTS': 'No results found', + 'ERR_PACKAGE_EXISTS': 'Package installation directory already exists. Cannot continue!', + 'ERR_FILE_APP_OPEN' : 'Cannot open file', + 'ERR_FILE_APP_OPEN_FMT' : 'The file {0} could not be opened because the mime {1} is not supported', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'The file {0} could not be opened', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'The file {0} could not be saved', + 'ERR_GENERIC_APP_FMT' : '{0} Application Error', + 'ERR_GENERIC_APP_ACTION_FMT': 'Failed to perform action \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Unknown Error', + 'ERR_GENERIC_APP_REQUEST' : 'An error occured while handling your request', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Fatal Error: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Discard changes?', + 'MSG_FILE_CHANGED' : 'The file has changed. Reload?', + 'MSG_APPLICATION_WARNING' : 'Application Warning', + 'MSG_MIME_OVERRIDE' : 'The filetype "{0}" is not supported, using "{1}" instead.', + 'LBL_UNKNOWN' : 'Unknown', + 'LBL_APPEARANCE' : 'Appearance', + 'LBL_USER' : 'User', + 'LBL_NAME' : 'Name', + 'LBL_APPLY' : 'Apply', + 'LBL_FILENAME' : 'Filename', + 'LBL_PATH' : 'Path', + 'LBL_SIZE' : 'Size', + 'LBL_TYPE' : 'Type', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Loading', + 'LBL_SETTINGS' : 'Settings', + 'LBL_ADD_FILE' : 'Add file', + 'LBL_COMMENT' : 'Comment', + 'LBL_ACCOUNT' : 'Account', + 'LBL_CONNECT' : 'Connect', + 'LBL_ONLINE' : 'Online', + 'LBL_OFFLINE' : 'Offline', + 'LBL_AWAY' : 'Away', + 'LBL_BUSY' : 'Busy', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Help', + 'LBL_ABOUT' : 'About', + 'LBL_PANELS' : 'Panels', + 'LBL_LOCALES' : 'Locales', + 'LBL_THEME' : 'Theme', + 'LBL_COLOR' : 'Color', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Kill', + 'LBL_ALIVE' : 'Alive', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Add', + 'LBL_FONT' : 'Font', + 'LBL_YES' : 'Yes', + 'LBL_NO' : 'No', + 'LBL_CANCEL' : 'Cancel', + 'LBL_TOP' : 'Top', + 'LBL_LEFT' : 'Left', + 'LBL_RIGHT' : 'Right', + 'LBL_BOTTOM' : 'Bottom', + 'LBL_CENTER' : 'Center', + 'LBL_FILE' : 'File', + 'LBL_NEW' : 'New', + 'LBL_OPEN' : 'Open', + 'LBL_SAVE' : 'Save', + 'LBL_SAVEAS' : 'Save as...', + 'LBL_CLOSE' : 'Close', + 'LBL_MKDIR' : 'Create directory', + 'LBL_UPLOAD' : 'Upload', + 'LBL_VIEW' : 'View', + 'LBL_EDIT' : 'Edit', + 'LBL_RENAME' : 'Rename', + 'LBL_DELETE' : 'Delete', + 'LBL_OPENWITH' : 'Open With ...', + 'LBL_ICONVIEW' : 'Icon View', + 'LBL_TREEVIEW' : 'Tree View', + 'LBL_LISTVIEW' : 'List View', + 'LBL_REFRESH' : 'Refresh', + 'LBL_VIEWTYPE' : 'View type', + 'LBL_BOLD' : 'Bold', + 'LBL_ITALIC' : 'Italic', + 'LBL_UNDERLINE' : 'Underline', + 'LBL_REGULAR' : 'Regular', + 'LBL_STRIKE' : 'Strike', + 'LBL_INDENT' : 'Indent', + 'LBL_OUTDENT' : 'Outdate', + 'LBL_UNDO' : 'Undo', + 'LBL_REDO' : 'Redo', + 'LBL_CUT' : 'Cut', + 'LBL_UNLINK' : 'Unlink', + 'LBL_COPY' : 'Copy', + 'LBL_PASTE' : 'Paste', + 'LBL_INSERT' : 'Insert', + 'LBL_IMAGE' : 'Image', + 'LBL_LINK' : 'Link', + 'LBL_DISCONNECT' : 'Disconnect', + 'LBL_APPLICATIONS' : 'Applications', + 'LBL_ADD_FOLDER' : 'Add folder', + 'LBL_INFORMATION' : 'Information', + 'LBL_TEXT_COLOR' : 'Text Color', + 'LBL_BACK_COLOR' : 'Back Color', + 'LBL_RESET_DEFAULT' : 'Reset to defaults', + 'LBL_DOWNLOAD_COMP' : 'Download to computer', + 'LBL_ORDERED_LIST' : 'Ordered List', + 'LBL_BACKGROUND_IMAGE' : 'Background Image', + 'LBL_BACKGROUND_COLOR' : 'Background Color', + 'LBL_UNORDERED_LIST' : 'Unordered List', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Read-Only', + 'LBL_CREATED' : 'Created', + 'LBL_MODIFIED' : 'Modified', + 'LBL_SHOW_COLUMNS' : 'Show Columns', + 'LBL_MOVE' : 'Move', + 'LBL_OPTIONS' : 'Options', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Directory', + 'LBL_CREATE' : 'Create', + 'LBL_BUGREPORT' : 'Bugreport', + 'LBL_INSTALL' : 'Install', + 'LBL_UPDATE' : 'Update', + 'LBL_REMOVE' : 'Remove', + 'LBL_SHOW_SIDEBAR' : 'Show sidebar', + 'LBL_SHOW_NAVIGATION' : 'Show navigation', + 'LBL_SHOW_HIDDENFILES' : 'Show hidden files', + 'LBL_SHOW_FILEEXTENSIONS' : 'Show file extensions', + 'LBL_MOUNT': 'Mount', + 'LBL_DESCRIPTION': 'Description', + 'LBL_USERNAME': 'Username', + 'LBL_PASSWORD': 'Password', + 'LBL_HOST': 'Host', + 'LBL_NAMESPACE': 'Namespace', + 'LBL_SEARCH': 'Search', + 'LBL_BACK': 'Back', + 'LBL_ICONS': 'Icons', + 'LBL_ICON': 'Icon', + 'LBL_UNINSTALL': 'Uninstall', + 'LBL_REGENERATE': 'Regenerate', + 'LBL_DESKTOP': 'Desktop', + 'LBL_WINDOWMANAGER': 'Window Manager', + 'LBL_HOTKEY': 'Hotkey', + 'LBL_HOTKEYS': 'Hotkeys', + 'LBL_MOUNTS': 'Mounts', + 'LBL_ID': 'ID', + 'LBL_APPLICATION': 'Application', + 'LBL_SCOPE': 'Scope', + 'LBL_HIDE': 'Hide', + 'LBL_REPOSITORY': 'Repository', + 'LBL_VERSION': 'Version', + 'LBL_AUTHOR': 'Author', + 'LBL_GROUPS': 'Groups', + 'LBL_AUTOHIDE': 'Autohide', + 'LBL_PERSONAL': 'Personal', + 'LBL_SYSTEM': 'System', + 'LBL_STARTING': 'Starting', + 'LBL_SOUNDS': 'Sounds', + 'LBL_STORE': 'Store', + 'LBL_LOCALE': 'Locale', + 'LBL_PACKAGE': 'Package', + 'LBL_PACKAGES': 'Packages', + 'LBL_INPUT': 'Input', + 'LBL_MISC': 'Misc', + 'LBL_OTHER': 'Other', + 'LBL_USERS': 'Users', + 'LBL_FONTS': 'Fonts' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.bg_BG = { + 'ERR_FILE_OPEN' : 'Ãðåøêà ïðè îòâàðÿíå íà ôàéë', + 'ERR_WM_NOT_RUNNING' : 'Ìåíèäæúðà íà ïðîçîðöè íå ðàáîòè ', + 'ERR_FILE_OPEN_FMT' : 'Ôàéëúò \'**{0}**\' íå ìîæå äà áúäå îòâîðåí', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Íÿìà íàìåðåíè ïðèëîæåíèÿ ñ ïîääðúæêà çà \'{0}\' ôàéëîâå', + 'ERR_APP_LAUNCH_FAILED' : 'Ïðèëîæåíèåòî íå ìîæà äà áúäå ñòàðòèðàíî', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Ïîëó÷è ñå ãðåøêà ïî âðåìå íà ñòàðòèðàíå: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Ïðèìîæåíèåòî \'{0}\' ïðîâàëåíî èçãðàæäàíå: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Ïðèëîæåíèåòî \'{0}\' init() ïðîâàëåíî: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Ëèïñâàùè ðåñóðñè çà ïðèëîæåíèåòî \'{0}\' èëè ñå ïðîâàëè ñòàðòèðàíåòî!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Ïðèëîæåíèåòî \'{0}\' ïðåäâàðèòåëíî ñòàðòèðàíå ïðîâàëåíî: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Ïðèëîæåíèåòî \'{0}\' å âå÷å ñòàðòèðàíî!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Ãðåøêà ïðè ñòàðòèðàíå \'{0}\'. íÿìà íàìåðåíè äàííè!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Ãðåøêà ïðè ñòàðòèðàíå \'{0}\'. íåïîääúðæàí áðàóçúð: {1}', + 'ERR_NO_WM_RUNNING' : 'Íÿìà ðàáîòåù ìåíèäæúð íà ïðîçîðöè', + 'ERR_CORE_INIT_FAILED' : 'Ïðîâàëåíî èíèöèàëèçèðàíå íà OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Ãðåøêà ïðè èíèöèàëèçèðàíå íà OS.js', + 'ERR_CORE_INIT_NO_WM' : 'OS.js íå ìîæå äà ñå ñòàðòèðà: Íå å îïðåäåëåí ìåíèäæúð íà ïðîçîðöè!', + 'ERR_CORE_INIT_WM_FAILED_FMT': 'OS.js íå ìîæå äà ñå ñòàðòèðà: Ïðîâàëåíî îòâàðÿíå íà ìåíèäæúð íà ïðîçîðöè: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED': 'OS.js íå ìîæå äà ñå ñòàðòèðà: Ïðîâàëåíî çàðåæäàíå íà ðåñóðñèòå...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript èíôîðìàöèÿ íà ãðåøêà ', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Ïîÿâè ñå íåî÷êàâàíà ãðåøêà, âåðîÿòíî áúã.', + 'ERR_APP_API_ERROR' : 'Ãðåøêà â API íà ïðèëîæåíèåòî', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Ïðèëîæåíèåòî {0} íå ìîæà äà èçïúëíè îïåðàöèÿòà \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Ëèïñâàù àðãóìåíò: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Íåïîçíàòà ãðåøêà', + 'ERR_OPERATION_TIMEOUT' : 'Ïðåñðî÷åíî âðåìå íà îïåðàöèÿòà', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Ïðåñðî÷åíî âðåìå íà îïåðàöèÿòà ({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'Âå÷å èìà íàèìåíîâàí ïðîçîðåö \'{0}\'', + 'WINDOW_MINIMIZE' : 'Ìèíèìèçèðàé', + 'WINDOW_MAXIMIZE' : 'Ìàêñèìèçèðàíå', + 'WINDOW_RESTORE' : 'Âúçîáíîâè', + 'WINDOW_CLOSE' : 'çàòâîðè', + 'WINDOW_ONTOP_ON' : 'íàé-îòãîðå (ðàçðåøåíî)', + 'WINDOW_ONTOP_OFF': 'íàé-îòãîðå (çàáðàíåíî)', + 'TITLE_SIGN_OUT' : 'Èçõîä', + 'TITLE_SIGNED_IN_AS_FMT' : 'Âëåçëè ñòå êàòî: {0}', + 'MSG_SESSION_WARNING' : 'Ñèãóðíè ëè ñòå, ÷å èñêàòå íà èçëåçåòå îò OS.js? Âñè÷êè íå çàïàçåíè íàñòðîéêè è èíôîðìàöèÿ ùå áúäàò çàãóáåíè!', + 'BUGREPORT_MSG' : 'Ìîëÿ äîêëàäâàéòå òîâà àêî ìèñëèòå, ÷å å áúã.\âêëþ÷åòå äåòàéëíî îïèñàíèå êàê ñå ïîëó÷è ãðåøêàòà è ñàìî àêî ìîæåòå; êàê ìîæå äà áúäå ïîïðàâåíà ', + 'SERVICENOTIFICATION_TOOLTIP' : 'Âëåçëè ñòå âúâ âúíøíè óñëóãè: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Ôàòàëíà ãðåøêà', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR ãðåøêà: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Èçëåç (Èçõîä)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Èçëèçàíå îò ïîòðåáèòåë \'{0}\'.\nÈñêàòå ëè äà çàïàçèòå òåêóùàòà ñåñèÿ?', + 'DIALOG_CLOSE' : 'Çàòâîðè', + 'DIALOG_CANCEL': 'Îòêàæè', + 'DIALOG_APPLY' : 'Ïðèëîæè', + 'DIALOG_OK' : 'ÎÊ', + 'DIALOG_ALERT_TITLE' : 'Äèàëîã çà èçâåñòèå', + 'DIALOG_COLOR_TITLE' : 'Öâÿò íà äèàëîãà', + 'DIALOG_COLOR_R' : '×åðâåí: {0}', + 'DIALOG_COLOR_G' : 'Çåëåí: {0}', + 'DIALOG_COLOR_B' : 'Ñèí: {0}', + 'DIALOG_COLOR_A' : 'Àëôà: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Ïîòâúðäè äèàëîã', + 'DIALOG_ERROR_MESSAGE' : 'Ñúîáùåíèå', + 'DIALOG_ERROR_SUMMARY' : 'Ñúäúðæàíèå', + 'DIALOG_ERROR_TRACE' : 'Òúðñè', + 'DIALOG_ERROR_BUGREPORT' : 'Äîêëàäâàé áúã', + 'DIALOG_FILE_SAVE' : 'Çàïàçè', + 'DIALOG_FILE_OPEN' : 'Îòâîðè', + 'DIALOG_FILE_MKDIR' : 'Íîâà ïàïêà', + 'DIALOG_FILE_MKDIR_MSG' : 'Ñúçäàé íîâà äèðåêòîðèÿ â **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Ñèãóðíè ëè ñòå, ÷å èñêàòå äà ïðåçàïèøåòå ôàèëúò \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Òèï íà èçãëåä', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Ñïèñúê', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Äúðâî', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Èêîíè', + 'DIALOG_FILE_ERROR' : 'Ãðåøêà âúâ ôàéëîâ äèàëîã', + 'DIALOG_FILE_ERROR_SCANDIR': 'Ïðîâàëåíî ðàçãëåæäàíå íà äèðåêòîðèÿòà \'{0}\' ïîðàäè ãðåøêà', + 'DIALOG_FILE_MISSING_FILENAME' : 'Òðÿáâà äà èçáåðåòå ôàéë èëè äà âúâåäåòå èìå!', + 'DIALOG_FILE_MISSING_SELECTION': 'Òðÿáâà äà èçáåðåòå ôàéë!', + 'DIALOG_FILEINFO_TITLE' : 'Èíôîðàìöèÿ çà ôàéëúò', + 'DIALOG_FILEINFO_LOADING' : 'Çàðåæäàíå íà èíôîðìàöèÿ çà: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Ãðåøêà â èíôîðìàöèÿ çà ôàéë', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Íå ìîæå äà áúäå íàìåðåíà èíôîðìàöèÿ çà ôàéëúò **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Íå ìîæå äà áúäå íàìåðåíà èíôîðìàöèÿ çà ôàéëúò: {0}', + 'DIALOG_INPUT_TITLE' : 'Âõîäÿù äèàëîã', + 'DIALOG_FILEPROGRESS_TITLE' : 'Ïðîãðåñ íà îïåðàöèÿòà íà ôàéëúò', + 'DIALOG_FILEPROGRESS_LOADING' : 'Çàðåæäàíå...', + 'DIALOG_UPLOAD_TITLE' : 'Äîáàâè äèàëîã', + 'DIALOG_UPLOAD_DESC' : 'Äîáàâè ôàéë êúì **{0}**.
Ìàêñèìàëåí ðàçìåð: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Äîáàâÿíå \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Äîáàâÿíå íà ôàèë...', + 'DIALOG_UPLOAD_FAILED' : 'Äîáàâÿíå ïðîâàëåíî', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Äîáàâÿíåòî å ïðîâàëåíî', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Íåîïðåäåëåíà ïðè÷èíà...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Îòêàçàíî îò ïîòðåáèòåë...', + 'DIALOG_UPLOAD_TOO_BIG': 'Ôàéëúò å ïðåêàëåíî ãîëÿì', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Ôàéëúò å ïðåêàëåíî ãîëÿì, íàäâèøàâà {0}', + 'DIALOG_FONT_TITLE' : 'Øðèôò íà äèàëîã', + 'DIALOG_APPCHOOSER_TITLE' : 'Èçáåðåòå ïðèëîæåíèå', + 'DIALOG_APPCHOOSER_MSG' : 'Èçáåðåòå ïðèëîæåíèå êîåòî äà ñå îòâîðè', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Òðÿáâà äà èçáåðåòå ïðèëîæåíèå', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Èçïîëçâàé êàòî ïðèëîæåíèå ïî ïîäðàçáèðàíå çà {0}', + 'GAPI_DISABLED' : 'GoogleAPI Ìîäóë íå å êîíôèãóðèðàí èëè å èçêëþ÷åí', + 'GAPI_SIGN_OUT' : 'Èçõîä îò Google API óñëóãè', + 'GAPI_REVOKE' : 'Îòòåãëÿíå íà ïðàâàòà è èçõîä', + 'GAPI_AUTH_FAILURE' : 'Google API óäîñòîâåðÿâàíå ïðîâàëåíî èëè íå å ïðîâåäåíî', + 'GAPI_AUTH_FAILURE_FMT' : 'Ãðåøêà ïðè óäîñòîâåðÿâàíå: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Ïðîâàëåíî ñòàðòèðàíå íà Google API', + 'WLAPI_DISABLED' : 'Windows Live API ìîäóë íå å êîíôèãóðèðàí èëè å èçêëþ÷åí', + 'WLAPI_SIGN_OUT' : 'Èçõîä îò Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Ïðîâàëåíî ñòàðòèðàíå íà Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Ïðîâàëåíî âëèçàíå â Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Ïðîâàëåíî âëèçàíå â Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API îòãîâîðè {0} ñòàòóñ', + 'IDB_MISSING_DBNAME' : 'Íå ìîæå äà áúäå ñúçäàäåíà IndexedDB áåç èìå íà áàçà äàííè', + 'IDB_NO_SUCH_ITEM' : 'Íå ñúùåñòâóâàù îáåêò', + 'ERR_VFS_FATAL' : 'Ôàòàëíà ãðåøêà', + 'ERR_VFS_UNAVAILABLE' : 'Íå â íàëè÷íî', + 'ERR_VFS_FILE_ARGS' : 'Ôàéëúò î÷àêâà ïîíå åäèí àðãóìåíò', + 'ERR_VFS_NUM_ARGS' : 'Íÿìà äîñòàòú÷íî àðãóìåíòè', + 'ERR_VFS_EXPECT_FILE' : 'Î÷àêâà ôàéëîâ-îáåêò', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Î÷êâà èçòî÷íèê Ôàéëîâ-îáåêò', + 'ERR_VFS_EXPECT_DST_FILE' : 'Î÷àêâà äåñòèíàöèÿ Ôàéëîâ-îáåêò', + 'ERR_VFS_FILE_EXISTS' : 'Äåñòèíàöèÿòà âå÷å ñúùåñòâóâà', + 'ERR_VFS_TRANSFER_FMT' : 'Ïîÿâè ñå ãðåøêà äîêàòî ñå èçâúðøâàøå òðàíñôåð: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Íå ìîæå äà áúäå äîáàâåí ôàéë áåç äåâñòèíàöèÿ', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Íå ìîæå äà ñå äîáàâÿ áåç îïðåäåëÿíå íà ôàéëîâå', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Ïðîâàëåíî äîáàâÿíå íà ôàéëîâå: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Äîáàâÿíåòî íà ôàéëîâå áåøå ïðåêðàòåíî', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Íå ìîæå äà ñå èçòåãëè áåç óêàçàí ïúò ', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Ïîÿâè ñå ãðåøêà ïðè èçòåãëÿíå: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Îòãîâîðà áåøå ïðàçåí', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Èçòåãëÿíå íà ôàéë', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR ãðåøêà', + 'ERR_VFSMODULE_ROOT_ID' : 'Íå ìîæå äà áúäå íàìåðåíî ÈÄ íà root ïàïêàòà', + 'ERR_VFSMODULE_NOSUCH' : 'Ôàéëúò íå ñúùåñòâóâà', + 'ERR_VFSMODULE_PARENT' : 'Íÿìà íàìåðåí èçòî÷íèê', + 'ERR_VFSMODULE_PARENT_FMT' : 'Íå ìîæà äà áúäå íàìåðåí èçòî÷íêè: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Ïðîâàëåíî ñêàíèðàíå íà äèðåêòîðèÿ', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Ïðîâàëåíî ñêàíèðàíå íà äèðåêòîðèÿ: {0}', + 'ERR_VFSMODULE_READ' : 'Ïðîâàëåíî ïðî÷èòàíå íà ôàéëúò', + 'ERR_VFSMODULE_READ_FMT' : 'Ïðîâàëåíî ïðî÷èòàíå íà ôàéëúò: {0}', + 'ERR_VFSMODULE_WRITE' : 'Ïðîâàëåíî çàïèñâàíå íà ôàéëúò', + 'ERR_VFSMODULE_WRITE_FMT' : 'Ïðîâàëåíî çàïèñâàíå íà ôàéëúò: {0}', + 'ERR_VFSMODULE_COPY' : 'Ïðîâàëåíî êîïèðàíå', + 'ERR_VFSMODULE_COPY_FMT' : 'Ïðîâàëåíî êîïèðàíå: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Ïðîâàëåíî ðàçêà÷àíå íà ôàéëúò ', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Ïðîâàëåíî ðàçêà÷àíå íà ôàéëúò: {0}', + 'ERR_VFSMODULE_MOVE' : 'Ïðîâàëåíî ïðåìåñòâàíå íà ôàéëúò', + 'ERR_VFSMODULE_MOVE_FMT' : 'Ïðîâàëåíî ïðåìåñòâàíå íà ôàèëúò: {0}', + 'ERR_VFSMODULE_EXIST' : 'Ïðîâàëåíà ïðîæåðêà çà ñúùåñòâóâàíå íà ôàéëúò', + 'ERR_VFSMODULE_EXIST_FMT' : 'Ïðîâàëåíà ïðîæåðêà çà ñúùåñòâóâàíå íà ôàéëúò: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Ïðîâàëåíî ïîëó÷àâàíå íà èíôîðìàöèÿ çà ôàéëúò', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Ïðîâàëåíî ïîëó÷àâàíå íà èíôîðìàöèÿ çà ôàéëúò: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Ïðîâàëåíî ñúçäàâàíå íà äèðåêòîðèÿ', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Ïðîâàëåíî ñúçäàâàíå íà äèðåêòîðèÿ: {0}', + 'ERR_VFSMODULE_URL' : 'Ïðîâàëåíî ïîëó÷àâàíå íà URL çà ôàéëúò', + 'ERR_VFSMODULE_URL_FMT' : 'Ïðîâàëåíî ïîëó÷àâàíå íà URL çà ôàéëúò: {0}', + 'ERR_VFSMODULE_TRASH' : 'Ïðîâàëåíî èçòðèâàíå', + 'ERR_VFSMODULE_TRASH_FMT' : 'Ïðîâàëåíî èçòðèâàíå: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Ïðîâàëåíî èçêàðâàíå îò êîø÷åòî', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Ïðîâàëåíî èçêàðâàíå îò êîø÷åòî: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Ïðîâàëåíî èçïðàçâàíå íà êîø÷åòî', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Ïðîâàëåíî èçïðàçâàíå íà êîø÷åòî: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Âëåçëè ñòå â Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Èçõîä îò Dropbox API', + 'ONEDRIVE_ERR_RESOLVE' : 'Ïðîâàëåíî íàìèðàíå íà ïúò: Îáåêòà íå å íàìåðåí', + 'ERR_PACKAGE_EXISTS': 'Äèðåêòîðèÿ çà èíñòàëèðàíå íà ïàêåòè âå÷å ñúùåñòâóâà. Íå ìîæå äà ïðîäúëæèòå!', + 'ERR_FILE_APP_OPEN' : 'Íå ìîæå äà áúäå îòâîðåí ôàéëúò', + 'ERR_FILE_APP_OPEN_FMT' : 'Ôàéëúò {0} íå ìîæå äà áúäå îòîâîðåí {1} íå ñå ïîääúðæà', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Ôàéëúò {0} íå ìîæå äà áúäå îòâîðåí', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Ôàéëúò {0} íå ìîæå äà áúäå çàïàçåí', + 'ERR_GENERIC_APP_FMT' : '{0} ãðåøêà â ïðèëîæåíèåòî', + 'ERR_GENERIC_APP_ACTION_FMT': 'Ïðîâàëåíî èçïúëíåíÿâàíå íà äåéñòâèå \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Íåïîçíàòà ãðåøêà', + 'ERR_GENERIC_APP_REQUEST' : 'Ïîëó÷è ñå ãðåøêà ïðè èçïúëíÿâàíå íà çàÿâêàòà', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Ôàòàëíà ãðåøêà: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Îòêàæè ïðîìåíèòå?', + 'MSG_FILE_CHANGED' : 'Ôàéëúò å ïðîìåíåí. ïðåçàðåäè?', + 'MSG_APPLICATION_WARNING' : 'Ïðåäóïðåæäåíèå', + 'MSG_MIME_OVERRIDE' : 'âèäà íà ôàéëà "{0}" íå ñå ïîääúðæà, èçïîëçâàéòå "{1}".', + 'LBL_UNKNOWN' : 'Íåïîçíàò', + 'LBL_APPEARANCE' : 'Âúíøåí âèä', + 'LBL_USER' : 'Ïîòðåáèòåë', + 'LBL_NAME' : 'Èìå', + 'LBL_APPLY' : 'Ïðèëîæè', + 'LBL_FILENAME' : 'Èìå íà ôàéë', + 'LBL_PATH' : 'Ïúò', + 'LBL_SIZE' : 'Ðàçìåð', + 'LBL_TYPE' : 'Òèï', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Çàðåæäàíå', + 'LBL_SETTINGS' : 'Íàñòðîéêè', + 'LBL_ADD_FILE' : 'Äîáàâè ôàéë', + 'LBL_COMMENT' : 'Êîìåíòàð', + 'LBL_ACCOUNT' : 'Àêàóíò', + 'LBL_CONNECT' : 'Ñâúðæè ñå', + 'LBL_ONLINE' : 'Íà ëèíèÿ', + 'LBL_OFFLINE' : 'Èçâúí ëèíèÿ', + 'LBL_AWAY' : 'Îòñúñòâàù', + 'LBL_BUSY' : 'Çàåò', + 'LBL_CHAT' : '×àò', + 'LBL_HELP' : 'Ïîìîù', + 'LBL_ABOUT' : 'Èíôîðìàöèÿ', + 'LBL_PANELS' : 'Ïàíåëè', + 'LBL_LOCALES' : 'Ëîêàëèçàöèÿ', + 'LBL_THEME' : 'Òåìà', + 'LBL_COLOR' : 'Öâÿò', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Ïðåêðàòè', + 'LBL_ALIVE' : 'Âêëþ÷è', + 'LBL_INDEX' : 'Èíäåêñ', + 'LBL_ADD' : 'Äîáàâè', + 'LBL_FONT' : 'Øðèôò', + 'LBL_YES' : 'Äà', + 'LBL_NO' : 'Íå', + 'LBL_CANCEL' : 'Îòêàæè', + 'LBL_TOP' : 'Ãîðå', + 'LBL_LEFT' : 'Ëÿâî', + 'LBL_RIGHT' : 'Äÿñíî', + 'LBL_BOTTOM' : 'Äîëó', + 'LBL_CENTER' : 'Öåíòúð', + 'LBL_FILE' : 'Ôàéë', + 'LBL_NEW' : 'Íîâ', + 'LBL_OPEN' : 'Îòâîðè', + 'LBL_SAVE' : 'Çàïàçè', + 'LBL_SAVEAS' : 'Çàïàçè êàòî...', + 'LBL_CLOSE' : 'Çàòðâîðè', + 'LBL_MKDIR' : 'Ñúçäàé äèðåêòîðèÿ', + 'LBL_UPLOAD' : 'Äîáàâè', + 'LBL_VIEW' : 'Èçãëåä', + 'LBL_EDIT' : 'Ðåäàêòèðàé', + 'LBL_RENAME' : 'Ïðåèìåíóâàé', + 'LBL_DELETE' : 'Èçòðèè', + 'LBL_OPENWITH' : 'Îòâîðè ñ...', + 'LBL_ICONVIEW' : 'Èêîíè', + 'LBL_TREEVIEW' : 'Äúðâî', + 'LBL_LISTVIEW' : 'Ñïèñúê', + 'LBL_REFRESH' : 'Îïðåñíè', + 'LBL_VIEWTYPE' : 'Íà÷èí íà èçãëåä', + 'LBL_BOLD' : 'Ïîëó÷åð', + 'LBL_ITALIC' : 'Íàêëîíåí', + 'LBL_UNDERLINE' : 'Ïîä÷åðòàí', + 'LBL_REGULAR' : 'Îáèêíîâåí', + 'LBL_STRIKE' : 'Strike', + 'LBL_INDENT' : 'Èäåíòèôèêàöèÿ', + 'LBL_OUTDENT' : 'Ïðåñðî÷âàíå', + 'LBL_UNDO' : 'Ïððåìàõíè', + 'LBL_REDO' : 'Îòìåíè ïðåìàõâàíåòî', + 'LBL_CUT' : 'Èçðåæè', + 'LBL_UNLINK' : 'Îòêà÷è', + 'LBL_COPY' : 'Êîïèðàé', + 'LBL_PASTE' : 'Ïîñòàâè', + 'LBL_INSERT' : 'Äîáàâè', + 'LBL_IMAGE' : 'Èçîáðàæåíèå', + 'LBL_LINK' : 'Ëèíê', + 'LBL_DISCONNECT' : 'Èçëåç îò âðúçêà', + 'LBL_APPLICATIONS' : 'Ïðèëîæåíèÿ', + 'LBL_ADD_FOLDER' : 'Äîáàâè ïàïêà', + 'LBL_INFORMATION' : 'Èíôîðìàöèÿ', + 'LBL_TEXT_COLOR' : 'Öâÿò íà òåêñòà', + 'LBL_BACK_COLOR' : 'Öâÿò íà ôîíà', + 'LBL_RESET_DEFAULT' : 'Âúðíè ïî ïîäðàçáèðàíå', + 'LBL_DOWNLOAD_COMP' : 'Èçòåãëÿíå íà êîìïþòúðà', + 'LBL_ORDERED_LIST' : 'Ïîäðåäåí ñïèñúê', + 'LBL_BACKGROUND_IMAGE' : 'Èçîáðàæåíèÿ çà ôîí', + 'LBL_BACKGROUND_COLOR' : 'Öâÿò íà ôîí', + 'LBL_UNORDERED_LIST' : 'Íåïîäðåäåí ñïèñúê', + 'LBL_STATUS' : 'Ñàòóñ', + 'LBL_READONLY' : 'ñàìî çà ÷åòåíå', + 'LBL_CREATED' : 'Ñúçäàäåí', + 'LBL_MODIFIED' : 'Ìîäèôèöèðàí', + 'LBL_SHOW_COLUMNS' : 'Ïîêàæè êîëîíè', + 'LBL_MOVE' : 'Ïðåìåñòè', + 'LBL_OPTIONS' : 'Îïöèè', + 'LBL_OK' : 'ÎÊ', + 'LBL_DIRECTORY' : 'Äèðåêòîðèÿ', + 'LBL_CREATE' : 'Ñúçäàé', + 'LBL_BUGREPORT' : 'Áúã-ðåïîðò', + 'LBL_INSTALL' : 'Èíñòàëèðàé', + 'LBL_UPDATE' : 'Àêòóàëèçèðàé', + 'LBL_REMOVE' : 'Ïðåìàõíè', + 'LBL_SHOW_SIDEBAR' : 'покажи страничен бар', + 'LBL_BACKGROUND' : 'Фон', + 'LBL_DESKTOP' : 'Работен плот', + 'LBL_PANEL' : 'Панел', + 'LBL_POSITION' : 'Позиция', + 'LBL_ONTOP' : 'Най-отгоре', + 'LBL_ITEMS' : 'Обекти', + 'LBL_GENERAL': 'Основен' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.no_NO = { + 'ERR_FILE_OPEN' : 'Feil ved åpning av fil', + 'ERR_WM_NOT_RUNNING' : 'Window Manager kjører ikke', + 'ERR_FILE_OPEN_FMT' : 'Filen \'**{0}**\' kunne ikke bli åpnet', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Fant ingen Applikasjoner som støtter \'{0}\' filer', + 'ERR_APP_LAUNCH_FAILED' : 'Klarte ikke starte Applikasjon', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'En feil oppstod ved oppstart av: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Applikasjonen \'{0}\' construct feilet: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Applikasjonen \'{0}\' init() feilet: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Applikasjonen ressursjer mangler for \'{0}\', eller de feilet under lasting!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Applikasjonen \'{0}\' preloading feilet: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Applikasjonen \'{0}\' kjører allerede og bare en instans er tillatt!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Klarte ikke starte \'{0}\'. Manifest ble ikke funnet!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Klarte ikke starte \'{0}\'. Nettleseren din støtter ikke: {1}', + 'ERR_NO_WM_RUNNING' : 'Window Manager kjører ikke', + 'ERR_CORE_INIT_FAILED' : 'Klarte ikke starte OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'En feil oppstod under oppstart av OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Kan ikke starte OS.js: Ingen window manager definert!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Kan ikke starte OS.js: Window Manager startet ikke: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Kan ikke starte OS.js: Feil under forhåndslasting...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Feilrapport', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'En uventet feil eller bug oppstod.', + 'ERR_APP_API_ERROR' : 'Applikasjon API feil', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Applikasjon {0} feilet under operasjonen \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Mangler argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Ukjent feil', + 'ERR_OPERATION_TIMEOUT' : 'Tidsavbrudd i operasjon', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Tidsavbrudd i operasjon ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' expects \'{1}\' to be a \'{2}\', \'{3}\' given', + 'ERR_WIN_DUPLICATE_FMT' : 'Du har allerede et Window med navnet \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimiser', + 'WINDOW_MAXIMIZE' : 'Maksimer', + 'WINDOW_RESTORE' : 'Gjenopprett', + 'WINDOW_CLOSE' : 'Lukk', + 'WINDOW_ONTOP_ON' : 'På topp (På)', + 'WINDOW_ONTOP_OFF': 'På topp (Av)', + 'TITLE_SIGN_OUT' : 'Logg ut', + 'TITLE_SIGNED_IN_AS_FMT' : 'Logget inn som: {0}', + 'ERR_LOGIN_FMT' : 'Login feil: {0}', + 'ERR_LOGIN_INVALID' : 'Ugyldig innlogging', + 'ERR_NO_SESSION': 'Ingen sessjon er aktiv. Vil du laste på nytt?', + 'MSG_SESSION_WARNING' : 'Er du sikker på at du vil avslutte OS.js? Du vil tape alle ulagrede data!', + 'BUGREPORT_MSG' : 'Vennligst rapporter dette problemet hvis du tror det er en feil.\nLegg ved en beskrivelse om hvordan problemet oppstod og hvordan man kan reprodusere feilen.', + 'SERVICENOTIFICATION_TOOLTIP' : 'Innloget i eksterne tjenester: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Fatal Feil', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR Feil: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Logg ut (Avslutt)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Logger ut bruker \'{0}\'.\nVil du lagre gjeldende sessjon?', + 'DIALOG_CLOSE' : 'Lukk', + 'DIALOG_CANCEL': 'Avbryt', + 'DIALOG_APPLY' : 'Angi', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Advarsel Dialog', + 'DIALOG_COLOR_TITLE' : 'Farge Dialog', + 'DIALOG_COLOR_R' : 'Rød: {0}', + 'DIALOG_COLOR_G' : 'Grønn: {0}', + 'DIALOG_COLOR_B' : 'Blå: {0}', + 'DIALOG_COLOR_A' : 'Alfa: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Bekreft Dialog', + 'DIALOG_ERROR_MESSAGE' : 'Beskjed', + 'DIALOG_ERROR_SUMMARY' : 'Oppsummering', + 'DIALOG_ERROR_TRACE' : 'Trace', + 'DIALOG_ERROR_BUGREPORT' : 'Bugreport', + 'DIALOG_FILE_SAVE' : 'Lagre', + 'DIALOG_FILE_OPEN' : 'Åpne', + 'DIALOG_FILE_MKDIR' : 'Ny Mappe', + 'DIALOG_FILE_MKDIR_MSG' : 'Lage ny mappe i **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Vil du overskrive filen \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Visningstype', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Liste-visning', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Tre-visining', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Ikon-visning', + 'DIALOG_FILE_ERROR' : 'FileDialog Error', + 'DIALOG_FILE_ERROR_SCANDIR': 'Klarte ikke liste innhold for mappen \'{0}\' fordi en feil oppstod', + 'DIALOG_FILE_ERROR_FIND': 'Klarte ikke søke i mappen \'{0}\' fordi en feil oppstod', + 'DIALOG_FILE_MISSING_FILENAME' : 'Du må velge en fil eller skrive inn filnavn!', + 'DIALOG_FILE_MISSING_SELECTION': 'Du må velge en fil!', + 'DIALOG_FILEINFO_TITLE' : 'Fil Informasion', + 'DIALOG_FILEINFO_LOADING' : 'Laste informasjon for filen: {0}', + 'DIALOG_FILEINFO_ERROR' : 'FileInformationDialog Feil', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Klarte ikke hente informasjon for filen **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Klarte ikke hente informasjon for filen: {0}', + 'DIALOG_INPUT_TITLE' : 'Inndata Dialog', + 'DIALOG_FILEPROGRESS_TITLE' : 'Fil-operasjon fremgang', + 'DIALOG_FILEPROGRESS_LOADING' : 'Laster...', + 'DIALOG_UPLOAD_TITLE' : 'Opplasting Dialog', + 'DIALOG_UPLOAD_DESC' : 'Opplasting fil til **{0}**.
Maksimum størrelse: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Laster opp \'{0}\' ({1} {2}) til {3}', + 'DIALOG_UPLOAD_MSG' : 'Laster opp fil...', + 'DIALOG_UPLOAD_FAILED' : 'Opplasting feilet', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Opplastingen feilet', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Ukjent årsak...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Avbrutt av bruker...', + 'DIALOG_UPLOAD_TOO_BIG': 'Fil er for stor', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Fil er for stor, større en {0}', + 'DIALOG_FONT_TITLE' : 'Tekst Dialog', + 'DIALOG_APPCHOOSER_TITLE' : 'Velg Applikasjon', + 'DIALOG_APPCHOOSER_MSG' : 'Velg en applikasjon for åpning', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Du må velge en applikasjon', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Bruk som standard for {0}', + 'GAPI_DISABLED' : 'GoogleAPI Modul dekativert eller ikke konfigurert', + 'GAPI_SIGN_OUT' : 'Logg ut av Google API Services', + 'GAPI_REVOKE' : 'Tilbakekall tillatelse og Logg ut', + 'GAPI_AUTH_FAILURE' : 'Google API autentisering feilet eller tok ikke sted', + 'GAPI_AUTH_FAILURE_FMT' : 'Klarte ikke autentisere: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Klarte ikke laste Google API', + 'WLAPI_DISABLED' : 'Windows Live API Modul deaktivert eller ikke konfigurert', + 'WLAPI_SIGN_OUT' : 'Logg ut av Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Klarte ikke laste Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Klarte ikke logge inn Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Klarte ikke logge inn Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API returnerte {0} status', + 'IDB_MISSING_DBNAME' : 'Kan ikke opprette IndexedDB uten databasenavn', + 'IDB_NO_SUCH_ITEM' : 'Item ble ikke funnet', + 'ERR_VFS_FATAL' : 'Fatal Feil', + 'ERR_VFS_UNAVAILABLE' : 'Ikke tilgjenglig', + 'ERR_VFS_FILE_ARGS' : 'File forventer minst èt argument', + 'ERR_VFS_NUM_ARGS' : 'Ikke not argumenter', + 'ERR_VFS_EXPECT_FILE' : 'Forventer èt Fil-objekt', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Forventer èt kilde Fil-objekt', + 'ERR_VFS_EXPECT_DST_FILE' : 'Forventer èt destinasjon Fil-objekt', + 'ERR_VFS_FILE_EXISTS' : 'Destinasjonen finnes allerede', + 'ERR_VFS_TARGET_NOT_EXISTS': 'Destinasjon finnes ikke', + 'ERR_VFS_TRANSFER_FMT' : 'En feil oppstod under overføring av filen: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Kan ikke laste opp uten destinasjon', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Kan ikke laste opp uten noen filer definert', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Fil-opplasting feilet: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Fil-opplastingen ble avbrutt', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Kan ikke laste ned uten en sti', + 'ERR_VFS_DOWNLOAD_FAILED' : 'En feil oppstod under nedlasting: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY' : 'Respons var tom', + 'ERR_VFSMODULE_INVALID' : 'Ugyldig VFS Modul', + 'ERR_VFSMODULE_INVALID_FMT' : 'Ugyldig VFS Modul: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Ugyldig VFS Metode', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Ugyldig VFS Metode: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Ugyldig VFS Modul type', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Ugyldig VFS Modul type: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Ugyldig VFS Modul konfigurasjon', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Ugyldig VFS Modul konfigurasjon: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'VFS Modul allerede montert', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'VFS Modul \'{0}\' allerede montert', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'VFS Modul ikke montert', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'VFS Modul \'{0}\' ikke montert', + 'ERR_VFSMODULE_EXCEPTION' : 'VFS Modul Exception', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'VFS Modul Exception: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'Ingen VFS Modul lik {0}. Fil sti eller format ?', + 'ERR_VFSMODULE_READONLY' : 'VFS Modul er bare lesbar', + 'ERR_VFSMODULE_READONLY_FMT' : 'VFS Modul er bare lesbar: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Laster ned fil', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR Feil', + 'ERR_VFSMODULE_ROOT_ID' : 'Klarte ikke hente id for rotmappe', + 'ERR_VFSMODULE_NOSUCH' : 'Filen eksister ikke', + 'ERR_VFSMODULE_PARENT' : 'Parent finnes ikke', + 'ERR_VFSMODULE_PARENT_FMT' : 'Klarte ikke lete opp parent: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Klarte ikke skanne mappe', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Klarte ikke skanne mappe: {0}', + 'ERR_VFSMODULE_READ' : 'Klarte ikke lese fil', + 'ERR_VFSMODULE_READ_FMT' : 'Klarte ikke lese fil: {0}', + 'ERR_VFSMODULE_WRITE' : 'Klarte ikke skrive fil', + 'ERR_VFSMODULE_WRITE_FMT' : 'Klarte ikke skrive fil: {0}', + 'ERR_VFSMODULE_COPY' : 'Klarte ikke kopiere', + 'ERR_VFSMODULE_COPY_FMT' : 'Klarte ikke kopiere: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Klarte ikke slette fil', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Klarte ikke slette fil: {0}', + 'ERR_VFSMODULE_MOVE' : 'Klarte ikke flytte fil', + 'ERR_VFSMODULE_MOVE_FMT' : 'Klarte ikke flytte fil: {0}', + 'ERR_VFSMODULE_EXIST' : 'Klarte ikke sjekke om fil eksisterer', + 'ERR_VFSMODULE_EXIST_FMT' : 'Klarte ikke sjekke om fil eksisterer: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Klarte ikke hente fil-informasjon', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Klarte ikke hente fil-informasjon: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Klarte ikke lage mappe', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Klarte ikke lage mapp: {0}', + 'ERR_VFSMODULE_MKFILE' : 'Klarte ikke lage fil', + 'ERR_VFSMODULE_MKFILE_FMT' : 'Klarte ikke lage fil: {0}', + 'ERR_VFSMODULE_URL' : 'Klarte ikke hente URL for fil', + 'ERR_VFSMODULE_URL_FMT' : 'Klarte ikke hente URL for fil: {0}', + 'ERR_VFSMODULE_TRASH' : 'Klarte ikke flytte fil til søppelkassen', + 'ERR_VFSMODULE_TRASH_FMT' : 'Klarte ikke flytte fil til søppelkassen: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Klarte ikke flytte fil ut av søppelkassen', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Klarte ikke flytte fil ut av søppelkassen: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Klarte ikke tømme søppel', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Klarte ikke tømme søppel: {0}', + 'ERR_VFSMODULE_FIND' : 'Klarte ikke søke', + 'ERR_VFSMODULE_FIND_FMT' : 'Klarte ikke søke: {0}', + 'ERR_VFSMODULE_FREESPACE' : 'Klarte ikke hente ledig plass', + 'ERR_VFSMODULE_FREESPACE_FMT' : 'Klarte ikke hente ledig plass: {0}', + 'ERR_VFSMODULE_EXISTS' : 'Klarte ikke sjekke destinasjon', + 'ERR_VFSMODULE_EXISTS_FMT' : 'Klarte ikke check sjekke destinasjon: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Du er logget inn i Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Logg ut fra Dropbox API', + 'ONEDRIVE_ERR_RESOLVE' : 'Klarte ikke løse sti: fant ikke filen', + 'ZIP_PRELOAD_FAIL' : 'Klarte ikke laste zip.js', + 'ZIP_VENDOR_FAIL' : 'zip.js bliblioteket ble ikke funnet!', + 'ZIP_NO_RESOURCE' : 'Ingen zip ressursj angitt', + 'ZIP_NO_PATH' : 'Ingen sti angitt', + 'SEARCH_LOADING': 'Søker...', + 'SEARCH_NO_RESULTS': 'Ingen resultater', + 'ERR_PACKAGE_EXISTS': 'Kan ikke fortsette. Pakkedestinasjonen finnes allerede!', + 'ERR_FILE_APP_OPEN' : 'Kan ikke åpne filen', + 'ERR_FILE_APP_OPEN_FMT' : 'Filen {0} ble ikke åpnet fordi MIME {1} ikke er støttet', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Filen {0} ble ikke åpnet', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Filen {0} ble ikke lagret', + 'ERR_GENERIC_APP_FMT' : '{0} Applikasjon Feil', + 'ERR_GENERIC_APP_ACTION_FMT': 'Klarte ikke utføre operasjon \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Ukjent feil', + 'ERR_GENERIC_APP_REQUEST' : 'En feil oppstod under håndteringen av din forespursel', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Fatal Feil: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Forkast endringer?', + 'MSG_FILE_CHANGED' : 'Filen har blitt endret. Last inn på nytt?', + 'MSG_APPLICATION_WARNING' : 'Applikasjon-advarsel', + 'MSG_MIME_OVERRIDE' : 'Filtypen "{0}" er ikke støttet, bruker "{1}" istedet.', + 'LBL_UNKNOWN' : 'Ukjent', + 'LBL_APPEARANCE' : 'Utseende', + 'LBL_USER' : 'Bruker', + 'LBL_NAME' : 'Navn', + 'LBL_APPLY' : 'Angi', + 'LBL_FILENAME' : 'Filnavn', + 'LBL_PATH' : 'Sti', + 'LBL_SIZE' : 'Størrelse', + 'LBL_TYPE' : 'Type', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Laster', + 'LBL_SETTINGS' : 'Instillinger', + 'LBL_ADD_FILE' : 'Legg til fil', + 'LBL_COMMENT' : 'Kommenter', + 'LBL_ACCOUNT' : 'Konto', + 'LBL_CONNECT' : 'Koble til', + 'LBL_ONLINE' : 'Online', + 'LBL_OFFLINE' : 'Offline', + 'LBL_AWAY' : 'Borte', + 'LBL_BUSY' : 'Opptatt', + 'LBL_CHAT' : 'Snakk', + 'LBL_HELP' : 'Hjelp', + 'LBL_ABOUT' : 'Om', + 'LBL_PANELS' : 'Paneler', + 'LBL_LOCALES' : 'Lokalisering', + 'LBL_THEME' : 'Temaer', + 'LBL_COLOR' : 'Farge', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Drep', + 'LBL_ALIVE' : 'I live', + 'LBL_INDEX' : 'Indeks', + 'LBL_ADD' : 'Legg til', + 'LBL_FONT' : 'Skrift', + 'LBL_YES' : 'Ja', + 'LBL_NO' : 'Nei', + 'LBL_CANCEL' : 'Avbryt', + 'LBL_TOP' : 'Topp', + 'LBL_LEFT' : 'Venstre', + 'LBL_RIGHT' : 'Høyre', + 'LBL_BOTTOM' : 'Bunn', + 'LBL_CENTER' : 'Midt', + 'LBL_FILE' : 'Fil', + 'LBL_NEW' : 'Ny', + 'LBL_OPEN' : 'Åpne', + 'LBL_SAVE' : 'Lagre', + 'LBL_SAVEAS' : 'Lagre som...', + 'LBL_CLOSE' : 'Lukk', + 'LBL_MKDIR' : 'Lag Mappe', + 'LBL_UPLOAD' : 'Last opp', + 'LBL_VIEW' : 'Visning', + 'LBL_EDIT' : 'Rediger', + 'LBL_RENAME' : 'Navngi', + 'LBL_DELETE' : 'Slett', + 'LBL_OPENWITH' : 'Åpne Med ...', + 'LBL_ICONVIEW' : 'Ikon-visning', + 'LBL_TREEVIEW' : 'Tre-visning', + 'LBL_LISTVIEW' : 'Liste-visning', + 'LBL_REFRESH' : 'Gjennoppfrisk', + 'LBL_VIEWTYPE' : 'Visningstype', + 'LBL_BOLD' : 'Feit', + 'LBL_ITALIC' : 'Skeiv', + 'LBL_UNDERLINE' : 'Underlinjet', + 'LBL_REGULAR' : 'Normal', + 'LBL_STRIKE' : 'Gjennomstrøk', + 'LBL_INDENT' : 'Innrykk', + 'LBL_OUTDENT' : 'Utrykk', + 'LBL_UNDO' : 'Angre', + 'LBL_REDO' : 'Gjør om igjen', + 'LBL_CUT' : 'Kutt', + 'LBL_UNLINK' : 'Fjern lenke', + 'LBL_COPY' : 'Kopier', + 'LBL_PASTE' : 'Lim inn', + 'LBL_INSERT' : 'Sett inn', + 'LBL_IMAGE' : 'Bilde', + 'LBL_LINK' : 'Lenke', + 'LBL_DISCONNECT' : 'Koble fra', + 'LBL_APPLICATIONS' : 'Applikasjoner', + 'LBL_ADD_FOLDER' : 'Legg til mappe', + 'LBL_INFORMATION' : 'Informasjon', + 'LBL_TEXT_COLOR' : 'Tekst-farge', + 'LBL_BACK_COLOR' : 'Bakgrunn-farge', + 'LBL_RESET_DEFAULT' : 'Omstill til standard', + 'LBL_DOWNLOAD_COMP' : 'Last ned til datamaskin', + 'LBL_ORDERED_LIST' : 'Ordnet liste', + 'LBL_BACKGROUND_IMAGE' : 'Bakgrunnsbilde', + 'LBL_BACKGROUND_COLOR' : 'Bakgrunnsfarge', + 'LBL_UNORDERED_LIST' : 'Uordnet Liste', + 'LBL_SHOW_SIDEBAR' : 'Vis Sidebar', + 'LBL_SEARCH': 'Søk', + 'LBL_STATUS': 'Status', + 'LBL_READONLY': 'Kun lesbar', + 'LBL_CREATED': 'Opprettet', + 'LBL_MODIFIED': 'Modifisert', + 'LBL_SHOW_COLUMNS': 'Vis Kolonner', + 'LBL_MOVE': 'Flytt', + 'LBL_OPTIONS': 'Opsjoner', + 'LBL_OK': 'OK', + 'LBL_DIRECTORY': 'Mappe', + 'LBL_CREATE': 'Opprett', + 'LBL_BUGREPORT': 'Bug-rapport', + 'LBL_INSTALL': 'Installer', + 'LBL_UPDATE': 'Oppdater', + 'LBL_REMOVE': 'Fjern', + 'LBL_SHOW_NAVIGATION': 'Vis navigasjon', + 'LBL_SHOW_HIDDENFILES': 'Vis skjulte filer', + 'LBL_SHOW_FILEEXTENSIONS': 'Vis fil-utvidelser', + 'LBL_MOUNT': 'Montere', + 'LBL_DESCRIPTION': 'Beskrivelse', + 'LBL_USERNAME': 'Brukernavn', + 'LBL_PASSWORD': 'Passord', + 'LBL_HOST': 'Vert', + 'LBL_NAMESPACE': 'Navneplass', + 'LBL_BACK': 'Tilbake', + 'LBL_ICONS': 'Ikoner', + 'LBL_ICON': 'Ikon', + 'LBL_UNINSTALL': 'Avinstaller', + 'LBL_REGENERATE': 'Regenerer', + 'LBL_DESKTOP': 'Skrivebord', + 'LBL_WINDOWMANAGER': 'Vindu-håndterer', + 'LBL_HOTKEY': 'Snarknapp', + 'LBL_HOTKEYS': 'Snarknapper', + 'LBL_MOUNTS': 'Monteringer', + 'LBL_ID': 'ID', + 'LBL_APPLICATION': 'Applikasjon', + 'LBL_SCOPE': 'Skop', + 'LBL_HIDE': 'Skjul', + 'LBL_REPOSITORY': 'Repository', + 'LBL_VERSION': 'Versjon', + 'LBL_AUTHOR': 'Forfatter', + 'LBL_GROUPS': 'Grupper', + 'LBL_AUTOHIDE': 'Auto-skjul', + 'LBL_PERSONAL': 'Personlig', + 'LBL_SYSTEM': 'System', + 'LBL_STARTING': 'Starter', + 'LBL_SOUNDS': 'Lyder', + 'LBL_STORE': 'Butikk', + 'LBL_LOCALE': 'Språkvalg', + 'LBL_PACKAGE': 'Pakke', + 'LBL_PACKAGES': 'Pakker', + 'LBL_INPUT': 'Inndata', + 'LBL_MISC': 'Annet', + 'LBL_OTHER': 'Annet', + 'LBL_USERS': 'Brukere', + 'LBL_FONTS': 'Skrift', + 'LBL_BACKGROUND' : 'Bakgrunn', + 'LBL_PANEL' : 'Panel', + 'LBL_POSITION' : 'Posisjon', + 'LBL_OPACITY' : 'Gjennomsiktighet', + 'LBL_ONTOP' : 'Topp', + 'LBL_ITEMS' : 'Objekter', + 'LBL_GENERAL' : 'Generelt' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.de_DE = { + 'ERR_FILE_OPEN' : 'Fehler beim Öffnen der Datei', + 'ERR_WM_NOT_RUNNING': 'Fenster-Manager wird nicht ausgeführt', + 'ERR_FILE_OPEN_FMT' : 'Die Datei \'**{0}**\' kann nicht geöffnet werden', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Keine Anwendung gefunden, die den Datentyp \'{0}\' unterstützt', + 'ERR_APP_LAUNCH_FAILED' : 'Fehler beim Starten der Anwendung', + 'ERR_APP_LAUNCH_FAILED_FMT': 'Ein Fehler ist aufgetreten, während des Versuchs \'{0}\' zu starten', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Anwendung \'{0}\' construct gescheitert: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Anwendung \'{0}\' init() gescheitert: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Anwendungsressourcen fehlen oder wurden nicht geladen für: {0}', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Anwendung \'{0}\' preloading gescheitert: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Anwendung \'{0}\' ist bereits gestartet und erlaubt nur eine Instanz', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : '\'{0}\' konnte nicht gestartet werden. Anwendungsmanifest nicht gefunden!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Klarte ikke starte \'{0}\'. Uw browser ondersteunt geen: {1}', + 'ERR_NO_WM_RUNNING' : 'Es wird kein Fenster-Manager ausgeführt', + 'ERR_CORE_INIT_FAILED' : 'OS.js konnte nicht initialisiert werden', + 'ERR_CORE_INIT_FAILED_DESC' : 'Während der Initialisirung von OS.js ist ein Fehler aufgetreten', + 'ERR_CORE_INIT_NO_WM' : 'OS.js konnte nicht gestartet werden: Fenster-Manager nicht festgelegt!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'OS.js konnte nicht gestartet werden: Fenster-Manager konnte nicht gestartet werden: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED': 'OS.js konnte nicht gestartet werden: Resourssen konnten nicht vorab geladen werden...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Fehlerbericht', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Ein unerwarteter Fehler ist aufgetreten, möglicherweise ein Bug', + 'ERR_APP_API_ERROR' : 'Anwendungs API Fehler', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Anwendung {0} konnte Aktion nicht ausführen \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Fehlendes Argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Unbekannter Fehler', + 'ERR_WIN_DUPLICATE_FMT' : 'Sie haben bereits ein Fenster namens \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimieren', + 'WINDOW_MAXIMIZE' : 'Maximieren', + 'WINDOW_RESTORE' : 'Wiederherstellen', + 'WINDOW_CLOSE' : 'Schließen', + 'WINDOW_ONTOP_ON' : 'Im Vordergrund - Aktivieren', + 'WINDOW_ONTOP_OFF': 'Im Vordergrund - Deaktivieren', + 'TITLE_SIGN_OUT' : 'Abmelden', + 'TITLE_SIGNED_IN_AS_FMT' : 'Angemeldet als: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Abmelden (Exit)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Benutzer wird abgemeldet \'{0}\'.\nWollen Sie die aktuelle Sitzung speichern?', + 'DIALOG_CLOSE' : 'Schließen', + 'DIALOG_CANCEL': 'Abbrechen', + 'DIALOG_APPLY' : 'Übernehmen', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Warnungsdialog', + 'DIALOG_COLOR_TITLE' : 'Farb-Dialog', + 'DIALOG_COLOR_R' : 'Rot: {0}', + 'DIALOG_COLOR_G' : 'Grün: {0}', + 'DIALOG_COLOR_B' : 'Blau: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Bestätigungsdialog', + 'DIALOG_ERROR_MESSAGE' : 'Meldung', + 'DIALOG_ERROR_SUMMARY' : 'Zusammenfassung', + 'DIALOG_ERROR_TRACE' : 'Trace', + 'DIALOG_ERROR_BUGREPORT' : 'Fehlerbericht', + 'DIALOG_FILE_SAVE' : 'Speichern', + 'DIALOG_FILE_OPEN' : 'Öffnen', + 'DIALOG_FILE_MKDIR' : 'Verzeichnis erstellen', + 'DIALOG_FILE_MKDIR_MSG' : 'Erstelle ein neues Verzeichnis in **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Sind Sie sicher, dass Sie die Datei \'{0}\' überschreiben wollen?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Ansichtstyp', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Liste', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Baum', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Symbole', + 'DIALOG_FILE_ERROR' : 'Datei-Dialog Fehler', + 'DIALOG_FILE_ERROR_SCANDIR': 'Verzeichnis \'{0}\' konnte nicht geöffnet werden', + 'DIALOG_FILE_MISSING_FILENAME' : 'Sie müssen eine Datei auswählen oder geben Sie einen neuen Dateinamen an!', + 'DIALOG_FILE_MISSING_SELECTION': 'Sie müssen eine Datei auswählen!', + 'DIALOG_FILEINFO_TITLE' : 'Dateiinformationen', + 'DIALOG_FILEINFO_LOADING' : 'Laster fil-informasjon for: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Dateiinformationen Dialog Fehler', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Fehler beim bekommen von Dateiinformationen für **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Fehler beim bekommen von Dateiinformationen für: {0}', + 'DIALOG_INPUT_TITLE' : 'Eingabedialog', + 'DIALOG_FILEPROGRESS_TITLE' : 'Fortschritt', + 'DIALOG_FILEPROGRESS_LOADING' : 'Lade...', + 'DIALOG_UPLOAD_TITLE' : 'Upload-Dialog', + 'DIALOG_UPLOAD_DESC' : 'Upload nach **{0}**.
Maximale Größe: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Hochladen von \'{0}\' ({1} {2}) von {3}', + 'DIALOG_UPLOAD_MSG' : 'Datei-Upload...', + 'DIALOG_UPLOAD_FAILED' : 'Upload fehlgeschlagen', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Der Upload ist fehlgeschlagen', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Unbekannter Grund...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Abbruch durch Benutzer...', + 'DIALOG_FONT_TITLE' : 'Schriftarten-Dialog', + 'DIALOG_APPCHOOSER_TITLE' : 'Wählen Sie eine Anwendung', + 'DIALOG_APPCHOOSER_MSG' : 'Wählen Sie eine Anwendung zum Öffnen', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Sie müssen eine Anwendung auswählen', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Als Standartanwendung für {0} verwenden', + 'GAPI_DISABLED' : 'GoogleAPI Modul ist nicht konfiguriert oder aktiviert', + 'GAPI_NOTIFICATION_TITLE' : 'Sie sind bei Google API angemeldet', + 'GAPI_SIGN_OUT' : 'Von Google API Dienst abmelden', + 'GAPI_REVOKE' : 'Berechtigungen wiederrufen und abmelden', + 'GAPI_AUTH_FAILURE' : 'Google API Authentifizierung ist fehlgeschlagen oder fand nicht statt', + 'GAPI_AUTH_FAILURE_FMT' : 'Fehler beim Authentifizieren: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Konnte Google API nicht laden', + 'IDB_MISSING_DBNAME' : 'IndexedDB kann nicht ohne Datenbankname erstellt werden', + 'IDB_NO_SUCH_ITEM' : 'Keine Elemente', + 'ERR_VFS_FATAL' : 'Schwerwiegender Fehler', + 'ERR_VFS_FILE_ARGS' : 'Datei erwartet mindestens ein Argument', + 'ERR_VFS_NUM_ARGS' : 'Nicht genug Argumente', + 'ERR_VFS_EXPECT_FILE' : 'Erwartet ein Datei-Objekt', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Erwartet einen Quelldatei-Objekt', + 'ERR_VFS_EXPECT_DST_FILE' : 'Erwartet ein Zieldatei-Objekt', + 'ERR_VFS_FILE_EXISTS' : 'Ziel existiert bereits', + 'ERR_VFS_TRANSFER_FMT' : 'Während des übertragen zwischen Speicher ist ein Fehler aufgetreten: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Eine Datei ohne Ziel kann nicht hochgeladen werden', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Ohne Dateien zu definieren kann nicht hochgeladen werden', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Datei-Upload fehlgeschlagen: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Datei-Upload wurde abgebrochen', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Kann keinen Pfad ohne angegebenen Pfad herunterladen', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Während des Downloads ist ein Fehler aufgetreten: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Datei herunterladen', + 'ERR_FILE_APP_OPEN' : 'Datei kann nicht geöffnet werden', + 'ERR_FILE_APP_OPEN_FMT' : 'Die Datei {0} kann nicht geöffnet werden, da der Dateityp (MIME) {1} nicht unterstützt wird', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Die Datei {0} konnte nicht geöffnet werden', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Die Datei {0} konnte nicht gespeichert werden', + 'ERR_GENERIC_APP_FMT' : '{0} Anwendungsfehler', + 'ERR_GENERIC_APP_ACTION_FMT': 'Konnte Aktion nicht durchführen: \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Unbekannter Fehler', + 'ERR_GENERIC_APP_REQUEST' : 'Während Ihres Requests ist ein Fehler aufgetreten', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Schwerwiegender Fehler: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Aktuelles Dokument verwerfen?', + 'MSG_FILE_CHANGED' : 'Die Datei wurde geändert. Neuladen?', + 'MSG_APPLICATION_WARNING' : 'Anwendungswarnung', + 'MSG_MIME_OVERRIDE' : 'Der Dateityp "{0}" wird nicht unterstützt, benutzen Sie "{1}" stattdessen.', + 'LBL_UNKNOWN' : 'Unbekannt', + 'LBL_APPEARANCE' : 'Aussehen', + 'LBL_USER' : 'Benutzer', + 'LBL_NAME' : 'Name', + 'LBL_APPLY' : 'Übernehmen', + 'LBL_FILENAME' : 'Dateiname', + 'LBL_PATH' : 'Pfad', + 'LBL_SIZE' : 'Größe', + 'LBL_TYPE' : 'Type', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Lade', + 'LBL_SETTINGS' : 'Einstellungen', + 'LBL_ADD_FILE' : 'Datei hinzufügen', + 'LBL_COMMENT' : 'Kommentar', + 'LBL_ACCOUNT' : 'Konto', + 'LBL_CONNECT' : 'Verbinden', + 'LBL_ONLINE' : 'Online', + 'LBL_OFFLINE' : 'Offline', + 'LBL_AWAY' : 'Abwesend', + 'LBL_BUSY' : 'Beschäftigt', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Hilfe', + 'LBL_ABOUT' : 'Über', + 'LBL_PANELS' : 'Panel', + 'LBL_LOCALES' : 'Lokalisierung', + 'LBL_THEME' : 'Design', + 'LBL_COLOR' : 'Farbe', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Beenden (Kill)', + 'LBL_ALIVE' : 'Aktiv', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Hinzufügen', + 'LBL_FONT' : 'Schriftart', + 'LBL_YES' : 'Ja', + 'LBL_NO' : 'Nein', + 'LBL_CANCEL' : 'Abbrechen', + 'LBL_TOP' : 'Oben', + 'LBL_LEFT' : 'Links', + 'LBL_RIGHT' : 'Right', + 'LBL_BOTTOM' : 'Unten', + 'LBL_CENTER' : 'Zentriert', + 'LBL_FILE' : 'Datei', + 'LBL_NEW' : 'Neu', + 'LBL_OPEN' : 'Öffnen', + 'LBL_SAVE' : 'Speichern', + 'LBL_SAVEAS' : 'Speichern unter...', + 'LBL_CLOSE' : 'Schließen', + 'LBL_MKDIR' : 'Verzeichnis erstellen', + 'LBL_UPLOAD' : 'Hochladen', + 'LBL_VIEW' : 'Ansicht', + 'LBL_EDIT' : 'Bearbeiten', + 'LBL_RENAME' : 'Umbenennen', + 'LBL_DELETE' : 'Löschen', + 'LBL_OPENWITH' : 'Öffnen mit...', + 'LBL_ICONVIEW' : 'Symbole', + 'LBL_TREEVIEW' : 'Baum', + 'LBL_LISTVIEW' : 'Liste', + 'LBL_REFRESH' : 'Aktualisieren', + 'LBL_VIEWTYPE' : 'Ansichtstyp', + 'LBL_BOLD' : 'Fett', + 'LBL_ITALIC' : 'Kursiv', + 'LBL_UNDERLINE' : 'Unterstrichen', + 'LBL_REGULAR' : 'Regelmäßig', + 'LBL_STRIKE' : 'Gjennomstrek', + 'LBL_INDENT' : 'Einzug', + 'LBL_OUTDENT' : 'Negativeinzug', + 'LBL_UNDO' : 'Rückgängig', + 'LBL_REDO' : 'Vorwärts', + 'LBL_CUT' : 'Ausschneiden', + 'LBL_UNLINK' : 'Verknüpfung entfernen', + 'LBL_COPY' : 'Kopieren', + 'LBL_PASTE' : 'Einfügen', + 'LBL_INSERT' : 'Einfügen', + 'LBL_IMAGE' : 'Bild', + 'LBL_LINK' : 'Verknüpfung', + 'LBL_DISCONNECT' : 'Disconnect', + 'LBL_APPLICATIONS' : 'Anwendung', + 'LBL_ADD_FOLDER' : 'Verzeichnis hinzufügen', + 'LBL_INFORMATION' : 'Information', + 'LBL_TEXT_COLOR' : 'Textfarbe', + 'LBL_BACK_COLOR' : 'Hintergrundfarbe', + 'LBL_RESET_DEFAULT' : 'Werkseinstellungen wiederherstellen', + 'LBL_DOWNLOAD_COMP' : 'Auf PC herunterladen', + 'LBL_ORDERED_LIST' : 'Sortierte Liste', + 'LBL_BACKGROUND_IMAGE' : 'Hintergrundbild', + 'LBL_BACKGROUND_COLOR' : 'Hintergrundfarbe', + 'LBL_UNORDERED_LIST' : 'Unsortierte Liste', + 'LBL_SHOW_SIDEBAR' : 'Seitenleiste anzeigen', + 'LBL_BACKGROUND' : 'Hintergrund', + 'LBL_DESKTOP' : 'Arbeitsoberflächen', + 'LBL_PANEL' : 'Panel', + 'LBL_POSITION' : 'Position', + 'LBL_ONTOP' : 'Vordergrund', + 'LBL_ITEMS' : 'Items', + 'LBL_GENERAL': 'General' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.es_ES = { + 'ERR_FILE_OPEN' : 'Error abriendo archivo', + 'ERR_WM_NOT_RUNNING' : 'El gestor de ventanas no está en ejecución', + 'ERR_FILE_OPEN_FMT' : 'No se pudo abrir el fichero \'**{0}**\'', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'No se pudo encontrar ninguna aplicación asociada a los archivos \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Error abriendo aplicación', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Se produjo un error intentando ejecutar: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Error construyendo la aplicación \'{0}\': {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Error en init() de la applicación \'{0}\': {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : '¡La aplicación \'{0}\' no pudo obtener los recursos necesarios, o falló al cargarse!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Error en la precarga de la application \'{0}\': \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : '¡La aplicación \'{0}\' ya está ejecutándose y sólo permite una instancia!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : '¡Error al abrir \'{0}\'. No se encontraron los datos del manifiesto de la aplicación!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : '¡Error al abrir \'{0}\'. Tu explorador no da soporte: {1}', + 'ERR_NO_WM_RUNNING' : 'Ningún gestor de ventanas en ejecución', + 'ERR_CORE_INIT_FAILED' : 'Error inicializando OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Se produjo un error inicializando OS.js', + 'ERR_CORE_INIT_NO_WM' : 'No se puede lanzar OS.js: ¡No se definió ningún gestor de ventanas!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'No se puede lanzar OS.js: se fallo al lanzar el gestor de ventanas: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'No se puede lanzar OS.js: se falló precargando recursos...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Informe de errores de JavaScript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Error inesperado, puede que sea un bug.', + 'ERR_APP_API_ERROR' : 'Error del API de la aplicación', + 'ERR_APP_API_ERROR_DESC_FMT' : 'La aplicación {0} no pudo realizar la operación \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Falta un argumento: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Error desconocido', + 'ERR_WIN_DUPLICATE_FMT' : 'Ya tienes una ventana llamada \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimizar', + 'WINDOW_MAXIMIZE' : 'Maximizar', + 'WINDOW_RESTORE' : 'Restaurar', + 'WINDOW_CLOSE' : 'Cerrar', + 'WINDOW_ONTOP_ON' : 'En primer plano (Activar)', + 'WINDOW_ONTOP_OFF': 'En primer plano (Desactivar)', + 'TITLE_SIGN_OUT' : 'Sesión finalizada', + 'TITLE_SIGNED_IN_AS_FMT' : 'Sesión iniciada como: {0}', + 'MSG_SESSION_WARNING' : '¿Estás seguro de que quieres salir de OS.js? Se perderán todas las configuraciones y datos que no se hayan guardado', + 'BUGREPORT_MSG' : 'Por favor, informa de esto si piensas que es un bug.\nIncluye una breve descripción sobre cómo se produjo el probleñam y si es posible, cómo reproducirlo. Gracias', + 'SERVICENOTIFICATION_TOOLTIP' : 'Se accedió a servicios externos: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Error fatal', + 'ERR_UTILS_XHR_FMT' : 'Error AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Finalizar sesión (Salir)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Usuario \'{0}\' desconectando.\n¿Quieres guardar la sesión en curso?', + 'DIALOG_CLOSE' : 'Cerrar', + 'DIALOG_CANCEL': 'Cancelar', + 'DIALOG_APPLY' : 'Aplicar', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Diálogo de alerta', + 'DIALOG_COLOR_TITLE' : 'Diálogo de color', + 'DIALOG_COLOR_R' : 'Rojo: {0}', + 'DIALOG_COLOR_G' : 'Verde: {0}', + 'DIALOG_COLOR_B' : 'Azul: {0}', + 'DIALOG_COLOR_A' : 'Alfa: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Diálogo de confirmación', + 'DIALOG_ERROR_MESSAGE' : 'Mensaje', + 'DIALOG_ERROR_SUMMARY' : 'Resumen', + 'DIALOG_ERROR_TRACE' : 'Traza', + 'DIALOG_ERROR_BUGREPORT' : 'Informe de errores', + 'DIALOG_FILE_SAVE' : 'Guardar', + 'DIALOG_FILE_OPEN' : 'Abrir', + 'DIALOG_FILE_MKDIR' : 'Nueva carpeta', + 'DIALOG_FILE_MKDIR_MSG' : 'Crear una nueva carpeta en **{0}**', + 'DIALOG_FILE_OVERWRITE' : '¿Seguro que quieres sobreescribir el fichero \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Tipo de vista', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Vista de lista', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Vista de árbol', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Vista de icono', + 'DIALOG_FILE_ERROR' : 'Error en el diálogo de fichero', + 'DIALOG_FILE_ERROR_SCANDIR': 'Error listando el directorio \'{0}\' porque ocurrió un error', + 'DIALOG_FILE_MISSING_FILENAME' : '¡Tienes que seleccionar un archivo o introducir un nombre de archivo nuevo!', + 'DIALOG_FILE_MISSING_SELECTION': '¡Tienes que seleccionar un archivo!', + 'DIALOG_FILEINFO_TITLE' : 'Información de fichero', + 'DIALOG_FILEINFO_LOADING' : 'Cargando la información del fichero: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Error del diálogo de información de fichero', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'No se pudo obtener la información del fichero **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'No se pudo obtener la información del fichero: {0}', + 'DIALOG_INPUT_TITLE' : 'Diálogo de entrada', + 'DIALOG_FILEPROGRESS_TITLE' : 'Operación de archivo en progreso', + 'DIALOG_FILEPROGRESS_LOADING' : 'Cargando...', + 'DIALOG_UPLOAD_TITLE' : 'Diálogo de subida', + 'DIALOG_UPLOAD_DESC' : 'Subir archivo a **{0}**.
Tamaño máximo: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Subiendo \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Subiendo archivo...', + 'DIALOG_UPLOAD_FAILED' : 'Fallo en la subida', + 'DIALOG_UPLOAD_FAILED_MSG' : 'La subida ha fallado', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Razón desconocida...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Cancelado por el usuario...', + 'DIALOG_UPLOAD_TOO_BIG': 'El archivo es demasiado grande', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'El archivo es demasiado grande, excede los {0}', + 'DIALOG_FONT_TITLE' : 'Diálogo de tipografía', + 'DIALOG_APPCHOOSER_TITLE' : 'Elegir aplicación', + 'DIALOG_APPCHOOSER_MSG' : 'Elegir la aplicación a abrir', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Necesitas seleccionar una aplicación', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Usar como la aplicación por defecto para {0}', + 'GAPI_DISABLED' : 'El módulo GoogleAPI no está configurado o está desactivado', + 'GAPI_SIGN_OUT' : 'Desconectar de los servicios Google API', + 'GAPI_REVOKE' : 'Revocar permisos y desconectar', + 'GAPI_AUTH_FAILURE' : 'La autenticación en Google API falló, o no llegó a efectuarse', + 'GAPI_AUTH_FAILURE_FMT' : 'No se pudo autenticar: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'No se pudo cargar Google API', + 'WLAPI_DISABLED' : 'El módulo Windows Live API no está configurado o está desactivado', + 'WLAPI_SIGN_OUT' : 'Desconectar de los servicios Windows Live API', + 'WLAPI_LOAD_FAILURE' : 'No se pudo cargar Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'No se pudo acceder a Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'No se pudo acceder a Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API devolvió el estado {0}', + 'IDB_MISSING_DBNAME' : 'No se pudo crear IndexedDB sin un nombre de base de datos', + 'IDB_NO_SUCH_ITEM' : 'No existe ese elemento', + 'ERR_VFS_FATAL' : 'Error fatal', + 'ERR_VFS_UNAVAILABLE' : 'No disponible', + 'ERR_VFS_FILE_ARGS' : 'El archivo espera al menos un argumento', + 'ERR_VFS_NUM_ARGS' : 'Argumentos insuficientes', + 'ERR_VFS_EXPECT_FILE' : 'Se espera un objeto-fichero', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Se espera un origen objeto-fichero', + 'ERR_VFS_EXPECT_DST_FILE' : 'Se espera un destino objeto-fichero', + 'ERR_VFS_FILE_EXISTS' : 'El destino ya existe', + 'ERR_VFS_TRANSFER_FMT' : 'Se produjo un error al transferir entre almacenamientos: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'No se puede subir un fichero sin un destino', + 'ERR_VFS_UPLOAD_NO_FILES' : 'No se puede efectuar la subida si no hay archivos definidos', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Fallo en la subida: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Se canceló la subida del fichero', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'No se puede descargar una ruta sin una ruta', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Se produjo un error en la descarga: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'La respuesta estaba vacía', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Descargando fichero', + 'ERR_VFSMODULE_XHR_ERROR' : 'Error XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'No se pudo encontrar el identificador del directorio raíz', + 'ERR_VFSMODULE_NOSUCH' : 'El archivo no existe', + 'ERR_VFSMODULE_PARENT' : 'No existe el padre', + 'ERR_VFSMODULE_PARENT_FMT' : 'No se pudo localizar el padre: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'No se pudo analizar el directorio', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'No se pudo analizar el directorio: {0}', + 'ERR_VFSMODULE_READ' : 'No se pudo leer el fichero', + 'ERR_VFSMODULE_READ_FMT' : 'No se pudo leer el fichero: {0}', + 'ERR_VFSMODULE_WRITE' : 'No se pudo escribir el fichero', + 'ERR_VFSMODULE_WRITE_FMT' : 'No se pudo escribir el fichero: {0}', + 'ERR_VFSMODULE_COPY' : 'No se pudo copiar', + 'ERR_VFSMODULE_COPY_FMT' : 'No se pudo copiar: {0}', + 'ERR_VFSMODULE_UNLINK' : 'No se pudo desenlazar el fichero', + 'ERR_VFSMODULE_UNLINK_FMT' : 'No se pudo desenlazar el fichero: {0}', + 'ERR_VFSMODULE_MOVE' : 'No se pudo mover el fichero', + 'ERR_VFSMODULE_MOVE_FMT' : 'No se pudo mover el fichero: {0}', + 'ERR_VFSMODULE_EXIST' : 'No se pudo comprobar la existencia del fichero', + 'ERR_VFSMODULE_EXIST_FMT' : 'No se pudo comprobar la existencia del fichero: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'No se pudo obtener la infomación del archivo', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'No se pudo obtener la infomación del archivo: {0}', + 'ERR_VFSMODULE_MKDIR' : 'No se pudo crear el directorio', + 'ERR_VFSMODULE_MKDIR_FMT' : 'No se pudo crear el directorio: {0}', + 'ERR_VFSMODULE_URL' : 'No se pudo obtener la URL del archivo', + 'ERR_VFSMODULE_URL_FMT' : 'No se pudo obtener la URL del archivo: {0}', + 'ERR_VFSMODULE_TRASH' : 'No se pudo enviar el archivo a la papelera', + 'ERR_VFSMODULE_TRASH_FMT' : 'No se pudo enviar el archivo a la papelera: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'No se pudo recuperar el archivo de la papelera', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'No se pudo recuperar el archivo de la papelera: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'No se pudo vaciar la papelera', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'No se pudo vaciar la papelera: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Estás identificado en el API de dropbox', + 'DROPBOX_SIGN_OUT' : 'Desconectar de los servicios Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'No se pudo resolver la ruta: no se encontró el elemento', + 'ERR_FILE_APP_OPEN' : 'No se puede abrir el archivo', + 'ERR_FILE_APP_OPEN_FMT' : 'El archivo {0} no pudo abrirse porque no hay soporte para el tipo MIME {1}', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'No pudo abrirse el archivo {0}', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'No pudo guardarse el archivo {0}', + 'ERR_GENERIC_APP_FMT' : 'Error en la aplicación {0}', + 'ERR_GENERIC_APP_ACTION_FMT': 'No se pudo efectuar la acción \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Error desconocido', + 'ERR_GENERIC_APP_REQUEST' : 'Se produjo un error manipulando la solicitud', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Error fatal: {0}', + 'MSG_GENERIC_APP_DISCARD' : '¿Descartar cambios?', + 'MSG_FILE_CHANGED' : 'El archivo ha cambiado. ¿Recargar?', + 'MSG_APPLICATION_WARNING' : 'Advertencia de aplicación', + 'MSG_MIME_OVERRIDE' : 'El tipo de fichero "{0}" no está soportado, se usará "{1}" en su lugar.', + 'LBL_UNKNOWN' : 'Desconocido', + 'LBL_APPEARANCE' : 'Aspecto', + 'LBL_USER' : 'Usuario', + 'LBL_NAME' : 'Nombre', + 'LBL_APPLY' : 'Aplicar', + 'LBL_FILENAME' : 'Nombre de archivo', + 'LBL_PATH' : 'Ruta', + 'LBL_SIZE' : 'Tamaño', + 'LBL_TYPE' : 'Tipo', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Cargando', + 'LBL_SETTINGS' : 'Configuración', + 'LBL_ADD_FILE' : 'Añadir fichero', + 'LBL_COMMENT' : 'Comentario', + 'LBL_ACCOUNT' : 'Cuenta', + 'LBL_CONNECT' : 'Conectar', + 'LBL_ONLINE' : 'Conectado', + 'LBL_OFFLINE' : 'Desconectado', + 'LBL_AWAY' : 'No disponible', + 'LBL_BUSY' : 'Ocupado', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Ayuda', + 'LBL_ABOUT' : 'A propósito de', + 'LBL_PANELS' : 'Paneles', + 'LBL_LOCALES' : 'Internacionalización', + 'LBL_THEME' : 'Tema', + 'LBL_COLOR' : 'Color', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Kill', + 'LBL_ALIVE' : 'Alive', + 'LBL_INDEX' : 'Índice', + 'LBL_ADD' : 'Añadir', + 'LBL_FONT' : 'Tipografía', + 'LBL_YES' : 'Si', + 'LBL_NO' : 'No', + 'LBL_CANCEL' : 'Cancelar', + 'LBL_TOP' : 'Arriba', + 'LBL_LEFT' : 'Izquierda', + 'LBL_RIGHT' : 'Derecha', + 'LBL_BOTTOM' : 'Abajo', + 'LBL_CENTER' : 'Centro', + 'LBL_FILE' : 'Fichero', + 'LBL_NEW' : 'Nuevo', + 'LBL_OPEN' : 'Abrir', + 'LBL_SAVE' : 'Guardar', + 'LBL_SAVEAS' : 'Guardar cómo...', + 'LBL_CLOSE' : 'Cerrar', + 'LBL_MKDIR' : 'Crear directorio', + 'LBL_UPLOAD' : 'Subir', + 'LBL_VIEW' : 'Vista', + 'LBL_EDIT' : 'Editar', + 'LBL_RENAME' : 'Renombrar', + 'LBL_DELETE' : 'Eliminar', + 'LBL_OPENWITH' : 'Abrir con...', + 'LBL_ICONVIEW' : 'Vista de iconos', + 'LBL_TREEVIEW' : 'Vista de árbol', + 'LBL_LISTVIEW' : 'Vista de lista', + 'LBL_REFRESH' : 'Recargar', + 'LBL_VIEWTYPE' : 'Ver tipo', + 'LBL_BOLD' : 'Negrita', + 'LBL_ITALIC' : 'Cursiva', + 'LBL_UNDERLINE' : 'Subrayado', + 'LBL_REGULAR' : 'Regular', + 'LBL_STRIKE' : 'Barra', + 'LBL_INDENT' : 'Indentar', + 'LBL_OUTDENT' : 'Obsoleto', + 'LBL_UNDO' : 'Deshacer', + 'LBL_REDO' : 'Rehacer', + 'LBL_CUT' : 'Cortar', + 'LBL_UNLINK' : 'Desenlazar', + 'LBL_COPY' : 'Copiar', + 'LBL_PASTE' : 'Pegar', + 'LBL_INSERT' : 'Insertar', + 'LBL_IMAGE' : 'Imágen', + 'LBL_LINK' : 'Enlace', + 'LBL_DISCONNECT' : 'Desconectar', + 'LBL_APPLICATIONS' : 'Aplicaciones', + 'LBL_ADD_FOLDER' : 'Añadir carpeta', + 'LBL_INFORMATION' : 'Información', + 'LBL_TEXT_COLOR' : 'Color de texto', + 'LBL_BACK_COLOR' : 'Color de fondo', + 'LBL_RESET_DEFAULT' : 'Restablecer los valores por defecto', + 'LBL_DOWNLOAD_COMP' : 'Descargar en el ordenador', + 'LBL_ORDERED_LIST' : 'Lista ordenada', + 'LBL_BACKGROUND_IMAGE' : 'Imagen de fondo', + 'LBL_BACKGROUND_COLOR' : 'Color de fondo', + 'LBL_UNORDERED_LIST' : 'Lista no ordenada', + 'LBL_STATUS' : 'Estado', + 'LBL_READONLY' : 'Sólo lectura', + 'LBL_CREATED' : 'Creado', + 'LBL_MODIFIED' : 'Modificado', + 'LBL_SHOW_COLUMNS' : 'Mostrar columnas', + 'LBL_MOVE' : 'Mover', + 'LBL_OPTIONS' : 'Opciones', + 'LBL_OK' : 'OK', + 'LBL_Background' : 'Fondo', + 'LBL_DESKTOP' : 'Escritorio', + 'LBL_PANEL' : 'Panel', + 'LBL_POSITION' : 'Posición', + 'LBL_ONTOP' : 'Primer plano', + 'LBL_ITEMS' : 'Elementos', + 'LBL_GENERAL': 'General', + 'LBL_BACKGROUND' : 'Pozadie' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.fr_FR = { + 'ERR_FILE_OPEN' : 'Erreur lors de l\'ouverture du fichier', + 'ERR_WM_NOT_RUNNING' : 'Le gestionnaire de fenêtre n\'est pas en cours d\'execution', + 'ERR_FILE_OPEN_FMT' : 'Le fichier \'**{0}**\' n\'a pas pu être ouvert', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Impossible de trouver une application supportant les fichiers \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Impossible de lancer l\'application', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Une erreur est survenue lors du lancement de : {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Application \'{0}\' construct failed: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Application \'{0}\' init() failed: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Application resources missing for \'{0}\' or it failed to load!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Application \'{0}\' preloading failed: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'L\'application \'{0}\' est déjà lancée et n\'autorise qu\'une seule instance !', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Impossible de lancer \'{0}\'. Le manifeste de l\'application n\'a pas été trouvé !', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Impossible de lancer \'{0}\'. Votre navigateur ne supporte pas : {1}', + 'ERR_NO_WM_RUNNING' : 'Le gestionnaire de fenêtres n\'est pas lancé', + 'ERR_CORE_INIT_FAILED' : 'Impossible d\'initialiser OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Une erreur est survenue lors de l\'initialisation de OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Impossible de lancer OS.js: aucun gestionnaire de fenêtres défini !', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Impossible de lancer OS.js: erreur lors du lancement du gestionnaire de fenêtres : {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Impossible de lancer OS.js: impossible de précharger les ressources...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Rapport d\'erreur Javascript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Une erreur inconnue est survenue, peut-être un bug.', + 'ERR_APP_API_ERROR' : 'Erreur de l\'API de l\'application', + 'ERR_APP_API_ERROR_DESC_FMT' : 'L\'pplication {0} n\'a pas pu exécuter l\'opération \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Argument manquant: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Erreur inconnue', + 'ERR_OPERATION_TIMEOUT' : 'Operation Expirée', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Operation Expirée ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' attends \'{1}\' d\'être \'{2}\', \'{3}\' fournie', + 'ERR_WIN_DUPLICATE_FMT' : 'Une autre fenêtre porte déjà le nom \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimiser', + 'WINDOW_MAXIMIZE' : 'Maximiser', + 'WINDOW_RESTORE' : 'Restaurer', + 'WINDOW_CLOSE' : 'Fermer', + 'WINDOW_ONTOP_ON' : 'Au-dessus (activer)', + 'WINDOW_ONTOP_OFF': 'Au-dessous (désactiver)', + 'TITLE_SIGN_OUT' : 'Déconnexion', + 'TITLE_SIGNED_IN_AS_FMT' : 'Connecté en tant que: {0}', + 'ERR_LOGIN_FMT' : 'Erreur de connexion : {0}', + 'ERR_LOGIN_INVALID' : 'Identification invalide', + 'MSG_SESSION_WARNING' : 'Êtes-vous sûr de vouloir quitter OS.js? Tous vos paramètres et vos données seront perdues!', + 'BUGREPORT_MSG' : 'Veuillez reporter cela si vous pensez que c\'est un bug.\n Incluez une brève description de comment cela est arrivé et si vous le pouvez; comment le reproduire', + 'SERVICENOTIFICATION_TOOLTIP' : 'Loggué dans un service externe: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Erreur Fatale', + 'ERR_UTILS_XHR_FMT' : 'Erreure AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Déconnexion (quitter)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Déconnexion de l\'utilisateur \'{0}\'.\nVoulez-vous enregistrer votre session courante ?', + 'DIALOG_CLOSE' : 'Fermer', + 'DIALOG_CANCEL': 'Annuler', + 'DIALOG_APPLY' : 'Appliquer', + 'DIALOG_OK' : 'Valider', + 'DIALOG_ALERT_TITLE' : 'Fenêtre d\'alerte', + 'DIALOG_COLOR_TITLE' : 'Fenêtre de couleur', + 'DIALOG_COLOR_R' : 'Rouge: {0}', + 'DIALOG_COLOR_G' : 'Vert: {0}', + 'DIALOG_COLOR_B' : 'Bleu: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Fenêtre de confirmation', + 'DIALOG_ERROR_MESSAGE' : 'Message', + 'DIALOG_ERROR_SUMMARY' : 'Résumé', + 'DIALOG_ERROR_TRACE' : 'Trace', + 'DIALOG_ERROR_BUGREPORT' : 'Rapport de bug', + 'DIALOG_FILE_SAVE' : 'Enregistrer', + 'DIALOG_FILE_OPEN' : 'Ouvrir', + 'DIALOG_FILE_MKDIR' : 'Nouveau dossier', + 'DIALOG_FILE_MKDIR_MSG' : 'Créer un nouveau dossier dans **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Êtes-vous sûr de vouloir écraser le fichier \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Type de vue', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Vue en liste', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Vue en arborescence', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Vue en icônes', + 'DIALOG_FILE_ERROR' : 'Erreur FileDialog', + 'DIALOG_FILE_ERROR_SCANDIR': 'Impossible de lister le contenu du dossier \'{0}\' car une erreur est survenue', + 'DIALOG_FILE_MISSING_FILENAME' : 'Vous devez sélectionner un fichier ou entrer un nouveau nom de fichier !', + 'DIALOG_FILE_MISSING_SELECTION': 'Vous devez sélectionner un fichier!', + 'DIALOG_FILEINFO_TITLE' : 'Informations sur le fichier', + 'DIALOG_FILEINFO_LOADING' : 'Chargement des informations sur le fichier: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Erreur FileInformationDialog', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Impossible de récupérer les informations sur : **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'FImpossible de récupérer les informations sur : {0}', + 'DIALOG_INPUT_TITLE' : 'Fenêtre de saisie', + 'DIALOG_FILEPROGRESS_TITLE' : 'Progression des opérations sur les fichiers', + 'DIALOG_FILEPROGRESS_LOADING' : 'Chargement...', + 'DIALOG_UPLOAD_TITLE' : 'Fenêtre d\'envoi de fichier', + 'DIALOG_UPLOAD_DESC' : 'Envoyer un fichier vers **{0}**.\nTaille maximum: {1} octets', + 'DIALOG_UPLOAD_MSG_FMT' : 'Envoi de \'{0}\' ({1} {2}) vers {3}', + 'DIALOG_UPLOAD_MSG' : 'Envoi du fichier...', + 'DIALOG_UPLOAD_FAILED' : 'L\'envoi a échoué!', + 'DIALOG_UPLOAD_FAILED_MSG' : 'L\'envoi a échoué', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Raison inconnue...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Annulé pas l\'utilisateur...', + 'DIALOG_UPLOAD_TOO_BIG': 'Le fichier est trop gros', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Le fichier est trop gros, sa taille éxcède {0}', + 'DIALOG_FONT_TITLE' : 'Fenêtre de police', + 'DIALOG_APPCHOOSER_TITLE' : 'Choisir une application', + 'DIALOG_APPCHOOSER_MSG' : 'Choisir une application pour ouvrir', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Vous devez sélectionner une application', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Utiliser comme application par défaut pour {0}', + 'GAPI_DISABLED' : 'Module Google API non configuré ou désactivé', + 'GAPI_SIGN_OUT' : 'Déconnexion de l\'API Google', + 'GAPI_REVOKE' : 'Révoquer les permissions et déconnecter', + 'GAPI_AUTH_FAILURE' : 'L\'authentification Google API a échouer ou ne s\'est pas déroulée', + 'GAPI_AUTH_FAILURE_FMT' : 'Impossible d\'authentifier: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Impossible de charger l\'API Google', + 'WLAPI_DISABLED' : 'Module Live API non configuré ou désactivé', + 'WLAPI_SIGN_OUT' : 'Déconnexion de l\'API Live', + 'WLAPI_LOAD_FAILURE' : 'Impossible de charger Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Impossible de s\'authentifier dans Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Impossible de s\'authentifier dans Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API a retourné le status {0}', + 'IDB_MISSING_DBNAME' : 'Impossible de créer une base IndexedDB sans nom de base', + 'IDB_NO_SUCH_ITEM' : 'Aucun item correspondant', + 'ERR_VFS_FATAL' : 'Erreur fatale', + 'ERR_VFS_UNAVAILABLE' : 'Non disponible', + 'ERR_VFS_FILE_ARGS' : 'Le fichier attend au moins un argument', + 'ERR_VFS_NUM_ARGS' : 'Pas assez d\'arguments', + 'ERR_VFS_EXPECT_FILE' : 'Un objet "fichier" est attendu', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Un objet "fichier source" est attendu', + 'ERR_VFS_EXPECT_DST_FILE' : 'Un objet "fichier destination" est attendu', + 'ERR_VFS_FILE_EXISTS' : 'Le fichier destination existe déjà', + 'ERR_VFS_TRANSFER_FMT' : 'Une erreur est survenu lors du transfert entre espaces de stockage : {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Impossible d\'envoyer un fichier sans destination', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Impossible d\'envoyer un fichier sans aucun fichier défini', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Impossible d\'envoyer le fichier: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'L\'envoi du fichier a été annulé', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Impossible de télécharger un chemin sans chemin', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Une erreur est survenue lors du téléchargement: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'La réponse est vide', + 'ERR_VFSMODULE_INVALID' : 'Module VFS invalide', + 'ERR_VFSMODULE_INVALID_FMT' : 'Module VFS invalide: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Méthode VFS invalide', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Méthode VFS invalide: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Type de module VFS invalide', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Type de module VFS invalide: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Configuration VFS Module ', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Configuration VFS Module non valide : {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'Module VFS déjà monté', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'Module VFS \'{0}\' déjà monté', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'Module VFS non monté', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'Module VFS \'{0}\' non monté', + 'ERR_VFSMODULE_EXCEPTION' : 'Exception du module VFS', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'Exception du module VFS: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'Aucun Module VFS ne correspond {0}. Mauvais chemin ou Mauvais formats ?', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Téléchargement du fichier', + 'ERR_VFSMODULE_XHR_ERROR' : 'Erreur XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'Impossible de trouver l\'id du répertoire racine', + 'ERR_VFSMODULE_NOSUCH' : 'Le fichier n\'existe pas', + 'ERR_VFSMODULE_PARENT' : 'Pas de parent', + 'ERR_VFSMODULE_PARENT_FMT' : 'Impossible de trouver un parent: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Impossible de scanner le répertoire', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Impossible de scanner le répertoire: {0}', + 'ERR_VFSMODULE_READ' : 'Impossible de lire le fichier', + 'ERR_VFSMODULE_READ_FMT' : 'Impossible de lire le fichier: {0}', + 'ERR_VFSMODULE_WRITE' : 'Impossible d\'écrire dans le fichier', + 'ERR_VFSMODULE_WRITE_FMT' : 'Impossible d\'écrire dans le fichier: {0}', + 'ERR_VFSMODULE_COPY' : 'Impossible de copier', + 'ERR_VFSMODULE_COPY_FMT' : 'Impossible de copier: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Impossible de détacher le fichier', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Impossible de détacher le fichier: {0}', + 'ERR_VFSMODULE_MOVE' : 'Impossible de déplacer le fichier', + 'ERR_VFSMODULE_MOVE_FMT' : 'Impossible de déplacer le fichier: {0}', + 'ERR_VFSMODULE_EXIST' : 'Impossible de vérifier l\'existance du fichier', + 'ERR_VFSMODULE_EXIST_FMT' : 'Impossible de vérifier l\'existance du fichier: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Impossible de récuperer les informations du fichier', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Impossible de récuperer les informations du fichier: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Impossible de créer un répertoire', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Impossible de créer un répertoire: {0}', + 'ERR_VFSMODULE_URL' : 'Impossible de récuperer l\'URL du fichier', + 'ERR_VFSMODULE_URL_FMT' : 'Impossible de récuperer l\'URL du fichier: {0}', + 'ERR_VFSMODULE_TRASH' : 'Impossible de déplacer le fichier dans la corbeille', + 'ERR_VFSMODULE_TRASH_FMT' : 'Impossible de déplacer le fichier dans la corbeille: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Impossible de sortir le fichier de la corbeille', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Impossible de sortir le fichier de la corbeille: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Impossible de vider la corbeille', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Impossible de vider la corbeille: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Vous êtes connectés dans l\'API Dropbox', + 'DROPBOX_SIGN_OUT' : 'Déconnexion des services Google API', + 'ONEDRIVE_ERR_RESOLVE' : 'Impossible de résoudre le chemin: objet non trouvé', + 'ZIP_PRELOAD_FAIL' : 'LE chargement de zip.js a échoué', + 'ZIP_VENDOR_FAIL' : 'La bibliothèque zip.js n\'a pas été trouvée. A-t-elle été chargée correctement?', + 'ZIP_NO_RESOURCE' : 'Aucune archive zip n\'a été fournie', + 'ZIP_NO_PATH' : 'Aucun chemin fourni', + 'ERR_PACKAGE_EXISTS': 'Le répertoire d\'installation des paquêts existe déjà. L\'opération est interrompue!', + 'ERR_FILE_APP_OPEN' : 'Impossible d\'ouvrir le fichier', + 'ERR_FILE_APP_OPEN_FMT' : 'Le fichier {0} n\'a pas pu être ouvert car le type mime {1} m\'est pas supporté', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Le fichier {0} n\'a pas pu être ouvert', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Le fichier {0} n\'a pas pu être enregistré', + 'ERR_GENERIC_APP_FMT' : '{0} Erreur de l\'application', + 'ERR_GENERIC_APP_ACTION_FMT': 'Impossible d\'effectuer l\'action \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Erreur inconnue', + 'ERR_GENERIC_APP_REQUEST' : 'Une erreur est survenue lors du traitement de votre requête', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Erreur fatale : {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Abandonner les modifications ?', + 'MSG_FILE_CHANGED' : 'Le fichier a été modifié. Le recharger ?', + 'MSG_APPLICATION_WARNING' : 'Avertissement de l\'application', + 'MSG_MIME_OVERRIDE' : 'Le type de fichier "{0}" n\'est pas supporté, utilisation de "{1}" à la place.', + 'LBL_UNKNOWN' : 'Inconnu', + 'LBL_APPEARANCE' : 'Appearance', + 'LBL_USER' : 'Utilisateur', + 'LBL_NAME' : 'Nom', + 'LBL_APPLY' : 'Appliquer', + 'LBL_FILENAME' : 'Nom de fichier', + 'LBL_PATH' : 'Chemin', + 'LBL_SIZE' : 'Taille', + 'LBL_TYPE' : 'Type', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Chargement', + 'LBL_SETTINGS' : 'Paramètres', + 'LBL_ADD_FILE' : 'Ajouter un fichier', + 'LBL_COMMENT' : 'Commentaire', + 'LBL_ACCOUNT' : 'Compte', + 'LBL_CONNECT' : 'Connexion', + 'LBL_ONLINE' : 'En ligne', + 'LBL_OFFLINE' : 'Hors ligne', + 'LBL_AWAY' : 'Absent', + 'LBL_BUSY' : 'Occupé', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Aide', + 'LBL_ABOUT' : 'À propos', + 'LBL_PANELS' : 'Panneaux', + 'LBL_LOCALES' : 'Langues', + 'LBL_THEME' : 'Thème', + 'LBL_COLOR' : 'Couleur', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Fin de tâche', + 'LBL_ALIVE' : 'Vivant', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Ajouter', + 'LBL_FONT' : 'Police', + 'LBL_YES' : 'Oui', + 'LBL_NO' : 'Non', + 'LBL_CANCEL' : 'Annuler', + 'LBL_TOP' : 'Haut', + 'LBL_LEFT' : 'Gauche', + 'LBL_RIGHT' : 'Droite', + 'LBL_BOTTOM' : 'Bas', + 'LBL_CENTER' : 'Centre', + 'LBL_FILE' : 'Fichier', + 'LBL_NEW' : 'Nouveau', + 'LBL_OPEN' : 'Ouvrir', + 'LBL_SAVE' : 'Enregistrer', + 'LBL_SAVEAS' : 'Enregistrer sous...', + 'LBL_CLOSE' : 'Fermer', + 'LBL_MKDIR' : 'Créer un dossier', + 'LBL_UPLOAD' : 'Envoyer un fichier', + 'LBL_VIEW' : 'Vue', + 'LBL_EDIT' : 'Édition', + 'LBL_RENAME' : 'Renommer', + 'LBL_DELETE' : 'Supprimer', + 'LBL_OPENWITH' : 'Ouvrir avec...', + 'LBL_ICONVIEW' : 'Vue en icônes', + 'LBL_TREEVIEW' : 'Vue en arborescence', + 'LBL_LISTVIEW' : 'Vue en liste', + 'LBL_REFRESH' : 'Rafraîchir', + 'LBL_VIEWTYPE' : 'Type de vue', + 'LBL_BOLD' : 'Gras', + 'LBL_ITALIC' : 'Italique', + 'LBL_UNDERLINE' : 'Souligné', + 'LBL_REGULAR' : 'Régulier', + 'LBL_STRIKE' : 'Barré', + 'LBL_INDENT' : 'Indentation', + 'LBL_OUTDENT' : 'Outdate', + 'LBL_UNDO' : 'Annuler', + 'LBL_REDO' : 'Refaire', + 'LBL_CUT' : 'Couper', + 'LBL_UNLINK' : 'Supprimer le lien', + 'LBL_COPY' : 'Copier', + 'LBL_PASTE' : 'Coller', + 'LBL_INSERT' : 'Insérer', + 'LBL_IMAGE' : 'Image', + 'LBL_LINK' : 'Lien', + 'LBL_DISCONNECT' : 'Déconnexion', + 'LBL_APPLICATIONS' : 'Applications', + 'LBL_ADD_FOLDER' : 'Ajouter un dossier', + 'LBL_INFORMATION' : 'Information', + 'LBL_TEXT_COLOR' : 'Couleur du texte', + 'LBL_BACK_COLOR' : 'Couleur de fond', + 'LBL_RESET_DEFAULT' : 'Rétablir par défaut', + 'LBL_DOWNLOAD_COMP' : 'Télécharger sur l\'ordinateur', + 'LBL_ORDERED_LIST' : 'Liste ordonnée', + 'LBL_BACKGROUND_IMAGE' : 'Image d\'arrière-plan', + 'LBL_BACKGROUND_COLOR' : 'Couleur d\'arrière-plan', + 'LBL_UNORDERED_LIST' : 'Liste désordonnée', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Lecture seule', + 'LBL_CREATED' : 'Crée', + 'LBL_MODIFIED' : 'Modifié', + 'LBL_SHOW_COLUMNS' : 'Montrer les colonnes', + 'LBL_MOVE' : 'Déplacer', + 'LBL_OPTIONS' : 'Options', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Repertoire', + 'LBL_CREATE' : 'Créer', + 'LBL_BUGREPORT' : 'Report de bug', + 'LBL_INSTALL' : 'Installer', + 'LBL_UPDATE' : 'Mettre à jour', + 'LBL_REMOVE' : 'Enlever', + 'LBL_SHOW_SIDEBAR' : 'Afficher la barre de côté', + 'LBL_SHOW_NAVIGATION' : 'Afficher la navigation', + 'LBL_SHOW_HIDDENFILES' : 'Afficher les fichiers cachés', + 'LBL_SHOW_FILEEXTENSIONS' : 'Afficher les extensions de fichier', + 'LBL_MOUNT': 'Monter', + 'LBL_DESCRIPTION': 'Description', + 'LBL_USERNAME': 'Nom d\'utilisateur', + 'LBL_PASSWORD': 'Mot de passe', + 'LBL_HOST': 'Hôte', + 'LBL_NAMESPACE': 'Espace de nom', + 'LBL_SOUNDS' : 'Sons', + 'LBL_ICONS' : 'Icônes', + 'LBL_BACKGROUND' : 'Fond d\'écran', + 'LBL_DESKTOP' : 'Bureau', + 'LBL_PANEL' : 'Pannel', + 'LBL_POSITION' : 'Position', + 'LBL_ONTOP' : 'Premier plan', + 'LBL_ITEMS' : 'Objets', + 'LBL_GENERAL' : 'Général', + 'LBL_DEBUG' : 'Déboguer', + 'LBL_AUTOHIDE' : 'Masquage automatique', + 'LBL_OPACITY' : 'Opacité', + 'LBL_PACKAGES' : 'Paquets', + 'LBL_GROUPS' : 'Groupes', + 'LBL_VERSION' : 'Version', + 'LBL_AUTHOR' : 'Auteur', + 'LBL_HIDE' : 'Cacher', + 'LBL_APPLICATION' : 'Application', + 'LBL_SCOPE' : 'Gamme', + 'LBL_SEARCH' : 'Recherche', + 'LBL_INPUT' : 'Clavier', + 'LBL_USERS' : 'Gestion des utilisateurs', + 'LBL_STORE' : 'Magasin \n d\'application distante', + 'LBL_WINDOWMANAGER' : 'Gestionnaire de fenêtre' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.ru_RU = { + 'ERR_FILE_OPEN' : 'Ошибка открытия файла', + 'ERR_WM_NOT_RUNNING' : 'Менеджер окон не запущен', + 'ERR_FILE_OPEN_FMT' : 'Файл \'**{0}**\' не может быть открыт', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Неудалось найти приложение, способное открыть файл \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Ошибка запуска приложения', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'При попытке запуска, произошла следующая ошибка: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Ошибка при построении приложения \'{0}\': {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Ошибка инициализации в приложении \'{0}\' (init()): {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Для приложения \'{0}\' отсутсвует ресурс или ошибка при его загрузке!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Ошибка предварительной загрузки приложения \'{0}\': \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Приложение \'{0}\' уже запущено и единовременно поддерживает только одну копию!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Ошибка запуска \'{0}\'. Отсутствует манифест данных для приложения!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Ошибка запуска \'{0}\'. Ваш браузер не поддерживает: {1}', + 'ERR_NO_WM_RUNNING' : 'Не запущен оконный менеджер', + 'ERR_CORE_INIT_FAILED' : 'Ошибка инициализации OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Произошла ошибка в момент инициализации OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Невозможно запустить OS.js: Оконный менеджер не определен!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Невозможно запустить OS.js из-за ошибки при запуске оконного менеджера: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Невозможно запустить OS.js: Ошибка при предзагрузке ресурсов..', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Отчет об ошибке в JavaScript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Произошла непредвиденная ошибка, возможно баг.', + 'ERR_APP_API_ERROR' : 'Ошибка связанная с API приложения', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Приложению {0} не удалось выполнить операцию \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Пропущен аргумент: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Неизвестная ошибка', + 'ERR_WIN_DUPLICATE_FMT' : 'У вас уже присутствует окно с названием \'{0}\'', + 'WINDOW_MINIMIZE' : 'Свернуть', + 'WINDOW_MAXIMIZE' : 'Развернуть', + 'WINDOW_RESTORE' : 'Восстановить', + 'WINDOW_CLOSE' : 'Закрыть', + 'WINDOW_ONTOP_ON' : 'Поверх всех окон (Включить)', + 'WINDOW_ONTOP_OFF': 'Поверх всех окон (Выключить)', + 'TITLE_SIGN_OUT' : 'Выйти', + 'TITLE_SIGNED_IN_AS_FMT' : 'Вы вошли как: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Выйти (Выход)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Выход как пользователь: \'{0}\'.\nЖелаете сохранить текущую сессию?', + 'DIALOG_CLOSE' : 'Закрыть', + 'DIALOG_CANCEL': 'Отменить', + 'DIALOG_APPLY' : 'Применить', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Внимание', + 'DIALOG_COLOR_TITLE' : 'Цвет', + 'DIALOG_COLOR_R' : 'Красный: {0}', + 'DIALOG_COLOR_G' : 'Зеленый: {0}', + 'DIALOG_COLOR_B' : 'Синий: {0}', + 'DIALOG_COLOR_A' : 'Прозрачность: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Подтверждение', + 'DIALOG_ERROR_MESSAGE' : 'Сообщение', + 'DIALOG_ERROR_SUMMARY' : 'Сводка', + 'DIALOG_ERROR_TRACE' : 'Цепочка вызовов', + 'DIALOG_ERROR_BUGREPORT' : 'Отчет об ошибке', + 'DIALOG_FILE_SAVE' : 'Сохранить', + 'DIALOG_FILE_OPEN' : 'Открыть', + 'DIALOG_FILE_MKDIR' : 'Новая папка', + 'DIALOG_FILE_MKDIR_MSG' : 'Создать новый каталог в **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Вы уверены, что хотите перезаписать файл \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Режим просмотра', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Список', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Древовидный', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Значки', + 'DIALOG_FILE_ERROR' : 'Ошибка связанная с FileDialog', + 'DIALOG_FILE_ERROR_SCANDIR': 'Не удалось отобразить содержимое \'{0}\', произошла ошибка', + 'DIALOG_FILE_MISSING_FILENAME' : 'Выберите файл или введите новое имя файла!', + 'DIALOG_FILE_MISSING_SELECTION': 'Выберите файл!', + 'DIALOG_FILEINFO_TITLE' : 'Информация о файле', + 'DIALOG_FILEINFO_LOADING' : 'Загрузка информации о файле: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Ошибка связанная с FileInformationDialog', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Ошибка при получения информации о файле **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Ошибка при получения информации о файле: {0}', + 'DIALOG_INPUT_TITLE' : 'Диалог ввода', + 'DIALOG_FILEPROGRESS_TITLE' : 'Состояние операции над файлом', + 'DIALOG_FILEPROGRESS_LOADING' : 'Загрузка...', + 'DIALOG_UPLOAD_TITLE' : 'Загрузка', + 'DIALOG_UPLOAD_DESC' : 'Загрузка файла **{0}**.
Максимальный размер: {1} байт', + 'DIALOG_UPLOAD_MSG_FMT' : 'Загрузка \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Загрузка файла...', + 'DIALOG_UPLOAD_FAILED' : 'Загрузка не удалась', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Загрузка завершилась неудачей', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Причина неизвестна...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Отменено пользователем...', + 'DIALOG_FONT_TITLE' : 'Шрифт', + 'DIALOG_APPCHOOSER_TITLE' : 'Выберите приложение', + 'DIALOG_APPCHOOSER_MSG' : 'Выберите приложение для открытия', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Вам необходимо выбрать приложение', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Использовать в качестве приложения по умолчанию для {0}', + 'GAPI_DISABLED' : 'GoogleAPI модуль не настроен или отключен', + 'GAPI_SIGN_OUT' : 'Выйти из API служб Google', + 'GAPI_REVOKE' : 'Отозвать права доступа и выйти', + 'GAPI_AUTH_FAILURE' : 'Не удалось аутентифицировать Google API', + 'GAPI_AUTH_FAILURE_FMT' : 'Не удалось проверить подлинность: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Не удалось загрузить Google API', + 'IDB_MISSING_DBNAME' : 'Не удается создать IndexedDB без названия', + 'IDB_NO_SUCH_ITEM' : 'Ничего не удалось найти', + 'ERR_VFS_FATAL' : 'Критическая ошибка', + 'ERR_VFS_FILE_ARGS' : 'Файл ожидает по меньшей мере один аргумент', + 'ERR_VFS_NUM_ARGS' : 'Недостаточно аргументов', + 'ERR_VFS_EXPECT_FILE' : 'Ожидается file-object', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Ожидается источник file-object', + 'ERR_VFS_EXPECT_DST_FILE' : 'Ожидается имя файла file-object', + 'ERR_VFS_FILE_EXISTS' : 'Файл с таким именем уже существует', + 'ERR_VFS_TRANSFER_FMT' : 'Произошла ошибка во время переноса между хранилищами: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Невозможно загрузить файл, без указания имени', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Не определены файлы для загрузки', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Загрузка файла не удалась: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Загрузка файла была отменена', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Невозможно скачать каталог без пути', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Произошла ошибка при загрузке: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Скачивание файла', + 'ERR_FILE_APP_OPEN' : 'Невозможно открыть файл', + 'ERR_FILE_APP_OPEN_FMT' : 'Файл {0} не может быть открыт, mime-type {1} не поддерживается', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Файл {0} не может быть открыт', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Файл {0} не может быть сохранен', + 'ERR_GENERIC_APP_FMT' : '{0} Ошибка приложения', + 'ERR_GENERIC_APP_ACTION_FMT': 'Не удалось выполнить действие \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Неизвестная ошибка', + 'ERR_GENERIC_APP_REQUEST' : 'Произошла ошибка при обработке вашего запроса', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Критическая ошибка: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Отменить изменения?', + 'MSG_FILE_CHANGED' : 'Файл был изменен. Перезагрузить?', + 'MSG_APPLICATION_WARNING' : 'Предупреждение', + 'MSG_MIME_OVERRIDE' : 'Тип файла "{0}" не поддерживается, используете "{1}".', + 'LBL_UNKNOWN' : 'Неизвестный', + 'LBL_APPEARANCE' : 'Появление', + 'LBL_USER' : 'Пользователь', + 'LBL_NAME' : 'Название', + 'LBL_APPLY' : 'Применить', + 'LBL_FILENAME' : 'Имя файла', + 'LBL_PATH' : 'Путь', + 'LBL_SIZE' : 'Размер', + 'LBL_TYPE' : 'Тип', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Загрузка', + 'LBL_SETTINGS' : 'Настройки', + 'LBL_ADD_FILE' : 'Добавить файл', + 'LBL_COMMENT' : 'Комментарий', + 'LBL_ACCOUNT' : 'Учетная запись', + 'LBL_CONNECT' : 'Подключиться', + 'LBL_ONLINE' : 'В сети', + 'LBL_OFFLINE' : 'Не в сети', + 'LBL_AWAY' : 'Отошел', + 'LBL_BUSY' : 'Занят', + 'LBL_CHAT' : 'Чат', + 'LBL_HELP' : 'Помощь', + 'LBL_ABOUT' : 'О программе', + 'LBL_PANELS' : 'Панели', + 'LBL_LOCALES' : 'Языки', + 'LBL_THEME' : 'Тема', + 'LBL_COLOR' : 'Цвет', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Завершить', + 'LBL_ALIVE' : 'Работает', + 'LBL_INDEX' : 'Индекс', + 'LBL_ADD' : 'Добавить', + 'LBL_FONT' : 'Шрифт', + 'LBL_YES' : 'Да', + 'LBL_NO' : 'Нет', + 'LBL_CANCEL' : 'Отмена', + 'LBL_TOP' : 'Верх', + 'LBL_LEFT' : 'Лево', + 'LBL_RIGHT' : 'Право', + 'LBL_BOTTOM' : 'Низ', + 'LBL_CENTER' : 'Центр', + 'LBL_FILE' : 'Файл', + 'LBL_NEW' : 'Новый', + 'LBL_OPEN' : 'Открыть', + 'LBL_SAVE' : 'Сохранить', + 'LBL_SAVEAS' : 'Сохранить как...', + 'LBL_CLOSE' : 'Закрыть', + 'LBL_MKDIR' : 'Создать каталог', + 'LBL_UPLOAD' : 'Загрузить', + 'LBL_VIEW' : 'Вид', + 'LBL_EDIT' : 'Редактировать', + 'LBL_RENAME' : 'Переименовать', + 'LBL_DELETE' : 'Удалить', + 'LBL_OPENWITH' : 'Открыть в ...', + 'LBL_ICONVIEW' : 'Значки', + 'LBL_TREEVIEW' : 'Древовидный', + 'LBL_LISTVIEW' : 'Список', + 'LBL_REFRESH' : 'Обновить', + 'LBL_VIEWTYPE' : 'Режим просмотра', + 'LBL_BOLD' : 'Полужирный', + 'LBL_ITALIC' : 'Курсив', + 'LBL_UNDERLINE' : 'Подчеркнутый', + 'LBL_REGULAR' : 'Обычный', + 'LBL_STRIKE' : 'Перечеркнутый', + 'LBL_INDENT' : 'Уменьшить отступ', + 'LBL_OUTDENT' : 'Увеличить отступ', + 'LBL_UNDO' : 'Отменить', + 'LBL_REDO' : 'Повторить', + 'LBL_CUT' : 'Вырезать', + 'LBL_UNLINK' : 'Удалить ссылку', + 'LBL_COPY' : 'Копировать', + 'LBL_PASTE' : 'Вставить', + 'LBL_INSERT' : 'Вставка', + 'LBL_IMAGE' : 'Изображение', + 'LBL_LINK' : 'Ссылка', + 'LBL_DISCONNECT' : 'Отключиться', + 'LBL_APPLICATIONS' : 'Приложения', + 'LBL_ADD_FOLDER' : 'Добавить папку', + 'LBL_INFORMATION' : 'Информация', + 'LBL_TEXT_COLOR' : 'Цвет текста', + 'LBL_BACK_COLOR' : 'Цвет фона', + 'LBL_RESET_DEFAULT' : 'Сбросить к стандартным', + 'LBL_DOWNLOAD_COMP' : 'Скачать', + 'LBL_ORDERED_LIST' : 'Нумерованный список', + 'LBL_BACKGROUND_IMAGE' : 'Фоновое изображение', + 'LBL_BACKGROUND_COLOR' : 'Фоновый цвет', + 'LBL_UNORDERED_LIST' : 'Неупорядоченный список', + 'LBL_SHOW_SIDEBAR' : 'Отобразить боковую панель', + 'LBL_BACKGROUND' : 'Фон', + 'LBL_DESKTOP' : 'Настройки', + 'LBL_PANEL' : 'Панель', + 'LBL_POSITION' : 'Расположение', + 'LBL_ONTOP' : 'Вверху', + 'LBL_ITEMS' : 'Элементы', + 'LBL_AUTOHIDE' : 'Автоматически скрывать', + 'LBL_OPACITY' : 'Прозрачность', + 'LBL_GENERAL' : 'Основные', + 'LBL_DEBUG' : 'Отладка' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.ko_KR = { + 'ERR_FILE_OPEN' : '파일을 열 수 없습니다', + 'ERR_WM_NOT_RUNNING' : '윈도우 관리자가 실행 중이지 않습니다', + 'ERR_FILE_OPEN_FMT' : '\'**{0}**\' 파일을 실행할 수 없습니다', + 'ERR_APP_MIME_NOT_FOUND_FMT': '\'{0}\' 파일을 실행할 수 있는 응용 프로그램을 찾을 수 없습니다', + 'ERR_APP_LAUNCH_FAILED' : '응용 프로그램을 실행할 수 없습니다', + 'ERR_APP_LAUNCH_FAILED_FMT' : '{0}을(를) 실행할 수 없습니다', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : '응용 프로그램 \'{0}\'을 준비할 수 없습니다: {1}', + 'ERR_APP_INIT_FAILED_FMT' : '응용 프로그램 \'{0}\'을 초기화할 수 없습니다: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : '응용 프로그램 \'{0}\' 리소스를 찾을 수 없거나 로드할 수 없습니다!', + 'ERR_APP_PRELOAD_FAILED_FMT' : '응용 프로그램 \'{0}\'을 준비할 수 없습니다: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : '\'{0}\'은(는) 이미 실행중이며 하나의 인스턴스만 허용됩니다!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : '\'{0}\'을(를) 실행할 수 없습니다. 응용 프로그램 manifest 데이터를 찾을 수 없습니다!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : '\'{0}\'을(를) 실행할 수 없습니다. 사용중인 웹브라우저가 다음 기능을 지원하지 않습니다: {1}', + 'ERR_NO_WM_RUNNING' : '윈도우 관리자가 실행 중이지 않습니다', + 'ERR_CORE_INIT_FAILED' : 'OS.js를 초기화할 수 없습니다', + 'ERR_CORE_INIT_FAILED_DESC' : 'OS.js를 초기화하던 중 오류가 발생했습니다', + 'ERR_CORE_INIT_NO_WM' : 'OS.js를 실행할 수 없습니다: 윈도우 관리자가 정의되지 않았습니다!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'OS.js를 실행할 수 없습니다: 윈도우 관리자를 실행할 수 없습니다: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'OS.js를 실행할 수 없습니다: 리소스를 준비할 수 없습니다...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript 오류 보고서', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : '오류가 발생했습니다. 버그일 수 있습니다', + 'ERR_APP_API_ERROR' : '응용 프로그램 API 오류', + 'ERR_APP_API_ERROR_DESC_FMT' : '응용 프로그램 {0}이 명령을 실행할 수 없습니다\'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': '누락된 매개변수: {0}', + 'ERR_APP_UNKNOWN_ERROR' : '알 수 없는 오류입니다', + 'ERR_OPERATION_TIMEOUT' : '시간초과', + 'ERR_OPERATION_TIMEOUT_FMT' : '시간초과 ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\'에서 \'{1}\'는 \'{2}\'이 되어야 하나 \'{3}\'가 주어졌습니다', + 'ERR_WIN_DUPLICATE_FMT' : '이미 \'{0}\' 창이 있습니다', + 'WINDOW_MINIMIZE' : '최소화', + 'WINDOW_MAXIMIZE' : '최대화', + 'WINDOW_RESTORE' : '이전 크기로', + 'WINDOW_CLOSE' : '닫기', + 'WINDOW_ONTOP_ON' : '위로 (활성화)', + 'WINDOW_ONTOP_OFF': '위로 (비활성화)', + 'TITLE_SIGN_OUT' : '로그아웃', + 'TITLE_SIGNED_IN_AS_FMT' : '{0}(으)로 로그인', + 'ERR_LOGIN_FMT' : '로그인 오류: {0}', + 'ERR_LOGIN_INVALID' : '비정상 로그인', + 'MSG_SESSION_WARNING' : 'OS.js를 정말 종료하시겠습니까? 저장하지 않은 설정과 응용 프로그램 데이터가 손실될 수 있습니다!', + 'BUGREPORT_MSG' : '버그라고 생각되면 보고해주십시요.\n오류가 어떻게 발생했는지 간단한 설명을 해주십시요. 가능하다면 재현 상황을 설명해주십시요', + 'SERVICENOTIFICATION_TOOLTIP' : '{0}(으)로 외부 서비스 로그인', + 'ERR_UTILS_XHR_FATAL' : '심각한 오류', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR 오류: {0}', + 'DIALOG_LOGOUT_TITLE' : '로그아웃 (종료)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : '\'{0}\' 사용자 로그아웃.\n현재 세션을 저장하시겠습니까?', + 'DIALOG_CLOSE' : '닫기', + 'DIALOG_CANCEL': '취소', + 'DIALOG_APPLY' : '적용', + 'DIALOG_OK' : '확인', + 'DIALOG_ALERT_TITLE' : '알림 다이얼로그', + 'DIALOG_COLOR_TITLE' : '색상 다이얼로그', + 'DIALOG_COLOR_R' : '빨강: {0}', + 'DIALOG_COLOR_G' : '초록: {0}', + 'DIALOG_COLOR_B' : '파랑: {0}', + 'DIALOG_COLOR_A' : '투명: {0}', + 'DIALOG_CONFIRM_TITLE' : '확인 다이얼로그', + 'DIALOG_ERROR_MESSAGE' : '메시지', + 'DIALOG_ERROR_SUMMARY' : '요약', + 'DIALOG_ERROR_TRACE' : '추적', + 'DIALOG_ERROR_BUGREPORT' : '오류 보고', + 'DIALOG_FILE_SAVE' : '저장', + 'DIALOG_FILE_OPEN' : '열기', + 'DIALOG_FILE_MKDIR' : '디렉토리 생성', + 'DIALOG_FILE_MKDIR_MSG' : '**{0}**에 디렉토리 생성', + 'DIALOG_FILE_OVERWRITE' : '정말 \'{0}\'을 덮어쓰시겠습니까?', + 'DIALOG_FILE_MNU_VIEWTYPE' : '보기 타입', + 'DIALOG_FILE_MNU_LISTVIEW' : '자세히 보기', + 'DIALOG_FILE_MNU_TREEVIEW' : '간단히 보기', + 'DIALOG_FILE_MNU_ICONVIEW' : '아이콘으로 보기', + 'DIALOG_FILE_ERROR' : '파일 다이얼로그 오류', + 'DIALOG_FILE_ERROR_SCANDIR': '오류가 발생했습니다. \'{0}\' 폴더를 불러올 수 없습니다', + 'DIALOG_FILE_MISSING_FILENAME' : '파일을 선택하거나 새로운 파일 이름을 입력해주십시요!', + 'DIALOG_FILE_MISSING_SELECTION': '파일을 선택해야 합니다!', + 'DIALOG_FILEINFO_TITLE' : '파일 정보', + 'DIALOG_FILEINFO_LOADING' : '파일 정보를 불러오는 중: {0}', + 'DIALOG_FILEINFO_ERROR' : '파일 정보 다이얼로그 오류', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : '파일 정보를 가져올 수 없습니다 **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : '파일 정보를 가져올 수 없습니다: {0}', + 'DIALOG_INPUT_TITLE' : '입력 다이얼로그', + 'DIALOG_FILEPROGRESS_TITLE' : '파일 명령 처리', + 'DIALOG_FILEPROGRESS_LOADING' : '처리 중...', + 'DIALOG_UPLOAD_TITLE' : '업로드 다이얼로그', + 'DIALOG_UPLOAD_DESC' : '**{0}**에 파일 업로드.
최대 용량: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : '\'{0}\' ({1} {2})을(를) {3}에 업로드 중', + 'DIALOG_UPLOAD_MSG' : '파일을 업로드 중...', + 'DIALOG_UPLOAD_FAILED' : '업로드 실패', + 'DIALOG_UPLOAD_FAILED_MSG' : '업로드에 실패했습니다', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : '알 수 없는 오류...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': '사용자에 의해 취소...', + 'DIALOG_UPLOAD_TOO_BIG': '파일이 너무 큽니다', + 'DIALOG_UPLOAD_TOO_BIG_FMT': '파일이 너무 큽니다, {0} 초과', + 'DIALOG_FONT_TITLE' : '글꼴 다이얼로그', + 'DIALOG_APPCHOOSER_TITLE' : '응용 프로그램 선택', + 'DIALOG_APPCHOOSER_MSG' : '열려는 응용 프로그램을 선택해주십시요', + 'DIALOG_APPCHOOSER_NO_SELECTION' : '응용 프로그램을 선택해야 합니다', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : '{0}을(를) 기본 응용 프로그램으로 설정', + 'GAPI_DISABLED' : 'GoogleAPI 모듈이 설정되지 않았거나 사용할 수 없습니다', + 'GAPI_SIGN_OUT' : 'Google API 서비스에서 로그아웃', + 'GAPI_REVOKE' : '권한을 해제하고 로그아웃', + 'GAPI_AUTH_FAILURE' : 'Google API 인증에 실패했습니다', + 'GAPI_AUTH_FAILURE_FMT' : '인증에 실패: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Google API 로드 실패', + 'WLAPI_DISABLED' : 'Windows Live API 모듈이 설정되지 않았거나 사용할 수 없습니다', + 'WLAPI_SIGN_OUT' : 'Window Live API 서비스에서 로그아웃', + 'WLAPI_LOAD_FAILURE' : 'Windows Live API 로드 실패', + 'WLAPI_LOGIN_FAILED' : 'Windows Live API에 로그인 실패', + 'WLAPI_LOGIN_FAILED_FMT' : 'Windows Live API에 로그인 실패: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API가 {0} 상태를 반환했습니다', + 'IDB_MISSING_DBNAME' : 'Database의 이름 없이는 IndexedDB를 생성할 수 없습니다', + 'IDB_NO_SUCH_ITEM' : '찾을 수 없습니다', + 'ERR_VFS_FATAL' : '심각한 오류', + 'ERR_VFS_UNAVAILABLE' : '사용할 수 없음', + 'ERR_VFS_FILE_ARGS' : '적어도 하나의 매개변수가 필요합니다', + 'ERR_VFS_NUM_ARGS' : '매개변수가 충분하지 않습니다', + 'ERR_VFS_EXPECT_FILE' : '파일 객체가 필요합니다', + 'ERR_VFS_EXPECT_SRC_FILE' : '원본 파일 객체가 필요합니다', + 'ERR_VFS_EXPECT_DST_FILE' : '대상 파일 객체가 필요합니다', + 'ERR_VFS_FILE_EXISTS' : '대상 파일이 이미 존재합니다', + 'ERR_VFS_TRANSFER_FMT' : '저장소 간 파일을 이동하는 중 오류가 발생했습니다: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : '파일을 업로드하려면 대상을 선택해주십시요', + 'ERR_VFS_UPLOAD_NO_FILES' : '업로드하려는 파일을 선택해주십시요', + 'ERR_VFS_UPLOAD_FAIL_FMT' : '파일을 업로드하는데 실패했습니다: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': '파일 업로드가 취소되었습니다', + 'ERR_VFS_DOWNLOAD_NO_FILE': '경로 없이 경로를 다운로드할 수 없습니다', + 'ERR_VFS_DOWNLOAD_FAILED' : '다운로드 중 오류가 발생하였습니다: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': '응답이 비어있습니다', + 'ERR_VFSMODULE_INVALID' : '유효하지 않은 VFS 모듈', + 'ERR_VFSMODULE_INVALID_FMT' : '유효하지 않은 VFS 모듈: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : '유효하지 않은 VFS 메소드', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : '유효하지 않은 VFS 메소드: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : '유효하지 않은 VFS 모듈 타입', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : '유효하지 않은 VFS 모듈 타입: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : '유효하지 않은 VFS 모듈 설정', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : '유효하지 않은 VFS 모듈 설정: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'VFS 모듈이 이미 마운트 되었습니다', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'VFS 모듈 \'{0}\' 이(가) 이미 마운트 되었습니다', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'VFS 모듈이 마운트 되지 않았습니다', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'VFS 모듈 \'{0}\' 이(가) 마운트 되지 않았습니다', + 'ERR_VFSMODULE_EXCEPTION' : 'VFS 모듈 예외 발생', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'VFS 모듈 예외 발생: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : '{0}와 같은 VFS 모듈이 존재하지 않습니다. 잘못된 경로나 형식일 수 있습니다', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': '파일 다운로드', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR 오류', + 'ERR_VFSMODULE_ROOT_ID' : '최상위 디렉토리 id를 찾을 수 없습니다', + 'ERR_VFSMODULE_NOSUCH' : '파일이 존재하지 않습니다', + 'ERR_VFSMODULE_PARENT' : '부모를 찾을 수 없습니다', + 'ERR_VFSMODULE_PARENT_FMT' : '부모를 찾을 수 없습니다: {0}', + 'ERR_VFSMODULE_SCANDIR' : '디렉토리 불러오기 실패', + 'ERR_VFSMODULE_SCANDIR_FMT' : '디렉토리를 불러올 수 없습니다: {0}', + 'ERR_VFSMODULE_READ' : '파일 읽기 실패', + 'ERR_VFSMODULE_READ_FMT' : '파일을 읽을 수 없습니다: {0}', + 'ERR_VFSMODULE_WRITE' : '파일 생성 실패', + 'ERR_VFSMODULE_WRITE_FMT' : '파일을 생성할 수 없습니다: {0}', + 'ERR_VFSMODULE_COPY' : '복사 실패', + 'ERR_VFSMODULE_COPY_FMT' : '복사할 수 없습니다: {0}', + 'ERR_VFSMODULE_UNLINK' : '바로가기 해제', + 'ERR_VFSMODULE_UNLINK_FMT' : '바로가기를 해제할 수 없습니다: {0}', + 'ERR_VFSMODULE_MOVE' : '파일 이동 실패', + 'ERR_VFSMODULE_MOVE_FMT' : '파일을 이동할 수 없습니다: {0}', + 'ERR_VFSMODULE_EXIST' : '파일 존재 여부 확인', + 'ERR_VFSMODULE_EXIST_FMT' : '파일이 존재하는지 확인할 수 없습니다: {0}', + 'ERR_VFSMODULE_FILEINFO' : '파일 정보 조회 실패', + 'ERR_VFSMODULE_FILEINFO_FMT' : '파일 정보를 읽을 수 없습니다: {0}', + 'ERR_VFSMODULE_MKDIR' : '디렉토리 생성 실패', + 'ERR_VFSMODULE_MKDIR_FMT' : '디렉토리를 생성할 수 없습니다: {0}', + 'ERR_VFSMODULE_URL' : '파일 경로 찾기 실패', + 'ERR_VFSMODULE_URL_FMT' : '파일의 경로를 찾을 수 없습니다: {0}', + 'ERR_VFSMODULE_TRASH' : '휴지통으로 보내기 실패', + 'ERR_VFSMODULE_TRASH_FMT' : '휴지통으로 보낼 수 없습니다: {0}', + 'ERR_VFSMODULE_UNTRASH' : '휴지통 복원 실패', + 'ERR_VFSMODULE_UNTRASH_FMT' : '휴지통에서 복원할 수 없습니다: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : '휴지통 비우기 실패', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : '휴지통을 비울 수 없습니다: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Dropbox API에 가입되어 있습니다', + 'DROPBOX_SIGN_OUT' : 'Google API Services에서 로그아웃', + 'ONEDRIVE_ERR_RESOLVE' : '경로 탐색 실패: 항목을 찾을 수 없습니다', + 'ZIP_PRELOAD_FAIL' : 'zip.js를 불러오는 데 실패하였습니다', + 'ZIP_VENDOR_FAIL' : 'zip.js 라이브러리를 찾을 수 없습니다. 올바른 방법으로 불러왔는지 확인해주십시오', + 'ZIP_NO_RESOURCE' : 'zip 리소스가 주어지지 않았습니다', + 'ZIP_NO_PATH' : '경로가 주어지지 않았습니다', + 'ERR_PACKAGE_EXISTS': '패키지 설치 디렉토리가 이미 존재하여 설치를 계속 할 수 없습니다!', + 'ERR_FILE_APP_OPEN' : '파일을 열 수 없습니다', + 'ERR_FILE_APP_OPEN_FMT' : '마임(MIME) {1} 이(가) 지원되지 않아 파일 {0} 을(를) 열지 못했습니다', + 'ERR_FILE_APP_OPEN_ALT_FMT' : '파일 {0} 을(를) 열지 못했습니다', + 'ERR_FILE_APP_SAVE_ALT_FMT' : '파일 {0} 을(를) 저장하지 못했습니다', + 'ERR_GENERIC_APP_FMT' : '{0} 응용 프로그램 오류', + 'ERR_GENERIC_APP_ACTION_FMT': '\'{0}\' 수행에 실패하였습니다', + 'ERR_GENERIC_APP_UNKNOWN' : '알 수 없는 오류', + 'ERR_GENERIC_APP_REQUEST' : '명령을 처리하는 도중 오류가 발생하였습니다', + 'ERR_GENERIC_APP_FATAL_FMT' : '치명적인 오류: {0}', + 'MSG_GENERIC_APP_DISCARD' : '변경사항을 저장하지 않겠습니까?', + 'MSG_FILE_CHANGED' : '파일이 변경되었습니다. 새로고침 하시겠습니까?', + 'MSG_APPLICATION_WARNING' : '응용 프로그램 경고', + 'MSG_MIME_OVERRIDE' : '파일 타입 "{0}" 은(는) 지원되지 않습니다, "{1}" (으)로 대신합니다', + 'LBL_UNKNOWN' : '알수없음', + 'LBL_APPEARANCE' : '모양', + 'LBL_USER' : '사용자', + 'LBL_NAME' : '이름', + 'LBL_APPLY' : '적용', + 'LBL_FILENAME' : '파일명', + 'LBL_PATH' : '경로', + 'LBL_SIZE' : '크기', + 'LBL_TYPE' : '타입', + 'LBL_MIME' : '마임(MIME)', + 'LBL_LOADING' : '로딩', + 'LBL_SETTINGS' : '설정', + 'LBL_ADD_FILE' : '파일 추가', + 'LBL_COMMENT' : '댓글', + 'LBL_ACCOUNT' : '계정', + 'LBL_CONNECT' : '연결', + 'LBL_ONLINE' : '온라인', + 'LBL_OFFLINE' : '오프라인', + 'LBL_AWAY' : '부재중', + 'LBL_BUSY' : '바쁨', + 'LBL_CHAT' : '채팅', + 'LBL_HELP' : '도움말', + 'LBL_ABOUT' : '정보', + 'LBL_PANELS' : '패널', + 'LBL_LOCALES' : '지역', + 'LBL_THEME' : '테마', + 'LBL_COLOR' : '색상', + 'LBL_PID' : '프로세스 ID', + 'LBL_KILL' : '종료', + 'LBL_ALIVE' : '활성', + 'LBL_INDEX' : '인덱스', + 'LBL_ADD' : '추가', + 'LBL_FONT' : '글꼴', + 'LBL_YES' : '예', + 'LBL_NO' : '아니오', + 'LBL_CANCEL' : '취소', + 'LBL_TOP' : '위', + 'LBL_LEFT' : '왼쪽', + 'LBL_RIGHT' : '오른쪽', + 'LBL_BOTTOM' : '아래', + 'LBL_CENTER' : '가운데', + 'LBL_FILE' : '파일', + 'LBL_NEW' : '새로 만들기', + 'LBL_OPEN' : '열기', + 'LBL_SAVE' : '저장', + 'LBL_SAVEAS' : '다른 이름으로 저장', + 'LBL_CLOSE' : '닫기', + 'LBL_MKDIR' : '디렉토리 생성', + 'LBL_UPLOAD' : '업로드', + 'LBL_VIEW' : '보기', + 'LBL_EDIT' : '편집', + 'LBL_RENAME' : '이름 변경', + 'LBL_DELETE' : '삭제', + 'LBL_OPENWITH' : '다른 프로그램으로 열기', + 'LBL_ICONVIEW' : '아이콘으로 보기', + 'LBL_TREEVIEW' : '트리로 보기', + 'LBL_LISTVIEW' : '리스트로 보기', + 'LBL_REFRESH' : '새로고침', + 'LBL_VIEWTYPE' : '보기 방식', + 'LBL_BOLD' : '굵게', + 'LBL_ITALIC' : '이탤릭체', + 'LBL_UNDERLINE' : '밑줄', + 'LBL_REGULAR' : '일반', + 'LBL_STRIKE' : '취소선', + 'LBL_INDENT' : '들여쓰기', + 'LBL_OUTDENT' : '내어쓰기', + 'LBL_UNDO' : '실행 취소', + 'LBL_REDO' : '다시 실행', + 'LBL_CUT' : '잘라내기', + 'LBL_UNLINK' : '링크 해제', + 'LBL_COPY' : '복사', + 'LBL_PASTE' : '붙여넣기', + 'LBL_INSERT' : '삽입', + 'LBL_IMAGE' : '이미지', + 'LBL_LINK' : '링크', + 'LBL_DISCONNECT' : '연결 해제', + 'LBL_APPLICATIONS' : '응용 프로그램', + 'LBL_ADD_FOLDER' : '폴더 추가', + 'LBL_INFORMATION' : '정보', + 'LBL_TEXT_COLOR' : '글자색', + 'LBL_BACK_COLOR' : '배경색', + 'LBL_RESET_DEFAULT' : '기본값으로 복원', + 'LBL_DOWNLOAD_COMP' : '컴퓨터로 다운로드', + 'LBL_ORDERED_LIST' : '정렬 된 리스트', + 'LBL_BACKGROUND_IMAGE' : '배경 이미지', + 'LBL_BACKGROUND_COLOR' : '배경 색상', + 'LBL_UNORDERED_LIST' : '정렬 되지 않은 리스트', + 'LBL_STATUS' : '상태', + 'LBL_READONLY' : '읽기 전용', + 'LBL_CREATED' : '생성됨', + 'LBL_MODIFIED' : '수정됨', + 'LBL_SHOW_COLUMNS' : '열 보기', + 'LBL_MOVE' : '이동', + 'LBL_OPTIONS' : '옵션', + 'LBL_OK' : '확인', + 'LBL_DIRECTORY' : '디렉토리', + 'LBL_CREATE' : '생성', + 'LBL_BUGREPORT' : '버그 리포트', + 'LBL_INSTALL' : '설치', + 'LBL_UPDATE' : '수정', + 'LBL_REMOVE' : '제거', + 'LBL_SHOW_SIDEBAR' : '사이드바 보이기', + 'LBL_SHOW_NAVIGATION' : '네비게이션 보이기', + 'LBL_SHOW_HIDDENFILES' : '숨긴 파일 보이기', + 'LBL_SHOW_FILEEXTENSIONS' : '파일 확장자 보이기', + 'LBL_MOUNT': '마운트', + 'LBL_DESCRIPTION': '설명', + 'LBL_USERNAME': '사용자 이름', + 'LBL_PASSWORD': '비밀번호', + 'LBL_HOST': '호스트', + 'LBL_NAMESPACE': '네임스페이스', + 'LBL_BACKGROUND' : '바탕화면', + 'LBL_DESKTOP' : '데스크탑', + 'LBL_PANEL' : '패널', + 'LBL_POSITION' : '위치', + 'LBL_ONTOP' : '상단바 자리 차지', + 'LBL_ITEMS' : '항목', + 'LBL_GENERAL': '일반', + 'LBL_SOUNDS': '소리', + 'LBL_ICONS': '아이콘', + 'LBL_DEBUG' : '디버그', + 'LBL_AUTOHIDE' : '자동 숨기기', + 'LBL_OPACITY' : '투명도', + 'LBL_PACKAGES' : '패키지', + 'LBL_GROUPS' : '그룹', + 'LBL_VERSION' : '버전', + 'LBL_AUTHOR' : '작성자', + 'LBL_Hide' : '숨기기', + 'LBL_APPLICATION' : '어플리케이션', + 'LBL_SCOPE' : '범위', + 'LBL_SEARCH' : '검색' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.zh_CN = { + 'ERR_FILE_OPEN' : '打开文件错误', + 'ERR_WM_NOT_RUNNING' : '窗口管理器未支持', + 'ERR_FILE_OPEN_FMT' : '文件 \'**{0}**\' 无法打开', + 'ERR_APP_MIME_NOT_FOUND_FMT': '找不到能打开此 \'{0}\' 文件的应用', + 'ERR_APP_LAUNCH_FAILED' : '应用运行失败', + 'ERR_APP_LAUNCH_FAILED_FMT' : '运行时出现错误: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : '应用 \'{0}\' 构建失败: {1}', + 'ERR_APP_INIT_FAILED_FMT' : '应用 \'{0}\' 初始化失败: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : '应用资源文件丢失 \'{0}\' 或加载失败', + 'ERR_APP_PRELOAD_FAILED_FMT' : '应用 \'{0}\' 载入失败: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : '这个应用 \'{0}\' 已经运行,且只支持单实例运行', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : '运行应用失败 \'{0}\'. 未找到清单文件', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : '运行应用失败 \'{0}\'. 你的浏览器支持: {1}', + 'ERR_NO_WM_RUNNING' : '没有窗口管理器在运行', + 'ERR_CORE_INIT_FAILED' : '初始化OS.js失败', + 'ERR_CORE_INIT_FAILED_DESC' : '初始化OS.js时出现一个错误', + 'ERR_CORE_INIT_NO_WM' : '无法运行OS.js: 没有指定窗口管理器', + 'ERR_CORE_INIT_WM_FAILED_FMT' : '无法运行OS.js: 运行窗口管理器失败: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : '无法运行OS.js: 无法加载资源文件...', + 'ERR_JAVASCRIPT_EXCEPTION' : '脚本错误报告', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : '发生未知异常, 也许是个BUG.', + 'ERR_APP_API_ERROR' : '应用API错误', + 'ERR_APP_API_ERROR_DESC_FMT' : '应用 {0} 执行操作失败 \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': '缺少参数: {0}', + 'ERR_APP_UNKNOWN_ERROR' : '未知错误', + 'ERR_WIN_DUPLICATE_FMT' : '你已经有了一个被命名的窗口 \'{0}\'', + 'WINDOW_MINIMIZE' : '最小化', + 'WINDOW_MAXIMIZE' : '最大化', + 'WINDOW_RESTORE' : '还原', + 'WINDOW_CLOSE' : '关闭', + 'WINDOW_ONTOP_ON' : '置顶 (开)', + 'WINDOW_ONTOP_OFF': '置顶 (关)', + 'TITLE_SIGN_OUT' : '退出', + 'TITLE_SIGNED_IN_AS_FMT' : '登录: {0}', + 'DIALOG_LOGOUT_TITLE' : '退出 (Exit)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : '注册用户 \'{0}\'.\n你是否想保留当前会话?', + 'DIALOG_CLOSE' : '关闭', + 'DIALOG_CANCEL': '取消', + 'DIALOG_APPLY' : '应用', + 'DIALOG_OK' : '确定', + 'DIALOG_ALERT_TITLE' : '错误', + 'DIALOG_COLOR_TITLE' : '调色板', + 'DIALOG_COLOR_R' : '红: {0}', + 'DIALOG_COLOR_G' : '绿: {0}', + 'DIALOG_COLOR_B' : '蓝: {0}', + 'DIALOG_COLOR_A' : '透明度: {0}', + 'DIALOG_CONFIRM_TITLE' : '确认', + 'DIALOG_ERROR_MESSAGE' : '错误信息', + 'DIALOG_ERROR_SUMMARY' : '错误概要', + 'DIALOG_ERROR_TRACE' : '错误跟踪', + 'DIALOG_ERROR_BUGREPORT' : 'BUG反馈', + 'DIALOG_FILE_SAVE' : '保存', + 'DIALOG_FILE_OPEN' : '打开', + 'DIALOG_FILE_MKDIR' : '新建目录', + 'DIALOG_FILE_MKDIR_MSG' : '在 **{0}** 里创建一个目录', + 'DIALOG_FILE_OVERWRITE' : '你确定要覆盖 \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : '视图类型', + 'DIALOG_FILE_MNU_LISTVIEW' : '列表', + 'DIALOG_FILE_MNU_TREEVIEW' : '树型框', + 'DIALOG_FILE_MNU_ICONVIEW' : '图标', + 'DIALOG_FILE_ERROR' : '文件错误', + 'DIALOG_FILE_ERROR_SCANDIR': '有错误发生,导致无法显示目录 \'{0}\' 列表', + 'DIALOG_FILE_MISSING_FILENAME' : '你需要选择一个文件或者输入一个文件名!', + 'DIALOG_FILE_MISSING_SELECTION': '你需要选择一个文件!', + 'DIALOG_FILEINFO_TITLE' : '文件信息', + 'DIALOG_FILEINFO_LOADING' : '从 {0} 加载文件信息', + 'DIALOG_FILEINFO_ERROR' : '读取文件信息错误', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : '无法获取**{0}**的文件信息', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : '无法获取文件信息: {0}', + 'DIALOG_INPUT_TITLE' : '输入', + 'DIALOG_FILEPROGRESS_TITLE' : '文件操作', + 'DIALOG_FILEPROGRESS_LOADING' : '加载中...', + 'DIALOG_UPLOAD_TITLE' : '上传', + 'DIALOG_UPLOAD_DESC' : '上传文件到**{0}**.
最大限制: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : '正在上传 \'{0}\' ({1} {2}) 到 {3}', + 'DIALOG_UPLOAD_MSG' : '上传文件...', + 'DIALOG_UPLOAD_FAILED' : '上传失败', + 'DIALOG_UPLOAD_FAILED_MSG' : '上传文件失败', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : '未知原因...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': '用户取消...', + 'DIALOG_UPLOAD_TOO_BIG': '文件过大', + 'DIALOG_UPLOAD_TOO_BIG_FMT': '文件过大, 超过 {0}', + 'DIALOG_FONT_TITLE' : '字体', + 'DIALOG_APPCHOOSER_TITLE' : '选择应用', + 'DIALOG_APPCHOOSER_MSG' : '选择一个应用打开', + 'DIALOG_APPCHOOSER_NO_SELECTION' : '你必须要选择一个应用', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : '使用默认应用打开 {0}', + 'GAPI_DISABLED' : 'GoogleAPI 模块未配置或者未开启', + 'GAPI_SIGN_OUT' : '注销GoogleAPI', + 'GAPI_REVOKE' : '撤销权限并注销', + 'GAPI_AUTH_FAILURE' : 'GoogleAPI 认证失败或者未认证', + 'GAPI_AUTH_FAILURE_FMT' : '认证失败: {0}:{1}', + 'GAPI_LOAD_FAILURE' : '加载Google API失败', + 'WLAPI_DISABLED' : 'Windows Live API 模块未配置或者未开启', + 'WLAPI_SIGN_OUT' : '注销Window Live API', + 'WLAPI_LOAD_FAILURE' : '加载 Windows Live API失败', + 'WLAPI_LOGIN_FAILED' : '无法登录到Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : '无法登录到Windows Live API: {0}', + 'IDB_MISSING_DBNAME' : '数据库名称未定义,无法创建数据库', + 'IDB_NO_SUCH_ITEM' : '没有项目', + 'ERR_VFS_FATAL' : '致命的错误', + 'ERR_VFS_UNAVAILABLE' : '不可用', + 'ERR_VFS_FILE_ARGS' : '文件至少需要一个参数', + 'ERR_VFS_NUM_ARGS' : '参数不够', + 'ERR_VFS_EXPECT_FILE' : '需要一个文件对象', + 'ERR_VFS_EXPECT_SRC_FILE' : '需要一个文件内容对象', + 'ERR_VFS_EXPECT_DST_FILE' : '需要目标文件', + 'ERR_VFS_FILE_EXISTS' : '目标文件已存在', + 'ERR_VFS_TRANSFER_FMT' : '保存时发生错误: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : '没有指定目标文件路径,无法上传', + 'ERR_VFS_UPLOAD_NO_FILES' : '没有指定文件,无法上传。', + 'ERR_VFS_UPLOAD_FAIL_FMT' : '上传失败: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': '文件上传取消', + 'ERR_VFS_DOWNLOAD_NO_FILE': '未指定文件路径无法下载', + 'ERR_VFS_DOWNLOAD_FAILED' : '文件下载时发生活错误: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': '下载文件', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR 错误', + 'ERR_VFSMODULE_ROOT_ID' : '找不到要根目录', + 'ERR_VFSMODULE_NOSUCH' : '文件不存在', + 'ERR_VFSMODULE_PARENT' : '上层目录不存在', + 'ERR_VFSMODULE_PARENT_FMT' : '无法浏览上层目录: {0}', + 'ERR_VFSMODULE_SCANDIR' : '搜索目录失败', + 'ERR_VFSMODULE_SCANDIR_FMT' : '搜索目录失败: {0}', + 'ERR_VFSMODULE_READ' : '读取文件失败', + 'ERR_VFSMODULE_READ_FMT' : '读取文件失败: {0}', + 'ERR_VFSMODULE_WRITE' : '写入文件失败', + 'ERR_VFSMODULE_WRITE_FMT' : '写入文件失败: {0}', + 'ERR_VFSMODULE_COPY' : '复制文件失败', + 'ERR_VFSMODULE_COPY_FMT' : '复制文件失败: {0}', + 'ERR_VFSMODULE_UNLINK' : '删除文件失败 file', + 'ERR_VFSMODULE_UNLINK_FMT' : '删除文件失败: {0}', + 'ERR_VFSMODULE_MOVE' : '移动文件失败', + 'ERR_VFSMODULE_MOVE_FMT' : '移动文件失败: {0}', + 'ERR_VFSMODULE_EXIST' : '检查文件是否存在失败', + 'ERR_VFSMODULE_EXIST_FMT' : '检查文件是否存在失败: {0}', + 'ERR_VFSMODULE_FILEINFO' : '获取文件信息失败', + 'ERR_VFSMODULE_FILEINFO_FMT' : '获取文件信息失败: {0}', + 'ERR_VFSMODULE_MKDIR' : '创建目录失败', + 'ERR_VFSMODULE_MKDIR_FMT' : '创建目录失败: {0}', + 'ERR_VFSMODULE_URL' : '获取远程文件失败', + 'ERR_VFSMODULE_URL_FMT' : '获取远程文件失败: {0}', + 'ERR_VFSMODULE_TRASH' : '将文件移动到回收站失败', + 'ERR_VFSMODULE_TRASH_FMT' : '将文件移动到回收站失败: {0}', + 'ERR_VFSMODULE_UNTRASH' : '将文件移出回收站失败', + 'ERR_VFSMODULE_UNTRASH_FMT' : '将文件移出回收站失败: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : '清空回收收失败', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : '清空回收收失败: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : '你正在登录到Dropbox API', + 'DROPBOX_SIGN_OUT' : '注销Google API 服务', + 'ONEDRIVE_ERR_RESOLVE' : '找不到项目', + 'ERR_FILE_APP_OPEN' : '无法打开文件', + 'ERR_FILE_APP_OPEN_FMT' : '文件 {0} 的类型 {1} 不支持,无法打开', + 'ERR_FILE_APP_OPEN_ALT_FMT' : '文件 {0} 无法打开', + 'ERR_FILE_APP_SAVE_ALT_FMT' : '文件 {0} 无法保存', + 'ERR_GENERIC_APP_FMT' : '{0} 应用错误', + 'ERR_GENERIC_APP_ACTION_FMT': '无法执行此操作 \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : '未知错误', + 'ERR_GENERIC_APP_REQUEST' : '请求时发生错误', + 'ERR_GENERIC_APP_FATAL_FMT' : '致命错误: {0}', + 'MSG_GENERIC_APP_DISCARD' : '放弃更改?', + 'MSG_FILE_CHANGED' : '该文件已更改。确定重新载入?', + 'MSG_APPLICATION_WARNING' : '应用警告', + 'MSG_MIME_OVERRIDE' : '该文件 "{0}" 的类型不支持,用 "{1}" 替代.', + 'LBL_UNKNOWN' : '未知', + 'LBL_APPEARANCE' : '外观', + 'LBL_USER' : '用户', + 'LBL_NAME' : '名称', + 'LBL_APPLY' : '应用', + 'LBL_FILENAME' : '文件名', + 'LBL_PATH' : '路径', + 'LBL_SIZE' : '大小', + 'LBL_TYPE' : '类似', + 'LBL_MIME' : '扩展类型', + 'LBL_LOADING' : '加载', + 'LBL_SETTINGS' : '设置', + 'LBL_ADD_FILE' : '添加文件', + 'LBL_COMMENT' : '评论', + 'LBL_ACCOUNT' : '账户', + 'LBL_CONNECT' : '联系', + 'LBL_ONLINE' : '在线', + 'LBL_OFFLINE' : '离线', + 'LBL_AWAY' : '离开', + 'LBL_BUSY' : '忙碌', + 'LBL_CHAT' : '聊天', + 'LBL_HELP' : '帮助', + 'LBL_ABOUT' : '关于', + 'LBL_PANELS' : '控制板', + 'LBL_LOCALES' : '本地化', + 'LBL_THEME' : '主题', + 'LBL_COLOR' : '颜色', + 'LBL_PID' : '句柄', + 'LBL_KILL' : '结束', + 'LBL_ALIVE' : '活动', + 'LBL_INDEX' : '索引', + 'LBL_ADD' : '添加', + 'LBL_FONT' : '字体', + 'LBL_YES' : '是', + 'LBL_NO' : '否', + 'LBL_CANCEL' : '取消', + 'LBL_TOP' : '上', + 'LBL_LEFT' : '左', + 'LBL_RIGHT' : '右', + 'LBL_BOTTOM' : '下', + 'LBL_CENTER' : '中', + 'LBL_FILE' : '文件', + 'LBL_NEW' : '新建', + 'LBL_OPEN' : '打开', + 'LBL_SAVE' : '保存', + 'LBL_SAVEAS' : '加存为...', + 'LBL_CLOSE' : '关闭', + 'LBL_MKDIR' : '创建目录', + 'LBL_UPLOAD' : '上传', + 'LBL_VIEW' : '查看', + 'LBL_EDIT' : '编辑', + 'LBL_RENAME' : '重命名', + 'LBL_DELETE' : '删除', + 'LBL_OPENWITH' : '打开方式...', + 'LBL_ICONVIEW' : '图标', + 'LBL_TREEVIEW' : '树型框', + 'LBL_LISTVIEW' : '列表', + 'LBL_REFRESH' : '刷新', + 'LBL_VIEWTYPE' : '视图类型', + 'LBL_BOLD' : '加粗', + 'LBL_ITALIC' : '斜体', + 'LBL_UNDERLINE' : '下划线', + 'LBL_REGULAR' : '对齐', + 'LBL_STRIKE' : '删除线', + 'LBL_INDENT' : '缩进', + 'LBL_OUTDENT' : '减少缩进', + 'LBL_UNDO' : '撤销', + 'LBL_REDO' : '重做', + 'LBL_CUT' : '剪切', + 'LBL_UNLINK' : '删除', + 'LBL_COPY' : '复制', + 'LBL_PASTE' : '粘贴', + 'LBL_INSERT' : '插入', + 'LBL_IMAGE' : '图片', + 'LBL_LINK' : '链接', + 'LBL_DISCONNECT' : '清除链接', + 'LBL_APPLICATIONS' : '应用', + 'LBL_ADD_FOLDER' : '添加目录', + 'LBL_INFORMATION' : '文件信息', + 'LBL_TEXT_COLOR' : '字体颜色', + 'LBL_BACK_COLOR' : '背景颜色', + 'LBL_RESET_DEFAULT' : '恢复默认设置', + 'LBL_DOWNLOAD_COMP' : '下载到电脑', + 'LBL_ORDERED_LIST' : '有序列表', + 'LBL_BACKGROUND_IMAGE' : '背景图片', + 'LBL_BACKGROUND_COLOR' : '背景颜色', + 'LBL_UNORDERED_LIST' : '无序列表', + 'LBL_STATUS' : '状态', + 'LBL_READONLY' : '只读' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.nl_NL = { + 'ERR_FILE_OPEN' : 'Fout bij openen bestand', + 'ERR_WM_NOT_RUNNING' : 'Window manager is niet gestart', + 'ERR_FILE_OPEN_FMT' : 'Het bestand \'**{0}**\' kon niet worden geopend', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Kon geen programma vinden die \'{0}\' kan openen', + 'ERR_APP_LAUNCH_FAILED' : 'Starten van het programma is mislukt', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Er is een probleem opgetreden tijden het starten van: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Toepassing \'{0}\' construct failed: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Toepassing \'{0}\' init() failed: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Toepassing bronnen ontbreken \'{0}\' of kon niet laden!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Toepassing \'{0}\' preload niet geslaagd: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'De toepassing \'{0}\' is al gestart en staat geen tweede instantie toe!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Starten van \'{0}\' is niet geslaagd. Application manifest data niet gevonden!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Starteb van \'{0}\' is niet geslaagd. De browser wordt niet ondersteund: {1}', + 'ERR_NO_WM_RUNNING' : 'Window manager is niet gestart', + 'ERR_CORE_INIT_FAILED' : 'Initialisatie van OS.js mislukt', + 'ERR_CORE_INIT_FAILED_DESC' : 'Er is een fout opgetreden tijdens de initialisatie van OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Kan OS.js niet starten: Geen window manager gedefineerd!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Kan OS.js niet starten: Window manager: {0} wil niet starten', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Kan OS.js niet starten: Fout bij het voorladen van bronnen...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Fout Rapportage', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Een onverwachte fout opgetreden, mogelijk een bug.', + 'ERR_APP_API_ERROR' : 'Applicatie API fout', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Applicatie {0} Kan actie \'{1}\' niet uitvoeren', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Missend argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Onbekende fout', + 'ERR_OPERATION_TIMEOUT' : 'Operatie Timeout', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Operatie Timeout ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' verwacht dat \'{1}\' een \'{2}\' is, niet \'{3}\'', + 'ERR_WIN_DUPLICATE_FMT' : 'Er is al een venster met de naam: \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimaliseren', + 'WINDOW_MAXIMIZE' : 'Maximaliseren', + 'WINDOW_RESTORE' : 'Herstellen', + 'WINDOW_CLOSE' : 'Sluiten', + 'WINDOW_ONTOP_ON' : 'Naar voorgrond (Aan)', + 'WINDOW_ONTOP_OFF': 'Naar voorgrond (Uit)', + 'TITLE_SIGN_OUT' : 'Afmelden', + 'TITLE_SIGNED_IN_AS_FMT' : 'Aangemeld als: {0}', + 'ERR_LOGIN_FMT' : 'Login fout: {0}', + 'ERR_LOGIN_INVALID' : 'Onjuiste aanmelding', + 'MSG_SESSION_WARNING' : 'Weet je zeker dat je OS.js wilt verlaten? Alle niet opgeslagen instellingen en applicatie data zal verloren gaan!', + 'BUGREPORT_MSG' : 'Vriendelijk verzoek dit probleem te rapporteren.\nVoeg een korte omschrijving toe en als het lukt; Hoe we dit kunnen nabootsen', + 'SERVICENOTIFICATION_TOOLTIP' : 'Aangemeld bij externe service: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Fatale Fout', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR Fout: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Afmelden', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : ' \'{0}\'.\nWilt u deze sessie opslaan?', + 'DIALOG_CLOSE' : 'Sluiten', + 'DIALOG_CANCEL': 'Annuleren', + 'DIALOG_APPLY' : 'Bevestigen', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Waarschuwing', + 'DIALOG_COLOR_TITLE' : 'Kleuren', + 'DIALOG_COLOR_R' : 'Rood: {0}', + 'DIALOG_COLOR_G' : 'Groen: {0}', + 'DIALOG_COLOR_B' : 'Blauw: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Bevestiging', + 'DIALOG_ERROR_MESSAGE' : 'Bericht', + 'DIALOG_ERROR_SUMMARY' : 'Opsomming', + 'DIALOG_ERROR_TRACE' : 'Trace', + 'DIALOG_ERROR_BUGREPORT' : 'Fouten rapport', + 'DIALOG_FILE_SAVE' : 'Opslaan', + 'DIALOG_FILE_OPEN' : 'Openen', + 'DIALOG_FILE_MKDIR' : 'Nieuwe map', + 'DIALOG_FILE_MKDIR_MSG' : 'Maak nieuwe map in **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Weet u zeker dat het bestand \'{0}\' overschreven moet worden?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Weergave', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Lijst weergave', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Boom weergave', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Icoontje', + 'DIALOG_FILE_ERROR' : 'BestandsDialoog Fout', + 'DIALOG_FILE_ERROR_SCANDIR': 'Kan de map niet doorzoeken \'{0}\' Er is een storing opgetreden', + 'DIALOG_FILE_MISSING_FILENAME' : 'Selecteer een bestand of geef een naam op!', + 'DIALOG_FILE_MISSING_SELECTION': 'Selecteer een bestand!', + 'DIALOG_FILEINFO_TITLE' : 'Bestands informatie', + 'DIALOG_FILEINFO_LOADING' : 'Bestands informatie laden van: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Bestanda informatie Fout', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Ophalen van informatie van **{0}** is mislukt', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Ophalen van informatie van: {0} is mislukt', + 'DIALOG_INPUT_TITLE' : 'Input Dialoog', + 'DIALOG_FILEPROGRESS_TITLE' : 'Voortgang', + 'DIALOG_FILEPROGRESS_LOADING' : 'Laden...', + 'DIALOG_UPLOAD_TITLE' : 'Upload Dialoog', + 'DIALOG_UPLOAD_DESC' : 'Upload bestand naar **{0}**.
Maximum grootte: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Bezig met uploaden \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Bezig met uploaden...', + 'DIALOG_UPLOAD_FAILED' : 'Uploaden is niet gelukt', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Uploaden is niet gelukt', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Oorzaak onbekend...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Geannuleerd door de gebruiker...', + 'DIALOG_UPLOAD_TOO_BIG': 'Het bestand is te groot', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Het bestand is te groot, overschrijdt {0}', + 'DIALOG_FONT_TITLE' : 'Lettertype', + 'DIALOG_APPCHOOSER_TITLE' : 'Kies een programma', + 'DIALOG_APPCHOOSER_MSG' : 'Kies een programma om te openen', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'U moet een programma kiezen', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Instellen als standaard programma voor {0}', + 'GAPI_DISABLED' : 'GoogleAPI Module is niet geconfigureerd of uitgeschakeld', + 'GAPI_SIGN_OUT' : 'Afmelden bij Google API Services', + 'GAPI_REVOKE' : 'Permissies herstellen en afmelden', + 'GAPI_AUTH_FAILURE' : 'Google API Authentificatie niet gelukt of heeft niet plaatsgevonden', + 'GAPI_AUTH_FAILURE_FMT' : 'Authentificatie mislukt: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Google API laden is mislukt', + 'WLAPI_DISABLED' : 'Windows Live API module is niet geconfigureerd of uitgeschakeld', + 'WLAPI_SIGN_OUT' : 'Afmelden bij Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Windows Live API niet geladen', + 'WLAPI_LOGIN_FAILED' : 'Aanmelden bij Windows Live mislukt', + 'WLAPI_LOGIN_FAILED_FMT' : 'Aanmelden bij Windows Live misluk: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live status: {0}', + 'IDB_MISSING_DBNAME' : 'Kan geen IndexedDB maken zonder database naam', + 'IDB_NO_SUCH_ITEM' : 'Item bestaat niet', + 'ERR_VFS_FATAL' : 'Fatale Fout', + 'ERR_VFS_UNAVAILABLE' : 'Niet beschikbaar', + 'ERR_VFS_FILE_ARGS' : 'Bestand verwacht tenminste 1 optie', + 'ERR_VFS_NUM_ARGS' : 'Onjuist aantal opties', + 'ERR_VFS_EXPECT_FILE' : 'Dit is geen bestands-object', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Dit is geen bronbestand', + 'ERR_VFS_EXPECT_DST_FILE' : 'Verwacht een bestemmings bestand', + 'ERR_VFS_FILE_EXISTS' : 'Bestemming bestaat al', + 'ERR_VFS_TRANSFER_FMT' : 'Er is een fout opgetreden bij het omzetten van opslag: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Kan het bestand niet uploaden zonder bestemming', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Geen bestand gedefineerd om te uploaden', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Bestand uploaden is mislukt: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Bestands upload is geannuleerd', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Kan niet downloaden zonder pad', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Er is een fout opgetreden tijdens het downloaden: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'De reactie was leeg', + 'ERR_VFSMODULE_INVALID' : 'Ongeldige VFS Module', + 'ERR_VFSMODULE_INVALID_FMT' : 'Ongeldige VFS Module: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Ongeldige VFS Methode', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Ongeldige VFS Methode: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Ongeldige VFS Module type', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Ongeldige VFS Module type: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Ongeldige VFS Module configuratie', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Ongeldige VFS Module configuratie: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'VFS Module reeds gekoppeld', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'VFS Module \'{0}\' reeds gekoppeld', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'VFS Module niet gekoppeld', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'VFS Module \'{0}\' niet gekoppeld', + 'ERR_VFSMODULE_EXCEPTION' : 'VFS Module Exceptie', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'VFS Module Exceptie: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'Geen VFS Module komt overeen met {0}. Verkeerd pad or formaat ?', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Bestand downloaden', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR Fout', + 'ERR_VFSMODULE_ROOT_ID' : 'ID van root map niet gevonden', + 'ERR_VFSMODULE_NOSUCH' : 'Het bestand bestaat niet', + 'ERR_VFSMODULE_PARENT' : 'Ouder bestaat niet', + 'ERR_VFSMODULE_PARENT_FMT' : 'Ouder opzoeken mislukt: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Mappen scannen mislukt', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Mappen scannen mislukt: {0}', + 'ERR_VFSMODULE_READ' : 'Bestand lezen mislukt', + 'ERR_VFSMODULE_READ_FMT' : 'Bestand lezen misluk: {0}', + 'ERR_VFSMODULE_WRITE' : 'Bestand schrijven misluk', + 'ERR_VFSMODULE_WRITE_FMT' : 'Bestand schrijven misluk: {0}', + 'ERR_VFSMODULE_COPY' : 'Kopieren mislukt', + 'ERR_VFSMODULE_COPY_FMT' : 'Kopieren mislukt: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Fout bij unlink opdracht', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Fout bij unlink opdrachte: {0}', + 'ERR_VFSMODULE_MOVE' : 'Bestand verplaatsen mislukt', + 'ERR_VFSMODULE_MOVE_FMT' : 'Bestand verplaatsen mislukt: {0}', + 'ERR_VFSMODULE_EXIST' : 'Fout tijdens het bepalen van het bestaan van een bestand', + 'ERR_VFSMODULE_EXIST_FMT' : 'Fout tijdens het bepalen van het bestaan van een bestand: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Bestands informatie lezen is mislukt', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Bestands informatie lezen is mislukt: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Map maken is mislukt', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Map maken is mislukt: {0}', + 'ERR_VFSMODULE_URL' : 'Fout bij het verkrijgen van een URL', + 'ERR_VFSMODULE_URL_FMT' : 'Fout bij het verkrijgen van een URL: {0}', + 'ERR_VFSMODULE_TRASH' : 'Fout bij het verplaatsen naar de prullebak', + 'ERR_VFSMODULE_TRASH_FMT' : 'Fout bij het verplaatsen naar de prullebak: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Fout bij het verplaatsen uit de prullebak', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Fout bij het verplaatsen uit de prullebak: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Fout bij het legen van de prullebak', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Fout bij het legen van de prullebak: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Aangemeld bij Dropbox', + 'DROPBOX_SIGN_OUT' : 'Afmelden bij Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'Kan het pad niet oplossen: item niet gevonden', + 'ZIP_PRELOAD_FAIL' : 'Laden van zip.js mislukt', + 'ZIP_VENDOR_FAIL' : 'zip.js niet gevonden. Is het correct geladen?', + 'ZIP_NO_RESOURCE' : 'Geen zip bestand opgegeven', + 'ZIP_NO_PATH' : 'Geen pad opgegeven', + 'ERR_PACKAGE_EXISTS': 'Pakket installatie map bestaat al. Kan niet verder gaan!', + 'ERR_FILE_APP_OPEN' : 'Kan het bestand niet openen', + 'ERR_FILE_APP_OPEN_FMT' : 'Het bestand {0} kan niet worden geopend {1} wordt niet ondersteund', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Het bestand {0} kan niet worden geopend', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Het bestand {0} kan niet worden opgeslagen', + 'ERR_GENERIC_APP_FMT' : '{0} Toepassing Fout', + 'ERR_GENERIC_APP_ACTION_FMT': 'Kan de actie \'{0}\' niet voltooien', + 'ERR_GENERIC_APP_UNKNOWN' : 'Onbekende Fout', + 'ERR_GENERIC_APP_REQUEST' : 'Er is een fout opgetreden tijdens het afhandelen van dit verzoek', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Fatale Fout: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Wijzigingen ongedaan maken?', + 'MSG_FILE_CHANGED' : 'Het bestand is gewijzigd. Opnieuw laden?', + 'MSG_APPLICATION_WARNING' : 'Waarschuwing', + 'MSG_MIME_OVERRIDE' : 'Het bestandstype "{0}" wordt niet ondersteund, suggestie: "{1}"', + 'LBL_UNKNOWN' : 'Onbekend', + 'LBL_APPEARANCE' : 'Weergave', + 'LBL_USER' : 'Gebruiker', + 'LBL_NAME' : 'Naam', + 'LBL_APPLY' : 'Bevestigen', + 'LBL_FILENAME' : 'Bestandsnaam', + 'LBL_PATH' : 'Map', + 'LBL_SIZE' : 'Grootte', + 'LBL_TYPE' : 'Type', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Laden', + 'LBL_SETTINGS' : 'Instellingen', + 'LBL_ADD_FILE' : 'Bestand toevoegen', + 'LBL_COMMENT' : 'Opmerking', + 'LBL_ACCOUNT' : 'Account', + 'LBL_CONNECT' : 'Verbinden', + 'LBL_ONLINE' : 'Verbonden', + 'LBL_OFFLINE' : 'Verbroken', + 'LBL_AWAY' : 'Afwezig', + 'LBL_BUSY' : 'Bezig', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Help', + 'LBL_ABOUT' : 'Over', + 'LBL_PANELS' : 'Panelen', + 'LBL_LOCALES' : 'Talen', + 'LBL_THEME' : 'Thema', + 'LBL_COLOR' : 'Kleur', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Stop', + 'LBL_ALIVE' : 'Aktief', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Toevoegen', + 'LBL_FONT' : 'Lettertype', + 'LBL_YES' : 'Ja', + 'LBL_NO' : 'Nee', + 'LBL_CANCEL' : 'Annuleren', + 'LBL_TOP' : 'Boven', + 'LBL_LEFT' : 'Links', + 'LBL_RIGHT' : 'Rechts', + 'LBL_BOTTOM' : 'Onder', + 'LBL_CENTER' : 'Midden', + 'LBL_FILE' : 'Bestand', + 'LBL_NEW' : 'Nieuw', + 'LBL_OPEN' : 'Open', + 'LBL_SAVE' : 'Opslaan', + 'LBL_SAVEAS' : 'opslaan als...', + 'LBL_CLOSE' : 'Sluiten', + 'LBL_MKDIR' : 'Nieuwe map maken', + 'LBL_UPLOAD' : 'Uploaden', + 'LBL_VIEW' : 'Beeld', + 'LBL_EDIT' : 'Bewerken', + 'LBL_RENAME' : 'Hernoemen', + 'LBL_DELETE' : 'Verwijderen', + 'LBL_OPENWITH' : 'Openen met ...', + 'LBL_ICONVIEW' : 'Icoon weergave', + 'LBL_TREEVIEW' : 'Boom weergave', + 'LBL_LISTVIEW' : 'Lijst weergave', + 'LBL_REFRESH' : 'Verversen', + 'LBL_VIEWTYPE' : 'Weergave type', + 'LBL_BOLD' : 'Vet', + 'LBL_ITALIC' : 'Schuin', + 'LBL_UNDERLINE' : 'Onderstreept', + 'LBL_REGULAR' : 'Normaal', + 'LBL_STRIKE' : 'Doorgehaald', + 'LBL_INDENT' : 'Inspringen', + 'LBL_OUTDENT' : 'Uitspringen', + 'LBL_UNDO' : 'Ongedaan maken', + 'LBL_REDO' : 'Ongedaan maken herstellen', + 'LBL_CUT' : 'Knip', + 'LBL_UNLINK' : 'Unlink', + 'LBL_COPY' : 'Kopieren', + 'LBL_PASTE' : 'Plakken', + 'LBL_INSERT' : 'Invoegen', + 'LBL_IMAGE' : 'Afbeelding', + 'LBL_LINK' : 'Link', + 'LBL_DISCONNECT' : 'Verbreken', + 'LBL_APPLICATIONS' : 'Toepassingen', + 'LBL_ADD_FOLDER' : 'Map toevoegen', + 'LBL_INFORMATION' : 'Informatie', + 'LBL_TEXT_COLOR' : 'Tekst kleur', + 'LBL_BACK_COLOR' : 'Achtergrond kleur', + 'LBL_RESET_DEFAULT' : 'Standaard instelling terug zetten', + 'LBL_DOWNLOAD_COMP' : 'Downloaden naar je computer', + 'LBL_ORDERED_LIST' : 'Gesorteerde lijst', + 'LBL_BACKGROUND_IMAGE' : 'Achtergrond afbeelding', + 'LBL_BACKGROUND_COLOR' : 'Achtergrond kleur', + 'LBL_UNORDERED_LIST' : 'Ongesorteerde lijst', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Alleen lezen', + 'LBL_CREATED' : 'Aangemaakt', + 'LBL_MODIFIED' : 'Gewijzigd', + 'LBL_SHOW_COLUMNS' : 'Kolommen tonen', + 'LBL_MOVE' : 'Verplaats', + 'LBL_OPTIONS' : 'Opties', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Map', + 'LBL_CREATE' : 'Aanmaken', + 'LBL_BUGREPORT' : 'Bugreport', + 'LBL_INSTALL' : 'Installeer', + 'LBL_UPDATE' : 'Update', + 'LBL_REMOVE' : 'Verwijder', + 'LBL_SHOW_SIDEBAR' : 'Zijbar tonen', + 'LBL_SHOW_NAVIGATION' : 'Navigatie tonen', + 'LBL_SHOW_HIDDENFILES' : 'Laat verborgen bestanden zien', + 'LBL_SHOW_FILEEXTENSIONS' : 'Toon bestandsextensies', + 'LBL_MOUNT': 'Koppelen', + 'LBL_DESCRIPTION': 'Omschrijving', + 'LBL_USERNAME': 'Gebruikersnaam', + 'LBL_PASSWORD': 'Wachtwoord', + 'LBL_HOST': 'Host', + 'LBL_NAMESPACE': 'Namespace', + 'LBL_BACKGROUND' : 'Achtergrond', + 'LBL_DESKTOP' : 'Bureaublad', + 'LBL_PANEL' : 'Paneel', + 'LBL_POSITION' : 'Positie', + 'LBL_ONTOP' : 'Voorgrond', + 'LBL_ITEMS' : 'Items', + 'LBL_GENERAL': 'Algemeen' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.pl_PL = { + 'ERR_FILE_OPEN' : 'Błąd otwierania pliku', + 'ERR_WM_NOT_RUNNING' : 'Menedżer okien nie jest włączony', + 'ERR_FILE_OPEN_FMT' : 'Nie można otworzyć \'**{0}**\'', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Nie można znaleźć aplikacji wspierającej \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Błąd otwierania aplikacji', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Błąd podczas uruchamiania aplikacji: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Konstruowanie aplikacji \'{0}\' nie powiodło się: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'init() aplikacji \'{0}\' nie powiodło się: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Brakuje zasobów dla aplikacji \'{0}\' lub ładowanie nie powiodło się!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Wstępne ładowanie aplikacji \'{0}\' nie powiodło się: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Aplikacja \'{0}\' została juz otwarta, a nie może być uruchomiona wielokrotnie!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Nie można otworzyć \'{0}\'. Nie znaleziono danych manifestu aplikacji!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Nie można otworzyć \'{0}\'. Twoja przeglądarka nie wspiera: {1}', + 'ERR_NO_WM_RUNNING' : 'Menedżer okien nie został uruchomiony', + 'ERR_CORE_INIT_FAILED' : 'Nie można zainicjalizować OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Błąd podczas inicjalizacji OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Nie można uruchomić OS.js: Nie wybrano Menedżera Okien!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Nie można uruchomić OS.js: Błąd uruchamiania Menedżera Okien: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Nie można uruchomić OS.js: Błąd przeładowywania plików...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Błąd Javascript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Nieznany błąd.', + 'ERR_APP_API_ERROR' : 'Błąd API Aplikacji', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Aplikacja {0} nie może wykonać operacji \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Brakujący argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Nieznany błąd', + 'ERR_OPERATION_TIMEOUT' : 'Przekroczono Czas Operacji', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Przekroczono Czas Operacji ({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'Masz już uruchomione Okno z nazwą \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimalizuj', + 'WINDOW_MAXIMIZE' : 'Maksymalizuj', + 'WINDOW_RESTORE' : 'Przywroć', + 'WINDOW_CLOSE' : 'Zamknij', + 'WINDOW_ONTOP_ON' : 'U Góry (Włączone)', + 'WINDOW_ONTOP_OFF': 'U Góry (Wyłączone)', + 'TITLE_SIGN_OUT' : 'Wyloguj', + 'TITLE_SIGNED_IN_AS_FMT' : 'Zalogowano jako: {0}', + 'MSG_SESSION_WARNING' : 'Czy na pewno chcesz opuścić OS.js? Wszystkie niezapisane ustawienia i dane aplikacji zostaną utracone!', + 'BUGREPORT_MSG' : 'Wyślij proszę raport błędu jesli uważasz, że jest to błąd.\nDołącz opis błędu', + 'SERVICENOTIFICATION_TOOLTIP' : 'Zalogowano w zewnętrznych serwisach: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Błąd krytyczny', + 'ERR_UTILS_XHR_FMT' : 'Błąd AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Wylogowywanie (Exit)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Wylogowywanie \'{0}\'.\nCzy chcesz zapisać sesję?', + 'DIALOG_CLOSE' : 'Zamknij', + 'DIALOG_CANCEL': 'Anuluj', + 'DIALOG_APPLY' : 'Zastosuj', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Powiadomienia', + 'DIALOG_COLOR_TITLE' : 'Kolor', + 'DIALOG_COLOR_R' : 'Czerwony: {0}', + 'DIALOG_COLOR_G' : 'Zielony: {0}', + 'DIALOG_COLOR_B' : 'Niebieski: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Potwierdź', + 'DIALOG_ERROR_MESSAGE' : 'Wiadomość', + 'DIALOG_ERROR_SUMMARY' : 'Podsumowanie', + 'DIALOG_ERROR_TRACE' : 'Śledzenie', + 'DIALOG_ERROR_BUGREPORT' : 'Raport błędu', + 'DIALOG_FILE_SAVE' : 'Zapisz', + 'DIALOG_FILE_OPEN' : 'Otwórz', + 'DIALOG_FILE_MKDIR' : 'Nowy folder', + 'DIALOG_FILE_MKDIR_MSG' : 'Nowy folder w **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Czy chcesz nadpisać plik \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Widok', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Lista', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Drzewo', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Ikony', + 'DIALOG_FILE_ERROR' : 'Błąd okna dialogowego pliku', + 'DIALOG_FILE_ERROR_SCANDIR': 'Nie udało się wylistować katalogu \'{0}\' z powodu wystąpienia błędu', + 'DIALOG_FILE_MISSING_FILENAME' : 'Zaznacz plik albo wpisz nazwę nowego pliku!', + 'DIALOG_FILE_MISSING_SELECTION': 'Zaznacz plik!', + 'DIALOG_FILEINFO_TITLE' : 'Informacje', + 'DIALOG_FILEINFO_LOADING' : 'Ładowanie informacji dla: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Błąd okna Informacji o pliku', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Nie udało się uzyskać informacji dla **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Nie udało się uzyskać informacji dla: {0}', + 'DIALOG_INPUT_TITLE' : 'Wprowadzanie', + 'DIALOG_FILEPROGRESS_TITLE' : 'Postęp', + 'DIALOG_FILEPROGRESS_LOADING' : 'Ładowanie...', + 'DIALOG_UPLOAD_TITLE' : 'Wysyłanie', + 'DIALOG_UPLOAD_DESC' : 'Wysyłanie pliku do **{0}**.
Maksymalny rozmiar: {1} bitów', + 'DIALOG_UPLOAD_MSG_FMT' : 'Wysyłanie \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Wysyłanie pliku...', + 'DIALOG_UPLOAD_FAILED' : 'Błąd wywołania', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Wywołanie nie powiodło się', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Powód nieznany...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Anulowane przez użytkownika...', + 'DIALOG_UPLOAD_TOO_BIG': 'Plik jest za duży', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Plik jest za duży, przekracza {0}', + 'DIALOG_FONT_TITLE' : 'Czcionka', + 'DIALOG_APPCHOOSER_TITLE' : 'Wybierz aplikację', + 'DIALOG_APPCHOOSER_MSG' : 'Wybierz aplikację do otwarcia', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Wybierz aplikację', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Używaj jako domyślną aplikację do {0}', + 'GAPI_DISABLED' : 'Moduł GoogleAPI jest nie skonfigurowany albo jest wyłączony', + 'GAPI_SIGN_OUT' : 'Wyloguj z Serwisu Google API', + 'GAPI_REVOKE' : 'Odwołaj uprawnienia i wyloguj', + 'GAPI_AUTH_FAILURE' : 'Autentykacja Google API nie powiodła się lub nie miała miejsca', + 'GAPI_AUTH_FAILURE_FMT' : 'Nie można uwierzytelnić: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Nie można załadować Google API', + 'WLAPI_DISABLED' : 'Moduł Windows Live API nie jest skonfigurowany albo jest wyłączony', + 'WLAPI_SIGN_OUT' : 'Wyloguj z Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Nie można załadować Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Nie można zalogować do Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Nie można zalogować do Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API zwróciło status {0}', + 'IDB_MISSING_DBNAME' : 'Nie mozna utworzyć IndexedDB bez Nazwy Bazy Danych', + 'IDB_NO_SUCH_ITEM' : 'Brak takiego elementu', + 'ERR_VFS_FATAL' : 'Błąd krytyczny', + 'ERR_VFS_UNAVAILABLE' : 'Niedostępne', + 'ERR_VFS_FILE_ARGS' : 'Plik oczekuje co najmniej jednego argumentu', + 'ERR_VFS_NUM_ARGS' : 'Za mało argumentów', + 'ERR_VFS_EXPECT_FILE' : 'Oczekuje obiektu-pliku', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Oczekuje źródłowego obiektu-pliku', + 'ERR_VFS_EXPECT_DST_FILE' : 'Oczekuje docelowego obiektu-pliku', + 'ERR_VFS_FILE_EXISTS' : 'Plik docelowy istnieje', + 'ERR_VFS_TRANSFER_FMT' : 'Wystąpił błąd podczas transferu pomiędzy magazynem: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Nie można wysłać pliku bez celu', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Nie można wysłać bez okreslenia plików', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Wysyłanie pliku: {0} nie powiodło się', + 'ERR_VFS_UPLOAD_CANCELLED': 'Wysyłanie pliku zostało anulowane', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Nie można pobrać ścieżki bez wskazania ścieżki', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Wystąpił błąd podczas pobierania: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Odpowiedź była pusta', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Pobieranie pliku', + 'ERR_VFSMODULE_XHR_ERROR' : 'Błąd XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'Nie odnaleziono id głównego folderu', + 'ERR_VFSMODULE_NOSUCH' : 'Nie ma takiego pliku', + 'ERR_VFSMODULE_PARENT' : 'Nie ma takiego rodzica', + 'ERR_VFSMODULE_PARENT_FMT' : 'Nie odnaleziono rodzica: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Nie udało się przeskanować folderu', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Nie udało się przeskanować folderu: {0}', + 'ERR_VFSMODULE_READ' : 'Nie udało się odczytać pliku', + 'ERR_VFSMODULE_READ_FMT' : 'Nie udało się odczytać pliku: {0}', + 'ERR_VFSMODULE_WRITE' : 'Nie udało się zapisać pliku', + 'ERR_VFSMODULE_WRITE_FMT' : 'Nie udało się zapisać pliku: {0}', + 'ERR_VFSMODULE_COPY' : 'Nie można skopiować', + 'ERR_VFSMODULE_COPY_FMT' : 'Kopiowanie: {0} nie powiodło się', + 'ERR_VFSMODULE_UNLINK' : 'Nie można odlinkować pliku', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Odlinkowanie pliku: {0} nie powiodło się', + 'ERR_VFSMODULE_MOVE' : 'Nie można przenieść', + 'ERR_VFSMODULE_MOVE_FMT' : 'Przenoszenie: {0} nie powiodło się', + 'ERR_VFSMODULE_EXIST' : 'Nie udało się sprawdzić czy plik instnieje', + 'ERR_VFSMODULE_EXIST_FMT' : 'Nie udało się sprawdzić czy plik instnieje: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Nie udało się uzyskać informacji o pliku', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Nie udało się uzyskać informacji o pliku: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Nie można stworzyć folderu', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Tworzenie folderu: {0} nie powiodło się', + 'ERR_VFSMODULE_URL' : 'Nie udało się uzyskać adresu URL pliku', + 'ERR_VFSMODULE_URL_FMT' : 'Nie udało się uzyskać adresu URL pliku: {0}', + 'ERR_VFSMODULE_TRASH' : 'Nie udało się przenieść pliku do kosza', + 'ERR_VFSMODULE_TRASH_FMT' : 'Nie udało się przenieść pliku do kosza: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Nie udało się przenieść pliku z kosza', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Nie udało się przenieść pliku z kosza: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Nie udało się wyczyścić kosza', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Nie udało się wyczyścić kosza: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Jesteś zalogowany do Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Wylogowano z serwisu Dropbox API', + 'ONEDRIVE_ERR_RESOLVE' : 'Nie znaleziono pozycji', + 'ERR_PACKAGE_EXISTS': 'Folder instalacyjny pakietów już istnieje. Nie można kontynuować!', + 'ERR_FILE_APP_OPEN' : 'Nie można otworzyć', + 'ERR_FILE_APP_OPEN_FMT' : 'Plik {0} nie może zostać otwarty ,ponieważ mime {1} nie jest wspierane', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Plik {0} nie może zostać otwarty', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Plik {0} nie może zostać zapisany', + 'ERR_GENERIC_APP_FMT' : '{0} Błąd Aplikacji', + 'ERR_GENERIC_APP_ACTION_FMT': 'Nie udało się przeprowadzić akcji \'{0}\'.', + 'ERR_GENERIC_APP_UNKNOWN' : 'Nieznany błąd', + 'ERR_GENERIC_APP_REQUEST' : 'Wystąpił błąd podczas obsługi żądania', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Błąd krytyczny: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Odrzucić zmiany?', + 'MSG_FILE_CHANGED' : 'Plik został zmieniony. Przeładować?', + 'MSG_APPLICATION_WARNING' : 'Ostrzeżenie Aplikacji', + 'MSG_MIME_OVERRIDE' : 'Typ pliku "{0}" nie jest wspierany, używając w zamian "{1}".', + 'LBL_UNKNOWN' : 'Nieznany', + 'LBL_APPEARANCE' : 'Wygląd', + 'LBL_USER' : 'Użytkownik', + 'LBL_NAME' : 'Nazwa', + 'LBL_APPLY' : 'Zastosuj', + 'LBL_FILENAME' : 'Nazwa pliku', + 'LBL_PATH' : 'Ścieżka', + 'LBL_SIZE' : 'Rozmiar', + 'LBL_TYPE' : 'Typ', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Ładowanie', + 'LBL_SETTINGS' : 'Ustawienia', + 'LBL_ADD_FILE' : 'Dodaj plik', + 'LBL_COMMENT' : 'Komentarz', + 'LBL_ACCOUNT' : 'Konto', + 'LBL_CONNECT' : 'Połącz', + 'LBL_ONLINE' : 'Połączono', + 'LBL_OFFLINE' : 'Rozłączono', + 'LBL_AWAY' : 'Zaraz wracam', + 'LBL_BUSY' : 'Zajęty', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Pomoc', + 'LBL_ABOUT' : 'O', + 'LBL_PANELS' : 'Panele', + 'LBL_LOCALES' : 'Języki', + 'LBL_THEME' : 'Motyw', + 'LBL_COLOR' : 'Kolor', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Zabij', + 'LBL_ALIVE' : 'Aktywne', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Dodaj', + 'LBL_FONT' : 'Czcionka', + 'LBL_YES' : 'Tak', + 'LBL_NO' : 'Nie', + 'LBL_CANCEL' : 'Anuluj', + 'LBL_TOP' : 'Góra', + 'LBL_LEFT' : 'Lewo', + 'LBL_RIGHT' : 'Prawo', + 'LBL_BOTTOM' : 'Dół', + 'LBL_CENTER' : 'Środek', + 'LBL_FILE' : 'Plik', + 'LBL_NEW' : 'Nowy', + 'LBL_OPEN' : 'Otwórz', + 'LBL_SAVE' : 'Zapisz', + 'LBL_SAVEAS' : 'Zapisz jako...', + 'LBL_CLOSE' : 'Zamknij', + 'LBL_MKDIR' : 'Nowy folder', + 'LBL_UPLOAD' : 'Wyślij', + 'LBL_VIEW' : 'Widok', + 'LBL_EDIT' : 'Edytuj', + 'LBL_RENAME' : 'Zmień nazwę', + 'LBL_DELETE' : 'Usuń', + 'LBL_OPENWITH' : 'Otwórz za pomocą ...', + 'LBL_ICONVIEW' : 'Ikony', + 'LBL_TREEVIEW' : 'Drzewo', + 'LBL_LISTVIEW' : 'Lista', + 'LBL_REFRESH' : 'Odśwież', + 'LBL_VIEWTYPE' : 'Typ widoku', + 'LBL_BOLD' : 'Pogrubienie', + 'LBL_ITALIC' : 'Kursywa', + 'LBL_UNDERLINE' : 'Podkreślenie', + 'LBL_REGULAR' : 'Regularne', + 'LBL_STRIKE' : 'Przekreślenie', + 'LBL_INDENT' : 'Wcięcie', + 'LBL_OUTDENT' : 'Outdent', + 'LBL_UNDO' : 'Cofnij', + 'LBL_REDO' : 'Przywróć', + 'LBL_CUT' : 'Wytnij', + 'LBL_UNLINK' : 'Odlinkuj', + 'LBL_COPY' : 'Kopiuj', + 'LBL_PASTE' : 'Wklej', + 'LBL_INSERT' : 'Wstaw', + 'LBL_IMAGE' : 'Obraz', + 'LBL_LINK' : 'Linkuj', + 'LBL_DISCONNECT' : 'Rozłącz', + 'LBL_APPLICATIONS' : 'Aplikacje', + 'LBL_ADD_FOLDER' : 'Dodaj folder', + 'LBL_INFORMATION' : 'Informacje', + 'LBL_TEXT_COLOR' : 'Kolor tekstu', + 'LBL_BACK_COLOR' : 'Kolor tła', + 'LBL_RESET_DEFAULT' : 'Przywróć fabryczne', + 'LBL_DOWNLOAD_COMP' : 'Pobierz', + 'LBL_ORDERED_LIST' : 'Lista', + 'LBL_BACKGROUND_IMAGE' : 'Tapeta', + 'LBL_BACKGROUND_COLOR' : 'Kolor tła', + 'LBL_UNORDERED_LIST' : 'Lista nieuporządkowana', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Tylko-odczyt', + 'LBL_CREATED' : 'Utworzono', + 'LBL_MODIFIED' : 'Zmodyfikowano', + 'LBL_SHOW_COLUMNS' : 'Pokaż kolumny', + 'LBL_MOVE' : 'Przenieś', + 'LBL_OPTIONS' : 'Opcje', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Folder', + 'LBL_CREATE' : 'Utwórz', + 'LBL_BUGREPORT' : 'Raport błędu', + 'LBL_INSTALL' : 'Instaluj', + 'LBL_UPDATE' : 'Aktualizuj', + 'LBL_REMOVE' : 'Usuń', + 'LBL_SHOW_SIDEBAR' : 'Pokaż pasek', + 'LBL_BACKGROUND' : 'Tło', + 'LBL_DESKTOP' : 'Pulpit', + 'LBL_PANEL' : 'Panel', + 'LBL_POSITION' : 'Pozycja', + 'LBL_ONTOP' : 'Na wierzchu', + 'LBL_ITEMS' : 'Elementy', + 'LBL_SOUNDS' : 'Dźwięki', + 'LBL_ICONS' : 'Ikony', + 'LBL_AUTOHIDE' : 'Automatyczne ukrywanie', + 'LBL_OPACITY' : 'Przeźroczystość', + 'LBL_USERNAME' : 'Nazwa konta', + 'LBL_GROUPS' : 'Grupy', + 'LBL_VERSION' : 'Wersja', + 'LBL_AUTHOR' : 'Autor', + 'LBL_HIDE' : 'Ukryj', + 'LBL_APPLICATION' : 'Aplikacja', + 'LBL_SCOPE' : 'Zasięg', + 'LBL_PACKAGES' : 'Pakiety', + 'LBL_GENERAL' : 'Ogólne', + 'LBL_DEBUG' : 'Debugowanie' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.pt_BR = { + 'ERR_FILE_OPEN' : 'Erro ao abrir arquivo', + 'ERR_WM_NOT_RUNNING' : 'Gerenciador de janelas não está executando', + 'ERR_FILE_OPEN_FMT' : 'O arquivo \'**{0}**\' não pôde ser aberto', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Não foi encontrado nenhum aplicativo com suporte para arquivos \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Falha em abrir aplicativo', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Um erro ocorreu na tentativa de abrir: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Falha em construção do aplicativo \'{0}\': {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Falha no init() do aplicativo \'{0}\': {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'O aplicativo \'{0}\' está faltando recursos ou falhou em inicializar!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'O aplicativo \'{0}\' falhou no pré-carregamento: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'O aplicativo \'{0}\' já está aberto e só permite uma instância!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Falha em abrir \'{0}\'. Faltando informação sobre o pacote do aplicativo!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Falha em abrir \'{0}\'. Seu navegador não suporta: {1}', + 'ERR_NO_WM_RUNNING' : 'Gerenciador de janelas não está executando', + 'ERR_CORE_INIT_FAILED' : 'Falha em inicializar OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Um erro ocorreu enquanto OS.js se inicializava', + 'ERR_CORE_INIT_NO_WM' : 'Não é possivel começar OS.js: Nenhum Gerenciador de Janelas encontrado!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Não é possível inciar OS.js: Falha em lançar o Gerenciador de Janelas: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Não é possível iniciar OS.js: Falha em pré-carregar recursos...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Erro no JavaScript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Um erro inexperado ocorreu, talvez seja um bug.', + 'ERR_APP_API_ERROR' : 'Erro na API do aplicativo', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Aplicativo {0} falhou em executar \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Faltando argumento: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Erro desconhecido', + 'ERR_OPERATION_TIMEOUT' : 'Operação está demorando muito', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Operação está demorando muito ({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'Você já possui uma janela chamada \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimizar', + 'WINDOW_MAXIMIZE' : 'Maximizar', + 'WINDOW_RESTORE' : 'Restaurar', + 'WINDOW_CLOSE' : 'Fechar', + 'WINDOW_ONTOP_ON' : 'No topo (Habilitar)', + 'WINDOW_ONTOP_OFF': 'No topo (Desabilitar)', + 'TITLE_SIGN_OUT' : 'Deslogar', + 'TITLE_SIGNED_IN_AS_FMT' : 'Logado como: {0}', + 'MSG_SESSION_WARNING' : 'Você tem certeza que quer sair do OS.js? Todas as configurações e dados das aplicações não salvas serão perdidas!', + 'BUGREPORT_MSG' : 'Por favor, reporte se você achar que isto é um bug.\nInclue uma breve descrição sobre como ocorreu o erro e, se possível, como refazê-lo', + 'SERVICENOTIFICATION_TOOLTIP' : 'Logado em serviços externos: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Erro fatal', + 'ERR_UTILS_XHR_FMT' : 'Erro de AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Logout (Sair)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Deslogando usuário \'{0}\'.\nVocê quer salvar sessão atual?', + 'DIALOG_CLOSE' : 'Fechar', + 'DIALOG_CANCEL': 'Cancelar', + 'DIALOG_APPLY' : 'Aplicar', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Mensagem de Atenção', + 'DIALOG_COLOR_TITLE' : 'Cores', + 'DIALOG_COLOR_R' : 'Vermelho: {0}', + 'DIALOG_COLOR_G' : 'Verde: {0}', + 'DIALOG_COLOR_B' : 'Azul: {0}', + 'DIALOG_COLOR_A' : 'Alfa: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Mensagem de Confirmação', + 'DIALOG_ERROR_MESSAGE' : 'Mensagem', + 'DIALOG_ERROR_SUMMARY' : 'Resumo', + 'DIALOG_ERROR_TRACE' : 'Rastro', + 'DIALOG_ERROR_BUGREPORT' : 'Relate Bug', + 'DIALOG_FILE_SAVE' : 'Salvar', + 'DIALOG_FILE_OPEN' : 'Abrir', + 'DIALOG_FILE_MKDIR' : 'Novo diretório', + 'DIALOG_FILE_MKDIR_MSG' : 'Criar novo diretório em **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Você realmente quer sobrescrever o arquivo \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Visuaizar tipo', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Visualizar em lista', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Visualizar em árvore', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Visualizar em ícones', + 'DIALOG_FILE_ERROR' : 'Mensagem de erro com arquivo', + 'DIALOG_FILE_ERROR_SCANDIR': 'Falha na listagem do diretório \'{0}\' por um erro', + 'DIALOG_FILE_MISSING_FILENAME' : 'Você precisa selecionar um arquivo ou introduzir um nome para o novo arquivo!', + 'DIALOG_FILE_MISSING_SELECTION': 'Você precisa selecionar um arquivo!', + 'DIALOG_FILEINFO_TITLE' : 'Informação do arquivo', + 'DIALOG_FILEINFO_LOADING' : 'Carregando informação do arquivo: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Mensagem de erro sobre informação de arquivo', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Falha em obter informação do arquivo **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Falha em obter informação do arquivo: {0}', + 'DIALOG_INPUT_TITLE' : 'Diálogo de entrada', + 'DIALOG_FILEPROGRESS_TITLE' : 'Operação em progresso', + 'DIALOG_FILEPROGRESS_LOADING' : 'Carregando...', + 'DIALOG_UPLOAD_TITLE' : 'Janela de Upload', + 'DIALOG_UPLOAD_DESC' : 'Upload de arquivo **{0}**.
Tamanho máximo: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Fazendo upload \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Fazendo upload do arquivo...', + 'DIALOG_UPLOAD_FAILED' : 'Upload falhou', + 'DIALOG_UPLOAD_FAILED_MSG' : 'O upload falhou', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Razão desconhecida...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Cancelado pelo usuário...', + 'DIALOG_UPLOAD_TOO_BIG': 'O arquivo é muito grande', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'O arqyuvo é muito grande, excede {0}', + 'DIALOG_FONT_TITLE' : 'Janela de tipografia', + 'DIALOG_APPCHOOSER_TITLE' : 'Escolher aplicação', + 'DIALOG_APPCHOOSER_MSG' : 'Escolhar uma aplicação para abrir', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Precisa escolher uma aplicação', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Usar como aplicação padrão para {0}', + 'GAPI_DISABLED' : 'Módulo do GoogleAPI não está configurado ou está desativado', + 'GAPI_SIGN_OUT' : 'Desconectar dos serviços do Google API', + 'GAPI_REVOKE' : 'Retirar permissões e desconectar', + 'GAPI_AUTH_FAILURE' : 'A tentativa de autenticação com o Google API falhou', + 'GAPI_AUTH_FAILURE_FMT' : 'Falha ao tentar autenticar: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Não pôde carregar Google API', + 'WLAPI_DISABLED' : 'Módulo do Windows Live API não está configurado ou está desativado', + 'WLAPI_SIGN_OUT' : 'Desconectar do Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Falha em carregar Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Falha em conectar ao Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Falha em conectar ao Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API retornou código {0}', + 'IDB_MISSING_DBNAME' : 'Não é possível criar IndexedDB sem nome do Banco de Dados', + 'IDB_NO_SUCH_ITEM' : 'Não existe este elemento', + 'ERR_VFS_FATAL' : 'Erro fatal', + 'ERR_VFS_UNAVAILABLE' : 'Não está disponível', + 'ERR_VFS_FILE_ARGS' : 'Arquivo espera ao menos um argumento', + 'ERR_VFS_NUM_ARGS' : 'Argumentos insuficientes', + 'ERR_VFS_EXPECT_FILE' : 'Espera ao menos um objeto de arquivo', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Espera ao menos a origem de um objeto de arquivo', + 'ERR_VFS_EXPECT_DST_FILE' : 'Espera ao menos o destino de um objeto de arquivo', + 'ERR_VFS_FILE_EXISTS' : 'Destino já existe', + 'ERR_VFS_TRANSFER_FMT' : 'Um erro ocorreu ao transferir entre discos de armazenamento: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Não é possível fazer upload de arquivo sem destino', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Não é possível fazer upload sem arquivos definidos', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Falha em upload: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Upload foi cancelado', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Não é possível fazer download de destino sem destino', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Ocorreu um erro enquanto fazia download: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Resposta vazia', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Fazendo download de arquivo', + 'ERR_VFSMODULE_XHR_ERROR' : 'Erro XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'Falha em achar a raiz do diretório', + 'ERR_VFSMODULE_NOSUCH' : 'Arquivo não existe', + 'ERR_VFSMODULE_PARENT' : 'Não existe o pai', + 'ERR_VFSMODULE_PARENT_FMT' : 'Falha em encontrar o pai: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Falhou em localizar o diretório', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Falhou em localizar o diretório: {0}', + 'ERR_VFSMODULE_READ' : 'Falha em ler o arquivo', + 'ERR_VFSMODULE_READ_FMT' : 'Falha em ler o arquivo: {0}', + 'ERR_VFSMODULE_WRITE' : 'Falha em escrever o arquivo', + 'ERR_VFSMODULE_WRITE_FMT' : 'Falha em escrever o arquivo: {0}', + 'ERR_VFSMODULE_COPY' : 'Cópia falhou', + 'ERR_VFSMODULE_COPY_FMT' : 'Cópia falhou: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Falha em desvincular o arquivo', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Falha em desvincular o arquivo: {0}', + 'ERR_VFSMODULE_MOVE' : 'Falha em mover o arquivo', + 'ERR_VFSMODULE_MOVE_FMT' : 'Falha em mover o arquivo: {0}', + 'ERR_VFSMODULE_EXIST' : 'Falha em conferir a existência do arquivo', + 'ERR_VFSMODULE_EXIST_FMT' : 'Falha em conferir a existência do arquivo: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Falha em obter informação do arquivo', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Falha em obter informação do arquivo: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Falha em criar diretório', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Falha em criar diretório: {0}', + 'ERR_VFSMODULE_URL' : 'Falha em obter URL do arquivo', + 'ERR_VFSMODULE_URL_FMT' : 'Falha em obter URL do arquivo: {0}', + 'ERR_VFSMODULE_TRASH' : 'Falha em mover arquivo para lixeira', + 'ERR_VFSMODULE_TRASH_FMT' : 'Falha em mover arquivo para lixeira: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Falha em recuperar arquivo da lixeira', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Falha em recuperar arquivo da lixeira: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Falha em esvaziar a lixeira', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Falha em esvaziar a lixeira: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Você logou à API do Dropbox', + 'DROPBOX_SIGN_OUT' : 'Desconectar dos serviços da API do Google', + 'ONEDRIVE_ERR_RESOLVE' : 'Falha em encontrar a rota: arquivo não encontrado', + 'ERR_PACKAGE_EXISTS': 'Diretório de instalação já existe, por favor escolha outro para continuar', + 'ERR_FILE_APP_OPEN' : 'Não é possível abrir o arquivo', + 'ERR_FILE_APP_OPEN_FMT' : 'O arquivo {0} não pode ser aberto pois não existe suporte para {1}', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'O arquivo {0} não pode ser aberto', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'O arquivo {0} Não pode ser salvo', + 'ERR_GENERIC_APP_FMT' : 'O aplicativo encontrou um erro {0}', + 'ERR_GENERIC_APP_ACTION_FMT': 'Falha em realizar ação \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Erro desconhecido', + 'ERR_GENERIC_APP_REQUEST' : 'Um erro ocorreu durante sua requisição', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Erro fatal: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Descartar mudanças?', + 'MSG_FILE_CHANGED' : 'O arquivo sofreu alterações. Recarregar?', + 'MSG_APPLICATION_WARNING' : 'Advertência do aplicativo', + 'MSG_MIME_OVERRIDE' : 'A extensão "{0}" não é suportada, usando "{1}".', + 'LBL_UNKNOWN' : 'Desconhecido', + 'LBL_APPEARANCE' : 'Aparência', + 'LBL_USER' : 'Usuário', + 'LBL_NAME' : 'Nome', + 'LBL_APPLY' : 'Aplicar', + 'LBL_FILENAME' : 'Nome do arquivo', + 'LBL_PATH' : 'Caminho', + 'LBL_SIZE' : 'Tamanho', + 'LBL_TYPE' : 'Tipo', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Carregando', + 'LBL_SETTINGS' : 'Configurações', + 'LBL_ADD_FILE' : 'Adicionar arquivo', + 'LBL_COMMENT' : 'Comentário', + 'LBL_ACCOUNT' : 'Conta', + 'LBL_CONNECT' : 'Conectar', + 'LBL_ONLINE' : 'Online', + 'LBL_OFFLINE' : 'Offline', + 'LBL_AWAY' : 'Indisponível', + 'LBL_BUSY' : 'Ocupado', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Ajuda', + 'LBL_ABOUT' : 'Sobre', + 'LBL_PANELS' : 'Paineis', + 'LBL_LOCALES' : 'Internacionalização', + 'LBL_THEME' : 'Tema', + 'LBL_COLOR' : 'Cor', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Kill', + 'LBL_ALIVE' : 'Alive', + 'LBL_INDEX' : 'Índice', + 'LBL_ADD' : 'Adicionar', + 'LBL_FONT' : 'Tipografia', + 'LBL_YES' : 'Sim', + 'LBL_NO' : 'Não', + 'LBL_CANCEL' : 'Cancelar', + 'LBL_TOP' : 'Acima', + 'LBL_LEFT' : 'Esquerda', + 'LBL_RIGHT' : 'Direita', + 'LBL_BOTTOM' : 'Abaixo', + 'LBL_CENTER' : 'Centro', + 'LBL_FILE' : 'Arquivo', + 'LBL_NEW' : 'Novo', + 'LBL_OPEN' : 'Abrir', + 'LBL_SAVE' : 'Salvar', + 'LBL_SAVEAS' : 'Salvar como...', + 'LBL_CLOSE' : 'Fechar', + 'LBL_MKDIR' : 'Criar diretório', + 'LBL_UPLOAD' : 'Fazer upload', + 'LBL_VIEW' : 'Visualizar', + 'LBL_EDIT' : 'Editar', + 'LBL_RENAME' : 'Renomear', + 'LBL_DELETE' : 'Excluir', + 'LBL_OPENWITH' : 'Abrir com...', + 'LBL_ICONVIEW' : 'Visualização por ícones', + 'LBL_TREEVIEW' : 'Visualização por árvore', + 'LBL_LISTVIEW' : 'Visualização por lista', + 'LBL_REFRESH' : 'Recarregar', + 'LBL_VIEWTYPE' : 'Ver tipo', + 'LBL_BOLD' : 'Negrito', + 'LBL_ITALIC' : 'Itálico', + 'LBL_UNDERLINE' : 'Sublinhado', + 'LBL_REGULAR' : 'Regular', + 'LBL_STRIKE' : 'Rsicado', + 'LBL_INDENT' : 'Indentar', + 'LBL_OUTDENT' : 'Voltar', + 'LBL_UNDO' : 'Desfazer', + 'LBL_REDO' : 'Refazer', + 'LBL_CUT' : 'Cortar', + 'LBL_UNLINK' : 'Desvincular', + 'LBL_COPY' : 'Copiar', + 'LBL_PASTE' : 'Colar', + 'LBL_INSERT' : 'Inserir', + 'LBL_IMAGE' : 'Imagem', + 'LBL_LINK' : 'Link', + 'LBL_DISCONNECT' : 'Desconectar', + 'LBL_APPLICATIONS' : 'Aplicativos', + 'LBL_ADD_FOLDER' : 'Adicionar diretório', + 'LBL_INFORMATION' : 'Informação', + 'LBL_TEXT_COLOR' : 'Cor do texto', + 'LBL_BACK_COLOR' : 'Cor de fundo', + 'LBL_RESET_DEFAULT' : 'Redefinir usando valores padrões', + 'LBL_DOWNLOAD_COMP' : 'Fazer download para o computador', + 'LBL_ORDERED_LIST' : 'Lista ordenada', + 'LBL_BACKGROUND_IMAGE' : 'Imagem de fundo', + 'LBL_BACKGROUND_COLOR' : 'Cor de fundo', + 'LBL_UNORDERED_LIST' : 'Lista não ordenada', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Somente leitura', + 'LBL_CREATED' : 'Criado', + 'LBL_MODIFIED' : 'Modificado', + 'LBL_SHOW_COLUMNS' : 'Mostrar colunas', + 'LBL_MOVE' : 'Mover', + 'LBL_OPTIONS' : 'Opções', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Diretório', + 'LBL_CREATE' : 'Criar', + 'LBL_BUGREPORT' : 'Reportar Bug', + 'LBL_INSTALL' : 'Instalar', + 'LBL_UPDATE' : 'Atualizar', + 'LBL_REMOVE' : 'Remover' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.sk_SK = { + 'ERR_FILE_OPEN' : 'Chyba pri otváraní súboru', + 'ERR_WM_NOT_RUNNING' : 'Správca okien nebeží', + 'ERR_FILE_OPEN_FMT' : 'Súbor \'**{0}**\' sa nedá otvoriť', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Neviem nájsť Aplikáciu pre otvorenie súboru \'{0}\'', + 'ERR_APP_LAUNCH_FAILED' : 'Chyba pri spúšťaní Aplikácie', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Nastala chyba pri spúšťaní Aplikácie: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Aplikácia \'{0}\' chyba pri konštrukcii: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Aplikácia \'{0}\' chyba pri funkcii init(): {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Aplikácia \'{0}\' chýbajú prostriedky pre spustenie alebo nastala chyba pri zavádzaní!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Aplikácia \'{0}\' chyba pri zavádzaní: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Aplikácia \'{0}\' už beží a je povolená iba jedna inštancia!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Chyba pri spustení \'{0}\'. Súpisné dáta Aplikácie sa nenašli!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Chyba pri spustení \'{0}\'. Váš prehliadač nie je podporovaný: {1}', + 'ERR_NO_WM_RUNNING' : 'Správca okien nebeží', + 'ERR_CORE_INIT_FAILED' : 'Chyba pri inicializácii OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Nastala chyba pri inicializácii OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Nemôžem spustiť OS.js: Nie je definovaný žiadny Správca okien!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Nemôžem spustiť OS.js: Chyba pri spúšťaní Správcu okien: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Nemôžem spustiť OS.js: Chyba pri zavádzaní prostriedkov...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Chybová správa JavaScript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Vyskytla sa neočakávaná chyba, možno sa jedná o chybu v programe.', + 'ERR_APP_API_ERROR' : 'Chyba v API Aplikácie', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Aplikácia {0} chyba pri vykonávaní operácie \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Chýbajúci argument: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Neznáma chyba', + 'ERR_OPERATION_TIMEOUT' : 'Časový limit vypršal', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Časový limit vypršal ({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'Okno s názvom \'{0}\' už existuje', + 'WINDOW_MINIMIZE' : 'Minimalizovať', + 'WINDOW_MAXIMIZE' : 'Maximalizovať', + 'WINDOW_RESTORE' : 'Obnoviť', + 'WINDOW_CLOSE' : 'Zatvoriť', + 'WINDOW_ONTOP_ON' : 'Vždy na vrchu (Zapnúť)', + 'WINDOW_ONTOP_OFF': 'Vždy na vrchu (Vypnúť)', + 'TITLE_SIGN_OUT' : 'Odhlásiť sa', + 'TITLE_SIGNED_IN_AS_FMT' : 'Prihlásený ako: {0}', + 'MSG_SESSION_WARNING' : 'Ste si istý že chcete opustiť OS.js? Všetky neuložené nastavenia a dáta aplikácii budú vymazané!', + 'BUGREPORT_MSG' : 'Prosím nahláste túto chybu, ak si myslíte že sa jedná o chybu aplikácie.\nPripojte krátky popis ako k chybe došlo, a ak je to možné informáciu ako ju môžeme zopakovať', + 'SERVICENOTIFICATION_TOOLTIP' : 'Prihlásený k externej službe: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Fatálna chyba', + 'ERR_UTILS_XHR_FMT' : 'Chyba AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Odhlásiť sa (Ukončiť)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Odhlásenie užívateľa \'{0}\'.\nŽeláte si uložiť nastavenia?', + 'DIALOG_CLOSE' : 'Zatvor', + 'DIALOG_CANCEL': 'Zrušiť', + 'DIALOG_APPLY' : 'Použiť', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Výstraha', + 'DIALOG_COLOR_TITLE' : 'Výber farby', + 'DIALOG_COLOR_R' : 'Červená: {0}', + 'DIALOG_COLOR_G' : 'Zelená: {0}', + 'DIALOG_COLOR_B' : 'Modrá: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Potvrdiť', + 'DIALOG_ERROR_MESSAGE' : 'Správa', + 'DIALOG_ERROR_SUMMARY' : 'Sumár', + 'DIALOG_ERROR_TRACE' : 'Stopovanie', + 'DIALOG_ERROR_BUGREPORT' : 'Nahlásiť chybu', + 'DIALOG_FILE_SAVE' : 'Uložiť', + 'DIALOG_FILE_OPEN' : 'Otvoriť', + 'DIALOG_FILE_MKDIR' : 'Nový adresár', + 'DIALOG_FILE_MKDIR_MSG' : 'Vytvor nový adresár v **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Ste si istý že chcete nahradiť súbor \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Zobraziť ako', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Zoznam', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Strom', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Ikony', + 'DIALOG_FILE_ERROR' : 'Chyba pri práci so súborom', + 'DIALOG_FILE_ERROR_SCANDIR': 'Chyba pri čítaní adresára \'{0}\'', + 'DIALOG_FILE_MISSING_FILENAME' : 'Vyberte si súbor alebo zadajte meno nového súboru', + 'DIALOG_FILE_MISSING_SELECTION': 'Vyberte si súbor!', + 'DIALOG_FILEINFO_TITLE' : 'Informácie o súbore', + 'DIALOG_FILEINFO_LOADING' : 'Nahrávam informácie o súbore: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Chyba pri získavaní informácií o súbore', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Nie je možné získať informácie o **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Nie je možné získať informácie o súbore: {0}', + 'DIALOG_INPUT_TITLE' : 'Vstupný dialóg', + 'DIALOG_FILEPROGRESS_TITLE' : 'Stav práce so súborom', + 'DIALOG_FILEPROGRESS_LOADING' : 'Nahrávam...', + 'DIALOG_UPLOAD_TITLE' : 'Nahraj na server', + 'DIALOG_UPLOAD_DESC' : 'Nahrávam súbor do **{0}**.
Maximálna veľkosť" {1} bajtov', + 'DIALOG_UPLOAD_MSG_FMT' : 'Nahrávam na server \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Nahrávam súbor na server...', + 'DIALOG_UPLOAD_FAILED' : 'Nahrávanie na server sa nepodarilo', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Nahrávanie na server sa nepodarilo', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Neznámy dôvod...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Zrušené užívateľom...', + 'DIALOG_UPLOAD_TOO_BIG': 'Súbor je príliš veľký', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Súbor je príliš veľký, presahuje {0}', + 'DIALOG_FONT_TITLE' : 'Výber písma', + 'DIALOG_APPCHOOSER_TITLE' : 'Vyberte Aplikáciu', + 'DIALOG_APPCHOOSER_MSG' : 'Vyberte Aplikáciu ktorou chcete otvoriť', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Vyberte si aplikáciu', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Použi ako východziu aplikáciu pre {0}', + 'GAPI_DISABLED' : 'GoogleAPI Modul je vypnutý alebo nie je nakonfigurovaný', + 'GAPI_SIGN_OUT' : 'Odhlásiť sa z Google API Services', + 'GAPI_REVOKE' : 'Odobrať práva a odhlásiť', + 'GAPI_AUTH_FAILURE' : 'Google API autentifikácia sa nepodarila alebo sa neuskutočnila', + 'GAPI_AUTH_FAILURE_FMT' : 'Nepodarilo sa autentifikovať: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Chyba pri nahrávaní Google API', + 'WLAPI_DISABLED' : 'Windows Live API modul je vypnutý alebo nie je nakonfigurovaný', + 'WLAPI_SIGN_OUT' : 'Odhlásiť sa z Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Chyba pri nahrávaní Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Chyba pri prihlasovaní do Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Chyba pri prihlasovaní do Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API vrátil status {0}', + 'IDB_MISSING_DBNAME' : 'Nemôžem vytvoriť IndexedDB bez mena databázy', + 'IDB_NO_SUCH_ITEM' : 'Položka neexistuje', + 'ERR_VFS_FATAL' : 'Fatálna chyba', + 'ERR_VFS_UNAVAILABLE' : 'Nie je dostupný', + 'ERR_VFS_FILE_ARGS' : 'Súbor vyžaduje aspoň jeden argument', + 'ERR_VFS_NUM_ARGS' : 'Málo argumentov', + 'ERR_VFS_EXPECT_FILE' : 'Očakáva súbor-objekt', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Očakáva zdrojový súbor-objekt', + 'ERR_VFS_EXPECT_DST_FILE' : 'Očakáva cieľový súbor-objekt', + 'ERR_VFS_FILE_EXISTS' : 'Cieľ už existuje', + 'ERR_VFS_TRANSFER_FMT' : 'Nastala chyba počas prenosu medzi úložiskom: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Nemôžem nahrať na server súbor bez špecifikovaného cieľa', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Nemôžem nahrať na server bez špecifikovaných súborov', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Nepodarilo sa nahrať na server: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Nahrávanie na server bolo zrušené', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Nemôžem stiahnuť cestu k súboru', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Nastala chyba pri sťahovaní: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Prázdna odpoveď', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Sťahujem súbor', + 'ERR_VFSMODULE_XHR_ERROR' : 'Chyba XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'Nepodarilo sa nájsť id hlavného (koreňového) adresára', + 'ERR_VFSMODULE_NOSUCH' : 'Súbor neexistuje', + 'ERR_VFSMODULE_PARENT' : 'Nadradený adresár neexistuje', + 'ERR_VFSMODULE_PARENT_FMT' : 'Nepodarilo sa nájsť nadradený adresár: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Chyba pri čítaní adresára', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Chyba pri čítaní adresára: {0}', + 'ERR_VFSMODULE_READ' : 'Chyba pri čítaní súboru', + 'ERR_VFSMODULE_READ_FMT' : 'Chyba pri čítaní súboru: {0}', + 'ERR_VFSMODULE_WRITE' : 'Chyba pri zápise do súboru', + 'ERR_VFSMODULE_WRITE_FMT' : 'Chyba pri zápise do súboru: {0}', + 'ERR_VFSMODULE_COPY' : 'Chyba pri kopírovaní', + 'ERR_VFSMODULE_COPY_FMT' : 'Chyba pri kopírovaní: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Chyba pri mazaní súboru', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Chyba pri mazaní súboru: {0}', + 'ERR_VFSMODULE_MOVE' : 'Chyba pri presune súboru', + 'ERR_VFSMODULE_MOVE_FMT' : 'Chyba pri presune súboru: {0}', + 'ERR_VFSMODULE_EXIST' : 'Chyba pri overovaní existenciu súboru', + 'ERR_VFSMODULE_EXIST_FMT' : 'Chyba pri overovaní existenciu súboru: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Chyba pri získavaní informácií o súbore', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Chyba pri získavaní informácií o súbore: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Chyba pri vytváraní adresára', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Chyba pri vytváraní adresára: {0}', + 'ERR_VFSMODULE_URL' : 'Chyba pri získavaní URL pre súbor', + 'ERR_VFSMODULE_URL_FMT' : 'Chyba pri získavaní URL pre súbor: {0}', + 'ERR_VFSMODULE_TRASH' : 'Chyba pri presune súboru do koša', + 'ERR_VFSMODULE_TRASH_FMT' : 'Chyba pri presune súboru do koša: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Chyba pri presune súboru z koša', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Chyba pri presune súboru z koša: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Chyba pri vysýpaní koša', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Chyba pri vysýpaní koša: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Ste prihlásený do Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Odhlásiť z Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'Chyba v ceste: Položka nebola nájdená', + 'ERR_PACKAGE_EXISTS': 'Adresár pre inštaláciu balíkov už existuje. Nemôžem pokračovať!', + 'ERR_FILE_APP_OPEN' : 'Nemôžem otvoriť súbor', + 'ERR_FILE_APP_OPEN_FMT' : 'Súbor {0} sa nedá otvoriť pretože mime typ {1} nie je podporovaný', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Súbor {0} sa nedá otvoriť', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Súbor {0} sa nedá uložiť', + 'ERR_GENERIC_APP_FMT' : '{0} Chyba Aplikácie', + 'ERR_GENERIC_APP_ACTION_FMT': 'Nepodarilo sa uskutočniť akciu \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Neznáma chyba', + 'ERR_GENERIC_APP_REQUEST' : 'Chyba počas obsluhy Vášho požiadavku', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Fatálna chyba: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Zrušiť zmeny?', + 'MSG_FILE_CHANGED' : 'Súbor sa zmenil. Chcete zmeny načítať?', + 'MSG_APPLICATION_WARNING' : 'Varovanie Aplikácie', + 'MSG_MIME_OVERRIDE' : 'Typ súboru "{0}" nie je podporovaný, použijem "{1}".', + 'LBL_UNKNOWN' : 'Neznámi', + 'LBL_APPEARANCE' : 'Výskyt', + 'LBL_USER' : 'Užívateľ', + 'LBL_NAME' : 'Meno', + 'LBL_APPLY' : 'Použiť', + 'LBL_FILENAME' : 'Názov súboru', + 'LBL_PATH' : 'Cesta', + 'LBL_SIZE' : 'Veľkosť', + 'LBL_TYPE' : 'Typ', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Nahrávam', + 'LBL_SETTINGS' : 'Nastavenia', + 'LBL_ADD_FILE' : 'Pridať súbor', + 'LBL_COMMENT' : 'Komentár', + 'LBL_ACCOUNT' : 'Účet', + 'LBL_CONNECT' : 'Pripojiť', + 'LBL_ONLINE' : 'Prihlásený', + 'LBL_OFFLINE' : 'Neprihlásený', + 'LBL_AWAY' : 'Preč', + 'LBL_BUSY' : 'Zaneprázdnený', + 'LBL_CHAT' : 'Rozhovor', + 'LBL_HELP' : 'Pomoc', + 'LBL_ABOUT' : 'O programe', + 'LBL_PANELS' : 'Panely', + 'LBL_LOCALES' : 'Lokalizácie', + 'LBL_THEME' : 'Témy', + 'LBL_COLOR' : 'Farba', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Ukončiť', + 'LBL_ALIVE' : 'živý', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Pridať', + 'LBL_FONT' : 'Písmo', + 'LBL_YES' : 'Áno', + 'LBL_NO' : 'Nie', + 'LBL_CANCEL' : 'Zrušiť', + 'LBL_TOP' : 'Hore', + 'LBL_LEFT' : 'V ľavo', + 'LBL_RIGHT' : 'V pravo', + 'LBL_BOTTOM' : 'Dole', + 'LBL_CENTER' : 'V strede', + 'LBL_FILE' : 'Súbor', + 'LBL_NEW' : 'Nový', + 'LBL_OPEN' : 'Otvoriť', + 'LBL_SAVE' : 'Uložiť', + 'LBL_SAVEAS' : 'Uložiť ako...', + 'LBL_CLOSE' : 'Zatvoriť', + 'LBL_MKDIR' : 'Vytvor adresár', + 'LBL_UPLOAD' : 'Nahrať na server', + 'LBL_VIEW' : 'Zobraziť', + 'LBL_EDIT' : 'Upraviť', + 'LBL_RENAME' : 'Premenovať', + 'LBL_DELETE' : 'Vymazať', + 'LBL_OPENWITH' : 'Otvoriť pomocou ...', + 'LBL_ICONVIEW' : 'Ikony', + 'LBL_TREEVIEW' : 'Strom', + 'LBL_LISTVIEW' : 'Zoznam', + 'LBL_REFRESH' : 'Obnoviť', + 'LBL_VIEWTYPE' : 'Zobraziť ako', + 'LBL_BOLD' : 'Bold', + 'LBL_ITALIC' : 'Italic', + 'LBL_UNDERLINE' : 'Podčiarknuť', + 'LBL_REGULAR' : 'Regulárny', + 'LBL_STRIKE' : 'Strike', + 'LBL_INDENT' : 'Odrážka', + 'LBL_OUTDENT' : 'Outdate', + 'LBL_UNDO' : 'Undo', + 'LBL_REDO' : 'Redo', + 'LBL_CUT' : 'Vystrihnúť', + 'LBL_UNLINK' : 'Zrušiť odkaz (URL)', + 'LBL_COPY' : 'Kopírovať', + 'LBL_PASTE' : 'Prilepiť', + 'LBL_INSERT' : 'Vložiť', + 'LBL_IMAGE' : 'Obrázok', + 'LBL_LINK' : 'Odkaz (URL)', + 'LBL_DISCONNECT' : 'Odpojiť', + 'LBL_APPLICATIONS' : 'Aplikácie', + 'LBL_ADD_FOLDER' : 'Pridaj adresár', + 'LBL_INFORMATION' : 'Informácie', + 'LBL_TEXT_COLOR' : 'Farba textu', + 'LBL_BACK_COLOR' : 'Farba pozadia', + 'LBL_RESET_DEFAULT' : 'Obnoviť predvolené nastavenia', + 'LBL_DOWNLOAD_COMP' : 'Stiahnuť do počítača', + 'LBL_ORDERED_LIST' : 'Zotriedený zoznam', + 'LBL_BACKGROUND_IMAGE' : 'Obrázok na pozadí', + 'LBL_BACKGROUND_COLOR' : 'Farba pozadia', + 'LBL_UNORDERED_LIST' : 'Nezotriedený zoznam', + 'LBL_STATUS' : 'Status', + 'LBL_READONLY' : 'Iba na čítanie', + 'LBL_CREATED' : 'Vytvorený', + 'LBL_MODIFIED' : 'Zmenený', + 'LBL_SHOW_COLUMNS' : 'Ukáž stĺpce', + 'LBL_MOVE' : 'Presuň', + 'LBL_OPTIONS' : 'Možnosti', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Adresár', + 'LBL_CREATE' : 'Vytvoriť', + 'LBL_BUGREPORT' : 'Bugreport', + 'LBL_INSTALL' : 'Inštalovať', + 'LBL_UPDATE' : 'Aktualizovať', + 'LBL_REMOVE' : 'Odstrániť', + 'LBL_SHOW_SIDEBAR' : 'Ukáž bočnú lištu' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.vi_VN = { + 'ERR_FILE_OPEN' : 'Lỗi khi mở tệp', + 'ERR_WM_NOT_RUNNING' : 'Trình quản lí cửa sổ không hoạt động', + 'ERR_FILE_OPEN_FMT' : 'Tập tin \'**{0}**\' không mở được', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Không thể tìm thấy bất kỳ ứng dụng hỗ trợ cho \'{0}\' files', + 'ERR_APP_LAUNCH_FAILED' : 'Không thể khởi động ứng dụng', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Có lỗi xảy ra trong khi cố gắng khởi động: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Phần mềm \'{0}\' xây dựng thất bại: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Phần mềm \'{0}\' init() thất bại: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Tài nguyên ứng dụng còn thiếu cho \'{0}\' hoặc nó không tải được!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Nạp trước phần mềm \'{0}\' thất bại: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'Phần mềm \'{0}\' đã được khởi chạy và chỉ cho phép một hoạt động!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Không thể khởi động \'{0}\'. Application manifest không tìm thấy!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Không thể khởi động\'{0}\'. Trình duyệt của bạn không hỗ trợ: {1}', + 'ERR_NO_WM_RUNNING' : 'Quản lí cửa sổ không chạy', + 'ERR_CORE_INIT_FAILED' : 'Không thể khởi động OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'Một lỗi đã xảy ra trong khi khởi tạo OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Không thể khởi động OS.js: Không có quản lí cửa sổ nào được xác định!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Không thể khởi động OS.js: Không thể khởi động Window Manager: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Không thể khởi động OS.js: Không thể tải trước tài nguyên...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'Báo cáo lỗi JavaScript', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Một lỗi không mong muốn xảy ra, có thể là một bug.', + 'ERR_APP_API_ERROR' : 'Lỗi ứng dụng API', + 'ERR_APP_API_ERROR_DESC_FMT' : 'Phần mềm {0} không thực hiện hoạt động \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Thiếu đối số: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Lỗi không xác định', + 'ERR_OPERATION_TIMEOUT' : 'Hết thời gian phản hồi', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Hết thời gian phản hồi trong ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' dự kiến \'{1}\' là một \'{2}\',cho \'{3}\'', + 'ERR_WIN_DUPLICATE_FMT' : 'Bạn đã có một cửa sổ có tên \'{0}\'', + 'WINDOW_MINIMIZE' : 'Giảm thiểu', + 'WINDOW_MAXIMIZE' : 'Tối đa hóa', + 'WINDOW_RESTORE' : 'Khôi phục', + 'WINDOW_CLOSE' : 'Đóng', + 'WINDOW_ONTOP_ON' : 'Ở trên (Bật)', + 'WINDOW_ONTOP_OFF': 'Ở trên (Tắt)', + 'TITLE_SIGN_OUT' : 'Đăng xuất', + 'TITLE_SIGNED_IN_AS_FMT' : 'Đăng nhập như: {0}', + 'ERR_LOGIN_FMT' : 'Đăng nhập thất bại: {0}', + 'ERR_LOGIN_INVALID' : 'Đăng nhập không hợp lệ', + 'ERR_NO_SESSION': 'Chưa có phiên chạy nào được tạo bởi máy chủ. Bạn có muốn đăng nhập lại không?', + 'MSG_SESSION_WARNING' : 'Bạn có muốn thoát khỏi phiên OS.js này? Mọi cài đặt và dữ liệu sẽ bị mất!', + 'BUGREPORT_MSG' : 'Xin hãy báo lỗi này nếu bạn nghĩ rằng đây là một lỗi.\nHãy viết một mô tả ngắn gọn về lỗi đã xảy ra như thế nào, và nếu có thể, làm cách nào để tái hiện lại nó!', + 'SERVICENOTIFICATION_TOOLTIP' : 'Đăng nhập vào các dịch vụ bên ngoài: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Lỗi nghiêm trọng', + 'ERR_UTILS_XHR_FMT' : 'Lỗi AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Đăng xuất (Thoát)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Đăng xuất người dùng \'{0}\'.\nBạn có muốn lưu lại phiên chạy hiện thời?', + 'DIALOG_CLOSE' : 'Đóng', + 'DIALOG_CANCEL': 'Hủy', + 'DIALOG_APPLY' : 'Áp dụng', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Cảnh báo', + 'DIALOG_COLOR_TITLE' : 'Bảng màu', + 'DIALOG_COLOR_R' : 'Đỏ: {0}', + 'DIALOG_COLOR_G' : 'Xanh lá cây: {0}', + 'DIALOG_COLOR_B' : 'Xanh da trời: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Xác nhận', + 'DIALOG_ERROR_MESSAGE' : 'Thông điệp', + 'DIALOG_ERROR_SUMMARY' : 'Tóm tắt', + 'DIALOG_ERROR_TRACE' : 'Dấu vết', + 'DIALOG_ERROR_BUGREPORT' : 'Báo cáo lỗi', + 'DIALOG_FILE_SAVE' : 'Lưu', + 'DIALOG_FILE_OPEN' : 'Mở', + 'DIALOG_FILE_MKDIR' : 'Thư mục mới', + 'DIALOG_FILE_MKDIR_MSG' : 'Tạo một thư mục mới trong **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Bạn có chắc muốn ghi đè lên tập tin \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Kiểu xem', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Danh sách', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Cây', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Biểu tượng', + 'DIALOG_FILE_ERROR' : 'Lỗi FileDialog', + 'DIALOG_FILE_ERROR_SCANDIR': 'Không thể liệt kê thư mục \'{0}\' vì đã xảy ra lỗi', + 'DIALOG_FILE_ERROR_FIND': 'Không thể tìm kiếm trong thư mục \'{0}\' bởi một lỗi đã xảy ra', + 'DIALOG_FILE_MISSING_FILENAME' : 'Bạn cần phải chọn một tập tin hoặc nhập tên tập tin mới!', + 'DIALOG_FILE_MISSING_SELECTION': 'Bạn cần phải chọn một tập tin!', + 'DIALOG_FILEINFO_TITLE' : 'Thông tin tập tin', + 'DIALOG_FILEINFO_LOADING' : 'Đang tải thông tin tập tin cho: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Lỗi FileInformationDialog', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Không thể có được thông tin tập tin cho **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Không thể có được thông tin tập tin cho: {0}', + 'DIALOG_INPUT_TITLE' : 'Nhập liệu', + 'DIALOG_FILEPROGRESS_TITLE' : 'Tiến độ của tập tin', + 'DIALOG_FILEPROGRESS_LOADING' : 'Đang nạp...', + 'DIALOG_UPLOAD_TITLE' : 'Tải lên', + 'DIALOG_UPLOAD_DESC' : 'Tải tập tin lên đến **{0}**.
Kích thước tối đa: {1} byte', + 'DIALOG_UPLOAD_MSG_FMT' : 'Đang tải lên \'{0}\' ({1} {2}) đến {3}', + 'DIALOG_UPLOAD_MSG' : 'Đang tải lên tập tin...', + 'DIALOG_UPLOAD_FAILED' : 'Tải lên thất bại', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Việc tải lên đã thất bại', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Không rõ lý do...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Hủy bỏ bởi người dùng...', + 'DIALOG_UPLOAD_TOO_BIG': 'Tập tin quá lớn', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Tập tin quá lớn, vượt quá {0}', + 'DIALOG_FONT_TITLE' : 'Chọn phông', + 'DIALOG_APPCHOOSER_TITLE' : 'Chọn ứng dụng', + 'DIALOG_APPCHOOSER_MSG' : 'Chọn một ứng dụng để mở', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Bạn cần phải chọn một ứng dụng', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Sử dụng như là ứng dụng mặc định cho {0}', + 'GAPI_DISABLED' : 'Mô-đun GoogleAPI không được cấu hình hoặc vô hiệu hóa', + 'GAPI_SIGN_OUT' : 'Đăng xuất khỏi dịch vụ Google API', + 'GAPI_REVOKE' : 'Thu hồi giấy phép và Đăng xuất', + 'GAPI_AUTH_FAILURE' : 'Google API Xác thực không thành công hoặc không diễn ra', + 'GAPI_AUTH_FAILURE_FMT' : 'Không xác thực được: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Không tải được Google API', + 'WLAPI_DISABLED' : 'Mô-đun Windows Live API không được cấu hình hoặc vô hiệu', + 'WLAPI_SIGN_OUT' : 'Đăng xuất khỏi Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Không tải được Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Không thể đăng nhập vào Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Không thể đăng nhập vào Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API gửi lại {0} status', + 'IDB_MISSING_DBNAME' : 'Không thể tạo IndexedDB mà không có Tên cơ sở dữ liệu', + 'IDB_NO_SUCH_ITEM' : 'Không có item', + 'ERR_VFS_FATAL' : 'Lỗi nghiêm trọng', + 'ERR_VFS_UNAVAILABLE' : 'Không khả dụng', + 'ERR_VFS_FILE_ARGS' : 'Tập cần ít nhất một tham số', + 'ERR_VFS_NUM_ARGS' : 'Không đủ đối số', + 'ERR_VFS_EXPECT_FILE' : 'Cần một file-object', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Cần một nguồn file-object', + 'ERR_VFS_EXPECT_DST_FILE' : 'Cần một điểm đến file-object', + 'ERR_VFS_FILE_EXISTS' : 'Điểm đến đã tồn tại', + 'ERR_VFS_TARGET_NOT_EXISTS': 'Mục tiêu không tồn tại', + 'ERR_VFS_TRANSFER_FMT' : 'Có lỗi xảy ra trong khi chuyển giao lưu trữ tới ổ cứng: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Không thể tải lên một tập tin mà không có một điểm đến', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Không thể tải lên bất kỳ tập tin mà không có định nghĩa', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Tải lên không thành công: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Quá trình tải lên đã bị hủy bỏ', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Không thể tải về một đường dẫn mà không có một đường dẫn', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Một lỗi đã xảy ra trong khi tải về: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Không có phản hồi', + 'ERR_VFSMODULE_INVALID' : 'Invalid VFS Module', + 'ERR_VFSMODULE_INVALID_FMT' : 'Invalid VFS Module: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'Không có mô đun VFS nào khớp với {0}. Sai đường dẫn hoặc định dạng ?', + 'ERR_VFSMODULE_READONLY' : 'Mô đun VFS này là chỉ đọc', + 'ERR_VFSMODULE_READONLY_FMT' : 'Mô đun VFS này là chỉ đọc: {0}', + 'ERR_VFSMODULE_EXCEPTION' : 'Lỗi mô-đun VFS', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'Lỗi mô-đun VFS: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Sai phương thức VFS', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Sai phương thức VFS: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Sai kiểu mô-đun VFS', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Sai kiểu mô-đun VFS: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Sai thiết lập mô-đun VFS', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Sai thiết lập mô-đun VFS: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'Mô-đun VFS đã được gắn', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'Mô-đun VFS \'{0}\' đã được gắn', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'Mô-đun VFS chưa được gắn', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'Mô-đun VFS \'{0}\' chưa được gắn', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Đang tải xuống tập tin', + 'ERR_VFSMODULE_XHR_ERROR' : 'Lỗi XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'Không thể tìm thấy id thư mục gốc', + 'ERR_VFSMODULE_NOSUCH' : 'Tập tin không tồn tại', + 'ERR_VFSMODULE_PARENT' : 'Không có thư mục cha nào như vậy', + 'ERR_VFSMODULE_PARENT_FMT' : 'Không thể tìm thư mục cha : {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Không thể quét thư mục', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Không thể quét thư mục: {0}', + 'ERR_VFSMODULE_READ' : 'Không thể đọc tập tin', + 'ERR_VFSMODULE_READ_FMT' : 'Không thể đọc tập tin: {0}', + 'ERR_VFSMODULE_WRITE' : 'Không thể ghi tập tin', + 'ERR_VFSMODULE_WRITE_FMT' : 'Không thể ghi tập tin: {0}', + 'ERR_VFSMODULE_COPY' : 'Không thể sao chép', + 'ERR_VFSMODULE_COPY_FMT' : 'Không thể sao chép: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Không thể bỏ liên kết tập tin', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Không thể bỏ liên kết tập tin: {0}', + 'ERR_VFSMODULE_MOVE' : 'Không thể di chuyển tập tin', + 'ERR_VFSMODULE_MOVE_FMT' : 'Không thể di chuyển tập tin: {0}', + 'ERR_VFSMODULE_EXIST' : 'Không thể kiểm tra sự tồn tại của tập tin', + 'ERR_VFSMODULE_EXIST_FMT' : 'Không thể kiểm tra sự tồn tại của tập tin: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Không thể lấy thông tin file', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Không thể lấy thông tin file: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Không thể tạo thư mục', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Không thể tạo thư mục: {0}', + 'ERR_VFSMODULE_MKFILE' : 'Không thể tạo tập tin', + 'ERR_VFSMODULE_MKFILE_FMT' : 'Không thể tạo tập tin: {0}', + 'ERR_VFSMODULE_URL' : 'Không thể lấy URL cho file', + 'ERR_VFSMODULE_URL_FMT' : 'Không thể lấy URL cho file: {0}', + 'ERR_VFSMODULE_TRASH' : 'Không thể di chuyển tập tin vào thùng rác', + 'ERR_VFSMODULE_TRASH_FMT' : 'Không thể di chuyển tập tin vào thùng rác: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Không thể di chuyển tập tin ra khỏi thùng rác', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Không thể di chuyển tập tin ra khỏi thùng rác: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Không thể làm rỗng thùng rác', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Không thể làm rỗng thùng rác : {0}', + 'ERR_VFSMODULE_FIND' : 'Không thể tìm kiếm', + 'ERR_VFSMODULE_FIND_FMT' : 'Lỗi khi tìm kiếm: {0}', + 'ERR_VFSMODULE_FREESPACE' : 'Không thể làm sạch bộ nhớ', + 'ERR_VFSMODULE_FREESPACE_FMT' : 'Lỗi khi làm sạch bộ nhớ: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Bạn đã đăng nhập vào Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Đăng xuất khỏi dịch vụ Google API', + 'ONEDRIVE_ERR_RESOLVE' : 'Không thể giải quyết đường dẫn: mục không tìm thấy', + 'ZIP_PRELOAD_FAIL' : 'Không thể tải zip.js', + 'ZIP_VENDOR_FAIL' : 'Không tìm thấy zip.js, bạn có chắc chắn đã thiết lập nó chưa?', + 'ZIP_NO_RESOURCE' : 'Không có nguồn zip đã được đưa ra', + 'ZIP_NO_PATH' : 'Không có đường dẫn', + 'SEARCH_LOADING': 'Đang tìm kiếm...', + 'SEARCH_NO_RESULTS': 'Không có kết quả', + 'ERR_PACKAGE_EXISTS': 'Thư mục cài đặt gói phần mềm đã tồn tại. Không thể tiếp tục!', + 'ERR_FILE_APP_OPEN' : 'Không thể mở tập tin', + 'ERR_FILE_APP_OPEN_FMT' : 'Tập tin {0} không thể mở được vì mime {1} không được hỗ trợ', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Tập tin {0} không mở được', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Tập tin {0} không lưu được', + 'ERR_GENERIC_APP_FMT' : '{0} Lỗi phần mềm', + 'ERR_GENERIC_APP_ACTION_FMT': 'Không thể thực hiện hành động \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Lỗi không xác định', + 'ERR_GENERIC_APP_REQUEST' : 'Một lỗi đã xảy ra trong khi xử lý yêu cầu của bạn', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Lỗi nghiêm trọng: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Hủy các thay đổi?', + 'MSG_FILE_CHANGED' : 'Các tập tin đã thay đổi. Nạp lại?', + 'MSG_APPLICATION_WARNING' : 'Cảnh báo ứng dụng', + 'MSG_MIME_OVERRIDE' : 'Loại tập tin "{0}" không được hỗ trợ, sử dụng "{1}" thay thế.', + 'LBL_UNKNOWN' : 'Không biết', + 'LBL_APPEARANCE' : 'Giao diện', + 'LBL_USER' : 'Người dùng', + 'LBL_NAME' : 'Tên', + 'LBL_APPLY' : 'Áp dụng', + 'LBL_FILENAME' : 'Tên tệp', + 'LBL_PATH' : 'Đường dẫn', + 'LBL_SIZE' : 'Kích cỡ', + 'LBL_TYPE' : 'Kiểu', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Đang tải', + 'LBL_SETTINGS' : 'Cài đặt', + 'LBL_ADD_FILE' : 'Thêm tệp', + 'LBL_COMMENT' : 'Chú thích', + 'LBL_ACCOUNT' : 'Tài khoản', + 'LBL_CONNECT' : 'Kết nối', + 'LBL_ONLINE' : 'Trực tuyến', + 'LBL_OFFLINE' : 'Ngoại tuyến', + 'LBL_AWAY' : 'Ở xa', + 'LBL_BUSY' : 'Bận', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Hướng dẫn', + 'LBL_ABOUT' : 'Thông tin', + 'LBL_PANELS' : 'Panels', + 'LBL_LOCALES' : 'Ngôn ngữ', + 'LBL_THEME' : 'Giao diện', + 'LBL_COLOR' : 'Màu', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Đóng', + 'LBL_ALIVE' : 'Còn sống', + 'LBL_INDEX' : 'Chỉ mục', + 'LBL_ADD' : 'Thêm', + 'LBL_FONT' : 'Phông', + 'LBL_YES' : 'Có', + 'LBL_NO' : 'Không', + 'LBL_CANCEL' : 'Hủy bỏ', + 'LBL_TOP' : 'Trên', + 'LBL_LEFT' : 'Trái', + 'LBL_RIGHT' : 'Phải', + 'LBL_BOTTOM' : 'Dưới', + 'LBL_CENTER' : 'Giữa', + 'LBL_FILE' : 'Tệp', + 'LBL_NEW' : 'Mới', + 'LBL_OPEN' : 'Mở', + 'LBL_SAVE' : 'Lưu', + 'LBL_SAVEAS' : 'Lưu như...', + 'LBL_CLOSE' : 'Đóng', + 'LBL_MKDIR' : 'Tạo thư mục', + 'LBL_UPLOAD' : 'Tải lên', + 'LBL_VIEW' : 'Xem', + 'LBL_EDIT' : 'Chỉnh sửa', + 'LBL_RENAME' : 'Đổi tên', + 'LBL_DELETE' : 'Xóa', + 'LBL_OPENWITH' : 'Mở với...', + 'LBL_ICONVIEW' : 'Biểu tượng', + 'LBL_TREEVIEW' : 'Cây', + 'LBL_LISTVIEW' : 'Danh sách', + 'LBL_REFRESH' : 'Làm mới', + 'LBL_VIEWTYPE' : 'Kiểu xem', + 'LBL_BOLD' : 'In đậm', + 'LBL_ITALIC' : 'In Ngiêng', + 'LBL_UNDERLINE' : 'Gạch dưới', + 'LBL_REGULAR' : 'Bình thường', + 'LBL_STRIKE' : 'Gạch ngang', + 'LBL_INDENT' : 'Thụt về', + 'LBL_OUTDENT' : 'Quá hạn', + 'LBL_UNDO' : 'Trở lại', + 'LBL_REDO' : 'Làm lại', + 'LBL_CUT' : 'Cắt', + 'LBL_UNLINK' : 'Hủy liên kết', + 'LBL_COPY' : 'Sao chép', + 'LBL_PASTE' : 'Dán', + 'LBL_INSERT' : 'Chèn', + 'LBL_IMAGE' : 'Ảnh', + 'LBL_LINK' : 'Liên kết', + 'LBL_DISCONNECT' : 'Mất kết nối', + 'LBL_APPLICATIONS' : 'Các ứng dụng', + 'LBL_ADD_FOLDER' : 'Thêm thư mục', + 'LBL_INFORMATION' : 'Thông tin', + 'LBL_TEXT_COLOR' : 'Màu chữ', + 'LBL_BACK_COLOR' : 'Màu nền', + 'LBL_RESET_DEFAULT' : 'Khôi phục về mặc định', + 'LBL_DOWNLOAD_COMP' : 'Tải về máy', + 'LBL_ORDERED_LIST' : 'Danh sách có thứ tự', + 'LBL_BACKGROUND_IMAGE' : 'Ảnh nền', + 'LBL_BACKGROUND_COLOR' : 'Màu nền', + 'LBL_UNORDERED_LIST' : 'Danh sách không có thứ tự', + 'LBL_STATUS' : 'Trạng thái', + 'LBL_READONLY' : 'Chỉ đọc', + 'LBL_CREATED' : 'Tạo lúc', + 'LBL_MODIFIED' : 'Sửa lúc', + 'LBL_SHOW_COLUMNS' : 'Hiện các cột', + 'LBL_MOVE' : 'Di chuyển', + 'LBL_OPTIONS' : 'Tùy chọn', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Thư mục', + 'LBL_CREATE' : 'Tạo', + 'LBL_BUGREPORT' : 'Báo lỗi', + 'LBL_INSTALL' : 'Cài đặt', + 'LBL_UPDATE' : 'Cập nhật', + 'LBL_REMOVE' : 'Gỡ bỏ', + 'LBL_SHOW_SIDEBAR' : 'Hiện thanh bên', + 'LBL_SHOW_NAVIGATION' : 'Hiện nút điều hướng', + 'LBL_SHOW_HIDDENFILES' : 'Hiện tập tin ẩn', + 'LBL_SHOW_FILEEXTENSIONS' : 'Hiện đuôi tập tin', + 'LBL_MOUNT': 'Gắn', + 'LBL_DESCRIPTION': 'Mô tả', + 'LBL_USERNAME': 'Tên người dùng', + 'LBL_PASSWORD': 'Mật khẩu', + 'LBL_HOST': 'Host', + 'LBL_NAMESPACE': 'Namespace', + 'LBL_SEARCH': 'Tìm kiếm', + 'LBL_BACKGROUND' : 'Ảnh nền', + 'LBL_DESKTOP' : 'Màn hình chính', + 'LBL_PANEL' : 'Khung', + 'LBL_POSITION' : 'Vị trí', + 'LBL_ONTOP' : 'Ở trên', + 'LBL_ITEMS' : 'Các mục', + 'LBL_AUTOHIDE' : 'Tự động ẩn', + 'LBL_OPACITY' : 'Độ trong suốt', + 'LBL_GROUPS' : 'Nhóm', + 'LBL_VERSION' : 'Phiên bản', + 'LBL_AUTHOR' : 'Tác giả', + 'LBL_HIDE' : 'Ẩn', + 'LBL_APPLICATION' : 'Phần mềm', + 'LBL_SCOPE' : 'Phạm vi', + 'LBL_GENERAL': 'Tổng quát', + 'LBL_PERSONAL': 'Cá nhân', + 'LBL_SYSTEM': 'Hệ thống', + 'LBL_STARTING': 'Đang khởi động', + 'LBL_SOUNDS': 'Âm thanh', + 'LBL_STORE': 'Chợ ứng dụng', + 'LBL_LOCALE': 'Ngôn ngữ', + 'LBL_PACKAGE': 'Phần mềm', + 'LBL_PACKAGES': 'Các phần mềm', + 'LBL_INPUT': 'Đầu vào', + 'LBL_MISC': 'Linh tinh', + 'LBL_OTHER': 'Khác', + 'LBL_USERS': 'Người dùng', + 'LBL_FONTS': 'Phông' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.tr_TR = { + 'ERR_FILE_OPEN' : 'Dosya açılırken hata oluştu', + 'ERR_WM_NOT_RUNNING' : 'Window manager çalışır halde değil', + 'ERR_FILE_OPEN_FMT' : '\'**{0}**\' dosya açılamadı', + 'ERR_APP_MIME_NOT_FOUND_FMT': ' \'{0}\' dosyalarını destekleyen herhangi bir program bulunamadı', + 'ERR_APP_LAUNCH_FAILED' : 'Program açılırken hata oluştun', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Dosyanın açılmaya çalışıldığı sırada br hata meydana geldi: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : ' \'{0}\' programının inşası sırasında bir hata oluştu: {1}', + 'ERR_APP_INIT_FAILED_FMT' : ' \'{0}\' programında init() hatası: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : ' \'{0}\' dosyasında kaynak dosyası eksik ya da yüklenirken hata oluştu!', + 'ERR_APP_PRELOAD_FAILED_FMT' : ' \'{0}\' programında önyükleme hatası: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : '\'{0}\' programı zaten açık.Aynı anda yalnızca bir kez kullanabilirsiniz.', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : ' \'{0}\' açılamadı. Program bulunamadı!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : ' \'{0}\' açılamadı. Tarayıcınız deskteklemiyor: {1}', + 'ERR_NO_WM_RUNNING' : 'Çalışan bir pencere bulunamadı', + 'ERR_CORE_INIT_FAILED' : ' OS.js başlatılma hatası', + 'ERR_CORE_INIT_FAILED_DESC' : ' OS.js başlatılırken bir hata meydana geldi', + 'ERR_CORE_INIT_NO_WM' : 'Cannot launch OS.js: No window manager defined!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'OS.js başlatılamaz: Window Manager yüklenirken hata oluştu: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : ' OS.js başlatılamaz: Kaynakların önyükleme işlemi sırasında hata oluştu...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Hata Bildir', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Beklenmedik bir hata meydana geldi.', + 'ERR_APP_API_ERROR' : 'Program API hatası', + 'ERR_APP_API_ERROR_DESC_FMT' : '{0} programı \'{1}\' işlemini gerçekleşirken hata oluştu', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Gözden kaçırdığınız değişken: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Bilinmeyen bir hata', + 'ERR_OPERATION_TIMEOUT' : 'Zaman aşımına ugradı', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Zaman aşımı({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'Zaten \'{0}\' adına sahip bir pencere var', + 'WINDOW_MINIMIZE' : 'Küçült', + 'WINDOW_MAXIMIZE' : 'Büyült', + 'WINDOW_RESTORE' : 'geri yükle', + 'WINDOW_CLOSE' : 'Kapat', + 'WINDOW_ONTOP_ON' : 'en üstte (aktif)', + 'WINDOW_ONTOP_OFF': 'en üstte (aktif değil)', + 'TITLE_SIGN_OUT' : 'Çıkış Yap', + 'TITLE_SIGNED_IN_AS_FMT' : '{0} olarak giriş yap', + 'MSG_SESSION_WARNING' : 'OS.jsda çıkmak istedigine emin misin? Kaydedilmemiş tüm veriler silinecek!', + 'BUGREPORT_MSG' : 'Hata olduğunu düşünüyorsan lütfen bizimle irtibata geç.\nHatanın nasıl oluştuğunu kısa bir şekilde yaz ve eğer yapabiliyorsan bir kopyasını bize gönder', + 'SERVICENOTIFICATION_TOOLTIP' : 'Harici bir servise girildi: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Ölümcül Hata', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR Hatası: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Oturumu Kapat (Çıkış)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Oturum Kapatılıyor user \'{0}\'.\nKaydetmek ister misin?', + 'DIALOG_CLOSE' : 'Kapat', + 'DIALOG_CANCEL': 'İptal', + 'DIALOG_APPLY' : 'Uygula', + 'DIALOG_OK' : 'Tamam', + 'DIALOG_ALERT_TITLE' : 'Uyarı Penceresi', + 'DIALOG_COLOR_TITLE' : 'Renk Penceresi', + 'DIALOG_COLOR_R' : 'Kırmızı: {0}', + 'DIALOG_COLOR_G' : 'Yeşil: {0}', + 'DIALOG_COLOR_B' : 'Mavi: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Onay Penceresi', + 'DIALOG_ERROR_MESSAGE' : 'Mesaj', + 'DIALOG_ERROR_SUMMARY' : 'Özet', + 'DIALOG_ERROR_TRACE' : 'İzle', + 'DIALOG_ERROR_BUGREPORT' : ' Hata bildir', + 'DIALOG_FILE_SAVE' : 'Kaydet', + 'DIALOG_FILE_OPEN' : 'Aç', + 'DIALOG_FILE_MKDIR' : 'Yeni Klasör', + 'DIALOG_FILE_MKDIR_MSG' : '**{0}**da yeni bir Klasör oluştur', + 'DIALOG_FILE_OVERWRITE' : 'Dosyanın üzerine yazmak konusunda emin misin \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Görünüm Seçenekleri', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Liste Görünümü', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Tree Görünümü', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Icon Görünümü', + 'DIALOG_FILE_ERROR' : 'Dosya Penceresi Hatası', + 'DIALOG_FILE_ERROR_SCANDIR': 'Bir hatadan dolayı \'{0}\' dosyaları listelenemedi', + 'DIALOG_FILE_MISSING_FILENAME' : 'Bir dosya seçmeli veya yeni bir dosya ismi girmelisin!', + 'DIALOG_FILE_MISSING_SELECTION': 'Bir dosya seçmelisin!', + 'DIALOG_FILEINFO_TITLE' : 'Dosya Bilgileri', + 'DIALOG_FILEINFO_LOADING' : 'Dosya bilgileri yükleniyor: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Dosya Bilgi Penceresi Hatası', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : ' **{0}** hakkında bilgi alınırken hata meydana geldi', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : '{0} Hakkında bilgi alınırken hata meydana geldi', + 'DIALOG_INPUT_TITLE' : 'Giriş Penceresi', + 'DIALOG_FILEPROGRESS_TITLE' : 'Dosya İşlemlerinin İlerleme Durumu', + 'DIALOG_FILEPROGRESS_LOADING' : 'Yükleniyor...', + 'DIALOG_UPLOAD_TITLE' : 'Yükleme Penceresi', + 'DIALOG_UPLOAD_DESC' : 'Yükle **{0}**.
Maksimum boyut: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Yükleniyor \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'Yükleniyor...', + 'DIALOG_UPLOAD_FAILED' : 'Yükleme başarısız oldu', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Yükleme başarısız oldu', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'bilinmeyen bir sebepten dolayı hata oluştu...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Kullanıcı tarafından iptal edildi...', + 'DIALOG_UPLOAD_TOO_BIG': 'Dosya Boyutu çok fazla', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Dosya Boyutu çok fazla, {0} sınırını aştı', + 'DIALOG_FONT_TITLE' : 'Yazı Tipi Penceresi', + 'DIALOG_APPCHOOSER_TITLE' : 'Program Seç', + 'DIALOG_APPCHOOSER_MSG' : 'Açmak İçin Bir Program Seçiniz', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Bir Program Seçmeniz Gerek', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : ' {0} için varsayılan bir program seçiniz', + 'GAPI_DISABLED' : 'GoogleAPI Modulü inaktif veya kurulu değil', + 'GAPI_SIGN_OUT' : 'Google API Services uygulamasında çık', + 'GAPI_REVOKE' : 'İzinleri İptal Et ve Çık', + 'GAPI_AUTH_FAILURE' : 'Google API Kimlik Doğrulama Hatası', + 'GAPI_AUTH_FAILURE_FMT' : 'Kimlik Doğrulama Hatası: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Google API yüklenemedi', + 'WLAPI_DISABLED' : 'Windows Live API inaktif veya kurulu değil', + 'WLAPI_SIGN_OUT' : 'Window Live API uygulamasında çık', + 'WLAPI_LOAD_FAILURE' : 'Windows Live API yüklenirken hata oluştu', + 'WLAPI_LOGIN_FAILED' : 'Windows Live APIe girerken hata oluştu', + 'WLAPI_LOGIN_FAILED_FMT' : 'Windows Live APIe girerken hata oluştu: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API {0} hatası verdi', + 'IDB_MISSING_DBNAME' : 'Veritabanı ismi olmadan IndexedDB Oluşturulamaz', + 'IDB_NO_SUCH_ITEM' : 'Öge mevcut değil', + 'ERR_VFS_FATAL' : 'Ölümcül Hata', + 'ERR_VFS_UNAVAILABLE' : 'Kullanılamaz', + 'ERR_VFS_FILE_ARGS' : 'Dosyaya en az bir değişken girilmeli', + 'ERR_VFS_NUM_ARGS' : 'Yeyersiz Değişken', + 'ERR_VFS_EXPECT_FILE' : 'Dosya Bekleniyordu', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Kaynak Kod Dosyası Bekleniyordu', + 'ERR_VFS_EXPECT_DST_FILE' : 'Hedef Dosyası Bekleniyordu', + 'ERR_VFS_FILE_EXISTS' : 'Hedef Dosyası Zaten Mevcut', + 'ERR_VFS_TRANSFER_FMT' : 'depo ile {0} arasında aktarım sırasında bir hata meydana geldi', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Hedef Dosyası olmadan yükleme yapılamaz', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Dosya tanımlamadan yükleme yapılamaz', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Dosya yükleme hatası: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Dosya yükleme iptal edildi', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Hedef belli değilken dosya indirilemez', + 'ERR_VFS_DOWNLOAD_FAILED' : 'İndirilme sırasında bir hata meydana geldi: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'Geri Dönüş Boş', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Dosya İndiriliyor', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR Hatası', + 'ERR_VFSMODULE_ROOT_ID' : 'Root idsi bulunamadı', + 'ERR_VFSMODULE_NOSUCH' : 'Dosya kullanımda değil', + 'ERR_VFSMODULE_PARENT' : 'Üst Öge Bulunmuyors', + 'ERR_VFSMODULE_PARENT_FMT' : 'Üst Öge aranırken hata oluştu: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Klasör Görüntülenirken Hata Meydana Geldi', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Klasör Görüntülenirken Hata Meydana Geldi: {0}', + 'ERR_VFSMODULE_READ' : 'Dosya Okunurken Hata oluştu', + 'ERR_VFSMODULE_READ_FMT' : 'Dosya Okunurken Hata oluştu: {0}', + 'ERR_VFSMODULE_WRITE' : 'Dosyaya yazılırken Hata oluştu', + 'ERR_VFSMODULE_WRITE_FMT' : 'Dosyaya yazılırken Hata oluştu: {0}', + 'ERR_VFSMODULE_COPY' : 'Kopyalanırken Hata meydana geldi.', + 'ERR_VFSMODULE_COPY_FMT' : 'Kopyalanırken Hata meydana geldi: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Bağlantısız Dosya', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Bağlantısız Dosya: {0}', + 'ERR_VFSMODULE_MOVE' : 'Dosya Taşınırken Hata Oluştu', + 'ERR_VFSMODULE_MOVE_FMT' : 'Dosya Taşınırken Hata Oluştu: {0}', + 'ERR_VFSMODULE_EXIST' : 'Dosyanın varlığı teyit edilirken hata meydana geldi', + 'ERR_VFSMODULE_EXIST_FMT' : 'Dosyanın varlığı teyit edilirken hata meydana geldi: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Dosya Hakkında Bilgi Toplanırken Hata Oluştu', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Dosya Hakkında Bilgi Toplanırken Hata Oluştu: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Klasör Oluşturulurken Hata Oluştu', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Klasör Oluşturulurken Hata Oluştu: {0}', + 'ERR_VFSMODULE_URL' : 'Dosyanın url adresi getirilirken hata meydana geldi', + 'ERR_VFSMODULE_URL_FMT' : 'Dosyanın url adresi getirilirken hata meydana geldi: {0}', + 'ERR_VFSMODULE_TRASH' : 'Çöp Kutusuna Taşınırken Hata Oluştu', + 'ERR_VFSMODULE_TRASH_FMT' : 'Çöp Kutusuna Taşınırken Hata Oluştu: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Çöp Kutusundan Çıkarılırken Hata Meydana Geldi', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Çöp Kutusundan Çıkarılırken Hata Meydana Geldi: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Çöpü boşaltırken hata meydana geldi', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Çöpü boşaltırken hata meydana geldi: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Dropbox APIya girdiniz', + 'DROPBOX_SIGN_OUT' : 'Google API servisi oturumunu kapat', + 'ONEDRIVE_ERR_RESOLVE' : 'Öge bulunamadı', + 'ERR_PACKAGE_EXISTS': 'Paketlenecek yer zaten mevcut.Yine de devam etmek istiyor musun?', + 'ERR_FILE_APP_OPEN' : 'Dosya Açılamadı', + 'ERR_FILE_APP_OPEN_FMT' : '{0} dosyası açılmadı çünkü {1} desteklenmiyor', + 'ERR_FILE_APP_OPEN_ALT_FMT' : '{0} dosyası açılamadı', + 'ERR_FILE_APP_SAVE_ALT_FMT' : '{0} dosyası kaydedilemedi', + 'ERR_GENERIC_APP_FMT' : '{0} program hatası', + 'ERR_GENERIC_APP_ACTION_FMT': ' \'{0}\' gerçekleşirken hata oluştu', + 'ERR_GENERIC_APP_UNKNOWN' : 'Bilinmeyen Hata', + 'ERR_GENERIC_APP_REQUEST' : 'İstek cevaplanırken bir hata meydana geldi.', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Ölümcül Hata: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Değişiklikleri Çıkar?', + 'MSG_FILE_CHANGED' : 'Dosya değişmiş.Tekrar yüklemek ister misin?', + 'MSG_APPLICATION_WARNING' : 'Program Uyarısı', + 'MSG_MIME_OVERRIDE' : ' "{0}" türü desteklenmiyor :( .Bunun yerine "{1}" kullanının.', + 'LBL_UNKNOWN' : 'Bilinmiyor', + 'LBL_APPEARANCE' : 'Görünüm', + 'LBL_USER' : 'Kullanıcı', + 'LBL_NAME' : 'İsim', + 'LBL_APPLY' : 'Uygula', + 'LBL_FILENAME' : 'Dosya adı', + 'LBL_PATH' : 'Dosya yolu', + 'LBL_SIZE' : 'Boyut', + 'LBL_TYPE' : 'Tür', + 'LBL_MIME' : 'MIME', //Eklenecektir + 'LBL_LOADING' : 'Yükleniyor', + 'LBL_SETTINGS' : 'Ayarlar', + 'LBL_ADD_FILE' : 'Dosya ekle', + 'LBL_COMMENT' : 'Yorum', + 'LBL_ACCOUNT' : 'Hesap', + 'LBL_CONNECT' : 'Bağlan', + 'LBL_ONLINE' : 'Aktif', + 'LBL_OFFLINE' : 'Aktif değil', + 'LBL_AWAY' : 'Yolda', + 'LBL_BUSY' : 'Meşgul', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Yardım', + 'LBL_ABOUT' : 'Hakkında', + 'LBL_PANELS' : 'Panels', + 'LBL_LOCALES' : 'Yerler', + 'LBL_THEME' : 'Tema', + 'LBL_COLOR' : 'Renk', + 'LBL_PID' : 'Kişisel Kimlik', + 'LBL_KILL' : 'Kes', + 'LBL_ALIVE' : 'Alive', + 'LBL_INDEX' : 'Index', + 'LBL_ADD' : 'Ekle', + 'LBL_FONT' : 'Yazı Tipi', + 'LBL_YES' : 'Evet', + 'LBL_NO' : 'Hayır', + 'LBL_CANCEL' : 'İptal', + 'LBL_TOP' : 'Üst', + 'LBL_LEFT' : 'Sol', + 'LBL_RIGHT' : 'Sağ', + 'LBL_BOTTOM' : 'Alt', + 'LBL_CENTER' : 'Orta', + 'LBL_FILE' : 'Dosya', + 'LBL_NEW' : 'Yeni', + 'LBL_OPEN' : 'Aç', + 'LBL_SAVE' : 'Kaydet', + 'LBL_SAVEAS' : '-olarak kaydet...', + 'LBL_CLOSE' : 'Kapat', + 'LBL_MKDIR' : 'Klasör oluştur', + 'LBL_UPLOAD' : 'Yükle', + 'LBL_VIEW' : 'Görünüm', + 'LBL_EDIT' : 'Düzenle', + 'LBL_RENAME' : 'İsmi Değiştir', + 'LBL_DELETE' : 'Sil', + 'LBL_OPENWITH' : '-ile aç ...', + 'LBL_ICONVIEW' : 'icon görünüm', + 'LBL_TREEVIEW' : 'Tree View', + 'LBL_LISTVIEW' : 'Liste Görünüm', + 'LBL_REFRESH' : 'Yenile', + 'LBL_VIEWTYPE' : 'Görünüm Türü', + 'LBL_BOLD' : 'Kalım', + 'LBL_ITALIC' : 'İtalik', + 'LBL_UNDERLINE' : 'Altı Çizili', + 'LBL_REGULAR' : 'Düzenli', + 'LBL_STRIKE' : 'Vurgulu', + 'LBL_INDENT' : 'Indent', //eklenecek + 'LBL_OUTDENT' : 'Outdate', //eklenecek + 'LBL_UNDO' : 'Geri Al', + 'LBL_REDO' : 'İleri Al', + 'LBL_CUT' : 'Kes', + 'LBL_UNLINK' : 'Bağlantıyı Kaldır', + 'LBL_COPY' : 'Kopyala', + 'LBL_PASTE' : 'Yapıştır', + 'LBL_INSERT' : 'Araya Ekle', + 'LBL_IMAGE' : 'Resim', + 'LBL_LINK' : 'Link', + 'LBL_DISCONNECT' : 'Bağlantıyı Kes', + 'LBL_APPLICATIONS' : 'Programlar', + 'LBL_ADD_FOLDER' : 'Klasör Ekle', + 'LBL_INFORMATION' : 'Bilgi', + 'LBL_TEXT_COLOR' : 'Yazı Rengi', + 'LBL_BACK_COLOR' : 'Zemin Rengi', + 'LBL_RESET_DEFAULT' : 'Reset to defaults', + 'LBL_DOWNLOAD_COMP' : 'Bilgisayara İndir', + 'LBL_ORDERED_LIST' : 'Sıralı Liste', + 'LBL_BACKGROUND_IMAGE' : 'Arkaplan Resmi', + 'LBL_BACKGROUND_COLOR' : 'Arkaplan Rengi', + 'LBL_UNORDERED_LIST' : 'Sırasız Liste', + 'LBL_STATUS' : 'Durum', + 'LBL_READONLY' : 'Sadece Oku', + 'LBL_CREATED' : 'Oluşturulma Tarihi', + 'LBL_MODIFIED' : 'Değiştirilme Tarihi', + 'LBL_SHOW_COLUMNS' : 'Sütunları Göster', + 'LBL_MOVE' : 'Taşı', + 'LBL_OPTIONS' : 'Ayarlar', + 'LBL_OK' : 'Tamam', + 'LBL_DIRECTORY' : 'Klasör', + 'LBL_CREATE' : 'oluştur', + 'LBL_BUGREPORT' : 'Hata Bildir', + 'LBL_INSTALL' : 'Yükle', + 'LBL_UPDATE' : 'Güncelle', + 'LBL_REMOVE' : 'Kaldır', + 'LBL_SHOW_SIDEBAR' : 'Kenar çubuğunu göster', + 'LBL_BACKGROUND' : 'arkaplan', + 'LBL_DESKTOP' : 'masaüstü', + 'LBL_PANEL' : 'Panel', + 'LBL_POSITION' : 'pozisyon', + 'LBL_ONTOP' : 'en üst', + 'LBL_ITEMS' : 'nesneler', + 'LBL_GENERAL' : 'genel' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.it_IT = { + 'ERR_FILE_OPEN' : 'Errore durante l\'apertura del file', + 'ERR_WM_NOT_RUNNING' : 'Windows manager non in esecuzione', + 'ERR_FILE_OPEN_FMT' : 'Il file \'**{0}**\' non può essere aperto', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'Nessuna applicazione che supporta il tipo di file \'{0}\' è stata trovata', + 'ERR_APP_LAUNCH_FAILED' : 'Avvio Applicazione fallito', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'Si è verificato un errore durante l\'avvio di : {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'Applicazione \'{0}\' construct failed: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'Applicazione \'{0}\', init() fallito: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'Applicazione resources missing for \'{0}\' or it failed to load!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'Applicazione \'{0}\' preloading failed: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'L\' Applicazione \'{0}\' è già stata lanciata, ed è permessa una sola istanza!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'Avvio di \'{0}\' fallito. Manifesto dell\'applicazione non trovato', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'Avvio di \'{0}\' fallito. il tuo browser non supporta: {1}', + 'ERR_NO_WM_RUNNING' : 'Nessun window manager in esecuzione', + 'ERR_CORE_INIT_FAILED' : 'Inizializzazione OS.js fallita', + 'ERR_CORE_INIT_FAILED_DESC' : 'Si è verificato un errore nella Inizializzazione di OS.js', + 'ERR_CORE_INIT_NO_WM' : 'Impossibile avviare OS.js: Nessun window manager settato!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'Impossibile avviare OS.js: Fallito avvio del window manager: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'Impossibile avviare OS.js: Precaricamento risorse fallito...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript Error Report', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'Si è verificato un errore inaspettato, forse un bug.', + 'ERR_APP_API_ERROR' : 'Application API error', + 'ERR_APP_API_ERROR_DESC_FMT' : 'L\'Applicazione {0} ha fallito nell\'eseguire l\'operazine \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'Argomento mancante: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'Errore sconosciuto', + 'ERR_OPERATION_TIMEOUT' : 'Operation Timeout', + 'ERR_OPERATION_TIMEOUT_FMT' : 'Operation Timeout ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' prevede \'{1}\' di tipo \'{2}\', \'{3}\' ricevuto', + 'ERR_WIN_DUPLICATE_FMT' : 'Hai già dato un nome alla finestra \'{0}\'', + 'WINDOW_MINIMIZE' : 'Minimizza', + 'WINDOW_MAXIMIZE' : 'Massimizza', + 'WINDOW_RESTORE' : 'Ripristina', + 'WINDOW_CLOSE' : 'Chiudi', + 'WINDOW_ONTOP_ON' : 'Primopiano (Abilita)', + 'WINDOW_ONTOP_OFF': 'Primopiano (Disabilita)', + 'TITLE_SIGN_OUT' : 'Disconnetti', + 'TITLE_SIGNED_IN_AS_FMT' : 'Connesso come: {0}', + 'ERR_LOGIN_FMT' : 'Errore di accesso: {0}', + 'ERR_LOGIN_INVALID' : 'Accesso non corretto', + 'ERR_NO_SESSION': 'Nessuna sessione create dal server. Vuoi riprovare l\'autenticazione?', + 'MSG_SESSION_WARNING' : 'Sei sicuro di voler chiudere OS.js? Ogni settaggio ed ogni dato non salvato andrà perduto!', + 'BUGREPORT_MSG' : 'Per piacere, fai un report se pensi che questo sia un bug. \nIncludi una breve descrizione di come l\'errore si è verificato, se possibile come replicarlo.', + 'SERVICENOTIFICATION_TOOLTIP' : 'Connesso al servizio esterno: {0}', + 'ERR_UTILS_XHR_FATAL' : 'Errore Fatale!', + 'ERR_UTILS_XHR_FMT' : 'Errore AJAX/XHR: {0}', + 'DIALOG_LOGOUT_TITLE' : 'Disconetti (Esci)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'Disconnessione utente \'{0}\'.\nVuoi salvare la sessinoe corrente?', + 'DIALOG_CLOSE' : 'Chiudi', + 'DIALOG_CANCEL': 'Cancella', + 'DIALOG_APPLY' : 'Applica', + 'DIALOG_OK' : 'OK', + 'DIALOG_ALERT_TITLE' : 'Attenzione!', + 'DIALOG_COLOR_TITLE' : 'Scegli colori', + 'DIALOG_COLOR_R' : 'Rosso: {0}', + 'DIALOG_COLOR_G' : 'Verde: {0}', + 'DIALOG_COLOR_B' : 'Blue: {0}', + 'DIALOG_COLOR_A' : 'Alpha: {0}', + 'DIALOG_CONFIRM_TITLE' : 'Conferma scelta', + 'DIALOG_ERROR_MESSAGE' : 'Messaggio', + 'DIALOG_ERROR_SUMMARY' : 'Sommario', + 'DIALOG_ERROR_TRACE' : 'Stack dell\'errore', + 'DIALOG_ERROR_BUGREPORT' : 'Segnala Bug', + 'DIALOG_FILE_SAVE' : 'Salva', + 'DIALOG_FILE_OPEN' : 'Open', + 'DIALOG_FILE_MKDIR' : 'Nuova Cartella', + 'DIALOG_FILE_MKDIR_MSG' : 'Crea una nuova cartella in **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'Sei sicuro di voler sovrascrivere il file \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'Mostra tipo', + 'DIALOG_FILE_MNU_LISTVIEW' : 'Visualizzazione a lista', + 'DIALOG_FILE_MNU_TREEVIEW' : 'Visualizzazione ad albero', + 'DIALOG_FILE_MNU_ICONVIEW' : 'Visualizzazione ad icone', + 'DIALOG_FILE_ERROR' : 'FileDialog Errore', + 'DIALOG_FILE_ERROR_SCANDIR': 'Indicizzazione della cartella \'{0}\' fallito, perchè si è verificato un errore!', + 'DIALOG_FILE_ERROR_FIND': 'Ricerca cartella \'{0}\' fallita perchè si è verificato un errore!', + 'DIALOG_FILE_MISSING_FILENAME' : 'Devi selezionare un file o fornire un nuovo nome!', + 'DIALOG_FILE_MISSING_SELECTION': 'Devi selezionare un file!', + 'DIALOG_FILEINFO_TITLE' : 'Informazioni file', + 'DIALOG_FILEINFO_LOADING' : 'Caricamento informazioni file: {0}', + 'DIALOG_FILEINFO_ERROR' : 'Errore FileInformationDialog', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'Recupero informazioni fallito **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'Recupero infomazioni file fallito: {0}', + 'DIALOG_INPUT_TITLE' : 'Richiesta di inserimento', + 'DIALOG_FILEPROGRESS_TITLE' : 'Operazione file in corso', + 'DIALOG_FILEPROGRESS_LOADING' : 'Caricamento...', + 'DIALOG_UPLOAD_TITLE' : 'Caricamento', + 'DIALOG_UPLOAD_DESC' : 'Carimento del filo a **{0}**.
Dimensione massima: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'Caricamento \'{0}\' ({1} {2}) a {3}', + 'DIALOG_UPLOAD_MSG' : 'Caricamento file...', + 'DIALOG_UPLOAD_FAILED' : 'Caricamento fallito', + 'DIALOG_UPLOAD_FAILED_MSG' : 'Il caricamentoè fallito', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'Ragione sconociuta...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'Cancellato dall\'utente...', + 'DIALOG_UPLOAD_TOO_BIG': 'Dimensione file troppo grande', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'Dimensione del file troppo grande, in eccesso {0}', + 'DIALOG_FONT_TITLE' : 'Scelta Font', + 'DIALOG_APPCHOOSER_TITLE' : 'Scegli Applicazione', + 'DIALOG_APPCHOOSER_MSG' : 'Scegli un applicazione da aprire', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'Devi selezionare un applicazione', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'Usa l\'applicazione predefinita per {0}', + 'GAPI_DISABLED' : 'Modulo GoogleAPI non configurato o disabilitato', + 'GAPI_SIGN_OUT' : 'Disconnettiti da Google API Services', + 'GAPI_REVOKE' : 'Revoca i permessi e disconnetti', + 'GAPI_AUTH_FAILURE' : 'L\'Autenticazione alla Google API fallito o non avvenuto', + 'GAPI_AUTH_FAILURE_FMT' : 'Autenticazione fallita: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Caricamento Google API fallito', + 'WLAPI_DISABLED' : 'Windows Live API module non configurato o disabilitato', + 'WLAPI_SIGN_OUT' : 'Disconnetti da Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Caricamento Windows Live API fallito', + 'WLAPI_LOGIN_FAILED' : 'Connessione a Windows Live API fallita', + 'WLAPI_LOGIN_FAILED_FMT' : 'Connessione a Windows Live API fallito: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API returned {0} status', + 'IDB_MISSING_DBNAME' : 'Impossibile creare IndexedDB senza un nome database', + 'IDB_NO_SUCH_ITEM' : 'Nessun elemento', + 'ERR_VFS_FATAL' : 'Errore fatale', + 'ERR_VFS_UNAVAILABLE' : 'No disponibile', + 'ERR_VFS_FILE_ARGS' : 'Il file richiede almeno un argumento', + 'ERR_VFS_NUM_ARGS' : 'Non abbastanza argomenti', + 'ERR_VFS_EXPECT_FILE' : 'File-object previsto', + 'ERR_VFS_EXPECT_SRC_FILE' : 'Sorgente file-object prevista', + 'ERR_VFS_EXPECT_DST_FILE' : 'Destinazion file-object prevista', + 'ERR_VFS_FILE_EXISTS' : 'Destinazione già esistente', + 'ERR_VFS_TARGET_NOT_EXISTS': 'La destinazione non esiste', + 'ERR_VFS_TRANSFER_FMT' : 'Un errore si è verificato durante il trasferimento tra le memorie: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'Impossibile caricare un file senza una destinazione', + 'ERR_VFS_UPLOAD_NO_FILES' : 'Impossibile caricare senza definire un file', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'Carimento file fallito: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'Caricamento file cancellato', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'Impossibile scaricare una destinazione senza una destinazione', + 'ERR_VFS_DOWNLOAD_FAILED' : 'Si è verificato un errore durante il download: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'La risposta era vuota', + 'ERR_VFSMODULE_INVALID' : 'Modulo VFS Invalido', + 'ERR_VFSMODULE_INVALID_FMT' : 'Modulo VFS Invalido: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'Metodo VFS Invalido', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'Metodo VFS Invalido: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'Modulo VFS tipo non valido', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'Modulo VFS tipo non valido: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'Modulo VFS configurazione non valida', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'Modulo VFS configurazione non valida: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'Modulo VFS già montato', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'Modulo VFS \'{0}\' già montato', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'Modulo VFS non montato', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'Modulo VFS \'{0}\' non montato', + 'ERR_VFSMODULE_EXCEPTION' : 'Modulo VFS Eccezione', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'Modulo VFS Eccezione: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'Nessun modulo VFS associato con {0}. Desinazione o formato sbagliato?', + 'ERR_VFSMODULE_READONLY' : 'Questo modulo VFS è di sola lettura', + 'ERR_VFSMODULE_READONLY_FMT' : 'Questo modulo VFS è di sola lettura: {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'Download file', + 'ERR_VFSMODULE_XHR_ERROR' : 'Errore XHR', + 'ERR_VFSMODULE_ROOT_ID' : 'ID cartella root non trovato', + 'ERR_VFSMODULE_NOSUCH' : 'Il file non esiste', + 'ERR_VFSMODULE_PARENT' : 'Nessun parente', + 'ERR_VFSMODULE_PARENT_FMT' : 'Cartella parente non trovata: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'Scansione cartella fallito', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'Scansione cartella fallito: {0}', + 'ERR_VFSMODULE_READ' : 'Lettura file fallito', + 'ERR_VFSMODULE_READ_FMT' : 'Lettura file fallito: {0}', + 'ERR_VFSMODULE_WRITE' : 'Scrittura file fallita', + 'ERR_VFSMODULE_WRITE_FMT' : 'Scrittura file fallita: {0}', + 'ERR_VFSMODULE_COPY' : 'Copiatura fallita', + 'ERR_VFSMODULE_COPY_FMT' : 'Copiatura fallita: {0}', + 'ERR_VFSMODULE_UNLINK' : 'Unlink file fallito', + 'ERR_VFSMODULE_UNLINK_FMT' : 'Unlink file fallito: {0}', + 'ERR_VFSMODULE_MOVE' : 'Spostamento file fallito', + 'ERR_VFSMODULE_MOVE_FMT' : 'Spostamento file fallito: {0}', + 'ERR_VFSMODULE_EXIST' : 'Verifica esistenza file fallita', + 'ERR_VFSMODULE_EXIST_FMT' : 'Verifica esistenza file fallita: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'Recupero informazioni file fallito', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'Recupero informazioni file fallito: {0}', + 'ERR_VFSMODULE_MKDIR' : 'Creazione cartella fallito', + 'ERR_VFSMODULE_MKDIR_FMT' : 'Creazione cartella fallito: {0}', + 'ERR_VFSMODULE_MKFILE' : 'Creazione file fallita', + 'ERR_VFSMODULE_MKFILE_FMT' : 'Creazione file fallita: {0}', + 'ERR_VFSMODULE_URL' : 'Recupero URL file fallito', + 'ERR_VFSMODULE_URL_FMT' : 'Recupero URL file fallito: {0}', + 'ERR_VFSMODULE_TRASH' : 'Spostamento file nel cestino fallito', + 'ERR_VFSMODULE_TRASH_FMT' : 'Spostamento file nel cestino fallito: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'Spostamento del file fuori dal cestino fallito', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'Spostamento del file fuori dal cestino fallito: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'Svuotamento cestino fallito', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'Svuotamento cestino fallito: {0}', + 'ERR_VFSMODULE_FIND' : 'Ricerca fallita', + 'ERR_VFSMODULE_FIND_FMT' : 'Ricerca fallita: {0}', + 'ERR_VFSMODULE_FREESPACE' : 'Allocamento spazio libero fallito', + 'ERR_VFSMODULE_FREESPACE_FMT' : 'Allocamento spazio libero fallito: {0}', + 'ERR_VFSMODULE_EXISTS' : 'Verifica esistenza fallito', + 'ERR_VFSMODULE_EXISTS_FMT' : 'Verifica esistenza fallito: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'Sei connesso a Dropbox API', + 'DROPBOX_SIGN_OUT' : 'Disconnetti Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'Risoluzione percorso fallita: elemento non trovato', + 'ZIP_PRELOAD_FAIL' : 'Caricamento zip.js fallito', + 'ZIP_VENDOR_FAIL' : 'Libreria zip.js non trovata. L\'hai caricata correttamente?', + 'ZIP_NO_RESOURCE' : 'Nessuna risorsa zip fornita', + 'ZIP_NO_PATH' : 'Nessun percorso fornito', + 'SEARCH_LOADING': 'Ricerca in corso...', + 'SEARCH_NO_RESULTS': 'Nessun risultato trovato', + 'ERR_PACKAGE_EXISTS': 'Percorso installazione pacchetto gia esistente. Impossibile continuare!', + 'ERR_FILE_APP_OPEN' : 'Impossibile aprire il file', + 'ERR_FILE_APP_OPEN_FMT' : 'Impossibile aprire il file {0} perchè il mime {1} non è supportato', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'Impossibile aprire il file {0}', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'Impossibile salvare il file {0}', + 'ERR_GENERIC_APP_FMT' : '{0} Application Error', + 'ERR_GENERIC_APP_ACTION_FMT': 'Esecuzione azione fallito \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'Errore sconosciuto', + 'ERR_GENERIC_APP_REQUEST' : 'Si è verificato un errore durante la risoluzione della richiesta', + 'ERR_GENERIC_APP_FATAL_FMT' : 'Errore fatale: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'Scarta cambiamenti?', + 'MSG_FILE_CHANGED' : 'Il file è stato cambiato. Ricaricarlo?', + 'MSG_APPLICATION_WARNING' : 'Avviso applicazione', + 'MSG_MIME_OVERRIDE' : 'tipo del file "{0}" non supportato, si userà "{1}" al suo posto.', + 'LBL_UNKNOWN' : 'Sconosciuto', + 'LBL_APPEARANCE' : 'Aspetto', + 'LBL_USER' : 'Utente', + 'LBL_NAME' : 'Nome', + 'LBL_APPLY' : 'Applica', + 'LBL_FILENAME' : 'Nome file', + 'LBL_PATH' : 'Percorso', + 'LBL_SIZE' : 'Dimensione', + 'LBL_TYPE' : 'Tipo', + 'LBL_MIME' : 'MIME', + 'LBL_LOADING' : 'Caricamento', + 'LBL_SETTINGS' : 'Settaggi', + 'LBL_ADD_FILE' : 'Aggiungi file', + 'LBL_COMMENT' : 'Commenta', + 'LBL_ACCOUNT' : 'Account', + 'LBL_CONNECT' : 'Connetti', + 'LBL_ONLINE' : 'Online', + 'LBL_OFFLINE' : 'Offline', + 'LBL_AWAY' : 'Non presente', + 'LBL_BUSY' : 'Occupato', + 'LBL_CHAT' : 'Chat', + 'LBL_HELP' : 'Aiuto', + 'LBL_ABOUT' : 'Riguardo a', + 'LBL_PANELS' : 'Pannelli', + 'LBL_LOCALES' : 'Localizzazioni', + 'LBL_THEME' : 'Tema', + 'LBL_COLOR' : 'Colore', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'Terminal (kill)', + 'LBL_ALIVE' : 'Mantieni (Alive)', + 'LBL_INDEX' : 'Indice', + 'LBL_ADD' : 'Aggiungi', + 'LBL_FONT' : 'Font', + 'LBL_YES' : 'Si', + 'LBL_NO' : 'No', + 'LBL_CANCEL' : 'Cancella', + 'LBL_TOP' : 'Sopra', + 'LBL_LEFT' : 'Sinistra', + 'LBL_RIGHT' : 'Destra', + 'LBL_BOTTOM' : 'Sotto', + 'LBL_CENTER' : 'Centro', + 'LBL_FILE' : 'File', + 'LBL_NEW' : 'Nuovo', + 'LBL_OPEN' : 'Apri', + 'LBL_SAVE' : 'Salva', + 'LBL_SAVEAS' : 'Salva come...', + 'LBL_CLOSE' : 'Chiudi', + 'LBL_MKDIR' : 'Crea cartella', + 'LBL_UPLOAD' : 'Carica', + 'LBL_VIEW' : 'Visualizza', + 'LBL_EDIT' : 'Modifica', + 'LBL_RENAME' : 'Rinomina', + 'LBL_DELETE' : 'Cancella', + 'LBL_OPENWITH' : 'Apri con...', + 'LBL_ICONVIEW' : 'Visualizzazione ad Icone', + 'LBL_TREEVIEW' : 'Visualizzazione ad Albero', + 'LBL_LISTVIEW' : 'Visualizzazione ad Lista', + 'LBL_REFRESH' : 'Aggiorna', + 'LBL_VIEWTYPE' : 'Visualizza tipo', + 'LBL_BOLD' : 'Grassetto', + 'LBL_ITALIC' : 'Corsivo', + 'LBL_UNDERLINE' : 'Sottolineato', + 'LBL_REGULAR' : 'Regolare', + 'LBL_STRIKE' : 'Strike', + 'LBL_INDENT' : 'Indenta', + 'LBL_OUTDENT' : 'Unindenta', + 'LBL_UNDO' : 'Torna indietro', + 'LBL_REDO' : 'Vai avanti', + 'LBL_CUT' : 'Taglia', + 'LBL_UNLINK' : 'Rimuovi link', + 'LBL_COPY' : 'Copia', + 'LBL_PASTE' : 'Incolla', + 'LBL_INSERT' : 'Inserisci', + 'LBL_IMAGE' : 'Immaggine', + 'LBL_LINK' : 'Link', + 'LBL_DISCONNECT' : 'Disconnetti', + 'LBL_APPLICATIONS' : 'Applicazioni', + 'LBL_ADD_FOLDER' : 'Aggiungi cartella', + 'LBL_INFORMATION' : 'Informazione', + 'LBL_TEXT_COLOR' : 'Colore testo', + 'LBL_BACK_COLOR' : 'Colore in secondo piano', + 'LBL_RESET_DEFAULT' : 'Resetta ai valori predefiniti', + 'LBL_DOWNLOAD_COMP' : 'Scarica sul computer', + 'LBL_ORDERED_LIST' : 'Lista ordinata', + 'LBL_BACKGROUND_IMAGE' : 'Immagine di sfondo', + 'LBL_BACKGROUND_COLOR' : 'Colore di sfondo', + 'LBL_UNORDERED_LIST' : 'Lista non ordinata', + 'LBL_STATUS' : 'Stato', + 'LBL_READONLY' : 'Di sola lettura', + 'LBL_CREATED' : 'Creato', + 'LBL_MODIFIED' : 'Modificato', + 'LBL_SHOW_COLUMNS' : 'Mostra colonne', + 'LBL_MOVE' : 'Muovi', + 'LBL_OPTIONS' : 'Opzioni', + 'LBL_OK' : 'OK', + 'LBL_DIRECTORY' : 'Cartella', + 'LBL_CREATE' : 'Crea', + 'LBL_BUGREPORT' : 'Segnalazione bug', + 'LBL_INSTALL' : 'Installa', + 'LBL_UPDATE' : 'Aggiorna', + 'LBL_REMOVE' : 'Rimuovi', + 'LBL_SHOW_SIDEBAR' : 'Mostra barra laterale', + 'LBL_SHOW_NAVIGATION' : 'Mostra navigazione', + 'LBL_SHOW_HIDDENFILES' : 'Mostra file nascosti', + 'LBL_SHOW_FILEEXTENSIONS' : 'Mostra le estenzioni dei file', + 'LBL_MOUNT': 'Monta', + 'LBL_DESCRIPTION': 'Descrizione', + 'LBL_USERNAME': 'Nome utente', + 'LBL_PASSWORD': 'Password', + 'LBL_HOST': 'Host', + 'LBL_NAMESPACE': 'Namespace', + 'LBL_SEARCH': 'Ricerca', + 'LBL_SOUNDS' : 'Suoni', + 'LBL_ICONS' : 'Icone', + 'LBL_ICON' : 'Icona', + 'LBL_BACKGROUND' : 'Sfondo', + 'LBL_DESKTOP' : 'Scrivania', + 'LBL_PANEL' : 'Panello', + 'LBL_POSITION' : 'Posizione', + 'LBL_ONTOP' : 'In primo piano', + 'LBL_ITEMS' : 'Elementi', + 'LBL_GENERAL' : 'Generale', + 'LBL_DEBUG' : 'Risoluzione errori', + 'LBL_AUTOHIDE' : 'Nascondi automaticamente', + 'LBL_OPACITY' : 'Opacità', + 'LBL_PACKAGES' : 'Pacchetti', + 'LBL_PACKAGE' : 'Pacchetto', + 'LBL_GROUPS' : 'Gruppi', + 'LBL_VERSION' : 'Versione', + 'LBL_AUTHOR' : 'Autore', + 'LBL_HIDE' : 'Nascondi', + 'LBL_BACK': 'Indietro', + 'LBL_UNINSTALL': 'Disinstalla', + 'LBL_REGENERATE': 'Rigenera', + 'LBL_WINDOWMANAGER': 'Gestore Finestre Desktop', + 'LBL_HOTKEY': 'Tasto rapido', + 'LBL_HOTKEYS': 'Tasti rapidi', + 'LBL_MOUNTS': 'Monta', + 'LBL_ID': 'ID', + 'LBL_APPLICATION': 'Applicazione', + 'LBL_SCOPE': 'Scope', + 'LBL_REPOSITORY': 'Repository', + 'LBL_PERSONAL': 'Personale', + 'LBL_SYSTEM': 'Sistema', + 'LBL_STARTING': 'Avvio', + 'LBL_STORE': 'Store', + 'LBL_LOCALE': 'Lingue', + 'LBL_INPUT': 'Input', + 'LBL_MISC': 'Vari', + 'LBL_OTHER': 'Altro', + 'LBL_USERS': 'Utenti', + 'LBL_FONTS': 'Fonts' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.fa_FA = { + 'ERR_FILE_OPEN' : 'خطا در باز کردن فايل', + 'ERR_WM_NOT_RUNNING' : 'مديريت پنجره ها اجرا نشده است', + 'ERR_FILE_OPEN_FMT' : 'فايل \'**{0}**\' رانمي توان باز کرد', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'برنامه اي که از \'{0}\' فايل پشتيباني کند پيدا نشد', + 'ERR_APP_LAUNCH_FAILED' : 'اجراي برنامه موفق نبود', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'وقوع خطادر زمان اجراي برنامه: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'برنامه \'{0}\' خطا در سازنده: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'برنامه \'{0}\' init() با خطا مواجه شد: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'نبودن منابع براي برنامه \'{0}\' يا اجرا کردن نا موفق!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'برنامه \'{0}\'قبل بارگزاري با خطا مواجه شد: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'برنامه \'{0}\' قبلا اجرا شده و فقط ميتواند يک نمونه از آن اجرا شود!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'مشکل در اجرا \'{0}\'. اطلاعات فايل مانيفست پيدا نشد!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'مشکل در اجرا \'{0}\'. مرورگر شما از اين نسخه پشتيباني نميکند: {1}', + 'ERR_NO_WM_RUNNING' : 'مديريت پنجره ها در حال اجرا نيست', + 'ERR_CORE_INIT_FAILED' : 'اجراي OS.js با مشکل مواجه شد', + 'ERR_CORE_INIT_FAILED_DESC' : 'بروز يک مشکل در زمان اجراي OS.js', + 'ERR_CORE_INIT_NO_WM' : 'ناتوان در اجراي OS.js: مديريت پنجره مشخص نشده!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'ناتوان در اجراي OS.js: با مشکل مواجه شدن مديريت پنجره : {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'ناتوان در اجراي OS.js: خطا در بارگزاري اوليه منابع ...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'گزارش خطا جاواسکريپت', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'يک خطاي غيره منتظره رخ داد, ممکن است يک باگ باشد.', + 'ERR_APP_API_ERROR' : 'خظاي API برنامه', + 'ERR_APP_API_ERROR_DESC_FMT' : 'برنامه {0} با خطا مواجه شدن اجراي عمليات \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'کمبود آرگامنت: {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'خطاي ناشناخته', + 'ERR_OPERATION_TIMEOUT' : 'به اتمام رسيدن عمليات', + 'ERR_OPERATION_TIMEOUT_FMT' : 'به اتمام رسيدن عمليات ({0})', + 'ERR_WIN_DUPLICATE_FMT' : 'شما قبلا يک پنجره با نام \'{0}\'', + 'WINDOW_MINIMIZE' : 'تمام صفحه', + 'WINDOW_MAXIMIZE' : 'کوچک شدن صفحه', + 'WINDOW_RESTORE' : 'بازيابي', + 'WINDOW_CLOSE' : 'بستن', + 'WINDOW_ONTOP_ON' : 'برروي همه (فعال)', + 'WINDOW_ONTOP_OFF': 'برري همه(غيرفعال)', + 'TITLE_SIGN_OUT' : 'خروج', + 'TITLE_SIGNED_IN_AS_FMT' : 'وارد شده با نام : {0}', + 'ERR_LOGIN_FMT' : 'خطاي ورود: {0}', + 'ERR_LOGIN_INVALID' : 'نا معتبر بودن ورود', + 'MSG_SESSION_WARNING' : 'آيا شما مطمئن به خارح شدن از برنامه هستيد? تماميه اطلاعات ذخيره نشد پنجره ها از بين خواهند رفت!', + 'BUGREPORT_MSG' : 'درصورتي که تصورميکنيد اين يک باگ است گزارش دهيد.\nشامل توضيح کوتاهي که چگونه اين اتفاق افتاد, و اگر شما توانستد برطرف کنيد نحوه آن را اطلاع دهيد', + 'SERVICENOTIFICATION_TOOLTIP' : 'وارد شدن به سرويس هاي خارجي: {0}', + 'ERR_UTILS_XHR_FATAL' : 'خطاي مخرب', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR خطاي: {0}', + 'DIALOG_LOGOUT_TITLE' : 'خروج از برنامه', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'خروج کاربر \'{0}\'.\nآيا نميخواهيد جلسه جاري حفظ شود?', + 'DIALOG_CLOSE' : 'بستن', + 'DIALOG_CANCEL': 'انصراف', + 'DIALOG_APPLY' : 'اعمال', + 'DIALOG_OK' : 'تاييد', + 'DIALOG_ALERT_TITLE' : 'ديالوگ هشدار', + 'DIALOG_COLOR_TITLE' : 'ديالوگ رنگ', + 'DIALOG_COLOR_R' : 'قرمز: {0}', + 'DIALOG_COLOR_G' : 'سبز: {0}', + 'DIALOG_COLOR_B' : 'آبي: {0}', + 'DIALOG_COLOR_A' : 'آلفا: {0}', + 'DIALOG_CONFIRM_TITLE' : 'ديالوگ تاييد', + 'DIALOG_ERROR_MESSAGE' : 'پيام', + 'DIALOG_ERROR_SUMMARY' : 'خلاصه', + 'DIALOG_ERROR_TRACE' : 'پيگيري', + 'DIALOG_ERROR_BUGREPORT' : 'گزارش باگ', + 'DIALOG_FILE_SAVE' : 'ذخيره', + 'DIALOG_FILE_OPEN' : 'بازکردن', + 'DIALOG_FILE_MKDIR' : 'پوشه جديد', + 'DIALOG_FILE_MKDIR_MSG' : 'ساخت پوشه در مسير **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'داشتن حصول اطمينان از رونوشت فايل \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'نوع نمايش', + 'DIALOG_FILE_MNU_LISTVIEW' : 'نمايش ليست', + 'DIALOG_FILE_MNU_TREEVIEW' : 'نمايش درختي', + 'DIALOG_FILE_MNU_ICONVIEW' : 'نمايش آيکون', + 'DIALOG_FILE_ERROR' : 'خطاي ديالوگ فايل', + 'DIALOG_FILE_ERROR_SCANDIR': 'خطا در ليست کردن مسير \'{0}\' به دليل رخ دادن يک خطا', + 'DIALOG_FILE_MISSING_FILENAME' : 'شما ميبايست يک فايل انتخاب کنيد يا يک نام فايل جديد وارد کنيد!', + 'DIALOG_FILE_MISSING_SELECTION': 'شما مي بايست يک فايل انتخاب کنيد!', + 'DIALOG_FILEINFO_TITLE' : 'اطلاعات فايل', + 'DIALOG_FILEINFO_LOADING' : 'بارکزاري اطلاعات فايل براي: {0}', + 'DIALOG_FILEINFO_ERROR' : 'خطاي ديالوک انتقال فايل', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'مشکل در گرفتن اطلاعات فايل براي **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'مشکل در گرفتن اطلاعات فايل براي: {0}', + 'DIALOG_INPUT_TITLE' : 'ديالوگ ورودي', + 'DIALOG_FILEPROGRESS_TITLE' : 'پروسه عمليات فايل', + 'DIALOG_FILEPROGRESS_LOADING' : 'بارگزاري...', + 'DIALOG_UPLOAD_TITLE' : 'ديالوگ ارسال فايل', + 'DIALOG_UPLOAD_DESC' : 'ارسال فايل به **{0}**.
بيشترين اندازه: {1} بايت', + 'DIALOG_UPLOAD_MSG_FMT' : 'بارگزاري', + 'DIALOG_UPLOAD_MSG' : 'درحال ارسال فايل...', + 'DIALOG_UPLOAD_FAILED' : 'ارسال فايل با خطا مواجه شد', + 'DIALOG_UPLOAD_FAILED_MSG' : 'ارسال فايل با خطا مواجه شده است', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'دليل ناشناخته...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'انصراف به وسيله کاربر...', + 'DIALOG_UPLOAD_TOO_BIG': 'فايل بيش ازاندازه بزرگ است', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'فايل بيش از اندازه بزرک است, سقف {0}', + 'DIALOG_FONT_TITLE' : 'ديالوگ فونت', + 'DIALOG_APPCHOOSER_TITLE' : 'انتخاب برنامه', + 'DIALOG_APPCHOOSER_MSG' : 'انتخاب يک برنامه براي باز شدن', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'شما ميبايست يک برنامه انتخاب کنيد', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'استفاده به عنوان پيش فرض براي {0}', + 'GAPI_DISABLED' : ' ماژول GoogleAPI پيکربندي نشده يا غير فعال ميباشد', + 'GAPI_SIGN_OUT' : 'خارج شدن از API هاي سرويس هاي گوگل', + 'GAPI_REVOKE' : 'رد مجوز هاو خروج از برنامه', + 'GAPI_AUTH_FAILURE' : 'Google API تشخيض هويت با مشکل واجه شد و يا اتفاق نيافتاد', + 'GAPI_AUTH_FAILURE_FMT' : 'با مشکل مواجه شدن تشخيص هويت: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'مشکل با بارگزاري Google API', + 'WLAPI_DISABLED' : 'ماژول هاي Windows Live API پيکربندي نشده و يا غير فعال مي باشد', + 'WLAPI_SIGN_OUT' : 'خروج از Window Live API', + 'WLAPI_LOAD_FAILURE' : 'مشکل در بارگزاري Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'مشکل در ثبت لاگ در Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'مشکل ثبت لاگ در Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API ارجاع {0} وضعيت', + 'IDB_MISSING_DBNAME' : 'قادر به ايجاد IndexDB بدون نام پايگاه داده ها نمي باشيم', + 'IDB_NO_SUCH_ITEM' : 'آيتم اين چنين نميباد', + 'ERR_VFS_FATAL' : 'خطاي بحراني', + 'ERR_VFS_UNAVAILABLE' : 'موجود نمي باشد', + 'ERR_VFS_FILE_ARGS' : 'فايل حدااقل يک آرگامنت مي خواهد', + 'ERR_VFS_NUM_ARGS' : 'آرگامنت ها کافي نيست', + 'ERR_VFS_EXPECT_FILE' : 'انتظار يک شي فايلي', + 'ERR_VFS_EXPECT_SRC_FILE' : 'انتظار يک شي فايلي منبع', + 'ERR_VFS_EXPECT_DST_FILE' : 'انتظار شي فايلي مقصد', + 'ERR_VFS_FILE_EXISTS' : 'مقصد قبلا وجود دارد', + 'ERR_VFS_TRANSFER_FMT' : 'بروز مشکل در زمان انتقال بين ذخيره کننده ها: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'بدون اطلاعات مقصد قادر به ارسال فايل نمي باشد', + 'ERR_VFS_UPLOAD_NO_FILES' : 'بدن مشخص کردن فايل امکان پذير نمي باشد', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'ارسال فايل به مشکل برخورد کرد: {0}', + 'ERR_VFS_UPLOAD_CANCELLED': 'ارسال فايل لغو شد', + 'ERR_VFS_DOWNLOAD_NO_FILE': 'دانلود فايل بدون انتخاب فايل امکان پذير نميباشد', + 'ERR_VFS_DOWNLOAD_FAILED' : 'بروز مشکل در حين دانلود فايل : {0}', + 'ERR_VFS_REMOTEREAD_EMPTY': 'پاسخ تهي ميباشد', + 'ERR_VFSMODULE_INVALID' : 'ماژول VFS نا م عتبر ميباشد', + 'ERR_VFSMODULE_INVALID_FMT' : ' ماژول VFS نامعتبر ميباشد : {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'متد VُّّFS نامعتبر مي باشد', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'متد VُّّFS نامعتبر مي باشد: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'نوع ماژول VFS نامعتبر ميباشد', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'نوع ماژول VFS نامعتبر ميباشد: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'پيکربندي ماژول VFS نامعتبر مي باشد', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'پيکربندي ماژول VFS نامعتبر مي باشد: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'ماژول VFS قبلا الصاق شده است', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'ماژول VFS \'{0}\' قابلا الصاق شده ', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'ماژول VFS الصاق نشده', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'ماؤول VFS \'{0}\' الصاق نشده است', + 'ERR_VFSMODULE_EXCEPTION' : 'بروز خطا در ماژول VFS', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'بروز خطا در ماژول VFS : {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'در حال دانلود فايل', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR خطاي', + 'ERR_VFSMODULE_ROOT_ID' : 'پيدا کردن شناسه پوشه روت با خطا مواجه شد', + 'ERR_VFSMODULE_NOSUCH' : 'فايل موحود نيست', + 'ERR_VFSMODULE_PARENT' : 'والدين اين چنين وجود ندارد', + 'ERR_VFSMODULE_PARENT_FMT' : 'جستجوي والدين با خطا مواجه شد: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'اسکن دايرکتوري باخطا موجه شد', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'اسکن دايرکتوري باخطا موجه شد: {0}', + 'ERR_VFSMODULE_READ' : 'خواندن فايل با خطا مواجه شد', + 'ERR_VFSMODULE_READ_FMT' : 'خواندن فايل با خطا مواجه شد: {0}', + 'ERR_VFSMODULE_WRITE' : 'نوشتن فايل با خطا مواجه شد', + 'ERR_VFSMODULE_WRITE_FMT' : 'نوشتن فايل با خطا موجه شد: {0}', + 'ERR_VFSMODULE_COPY' : 'کپي با خطا مواجه شد', + 'ERR_VFSMODULE_COPY_FMT' : 'کپي با خطا مواجه شد: {0}', + 'ERR_VFSMODULE_UNLINK' : 'قطع اتصال با خطا مواجه شد', + 'ERR_VFSMODULE_UNLINK_FMT' : 'قطع ارتباط با شکست مواجه شد: {0}', + 'ERR_VFSMODULE_MOVE' : 'جابه جايي فايل با شکست مواجه شد', + 'ERR_VFSMODULE_MOVE_FMT' : 'جابه جايي فايل با شکست مواجه شد: {0}', + 'ERR_VFSMODULE_EXIST' : 'برسي موجود بودن فايل با مشکل مواجه شد', + 'ERR_VFSMODULE_EXIST_FMT' : 'برسي موجود بودن فايل با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'به دست آرودن اطلاعات فايل با مشکل مواجه شد', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'به دست آرودن اطلاعات فايل با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_MKDIR' : 'ساخت دايرکتوري با مشکل مواجه شد', + 'ERR_VFSMODULE_MKDIR_FMT' : 'به دست آرودن اطلاعات فايل با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_URL' : 'به دست آوردن URL فايل با مشکل مواجه شد', + 'ERR_VFSMODULE_URL_FMT' : 'به دست آوردن URL فايل با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_TRASH' : 'انتقال فايل به سطل زباله با مشکل مواجه شد', + 'ERR_VFSMODULE_TRASH_FMT' : 'انتقال فايل به سطل زباله با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'بازيافت فايل با مشکل مواجه شد', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'بازيافت فايل با مشکل مواجه شد: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'تخليه سطل زباله با مشکل مواجه شد', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'تخليه سطل زباله با مشکل مواجه شد: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'شما به وسيله DroBox API ثبت ورود کرده ايد', + 'DROPBOX_SIGN_OUT' : 'خروج از سرويس هاي Google API', + 'ONEDRIVE_ERR_RESOLVE' : 'آيتم پيدا نشد: حل و فصل مسير با مشکل مواجه شد', + 'ZIP_PRELOAD_FAIL' : 'بار گزاري zip.js با مشکل مواجه شد', + 'ZIP_VENDOR_FAIL' : 'کتابخانه zip.js پيدا نشد : آيا شما موارد متعلق به آن را بارگزاري کرده ايد ?', + 'ZIP_NO_RESOURCE' : 'هيچ يک از منابع zip داده نشده است', + 'ZIP_NO_PATH' : 'مسيري داده نشده است', + 'ERR_PACKAGE_EXISTS': 'ميسر نصب بسته قبلا وجود دارد. قادر به ادامه نميباشيم!', + 'ERR_FILE_APP_OPEN' : 'باز کردن فايل امکان پذير نيست', + 'ERR_FILE_APP_OPEN_FMT' : 'فايل {0} قابل باز کردن نمي باشد به دليل اينکه نوع {1} پشنيباي نميشود', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'فايل {0} را نمي توان باز کرد', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'فايل {0} قادر ذخيره کردن نمي باشد', + 'ERR_GENERIC_APP_FMT' : '{0} خطاي برنامه', + 'ERR_GENERIC_APP_ACTION_FMT': 'مشکل در اجراي فرآيند \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'خطاي ناشناخته', + 'ERR_GENERIC_APP_REQUEST' : 'درحال اجراي درخواست شما يک خطا اتفاق افتاد', + 'ERR_GENERIC_APP_FATAL_FMT' : 'خطاي مخرب: {0}', + 'MSG_GENERIC_APP_DISCARD' : 'لغو تغييرات?', + 'MSG_FILE_CHANGED' : 'فايل تغيير کرده است.آيا دوباره بازگزاري شود؟', + 'MSG_APPLICATION_WARNING' : 'هشدار برنامه', + 'MSG_MIME_OVERRIDE' : 'نوع فايل "{0}" پشتيباني نميشود, ولي از نوع "{1}" استفاده شود.', + 'LBL_UNKNOWN' : 'ناشناخته', + 'LBL_APPEARANCE' : 'ظاهر', + 'LBL_USER' : 'کاربر', + 'LBL_NAME' : 'نام', + 'LBL_APPLY' : 'اعمال', + 'LBL_FILENAME' : 'نام فايل', + 'LBL_PATH' : 'مسير', + 'LBL_SIZE' : 'حجم', + 'LBL_TYPE' : 'نوع', + 'LBL_MIME' : 'نوع', + 'LBL_LOADING' : 'درحال بارگزاري', + 'LBL_SETTINGS' : 'تنظيمات', + 'LBL_ADD_FILE' : 'اضافه کردن فايل', + 'LBL_COMMENT' : 'نظر', + 'LBL_ACCOUNT' : 'حساب', + 'LBL_CONNECT' : 'متصل', + 'LBL_ONLINE' : 'روي خط', + 'LBL_OFFLINE' : 'چراغ خاموش', + 'LBL_AWAY' : 'دور', + 'LBL_BUSY' : 'مشغول', + 'LBL_CHAT' : 'چت', + 'LBL_HELP' : 'کمک', + 'LBL_ABOUT' : 'درباره', + 'LBL_PANELS' : 'پنل ها', + 'LBL_LOCALES' : 'موقعيت ها', + 'LBL_THEME' : 'شمايل', + 'LBL_COLOR' : 'رنگ', + 'LBL_PID' : 'PID', + 'LBL_KILL' : 'کشتن', + 'LBL_ALIVE' : 'زنده', + 'LBL_INDEX' : 'ايندکس', + 'LBL_ADD' : 'اضافه', + 'LBL_FONT' : 'فونت', + 'LBL_YES' : 'بله', + 'LBL_NO' : 'نه', + 'LBL_CANCEL' : 'انصراف', + 'LBL_TOP' : 'روي', + 'LBL_LEFT' : 'چپ', + 'LBL_RIGHT' : 'راست', + 'LBL_BOTTOM' : 'پايين', + 'LBL_CENTER' : 'مرکز', + 'LBL_FILE' : 'فايل', + 'LBL_NEW' : 'جديد', + 'LBL_OPEN' : 'بازکردن', + 'LBL_SAVE' : 'ذخيره کردن', + 'LBL_SAVEAS' : 'ذخيره کردن به صورت...', + 'LBL_CLOSE' : 'بستن', + 'LBL_MKDIR' : 'ايجاد مسير', + 'LBL_UPLOAD' : 'ارسال', + 'LBL_VIEW' : 'نمايش', + 'LBL_EDIT' : 'ويرايش', + 'LBL_RENAME' : 'تغيير نام', + 'LBL_DELETE' : 'حذف', + 'LBL_OPENWITH' : 'بازکردن با ...', + 'LBL_ICONVIEW' : 'نمايش آيکون', + 'LBL_TREEVIEW' : 'نمايش درختي', + 'LBL_LISTVIEW' : 'نمايش ليست', + 'LBL_REFRESH' : 'تازه کردن', + 'LBL_VIEWTYPE' : 'نمايش نوع', + 'LBL_BOLD' : 'درشت', + 'LBL_ITALIC' : 'ايتاليک', + 'LBL_UNDERLINE' : 'زير خط', + 'LBL_REGULAR' : 'قاعده', + 'LBL_STRIKE' : 'Strike', + 'LBL_INDENT' : 'مقصود', + 'LBL_OUTDENT' : 'خارج از تاريخ', + 'LBL_UNDO' : 'برعکس ', + 'LBL_REDO' : 'دوباره کار', + 'LBL_CUT' : 'قطع کردن', + 'LBL_UNLINK' : 'برخلاف', + 'LBL_COPY' : 'کپي', + 'LBL_PASTE' : 'در اين محل', + 'LBL_INSERT' : 'درج', + 'LBL_IMAGE' : 'تصوير', + 'LBL_LINK' : 'اتصال', + 'LBL_DISCONNECT' : 'قطع ارتباط', + 'LBL_APPLICATIONS' : 'برنامه ها', + 'LBL_ADD_FOLDER' : 'اضاقه کردن پوشه', + 'LBL_INFORMATION' : 'اطلاعات', + 'LBL_TEXT_COLOR' : 'رنگ متن', + 'LBL_BACK_COLOR' : 'رنگ سياه', + 'LBL_RESET_DEFAULT' : 'برگردان به تنظيمات اوليه', + 'LBL_DOWNLOAD_COMP' : 'دانلود به کامپيوتر', + 'LBL_ORDERED_LIST' : 'ليست مرتب شده', + 'LBL_BACKGROUND_IMAGE' : 'تصوير پس زمينه', + 'LBL_BACKGROUND_COLOR' : 'رنگ پس زمينه', + 'LBL_UNORDERED_LIST' : 'ليست مرتب نشده', + 'LBL_STATUS' : 'وضعيت ها', + 'LBL_READONLY' : 'فقط خواندني', + 'LBL_CREATED' : 'ايجاد شده', + 'LBL_MODIFIED' : 'تغيير داده شده', + 'LBL_SHOW_COLUMNS' : 'نمايش ستون ها', + 'LBL_MOVE' : 'حرکت', + 'LBL_OPTIONS' : 'انتخاب', + 'LBL_OK' : 'تاييد', + 'LBL_DIRECTORY' : 'دايرکتوري', + 'LBL_CREATE' : 'ايجاد کردن', + 'LBL_BUGREPORT' : 'گزارش مشکل', + 'LBL_INSTALL' : 'نصب', + 'LBL_UPDATE' : 'به روز رساني', + 'LBL_REMOVE' : 'برداشتن', + 'LBL_SHOW_SIDEBAR' : 'نمايش نوار لغزنده', + 'LBL_SHOW_NAVIGATION' : 'نمايش ناوبري', + 'LBL_SHOW_HIDDENFILES' : 'نمايش فايل هاي مخفي', + 'LBL_SHOW_FILEEXTENSIONS' : 'نمايش پسوند فايل' + }; +})(); + +(function() { + 'use strict'; + OSjs.Locales.ar_DZ = { + 'ERR_FILE_OPEN' : 'خطأ فتح الملف', + 'ERR_WM_NOT_RUNNING' : 'مسيير النوافذ ليس قيد التشغيل', + 'ERR_FILE_OPEN_FMT' : ' الملف \'**{0}**\' غير قابل للفتح من طرف النظام', + 'ERR_APP_MIME_NOT_FOUND_FMT': 'لم يتمكن النظام من إيجاد تطبيق يدعم هذه الملفات \'{0}\' files', + 'ERR_APP_LAUNCH_FAILED' : 'خطأ في تشغيل التطبيق', + 'ERR_APP_LAUNCH_FAILED_FMT' : 'حدث خطأ أثناء محاولة التشغيل: {0}', + 'ERR_APP_CONSTRUCT_FAILED_FMT' : 'التطبيق \'{0}\' construct فشل: {1}', + 'ERR_APP_INIT_FAILED_FMT' : 'التطبيق \'{0}\' init() فشل: {1}', + 'ERR_APP_RESOURCES_MISSING_FMT' : 'موارد التطبيق ناقصة لـ \'{0}\' أو لم تتمكن من التشغيل!', + 'ERR_APP_PRELOAD_FAILED_FMT' : 'التطبيق \'{0}\' preloading failed: \n{1}', + 'ERR_APP_LAUNCH_ALREADY_RUNNING_FMT' : 'The application \'{0}\' is already launched and allows only one instance!', + 'ERR_APP_LAUNCH_MANIFEST_FAILED_FMT' : 'خطأ في تشغيل \'{0}\'. لا توجد تعاريف للتطبيق!', + 'ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT' : 'خطأ في تشغيل \'{0}\'. متصفحك غير مدعوم: {1}', + 'ERR_NO_WM_RUNNING' : 'لايوجد أي مسيير نوافذ قيد التشغيل', + 'ERR_CORE_INIT_FAILED' : 'Failed to initialize OS.js', + 'ERR_CORE_INIT_FAILED_DESC' : 'حدث خطأ أثناء بداية تشغيل OS.js', + 'ERR_CORE_INIT_NO_WM' : 'لا يمكن تشغيل OS.js: لايوجد مسيير نوافذ!', + 'ERR_CORE_INIT_WM_FAILED_FMT' : 'لايمكن تشغيل OS.js: فشل في تحميل مسير النوافذ: {0}', + 'ERR_CORE_INIT_PRELOAD_FAILED' : 'لايمكن تشغيل OS.js: فشل في تحميل الموارد...', + 'ERR_JAVASCRIPT_EXCEPTION' : 'JavaScript إشعار بخطأ', + 'ERR_JAVACSRIPT_EXCEPTION_DESC' : 'خطأ غير متوقع.', + 'ERR_APP_API_ERROR' : 'خطأ في API التطبيق ', + 'ERR_APP_API_ERROR_DESC_FMT' : 'التطبيق {0} لم يستطيع أن يقوم بالعملية \'{1}\'', + 'ERR_APP_MISSING_ARGUMENT_FMT': 'نقص في لعناصر : {0}', + 'ERR_APP_UNKNOWN_ERROR' : 'خطأ غير معروف', + 'ERR_OPERATION_TIMEOUT' : 'نهاية الوقت المسموع للعملية', + 'ERR_OPERATION_TIMEOUT_FMT' : 'نهاية الوقت المسموح للعملية ({0})', + 'ERR_ARGUMENT_FMT' : '\'{0}\' متوقع \'{1}\' أن تكون \'{2}\', \'{3}\' معطى', + 'ERR_WIN_DUPLICATE_FMT' : 'لديك نافذة مسبقا بإسم \'{0}\'', + 'WINDOW_MINIMIZE' : 'تصغير', + 'WINDOW_MAXIMIZE' : 'تكبير', + 'WINDOW_RESTORE' : 'إستعادة', + 'WINDOW_CLOSE' : 'إغلاق', + 'WINDOW_ONTOP_ON' : 'فوق الجميع (تشغيل)', + 'WINDOW_ONTOP_OFF': 'فوق الجميع (تعطيل)', + 'TITLE_SIGN_OUT' : 'تسجيل الخروج', + 'TITLE_SIGNED_IN_AS_FMT' : 'متصل بإسم: {0}', + 'ERR_LOGIN_FMT' : 'خطأ تسجيل الدخول: {0}', + 'ERR_LOGIN_INVALID' : 'تسجيل دخول غير موجود', + 'ERR_NO_SESSION': 'لا توجد أي حصة منشأة، هل تريد التجربة مرة أخرى ؟', + 'MSG_SESSION_WARNING' : 'هل تريد بالتأكيد الخروج من OS.js ؟ جميع التغيرات الغير محفوظة ستلغى !', + 'BUGREPORT_MSG' : 'الرجاء إشعارنا إذا ضننت أن هذا خطأ،\n أضف شرح قصير حول كيفية حدوث الخطأ، وإن أمكن كيفية إعادة إستحداث الخطأ مرة أخرى', + 'SERVICENOTIFICATION_TOOLTIP' : 'تسجيل دخول إلى خدمات خارجية: {0}', + 'ERR_UTILS_XHR_FATAL' : 'خطأ مميت', + 'ERR_UTILS_XHR_FMT' : 'AJAX/XHR خطأ: {0}', + 'DIALOG_LOGOUT_TITLE' : 'تسجيل الخروج (خروج)', // Actually located in session.js + 'DIALOG_LOGOUT_MSG_FMT' : 'خروج المستخدم \'{0}\'.\nهل تريد بالتأكيد إنهاء الحصة الجارية?', + 'DIALOG_CLOSE' : 'إغلاق', + 'DIALOG_CANCEL': 'إلغاء', + 'DIALOG_APPLY' : 'تطبيق', + 'DIALOG_OK' : 'موافق', + 'DIALOG_ALERT_TITLE' : 'نافذة التحذير', + 'DIALOG_COLOR_TITLE' : 'نافذة الألوان', + 'DIALOG_COLOR_R' : 'أحمر: {0}', + 'DIALOG_COLOR_G' : 'أخضر: {0}', + 'DIALOG_COLOR_B' : 'أزرق: {0}', + 'DIALOG_COLOR_A' : 'ألفا: {0}', + 'DIALOG_CONFIRM_TITLE' : 'نافذة التأكيد', + 'DIALOG_ERROR_MESSAGE' : 'رسالة', + 'DIALOG_ERROR_SUMMARY' : 'الحوصلة', + 'DIALOG_ERROR_TRACE' : 'إتباع', + 'DIALOG_ERROR_BUGREPORT' : 'إشعار بخطأ', + 'DIALOG_FILE_SAVE' : 'حفظ', + 'DIALOG_FILE_OPEN' : 'فتح', + 'DIALOG_FILE_MKDIR' : 'مجلد جديد', + 'DIALOG_FILE_MKDIR_MSG' : 'إنشاء مجلد جديد في **{0}**', + 'DIALOG_FILE_OVERWRITE' : 'هل تريد بالتأكيد تجاوز وإستبدال الملف \'{0}\'?', + 'DIALOG_FILE_MNU_VIEWTYPE' : 'نوع المظهر', + 'DIALOG_FILE_MNU_LISTVIEW' : 'مظهر القائمة', + 'DIALOG_FILE_MNU_TREEVIEW' : 'مظهر الشجرة', + 'DIALOG_FILE_MNU_ICONVIEW' : 'مظهر الأيقونات', + 'DIALOG_FILE_ERROR' : 'خطأ نافذة الملفات', + 'DIALOG_FILE_ERROR_SCANDIR': 'فشل إظهار محتوي المجلد \'{0}\' بسبب حدوث خطأ', + 'DIALOG_FILE_ERROR_FIND': 'فشل البحث في المجلد \'{0}\' بسبب حدوث خطأ', + 'DIALOG_FILE_MISSING_FILENAME' : 'يجب إختيار ملف أو إدخال ملف جديد!', + 'DIALOG_FILE_MISSING_SELECTION': 'يجب إختيار ملف!', + 'DIALOG_FILEINFO_TITLE' : 'معلومات الملف', + 'DIALOG_FILEINFO_LOADING' : 'تحميل معلومات الملف: {0}', + 'DIALOG_FILEINFO_ERROR' : 'نافذة معلومات الملف خطأ', + 'DIALOG_FILEINFO_ERROR_LOOKUP' : 'فشل في تحديد معلومات الملف for **{0}**', + 'DIALOG_FILEINFO_ERROR_LOOKUP_FMT' : 'فشل في تحديد معلومات الملف for: {0}', + 'DIALOG_INPUT_TITLE' : 'نافذة الإدخال', + 'DIALOG_FILEPROGRESS_TITLE' : 'عملية على الملفات جارية', + 'DIALOG_FILEPROGRESS_LOADING' : 'تحميل...', + 'DIALOG_UPLOAD_TITLE' : 'نافذة رفع الملفات', + 'DIALOG_UPLOAD_DESC' : 'رفم الملف إلى **{0}**.
حد الحجم: {1} bytes', + 'DIALOG_UPLOAD_MSG_FMT' : 'جاري الرفع \'{0}\' ({1} {2}) to {3}', + 'DIALOG_UPLOAD_MSG' : 'جاري رفع الملف...', + 'DIALOG_UPLOAD_FAILED' : 'رفع الملف', + 'DIALOG_UPLOAD_FAILED_MSG' : 'خطأ رفع الملف', + 'DIALOG_UPLOAD_FAILED_UNKNOWN' : 'أسباب غير معروفة...', + 'DIALOG_UPLOAD_FAILED_CANCELLED': 'إلغي من طرف المستخدم...', + 'DIALOG_UPLOAD_TOO_BIG': 'ملف كبير جدا', + 'DIALOG_UPLOAD_TOO_BIG_FMT': 'ملف كبير جدا, تخطى {0}', + 'DIALOG_FONT_TITLE' : 'نافذة الخطوط', + 'DIALOG_APPCHOOSER_TITLE' : 'إختيار التطبيق', + 'DIALOG_APPCHOOSER_MSG' : 'إختار تطبيق لفتحه', + 'DIALOG_APPCHOOSER_NO_SELECTION' : 'يجب إختيار تطبيق', + 'DIALOG_APPCHOOSER_SET_DEFAULT' : 'إستخدام كتطبيق إفتراضي دائم {0}', + 'GAPI_DISABLED' : 'GoogleAPI Module not configured or disabled', + 'GAPI_SIGN_OUT' : 'Sign out from Google API Services', + 'GAPI_REVOKE' : 'Revoke permissions and Sign Out', + 'GAPI_AUTH_FAILURE' : 'Google API Authentication failed or did not take place', + 'GAPI_AUTH_FAILURE_FMT' : 'Failed to authenticate: {0}:{1}', + 'GAPI_LOAD_FAILURE' : 'Failed to load Google API', + 'WLAPI_DISABLED' : 'Windows Live API module not configured or disabled', + 'WLAPI_SIGN_OUT' : 'Sign out from Window Live API', + 'WLAPI_LOAD_FAILURE' : 'Failed to load Windows Live API', + 'WLAPI_LOGIN_FAILED' : 'Failed to log into Windows Live API', + 'WLAPI_LOGIN_FAILED_FMT' : 'Failed to log into Windows Live API: {0}', + 'WLAPI_INIT_FAILED_FMT' : 'Windows Live API returned {0} status', + 'IDB_MISSING_DBNAME' : 'لا يمكن إنشاء IndexedDB دون إسم قاعدة معطيات', + 'IDB_NO_SUCH_ITEM' : 'عنصر غير موجود', + 'ERR_VFS_FATAL' : 'خطأ مميت', + 'ERR_VFS_UNAVAILABLE' : 'غير متوفر', + 'ERR_VFS_FILE_ARGS' : 'ملف ينتظر على الأقل عنصر', + 'ERR_VFS_NUM_ARGS' : 'عدد العناصر غير كافي', + 'ERR_VFS_EXPECT_FILE' : 'متوقع ملف', + 'ERR_VFS_EXPECT_SRC_FILE' : 'متوقع مصدر الملف', + 'ERR_VFS_EXPECT_DST_FILE' : 'متوقع وجهة الملف', + 'ERR_VFS_FILE_EXISTS' : 'وجهة موجودة مسبقا', + 'ERR_VFS_TARGET_NOT_EXISTS': 'وجهة غير موجودة', + 'ERR_VFS_TRANSFER_FMT' : 'حدث خطأ أثناء التحويل من مساحات التخزين: {0}', + 'ERR_VFS_UPLOAD_NO_DEST' : 'لا يمكن رفع ملف من دون وجهة', + 'ERR_VFS_UPLOAD_NO_FILES' : 'لا يمكن رفع الملفات من دون تعيينها', + 'ERR_VFS_UPLOAD_FAIL_FMT' : 'خطأ رفع الملف: {0}', + 'ERR_VFS_UPLOAD_CANCELLED' : 'تك إلغاء رفع الملف', + 'ERR_VFS_DOWNLOAD_NO_FILE' : 'لا يمكن رفع مسار من دون مسار', + 'ERR_VFS_DOWNLOAD_FAILED' : 'حدث خطأ أثناء تحميل: {0}', + 'ERR_VFS_REMOTEREAD_EMPTY' : 'الإجابة كانت فارغة', + 'ERR_VFSMODULE_INVALID' : 'قسم VFS غير صحيح', + 'ERR_VFSMODULE_INVALID_FMT' : 'قسم VFS غير صحيح: {0}', + 'ERR_VFSMODULE_INVALID_METHOD' : 'قسم VFS طريقة', + 'ERR_VFSMODULE_INVALID_METHOD_FMT' : 'قسم VFS طريقة: {0}', + 'ERR_VFSMODULE_INVALID_TYPE' : 'نوع القسم VFS غير صحيح', + 'ERR_VFSMODULE_INVALID_TYPE_FMT' : 'نوع القسم VFS غير صحيح: {0}', + 'ERR_VFSMODULE_INVALID_CONFIG' : 'إعدادات القسم VFS غير صحيحة', + 'ERR_VFSMODULE_INVALID_CONFIG_FMT' : 'إعدادات القسم VFS إعدادات القسم: {0}', + 'ERR_VFSMODULE_ALREADY_MOUNTED' : 'قسم VFS مركب مسبقا', + 'ERR_VFSMODULE_ALREADY_MOUNTED_FMT': 'قسم VFS \'{0}\' مركب مسبقا', + 'ERR_VFSMODULE_NOT_MOUNTED' : 'قسم VFS غير مركب', + 'ERR_VFSMODULE_NOT_MOUNTED_FMT' : 'قسم VFS \'{0}\' غير مركب', + 'ERR_VFSMODULE_EXCEPTION' : 'قسم VFS خطأ', + 'ERR_VFSMODULE_EXCEPTION_FMT' : 'قسم VFS خطأ: {0}', + 'ERR_VFSMODULE_NOT_FOUND_FMT' : 'لا يوجد VFS {0}. خطأ في شاكلة المسار ?', + 'ERR_VFSMODULE_READONLY' : 'هذا VFS للقراءة فقط', + 'ERR_VFSMODULE_READONLY_FMT' : 'هذا VFS للقراءة فقط : {0}', + 'TOOLTIP_VFS_DOWNLOAD_NOTIFICATION': 'جاري تحميل الملف', + 'ERR_VFSMODULE_XHR_ERROR' : 'XHR خطأ', + 'ERR_VFSMODULE_ROOT_ID' : 'خطأ تحديد معرف root', + 'ERR_VFSMODULE_NOSUCH' : 'ملف غير موجود', + 'ERR_VFSMODULE_PARENT' : 'لا يوجد أب', + 'ERR_VFSMODULE_PARENT_FMT' : 'فشل البحث عن أب: {0}', + 'ERR_VFSMODULE_SCANDIR' : 'فشل مسح المجلد', + 'ERR_VFSMODULE_SCANDIR_FMT' : 'فشل مسح المجلد : {0}', + 'ERR_VFSMODULE_READ' : 'فشل قراءة الملف', + 'ERR_VFSMODULE_READ_FMT' : 'فشل قراءة الملف: {0}', + 'ERR_VFSMODULE_WRITE' : 'فشل الكتابة في الملف', + 'ERR_VFSMODULE_WRITE_FMT' : 'فشل الكتابة في الملف: {0}', + 'ERR_VFSMODULE_COPY' : 'فشل في النسخ', + 'ERR_VFSMODULE_COPY_FMT' : 'فشل في النسخ: {0}', + 'ERR_VFSMODULE_UNLINK' : 'فشل في حذف رابط الملف', + 'ERR_VFSMODULE_UNLINK_FMT' : 'فشل في حذف رابط الملف: {0}', + 'ERR_VFSMODULE_MOVE' : 'فشل في تحريك الملف', + 'ERR_VFSMODULE_MOVE_FMT' : 'فشل في تحريك الملف: {0}', + 'ERR_VFSMODULE_EXIST' : 'فشل في تحديد وجود الملف', + 'ERR_VFSMODULE_EXIST_FMT' : 'فشل في تحديد وجود الملف: {0}', + 'ERR_VFSMODULE_FILEINFO' : 'فشل في تحديد معلومات الملف', + 'ERR_VFSMODULE_FILEINFO_FMT' : 'فشل في تحديد معلومات الملف: {0}', + 'ERR_VFSMODULE_MKDIR' : 'فشل في إنشاء المجلد', + 'ERR_VFSMODULE_MKDIR_FMT' : 'فشل في إنشاء المجلد: {0}', + 'ERR_VFSMODULE_URL' : 'فشل في الحصول على رابط الملف', + 'ERR_VFSMODULE_URL_FMT' : 'فشل في الحصول على رابط الملف: {0}', + 'ERR_VFSMODULE_TRASH' : 'فشل في تحريك الملف إلى سلة المحذوفات', + 'ERR_VFSMODULE_TRASH_FMT' : 'فشل في تحريك الملف إلى سلة المحذوفات: {0}', + 'ERR_VFSMODULE_UNTRASH' : 'فشل في تحريك الملف من سلة المحذوفات', + 'ERR_VFSMODULE_UNTRASH_FMT' : 'فشل في تحريك الملف من سلة المحذوفات: {0}', + 'ERR_VFSMODULE_EMPTYTRASH' : 'فشل في تفريغ سلة المحذوفات', + 'ERR_VFSMODULE_EMPTYTRASH_FMT' : 'فشل في تفريغ سلة المحذوفات: {0}', + 'ERR_VFSMODULE_FIND' : 'فشل في البحث', + 'ERR_VFSMODULE_FIND_FMT' : 'فشل في البحث: {0}', + 'ERR_VFSMODULE_FREESPACE' : 'فشل في الحصول على المساحة الفارغة', + 'ERR_VFSMODULE_FREESPACE_FMT' : 'فشل في الحصول على المساحة الفارغة: {0}', + 'ERR_VFSMODULE_EXISTS' : 'فشل في التأكيد على الوجود', + 'ERR_VFSMODULE_EXISTS_FMT' : 'فشل في التأكيد على الوجود: {0}', + 'DROPBOX_NOTIFICATION_TITLE' : 'أنت الآن مسجل في Dropbox API', + 'DROPBOX_SIGN_OUT' : 'خروج من Google API Services', + 'ONEDRIVE_ERR_RESOLVE' : 'خطأ في تحديد المسار : لا يوجد أي عنصر', + 'ZIP_PRELOAD_FAIL' : 'خطأ تحميل zip.js', + 'ZIP_VENDOR_FAIL' : 'zip.js غير موجود ?', + 'ZIP_NO_RESOURCE' : 'لا توجد أي موارد zip.', + 'ZIP_NO_PATH' : 'لم يعطى إي مسار', + 'SEARCH_LOADING': 'جاري البحث...', + 'SEARCH_NO_RESULTS': 'لا توجد أي نتيجة', + 'ERR_PACKAGE_EXISTS': 'مجلد التثبيت موجود من قبل، من المستحيل المتابعة !', + 'ERR_FILE_APP_OPEN' : 'لا يمكن فتح الملف', + 'ERR_FILE_APP_OPEN_FMT' : 'الملف {0} غير قابل للفتح لأن التعريف {1} غير مدعوم', + 'ERR_FILE_APP_OPEN_ALT_FMT' : 'الملف {0} غير ممكن فتحه', + 'ERR_FILE_APP_SAVE_ALT_FMT' : 'الملف {0} غير ممكن حفظه', + 'ERR_GENERIC_APP_FMT' : '{0} خطأ في التطبيق', + 'ERR_GENERIC_APP_ACTION_FMT': 'عدم التمكن من إنجاز العملية \'{0}\'', + 'ERR_GENERIC_APP_UNKNOWN' : 'خطأ غير معروف', + 'ERR_GENERIC_APP_REQUEST' : 'حدث خطأ أثناء إجراء العملية المطلوبة', + 'ERR_GENERIC_APP_FATAL_FMT' : 'خطأ مميت {0}', + 'MSG_GENERIC_APP_DISCARD' : 'إلغاء التغيرات ?', + 'MSG_FILE_CHANGED' : 'تم تغيير الملف، هل تريد التحديث', + 'MSG_APPLICATION_WARNING' : 'تحذير النطبيق', + 'MSG_MIME_OVERRIDE' : 'نوع الملف "{0}" غير مدعوم, إستخدم "{1}" في مكانه.', + 'LBL_UNKNOWN' : 'غير معروف', + 'LBL_APPEARANCE' : 'مظهر', + 'LBL_USER' : 'مستخدم', + 'LBL_NAME' : 'إسم', + 'LBL_APPLY' : 'تطبيق', + 'LBL_FILENAME' : 'إسم الملف', + 'LBL_PATH' : 'مسار', + 'LBL_SIZE' : 'حجم', + 'LBL_TYPE' : 'نوع', + 'LBL_MIME' : 'التعريف', + 'LBL_LOADING' : 'جاري التحميل', + 'LBL_SETTINGS' : 'إعدادات', + 'LBL_ADD_FILE' : 'إضافة ملفات', + 'LBL_COMMENT' : 'تعليق', + 'LBL_ACCOUNT' : 'حساب', + 'LBL_CONNECT' : 'إتصال', + 'LBL_ONLINE' : 'متصل', + 'LBL_OFFLINE' : 'غير متصل', + 'LBL_AWAY' : 'بعيد', + 'LBL_BUSY' : 'مشغول', + 'LBL_CHAT' : 'دردشة', + 'LBL_HELP' : 'مساعدة', + 'LBL_ABOUT' : 'عن', + 'LBL_PANELS' : 'اللوحات', + 'LBL_LOCALES' : 'اللغة/المنطقة', + 'LBL_THEME' : 'القالب', + 'LBL_COLOR' : 'اللون', + 'LBL_PID' : 'رقم العملية', + 'LBL_KILL' : 'إنهاء', + 'LBL_ALIVE' : 'في الخدمة', + 'LBL_INDEX' : 'الرقم', + 'LBL_ADD' : 'إضافة', + 'LBL_FONT' : 'الخط', + 'LBL_YES' : 'نعم', + 'LBL_NO' : 'لا', + 'LBL_CANCEL' : 'إلغاء', + 'LBL_TOP' : 'أعلى', + 'LBL_LEFT' : 'اليسار', + 'LBL_RIGHT' : 'اليمين', + 'LBL_BOTTOM' : 'أسفل', + 'LBL_CENTER' : 'وسط', + 'LBL_FILE' : 'ملف', + 'LBL_NEW' : 'جديد', + 'LBL_OPEN' : 'فتح', + 'LBL_SAVE' : 'حفظ', + 'LBL_SAVEAS' : 'حفظ بإسم...', + 'LBL_CLOSE' : 'إغلاق', + 'LBL_MKDIR' : 'مجلد جديد', + 'LBL_UPLOAD' : 'رفع ملف', + 'LBL_VIEW' : 'إظهار', + 'LBL_EDIT' : 'تغيير', + 'LBL_RENAME' : 'إعادة تسمية', + 'LBL_DELETE' : 'حذف', + 'LBL_OPENWITH' : 'فتح بواسطة ...', + 'LBL_ICONVIEW' : 'إظهار كأيقونات', + 'LBL_TREEVIEW' : 'إظهار كشجرة', + 'LBL_LISTVIEW' : 'إظهار كقائمة', + 'LBL_REFRESH' : 'تحديث', + 'LBL_VIEWTYPE' : 'نوع المظهر', + 'LBL_BOLD' : 'غليظ', + 'LBL_ITALIC' : 'مائل', + 'LBL_UNDERLINE' : 'مسطر', + 'LBL_REGULAR' : 'عادي', + 'LBL_STRIKE' : 'مشطوب', + 'LBL_INDENT' : 'مساحة لأمام', + 'LBL_OUTDENT' : 'مساحة للخلف', + 'LBL_UNDO' : 'تراجع', + 'LBL_REDO' : 'إلى الأمام', + 'LBL_CUT' : 'قص', + 'LBL_UNLINK' : 'حذف الرابط', + 'LBL_COPY' : 'نسخ', + 'LBL_PASTE' : 'لصق', + 'LBL_INSERT' : 'إدراج', + 'LBL_IMAGE' : 'صورة', + 'LBL_LINK' : 'رابط', + 'LBL_DISCONNECT' : 'قطع الإتصال', + 'LBL_APPLICATIONS' : 'التطبيقات', + 'LBL_ADD_FOLDER' : 'إضافة مجلد', + 'LBL_INFORMATION' : 'معلومات', + 'LBL_TEXT_COLOR' : 'لون النص', + 'LBL_BACK_COLOR' : 'خلفية النص', + 'LBL_RESET_DEFAULT' : 'لإستعادة لإفتراضي', + 'LBL_DOWNLOAD_COMP' : 'تحميل إلى الكمبيوتر', + 'LBL_ORDERED_LIST' : 'ترتيب القائمة', + 'LBL_BACKGROUND_IMAGE' : 'صورة الخلفية', + 'LBL_BACKGROUND_COLOR' : 'لون الخلفية', + 'LBL_UNORDERED_LIST' : 'قائمة غير مرتبة', + 'LBL_STATUS' : 'الحالة', + 'LBL_READONLY' : 'قراءة-فقط', + 'LBL_CREATED' : 'تاريخ الإنشاء', + 'LBL_MODIFIED' : 'تاريخ التغيير', + 'LBL_SHOW_COLUMNS' : 'إظهار الأعمدة', + 'LBL_MOVE' : 'تحريك', + 'LBL_OPTIONS' : 'خيارات', + 'LBL_OK' : 'موافق', + 'LBL_DIRECTORY' : 'مجلد', + 'LBL_CREATE' : 'إنشاء', + 'LBL_BUGREPORT' : 'إشعار بخطأ', + 'LBL_INSTALL' : 'تثبيت', + 'LBL_UPDATE' : 'تحديث', + 'LBL_REMOVE' : 'إزالة', + 'LBL_SHOW_SIDEBAR' : 'إظهار الشريط الجانبي', + 'LBL_SHOW_NAVIGATION' : 'إظهار شريط الإنتقال', + 'LBL_SHOW_HIDDENFILES' : 'إظهار الملفات المخفية', + 'LBL_SHOW_FILEEXTENSIONS' : 'إظهار لواحق الملفات', + 'LBL_MOUNT': 'تركيب', + 'LBL_DESCRIPTION': 'الوصف', + 'LBL_USERNAME': 'المستخدم', + 'LBL_PASSWORD': 'كلمة المرور', + 'LBL_HOST': 'المستضيف', + 'LBL_NAMESPACE': 'إسم الساحة', + 'LBL_SEARCH': 'بحث', + 'LBL_Theme' : 'القالب', + 'LBL_SOUNDS' : 'أصوات', + 'LBL_ICONS' : 'أيقونات', + 'LBL_BACKGROUND' : 'خلفيات', + 'LBL_DESKTOP' : 'المكتب', + 'LBL_PANEL' : 'اللوحة', + 'LBL_POSITION' : 'الوصعية', + 'LBL_ONTOP' : 'في المقدمة', + 'LBL_ITEMS' : 'العناصر', + 'LBL_GENERAL' : 'عام', + 'LBL_DEBUG' : 'تصحيح', + 'LBL_AUTOHIDE' : 'إخفاء تلقائي', + 'LBL_OPACITY' : 'الشفافية', + 'LBL_PACKAGES' : 'الحزم', + 'LBL_GROUPS' : 'المجموعات', + 'LBL_VERSION' : 'الطبعة', + 'LBL_AUTHOR' : 'الكاتب', + 'LBL_HIDE' : 'إخفاء', + 'LBL_APPLICATION' : 'تطبيق', + 'LBL_SCOPE' : 'الزمرة' + }; +})(); diff --git a/build/htdocs/dist/osjs.css b/build/htdocs/dist/osjs.css new file mode 100644 index 0000000..a359d7c --- /dev/null +++ b/build/htdocs/dist/osjs.css @@ -0,0 +1,1702 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +html, body { + height : 100%; + overflow : hidden; +} +body { + margin : 0; + padding : 0; + background-color : #572a79; +} +body, input, button, textarea, label, select { + font-size : 12px; + font-family : Sans-serif, Arial; +} +#Login { + background : #fff; + width : 400px; + height : 230px; + padding : 20px; + position : absolute; + left : 50%; + top : 50%; + z-index : 9999; + margin-left : -200px; + margin-top : -155px; + border : 4px solid rgba(0, 0, 0, .1); + -webkit-box-shadow: 0 0 5px 4px rgba(0,0,0,0.15); + -moz-box-shadow: 0 0 5px 4px rgba(0,0,0,0.15); + box-shadow: 0 0 5px 4px rgba(0,0,0,0.15); + box-sizing : border-box; + display : none; +} + #LoginForm > div { + margin-bottom : 20px; + } + #Login label { + display : block; + font-weight : bold; + height : 30px; + line-height : 30px; + } + #Login input[type=text], + #Login input[type=password] { + display : block; + width : 100%; + height : 24px; + padding : 4px; + line-height : 12px; + box-sizing : border-box; + } + #Login input[type=submit] { + height : 40px; + padding : 10px; + padding-left : 20px; + padding-right : 20px; + box-sizing : border-box; + background : rgba(0, 0, 0, .1); + border : 0 none; + cursor : pointer; + } + #Login .Submit { + text-align : right; + } +#LoadingScreen { + position : absolute; + width : 320px; + height : 182px; + top : 50%; + left : 50%; + margin-top : -91px; + margin-left : -160px; + z-index : 999; +} + #LoadingScreen span { + color : #fff; + font-family : sans-serif, Arial; + font-size : 30px; + display : block; + } +application-splash { + display : block; + position : absolute; + top : 50%; + left : 50%; + width : 300px; + height : 55px; + margin-left : -150px; + margin-top : -28px; + z-index : 99999998; +} + application-splash > img { + display : block; + position : absolute; + top : 5px; + left : 5px; + width : 16px; + height : 16px; + } + application-splash > span { + display : block; + position : absolute; + top : 5px; + left : 26px; + height : 16px; + line-height : 16px; + } + application-splash > gui-progress-bar { + position : absolute; + bottom : 5px; + left : 5px; + right : 5px; + } +#LoadingScreen application-splash { + position : absolute; + height : 30px; + width : auto; + top : auto; + left : 0; + right : 0; + bottom : -40px; + margin : 0; + background : #fff; + z-index : 99999999; +} + #LoadingScreen application-splash > span { + display : none; + } + #LoadingScreen application-splash > gui-progress-bar { + top : 5px; + left : 5px; + right : 5px; + bottom : 5px; + height : auto; + } + #LoadingScreen application-splash > gui-progress-bar:before { + border : 1px solid #ccc; + background : #ddd; + } + #LoadingScreen application-splash > gui-progress-bar > span { + display : none; + } + #LoadingScreen application-splash > gui-progress-bar > div { + background : rgb(87, 42, 121); + } +body[data-attention="true"]:after { + content : ''; + display : block; + position : fixed; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 1; +} +#DebugNotice { + position : absolute; + bottom : 5px; + right : 5px; + font-size : 12px; + color : #fff; + text-shadow: 0 0 2px rgba(34, 34, 34, .5); + text-align : right; + line-height : 20px; + z-index : 2; + opacity : .7; + cursor : default; +} + #DebugNotice a { + color : #fff; + text-decoration : underline; + font-weight : normal; + cursor : pointer; + } +.application-window-button-entry, +application-window, +application-window-top, +application-window-content, +application-window-icon, +application-window-title, +application-window-loading, +application-window-disabled, +application-window-loading-indicator { + display : block; +} +application-window { + position : absolute; + top : 0; + left : 0; + overflow : visible; +} +application-window:before { + content : ''; + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; +} +application-window-top { + position : absolute; + top : 0; + left : 0; + right : 0; + height : 20px; + z-index : 5; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; +} + application-window-top > * { + min-width : 16px; + min-height : 16px; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-flex: 0 0 auto; + -moz-flex: 0 0 auto; + -ms-flex: 0 0 auto; + -o-flex: 0 0 auto; + flex: 0 0 auto; + } +application-window-icon { + text-align : center; + position : relative; + background-position : center center; + background-repeat : no-repeat; + background-size : 16px; +} +application-window-title { + height : 100%; + z-index : 1; + overflow : hidden; + white-space : nowrap; + line-height : 20px; + display : block; + -webkit-text-overflow: ellipsis; + -moz-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + -webkit-flex: 1 1 auto; + -moz-flex: 1 1 auto; + -ms-flex: 1 1 auto; + -o-flex: 1 1 auto; + flex: 1 1 auto; +} +.application-window-button-entry { + padding : 0; + margin : 0; + height : 100%; + text-align : center; + display : inline-block; + position : relative; + display : none; +} + application-window[data-allow-maximize="true"] application-window-button-maximize { + display : block; + } + application-window[data-allow-minimize="true"] application-window-button-minimize { + display : block; + } + application-window[data-allow-close="true"] application-window-button-close { + display : block; + } +application-window-content { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 1; +} +application-window-resize { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : -1; +} +application-window[data-allow-resize="false"] > application-window-resize { + display : none; + cursor : default !important; +} + application-window-resize-handle { + position : absolute; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + application-window-resize-handle[data-direction="n"] { + cursor : n-resize; + top : 0; + height : 30px; + left : 20px; + right : 20px; + } + application-window-resize-handle[data-direction="s"] { + cursor : s-resize; + bottom : 0; + height : 30px; + left : 20px; + right : 20px; + } + application-window-resize-handle[data-direction="w"] { + cursor : w-resize; + left : 0; + width : 30px; + top : 20px; + bottom : 20px; + } + application-window-resize-handle[data-direction="e"] { + cursor : e-resize; + right : 0; + width : 30px; + top : 20px; + bottom : 20px; + } + application-window-resize-handle[data-direction="sw"] { + cursor : sw-resize; + bottom : 0; + left : 0; + height : 30px; + width : 30px; + } + application-window-resize-handle[data-direction="se"] { + cursor : se-resize; + bottom : 0; + right : 0; + height : 30px; + width : 30px; + } + application-window-resize-handle[data-direction="nw"] { + cursor : nw-resize; + top : 0; + left : 0; + height : 30px; + width : 30px; + } + application-window-resize-handle[data-direction="ne"] { + cursor : ne-resize; + top : 0; + right : 0; + height : 30px; + width : 30px; + } +application-window-loading { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 999999; +} + application-window-loading-indicator { + position : absolute; + left : 50%; + top : 50%; + } +application-window-disabled { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 999998; +} +application-window[data-dnd-state="true"]:after { + content : ''; + position : absolute; + top : 0; + left : 0; + bottom : 0; + right : 0; +} +application-window[data-hint="resizing"] iframe, +application-window[data-hint="moving"] iframe { + pointer-events: none; +} +application-window-warning { + position : absolute; + top : 0; + left : 0; + right : 0; + height : 30px; + line-height : 20px; + margin : 4px; + border : 1px solid transparent; + z-index : 99999; + box-sizing : border-box; +} + application-window-warning > div:nth-child(1) { + position : absolute; + top : 0; + right : 0; + bottom : 0; + padding : 4px; + box-sizing : border-box; + } + application-window-warning > div:nth-child(2) { + position : absolute; + top : 0; + left : 0; + right : 20px; + bottom : 0; + padding : 4px; + overflow : hidden; + box-sizing : border-box; + } +application-window.DialogWindow gui-label label { + white-space : inherit; +} +application-window.DialogWindow gui-button-bar gui-button { + min-width : 80px; +} +application-window.DialogWindow gui-label[data-id="Message"] span { + font-weight : bold; +} +.IFrameApplicationWindow application-window-content { + background : #000; +} +.IframeApplicationFrame { + box-sizing : border-box; + margin : 0; + padding : 0; + width : 100%; + height : 100%; + border : 0 none; + outline : 0 none; + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; +} +application-window[data-focused="false"] iframe { + pointer-events : none; +} +@media all and (max-width: 800px) { + body { + overflow : hidden; + } + application-window { + width : auto !important; + height : auto !important; + left : 0 !important; + right : 0 !important; + bottom : 0 !important; + top : 0 !important; + } + application-window-button-maximize, + application-window-button-minimize { + display : none !important; + } + application-window-content { + overflow : auto !important; + } +} + +button, div, span, p, a, img, label, .gui-element, application-window { + cursor : default; + -webkit-touch-callout: none; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} +.gui-bold > label, +.gui-bold { + font-weight : bold; +} +.gui-italic > label, +.gui-italic { + font-style : italic; +} +.gui-underline > label, +.gui-underline { + text-decoration : underline; +} +.gui-align-left { + text-align : left; +} +.gui-align-center { + text-align : center; +} +.gui-align-right { + text-align : right; +} +.gui-disable-events { + pointer-events : none; +} +.gui-no-overflow { + overflow : hidden; +} +.gui-has-emblem { + background-repeat : no-repeat; + background-position : right center; +} +.gui-focus-element { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + display : block; + outline : 0 none; + resize : none; + border : 0 none; + background : transparent; + color : transparent; + position : absolute; + margin : 0; + padding : 0; + left : 0; + bottom : 0; + top : 0; + right : 0; + width : 100%; + height : 100%; + z-index : 1; + overflow : hidden; + box-sizing : border-box; +} +.gui-flex-align-start { + -webkit-box-align: start; + -moz-box-align: start; + -ms-box-align: start; + -o-box-align: start; + box-align: start; + -webkit-align-self: flex-start; + -moz-align-self: flex-start; + -ms-align-self: flex-start; + -o-align-self: flex-start; + align-self: flex-start; +} +.gui-flex-align-end { + -webkit-box-align: end; + -moz-box-align: end; + -ms-box-align: end; + -o-box-align: end; + box-align: end; + -webkit-align-self: flex-end; + -moz-align-self: flex-end; + -ms-align-self: flex-end; + -o-align-self: flex-end; + align-self: flex-end; +} +.gui-flex-align-center { + -webkit-box-align: center; + -moz-box-align: center; + -ms-box-align: center; + -o-box-align: center; + box-align: center; + -webkit-align-self: center; + -moz-align-self: center; + -ms-align-self: center; + -o-align-self: center; + align-self: center; +} +.gui-flex { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -ms-box-orient: horizontal; + -o-box-orient: horizontal; + box-orient: horizontal; + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; +} + .gui-flex > * { + display : block; + } +.gui-flex-normal { + -webkit-box-flex: 0 0 auto; + -moz-box-flex: 0 0 auto; + -ms-box-flex: 0 0 auto; + -o-box-flex: 0 0 auto; + -webkit-flex: 0 0 auto; + -moz-flex: 0 0 auto; + -ms-flex: 0 0 auto; + -o-flex: 0 0 auto; + flex: 0 0 auto; +} +.gui-flex-grow-shrink { + -webkit-box-flex: 1 1 auto; + -moz-box-flex: 1 1 auto; + -ms-box-flex: 1 1 auto; + -o-box-flex: 1 1 auto; + -webkit-flex: 1 1 auto; + -moz-flex: 1 1 auto; + -ms-flex: 1 1 auto; + -o-flex: 1 1 auto; + flex: 1 1 auto; +} +.gui-flex-grow { + -webkit-box-flex: 1 0 auto; + -moz-box-flex: 1 0 auto; + -ms-box-flex: 1 0 auto; + -o-box-flex: 1 0 auto; + -webkit-flex: 1 0 auto; + -moz-flex: 1 0 auto; + -ms-flex: 1 0 auto; + -o-flex: 1 0 auto; + flex: 1 0 auto; +} +.gui-flex-shrink { + -webkit-box-flex: 0 1 auto; + -moz-box-flex: 0 1 auto; + -ms-box-flex: 0 1 auto; + -o-box-flex: 0 1 auto; + -webkit-flex: 0 1 auto; + -moz-flex: 0 1 auto; + -ms-flex: 0 1 auto; + -o-flex: 0 1 auto; + flex: 0 1 auto; +} +gui-container { + display : block; + position : relative; + overflow : auto; +} +gui-hbox, +gui-vbox { + width : 100%; + height : 100%; + position : relative; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; +} +gui-hbox { + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -ms-box-orient: horizontal; + -o-box-orient: horizontal; + box-orient: horizontal; + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; +} +gui-vbox { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + -o-box-orient: vertical; + box-orient: vertical; + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; +} + gui-hbox-container { + height : 100%; + } + gui-hbox-container, + gui-vbox-container { + display : block; + position : relative; + -webkit-box-flex: 0 0 auto; + -moz-box-flex: 0 0 auto; + -ms-box-flex: 0 0 auto; + -o-box-flex: 0 0 auto; + -webkit-flex: 0 0 auto; + -moz-flex: 0 0 auto; + -ms-flex: 0 0 auto; + -o-flex: 0 0 auto; + flex: 0 0 auto; + } + gui-hbox-container[data-fill='true'], + gui-vbox-container[data-fill='true'] { + -webkit-align-items: stretch; + -moz-align-items: stretch; + -ms-align-items: stretch; + -o-align-items: stretch; + align-items: stretch; + -webkit-align-content: stretch; + -moz-align-content: stretch; + -ms-align-content: stretch; + -o-align-content: stretch; + align-content: stretch; + } + gui-hbox-container[data-expand='true'] > *, + gui-vbox-container[data-expand='true'] > * { + display : block; + } + gui-hbox-container[data-fill='true'] > *, + gui-vbox-container[data-fill='true'] > * { + position : absolute; + top : 0; + left : 0; + bottom : 0; + right : 0; + } + gui-hbox-container[data-fill='true'] > gui-hbox, + gui-hbox-container[data-fill='true'] > gui-vbox, + gui-vbox-container[data-fill='true'] > gui-hbox, + gui-vbox-container[data-fill='true'] > gui-vbox { + width : 100%; + height : 100%; + } + gui-hbox-container[data-fill='true'] > gui-vbox, + gui-hbox-container[data-fill='true'] > gui-hbox, + gui-vbox-container[data-fill='true'] > gui-vbox, + gui-vbox-container[data-fill='true'] > gui-hbox { + top : 0; + left : 0; + right : 0; + bottom : 0; + } +gui-scroll-view { + display : block; + position : relative; + overflow : auto; + width : 100%; + height : 100%; +} +gui-paned-view { + position : relative; + overflow : hidden; + width : 100%; + height : 100%; + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -ms-box-orient: horizontal; + -o-box-orient: horizontal; + box-orient: horizontal; + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; +} +gui-paned-view[data-orientation='vertical'] { + -webkit-box-orient: vertical; + -moz-box-orient: vertical; + -ms-box-orient: vertical; + -o-box-orient: vertical; + box-orient: vertical; + -webkit-flex-direction: column; + -moz-flex-direction: column; + -ms-flex-direction: column; + -o-flex-direction: column; + flex-direction: column; +} + gui-paned-view > * { + display : block; + position : relative; + -webkit-box-flex: 1 1 auto; + -moz-box-flex: 1 1 auto; + -ms-box-flex: 1 1 auto; + -o-box-flex: 1 1 auto; + -webkit-flex: 1 1 auto; + -moz-flex: 1 1 auto; + -ms-flex: 1 1 auto; + -o-flex: 1 1 auto; + flex: 1 1 auto; + } + gui-paned-view > gui-paned-view-container { + height : 100%; + overflow : hidden; + } + gui-paned-view > gui-paned-view-container > * { + height : 100%; + display : block; + } + gui-paned-view > gui-paned-view-container[data-fill='true'] > * { + position : absolute; + top : 0; + left : 0; + bottom : 0; + right : 0; + } + gui-paned-view > gui-paned-view-handle { + height : 100%; + -webkit-box-flex: 0 1 auto; + -moz-box-flex: 0 1 auto; + -ms-box-flex: 0 1 auto; + -o-box-flex: 0 1 auto; + -webkit-flex: 0 1 auto; + -moz-flex: 0 1 auto; + -ms-flex: 0 1 auto; + -o-flex: 0 1 auto; + flex: 0 1 auto; + } + gui-paned-view > gui-paned-view-container { + min-width : 16px; + min-height : auto; + } + gui-paned-view[data-orientation='vertical'] > gui-paned-view-container { + min-width : auto; + min-height : 16px; + } +gui-iframe { + display : inline-block; + position : relative; + min-width : 16px; + min-height : 16px; +} + gui-iframe > iframe { + display : block; + width : 100%; + height : 100%; + margin : 0; + padding : 0; + border : 0 none; + box-sizing : border-box; + } +gui-toolbar, +gui-button-bar { + display : block; + position : relative; + overflow : hidden; + font-size : 0; + min-width : 16px; + min-height : 16px; +} +gui-button-bar { + white-space: nowrap; +} +gui-toolbar[data-orientation="vertical"], +gui-button-bar[data-orientation="vertical"] { + width : 100%; + height : 100%; +} +gui-toolbar-separator { + display : inline-block; +} +gui-expander { + display : block; + position : relative; +} + gui-expander-label { + display : block !important; + position : relative; + } + gui-expander[data-expanded="false"] > * { + display : none; + } +gui-tabs { + display : block; + position : relative; +} + gui-tabs > ul { + display : block; + list-style-type : none; + margin : 0; + padding : 0; + white-space: nowrap; + } + gui-tabs > ul > li { + position : relative; + display : inline-block; + margin : 0; + padding : 0; + height : 100%; + } + gui-tabs > ul > li.gui-active:after { + content : ''; + position : absolute; + left : 0; + right : 0; + bottom : 0; + z-index : 999999999; + } + gui-tabs > gui-tab-container { + overflow : hidden; + display : none; + position : relative; + } + gui-tab-container.gui-active { + display : block; + } +application-window-content > gui-tabs { + width : 100%; + height : 100%; +} +gui-grid { + position : relative; + display : block; +} + gui-grid > gui-grid-row { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + -webkit-box-orient: horizontal; + -moz-box-orient: horizontal; + -ms-box-orient: horizontal; + -o-box-orient: horizontal; + box-orient: horizontal; + -webkit-flex-direction: row; + -moz-flex-direction: row; + -ms-flex-direction: row; + -o-flex-direction: row; + flex-direction: row; + justify-content: space-around; + } + gui-grid > gui-grid-row > gui-grid-entry { + margin: 5px; + -webkit-box-flex: 1 0 auto; + -moz-box-flex: 1 0 auto; + -ms-box-flex: 1 0 auto; + -o-box-flex: 1 0 auto; + -webkit-flex: 1 0 auto; + -moz-flex: 1 0 auto; + -ms-flex: 1 0 auto; + -o-flex: 1 0 auto; + flex: 1 0 auto; + height: auto; + position: relative; + } + gui-grid > gui-grid-row > gui-grid-entry > * { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + width : 100%; + height : 100%; + margin : 0; + box-sizing : border-box; + overflow : hidden; + } + gui-grid > gui-grid-row > gui-grid-entry > * > * { + height : 100%; + } + gui-grid > gui-grid-row > gui-grid-entry:before { + content:''; + float:left; + padding-top:100%; + } +gui-label { + display : inline-block; + position : relative; +} + gui-label > label { + display : inline; + white-space: nowrap; + } +gui-button { + position : relative; + display : inline-block; + box-sizing : content-box; +} + gui-button button { + display : block; + margin : 0; + padding : 0; + outline : 0 none; + white-space: nowrap; + min-width : 16px; + min-height : 16px; + width : 100%; + height : 100%; + } + gui-button button::-moz-focus-inner { + border : 0; + padding : 0; + } + gui-button[data-icon-size="32"] { + min-width : 32px; + min-height : 32px; + } + gui-button.gui-has-image img { + vertical-align : middle; + } + gui-button.gui-has-image.gui-has-label img { + position : absolute; + top : 50%; + margin-top : -8px; + left : 8px; + } + gui-button[data-icon-size="32"].gui-has-image.gui-has-label img { + margin-top : -16px; + } +gui-radio, +gui-checkbox { + display : inline-block; + position : relative; +} + gui-radio input, + gui-checkbox input { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + display: inline-block; + vertical-align : middle; + position: relative; + background: transparent; + border: 0 none; + margin : 0; + padding : 0; + overflow : hidden; + outline : none; + } + gui-radio input:checked:after { + display : inline; + vertical-align: middle; + } + gui-checkbox input:checked:after { + display : inline; + vertical-align: middle; + } + gui-radio > label > span, + gui-checkbox > label > span { + vertical-align : middle; + } +gui-radio { + display : inline-block; + position : relative; +} +gui-select { + display : inline-block; + position : relative; +} + gui-select select { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + display : block; + padding : 0; + margin : 0; + width : 100%; + height : 100%; + outline : none; + box-sizing : border-box; + } + gui-select:before { + content: ''; + position: absolute; + z-index: 99; + pointer-events: none; + display: block; + } + gui-select:after { + position: absolute; + z-index: 100; + pointer-events: none; + } +gui-select-list { + display : inline-block; + position : relative; + min-height : 32px; +} + gui-select-list select { + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + -webkit-border-radius: 0; + -moz-border-radius: 0; + -ms-border-radius: 0; + -o-border-radius: 0; + border-radius: 0; + display : block; + padding : 0; + margin : 0; + width : 100%; + height : 100%; + outline : none; + box-sizing : border-box; + } +gui-slider { + display : inline-block; + position : relative; +} + gui-slider input { + display : inline-block; + position : relative; + width : 100%; + padding : 0; + margin : 0; + vertical-align : middle; + outline : 0 none; + box-sizing : border-box; + -webkit-appearance: none; + -moz-appearance: none; + -ms-appearance: none; + -o-appearance: none; + appearance: none; + } + gui-slider input::-moz-range-track { + -moz-appearance: none; + appearance: none; + background : transparent; + border : 0 none; + width : 100%; + box-sizing : border-box; + } + gui-slider input::-webkit-slider-runnable-track { + width : 100%; + border : 0 none; + box-sizing : border-box; + } + gui-slider input::-ms-track { + width: 100%; + border : 0 none; + cursor: pointer; + background: transparent; + border-color: transparent; + color: transparent; + box-sizing : border-box; + } + gui-slider input::-moz-range-thumb { + -moz-appearance: none; + -moz-border-radius : 0; + border-radius : 0; + } + gui-slider input::-webkit-slider-thumb { + -webkit-appearance: none !important; + -webkit-border-radius : 0; + border-radius : 0; + } + gui-slider input::-ms-thumb { + -ms-appearance : none !important; + -ms-border-radius : 0; + border-radius : 0; + } + gui-slider input[type=range]::-ms-fill-lower { + border : 0 none; + background-color : #d9d9d9; + } + gui-slider input[type=range]::-ms-fill-upper { + border : 0 none; + background-color : #d9d9d9; + } + gui-slider input[type=range]:focus::-ms-fill-lower { + background-color : #d9d9d9; + } + gui-slider input[type=range]:focus::-ms-fill-upper { + background-color : #d9d9d9; + } +gui-switch { + display : inline-block; + position : relative; +} + gui-switch div { + display : inline-block; + position : relative; + } + gui-switch button { + display : inline-block; + outline : 0 none; + margin : 0; + width : 50%; + box-sizing : border-box; + } + gui-switch button.gui-active { + margin-left : 50%; + } + gui-switch input { + display : none; + pointer-events : none; + } +gui-password, +gui-text { + display : inline-block; + position : relative; +} + gui-password input, + gui-text input { + display : block; + padding : 0; + margin : 0; + width : 100%; + height : 100%; + background : transparent; + border : 0 none; + outline : none; + box-sizing : border-box; + } + gui-password > label > input, + gui-text > label > input { + display : inline-block; + width : auto; + } +gui-textarea { + display : inline-block; + position : relative; +} + gui-textarea textarea { + display : block; + padding : 0; + margin : 0; + width : 100%; + height : 100%; + border : 0 none; + resize : none; + outline : none; + box-sizing : border-box; + } +gui-richtext { + display : inline-block; + position : relative; + min-height : 100px !important; +} + gui-richtext > iframe { + display : block; + width : 100%; + height : 100%; + margin : 0; + padding : 0; + border : 0 none; + box-sizing : border-box; + } +gui-file-upload { + display : inline-block; + position : relative; +} +gui-input-modal { + position : relative; + display : inline-block; +} + gui-input-modal > div { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + } + gui-input-modal input { + display : inline-block; + padding : 0; + margin : 0; + border : 0 none; + outline : none; + -webkit-box-flex: 1 0 auto; + -moz-box-flex: 1 0 auto; + -ms-box-flex: 1 0 auto; + -o-box-flex: 1 0 auto; + -webkit-flex: 1 0 auto; + -moz-flex: 1 0 auto; + -ms-flex: 1 0 auto; + -o-flex: 1 0 auto; + flex: 1 0 auto; + } + gui-input-modal button { + display : inline-block; + -webkit-box-flex: 0 1 auto; + -moz-box-flex: 0 1 auto; + -ms-box-flex: 0 1 auto; + -o-box-flex: 0 1 auto; + -webkit-flex: 0 1 auto; + -moz-flex: 0 1 auto; + -ms-flex: 0 1 auto; + -o-flex: 0 1 auto; + flex: 0 1 auto; + } +gui-audio { + display : inline-block; + position : relative; +} +gui-video { + display : inline-block; + position : relative; + min-width : 16px; + min-height : 16px; +} +gui-image { + display : inline-block; + position : relative; +} + gui-image > img { + border : 0 none; + outline : 0 none; + vertical-align : middle; + } +gui-canvas { + display : inline-block; + position : relative; + min-width : 16px; + min-height : 16px; +} +gui-color-swatch { + display : inline-block; + position : relative; + min-width : 100px !important; + min-height : 100px !important; +} + gui-color-swatch canvas { + width : 100%; + height : 100%; + display : block; + } +gui-color-box { + display : inline-block; + position : relative; + background-color : #fff; +} +gui-color-box[data-disabled="true"] { + cursor : default !important; +} + gui-color-box > div { + min-width : 16px; + min-height : 16px; + } +gui-menu { + display : inline-block; + position : relative; +} +gui-menu.gui-root-menu { + display : block; + position : absolute; + z-index : 99999999; +} + gui-menu > gui-menu-entry { + display : block; + position : relative; + white-space : nowrap; + } + gui-menu > gui-menu-entry[data-disabled="true"] { + pointer-events: none; + } + gui-menu > .gui-menu-expand:after { + position : absolute; + right : 0; + top : 0; + bottom : 0; + } + html[dir="rtl"] gui-menu > .gui-menu-expand:after { + right : auto; + left : 0; + -webkit-transform: rotate(180deg); + -moz-transform: rotate(180deg); + -ms-transform: rotate(180deg); + transform: rotate(180deg); + } + gui-menu > gui-menu-entry { + background-repeat : no-repeat; + background-position : left center; + background-size : 16px; + } + gui-menu > gui-menu-entry > label { + vertical-align : middle; + display : inline-block; + pointer-events : none; + } + gui-menu > gui-menu-entry > label > input { + margin : 0; + padding : 0; + vertical-align : middle; + margin-top : -2px; + padding-right : 2px; + pointer-events : none; + } + gui-menu > gui-menu-entry > gui-menu { + position : absolute; + z-index : 99999; + } + .gui-showing gui-menu-entry > gui-menu { + display : none; + } + gui-menu > .gui-hover > gui-menu, + gui-menu > gui-menu-entry:hover > gui-menu { + display : inline-block; + left : 100%; + top : 0; + } + .gui-overflowing > gui-menu-entry:hover > gui-menu { + left : auto; + top : 0; + } + gui-menu.gui-root-menu > gui-menu-entry:hover > gui-menu { + display : block; + } + gui-menu.gui-root-menu > gui-menu-entry[data-disabled="true"]:hover > gui-menu { + display : none; + } +gui-menu-bar { + position : relative; + display : block; + min-height : 16px; +} + gui-menu-bar-entry { + position : relative; + display : inline-block; + } + gui-menu-bar-entry > span { + pointer-events : none; + display : block; + } + gui-menu-bar-entry > gui-menu { + display : none; + position : absolute; + z-index : 99999; + } + gui-menu-bar-entry.gui-active > gui-menu { + display : inline-block; + top : 100%; + left : 0; + } +gui-progress-bar { + position : relative; + display : inline-block; + text-align : center; + overflow : hidden; +} + gui-progress-bar:before { + content : ''; + position : absolute; + left : 0; + bottom : 0; + right : 0; + top : 0; + z-index : -1; + } + gui-progress-bar > div { + position : absolute; + left : 1px; + bottom : 1px; + top : 1px; + z-index : -1; + } + gui-progress-bar > span { + display : inline-block; + vertical-align : middle; + position : absolute; + top : 50%; + left : 0; + right : 0; + bottom : 0; + height : 16px; + margin-top : -8px; + } +gui-statusbar { + position : relative; + display : block; + min-height : 16px; + overflow : hidden; + white-space : nowrap; + -webkit-text-overflow: ellipsis; + -moz-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; +} + gui-statusbar-label { + display : inline-block; + vertical-align : middle; + } +gui-file-view { + position : relative; + display : inline-block; +} + gui-file-view > * { + display : block; + width : 100%; + height : 100%; + } +gui-icon-view { + position : relative; + display : inline-block; + overflow : auto; + min-width : 16px; + min-height : 16px; +} + gui-icon-view-body { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 2; + } + gui-icon-view-entry { + float : left; + width : 34px; + width : 54px; + } + gui-icon-view-entry > div { + pointer-events: none; + position : relative; + } + gui-icon-view-entry > div > img { + pointer-events: none; + width : 32px; + height : 32px; + } + gui-icon-view-entry > div > span { + pointer-events: none; + position : absolute; + display : block; + left : -2px; + right : -2px; + top : 0; + padding : 2px; + z-index : 9999; + white-space : nowrap; + overflow: hidden; + -webkit-text-overflow: ellipsis; + -moz-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + } + gui-icon-view-entry.gui-active > div > span { + pointer-events: none; + overflow: visible; + white-space : pre-wrap; + word-wrap : break-word; + text-overflow: inherit; + -o-text-overflow: inherit; + } +gui-list-view { + position : relative; + display : inline-block; + overflow : auto; + min-width : 16px; + min-height : 16px; +} + gui-list-view-inner { + display : table; + width : 100%; + z-index : 2; + position : relative; + table-layout : fixed; + border-collapse : collapse; + } + gui-list-view-body { + position : relative; + z-index : 2; + display : table-row-group; + width : 100%; + } + gui-list-view-head { + display : table-header-group; + width : 100%; + visibility : hidden; + pointer-events: none; + } + gui-list-view-row { + position : relative; + display : table-row; + width : 100%; + } + gui-list-view-column { + position : relative; + display : table-cell; + background-repeat : no-repeat; + background-position : left center; + background-size : 16px; + line-height : 16px; + } + gui-list-view[data-icon-size="32"] gui-list-view-column { + line-height : 32px; + background-size : 32px; + } + gui-list-view-column > span { + pointer-events: none; + white-space: nowrap; + display : block; + overflow : hidden; + -webkit-text-overflow: ellipsis; + -moz-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + } + gui-list-view-fake-head { + position : absolute; + display : block; + top : 0; + } + gui-list-view-fake-head gui-list-view-head { + visibility : visible; + } + gui-list-view-column-resizer { + width : 1px; + position : absolute; + top : 0; + bottom : 0; + left : 0; + z-index : 999999999; + pointer-events: all; + } + gui-list-view-column-resizer:after { + content : ''; + background : #b2b2b2; + position : absolute; + top : 0; + left : 1px; + width : 1px; + bottom : 0; + } +gui-tree-view { + position : relative; + display : inline-block; + overflow : auto; + min-width : 16px; + min-height : 16px; +} + gui-tree-view-body { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 2; + } + gui-tree-view-entry { + display : block; + position : relative; + } + gui-tree-view-entry > div { + pointer-events: none; + } + gui-tree-view-entry > div > span { + pointer-events: none; + background-repeat : no-repeat; + background-position : left center; + display : inline-block; + vertical-align : middle; + -webkit-text-overflow: ellipsis; + -moz-text-overflow: ellipsis; + -ms-text-overflow: ellipsis; + -o-text-overflow: ellipsis; + text-overflow: ellipsis; + } + gui-tree-view-entry.gui-expandable { + padding-left : 16px; + } + gui-tree-view-entry.gui-expandable gui-tree-view-expander { + display : block; + position : absolute; + left : 0; + top : 0; + width : 16px; + height : 16px; + overflow : visible; + } +gui-toolbar > .gui-element { + vertical-align : middle; +} diff --git a/build/htdocs/dist/osjs.js b/build/htdocs/dist/osjs.js new file mode 100644 index 0000000..b204c85 --- /dev/null +++ b/build/htdocs/dist/osjs.js @@ -0,0 +1,16526 @@ +window.OSjs = window.OSjs || {}; +/** + * @preserve OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +(function() { + 'use strict'; + (function() { + window.console = window.console || {}; + console.log = console.log || function() {}; + console.debug = console.debug || console.log; + console.error = console.error || console.log; + console.warn = console.warn || console.log; + console.group = console.group || console.log; + console.groupEnd = console.groupEnd || console.log; + })(); + (['forEach', 'every', 'map']).forEach(function(n) { + (['HTMLCollection', 'NodeList', 'FileList']).forEach(function(p) { + if ( window[p] ) { + window[p].prototype[n] = Array.prototype[n]; + } + }); + }); + (function() { + function CustomEvent(event, params) { + params = params || { bubbles: false, cancelable: false, detail: undefined }; + var evt = document.createEvent( 'CustomEvent' ); + evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); + return evt; + } + if ( window.navigator.userAgent.match(/MSIE|Edge|Trident/) ) { + CustomEvent.prototype = window.Event.prototype; + window.CustomEvent = CustomEvent; + } + })(); +})(); + +(function() { + 'use strict'; + var handler = null; + var loaded = false; + var inited = false; + var signingOut = false; + (['Utils', 'API', 'GUI', 'Core', 'Dialogs', 'Helpers', 'Applications', 'Locales', 'VFS', 'Extensions']).forEach(function(ns) { + OSjs[ns] = OSjs[ns] || {}; + }); + (['Elements', 'Helpers']).forEach(function(ns) { + OSjs.GUI[ns] = OSjs.GUI[ns] || {}; + }); + (['Helpers', 'Transports']).forEach(function(ns) { + OSjs.VFS[ns] = OSjs.VFS[ns] || {}; + }); + function checkForbiddenKeyCombo(ev) { + return false; + } + var events = { + body_contextmenu: function(ev) { + ev.stopPropagation(); + if ( !OSjs.Utils.$isFormElement(ev) ) { + ev.preventDefault(); + return false; + } + return true; + }, + body_click: function(ev) { + OSjs.API.blurMenu(); + if ( ev.target === document.body ) { + var wm = OSjs.Core.getWindowManager(); + var win = wm ? wm.getCurrentWindow() : null; + if ( win ) { + win._blur(); + } + } + }, + body_touchstart: function(ev) { + if ( ev.target.localName !== 'select' ) { + ev.preventDefault(); + } + }, + message: function(ev) { + if ( ev && ev.data && typeof ev.data.message !== 'undefined' && typeof ev.data.pid === 'number' ) { + var proc = OSjs.API.getProcess(ev.data.pid); + if ( proc ) { + if ( typeof proc.onPostMessage === 'function' ) { + proc.onPostMessage(ev.data.message, ev); + } + if ( typeof proc._getWindow === 'function' ) { + var win = proc._getWindow(ev.data.wid, 'wid'); + if ( win ) { + win.onPostMessage(ev.data.message, ev); + } + } + } + } + }, + fullscreen: function(ev) { + var notif = OSjs.Core.getWindowManager().getNotificationIcon('_FullscreenNotification'); + if ( notif ) { + if ( !document.fullScreen && !document.mozFullScreen && !document.webkitIsFullScreen && !document.msFullscreenElement ) { + notif.opts._isFullscreen = false; + notif.setImage(OSjs.API.getIcon('actions/gtk-fullscreen.png', '16x16')); + } else { + notif.opts._isFullscreen = true; + notif.setImage(OSjs.API.getIcon('actions/gtk-leave-fullscreen.png', '16x16')); + } + } + }, + keydown: function(ev) { + var wm = OSjs.Core.getWindowManager(); + var win = wm ? wm.getCurrentWindow() : null; + var accept = [122, 123]; + function checkPrevent() { + var d = ev.srcElement || ev.target; + var doPrevent = d.tagName === 'BODY' ? true : false; + if ( (ev.keyCode === OSjs.Utils.Keys.BACKSPACE) && !OSjs.Utils.$isFormElement(ev) ) { // Backspace + doPrevent = true; + } else if ( (ev.keyCode === OSjs.Utils.Keys.TAB) && OSjs.Utils.$isFormElement(ev) ) { // Tab + doPrevent = true; + } else { + if ( accept.indexOf(ev.keyCode) !== -1 ) { + doPrevent = false; + } else if ( checkForbiddenKeyCombo(ev) ) { + doPrevent = true; + } + } + if ( doPrevent && (!win || !win._properties.key_capture) ) { + return true; + } + return false; + } + var reacted = (function() { + var combination = null; + if ( wm ) { + combination = wm.onKeyDown(ev, win); + if ( win && !combination ) { + win._onKeyEvent(ev, 'keydown'); + } + } + return combination; + })(); + if ( checkPrevent() || reacted ) { + ev.preventDefault(); + } + return true; + }, + keypress: function(ev) { + var wm = OSjs.Core.getWindowManager(); + if ( checkForbiddenKeyCombo(ev) ) { + ev.preventDefault(); + } + if ( wm ) { + var win = wm.getCurrentWindow(); + if ( win ) { + return win._onKeyEvent(ev, 'keypress'); + } + } + return true; + }, + keyup: function(ev) { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.onKeyUp(ev, wm.getCurrentWindow()); + var win = wm.getCurrentWindow(); + if ( win ) { + return win._onKeyEvent(ev, 'keyup'); + } + } + return true; + }, + beforeunload: function(ev) { + if ( signingOut ) { + return; + } + try { + if ( OSjs.API.getConfig('ShowQuitWarning') ) { + return OSjs.API._('MSG_SESSION_WARNING'); + } + } catch ( e ) {} + }, + resize: (function() { + var _timeout; + function _resize(ev, wasInited) { + var wm = OSjs.Core.getWindowManager(); + if ( !wm ) { + return; + } + wm.resize(ev, wm.getWindowSpace(), wasInited); + } + return function(ev, wasInited) { + if ( _timeout ) { + clearTimeout(_timeout); + _timeout = null; + } + var self = this; + _timeout = setTimeout(function() { + _resize.call(self, ev, wasInited); + }, 100); + }; + })(), + scroll: function(ev) { + if ( ev.target === document || ev.target === document.body ) { + ev.preventDefault(); + ev.stopPropagation(); + return false; + } + document.body.scrollTop = 0; + document.body.scrollLeft = 0; + return true; + }, + hashchange: function(ev) { + var hash = window.location.hash.substr(1); + var spl = hash.split(/^([\w\.\-_]+)\:(.*)/); + function getArgs(q) { + var args = {}; + q.split('&').forEach(function(a) { + var b = a.split('='); + var k = decodeURIComponent(b[0]); + args[k] = decodeURIComponent(b[1] || ''); + }); + return args; + } + if ( spl.length === 4 ) { + var root = spl[1]; + var args = getArgs(spl[2]); + if ( root ) { + OSjs.API.getProcess(root).forEach(function(p) { + p._onMessage('hashchange', { + hash: hash, + args: args + }, {source: null}); + }); + } + } + }, + orientationchange: function(ev) { + var orientation = 'landscape'; + if ( window.screen && window.screen.orientation ) { + if ( window.screen.orientation.type.indexOf('portrait') !== -1 ) { + orientation = 'portrait'; + } + } + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.onOrientationChange(ev, orientation); + } + document.body.setAttribute('data-orientation', orientation); + } + }; + function onError(msg) { + OSjs.API.error(OSjs.API._('ERR_CORE_INIT_FAILED'), OSjs.API._('ERR_CORE_INIT_FAILED_DESC'), msg, null, true); + } + function initLayout() { + if ( OSjs.API.getConfig('Watermark.enabled') ) { + var ver = OSjs.API.getConfig('Version', 'unknown version'); + var html = OSjs.API.getConfig('Watermark.lines') || []; + var el = document.createElement('div'); + el.id = 'DebugNotice'; + el.setAttribute('aria-hidden', 'true'); + el.innerHTML = html.join('
').replace(/%VERSION%/, ver); + document.body.appendChild(el); + } + document.getElementById('LoadingScreen').style.display = 'none'; + } + function initHandler(config, callback) { + handler = new OSjs.Core.Handler(); + function _done(error) { + if ( error ) { + onError(error); + return; + } + if ( !inited ) { + if ( !handler.loggedIn ) { + if ( confirm(OSjs.API._('ERR_NO_SESSION')) ) { + handler.init(_done); + } + return; + } + } + inited = true; + callback(); + } + handler.init(_done); + } + function initEvents() { + document.body.addEventListener('touchstart', events.body_touchstart); + document.body.addEventListener('contextmenu', events.body_contextmenu, false); + document.body.addEventListener('click', events.body_click, false); + document.addEventListener('keydown', events.keydown, true); + document.addEventListener('keypress', events.keypress, true); + document.addEventListener('keyup', events.keyup, true); + window.addEventListener('orientationchange', events.orientationchange, false); + window.addEventListener('hashchange', events.hashchange, false); + window.addEventListener('resize', events.resize, false); + window.addEventListener('scroll', events.scroll, false); + window.addEventListener('fullscreenchange', events.fullscreen, false); + window.addEventListener('mozfullscreenchange', events.fullscreen, false); + window.addEventListener('webkitfullscreenchange', events.fullscreen, false); + window.addEventListener('msfullscreenchange', events.fullscreen, false); + window.addEventListener('message', events.message, false); + window.onbeforeunload = events.beforeunload; + events.orientationchange(); + window.onerror = function(message, url, linenumber, column, exception) { + if ( typeof exception === 'string' ) { + exception = null; + } + console.warn('window::onerror()', arguments); + OSjs.API.error(OSjs.API._('ERR_JAVASCRIPT_EXCEPTION'), + OSjs.API._('ERR_JAVACSRIPT_EXCEPTION_DESC'), + OSjs.API._('BUGREPORT_MSG'), + exception || {name: 'window::onerror()', fileName: url, lineNumber: linenumber + ':' + column, message: message}, + true ); + return false; + }; + } + function initPreload(config, callback) { + var list = []; + function flatten(a) { + a.forEach(function(i) { + if ( i instanceof Array ) { + flatten(i); + } else { + if ( typeof i === 'string' ) { + i = OSjs.Utils.checkdir(i); + } else { + i.src = OSjs.Utils.checkdir(i.src); + } + list.push(i); + } + }); + } + flatten(config.Preloads); + OSjs.Utils.preload(list, function(total, failed) { + if ( failed.length ) { + console.warn('doInitialize()', 'some preloads failed to load:', failed); + } + setTimeout(function() { + callback(); + }, 0); + }); + } + function initExtensions(config, callback) { + var exts = Object.keys(OSjs.Extensions); + var manifest = OSjs.Core.getMetadata(); + OSjs.Utils.asyncs(exts, function(entry, idx, next) { + try { + var m = manifest[entry]; + OSjs.Extensions[entry].init(m, function() { + next(); + }); + } catch ( e ) { + console.warn('Extension init failed', e.stack, e); + next(); + } + }, function() { + callback(); + }); + } + function initSettingsManager(cfg, callback) { + var pools = cfg.SettingsManager || {}; + var manager = OSjs.Core.getSettingsManager(); + Object.keys(pools).forEach(function(poolName) { + manager.instance(poolName, pools[poolName] || {}); + }); + callback(); + } + function initPackageManager(cfg, callback) { + OSjs.Core.getPackageManager().load(function(result, error, pm) { + if ( error ) { + callback(error, result); + return; + } + var list = OSjs.API.getConfig('PreloadOnBoot', []); + OSjs.Utils.asyncs(list, function(iter, index, next) { + var pkg = pm.getPackage(iter); + if ( pkg && pkg.preload ) { + OSjs.Utils.preload(pkg.preload, next); + } else { + next(); + } + }, function() { + setTimeout(function() { + callback(false, true); + }, 0); + }); + }); + } + function initVFS(config, callback) { + OSjs.Core.getMountManager().init(callback); + } + function initSearch(config, callback) { + OSjs.Core.getSearchEngine().init(callback); + } + function initWindowManager(config, callback) { + if ( !config.WM || !config.WM.exec ) { + onError(OSjs.API._('ERR_CORE_INIT_NO_WM')); + return; + } + OSjs.API.launch(config.WM.exec, (config.WM.args || {}), function(app) { + app.setup(callback); + }, function(error, name, args, exception) { + onError(OSjs.API._('ERR_CORE_INIT_WM_FAILED_FMT', error), exception); + }); + } + function initSession(config, callback) { + OSjs.API.playSound('LOGIN'); + var list = []; + try { + list = config.AutoStart; + } catch ( e ) { + console.warn('initSession()->autostart()', 'exception', e, e.stack); + } + var checkMap = {}; + var skipMap = []; + list.forEach(function(iter, idx) { + if ( typeof iter === 'string' ) { + iter = list[idx] = {name: iter}; + } + if ( skipMap.indexOf(iter.name) === -1 ) { + if ( !checkMap[iter.name] ) { + checkMap[iter.name] = idx; + skipMap.push(iter.name); + } + } + }); + handler.getLastSession(function(err, adds) { + if ( !err ) { + adds.forEach(function(iter) { + if ( typeof checkMap[iter.name] === 'undefined' ) { + list.push(iter); + } else { + if ( iter.args ) { + var refid = checkMap[iter.name]; + var ref = list[refid]; + if ( !ref.args ) { + ref.args = {}; + } + ref.args = OSjs.Utils.mergeObject(ref.args, iter.args); + } + } + }); + } + OSjs.API.launchList(list, null, null, callback); + }); + } + function initTestEnvironment(config, callback) { + OSjs.Utils.preload([ + '/vendor/mocha/mocha.js', + '/vendor/mocha/mocha.css', + '/vendor/chai/chai.js' + ], function() { + var h1 = document.createElement('h1'); + h1.style.margin = '20px'; + h1.appendChild(document.createTextNode('OS.js Mocha Client Test Suite')); + document.body.appendChild(h1); + var el = document.createElement('div'); + el.id = 'mocha'; + document.body.appendChild(el); + document.body.style.background = '#fff'; + document.body.style.overflow = 'auto'; + window.mocha.ui('bdd'); + window.mocha.reporter('html'); + (new OSjs.Core.WindowManager('MochaWM', null, {}, {}, {})).init(); + OSjs.Utils.$createCSS(OSjs.API.getThemeCSS('default')); + OSjs.Utils.preload(['/client/test/test.js'], callback); + }); + return true; + } + function init() { + var config = OSjs.Core.getConfig(); + var splash = document.getElementById('LoadingScreen'); + var loading = OSjs.API.createSplash('OS.js', null, null, splash); + var freeze = ['API', 'Core', 'Dialogs', 'Extensions', 'GUI', 'Helpers', 'Locales', 'Utils', 'VFS']; + var queue = [ + initPreload, + initHandler, + initVFS, + initPackageManager, + initExtensions, + initSettingsManager, + initSearch, + function(cfg, cb) { + OSjs.Core.getMountManager().restore(cb); + }, + function(cfg, cb) { + return OSjs.GUI.DialogScheme.init(cb); + } + ]; + function _inited() { + loading = loading.destroy(); + splash = OSjs.Utils.$remove(splash); + var wm = OSjs.Core.getWindowManager(); + wm._fullyLoaded = true; + OSjs.API.triggerHook('onWMInited'); + } + function _done() { + OSjs.API.triggerHook('onInited'); + loading.update(queue.length - 1, queue.length + 1); + freeze.forEach(function(f) { + if ( typeof OSjs[f] === 'object' ) { + Object.freeze(OSjs[f]); + } + }); + if ( config.DEVMODE || config.MOCHAMODE ) { + _inited(); + } + if ( config.MOCHAMODE ) { + window.mocha.run(); + } else { + initWindowManager(config, function() { + initEvents(); + _inited(); + initSession(config, function() { + OSjs.API.triggerHook('onSessionLoaded'); + }); + }); + } + } + initLayout(); + if ( config.MOCHAMODE ) { + queue.push(initTestEnvironment); + } + OSjs.Utils.asyncs(queue, function(entry, index, next) { + if ( index < 1 ) { + OSjs.API.triggerHook('onInitialize'); + } + loading.update(index + 1, queue.length + 1); + entry(config, next); + }, _done); + } + OSjs.API.shutdown = function() { + if ( !inited || !loaded ) { + return; + } + signingOut = true; + document.body.removeEventListener('touchstart', events.body_touchstart); + document.body.removeEventListener('contextmenu', events.body_contextmenu, false); + document.body.removeEventListener('click', events.body_click, false); + document.removeEventListener('keydown', events.keydown, true); + document.removeEventListener('keypress', events.keypress, true); + document.removeEventListener('keyup', events.keyup, true); + window.removeEventListener('orientationchange', events.orientationchange, false); + window.removeEventListener('hashchange', events.hashchange, false); + window.removeEventListener('resize', events.resize, false); + window.removeEventListener('scroll', events.scroll, false); + window.removeEventListener('message', events.message, false); + window.onerror = null; + window.onbeforeunload = null; + OSjs.API.toggleFullscreen(); + OSjs.API.blurMenu(); + OSjs.API.killAll(); + OSjs.GUI.DialogScheme.destroy(); + var ring = OSjs.API.getServiceNotificationIcon(); + if ( ring ) { + ring.destroy(); + } + var handler = OSjs.Core.getHandler(); + if ( handler ) { + handler.destroy(); + handler = null; + } + OSjs.API.triggerHook('onShutdown'); + console.warn('OS.js was shut down!'); + if ( OSjs.API.getConfig('Connection.Type') === 'nw' ) { + try { + var gui = require('nw.gui'); + var win = gui.Window.get(); + setTimeout(function() { + win.close(); + }, 500); + } catch ( e ) { + } + } else { + if ( OSjs.API.getConfig('ReloadOnShutdown') === true ) { + window.location.reload(); + } + } + Object.keys(OSjs).forEach(function(k) { + try { + delete OSjs[k]; + } catch ( e ) {} + }); + }; + OSjs.Core.getConfig = OSjs.Core.getConfig || function() { + return {}; + }; + OSjs.Core.getMetadata = OSjs.Core.getMetadata || function() { + return {}; + }; + OSjs.API.isShuttingDown = OSjs.API.isShuttingDown || function() { + return signingOut; + }; + (function() { + function onLoad() { + if ( loaded ) { + return; + } + loaded = true; + init(); + } + function onUnload() { + OSjs.API.shutdown(); + } + document.addEventListener('DOMContentLoaded', onLoad); + document.addEventListener('load', onLoad); + document.addEventListener('unload', onUnload); + })(); +})(); + +(function() { + 'use strict'; + OSjs.Utils.getCompability = (function() { + function _checkSupport(enabled, check, isSupported) { + var supported = {}; + Object.keys(check).forEach(function(key) { + var chk = check[key]; + var value = false; + if ( chk instanceof Array ) { + chk.forEach(function(c) { + value = isSupported(c); + return !value; + }); + } else { + value = isSupported(chk); + } + supported[key] = value; + }); + return supported; + } + function getUpload() { + try { + var xhr = new XMLHttpRequest(); + return (!!(xhr && ('upload' in xhr) && ('onprogress' in xhr.upload))); + } catch ( e ) {} + return false; + } + function getCanvasSupported() { + return document.createElement('canvas').getContext ? document.createElement('canvas') : null; + } + function getVideoSupported() { + return document.createElement('video').canPlayType ? document.createElement('video') : null; + } + function canPlayCodec(support, check) { + return _checkSupport(support, check, function(codec) { + try { + return !!support.canPlayType(codec); + } catch ( e ) { + } + return false; + }); + } + function getVideoTypesSupported() { + return canPlayCodec(getVideoSupported(), { + webm : 'video/webm; codecs="vp8.0, vorbis"', + ogg : 'video/ogg; codecs="theora"', + h264 : [ + 'video/mp4; codecs="avc1.42E01E"', + 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' + ], + mpeg : 'video/mp4; codecs="mp4v.20.8"', + mkv : 'video/x-matroska; codecs="theora, vorbis"' + }); + } + function getAudioSupported() { + return document.createElement('audio').canPlayType ? document.createElement('audio') : null; + } + function getAudioTypesSupported() { + return canPlayCodec(getAudioSupported(), { + ogg : 'audio/ogg; codecs="vorbis', + mp3 : 'audio/mpeg', + wav : 'audio/wav; codecs="1"' + }); + } + function getAudioContext() { + if ( window.hasOwnProperty('AudioContext') || window.hasOwnProperty('webkitAudioContext') ) { + return true; + } + return false; + } + var getCanvasContexts = (function() { + var cache = []; + return function() { + if ( !cache.length ) { + var canvas = getCanvasSupported(); + if ( canvas ) { + var test = ['2d', 'webgl', 'experimental-webgl', 'webkit-3d', 'moz-webgl']; + test.forEach(function(tst, i) { + try { + if ( !!canvas.getContext(tst) ) { + cache.push(tst); + } + } catch ( eee ) {} + }); + } + } + return cache; + }; + })(); + function getWebGL() { + var result = false; + var contexts = getCanvasContexts(); + try { + result = (contexts.length > 1); + if ( !result ) { + if ( 'WebGLRenderingContext' in window ) { + result = true; + } + } + } catch ( e ) {} + return result; + } + function detectCSSFeature(featurename) { + var feature = false; + var domPrefixes = 'Webkit Moz ms O'.split(' '); + var elm = document.createElement('div'); + var featurenameCapital = null; + featurename = featurename.toLowerCase(); + if ( elm.style[featurename] ) { + feature = true; + } + if ( feature === false ) { + featurenameCapital = featurename.charAt(0).toUpperCase() + featurename.substr(1); + for ( var i = 0; i < domPrefixes.length; i++ ) { + if ( elm.style[domPrefixes[i] + featurenameCapital ] !== undefined ) { + feature = true; + break; + } + } + } + return feature; + } + function getUserMedia() { + var getMedia = false; + if ( window.navigator ) { + getMedia = ( navigator.getUserMedia || + navigator.webkitGetUserMedia || + navigator.mozGetUserMedia || + navigator.msGetUserMedia); + } + return !!getMedia; + } + function getRichText() { + try { + return !!document.createElement('textarea').contentEditable; + } catch ( e ) {} + return false; + } + function getTouch() { + try { + if ( navigator.userAgent.match(/Windows NT 6\.(2|3)/) ) { + return false; + } + } catch ( e ) {} + try { + if ( navigator.userAgent.match(/iOS|Android|BlackBerry|IEMobile|iPad|iPhone|iPad/i) ) { + return true; + } + } catch ( e ) {} + return false; + } + function getDnD() { + return !!('draggable' in document.createElement('span')); + } + function getSVG() { + return (!!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect); + } + function getFileSystem() { + return (('requestFileSystem' in window) || ('webkitRequestFileSystem' in window)); + } + var checkWindow = { + indexedDB : 'indexedDB', + localStorage : 'localStorage', + sessionStorage : 'sessionStorage', + globalStorage : 'globalStorage', + openDatabase : 'openDatabase', + socket : 'WebSocket', + worker : 'Worker', + file : 'File', + blob : 'Blob', + orientation : 'onorientationchange' + }; + var compability = { + touch : getTouch(), + upload : getUpload(), + getUserMedia : getUserMedia(), + fileSystem : getFileSystem(), + localStorage : false, + sessionStorage : false, + globalStorage : false, + openDatabase : false, + socket : false, + worker : false, + file : false, + blob : false, + orientation : false, + dnd : getDnD(), + css : { + transition : detectCSSFeature('transition'), + animation : detectCSSFeature('animation') + }, + canvas : !!getCanvasSupported(), + canvasContext : getCanvasContexts(), + webgl : getWebGL(), + audioContext : getAudioContext(), + svg : getSVG(), + video : !!getVideoSupported(), + videoTypes : getVideoTypesSupported(), + audio : !!getAudioSupported(), + audioTypes : getAudioTypesSupported(), + richtext : getRichText() + }; + Object.keys(checkWindow).forEach(function(key) { + compability[key] = (checkWindow[key] in window) && window[checkWindow[key]] !== null; + }); + return function() { + return compability; + }; + })(); + OSjs.Utils.isIE = function() { + var dm = parseInt(document.documentMode, 10); + return dm <= 11 || !!navigator.userAgent.match(/(MSIE|Edge)/); + }; + OSjs.Utils.getUserLocale = function() { + var loc = ((window.navigator.userLanguage || window.navigator.language) || 'en-EN').replace('-', '_'); + var map = { + 'nb' : 'no_NO', + 'es' : 'es_ES', + 'ru' : 'ru_RU', + 'en' : 'en_EN' + }; + var major = loc.split('_')[0] || 'en'; + var minor = loc.split('_')[1] || major.toUpperCase(); + if ( map[major] ) { + return map[major]; + } + return major + '_' + minor; + }; + OSjs.Utils.getRect = function() { + return { + top : 0, + left : 0, + width : document.body.offsetWidth, + height : document.body.offsetHeight + }; + }; +})(); + +(function() { + 'use strict'; + OSjs.Utils.Keys = (function() { + var list = { + F1: 112, + F2: 113, + F3: 114, + F4: 115, + F6: 118, + F7: 119, + F8: 120, + F9: 121, + F10: 122, + F11: 123, + F12: 124, + TILDE: 220, + GRAVE: 192, + CMD: 17, + LSUPER: 91, + RSUPER: 92, + DELETE: 46, + INSERT: 45, + HOME: 36, + END: 35, + PGDOWN: 34, + PGUP: 33, + PAUSE: 19, + BREAK: 19, + CAPS_LOCK: 20, + SCROLL_LOCK:186, + BACKSPACE: 8, + SPACE: 32, + TAB: 9, + ENTER: 13, + ESC: 27, + LEFT: 37, + RIGHT: 39, + UP: 38, + DOWN: 40 + }; + for ( var n = 33; n <= 126; n++ ) { + list[String.fromCharCode(n).toUpperCase()] = n; + } + return Object.freeze(list); + })(); + OSjs.Utils.mousePosition = function(ev) { + if ( ev.detail && typeof ev.detail.x !== 'undefined' && typeof ev.detail.y !== 'undefined' ) { + return {x: ev.detail.x, y: ev.detail.y}; + } + var touch = ev.touches || ev.changedTouches; + if ( touch && touch[0] ) { + return {x: touch[0].clientX, y: touch[0].clientY}; + } + return {x: ev.clientX, y: ev.clientY}; + }; + OSjs.Utils.mouseButton = function(ev) { + if ( typeof ev.button !== 'undefined' ) { + if ( ev.button === 0 ) { + return 'left'; + } else if ( ev.button === 1 ) { + return 'middle'; + } + return 'right'; + } + if ( ev.which === 2 || ev.which === 4 ) { + return 'middle'; + } else if ( ev.which === 1 ) { + return 'left'; + } + return 'right'; + }; + OSjs.Utils.keyCombination = (function() { + var modifiers = { + CTRL: function(ev) { + return ev.ctrlKey; + }, + SHIFT: function(ev) { + return ev.shiftKey; + }, + ALT: function(ev) { + return ev.altKey; + }, + META: function(ev) { + return ev.metaKey; + } + }; + function getKeyName(keyCode) { + var result = false; + Object.keys(OSjs.Utils.Keys).forEach(function(k) { + if ( !result && (keyCode === OSjs.Utils.Keys[k]) ) { + result = k; + } + }); + return result; + } + return function(ev, checkFor) { + var checks = checkFor.toUpperCase().split('+'); + var checkMods = {CTRL: false, SHIFT: false, ALT: false}; + var checkKeys = []; + checks.forEach(function(f) { + if ( modifiers[f] ) { + checkMods[f] = true; + } else { + checkKeys.push(f); + } + }); + return Object.keys(checkMods).every(function(f) { + var fk = !!modifiers[f](ev); + return checkMods[f] === fk; + }) && checkKeys.every(function(f) { + return getKeyName(ev.keyCode) === f; + }); + }; + })(); + OSjs.Utils.$bind = (function() { + var TOUCH_CONTEXTMENU = 1000; + var TOUCH_CLICK_MIN = 30; + var TOUCH_CLICK_MAX = 1000; + var TOUCH_DBLCLICK = 400; + function addEventHandler(el, n, t, callback, handler, useCapture, realType) { + var args = [t, handler, useCapture]; + el.addEventListener.apply(el, args); + el._boundEvents[n].push({ + realType: realType, + args: args, + callback: callback + }); + } + function createWheelHandler(el, n, t, callback, useCapture) { + function _wheel(ev) { + var pos = OSjs.Utils.mousePosition(ev); + var direction = (ev.detail < 0 || ev.wheelDelta > 0) ? 1 : -1; + pos.z = direction; + return callback(ev, pos); + } + addEventHandler(el, n, 'mousewheel', callback, _wheel, useCapture, 'mousewheel'); + addEventHandler(el, n, 'DOMMouseScroll', callback, _wheel, useCapture, 'DOMMouseScroll'); + } + function createGestureHandler(el, n, t, callback, useCapture) { + var started; + var contextTimeout; + var dblTimeout; + var moved = false; + var clicks = 0; + function _done() { + contextTimeout = clearTimeout(contextTimeout); + started = null; + moved = false; + el.removeEventListener('touchend', _touchend, false); + el.removeEventListener('touchmove', _touchmove, false); + el.removeEventListener('touchcancel', _touchcancel, false); + } + function _touchstart(ev) { + if ( ev.target === document.body ) { + ev.preventDefault(); + } + contextTimeout = clearTimeout(contextTimeout); + started = new Date(); + moved = false; + if ( t === 'contextmenu' ) { + contextTimeout = setTimeout(function() { + emitTouchEvent(ev, t, {button: 2, which: 3, buttons: 2}); + _done(); + }, TOUCH_CONTEXTMENU); + } else if ( t === 'dblclick' ) { + if ( clicks === 0 ) { + dblTimeout = clearTimeout(dblTimeout); + dblTimeout = setTimeout(function() { + clicks = 0; + }, TOUCH_DBLCLICK); + clicks++; + } else { + if ( !moved ) { + emitTouchEvent(ev, t); + } + clicks = 0; + } + } + el.addEventListener('touchend', _touchend, false); + el.addEventListener('touchmove', _touchmove, false); + el.addEventListener('touchcancel', _touchcancel, false); + } + function _touchend(ev) { + contextTimeout = clearTimeout(contextTimeout); + if ( !started ) { + return _done(); + } + if ( !OSjs.Utils.$isFormElement(ev) ) { + ev.preventDefault(); + } + var now = new Date(); + var diff = now - started; + if ( !moved && t === 'click' ) { + if ( (diff > TOUCH_CLICK_MIN) && (diff < TOUCH_CLICK_MAX) ) { + ev.stopPropagation(); + emitTouchEvent(ev, t); + } + } + return _done(); + } + function _touchmove(ev) { + if ( ev.target === document.body || !moved ) { + ev.preventDefault(); + } + if ( !started ) { + return; + } + contextTimeout = clearTimeout(contextTimeout); + dblTimeout = clearTimeout(dblTimeout); + clicks = 0; + moved = true; + } + function _touchcancel(ev) { + dblTimeout = clearTimeout(dblTimeout); + clicks = 0; + _done(); + } + addEventHandler(el, n, 'touchstart', callback, _touchstart, false, 'touchstart'); + } + function emitTouchEvent(ev, type, combineWith) { + if ( ev.target === document.body ) { + ev.preventDefault(); + } + if ( !ev.currentTarget || ev.changedTouches.length > 1 || (ev.type === 'touchend' && ev.changedTouches > 0) ) { + return; + } + var copy = ['ctrlKey', 'altKey', 'shiftKey', 'metaKey', 'screenX', 'screenY']; + var touch = ev.changedTouches[0]; + var evtArgs = { + clientX: touch.clientX, + clientY: touch.clientY, + relatedTarget: ev.target + }; + copy.forEach(function(k) { + evtArgs[k] = ev[k]; + }); + if ( combineWith ) { + Object.keys(combineWith).forEach(function(k) { + evtArgs[k] = combineWith[k]; + }); + } + ev.currentTarget.dispatchEvent(new MouseEvent(type, evtArgs)); + } + var customEvents = { + mousedown: 'touchstart', + mouseup: 'touchend', + mousemove: 'touchmove', + mousewheel: createWheelHandler, + contextmenu: createGestureHandler, + click: createGestureHandler, + dblclick: createGestureHandler + }; + return function(el, evName, callback, useCapture, noBind) { + useCapture = (useCapture === true); + if ( arguments.length < 3 ) { + throw new Error('$bind expects 3 or more arguments'); + } + if ( typeof evName !== 'string' ) { + throw new Error('Given event type was not a string'); + } + if ( typeof callback !== 'function' ) { + throw new Error('Given callback was not a function'); + } + function addEvent(nsType, type) { + addEventHandler(el, nsType, type, callback, function mouseEventHandler(ev) { + if ( noBind ) { + return callback(ev, OSjs.Utils.mousePosition(ev)); + } + return callback.call(el, ev, OSjs.Utils.mousePosition(ev)); + }, useCapture); + if ( customEvents[type] ) { + if ( typeof customEvents[type] === 'function' ) { + customEvents[type](el, nsType, type, callback, useCapture); + } else { + addEventHandler(el, nsType, customEvents[type], callback, function touchEventHandler(ev) { + emitTouchEvent(ev, type); + }, useCapture, customEvents[type]); + } + } + } + function initNamespace(ns) { + if ( !el._boundEvents ) { + el._boundEvents = {}; + } + if ( !el._boundEvents[ns] ) { + el._boundEvents[ns] = []; + } + var found = el._boundEvents[ns].filter(function(iter) { + return iter.callback === callback; + }); + return found.length === 0; + } + evName.replace(/\s/g, '').split(',').forEach(function(ns) { + var type = ns.split(':')[0]; + if ( !initNamespace(ns) ) { + console.warn('Utils::$bind()', 'This event was already bound, skipping'); + return; + } + addEvent(ns, type); + }); + }; + })(); + OSjs.Utils.$unbind = function(el, evName, callback, param) { + function unbindAll() { + if ( el._boundEvents ) { + Object.keys(el._boundEvents).forEach(function(type) { + unbindNamed(type); + }); + delete el._boundEvents; + } + } + function unbindNamed(type) { + if ( el._boundEvents ) { + var list = el._boundEvents || {}; + if ( list[type] ) { + for ( var i = 0; i < list[type].length; i++ ) { + var iter = list[type][i]; + if ( callback && iter.callback !== callback ) { + continue; + } + el.removeEventListener.apply(el, iter.args); + list[type].splice(i, 1); + i--; + } + } + } + } + if ( el ) { + if ( evName ) { + evName.replace(/\s/g, '').split(',').forEach(function(type) { + unbindNamed(type); + }); + } else { + unbindAll(); + } + } + }; +})(); + +(function() { + 'use strict'; + OSjs.Utils.getCookie = function(k) { + var map = {}; + document.cookie.split(/;\s+?/g).forEach(function(i) { + var idx = i.indexOf('='); + map[i.substr(i, idx)] = i.substr(idx + 1); + }); + return k ? map[k] : map; + }; + OSjs.Utils.format = function(format) { + var args = Array.prototype.slice.call(arguments, 1); + var sprintfRegex = /\{(\d+)\}/g; + function sprintf(match, number) { + return number in args ? args[number] : match; + } + return format.replace(sprintfRegex, sprintf); + }; + OSjs.Utils.cleanHTML = function(html) { + return html.replace(/\n/g, '') + .replace(/[\t ]+[\t ]+<') + .replace(/\>[\t ]+$/g, '>'); + }; + OSjs.Utils.parseurl = function(url, modify) { + modify = modify || {}; + if ( !url.match(/^(\w+\:)\/\//) ) { + url = '//' + url; + } + var protocol = url.split(/^(\w+\:)?\/\//); + var splitted = (function() { + var tmp = protocol[2].replace(/^\/\//, '').split('/'); + return { + proto: (modify.protocol || protocol[1] || window.location.protocol || '').replace(/\:$/, ''), + host: modify.host || tmp.shift(), + path: modify.path || '/' + tmp.join('/') + }; + })(); + function _parts() { + var parts = [splitted.proto, '://']; + if ( modify.username ) { + var authstr = String(modify.username) + ':' + String(modify.password); + parts.push(authstr); + parts.push('@'); + } + parts.push(splitted.host); + parts.push(splitted.path); + return parts.join(''); + } + return { + protocol: splitted.proto, + host: splitted.host, + path: splitted.path, + url: _parts() + }; + }; + OSjs.Utils.argumentDefaults = function(args, defaults, undef) { + args = args || {}; + Object.keys(defaults).forEach(function(key) { + if ( typeof defaults[key] === 'boolean' || typeof defaults[key] === 'number' ) { + if ( typeof args[key] === 'undefined' || args[key] === null ) { + args[key] = defaults[key]; + } + } else { + args[key] = args[key] || defaults[key]; + } + }); + return args; + }; + OSjs.Utils.mergeObject = function(obj1, obj2, opts) { + opts = opts || {}; + for ( var p in obj2 ) { + if ( obj2.hasOwnProperty(p) ) { + try { + if (opts.overwrite === false && obj1.hasOwnProperty(p)) { + continue; + } + if ( obj2[p].constructor === Object ) { + obj1[p] = OSjs.Utils.mergeObject(obj1[p], obj2[p]); + } else { + obj1[p] = obj2[p]; + } + } catch (e) { + obj1[p] = obj2[p]; + } + } + } + return obj1; + }; + OSjs.Utils.cloneObject = function(o) { + return JSON.parse(JSON.stringify(o, function(key, value) { + if ( value && typeof value === 'object' && value.tagName ) { + return undefined; + } + return value; + })); + }; + OSjs.Utils.extend = function(obj, methods) { + if ( obj && methods ) { + Object.keys(methods).forEach(function(k) { + obj[k] = methods[k]; + }); + } + }; + OSjs.Utils.inherit = function(to, from, extend) { + from.prototype = Object.create(to.prototype); + from.constructor = to; + if ( extend ) { + OSjs.Utils.extend(from.prototype, extend); + } + return from; + }; + OSjs.Utils.convertToRGB = function(hex) { + var rgb = parseInt(hex.replace('#', ''), 16); + var val = {}; + val.r = (rgb & (255 << 16)) >> 16; + val.g = (rgb & (255 << 8)) >> 8; + val.b = (rgb & 255); + return val; + }; + OSjs.Utils.convertToHEX = function(r, g, b) { + if ( typeof r === 'object' ) { + g = r.g; + b = r.b; + r = r.r; + } + if ( typeof r === 'undefined' || typeof g === 'undefined' || typeof b === 'undefined' ) { + throw new Error('Invalid RGB supplied to convertToHEX()'); + } + var hex = [ + parseInt(r, 10).toString( 16 ), + parseInt(g, 10).toString( 16 ), + parseInt(b, 10).toString( 16 ) + ]; + Object.keys(hex).forEach(function(i) { + if ( hex[i].length === 1 ) { + hex[i] = '0' + hex[i]; + } + }); + return '#' + hex.join('').toUpperCase(); + }; + OSjs.Utils.invertHEX = function(hex) { + var color = parseInt(hex.replace('#', ''), 16); + color = 0xFFFFFF ^ color; + color = color.toString(16); + color = ('000000' + color).slice(-6); + return '#' + color; + }; + OSjs.Utils.asyncs = function(queue, onentry, ondone) { + onentry = onentry || function(e, i, n) { + return n(); + }; + ondone = ondone || function() {}; + var finished = []; + var isdone = false; + (function next(i) { + if ( isdone || finished.indexOf(i) !== -1 ) { + return; + } + finished.push(i); + if ( i >= queue.length ) { + isdone = true; + return ondone(); + } + try { + onentry(queue[i], i, function() { + next(i + 1); + }); + } catch ( e ) { + console.warn('Utils::asyncs()', 'Exception while stepping', e.stack, e); + next(i + 1); + } + })(0); + }; + OSjs.Utils.asyncp = function(queue, opts, onentry, ondone) { + opts = opts || {}; + var running = 0; + var max = opts.max || 3; + var qleft = Object.keys(queue); + var finished = []; + var isdone = false; + function spawn(i, cb) { + function _done() { + running--; + cb(); + } + if ( finished.indexOf(i) !== -1 ) { + return; + } + finished.push(i); + running++; + try { + onentry(queue[i], i, _done); + } catch ( e ) { + console.warn('Utils::asyncp()', 'Exception while stepping', e.stack, e); + _done(); + } + } + (function check() { + if ( !qleft.length ) { + if ( running || isdone ) { + return; + } + isdone = true; + return ondone(); + } + var d = Math.min(qleft.length, max - running); + for ( var i = 0; i < d; i++ ) { + spawn(qleft.shift(), check); + } + })(); + }; +})(); + +(function() { + 'use strict'; + OSjs.Utils.$ = function(id) { + return document.getElementById(id); + }; + OSjs.Utils.$safeName = function(str) { + return (str || '').replace(/[^a-zA-Z0-9]/g, '_'); + }; + OSjs.Utils.$remove = function(node) { + if ( node && node.parentNode ) { + node.parentNode.removeChild(node); + } + return null; + }; + OSjs.Utils.$empty = function(myNode) { + if ( myNode ) { + while (myNode.firstChild) { + myNode.removeChild(myNode.firstChild); + } + } + }; + OSjs.Utils.$getStyle = function(oElm, strCssRule) { + var strValue = ''; + if ( document.defaultView && document.defaultView.getComputedStyle ) { + strValue = document.defaultView.getComputedStyle(oElm, '').getPropertyValue(strCssRule); + } else if ( oElm.currentStyle ) { + strCssRule = strCssRule.replace(/\-(\w)/g, function(strMatch, p1) { + return p1.toUpperCase(); + }); + strValue = oElm.currentStyle[strCssRule]; + } + return strValue; + }; + OSjs.Utils.$position = function(el, parentEl) { + if ( el ) { + if ( parentEl ) { + var result = {left:0, top:0, width: el.offsetWidth, height: el.offsetHeight}; + while ( true ) { + result.left += el.offsetLeft; + result.top += el.offsetTop; + if ( el.offsetParent === parentEl || el.offsetParent === null ) { + break; + } + el = el.offsetParent; + } + return result; + } + return el.getBoundingClientRect(); + } + return null; + }; + OSjs.Utils.$parent = function(el, cb) { + var result = null; + if ( el && cb ) { + var current = el; + while ( current.parentNode ) { + if ( cb(current) ) { + result = current; + break; + } + current = current.parentNode; + } + } + return result; + }; + OSjs.Utils.$index = function(el, parentEl) { + if ( el ) { + parentEl = parentEl || el.parentNode; + if ( parentEl ) { + var nodeList = Array.prototype.slice.call(parentEl.children); + var nodeIndex = nodeList.indexOf(el, parentEl); + return nodeIndex; + } + } + return -1; + }; + OSjs.Utils.$selectRange = function(field, start, end) { + if ( !field ) { + throw new Error('Cannot select range: missing element'); + } + if ( typeof start === 'undefined' || typeof end === 'undefined' ) { + throw new Error('Cannot select range: mising start/end'); + } + if ( field.createTextRange ) { + var selRange = field.createTextRange(); + selRange.collapse(true); + selRange.moveStart('character', start); + selRange.moveEnd('character', end); + selRange.select(); + field.focus(); + } else if ( field.setSelectionRange ) { + field.focus(); + field.setSelectionRange(start, end); + } else if ( typeof field.selectionStart !== 'undefined' ) { + field.selectionStart = start; + field.selectionEnd = end; + field.focus(); + } + }; + OSjs.Utils.$addClass = function(el, name) { + if ( el ) { + name.split(' ').forEach(function(n) { + el.classList.add(n); + }); + } + }; + OSjs.Utils.$removeClass = function(el, name) { + if ( el ) { + name.split(' ').forEach(function(n) { + el.classList.remove(n); + }); + } + }; + OSjs.Utils.$hasClass = function(el, name) { + if ( el && name ) { + return name.split(' ').every(function(n) { + return el.classList.contains(n); + }); + } + return false; + }; + OSjs.Utils.$escape = function(str) { + var div = document.createElement('div'); + div.appendChild(document.createTextNode(str)); + return div.innerHTML; + }; + OSjs.Utils.$create = function(tagName, properties) { + var element = document.createElement(tagName); + function _foreach(dict, l) { + dict = dict || {}; + Object.keys(dict).forEach(function(name) { + l(name.replace(/_/g, '-'), String(dict[name])); + }); + } + _foreach(properties.style, function(key, val) { + element.style[key] = val; + }); + _foreach(properties.aria, function(key, val) { + if ( (['role']).indexOf(key) !== -1 ) { + key = 'aria-' + key; + } + element.setAttribute(key, val); + }); + _foreach(properties.data, function(key, val) { + element.setAttribute('data-' + key, val); + }); + _foreach(properties, function(key, val) { + if ( (['style', 'aria', 'data']).indexOf(key) === -1 ) { + element[key] = val; + } + }); + return element; + }; + OSjs.Utils.$createCSS = function(src, onload, onerror) { + var link = document.createElement('link'); + link.setAttribute('rel', 'stylesheet'); + link.setAttribute('type', 'text/css'); + link.onload = onload || function() {}; + link.onerror = onerror || function() {}; + link.setAttribute('href', src); + document.getElementsByTagName('head')[0].appendChild(link); + return link; + }; + OSjs.Utils.$createJS = function(src, onreadystatechange, onload, onerror, attrs) { + var res = document.createElement('script'); + res.onreadystatechange = onreadystatechange || function() {}; + res.onerror = onerror || function() {}; + res.onload = onload || function() {}; + attrs = OSjs.Utils.mergeObject({ + type: 'text/javascript', + charset: 'utf-8', + src: src + }, attrs || {}); + Object.keys(attrs).forEach(function(k) { + res[k] = String(attrs[k]); + }); + document.getElementsByTagName('head')[0].appendChild(res); + return res; + }; + OSjs.Utils.$isFormElement = function(input, types) { + types = types || ['TEXTAREA', 'INPUT', 'SELECT']; + if ( input instanceof window.Event ) { + input = input.srcElement || input.target; + } + if ( input instanceof window.Element ) { + if ( types.indexOf(input.tagName.toUpperCase()) >= 0 ) { + if ( !(input.readOnly || input.disabled) ) { + return true; + } + } + } + return false; + }; + OSjs.Utils.$css = function(el, ink, inv) { + function rep(k) { + return k.replace(/\-(\w)/g, function(strMatch, p1) { + return p1.toUpperCase(); + }); + } + var obj = {}; + if ( arguments.length === 2 ) { + if ( typeof ink === 'string' ) { + return el.parentNode ? OSjs.Utils.$getStyle(el, ink) : el.style[rep(ink)]; + } + obj = ink; + } else if ( arguments.length === 3 ) { + obj[ink] = inv; + } + Object.keys(obj).forEach(function(k) { + el.style[rep(k)] = String(obj[k]); + }); + }; +})(); + +(function() { + 'use strict'; + OSjs.Utils.ajax = function(args) { + var request; + args = OSjs.Utils.argumentDefaults(args, { + onerror : function() {}, + onsuccess : function() {}, + onprogress : function() {}, + oncreated : function() {}, + onfailed : function() {}, + oncanceled : function() {}, + ontimeout : function() {}, + acceptcodes : [200, 201, 304], + method : 'GET', + responseType : null, + requestHeaders : {}, + body : null, + timeout : 0, + json : false, + url : '', + jsonp : false + }); + function onReadyStateChange() { + var result; + function _onError(error) { + error = OSjs.API._('ERR_UTILS_XHR_FMT', error); + console.warn('Utils::ajax()', 'onReadyStateChange()', error); + args.onerror(error, result, this, args.url); + } + if ( this.readyState === 4 ) { + result = this.responseText; + try { + var ctype = this.getResponseHeader('content-type') || ''; + if ( args.json && ctype.match(/^application\/json/) ) { + result = JSON.parse(this.responseText); + } + } catch (ex) { + _onError.call(this, ex.toString()); + return; + } + if ( this.status === 200 || this.status === 201 ) { + args.onsuccess(result, this, args.url); + } else { + _onError.call(this, String(this.status)); + } + } + } + function requestJSONP() { + var loaded = false; + OSjs.Utils.$createJS(args.url, function() { + if ( (this.readyState === 'complete' || this.readyState === 'loaded') && !loaded) { + loaded = true; + args.onsuccess(); + } + }, function() { + if ( loaded ) { + return; + } + loaded = true; + args.onsuccess(); + }, function() { + if ( loaded ) { + return; + } + loaded = true; + args.onerror(); + }); + } + function cleanup() { + if ( request.upload ) { + request.upload.removeEventListener('progress', args.onprogress, false); + } else { + request.removeEventListener('progress', args.onprogress, false); + } + request.removeEventListener('error', args.onfailed, false); + request.removeEventListener('abort', args.oncanceled, false); + request.onerror = null; + request.onload = null; + request.onreadystatechange = null; + request.ontimeut = null; + request = null; + args = null; + } + function requestJSON() { + request = new XMLHttpRequest(); + try { + request.timeout = args.timeout; + } catch ( e ) {} + if ( request.upload ) { + request.upload.addEventListener('progress', args.onprogress, false); + } else { + request.addEventListener('progress', args.onprogress, false); + } + request.ontimeout = function(evt) { + args.ontimeout(evt); + }; + if ( args.responseType === 'arraybuffer' ) { // Binary + request.onerror = function(evt) { + var error = request.response || OSjs.API._('ERR_UTILS_XHR_FATAL'); + args.onerror(error, evt, request, args.url); + cleanup(); + }; + request.onload = function(evt) { + if ( args.acceptcodes.indexOf(request.status) >= 0 ) { + args.onsuccess(request.response, request, args.url); + } else { + OSjs.VFS.Helpers.abToText(request.response, 'text/plain', function(err, txt) { + var error = txt || err || OSjs.API._('ERR_UTILS_XHR_FATAL'); + args.onerror(error, evt, request, args.url); + }); + } + cleanup(); + }; + } else { + request.addEventListener('error', args.onfailed, false); + request.addEventListener('abort', args.oncanceled, false); + request.onreadystatechange = onReadyStateChange; + } + request.open(args.method, args.url, true); + Object.keys(args.requestHeaders).forEach(function(h) { + request.setRequestHeader(h, args.requestHeaders[h]); + }); + request.responseType = args.responseType || ''; + args.oncreated(request); + request.send(args.body); + } + if ( (OSjs.API.getConfig('Connection.Type') === 'standalone') ) { + args.onerror('You are currently running locally and cannot perform this operation!', null, request, args.url); + return; + } + if ( args.json && (typeof args.body !== 'string') && !(args.body instanceof FormData) ) { + args.body = JSON.stringify(args.body); + if ( typeof args.requestHeaders['Content-Type'] === 'undefined' ) { + args.requestHeaders['Content-Type'] = 'application/json'; + } + } + return args.jsonp ? requestJSONP() : requestJSON(); + }; + OSjs.Utils.preload = (function() { + var _LOADED = {}; + var _CACHE = {}; + function checkCache(item, args) { + if ( item && _LOADED[item.src] === true ) { + if ( item.force !== true && args.force !== true ) { + return true; + } + } + return false; + } + var preloadTypes = { + stylesheet: function createStylesheet(item, cb) { + var src = item.src; + var loaded = false; + var timeout; + function _done(res) { + timeout = clearTimeout(timeout); + if ( !loaded ) { + _LOADED[src] = true; + loaded = true; + cb(res, src); + } + } + function _check(path) { + var result = false; + (document.styleSheet || []).forEach(function(iter, i) { + if ( iter.href.indexOf(path) !== -1 ) { + result = true; + return false; + } + return true; + }); + return result; + } + OSjs.Utils.$createCSS(src, function() { + _done(true); + }, function() { + _done(false); + }); + if ( typeof document.styleSheet === 'undefined' || (!loaded && _check(src)) ) { + return _done(true); + } + timeout = setTimeout(function() { + _done(false); + }, 30000); + }, + javascript: function createScript(item, cb) { + var src = item.src; + var loaded = false; + function _done(res) { + if ( !loaded ) { + _LOADED[src] = true; + loaded = true; + cb(res, src); + } + } + OSjs.Utils.$createJS(src, function() { + if ( (this.readyState === 'complete' || this.readyState === 'loaded') ) { + _done(true); + } + }, function() { + _done(true); + }, function() { + _done(false); + }, {async: false}); + }, + scheme: function createHTML(item, cb, args) { + var scheme; + function _cache(err, html) { + if ( !err && html ) { + _CACHE[item.src] = html; + } + } + function _cb() { + scheme = null; + cb.apply(null, arguments); + } + if ( _CACHE[item.src] && item.force !== true && args.force !== true ) { + scheme = new OSjs.GUI.Scheme(); + scheme.loadString(_CACHE[item.src]); + _cb(true, item.src, scheme); + } else { + if ( OSjs.API.isStandalone() ) { + scheme = new OSjs.GUI.Scheme(); + preloadTypes.javascript({ + src: OSjs.Utils.pathJoin(OSjs.Utils.dirname(item.src), '_scheme.js'), + type: 'javascript' + }, function() { + var look = item.src.replace(OSjs.API.getBrowserPath(), '/').replace(/^\/?packages/, ''); + var html = OSjs.STANDALONE.SCHEMES[look]; + scheme.loadString(html); + _cache(false, html); + _cb(true, item.src, scheme); + }); + } else { + scheme = new OSjs.GUI.Scheme(item.src); + scheme.load(function(err, res) { + _cb(err ? false : true, item.src, scheme); + }, function(err, html) { + _cache(err, html); + }); + } + } + } + }; + function getType(src) { + if ( src.match(/\.js$/i) ) { + return 'javascript'; + } else if ( src.match(/\.css$/i) ) { + return 'stylesheet'; + } + return 'unknown'; + } + function getTypeCorrected(t) { + var typemap = { + script: 'javascript', + js: 'javascript', + style: 'stylesheet', + css: 'stylesheet' + }; + return typemap[t] || t; + } + function preloadList(list, ondone, onprogress, args) { + args = args || {}; + ondone = ondone || function() {}; + onprogress = onprogress || function() {}; + var succeeded = []; + var failed = []; + var len = list.length; + var total = 0; + list = (list || []).map(function(item) { + if ( typeof item === 'string' ) { + item = {src: item}; + } + item._src = item.src; + item.type = item.type ? getTypeCorrected(item.type) : getType(item.src); + return item; + }); + var data = []; + OSjs.Utils.asyncp(list, {max: args.max || 1}, function(item, index, next) { + function _onentryloaded(state, src, setData) { + total++; + (state ? succeeded : failed).push(src); + onprogress(index, len, src, succeeded, failed, total); + if ( setData ) { + data.push({ + item: item, + data: setData + }); + } + next(); + } + if ( item ) { + if ( checkCache(item, args) ) { + return _onentryloaded(true, item.src); + } else { + if ( preloadTypes[item.type] ) { + return preloadTypes[item.type](item, _onentryloaded, args); + } + } + failed.push(item.src); + } + return next(); + }, function() { + ondone(len, failed, succeeded, data); + }); + } + return preloadList; + })(); +})(); + +(function() { + 'use strict'; + OSjs.Utils.getPathProtocol = function getPathProtocol(orig) { + var tmp = document.createElement('a'); + tmp.href = orig; + return tmp.protocol.replace(/:$/, ''); + }; + OSjs.Utils.checkdir = function(path) { + if ( path && window.location.href.match(/^file\:\/\//) ) { + path = path.replace(/^\//, ''); + } + return path; + }; + OSjs.Utils.filext = function(d) { + var ext = OSjs.Utils.filename(d).split('.').pop(); + return ext ? ext.toLowerCase() : null; + }; + OSjs.Utils.dirname = function(f) { + function _parentDir(p) { + var pstr = p.split(/^(.*)\:\/\/(.*)/).filter(function(n) { + return n !== ''; + }); + var args = pstr.pop(); + var prot = pstr.pop(); + var result = ''; + var tmp = args.split('/').filter(function(n) { + return n !== ''; + }); + if ( tmp.length ) { + tmp.pop(); + } + result = tmp.join('/'); + if ( !result.match(/^\//) ) { + result = '/' + result; + } + if ( prot ) { + result = prot + '://' + result; + } + return result; + } + return f.match(/^((.*)\:\/\/)?\/$/) ? f : _parentDir(f.replace(/\/$/, '')); + }; + OSjs.Utils.filename = function(p) { + return (p || '').replace(/\/$/, '').split('/').pop(); + }; + OSjs.Utils.humanFileSize = function(bytes, si) { + var thresh = si ? 1000 : 1024; + if (bytes < thresh) { + return bytes + ' B'; + } + var units = si ? ['kB','MB','GB','TB','PB','EB','ZB','YB'] : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; + var u = -1; + do { + bytes /= thresh; + ++u; + } while (bytes >= thresh); + return bytes.toFixed(1) + ' ' + units[u]; + }; + OSjs.Utils.escapeFilename = function(n) { + return (n || '').replace(/[\|&;\$%@"<>\(\)\+,\*\/]/g, '').trim(); + }; + OSjs.Utils.replaceFileExtension = function(filename, rep) { + var spl = filename.split('.'); + spl.pop(); + spl.push(rep); + return spl.join('.'); + }; + OSjs.Utils.replaceFilename = function(orig, newname) { + var spl = orig.split('/'); + spl.pop(); + spl.push(newname); + return spl.join('/'); + }; + OSjs.Utils.pathJoin = function() { + var parts = []; + var prefix = ''; + var i, s; + for ( i = 0; i < arguments.length; i++ ) { + s = String(arguments[i]); + if ( s.match(/^([A-z0-9\-_]+)\:\//) ) { + prefix = s.replace(/\/+$/, '//'); + continue; + } + s = s.replace(/^\/+/, '').replace(/\/+$/, ''); + parts.push(s); + } + return prefix + '/' + parts.join('/'); + }; + OSjs.Utils.getFilenameRange = function(val) { + val = val || ''; + var range = {min: 0, max: val.length}; + if ( val.match(/^\./) ) { + if ( val.length >= 2 ) { + range.min = 1; + } + } else { + if ( val.match(/\.(\w+)$/) ) { + var m = val.split(/\.(\w+)$/); + for ( var i = m.length - 1; i >= 0; i-- ) { + if ( m[i].length ) { + range.max = val.length - m[i].length - 1; + break; + } + } + } + } + return range; + }; + OSjs.Utils.btoaUrlsafe = function(str) { + return (!str || !str.length) ? '' : btoa(str) + .replace(/\+/g, '-') + .replace(/\//g, '_') + .replace(/=+$/, ''); + }; + OSjs.Utils.atobUrlsafe = function(str) { + if ( str && str.length ) { + str = (str + '===').slice(0, str.length + (str.length % 4)); + return atob(str.replace(/-/g, '+').replace(/_/g, '/')); + } + return ''; + }; + OSjs.Utils.btoaUtf = function(str) { // Encode + var _unescape = window.unescape || function(s) { + function d(x, n) { + return String.fromCharCode(parseInt(n, 16)); + } + return s.replace(/%([0-9A-F]{2})/i, d); + }; + str = _unescape(encodeURIComponent(str)); + return btoa(str); + }; + OSjs.Utils.atobUtf = function(str) { // Decode + var _escape = window.escape || function(s) { + function q(c) { + c = c.charCodeAt(); + return '%' + (c < 16 ? '0' : '') + c.toString(16).toUpperCase(); + } + return s.replace(/[\x00-),:-?[-^`{-\xFF]/g, q); + }; + var trans = _escape(atob(str)); + return decodeURIComponent(trans); + }; + OSjs.Utils.checkAcceptMime = function(mime, list) { + if ( mime && list.length ) { + var re; + for ( var i = 0; i < list.length; i++ ) { + re = new RegExp(list[i]); + if ( re.test(mime) === true ) { + return true; + } + } + } + return false; + }; +})(); + +(function(Utils, API) { + 'use strict'; + var DefaultLocale = 'en_EN'; + var CurrentLocale = 'en_EN'; + var _CLIPBOARD; // Current 'clipboard' data + var _hooks = { + 'onInitialize': [], + 'onInited': [], + 'onWMInited': [], + 'onSessionLoaded': [], + 'onShutdown': [], + 'onApplicationPreload': [], + 'onApplicationLaunch': [], + 'onApplicationLaunched': [], + 'onBlurMenu': [] + }; + function ServiceNotificationIcon() { + this.entries = {}; + this.size = 0; + this.notif = null; + this.init(); + } + ServiceNotificationIcon.prototype.init = function() { + var wm = OSjs.Core.getWindowManager(); + var self = this; + function show(ev) { + self.displayMenu(ev); + return false; + } + if ( wm ) { + this.notif = wm.createNotificationIcon('ServiceNotificationIcon', { + image: API.getIcon('status/gtk-dialog-authentication.png'), + onContextMenu: show, + onClick: show, + onInited: function(el, img) { + self._updateIcon(); + } + }); + this._updateIcon(); + } + }; + ServiceNotificationIcon.prototype.destroy = function() { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.removeNotificationIcon('ServiceNotificationIcon'); + } + this.size = 0; + this.entries = {}; + this.notif = null; + }; + ServiceNotificationIcon.prototype._updateIcon = function() { + if ( this.notif ) { + if ( this.notif.$container ) { + this.notif.$container.style.display = this.size ? 'inline-block' : 'none'; + } + this.notif.setTitle(API._('SERVICENOTIFICATION_TOOLTIP', this.size.toString())); + } + }; + ServiceNotificationIcon.prototype.displayMenu = function(ev) { + var menu = []; + var entries = this.entries; + Object.keys(entries).forEach(function(name) { + menu.push({ + title: name, + menu: entries[name] + }); + }); + API.createMenu(menu, ev); + }; + ServiceNotificationIcon.prototype.add = function(name, menu) { + if ( !this.entries[name] ) { + this.entries[name] = menu; + this.size++; + this._updateIcon(); + } + }; + ServiceNotificationIcon.prototype.remove = function(name) { + if ( this.entries[name] ) { + delete this.entries[name]; + this.size--; + this._updateIcon(); + } + }; + API._ = function _apiTranslate() { + var s = arguments[0]; + var a = arguments; + if ( OSjs.Locales[CurrentLocale][s] ) { + a[0] = OSjs.Locales[CurrentLocale][s]; + } else { + a[0] = OSjs.Locales[DefaultLocale][s] || s; + } + return a.length > 1 ? Utils.format.apply(null, a) : a[0]; + }; + API.__ = function _apiTranslateList() { + var l = arguments[0]; + var s = arguments[1]; + var a = Array.prototype.slice.call(arguments, 1); + if ( l[CurrentLocale] && l[CurrentLocale][s] ) { + a[0] = l[CurrentLocale][s]; + } else { + a[0] = l[DefaultLocale] ? (l[DefaultLocale][s] || s) : s; + if ( a[0] && a[0] === s ) { + a[0] = API._.apply(null, a); + } + } + return a.length > 1 ? Utils.format.apply(null, a) : a[0]; + }; + API.getLocale = function _apiGetLocale() { + return CurrentLocale; + }; + API.setLocale = function _apiSetLocale(l) { + var RTL = API.getConfig('LocaleOptions.RTL', []); + if ( OSjs.Locales[l] ) { + CurrentLocale = l; + } else { + console.warn('API::setLocale()', 'Invalid locale', l, '(Using default)'); + CurrentLocale = DefaultLocale; + } + var major = CurrentLocale.split('_')[0]; + var html = document.querySelector('html'); + if ( html ) { + html.setAttribute('lang', l); + html.setAttribute('dir', RTL.indexOf(major) !== -1 ? 'rtl' : 'ltr'); + } + }; + API.curl = function _apiCurl(args, callback) { + args = args || {}; + callback = callback || {}; + var opts = args.body; + if ( typeof opts === 'object' ) { + console.warn('DEPRECATION WARNING', 'The \'body\' wrapper is no longer needed'); + } else { + opts = args; + } + API.call('curl', opts, callback, args.options); + }; + var _CALL_INDEX = 1; + API.call = function _apiCall(m, a, cb, options) { + a = a || {}; + var lname = 'APICall_' + _CALL_INDEX; + if ( typeof a.__loading === 'undefined' || a.__loading === true ) { + API.createLoading(lname, {className: 'BusyNotification', tooltip: 'API Call'}); + } + if ( typeof cb !== 'function' ) { + throw new TypeError('call() expects a function as callback'); + } + if ( options && typeof options !== 'object' ) { + throw new TypeError('call() expects an object as options'); + } + _CALL_INDEX++; + var handler = OSjs.Core.getHandler(); + return handler.callAPI(m, a, function(response) { + API.destroyLoading(lname); + response = response || {}; + cb(response.error || false, response.result); + }, function(err) { + cb(err); + }, options); + }; + API.open = function _apiOpen(file, launchArgs) { + launchArgs = launchArgs || {}; + if ( !file.path ) { + throw new Error('Cannot API::open() without a path'); + } + var settingsManager = OSjs.Core.getSettingsManager(); + var wm = OSjs.Core.getWindowManager(); + var args = {file: file}; + function getApplicationNameByFile(file, forceList, callback) { + if ( !(file instanceof OSjs.VFS.File) ) { + throw new Error('This function excepts a OSjs.VFS.File object'); + } + var pacman = OSjs.Core.getPackageManager(); + var val = settingsManager.get('DefaultApplication', file.mime); + if ( !forceList && val ) { + if ( pacman.getPackage(val) ) { + callback([val]); + return; + } + } + callback(pacman.getPackagesByMime(file.mime)); + } + function setDefaultApplication(mime, app, callback) { + callback = callback || function() {}; + settingsManager.set('DefaultApplication', mime, app); + settingsManager.save('DefaultApplication', callback); + } + function _launch(name) { + if ( name ) { + API.launch(name, args, launchArgs.onFinished, launchArgs.onError, launchArgs.onConstructed); + } + } + function _launchApp(name, ar) { + API.launch(name, ar); + } + function _onDone(app) { + if ( app.length ) { + if ( app.length === 1 ) { + _launch(app[0]); + } else { + if ( wm ) { + API.createDialog('ApplicationChooser', { + file: file, + list: app + }, function(ev, btn, result) { + if ( btn !== 'ok' ) { + return; + } + _launch(result.name); + setDefaultApplication(file.mime, result.useDefault ? result.name : null); + }); + } else { + API.error(API._('ERR_FILE_OPEN'), + API._('ERR_FILE_OPEN_FMT', file.path), + API._('ERR_NO_WM_RUNNING') ); + } + } + } else { + API.error(API._('ERR_FILE_OPEN'), + API._('ERR_FILE_OPEN_FMT', file.path), + API._('ERR_APP_MIME_NOT_FOUND_FMT', file.mime) ); + } + } + if ( file.mime === 'osjs/application' ) { + _launchApp(Utils.filename(file.path), launchArgs); + } else if ( file.type === 'dir' ) { + var fm = settingsManager.instance('DefaultApplication').get('dir', 'ApplicationFileManager'); + _launchApp(fm, {path: file.path}); + } else { + if ( launchArgs.args ) { + Object.keys(launchArgs.args).forEach(function(i) { + args[i] = launchArgs.args[i]; + }); + } + getApplicationNameByFile(file, launchArgs.forceList, _onDone); + } + }; + API.relaunch = function _apiRelaunch(n) { + function relaunch(p) { + var data = null; + var args = {}; + if ( p instanceof OSjs.Core.Application ) { + data = p._getSessionData(); + } + try { + p.destroy(); // kill + } catch ( e ) { + console.warn('OSjs.API.relaunch()', e.stack, e); + } + if ( data !== null ) { + args = data.args; + args.__resume__ = true; + args.__windows__ = data.windows || []; + } + args.__preload__ = {force: true}; + setTimeout(function() { + API.launch(n, args); + }, 500); + } + API.getProcess(n).forEach(relaunch); + }; + API.launch = function _apiLaunch(name, args, ondone, onerror, onconstruct) { + args = args || {}; + var err; + var splash = null; + var instance = null; + var pargs = {}; + var packman = OSjs.Core.getPackageManager(); + var compability = Utils.getCompability(); + var metadata = packman.getPackage(name); + var running = API.getProcess(name, true); + var preloads = (function() { + var list = (metadata.preload || []).slice(0); + var additions = []; + function _add(chk) { + if ( chk && chk.preload ) { + chk.preload.forEach(function(p) { + additions.push(p); + }); + } + } + if ( metadata.depends instanceof Array ) { + metadata.depends.forEach(function(k) { + if ( !OSjs.Applications[k] ) { + _add(packman.getPackage(k)); + } + }); + } + var pkgs = packman.getPackages(false); + Object.keys(pkgs).forEach(function(pn) { + var p = pkgs[pn]; + if ( p.type === 'extension' && p.uses === name ) { + _add(p); + } + }); + list = additions.concat(list); + additions = []; + if ( metadata.scope === 'user' ) { + list = list.map(function(p) { + if ( p.src.substr(0, 1) !== '/' && !p.src.match(/^(https?|ftp)/) ) { + OSjs.VFS.url(p.src, function(error, url) { + if ( !error ) { + p.src = url; + } + }); + } + return p; + }); + } + return list; + })(); + function _createSplash() { + API.createLoading(name, {className: 'StartupNotification', tooltip: API._('LBL_STARTING') + ' ' + name}); + if ( !OSjs.Applications[name] ) { + if ( metadata.splash !== false ) { + splash = API.createSplash(metadata.name, metadata.icon); + } + } + } + function _destroySplash() { + API.destroyLoading(name); + if ( splash ) { + splash.destroy(); + splash = null; + } + } + function _onError(err, exception) { + _destroySplash(); + API.error(API._('ERR_APP_LAUNCH_FAILED'), + API._('ERR_APP_LAUNCH_FAILED_FMT', name), + err, exception, true); + (onerror || function() {})(err, name, args, exception); + } + function _onFinished(skip) { + _destroySplash(); + (ondone || function() {})(instance, metadata); + } + function _preLaunch(cb) { + var isCompatible = (function() { + var list = (metadata.compability || []).filter(function(c) { + if ( typeof compability[c] !== 'undefined' ) { + return !compability[c]; + } + return false; + }); + if ( list.length ) { + return API._('ERR_APP_LAUNCH_COMPABILITY_FAILED_FMT', name, list.join(', ')); + } + return true; + })(); + if ( isCompatible !== true ) { + throw new Error(isCompatible); + } + if ( metadata.singular === true && running ) { + if ( running instanceof OSjs.Core.Application ) { + console.warn('API::launch()', 'detected that this application is a singular and already running...'); + running._onMessage('attention', args); + _onFinished(true); + return; // muy importante! + } else { + throw new Error(API._('ERR_APP_LAUNCH_ALREADY_RUNNING_FMT', name)); + } + } + Utils.asyncs(_hooks.onApplicationPreload, function(qi, i, n) { + qi(name, args, preloads, function(p) { + if ( p && (p instanceof Array) ) { + preloads = p; + } + n(); + }); + }, function() { + _createSplash(); + cb(); + }); + API.triggerHook('onApplicationLaunch', [name, args]); + } + function _preload(cb) { + Utils.preload(preloads, function(total, failed, succeeded, data) { + if ( failed.length ) { + cb(API._('ERR_APP_PRELOAD_FAILED_FMT', name, failed.join(','))); + } else { + setTimeout(function() { + cb(false, data); + }, 0); + } + }, function(index, count, src, succeeded, failed, progress) { + if ( splash ) { + splash.update(progress, count); + } + }, pargs); + } + function _createProcess(preloadData, cb) { + function __onprocessinitfailed() { + if ( instance ) { + try { + instance.destroy(); + instance = null; + } catch ( ee ) { + console.warn('Something awful happened when trying to clean up failed launch Oo', ee); + console.warn(ee.stack); + } + } + } + if ( typeof OSjs.Applications[name] === 'undefined' ) { + throw new Error(API._('ERR_APP_RESOURCES_MISSING_FMT', name)); + } + if ( typeof OSjs.Applications[name] === 'function' ) { + OSjs.Applications[name](); + cb(false, true); + return; + } + function __onschemesloaded(scheme) { + try { + if ( metadata.classType === 'simple' ) { + instance = new OSjs.Core.Application(name, args, metadata); + OSjs.Applications[name].run(instance); + } else { + instance = new OSjs.Applications[name].Class(args, metadata); + } + (onconstruct || function() {})(instance, metadata); + } catch ( e ) { + console.warn('Error on constructing application', e, e.stack); + __onprocessinitfailed(); + cb(API._('ERR_APP_CONSTRUCT_FAILED_FMT', name, e), e); + return false; + } + try { + var settings = OSjs.Core.getSettingsManager().get(instance.__pname) || {}; + instance.init(settings, metadata, scheme); + API.triggerHook('onApplicationLaunched', [{ + application: instance, + name: name, + args: args, + settings: settings, + metadata: metadata + }]); + } catch ( ex ) { + console.warn('Error on init() application', ex, ex.stack); + __onprocessinitfailed(); + cb(API._('ERR_APP_INIT_FAILED_FMT', name, ex.toString()), ex); + return false; + } + return true; + } + var scheme = null; + if ( preloadData ) { + preloadData.forEach(function(f) { + if ( !scheme && f.item.type === 'scheme' ) { + scheme = f.data; + } + }); + } + if ( __onschemesloaded(scheme) ) { + cb(false, true); + } + } + if ( !name ) { + err = 'Cannot API::launch() witout a application name'; + _onError(err); + throw new Error(err); + } + if ( !metadata ) { + err = API._('ERR_APP_LAUNCH_MANIFEST_FAILED_FMT', name); + _onError(err); + throw new Error(err); + } + console.group('API::launch()', { + name: name, + args: args, + metadata: metadata, + preloads: preloads + }); + if ( args.__preload__ ) { // This is for relaunch() + pargs = args.__preload__; + delete args.__preload__; + } + pargs.max = (function(p) { + if ( p === true ) { + p = API.getConfig('Connection.PreloadParallel'); + } + return p; + })(metadata.preloadParallel); + try { + _preLaunch(function() { + _preload(function(err, res) { + if ( err ) { + _onError(err, res); + } else { + try { + _createProcess(res, function(err, res) { + if ( err ) { + _onError(err, res); + } else { + try { + _onFinished(res); + } catch ( e ) { + _onError(e.toString(), e); + } + } + }); + } catch ( e ) { + _onError(e.toString(), e); + } + } + }); + }); + } catch ( e ) { + _onError(e.toString()); + } + }; + API.launchList = function _apiLaunchList(list, onSuccess, onError, onFinished) { + list = list || []; + onSuccess = onSuccess || function() {}; + onError = onError || function() {}; + onFinished = onFinished || function() {}; + Utils.asyncs(list, function(s, current, next) { + if ( typeof s === 'string' ) { + var args = {}; + var spl = s.split('@'); + var name = spl[0]; + if ( typeof spl[1] !== 'undefined' ) { + try { + args = JSON.parse(spl[1]); + } catch ( e ) {} + } + s = { + name: name, + args: args + }; + } + var aname = s.name; + var aargs = (typeof s.args === 'undefined') ? {} : (s.args || {}); + if ( !aname ) { + console.warn('API::launchList() next()', 'No application name defined'); + next(); + return; + } + API.launch(aname, aargs, function(app, metadata) { + onSuccess(app, metadata, aname, aargs); + next(); + }, function(err, name, args) { + console.warn('API::launchList() _onError()', err); + onError(err, name, args); + next(); + }); + }, onFinished); + }; + API.getApplicationResource = function _apiGetAppResource(app, name, vfspath) { + if ( name.match(/^\//) ) { + return name; + } + name = name.replace(/^\.\//, ''); + function getName() { + var appname = null; + if ( app instanceof OSjs.Core.Process ) { + appname = app.__pname; + } else if ( typeof app === 'string' ) { + appname = app; + } + return appname; + } + function getResultPath(path, userpkg) { + path = Utils.checkdir(path); + if ( vfspath ) { + if ( userpkg ) { + path = path.substr(API.getConfig('Connection.FSURI').length); + } else { + path = 'osjs:///' + path; + } + } + return path; + } + return (function() { + var pacman = OSjs.Core.getPackageManager(); + var appname = getName(); + var pkg = pacman.getPackage(appname); + var path = ''; + if ( pkg ) { + if ( pkg.scope === 'user' ) { + path = API.getConfig('Connection.FSURI') + '/get/' + Utils.pathJoin(pkg.path, name); + } else { + path = API.getConfig('Connection.PackageURI') + '/' + pkg.path + '/' + name; + } + } + return getResultPath(path, pkg.scope === 'user'); + })(); + }; + API.getThemeCSS = function _apiGetThemeCSS(name) { + var root = API.getConfig('Connection.RootURI', '/'); + if ( name === null ) { + return root + 'blank.css'; + } + root = API.getConfig('Connection.ThemeURI'); + return Utils.checkdir(root + '/' + name + '.css'); + }; + API.getFileIcon = function _apiGetFileIcon(file, size, icon) { + icon = icon || 'mimetypes/gnome-fs-regular.png'; + if ( typeof file === 'object' && !(file instanceof OSjs.VFS.File) ) { + file = new OSjs.VFS.File(file); + } + if ( !file.filename ) { + throw new Error('Filename is required for getFileIcon()'); + } + var map = [ + {match: 'application/pdf', icon: 'mimetypes/gnome-mime-application-pdf.png'}, + {match: 'application/zip', icon: 'mimetypes/folder_tar.png'}, + {match: 'application/x-python', icon: 'mimetypes/stock_script.png'}, + {match: 'application/x-lua', icon: 'mimetypes/stock_script.png'}, + {match: 'application/javascript', icon: 'mimetypes/stock_script.png'}, + {match: 'text/html', icon: 'mimetypes/stock_script.png'}, + {match: 'text/xml', icon: 'mimetypes/stock_script.png'}, + {match: 'text/css', icon: 'mimetypes/stock_script.png'}, + {match: 'osjs/document', icon: 'mimetypes/gnome-mime-application-msword.png'}, + {match: 'osjs/draw', icon: 'mimetypes/image.png'}, + {match: /^text\//, icon: 'mimetypes/txt.png'}, + {match: /^audio\//, icon: 'mimetypes/sound.png'}, + {match: /^video\//, icon: 'mimetypes/video.png'}, + {match: /^image\//, icon: 'mimetypes/image.png'}, + {match: /^application\//, icon: 'mimetypes/binary.png'} + ]; + if ( file.type === 'dir' ) { + icon = 'places/folder.png'; + } else if ( file.type === 'trash' ) { + icon = 'places/user-trash.png'; + } else { + var mime = file.mime || 'application/octet-stream'; + map.every(function(iter) { + var match = false; + if ( typeof iter.match === 'string' ) { + match = (mime === iter.match); + } else { + match = mime.match(iter.match); + } + if ( match ) { + icon = iter.icon; + return false; + } + return true; + }); + } + return API.getIcon(icon, size); + }; + API.getThemeResource = function _apiGetThemeResource(name, type) { + name = name || null; + type = type || null; + var root = API.getConfig('Connection.ThemeURI'); + if ( !root.match(/^\//) ) { + root = API.getBrowserPath() + root; + } + function getName(str, theme) { + if ( !str.match(/^\//) ) { + if ( type === 'base' || type === null ) { + str = root + '/' + theme + '/' + str; + } else { + str = root + '/' + theme + '/' + type + '/' + str; + } + } + return str; + } + if ( name ) { + var wm = OSjs.Core.getWindowManager(); + var theme = (wm ? wm.getSetting('theme') : 'default') || 'default'; + name = getName(name, theme); + } + return Utils.checkdir(name); + }; + API.getSound = function _apiGetSound(name) { + name = name || null; + if ( name ) { + var wm = OSjs.Core.getWindowManager(); + var theme = wm ? wm.getSoundTheme() : 'default'; + var root = API.getConfig('Connection.SoundURI'); + var compability = Utils.getCompability(); + if ( !name.match(/^\//) ) { + var ext = 'oga'; + if ( !compability.audioTypes.ogg ) { + ext = 'mp3'; + } + name = root + '/' + theme + '/' + name + '.' + ext; + } + } + return Utils.checkdir(name); + }; + API.getIcon = function _apiGetIcon(name, size, app) { + name = name || null; + size = size || '16x16'; + app = app || null; + var root = API.getConfig('Connection.IconURI'); + var wm = OSjs.Core.getWindowManager(); + var theme = wm ? wm.getIconTheme() : 'default'; + function checkIcon() { + if ( name.match(/^\.\//) ) { + name = name.replace(/^\.\//, ''); + if ( (app instanceof OSjs.Core.Application) || (typeof app === 'string') ) { + return API.getApplicationResource(app, name); + } else { + if ( app !== null && typeof app === 'object' ) { + return API.getApplicationResource(app.className, name); + } else if ( typeof app === 'string' ) { + return API.getApplicationResource(app, name); + } + } + } else { + if ( !name.match(/^\//) ) { + name = root + '/' + theme + '/' + size + '/' + name; + } + } + return null; + } + if ( name && !name.match(/^(http|\/\/)/) ) { + var chk = checkIcon(); + if ( chk !== null ) { + return chk; + } + } + return Utils.checkdir(name); + }; + API.getConfig = function _apiGetConfig(path, defaultValue) { + var config = OSjs.Core.getConfig(); + if ( typeof path === 'string' ) { + var result = config[path]; + if ( path.indexOf('.') !== -1 ) { + var queue = path.split(/\./); + var ns = config; + queue.forEach(function(k, i) { + if ( i >= queue.length - 1 ) { + if ( ns ) { + result = ns[k]; + } + } else { + ns = ns[k]; + } + }); + } + if ( typeof result === 'undefined' && typeof defaultValue !== 'undefined' ) { + return defaultValue; + } + return typeof result === 'object' ? Utils.cloneObject(result) : result; + } + return config; + }; + API.getDefaultPath = function _apiGetDefaultPath(fallback) { + if ( fallback && fallback.match(/^\//) ) { + fallback = null; + } + return API.getConfig('VFS.Home') || fallback || 'osjs:///'; + }; + API.createNotification = function _apiCreateNotification(opts) { + var wm = OSjs.Core.getWindowManager(); + return wm.notification(opts); + }; + API.createDialog = function _apiCreateDialog(className, args, callback, parentObj) { + callback = callback || function() {}; + function cb() { + if ( parentObj ) { + if ( (parentObj instanceof OSjs.Core.Window) && parentObj._destroyed ) { + console.warn('API::createDialog()', 'INGORED EVENT: Window was destroyed'); + return; + } + if ( (parentObj instanceof OSjs.Core.Process) && parentObj.__destroyed ) { + console.warn('API::createDialog()', 'INGORED EVENT: Process was destroyed'); + return; + } + } + callback.apply(null, arguments); + } + var win = typeof className === 'string' ? new OSjs.Dialogs[className](args, cb) : className(args, cb); + if ( !parentObj ) { + var wm = OSjs.Core.getWindowManager(); + wm.addWindow(win, true); + } else if ( parentObj instanceof OSjs.Core.Window ) { + win._on('destroy', function() { + if ( parentObj ) { + parentObj._focus(); + } + }); + parentObj._addChild(win, true); + } else if ( parentObj instanceof OSjs.Core.Application ) { + parentObj._addWindow(win); + } + setTimeout(function() { + win._focus(); + }, 10); + return win; + }; + API.createLoading = function _apiCreateLoading(name, opts, panelId) { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + if ( wm.createNotificationIcon(name, opts, panelId) ) { + return name; + } + } + return false; + }; + API.destroyLoading = function _apiDestroyLoading(name, panelId) { + var wm = OSjs.Core.getWindowManager(); + if ( name ) { + if ( wm ) { + if ( wm.removeNotificationIcon(name, panelId) ) { + return true; + } + } + } + return false; + }; + API.checkPermission = function _apiCheckPermission(group) { + var user = OSjs.Core.getHandler().getUserData(); + var userGroups = user.groups || []; + if ( !(group instanceof Array) ) { + group = [group]; + } + var result = true; + if ( userGroups.indexOf('admin') < 0 ) { + group.every(function(g) { + if ( userGroups.indexOf(g) < 0 ) { + result = false; + } + return result; + }); + } + return result; + }; + API.createSplash = function _apiCreateSplash(name, icon, label, parentEl) { + label = label || API._('LBL_STARTING'); + parentEl = parentEl || document.body; + var splash = document.createElement('application-splash'); + splash.setAttribute('role', 'dialog'); + var img; + if ( icon ) { + img = document.createElement('img'); + img.alt = name; + img.src = API.getIcon(icon); + } + var titleText = document.createElement('b'); + titleText.appendChild(document.createTextNode(name)); + var title = document.createElement('span'); + title.appendChild(document.createTextNode(label + ' ')); + title.appendChild(titleText); + title.appendChild(document.createTextNode('...')); + var splashBar = document.createElement('gui-progress-bar'); + OSjs.GUI.Elements['gui-progress-bar'].build(splashBar); + if ( img ) { + splash.appendChild(img); + } + splash.appendChild(title); + splash.appendChild(splashBar); + parentEl.appendChild(splash); + return { + destroy: function() { + splash = Utils.$remove(splash); + img = null; + title = null; + titleText = null; + splashBar = null; + }, + update: function(p, c) { + if ( !splash || !splashBar ) { + return; + } + var per = c ? 0 : 100; + if ( c ) { + per = (p / c) * 100; + } + (new OSjs.GUI.Element(splashBar)).set('value', per); + } + }; + }; + API.error = function _apiError(title, message, error, exception, bugreport) { + bugreport = (function() { + if ( API.getConfig('BugReporting.enabled') ) { + return typeof bugreport === 'undefined' ? false : (bugreport ? true : false); + } + return false; + })(); + function _dialog() { + var wm = OSjs.Core.getWindowManager(); + if ( wm && wm._fullyLoaded ) { + try { + API.createDialog('Error', { + title: title, + message: message, + error: error, + exception: exception, + bugreport: bugreport + }); + return true; + } catch ( e ) { + console.warn('An error occured while creating Dialogs.Error', e); + console.warn('stack', e.stack); + } + } + return false; + } + API.blurMenu(); + if ( exception && (exception.message.match(/^Script Error/i) && String(exception.lineNumber).match(/^0/)) ) { + console.error('VENDOR ERROR', { + title: title, + message: message, + error: error, + exception: exception + }); + return; + } + if ( API.getConfig('MOCHAMODE') ) { + console.error(title, message, error, exception); + } else { + if ( _dialog() ) { + return; + } + window.alert(title + '\n\n' + message + '\n\n' + error); + } + }; + API.playSound = function _apiPlaySound(name, volume) { + var compability = Utils.getCompability(); + var wm = OSjs.Core.getWindowManager(); + var filename = wm ? wm.getSoundFilename(name) : null; + if ( !wm || !compability.audio || !wm.getSetting('enableSounds') || !filename ) { + return false; + } + if ( typeof volume === 'undefined' ) { + volume = 1.0; + } + var f = API.getSound(filename); + var a = new Audio(f); + a.volume = volume; + a.play(); + return a; + }; + API.setClipboard = function _apiSetClipboard(data) { + _CLIPBOARD = data; + }; + API.getClipboard = function _apiGetClipboard() { + return _CLIPBOARD; + }; + API.getServiceNotificationIcon = (function() { + var _instance; + return function _apiGetServiceNotificationIcon() { + if ( !_instance ) { + _instance = new ServiceNotificationIcon(); + } + return _instance; + }; + })(); + API.toggleFullscreen = (function() { + var _prev; + function trigger(el, state) { + function _request() { + if ( el.requestFullscreen ) { + el.requestFullscreen(); + } else if ( el.mozRequestFullScreen ) { + el.mozRequestFullScreen(); + } else if ( el.webkitRequestFullScreen ) { + el.webkitRequestFullScreen(Element.ALLOW_KEYBOARD_INPUT); + } + } + function _restore() { + if ( el.webkitCancelFullScreen ) { + el.webkitCancelFullScreen(); + } else if ( el.mozCancelFullScreen ) { + el.mozCancelFullScreen(); + } else if ( el.exitFullscreen ) { + el.exitFullscreen(); + } + } + if ( el ) { + if ( state ) { + _request(); + } else { + _restore(); + } + } + } + return function _apiToggleFullscreen(el, t) { + if ( typeof t === 'boolean' ) { + trigger(el, t); + } else { + if ( _prev && _prev !== el ) { + trigger(_prev, false); + } + trigger(el, _prev !== el); + } + _prev = el; + }; + })(); + API.isStandalone = function _apiIsStandlone() { + return API.getConfig('Connection.Type') === 'standalone' && window.location.protocol === 'file:'; + }; + API.getBrowserPath = function _apiGetBrowserPath() { + return (window.location.pathname || '/').replace(/index\.(.*)$/, ''); + } + API.signOut = function _apiSignOut() { + var handler = OSjs.Core.getHandler(); + var wm = OSjs.Core.getWindowManager(); + function signOut(save) { + API.playSound('LOGOUT'); + handler.logout(save, function() { + API.shutdown(); + }); + } + if ( wm ) { + var user = handler.getUserData() || {name: API._('LBL_UNKNOWN')}; + API.createDialog('Confirm', { + title: API._('DIALOG_LOGOUT_TITLE'), + message: API._('DIALOG_LOGOUT_MSG_FMT', user.name) + }, function(ev, btn) { + if ( btn === 'yes' ) { + signOut(true); + } else if ( btn === 'no' ) { + signOut(false); + } + }); + } else { + signOut(true); + } + }; + API.triggerHook = function _apiTriggerHook(name, args, thisarg) { + thisarg = thisarg || OSjs; + args = args || []; + if ( _hooks[name] ) { + _hooks[name].forEach(function(hook) { + if ( typeof hook === 'function' ) { + try { + hook.apply(thisarg, args); + } catch ( e ) { + console.warn('Error on Hook', e, e.stack); + } + } else { + console.warn('No such Hook', name); + } + }); + } + }; + API.addHook = function _apiAddHook(name, fn) { + if ( typeof _hooks[name] !== 'undefined' ) { + return _hooks[name].push(fn) - 1; + } + return -1; + }; + API.removeHook = function _apiRemoveHook(name, index) { + if ( typeof _hooks[name] !== 'undefined' ) { + if ( _hooks[name][index] ) { + _hooks[name][index] = null; + return true; + } + } + return false; + }; + API.shutdown = API.shutdown || function() {}; // init.js + API.isShuttingDown = API.isShuttingDown || function() {}; // init.js + API.createMenu = function() { + return OSjs.GUI.Helpers.createMenu.apply(null, arguments); + }; + API.blurMenu = function() { + return OSjs.GUI.Helpers.blurMenu.apply(null, arguments); + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + var _PROCS = []; // Running processes + function _kill(pid) { + if ( pid >= 0 && _PROCS[pid] ) { + var res = _PROCS[pid].destroy(); + console.warn('Killing application', pid, res); + if ( res !== false ) { + _PROCS[pid] = null; + return true; + } + } + return false; + } + function doKillAllProcesses(match) { + if ( match ) { + var isMatching; + if ( match instanceof RegExp && _PROCS ) { + isMatching = function(p) { + return p.__pname && p.__pname.match(match); + }; + } else if ( typeof match === 'string' ) { + isMatching = function(p) { + return p.__pname === match; + }; + } + if ( isMatching ) { + _PROCS.forEach(function(p) { + if ( p && isMatching(p) ) { + _kill(p.__pid); + } + }); + } + return; + } + _PROCS.forEach(function(proc, i) { + if ( proc ) { + proc.destroy(true); + } + _PROCS[i] = null; + }); + _PROCS = []; + } + function doKillProcess(pid) { + return _kill(pid); + } + function doProcessMessage(msg, obj, opts) { + opts = opts || {}; + var filter = opts.filter || function() { + return true; + }; + if ( typeof filter === 'string' ) { + var s = filter; + filter = function(p) { + return p.__pname === s; + }; + } + _PROCS.forEach(function(p, i) { + if ( p && (p instanceof OSjs.Core.Application || p instanceof OSjs.Core.Process) ) { + if ( filter(p) ) { + p._onMessage(msg, obj, opts); + } + } + }); + } + function doGetProcess(name, first) { + var result = first ? null : []; + if ( typeof name === 'number' ) { + return _PROCS[name]; + } + _PROCS.every(function(p, i) { + if ( p ) { + if ( p.__pname === name ) { + if ( first ) { + result = p; + return false; + } + result.push(p); + } + } + return true; + }); + return result; + } + function doGetProcesses() { + return _PROCS; + } + function Process(name, args, metadata) { + this.__pid = _PROCS.push(this) - 1; + this.__pname = name; + this.__args = args || {}; + this.__metadata = metadata || {}; + this.__started = new Date(); + this.__destroyed = false; + this.__evHandler = new OSjs.Helpers.EventHandler(name, [ + 'message', 'attention', 'hashchange', 'api', 'destroy', 'destroyWindow', 'vfs', + 'vfs:mount', 'vfs:unmount', 'vfs:mkdir', 'vfs:write', 'vfs:move', + 'vfs:copy', 'vfs:delete', 'vfs:upload', 'vfs:update' + ]); + this.__label = this.__metadata.name; + this.__path = this.__metadata.path; + this.__scope = this.__metadata.scope || 'system'; + this.__iter = this.__metadata.className; + } + Process.prototype.destroy = function() { + if ( !this.__destroyed ) { + this.__destroyed = true; + this._emit('destroy', []); + if ( this.__evHandler ) { + this.__evHandler = this.__evHandler.destroy(); + } + if ( this.__pid >= 0 ) { + _PROCS[this.__pid] = null; + } + return true; + } + return false; + }; + Process.prototype._onMessage = function(msg, obj, opts) { + opts = opts || {}; + var sourceId = opts.source; + if ( sourceId instanceof Process ) { + sourceId = sourceId.__pid; + } else if ( sourceId instanceof OSjs.Core.Window ) { + sourceId = sourceId._app ? sourceId._app.__pid : -1; + } + if ( this.__evHandler && sourceId !== this.__pid ) { + this.__evHandler.emit('message', [msg, obj, opts]); + if ( msg.substr(0, 3) === 'vfs' ) { + this.__evHandler.emit('vfs', [msg, obj, opts]); + } + this.__evHandler.emit(msg, [obj, opts, msg]); + } + }; + Process.prototype._emit = function(k, args) { + return this.__evHandler.emit(k, args); + }; + Process.prototype._on = function(k, func) { + return this.__evHandler.on(k, func, this); + }; + Process.prototype._off = function(k, idx) { + return this.__evHandler.off(k, idx); + }; + Process.prototype._api = function(method, args, callback, showLoading) { + var self = this; + function cb(err, res) { + if ( self.__destroyed ) { + console.warn('Process::_api()', 'INGORED RESPONSE: Process was closed'); + return; + } + callback(err, res); + } + this._emit('api', [method]); + return OSjs.API.call('application', { + application: this.__iter, + path: this.__path, + method: method, + 'arguments': args, __loading: showLoading + }, cb); + }; + Process.prototype._getArgument = function(k) { + return typeof this.__args[k] === 'undefined' ? null : this.__args[k]; + }; + Process.prototype._getArguments = function() { + return this.__args; + }; + Process.prototype._getResource = function(src) { + return API.getApplicationResource(this, src); + }; + Process.prototype._setArgument = function(k, v) { + this.__args[k] = v; + }; + OSjs.Core.Process = Object.seal(Process); + OSjs.API.killAll = doKillAllProcesses; + OSjs.API.kill = doKillProcess; + OSjs.API.message = doProcessMessage; + OSjs.API.getProcess = doGetProcess; + OSjs.API.getProcesses = doGetProcesses; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API, Process) { + 'use strict'; + function Application(name, args, metadata, settings) { + this.__inited = false; + this.__mainwindow = null; + this.__scheme = null; + this.__windows = []; + this.__settings = {}; + this.__destroying = false; + try { + this.__settings = OSjs.Core.getSettingsManager().instance(name, settings || {}); + } catch ( e ) { + console.warn('Application::construct()', 'An error occured while loading application settings', e); + console.warn(e.stack); + this.__settings = OSjs.Core.getSettingsManager().instance(name, {}); + } + Process.apply(this, arguments); + } + Application.prototype = Object.create(Process.prototype); + Application.constructor = Process; + Application.prototype.init = function(settings, metadata, scheme) { + var wm = OSjs.Core.getWindowManager(); + var self = this; + function focusLastWindow() { + var last; + if ( wm ) { + self.__windows.forEach(function(win, i) { + if ( win ) { + wm.addWindow(win); + last = win; + } + }); + } + if ( last ) { + last._focus(); + } + } + if ( !this.__inited ) { + if ( scheme ) { + this._setScheme(scheme); + } + this.__settings.set(null, settings); + this.__inited = true; + this.__evHandler.emit('init', [settings, metadata, scheme]); + focusLastWindow(); + } + }; + Application.prototype.destroy = function(sourceWid) { + if ( this.__destroying || this.__destroyed ) { // From 'process.js' + return true; + } + this.__destroying = true; + this.__windows.forEach(function(w) { + try { + if ( w && w._wid !== sourceWid ) { + w.destroy(); + } + } catch ( e ) { + console.warn('Application::destroy()', e, e.stack); + } + }); + this.__mainwindow = null; + this.__settings = {}; + this.__windows = []; + if ( this.__scheme ) { + this.__scheme.destroy(); + } + this.__scheme = null; + var result = Process.prototype.destroy.apply(this, arguments); + return result; + }; + Application.prototype._onMessage = function(msg, obj, args) { + if ( this.__destroying || this.__destroyed ) { + return false; + } + if ( msg === 'destroyWindow' ) { + if ( obj._name === this.__mainwindow ) { + this.destroy(obj._wid); + } else { + this._removeWindow(obj); + } + } else if ( msg === 'attention' ) { + if ( this.__windows.length && this.__windows[0] ) { + this.__windows[0]._focus(); + } + } + return Process.prototype._onMessage.apply(this, arguments); + }; + Application.prototype._loadScheme = function(s, cb) { + var scheme = OSjs.GUI.createScheme(this._getResource(s)); + scheme.load(function __onApplicationLoadScheme(error, result) { + if ( error ) { + console.error('Application::_loadScheme()', error); + } + cb(scheme); + }); + this._setScheme(scheme); + }; + Application.prototype._addWindow = function(w, cb, setmain) { + if ( !(w instanceof OSjs.Core.Window) ) { + throw new TypeError('Application::_addWindow() expects Core.Window'); + } + this.__windows.push(w); + if ( setmain || this.__windows.length === 1 ) { + this.__mainwindow = w._name; + } + var wm = OSjs.Core.getWindowManager(); + if ( this.__inited ) { + if ( wm ) { + wm.addWindow(w); + } + if ( w._properties.start_focused ) { + setTimeout(function() { + w._focus(); + }, 5); + } + } + (cb || function() {})(w, wm); + return w; + }; + Application.prototype._removeWindow = function(w) { + if ( !(w instanceof OSjs.Core.Window) ) { + throw new TypeError('Application::_removeWindow() expects Core.Window'); + } + var self = this; + this.__windows.forEach(function(win, i) { + if ( win ) { + if ( win._wid === w._wid ) { + win.destroy(); + self.__windows.splice(i, 1); + return false; + } + } + return true; + }); + }; + Application.prototype._getWindow = function(value, key) { + key = key || 'name'; + if ( value === null ) { + value = this.__mainwindow; + } + var result = key === 'tag' ? [] : null; + this.__windows.every(function(win, i) { + if ( win ) { + if ( win['_' + key] === value ) { + if ( key === 'tag' ) { + result.push(win); + } else { + result = win; + return false; + } + } + } + return true; + }); + return result; + }; + Application.prototype._getWindowByName = function(name) { + return this._getWindow(name); + }; + Application.prototype._getWindowsByTag = function(tag) { + return this._getWindow(tag, 'tag'); + }; + Application.prototype._getWindows = function() { + return this.__windows; + }; + Application.prototype._getMainWindow = function() { + return this._getWindow(this.__mainwindow, 'name'); + }; + Application.prototype._getSetting = function(k) { + return this.__settings.get(k); + }; + Application.prototype._getSessionData = function() { + var args = this.__args; + var wins = this.__windows; + var data = {name: this.__pname, args: args, windows: []}; + wins.forEach(function(win, i) { + if ( win && win._properties.allow_session ) { + data.windows.push({ + name : win._name, + dimension : win._dimension, + position : win._position, + state : win._state + }); + } + }); + return data; + }; + Application.prototype._getScheme = function() { + return this.__scheme; + }; + Application.prototype._setSetting = function(k, v, save, saveCallback) { + save = (typeof save === 'undefined' || save === true); + this.__settings.set(k, v, save ? (saveCallback || function() {}) : false); + }; + Application.prototype._setScheme = function(s) { + this.__scheme = s; + }; + OSjs.Core.Application = Object.seal(Application); +})(OSjs.Utils, OSjs.API, OSjs.Core.Process); + +(function(Utils, API, Process) { + 'use strict'; + function Service(name, args, metadata) { + Process.apply(this, arguments); + } + Service.prototype = Object.create(Process.prototype); + Service.constructor = Process; + Service.prototype.init = function() { + }; + OSjs.Core.Service = Object.seal(Service); +})(OSjs.Utils, OSjs.API, OSjs.Core.Process); + +(function(Utils, API, GUI, Process) { + 'use strict'; + function _noEvent(ev) { + OSjs.API.blurMenu(); + ev.preventDefault(); + ev.stopPropagation(); + return false; + } + function camelCased(str) { + return str.replace(/_([a-z])/g, function(g) { + return g[1].toUpperCase(); + }); + } + var getNextZindex = (function() { + var _lzindex = 1; + var _ltzindex = 100000; + return function(ontop) { + if ( typeof ontop !== 'undefined' && ontop === true ) { + return (_ltzindex += 2); + } + return (_lzindex += 2); + }; + })(); + function stopPropagation(ev) { + if ( ev ) { + ev.stopPropagation(); + } + return false; + } + function getWindowSpace() { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + return wm.getWindowSpace(); + } + return Utils.getRect(); + } + function waitForAnimation(win, cb) { + var wm = OSjs.Core.getWindowManager(); + var anim = wm ? wm.getSetting('animations') : false; + if ( anim ) { + win._animationCallback = cb; + } else { + cb(); + } + } + var createMediaQueries = (function() { + var queries; + function _createQueries() { + var result = {}; + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + var qs = wm._settings.get('mediaQueries') || {}; + Object.keys(qs).forEach(function(k) { + if ( qs[k] ) { + result[k] = function(w, h, ref) { + return w <= qs[k]; + }; + } + }); + } + return result; + } + return function() { + if ( !queries ) { + queries = _createQueries(); + } + return queries; + }; + })(); + function checkMediaQueries(win) { + if ( !win._$element ) { + return; + } + var qs = win._properties.media_queries || {}; + var w = win._dimension.w; + var h = win._dimension.h; + var n = ''; + var k; + for ( k in qs ) { + if ( qs.hasOwnProperty(k) ) { + if ( qs[k](w, h, win) ) { + n = k; + break; + } + } + } + win._$element.setAttribute('data-media', n); + } + var Window = (function() { + var _WID = 0; + var _DEFAULT_WIDTH = 200; + var _DEFAULT_HEIGHT = 200; + var _DEFAULT_MIN_HEIGHT = 150; + var _DEFAULT_MIN_WIDTH = 150; + var _DEFAULT_SND_VOLUME = 1.0; + var _NAMES = []; + return function(name, opts, appRef, schemeRef) { + var self = this; + if ( _NAMES.indexOf(name) >= 0 ) { + throw new Error(API._('ERR_WIN_DUPLICATE_FMT', name)); + } + if ( appRef && !(appRef instanceof OSjs.Core.Application) ) { + throw new TypeError('appRef given was not instance of Core.Application'); + } + if ( schemeRef && !(schemeRef instanceof OSjs.GUI.Scheme) ) { + throw new TypeError('schemeRef given was not instance of GUI.Scheme'); + } + opts = Utils.argumentDefaults(opts, { + icon: API.getThemeResource('wm.png', 'wm'), + width: _DEFAULT_WIDTH, + height: _DEFAULT_HEIGHT, + title: name, + tag: name + }); + this._$element = null; + this._$root = null; + this._$top = null; + this._$winicon = null; + this._$loading = null; + this._$disabled = null; + this._$resize = null; + this._$warning = null; + this._opts = opts; + this._app = appRef || null; + this._scheme = schemeRef || null; + this._destroyed = false; + this._restored = false; + this._loaded = false; + this._initialized = false; + this._disabled = true; + this._loading = false; + this._wid = _WID; + this._icon = opts.icon; + this._name = name; + this._title = opts.title; + this._tag = opts.tag; + this._position = {x:opts.x, y:opts.y}; + this._dimension = {w:opts.width, h:opts.height}; + this._children = []; + this._parent = null; + this._origtitle = this._title; + this._lastDimension = this._dimension; + this._lastPosition = this._position; + this._sound = null; + this._soundVolume = _DEFAULT_SND_VOLUME; + this._properties = { + gravity : null, + allow_move : true, + allow_resize : true, + allow_minimize : true, + allow_maximize : true, + allow_close : true, + allow_windowlist : true, + allow_drop : false, + allow_iconmenu : true, + allow_ontop : true, + allow_hotkeys : true, + allow_session : true, + key_capture : false, + start_focused : true, + min_width : _DEFAULT_MIN_HEIGHT, + min_height : _DEFAULT_MIN_WIDTH, + max_width : null, + max_height : null, + media_queries : createMediaQueries() + }; + this._state = { + focused : false, + modal : false, + minimized : false, + maximized : false, + ontop : false, + onbottom : false + }; + this._animationCallback = null; + this._queryTimer = null; + this._evHandler = new OSjs.Helpers.EventHandler(name, [ + 'focus', 'blur', 'destroy', 'maximize', 'minimize', 'restore', + 'move', 'moved', 'resize', 'resized', + 'keydown', 'keyup', 'keypress', + 'drop', 'drop:upload', 'drop:file' + ]); + Object.keys(opts).forEach(function(k) { + if ( typeof self._properties[k] !== 'undefined' ) { + self._properties[k] = opts[k]; + } else if ( typeof self._state[k] !== 'undefined' && k !== 'focused' ) { + self._state[k] = opts[k]; + } else if ( ('sound', 'sound_volume').indexOf(k) !== -1 ) { + self['_' + camelCased(k)] = opts[k]; + } + }); + (function _initPosition(properties, position) { + if ( !properties.gravity && (typeof position.x === 'undefined') || (typeof position.y === 'undefined') ) { + var wm = OSjs.Core.getWindowManager(); + var np = wm ? wm.getWindowPosition() : {x:0, y:0}; + position.x = np.x; + position.y = np.y; + } + })(this._properties, this._position); + (function _initDimension(properties, dimension) { + if ( properties.min_height && (dimension.h < properties.min_height) ) { + dimension.h = properties.min_height; + } + if ( properties.max_width && (dimension.w < properties.max_width) ) { + dimension.w = properties.max_width; + } + if ( properties.max_height && (dimension.h > properties.max_height) ) { + dimension.h = properties.max_height; + } + if ( properties.max_width && (dimension.w > properties.max_width) ) { + dimension.w = properties.max_width; + } + })(this._properties, this._dimension); + (function _initRestore(position, dimension) { + if ( appRef && appRef.__args && appRef.__args.__windows__ ) { + appRef.__args.__windows__.forEach(function(restore) { + if ( !self._restored && restore.name && restore.name === self._name ) { + position.x = restore.position.x; + position.y = restore.position.y; + if ( self._properties.allow_resize ) { + dimension.w = restore.dimension.w; + dimension.h = restore.dimension.h; + } + self._restored = true; + } + }); + } + })(this._position, this._dimension); + (function _initGravity(properties, position, dimension, restored) { + var grav = properties.gravity; + if ( grav && !restored ) { + if ( grav === 'center' ) { + position.y = (window.innerHeight / 2) - (self._dimension.h / 2); + position.x = (window.innerWidth / 2) - (self._dimension.w / 2); + } else { + var space = getWindowSpace(); + if ( grav.match(/^south/) ) { + position.y = space.height - dimension.h; + } else { + position.y = space.top; + } + if ( grav.match(/west$/) ) { + position.x = space.left; + } else { + position.x = space.width - dimension.w; + } + } + } + })(this._properties, this._position, this._dimension, this._restored); + _WID++; + }; + })(); + Window.prototype.init = function(_wm, _app, _scheme) { + var self = this; + if ( this._initialized || this._loaded ) { + return this._$root; + } + this._$element = Utils.$create('application-window', { + className: (function(n, t) { + var classNames = ['Window', Utils.$safeName(n)]; + if ( t && (n !== t) ) { + classNames.push(Utils.$safeName(t)); + } + return classNames; + })(this._name, this._tag).join(' '), + style: { + width: this._dimension.w + 'px', + height: this._dimension.h + 'px', + top: this._position.y + 'px', + left: this._position.x + 'px', + zIndex: getNextZindex(this._state.ontop) + }, + data: { + window_id: this._wid, + allow_resize: this._properties.allow_resize, + allow_minimize: this._properties.allow_minimize, + allow_maximize: this._properties.allow_maximize, + allow_close: this._properties.allow_close + }, + aria: { + role: 'application', + live: 'polite', + hidden: 'false' + } + }); + this._$root = document.createElement('application-window-content'); + this._$resize = document.createElement('application-window-resize'); + ['nw', 'n', 'ne', 'e', 'se', 's', 'sw', 'w'].forEach(function(i) { + var h = document.createElement('application-window-resize-handle'); + h.setAttribute('data-direction', i); + self._$resize.appendChild(h); + h = null; + }); + this._$loading = document.createElement('application-window-loading'); + this._$disabled = document.createElement('application-window-disabled'); + this._$top = document.createElement('application-window-top'); + this._$winicon = document.createElement('application-window-icon'); + this._$winicon.setAttribute('role', 'button'); + this._$winicon.setAttribute('aria-haspopup', 'true'); + this._$winicon.setAttribute('aria-label', 'Window Menu'); + var windowTitle = document.createElement('application-window-title'); + windowTitle.setAttribute('role', 'heading'); + Utils.$bind(this._$loading, 'mousedown', _noEvent); + Utils.$bind(this._$disabled, 'mousedown', _noEvent); + var preventTimeout; + function _onanimationend(ev) { + if ( typeof self._animationCallback === 'function') { + clearTimeout(preventTimeout); + preventTimeout = setTimeout(function() { + self._animationCallback(ev); + self._animationCallback = false; + preventTimeout = clearTimeout(preventTimeout); + }, 10); + } + } + Utils.$bind(this._$element, 'transitionend', _onanimationend); + Utils.$bind(this._$element, 'animationend', _onanimationend); + Utils.$bind(this._$element, 'mousedown', function(ev) { + self._focus(); + return stopPropagation(ev); + }); + Utils.$bind(this._$element, 'contextmenu', function(ev) { + var r = Utils.$isFormElement(ev); + if ( !r ) { + ev.preventDefault(); + ev.stopPropagation(); + } + OSjs.API.blurMenu(); + return !!r; + }); + Utils.$bind(this._$top, 'click', function(ev) { + var t = ev.isTrusted ? ev.target : (ev.relatedTarget || ev.target); + ev.preventDefault(); + if ( t ) { + if ( t.tagName.match(/^APPLICATION\-WINDOW\-BUTTON/) ) { + self._onWindowButtonClick(ev, t, t.getAttribute('data-action')); + } else if ( t.tagName === 'APPLICATION-WINDOW-ICON' ) { + ev.stopPropagation(); + self._onWindowIconClick(ev, t); + } + } + }, true); + Utils.$bind(windowTitle, 'mousedown', _noEvent); + Utils.$bind(windowTitle, 'dblclick', function() { + self._maximize(); + }); + (function _initDnD(properties, main, compability) { + if ( properties.allow_drop && compability.dnd ) { + var border = document.createElement('div'); + border.className = 'WindowDropRect'; + OSjs.GUI.Helpers.createDroppable(main, { + onOver: function(ev, el, args) { + main.setAttribute('data-dnd-state', 'true'); + }, + onLeave : function() { + main.setAttribute('data-dnd-state', 'false'); + }, + onDrop : function() { + main.setAttribute('data-dnd-state', 'false'); + }, + onItemDropped: function(ev, el, item, args) { + main.setAttribute('data-dnd-state', 'false'); + return self._onDndEvent(ev, 'itemDrop', item, args, el); + }, + onFilesDropped: function(ev, el, files, args) { + main.setAttribute('data-dnd-state', 'false'); + return self._onDndEvent(ev, 'filesDrop', files, args, el); + } + }); + } + })(this._properties, this._$element, Utils.getCompability()); + windowTitle.appendChild(document.createTextNode(this._title)); + this._$top.appendChild(this._$winicon); + this._$top.appendChild(windowTitle); + this._$top.appendChild(Utils.$create('application-window-button-minimize', { + className: 'application-window-button-entry', + data: { + action: 'minimize' + }, + aria: { + role: 'button', + label: 'Minimize Window' + } + })); + this._$top.appendChild(Utils.$create('application-window-button-maximize', { + className: 'application-window-button-entry', + data: { + action: 'maximize' + }, + aria: { + role: 'button', + label: 'Maximize Window' + } + })); + this._$top.appendChild(Utils.$create('application-window-button-close', { + className: 'application-window-button-entry', + data: { + action: 'close' + }, + aria: { + role: 'button', + label: 'Close Window' + } + })); + this._$loading.appendChild(document.createElement('application-window-loading-indicator')); + this._$element.appendChild(this._$top); + this._$element.appendChild(this._$root); + this._$element.appendChild(this._$resize); + this._$element.appendChild(this._$disabled); + document.body.appendChild(this._$element); + this._onChange('create'); + this._toggleLoading(false); + this._toggleDisabled(false); + this._setIcon(API.getIcon(this._icon, null, this._app)); + this._updateMarkup(); + if ( this._sound ) { + API.playSound(this._sound, this._soundVolume); + } + this._initialized = true; + this._emit('init', [this._$root, _scheme]); + return this._$root; + }; + Window.prototype._inited = function() { + if ( this._loaded ) { + return; + } + this._loaded = true; + this._onResize(); + if ( !this._restored ) { + if ( this._state.maximized ) { + this._maximize(true); + } else if ( this._state.minimized ) { + this._minimize(true); + } + } + var self = this; + var inittimeout = setTimeout(function() { + self._emit('inited', [self._scheme]); + inittimeout = clearTimeout(inittimeout); + }, 10); + if ( this._app ) { + this._app._onMessage('initedWindow', this, {}); + } + }; + Window.prototype.destroy = function(shutdown) { + var self = this; + if ( this._destroyed ) { + return false; + } + this._emit('destroy'); + this._destroyed = true; + var wm = OSjs.Core.getWindowManager(); + function _removeDOM() { + self._setWarning(null); + self._$root = null; + self._$top = null; + self._$winicon = null; + self._$loading = null; + self._$disabled = null; + self._$resize = null; + self._$warning = null; + self._$element = Utils.$remove(self._$element); + } + function _destroyDOM() { + if ( self._$element ) { + self._$element.querySelectorAll('*').forEach(function(iter) { + if ( iter ) { + Utils.$unbind(iter); + } + }); + } + if ( self._parent ) { + self._parent._removeChild(self); + } + self._parent = null; + self._removeChildren(); + } + function _destroyWin() { + if ( wm ) { + wm.removeWindow(self); + } + var curWin = wm ? wm.getCurrentWindow() : null; + if ( curWin && curWin._wid === self._wid ) { + wm.setCurrentWindow(null); + } + var lastWin = wm ? wm.getLastWindow() : null; + if ( lastWin && lastWin._wid === self._wid ) { + wm.setLastWindow(null); + } + } + function _animateClose(fn) { + if ( API.isShuttingDown() ) { + fn(); + } else { + if ( self._$element ) { + var anim = wm ? wm.getSetting('animations') : false; + if ( anim ) { + self._$element.setAttribute('data-hint', 'closing'); + self._animationCallback = fn; + var animatetimeout = setTimeout(function() { + if ( self._animationCallback ) { + self._animationCallback(); + } + animatetimeout = clearTimeout(animatetimeout); + }, 1000); + } else { + self._$element.style.display = 'none'; + fn(); + } + } + } + } + this._onChange('close'); + _animateClose(function() { + _removeDOM(); + }); + _destroyDOM(); + _destroyWin(); + if ( this._app ) { + this._app._onMessage('destroyWindow', this, {}); + } + if ( this._evHandler ) { + this._evHandler.destroy(); + } + this._scheme = null; + this._app = null; + this._evHandler = null; + this._args = {}; + this._queryTimer = clearTimeout(this._queryTimer); + return true; + }; + Window.prototype._find = function(id) { + return this._scheme ? this._scheme.find(this, id) : null; + }; + Window.prototype._findByQuery = function(q, root, all) { + return this._scheme ? this._scheme.findByQuery(this, q, root, all) : null; + }; + Window.prototype._emit = function(k, args) { + if ( !this._destroyed ) { + if ( this._evHandler ) { + return this._evHandler.emit(k, args); + } + } + return false; + }; + Window.prototype._on = function(k, func) { + if ( this._evHandler ) { + return this._evHandler.on(k, func, this); + } + return false; + }; + Window.prototype._off = function(k, idx) { + if ( this._evHandler ) { + return this._evHandler.off(k, idx); + } + return false; + }; + Window.prototype._addChild = function(w, wmAdd, wmFocus) { + w._parent = this; + var wm = OSjs.Core.getWindowManager(); + if ( wmAdd && wm ) { + wm.addWindow(w, wmFocus); + } + this._children.push(w); + return w; + }; + Window.prototype._removeChild = function(w) { + var self = this; + this._children.forEach(function(child, i) { + if ( child && child._wid === w._wid ) { + child.destroy(); + self._children[i] = null; + } + }); + }; + Window.prototype._getChild = function(value, key) { + key = key || 'wid'; + var result = key === 'tag' ? [] : null; + this._children.every(function(child, i) { + if ( child ) { + if ( key === 'tag' ) { + result.push(child); + } else { + if ( child['_' + key] === value ) { + result = child; + return false; + } + } + } + return true; + }); + return result; + }; + Window.prototype._getChildById = function(id) { + return this._getChild(id, 'wid'); + }; + Window.prototype._getChildByName = function(name) { + return this._getChild(name, 'name'); + }; + Window.prototype._getChildrenByTag = function(tag) { + return this._getChild(tag, 'tag'); + }; + Window.prototype._getChildren = function() { + return this._children; + }; + Window.prototype._removeChildren = function() { + if ( this._children && this._children.length ) { + this._children.forEach(function(child, i) { + if ( child ) { + child.destroy(); + } + }); + } + this._children = []; + }; + Window.prototype._close = function() { + if ( this._disabled || this._destroyed ) { + return false; + } + this._blur(); + this.destroy(); + return true; + }; + Window.prototype._minimize = function(force) { + var self = this; + if ( !this._properties.allow_minimize || this._destroyed ) { + return false; + } + if ( !force && this._state.minimized ) { + this._restore(false, true); + return true; + } + this._blur(); + this._state.minimized = true; + this._$element.setAttribute('data-minimized', 'true'); + waitForAnimation(this, function() { + self._$element.style.display = 'none'; + self._emit('minimize'); + }); + this._onChange('minimize'); + var wm = OSjs.Core.getWindowManager(); + var win = wm ? wm.getCurrentWindow() : null; + if ( win && win._wid === this._wid ) { + wm.setCurrentWindow(null); + } + this._updateMarkup(); + return true; + }; + Window.prototype._maximize = function(force) { + var self = this; + if ( !this._properties.allow_maximize || this._destroyed || !this._$element ) { + return false; + } + if ( !force && this._state.maximized ) { + this._restore(true, false); + return true; + } + this._lastPosition = {x: this._position.x, y: this._position.y}; + this._lastDimension = {w: this._dimension.w, h: this._dimension.h}; + this._state.maximized = true; + var s = this._getMaximizedSize(); + this._$element.style.zIndex = getNextZindex(this._state.ontop); + this._$element.style.top = (s.top) + 'px'; + this._$element.style.left = (s.left) + 'px'; + this._$element.style.width = (s.width) + 'px'; + this._$element.style.height = (s.height) + 'px'; + this._$element.setAttribute('data-maximized', 'true'); + this._dimension.w = s.width; + this._dimension.h = s.height; + this._position.x = s.left; + this._position.y = s.top; + this._focus(); + waitForAnimation(this, function() { + self._emit('maximize'); + }); + this._onChange('maximize'); + this._onResize(); + this._updateMarkup(); + return true; + }; + Window.prototype._restore = function(max, min) { + var self = this; + if ( !this._$element || this._destroyed ) { + return; + } + function restoreMaximized() { + if ( max && self._state.maximized ) { + self._move(self._lastPosition.x, self._lastPosition.y); + self._resize(self._lastDimension.w, self._lastDimension.h); + self._state.maximized = false; + self._$element.setAttribute('data-maximized', 'false'); + } + } + function restoreMinimized() { + if ( min && self._state.minimized ) { + self._$element.style.display = 'block'; + self._$element.setAttribute('data-minimized', 'false'); + self._state.minimized = false; + } + } + max = (typeof max === 'undefined') ? true : (max === true); + min = (typeof min === 'undefined') ? true : (min === true); + restoreMaximized(); + restoreMinimized(); + waitForAnimation(this, function() { + self._emit('restore'); + }); + this._onChange('restore'); + this._onResize(); + this._focus(); + this._updateMarkup(); + }; + Window.prototype._focus = function(force) { + if ( !this._$element || this._destroyed ) { + return false; + } + this._toggleAttentionBlink(false); + this._$element.style.zIndex = getNextZindex(this._state.ontop); + this._$element.setAttribute('data-focused', 'true'); + var wm = OSjs.Core.getWindowManager(); + var win = wm ? wm.getCurrentWindow() : null; + if ( win && win._wid !== this._wid ) { + win._blur(); + } + if ( wm ) { + wm.setCurrentWindow(this); + wm.setLastWindow(this); + } + if ( !this._state.focused || force) { + this._onChange('focus'); + this._emit('focus'); + } + this._state.focused = true; + this._updateMarkup(); + return true; + }; + Window.prototype._blur = function(force) { + if ( !this._$element || this._destroyed || (!force && !this._state.focused) ) { + return false; + } + this._$element.setAttribute('data-focused', 'false'); + this._state.focused = false; + this._onChange('blur'); + this._emit('blur'); + this._blurGUI(); + var wm = OSjs.Core.getWindowManager(); + var win = wm ? wm.getCurrentWindow() : null; + if ( win && win._wid === this._wid ) { + wm.setCurrentWindow(null); + } + this._updateMarkup(); + return true; + }; + Window.prototype._blurGUI = function() { + this._$root.querySelectorAll('input, textarea, select, iframe, button').forEach(function(el) { + el.blur(); + }); + }; + Window.prototype._resizeTo = function(dw, dh, limit, move, container, force) { + var self = this; + if ( !this._$element || (dw <= 0 || dh <= 0) ) { + return; + } + limit = (typeof limit === 'undefined' || limit === true); + var dx = 0; + var dy = 0; + if ( container ) { + var cpos = Utils.$position(container, this._$root); + dx = parseInt(cpos.left, 10); + dy = parseInt(cpos.top, 10); + } + var space = this._getMaximizedSize(); + var cx = this._position.x + dx; + var cy = this._position.y + dy; + var newW = dw; + var newH = dh; + var newX = null; + var newY = null; + function _limitTo() { + if ( (cx + newW) > space.width ) { + if ( move ) { + newW = space.width; + newX = space.left; + } else { + newW = (space.width - cx) + dx; + } + } else { + newW += dx; + } + if ( (cy + newH) > space.height ) { + if ( move ) { + newH = space.height; + newY = space.top; + } else { + newH = (space.height - cy + self._$top.offsetHeight) + dy; + } + } else { + newH += dy; + } + } + function _moveTo() { + if ( newX !== null ) { + self._move(newX, self._position.y); + } + if ( newY !== null ) { + self._move(self._position.x, newY); + } + } + function _resizeFinished() { + var wm = OSjs.Core.getWindowManager(); + var anim = wm ? wm.getSetting('animations') : false; + if ( anim ) { + self._animationCallback = function() { + self._emit('resized'); + }; + } else { + self._emit('resized'); + } + } + if ( limit ) { + _limitTo(); + } + this._resize(newW, newH, force); + _moveTo(); + _resizeFinished(); + }; + Window.prototype._resize = function(w, h, force) { + if ( !this._$element || this._destroyed ) { + return false; + } + var p = this._properties; + if ( !force ) { + if ( !p.allow_resize ) { + return false; + } + (function() { + if ( !isNaN(w) && w ) { + if ( w < p.min_width ) { + w = p.min_width; + } + if ( p.max_width !== null ) { + if ( w > p.max_width ) { + w = p.max_width; + } + } + } + })(); + (function() { + if ( !isNaN(h) && h ) { + if ( h < p.min_height ) { + h = p.min_height; + } + if ( p.max_height !== null ) { + if ( h > p.max_height ) { + h = p.max_height; + } + } + } + })(); + } + if ( !isNaN(w) && w ) { + this._$element.style.width = w + 'px'; + this._dimension.w = w; + } + if ( !isNaN(h) && h ) { + this._$element.style.height = h + 'px'; + this._dimension.h = h; + } + this._onResize(); + return true; + }; + Window.prototype._moveTo = function(pos) { + var wm = OSjs.Core.getWindowManager(); + if ( !wm ) { + return; + } + var s = wm.getWindowSpace(); + var cx = this._position.x; + var cy = this._position.y; + if ( pos === 'left' ) { + this._move(s.left, cy); + } else if ( pos === 'right' ) { + this._move((s.width - this._dimension.w), cy); + } else if ( pos === 'top' ) { + this._move(cx, s.top); + } else if ( pos === 'bottom' ) { + this._move(cx, (s.height - this._dimension.h)); + } + }; + Window.prototype._move = function(x, y) { + if ( !this._$element || this._destroyed || !this._properties.allow_move ) { + return false; + } + if ( typeof x === 'undefined' || typeof y === 'undefined') { + return false; + } + this._$element.style.top = y + 'px'; + this._$element.style.left = x + 'px'; + this._position.x = x; + this._position.y = y; + return true; + }; + Window.prototype._toggleDisabled = function(t) { + if ( this._$disabled ) { + this._$disabled.style.display = t ? 'block' : 'none'; + } + this._disabled = t ? true : false; + this._updateMarkup(); + }; + Window.prototype._toggleLoading = function(t) { + if ( this._$loading ) { + this._$loading.style.display = t ? 'block' : 'none'; + } + this._loading = t ? true : false; + this._updateMarkup(); + }; + Window.prototype._updateMarkup = function(ui) { + if ( !this._$element ) { + return; + } + var t = this._loading || this._disabled; + var d = this._disabled; + var h = this._state.minimized; + var f = !this._state.focused; + this._$element.setAttribute('aria-busy', String(t)); + this._$element.setAttribute('aria-hidden', String(h)); + this._$element.setAttribute('aria-disabled', String(d)); + this._$root.setAttribute('aria-hidden', String(f)); + if ( !ui ) { + return; + } + var dmax = this._properties.allow_maximize === true ? 'inline-block' : 'none'; + var dmin = this._properties.allow_minimize === true ? 'inline-block' : 'none'; + var dclose = this._properties.allow_close === true ? 'inline-block' : 'none'; + this._$top.querySelector('application-window-button-maximize').style.display = dmax; + this._$top.querySelector('application-window-button-minimize').style.display = dmin; + this._$top.querySelector('application-window-button-close').style.display = dclose; + var dres = this._properties.allow_resize === true; + this._$element.setAttribute('data-allow-resize', String(dres)); + }; + Window.prototype._toggleAttentionBlink = function(t) { + if ( !this._$element || this._destroyed || this._state.focused ) { + return false; + } + var el = this._$element; + var self = this; + function _blink(stat) { + if ( el ) { + if ( stat ) { + Utils.$addClass(el, 'WindowAttentionBlink'); + } else { + Utils.$removeClass(el, 'WindowAttentionBlink'); + } + } + self._onChange(stat ? 'attention_on' : 'attention_off'); + } + _blink(t); + return true; + }; + Window.prototype._nextTabIndex = function(ev) { + var nextElement = OSjs.GUI.Helpers.getNextElement(ev.shiftKey, document.activeElement, this._$root); + if ( nextElement ) { + if ( Utils.$hasClass(nextElement, 'gui-data-view') ) { + new OSjs.GUI.ElementDataView(nextElement)._call('focus'); + } else { + try { + nextElement.focus(); + } catch ( e ) {} + } + } + }; + Window.prototype._onDndEvent = function(ev, type, item, args, el) { + if ( this._disabled || this._destroyed ) { + return false; + } + this._emit('drop', [ev, type, item, args, el]); + if ( item ) { + if ( type === 'filesDrop' ) { + this._emit('drop:upload', [ev, item, args, el]); + } else if ( type === 'itemDrop' && item.type === 'file' && item.data ) { + this._emit('drop:file', [ev, new OSjs.VFS.File(item.data || {}), args, el]); + } + } + return true; + }; + Window.prototype._onKeyEvent = function(ev, type) { + if ( this._destroyed ) { + return false; + } + if ( type === 'keydown' && ev.keyCode === Utils.Keys.TAB ) { + this._nextTabIndex(ev); + } + this._emit(type, [ev, ev.keyCode, ev.shiftKey, ev.ctrlKey, ev.altKey]); + return true; + }; + Window.prototype._onResize = function() { + clearTimeout(this._queryTimer); + var self = this; + this._queryTimer = setTimeout(function() { + checkMediaQueries(self); + self._queryTimer = clearTimeout(self._queryTimer); + }, 20); + }; + Window.prototype._onWindowIconClick = function(ev, el) { + if ( !this._properties.allow_iconmenu || this._destroyed ) { + return; + } + var self = this; + var control = [ + [this._properties.allow_minimize, function() { + return { + title: API._('WINDOW_MINIMIZE'), + icon: API.getIcon('actions/stock_up.png'), + onClick: function(name, iter) { + self._minimize(); + } + }; + }], + [this._properties.allow_maximize, function() { + return { + title: API._('WINDOW_MAXIMIZE'), + icon: API.getIcon('actions/window_fullscreen.png'), + onClick: function(name, iter) { + self._maximize(); + self._focus(); + } + }; + }], + [this._state.maximized, function() { + return { + title: API._('WINDOW_RESTORE'), + icon: API.getIcon('actions/view-restore.png'), + onClick: function(name, iter) { + self._restore(); + self._focus(); + } + }; + }], + [this._properties.allow_ontop, function() { + if ( self._state.ontop ) { + return { + title: API._('WINDOW_ONTOP_OFF'), + icon: API.getIcon('actions/window-new.png'), + onClick: function(name, iter) { + self._state.ontop = false; + if ( self._$element ) { + self._$element.style.zIndex = getNextZindex(false); + } + self._focus(); + } + }; + } + return { + title: API._('WINDOW_ONTOP_ON'), + icon: API.getIcon('actions/window-new.png'), + onClick: function(name, iter) { + self._state.ontop = true; + if ( self._$element ) { + self._$element.style.zIndex = getNextZindex(true); + } + self._focus(); + } + }; + }], + [this._properties.allow_close, function() { + return { + title: API._('WINDOW_CLOSE'), + icon: API.getIcon('actions/window-close.png'), + onClick: function(name, iter) { + self._close(); + } + }; + }] + ]; + var list = []; + control.forEach(function(iter) { + if (iter[0] ) { + list.push(iter[1]()); + } + }); + OSjs.API.createMenu(list, ev); + }; + Window.prototype._onWindowButtonClick = function(ev, el, btn) { + this._blurGUI(); + if ( btn === 'close' ) { + this._close(); + } else if ( btn === 'minimize' ) { + this._minimize(); + } else if ( btn === 'maximize' ) { + this._maximize(); + } + }; + Window.prototype._onChange = function(ev, byUser) { + ev = ev || ''; + if ( ev ) { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.eventWindow(ev, this); + } + } + }; + Window.prototype._getMaximizedSize = function() { + var s = getWindowSpace(); + if ( !this._$element || this._destroyed ) { + return s; + } + var topMargin = 23; + var borderSize = 0; + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + var theme = wm.getStyleTheme(true); + if ( theme && theme.style && theme.style.window ) { + topMargin = theme.style.window.margin; + borderSize = theme.style.window.border; + } + } + s.left += borderSize; + s.top += borderSize; + s.width -= (borderSize * 2); + s.height -= topMargin + (borderSize * 2); + return Object.freeze(s); + }; + Window.prototype._getViewRect = function() { + return this._$element ? Object.freeze(Utils.$position(this._$element)) : null; + }; + Window.prototype._getRoot = function() { + return this._$root; + }; + Window.prototype._getZindex = function() { + if ( this._$element ) { + return parseInt(this._$element.style.zIndex, 10); + } + return -1; + }; + Window.prototype._setTitle = function(t, append, delimiter) { + if ( !this._$element || this._destroyed ) { + return; + } + delimiter = delimiter || '-'; + var tel = this._$element.getElementsByTagName('application-window-title')[0]; + var text = []; + if ( append ) { + text = [this._origtitle, delimiter, t]; + } else { + text = [t || this._origtitle]; + } + this._title = text.join(' ') || this._origtitle; + if ( tel ) { + Utils.$empty(tel); + tel.appendChild(document.createTextNode(this._title)); + } + this._onChange('title'); + this._updateMarkup(); + }; + Window.prototype._setIcon = function(i) { + if ( this._$winicon ) { + this._$winicon.title = this._title; + this._$winicon.style.backgroundImage = 'url(' + i + ')'; + } + this._icon = i; + this._onChange('icon'); + }; + Window.prototype._setWarning = function(message) { + var self = this; + this._$warning = Utils.$remove(this._$warning); + if ( this._destroyed || message === null ) { + return; + } + message = message || ''; + var container = document.createElement('application-window-warning'); + var close = document.createElement('div'); + close.innerHTML = 'X'; + Utils.$bind(close, 'click', function() { + self._setWarning(null); + }); + var msg = document.createElement('div'); + msg.appendChild(document.createTextNode(message)); + container.appendChild(close); + container.appendChild(msg); + this._$warning = container; + this._$root.appendChild(this._$warning); + }; + Window.prototype._setProperty = function(p, v) { + if ( (v === '' || v === null) || !this._$element || (typeof this._properties[p] === 'undefined') ) { + return; + } + this._properties[p] = String(v) === 'true'; + this._updateMarkup(true); + }; + OSjs.Core.Window = Object.seal(Window); +})(OSjs.Utils, OSjs.API, OSjs.GUI, OSjs.Core.Process); + +(function(Utils, API, Window) { + 'use strict'; + function DialogWindow(className, opts, args, callback) { + var self = this; + opts = opts || {}; + args = args || {}; + callback = callback || function() {}; + if ( typeof callback !== 'function' ) { + throw new TypeError('DialogWindow expects a callback Function, gave: ' + typeof callback); + } + Window.apply(this, [className, opts]); + this._properties.gravity = 'center'; + this._properties.allow_resize = false; + this._properties.allow_minimize = false; + this._properties.allow_maximize = false; + this._properties.allow_windowlist = false; + this._properties.allow_session = false; + this._state.ontop = true; + this._tag = 'DialogWindow'; + if ( args.scheme && args.scheme instanceof OSjs.GUI.Scheme ) { + this.scheme = args.scheme; + delete args.scheme; + } else { + this.scheme = OSjs.GUI.DialogScheme.get(); + } + this.args = args; + this.className = className; + this.buttonClicked = false; + this.closeCallback = function(ev, button, result) { + if ( self._destroyed ) { + return; + } + self.buttonClicked = true; + callback.apply(self, arguments); + self._close(); + }; + } + DialogWindow.prototype = Object.create(Window.prototype); + DialogWindow.constructor = Window; + DialogWindow.prototype.init = function() { + var self = this; + var root = Window.prototype.init.apply(this, arguments); + root.setAttribute('role', 'dialog'); + this.scheme.render(this, this.className.replace(/Dialog$/, ''), root, 'application-dialog', function(node) { + node.querySelectorAll('gui-label').forEach(function(el) { + if ( el.childNodes.length && el.childNodes[0].nodeType === 3 && el.childNodes[0].nodeValue ) { + var label = el.childNodes[0].nodeValue; + Utils.$empty(el); + el.appendChild(document.createTextNode(API._(label))); + } + }); + }); + var buttonMap = { + ButtonOK: 'ok', + ButtonCancel: 'cancel', + ButtonYes: 'yes', + ButtonNo: 'no' + }; + var focusButtons = ['ButtonCancel', 'ButtonNo']; + Object.keys(buttonMap).forEach(function(id) { + if ( self.scheme.findDOM(self, id) ) { + var btn = self.scheme.find(self, id); + btn.on('click', function(ev) { + self.onClose(ev, buttonMap[id]); + }); + if ( focusButtons.indexOf(id) >= 0 ) { + btn.focus(); + } + } + }); + Utils.$addClass(root, 'DialogWindow'); + return root; + }; + DialogWindow.prototype.onClose = function(ev, button) { + this.closeCallback(ev, button, null); + }; + DialogWindow.prototype._close = function() { + if ( !this.buttonClicked ) { + this.onClose(null, 'cancel', null); + } + return Window.prototype._close.apply(this, arguments); + }; + DialogWindow.prototype._onKeyEvent = function(ev) { + Window.prototype._onKeyEvent.apply(this, arguments); + if ( ev.keyCode === Utils.Keys.ESC ) { + this.onClose(ev, 'cancel'); + } + }; + DialogWindow.parseMessage = function(msg) { + msg = Utils.$escape(msg || '').replace(/\*\*(.*)\*\*/g, '$1'); + var tmp = document.createElement('div'); + tmp.innerHTML = msg; + var frag = document.createDocumentFragment(); + for ( var i = 0; i < tmp.childNodes.length; i++ ) { + frag.appendChild(tmp.childNodes[i].cloneNode(true)); + } + tmp = null; + return frag; + }; + OSjs.Core.DialogWindow = Object.seal(DialogWindow); +})(OSjs.Utils, OSjs.API, OSjs.Core.Window); + +(function(Utils, API, Process, Window) { + 'use strict'; + var _WM; // Running Window Manager process + function BehaviourState(win, action, mousePosition) { + var self = this; + this.win = win; + this.$element = win._$element; + this.$top = win._$top; + this.$handle = win._$resize; + this.rectWorkspace = _WM.getWindowSpace(true); + this.rectWindow = { + x: win._position.x, + y: win._position.y, + w: win._dimension.w, + h: win._dimension.h, + r: win._dimension.w + win._position.x, + b: win._dimension.h + win._position.y + }; + var theme = _WM.getStyleTheme(true); + if ( !theme.style ) { + theme.style = {'window': {margin: 0, border: 0}}; + } + this.theme = { + topMargin : theme.style.window.margin || 0, + borderSize: theme.style.window.border || 0 + }; + this.snapping = { + cornerSize : _WM.getSetting('windowCornerSnap') || 0, + windowSize : _WM.getSetting('windowSnap') || 0 + }; + this.action = action; + this.moved = false; + this.direction = null; + this.startX = mousePosition.x; + this.startY = mousePosition.y; + this.minWidth = win._properties.min_width; + this.minHeight = win._properties.min_height; + var windowRects = []; + _WM.getWindows().forEach(function(w) { + if ( w && w._wid !== win._wid ) { + var pos = w._position; + var dim = w._dimension; + var rect = { + left : pos.x - self.theme.borderSize, + top : pos.y - self.theme.borderSize, + width: dim.w + (self.theme.borderSize * 2), + height: dim.h + (self.theme.borderSize * 2) + self.theme.topMargin + }; + rect.right = rect.left + rect.width; + rect.bottom = (pos.y + dim.h) + self.theme.topMargin + self.theme.borderSize;//rect.top + rect.height; + windowRects.push(rect); + } + }); + this.snapRects = windowRects; + } + BehaviourState.prototype.getRect = function() { + var win = this.win; + return { + left: win._position.x, + top: win._position.y, + width: win._dimension.w, + height: win._dimension.h + }; + }; + BehaviourState.prototype.calculateDirection = function() { + var dir = Utils.$position(this.$handle); + var dirX = this.startX - dir.left; + var dirY = this.startY - dir.top; + var dirD = 20; + var direction = 's'; + var checks = { + nw: (dirX <= dirD) && (dirY <= dirD), + n: (dirX > dirD) && (dirY <= dirD), + w: (dirX <= dirD) && (dirY >= dirD), + ne: (dirX >= (dir.width - dirD)) && (dirY <= dirD), + e: (dirX >= (dir.width - dirD)) && (dirY > dirD), + se: (dirX >= (dir.width - dirD)) && (dirY >= (dir.height - dirD)), + sw: (dirX <= dirD) && (dirY >= (dir.height - dirD)) + }; + Object.keys(checks).forEach(function(k) { + if ( checks[k] ) { + direction = k; + } + }); + this.direction = direction; + }; + function createWindowBehaviour(win, wm) { + var current = null; + var newRect = {}; + function onMouseDown(ev, action, win, mousePosition) { + OSjs.API.blurMenu(); + ev.preventDefault(); + if ( win._state.maximized ) { + return; + } + current = new BehaviourState(win, action, mousePosition); + newRect = {}; + win._focus(); + if ( action === 'move' ) { + current.$element.setAttribute('data-hint', 'moving'); + } else { + current.calculateDirection(); + current.$element.setAttribute('data-hint', 'resizing'); + newRect = current.getRect(); + } + win._emit('preop'); + Utils.$bind(document, 'mousemove:movewindow', _onMouseMove, false); + Utils.$bind(document, 'mouseup:movewindowstop', _onMouseUp, false); + function _onMouseMove(ev, pos) { + if ( wm._mouselock ) { + onMouseMove(ev, action, win, pos); + } + } + function _onMouseUp(ev, pos) { + onMouseUp(ev, action, win, pos); + Utils.$unbind(document, 'mousemove:movewindow'); + Utils.$unbind(document, 'mouseup:movewindowstop'); + } + } + function onMouseUp(ev, action, win, mousePosition) { + if ( !current ) { + return; + } + if ( current.moved ) { + if ( action === 'move' ) { + win._onChange('move', true); + win._emit('moved', [win._position.x, win._position.y]); + } else if ( action === 'resize' ) { + win._onChange('resize', true); + win._emit('resized', [win._dimension.w, win._dimension.h]); + } + } + current.$element.setAttribute('data-hint', ''); + win._emit('postop'); + current = null; + } + function onMouseMove(ev, action, win, mousePosition) { + if ( !_WM.getMouseLocked() || !action || !current ) { + return; + } + var result; + var dx = mousePosition.x - current.startX; + var dy = mousePosition.y - current.startY; + if ( action === 'move' ) { + result = onWindowMove(ev, mousePosition, dx, dy); + } else { + result = onWindowResize(ev, mousePosition, dx, dy); + } + if ( result ) { + if ( result.left !== null && result.top !== null ) { + win._move(result.left, result.top); + win._emit('move', [result.left, result.top]); + } + if ( result.width !== null && result.height !== null ) { + win._resize(result.width, result.height, true); + win._emit('resize', [result.width, result.height]); + } + } + current.moved = true; + } + function onWindowResize(ev, mousePosition, dx, dy) { + if ( !current || !current.direction ) { + return false; + } + var nw, nh, nl, nt; + (function() { // North/South + if ( current.direction.indexOf('s') !== -1 ) { + nh = current.rectWindow.h + dy; + newRect.height = Math.max(current.minHeight, nh); + } else if ( current.direction.indexOf('n') !== -1 ) { + nh = current.rectWindow.h - dy; + nt = current.rectWindow.y + dy; + if ( nt < current.rectWorkspace.top ) { + nt = current.rectWorkspace.top; + nh = newRect.height; + } else { + if ( nh < current.minHeight ) { + nt = current.rectWindow.b - current.minHeight; + } + } + newRect.height = Math.max(current.minHeight, nh); + newRect.top = nt; + } + })(); + (function() { // East/West + if ( current.direction.indexOf('e') !== -1 ) { + nw = current.rectWindow.w + dx; + newRect.width = Math.max(current.minWidth, nw); + } else if ( current.direction.indexOf('w') !== -1 ) { + nw = current.rectWindow.w - dx; + nl = current.rectWindow.x + dx; + if ( nw < current.minWidth ) { + nl = current.rectWindow.r - current.minWidth; + } + newRect.width = Math.max(current.minWidth, nw); + newRect.left = nl; + } + })(); + return newRect; + } + function onWindowMove(ev, mousePosition, dx, dy) { + var newWidth = null; + var newHeight = null; + var newLeft = current.rectWindow.x + dx; + var newTop = current.rectWindow.y + dy; + var borderSize = current.theme.borderSize; + var topMargin = current.theme.topMargin; + var cornerSnapSize = current.snapping.cornerSize; + var windowSnapSize = current.snapping.windowSize; + if ( newTop < current.rectWorkspace.top ) { + newTop = current.rectWorkspace.top; + } + var newRight = newLeft + current.rectWindow.w + (borderSize * 2); + var newBottom = newTop + current.rectWindow.h + topMargin + (borderSize); + if ( cornerSnapSize > 0 ) { + if ( ((newLeft - borderSize) <= cornerSnapSize) && ((newLeft - borderSize) >= -cornerSnapSize) ) { // Left + newLeft = borderSize; + } else if ( (newRight >= (current.rectWorkspace.width - cornerSnapSize)) && (newRight <= (current.rectWorkspace.width + cornerSnapSize)) ) { // Right + newLeft = current.rectWorkspace.width - current.rectWindow.w - borderSize; + } + if ( (newTop <= (current.rectWorkspace.top + cornerSnapSize)) && (newTop >= (current.rectWorkspace.top - cornerSnapSize)) ) { // Top + newTop = current.rectWorkspace.top + (borderSize); + } else if ( + (newBottom >= ((current.rectWorkspace.height + current.rectWorkspace.top) - cornerSnapSize)) && + (newBottom <= ((current.rectWorkspace.height + current.rectWorkspace.top) + cornerSnapSize)) + ) { // Bottom + newTop = (current.rectWorkspace.height + current.rectWorkspace.top) - current.rectWindow.h - topMargin - borderSize; + } + } + if ( windowSnapSize > 0 ) { + current.snapRects.every(function(rect) { + if ( newRight >= (rect.left - windowSnapSize) && newRight <= (rect.left + windowSnapSize) ) { // Left + newLeft = rect.left - (current.rectWindow.w + (borderSize * 2)); + return false; + } + if ( (newLeft - borderSize) <= (rect.right + windowSnapSize) && (newLeft - borderSize) >= (rect.right - windowSnapSize) ) { // Right + newLeft = rect.right + (borderSize * 2); + return false; + } + if ( newBottom >= (rect.top - windowSnapSize) && newBottom <= (rect.top + windowSnapSize) ) { // Top + newTop = rect.top - (current.rectWindow.h + (borderSize * 2) + topMargin); + return false; + } + if ( newTop <= (rect.bottom + windowSnapSize) && newTop >= (rect.bottom - windowSnapSize) ) { // Bottom + newTop = rect.bottom + borderSize * 2; + return false; + } + return true; + }); + } + return {left: newLeft, top: newTop, width: newWidth, height: newHeight}; + } + if ( win._properties.allow_move ) { + Utils.$bind(win._$top, 'mousedown', function(ev, pos) { + onMouseDown(ev, 'move', win, pos); + }, true); + } + if ( win._properties.allow_resize ) { + Utils.$bind(win._$resize, 'mousedown', function(ev, pos) { + onMouseDown(ev, 'resize', win, pos); + }); + } + } + function WindowManager(name, ref, args, metadata, settings) { + this._$notifications = null; + this._windows = []; + this._settings = OSjs.Core.getSettingsManager().instance(name, settings); + this._currentWin = null; + this._lastWin = null; + this._mouselock = true; + this._stylesheet = null; + this._sessionLoaded = false; + this._fullyLoaded = false; + this._scheme = null; + this.__name = (name || 'WindowManager'); + this.__path = metadata.path; + this.__iter = metadata.iter; + Process.apply(this, [this.__name, args, metadata]); + _WM = (ref || this); + } + WindowManager.prototype = Object.create(Process.prototype); + WindowManager.prototype.destroy = function() { + var self = this; + this.destroyStylesheet(); + Utils.$unbind(document, 'mouseout:windowmanager'); + Utils.$unbind(document, 'mouseenter:windowmanager'); + this._windows.forEach(function(win, i) { + if ( win ) { + win.destroy(true); + self._windows[i] = null; + } + }); + if ( this._scheme ) { + this._scheme.destroy(); + } + this._windows = []; + this._currentWin = null; + this._lastWin = null; + this._scheme = null; + _WM = null; + return Process.prototype.destroy.apply(this, []); + }; + WindowManager.prototype.init = function(metadata, settings, scheme) { + this._scheme = scheme; + var self = this; + Utils.$bind(document, 'mouseout:windowmanager', function(ev) { + self._onMouseLeave(ev); + }); + Utils.$bind(document, 'mouseenter:windowmanager', function(ev) { + self._onMouseLeave(ev); + }); + }; + WindowManager.prototype.setup = function(cb) { + }; + WindowManager.prototype.getWindow = function(name) { + var result = null; + this._windows.every(function(w) { + if ( w && w._name === name ) { + result = w; + } + return w ? false : true; + }); + return result; + }; + WindowManager.prototype.addWindow = function(w, focus) { + if ( !(w instanceof Window) ) { + console.warn('WindowManager::addWindow()', 'Got', w); + throw new TypeError('given argument was not instance of Core.Window'); + } + try { + w.init(this, w._app, w._scheme); + } catch ( e ) { + console.error('WindowManager::addWindow()', '=>', 'Window::init()', e, e.stack); + } + createWindowBehaviour(w, this); + this._windows.push(w); + w._inited(); + if ( focus === true || (w instanceof OSjs.Core.DialogWindow) ) { + setTimeout(function() { + w._focus(); + }, 10); + } + return w; + }; + WindowManager.prototype.removeWindow = function(w) { + var self = this; + if ( !(w instanceof Window) ) { + console.warn('WindowManager::removeWindow()', 'Got', w); + throw new TypeError('given argument was not instance of Core.Window'); + } + var result = false; + this._windows.every(function(win, i) { + if ( win && win._wid === w._wid ) { + self._windows[i] = null; + result = true; + } + return result ? false : true; + }); + return result; + }; + WindowManager.prototype.applySettings = function(settings, force, save, triggerWatch) { + settings = settings || {}; + var result = force ? settings : Utils.mergeObject(this._settings.get(), settings); + this._settings.set(null, result, save, triggerWatch); + return true; + }; + WindowManager.prototype.createStylesheet = function(styles, rawStyles) { + this.destroyStylesheet(); + var innerHTML = []; + Object.keys(styles).forEach(function(key) { + var rules = []; + Object.keys(styles[key]).forEach(function(r) { + rules.push(Utils.format(' {0}: {1};', r, styles[key][r])); + }); + rules = rules.join('\n'); + innerHTML.push(Utils.format('{0} {\n{1}\n}', key, rules)); + }); + innerHTML = innerHTML.join('\n'); + if ( rawStyles ) { + innerHTML += '\n' + rawStyles; + } + var style = document.createElement('style'); + style.type = 'text/css'; + style.id = 'WMGeneratedStyles'; + style.innerHTML = innerHTML; + document.getElementsByTagName('head')[0].appendChild(style); + this._stylesheet = style; + }; + WindowManager.prototype.destroyStylesheet = function() { + if ( this._stylesheet ) { + if ( this._stylesheet.parentNode ) { + this._stylesheet.parentNode.removeChild(this._stylesheet); + } + } + this._stylesheet = null; + }; + WindowManager.prototype.onKeyDown = function(ev, win) { + }; + WindowManager.prototype.onOrientationChange = function(ev, orientation) { + }; + WindowManager.prototype.onSessionLoaded = function() { + if ( this._sessionLoaded ) { + return false; + } + this._sessionLoaded = true; + return true; + }; + WindowManager.prototype.resize = function(ev, rect) { + }; + WindowManager.prototype.notification = function() { + }; + WindowManager.prototype.createNotificationIcon = function() { + }; + WindowManager.prototype.removeNotificationIcon = function() { + }; + WindowManager.prototype.eventWindow = function(ev, win) { + }; + WindowManager.prototype.showSettings = function() { + }; + WindowManager.prototype._onMouseEnter = function(ev) { + this._mouselock = true; + }; + WindowManager.prototype._onMouseLeave = function(ev) { + var from = ev.relatedTarget || ev.toElement; + if ( !from || from.nodeName === 'HTML' ) { + this._mouselock = false; + } else { + this._mouselock = true; + } + }; + WindowManager.prototype.getDefaultSetting = function() { + return null; + }; + WindowManager.prototype.getPanel = function() { + return null; + }; + WindowManager.prototype.getPanels = function() { + return []; + }; + WindowManager.prototype.getStyleTheme = function(returnMetadata) { + return returnMetadata ? {} : 'default'; + }; + WindowManager.prototype.getSoundTheme = function() { + return 'default'; + }; + WindowManager.prototype.getSoundFilename = function(k) { + return null; + }; + WindowManager.prototype.getIconTheme = function() { + return 'default'; + }; + WindowManager.prototype.getStyleThemes = function() { + return API.getConfig('Styles', []); + }; + WindowManager.prototype.getSoundThemes = function() { + return API.getConfig('Sounds', []); + }; + WindowManager.prototype.getIconThemes = function() { + return API.getConfig('Icons', []); + }; + WindowManager.prototype.setSetting = function(k, v) { + return this._settings.set(k, v); + }; + WindowManager.prototype.getWindowSpace = function() { + return Utils.getRect(); + }; + WindowManager.prototype.getWindowPosition = (function() { + var _LNEWX = 0; + var _LNEWY = 0; + return function() { + if ( _LNEWY >= (window.innerHeight - 100) ) { + _LNEWY = 0; + } + if ( _LNEWX >= (window.innerWidth - 100) ) { + _LNEWX = 0; + } + return {x: _LNEWX += 10, y: _LNEWY += 10}; + }; + })(); + WindowManager.prototype.getSetting = function(k) { + return this._settings.get(k); + }; + WindowManager.prototype.getSettings = function() { + return this._settings.get(); + }; + WindowManager.prototype.getWindows = function() { + return this._windows; + }; + WindowManager.prototype.getCurrentWindow = function() { + return this._currentWin; + }; + WindowManager.prototype.setCurrentWindow = function(w) { + this._currentWin = w || null; + }; + WindowManager.prototype.getLastWindow = function() { + return this._lastWin; + }; + WindowManager.prototype.setLastWindow = function(w) { + this._lastWin = w || null; + }; + WindowManager.prototype.getMouseLocked = function() { + return this._mouselock; + }; + OSjs.Core.WindowManager = Object.seal(WindowManager); + OSjs.Core.getWindowManager = function() { + return _WM; + }; +})(OSjs.Utils, OSjs.API, OSjs.Core.Process, OSjs.Core.Window); + +(function(Utils, VFS, API) { + 'use strict'; + var PackageManager = (function() { + var blacklist = []; + var packages = {}; + return Object.seal({ + load: function(callback) { + var self = this; + callback = callback || {}; + function loadMetadata(cb) { + self._loadMetadata(function(err) { + if ( err ) { + callback(err, false, PackageManager); + return; + } + var len = Object.keys(packages).length; + if ( len ) { + cb(); + return; + } + callback(false, 'No packages found!', PackageManager); + }); + } + loadMetadata(function() { + self._loadExtensions(function() { + callback(true, false, PackageManager); + }); + }); + }, + _loadExtensions: function(callback) { + var preloads = []; + Object.keys(packages).forEach(function(k) { + var iter = packages[k]; + if ( iter.type === 'extension' && iter.sources ) { + iter.sources.forEach(function(p) { + preloads.push(p); + }); + } + }); + if ( preloads.length ) { + Utils.preload(preloads, function(total, failed) { + callback(); + }); + } else { + callback(); + } + }, + _loadMetadata: function(callback) { + var rootURI = API.getBrowserPath().replace(/\/$/, '/packages/'); // FIXME + function checkEntry(key, iter, scope) { + iter = Utils.cloneObject(iter); + iter.type = iter.type || 'application'; + if ( scope ) { + iter.scope = scope; + } + if ( iter.preload ) { + iter.preload.forEach(function(it) { + if ( it.src && !it.src.match(/^(\/)|(http)|(ftp)/) ) { + if ( iter.scope === 'user' ) { + it.src = Utils.pathJoin(iter.path, it.src); + } else { + it.src = Utils.pathJoin(rootURI, key, it.src); + } + } + }); + } + return iter; + } + if ( API.isStandalone() || API.getConfig('PackageManager.UseStaticManifest') === true ) { + var uri = Utils.checkdir(API.getConfig('Connection.MetadataURI')); + Utils.preload([uri], function(total, failed) { + if ( failed.length ) { + callback('Failed to load package manifest', failed); + return; + } + packages = {}; + var list = OSjs.Core.getMetadata(); + Object.keys(list).forEach(function(name) { + var iter = list[name]; + packages[iter.className] = checkEntry(name, iter); + }); + callback(); + }); + return; + } + var paths = OSjs.Core.getSettingsManager().instance('PackageManager').get('PackagePaths', []); + API.call('packages', {command: 'list', args: {paths: paths}}, function(err, res) { + if ( res ) { + packages = {}; + Object.keys(res).forEach(function(key) { + var iter = res[key]; + if ( iter && !packages[iter.className] ) { + packages[iter.className] = checkEntry(key, iter); + } + }); + } + callback(); + }); + }, + generateUserMetadata: function(callback) { + var self = this; + var paths = OSjs.Core.getSettingsManager().instance('PackageManager').get('PackagePaths', []); + API.call('packages', {command: 'cache', args: {action: 'generate', scope: 'user', paths: paths}}, function() { + self._loadMetadata(callback); + }); + }, + _addPackages: function(result, scope) { + var keys = Object.keys(result); + if ( !keys.length ) { + return; + } + var currLocale = API.getLocale(); + keys.forEach(function(i) { + var newIter = Utils.cloneObject(result[i]); + if ( typeof newIter !== 'object' ) { + return; + } + if ( typeof newIter.names !== 'undefined' && newIter.names[currLocale] ) { + newIter.name = newIter.names[currLocale]; + } + if ( typeof newIter.descriptions !== 'undefined' && newIter.descriptions[currLocale] ) { + newIter.description = newIter.descriptions[currLocale]; + } + if ( !newIter.description ) { + newIter.description = newIter.name; + } + newIter.scope = scope || 'system'; + newIter.type = newIter.type || 'application'; + packages[i] = newIter; + }); + }, + install: function(file, root, cb) { + var self = this; + var paths = OSjs.Core.getSettingsManager().instance('PackageManager').get('PackagePaths', []); + if ( typeof root !== 'string' ) { + root = paths[0]; + } + var dest = Utils.pathJoin(root, file.filename.replace(/\.zip$/i, '')); + API.call('packages', {command: 'install', args: {zip: file.path, dest: dest, paths: paths}}, function(e, r) { + if ( e ) { + cb(e); + } else { + self.generateUserMetadata(cb); + } + }); + }, + uninstall: function(file, cb) { + var self = this; + API.call('packages', {command: 'uninstall', args: {path: file.path}}, function(e, r) { + if ( e ) { + cb(e); + } else { + self.generateUserMetadata(cb); + } + }); + }, + setBlacklist: function(list) { + blacklist = list || []; + }, + getStorePackages: function(opts, callback) { + var sm = OSjs.Core.getSettingsManager(); + var repos = sm.instance('PackageManager').get('Repositories', []); + var entries = []; + Utils.asyncs(repos, function(url, idx, next) { + API.curl({ + url: url, + method: 'GET' + }, function(error, result) { + if ( !error && result.body ) { + var list = []; + if ( typeof result.body === 'string' ) { + try { + list = JSON.parse(result.body); + } catch ( e ) {} + } + entries = entries.concat(list.map(function(iter) { + iter._repository = url; + return iter; + })); + } + next(); + }); + }, function() { + callback(false, entries); + }); + }, + getPackage: function(name) { + if ( typeof packages[name] !== 'undefined' ) { + return Object.freeze(Utils.cloneObject(packages)[name]); + } + return false; + }, + getPackages: function(filtered) { + var hidden = OSjs.Core.getSettingsManager().instance('PackageManager').get('Hidden', []); + var p = Utils.cloneObject(packages); + function allowed(i, iter) { + if ( blacklist.indexOf(i) >= 0 ) { + return false; + } + if ( iter && (iter.groups instanceof Array) ) { + if ( !API.checkPermission(iter.groups) ) { + return false; + } + } + return true; + } + if ( typeof filtered === 'undefined' || filtered === true ) { + var result = {}; + Object.keys(p).forEach(function(name) { + var iter = p[name]; + if ( !allowed(name, iter) ) { + return; + } + if ( iter && hidden.indexOf(name) < 0 ) { + result[name] = iter; + } + }); + return Object.freeze(result); + } + return Object.freeze(p); + }, + getPackagesByMime: function(mime) { + var list = []; + var p = Utils.cloneObject(packages); + Object.keys(p).forEach(function(i) { + if ( blacklist.indexOf(i) < 0 ) { + var a = p[i]; + if ( a && a.mime ) { + if ( Utils.checkAcceptMime(mime, a.mime) ) { + list.push(i); + } + } + } + }); + return list; + }, + addDummyPackage: function(n, title, icon, fn) { + if ( packages[n] || OSjs.Applications[n] ) { + throw new Error('A package already exists with this name!'); + } + if ( typeof fn !== 'function' ) { + throw new TypeError('You need to specify a function/callback!'); + } + packages[n] = Object.seal({ + type: 'application', + className: n, + description: title, + name: title, + icon: icon, + cateogry: 'other', + scope: 'system' + }); + OSjs.Applications[n] = fn; + } + }); + })(); + OSjs.Core.getPackageManager = function() { + return PackageManager; + }; +})(OSjs.Utils, OSjs.VFS, OSjs.API); + +(function(Utils, VFS, API) { + 'use strict'; + var SettingsManager = { + storage: {}, + defaults: {}, + watches: [] + }; + SettingsManager.init = function(settings) { + this.storage = settings || {}; + }; + SettingsManager.get = function(pool, key) { + try { + if ( this.storage[pool] && Object.keys(this.storage[pool]).length ) { + return key ? this.storage[pool][key] : this.storage[pool]; + } + return key ? this.defaults[pool][key] : this.defaults[pool]; + } catch ( e ) { + console.warn('SettingsManager::get()', 'exception', e, e.stack); + } + return false; + }; + SettingsManager.set = function(pool, key, value, save, triggerWatch) { + try { + if ( key ) { + if ( typeof this.storage[pool] === 'undefined' ) { + this.storage[pool] = {}; + } + if ( (['number', 'string']).indexOf(typeof key) >= 0 ) { + this.storage[pool][key] = value; + } else { + console.warn('SettingsManager::set()', 'expects key to be a valid iter, not', key); + } + } else { + this.storage[pool] = value; + } + } catch ( e ) { + console.warn('SettingsManager::set()', 'exception', e, e.stack); + } + if ( save ) { + this.save(pool, save); + } + if ( typeof triggerWatch === 'undefined' || triggerWatch === true ) { + this.changed(pool); + } + return true; + }; + SettingsManager.save = function(pool, callback) { + if ( typeof callback !== 'function' ) { + callback = function() {}; + } + var handler = OSjs.Core.getHandler(); + handler.saveSettings(pool, this.storage, callback); + }; + SettingsManager.defaults = function(pool, defaults) { + this.defaults[pool] = defaults; + }; + SettingsManager.instance = function(pool, defaults) { + if ( !this.storage[pool] || (this.storage[pool] instanceof Array) ) { + this.storage[pool] = {}; + } + var instance = new OSjs.Helpers.SettingsFragment(this.storage[pool], pool); + if ( arguments.length > 1 ) { + SettingsManager.defaults(pool, defaults); + instance.mergeDefaults(defaults); + } + return instance; + }; + SettingsManager.unwatch = function(index) { + if ( typeof this.watches[index] !== 'undefined' ) { + delete this.watches[index]; + } + }; + SettingsManager.watch = function(pool, callback) { + if ( !this.storage[pool] ) { + return false; + } + var index = this.watches.push({ + pool: pool, + callback: callback + }); + return index - 1; + }; + SettingsManager.changed = function(pool) { + var self = this; + this.watches.forEach(function(watch) { + if ( watch && watch.pool === pool ) { + watch.callback(self.storage[pool]); + } + }); + return this; + }; + SettingsManager.clear = function(pool, save) { + save = (typeof save === 'undefined') || (save === true); + this.set(pool, null, {}, save); + }; + Object.seal(SettingsManager); + OSjs.Core.getSettingsManager = function() { + return SettingsManager; + }; +})(OSjs.Utils, OSjs.VFS, OSjs.API); + +(function(Utils, VFS, API) { + 'use strict'; + var DefaultModule = 'User'; + function createMatch(name) { + return new RegExp('^' + name.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, '\\$&')); + } + var MountManager = (function() { + var _queue = []; + var _inited = false; + var _modules = {}; + return Object.seal({ + _create: function(params) { + var target = VFS.Transports[params.transport]; + if ( target && typeof target.defaults === 'function' ) { + target.defaults(params); + } + function _checkReadOnly(name, params, args) { + if ( params.readOnly ) { + var restricted = ['upload', 'unlink', 'write', 'mkdir', 'move', 'trash', 'untrash', 'emptyTrash']; + if ( name === 'copy' ) { + var dest = MountManager.getModuleFromPath(args[1].path, false, true); + return dest.internal !== params.internal; + } + if ( restricted.indexOf(name) !== -1 ) { + return true; + } + } + return false; + } + var mparams = (function() { + var o = {}; + Object.keys(params).forEach(function(k) { + if ( typeof params[k] !== 'function' ) { + o[k] = params[k]; + } + }); + return Object.freeze(o); + })(); + var cfg = Utils.argumentDefaults(params, { + request: function(name, args, callback, options) { + callback = callback || function() { + console.warn('NO CALLBACK FUNCTION WAS ASSIGNED IN VFS REQUEST'); + }; + if ( !target ) { + callback(API._('ERR_VFSMODULE_INVALID_TYPE_FMT', params.transport)); + return; + } + if ( _checkReadOnly(name, params, args) ) { + callback(API._('ERR_VFSMODULE_READONLY')); + return; + } + var module = target.module || {}; + if ( !module[name] ) { + callback(API._('ERR_VFS_UNAVAILABLE')); + return; + } + var fargs = args || []; + fargs.push(callback); + fargs.push(options); + fargs.push(mparams); + module[name].apply(module, fargs); + }, + unmount: function(cb) { + (cb || function() {})(API._('ERR_VFS_UNAVAILABLE'), false); + }, + mounted: function() { + return true; + }, + enabled: function() { + return true; + } + }); + return cfg; + }, + _add: function(opts, emitEvent) { + if ( _inited ) { + _modules[opts.name] = Object.seal(opts); + if ( emitEvent ) { + API.message('vfs:mount', opts.name, {source: null}); + } + } else { + _queue.push(arguments); + } + }, + init: function(callback) { + if ( _inited ) { + callback(); + return; + } + _inited = true; + _queue.forEach(function(i) { + var add = MountManager._create.apply(MountManager, i); + MountManager._add(add, false); + }); + var config = API.getConfig('VFS.Mountpoints', {}); + Object.keys(config).forEach(function(key) { + var iter = config[key]; + if ( iter.enabled !== false ) { + var mp = MountManager._create({ + readOnly: (typeof iter.readOnly === 'undefined') ? false : (iter.readOnly === true), + name: key, + transport: iter.transport || 'Internal', + description: iter.description || key, + icon: iter.icon || 'devices/harddrive.png', + root: key + ':///', + options: iter.options, + visible: iter.visible !== false, + internal: true, + searchable: true, + match: createMatch(key + '://') + }); + MountManager._add(mp, false); + } + }); + _queue = []; + callback(); + }, + restore: function(callback) { + var sm = OSjs.Core.getSettingsManager(); + Utils.asyncs(sm.instance('VFS').get('mounts', []), function(iter, idx, next) { + try { + MountManager.add(iter, next); + } catch ( e ) { + console.warn('MountManager::restore()', e, e.stack); + next(); + } + }, function() { + callback(); + }); + }, + add: function(opts, cb) { + opts = Utils.argumentDefaults(opts, { + description: 'My VFS Module', + transport: 'Internal', + name: 'MyModule', + icon: 'places/server.png', + searchable: false, + visible: true, + readOnly: false + }); + if ( _modules[opts.name] ) { + throw new Error(API._('ERR_VFSMODULE_ALREADY_MOUNTED_FMT', opts.name)); + } + if ( opts.transport.toLowerCase() === 'owndrive' ) { + opts.transport = 'WebDAV'; + } + var modulePath = opts.name.replace(/\s/g, '-').toLowerCase() + '://'; + var moduleRoot = modulePath + '/'; + var moduleMatch = createMatch(modulePath); + var moduleOptions = opts.options || {}; + var module = (function createMountpointModule() { + var isMounted = true; + return MountManager._create({ + readOnly: opts.readOnly, + transport: opts.transport, + name: opts.name, + description: opts.description, + visible: opts.visible, + dynamic: true, + unmount: function(cb) { + isMounted = false; + API.message('vfs:unmount', opts.name, {source: null}); + (cb || function() {})(false, true); + }, + mounted: function() { + return isMounted; + }, + root: moduleRoot, + icon: opts.icon, + match: moduleMatch, + options: moduleOptions + }); + })(); + var validModule = (function() { + if ( Object.keys(VFS.Transports).indexOf(opts.transport) < 0 ) { + return 'No such transport \'' + opts.transport + '\''; + } + if ( opts.transport === 'WebDAV' && !moduleOptions.username ) { + return 'Connection requires username (authorization)'; + } + return true; + })(); + if ( validModule !== true ) { + throw new Error(API._('ERR_VFSMODULE_INVALID_CONFIG_FMT', validModule)); + } + MountManager._add(module, true); + (cb || function() {})(false, true); + }, + remove: function(moduleName, cb) { + if ( !_modules[moduleName] ) { + throw new Error(API._('ERR_VFSMODULE_NOT_MOUNTED_FMT', moduleName)); + } + _modules[moduleName].unmount(function() { + delete _modules[moduleName]; + cb.apply(MountManager, arguments); + }); + }, + isInternal: function isInternalModule(test) { + test = test || ''; + var m = _modules; + var d = null; + if ( test !== null ) { + Object.keys(m).forEach(function(name) { + if ( d !== true ) { + var i = m[name]; + if ( i.internal === true && i.match && test.match(i.match) ) { + d = true; + } + } + }); + } + return d; + }, + isInternalEnabled: function(module) { + try { + if ( API.getConfig('VFS.Internal.' + module + '.enabled') === false ) { + return false; + } + } catch ( e ) {} + return true; + }, + getModules: function(opts) { + opts = Utils.argumentDefaults(opts, { + visible: true, + special: false + }); + var m = _modules; + var a = []; + Object.keys(m).forEach(function(name) { + var iter = m[name]; + if ( !iter.enabled() || (!opts.special && iter.special) ) { + return; + } + if ( opts.visible && iter.visible === opts.visible ) { + a.push({ + name: name, + module: iter + }); + } + }); + return a; + }, + getModule: function(name) { + return _modules[name]; + }, + getModuleFromPath: function getModuleFromPath(test, retdef, retobj) { + retdef = typeof retdef === 'undefined' ? true : (retdef === true); + var d = null; + if ( typeof test === 'string' ) { + Object.keys(_modules).forEach(function(name) { + if ( d === null ) { + var i = _modules[name]; + if ( i.enabled() === true && i.match && test.match(i.match) ) { + d = name; + } + } + }); + } + var moduleName = d || (retdef ? DefaultModule : null); + return retobj ? _modules[moduleName] : moduleName; + }, + getRootFromPath: function getRootFromPath(path) { + return MountManager.getModuleFromPath(path, false, true).root; + }, + getModuleProperty: function(module, property) { + if ( typeof module === 'string' ) { + module = _modules[module]; + } + return module[property]; + } + }); + })(); + OSjs.Core.getMountManager = function() { + return MountManager; + }; +})(OSjs.Utils, OSjs.VFS, OSjs.API); + +(function(Utils, VFS, API) { + 'use strict'; + function search(list, query) { + var result = []; + list.forEach(function(obj) { + var found = false; + obj.fields.forEach(function(s) { + if ( found ) { + return; + } + var qry = String(query).toLowerCase(); + var str = String(s).toLowerCase(); + if ( str.indexOf(qry) !== -1 ) { + result.push(obj.value); + found = true; + } + }); + }); + return result; + } + function SearchObject(obj) { + var self = this; + Object.keys(obj).forEach(function(k) { + self[k] = obj[k]; + }); + } + var ApplicationModule = (function() { + function query() { + var packages = OSjs.Core.getPackageManager().getPackages(); + return Object.keys(packages).map(function(pn) { + var p = packages[pn]; + return new SearchObject({ + value: { + title: p.name, + description: p.description, + icon: API.getIcon(p.icon, '16x16', p), + launch: {application: pn, args: {}} + }, + fields: [ + p.className, + p.name, + p.description + ] + }); + }); + } + return { + search: function(q, args, settings, cb) { + if ( settings.applications ) { + var results = search(query(), q); + if ( args.limit && results.length > args.dlimit ) { + results = results.splice(0, args.dlimit); + } + cb(false, results); + } else { + cb(false, []); + } + }, + reindex: function(args, cb) { + cb(false, true); + }, + destroy: function() { + } + }; + })(); + var FilesystemModule = { + search: function(q, args, settings, cb) { + if ( !settings.files || !settings.paths ) { + cb(false, []); + return; + } + var found = []; + Utils.asyncs(settings.paths, function(e, i, n) { + VFS.find(e, {query: q, limit: (args.limit ? args.dlimit : 0), recursive: args.recursive}, function(error, result) { + if ( error ) { + console.warn(error); + } + if ( result ) { + var list = result.map(function(iter) { + return { + title: iter.filename, + description: iter.path, + icon: API.getFileIcon(new VFS.File(iter)), + launch: {application: '', args: '', file: iter} + }; + }); + found = found.concat(list); + } + n(); + }); + }, function() { + cb(false, found); + }); + }, + reindex: function(args, cb) { + cb(false, true); + }, + destroy: function() { + } + }; + var SearchEngine = (function() { + var modules = [ + ApplicationModule, + FilesystemModule + ]; + var settings = {}; + var inited = false; + return Object.seal({ + init: function(cb) { + if ( inited ) { + return; + } + var manager = OSjs.Core.getSettingsManager(); + settings = manager.get('SearchEngine') || {}; + inited = true; + cb(); + }, + destroy: function() { + modules.forEach(function(m) { + m.destroy(); + }); + modules = []; + settings = {}; + }, + search: function(q, args, cb) { + var result = []; + var errors = []; + args = Utils.argumentDefaults(args, { + recursive: false, + limit: 0, + dlimit: 0 + }); + if ( args.limit ) { + args.dlimit = args.limit; + } + Utils.asyncs(modules, function(module, index, next) { + if ( !args.limit || args.dlimit > 0 ) { + module.search(q, args, settings, function(err, res) { + if ( err ) { + errors.push(err); + } else { + args.dlimit -= res.length; + result = result.concat(res); + } + next(); + }); + } else { + cb(errors, result); + } + }, function() { + cb(errors, result); + }); + }, + reindex: function(args, cb) { + var errors = []; + Utils.asyncs(modules, function(module, index, next) { + module.reindex(args, function(err, res) { + if ( err ) { + errors.push(err); + } + next(); + }); + }, function() { + cb(errors, true); + }); + }, + configure: function(opts, save) { + } + }); + })(); + OSjs.Core.getSearchEngine = function() { + return SearchEngine; + }; +})(OSjs.Utils, OSjs.VFS, OSjs.API); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + GUI.Helpers = GUI.Helpers || {}; + GUI.Helpers.getWindowId = function getWindowId(el) { + while ( el.parentNode ) { + var attr = el.getAttribute('data-window-id'); + if ( attr !== null ) { + return parseInt(attr, 10); + } + el = el.parentNode; + } + return null; + }; + GUI.Helpers.getLabel = function getLabel(el) { + var label = el.getAttribute('data-label'); + return label || ''; + }; + GUI.Helpers.getValueLabel = function getValueLabel(el, attr) { + var label = attr ? el.getAttribute('data-label') : null; + if ( el.childNodes.length && el.childNodes[0].nodeType === 3 && el.childNodes[0].nodeValue ) { + label = el.childNodes[0].nodeValue; + Utils.$empty(el); + } + return label || ''; + }; + GUI.Helpers.getViewNodeValue = function getViewNodeValue(el) { + var value = el.getAttribute('data-value'); + if ( typeof value === 'string' && value.match(/^\[|\{/) ) { + try { + value = JSON.parse(value); + } catch ( e ) { + value = null; + } + } + return value; + }; + GUI.Helpers.getIcon = function getIcon(el, win) { + var image = el.getAttribute('data-icon'); + if ( image && image !== 'undefined') { + if ( image.match(/^stock:\/\//) ) { + image = image.replace('stock://', ''); + var size = '16x16'; + try { + var spl = image.split('/'); + var tmp = spl.shift(); + var siz = tmp.match(/^\d+x\d+/); + if ( siz ) { + size = siz[0]; + image = spl.join('/'); + } + image = API.getIcon(image, size); + } catch ( e ) {} + } else if ( image.match(/^app:\/\//) ) { + image = API.getApplicationResource(win._app, image.replace('app://', '')); + } + return image; + } + return null; + }; + GUI.Helpers.getProperty = function getProperty(el, param, tagName) { + tagName = tagName || el.tagName.toLowerCase(); + var isDataView = tagName.match(/^gui\-(tree|icon|list|file)\-view$/); + if ( param === 'value' && !isDataView) { + if ( (['gui-text', 'gui-password', 'gui-textarea', 'gui-slider', 'gui-select', 'gui-select-list']).indexOf(tagName) >= 0 ) { + return el.querySelector('input, textarea, select').value; + } + if ( (['gui-checkbox', 'gui-radio', 'gui-switch']).indexOf(tagName) >= 0 ) { + return !!el.querySelector('input').checked; + } + return null; + } + if ( (param === 'value' || param === 'selected') && isDataView ) { + return GUI.Elements[tagName].values(el); + } + return el.getAttribute('data-' + param); + }; + GUI.Helpers.setProperty = function setProperty(el, param, value, tagName) { + tagName = tagName || el.tagName.toLowerCase(); + function _setKnownAttribute(i, k, v, a) { + if ( v ) { + i.setAttribute(k, k); + } else { + i.removeAttribute(k); + } + if ( a ) { + el.setAttribute('aria-' + k, String(value === true)); + } + } + function _setValueAttribute(i, k, v) { + if ( typeof v === 'object' ) { + try { + v = JSON.stringify(value); + } catch ( e ) {} + } + i.setAttribute(k, String(v)); + } + var inner = el.children[0]; + var accept = ['gui-slider', 'gui-text', 'gui-password', 'gui-textarea', 'gui-checkbox', 'gui-radio', 'gui-select', 'gui-select-list', 'gui-button']; + (function() { + var firstChild; + var params = { + readonly: function() { + _setKnownAttribute(firstChild, 'readonly', value, true); + }, + disabled: function() { + _setKnownAttribute(firstChild, 'disabled', value, true); + }, + value: function() { + if ( tagName === 'gui-radio' || tagName === 'gui-checkbox' ) { + _setKnownAttribute(firstChild, 'checked', value); + firstChild.checked = !!value; + } + firstChild.value = value; + }, + label: function() { + el.appendChild(firstChild); + Utils.$remove(el.querySelector('label')); + GUI.Helpers.createInputLabel(el, tagName.replace(/^gui\-/, ''), firstChild, value); + } + }; + if ( accept.indexOf(tagName) >= 0 ) { + firstChild = el.querySelector('textarea, input, select, button'); + if ( firstChild ) { + if ( params[param] ) { + params[param](); + } else { + _setValueAttribute(firstChild, param, value || ''); + } + } + } + })(); + accept = ['gui-image', 'gui-audio', 'gui-video']; + if ( (['src', 'controls', 'autoplay', 'alt']).indexOf(param) >= 0 && accept.indexOf(tagName) >= 0 ) { + inner[param] = value; + } + if ( (['_id', '_class', '_style']).indexOf(param) >= 0 ) { + inner.setAttribute(param.replace(/^_/, ''), value); + return; + } + if ( param !== 'value' ) { + _setValueAttribute(el, 'data-' + param, value); + } + }; + GUI.Helpers.createInputLabel = function createInputLabel(el, type, input, label) { + label = label || GUI.Helpers.getLabel(el); + if ( label ) { + var lbl = document.createElement('label'); + var span = document.createElement('span'); + span.appendChild(document.createTextNode(label)); + if ( type === 'checkbox' || type === 'radio' ) { + lbl.appendChild(input); + lbl.appendChild(span); + } else { + lbl.appendChild(span); + lbl.appendChild(input); + } + el.appendChild(lbl); + } else { + el.appendChild(input); + } + }; + GUI.Helpers.createElement = function createElement(tagName, params, ignoreParams) { + ignoreParams = ignoreParams || []; + var el = document.createElement(tagName); + var classMap = { + textalign: function(v) { + Utils.$addClass(el, 'gui-align-' + v); + }, + className: function(v) { + Utils.$addClass(el, v); + } + }; + function getValue(k, value) { + if ( typeof value === 'boolean' ) { + value = value ? 'true' : 'false'; + } else if ( typeof value === 'object' ) { + try { + value = JSON.stringify(value); + } catch ( e ) {} + } + return value; + } + if ( typeof params === 'object' ) { + Object.keys(params).forEach(function(k) { + if ( ignoreParams.indexOf(k) >= 0 ) { + return; + } + var value = params[k]; + if ( typeof value !== 'undefined' && typeof value !== 'function' ) { + if ( classMap[k] ) { + classMap[k](value); + return; + } + var fvalue = getValue(k, value); + el.setAttribute('data-' + k, fvalue); + } + }); + } + return el; + }; + GUI.Helpers.setFlexbox = function setFlexbox(el, grow, shrink, basis, checkel) { + checkel = checkel || el; + (function() { + if ( typeof basis === 'undefined' || basis === null ) { + basis = checkel.getAttribute('data-basis') || 'auto'; + } + })(); + (function() { + if ( typeof grow === 'undefined' || grow === null ) { + grow = checkel.getAttribute('data-grow') || 0; + } + })(); + (function() { + if ( typeof shrink === 'undefined' || shrink === null ) { + shrink = checkel.getAttribute('data-shrink') || 0; + } + })(); + var flex = [grow, shrink]; + if ( basis.length ) { + flex.push(basis); + } + var style = flex.join(' '); + el.style.WebkitBoxFlex = style; + el.style.MozBoxFlex = style; + el.style.WebkitFlex = style; + el.style.MozFlex = style; + el.style.MSFlex = style; + el.style.OFlex = style; + el.style.flex = style; + var align = el.getAttribute('data-align'); + Utils.$removeClass(el, 'gui-flex-align-start'); + Utils.$removeClass(el, 'gui-flex-align-end'); + if ( align ) { + Utils.$addClass(el, 'gui-flex-align-' + align); + } + }; + OSjs.GUI.Helpers.createDrag = function createDrag(el, onDown, onMove, onUp) { + onDown = onDown || function() {}; + onMove = onMove || function() {}; + onUp = onUp || function() {}; + var startX, startY, currentX, currentY; + var dragging = false; + function _onMouseDown(ev, pos, touchDevice) { + ev.preventDefault(); + startX = pos.x; + startY = pos.y; + onDown(ev, {x: startX, y: startY}); + dragging = true; + Utils.$bind(window, 'mouseup:guidrag', _onMouseUp, false); + Utils.$bind(window, 'mousemove:guidrag', _onMouseMove, false); + } + function _onMouseMove(ev, pos, touchDevice) { + ev.preventDefault(); + if ( dragging ) { + currentX = pos.x; + currentY = pos.y; + var diffX = currentX - startX; + var diffY = currentY - startY; + onMove(ev, {x: diffX, y: diffY}, {x: currentX, y: currentY}); + } + } + function _onMouseUp(ev, pos, touchDevice) { + onUp(ev, {x: currentX, y: currentY}); + dragging = false; + Utils.$unbind(window, 'mouseup:guidrag'); + Utils.$unbind(window, 'mousemove:guidrag'); + } + Utils.$bind(el, 'mousedown', _onMouseDown, false); + }; + GUI.Helpers.getNextElement = function getNextElement(prev, current, root) { + function getElements() { + var ignore_roles = ['menu', 'menuitem', 'grid', 'gridcell', 'listitem']; + var list = []; + root.querySelectorAll('.gui-element').forEach(function(e) { + if ( Utils.$hasClass(e, 'gui-focus-element') || ignore_roles.indexOf(e.getAttribute('role')) >= 0 || e.getAttribute('data-disabled') === 'true' ) { + return; + } + if ( e.offsetParent ) { + list.push(e); + } + }); + return list; + } + function getCurrentIndex(els, m) { + var found = -1; + if ( m ) { + els.every(function(e, idx) { + if ( e === m ) { + found = idx; + } + return found === -1; + }); + } + return found; + } + function getCurrentParent(els, m) { + if ( m ) { + var cur = m; + while ( cur.parentNode ) { + if ( Utils.$hasClass(cur, 'gui-element') ) { + return cur; + } + cur = cur.parentNode; + } + return null; + } + return els[0]; + } + function getNextIndex(els, p, i) { + if ( prev ) { + i = (i <= 0) ? (els.length) - 1 : (i - 1); + } else { + i = (i >= (els.length - 1)) ? 0 : (i + 1); + } + return i; + } + function getNext(els, i) { + var next = els[i]; + if ( next.tagName.match(/^GUI\-(BUTTON|TEXT|PASSWORD|SWITCH|CHECKBOX|RADIO|SELECT)/) ) { + next = next.querySelectorAll('input, textarea, button, select')[0]; + } + if ( next.tagName === 'GUI-FILE-VIEW' ) { + next = next.children[0]; + } + return next; + } + if ( root ) { + var elements = getElements(); + if ( elements.length ) { + var currentParent = getCurrentParent(elements, current); + var currentIndex = getCurrentIndex(elements, currentParent); + if ( currentIndex >= 0 ) { + var nextIndex = getNextIndex(elements, currentParent, currentIndex); + return getNext(elements, nextIndex); + } + } + } + return null; + }; + GUI.Helpers.createDraggable = function createDraggable(el, args) { + args = OSjs.Utils.argumentDefaults(args, { + type : null, + effect : 'move', + data : null, + mime : 'application/json', + dragImage : null, + onStart : function() { + return true; + }, + onEnd : function() { + return true; + } + }); + if ( OSjs.Utils.isIE() ) { + args.mime = 'text'; + } + function _toString(mime) { + return JSON.stringify({ + type: args.type, + effect: args.effect, + data: args.data, + mime: args.mime + }); + } + function _dragStart(ev) { + try { + ev.dataTransfer.effectAllowed = args.effect; + if ( args.dragImage && (typeof args.dragImage === 'function') ) { + if ( ev.dataTransfer.setDragImage ) { + var dragImage = args.dragImage(ev, el); + if ( dragImage ) { + var dragEl = dragImage.element; + var dragPos = dragImage.offset; + document.body.appendChild(dragEl); + ev.dataTransfer.setDragImage(dragEl, dragPos.x, dragPos.y); + } + } + } + ev.dataTransfer.setData(args.mime, _toString(args.mime)); + } catch ( e ) { + console.warn('Failed to dragstart: ' + e); + console.warn(e.stack); + } + } + el.setAttribute('draggable', 'true'); + el.setAttribute('aria-grabbed', 'false'); + Utils.$bind(el, 'dragstart', function(ev) { + this.setAttribute('aria-grabbed', 'true'); + this.style.opacity = '0.4'; + if ( ev.dataTransfer ) { + _dragStart(ev); + } + return args.onStart(ev, this, args); + }, false); + Utils.$bind(el, 'dragend', function(ev) { + this.setAttribute('aria-grabbed', 'false'); + this.style.opacity = '1.0'; + return args.onEnd(ev, this, args); + }, false); + }; + GUI.Helpers.createDroppable = function createDroppable(el, args) { + args = OSjs.Utils.argumentDefaults(args, { + accept : null, + effect : 'move', + mime : 'application/json', + files : true, + onFilesDropped : function() { + return true; + }, + onItemDropped : function() { + return true; + }, + onEnter : function() { + return true; + }, + onOver : function() { + return true; + }, + onLeave : function() { + return true; + }, + onDrop : function() { + return true; + } + }); + if ( OSjs.Utils.isIE() ) { + args.mime = 'text'; + } + function getParent(start, matcher) { + if ( start === matcher ) { + return true; + } + var i = 10; + while ( start && i > 0 ) { + if ( start === matcher ) { + return true; + } + start = start.parentNode; + i--; + } + return false; + } + function _onDrop(ev, el) { + ev.stopPropagation(); + ev.preventDefault(); + args.onDrop(ev, el); + if ( !ev.dataTransfer ) { + return true; + } + if ( args.files ) { + var files = ev.dataTransfer.files; + if ( files && files.length ) { + return args.onFilesDropped(ev, el, files, args); + } + } + var data; + try { + data = ev.dataTransfer.getData(args.mime); + } catch ( e ) { + console.warn('Failed to drop: ' + e); + } + if ( data ) { + var item = JSON.parse(data); + if ( args.accept === null || args.accept === item.type ) { + return args.onItemDropped(ev, el, item, args); + } + } + return false; + } + el.setAttribute('aria-dropeffect', args.effect); + Utils.$bind(el, 'drop', function(ev) { + return _onDrop(ev, this); + }, false); + Utils.$bind(el, 'dragenter', function(ev) { + return args.onEnter.call(this, ev, this, args); + }, false); + Utils.$bind(el, 'dragover', function(ev) { + ev.preventDefault(); + if ( !getParent(ev.target, el) ) { + return false; + } + ev.stopPropagation(); + ev.dataTransfer.dropEffect = args.effect; + return args.onOver.call(this, ev, this, args); + }, false); + Utils.$bind(el, 'dragleave', function(ev) { + return args.onLeave.call(this, ev, this, args); + }, false); + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function parseDynamic(scheme, node, win, args) { + args = args || {}; + var translator = args._ || API._; + node.querySelectorAll('*[data-label]').forEach(function(el) { + var label = translator(el.getAttribute('data-label')); + el.setAttribute('data-label', label); + }); + node.querySelectorAll('gui-label, gui-button, gui-list-view-column, gui-select-option, gui-select-list-option').forEach(function(el) { + if ( !el.children.length && !el.getAttribute('data-no-translate') ) { + var lbl = GUI.Helpers.getValueLabel(el); + el.appendChild(document.createTextNode(translator(lbl))); + } + }); + node.querySelectorAll('gui-button').forEach(function(el) { + var label = GUI.Helpers.getValueLabel(el); + if ( label ) { + el.appendChild(document.createTextNode(API._(label))); + } + }); + node.querySelectorAll('*[data-icon]').forEach(function(el) { + var image = GUI.Helpers.getIcon(el, win); + el.setAttribute('data-icon', image); + }); + node.querySelectorAll('*[data-src]').forEach(function(el) { + var old = el.getAttribute('data-src') || ''; + if ( win._app && old.match(/^app:\/\//) ) { + var source = API.getApplicationResource(win._app, old.replace('app://', '')); + el.setAttribute('data-src', source); + } + }); + } + function addChildren(frag, root, before) { + if ( frag ) { + var children = frag.children; + var i = 0; + while ( children.length && i < 10000 ) { + if ( before ) { + root.parentNode.insertBefore(children[0], root); + } else { + root.appendChild(children[0]); + } + i++; + } + } + } + function resolveFragments(scheme, node) { + function _resolve() { + var nodes = node.querySelectorAll('gui-fragment'); + if ( nodes.length ) { + nodes.forEach(function(el) { + var id = el.getAttribute('data-fragment-id'); + if ( id ) { + var frag = scheme.getFragment(id, 'application-fragment'); + if ( frag ) { + addChildren(frag.cloneNode(true), el.parentNode); + } else { + console.warn('Fragment', id, 'not found'); + } + } + Utils.$remove(el); // Or else we'll never get out of the loop! + }); + return true; + } + return false; + } + if ( scheme ) { + var resolving = true; + while ( resolving ) { + resolving = _resolve(); + } + } + } + function removeSelfClosingTags(str) { + var split = (str || '').split('/>'); + var newhtml = ''; + for (var i = 0; i < split.length - 1;i++) { + var edsplit = split[i].split('<'); + newhtml += split[i] + '>'; + } + return newhtml + split[split.length - 1]; + } + function cleanScheme(html) { + return Utils.cleanHTML(removeSelfClosingTags(html)); + } + function resolveExternalFragments(root, html, cb) { + var doc = document.createElement('div'); + doc.innerHTML = html; + var nodes = doc.querySelectorAll('gui-fragment[data-fragment-external]'); + Utils.asyncs(nodes.map(function(el) { + return { + element: el, + uri: el.getAttribute('data-fragment-external') + }; + }), function(iter, index, next) { + var uri = iter.uri.replace(/^\//, ''); + if ( uri.length < 3 ) { + console.warn('resolveExternalFragments()', 'invalid', iter); + return next(); + } + Utils.ajax({ + url: Utils.pathJoin(root, uri), + onsuccess: function(h) { + var tmp = document.createElement('div'); + tmp.innerHTML = cleanScheme(h); + addChildren(tmp, iter.element, iter.element); + tmp = next(); + }, + onerror: function() { + next(); + } + }); + }, function() { + cb(doc.innerHTML); + doc = null; + nodes = null; + }); + } + function UIScheme(url) { + this.url = url; + this.scheme = null; + this.triggers = {render: []}; + } + UIScheme.prototype.destroy = function() { + Utils.$empty(this.scheme); + this.scheme = null; + this.triggers = {}; + }; + UIScheme.prototype.on = function(f, fn) { + this.triggers[f].push(fn); + }; + UIScheme.prototype._trigger = function(f, args) { + args = args || []; + var self = this; + if ( this.triggers[f] ) { + this.triggers[f].forEach(function(fn) { + fn.apply(self, args); + }); + } + }; + UIScheme.prototype._load = function(html) { + var doc = document.createDocumentFragment(); + var wrapper = document.createElement('div'); + wrapper.innerHTML = html; + doc.appendChild(wrapper); + this.scheme = doc.cloneNode(true); + wrapper = null; + doc = null; + }; + UIScheme.prototype.loadString = function(html, cb) { + this._load(cleanScheme(html)); + if ( cb ) { + cb(false, this.scheme); + } + }; + UIScheme.prototype.load = function(cb, cbxhr) { + cbxhr = cbxhr || function() {}; + var self = this; + var src = this.url; + if ( src.substr(0, 1) !== '/' && !src.match(/^(https?|ftp)/) ) { + src = window.location.pathname + src; + } + var root = Utils.dirname(src); + Utils.ajax({ + url: src, + onsuccess: function(html) { + html = cleanScheme(html); + resolveExternalFragments(root, html, function(result) { + cbxhr(false, result); + self._load(result); + cb(false, self.scheme); + }); + }, + onerror: function() { + cb('Failed to fetch scheme'); + cbxhr(true); + } + }); + }; + UIScheme.prototype.getFragment = function(id, type) { + var content = null; + if ( id ) { + if ( type ) { + content = this.scheme.querySelector(type + '[data-id="' + id + '"]'); + } else { + content = this.scheme.querySelector('application-window[data-id="' + id + '"]') || + this.scheme.querySelector('application-fragment[data-id="' + id + '"]'); + } + } + return content; + }; + UIScheme.prototype.parse = function(id, type, win, onparse, args) { + var content = this.getFragment(id, type); + if ( !content ) { + console.error('UIScheme::parse()', 'No fragment found', id + '@' + type); + return null; + } + type = type || content.tagName.toLowerCase(); + if ( content ) { + var node = content.cloneNode(true); + UIScheme.parseNode(this, win, node, type, args, onparse, id); + return node; + } + return null; + }; + UIScheme.prototype.render = function(win, id, root, type, onparse, args) { + root = root || win._getRoot(); + if ( root instanceof GUI.Element ) { + root = root.$element; + } + function setWindowProperties(frag) { + if ( frag ) { + var width = parseInt(frag.getAttribute('data-width'), 10) || 0; + var height = parseInt(frag.getAttribute('data-height'), 10) || 0; + var allow_maximize = frag.getAttribute('data-allow_maximize'); + var allow_minimize = frag.getAttribute('data-allow_minimize'); + var allow_close = frag.getAttribute('data-allow_close'); + var allow_resize = frag.getAttribute('data-allow_resize'); + if ( (!isNaN(width) && width > 0) || (!isNaN(height) && height > 0) ) { + win._resize(width, height); + } + win._setProperty('allow_maximize', allow_maximize); + win._setProperty('allow_minimize', allow_minimize); + win._setProperty('allow_close', allow_close); + win._setProperty('allow_resize', allow_resize); + } + } + var content = this.parse(id, type, win, onparse, args); + addChildren(content, root); + root.querySelectorAll('application-fragment').forEach(function(e) { + Utils.$remove(e); + }); + if ( !win._restored ) { + setWindowProperties(this.getFragment(id)); + } + this._trigger('render', [root]); + }; + UIScheme.prototype.create = function(win, tagName, params, parentNode, applyArgs) { + tagName = tagName || ''; + params = params || {}; + parentNode = parentNode || win._getRoot(); + if ( parentNode instanceof GUI.Element ) { + parentNode = parentNode.$element; + } + var el; + if ( GUI.Elements[tagName] && GUI.Elements[tagName].create ) { + el = GUI.Elements[tagName].create(params); + } else { + el = GUI.Helpers.createElement(tagName, params); + } + parentNode.appendChild(el); + GUI.Elements[tagName].build(el, applyArgs, win); + return this.get(el); + }; + UIScheme.prototype.find = function(win, id, root) { + root = this._findRoot(win, root); + var res = this._findDOM(win, id, root); + return this.get(res.el, res.q); + }; + UIScheme.prototype.findByQuery = function(win, query, root, all) { + root = this._findRoot(win, root); + var el; + var self = this; + if ( all ) { + el = root.querySelectorAll(query).map(function(e) { + return self.get(e, query); + }); + } + el = root.querySelector(query); + return this.get(el, query); + }; + UIScheme.prototype.findDOM = function(win, id, root) { + root = this._findRoot(win, root); + return this._findDOM(win, id, root).el; + }; + UIScheme.prototype._findRoot = function(win, root) { + if ( !(win instanceof OSjs.Core.Window) ) { + throw new Error('UIScheme::_findDOM() expects a instance of Window'); + } + return root || win._getRoot(); + }; + UIScheme.prototype._findDOM = function(win, id, root) { + var q = '[data-id="' + id + '"]'; + return { + q: q, + el: root.querySelector(q) + }; + }; + UIScheme.prototype.get = function(el, q) { + return UIScheme.getElementInstance(el, q); + }; + UIScheme.prototype.getHTML = function() { + return this.scheme.firstChild.innerHTML; + }; + UIScheme.parseNode = function(scheme, win, node, type, args, onparse, id) { + onparse = onparse || function() {}; + args = args || {}; + type = type || 'snipplet'; + if ( args.resolve !== false ) { + resolveFragments(scheme, node); + } + node.querySelectorAll('*').forEach(function(el) { + var lcase = el.tagName.toLowerCase(); + if ( lcase.match(/^gui\-/) && !lcase.match(/(\-container|\-(h|v)box|\-columns?|\-rows?|(status|tool)bar|(button|menu)\-bar|bar\-entry)$/) ) { + Utils.$addClass(el, 'gui-element'); + } + }); + parseDynamic(scheme, node, win, args); + onparse(node); + Object.keys(GUI.Elements).forEach(function(key) { + node.querySelectorAll(key).forEach(function(pel) { + if ( pel._wasParsed ) { + return; + } + try { + GUI.Elements[key].build(pel); + } catch ( e ) { + console.warn('parseNode()', id, type, win, 'exception'); + console.warn(e, e.stack); + } + pel._wasParsed = true; + }); + }); + }; + UIScheme.getElementInstance = function(el, q) { + if ( el ) { + var tagName = el.tagName.toLowerCase(); + if ( tagName.match(/^gui\-(list|tree|icon|file)\-view$/) || tagName.match(/^gui\-select/) ) { + return new GUI.ElementDataView(el, q); + } + } + return new GUI.Element(el, q); + }; + var DialogScheme = (function() { + var dialogScheme; + return { + get: function() { + return dialogScheme; + }, + destroy: function() { + if ( dialogScheme ) { + dialogScheme.destroy(); + } + dialogScheme = null; + }, + init: function(cb) { + if ( dialogScheme ) { + cb(); + return; + } + if ( OSjs.API.isStandalone() ) { + var html = OSjs.STANDALONE.SCHEMES['/dialogs.html']; + dialogScheme = new OSjs.GUI.Scheme(); + dialogScheme.loadString(html); + cb(); + return; + } + var root = API.getConfig('Connection.RootURI'); + var url = root + 'client/dialogs.html'; + if ( API.getConfig('Connection.Dist') === 'dist' ) { + url = root + 'dialogs.html'; + } + dialogScheme = GUI.createScheme(url); + dialogScheme.load(function(error) { + if ( error ) { + console.warn('OSjs.GUI.initDialogScheme()', 'error loading dialog schemes', error); + } + cb(); + }); + } + }; + })(); + function createScheme(url) { + return new UIScheme(url); + } + GUI.Scheme = Object.seal(UIScheme); + GUI.DialogScheme = DialogScheme; + GUI.createScheme = createScheme; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function getFocusElement(inst) { + var tagMap = { + 'gui-switch': 'button', + 'gui-list-view': 'textarea', + 'gui-tree-view': 'textarea', + 'gui-icon-view': 'textarea', + 'gui-input-modal': 'button' + }; + if ( tagMap[inst.tagName] ) { + return inst.$element.querySelector(tagMap[inst.tagName]); + } + return inst.$element.firstChild || inst.$element; + } + function UIElement(el, q) { + this.$element = el || null; + this.tagName = el ? el.tagName.toLowerCase() : null; + this.oldDisplay = null; + if ( !el ) { + console.error('UIElement() was constructed without a DOM element', q); + } + } + UIElement.prototype.remove = function() { + this.$element = Utils.$remove(this.$element); + }; + UIElement.prototype.empty = function() { + Utils.$empty(this.$element); + return this; + }; + UIElement.prototype.blur = function() { + if ( this.$element ) { + var firstChild = getFocusElement(this); + if ( firstChild ) { + firstChild.blur(); + } + } + return this; + }; + UIElement.prototype.focus = function() { + if ( this.$element ) { + var firstChild = getFocusElement(this); + if ( firstChild ) { + firstChild.focus(); + } + } + return this; + }; + UIElement.prototype.show = function() { + if ( this.$element && !this.$element.offsetParent ) { + if ( GUI.Elements[this.tagName] && GUI.Elements[this.tagName].show ) { + GUI.Elements[this.tagName].show.apply(this, arguments); + } else { + if ( this.$element ) { + this.$element.style.display = this.oldDisplay || ''; + } + } + } + return this; + }; + UIElement.prototype.hide = function() { + if ( this.$element && this.$element.offsetParent ) { + if ( !this.oldDisplay ) { + this.oldDisplay = this.$element.style.display; + } + this.$element.style.display = 'none'; + } + return this; + }; + UIElement.prototype.on = function(evName, callback, args) { + if ( GUI.Elements[this.tagName] && GUI.Elements[this.tagName].bind ) { + GUI.Elements[this.tagName].bind(this.$element, evName, callback, args); + } + return this; + }; + UIElement.prototype.son = function(evName, thisArg, callback, args) { + return this.on(evName, function() { + var args = Array.prototype.slice.call(arguments); + args.unshift(this); + callback.apply(thisArg, args); + }, args); + }; + UIElement.prototype.set = function(param, value, arg, arg2) { + if ( this.$element ) { + if ( GUI.Elements[this.tagName] && GUI.Elements[this.tagName].set ) { + if ( GUI.Elements[this.tagName].set(this.$element, param, value, arg, arg2) === true ) { + return this; + } + } + GUI.Helpers.setProperty(this.$element, param, value, arg, arg2); + } + return this; + }; + UIElement.prototype.get = function() { + if ( this.$element ) { + if ( GUI.Elements[this.tagName] && GUI.Elements[this.tagName].get ) { + var args = ([this.$element]).concat(Array.prototype.slice.call(arguments)); + return GUI.Elements[this.tagName].get.apply(this, args); + } else { + return GUI.Helpers.getProperty(this.$element, arguments[0]); + } + } + return null; + }; + UIElement.prototype.fn = function(name, args, thisArg) { + args = args || []; + thisArg = thisArg || this; + if ( this.$element ) { + return GUI.Elements[this.tagName][name].apply(thisArg, args); + } + return null; + }; + UIElement.prototype.append = function(el) { + if ( el instanceof UIElement ) { + el = el.$element; + } else if ( typeof el === 'string' || typeof el === 'number' ) { + el = document.createTextNode(String(el)); + } + var outer = document.createElement('div'); + outer.appendChild(el); + this._append(outer); + outer = null; + return this; + }; + UIElement.prototype.appendHTML = function(html, scheme, win, args) { + var el = document.createElement('div'); + el.innerHTML = html; + return this._append(el, scheme, win, args); + }; + UIElement.prototype._append = function(el, scheme, win, args) { + if ( el instanceof Element ) { + GUI.Scheme.parseNode(scheme, win, el, null, args); + } + while ( el.childNodes.length ) { + this.$element.appendChild(el.childNodes[0]); + } + el = null; + return this; + }; + UIElement.prototype.querySelector = function(q, rui) { + var el = this.$element.querySelector(q); + if ( rui ) { + return GUI.Scheme.getElementInstance(el, q); + } + return el; + }; + UIElement.prototype.querySelectorAll = function(q, rui) { + var el = this.$element.querySelectorAll(q); + if ( rui ) { + el = el.map(function(i) { + return GUI.Scheme.getElementInstance(i, q); + }); + } + return el; + }; + UIElement.prototype.css = function(k, v) { + return Utils.$css(this.$element, k, v); + }; + UIElement.prototype.position = function() { + return Utils.$position(this.$element); + }; + UIElement.prototype._call = function(method, args) { + if ( GUI.Elements[this.tagName] && GUI.Elements[this.tagName].call ) { + var cargs = ([this.$element, method, args]);//.concat(args); + return GUI.Elements[this.tagName].call.apply(this, cargs); + } + return null;//this; + }; + function UIElementDataView() { + UIElement.apply(this, arguments); + } + UIElementDataView.prototype = Object.create(UIElement.prototype); + UIElementDataView.constructor = UIElement; + UIElementDataView.prototype.clear = function() { + return this._call('clear', []); + }; + UIElementDataView.prototype.add = function(props) { + return this._call('add', [props]); + }; + UIElementDataView.prototype.patch = function(props) { + return this._call('patch', [props]); + }; + UIElementDataView.prototype.remove = function(id, key) { + return this._call('remove', [id, key]); + }; + GUI.Element = Object.seal(UIElement); + GUI.ElementDataView = Object.seal(UIElementDataView); +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + var _classMap = { // Defaults to (foo-bar)-entry + 'gui-list-view': 'gui-list-view-row' + }; + function getEntryTagName(type) { + if ( typeof type !== 'string' ) { + type = type.tagName.toLowerCase(); + } + var className = _classMap[type]; + if ( !className ) { + className = type + '-entry'; + } + return className; + } + function getEntryFromEvent(ev) { + var t = ev.isTrusted ? ev.target : (ev.relatedTarget || ev.target); + var tn = t.tagName.toLowerCase(); + if ( tn.match(/(view|textarea|body)$/) ) { + return null; + } else if ( tn === 'gui-list-view-column' ) { + return t.parentNode; + } + return t; + } + function handleItemSelection(ev, item, idx, className, selected, root, multipleSelect) { + root = root || item.parentNode; + if ( idx === -1 ) { + root.querySelectorAll(getEntryTagName(root)).forEach(function(e) { + Utils.$removeClass(e, 'gui-active'); + }); + selected = []; + } else { + if ( !multipleSelect || !ev.shiftKey ) { + root.querySelectorAll(className).forEach(function(i) { + Utils.$removeClass(i, 'gui-active'); + }); + selected = []; + } + var findex = selected.indexOf(idx); + if ( findex >= 0 ) { + selected.splice(findex, 1); + Utils.$removeClass(item, 'gui-active'); + } else { + selected.push(idx); + Utils.$addClass(item, 'gui-active'); + } + } + selected.sort(function(a, b) { + return a - b; + }); + return selected; + } + function getSelected(el) { + return GUI.Elements[el.tagName.toLowerCase()].values(el); + } + function handleKeyPress(el, ev) { + var map = {}; + var key = ev.keyCode; + var type = el.tagName.toLowerCase(); + var className = getEntryTagName(type); + var root = el.querySelector(type + '-body'); + var entries = root.querySelectorAll(className); + var count = entries.length; + if ( !count ) { + return; + } + if ( key === Utils.Keys.ENTER ) { + el.dispatchEvent(new CustomEvent('_activate', {detail: {entries: getSelected(el)}})); + return; + } + map[Utils.Keys.C] = function(ev) { + if ( ev.ctrlKey ) { + var selected = getSelected(el); + if ( selected && selected.length ) { + var data = []; + selected.forEach(function(s) { + if ( s && s.data ) { + data.push(new VFS.File(s.data.path, s.data.mime)); + } + }); + API.setClipboard(data); + } + } + }; + var selected = el._selected.concat() || []; + var first = selected.length ? selected[0] : 0; + var last = selected.length > 1 ? selected[selected.length - 1] : first; + var current = 0; + function select() { + var item = entries[current]; + if ( item ) { + el._selected = handleItemSelection(ev, item, current, className, selected, root, ev.shiftKey); + GUI.Elements._dataview.scrollIntoView(el, item); + } + } + function getRowSize() { + var d = 0; + var lastTop = -1; + entries.forEach(function(e) { + if ( lastTop === -1 ) { + lastTop = e.offsetTop; + } + if ( lastTop !== e.offsetTop ) { + return false; + } + lastTop = e.offsetTop; + d++; + return true; + }); + return d; + } + function handleKey() { + function next() { + current = Math.min(last + 1, count); + select(); + } + function prev() { + current = Math.max(0, first - 1); + select(); + } + if ( type === 'gui-tree-view' || type === 'gui-list-view' ) { + map[Utils.Keys.UP] = prev; + map[Utils.Keys.DOWN] = next; + } else { + map[Utils.Keys.UP] = function() { + current = Math.max(0, first - getRowSize()); + select(); + }; + map[Utils.Keys.DOWN] = function() { + current = Math.max(last, last + getRowSize()); + select(); + }; + map[Utils.Keys.LEFT] = prev; + map[Utils.Keys.RIGHT] = next; + } + if ( map[key] ) { + map[key](ev); + } + } + handleKey(); + } + function getValueParameter(r) { + var value = r.getAttribute('data-value'); + try { + return JSON.parse(value); + } catch ( e ) {} + return value; + } + function matchValueByKey(r, val, key, idx) { + var value = r.getAttribute('data-value'); + if ( !key && (val === idx || val === value) ) { + return r; + } else { + try { + var json = JSON.parse(value); + if ( typeof json[key] === 'object' ? json[key] === val : String(json[key]) === String(val) ) { + return r; + } + } catch ( e ) {} + } + return false; + } + GUI.Elements._dataview = { + clear: function(el, body) { + body = body || el; + el.querySelectorAll(getEntryTagName(el)).forEach(function(row) { + Utils.$unbind(row); + }); + Utils.$empty(body); + body.scrollTop = 0; + el._selected = []; + }, + add: function(el, args, oncreate) { + var entries = args[0]; + if ( !(entries instanceof Array) ) { + entries = [entries]; + } + entries.forEach(oncreate); + return this; + }, + patch: function(el, args, className, body, oncreate, oninit) { + var self = this; + var entries = args[0]; + var single = false; + if ( !(entries instanceof Array) ) { + entries = [entries]; + single = true; + } + var inView = {}; + body.querySelectorAll(className).forEach(function(row) { + var id = row.getAttribute('data-id'); + if ( id !== null ) { + inView[id] = row; + } + }); + entries.forEach(function(entry) { + var insertBefore; + if ( typeof entry.id !== 'undefined' && entry.id !== null ) { + if ( inView[entry.id] ) { + insertBefore = inView[entry.id]; + delete inView[entry.id]; + } + var row = oncreate(entry); + if ( row ) { + if ( insertBefore ) { + if ( Utils.$hasClass(insertBefore, 'gui-active') ) { + Utils.$addClass(row, 'gui-active'); + } + body.insertBefore(row, insertBefore); + self.remove(el, null, className, insertBefore); + } else { + body.appendChild(row); + } + oninit(el, row); + } + } + }); + if ( !single ) { + Object.keys(inView).forEach(function(k) { + self.remove(el, null, className, inView[k]); + }); + } + inView = {}; + this.updateActiveSelection(el, className); + return this; + }, + remove: function(el, args, className, target, parentEl) { + function remove(cel) { + Utils.$remove(cel); + } + parentEl = parentEl || el; + if ( target ) { + remove(target); + return; + } + if ( typeof args[1] === 'undefined' && typeof args[0] === 'number' ) { + remove(parentEl.querySelectorAll(className)[args[0]]); + } else { + var findId = args[0]; + var findKey = args[1] || 'id'; + var q = 'data-' + findKey + '="' + findId + '"'; + parentEl.querySelectorAll(className + '[' + q + ']').forEach(remove); + } + this.updateActiveSelection(el, className); + return this; + }, + updateActiveSelection: function(el, className) { + var active = []; + el.querySelectorAll(className + '.gui-active').forEach(function(cel) { + active.push(Utils.$index(cel)); + }); + el._active = active; + }, + scrollIntoView: function(el, element) { + var pos = Utils.$position(element, el); + var marginTop = 0; + if ( el.tagName.toLowerCase() === 'gui-list-view' ) { + var header = el.querySelector('gui-list-view-head'); + if ( header ) { + marginTop = header.offsetHeight; + } + } + var scrollSpace = (el.scrollTop + el.offsetHeight) - marginTop; + var scrollTop = el.scrollTop + marginTop; + var elTop = pos.top - marginTop; + if ( pos !== null && (elTop > scrollSpace || elTop < scrollTop) ) { + el.scrollTop = elTop; + return true; + } + return false; + }, + bindEntryEvents: function(el, row, className) { + function createDraggable() { + var value = row.getAttribute('data-value'); + if ( value !== null ) { + try { + value = JSON.parse(value); + } catch ( e ) {} + } + var source = row.getAttribute('data-draggable-source'); + if ( source === null ) { + source = GUI.Helpers.getWindowId(el); + if ( source !== null ) { + source = {wid: source}; + } + } + GUI.Helpers.createDraggable(row, { + type : el.getAttribute('data-draggable-type') || row.getAttribute('data-draggable-type'), + source : source, + data : value + }); + var tooltip = row.getAttribute('data-tooltip'); + if ( tooltip && !row.getAttribute('title') ) { + row.setAttribute('title', tooltip); + } + } + el.dispatchEvent(new CustomEvent('_render', {detail: { + element: row, + data: GUI.Helpers.getViewNodeValue(row) + }})); + if ( el.getAttribute('data-draggable') === 'true' ) { + createDraggable(); + } + }, + getSelected: function(el, entries) { + var selected = []; + entries.forEach(function(iter, idx) { + if ( Utils.$hasClass(iter, 'gui-active') ) { + selected.push({ + index: idx, + data: GUI.Helpers.getViewNodeValue(iter) + }); + } + }); + return selected; + }, + getEntry: function(el, entries, val, key, asValue) { + if ( val ) { + var result = null; + entries.forEach(function(r, idx) { + if ( !result && matchValueByKey(r, val, key, idx) ) { + result = r; + } + }); + return (asValue && result) ? getValueParameter(result) : result; + } + return !asValue ? entries : (entries || []).map(function(iter) { + return getValueParameter(iter); + }); + }, + setSelected: function(el, body, entries, val, key, opts) { + var self = this; + var select = []; + var scrollIntoView = false; + if ( typeof opts === 'object' ) { + scrollIntoView = opts.scroll === true; + } + function sel(r, idx) { + select.push(idx); + Utils.$addClass(r, 'gui-active'); + if ( scrollIntoView ) { + self.scrollIntoView(el, r); + } + } + entries.forEach(function(r, idx) { + Utils.$removeClass(r, 'gui-active'); + if ( matchValueByKey(r, val, key, idx) ) { + sel(r, idx); + } + }); + el._selected = select; + }, + build: function(el, applyArgs) { + el._selected = []; + el.scrollTop = 0; + Utils.$addClass(el, 'gui-data-view'); + var singleClick = el.getAttribute('data-single-click') === 'true'; + var multipleSelect = el.getAttribute('data-multiple'); + multipleSelect = multipleSelect === null || multipleSelect === 'true'; + function select(ev) { + ev.stopPropagation(); + API.blurMenu(); + var row = getEntryFromEvent(ev); + var className = row ? row.tagName.toLowerCase() : null; + if ( className === 'gui-tree-view-expander' ) { + OSjs.GUI.Elements[el.tagName.toLowerCase()].call(el, 'expand', {ev: ev, entry: row.parentNode}); + return; + } + var idx = Utils.$index(row); + el._selected = handleItemSelection(ev, row, idx, className, el._selected, el, multipleSelect); + el.dispatchEvent(new CustomEvent('_select', {detail: {entries: getSelected(el)}})); + } + function activate(ev) { + ev.stopPropagation(); + API.blurMenu(); + if ( singleClick ) { + select(ev); + } + el.dispatchEvent(new CustomEvent('_activate', {detail: {entries: getSelected(el)}})); + } + function context(ev) { + select(ev); + el.dispatchEvent(new CustomEvent('_contextmenu', {detail: {entries: getSelected(el), x: ev.clientX, y: ev.clientY}})); + } + if ( !el.querySelector('textarea.gui-focus-element') && !el.getAttribute('no-selection') ) { + var underlay = document.createElement('textarea'); + underlay.setAttribute('aria-label', ''); + underlay.setAttribute('aria-hidden', 'true'); + underlay.setAttribute('readonly', 'true'); + underlay.className = 'gui-focus-element'; + Utils.$bind(underlay, 'focus', function(ev) { + ev.preventDefault(); + Utils.$addClass(el, 'gui-element-focused'); + }); + Utils.$bind(underlay, 'blur', function(ev) { + ev.preventDefault(); + Utils.$removeClass(el, 'gui-element-focused'); + }); + Utils.$bind(underlay, 'keydown', function(ev) { + ev.preventDefault(); + handleKeyPress(el, ev); + }); + Utils.$bind(underlay, 'keypress', function(ev) { + ev.preventDefault(); + }); + if ( singleClick ) { + Utils.$bind(el, 'click', activate, true); + } else { + Utils.$bind(el, 'click', select, true); + Utils.$bind(el, 'dblclick', activate, true); + } + Utils.$bind(el, 'contextmenu', function(ev) { + ev.preventDefault(); + context(ev); + return false; + }, true); + this.bind(el, 'select', function(ev) { + if ( Utils.$hasClass(el, 'gui-element-focused') ) { + return; + } + var oldTop = el.scrollTop; + underlay.focus(); + el.scrollTop = oldTop; + setTimeout(function() { + el.scrollTop = oldTop; + }, 2); + }, true); + el.appendChild(underlay); + } + }, + focus: function(el) { + try { + var underlay = el.querySelector('.gui-focus-element'); + underlay.focus(); + } catch ( e ) { + console.warn(e, e.stack); + } + }, + blur: function(el) { + try { + var underlay = el.querySelector('.gui-focus-element'); + underlay.blur(); + } catch ( e ) { + console.warn(e, e.stack); + } + }, + bind: function(el, evName, callback, params) { + if ( (['activate', 'select', 'expand', 'contextmenu', 'render', 'drop']).indexOf(evName) !== -1 ) { + evName = '_' + evName; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + GUI.Elements['gui-color-box'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('div'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + set: function(el, param, value) { + if ( param === 'value' ) { + el.firstChild.style.backgroundColor = value; + return true; + } + return false; + }, + build: function(el) { + var inner = document.createElement('div'); + el.appendChild(inner); + } + }; + GUI.Elements['gui-color-swatch'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('canvas'); + if ( evName === 'select' || evName === 'change' ) { + evName = '_change'; + } + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var cv = document.createElement('canvas'); + cv.width = 100; + cv.height = 100; + var ctx = cv.getContext('2d'); + var gradient = ctx.createLinearGradient(0, 0, ctx.canvas.width, 0); + function getColor(ev) { + var pos = OSjs.Utils.$position(cv); + var cx = typeof ev.offsetX === 'undefined' ? (ev.clientX - pos.left) : ev.offsetX; + var cy = typeof ev.offsetY === 'undefined' ? (ev.clientY - pos.top) : ev.offsetY; + if ( isNaN(cx) || isNaN(cy) ) { + return null; + } + var data = ctx.getImageData(cx, cy, 1, 1).data; + return { + r: data[0], + g: data[1], + b: data[2], + hex: Utils.convertToHEX(data[0], data[1], data[2]) + }; + } + gradient.addColorStop(0, 'rgb(255, 0, 0)'); + gradient.addColorStop(0.15, 'rgb(255, 0, 255)'); + gradient.addColorStop(0.33, 'rgb(0, 0, 255)'); + gradient.addColorStop(0.49, 'rgb(0, 255, 255)'); + gradient.addColorStop(0.67, 'rgb(0, 255, 0)'); + gradient.addColorStop(0.84, 'rgb(255, 255, 0)'); + gradient.addColorStop(1, 'rgb(255, 0, 0)'); + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); + gradient = ctx.createLinearGradient(0, 0, 0, ctx.canvas.height); + gradient.addColorStop(0, 'rgba(255, 255, 255, 1)'); + gradient.addColorStop(0.5, 'rgba(255, 255, 255, 0)'); + gradient.addColorStop(0.5, 'rgba(0, 0, 0, 0)'); + gradient.addColorStop(1, 'rgba(0, 0, 0, 1)'); + ctx.fillStyle = gradient; + ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height); + Utils.$bind(cv, 'click', function(ev) { + var c = getColor(ev); + if ( c ) { + cv.dispatchEvent(new CustomEvent('_change', {detail: c})); + } + }, false); + el.appendChild(cv); + } + }; + GUI.Elements['gui-iframe'] = (function() { + var tagName = 'iframe'; + if ( (['nw', 'electron', 'x11']).indexOf(API.getConfig('Connection.Type')) >= 0 ) { + tagName = 'webview'; + } + return { + set: function(el, key, val) { + if ( key === 'src' ) { + el.querySelector(tagName).src = val; + } + }, + build: function(el) { + var src = el.getAttribute('data-src') || 'about:blank'; + var iframe = document.createElement(tagName); + iframe.src = src; + iframe.setAttribute('border', 0); + el.appendChild(iframe); + } + }; + })(); + GUI.Elements['gui-progress-bar'] = { + set: function(el, param, value) { + el.setAttribute('data-' + param, value); + if ( param === 'progress' || param === 'value' ) { + value = parseInt(value, 10); + value = Math.max(0, Math.min(100, value)); + el.setAttribute('aria-label', String(value)); + el.setAttribute('aria-valuenow', String(value)); + el.querySelector('div').style.width = value.toString() + '%'; + el.querySelector('span').innerHTML = value + '%'; + return true; + } + return false; + }, + build: function(el) { + var p = (el.getAttribute('data-progress') || 0); + p = Math.max(0, Math.min(100, p)); + var percentage = p.toString() + '%'; + var progress = document.createElement('div'); + progress.style.width = percentage; + var span = document.createElement('span'); + span.appendChild(document.createTextNode(percentage)); + el.setAttribute('role', 'progressbar'); + el.setAttribute('aria-valuemin', 0); + el.setAttribute('aria-valuemax', 100); + el.setAttribute('aria-label', 0); + el.setAttribute('aria-valuenow', 0); + el.appendChild(progress); + el.appendChild(span); + } + }; + GUI.Elements['gui-statusbar'] = { + set: function(el, param, value) { + if ( param === 'label' || param === 'value' ) { + var span = el.getElementsByTagName('gui-statusbar-label')[0]; + if ( span ) { + Utils.$empty(span); + span.innerHTML = value; + } + return true; + } + return false; + }, + build: function(el) { + var span = document.createElement('gui-statusbar-label'); + var lbl = el.getAttribute('data-label') || el.getAttribute('data-value'); + if ( !lbl ) { + lbl = (function() { + var textNodes = []; + var node, value; + for ( var i = 0; i < el.childNodes.length; i++ ) { + node = el.childNodes[i]; + if ( node.nodeType === Node.TEXT_NODE ) { + value = node.nodeValue.replace(/\s+/g, '').replace(/^\s+/g, ''); + if ( value.length > 0 ) { + textNodes.push(value); + } + el.removeChild(node); + i++; + } + } + return textNodes.join(' '); + })(); + } + span.innerHTML = lbl; + el.setAttribute('role', 'log'); + el.appendChild(span); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + var lastMenu; + function blurMenu(ev) { + if ( lastMenu ) { + lastMenu(ev); + } + lastMenu = null; + API.triggerHook('onBlurMenu'); + } + function bindIngores(el) { + Utils.$bind(el, 'touchstart', function(ev) { + ev.preventDefault(); + }, true); + } + function clickWrapper(ev, pos, onclick, original) { + var t = ev.isTrusted ? ev.target : (ev.relatedTarget || ev.target); + ev.preventDefault(); + if ( t && t.tagName === 'GUI-MENU-ENTRY' ) { + var isExpander = !!t.querySelector('gui-menu'); + var hasInput = t.querySelector('input'); + if ( hasInput || isExpander ) { + ev.stopPropagation(); + } + onclick(ev, pos, t, original); + } + } + function onEntryClick(ev, pos, target, original) { + var isExpander = !!target.querySelector('gui-menu'); + if ( !isExpander ) { + blurMenu(ev); + var hasInput = target.querySelector('input'); + if ( hasInput ) { + if ( !Utils.isIE() && window.MouseEvent ) { + hasInput.dispatchEvent(new MouseEvent('click', { + clientX: pos.x, + clientY: pos.y + })); + } else { + var nev = document.createEvent('MouseEvent'); + nev.initMouseEvent('click', true, true, window, 0, 0, 0, pos.x, pos.y, ev.ctrlKey, ev.altKey, ev.shiftKey, ev.metaKey, ev.button, hasInput); + } + } + var dispatcher = (original || target).querySelector('label'); + dispatcher.dispatchEvent(new CustomEvent('_select', {detail: getSelectionEventAttribs(target, true)})); + } + } + function clampSubmenuPositions(r) { + function _clamp(rm) { + rm.querySelectorAll('gui-menu-entry').forEach(function(srm) { + var sm = srm.querySelector('gui-menu'); + if ( sm ) { + sm.style.left = String(-parseInt(sm.offsetWidth, 10)) + 'px'; + _clamp(sm); + } + }); + } + var pos = Utils.$position(r); + if ( pos && (window.innerWidth - pos.right) < r.offsetWidth ) { + Utils.$addClass(r, 'gui-overflowing'); + _clamp(r); + } + Utils.$addClass(r, 'gui-showing'); + } + function runChildren(pel, level, winRef, cb) { + level = level || 0; + cb = cb || function() {}; + (pel.children || []).forEach(function(child, i) { + if ( child && child.tagName.toLowerCase() === 'gui-menu-entry') { + GUI.Elements['gui-menu-entry'].build(child, null, winRef); + cb(child, level); + } + }); + } + function getSelectionEventAttribs(mel, didx) { + var id = mel.getAttribute('data-id'); + var idx = Utils.$index(mel) + if ( !didx ) { + idx = parseInt(mel.getAttribute('data-index'), 10); + } + var result = {index: idx, id: id}; + Array.prototype.slice.call(mel.attributes).forEach(function(item) { + if ( item.name.match(/^data\-/) ) { + var an = item.name.replace(/^data\-/, ''); + if ( typeof result[an] === 'undefined' ) { + result[an] = item.value; + } + } + }); + return result; + } + GUI.Elements['gui-menu-entry'] = (function() { + function createTyped(child, par) { + var type = child.getAttribute('data-type'); + var value = child.getAttribute('data-checked') === 'true'; + var input = null; + if ( type ) { + var group = child.getAttribute('data-group'); + input = document.createElement('input'); + input.type = type; + input.name = group ? group + '[]' : ''; + if ( value ) { + input.setAttribute('checked', 'checked'); + } + par.setAttribute('role', 'menuitem' + type); + par.appendChild(input); + } + } + return { + bind: function(el, evName, callback, params) { + if ( evName === 'select' ) { + evName = '_select'; + } + var target = el.querySelector('gui-menu-entry > label'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(child, arg, winRef) { + if ( arguments.length < 3 ) { + return; + } + child.setAttribute('role', 'menuitem' + (child.getAttribute('data-type') || '')); + var label = GUI.Helpers.getLabel(child); + var icon = GUI.Helpers.getIcon(child, winRef); + child.setAttribute('aria-label', label); + var span = document.createElement('label'); + if ( icon ) { + child.style.backgroundImage = 'url(' + icon + ')'; + Utils.$addClass(span, 'gui-has-image'); + } + child.appendChild(span); + createTyped(child, span); + if ( child.getAttribute('data-labelhtml') === 'true' ) { + span.innerHTML = label; + } else { + span.appendChild(document.createTextNode(label)); + } + if ( child.querySelector('gui-menu') ) { + Utils.$addClass(child, 'gui-menu-expand'); + child.setAttribute('aria-haspopup', 'true'); + } else { + child.setAttribute('aria-haspopup', 'false'); + } + } + }; + })(); + GUI.Elements['gui-menu'] = { + bind: function(el, evName, callback, params) { + if ( evName === 'select' ) { + evName = '_select'; + } + el.querySelectorAll('gui-menu-entry > label').forEach(function(target) { + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }); + }, + show: function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + var newNode = this.$element.cloneNode(true); + var el = this.$element; + OSjs.GUI.Helpers.createMenu(null, ev, newNode); + Utils.$bind(newNode, 'click', function(ev, pos) { + clickWrapper(ev, pos, onEntryClick, el); + }, true); + }, + set: function(el, param, value, arg) { + if ( param === 'checked' ) { + var found = el.querySelector('gui-menu-entry[data-id="' + value + '"]'); + if ( found ) { + var input = found.querySelector('input'); + if ( input ) { + if ( arg ) { + input.setAttribute('checked', 'checked'); + } else { + input.removeAttribute('checked'); + } + } + } + return true; + } + return false; + }, + build: function(el, customMenu, winRef) { + el.setAttribute('role', 'menu'); + runChildren(el, 0, winRef, function(child, level) { + if ( customMenu ) { + if ( child ) { + child.getElementsByTagName('gui-menu').forEach(function(sub) { + if ( sub ) { + runChildren(sub, level + 1, winRef); + } + }); + } + } + }); + if ( !customMenu ) { + Utils.$bind(el, 'click', function(ev, pos) { + clickWrapper(ev, pos, onEntryClick); + }, true); + } + } + }; + GUI.Elements['gui-menu-bar'] = { + bind: function(el, evName, callback, params) { + if ( evName === 'select' ) { + evName = '_select'; + } + el.querySelectorAll('gui-menu-bar-entry').forEach(function(target) { + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }); + }, + build: function(el) { + el.setAttribute('role', 'menubar'); + function updateChildren(sm, level) { + if ( sm && sm.children ) { + var children = sm.children; + var child; + for ( var i = 0; i < children.length; i++ ) { + child = children[i]; + if ( child.tagName === 'GUI-MENU-ENTRY' ) { + child.setAttribute('aria-haspopup', String(!!child.firstChild)); + updateChildren(child.firstChild, level + 1); + } + } + } + } + function _onClick(ev, mel) { + blurMenu(); + ev.preventDefault(); + ev.stopPropagation(); + var submenu = mel.querySelector('gui-menu'); + mel.querySelectorAll('gui-menu-entry').forEach(function(c) { + Utils.$removeClass(c, 'gui-hover'); + }); + if ( submenu ) { + lastMenu = function(ev) { + if ( ev ) { + ev.stopPropagation(); + } + Utils.$removeClass(mel, 'gui-active'); + }; + } + if ( Utils.$hasClass(mel, 'gui-active') ) { + if ( submenu ) { + Utils.$removeClass(mel, 'gui-active'); + } + } else { + if ( submenu ) { + Utils.$addClass(mel, 'gui-active'); + } + mel.dispatchEvent(new CustomEvent('_select', {detail: getSelectionEventAttribs(mel)})); + } + } + el.querySelectorAll('gui-menu-bar-entry').forEach(function(mel, idx) { + var label = GUI.Helpers.getLabel(mel); + var span = document.createElement('span'); + span.appendChild(document.createTextNode(label)); + mel.setAttribute('role', 'menuitem'); + mel.insertBefore(span, mel.firstChild); + var submenu = mel.querySelector('gui-menu'); + clampSubmenuPositions(submenu); + mel.setAttribute('aria-haspopup', String(!!submenu)); + mel.setAttribute('data-index', String(idx)); + updateChildren(submenu, 2); + }); + Utils.$bind(el, 'click', function(ev) { + var t = ev.isTrusted ? ev.target : (ev.relatedTarget || ev.target); + if ( t && t.tagName === 'GUI-MENU-BAR-ENTRY' ) { + _onClick(ev, t); + } + }, true); + bindIngores(el); + } + }; + OSjs.GUI.Helpers.blurMenu = blurMenu; + OSjs.GUI.Helpers.createMenu = function(items, ev, customInstance) { + items = items || []; + blurMenu(); + var root = customInstance; + var callbackMap = []; + function resolveItems(arr, par) { + arr.forEach(function(iter) { + var props = {label: iter.title, icon: iter.icon, disabled: iter.disabled, labelHTML: iter.titleHTML, type: iter.type, checked: iter.checked}; + var entry = GUI.Helpers.createElement('gui-menu-entry', props); + if ( iter.menu ) { + var nroot = GUI.Helpers.createElement('gui-menu', {}); + resolveItems(iter.menu, nroot); + entry.appendChild(nroot); + } + if ( iter.onClick ) { + var index = callbackMap.push(iter.onClick); + entry.setAttribute('data-callback-id', String(index - 1)); + } + par.appendChild(entry); + }); + } + if ( !root ) { + root = GUI.Helpers.createElement('gui-menu', {}); + resolveItems(items || [], root); + GUI.Elements['gui-menu'].build(root, true); + Utils.$bind(root, 'click', function(ev, pos) { + clickWrapper(ev, pos, function(ev, pos, t) { + var index = parseInt(t.getAttribute('data-callback-id'), 10); + if ( callbackMap[index] ) { + callbackMap[index](ev, pos); + blurMenu(ev); // !last! + } + }); + }, true); + bindIngores(root); + } + if ( root.$element ) { + root = root.$element; + } + var wm = OSjs.Core.getWindowManager(); + var space = wm.getWindowSpace(true); + var pos = Utils.mousePosition(ev); + Utils.$addClass(root, 'gui-root-menu'); + root.style.left = pos.x + 'px'; + root.style.top = pos.y + 'px'; + document.body.appendChild(root); + setTimeout(function() { + var pos = Utils.$position(root); + if ( pos ) { + if ( pos.right > space.width ) { + var newLeft = Math.round(space.width - pos.width); + root.style.left = Math.max(0, newLeft) + 'px'; + } + if ( pos.bottom > space.height ) { + var newTop = Math.round(space.height - pos.height); + root.style.top = Math.max(0, newTop) + 'px'; + } + } + clampSubmenuPositions(root); + }, 1); + lastMenu = function() { + callbackMap = null; + if ( root ) { + root.querySelectorAll('gui-menu-entry').forEach(function(el) { + Utils.$unbind(el); + }); + Utils.$unbind(root); + } + root = Utils.$remove(root); + }; + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function toggleActive(el, eidx, idx) { + Utils.$removeClass(el, 'gui-active'); + if ( eidx === idx ) { + Utils.$addClass(el, 'gui-active'); + } + } + GUI.Elements['gui-tabs'] = { + bind: function(el, evName, callback, params) { + if ( (['select', 'activate']).indexOf(evName) !== -1 ) { + evName = 'change'; + } + if ( evName === 'change' ) { + evName = '_' + evName; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + get: function(el, param, value) { + if ( param === 'current' || param === 'selected' ) { + var cur = el.querySelector('ul > li[class="gui-active"]'); + return Utils.$index(cur); + } + return GUI.Helpers.getProperty(el, param); + }, + build: function(el) { + var tabs = document.createElement('ul'); + var lastTab; + function selectTab(ev, idx, tab) { + if ( lastTab ) { + Utils.$removeClass(lastTab, 'gui-active'); + } + tabs.querySelectorAll('li').forEach(function(tel, eidx) { + toggleActive(tel, eidx, idx); + }); + el.querySelectorAll('gui-tab-container').forEach(function(tel, eidx) { + toggleActive(tel, eidx, idx); + }); + lastTab = tab; + Utils.$addClass(tab, 'gui-active'); + el.dispatchEvent(new CustomEvent('_change', {detail: {index: idx}})); + } + el.querySelectorAll('gui-tab-container').forEach(function(tel, idx) { + var tab = document.createElement('li'); + var label = GUI.Helpers.getLabel(tel); + Utils.$bind(tab, 'click', function(ev) { + selectTab(ev, idx, tab); + }, false); + tab.setAttribute('role', 'tab'); + tab.setAttribute('aria-label', label); + tel.setAttribute('role', 'tabpanel'); + tab.appendChild(document.createTextNode(label)); + tabs.appendChild(tab); + }); + tabs.setAttribute('role', 'tablist'); + el.setAttribute('role', 'navigation'); + if ( el.children.length ) { + el.insertBefore(tabs, el.children[0]); + } else { + el.appendChild(tabs); + } + var currentTab = parseInt(el.getAttribute('data-selected-index'), 10) || 0; + selectTab(null, currentTab); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + var _buttonCount = 0; + function createInputOfType(el, type) { + var group = el.getAttribute('data-group'); + var placeholder = el.getAttribute('data-placeholder'); + var disabled = String(el.getAttribute('data-disabled')) === 'true'; + var value = el.childNodes.length ? el.childNodes[0].nodeValue : null; + Utils.$empty(el); + var input = document.createElement(type === 'textarea' ? 'textarea' : 'input'); + var attribs = { + value: null, + type: type, + tabindex: -1, + placeholder: placeholder, + disabled: disabled ? 'disabled' : null, + name: group ? group + '[]' : null + }; + (['autocomplete', 'autocorrect', 'autocapitalize', 'spellcheck']).forEach(function(a) { + attribs[a] = el.getAttribute('data-' + a) || 'false'; + }); + function _bindDefaults() { + if ( ['range', 'slider'].indexOf(type) >= 0 ) { + attribs.min = el.getAttribute('data-min'); + attribs.max = el.getAttribute('data-max'); + attribs.step = el.getAttribute('data-step'); + } else if ( ['radio', 'checkbox'].indexOf(type) >= 0 ) { + if ( el.getAttribute('data-value') === 'true' ) { + attribs.checked = 'checked'; + } + } else if ( ['text', 'password', 'textarea'].indexOf(type) >= 0 ) { + attribs.value = value || ''; + } + Object.keys(attribs).forEach(function(a) { + if ( attribs[a] !== null ) { + if ( a === 'value' ) { + input.value = attribs[a]; + } else { + input.setAttribute(a, attribs[a]); + } + } + }); + } + function _bindEvents() { + if ( type === 'text' || type === 'password' || type === 'textarea' ) { + Utils.$bind(input, 'keydown', function(ev) { + if ( ev.keyCode === Utils.Keys.ENTER ) { + input.dispatchEvent(new CustomEvent('_enter', {detail: input.value})); + } else if ( ev.keyCode === Utils.Keys.C && ev.ctrlKey ) { + API.setClipboard(input.value); + } + if ( type === 'textarea' && ev.keyCode === Utils.Keys.TAB ) { + ev.preventDefault(); + input.value += '\t'; + } + }, false); + } + } + function _create() { + _bindDefaults(); + _bindEvents(); + GUI.Helpers.createInputLabel(el, type, input); + var rolemap = { + 'TEXTAREA': function() { + return 'textbox'; + }, + 'INPUT': function(i) { + var typemap = { + 'range': 'slider', + 'text': 'textbox', + 'password': 'textbox' + }; + return typemap[i.type] || i.type; + } + }; + if ( rolemap[el.tagName] ) { + input.setAttribute('role', rolemap[el.tagName](input)); + } + input.setAttribute('aria-label', el.getAttribute('title') || ''); + el.setAttribute('role', 'region'); + el.setAttribute('aria-disabled', String(disabled)); + Utils.$bind(input, 'change', function(ev) { + var value = input.value; + if ( type === 'radio' || type === 'checkbox' ) { + value = input.checked; //input.value === 'on'; + } + input.dispatchEvent(new CustomEvent('_change', {detail: value})); + }, false); + } + _create(); + } + function bindInputEvents(el, evName, callback, params) { + if ( evName === 'enter' ) { + evName = '_enter'; + } else if ( evName === 'change' ) { + evName = '_change'; + } + var target = el.querySelector('textarea, input, select'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + } + function addToSelectBox(el, entries) { + var target = el.querySelector('select'); + if ( !(entries instanceof Array) ) { + entries = [entries]; + } + entries.forEach(function(e) { + var opt = document.createElement('option'); + opt.setAttribute('role', 'option'); + opt.setAttribute('value', e.value); + opt.appendChild(document.createTextNode(e.label)); + target.appendChild(opt); + }); + } + function removeFromSelectBox(el, what) { + var target = el.querySelector('select'); + target.querySelectorAll('option').forEach(function(opt) { + if ( String(opt.value) === String(what) ) { + Utils.$remove(opt); + return false; + } + return true; + }); + } + function callSelectBox(el, method, args) { + if ( method === 'add' ) { + addToSelectBox(el, args[0]); + } else if ( method === 'remove' ) { + removeFromSelectBox(el, args[0]); + } else if ( method === 'clear' ) { + var target = el.querySelector('select'); + Utils.$empty(target); + } + } + function createSelectInput(el, multiple) { + var disabled = el.getAttribute('data-disabled') !== null; + var selected = el.getAttribute('data-selected'); + var select = document.createElement('select'); + if ( multiple ) { + select.setAttribute('size', el.getAttribute('data-size') || 2); + multiple = el.getAttribute('data-multiple') === 'true'; + } + if ( multiple ) { + select.setAttribute('multiple', 'multiple'); + } + if ( disabled ) { + select.setAttribute('disabled', 'disabled'); + } + if ( selected !== null ) { + select.selectedIndex = selected; + } + el.querySelectorAll('gui-select-option').forEach(function(sel) { + var value = sel.getAttribute('data-value') || ''; + var label = sel.childNodes.length ? sel.childNodes[0].nodeValue : ''; + var option = document.createElement('option'); + option.setAttribute('role', 'option'); + option.setAttribute('value', value); + option.appendChild(document.createTextNode(label)); + if ( sel.getAttribute('selected') ) { + option.setAttribute('selected', 'selected'); + } + select.appendChild(option); + sel.parentNode.removeChild(sel); + }); + Utils.$bind(select, 'change', function(ev) { + select.dispatchEvent(new CustomEvent('_change', {detail: select.value})); + }, false); + select.setAttribute('role', 'listbox'); + select.setAttribute('aria-label', el.getAttribute('title') || ''); + el.setAttribute('aria-disabled', String(disabled)); + el.setAttribute('role', 'region'); + el.appendChild(select); + } + function setSwitchValue(val, input, button) { + if ( val !== true ) { + input.removeAttribute('checked'); + Utils.$removeClass(button, 'gui-active'); + button.innerHTML = '0'; + } else { + input.setAttribute('checked', 'checked'); + Utils.$addClass(button, 'gui-active'); + button.innerHTML = '1'; + } + } + var guiSelect = { + bind: bindInputEvents, + call: function() { + callSelectBox.apply(this, arguments); + return this; + }, + build: function(el) { + var multiple = (el.tagName.toLowerCase() === 'gui-select-list'); + createSelectInput(el, multiple); + } + }; + GUI.Elements['gui-label'] = { + set: function(el, param, value, isHTML) { + if ( param === 'value' || param === 'label' ) { + el.setAttribute('data-label', String(value)); + var lbl = el.querySelector('label'); + Utils.$empty(lbl); + if ( isHTML ) { + lbl.innerHTML = value; + } else { + lbl.appendChild(document.createTextNode(value)); + } + return true; + } + return false; + }, + build: function(el) { + var label = GUI.Helpers.getValueLabel(el, true); + var lbl = document.createElement('label'); + lbl.appendChild(document.createTextNode(label)); + el.setAttribute('role', 'heading'); + el.setAttribute('data-label', String(label)); + el.appendChild(lbl); + } + }; + GUI.Elements['gui-textarea'] = { + bind: bindInputEvents, + build: function(el) { + createInputOfType(el, 'textarea'); + }, + set: function(el, param, value) { + if ( el && param === 'scrollTop' ) { + if ( typeof value !== 'number' ) { + value = el.firstChild.scrollHeight; + } + el.firstChild.scrollTop = value; + return true; + } + return false; + } + }; + GUI.Elements['gui-text'] = { + bind: bindInputEvents, + build: function(el) { + createInputOfType(el, 'text'); + } + }; + GUI.Elements['gui-password'] = { + bind: bindInputEvents, + build: function(el) { + createInputOfType(el, 'password'); + } + }; + GUI.Elements['gui-file-upload'] = { + bind: bindInputEvents, + build: function(el) { + var input = document.createElement('input'); + input.setAttribute('role', 'button'); + input.setAttribute('type', 'file'); + input.onchange = function(ev) { + input.dispatchEvent(new CustomEvent('_change', {detail: input.files[0]})); + }; + el.appendChild(input); + } + }; + GUI.Elements['gui-radio'] = { + bind: bindInputEvents, + build: function(el) { + createInputOfType(el, 'radio'); + } + }; + GUI.Elements['gui-checkbox'] = { + bind: bindInputEvents, + build: function(el) { + createInputOfType(el, 'checkbox'); + } + }; + GUI.Elements['gui-switch'] = { + bind: bindInputEvents, + set: function(el, param, value) { + if ( param === 'value' ) { + var input = el.querySelector('input'); + var button = el.querySelector('button'); + setSwitchValue(value, input, button); + return true; + } + return false; + }, + build: function(el) { + var input = document.createElement('input'); + input.type = 'checkbox'; + el.appendChild(input); + var inner = document.createElement('div'); + var button = document.createElement('button'); + inner.appendChild(button); + GUI.Helpers.createInputLabel(el, 'switch', inner); + function toggleValue(v) { + var val = false; + if ( typeof v === 'undefined' ) { + val = !!input.checked; + val = !val; + } else { + val = v; + } + setSwitchValue(val, input, button); + } + Utils.$bind(inner, 'click', function(ev) { + ev.preventDefault(); + var disabled = el.getAttribute('data-disabled') !== null; + if ( !disabled ) { + toggleValue(); + } + }, false); + toggleValue(false); + } + }; + GUI.Elements['gui-button'] = { + set: function(el, param, value, isHTML) { + if ( param === 'value' || param === 'label' ) { + var lbl = el.querySelector('button'); + Utils.$empty(lbl); + if ( isHTML ) { + lbl.innerHTML = value; + } else { + lbl.appendChild(document.createTextNode(value)); + } + lbl.setAttribute('aria-label', value); + return true; + } + return false; + }, + create: function(params) { + var label = params.label; + if ( params.label ) { + delete params.label; + } + var el = GUI.Helpers.createElement('gui-button', params); + if ( label ) { + el.appendChild(document.createTextNode(label)); + } + return el; + }, + bind: function(el, evName, callback, params) { + var target = el.querySelector('button'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var icon = el.getAttribute('data-icon'); + var disabled = el.getAttribute('data-disabled') !== null; + var group = el.getAttribute('data-group'); + var label = GUI.Helpers.getValueLabel(el); + var input = document.createElement('button'); + function setGroup(g) { + if ( g ) { + input.setAttribute('name', g + '[' + _buttonCount + ']'); + Utils.$bind(input, 'click', function() { + var root = el; + while ( root.parentNode ) { + if ( root.tagName.toLowerCase() === 'application-window-content' ) { + break; + } + root = root.parentNode; + } + Utils.$addClass(input, 'gui-active'); + root.querySelectorAll('gui-button[data-group="' + g + '"] > button').forEach(function(b) { + if ( b.name === input.name ) { + return; + } + Utils.$removeClass(b, 'gui-active'); + }); + }); + } + } + function setImage() { + if ( icon && icon !== 'null' ) { + var img = document.createElement('img'); + img.src = icon; + img.alt = el.getAttribute('data-tooltip') || ''; + img.title = el.getAttribute('data-tooltip') || ''; + if ( input.firstChild ) { + input.insertBefore(img, input.firstChild); + } else { + input.appendChild(img); + } + Utils.$addClass(el, 'gui-has-image'); + } + } + function setLabel() { + if ( label ) { + Utils.$addClass(el, 'gui-has-label'); + } + input.appendChild(document.createTextNode(label)); + input.setAttribute('aria-label', label); + } + if ( disabled ) { + input.setAttribute('disabled', 'disabled'); + } + setLabel(); + setImage(); + setGroup(group); + _buttonCount++; + el.setAttribute('role', 'navigation'); + el.appendChild(input); + } + }; + GUI.Elements['gui-select'] = guiSelect; + GUI.Elements['gui-select-list'] = guiSelect; + GUI.Elements['gui-slider'] = { + bind: bindInputEvents, + get: function(el, param) { + var val = GUI.Helpers.getProperty(el, param); + if ( param === 'value' ) { + return parseInt(val, 10); + } + return val; + }, + build: function(el) { + createInputOfType(el, 'range'); + } + }; + GUI.Elements['gui-input-modal'] = { + bind: function(el, evName, callback, params) { + if ( evName === 'open' ) { + evName = '_open'; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + get: function(el, param) { + if ( param === 'value' ) { + var input = el.querySelector('input'); + return input.value; + } + return false; + }, + set: function(el, param, value) { + if ( param === 'value' ) { + var input = el.querySelector('input'); + input.removeAttribute('disabled'); + input.value = value; + input.setAttribute('disabled', 'disabled'); + input.setAttribute('aria-disabled', 'true'); + return true; + } + return false; + }, + build: function(el) { + var container = document.createElement('div'); + var input = document.createElement('input'); + input.type = 'text'; + input.setAttribute('disabled', 'disabled'); + var button = document.createElement('button'); + button.innerHTML = '...'; + Utils.$bind(button, 'click', function(ev) { + el.dispatchEvent(new CustomEvent('_open', {detail: input.value})); + }, false); + container.appendChild(input); + container.appendChild(button); + el.appendChild(container); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function createVisualElement(el, nodeType, applyArgs) { + applyArgs = applyArgs || {}; + if ( typeof applyArgs !== 'object' ) { + console.error('Derp', 'applyArgs was not an object ?!'); + applyArgs = {}; + } + var img = document.createElement(nodeType); + var src = el.getAttribute('data-src'); + var controls = el.getAttribute('data-controls'); + if ( controls ) { + img.setAttribute('controls', 'controls'); + } + var autoplay = el.getAttribute('data-autoplay'); + if ( autoplay ) { + img.setAttribute('autoplay', 'autoplay'); + } + Object.keys(applyArgs).forEach(function(k) { + var val = applyArgs[k]; + if ( typeof val === 'function' ) { + k = k.replace(/^on/, ''); + if ( (nodeType === 'video' || nodeType === 'audio') && k === 'load' ) { + k = 'loadedmetadata'; + } + Utils.$bind(img, k, val.bind(img), false); + } else { + if ( typeof applyArgs[k] === 'boolean' ) { + val = val ? 'true' : 'false'; + } + img.setAttribute(k, val); + } + }); + img.src = src || 'about:blank'; + el.appendChild(img); + } + GUI.Elements['gui-audio'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('audio'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el, applyArgs) { + createVisualElement(el, 'audio', applyArgs); + } + }; + GUI.Elements['gui-video'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('video'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el, applyArgs) { + createVisualElement(el, 'video', applyArgs); + } + }; + GUI.Elements['gui-image'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('img'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el, applyArgs) { + createVisualElement(el, 'img', applyArgs); + } + }; + GUI.Elements['gui-canvas'] = { + bind: function(el, evName, callback, params) { + var target = el.querySelector('canvas'); + Utils.$bind(target, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var canvas = document.createElement('canvas'); + el.appendChild(canvas); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + var _iconSizes = { // Defaults to 16x16 + 'gui-icon-view': '32x32' + }; + function getChildView(el) { + return el.children[0]; + } + function getFileIcon(iter, size) { + if ( iter.icon && typeof iter.icon === 'object' ) { + return API.getIcon(iter.icon.filename, size, iter.icon.application); + } + var icon = 'status/gtk-dialog-question.png'; + return API.getFileIcon(iter, size, icon); + } + function getFileSize(iter) { + var filesize = ''; + if ( iter.type !== 'dir' && iter.size >= 0 ) { + filesize = Utils.humanFileSize(iter.size); + } + return filesize; + } + var removeExtension = (function() { + var mimeConfig; + return function(str, opts) { + if ( !mimeConfig ) { + mimeConfig = API.getConfig('MIME.mapping'); + } + if ( opts.extensions === false ) { + var ext = Utils.filext(str); + if ( ext ) { + ext = '.' + ext; + if ( mimeConfig[ext] ) { + str = str.substr(0, str.length - ext.length); + } + } + } + return str; + }; + })(); + function getDateFromStamp(stamp) { + if ( typeof stamp === 'string' ) { + var date = null; + try { + date = new Date(stamp); + } catch ( e ) {} + if ( date ) { + return OSjs.Helpers.Date.format(date); + } + } + return stamp; + } + function getListViewColumns(iter, opts) { + opts = opts || {}; + var columnMapping = { + filename: { + label: 'LBL_FILENAME', + icon: function() { + return getFileIcon(iter); + }, + value: function() { + return removeExtension(iter.filename, opts); + } + }, + mime: { + label: 'LBL_MIME', + size: '100px', + icon: function() { + return null; + }, + value: function() { + return iter.mime; + } + }, + mtime: { + label: 'LBL_MODIFIED', + size: '160px', + icon: function() { + return null; + }, + value: function() { + return getDateFromStamp(iter.mtime); + } + }, + ctime: { + label: 'LBL_CREATED', + size: '160px', + icon: function() { + return null; + }, + value: function() { + return getDateFromStamp(iter.ctime); + } + }, + size: { + label: 'LBL_SIZE', + size: '120px', + icon: function() { + return null; + }, + value: function() { + return getFileSize(iter); + } + } + }; + var defColumns = ['filename', 'mime', 'size']; + var useColumns = defColumns; + if ( !opts.defaultcolumns ) { + var vfsOptions = Utils.cloneObject(OSjs.Core.getSettingsManager().get('VFS') || {}); + var scandirOptions = vfsOptions.scandir || {}; + useColumns = scandirOptions.columns || defColumns; + } + var columns = []; + useColumns.forEach(function(key, idx) { + var map = columnMapping[key]; + if ( iter ) { + columns.push({ + label: map.value(), + icon: map.icon(), + textalign: idx === 0 ? 'left' : 'right' + }); + } else { + columns.push({ + label: API._(map.label), + size: map.size || '', + resizable: idx > 0, + textalign: idx === 0 ? 'left' : 'right' + }); + } + }); + return columns; + } + function buildChildView(el) { + var type = el.getAttribute('data-type') || 'list-view'; + if ( !type.match(/^gui\-/) ) { + type = 'gui-' + type; + } + var nel = new GUI.ElementDataView(GUI.Helpers.createElement(type, {'draggable': true, 'draggable-type': 'file'})); + GUI.Elements[type].build(nel.$element); + nel.on('select', function(ev) { + el.dispatchEvent(new CustomEvent('_select', {detail: ev.detail})); + }); + nel.on('activate', function(ev) { + el.dispatchEvent(new CustomEvent('_activate', {detail: ev.detail})); + }); + nel.on('contextmenu', function(ev) { + if ( !el.hasAttribute('data-has-contextmenu') || el.hasAttribute('data-has-contextmenu') === 'false' ) { + new GUI.Element(el).fn('contextmenu', [ev]); + } + el.dispatchEvent(new CustomEvent('_contextmenu', {detail: ev.detail})); + }); + if ( type === 'gui-tree-view' ) { + nel.on('expand', function(ev) { + el.dispatchEvent(new CustomEvent('_expand', {detail: ev.detail})); + }); + } + el.setAttribute('role', 'region'); + el.appendChild(nel.$element); + } + function scandir(tagName, dir, opts, cb, oncreate) { + var file = new VFS.File(dir); + file.type = 'dir'; + var scanopts = { + backlink: opts.backlink, + showDotFiles: opts.dotfiles === true, + showFileExtensions: opts.extensions === true, + mimeFilter: opts.filter || [], + typeFilter: opts.filetype || null + }; + try { + VFS.scandir(file, function(error, result) { + if ( error ) { + cb(error); return; + } + var list = []; + var summary = {size: 0, directories: 0, files: 0, hidden: 0}; + function isHidden(iter) { + return (iter.filename || '').substr(0) === '.'; + } + (result || []).forEach(function(iter) { + list.push(oncreate(iter)); + summary.size += iter.size || 0; + summary.directories += iter.type === 'dir' ? 1 : 0; + summary.files += iter.type !== 'dir' ? 1 : 0; + summary.hidden += isHidden(iter) ? 1 : 0; + }); + cb(false, list, summary); + }, scanopts); + } catch ( e ) { + cb(e); + } + } + function readdir(el, dir, done, sopts) { + sopts = sopts || {}; + var vfsOptions = Utils.cloneObject(OSjs.Core.getSettingsManager().get('VFS') || {}); + var scandirOptions = vfsOptions.scandir || {}; + var target = getChildView(el); + var tagName = target.tagName.toLowerCase(); + el.setAttribute('data-path', dir); + var opts = {filter: null, backlink: sopts.backlink}; + function setOption(s, d, c, cc) { + if ( el.hasAttribute(s) ) { + opts[d] = c(el.getAttribute(s)); + } else { + opts[d] = (cc || function() {})(); + } + } + setOption('data-dotfiles', 'dotfiles', function(val) { + return val === 'true'; + }, function() { + return scandirOptions.showHiddenFiles === true; + }); + setOption('data-extensions', 'extensions', function(val) { + return val === 'true'; + }, function() { + return scandirOptions.showFileExtensions === true; + }); + setOption('data-filetype', 'filetype', function(val) { + return val; + }); + setOption('data-defaultcolumns', 'defaultcolumns', function(val) { + return val === 'true'; + }); + try { + opts.filter = JSON.parse(el.getAttribute('data-filter')); + } catch ( e ) { + } + scandir(tagName, dir, opts, function(error, result, summary) { + if ( tagName === 'gui-list-view' ) { + GUI.Elements[tagName].set(target, 'zebra', true); + GUI.Elements[tagName].set(target, 'columns', getListViewColumns(null, opts)); + } + done(error, result, summary); + }, function(iter) { + var tooltip = Utils.format('{0}\n{1}\n{2} {3}', iter.type.toUpperCase(), iter.filename, getFileSize(iter), iter.mime || ''); + function _createEntry() { + var row = { + value: iter, + id: iter.id || removeExtension(iter.filename, opts), + label: iter.filename, + tooltip: tooltip, + icon: getFileIcon(iter, _iconSizes[tagName] || '16x16') + }; + if ( tagName === 'gui-tree-view' && iter.type === 'dir' ) { + if ( iter.filename !== '..' ) { + row.entries = [{ + label: 'Loading...' + }]; + } + } + return row; + } + if ( tagName !== 'gui-list-view' ) { + return _createEntry(); + } + return { + value: iter, + id: iter.id || iter.filename, + tooltip: tooltip, + columns: getListViewColumns(iter, opts) + }; + }); + } + GUI.Elements['gui-file-view'] = { + bind: function(el, evName, callback, params) { + if ( (['activate', 'select', 'contextmenu']).indexOf(evName) !== -1 ) { + evName = '_' + evName; + } + if ( evName === '_contextmenu' ) { + el.setAttribute('data-has-contextmenu', 'true'); + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + set: function(el, param, value, arg, arg2) { + if ( param === 'type' ) { + var firstChild = el.children[0]; + if ( firstChild && firstChild.tagName.toLowerCase() === value ) { + return true; + } + Utils.$empty(el); + el.setAttribute('data-type', value); + Utils.$bind(el, '_expand', function(ev) { + var target = ev.detail.element; + if ( target.getAttribute('data-was-rendered') ) { + return; + } + if ( ev.detail.expanded ) { + var view = new GUI.ElementDataView(getChildView(el)); + var entry = ev.detail.entries[0].data; + target.setAttribute('data-was-rendered', String(true)); + readdir(el, entry.path, function(error, result, summary) { + if ( !error ) { + target.querySelectorAll('gui-tree-view-entry').forEach(function(e) { + Utils.$remove(e); + view.add({ + entries: result, + parentNode: target + }); + }); + } + }, {backlink: false}); + } + }); + buildChildView(el); + if ( typeof arg === 'undefined' || arg === true ) { + GUI.Elements['gui-file-view'].call(el, 'chdir', { + path: el.getAttribute('data-path') + }); + } + return true; + } else if ( (['filter', 'dotfiles', 'filetype', 'extensions', 'defaultcolumns']).indexOf(param) >= 0 ) { + GUI.Helpers.setProperty(el, param, value); + return true; + } + var target = getChildView(el); + if ( target ) { + var tagName = target.tagName.toLowerCase(); + GUI.Elements[tagName].set(target, param, value, arg, arg2); + return true; + } + return false; + }, + build: function(el) { + buildChildView(el); + }, + values: function(el) { + var target = getChildView(el); + if ( target ) { + var tagName = target.tagName.toLowerCase(); + return GUI.Elements[tagName].values(target); + } + return null; + }, + contextmenu: function(ev) { + var vfsOptions = OSjs.Core.getSettingsManager().instance('VFS'); + var scandirOptions = (vfsOptions.get('scandir') || {}); + function setOption(opt, toggle) { + var opts = {scandir: {}}; + opts.scandir[opt] = toggle; + vfsOptions.set(null, opts, true); + } + API.createMenu([ + { + title: API._('LBL_SHOW_HIDDENFILES'), + type: 'checkbox', + checked: scandirOptions.showHiddenFiles === true, + onClick: function() { + setOption('showHiddenFiles', !scandirOptions.showHiddenFiles); + } + }, + { + title: API._('LBL_SHOW_FILEEXTENSIONS'), + type: 'checkbox', + checked: scandirOptions.showFileExtensions === true, + onClick: function() { + setOption('showFileExtensions', !scandirOptions.showFileExtensions); + } + } + ], ev); + }, + call: function(el, method, args) { + args = args || {}; + args.done = args.done || function() {}; + var target = getChildView(el); + if ( target ) { + var tagName = target.tagName.toLowerCase(); + if ( method === 'chdir' ) { + var t = new GUI.ElementDataView(target); + var dir = args.path || OSjs.API.getDefaultPath(); + clearTimeout(el._readdirTimeout); + el._readdirTimeout = setTimeout(function() { + readdir(el, dir, function(error, result, summary) { + if ( error ) { + API.error(API._('ERR_VFSMODULE_XHR_ERROR'), API._('ERR_VFSMODULE_SCANDIR_FMT', dir), error); + } else { + t.clear(); + t.add(result); + } + args.done(error, summary); + }); + el._readdirTimeout = clearTimeout(el._readdirTimeout); + }, 50); // Prevent exessive calls + return; + } + GUI.Elements[tagName].call(target, method, args); + } + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function createEntry(e) { + var entry = GUI.Helpers.createElement('gui-tree-view-entry', e, ['entries']); + return entry; + } + function handleItemExpand(ev, el, root, expanded) { + if ( typeof expanded === 'undefined' ) { + expanded = !Utils.$hasClass(root, 'gui-expanded'); + } + Utils.$removeClass(root, 'gui-expanded'); + if ( expanded ) { + Utils.$addClass(root, 'gui-expanded'); + } + var children = root.children; + for ( var i = 0; i < children.length; i++ ) { + if ( children[i].tagName.toLowerCase() === 'gui-tree-view-entry' ) { + children[i].style.display = expanded ? 'block' : 'none'; + } + } + var selected = { + index: Utils.$index(root), + data: GUI.Helpers.getViewNodeValue(root) + }; + root.setAttribute('data-expanded', String(expanded)); + root.setAttribute('aria-expanded', String(expanded)); + el.dispatchEvent(new CustomEvent('_expand', {detail: {entries: [selected], expanded: expanded, element: root}})); + } // handleItemExpand() + function initEntry(el, sel) { + if ( sel._rendered ) { + return; + } + sel._rendered = true; + var icon = sel.getAttribute('data-icon'); + var label = GUI.Helpers.getLabel(sel); + var expanded = el.getAttribute('data-expanded') === 'true'; + var next = sel.querySelector('gui-tree-view-entry'); + var container = document.createElement('div'); + var dspan = document.createElement('span'); + function onDndEnter(ev) { + ev.stopPropagation(); + Utils.$addClass(sel, 'dnd-over'); + } + function onDndLeave(ev) { + Utils.$removeClass(sel, 'dnd-over'); + } + if ( icon ) { + dspan.style.backgroundImage = 'url(' + icon + ')'; + Utils.$addClass(dspan, 'gui-has-image'); + } + dspan.appendChild(document.createTextNode(label)); + container.appendChild(dspan); + if ( next ) { + Utils.$addClass(sel, 'gui-expandable'); + var expander = document.createElement('gui-tree-view-expander'); + sel.insertBefore(container, next); + sel.insertBefore(expander, container); + } else { + sel.appendChild(container); + } + if ( String(sel.getAttribute('data-draggable')) === 'true' ) { + GUI.Helpers.createDraggable(container, (function() { + var data = {}; + try { + data = JSON.parse(sel.getAttribute('data-value')); + } catch ( e ) {} + return {data: data}; + })()); + } + if ( String(sel.getAttribute('data-droppable')) === 'true' ) { + var timeout; + GUI.Helpers.createDroppable(container, { + onEnter: onDndEnter, + onOver: onDndEnter, + onLeave: onDndLeave, + onDrop: onDndLeave, + onItemDropped: function(ev, eel, item) { + ev.stopPropagation(); + ev.preventDefault(); + timeout = clearTimeout(timeout); + timeout = setTimeout(function() { + Utils.$removeClass(sel, 'dnd-over'); + }, 10); + var dval = {}; + try { + dval = JSON.parse(eel.parentNode.getAttribute('data-value')); + } catch ( e ) {} + el.dispatchEvent(new CustomEvent('_drop', {detail: { + src: item.data, + dest: dval + }})); + } + }); + } + handleItemExpand(null, el, sel, expanded); + GUI.Elements._dataview.bindEntryEvents(el, sel, 'gui-tree-view-entry'); + } + GUI.Elements['gui-tree-view'] = { + bind: GUI.Elements._dataview.bind, + values: function(el) { + return GUI.Elements._dataview.getSelected(el, el.querySelectorAll('gui-tree-view-entry')); + }, + build: function(el, applyArgs) { + var body = el.querySelector('gui-tree-view-body'); + var found = !!body; + if ( !body ) { + body = document.createElement('gui-tree-view-body'); + el.appendChild(body); + } + body.setAttribute('role', 'group'); + el.setAttribute('role', 'tree'); + el.setAttribute('aria-multiselectable', body.getAttribute('data-multiselect') || 'false'); + el.querySelectorAll('gui-tree-view-entry').forEach(function(sel, idx) { + sel.setAttribute('aria-expanded', 'false'); + if ( !found ) { + body.appendChild(sel); + } + sel.setAttribute('role', 'treeitem'); + initEntry(el, sel); + }); + GUI.Elements._dataview.build(el, applyArgs); + }, + get: function(el, param, value, arg) { + if ( param === 'entry' ) { + var body = el.querySelector('gui-tree-view-body'); + return GUI.Elements._dataview.getEntry(el, body.querySelectorAll('gui-tree-view-entry'), value, arg); + } + return GUI.Helpers.getProperty(el, param); + }, + set: function(el, param, value, arg, arg2) { + var body = el.querySelector('gui-tree-view-body'); + if ( param === 'selected' || param === 'value' ) { + GUI.Elements._dataview.setSelected(el, body, body.querySelectorAll('gui-tree-view-entry'), value, arg, arg2); + return true; + } + return false; + }, + call: function(el, method, args) { + var body = el.querySelector('gui-tree-view-body'); + function recurse(a, root, level) { + GUI.Elements._dataview.add(el, a, function(e) { + if ( e ) { + if ( e.parentNode ) { + delete e.parentNode; + } + var entry = createEntry(e); + root.appendChild(entry); + if ( e.entries ) { + recurse([e.entries], entry, level + 1); + } + initEntry(el, entry); + } + }); + } + function add() { + var parentNode = body; + var entries = args; + if ( typeof args[0] === 'object' && !(args[0] instanceof Array) && Object.keys(args[0]).length ) { + entries = [args[0].entries || []]; + parentNode = args[0].parentNode || body; + } + recurse(entries, parentNode, 0); + } + if ( method === 'add' ) { + add(); + } else if ( method === 'remove' ) { + GUI.Elements._dataview.remove(el, args, 'gui-tree-view-entry'); + } else if ( method === 'clear' ) { + GUI.Elements._dataview.clear(el, body); + } else if ( method === 'patch' ) { + GUI.Elements._dataview.patch(el, args, 'gui-tree-view-entry', body, createEntry, initEntry); + } else if ( method === 'focus' ) { + GUI.Elements._dataview.focus(el); + } else if ( method === 'expand' ) { + handleItemExpand(args.ev, el, args.entry); + } + return this; + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function createFakeHeader(el) { + function createResizers() { + var fhead = el.querySelector('gui-list-view-fake-head'); + var head = el.querySelector('gui-list-view-head'); + var fcols = fhead.querySelectorAll('gui-list-view-column'); + var cols = head.querySelectorAll('gui-list-view-column'); + fhead.querySelectorAll('gui-list-view-column-resizer').forEach(function(rel) { + Utils.$remove(rel); + }); + cols.forEach(function(col, idx) { + var attr = col.getAttribute('data-resizable'); + if ( attr === 'true' ) { + var fcol = fcols[idx]; + var resizer = document.createElement('gui-list-view-column-resizer'); + fcol.appendChild(resizer); + var startWidth = 0; + var maxWidth = 0; + var widthOffset = 16; + var minWidth = widthOffset; + var tmpEl = null; + GUI.Helpers.createDrag(resizer, function(ev) { + startWidth = col.offsetWidth; + minWidth = widthOffset;//calculateWidth(); + maxWidth = el.offsetWidth - (el.children.length * widthOffset); + }, function(ev, diff) { + var newWidth = startWidth - diff.x; + if ( !isNaN(newWidth) && newWidth > minWidth && newWidth < maxWidth ) { + col.style.width = String(newWidth) + 'px'; + fcol.style.width = String(newWidth) + 'px'; + } + tmpEl = Utils.$remove(tmpEl); + }); + } + }); + } + var fh = el.querySelector('gui-list-view-fake-head gui-list-view-head'); + Utils.$empty(fh); + var row = el.querySelector('gui-list-view-head gui-list-view-row'); + if ( row ) { + fh.appendChild(row.cloneNode(true)); + createResizers(); + } + } + function initRow(el, row) { + row.querySelectorAll('gui-list-view-column').forEach(function(cel, idx) { + var icon = cel.getAttribute('data-icon'); + if ( icon && icon !== 'null' ) { + Utils.$addClass(cel, 'gui-has-image'); + cel.style.backgroundImage = 'url(' + icon + ')'; + } + var text = cel.firstChild; + if ( text && text.nodeType === 3 ) { + var span = document.createElement('span'); + span.appendChild(document.createTextNode(text.nodeValue)); + cel.insertBefore(span, text); + cel.removeChild(text); + } + if ( el._columns[idx] && !el._columns[idx].visible ) { + cel.style.display = 'none'; + } + cel.setAttribute('role', 'listitem'); + }); + GUI.Elements._dataview.bindEntryEvents(el, row, 'gui-list-view-row'); + } + function createEntry(v, head) { + var label = v.label || ''; + if ( v.label ) { + delete v.label; + } + var setSize = null; + if ( v.size ) { + setSize = v.size; + delete v.size; + } + var nel = GUI.Helpers.createElement('gui-list-view-column', v); + if ( setSize ) { + nel.style.width = setSize; + } + if ( typeof label === 'function' ) { + nel.appendChild(label.call(nel, nel, v)); + } else { + var span = document.createElement('span'); + span.appendChild(document.createTextNode(label)); + nel.appendChild(span); + } + return nel; + } + function createRow(e) { + e = e || {}; + if ( e.columns ) { + var row = GUI.Helpers.createElement('gui-list-view-row', e, ['columns']); + e.columns.forEach(function(se) { + row.appendChild(createEntry(se)); + }); + return row; + } + return null; + } + GUI.Elements['gui-list-view'] = { + bind: GUI.Elements._dataview.bind, + values: function(el) { + var body = el.querySelector('gui-list-view-body'); + return GUI.Elements._dataview.getSelected(el, body.querySelectorAll('gui-list-view-row')); + }, + get: function(el, param, value, arg, asValue) { + if ( param === 'entry' ) { + var body = el.querySelector('gui-list-view-body'); + var rows = body.querySelectorAll('gui-list-view-row'); + return GUI.Elements._dataview.getEntry(el, rows, value, arg, asValue); + } + return GUI.Helpers.getProperty(el, param); + }, + set: function(el, param, value, arg, arg2) { + if ( param === 'columns' ) { + var head = el.querySelector('gui-list-view-head'); + var row = document.createElement('gui-list-view-row'); + Utils.$empty(head); + el._columns = []; + value.forEach(function(v) { + v.visible = (typeof v.visible === 'undefined') || v.visible === true; + var nel = createEntry(v, true); + el._columns.push(v); + if ( !v.visible ) { + nel.style.display = 'none'; + } + row.appendChild(nel); + }); + head.appendChild(row); + createFakeHeader(el); + return true; + } else if ( param === 'selected' || param === 'value' ) { + var body = el.querySelector('gui-list-view-body'); + GUI.Elements._dataview.setSelected(el, body, body.querySelectorAll('gui-list-view-row'), value, arg, arg2); + return true; + } + return false; + }, + call: function(el, method, args) { + var body = el.querySelector('gui-list-view-body'); + if ( method === 'add' ) { + GUI.Elements._dataview.add(el, args, function(e) { + var cbCreated = e.onCreated || function() {}; + var row = createRow(e); + if ( row ) { + body.appendChild(row); + initRow(el, row); + } + cbCreated(row); + }); + } else if ( method === 'remove' ) { + GUI.Elements._dataview.remove(el, args, 'gui-list-view-row', null, body); + } else if ( method === 'clear' ) { + GUI.Elements._dataview.clear(el, el.querySelector('gui-list-view-body')); + } else if ( method === 'patch' ) { + GUI.Elements._dataview.patch(el, args, 'gui-list-view-row', body, createRow, initRow); + } else if ( method === 'focus' ) { + GUI.Elements._dataview.focus(el); + } + return this; + }, + build: function(el, applyArgs) { + el._columns = []; + var inner = el.querySelector('gui-list-view-inner'); + var head = el.querySelector('gui-list-view-head'); + var body = el.querySelector('gui-list-view-body'); + function moveIntoInner(cel) { + if ( cel.parentNode.tagName !== 'GUI-LIST-VIEW-INNER' ) { + inner.appendChild(cel); + } + } + var fakeHead = el.querySelector('gui-list-view-fake-head'); + if ( !fakeHead ) { + fakeHead = document.createElement('gui-list-view-fake-head'); + var fakeHeadInner = document.createElement('gui-list-view-inner'); + fakeHeadInner.appendChild(document.createElement('gui-list-view-head')); + fakeHead.appendChild(fakeHeadInner); + } + if ( !inner ) { + inner = document.createElement('gui-list-view-inner'); + el.appendChild(inner); + } + (function _createBody() { + if ( body ) { + moveIntoInner(body); + } else { + body = document.createElement('gui-list-view-body'); + inner.appendChild(body); + } + body.setAttribute('role', 'group'); + })(); + (function _createHead() { + if ( head ) { + moveIntoInner(head); + } else { + head = document.createElement('gui-list-view-head'); + inner.insertBefore(head, body); + } + head.setAttribute('role', 'group'); + })(); + el.setAttribute('role', 'list'); + el.appendChild(fakeHead); + Utils.$bind(el, 'scroll', function(ev) { + fakeHead.style.top = el.scrollTop + 'px'; + }, false); + var hcols = el.querySelectorAll('gui-list-view-head gui-list-view-column'); + hcols.forEach(function(cel, idx) { + var vis = cel.getAttribute('data-visible'); + var iter = { + visible: vis === null || vis === 'true', + size: cel.getAttribute('data-size') + }; + if ( iter.size ) { + cel.style.width = iter.size; + } + el._columns.push(iter); + if ( !iter.visible ) { + cel.style.display = 'none'; + } + }); + createFakeHeader(el); + el.querySelectorAll('gui-list-view-body gui-list-view-row').forEach(function(row) { + initRow(el, row); + }); + GUI.Elements._dataview.build(el, applyArgs); + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function createEntry(e) { + var entry = GUI.Helpers.createElement('gui-icon-view-entry', e); + return entry; + } + function initEntry(el, cel) { + var icon = cel.getAttribute('data-icon'); + var label = GUI.Helpers.getLabel(cel); + var dicon = document.createElement('div'); + var dimg = document.createElement('img'); + dimg.src = icon; + dicon.appendChild(dimg); + var dlabel = document.createElement('div'); + var dspan = document.createElement('span'); + dspan.appendChild(document.createTextNode(label)); + dlabel.appendChild(dspan); + GUI.Elements._dataview.bindEntryEvents(el, cel, 'gui-icon-view-entry'); + cel.setAttribute('role', 'listitem'); + cel.appendChild(dicon); + cel.appendChild(dlabel); + } + GUI.Elements['gui-icon-view'] = { + bind: GUI.Elements._dataview.bind, + values: function(el) { + return GUI.Elements._dataview.getSelected(el, el.querySelectorAll('gui-icon-view-entry')); + }, + build: function(el, applyArgs) { + var body = el.querySelector('gui-icon-view-body'); + var found = !!body; + if ( !body ) { + body = document.createElement('gui-icon-view-body'); + el.appendChild(body); + } + el.querySelectorAll('gui-icon-view-entry').forEach(function(cel, idx) { + if ( !found ) { + body.appendChild(cel); + } + initEntry(el, cel); + }); + el.setAttribute('role', 'list'); + GUI.Elements._dataview.build(el, applyArgs); + }, + get: function(el, param, value, arg, asValue) { + if ( param === 'entry' ) { + var body = el.querySelector('gui-icon-view-body'); + var rows = body.querySelectorAll('gui-icon-view-entry'); + return GUI.Elements._dataview.getEntry(el, rows, value, arg, asValue); + } + return GUI.Helpers.getProperty(el, param); + }, + set: function(el, param, value, arg) { + var body = el.querySelector('gui-icon-view-body'); + if ( param === 'selected' || param === 'value' ) { + GUI.Elements._dataview.setSelected(el, body, body.querySelectorAll('gui-icon-view-entry'), value, arg); + return true; + } + return false; + }, + call: function(el, method, args) { + var body = el.querySelector('gui-icon-view-body'); + if ( method === 'add' ) { + GUI.Elements._dataview.add(el, args, function(e) { + var entry = createEntry(e); + body.appendChild(entry); + initEntry(el, entry); + }); + } else if ( method === 'remove' ) { + GUI.Elements._dataview.remove(el, args, 'gui-icon-view-entry'); + } else if ( method === 'clear' ) { + GUI.Elements._dataview.clear(el, body); + } else if ( method === 'patch' ) { + GUI.Elements._dataview.patch(el, args, 'gui-icon-view-entry', body, createEntry, initEntry); + } else if ( method === 'focus' ) { + GUI.Elements._dataview.focus(el); + } + return this; + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + function getDocument(el, iframe) { + iframe = iframe || el.querySelector('iframe'); + return iframe.contentDocument || iframe.contentWindow.document; + } + function getDocumentData(el) { + try { + var doc = getDocument(el); + return doc.body.innerHTML; + } catch ( error ) { + console.error('gui-richtext', 'getDocumentData()', error.stack, error); + } + return ''; + } + function destroyFixInterval(el) { + el._fixTry = 0; + el._fixInterval = clearInterval(el._fixInterval); + } + function createFixInterval(el, doc, text) { + if ( el._fixTry > 10 ) { + el._fixTry = 0; + return; + } + el._fixInterval = setInterval(function() { + try { + if ( text ) { + doc.body.innerHTML = text; + } + destroyFixInterval(el); + } catch ( error ) { + console.warn('gui-richtext', 'setDocumentData()', error.stack, error, '... trying again'); + } + el._fixTry++; + }, 100); + } + function setDocumentData(el, text) { + destroyFixInterval(el); + text = text || ''; + var wm = OSjs.Core.getWindowManager(); + var theme = (wm ? wm.getSetting('theme') : 'default') || 'default'; + var themeSrc = OSjs.API.getThemeCSS(theme); + var editable = el.getAttribute('data-editable'); + editable = editable === null || editable === 'true'; + function onMouseDown(ev) { + function insertTextAtCursor(text) { + var sel, range; + if (window.getSelection) { + sel = window.getSelection(); + if (sel.getRangeAt && sel.rangeCount) { + range = sel.getRangeAt(0); + range.deleteContents(); + range.insertNode( document.createTextNode(text) ); + } + } else if (document.selection && document.selection.createRange) { + document.selection.createRange().text = text; + } + } + if ( ev.keyCode === 9 ) { + insertTextAtCursor('\u00A0'); + ev.preventDefault(); + } + } + var script = onMouseDown.toString() + ';window.addEventListener("keydown", onMouseDown)'; + var template = ''; + if ( !editable ) { + template = template.replace(' contentEditable="true"', ''); + } + var doc = getDocument(el); + doc.open(); + doc.write(template); + doc.close(); + createFixInterval(el, doc, text); + } + GUI.Elements['gui-richtext'] = { + bind: function(el, evName, callback, params) { + if ( (['selection']).indexOf(evName) !== -1 ) { + evName = '_' + evName; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var text = el.childNodes.length ? el.childNodes[0].nodeValue : ''; + Utils.$empty(el); + var iframe = document.createElement('iframe'); + iframe.setAttribute('border', 0); + iframe.onload = function() { + iframe.contentWindow.addEventListener('selectstart', function() { + el.dispatchEvent(new CustomEvent('_selection', {detail: {}})); + }); + iframe.contentWindow.addEventListener('mouseup', function() { + el.dispatchEvent(new CustomEvent('_selection', {detail: {}})); + }); + }; + el.appendChild(iframe); + setTimeout(function() { + try { + setDocumentData(el, text); + } catch ( e ) { + console.warn('gui-richtext', 'build()', e); + } + }, 1); + }, + call: function(el, method, args) { + var doc = getDocument(el); + try { + if ( method === 'command' ) { + if ( doc && doc.execCommand ) { + return doc.execCommand.apply(doc, args); + } + } else if ( method === 'query' ) { + if ( doc && doc.queryCommandValue ) { + return doc.queryCommandValue.apply(doc, args); + } + } + } catch ( e ) { + console.warn('gui-richtext call() warning', e.stack, e); + } + return null; + }, + get: function(el, param, value) { + if ( param === 'value' ) { + return getDocumentData(el); + } + return GUI.Helpers.getProperty(el, param); + }, + set: function(el, param, value) { + if ( param === 'value' ) { + setDocumentData(el, value); + return true; + } + return false; + } + }; +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, VFS, GUI) { + 'use strict'; + GUI.Elements['gui-paned-view'] = { + bind: function(el, evName, callback, params) { + if ( evName === 'resize' ) { + evName = '_' + evName; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var orient = el.getAttribute('data-orientation') || 'horizontal'; + function bindResizer(resizer, idx, cel) { + var resizeEl = resizer.previousElementSibling; + if ( !resizeEl ) { + return; + } + var startWidth = resizeEl.offsetWidth; + var startHeight = resizeEl.offsetHeight; + var minSize = 16; + var maxSize = Number.MAX_VALUE; + GUI.Helpers.createDrag(resizer, function(ev) { + startWidth = resizeEl.offsetWidth; + startHeight = resizeEl.offsetHeight; + minSize = parseInt(cel.getAttribute('data-min-size'), 10) || minSize; + var max = parseInt(cel.getAttribute('data-max-size'), 10); + if ( !max ) { + var totalHeight = resizer.parentNode.offsetHeight; + var totalContainers = resizer.parentNode.querySelectorAll('gui-paned-view-container').length; + var totalSpacers = resizer.parentNode.querySelectorAll('gui-paned-view-handle').length; + maxSize = totalHeight - (totalContainers * 16) - (totalSpacers * 8); + } + }, function(ev, diff) { + var newWidth = startWidth + diff.x; + var newHeight = startHeight + diff.y; + var flex; + if ( orient === 'horizontal' ) { + if ( !isNaN(newWidth) && newWidth > 0 && newWidth >= minSize && newWidth <= maxSize ) { + flex = newWidth.toString() + 'px'; + } + } else { + if ( !isNaN(newHeight) && newHeight > 0 && newHeight >= minSize && newHeight <= maxSize ) { + flex = newHeight.toString() + 'px'; + } + } + if ( flex ) { + resizeEl.style.webkitFlexBasis = flex; + resizeEl.style.mozFflexBasis = flex; + resizeEl.style.msFflexBasis = flex; + resizeEl.style.oFlexBasis = flex; + resizeEl.style.flexBasis = flex; + } + }, function(ev) { + el.dispatchEvent(new CustomEvent('_resize', {detail: {index: idx}})); + }); + } + el.querySelectorAll('gui-paned-view-container').forEach(function(cel, idx) { + if ( idx % 2 ) { + var resizer = document.createElement('gui-paned-view-handle'); + resizer.setAttribute('role', 'separator'); + cel.parentNode.insertBefore(resizer, cel); + bindResizer(resizer, idx, cel); + } + }); + } + }; + GUI.Elements['gui-paned-view-container'] = { + build: function(el) { + GUI.Helpers.setFlexbox(el); + } + }; + GUI.Elements['gui-button-bar'] = { + build: function(el) { + el.setAttribute('role', 'toolbar'); + } + }; + GUI.Elements['gui-toolbar'] = { + build: function(el) { + el.setAttribute('role', 'toolbar'); + } + }; + GUI.Elements['gui-grid'] = { + build: function(el) { + var rows = el.querySelectorAll('gui-grid-row'); + var p = 100 / rows.length; + rows.forEach(function(r) { + r.style.height = String(p) + '%'; + }); + } + }; + GUI.Elements['gui-grid-row'] = { + build: function(el) { + } + }; + GUI.Elements['gui-grid-entry'] = { + build: function(el) { + } + }; + GUI.Elements['gui-vbox'] = { + build: function(el) { + } + }; + GUI.Elements['gui-vbox-container'] = { + build: function(el) { + GUI.Helpers.setFlexbox(el); + } + }; + GUI.Elements['gui-hbox'] = { + build: function(el) { + } + }; + GUI.Elements['gui-hbox-container'] = { + build: function(el) { + GUI.Helpers.setFlexbox(el); + } + }; + GUI.Elements['gui-expander'] = (function() { + function toggleState(el, expanded) { + if ( typeof expanded === 'undefined' ) { + expanded = el.getAttribute('data-expanded') !== 'false'; + expanded = !expanded; + } + el.setAttribute('aria-expanded', String(expanded)); + el.setAttribute('data-expanded', String(expanded)); + return expanded; + } + return { + set: function(el, param, value) { + if ( param === 'expanded' ) { + return toggleState(el, value === true); + } + return null; + }, + bind: function(el, evName, callback, params) { + if ( (['change']).indexOf(evName) !== -1 ) { + evName = '_' + evName; + } + Utils.$bind(el, evName, callback.bind(new GUI.Element(el)), params); + }, + build: function(el) { + var lbltxt = el.getAttribute('data-label') || ''; + var label = document.createElement('gui-expander-label'); + Utils.$bind(label, 'click', function(ev) { + el.dispatchEvent(new CustomEvent('_change', {detail: {expanded: toggleState(el)}})); + }, false); + label.appendChild(document.createTextNode(lbltxt)); + el.setAttribute('role', 'toolbar'); + el.setAttribute('aria-expanded', 'true'); + el.setAttribute('data-expanded', 'true'); + if ( el.children.length ) { + el.insertBefore(label, el.children[0]); + } else { + el.appendChild(label); + } + } + }; + })(); +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function AlertDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + DialogWindow.apply(this, ['AlertDialog', { + title: args.title || API._('DIALOG_ALERT_TITLE'), + icon: 'status/dialog-warning.png', + width: 400, + height: 100 + }, args, callback]); + } + AlertDialog.prototype = Object.create(DialogWindow.prototype); + AlertDialog.constructor = DialogWindow; + AlertDialog.prototype.init = function() { + var root = DialogWindow.prototype.init.apply(this, arguments); + root.setAttribute('role', 'alertdialog'); + this.scheme.find(this, 'Message').set('value', this.args.message, true); + return root; + }; + OSjs.Dialogs.Alert = Object.seal(AlertDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function ApplicationChooserDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + DialogWindow.apply(this, ['ApplicationChooserDialog', { + title: args.title || API._('DIALOG_APPCHOOSER_TITLE'), + width: 400, + height: 400 + }, args, callback]); + } + ApplicationChooserDialog.prototype = Object.create(DialogWindow.prototype); + ApplicationChooserDialog.constructor = DialogWindow; + ApplicationChooserDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + var cols = [{label: API._('LBL_NAME')}]; + var rows = []; + var metadata = OSjs.Core.getPackageManager().getPackages(); + (this.args.list || []).forEach(function(name) { + var iter = metadata[name]; + if ( iter && iter.type === 'application' ) { + var label = [iter.name]; + if ( iter.description ) { + label.push(iter.description); + } + rows.push({ + value: iter, + columns: [ + {label: label.join(' - '), icon: API.getIcon(iter.icon, null, name), value: JSON.stringify(iter)} + ] + }); + } + }); + this.scheme.find(this, 'ApplicationList').set('columns', cols).add(rows).on('activate', function(ev) { + self.onClose(ev, 'ok'); + }); + var file = ''; + var label = ''; + if ( this.args.file ) { + file = Utils.format('{0} ({1})', this.args.file.filename, this.args.file.mime); + label = API._('DIALOG_APPCHOOSER_SET_DEFAULT', this.args.file.mime); + } + this.scheme.find(this, 'FileName').set('value', file); + this.scheme.find(this, 'SetDefault').set('label', label); + return root; + }; + ApplicationChooserDialog.prototype.onClose = function(ev, button) { + var result = null; + if ( button === 'ok' ) { + var useDefault = this.scheme.find(this, 'SetDefault').get('value'); + var selected = this.scheme.find(this, 'ApplicationList').get('value'); + if ( selected && selected.length ) { + result = selected[0].data.className; + } + if ( !result ) { + OSjs.API.createDialog('Alert', { + message: API._('DIALOG_APPCHOOSER_NO_SELECTION') + }, null, this); + return; + } + result = { + name: result, + useDefault: useDefault + }; + } + this.closeCallback(ev, button, result); + }; + OSjs.Dialogs.ApplicationChooser = Object.seal(ApplicationChooserDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function ColorDialog(args, callback) { + args = Utils.argumentDefaults(args, { + }); + var rgb = args.color; + var hex = rgb; + if ( typeof rgb === 'string' ) { + hex = rgb; + rgb = Utils.convertToRGB(rgb); + rgb.a = null; + } else { + if ( typeof rgb.a === 'undefined' ) { + rgb.a = null; + } else { + if ( rgb.a > 1.0 ) { + rgb.a /= 100; + } + } + rgb = rgb || {r: 0, g: 0, b: 0, a: 100}; + hex = Utils.convertToHEX(rgb.r, rgb.g, rgb.b); + } + DialogWindow.apply(this, ['ColorDialog', { + title: args.title || API._('DIALOG_COLOR_TITLE'), + icon: 'apps/gnome-settings-theme.png', + width: 400, + height: rgb.a !== null ? 300 : 220 + }, args, callback]); + this.color = {r: rgb.r, g: rgb.g, b: rgb.b, a: rgb.a, hex: hex}; + } + ColorDialog.prototype = Object.create(DialogWindow.prototype); + ColorDialog.constructor = DialogWindow; + ColorDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + function updateHex(update) { + self.scheme.find(self, 'LabelRed').set('value', API._('DIALOG_COLOR_R', self.color.r)); + self.scheme.find(self, 'LabelGreen').set('value', API._('DIALOG_COLOR_G', self.color.g)); + self.scheme.find(self, 'LabelBlue').set('value', API._('DIALOG_COLOR_B', self.color.b)); + self.scheme.find(self, 'LabelAlpha').set('value', API._('DIALOG_COLOR_A', self.color.a)); + if ( update ) { + self.color.hex = Utils.convertToHEX(self.color.r, self.color.g, self.color.b); + } + var value = self.color.hex; + if ( self.color.a !== null && !isNaN(self.color.a) ) { + value = Utils.format('rgba({0}, {1}, {2}, {3})', self.color.r, self.color.g, self.color.b, self.color.a); + } + self.scheme.find(self, 'ColorPreview').set('value', value); + } + this.scheme.find(this, 'ColorSelect').on('change', function(ev) { + self.color = ev.detail; + self.scheme.find(self, 'Red').set('value', self.color.r); + self.scheme.find(self, 'Green').set('value', self.color.g); + self.scheme.find(self, 'Blue').set('value', self.color.b); + updateHex(true); + }); + this.scheme.find(this, 'Red').on('change', function(ev) { + self.color.r = parseInt(ev.detail, 10); + updateHex(true); + }).set('value', this.color.r); + this.scheme.find(this, 'Green').on('change', function(ev) { + self.color.g = parseInt(ev.detail, 10); + updateHex(true); + }).set('value', this.color.g); + this.scheme.find(this, 'Blue').on('change', function(ev) { + self.color.b = parseInt(ev.detail, 10); + updateHex(true); + }).set('value', this.color.b); + this.scheme.find(this, 'Alpha').on('change', function(ev) { + self.color.a = parseInt(ev.detail, 10) / 100; + updateHex(true); + }).set('value', this.color.a * 100); + if ( this.color.a === null ) { + this.scheme.find(this, 'AlphaContainer').hide(); + this.scheme.find(this, 'AlphaLabelContainer').hide(); + } + updateHex(false, this.color.a !== null); + return root; + }; + ColorDialog.prototype.onClose = function(ev, button) { + this.closeCallback(ev, button, button === 'ok' ? this.color : null); + }; + OSjs.Dialogs.Color = Object.seal(ColorDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function ConfirmDialog(args, callback) { + args = Utils.argumentDefaults(args, { + buttons: ['yes', 'no', 'cancel'] + }); + DialogWindow.apply(this, ['ConfirmDialog', { + title: args.title || API._('DIALOG_CONFIRM_TITLE'), + icon: 'status/dialog-question.png', + width: 400, + height: 100 + }, args, callback]); + } + ConfirmDialog.prototype = Object.create(DialogWindow.prototype); + ConfirmDialog.constructor = DialogWindow; + ConfirmDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + var msg = DialogWindow.parseMessage(this.args.message); + this.scheme.find(this, 'Message').empty().append(msg); + var buttonMap = { + yes: 'ButtonYes', + no: 'ButtonNo', + cancel: 'ButtonCancel' + }; + var hide = []; + (['yes', 'no', 'cancel']).forEach(function(b) { + if ( self.args.buttons.indexOf(b) < 0 ) { + hide.push(b); + } + }); + hide.forEach(function(b) { + self.scheme.find(self, buttonMap[b]).hide(); + }); + return root; + }; + OSjs.Dialogs.Confirm = Object.seal(ConfirmDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function ErrorDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + console.error('ErrorDialog::constructor()', args); + var exception = args.exception || {}; + var error = ''; + if ( exception.stack ) { + error = exception.stack; + } else { + if ( Object.keys(exception).length ) { + error = exception.name; + error += '\nFilename: ' + exception.fileName || ''; + error += '\nLine: ' + exception.lineNumber; + error += '\nMessage: ' + exception.message; + if ( exception.extMessage ) { + error += '\n' + exception.extMessage; + } + } + } + DialogWindow.apply(this, ['ErrorDialog', { + title: args.title || API._('DIALOG_CONFIRM_TITLE'), + icon: 'status/dialog-error.png', + width: 400, + height: error ? 400 : 200 + }, args, callback]); + this._sound = 'ERROR'; + this._soundVolume = 1.0; + this.traceMessage = error; + } + ErrorDialog.prototype = Object.create(DialogWindow.prototype); + ErrorDialog.constructor = DialogWindow; + ErrorDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + root.setAttribute('role', 'alertdialog'); + var msg = DialogWindow.parseMessage(this.args.message); + this.scheme.find(this, 'Message').empty().append(msg); + this.scheme.find(this, 'Summary').set('value', this.args.error); + this.scheme.find(this, 'Trace').set('value', this.traceMessage); + if ( !this.traceMessage ) { + this.scheme.find(this, 'Trace').hide(); + this.scheme.find(this, 'TraceLabel').hide(); + } + if ( this.args.bugreport ) { + this.scheme.find(this, 'ButtonBugReport').on('click', function() { + var title = ''; + var body = []; + if ( API.getConfig('BugReporting.options.issue') ) { + var obj = {}; + var keys = ['userAgent', 'platform', 'language', 'appVersion']; + keys.forEach(function(k) { + obj[k] = navigator[k]; + }); + title = API.getConfig('BugReporting.options.title'); + body = [ + '**' + API.getConfig('BugReporting.options.message') + ':**', + '\n', + '> ' + self.args.message, + '\n', + '> ' + (self.args.error || 'Unknown error'), + '\n', + '## Expected behaviour', + '\n', + '## Actual behaviour', + '\n', + '## Steps to reproduce the error', + '\n', + '## (Optinal) Browser and OS information', + '\n', + '```\n' + JSON.stringify(obj) + '\n```' + ]; + if ( self.traceMessage ) { + body.push('\n## Stack Trace \n```\n' + self.traceMessage + '\n```\n'); + } + } + var url = API.getConfig('BugReporting.url') + .replace('%TITLE%', encodeURIComponent(title)) + .replace('%BODY%', encodeURIComponent(body.join('\n'))); + window.open(url); + }); + } else { + this.scheme.find(this, 'ButtonBugReport').hide(); + } + return root; + }; + OSjs.Dialogs.Error = Object.seal(ErrorDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, VFS, Utils, DialogWindow) { + 'use strict'; + function FileDialog(args, callback) { + args = Utils.argumentDefaults(args, { + file: null, + type: 'open', + path: OSjs.API.getDefaultPath(), + filename: '', + filetypes: [], + extension: '', + mime: 'application/octet-stream', + filter: [], + mfilter: [], + select: null, + multiple: false + }); + args.multiple = (args.type === 'save' ? false : args.multiple === true); + if ( args.path && args.path instanceof VFS.File ) { + args.path = Utils.dirname(args.path.path); + } + if ( args.file && args.file.path ) { + args.path = Utils.dirname(args.file.path); + args.filename = args.file.filename; + args.mime = args.file.mime; + if ( args.filetypes.length ) { + var setTo = args.filetypes[0]; + args.filename = Utils.replaceFileExtension(args.filename, setTo.extension); + args.mime = setTo.mime; + } + } + var title = API._(args.type === 'save' ? 'DIALOG_FILE_SAVE' : 'DIALOG_FILE_OPEN'); + var icon = args.type === 'open' ? 'actions/gtk-open.png' : 'actions/gtk-save-as.png'; + DialogWindow.apply(this, ['FileDialog', { + title: title, + icon: icon, + width: 600, + height: 400 + }, args, callback]); + this.selected = null; + this.path = args.path; + var self = this; + this.settingsWatch = OSjs.Core.getSettingsManager().watch('VFS', function() { + self.changePath(); + }); + } + FileDialog.prototype = Object.create(DialogWindow.prototype); + FileDialog.constructor = DialogWindow; + FileDialog.prototype.destroy = function() { + try { + OSjs.Core.getSettingsManager().unwatch(this.settingsWatch); + } catch ( e ) {} + return DialogWindow.prototype.destroy.apply(this, arguments); + }; + FileDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + var view = this.scheme.find(this, 'FileView'); + view.set('filter', this.args.filter); + view.set('filetype', this.args.select || ''); + view.set('defaultcolumns', 'true'); + var filename = this.scheme.find(this, 'Filename'); + var home = this.scheme.find(this, 'HomeButton'); + var mlist = this.scheme.find(this, 'ModuleSelect'); + function checkEmptyInput() { + var disable = false; + if ( self.args.select !== 'dir' ) { + disable = !filename.get('value').length; + } + self.scheme.find(self, 'ButtonOK').set('disabled', disable); + } + this._toggleLoading(true); + view.set('multiple', this.args.multiple); + filename.set('value', this.args.filename || ''); + home.on('click', function() { + var dpath = API.getDefaultPath(); + self.changePath(dpath); + }); + view.on('activate', function(ev) { + self.selected = null; + if ( self.args.type !== 'save' ) { + filename.set('value', ''); + } + if ( ev && ev.detail && ev.detail.entries ) { + var activated = ev.detail.entries[0]; + if ( activated ) { + self.selected = new VFS.File(activated.data); + if ( self.selected.type !== 'dir' ) { + filename.set('value', self.selected.filename); + } + self.checkSelection(ev, true); + } + } + }); + view.on('select', function(ev) { + self.selected = null; + if ( ev && ev.detail && ev.detail.entries ) { + var activated = ev.detail.entries[0]; + if ( activated ) { + self.selected = new VFS.File(activated.data); + if ( self.selected.type !== 'dir' ) { + filename.set('value', self.selected.filename); + } + } + } + checkEmptyInput(); + }); + if ( this.args.type === 'save' ) { + var filetypes = []; + this.args.filetypes.forEach(function(f) { + filetypes.push({ + label: Utils.format('{0} (.{1} {2})', f.label, f.extension, f.mime), + value: f.extension + }); + }); + var ft = this.scheme.find(this, 'Filetype').add(filetypes).on('change', function(ev) { + var newinput = Utils.replaceFileExtension(filename.get('value'), ev.detail); + filename.set('value', newinput); + }); + if ( filetypes.length <= 1 ) { + new OSjs.GUI.Element(ft.$element.parentNode).hide(); + } + filename.on('enter', function(ev) { + self.selected = null; + self.checkSelection(ev); + }); + filename.on('change', function(ev) { + checkEmptyInput(); + }); + filename.on('keyup', function(ev) { + checkEmptyInput(); + }); + } else { + this.scheme.find(this, 'FileInput').hide(); + } + var mm = OSjs.Core.getMountManager(); + var rootPath = mm.getRootFromPath(this.path); + var modules = mm.getModules().filter(function(m) { + if ( self.args.mfilter.length ) { + var success = false; + self.args.mfilter.forEach(function(fn) { + if ( !success ) { + success = fn(m); + } + }); + return success; + } + return true; + }).map(function(m) { + return { + label: m.name + (m.module.readOnly ? Utils.format(' ({0})', API._('LBL_READONLY')) : ''), + value: m.module.root + }; + }); + mlist.clear().add(modules).set('value', rootPath); + mlist.on('change', function(ev) { + self.changePath(ev.detail, true); + }); + this.changePath(); + checkEmptyInput(); + return root; + }; + FileDialog.prototype.changePath = function(dir, fromDropdown) { + var self = this; + var view = this.scheme.find(this, 'FileView'); + var lastDir = this.path; + function resetLastSelected() { + var mm = OSjs.Core.getMountManager(); + var rootPath = mm.getRootFromPath(lastDir); + try { + self.scheme.find(self, 'ModuleSelect').set('value', rootPath); + } catch ( e ) { + console.warn('FileDialog::changePath()', 'resetLastSelection()', e); + } + } + this._toggleLoading(true); + view._call('chdir', { + path: dir || this.path, + done: function(error) { + if ( error ) { + if ( fromDropdown ) { + resetLastSelected(); + } + } else { + if ( dir ) { + self.path = dir; + } + } + self.selected = null; + self._toggleLoading(false); + } + }); + }; + FileDialog.prototype.checkFileExtension = function() { + var filename = this.scheme.find(this, 'Filename'); + var mime = this.args.mime; + var input = filename.get('value'); + if ( this.args.filetypes.length ) { + if ( !input && this.args.filename ) { + input = this.args.filename; + } + if ( input.length ) { + var extension = input.split('.').pop(); + var found = false; + this.args.filetypes.forEach(function(f) { + if ( f.extension === extension ) { + found = f; + } + return !!found; + }); + found = found || this.args.filetypes[0]; + input = Utils.replaceFileExtension(input, found.extension); + mime = found.mime; + } + } + return { + filename: input, + mime: mime + }; + }; + FileDialog.prototype.checkSelection = function(ev, wasActivated) { + var self = this; + if ( this.selected && this.selected.type === 'dir' ) { + if ( wasActivated ) { + this.changePath(this.selected.path); + return false; + } + } + if ( this.args.type === 'save' ) { + var check = this.checkFileExtension(); + if ( !this.path || !check.filename ) { + API.error(API._('DIALOG_FILE_ERROR'), API._('DIALOG_FILE_MISSING_FILENAME')); + return; + } + this.selected = new VFS.File(this.path.replace(/^\//, '') + '/' + check.filename, check.mime); + this._toggleDisabled(true); + VFS.exists(this.selected, function(error, result) { + self._toggleDisabled(false); + if ( self._destroyed ) { + return; + } + if ( error ) { + API.error(API._('DIALOG_FILE_ERROR'), API._('DIALOG_FILE_MISSING_FILENAME')); + } else { + if ( result ) { + self._toggleDisabled(true); + if ( self.selected ) { + API.createDialog('Confirm', { + buttons: ['yes', 'no'], + message: API._('DIALOG_FILE_OVERWRITE', self.selected.filename) + }, function(ev, button) { + self._toggleDisabled(false); + if ( button === 'yes' || button === 'ok' ) { + self.closeCallback(ev, 'ok', self.selected); + } + }, self); + } + } else { + self.closeCallback(ev, 'ok', self.selected); + } + } + }); + return false; + } else { + if ( !this.selected && this.args.select !== 'dir' ) { + API.error(API._('DIALOG_FILE_ERROR'), API._('DIALOG_FILE_MISSING_SELECTION')); + return false; + } + var res = this.selected; + if ( !res && this.args.select === 'dir' ) { + res = new VFS.File({ + filename: Utils.filename(this.path), + path: this.path, + type: 'dir' + }); + } + this.closeCallback(ev, 'ok', res); + } + return true; + }; + FileDialog.prototype.onClose = function(ev, button) { + if ( button === 'ok' && !this.checkSelection(ev) ) { + return; + } + this.closeCallback(ev, button, this.selected); + }; + OSjs.Dialogs.File = Object.seal(FileDialog); +})(OSjs.API, OSjs.VFS, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, VFS, DialogWindow) { + 'use strict'; + function FileInfoDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + DialogWindow.apply(this, ['FileInfoDialog', { + title: args.title || API._('DIALOG_FILEINFO_TITLE'), + width: 400, + height: 400 + }, args, callback]); + if ( !this.args.file ) { + throw new Error('You have to select a file for FileInfo'); + } + } + FileInfoDialog.prototype = Object.create(DialogWindow.prototype); + FileInfoDialog.constructor = DialogWindow; + FileInfoDialog.prototype.init = function() { + var root = DialogWindow.prototype.init.apply(this, arguments); + var txt = this.scheme.find(this, 'Info').set('value', API._('LBL_LOADING')); + var file = this.args.file; + function _onError(error) { + if ( error ) { + txt.set('value', API._('DIALOG_FILEINFO_ERROR_LOOKUP_FMT', file.path)); + } + } + function _onSuccess(data) { + var info = []; + Object.keys(data).forEach(function(i) { + if ( i === 'exif' ) { + info.push(i + ':\n\n' + data[i]); + } else { + info.push(i + ':\n\t' + data[i]); + } + }); + txt.set('value', info.join('\n\n')); + } + VFS.fileinfo(file, function(error, result) { + if ( error ) { + _onError(error); + return; + } + _onSuccess(result || {}); + }); + return root; + }; + OSjs.Dialogs.FileInfo = Object.seal(FileInfoDialog); +})(OSjs.API, OSjs.Utils, OSjs.VFS, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function FileProgressDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + DialogWindow.apply(this, ['FileProgressDialog', { + title: args.title || API._('DIALOG_FILEPROGRESS_TITLE'), + icon: 'actions/document-send.png', + width: 400, + height: 100 + }, args, callback]); + this.busy = !!args.filename; + } + FileProgressDialog.prototype = Object.create(DialogWindow.prototype); + FileProgressDialog.constructor = DialogWindow; + FileProgressDialog.prototype.init = function() { + var root = DialogWindow.prototype.init.apply(this, arguments); + if ( this.args.message ) { + this.scheme.find(this, 'Message').set('value', this.args.message, true); + } + return root; + }; + FileProgressDialog.prototype.onClose = function(ev, button) { + this.closeCallback(ev, button, null); + }; + FileProgressDialog.prototype.setProgress = function(p) { + this.scheme.find(this, 'Progress').set('progress', p); + }; + FileProgressDialog.prototype._close = function(force) { + if ( !force && this.busy ) { + return false; + } + return DialogWindow.prototype._close.call(this); + }; + FileProgressDialog.prototype._onKeyEvent = function(ev) { + if ( !this.busy ) { + DialogWindow.prototype._onKeyEvent.apply(this, arguments); + } + }; + OSjs.Dialogs.FileProgress = Object.seal(FileProgressDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, VFS, Utils, DialogWindow) { + 'use strict'; + function FileUploadDialog(args, callback) { + args = Utils.argumentDefaults(args, { + dest: API.getDefaultPath(), + progress: {}, + file: null + }); + DialogWindow.apply(this, ['FileUploadDialog', { + title: args.title || API._('DIALOG_UPLOAD_TITLE'), + icon: 'actions/filenew.png', + width: 400, + height: 100 + }, args, callback]); + } + FileUploadDialog.prototype = Object.create(DialogWindow.prototype); + FileUploadDialog.constructor = DialogWindow; + FileUploadDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + var message = this.scheme.find(this, 'Message'); + var maxSize = API.getConfig('VFS.MaxUploadSize'); + message.set('value', API._('DIALOG_UPLOAD_DESC', this.args.dest, maxSize), true); + var input = this.scheme.find(this, 'File'); + if ( this.args.file ) { + this.setFile(this.args.file, input); + } else { + input.on('change', function(ev) { + self.setFile(ev.detail, input); + }); + } + return root; + }; + FileUploadDialog.prototype.setFile = function(file, input) { + var self = this; + var progressDialog; + function error(msg, ev) { + API.error( + OSjs.API._('DIALOG_UPLOAD_FAILED'), + OSjs.API._('DIALOG_UPLOAD_FAILED_MSG'), + msg || OSjs.API._('DIALOG_UPLOAD_FAILED_UNKNOWN') + ); + progressDialog._close(true); + self.onClose(ev, 'cancel'); + } + if ( file ) { + var fileSize = 0; + if ( file.size > 1024 * 1024 ) { + fileSize = (Math.round(file.size * 100 / (1024 * 1024)) / 100).toString() + 'MB'; + } else { + fileSize = (Math.round(file.size * 100 / 1024) / 100).toString() + 'KB'; + } + if ( input ) { + input.set('disabled', true); + } + this.scheme.find(this, 'ButtonCancel').set('disabled', true); + var desc = OSjs.API._('DIALOG_UPLOAD_MSG_FMT', file.name, file.type, fileSize, this.dest); + progressDialog = API.createDialog('FileProgress', { + message: desc, + dest: this.args.dest, + filename: file.name, + mime: file.type, + size: fileSize + }, function(ev, button) { + }, this); + if ( this._wmref ) { + this._wmref.createNotificationIcon(this.notificationId, {className: 'BusyNotification', tooltip: desc, image: false}); + } + OSjs.VFS.upload({files: [file], destination: this.args.dest}, function(err, result, ev) { + if ( err ) { + error(err, ev); + return; + } + progressDialog._close(); + self.onClose(ev, 'ok', file); + }, { + onprogress: function(ev) { + if ( ev.lengthComputable ) { + var p = Math.round(ev.loaded * 100 / ev.total); + progressDialog.setProgress(p); + } + } + }); + setTimeout(function() { + if ( progressDialog ) { + progressDialog._focus(); + } + }, 100); + } + }; + FileUploadDialog.prototype.onClose = function(ev, button, result) { + result = result || null; + this.closeCallback(ev, button, result); + }; + OSjs.Dialogs.FileUpload = Object.seal(FileUploadDialog); +})(OSjs.API, OSjs.VFS, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function FontDialog(args, callback) { + args = Utils.argumentDefaults(args, { + fontName: API.getConfig('Fonts.default'), + fontSize: 12, + fontColor: '#000000', + backgroundColor: '#ffffff', + fonts: API.getConfig('Fonts.list'), + minSize: 6, + maxSize: 30, + text: 'The quick brown fox jumps over the lazy dog', + unit: 'px' + }); + if ( args.unit === 'null' || args.unit === 'unit' ) { + args.unit = ''; + } + DialogWindow.apply(this, ['FontDialog', { + title: args.title || API._('DIALOG_FONT_TITLE'), + width: 400, + height: 300 + }, args, callback]); + this.selection = { + fontName: args.fontName, + fontSize: args.fontSize + args.unit + }; + } + FontDialog.prototype = Object.create(DialogWindow.prototype); + FontDialog.constructor = DialogWindow; + FontDialog.prototype.init = function() { + var root = DialogWindow.prototype.init.apply(this, arguments); + var self = this; + var preview = this.scheme.find(this, 'FontPreview'); + var sizes = []; + var fonts = []; + for ( var i = this.args.minSize; i < this.args.maxSize; i++ ) { + sizes.push({value: i, label: i}); + } + for ( var j = 0; j < this.args.fonts.length; j++ ) { + fonts.push({value: this.args.fonts[j], label: this.args.fonts[j]}); + } + function updatePreview() { + preview.querySelector('textarea').style.fontFamily = self.selection.fontName; + preview.querySelector('textarea').style.fontSize = self.selection.fontSize; + } + var listFonts = this.scheme.find(this, 'FontName'); + listFonts.add(fonts).set('value', this.args.fontName); + listFonts.on('change', function(ev) { + self.selection.fontName = ev.detail; + updatePreview(); + }); + var listSizes = this.scheme.find(this, 'FontSize'); + listSizes.add(sizes).set('value', this.args.fontSize); + listSizes.on('change', function(ev) { + self.selection.fontSize = ev.detail + self.args.unit; + updatePreview(); + }); + preview.$element.style.color = this.args.fontColor; + preview.$element.style.backgroundColor = this.args.backgroundColor; + preview.set('value', this.args.text); + if ( this.args.fontSize < 0 ) { + this.scheme.find(this, 'FontSizeContainer').hide(); + } + updatePreview(); + return root; + }; + FontDialog.prototype.onClose = function(ev, button) { + var result = button === 'ok' ? this.selection : null; + this.closeCallback(ev, button, result); + }; + OSjs.Dialogs.Font = Object.seal(FontDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils, DialogWindow) { + 'use strict'; + function InputDialog(args, callback) { + args = Utils.argumentDefaults(args, {}); + DialogWindow.apply(this, ['InputDialog', { + title: args.title || API._('DIALOG_INPUT_TITLE'), + icon: 'status/dialog-information.png', + width: 400, + height: 120 + }, args, callback]); + } + InputDialog.prototype = Object.create(DialogWindow.prototype); + InputDialog.constructor = DialogWindow; + InputDialog.prototype.init = function() { + var self = this; + var root = DialogWindow.prototype.init.apply(this, arguments); + if ( this.args.message ) { + var msg = DialogWindow.parseMessage(this.args.message); + this.scheme.find(this, 'Message').empty().append(msg); + } + var input = this.scheme.find(this, 'Input'); + input.set('placeholder', this.args.placeholder || ''); + input.set('value', this.args.value || ''); + input.on('enter', function(ev) { + self.onClose(ev, 'ok'); + }); + return root; + }; + InputDialog.prototype._focus = function() { + if ( DialogWindow.prototype._focus.apply(this, arguments) ) { + this.scheme.find(this, 'Input').focus(); + return true; + } + return false; + }; + InputDialog.prototype.onClose = function(ev, button) { + var result = this.scheme.find(this, 'Input').get('value'); + this.closeCallback(ev, button, button === 'ok' ? result : null); + }; + InputDialog.prototype.setRange = function(range) { + var input = this.scheme.find(this, 'Input'); + if ( input.$element ) { + input.$element.querySelector('input').select(range); + } + }; + OSjs.Dialogs.Input = Object.seal(InputDialog); +})(OSjs.API, OSjs.Utils, OSjs.Core.DialogWindow); + +(function(API, Utils) { + 'use strict'; + var _handlerInstance; + function appendRequestOptions(data, options) { + options = options || {}; + var onprogress = options.onprogress || function() {}; + var ignore = ['onsuccess', 'onerror', 'onprogress', 'oncanceled']; + Object.keys(options).forEach(function(key) { + if ( ignore.indexOf(key) === -1 ) { + data[key] = options[key]; + } + }); + data.onprogress = function(ev) { + if ( ev.lengthComputable ) { + onprogress(ev, ev.loaded / ev.total); + } else { + onprogress(ev, -1); + } + }; + return data; + } + function HandlerConnection(handler) { + this.index = 0; + this.handler = handler; + this.nw = null; + this.ws = null; + if ( (API.getConfig('Connection.Type') === 'nw') ) { + this.nw = require('osjs').init({ + root: process.cwd(), + settings: { + mimes: API.getConfig('MIME.mapping') + }, + nw: true + }); + } + this.wsqueue = {}; + } + HandlerConnection.prototype.init = function(callback) { + var self = this; + if ( API.getConfig('Connection.Type') === 'ws' ) { + var url = window.location.protocol.replace('http', 'ws') + '//' + window.location.host; + var connected = false; + this.ws = new WebSocket(url); + this.ws.onopen = function() { + connected = true; + callback(); + }; + this.ws.onmessage = function(ev) { + var data = JSON.parse(ev.data); + var idx = data._index; + if ( self.wsqueue[idx] ) { + delete data._index; + self.wsqueue[idx](data); + delete self.wsqueue[idx]; + } + }; + this.ws.onclose = function(ev) { + if ( !connected && ev.code !== 3001 ) { + callback('WebSocket connection error'); // FIXME: Locale + } + }; + } else { + callback(); + } + }; + HandlerConnection.prototype.destroy = function() { + if ( this.ws ) { + this.ws.close(); + } + this.nw = null; + this.ws = null; + this._wsRequest = {}; + }; + HandlerConnection.prototype.callPOST = function(form, options, onsuccess, onerror) { + onerror = onerror || function() { + console.warn('HandlerConnection::callPOST()', 'error', arguments); + }; + Utils.ajax(appendRequestOptions({ + url: OSjs.VFS.Transports.Internal.path(), + method: 'POST', + body: form, + onsuccess: function(result) { + onsuccess(false, result); + }, + onerror: function(result) { + onerror('error', null, result); + }, + oncanceled: function(evt) { + onerror('canceled', null, evt); + } + }, options)); + return true; + }; + HandlerConnection.prototype.callGET = function(args, options, onsuccess, onerror) { + onerror = onerror || function() { + console.warn('HandlerConnection::callGET()', 'error', arguments); + }; + var self = this; + Utils.ajax(appendRequestOptions({ + url: args.url || OSjs.VFS.Transports.Internal.path(args.path), + method: args.method || 'GET', + responseType: 'arraybuffer', + onsuccess: function(response, xhr) { + if ( !xhr || xhr.status === 404 || xhr.status === 500 ) { + onsuccess({error: xhr.statusText || response, result: null}); + return; + } + onsuccess({error: false, result: response}); + }, + onerror: function() { + onerror.apply(self, arguments); + } + }, options)); + return true; + }; + HandlerConnection.prototype.callXHR = function(url, args, options, onsuccess, onerror) { + onerror = onerror || function() { + console.warn('HandlerConnection::callXHR()', 'error', arguments); + }; + var self = this; + Utils.ajax(appendRequestOptions({ + url: url, + method: 'POST', + json: true, + body: args, + onsuccess: function() { + onsuccess.apply(self.handler, arguments); + }, + onerror: function() { + onerror.apply(self.handler, arguments); + } + }, options)); + return true; + }; + HandlerConnection.prototype.callWS = function(path, args, options, onsuccess, onerror) { + onerror = onerror || function() { + console.warn('HandlerConnection::callWS()', 'error', arguments); + }; + var idx = this.index++; + try { + this.ws.send(JSON.stringify({ + _index: idx, + sid: Utils.getCookie('session'), + path: '/' + path, + args: args + })); + this.wsqueue[idx] = onsuccess || function() {}; + return true; + } catch ( e ) { + console.warn('callWS() Warning', e.stack, e); + onerror(e); + } + return false; + }; + HandlerConnection.prototype.callNW = function(method, args, options, onsuccess, onerror) { + onerror = onerror || function() { + console.warn('HandlerConnection::callNW()', 'error', arguments); + }; + try { + this.nw.request(method.match(/^FS\:/) !== null, method.replace(/^FS\:/, ''), args, function(err, res) { + onsuccess({error: err, result: res}); + }); + return true; + } catch ( e ) { + console.warn('callNW() Warning', e.stack, e); + onerror(e); + } + return false; + }; + HandlerConnection.prototype.request = function(isVfs, method, args, options, onsuccess, onerror) { + if ( API.getConfig('Connection.Type') === 'nw' ) { + return this.callNW(method, args, options, onsuccess, onerror); + } + if ( isVfs ) { + if ( method === 'FS:get' ) { + return this.callGET(args, options, onsuccess, onerror); + } else if ( method === 'FS:upload' ) { + return this.callPOST(args, options, onsuccess, onerror); + } + } + var url = (function() { + if ( isVfs ) { + return API.getConfig('Connection.FSURI') + '/' + method.replace(/^FS\:/, ''); + } + return API.getConfig('Connection.APIURI') + '/' + method; + })(); + if ( API.getConfig('Connection.Type') === 'ws' ) { + return this.callWS(url, args, options, onsuccess, onerror); + } + return this.callXHR(url, args, options, onsuccess, onerror); + }; + var _Handler = function() { + if ( _handlerInstance ) { + throw Error('Cannot create another Handler Instance'); + } + this._saveTimeout = null; + this.loggedIn = false; + this.offline = false; + this.userData = { + id : 0, + username: 'root', + name : 'root user', + groups : ['admin'] + }; + this.connection = new HandlerConnection(); + _handlerInstance = this; + }; + _Handler.prototype.init = function(callback) { + var self = this; + API.setLocale(API.getConfig('Locale')); + if ( typeof navigator.onLine !== 'undefined' ) { + Utils.$bind(window, 'offline', function(ev) { + self.onOffline(); + }); + Utils.$bind(window, 'online', function(ev) { + self.onOnline(); + }); + } + this.connection.init(function(err, res) { + callback(err, res); + }); + }; + _Handler.prototype.destroy = function() { + Utils.$unbind(window, 'offline'); + Utils.$unbind(window, 'online'); + if ( this.connection ) { + this.connection.destroy(); + } + this.connection = null; + _handlerInstance = null; + }; + _Handler.prototype.login = function(username, password, callback) { + var opts = {username: username, password: password}; + this.callAPI('login', opts, function(response) { + if ( response.result ) { // This contains an object with user data + callback(false, response.result); + } else { + var error = response.error || API._('ERR_LOGIN_INVALID'); + callback(API._('ERR_LOGIN_FMT', error), false); + } + }, function(error) { + callback(API._('ERR_LOGIN_FMT', error), false); + }); + }; + _Handler.prototype.logout = function(save, callback) { + var self = this; + function _finished() { + var opts = {}; + self.callAPI('logout', opts, function(response) { + if ( response.result ) { + self.loggedIn = false; + callback(true); + } else { + callback(false, 'An error occured: ' + (response.error || 'Unknown error')); + } + }, function(error) { + callback(false, 'Logout error: ' + error); + }); + } + if ( save ) { + this.saveSession(function() { + _finished(true); + }); + return; + } + _finished(true); + }; + _Handler.prototype.saveSession = function(callback) { + var data = []; + API.getProcesses().forEach(function(proc, i) { + if ( proc && (proc instanceof OSjs.Core.Application) ) { + data.push(proc._getSessionData()); + } + }); + OSjs.Core.getSettingsManager().set('UserSession', null, data, callback); + }; + _Handler.prototype.getLastSession = function(callback) { + callback = callback || function() {}; + var res = OSjs.Core.getSettingsManager().get('UserSession'); + var list = []; + (res || []).forEach(function(iter, i) { + var args = iter.args; + args.__resume__ = true; + args.__windows__ = iter.windows || []; + list.push({name: iter.name, args: args}); + }); + callback(false, list); + }; + _Handler.prototype.loadSession = function(callback) { + callback = callback || function() {}; + this.getLastSession(function(err, list) { + if ( err ) { + callback(); + } else { + API.launchList(list, null, null, callback); + } + }); + }; + _Handler.prototype.saveSettings = function(pool, storage, callback) { + var self = this; + var opts = {settings: storage}; + function _save() { + self.callAPI('settings', opts, function(response) { + callback.call(self, false, response.result); + }, function(error) { + callback.call(self, error, false); + }); + } + if ( this._saveTimeout ) { + clearTimeout(this._saveTimeout); + this._saveTimeout = null; + } + setTimeout(_save, 250); + }; + _Handler.prototype.getVFSPath = function(item) { + var base = API.getConfig('Connection.FSURI', '/'); + if ( item ) { + return base + '/get/' + item.path; + } + return base + '/upload'; + }; + _Handler.prototype.getAPICallOptions = function() { + return {}; + }; + _Handler.prototype.callAPI = function(method, args, cbSuccess, cbError, options) { + args = args || {}; + options = Utils.mergeObject(this.getAPICallOptions(), options || {}); + cbSuccess = cbSuccess || function() {}; + cbError = cbError || function() {}; + if ( this.offline ) { + cbError('You are currently off-line and cannot perform this operation!'); + } else if ( (API.getConfig('Connection.Type') === 'standalone') ) { + cbError('You are currently running locally and cannot perform this operation!'); + } else { + if ( method.match(/^FS/) ) { + return this._callVFS(method, args, options, cbSuccess, cbError); + } + return this._callAPI(method, args, options, cbSuccess, cbError); + } + return false; + }; + _Handler.prototype._callAPI = function(method, args, options, cbSuccess, cbError) { + return this.connection.request(false, method, args, options, cbSuccess, cbError); + }; + _Handler.prototype._callVFS = function(method, args, options, cbSuccess, cbError) { + return this.connection.request(true, method, args, options, cbSuccess, cbError); + }; + _Handler.prototype.onLogin = function(data, callback) { + callback = callback || function() {}; + var userSettings = data.userSettings; + if ( !userSettings || userSettings instanceof Array ) { + userSettings = {}; + } + this.userData = data.userData; + function getUserLocale() { + var curLocale = API.getConfig('Locale'); + var detectedLocale = Utils.getUserLocale(); + if ( API.getConfig('LocaleOptions.AutoDetect', true) && detectedLocale ) { + curLocale = detectedLocale; + } + var result = OSjs.Core.getSettingsManager().get('CoreWM'); + if ( !result ) { + try { + result = userSettings.CoreWM; + } catch ( e ) {} + } + return result ? (result.language || curLocale) : curLocale; + } + document.getElementById('LoadingScreen').style.display = 'block'; + API.setLocale(getUserLocale()); + OSjs.Core.getSettingsManager().init(userSettings); + if ( data.blacklistedPackages ) { + OSjs.Core.getPackageManager().setBlacklist(data.blacklistedPackages); + } + this.loggedIn = true; + callback(); + }; + _Handler.prototype.onVFSRequest = function(vfsModule, vfsMethod, vfsArguments, callback) { + callback(); + }; + _Handler.prototype.onVFSRequestCompleted = function(vfsModule, vfsMethod, vfsArguments, vfsError, vfsResult, callback) { + callback(); + }; + _Handler.prototype.onOnline = function() { + console.warn('Handler::onOnline()', 'Going online...'); + this.offline = false; + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.notification({title: 'Warning!', message: 'You are On-line!'}); + } + }; + _Handler.prototype.onOffline = function() { + console.warn('Handler::onOffline()', 'Going offline...'); + this.offline = true; + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.notification({title: 'Warning!', message: 'You are Off-line!'}); + } + }; + _Handler.prototype.getUserData = function() { + return this.userData || {}; + }; + _Handler.prototype.initLoginScreen = function(callback) { + var self = this; + var container = document.getElementById('Login'); + var login = document.getElementById('LoginForm'); + var u = document.getElementById('LoginUsername'); + var p = document.getElementById('LoginPassword'); + var s = document.getElementById('LoginSubmit'); + if ( !container ) { + throw new Error('Could not find Login Form Container'); + } + function _restore() { + s.removeAttribute('disabled'); + u.removeAttribute('disabled'); + p.removeAttribute('disabled'); + } + function _lock() { + s.setAttribute('disabled', 'disabled'); + u.setAttribute('disabled', 'disabled'); + p.setAttribute('disabled', 'disabled'); + } + function _login(username, password) { + self.login(username, password, function(error, result) { + if ( error ) { + alert(error); + _restore(); + return; + } + container.parentNode.removeChild(container); + self.onLogin(result, function() { + callback(); + }); + }); + } + login.onsubmit = function(ev) { + _lock(); + if ( ev ) { + ev.preventDefault(); + } + _login(u.value, p.value); + }; + container.style.display = 'block'; + _restore(); + }; + _Handler.use = (function() { + var traits = { + init: function defaultInit(callback) { + var self = this; + return OSjs.Core._Handler.prototype.init.call(this, function() { + self.initLoginScreen(callback); + }); + }, + login: function defaultLogin(username, password, callback) { + return OSjs.Core._Handler.prototype.login.apply(this, arguments); + }, + logout: function defaultLogout(save, callback) { + return OSjs.Core._Handler.prototype.logout.apply(this, arguments); + }, + settings: function defaultSettings(pool, storage, callback) { + return OSjs.Core._Handler.prototype.saveSettings.apply(this, arguments); + } + }; + function applyTraits(obj, add) { + add.forEach(function(fn) { + obj.prototype[fn] = traits[fn]; + }); + } + var exports = { + defaults: function(obj) { + applyTraits(obj, Object.keys(traits)); + } + }; + Object.keys(traits).forEach(function(k) { + exports[k] = function(obj) { + applyTraits(obj, [k]); + }; + }); + return exports; + })(); + OSjs.Core._Handler = _Handler; + OSjs.Core.Handler = null; + OSjs.Core.getHandler = function() { + return _handlerInstance; + }; +})(OSjs.API, OSjs.Utils); + +(function(API, Utils, VFS) { + 'use strict'; + function getSettings() { + var result = {}; + var key; + for ( var i = 0; i < localStorage.length; i++ ) { + key = localStorage.key(i); + if ( key.match(/^OSjs\//) ) { + try { + result[key.replace(/^OSjs\//, '')] = JSON.parse(localStorage.getItem(key)); + } catch ( e ) { + console.warn('DemoHandler::getSetting()', 'exception', e, e.stack); + } + } + } + return result; + } + function DemoHandler() { + OSjs.Core._Handler.apply(this, arguments); + var curr = API.getConfig('Version'); + var version = localStorage.getItem('__version__'); + if ( curr !== version ) { + console.warn('DemoHandler()', 'You are running', version, 'version is', curr, 'flushing for compability!'); + localStorage.clear(); + } + localStorage.setItem('__version__', String(curr)); + } + DemoHandler.prototype = Object.create(OSjs.Core._Handler.prototype); + DemoHandler.constructor = OSjs.Core._Handler; + DemoHandler.prototype.init = function(callback) { + var self = this; + OSjs.Core._Handler.prototype.init.call(this, function() { + function finished(result) { + result.userSettings = getSettings(); + self.onLogin(result, function() { + callback(); + }); + } + if ( API.getConfig('Connection.Type') === 'standalone' || window.location.protocol === 'file:' ) { + finished({ + userData: { + id: 0, + username: 'demo', + name: 'Local Server', + groups: ['admin'] + } + }); + } else { + self.login('demo', 'demo', function(error, result) { + if ( error ) { + callback(error); + } else { + finished(result); + } + }); + } + }); + }; + DemoHandler.prototype.saveSettings = function(pool, storage, callback) { + Object.keys(storage).forEach(function(key) { + if ( pool && key !== pool ) { + return; + } + try { + localStorage.setItem('OSjs/' + key, JSON.stringify(storage[key])); + } catch ( e ) { + console.warn('DemoHandler::_save()', 'exception', e, e.stack); + } + }); + callback(); + }; + OSjs.Core.Handler = DemoHandler; +})(OSjs.API, OSjs.Utils, OSjs.VFS); + +(function(Utils, API, VFS, Core) { + 'use strict'; + VFS.Helpers.filterScandir = function filterScandir(list, options) { + var defaultOptions = Utils.cloneObject(Core.getSettingsManager().get('VFS') || {}); + options = Utils.argumentDefaults(options, defaultOptions.scandir || {}); + options = Utils.argumentDefaults(options, { + typeFilter: null, + mimeFilter: [], + showHiddenFiles: true + }, true); + function filterFile(iter) { + if ( (options.typeFilter && iter.type !== options.typeFilter) || (!options.showHiddenFiles && iter.filename.match(/^\.\w/)) ) { + return false; + } + return true; + } + function validMime(iter) { + if ( options.mimeFilter && options.mimeFilter.length && iter.mime ) { + return options.mimeFilter.some(function(miter) { + if ( iter.mime.match(miter) ) { + return true; + } + return false; + }); + } + return true; + } + var result = list.filter(function(iter) { + if ( (iter.filename === '..' && options.backlink === false) || !filterFile(iter) ) { + return false; + } + if ( iter.type === 'file' && !validMime(iter) ) { + return false; + } + return true; + }).map(function(iter) { + if ( iter.mime === 'application/vnd.google-apps.folder' ) { + iter.type = 'dir'; + } + return iter; + }); + return result.filter(function(iter) { + return iter.type === 'dir'; + }).concat(result.filter(function(iter) { + return iter.type !== 'dir'; + })); + }; + function _abToSomething(m, arrayBuffer, mime, callback) { + mime = mime || 'application/octet-stream'; + try { + var blob = new Blob([arrayBuffer], {type: mime}); + var r = new FileReader(); + r.onerror = function(e) { + callback(e); + }; + r.onloadend = function() { + callback(false, r.result); + }; + r[m](blob); + } catch ( e ) { + console.warn(e, e.stack); + callback(e); + } + } + VFS.Helpers.addFormFile = function addFormFile(fd, key, data, file) { + if ( data instanceof window.File ) { + fd.append(key, data); + } else { + if ( file ) { + if ( data instanceof window.ArrayBuffer ) { + try { + data = new Blob([data], {type: file.mime}); + } catch ( e ) { + data = null; + console.warn(e, e.stack); + } + } + fd.append(key, data, file.filename); + } else { + if ( data.data && data.filename ) { // In case user defines custom + fd.append(key, data.data, data.filename); + } + } + } + }; + VFS.Helpers.dataSourceToAb = function dataSourceToAb(data, mime, callback) { + var byteString = atob(data.split(',')[1]); + var ab = new ArrayBuffer(byteString.length); + var ia = new Uint8Array(ab); + for (var i = 0; i < byteString.length; i++) { + ia[i] = byteString.charCodeAt(i); + } + callback(false, ab); + }; + VFS.Helpers.textToAb = function textToAb(data, mime, callback) { + _abToSomething('readAsArrayBuffer', data, mime, callback); + }; + VFS.Helpers.abToDataSource = function abToDataSource(arrayBuffer, mime, callback) { + _abToSomething('readAsDataURL', arrayBuffer, mime, callback); + }; + VFS.Helpers.abToText = function abToText(arrayBuffer, mime, callback) { + _abToSomething('readAsText', arrayBuffer, mime, callback); + }; + VFS.Helpers.abToBinaryString = function abToBinaryString(arrayBuffer, mime, callback) { + _abToSomething('readAsBinaryString', arrayBuffer, mime, callback); + }; + VFS.Helpers.abToBlob = function abToBlob(arrayBuffer, mime, callback) { + mime = mime || 'application/octet-stream'; + try { + var blob = new Blob([arrayBuffer], {type: mime}); + callback(false, blob); + } catch ( e ) { + console.warn(e, e.stack); + callback(e); + } + }; + VFS.Helpers.blobToAb = function blobToAb(data, callback) { + try { + var r = new FileReader(); + r.onerror = function(e) { + callback(e); + }; + r.onloadend = function() { + callback(false, r.result); + }; + r.readAsArrayBuffer(data); + } catch ( e ) { + console.warn(e, e.stack); + callback(e); + } + }; +})(OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.Core); + +(function(Utils, API, VFS, Core) { + 'use strict'; + function request(test, method, args, callback, options) { + var mm = Core.getMountManager(); + var d = mm.getModuleFromPath(test, false); + if ( !d ) { + throw new Error(API._('ERR_VFSMODULE_NOT_FOUND_FMT', test)); + } + if ( typeof method !== 'string' ) { + throw new TypeError(API._('ERR_ARGUMENT_FMT', 'VFS::' + method, 'method', 'String', typeof method)); + } + if ( !(args instanceof Object) ) { + throw new TypeError(API._('ERR_ARGUMENT_FMT', 'VFS::' + method, 'args', 'Object', typeof args)); + } + if ( !(callback instanceof Function) ) { + throw new TypeError(API._('ERR_ARGUMENT_FMT', 'VFS::' + method, 'callback', 'Function', typeof callback)); + } + if ( options && !(options instanceof Object) ) { + throw new TypeError(API._('ERR_ARGUMENT_FMT', 'VFS::' + method, 'options', 'Object', typeof options)); + } + var h = Core.getHandler(); + h.onVFSRequest(d, method, args, function vfsRequestCallback(err, response) { + if ( arguments.length === 2 ) { + console.warn('VFS::request()', 'Core::onVFSRequest hijacked the VFS request'); + callback(err, response); + return; + } + try { + mm.getModule(d).request(method, args, function(err, res) { + h.onVFSRequestCompleted(d, method, args, err, res, function(e, r) { + if ( arguments.length === 2 ) { + console.warn('VFS::request()', 'Core::onVFSRequestCompleted hijacked the VFS request'); + callback(e, r); + return; + } else { + callback(err, res); + } + }); + }, options); + } catch ( e ) { + var msg = API._('ERR_VFSMODULE_EXCEPTION_FMT', e.toString()); + callback(msg); + console.warn('VFS::request()', 'exception', e.stack, e); + } + }); + } + function requestWrapper(args, errstr, callback, onfinished, options) { + function _finished(error, response) { + if ( error ) { + error = API._(errstr, error); + } + if ( onfinished ) { + response = onfinished(error, response); + } + callback(error, response); + } + args.push(_finished); + if ( typeof options !== 'undefined' ) { + args.push(options); + } + try { + request.apply(null, args); + } catch ( e ) { + _finished(e); + } + } + function hasAlias(item, retm) { + var mm = OSjs.Core.getMountManager(); + var module = mm.getModuleFromPath(item.path, false, true); + if ( module && module.options && module.options.alias ) { + return retm ? module : item.path.replace(module.match, module.options.alias); + } + return false; + } + function findAlias(item) { + var mm = OSjs.Core.getMountManager(); + var found = null; + mm.getModules().forEach(function(iter) { + if ( !found && iter.module.options && iter.module.options.alias ) { + var a = iter.module.options.alias; + if ( item.path.substr(0, a.length) === a ) { + found = iter.module; + } + } + }); + return found; + } + function checkMetadataArgument(item, err) { + if ( typeof item === 'string' ) { + item = new VFS.File(item); + } else if ( typeof item === 'object' && item.path ) { + item = new VFS.File(item); + } + if ( !(item instanceof VFS.File) ) { + throw new TypeError(err || API._('ERR_VFS_EXPECT_FILE')); + } + var alias = hasAlias(item); + if ( alias ) { + item.path = alias; + } + if ( !Core.getMountManager().getModuleFromPath(item.path, false) ) { + throw new Error(API._('ERR_VFSMODULE_NOT_FOUND_FMT', item.path)); + } + return item; + } + function hasSameTransport(src, dest) { + var mm = Core.getMountManager(); + if ( mm.isInternal(src.path) && mm.isInternal(dest.path) ) { + return true; + } + var msrc = mm.getModuleFromPath(src.path, false, true) || {}; + var mdst = mm.getModuleFromPath(dest.path, false, true) || {}; + return (msrc.transport === mdst.transport) || (msrc.name === mdst.name); + } + function existsWrapper(item, callback, options) { + options = options || {}; + try { + if ( typeof options.overwrite !== 'undefined' && options.overwrite === true ) { + callback(); + } else { + VFS.exists(item, function(error, result) { + if ( error ) { + console.warn('existsWrapper() error', error); + } + if ( result ) { + callback(API._('ERR_VFS_FILE_EXISTS')); + } else { + callback(); + } + }); + } + } catch ( e ) { + callback(e); + } + } + function isReadOnly(item) { + var m = Core.getMountManager().getModuleFromPath(item.path, false, true) || {}; + return m.readOnly === true; + } + function broadcastMessage(msg, item, appRef) { + API.message(msg, item, {source: appRef ? appRef.__pid : null}); + var aliased = (function() { + function _transform(i) { + if ( i instanceof VFS.File ) { + var n = new VFS.File(i); + var alias = findAlias(n); + if ( alias ) { + n.path = n.path.replace(alias.options.alias, alias.root); + return n; + } + } + return false; + } + if ( item instanceof VFS.File ) { + return _transform(item); + } else if ( item && item.destination && item.source ) { + return { + source: _transform(item.source), + destination: _transform(item.destination) + }; + } + return null; + })(); + var tuple = aliased.source || aliased.destination; + if ( aliased && (aliased instanceof VFS.File || tuple) ) { + if ( tuple ) { + aliased.source = aliased.source || item.source; + aliased.destination = aliased.destination || item.destination; + } + API.message(msg, aliased, {source: appRef ? appRef.__pid : null}); + } + } + function createBackLink(item, result, alias, oitem) { + var path = Utils.getPathProtocol(item.path); + var isOnRoot = path.replace(/\/+/, '/') === '/'; + if ( alias ) { + isOnRoot = (oitem.path === alias.root); + } + if ( !isOnRoot ) { + var foundBack = result.some(function(iter) { + return iter.filename === '..'; + }); + if ( !foundBack ) { + return new VFS.File({ + filename: '..', + path: Utils.dirname(item.path), + mime: null, + size: 0, + type: 'dir' + }); + } + } + return false; + } + VFS.find = function(item, args, callback, options) { + if ( arguments.length < 3 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'find', [item, args]], 'ERR_VFSMODULE_FIND_FMT', callback, null, options); + }; + VFS.scandir = function(item, callback, options) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + var oitem = new VFS.File(item); + var alias = hasAlias(oitem, true); + item = checkMetadataArgument(item); + requestWrapper([item.path, 'scandir', [item]], 'ERR_VFSMODULE_SCANDIR_FMT', function(error, result) { + if ( alias && result ) { + result = result.map(function(iter) { + var niter = new VFS.File(iter); + var str = iter.path.replace(/\/?$/, ''); + var tmp = alias.options.alias.replace(/\/?$/, ''); + niter.path = Utils.pathJoin(alias.root, str.replace(tmp, '')); + return niter; + }); + } + if ( !error && result instanceof Array ) { + var back = createBackLink(item, result, alias, oitem); + if ( back ) { + result.unshift(back); + } + } + return callback(error, result); + }, null, options); + }; + VFS.write = function(item, data, callback, options, appRef) { + if ( arguments.length < 3 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + function _finished(error, result) { + if ( error ) { + error = API._('ERR_VFSMODULE_WRITE_FMT', error); + } else { + broadcastMessage('vfs:write', item, appRef); + } + callback(error, result); + } + function _write(filedata) { + try { + request(item.path, 'write', [item, filedata], _finished, options); + } catch ( e ) { + _finished(e); + } + } + function _converted(error, response) { + if ( error ) { + _finished(error, null); + return; + } + _write(response); + } + try { + if ( typeof data === 'string' ) { + if ( data.length ) { + VFS.Helpers.textToAb(data, item.mime, function(error, response) { + _converted(error, response); + }); + } else { + _converted(null, data); + } + } else { + if ( data instanceof VFS.FileDataURL ) { + VFS.Helpers.dataSourceToAb(data.toString(), item.mime, function(error, response) { + _converted(error, response); + }); + return; + } else if ( window.Blob && data instanceof window.Blob ) { + VFS.Helpers.blobToAb(data, function(error, response) { + _converted(error, response); + }); + return; + } + _write(data); + } + } catch ( e ) { + _finished(e); + } + }; + VFS.read = function(item, callback, options) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + options = options || {}; + function _finished(error, response) { + if ( error ) { + error = API._('ERR_VFSMODULE_READ_FMT', error); + callback(error); + return; + } + if ( options.type ) { + var types = { + datasource: function readToDataSource() { + VFS.Helpers.abToDataSource(response, item.mime, function(error, dataSource) { + callback(error, error ? null : dataSource); + }); + }, + text: function readToText() { + VFS.Helpers.abToText(response, item.mime, function(error, text) { + callback(error, error ? null : text); + }); + }, + blob: function readToBlob() { + VFS.Helpers.abToBlob(response, item.mime, function(error, blob) { + callback(error, error ? null : blob); + }); + }, + json: function readToJSON() { + VFS.Helpers.abToText(response, item.mime, function(error, text) { + var jsn; + if ( typeof text === 'string' ) { + try { + jsn = JSON.parse(text); + } catch ( e ) { + console.warn('VFS::read()', 'readToJSON', e.stack, e); + } + } + callback(error, error ? null : jsn); + }); + } + }; + var type = options.type.toLowerCase(); + if ( types[type] ) { + types[type](); + return; + } + } + callback(error, error ? null : response); + } + try { + request(item.path, 'read', [item], function(error, response) { + _finished(error, error ? false : response); + }, options); + } catch ( e ) { + _finished(e); + } + }; + VFS.copy = function(src, dest, callback, options, appRef) { + if ( arguments.length < 3 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + var mm = Core.getMountManager(); + src = checkMetadataArgument(src, API._('ERR_VFS_EXPECT_SRC_FILE')); + dest = checkMetadataArgument(dest, API._('ERR_VFS_EXPECT_DST_FILE')); + if ( isReadOnly(dest) ) { + callback(API._('ERR_VFSMODULE_READONLY_FMT', mm.getModuleFromPath(dest.path))); + return; + } + options = Utils.argumentDefaults(options, { + type: 'binary', + dialog: null + }); + options.arrayBuffer = true; + function dialogProgress(prog) { + if ( options.dialog ) { + options.dialog.setProgress(prog); + } + } + function doRequest() { + function _finished(error, result) { + if ( !error ) { + broadcastMessage('vfs:copy', dest, appRef); + } + callback(error, result); + } + if ( hasSameTransport(src, dest) ) { + request(src.path, 'copy', [src, dest], function(error, response) { + dialogProgress(100); + if ( error ) { + error = API._('ERR_VFSMODULE_COPY_FMT', error); + } + _finished(error, response); + }, options); + } else { + var msrc = mm.getModuleFromPath(src.path); + var mdst = mm.getModuleFromPath(dest.path); + if ( src.type === 'dir' ) { + _finished(API._('ERR_VFSMODULE_COPY_FMT', 'Copying folders between different transports is not yet supported!')); + return; + } + dest.mime = src.mime; + mm.getModule(msrc).request('read', [src], function(error, data) { + dialogProgress(50); + if ( error ) { + _finished(API._('ERR_VFS_TRANSFER_FMT', error)); + return; + } + mm.getModule(mdst).request('write', [dest, data], function(error, result) { + dialogProgress(100); + if ( error ) { + error = API._('ERR_VFSMODULE_COPY_FMT', error); + } + _finished(error, result); + }, options); + }, options); + } + } + existsWrapper(dest, function(error) { + if ( error ) { + callback(API._('ERR_VFSMODULE_COPY_FMT', error)); + } else { + try { + doRequest(); + } catch ( e ) { + callback(API._('ERR_VFSMODULE_COPY_FMT', e)); + } + } + }); + }; + VFS.move = function(src, dest, callback, options, appRef) { + var self = this; + if ( arguments.length < 3 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + var mm = Core.getMountManager(); + src = checkMetadataArgument(src, API._('ERR_VFS_EXPECT_SRC_FILE')); + dest = checkMetadataArgument(dest, API._('ERR_VFS_EXPECT_DST_FILE')); + if ( isReadOnly(dest) ) { + callback(API._('ERR_VFSMODULE_READONLY_FMT', mm.getModuleFromPath(dest.path))); + return; + } + function doRequest() { + function _finished(error, result) { + if ( !error ) { + broadcastMessage('vfs:move', {source: src, destination: dest}, appRef); + } + callback(error, result); + } + if ( hasSameTransport(src, dest) ) { + request(src.path, 'move', [src, dest], function(error, response) { + if ( error ) { + error = API._('ERR_VFSMODULE_MOVE_FMT', error); + } + _finished(error, error ? null : response, dest); + }, options); + } else { + var msrc = mm.getModuleFromPath(src.path); + dest.mime = src.mime; + self.copy(src, dest, function(error, result) { + if ( error ) { + error = API._('ERR_VFS_TRANSFER_FMT', error); + return _finished(error); + } + mm.getModule(msrc).request('unlink', [src], function(error, result) { + if ( error ) { + error = API._('ERR_VFS_TRANSFER_FMT', error); + } + _finished(error, result, dest); + }, options); + }); + } + } + existsWrapper(dest, function(error) { + if ( error ) { + callback(API._('ERR_VFSMODULE_MOVE_FMT', error)); + } else { + try { + doRequest(); + } catch ( e ) { + callback(API._('ERR_VFSMODULE_MOVE_FMT', e)); + } + } + }); + }; + VFS.rename = function(src, dest, callback) { + VFS.move.apply(this, arguments); + }; + VFS.unlink = function(item, callback, options, appRef) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + function _checkPath() { + var pkgdir = OSjs.Core.getSettingsManager().instance('PackageManager').get('PackagePaths', []); + var found = pkgdir.some(function(i) { + var chkdir = new VFS.File(i); + var idir = Utils.dirname(item.path); + return idir === chkdir.path; + }); + if ( found ) { + Core.getPackageManager().generateUserMetadata(function() {}); + } + } + requestWrapper([item.path, 'unlink', [item]], 'ERR_VFSMODULE_UNLINK_FMT', callback, function(error, response) { + if ( !error ) { + broadcastMessage('vfs:unlink', item, appRef); + _checkPath(); + } + return response; + }, options); + }; + (function() { + VFS['delete'] = function(item, callback) { + VFS.unlink.apply(this, arguments); + }; + })(); + VFS.mkdir = function(item, callback, options, appRef) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + existsWrapper(item, function(error) { + if ( error ) { + return callback(API._('ERR_VFSMODULE_MKDIR_FMT', error)); + } + requestWrapper([item.path, 'mkdir', [item]], 'ERR_VFSMODULE_MKDIR_FMT', callback, function(error, response) { + if ( !error ) { + broadcastMessage('vfs:mkdir', item, appRef); + } + return response; + }, options); + }); + }; + VFS.exists = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'exists', [item]], 'ERR_VFSMODULE_EXISTS_FMT', callback); + }; + VFS.fileinfo = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'fileinfo', [item]], 'ERR_VFSMODULE_FILEINFO_FMT', callback); + }; + VFS.url = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'url', [item]], 'ERR_VFSMODULE_URL_FMT', callback, function(error, response) { + return error ? false : Utils.checkdir(response); + }); + }; + VFS.upload = function(args, callback, options, appRef) { + args = args || {}; + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + if ( !args.files ) { + throw new Error(API._('ERR_VFS_UPLOAD_NO_FILES')); + } + if ( !args.destination ) { + throw new Error(API._('ERR_VFS_UPLOAD_NO_DEST')); + } + function _createFile(filename, mime, size) { + var npath = (args.destination + '/' + filename).replace(/\/\/\/\/+/, '///'); + return new VFS.File({ + filename: filename, + path: npath, + mime: mime || 'application/octet-stream', + size: size + }); + } + function _dialogClose(ev, btn, ufile) { + if ( btn !== 'ok' && btn !== 'complete' ) { + callback(false, false); + return; + } + var file = _createFile(ufile.name, ufile.mime, ufile.size); + callback(false, file); + } + var mm = Core.getMountManager(); + if ( !mm.isInternal(args.destination) ) { + args.files.forEach(function(f, i) { + request(args.destination, 'upload', [f, args.destination], callback, options); + }); + return; + } + function doRequest(f, i) { + if ( args.app ) { + API.createDialog('FileUpload', { + dest: args.destination, + file: f + }, _dialogClose, args.win || args.app); + } else { + var realDest = new VFS.File(args.destination); + var tmpPath = hasAlias(realDest); + if ( tmpPath ) { + realDest = tmpPath; + } + VFS.Transports.Internal.upload(f, realDest, function(err, result, ev) { + if ( err ) { + if ( err === 'canceled' ) { + callback(API._('ERR_VFS_UPLOAD_CANCELLED'), null, ev); + } else { + var errstr = ev ? ev.toString() : 'Unknown reason'; + var msg = API._('ERR_VFS_UPLOAD_FAIL_FMT', errstr); + callback(msg, null, ev); + } + } else { + var file = _createFile(f.name, f.type, f.size); + broadcastMessage('vfs:upload', file, args.app); + callback(false, file, ev); + } + }, options); + } + } + args.files.forEach(function(f, i) { + var filename = (f instanceof window.File) ? f.name : f.filename; + var dest = new VFS.File(args.destination + '/' + filename); + existsWrapper(dest, function(error) { + if ( error ) { + return callback(error); + } + try { + doRequest(f, i); + } catch ( e ) { + callback(API._('ERR_VFS_UPLOAD_FAIL_FMT', e)); + } + }, options); + }); + }; + VFS.download = (function download() { + var _didx = 1; + return function(args, callback) { + args = args || {}; + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + if ( !args.path ) { + throw new Error(API._('ERR_VFS_DOWNLOAD_NO_FILE')); + } + args = checkMetadataArgument(args); + var lname = 'DownloadFile_' + _didx; + _didx++; + API.createLoading(lname, {className: 'BusyNotification', tooltip: API._('TOOLTIP_VFS_DOWNLOAD_NOTIFICATION')}); + var mm = Core.getMountManager(); + var dmodule = mm.getModuleFromPath(args.path); + if ( !mm.isInternal(args.path) ) { + var file = args; + if ( !(file instanceof VFS.File) ) { + file = new VFS.File(args.path); + if ( args.id ) { + file.id = args.id; + } + } + mm.getModule(dmodule).request('read', [file], function(error, result) { + API.destroyLoading(lname); + if ( error ) { + callback(API._('ERR_VFS_DOWNLOAD_FAILED', error)); + return; + } + callback(false, result); + }); + return; + } + VFS.url(args, function(error, url) { + if ( error ) { + return callback(error); + } + Utils.ajax({ + url: url, + method: 'GET', + responseType: 'arraybuffer', + onsuccess: function(result) { + API.destroyLoading(lname); + callback(false, result); + }, + onerror: function(result) { + API.destroyLoading(lname); + callback(error); + } + }); + }); + }; + })(); + VFS.trash = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'trash', [item]], 'ERR_VFSMODULE_TRASH_FMT', callback); + }; + VFS.untrash = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + requestWrapper([item.path, 'untrash', [item]], 'ERR_VFSMODULE_UNTRASH_FMT', callback); + }; + VFS.emptyTrash = function(callback) { + if ( arguments.length < 1 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + requestWrapper([null, 'emptyTrash', []], 'ERR_VFSMODULE_EMPTYTRASH_FMT', callback); + }; + VFS.freeSpace = function(item, callback) { + if ( arguments.length < 2 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + item = checkMetadataArgument(item); + var m = Core.getMountManager().getModuleFromPath(item.path, false, true); + requestWrapper([item.path, 'freeSpace', [m.root]], 'ERR_VFSMODULE_FREESPACE_FMT', callback); + }; +})(OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.Core); + +(function(Utils, API, VFS) { + 'use strict'; + function FileDataURL(dataURL) { + this.dataURL = dataURL; + } + FileDataURL.prototype.toBase64 = function() { + return this.data.split(',')[1]; + }; + FileDataURL.prototype.toString = function() { + return this.dataURL; + }; + function FileMetadata(arg, mime) { + if ( !arg ) { + throw new Error(API._('ERR_VFS_FILE_ARGS')); + } + this.path = null; + this.filename = null; + this.type = null; + this.size = null; + this.mime = null; + this.id = null; + if ( typeof arg === 'object' ) { + this.setData(arg); + } else if ( typeof arg === 'string' ) { + this.path = arg; + this.setData(); + } + if ( typeof mime === 'string' ) { + if ( mime.match(/\//) ) { + this.mime = mime; + } else { + this.type = mime; + } + } + this._guessMime(); + } + FileMetadata.prototype.setData = function(o) { + var self = this; + if ( o ) { + Object.keys(o).forEach(function(k) { + if ( k !== '_element' ) { + self[k] = o[k]; + } + }); + } + if ( !this.filename ) { + this.filename = Utils.filename(this.path); + } + }; + FileMetadata.prototype.getData = function() { + return { + path: this.path, + filename: this.filename, + type: this.type, + size: this.size, + mime: this.mime, + id: this.id + }; + }; + FileMetadata.prototype.copy = function(dest, callback, options, appRef) { + return VFS.copy(this, dest, callback, options, appRef); + }; + FileMetadata.prototype.download = function(callback) { + return VFS.download(this, callback); + }; + FileMetadata.prototype.delete = function() { + return this.unlink.apply(this, arguments); + }; + FileMetadata.prototype.unlink = function(callback, options, appRef) { + return VFS.unlink(this, callback, options, appRef); + }; + FileMetadata.prototype.exists = function(callback) { + return VFS.exists(this, callback); + }; + FileMetadata.prototype.mkdir = function(callback, options, appRef) { + return VFS.mkdir(this, callback, options, appRef); + }; + FileMetadata.prototype.move = function(dest, callback, options, appRef) { + var self = this; + return VFS.move(this, dest, function(err, res, newDest) { + if ( !err && newDest ) { + self.setData(newDest); + } + callback.apply(this, arguments); + }, options, appRef); + }; + FileMetadata.prototype.read = function(callback, options) { + return VFS.read(this, callback, options); + }; + FileMetadata.prototype.rename = function() { + return this.move.apply(this, arguments); + }; + FileMetadata.prototype.scandir = function(callback, options) { + return VFS.scandir(this, callback, options); + }; + FileMetadata.prototype.trash = function(callback) { + return VFS.trash(this, callback); + }; + FileMetadata.prototype.untrash = function(callback) { + return VFS.untrash(this, callback); + }; + FileMetadata.prototype.url = function(callback) { + return VFS.url(this, callback); + }; + FileMetadata.prototype.write = function(data, callback, options, appRef) { + return VFS.write(this, data, callback, options, appRef); + }; + FileMetadata.prototype._guessMime = function() { + if ( this.mime || this.type === 'dir' || (!this.path || this.path.match(/\/$/)) ) { + return; + } + var ext = Utils.filext(this.path); + this.mime = API.getConfig('MIME.mapping')['.' + ext] || 'application/octet-stream'; + }; + VFS.file = function createFileInstance(arg, mime) { + return new FileMetadata(arg, mime); + }; + VFS.File = FileMetadata; + VFS.FileDataURL = FileDataURL; +})(OSjs.Utils, OSjs.API, OSjs.VFS); + +(function(Utils, API, VFS) { + 'use strict'; + function makePath(item) { + if ( typeof item === 'string' ) { + item = new VFS.File(item); + } + return OSjs.Core.getHandler().getVFSPath(item); + } + function internalRequest(name, args, callback) { + API.call('FS:' + name, args, function(err, res) { + if ( !err && typeof res === 'undefined' ) { + err = API._('ERR_VFS_FATAL'); + } + callback(err, res); + }); + } + function internalUpload(file, dest, callback, options) { + options = options || {}; + if ( dest instanceof VFS.File ) { + dest = dest.path; + } + if ( typeof file.size !== 'undefined' ) { + var maxSize = API.getConfig('VFS.MaxUploadSize'); + if ( maxSize > 0 ) { + var bytes = file.size; + if ( bytes > maxSize ) { + var msg = API._('DIALOG_UPLOAD_TOO_BIG_FMT', Utils.humanFileSize(maxSize)); + callback('error', null, msg); + return; + } + } + } + var fd = new FormData(); + fd.append('upload', 1); + fd.append('path', dest); + if ( options ) { + Object.keys(options).forEach(function(key) { + fd.append(key, String(options[key])); + }); + } + VFS.Helpers.addFormFile(fd, 'upload', file); + OSjs.Core.getHandler().callAPI('FS:upload', fd, callback, null, options); + } + function internalFetch(url, mime, callback, options) { + options = options || {}; + options.type = options.type || 'binary'; + mime = options.mime || 'application/octet-stream'; + if ( arguments.length < 1 ) { + throw new Error(API._('ERR_VFS_NUM_ARGS')); + } + options = options || {}; + API.curl({ + url: url, + binary: true, + mime: mime + }, function(error, response) { + if ( error ) { + callback(error); + return; + } + if ( !response.body ) { + callback(API._('ERR_VFS_REMOTEREAD_EMPTY')); + return; + } + if ( options.type.toLowerCase() === 'datasource' ) { + callback(false, response.body); + return; + } + VFS.Helpers.dataSourceToAb(response.body, mime, function(error, response) { + if ( options.type === 'text' ) { + VFS.Helpers.abToText(response, mime, function(error, text) { + callback(error, text); + }); + return; + } + callback(error, response); + }); + }); + } + var Transport = { + scandir: function(item, callback, options) { + internalRequest('scandir', {path: item.path}, function(error, result) { + var list = []; + if ( result ) { + result = VFS.Helpers.filterScandir(result, options); + result.forEach(function(iter) { + list.push(new VFS.File(iter)); + }); + } + callback(error, list); + }); + }, + write: function(item, data, callback, options) { + options = options || {}; + options.onprogress = options.onprogress || function() {}; + function _write(dataSource) { + var wopts = {path: item.path, data: dataSource}; + internalRequest('write', wopts, callback, options); + } + if ( typeof data === 'string' && !data.length ) { + _write(data); + return; + } + VFS.Helpers.abToDataSource(data, item.mime, function(error, dataSource) { + if ( error ) { + callback(error); + return; + } + _write(dataSource); + }); + }, + read: function(item, callback, options) { + if ( API.getConfig('Connection.Type') === 'nw' ) { + OSjs.Core.getHandler().nw.request(true, 'read', { + path: item.path, + options: {raw: true} + }, function(err, res) { + callback(err, res); + }); + return; + } + internalRequest('get', {path: item.path}, callback, options); + }, + copy: function(src, dest, callback) { + internalRequest('copy', {src: src.path, dest: dest.path}, callback); + }, + move: function(src, dest, callback) { + internalRequest('move', {src: src.path, dest: dest.path}, callback); + }, + unlink: function(item, callback) { + internalRequest('delete', {path: item.path}, callback); + }, + mkdir: function(item, callback) { + internalRequest('mkdir', {path: item.path}, callback); + }, + exists: function(item, callback) { + internalRequest('exists', {path: item.path}, callback); + }, + fileinfo: function(item, callback) { + internalRequest('fileinfo', {path: item.path}, callback); + }, + find: function(item, args, callback) { + internalRequest('find', {path: item.path, args: args}, callback); + }, + url: function(item, callback) { + callback(false, VFS.Transports.Internal.path(item)); + }, + freeSpace: function(root, callback) { + internalRequest('freeSpace', {root: root}, callback); + } + }; + VFS.Transports.Internal = { + request: internalRequest, + upload: internalUpload, + fetch: internalFetch, + module: Transport, + path: makePath + }; +})(OSjs.Utils, OSjs.API, OSjs.VFS); + +(function(Utils, API, VFS) { + 'use strict'; + VFS.Transports.HTTP = { + module: { + read: function(item, callback, options) { + VFS.Transports.Internal.fetch(item.path, item.mime, callback, options); + } + } + }; + OSjs.Core.getMountManager()._add({ + readOnly: true, + name: 'HTTP', + transport: 'HTTP', + description: 'HTTP', + visible: false, + searchable: false, + unmount: function(cb) { + cb(false, false); + }, + mounted: function() { + return true; + }, + enabled: function() { + return true; + }, + root: 'http:///', + icon: 'places/google-drive.png', + match: /^https?\:\/\// + }); +})(OSjs.Utils, OSjs.API, OSjs.VFS); + +(function(Utils, API) { + 'use strict'; + var Transport = { + url: function(item, callback) { + var root = window.location.pathname || '/'; + if ( root === '/' || window.location.protocol === 'file:' ) { + root = ''; + } + var mm = OSjs.Core.getMountManager(); + var module = mm.getModuleFromPath(item.path, false, true); + var url = item.path.replace(module.match, root); + callback(false, url); + } + }; + var restricted = ['write', 'move', 'unlink', 'mkdir', 'exists', 'fileinfo', 'trash', 'untrash', 'emptyTrash', 'freeSpace']; + var internal = OSjs.VFS.Transports.Internal.module; + Object.keys(internal).forEach(function(n) { + if ( restricted.indexOf(n) === -1 ) { + Transport[n] = internal[n]; + } + }); + OSjs.VFS.Transports.OSjs = { + module: Transport, + defaults: function(opts) { + opts.readOnly = true; + opts.searchable = true; + } + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + function makePath(file) { + var mm = OSjs.Core.getMountManager(); + var rel = mm.getPathProtocol(file.path); + var module = mm.getModuleFromPath(file.path, false, true); + var base = (module.options || {}).url; + return base + rel.replace(/^\/+/, '/'); + } + function httpCall(func, item, callback) { + var url = makePath(item); + if ( func === 'scandir' ) { + url += '/_scandir.json'; + } + var args = { + method: func === 'exists' ? 'HEAD' : 'GET', + url: url, + onerror: function(error) { + callback(error); + }, + onsuccess: function(response) { + callback(false, response); + } + }; + if ( func === 'read' ) { + args.responseType = 'arraybuffer'; + } + Utils.ajax(args); + } + var Transport = { + scandir: function(item, callback, options) { + var mm = OSjs.Core.getMountManager(); + var root = mm.getRootFromPath(item.path); + httpCall('scandir', item, function(error, response) { + var list = null; + if ( !error ) { + var json = null; + try { + json = JSON.parse(response); + } catch ( e ) {} + if ( json === null ) { + error = 'Failed to parse directory JSON'; + } else { + list = json.map(function(iter) { + iter.path = root + iter.path.replace(/^\//, ''); + return iter; + }); + var rel = Utils.getPathProtocol(item.path); + if ( rel !== '/' ) { + list.unshift({ + filename: '..', + path: Utils.dirname(item.path), + type: 'dir', + size: 0 + }); + } + } + } + callback(error, list); + }); + }, + read: function(item, callback, options) { + options = options || {}; + var mime = item.mime || 'application/octet-stream'; + httpCall('read', item, function(error, response) { + if ( !error ) { + if ( options.type === 'text' ) { + OSjs.VFS.Helpers.abToText(response, mime, function(error, text) { + callback(error, text); + }); + return; + } + } + callback(error, response); + }); + }, + exists: function(item, callback) { + httpCall('exists', item, function(err) { + callback(err, err ? false : true); + }); + }, + url: function(item, callback, options) { + callback(false, makePath(item)); + } + }; + OSjs.VFS.Transports.Web = { + defaults: function(iter) { + iter.readOnly = true; + iter.match = /^https?\:\/\//; + }, + module: Transport, + path: makePath + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + function getModule(item) { + var mm = OSjs.Core.getMountManager(); + var module = mm.getModuleFromPath(item.path, false, true); + if ( !module ) { + throw new Error(API._('ERR_VFSMODULE_INVALID_FMT', item.path)); + } + return module; + } + function getNamespace(item) { + var module = getModule(item); + return module.options.ns || 'DAV:'; + } + function getCORSAllowed(item) { + var module = getModule(item); + var val = module.options.cors; + return typeof val === 'undefined' ? false : val === true; + } + function getURL(item) { + if ( typeof item === 'string' ) { + item = new OSjs.VFS.File(item); + } + var module = getModule(item); + var opts = module.options; + return Utils.parseurl(opts.host, {username: opts.username, password: opts.password}).url; + } + function getURI(item) { + var module = getModule(item); + return Utils.parseurl(module.options.host).path; + } + function resolvePath(item) { + var module = getModule(item); + return item.path.replace(module.match, ''); + } + function davCall(method, args, callback, raw) { + function parseDocument(body) { + var parser = new DOMParser(); + var doc = parser.parseFromString(body, 'application/xml'); + return doc.firstChild; + } + function getUrl(p, f) { + var url = getURL(p); + url += resolvePath(f).replace(/^\//, ''); + return url; + } + var mime = args.mime || 'application/octet-stream'; + var headers = {}; + var sourceFile = new OSjs.VFS.File(args.path, mime); + var sourceUrl = getUrl(args.path, sourceFile); + var destUrl = null; + if ( args.dest ) { + destUrl = getUrl(args.dest, new OSjs.VFS.File(args.dest, mime)); + headers.Destination = destUrl; + } + function externalCall() { + var opts = { + url: sourceUrl, + method: method, + requestHeaders: headers + }; + if ( raw ) { + opts.binary = true; + opts.mime = mime; + } + if ( typeof args.data !== 'undefined' ) { + opts.query = args.data; + } + API.call('curl', opts, function(error, result) { + if ( error ) { + callback(error); + return; + } + if ( !result ) { + callback(API._('ERR_VFS_REMOTEREAD_EMPTY')); + return; + } + if ( ([200, 201, 203, 204, 205, 207]).indexOf(result.httpCode) < 0 ) { + callback(API._('ERR_VFSMODULE_XHR_ERROR') + ': ' + result.httpCode); + return; + } + if ( opts.binary ) { + OSjs.VFS.Helpers.dataSourceToAb(result.body, mime, callback); + } else { + var doc = parseDocument(result.body); + callback(false, doc); + } + }); + } + if ( getCORSAllowed(sourceFile) ) { + OSjs.VFS.Transports.Internal.request('get', {url: sourceUrl, method: method}, callback); + } else { + externalCall(); + } + } + var Transport = { + scandir: function(item, callback, options) { + var mm = OSjs.Core.getMountManager(); + function parse(doc) { + var ns = getNamespace(item); + var list = []; + var reqpath = resolvePath(item); + var root = mm.getRootFromPath(item.path); + doc.children.forEach(function(c) { + var type = 'file'; + function getPath() { + var path = c.getElementsByTagNameNS(ns, 'href')[0].textContent; + return path.substr(getURI(item).length - 1, path.length); + } + function getId() { + var id = null; + try { + id = c.getElementsByTagNameNS(ns, 'getetag')[0].textContent; + } catch ( e ) { + } + return id; + } + function getMime() { + var mime = null; + if ( type === 'file' ) { + try { + mime = c.getElementsByTagNameNS(ns, 'getcontenttype')[0].textContent || 'application/octet-stream'; + } catch ( e ) { + mime = 'application/octet-stream'; + } + } + return mime; + } + function getSize() { + var size = 0; + if ( type === 'file' ) { + try { + size = parseInt(c.getElementsByTagNameNS(ns, 'getcontentlength')[0].textContent, 10) || 0; + } catch ( e ) { + } + } + return size; + } + try { + var path = getPath(); + if ( path.match(/\/$/) ) { + type = 'dir'; + path = path.replace(/\/$/, '') || '/'; + } + if ( path !== reqpath ) { + list.push({ + id: getId(), + path: root + path.replace(/^\//, ''), + filename: Utils.filename(path), + size: getSize(), + mime: getMime(), + type: type + }); + } + } catch ( e ) { + console.warn('scandir() exception', e, e.stack); + } + }); + return OSjs.VFS.Helpers.filterScandir(list, options); + } + davCall('PROPFIND', {path: item.path}, function(error, doc) { + var list = []; + if ( !error && doc ) { + var result = parse(doc); + result.forEach(function(iter) { + list.push(new OSjs.VFS.File(iter)); + }); + } + callback(error, list); + }); + }, + write: function(item, data, callback, options) { + davCall('PUT', {path: item.path, mime: item.mime, data: data}, callback); + }, + read: function(item, callback, options) { + davCall('GET', {path: item.path, mime: item.mime}, callback, true); + }, + copy: function(src, dest, callback) { + davCall('COPY', {path: src.path, dest: dest.path}, callback); + }, + move: function(src, dest, callback) { + davCall('MOVE', {path: src.path, dest: dest.path}, callback); + }, + unlink: function(item, callback) { + davCall('DELETE', {path: item.path}, callback); + }, + mkdir: function(item, callback) { + davCall('MKCOL', {path: item.path}, callback); + }, + exists: function(item, callback) { + davCall('PROPFIND', {path: item.path}, function(error, doc) { + callback(false, !error); + }); + }, + url: function(item, callback, options) { + callback(false, OSjs.VFS.Transports.WebDAV.path(item)); + }, + freeSpace: function(root, callback) { + callback(false, -1); + } + }; + function makePath(item) { + if ( typeof item === 'string' ) { + item = new OSjs.VFS.File(item); + } + var url = getURL(item); + var reqpath = resolvePath(item).replace(/^\//, ''); + var fullpath = url + reqpath; + if ( !getCORSAllowed(item) ) { + fullpath = API.getConfig('Connection.FSURI') + '/get/' + fullpath; + } + return fullpath; + } + OSjs.VFS.Transports.WebDAV = { + module: Transport, + path: makePath + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API, VFS) { + 'use strict'; + var Transport = { + scandir: function(item, callback, options) { + var metadata = OSjs.Core.getPackageManager().getPackages(); + var files = []; + Object.keys(metadata).forEach(function(m) { + var iter = metadata[m]; + if ( iter.type !== 'extension' ) { + files.push(new OSjs.VFS.File({ + filename: iter.name, + icon: { + filename: iter.icon, + application: m + }, + type: 'application', + path: 'applications:///' + m, + mime: 'osjs/application' + }, 'osjs/application')); + } + }); + callback(false, files); + } + }; + VFS.Transports.Applications = { + module: Transport, + defaults: function(opts) { + opts.readOnly = true; + opts.special = true; + opts.searchable = true; + } + }; +})(OSjs.Utils, OSjs.API, OSjs.VFS); + +(function(Utils, API) { + 'use strict'; + var gapi = window.gapi = window.gapi || {}; + var CACHE_CLEAR_TIMEOUT = 7000; + var _isMounted = false; + var _rootFolderId = null; + var _treeCache = null; + var _clearCacheTimeout; + function createBoundary(file, data, callback) { + var boundary = '-------314159265358979323846'; + var delimiter = '\r\n--' + boundary + '\r\n'; + var close_delim = '\r\n--' + boundary + '--'; + var contentType = file.mime || 'text/plain'; //fileData.type || 'application/octet-stream'; + function createBody(result) { + var metadata = { + title: file.filename, + mimeType: contentType + }; + var base64Data = result; + var multipartRequestBody = + delimiter + + 'Content-Type: application/json\r\n\r\n' + + JSON.stringify(metadata) + + delimiter + + 'Content-Type: ' + contentType + '\r\n' + + 'Content-Transfer-Encoding: base64\r\n' + + '\r\n' + + base64Data + + close_delim; + return multipartRequestBody; + } + var reqContentType = 'multipart/mixed; boundary=\'' + boundary + '\''; + if ( data instanceof OSjs.VFS.FileDataURL ) { + callback(false, { + contentType: reqContentType, + body: createBody(data.toBase64()) + }); + } else { + OSjs.VFS.Helpers.abToBinaryString(data, contentType, function(error, response) { + callback(error, error ? false : { + contentType: reqContentType, + body: createBody(btoa(response)) + }); + }); + } + } + function getFileFromPath(dir, type, callback) { + if ( dir instanceof OSjs.VFS.File ) { + dir = dir.path; + } + var tmpItem = new OSjs.VFS.File({ + filename: Utils.filename(dir), + type: 'dir', + path: Utils.dirname(dir) + }); + getAllDirectoryFiles(tmpItem, function(error, list, ldir) { + if ( error ) { + return callback(error); + } + var found = null; + list.forEach(function(iter) { + if ( iter.title === Utils.filename(dir) ) { + if ( type ) { + if ( iter.mimeType === type ) { + found = iter; + return false; + } + } else { + found = iter; + } + } + return true; + }); + callback(false, found); + }); + } + function getParentPathId(item, callback) { + var dir = Utils.dirname(item.path); + var type = 'application/vnd.google-apps.folder'; + getFileFromPath(dir, type, function(error, item) { + if ( error ) { + return callback(error); + } + callback(false, item ? item.id : null); + }); + } + function createDirectoryList(dir, list, item, options) { + var result = []; + var rdir = dir.replace(/^google-drive\:\/+/, '/'); // FIXME + var isOnRoot = rdir === '/'; + function createItem(iter, i) { + var path = dir; + if ( iter.title === '..' ) { + path = Utils.dirname(dir); + } else { + if ( !isOnRoot ) { + path += '/'; + } + path += iter.title; + } + var fileType = iter.mimeType === 'application/vnd.google-apps.folder' ? 'dir' : (iter.kind === 'drive#file' ? 'file' : 'dir'); + if ( iter.mimeType === 'application/vnd.google-apps.trash' ) { + fileType = 'trash'; + } + return new OSjs.VFS.File({ + filename: iter.title, + path: path, + id: iter.id, + size: iter.quotaBytesUsed || 0, + mime: iter.mimeType === 'application/vnd.google-apps.folder' ? null : iter.mimeType, + type: fileType + }); + } + if ( list ) { + list.forEach(function(iter, i) { + if ( !iter ) { + return; + } + result.push(createItem(iter, i)); + }); + } + return result ? OSjs.VFS.Helpers.filterScandir(result, options) : []; + } + function getAllDirectoryFiles(item, callback) { + function retrieveAllFiles(cb) { + if ( _clearCacheTimeout ) { + clearTimeout(_clearCacheTimeout); + _clearCacheTimeout = null; + } + if ( _treeCache ) { + cb(false, _treeCache); + return; + } + var list = []; + function retrievePageOfFiles(request, result) { + request.execute(function(resp) { + if ( resp.error ) { + console.warn('GoogleDrive::getAllDirectoryFiles()', 'error', resp); + } + result = result.concat(resp.items); + var nextPageToken = resp.nextPageToken; + if (nextPageToken) { + request = gapi.client.drive.files.list({ + pageToken: nextPageToken + }); + retrievePageOfFiles(request, result); + } else { + _treeCache = result; + cb(false, result); + } + }); + } + try { + var initialRequest = gapi.client.drive.files.list({}); + retrievePageOfFiles(initialRequest, list); + } catch ( e ) { + console.warn('GoogleDrive::getAllDirectoryFiles() exception', e, e.stack); + console.warn('THIS ERROR OCCURS WHEN MULTIPLE REQUESTS FIRE AT ONCE ?!'); // FIXME + cb(false, list); + } + } + function getFilesBelongingTo(list, root, cb) { + var idList = {}; + var parentList = {}; + list.forEach(function(iter) { + if ( iter ) { + idList[iter.id] = iter; + var parents = []; + if ( iter.parents ) { + iter.parents.forEach(function(piter) { + if ( piter ) { + parents.push(piter.id); + } + }); + } + parentList[iter.id] = parents; + } + }); + var resolves = Utils.getPathProtocol(root).replace(/^\/+/, '').split('/'); + resolves = resolves.filter(function(el) { + return el !== ''; + }); + var currentParentId = _rootFolderId; + var isOnRoot = !resolves.length; + function _getFileList(foundId) { + var result = []; + if ( !isOnRoot ) { + result.push({ + title: '..', + path: Utils.dirname(root), + id: item.id, + quotaBytesUsed: 0, + mimeType: 'application/vnd.google-apps.folder' + }); + } + list.forEach(function(iter) { + if ( iter && parentList[iter.id] && parentList[iter.id].indexOf(foundId) !== -1 ) { + result.push(iter); + } + }); + return result; + } + function _nextDir(completed) { + var current = resolves.shift(); + var done = resolves.length <= 0; + var found; + if ( isOnRoot ) { + found = currentParentId; + } else { + if ( current ) { + list.forEach(function(iter) { + if ( iter ) { + if ( iter.title === current && parentList[iter.id] && parentList[iter.id].indexOf(currentParentId) !== -1 ) { + currentParentId = iter.id; + found = iter.id; + } + } + }); + } + } + if ( done ) { + completed(found); + } else { + _nextDir(completed); + } + } + _nextDir(function(foundId) { + if ( foundId && idList[foundId] ) { + cb(false, _getFileList(foundId)); + return; + } else { + if ( isOnRoot ) { + cb(false, _getFileList(currentParentId)); + return; + } + } + cb('Could not list directory'); + }); + } + function doRetrieve() { + retrieveAllFiles(function(error, list) { + var root = item.path; + if ( error ) { + callback(error, false, root); + return; + } + getFilesBelongingTo(list, root, function(error, response) { + _clearCacheTimeout = setTimeout(function() { + _treeCache = null; + }, CACHE_CLEAR_TIMEOUT); + callback(error, response, root); + }); + }); + } + if ( !_rootFolderId ) { + var request = gapi.client.drive.about.get(); + request.execute(function(resp) { + if ( !resp || !resp.rootFolderId ) { + callback(API._('ERR_VFSMODULE_ROOT_ID')); + return; + } + _rootFolderId = resp.rootFolderId; + doRetrieve(); + }); + } else { + doRetrieve(); + } + } + function setFolder(item, pid, callback) { + pid = pid || 'root'; + function _clearFolders(cb) { + item.parents.forEach(function(p, i) { + var request = gapi.client.drive.children.delete({ + folderId: p.id, + childId: item.id + }); + request.execute(function(resp) { + if ( i >= (item.parents.length - 1) ) { + cb(); + } + }); + }); + } + function _setFolder(rootId, cb) { + var request = gapi.client.drive.children.insert({ + folderId: pid, + resource: {id: item.id} + }); + request.execute(function(resp) { + callback(false, true); + }); + } + _clearFolders(function() { + _setFolder(pid, callback); + }); + } + var GoogleDriveStorage = {}; + GoogleDriveStorage.scandir = function(item, callback, options) { + getAllDirectoryFiles(item, function(error, list, dir) { + if ( error ) { + return callback(error); + } + var result = createDirectoryList(dir, list, item, options); + callback(false, result, list); + }); + }; + GoogleDriveStorage.read = function(item, callback, options) { + function doRead() { + var request = gapi.client.drive.files.get({ + fileId: item.id + }); + request.execute(function(file) { + if ( file && file.id ) { + var accessToken = gapi.auth.getToken().access_token; + Utils.ajax({ + url: file.downloadUrl, + method: 'GET', + responseType: 'arraybuffer', + requestHeaders: {'Authorization': 'Bearer ' + accessToken}, + onsuccess: function(response) { + callback(false, response); + }, + onerror: function(error) { + callback(API._('ERR_VFSMODULE_XHR_ERROR') + ' - ' + error); + } + }); + } else { + callback(API._('ERR_VFSMODULE_NOSUCH')); + } + }); + } + if ( item.downloadUrl ) { + doRead(); + } else { + getFileFromPath(item.path, item.mime, function(error, response) { + if ( error ) { + callback(error); + return; + } + if ( !response ) { + callback(API._('ERR_VFSMODULE_NOSUCH')); + return; + } + item = response; + doRead(); + }); + } + }; + GoogleDriveStorage.write = function(file, data, callback) { + var self = this; + function doWrite(parentId, fileId) { + var uri = '/upload/drive/v2/files'; + var method = 'POST'; + if ( fileId ) { + uri = '/upload/drive/v2/files/' + fileId; + method = 'PUT'; + } + createBoundary(file, data, function(error, fileData) { + if ( error ) { + callback(error); + return; + } + var request = gapi.client.request({ + path: uri, + method: method, + params: {uploadType: 'multipart'}, + headers: {'Content-Type': fileData.contentType}, + body: fileData.body + }); + request.execute(function(resp) { + _treeCache = null; // Make sure we refetch any cached stuff + if ( resp && resp.id ) { + if ( parentId ) { + setFolder(resp, parentId, callback); + } else { + callback(false, true); + } + } else { + callback(API._('ERR_VFSMODULE_NOSUCH')); + } + }); + }); + } + getParentPathId(file, function(error, id) { + if ( error ) { + return callback(error); + } + if ( file.id ) { + doWrite(id, file.id); + } else { + self.exists(file, function(error, exists) { + var fileid = error ? null : (exists ? exists.id : null); + doWrite(id, fileid); + }); + } + }); + }; + GoogleDriveStorage.copy = function(src, dest, callback) { + var request = gapi.client.drive.files.copy({ + fileId: Utils.filename(src), + resource: {title: Utils.filename(dest)} + }); + request.execute(function(resp) { + if ( resp.id ) { + callback(false, true); + return; + } + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + }); + }; + GoogleDriveStorage.unlink = function(src, callback) { + function doDelete() { + _treeCache = null; // Make sure we refetch any cached stuff + var request = gapi.client.drive.files.delete({ + fileId: src.id + }); + request.execute(function(resp) { + if ( resp && (typeof resp.result === 'object') ) { + callback(false, true); + } else { + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + } + }); + } + if ( !src.id ) { + getFileFromPath(src.path, src.mime, function(error, response) { + if ( error ) { + callback(error); + return; + } + if ( !response ) { + callback(API._('ERR_VFSMODULE_NOSUCH')); + return; + } + src = response; + doDelete(); + }); + } else { + doDelete(); + } + }; + GoogleDriveStorage.move = function(src, dest, callback) { + var request = gapi.client.drive.files.patch({ + fileId: src.id, + resource: { + title: Utils.filename(dest.path) + } + }); + request.execute(function(resp) { + if ( resp && resp.id ) { + _treeCache = null; // Make sure we refetch any cached stuff + callback(false, true); + } else { + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + } + }); + }; + GoogleDriveStorage.exists = function(item, callback) { + var req = new OSjs.VFS.File(OSjs.Utils.dirname(item.path)); + this.scandir(req, function(error, result) { + if ( error ) { + callback(error); + return; + } + var found = false; + if ( result ) { + result.forEach(function(iter) { + if ( iter.path === item.path ) { + found = new OSjs.VFS.File(item.path, iter.mimeType); + found.id = iter.id; + found.title = iter.title; + return false; + } + return true; + }); + } + callback(false, found); + }); + }; + GoogleDriveStorage.fileinfo = function(item, callback) { + var request = gapi.client.drive.files.get({ + fileId: item.id + }); + request.execute(function(resp) { + if ( resp && resp.id ) { + var useKeys = ['createdDate', 'id', 'lastModifyingUser', 'lastViewedByMeDate', 'markedViewedByMeDate', 'mimeType', 'modifiedByMeDate', 'modifiedDate', 'title', 'alternateLink']; + var info = {}; + useKeys.forEach(function(k) { + info[k] = resp[k]; + }); + return callback(false, info); + } + callback(API._('ERR_VFSMODULE_NOSUCH')); + }); + }; + GoogleDriveStorage.url = function(item, callback) { + if ( !item || !item.id ) { + throw new Error('url() expects a File ref with Id'); + } + var request = gapi.client.drive.files.get({ + fileId: item.id + }); + request.execute(function(resp) { + if ( resp && resp.webContentLink ) { + callback(false, resp.webContentLink); + } else { + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + } + }); + }; + GoogleDriveStorage.mkdir = function(dir, callback) { + function doMkdir(parents) { + var request = gapi.client.request({ + 'path': '/drive/v2/files', + 'method': 'POST', + 'body': JSON.stringify({ + title: dir.filename, + parents: parents, + mimeType: 'application/vnd.google-apps.folder' + }) + }); + request.execute(function(resp) { + if ( resp && resp.id ) { + _treeCache = null; // Make sure we refetch any cached stuff + callback(false, true); + } else { + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + } + }); + } + var mm = OSjs.Core.getMountManager(); + if ( Utils.dirname(dir.path) !== Utils.getPathProtocol(mm.getModuleProperty('GoogleDrive', 'root')) ) { + getParentPathId(dir, function(error, id) { + if ( error || !id ) { + error = error || API._('ERR_VFSMODULE_PARENT'); + callback(API._('ERR_VFSMODULE_PARENT_FMT', error)); + return; + } + doMkdir([{id: id}]); + }); + return; + } + doMkdir(null); + }; + GoogleDriveStorage.upload = function(file, dest, callback) { + var item = new OSjs.VFS.File({ + filename: file.name, + path: Utils.pathJoin((new OSjs.VFS.File(dest)).path, file.name), + mime: file.type, + size: file.size + }); + this.write(item, file, callback); + }; + GoogleDriveStorage.trash = function(file, callback) { + var request = gapi.client.drive.files.trash({ + fileId: file.id + }); + request.execute(function(resp) { + if ( resp.id ) { + callback(false, true); + return; + } + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + }); + }; + GoogleDriveStorage.untrash = function(file, callback) { + var request = gapi.client.drive.files.untrash({ + fileId: file.id + }); + request.execute(function(resp) { + if ( resp.id ) { + callback(false, true); + return; + } + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + }); + }; + GoogleDriveStorage.emptyTrash = function(callback) { + var request = gapi.client.drive.files.emptyTrash({}); + request.execute(function(resp) { + if ( resp && resp.message ) { + var msg = resp && resp.message ? resp.message : API._('ERR_APP_UNKNOWN_ERROR'); + callback(msg); + return; + } + callback(false, true); + }); + }; + GoogleDriveStorage.freeSpace = function(root, callback) { + callback(false, -1); + }; + function getGoogleDrive(callback, onerror) { + callback = callback || function() {}; + onerror = onerror || function() {}; + if ( _isMounted ) { + var inst = OSjs.Helpers.GoogleAPI.getInstance(); + if ( inst && !inst.authenticated ) { + _isMounted = false; + } + } + if ( !_isMounted ) { + var scopes = [ + 'https://www.googleapis.com/auth/drive.install', + 'https://www.googleapis.com/auth/drive.file', + 'openid' + ]; + var loads = [ + 'drive-realtime', + 'drive-share' + ]; + var iargs = {load: loads, scope: scopes}; + OSjs.Helpers.GoogleAPI.createInstance(iargs, function(error, result) { + if ( error ) { + return onerror(error); + } + gapi.client.load('drive', 'v2', function() { + _isMounted = true; + API.message('vfs:mount', 'GoogleDrive', {source: null}); + callback(GoogleDriveStorage); + }); + }); + return; + } + callback(GoogleDriveStorage); + } + function makeRequest(name, args, callback, options) { + args = args || []; + callback = callback || function() {}; + getGoogleDrive(function(instance) { + if ( !instance ) { + throw new Error('No GoogleDrive instance was created. Load error ?'); + } else if ( !instance[name] ) { + throw new Error('Invalid GoogleDrive API call name'); + } + var fargs = args; + fargs.push(callback); + fargs.push(options); + instance[name].apply(instance, fargs); + }, function(error) { + callback(error); + }); + } + OSjs.Core.getMountManager()._add({ + readOnly: false, + name: 'GoogleDrive', + transport: 'GoogleDrive', + description: 'Google Drive', + visible: true, + searchable: false, + unmount: function(cb) { + cb = cb || function() {}; + _isMounted = false; + API.message('vfs:unmount', 'GoogleDrive', {source: null}); + cb(false, true); + }, + mounted: function() { + return _isMounted; + }, + enabled: function() { + try { + if ( API.getConfig('VFS.GoogleDrive.Enabled') ) { + return true; + } + } catch ( e ) { + console.warn('OSjs.VFS.Modules.GoogleDrive::enabled()', e, e.stack); + } + return false; + }, + root: 'google-drive:///', + icon: 'places/google-drive.png', + match: /^google-drive\:\/\//, + request: makeRequest + }); +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + var _cachedClient; + var _isMounted = false; + function _getConfig(cfg, isVFS) { + var config = OSjs.Core.getConfig(); + try { + return isVFS ? config.VFS.Dropbox[cfg] : config.DropboxAPI[cfg]; + } catch ( e ) { + console.warn('OSjs.VFS.Modules.Dropbox::enabled()', e, e.stack); + } + return null; + } + function destroyRingNotification() { + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.remove('Dropbox.js'); + } + } + function createRingNotification() { + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.add('Dropbox.js', [{ + title: API._('DROPBOX_SIGN_OUT'), + onClick: function() { + signoutDropbox(); + } + }]); + } + } + function DropboxVFS() { + var clientKey = _getConfig('ClientKey'); + this.client = new window.Dropbox.Client({ key: clientKey }); + if ( this.client ) { + var href = window.location.href; + if ( !href.match(/\/$/) ) { + href += '/'; + } + href += 'vendor/dropboxOauthReceiver.html'; + var authDriver = new window.Dropbox.AuthDriver.Popup({ + receiverUrl: href + }); + this.client.authDriver(authDriver); + } + } + DropboxVFS.prototype.init = function(callback) { + var timedOut = false; + var timeout = setTimeout(function() { + timedOut = true; + callback(API._('ERR_OPERATION_TIMEOUT_FMT', '60s')); + }, 60 * 1000); + this.client.authenticate(function(error, client) { + if ( !timedOut ) { + console.warn('DropboxVFS::construct()', error, client); + timeout = clearTimeout(timeout); + callback(error); + } + }); + }; + DropboxVFS.prototype.scandir = function(item, callback) { + var mm = OSjs.Core.getMountManager(); + var path = Utils.getPathProtocol(item.path); + function _finish(entries) { + var result = entries.map(function(iter) { + return new OSjs.VFS.File({ + filename: iter.name, + path: mm.getModuleProperty('Dropbox', 'root').replace(/\/$/, '') + iter.path, + size: iter.size, + mime: iter.isFolder ? null : iter.mimeType, + type: iter.isFolder ? 'dir' : 'file' + }); + }); + var list = OSjs.VFS.Helpers.filterScandir(result, item._opts); + callback(false, list); + } + this.client.readdir(path, {}, function(error, entries, stat, entry_stats) { + if ( error ) { + callback(error); + return; + } + _finish(entry_stats); + }); + }; + DropboxVFS.prototype.write = function(item, data, callback) { + var path = Utils.getPathProtocol(item.path); + this.client.writeFile(path, data, function(error, stat) { + callback(error, true); + }); + }; + DropboxVFS.prototype.read = function(item, callback, options) { + options = options || {}; + options.arrayBuffer = true; + var path = Utils.getPathProtocol(item.path); + this.client.readFile(path, options, function(error, entries) { + callback(error, (error ? false : (entries instanceof Array ? entries.join('\n') : entries))); + }); + }; + DropboxVFS.prototype.copy = function(src, dest, callback) { + var spath = Utils.getPathProtocol(src.path); + var dpath = Utils.getPathProtocol(dest.path); + this.client.copy(spath, dpath, function(error) { + callback(error, !error); + }); + }; + DropboxVFS.prototype.move = function(src, dest, callback) { + var spath = Utils.getPathProtocol(src.path); + var dpath = Utils.getPathProtocol(dest.path); + this.client.move(spath, dpath, function(error) { + callback(error, !error); + }); + }; + DropboxVFS.prototype.unlink = function(item, callback) { + var path = Utils.getPathProtocol(item.path); + this.client.unlink(path, function(error, stat) { + callback(error, !error); + }); + }; + DropboxVFS.prototype.mkdir = function(item, callback) { + var path = Utils.getPathProtocol(item.path); + this.client.mkdir(path, function(error, stat) { + callback(error, !error); + }); + }; + DropboxVFS.prototype.exists = function(item, callback) { + this.read(item, function(error, data) { + callback(error, !error); + }); + }; + DropboxVFS.prototype.fileinfo = function(item, callback) { + var path = Utils.getPathProtocol(item.path); + this.client.stat(path, path, function(error, response) { + var fileinfo = null; + if ( !error && response ) { + fileinfo = {}; + var useKeys = ['clientModifiedAt', 'humanSize', 'mimeType', 'modifiedAt', 'name', 'path', 'size', 'versionTag']; + useKeys.forEach(function(k) { + fileinfo[k] = response[k]; + }); + } + callback(error, fileinfo); + }); + }; + DropboxVFS.prototype.url = function(item, callback) { + var path = (typeof item === 'string') ? Utils.getPathProtocol(item) : Utils.getPathProtocol(item.path); + this.client.makeUrl(path, {downloadHack: true}, function(error, url) { + callback(error, url ? url.url : false); + }); + }; + DropboxVFS.prototype.upload = function(file, dest, callback) { + var item = new OSjs.VFS.File({ + filename: file.name, + path: Utils.pathJoin((new OSjs.VFS.File(dest)).path, file.name), + mime: file.type, + size: file.size + }); + this.write(item, file, callback); + }; + DropboxVFS.prototype.trash = function(item, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + DropboxVFS.prototype.untrash = function(item, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + DropboxVFS.prototype.emtpyTrash = function(item, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + DropboxVFS.freeSpace = function(root, callback) { + callback(false, -1); + }; + function getDropbox(callback) { + if ( !_cachedClient ) { + _cachedClient = new DropboxVFS(); + _cachedClient.init(function(error) { + if ( error ) { + console.error('Failed to initialize dropbox VFS', error); + callback(null, error); + return; + } + _isMounted = true; + createRingNotification(); + API.message('vfs:mount', 'Dropbox', {source: null}); + callback(_cachedClient); + }); + return; + } + callback(_cachedClient); + } + function signoutDropbox(cb, options) { + cb = cb || function() {}; + options = options || null; + function finished(client) { + if ( client ) { + client.reset(); + } + _isMounted = false; + _cachedClient = null; + API.message('vfs:unmount', 'Dropbox', {source: null}); + destroyRingNotification(); + cb(); + } + getDropbox(function(client) { + client = client ? client.client : null; + if ( client ) { + try { + client.signOut(options, function() { + finished(client); + }); + } catch ( ex ) { + console.warn('DROPBOX SIGNOUT EXCEPTION', ex); + finished(client); + } + } + }); + } + function makeRequest(name, args, callback, options) { + args = args || []; + callback = callback || function() {}; + getDropbox(function(instance, error) { + if ( !instance ) { + callback('No Dropbox VFS API Instance was ever created. Possible intialization error' + (error ? ': ' + error : '')); + return; + } + var fargs = args; + fargs.push(callback); + fargs.push(options); + instance[name].apply(instance, fargs); + }); + } + OSjs.Core.getMountManager()._add({ + readOnly: false, + name: 'Dropbox', + transport: 'Dropbox', + description: 'Dropbox', + visible: true, + searchable: false, + unmount: function(cb) { + cb = cb || function() {}; + _isMounted = false; + API.message('vfs:unmount', 'Dropbox', {source: null}); + cb(false, true); + }, + mounted: function() { + return _isMounted; + }, + enabled: function() { + if ( !window.Dropbox ) { + return false; + } + return _getConfig('Enabled', true) || false; + }, + root: 'dropbox:///', + icon: 'places/dropbox.png', + match: /^dropbox\:\/\//, + request: makeRequest + }); +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + var _isMounted = false; + var _mimeCache; + function onedriveCall(args, callback) { + var WL = window.WL || {}; + WL.api(args).then( + function(response) { + callback(false, response); + }, + function(responseFailed) { + console.error('OneDrive::*onedriveCall()', 'error', responseFailed, args); + callback(responseFailed.error.message); + } + ); + } + function getItemType(iter) { + var type = 'file'; + if ( iter.type === 'folder' || iter.type === 'album' ) { + type = 'dir'; + } + return type; + } + function getMetadataFromItem(dir, item) { + var path = 'onedrive://' + dir.replace(/^\/+/, '').replace(/\/+$/, '') + '/' + item.name; // FIXME + var itemFile = new OSjs.VFS.File({ + id: item.id, + filename: item.name, + size: item.size || 0, + path: path, + mime: getItemMime(item), + type: getItemType(item) + }); + return itemFile; + } + function getItemMime(iter) { + if ( !_mimeCache ) { + _mimeCache = API.getConfig('MIME.mapping', {}); + } + var mime = null; + if ( getItemType(iter) !== 'dir' ) { + mime = 'application/octet-stream'; + var ext = Utils.filext(iter.name); + if ( ext.length ) { + ext = '.' + ext; + if ( _mimeCache[ext] ) { + mime = _mimeCache[ext]; + } + } + } + return mime; + } + function createDirectoryList(dir, list, item, options) { + var result = []; + if ( dir !== '/' ) { + result.push(new OSjs.VFS.File({ + id: item.id, + filename: '..', + path: Utils.dirname(item.path), + size: 0, + type: 'dir' + })); + } + list.forEach(function(iter) { + result.push(getMetadataFromItem(dir, iter)); + }); + return result; + } + function getFilesInFolder(folderId, callback) { + onedriveCall({ + path: folderId + '/files', + method: 'GET' + }, function(error, response) { + if ( error ) { + callback(error); + return; + } + callback(false, response.data || []); + }); + } + function resolvePath(item, callback, useParent) { + if ( !useParent ) { + if ( item.id ) { + callback(false, item.id); + return; + } + } + var path = Utils.getPathProtocol(item.path).replace(/\/+/, '/'); + if ( useParent ) { + path = Utils.dirname(path); + } + if ( path === '/' ) { + callback(false, 'me/skydrive'); + return; + } + var resolves = path.replace(/^\/+/, '').split('/'); + var isOnRoot = !resolves.length; + var currentParentId = 'me/skydrive'; + function _nextDir(completed) { + var current = resolves.shift(); + var done = resolves.length <= 0; + var found; + if ( isOnRoot ) { + found = currentParentId; + } else { + if ( current ) { + getFilesInFolder(currentParentId, function(error, list) { + list = list || []; + var lfound; + if ( !error ) { + list.forEach(function(iter) { // FIXME: Not very precise + if ( iter ) { + if ( iter.name === current ) { + lfound = iter.id; + } + } + }); + if ( lfound ) { + currentParentId = lfound; + } + } else { + console.warn('OneDrive', 'resolvePath()', 'getFilesInFolder() error', error); + } + if ( done ) { + completed(lfound); + } else { + _nextDir(completed); + } + }); + return; + } + } + if ( done ) { + completed(found); + } else { + _nextDir(completed); + } + } + _nextDir(function(foundId) { + if ( foundId ) { + callback(false, foundId); + } else { + callback(API._('ONEDRIVE_ERR_RESOLVE')); + } + }); + } + var OneDriveStorage = {}; + OneDriveStorage.scandir = function(item, callback, options) { + var relativePath = Utils.getPathProtocol(item.path); + function _finished(error, result) { + callback(error, result); + } + function _scandir(drivePath) { + onedriveCall({ + path: drivePath, + method: 'GET' + }, function(error, response) { + if ( error ) { + _finished(error); + return; + } + getFilesInFolder(response.id, function(error, list) { + if ( error ) { + _finished(error); + return; + } + var fileList = createDirectoryList(relativePath, list, item, options); + _finished(false, fileList); + }); + }); + } + resolvePath(item, function(error, drivePath) { + if ( error ) { + _finished(error); + return; + } + _scandir(drivePath); + }); + }; + OneDriveStorage.read = function(item, callback, options) { + options = options || {}; + this.url(item, function(error, url) { + if ( error ) { + callback(error); + return; + } + var file = new OSjs.VFS.File(url, item.mime); + OSjs.VFS.read(file, function(error, response) { + if ( error ) { + callback(error); + return; + } + callback(false, response); + }, options); + }); + }; + OneDriveStorage.write = function(file, data, callback) { + var inst = OSjs.Helpers.WindowsLiveAPI.getInstance(); + var url = 'https://apis.live.net/v5.0/me/skydrive/files?access_token=' + inst.accessToken; + var fd = new FormData(); + OSjs.VFS.Helpers.addFormFile(fd, 'file', data, file); + OSjs.Utils.ajax({ + url: url, + method: 'POST', + json: true, + body: fd, + onsuccess: function(result) { + if ( result && result.id ) { + callback(false, result.id); + return; + } + callback(API._('ERR_APP_UNKNOWN_ERROR')); + }, + onerror: function(error, result) { + if ( result && result.error ) { + error += ' - ' + result.error.message; + } + callback(error); + } + }); + }; + OneDriveStorage.copy = function(src, dest, callback) { + resolvePath(src, function(error, srcDrivePath) { + if ( error ) { + callback(error); + return; + } + resolvePath(dest, function(error, dstDrivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: srcDrivePath, + method: 'COPY', + body: { + destination: dstDrivePath + } + }, function(error, response) { + callback(error, error ? null : true); + }); + }); + }); + }; + OneDriveStorage.unlink = function(src, callback) { + resolvePath(src, function(error, drivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: drivePath, + method: 'DELETE' + }, function(error, response) { + callback(error, error ? null : true); + }); + }); + }; + OneDriveStorage.move = function(src, dest, callback) { + resolvePath(src, function(error, srcDrivePath) { + if ( error ) { + callback(error); + return; + } + resolvePath(dest, function(error, dstDrivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: srcDrivePath, + method: 'MOVE', + body: { + destination: dstDrivePath + } + }, function(error, response) { + callback(error, error ? null : true); + }); + }); + }); + }; + OneDriveStorage.exists = function(item, callback) { + this.fileinfo(item, function(error, response) { + if ( error ) { + callback(false, false); + return; + } + callback(false, response ? true : false); + }); + }; + OneDriveStorage.fileinfo = function(item, callback) { + resolvePath(item, function(error, drivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: drivePath, + method: 'GET' + }, function(error, response) { + if ( error ) { + callback(error); + return; + } + var useKeys = ['created_time', 'id', 'link', 'name', 'type', 'updated_time', 'upload_location', 'description', 'client_updated_time']; + var info = {}; + useKeys.forEach(function(k) { + info[k] = response[k]; + }); + callback(false, info); + }); + }); + }; + OneDriveStorage.mkdir = function(dir, callback) { + resolvePath(dir, function(error, drivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: drivePath, + method: 'POST', + body: { + name: dir.filename + } + }, function(error, response) { + callback(error, error ? null : true); + }); + }, true); + }; + OneDriveStorage.upload = function(file, dest, callback) { + var item = new OSjs.VFS.File({ + filename: file.name, + path: Utils.pathJoin((new OSjs.VFS.File(dest)).path, file.name), + mime: file.type, + size: file.size + }); + this.write(item, file, callback); + }; + OneDriveStorage.url = function(item, callback) { + resolvePath(item, function(error, drivePath) { + if ( error ) { + callback(error); + return; + } + onedriveCall({ + path: drivePath + '/content', + method: 'GET' + }, function(error, response) { + if ( error ) { + callback(error); + return; + } + callback(false, response.location); + }); + }); + }; + OneDriveStorage.trash = function(file, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + OneDriveStorage.untrash = function(file, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + OneDriveStorage.emptyTrash = function(callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }; + OneDriveStorage.freeSpace = function(root, callback) { + callback(false, -1); + }; + function getOneDrive(callback, onerror) { + callback = callback || function() {}; + onerror = onerror || function() {}; + if ( _isMounted ) { + var inst = OSjs.Helpers.WindowsLiveAPI.getInstance(); + if ( inst && !inst.authenticated ) { + _isMounted = false; + } + } + if ( !_isMounted ) { + var iargs = {scope: ['wl.signin', 'wl.skydrive', 'wl.skydrive_update']}; + OSjs.Helpers.WindowsLiveAPI.createInstance(iargs, function(error, result) { + if ( error ) { + return onerror(error); + } + _isMounted = true; + API.message('vfs:mount', 'OneDrive', {source: null}); + callback(OneDriveStorage); + }); + return; + } + callback(OneDriveStorage); + } + function makeRequest(name, args, callback, options) { + args = args || []; + callback = callback || function() {}; + getOneDrive(function(instance) { + if ( !instance ) { + throw new Error('No OneDrive instance was created. Load error ?'); + } else if ( !instance[name] ) { + throw new Error('Invalid OneDrive API call name'); + } + var fargs = args; + fargs.push(callback); + fargs.push(options); + instance[name].apply(instance, fargs); + }, function(error) { + callback(error); + }); + } + OSjs.Core.getMountManager()._add({ + readOnly: false, + name: 'OneDrive', + transport: 'OneDrive', + description: 'OneDrive', + visible: true, + searchable: false, + unmount: function(cb) { + cb = cb || function() {}; + _isMounted = false; + API.message('vfs:unmount', 'OneDrive', {source: null}); + cb(false, true); + }, + mounted: function() { + return _isMounted; + }, + enabled: function() { + try { + if ( API.getConfig('VFS.OneDrive.Enabled') ) { + return true; + } + } catch ( e ) { + console.warn('OSjs.VFS.Modules.OneDrive::enabled()', e, e.stack); + } + return false; + }, + root: 'onedrive:///', + icon: 'places/onedrive.png', + match: /^onedrive\:\/\//, + request: makeRequest + }); +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + var NAMESPACE = 'OSjs/VFS/LocalStorage'; + var _isMounted = false; + var _cache = {}; + var _fileCache = {}; + function getRealPath(p, par) { + if ( typeof p !== 'string' || !p ) { + throw new TypeError('Expected p as String'); + } + p = Utils.getPathProtocol(p).replace(/\/+/g, '/'); + var path = par ? (Utils.dirname(p) || '/') : p; + if ( path !== '/' ) { + path = path.replace(/\/$/, ''); + } + return path; + } + function createMetadata(i, path, p) { + i = Utils.cloneObject(i); + if ( !p.match(/(\/\/)?\/$/) ) { + p += '/'; + } + i.path = p + i.filename; + return new OSjs.VFS.File(i); + } + function initStorage() { + if ( !_isMounted ) { + try { + _cache = JSON.parse(localStorage.getItem(NAMESPACE + '/tree')) || {}; + } catch ( e ) {} + try { + _fileCache = JSON.parse(localStorage.getItem(NAMESPACE + '/data')) || {}; + } catch ( e ) {} + if ( typeof _cache['/'] === 'undefined' ) { + _cache['/'] = []; + } + _isMounted = true; + API.message('vfs:mount', 'LocalStorage', {source: null}); + } + } + function commitStorage() { + try { + localStorage.setItem(NAMESPACE + '/tree', JSON.stringify(_cache)); + localStorage.setItem(NAMESPACE + '/data', JSON.stringify(_fileCache)); + return true; + } catch ( e ) {} + return false; + } + function addToCache(iter, data, dab) { + var path = getRealPath(iter.path); + var dirname = Utils.dirname(path); + var type = typeof data === 'undefined' || data === null ? 'dir' : 'file'; + var mimeConfig = API.getConfig('MIME.mapping'); + var mime = (function(type) { + if ( type !== 'dir' ) { + if ( iter.mime ) { + return iter.mime; + } else { + var ext = Utils.filext(iter.filename); + return mimeConfig['.' + ext] || 'application/octet-stream'; + } + } + return null; + })(iter.type); + var file = { + size: iter.size || (type === 'file' ? (dab.byteLength || dab.length || 0) : 0), + mime: mime, + type: type, + filename: iter.filename + }; + if ( typeof _cache[dirname] === 'undefined' ) { + _cache[dirname] = []; + } + (function(found) { + if ( found !== false) { + _cache[dirname][found] = file; + } else { + _cache[dirname].push(file); + } + })(findInCache(iter)); + if ( file.type === 'dir' ) { + if ( _fileCache[path] ) { + delete _fileCache[path]; + } + _cache[path] = []; + } else { + var iof = data.indexOf(','); + _fileCache[path] = data.substr(iof + 1); + } + return true; + } + function removeFromCache(iter) { + function _removef(i) { + var path = getRealPath(i.path); + if ( _fileCache[path] ) { + delete _fileCache[path]; + } + _removefromp(i); + } + function _removed(i) { + var path = getRealPath(i.path); + if ( path !== '/' ) { + _removefromp(i); + if ( _cache[path] ) { + delete _cache[path]; + } + } + } + function _removefromp(i) { + var path = getRealPath(i.path); + var dirname = Utils.dirname(path); + if ( _cache[dirname] ) { + var found = -1; + _cache[dirname].forEach(function(ii, idx) { + if ( found === -1 && ii ) { + if ( ii.type === i.type && i.filename === i.filename ) { + found = idx; + } + } + }); + if ( found >= 0 ) { + _cache[dirname].splice(found, 1); + } + } + } + function _op(i) { + if ( i ) { + if ( i.type === 'dir' ) { + scanStorage(i, false).forEach(function(ii) { + _op(ii); + }); + _removed(i); + } else { + _removef(i); + } + } + } + _op(iter); + return true; + } + function findInCache(iter) { + var path = getRealPath(iter.path); + var dirname = Utils.dirname(path); + var found = false; + _cache[dirname].forEach(function(chk, idx) { + if ( found === false && chk.filename === iter.filename ) { + found = idx; + } + }); + return found; + } + function getFromCache(pp) { + var path = Utils.dirname(pp); + var fname = Utils.filename(pp); + var result = null; + var tpath = path.replace(/^(.*)\:\/\//, ''); + (_cache[tpath] || []).forEach(function(v) { + if ( !result && v.filename === fname ) { + result = createMetadata(v, null, path); + } + }); + return result; + } + function scanStorage(item, ui) { + var path = getRealPath(item.path); + var data = _cache[path] || false; + var list = (data === false) ? false : data.filter(function(i) { + return !!i; + }).map(function(i) { + return createMetadata(i, path, item.path); + }); + return list; + } + var LocalStorageStorage = { + scandir: function(item, callback, options) { + var list = scanStorage(item, true); + callback(list === false ? API._('ERR_VFSMODULE_NOSUCH') : false, list); + }, + read: function(item, callback, options) { + options = options || {}; + var path = getRealPath(item.path); + function readStorage(cb) { + var metadata = getFromCache(path); + if ( metadata ) { + var data = _fileCache[path]; + if ( data ) { + var ds = 'data:' + metadata.mime + ',' + data; + OSjs.VFS.Helpers.dataSourceToAb(ds, metadata.mime, function(err, res) { + if ( err ) { + cb(err); + } else { + if ( options.url ) { + OSjs.VFS.Helpers.abToBlob(res, metadata.mime, function(err, blob) { + cb(err, URL.createObjectURL(blob)); + }); + } else { + cb(err, res); + } + } + }); + return true; + } + } + return false; + } + if ( readStorage(callback) === false ) { + callback(API._('ERR_VFS_FATAL'), false); + } + }, + write: function(file, data, callback, options) { + options = options || {}; + var mime = file.mime || 'application/octet-stream'; + function writeStorage(cb) { + if ( options.isds ) { + cb(false, data); + } else { + OSjs.VFS.Helpers.abToDataSource(data, mime, function(err, res) { + if ( err ) { + callback(err, false); + } else { + cb(false, res); + } + }); + } + } + writeStorage(function(err, res) { + try { + if ( addToCache(file, res, data) && commitStorage() ) { + callback(err, true); + } else { + callback(API._('ERR_VFS_FATAL'), false); + } + } catch ( e ) { + callback(e); + } + }); + }, + unlink: function(src, callback) { + try { + src = getFromCache(src.path) || src; + if ( removeFromCache(src) && commitStorage() ) { + callback(false, true); + } else { + callback(API._('ERR_VFS_FATAL'), false); + } + } catch ( e ) { + callback(e); + } + }, + copy: function(src, dest, callback) { + function _write(s, d, cb) { + OSjs.VFS.read(s, function(err, data) { + if ( err ) { + cb(err); + } else { + OSjs.VFS.write(d, data, cb); + } + }); + } + function _op(s, d, cb) { + if ( s.type === 'file' ) { + d.mime = s.mime; + } + d.size = s.size; + d.type = s.type; + if ( d.type === 'dir' ) { + OSjs.VFS.mkdir(d, function(err, res) { + if ( err ) { + cb(err); + } else { + var list = scanStorage(s, false); + if ( list && list.length ) { + Utils.asyncs(list, function(entry, idx, next) { + var rp = entry.path.substr(src.path.length); + var nd = new OSjs.VFS.File(dest.path + rp); + _op(entry, nd, next); + }, function() { + cb(false, true); + }); + } else { + cb(false, true); + } + } + }); + } else { + _write(s, d, cb); + } + } + src = getFromCache(src.path) || src; + var droot = getRealPath(Utils.dirname(dest.path)); + if ( droot !== '/' && !getFromCache(droot) ) { + callback(API._('ERR_VFS_TARGET_NOT_EXISTS')); + return; + } + if ( src.type === 'dir' && src.path === Utils.dirname(dest.path) ) { + callback('You cannot copy a directory into itself'); // FIXME + return; + } + _op(src, dest, callback); + }, + move: function(src, dest, callback) { + var spath = getRealPath(src.path); + var dpath = getRealPath(dest.path); + var sdirname = Utils.dirname(spath); + var ddirname = Utils.dirname(dpath); + if ( _fileCache[dpath] ) { + callback(API._('ERR_VFS_FILE_EXISTS')); + return; + } + if ( sdirname === ddirname ) { + if ( _fileCache[spath] ) { + var tmp = _fileCache[spath]; + delete _fileCache[spath]; + _fileCache[dpath] = tmp; + } + if ( _cache[sdirname] ) { + var found = -1; + _cache[sdirname].forEach(function(i, idx) { + if ( i && found === -1 ) { + if ( i.filename === src.filename && i.type === src.type ) { + found = idx; + } + } + }); + if ( found >= 0 ) { + _cache[sdirname][found].filename = dest.filename; + } + } + callback(false, commitStorage()); + } else { + OSjs.VSF.copy(src, dest, function(err) { + if ( err ) { + callback(err); + } else { + OSjs.VFS.unlink(src, callback); + } + }); + } + }, + exists: function(item, callback) { + var data = getFromCache(getRealPath(item.path)); + callback(false, !!data); + }, + fileinfo: function(item, callback) { + var data = getFromCache(item.path); + callback(data ? false : API._('ERR_VFSMODULE_NOSUCH'), data); + }, + mkdir: function(dir, callback) { + var dpath = getRealPath(dir.path); + if ( dpath !== '/' && getFromCache(dpath) ) { + callback(API._('ERR_VFS_FILE_EXISTS')); + return; + } + dir.mime = null; + dir.size = 0; + dir.type = 'dir'; + try { + if ( addToCache(dir) && commitStorage() ) { + callback(false, true); + } else { + callback(API._('ERR_VFS_FATAL')); + } + } catch ( e ) { + callback(e); + } + }, + upload: function(file, dest, callback) { + var check = new OSjs.VFS.File(Utils.pathJoin((new OSjs.VFS.File(dest)).path, file.name), file.type); + check.size = file.size; + check.type = 'file'; + OSjs.VFS.exists(check, function(err, exists) { + if ( err || exists ) { + callback(err || API._('ERR_VFS_FILE_EXISTS')); + } else { + var reader = new FileReader(); + reader.onerror = function(e) { + callback(e); + }; + reader.onloadend = function() { + OSjs.VFS.write(check, reader.result, callback, {isds: true}); + }; + reader.readAsDataURL(file); + } + }); + }, + url: function(item, callback) { + OSjs.VFS.exists(item, function(err, exists) { + if ( err || !exists ) { + callback(err || API._('ERR_VFS_FILE_EXISTS')); + } else { + OSjs.VFS.read(item, callback, {url: true}); + } + }); + }, + find: function(file, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }, + trash: function(file, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }, + untrash: function(file, callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }, + emptyTrash: function(callback) { + callback(API._('ERR_VFS_UNAVAILABLE')); + }, + freeSpace: function(root, callback) { + var total = 5 * 1024 * 1024; + var used = JSON.stringify(_cache).length + JSON.stringify(_fileCache).length; + callback(false, total - used); + } + }; + function makeRequest(name, args, callback, options) { + initStorage(); + var ref = LocalStorageStorage[name]; + var fargs = (args || []).slice(0); + fargs.push(callback || function() {}); + fargs.push(options || {}); + return ref.apply(ref, fargs); + } + OSjs.Core.getMountManager()._add({ + readOnly: false, + name: 'LocalStorage', + transport: 'LocalStorage', + description: API.getConfig('VFS.LocalStorage.Options.description', 'LocalStorage'), + visible: true, + searchable: false, + unmount: function(cb) { + cb = cb || function() {}; + _isMounted = false; + API.message('vfs:unmount', 'LocalStorage', {source: null}); + cb(false, true); + }, + mounted: function() { + return _isMounted; + }, + enabled: function() { + try { + if ( API.getConfig('VFS.LocalStorage.Enabled') ) { + return true; + } + } catch ( e ) { + console.warn('OSjs.VFS.Modules.LocalStorage::enabled()', e, e.stack); + } + return false; + }, + root: 'localstorage:///', + icon: API.getConfig('VFS.LocalStorage.Options.icon', 'apps/web-browser.png'), + match: /^localstorage\:\/\//, + request: makeRequest + }); +})(OSjs.Utils, OSjs.API); + +(function(Utils, VFS, API) { + 'use strict'; + function filter(from, index, shrt, toindex) { + var list = []; + for ( var i = (shrt ? 0 : toindex); i < from.length; i++ ) { + list.push(from[i]); + } + return list; + } + function format(fmt, date) { + var utc; + if ( typeof fmt === 'undefined' || !fmt ) { + fmt = ExtendedDate.config.defaultFormat; + } else { + if ( typeof fmt !== 'string' ) { + utc = fmt.utc; + fmt = fmt.format; + } else { + utc = ExtendedDate.config.utc; + } + } + return formatDate(date, fmt, utc); + } + function _now(now) { + return now ? (now instanceof ExtendedDate ? now.date : now) : new Date(); + } + function _y(y, now) { + return (typeof y === 'undefined' || y === null || y < 0 ) ? now.getFullYear() : y; + } + function _m(m, now) { + return (typeof m === 'undefined' || m === null || m < 0 ) ? now.getMonth() : m; + } + function ExtendedDate(date) { + if ( date ) { + if ( date instanceof Date ) { + this.date = date; + } else if ( date instanceof ExtendedDate ) { + this.date = date.date; + } else if ( typeof date === 'string' ) { + this.date = new Date(date); + } + } + if ( !this.date ) { + this.date = new Date(); + } + } + ExtendedDate.config = { + defaultFormat: 'isoDateTime' + }; + ExtendedDate.dayNames = [ + 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', + 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday' + ]; + ExtendedDate.monthNames = [ + 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', + 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December' + ]; + var methods = [ + 'UTC', + 'toString', + 'now', + 'parse', + 'getDate', + 'getDay', + 'getFullYear', + 'getHours', + 'getMilliseconds', + 'getMinutes', + 'getMonth', + 'getSeconds', + 'getTime', + 'getTimezoneOffset', + 'getUTCDate', + 'getUTCDay', + 'getUTCFullYear', + 'getUTCHours', + 'getUTCMilliseconds', + 'getUTCMinutes', + 'getUTCMonth', + 'getUTCSeconds', + 'getYear', + 'setDate', + 'setFullYear', + 'setHours', + 'setMilliseconds', + 'setMinutes', + 'setMonth', + 'setSeconds', + 'setTime', + 'setUTCDate', + 'setUTCFullYear', + 'setUTCHours', + 'setUTCMilliseconds', + 'setUTCMinutes', + 'setUTCMonth', + 'setUTCSeconds', + 'setYear', + 'toDateString', + 'toGMTString', + 'toISOString', + 'toJSON', + 'toLocaleDateString', + 'toLocaleFormat', + 'toLocaleString', + 'toLocaleTimeString', + 'toSource', + 'toString', + 'toTimeString', + 'toUTCString', + 'valueOf' + ]; + methods.forEach(function(m) { + ExtendedDate.prototype[m] = function() { + return this.date[m].apply(this.date, arguments); + }; + }); + ExtendedDate.prototype.get = function() { + return this.date; + }; + ExtendedDate.prototype.format = function(fmt) { + return ExtendedDate.format(this, fmt); + }; + ExtendedDate.prototype.getFirstDayInMonth = function(fmt) { + return ExtendedDate.getFirstDayInMonth(fmt, null, null, this); + }; + ExtendedDate.prototype.getLastDayInMonth = function(fmt) { + return ExtendedDate.getLastDayInMonth(fmt, null, null, this); + }; + ExtendedDate.prototype.getDaysInMonth = function() { + return ExtendedDate.getDaysInMonth(null, null, this); + }; + ExtendedDate.prototype.getWeekNumber = function() { + return ExtendedDate.getWeekNumber(this); + }; + ExtendedDate.prototype.isWithinMonth = function(from, to) { + return ExtendedDate.isWithinMonth(this, from, to); + }; + ExtendedDate.prototype.getDayOfTheYear = function() { + return ExtendedDate.getDayOfTheYear(); + }; + ExtendedDate.format = function(date, fmt) { + return format(fmt, date); + }; + ExtendedDate.getPreviousMonth = function(now) { + now = now ? (now instanceof ExtendedDate ? now.date : now) : new Date(); + var current; + if (now.getMonth() === 0) { + current = new Date(now.getFullYear() - 1, 11, now.getDate()); + } else { + current = new Date(now.getFullYear(), now.getMonth() - 1, now.getDate()); + } + return new ExtendedDate(current); + }; + ExtendedDate.getNextMonth = function(now) { + now = now ? (now instanceof ExtendedDate ? now.date : now) : new Date(); + var current; + if (now.getMonth() === 11) { + current = new Date(now.getFullYear() + 1, 0, now.getDate()); + } else { + current = new Date(now.getFullYear(), now.getMonth() + 1, now.getDate()); + } + return new ExtendedDate(current); + }; + ExtendedDate.getFirstDayInMonth = function(fmt, y, m, now) { + now = _now(now); + y = _y(y, now); + m = _m(m, now); + var date = new Date(); + date.setFullYear(y, m, 1); + if ( fmt === true ) { + return date.getDate(); + } + return fmt ? format(fmt, date) : new ExtendedDate(date); + }; + ExtendedDate.getLastDayInMonth = function(fmt, y, m, now) { + now = _now(now); + y = _y(y, now); + m = _m(m, now); + var date = new Date(); + date.setFullYear(y, m, 0); + if ( fmt === true ) { + return date.getDate(); + } + return fmt ? format(fmt, date) : new ExtendedDate(date); + }; + ExtendedDate.getDaysInMonth = function(y, m, now) { + now = _now(now); + y = _y(y, now); + m = _m(m, now); + var date = new Date(); + date.setFullYear(y, m, 0); + return parseInt(date.getDate(), 10); + }; + ExtendedDate.getWeekNumber = function(now) { + now = now ? (now instanceof ExtendedDate ? now.date : now) : new Date(); + var d = new Date(+now); + d.setHours(0,0,0); + d.setDate(d.getDate() + 4 - (d.getDay() || 7)); + return Math.ceil((((d - new Date(d.getFullYear(),0,1)) / 8.64e7) + 1) / 7); + }; + ExtendedDate.getDayName = function(index, shrt) { + if ( index < 0 || index === null || typeof index === 'undefined' ) { + return filter(ExtendedDate.dayNames, index, shrt, 7); + } + shrt = shrt ? 0 : 1; + var idx = index + (shrt + 7); + return ExtendedDate.dayNames[idx]; + }; + ExtendedDate.getMonthName = function(index, shrt) { + if ( index < 0 || index === null || typeof index === 'undefined' ) { + return filter(ExtendedDate.monthNames, index, shrt, 12); + } + shrt = shrt ? 0 : 1; + var idx = index + (shrt + 12); + return ExtendedDate.monthNames[idx]; + }; + ExtendedDate.isWithinMonth = function(now, from, to) { + if ( now.getFullYear() >= from.getFullYear() && now.getMonth() >= from.getMonth() ) { + if ( now.getFullYear() <= to.getFullYear() && now.getMonth() <= to.getMonth() ) { + return true; + } + } + return false; + }; + ExtendedDate.getDayOfTheYear = function() { + var now = new Date(); + var start = new Date(now.getFullYear(), 0, 0); + var diff = now - start; + var oneDay = 1000 * 60 * 60 * 24; + return Math.floor(diff / oneDay); + }; + function formatDate(date, format, utc) { + utc = utc === true; + function pad(val, len) { + val = String(val); + len = len || 2; + while (val.length < len) { + val = '0' + val; + } + return val; + } + var defaultFormats = { + 'default': 'Y-m-d H:i:s', + shortDate: 'm/d/y', + mediumDate: 'M d, Y', + longDate: 'F d, Y', + fullDate: 'l, F d, Y', + shortTime: 'h:i A', + mediumTime: 'h:i:s A', + longTime: 'h:i:s A T', + isoDate: 'Y-m-d', + isoTime: 'H:i:s', + isoDateTime: 'Y-m-d H:i:s' + }; + format = defaultFormats[format] || format; + if ( !(date instanceof ExtendedDate) ) { + date = new ExtendedDate(date); + } + var map = { + d: function(s) { + return pad(map.j(s)); + }, + D: function(s) { + return ExtendedDate.dayNames[utc ? date.getUTCDay() : date.getDay()]; + }, + j: function(s) { + return (utc ? date.getUTCDate() : date.getDate()); + }, + l: function(s) { + return ExtendedDate.dayNames[(utc ? date.getUTCDay() : date.getDay()) + 7]; + }, + w: function(s) { + return (utc ? date.getUTCDay() : date.getDay()); + }, + z: function(s) { + return date.getDayOfTheYear(); + }, + S: function(s) { + var d = utc ? date.getUTCDate() : date.getDate(); + return ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 !== 10) * d % 10]; + }, + W: function(s) { + return date.getWeekNumber(); + }, + F: function(s) { + return ExtendedDate.monthNames[(utc ? date.getUTCMonth() : date.getMonth()) + 12]; + }, + m: function(s) { + return pad(map.n(s)); + }, + M: function(s) { + return ExtendedDate.monthNames[(utc ? date.getUTCMonth() : date.getMonth())]; + }, + n: function(s) { + return (utc ? date.getUTCMonth() : date.getMonth()) + 1; + }, + t: function(s) { + return date.getDaysInMonth(); + }, + Y: function(s) { + return (utc ? date.getUTCFullYear() : date.getFullYear()); + }, + y: function(s) { + return String(map.Y(s)).slice(2); + }, + a: function(s) { + return map.G(s) < 12 ? 'am' : 'pm'; + }, + A: function(s) { + return map.a(s).toUpperCase(); + }, + g: function(s) { + return map.G(s) % 12 || 12; + }, + G: function(s) { + return (utc ? date.getUTCHours() : date.getHours()); + }, + h: function(s) { + return pad(map.g(s)); + }, + H: function(s) { + return pad(map.G(s)); + }, + i: function(s) { + return pad(utc ? date.getUTCMinutes() : date.getMinutes()); + }, + s: function(s) { + return pad(utc ? date.getUTCSeconds() : date.getSeconds()); + }, + O: function(s) { + var tzo = -date.getTimezoneOffset(); + var dif = tzo >= 0 ? '+' : '-'; + function ppad(num) { + var norm = Math.abs(Math.floor(num)); + return (norm < 10 ? '0' : '') + norm; + } + var str = dif + ppad(tzo / 60) + ':' + ppad(tzo % 60); + return str; + }, + T: function(s) { + if ( utc ) { + return 'UTC'; + } + var timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g; + var zones = String(date.date).match(timezone) || ['']; + return zones.pop().replace(/(\+|\-)[0-9]+$/, ''); + }, + U: function(s) { + return date.getTime(); + } + }; + var result = []; + format.split('').forEach(function(s) { + result.push(map[s] ? map[s]() : s); + }); + return result.join(''); + } + OSjs.Helpers.Date = ExtendedDate; +})(OSjs.Utils, OSjs.VFS, OSjs.API); + +(function(Utils, API, GUI, Window) { + 'use strict'; + function EventHandler(name, names) { + this.name = name; + this.events = {}; + (names || []).forEach(function(n) { + this.events[n] = []; + }, this); + } + EventHandler.prototype.destroy = function() { + this.events = {}; + }; + EventHandler.prototype.on = function(name, cb, thisArg) { + thisArg = thisArg || this; + if ( !(cb instanceof Function) ) { + throw new TypeError('EventHandler::on() expects cb to be a Function'); + } + var self = this; + var added = []; + function _register(n) { + if ( !(self.events[n] instanceof Array) ) { + self.events[n] = []; + } + added.push(self.events[n].push(function(args) { + return cb.apply(thisArg, args); + })); + } + if ( name instanceof RegExp ) { + Object.keys(this.events).forEach(function(n) { + if ( name.test(n) ) { + _register(n); + } + }); + } else { + name.replace(/\s/g, '').split(',').forEach(function(n) { + _register(n); + }); + } + return added.length === 1 ? added[0] : added; + }; + EventHandler.prototype.off = function(name, index) { + if ( !(this.events[name] instanceof Array) ) { + throw new TypeError('Invalid event name'); + } + if ( arguments.length > 1 && typeof index === 'number' ) { + this.events[name].splice(index, 1); + } else { + this.events[name] = []; + } + }; + EventHandler.prototype.emit = function(name, args) { + args = args || []; + if ( !(this.events[name] instanceof Array) ) { + return true; + } + return (this.events[name]).every(function(fn) { + var result; + try { + result = fn(args); + } catch ( e ) { + console.warn('EventHandler::emit() exception', name, e); + console.warn(e.stack); + } + return typeof result === 'undefined' || result === true; + }); + }; + OSjs.Helpers.EventHandler = EventHandler; +})(OSjs.Utils, OSjs.API, OSjs.GUI, OSjs.Core.Window); + +(function(Application, Window, Utils, VFS, GUI) { + 'use strict'; + var IFRAME_COUNT = 0; + var IFrameApplicationWindow = function(name, opts, app) { + opts = Utils.argumentDefaults(opts, { + src: 'about:blank', + focus: function() {}, + blur: function() {}, + icon: null, + title: 'IframeApplicationWindow', + width: 320, + height: 240, + allow_resize: false, + allow_restore: false, + allow_maximize: false + }); + Window.apply(this, ['IFrameApplicationWindow', opts, app]); + this._iwin = null; + this._frame = null; + }; + IFrameApplicationWindow.prototype = Object.create(Window.prototype); + IFrameApplicationWindow.prototype.destroy = function() { + this.postMessage('Window::destroy'); + return Window.prototype.destroy.apply(this, arguments); + }; + IFrameApplicationWindow.prototype.init = function(wmRef, app) { + var self = this; + var root = Window.prototype.init.apply(this, arguments); + root.style.overflow = 'visible'; + var id = 'IframeApplicationWindow' + IFRAME_COUNT.toString(); + var iframe = document.createElement('iframe'); + iframe.setAttribute('border', 0); + iframe.id = id; + iframe.className = 'IframeApplicationFrame'; + iframe.addEventListener('load', function() { + self._iwin = iframe.contentWindow; + self.postMessage('Window::init'); + }); + this.setLocation(this._opts.src, iframe); + root.appendChild(iframe); + this._frame = iframe; + try { + this._iwin = iframe.contentWindow; + } catch ( e ) {} + if ( this._iwin ) { + this._iwin.focus(); + } + this._frame.focus(); + this._opts.focus(this._frame, this._iwin); + IFRAME_COUNT++; + return root; + }; + IFrameApplicationWindow.prototype._blur = function() { + if ( Window.prototype._blur.apply(this, arguments) ) { + if ( this._iwin ) { + this._iwin.blur(); + } + if ( this._frame ) { + this._frame.blur(); + } + this._opts.blur(this._frame, this._iwin); + return true; + } + return false; + }; + IFrameApplicationWindow.prototype._focus = function() { + if ( Window.prototype._focus.apply(this, arguments) ) { + if ( this._iwin ) { + this._iwin.focus(); + } + if ( this._frame ) { + this._frame.focus(); + } + this._opts.focus(this._frame, this._iwin); + return true; + } + return false; + }; + IFrameApplicationWindow.prototype.postMessage = function(message) { + if ( this._iwin && this._app ) { + this._iwin.postMessage({ + message: message, + pid: this._app.__pid, + wid: this._wid + }, window.location.href); + } + }; + IFrameApplicationWindow.prototype.onPostMessage = function(message, ev) { + }; + IFrameApplicationWindow.prototype.setLocation = function(src, iframe) { + iframe = iframe || this._frame; + var oldbefore = window.onbeforeunload; + window.onbeforeunload = null; + iframe.src = src; + window.onbeforeunload = oldbefore; + }; + var IFrameApplication = function(name, args, metadata, opts) { + Application.call(this, name, args, metadata); + this.options = Utils.argumentDefaults(opts, { + icon: '', + title: 'IframeApplicationWindow' + }); + this.options.src = OSjs.API.getApplicationResource(this, this.options.src); + }; + IFrameApplication.prototype = Object.create(Application.prototype); + IFrameApplication.prototype.init = function(settings, metadata) { + Application.prototype.init.apply(this, arguments); + var name = this.__pname + 'Window'; + this._addWindow(new IFrameApplicationWindow(name, this.options, this), null, true); + }; + IFrameApplication.prototype.onPostMessage = function(message, ev) { + var self = this; + function _response(err, res) { + self.postMessage({ + id: message.id, + method: message.method, + error: err, + result: Utils.cloneObject(res) + }); + } + if ( typeof message.id === 'number' && message.method ) { + if ( this[message.method] ) { + this[message.method](message.args || {}, _response); + } else { + _response('No such method'); + } + } + }; + IFrameApplication.prototype.postMessage = function(message) { + var win = this._getMainWindow(); + if ( win ) { + win.postMessage(message); + } + }; + OSjs.Helpers.IFrameApplication = IFrameApplication; + OSjs.Helpers.IFrameApplicationWindow = IFrameApplicationWindow; +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.VFS, OSjs.GUI); + +(function(Application, Window, Utils, VFS, API, GUI) { + 'use strict'; + function DefaultApplication(name, args, metadata, opts) { + this.defaultOptions = Utils.argumentDefaults(opts, { + readData: true, + rawData: false, + extension: '', + mime: 'application/octet-stream', + filetypes: [], + filename: 'New file' + }); + Application.apply(this, [name, args, metadata]); + } + DefaultApplication.prototype = Object.create(Application.prototype); + DefaultApplication.constructor = Application; + DefaultApplication.prototype.destroy = function() { + Application.prototype.destroy.apply(this, arguments); + }; + DefaultApplication.prototype._onMessage = function(obj, msg, args) { + Application.prototype._onMessage.apply(this, arguments); + var self = this; + var current = this._getArgument('file'); + var win = this._getWindow(this.__mainwindow); + if ( msg === 'vfs' && args.source !== null && args.source !== this.__pid && args.file ) { + if ( win && current && current.path === args.file.path ) { + win._toggleDisabled(true); + API.createDialog('Confirm', { + buttons: ['yes', 'no'], + message: API._('MSG_FILE_CHANGED') + }, function(ev, button) { + win._toggleDisabled(false); + if ( button === 'ok' || button === 'yes' ) { + self.openFile(new VFS.File(args.file), win); + } + }, win); + } + } + }; + DefaultApplication.prototype.openFile = function(file, win) { + var self = this; + if ( !file ) { + return; + } + function onError(error) { + if ( error ) { + API.error(self.__label, + API._('ERR_FILE_APP_OPEN'), + API._('ERR_FILE_APP_OPEN_ALT_FMT', + file.path)); + return true; + } + return false; + } + function onDone(result) { + self._setArgument('file', file); + win.showFile(file, result); + } + var check = this.__metadata.mime || []; + if ( !Utils.checkAcceptMime(file.mime, check) ) { + API.error(this.__label, + API._('ERR_FILE_APP_OPEN'), + API._('ERR_FILE_APP_OPEN_FMT', + file.path, file.mime) + ); + return false; + } + win._toggleLoading(true); + function CallbackVFS(error, result) { + win._toggleLoading(false); + if ( onError(error) ) { + return; + } + onDone(result); + } + if ( this.defaultOptions.readData ) { + VFS.read(file, CallbackVFS, {type: this.defaultOptions.rawData ? 'binary' : 'text'}); + } else { + VFS.url(file, CallbackVFS); + } + return true; + }; + DefaultApplication.prototype.saveFile = function(file, value, win) { + var self = this; + if ( !file ) { + return; + } + win._toggleLoading(true); + VFS.write(file, value || '', function(error, result) { + win._toggleLoading(false); + if ( error ) { + API.error(self.__label, + API._('ERR_FILE_APP_SAVE'), + API._('ERR_FILE_APP_SAVE_ALT_FMT', + file.path)); + return; + } + self._setArgument('file', file); + win.updateFile(file); + }, {}, this); + }; + DefaultApplication.prototype.saveDialog = function(file, win, saveAs) { + var self = this; + var value = win.getFileData(); + if ( !saveAs ) { + this.saveFile(file, value, win); + return; + } + win._toggleDisabled(true); + API.createDialog('File', { + file: file, + filename: file ? file.filename : this.defaultOptions.filename, + filetypes: this.defaultOptions.filetypes, + filter: this.__metadata.mime, + extension: this.defaultOptions.extension, + mime: this.defaultOptions.mime, + type: 'save' + }, function(ev, button, result) { + win._toggleDisabled(false); + if ( button === 'ok' ) { + self.saveFile(result, value, win); + } + }, win); + }; + DefaultApplication.prototype.openDialog = function(file, win) { + var self = this; + function openDialog() { + win._toggleDisabled(true); + API.createDialog('File', { + file: file, + filter: self.__metadata.mime + }, function(ev, button, result) { + win._toggleDisabled(false); + if ( button === 'ok' && result ) { + self.openFile(new VFS.File(result), win); + } + }, win); + } + win.checkHasChanged(function(discard) { + if ( discard ) { + openDialog(); + } + }); + }; + DefaultApplication.prototype.newDialog = function(path, win) { + var self = this; + win.checkHasChanged(function(discard) { + if ( discard ) { + self._setArgument('file', null); + win.showFile(null, null); + } + }); + }; + OSjs.Helpers.DefaultApplication = DefaultApplication; +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.VFS, OSjs.API, OSjs.GUI); + +(function(Application, Window, Utils, VFS, API, GUI) { + 'use strict'; + function DefaultApplicationWindow(name, app, args, scheme, file) { + Window.apply(this, arguments); + this.hasClosingDialog = false; + this.currentFile = file ? new VFS.File(file) : null; + this.hasChanged = false; + } + DefaultApplicationWindow.prototype = Object.create(Window.prototype); + DefaultApplicationWindow.constructor = Window; + DefaultApplicationWindow.prototype.destroy = function() { + Window.prototype.destroy.apply(this, arguments); + this.currentFile = null; + }; + DefaultApplicationWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + return root; + }; + DefaultApplicationWindow.prototype._inited = function() { + var result = Window.prototype._inited.apply(this, arguments); + var self = this; + var app = this._app; + var menuMap = { + MenuNew: function() { + app.newDialog(self.currentFile, self); + }, + MenuSave: function() { + app.saveDialog(self.currentFile, self); + }, + MenuSaveAs: function() { + app.saveDialog(self.currentFile, self, true); + }, + MenuOpen: function() { + app.openDialog(self.currentFile, self); + }, + MenuClose: function() { + self._close(); + } + }; + this._scheme.find(this, 'SubmenuFile').on('select', function(ev) { + if ( menuMap[ev.detail.id] ) { + menuMap[ev.detail.id](); + } + }); + this._scheme.find(this, 'MenuSave').set('disabled', true); + if ( this.currentFile ) { + if ( !this._app.openFile(this.currentFile, this) ) { + this.currentFile = null; + } + } + return result; + }; + DefaultApplicationWindow.prototype._onDndEvent = function(ev, type, item, args) { + if ( !Window.prototype._onDndEvent.apply(this, arguments) ) { + return; + } + if ( type === 'itemDrop' && item ) { + var data = item.data; + if ( data && data.type === 'file' && data.mime ) { + this._app.openFile(new VFS.File(data), this); + } + } + }; + DefaultApplicationWindow.prototype._close = function() { + var self = this; + if ( this.hasClosingDialog ) { + return; + } + if ( this.hasChanged ) { + this.hasClosingDialog = true; + this.checkHasChanged(function(discard) { + self.hasClosingDialog = false; + if ( discard ) { + self.hasChanged = false; // IMPORTANT + self._close(); + } + }); + return; + } + Window.prototype._close.apply(this, arguments); + }; + DefaultApplicationWindow.prototype.checkHasChanged = function(cb) { + var self = this; + if ( this.hasChanged ) { + this._toggleDisabled(true); + API.createDialog('Confirm', { + buttons: ['yes', 'no'], + message: API._('MSG_GENERIC_APP_DISCARD') + }, function(ev, button) { + self._toggleDisabled(false); + cb(button === 'ok' || button === 'yes'); + }); + return; + } + cb(true); + }; + DefaultApplicationWindow.prototype.showFile = function(file, content) { + this.updateFile(file); + }; + DefaultApplicationWindow.prototype.updateFile = function(file) { + this.currentFile = file || null; + this.hasChanged = false; + if ( this._scheme && (this._scheme instanceof GUI.Scheme) ) { + this._scheme.find(this, 'MenuSave').set('disabled', !file); + } + if ( file ) { + this._setTitle(file.filename, true); + } else { + this._setTitle(); + } + }; + DefaultApplicationWindow.prototype.getFileData = function() { + return null; + }; + DefaultApplicationWindow.prototype._onKeyEvent = function(ev, type, shortcut) { + if ( shortcut === 'SAVE' ) { + this._app.saveDialog(this.currentFile, this, !this.currentFile); + return false; + } else if ( shortcut === 'SAVEAS' ) { + this._app.saveDialog(this.currentFile, this, true); + return false; + } else if ( shortcut === 'OPEN' ) { + this._app.openDialog(this.currentFile, this); + return false; + } + return Window.prototype._onKeyEvent.apply(this, arguments); + }; + OSjs.Helpers.DefaultApplicationWindow = DefaultApplicationWindow; +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.VFS, OSjs.API, OSjs.GUI); + +(function(Utils, API) { + 'use strict'; + var gapi = window.gapi = window.gapi || {}; + var SingletonInstance = null; + function GoogleAPI(clientId) { + this.clientId = clientId; + this.accessToken = null; + this.userId = null; + this.preloaded = false; + this.authenticated = false; + this.loaded = []; + this.preloads = [ + { + type: 'javascript', + src: 'https://apis.google.com/js/api.js' + } + ]; + } + GoogleAPI.prototype.destroy = function() { + }; + GoogleAPI.prototype.init = function(callback) { + var self = this; + callback = callback || function() {}; + if ( this.preloaded ) { + callback(false, true); + } else { + Utils.preload(this.preloads, function(total, failed) { + if ( !failed.length ) { + self.preloaded = true; + } + callback(failed.join('\n')); + }); + } + }; + GoogleAPI.prototype.load = function(load, scope, client, callback) { + var self = this; + function auth(cb) { + self.authenticate(scope, function(error, result) { + if ( error ) { + return cb(error); + } + if ( !self.authenticated ) { + return cb(API._('GAPI_AUTH_FAILURE')); + } + cb(false, result); + }); + } + function loadAll(finished) { + var lload = []; + load.forEach(function(i) { + if ( self.loaded.indexOf(i) === -1 ) { + lload.push(i); + } + }); + var current = 0; + var total = lload.length; + function _load(iter, cb) { + var args = []; + var name = null; + if ( iter instanceof Array ) { + if ( iter.length > 0 && iter.length < 3 ) { + args = args.concat(iter); + name = iter[0]; + } + } else { + args.push(iter); + name = iter; + } + args.push(function() { + self.loaded.push(name); + cb.apply(this, arguments); + }); + if ( client ) { + gapi.client.load.apply(gapi, args); + } else { + gapi.load.apply(gapi, args); + } + } + function _next() { + if ( current >= total ) { + finished(); + } else { + _load(lload[current], function() { + _next(); + }); + current++; + } + } + _next(); + } + this.init(function(error) { + if ( error ) { + callback(error); + return; + } + if ( !window.gapi || !gapi.load ) { + callback(API._('GAPI_LOAD_FAILURE')); + return; + } + auth(function(error) { + if ( error ) { + callback(error); + return; + } + loadAll(function(error, result) { + callback(error, result, SingletonInstance); + }); + }); + }); + }; + GoogleAPI.prototype.signOut = function(cb) { + cb = cb || function() {}; + if ( this.authenticated ) { + try { + gapi.auth.signOut(); + } catch ( e ) { + console.warn('GoogleAPI::signOut()', 'failed', e); + console.warn(e.stack); + } + this.authenticated = false; + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.remove('Google API'); + } + } + OSjs.Core.getMountManager().remove('GoogleDrive'); + cb(false, true); + }; + GoogleAPI.prototype.revoke = function(callback) { + if ( !this.accessToken ) { + return callback(false); + } + var url = 'https://accounts.google.com/o/oauth2/revoke?token=' + this.accessToken; + Utils.ajax({ + url: url, + jsonp: true, + onsuccess: function() { + callback(true); + }, + onerror: function() { + callback(false); + } + }); + }; + GoogleAPI.prototype.authenticate = function(scope, callback) { + callback = callback || function() {}; + var self = this; + function getUserId(cb) { + cb = cb || function() {}; + gapi.client.load('oauth2', 'v2', function() { + gapi.client.oauth2.userinfo.get().execute(function(resp) { + cb(resp.id); + }); + }); + } + function login(immediate, cb) { + cb = cb || function() {}; + gapi.auth.authorize({ + client_id: self.clientId, + scope: scope, + user_id: self.userId, + immediate: immediate + }, cb); + } + function createRingNotification() { + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.remove('Google API'); + ring.add('Google API', [{ + title: API._('GAPI_SIGN_OUT'), + onClick: function() { + self.signOut(); + } + }, { + title: API._('GAPI_REVOKE'), + onClick: function() { + self.revoke(function() { + self.signOut(); + }); + } + }]); + } + } + var handleAuthResult = function(authResult, immediate) { + if ( authResult.error ) { + if ( authResult.error_subtype === 'origin_mismatch' || (authResult.error_subtype === 'access_denied' && !immediate) ) { + var msg = API._('GAPI_AUTH_FAILURE_FMT', authResult.error, authResult.error_subtype); + callback(msg); + return; + } + } + if ( authResult && !authResult.error ) { + getUserId(function(id) { + self.userId = id; + if ( id ) { + createRingNotification(); + self.authenticated = true; + self.accessToken = authResult.access_token || null; + callback(false, true); + } else { + callback(false, false); + } + }); + } else { + login(false, function(res) { + handleAuthResult(res, false); + }); + } + }; + gapi.load('auth:client', function(result) { + if ( result && result.error ) { + var msg = API._('GAPI_AUTH_FAILURE_FMT', result.error, result.error_subtype); + callback(msg); + return; + } + login(true, function(res) { + handleAuthResult(res, true); + }); + }); + }; + OSjs.Helpers.GoogleAPI = OSjs.Helpers.GoogleAPI || {}; + OSjs.Helpers.GoogleAPI.getInstance = function() { + return SingletonInstance; + }; + OSjs.Helpers.GoogleAPI.createInstance = function(args, callback) { + var load = args.load || []; + var scope = args.scope || []; + var client = args.client === true; + function _run() { + SingletonInstance.load(load, scope, client, callback); + } + if ( SingletonInstance ) { + return _run(); + } + var clientId = null; + try { + clientId = API.getConfig('GoogleAPI.ClientId'); + } catch ( e ) { + console.warn('getGoogleAPI()', e, e.stack); + } + if ( !clientId ) { + callback(API._('GAPI_DISABLED')); + return; + } + SingletonInstance = new GoogleAPI(clientId); + _run(); + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API) { + 'use strict'; + var redirectURI = window.location.href.replace(/\/$/, '') + '/vendor/wlOauthReceiver.html'; + var SingletonInstance = null; + function WindowsLiveAPI(clientId) { + this.hasSession = false; + this.clientId = clientId; + this.loaded = false; + this.inited = false; + this.accessToken = null; + this.lastScope = null; + this.preloads = [{ + type: 'javascript', + src: '//js.live.net/v5.0/wl.js' + }]; + } + WindowsLiveAPI.prototype.destroy = function() { + }; + WindowsLiveAPI.prototype.init = function(callback) { + callback = callback || function() {}; + var self = this; + if ( this.loaded ) { + callback(false, true); + } else { + Utils.preload(this.preloads, function(total, failed) { + if ( !failed.length ) { + self.loaded = true; + } + callback(failed.join('\n')); + }); + } + }; + WindowsLiveAPI.prototype.load = function(scope, callback) { + var self = this; + var WL = window.WL || {}; + function _login() { + var lastScope = (self.lastScope || []).sort(); + var currScope = (scope || []).sort(); + if ( self.hasSession && (lastScope.toString() === currScope.toString()) ) { + callback(false, true); + return; + } + self.login(scope, function(error, response) { + if ( error ) { + callback(error); + return; + } + setTimeout(function() { + callback(false, true); + }, 10); + }); + } + this.init(function(error) { + if ( error ) { + callback(error); + return; + } + if ( !window.WL ) { + callback(API._('WLAPI_LOAD_FAILURE')); + return; + } + WL = window.WL || {}; + if ( self.inited ) { + _login(); + } else { + self.inited = true; + WL.Event.subscribe('auth.login', function() { + self.onLogin.apply(self, arguments); + }); + WL.Event.subscribe('auth.logout', function() { + self.onLogout.apply(self, arguments); + }); + WL.Event.subscribe('wl.log', function() { + self.onLog.apply(self, arguments); + }); + WL.Event.subscribe('auth.sessionChange', function() { + self.onSessionChange.apply(self, arguments); + }); + WL.init({ + client_id: self.clientId, + display: 'popup', + redirect_uri: redirectURI + }).then(function(result) { + if ( result.session ) { + self.accessToken = result.session.access_token || null; + } + if ( result.status === 'connected' ) { + callback(false, true); + } else if ( result.status === 'success' ) { + _login(); + } else { + callback(API._('WLAPI_INIT_FAILED_FMT', result.status.toString())); + } + }, function(result) { + console.error('WindowsLiveAPI::load()', 'init() error', result); + callback(result.error_description); + }); + } + }); + }; + WindowsLiveAPI.prototype._removeRing = function() { + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.remove('Windows Live API'); + } + }; + WindowsLiveAPI.prototype.logout = function(callback) { + callback = callback || function() {}; + var self = this; + var WL = window.WL || {}; + if ( this.hasSession ) { + callback(false, false); + } + WL.Event.unsubscribe('auth.logout'); + WL.Event.subscribe('auth.logout', function() { + self._removeRing(); + WL.Event.unsubscribe('auth.logout'); + callback(false, true); + }); + WL.logout(); + OSjs.Core.getMountManager().remove('OneDrive'); + }; + WindowsLiveAPI.prototype.login = function(scope, callback) { + var WL = window.WL || {}; + if ( this.hasSession ) { + callback(false, true); + return; + } + WL.login({ + scope: scope, + redirect_uri: redirectURI + }).then(function(result) { + if ( result.status === 'connected' ) { + callback(false, true); + } else { + callback(API._('WLAPI_LOGIN_FAILED')); + } + }, function(result) { + callback(API._('WLAPI_LOGIN_FAILED_FMT', result.error_description)); + }); + }; + WindowsLiveAPI.prototype.onSessionChange = function() { + console.warn('WindowsLiveAPI::onSessionChange()', arguments); + var WL = window.WL || {}; + var session = WL.getSession(); + if ( session ) { + this.hasSession = true; + } else { + this.hasSession = false; + } + }; + WindowsLiveAPI.prototype.onLogin = function() { + console.warn('WindowsLiveAPI::onLogin()', arguments); + this.hasSession = true; + var self = this; + var ring = API.getServiceNotificationIcon(); + if ( ring ) { + ring.add('Windows Live API', [{ + title: API._('WLAPI_SIGN_OUT'), + onClick: function() { + self.logout(); + } + }]); + } + }; + WindowsLiveAPI.prototype.onLogout = function() { + console.warn('WindowsLiveAPI::onLogout()', arguments); + this.hasSession = false; + this._removeRing(); + }; + WindowsLiveAPI.prototype.onLog = function() { + }; + OSjs.Helpers.WindowsLiveAPI = OSjs.Helpers.WindowsLiveAPI || {}; + OSjs.Helpers.WindowsLiveAPI.getInstance = function() { + return SingletonInstance; + }; + OSjs.Helpers.WindowsLiveAPI.createInstance = function(args, callback) { + args = args || {}; + function _run() { + var scope = args.scope; + SingletonInstance.load(scope, function(error) { + callback(error ? error : false, SingletonInstance); + }); + } + if ( SingletonInstance ) { + _run(); + return; + } + var clientId = null; + try { + clientId = API.getConfig('WindowsLiveAPI.ClientId'); + } catch ( e ) { + console.warn('getWindowsLiveAPI()', e, e.stack); + } + if ( !clientId ) { + callback(API._('WLAPI_DISABLED')); + return; + } + SingletonInstance = new WindowsLiveAPI(clientId); + _run(); + }; +})(OSjs.Utils, OSjs.API); + +(function(Utils, API, VFS) { + 'use strict'; + function getEntries(file, callback) { + zip.createReader(new zip.BlobReader(file), function(zipReader) { + zipReader.getEntries(function(entries) { + callback(false, entries); + }); + }, function(message) { + callback(message); + }); + } + function getEntryFile(entry, onend, onprogress) { + var writer = new zip.BlobWriter(); + entry.getData(writer, function(blob) { + onend(blob); + writer = null; + }, onprogress); + } + function openFile(file, done) { + VFS.download(file, function(error, data) { + if ( error ) { + console.warning('An error while opening zip', error); + done(error); + return; + } + var blob = new Blob([data], {type: file.mime}); + getEntries(blob, function(error, result) { + done(error, result || []); + }); + }); + } + function importFiles(writer, entries, pr, done, ignore) { + ignore = ignore || []; + function _next(index) { + if ( !entries.length || index >= entries.length ) { + done(false); + return; + } + var current = entries[index]; + if ( ignore.indexOf(current.filename) >= 0 ) { + console.warn('Ignoring', index, current); + pr('ignored', index, current); + _next(index + 1); + return; + } + getEntryFile(current, function(blob) { + writer.add(current.filename, new zip.BlobReader(blob), function() { + pr('added', index, current); + _next(index + 1); + }, function(current, total) { + pr('reading', index, total, current); + }, { + directory: current.directory, + lastModDate: current.lastModDate, + version: current.version + }); + }); + } + _next(0); + } + function createZip(done) { + var writer = new zip.BlobWriter(); + zip.createWriter(writer, function(writer) { + done(false, writer); + }, function(error) { + done(error); + }); + } + function saveZip(writer, file, ccb) { + writer.close(function(blob) { + VFS.upload({ + destination: Utils.dirname(file.path), + files: [{filename: Utils.filename(file.path), data: blob}] + }, function(type, ev) { + var error = (type === 'error') ? ev : false; + ccb(error, !!error); + }, {overwrite: true}); + }); + } + var SingletonInstance = null; + function ZipArchiver(opts) { + this.opts = opts; + this.inited = false; + this.preloads = [{ + type: 'javascript', + src: '/vendor/zip.js/WebContent/zip.js' + }]; + } + ZipArchiver.prototype.init = function(cb) { + cb = cb || function() {}; + if ( this.inited ) { + cb(); + return; + } + var self = this; + Utils.preload(this.preloads, function(total, failed) { + if ( failed.length ) { + cb(API._('ZIP_PRELOAD_FAIL'), failed); + return; + } + if ( window.zip ) { + zip.workerScriptsPath = '/vendor/zip.js/WebContent/'; + self.inited = true; + } + cb(); + }); + }; + ZipArchiver.prototype.list = function(file, cb) { + VFS.download(file, function(error, result) { + if ( error ) { + alert(error); + cb(error, null); + return; + } + var blob = new Blob([result], {type: 'application/zip'}); + getEntries(blob, function(error, entries) { + cb(error, entries); + }); + }); + }; + ZipArchiver.prototype.create = function(file, cb, appRef) { + var writer = new zip.BlobWriter(); + zip.createWriter(writer, function(writer) { + writer.close(function(blob) { + VFS.upload({ + destination: Utils.dirname(file.path), + files: [ + {filename: Utils.filename(file.path), data: blob} + ] + }, function(type, ev) { + if ( type === 'error' ) { + console.warn('Error creating blank zip', ev); + } + writer = null; + if ( type !== 'error' ) { + API.message('vfs:upload', file, {source: appRef ? appRef.__pid : null}); + } + cb(type === 'error' ? ev : false, type !== 'error'); + }, {overwrite: true}); + }); + }); + }; + ZipArchiver.prototype.add = function(file, add, args) { + var cb = args.oncomplete || function() {}; + var pr = args.onprogress || function() {}; + var currentDir = args.path || '/'; + function finished(err, res) { + cb(err, res); + } + function checkIfExists(entries, done) { + var found = false; + var chk = Utils.filename(add.path); + entries.forEach(function(i) { + if ( i.filename === chk ) { + if ( !i.directory || (i.directory && add.type === 'dir') ) { + found = true; + } + } + return !found; + }); + done(found ? 'File is already in archive' : false); + } + function addFile(writer, done) { + var filename = add instanceof window.File ? add.name : add.filename; + var type = add instanceof window.File ? 'file' : (add.type || 'file'); + filename = ((currentDir || '/').replace(/\/$/, '') + '/' + filename).replace(/^\//, ''); + function _addBlob(blob) { + writer.add(filename, new zip.BlobReader(blob), function() { + saveZip(writer, file, done); + }, function(current, total) { + pr('compressing', current); + }); + } + function _addFolder() { + writer.add(filename, null, function() { + saveZip(writer, file, done); + }, null, {directory: true}); + } + if ( type === 'dir' ) { + _addFolder(); + } else { + if ( add instanceof window.File ) { + _addBlob(add); + } else { + VFS.download(add, function(error, data) { + if ( error ) { + done(error); + return; + } + var blob = new Blob([data], {type: add.mime}); + _addBlob(blob); + }); + } + } + } + openFile(file, function(err, entries) { + if ( err ) { + finished(err); return; + } + checkIfExists(entries, function(err) { + if ( err ) { + finished(err); return; + } + createZip(function(err, writer) { + if ( err ) { + finished(err); return; + } + importFiles(writer, entries, pr, function(err) { + if ( err ) { + finished(err); return; + } + addFile(writer, function(err) { + finished(err, !!err); + }); + }); + }); + }); + }); + }; + ZipArchiver.prototype.remove = function(file, path, cb) { + function finished(err, res, writer) { + if ( err || !writer ) { + cb(err || API._('ZIP_NO_RESOURCE')); + return; + } + saveZip(writer, file, function(eer, rees) { + cb(eer, rees); + }); + } + if ( !path ) { + finished(API._('ZIP_NO_PATH')); + return; + } + openFile(file, function(err, entries) { + if ( err ) { + finished(err); return; + } + createZip(function(err, writer) { + if ( err ) { + finished(err); return; + } + importFiles(writer, entries, function() { + }, function(err) { + finished(err, !!err, writer); + }, [path]); + }); + }); + }; + ZipArchiver.prototype.extract = function(file, destination, args) { + args = args || {}; + args.onprogress = args.onprogress || function() {}; + args.oncomplete = args.oncomplete || function() {}; + function finished(error, warnings, result) { + if ( !error ) { + API.message('vfs:update', destination, {source: args.app ? args.app.__pid : null}); + } + args.oncomplete(error, warnings, result); + } + var extracted = []; + var warnings = []; + var total = 0; + function _extractList(list, destination) { + total = list.length; + var index = 0; + function _extract(item, cb) { + args.onprogress(item.filename, index, total); + var dest = destination; + if ( item.filename.match(/\//) ) { + if ( item.directory ) { + dest += '/' + item.filename; + } else { + dest += '/' + Utils.dirname(item.filename); + } + } + if ( item.directory ) { + VFS.mkdir(new VFS.File(dest), function(error, result) { + if ( error ) { + warnings.push(Utils.format('Could not create directory "{0}": {1}', item.filename, error)); + } else { + extracted.push(item.filename); + } + cb(); + }); + return; + } + getEntryFile(item, function(blob) { + VFS.upload({ + destination: dest, + files: [{filename: Utils.filename(item.filename), data: blob}] + }, function(type, ev) { // error, result, ev + console.warn('ZipArchiver::extract()', '_extract()', 'upload', type, ev); + if ( type === 'error' ) { + warnings.push(Utils.format('Could not extract "{0}": {1}', item.filename, ev)); + } else { + extracted.push(item.filename); + } + cb(); + }); + }, function() { + }); + } + function _finished() { + finished(false, warnings, true); + } + function _next() { + if ( !list.length || index >= list.length ) { + return _finished(); + } + _extract(list[index], function() { + index++; + _next(); + }); + } + _next(); + } + function _checkDirectory(destination, cb) { + var dst = new VFS.File({path: destination, type: 'dir'}); + VFS.mkdir(dst, function(error, result) { + if ( error ) { + console.warn('ZipArchiver::extract()', '_checkDirectory()', 'VFS::mkdir()', error); + } + VFS.exists(dst, function(err, result) { + if ( err ) { + console.warn('ZipArchiver::extract()', '_checkDirectory()', 'VFS::exists()', err); + } + if ( result ) { + cb(false); + } else { + cb('Destination directory was not created or does not exist'); + } + }); + }); + } + VFS.download(file, function(error, result) { + if ( error ) { + finished(error, warnings, false); + return; + } + var blob = new Blob([result], {type: 'application/zip'}); + _checkDirectory(destination, function(err) { + if ( err ) { + finished(error, warnings, false); + return; + } + getEntries(blob, function(error, entries) { + if ( error ) { + finished(error, warnings, false); + return; + } + _extractList(entries, destination); + }); + }); + }); + }; + OSjs.Helpers.ZipArchiver = OSjs.Helpers.ZipArchiver || {}; + OSjs.Helpers.ZipArchiver.getInstance = function() { + return SingletonInstance; + }; + OSjs.Helpers.ZipArchiver.createInstance = function(args, callback) { + args = args || {}; + if ( !SingletonInstance ) { + SingletonInstance = new ZipArchiver(args); + } + SingletonInstance.init(function(error) { + if ( !error ) { + if ( !window.zip ) { + error = API._('ZIP_VENDOR_FAIL'); + } + } + callback(error, error ? false : SingletonInstance); + }); + }; +})(OSjs.Utils, OSjs.API, OSjs.VFS); + +(function(Utils) { + 'use strict'; + function SettingsFragment(obj, poolName) { + this._pool = poolName; + if ( obj.constructor !== {}.constructor ) { + throw new Error('SettingsFragment will not work unless you give it a object to manage.'); + } + this._settings = obj; + } + SettingsFragment.prototype.get = function(key, defaultValue) { + var ret = key ? this._settings[key] : this._settings; + return (typeof ret === 'undefined') ? defaultValue : ret; + }; + SettingsFragment.prototype.set = function(key, value, save, triggerWatch) { + if ( key === null ) { + Utils.mergeObject(this._settings, value); + } else { + if ( (['number', 'string']).indexOf(typeof key) >= 0 ) { + this._settings[key] = value; + } else { + console.warn('SettingsFragment::set()', 'expects key to be a valid iter, not', key); + } + } + if (save) { + OSjs.Core.getSettingsManager().save(this._pool, save); + } + if ( typeof triggerWatch === 'undefined' || triggerWatch === true ) { + OSjs.Core.getSettingsManager().changed(this._pool); + } + return this; + }; + SettingsFragment.prototype.save = function(callback) { + return OSjs.Core.getSettingsManager().save(this._pool, callback); + }; + SettingsFragment.prototype.getChained = function() { + var nestedSetting = this._settings; + arguments.every(function(key) { + if (nestedSetting[key]) { + nestedSetting = nestedSetting[key]; + return true; + } + return false; + }); + return nestedSetting; + }; + SettingsFragment.prototype.mergeDefaults = function(defaults) { + Utils.mergeObject(this._settings, defaults, {overwrite: false}); + return this; + }; + SettingsFragment.prototype.instance = function(key) { + if (typeof this._settings[key] === 'undefined') { + throw new Error('The object doesn\'t contain that key. SettingsFragment will not work.'); + } + return new OSjs.Helpers.SettingsFragment(this._settings[key], this._pool); + }; + OSjs.Helpers.SettingsFragment = SettingsFragment; +})(OSjs.Utils); diff --git a/build/htdocs/dist/packages.js b/build/htdocs/dist/packages.js new file mode 100644 index 0000000..b095dc7 --- /dev/null +++ b/build/htdocs/dist/packages.js @@ -0,0 +1,650 @@ +(function() { + window.OSjs = window.OSjs || {} + OSjs.Core = OSjs.Core || {} + OSjs.Core.getMetadata = function() { + return Object.freeze({ + "default/About": { + "className": "ApplicationAbout", + "name": "About OS.js", + "description": "About OS.js", + "names": { + "bg_BG": " За OS.js", + "de_DE": "Über OS.js", + "fr_FR": "À propos d'OS.js", + "it_IT": "Informazioni su OS.js", + "ko_KR": "OS.js에 대하여", + "nl_NL": "Over OS.js", + "no_NO": "Om OS.js", + "pl_PL": "o OS.js", + "ru_RU": "Об OS.js", + "sk_SK": "o OS.js", + "tr_TR": "hakkında OS.js", + "vi_VN": "Thông tin về OS.js" + }, + "descriptions": { + "bg_BG": "За OS.js", + "de_DE": "Über OS.js", + "fr_FR": "À propos d'OS.js", + "it_IT": "Informazioni su OS.js", + "ko_KR": "OS.js에 대하여", + "nl_NL": "Over OS.js", + "no_NO": "Om OS.js", + "pl_PL": "o OS.js", + "ru_RU": "Об OS.js", + "sk_SK": "o OS.js", + "tr_TR": "hakkında OS.js", + "vi_VN": "Thông tin về OS.js" + }, + "singular": true, + "category": "system", + "icon": "apps/help-browser.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/About", + "build": {}, + "repo": "default" + }, + "default/Calculator": { + "className": "ApplicationCalculator", + "name": "Calculator", + "names": { + "bg_Bg": "Клакулатор", + "fr_FR": "Calculatrice", + "it_IT": "Calcolatrice", + "ko_KR": "계산기", + "nl_NL": "Rekenmachine", + "no_NO": "Kalkulator", + "pl_PL": "Kalkulator", + "ru_RU": "Калькулятор", + "sk_SK": "Kalkulačka", + "tr_TR": "Hesap Makinesi", + "vi_VN": "Máy tính" + }, + "icon": "apps/calc.png", + "category": "office", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Calculator", + "build": {}, + "repo": "default" + }, + "default/CoreWM": { + "className": "CoreWM", + "name": "OS.js Window Manager", + "names": { + "bg_BG": "Мениджър на прозорци на OS.js", + "de_DE": "OS.js Fenster-Manager", + "es_ES": "OS.js Window Manager", + "fr_FR": "Gestionnaire de fenêtre OS.js", + "it_IT": "OS.js Gestore Finestre", + "ko_KR": "OS.js 윈도우 관리자", + "nl_NL": "OS.js venster beheer", + "no_NO": "OS.js Vinduhåndterer", + "pl_PL": "Menedżer Okien OS.js", + "ru_RU": "OS.js Оконный менеджер", + "sk_SK": "Správca Okien OS.js", + "tr_TR": "OS.js Pencere Yöneticisi", + "vi_VN": "Quản lí cửa sổ OS.js" + }, + "singular": true, + "type": "windowmanager", + "icon": "apps/gnome-window-manager.png", + "splash": false, + "preload": [ + { + "src": "scheme.html", + "type": "scheme" + }, + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + } + ], + "panelItems": { + "AppMenu": { + "Name": "AppMenu", + "Description": "Application Menu", + "Icon": "actions/stock_about.png", + "HasOptions": false + }, + "Buttons": { + "Name": "Buttons", + "Description": "Button Bar", + "Icon": "actions/stock_about.png" + }, + "Clock": { + "Name": "Clock", + "Description": "View the time", + "Icon": "status/appointment-soon.png", + "HasOptions": true + }, + "NotificationArea": { + "Name": "NotificationArea", + "Description": "View notifications", + "Icon": "apps/gnome-panel-notification-area.png" + }, + "Search": { + "Name": "Search", + "Description": "Perform searches", + "Icon": "actions/find.png", + "HasOptions": true + }, + "Weather": { + "Name": "Weather", + "Description": "Weather notification", + "Icon": "status/weather-few-clouds.png" + }, + "WindowList": { + "Name": "Window List", + "Description": "Toggle between open windows", + "Icon": "apps/xfwm4.png" + } + }, + "path": "default/CoreWM", + "build": {}, + "repo": "default" + }, + "default/Draw": { + "className": "ApplicationDraw", + "name": "Draw", + "description": "Simple drawing application", + "names": { + "bg_BG": "Рисуване", + "de_DE": "Zeichnen", + "fr_FR": "Dessin", + "it_IT": "Disegna", + "ko_KR": "그림판", + "nl_NL": "Tekenen", + "no_NO": "Tegne", + "pl_PL": "Rysowanie", + "ru_RU": "Графический редактор", + "sk_SK": "Kreslenie", + "tr_TR": "Çiz", + "vi_VN": "Vẽ" + }, + "descriptions": { + "bg_BG": "Приложение за рисуване", + "de_DE": "Einfaches Zeichen-Programm", + "fr_FR": "Programme de dessin simple", + "it_IT": "Semplice applicazione per creazione/modifica immagini", + "ko_KR": "간단한 그리기 응용 프로그램", + "nl_NL": "Eenvoudig tekenprogramma", + "no_NO": "Simpelt tegne-program", + "pl_PL": "Prosta aplikacja do rysowania", + "ru_RU": "Простой графический редактор", + "sk_SK": "Jednoduchá aplikácia na kreslenie", + "vi_VN": "Phần mềm vẽ đơn giản" + }, + "mime": [ + "^image" + ], + "category": "graphics", + "icon": "categories/gnome-graphics.png", + "compability": [ + "canvas" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Draw", + "build": {}, + "repo": "default" + }, + "default/FileManager": { + "className": "ApplicationFileManager", + "name": "File Manager", + "description": "The default file manager", + "names": { + "bg_BG": "Файлов мениджър", + "de_DE": "Dateimanager", + "fr_FR": "Explorateur de fichier", + "it_IT": "Gestore File", + "nl_NL": "bestands beheer", + "no_NO": "Fil-håndtering", + "pl_PL": "Menedżer Plików", + "ko_KR": "파일 탐색기", + "sk_SK": "Správca súborov", + "ru_RU": "Файловый менеджер", + "tr_TR": "Dosya Yöneticisi", + "vi_VN": "Quản lí file" + }, + "descriptions": { + "bg_BG": "Стандартния файлов мениджър", + "de_DE": "Standardmäßiger Dateimanager", + "fr_FR": "Gestionnaire de fichier par défaut", + "it_IT": "Il gestore file predefinito", + "nl_NL": "Standaard bestands beheerder", + "no_NO": "Standard Fil-håndtering program", + "pl_PL": "Domyślny Menedżer Plików", + "ko_KR": "기본 파일 관리자", + "sk_SK": "Štandardný správca súborov", + "ru_RU": "Стандартный файловый менеджер", + "tr_TR": "Varsayılan dosya yöneticisi", + "vi_VN": "Trình quản lí file mặc định" + }, + "category": "utilities", + "icon": "apps/file-manager.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/FileManager", + "build": {}, + "repo": "default" + }, + "default/HTMLViewer": { + "className": "ApplicationHTMLViewer", + "name": "HTML Viewer", + "mime": [ + "text\\/html" + ], + "icon": "mimetypes/html.png", + "category": "utilities", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/HTMLViewer", + "build": {}, + "repo": "default" + }, + "default/MusicPlayer": { + "className": "ApplicationMusicPlayer", + "name": "Music Player", + "names": { + "bg_BG": "Музикален плеър", + "de_DE": "Musikspieler", + "es_ES": "Music Player", + "fr_FR": "Lecteur de musique", + "it_IT": "Lettore Musicale", + "ko_KR": "뮤직 플레이어", + "nl_NL": "Audio speler", + "no_NO": "Musikkspiller", + "pl_PL": "Odtwarzacz muzyki", + "ru_RU": "Аудиоплеер", + "sk_SK": "Prehrávač hudby", + "tr_TR": "Muzik Çalar", + "vi_VN": "Nghe nhạc" + }, + "mime": [ + "^audio", + "osjs\\/playlist" + ], + "category": "multimedia", + "icon": "status/audio-volume-high.png", + "singular": true, + "compability": [ + "audio" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/MusicPlayer", + "build": {}, + "repo": "default" + }, + "default/Preview": { + "className": "ApplicationPreview", + "name": "Preview", + "description": "Preview image files", + "names": { + "bg_BG": "Преглед на изображения", + "de_DE": "Vorschau", + "fr_FR": "Visionneuse", + "it_IT": "Anteprima Immagini", + "ko_KR": "미리보기", + "nl_NL": "Foto viewer", + "no_NO": "Forhåndsviser", + "pl_PL": "Podgląd", + "ru_RU": "Просмотрщик", + "sk_SK": "Prehliadač obrázkov", + "tr_TR": "Önizle", + "vi_VN": "Trình xem ảnh" + }, + "descriptions": { + "bg_BG": "Преглед на изображения", + "de_DE": "Bildervorschau", + "fr_FR": "Visionneuse de photos", + "it_IT": "Anteprima Immagini", + "ko_KR": "이미지 파일을 미리 봅니다", + "nl_NL": "Foto viewer", + "no_NO": "Forhåndsvisning av bilde-filer", + "pl_PL": "Podgląd zdjęć", + "ru_RU": "Просмотрщик изображений", + "sk_SK": "Prehliadač obrázkov", + "tr_TR": "resim dosyalarını önizle", + "vi_VN": "Trình xem ảnh" + }, + "mime": [ + "^image", + "^video" + ], + "category": "multimedia", + "icon": "mimetypes/image.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Preview", + "build": {}, + "repo": "default" + }, + "default/ProcessViewer": { + "className": "ApplicationProcessViewer", + "name": "Process Viewer", + "description": "View running processes", + "names": { + "bg_BG": "Процеси", + "de_DE": "Prozess-Manager", + "fr_FR": "Gestionnaire de processus", + "it_IT": "Gestore Attività", + "ko_KR": "프로세스 관리자", + "nl_NL": "Proces manager", + "no_NO": "Prosess oversikt", + "pl_PL": "Procesy", + "ru_RU": "Менеджер процессов", + "sk_SK": "Správca procesov", + "tr_TR": "İşlemleri Görüntüle", + "vi_VN": "Xem tiến trình" + }, + "descriptions": { + "bg_BG": "Преглед на процеси", + "de_DE": "Laufende Prozesse verwalten", + "fr_FR": "Visualiser les processus en cours", + "it_IT": "Mostri processi attivi", + "ko_KR": "실행 중인 프로세스를 관리합니다", + "nl_NL": "Bekijk de lopende processen", + "no_NO": "Se oversikt over kjørende prosesser", + "pl_PL": "Zobacz działające procesy", + "ru_RU": "Менеджер запущенных процессов", + "sk_SK": "Spravovanie bežiacich procesov", + "tr_TR": "çalışan işlemleri görüntüle", + "vi_VN": "Xem các tiến trình đang chạy" + }, + "singular": true, + "category": "system", + "icon": "apps/gnome-monitor.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/ProcessViewer", + "build": {}, + "repo": "default" + }, + "default/Settings": { + "className": "ApplicationSettings", + "preloadParallel": true, + "name": "Settings", + "mime": null, + "icon": "categories/applications-system.png", + "category": "system", + "singular": true, + "names": { + "bg_BG": "Настройки", + "de_DE": "Einstellungen", + "es_ES": "Settings", + "fr_FR": "Paramètres", + "it_IT": "Settaggi", + "ko_KR": "환경설정", + "nl_NL": "Instellingen", + "no_NO": "Instillinger", + "pl_PL": "Ustawienia", + "ru_RU": "Настройки", + "sk_SK": "Nastavenia", + "tr_TR": "Ayarlar", + "vi_VN": "Cài đặt" + }, + "descriptions": { + "bg_BG": "Настройки", + "de_DE": "Einstellungen", + "es_ES": "Settings", + "fr_FR": "Paramètres", + "it_IT": "Settaggi", + "ko_KR": "환경설정", + "nl_NL": "Instellingen", + "no_NO": "Instillinger", + "pl_PL": "Ustawienia", + "ru_RU": "Настройки", + "sk_SK": "Nastavenia", + "tr_TR": "Program Ayarlarını düzenle", + "vi_VN": "Cài đặt" + }, + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Settings", + "build": {}, + "repo": "default" + }, + "default/Textpad": { + "className": "ApplicationTextpad", + "name": "Textpad", + "description": "Simple text editor", + "names": { + "bg_BG": "Текстов редактор", + "de_DE": "Texteditor", + "fr_FR": "Éditeur de texte", + "it_IT": "Editor Testi", + "ko_KR": "텍스트패드", + "nl_NL": "Notities", + "no_NO": "Tekstblokk", + "pl_PL": "Notatnik", + "ru_RU": "Редактор текста", + "sk_SK": "Poznámkový blok", + "tr_TR": "Basit Bir Metin Düzenleyicisi", + "vi_VN": "Trình sửa văn bản" + }, + "descriptions": { + "bg_BG": "Стандартен текстов редактор", + "de_DE": "Einfacher Texteditor", + "fr_FR": "Éditeur de texte simple", + "it_IT": "Semplice editor di testi", + "ko_KR": "간단한 텍스트 편집기", + "nl_NL": "Eenvoudige Tekstverwerker", + "no_NO": "Simpel tekst redigering", + "pl_PL": "Prosty edytor tekstu", + "ru_RU": "Простой текстовый редактор", + "sk_SK": "Jednoduchý textový editor", + "tr_TR": "Basit Bir Metin Düzenleyicisi", + "vi_VN": "Trình sửa văn bản đơn giản" + }, + "mime": [ + "^text", + "inode\\/x\\-empty", + "application\\/x\\-empty", + "application\\/x\\-lua", + "application\\/x\\-python", + "application\\/javascript", + "application\\/json" + ], + "category": "utilities", + "icon": "apps/accessories-text-editor.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Textpad", + "build": {}, + "repo": "default" + }, + "default/Writer": { + "className": "ApplicationWriter", + "name": "Writer", + "description": "Write rich text documents", + "names": { + "bg_BG": "Текст", + "de_DE": "Writer", + "fr_FR": "Traitement de texte", + "it_IT": "Editor Testi", + "ko_KR": "글쓰기", + "nl_NL": "Tekstverwerker", + "no_NO": "Writer", + "pl_PL": "Writer", + "ru_RU": "Текстовый процессор", + "sk_SK": "Writer", + "tr_TR": "Writer", + "vi_VN": "Viết" + }, + "descriptions": { + "bg_BG": "Писанене на обогатен текст", + "de_DE": "Verfassen Sie Rich-Text-Dokumente", + "fr_FR": "Traitement de texte riche", + "it_IT": "Scrivi documenti di testo formattati", + "ko_KR": "리치 텍스트 문서 작성", + "nl_NL": "Tekst verwerker met opmaak", + "no_NO": "Skriv riktekst dokumenter", + "pl_PL": "Twórz dokumenty rich text", + "ru_RU": "Текстовый процессор", + "sk_SK": "Editor na tvorbu Rich-Text dokumentov", + "tr_TR": "Gelişmiş dökümanlar oluşturun", + "vi_VN": "Xem, chỉnh sửa văn bản" + }, + "mime": [ + "^text", + "osjs\\/document" + ], + "category": "office", + "icon": "apps/libreoffice34-writer.png", + "compability": [ + "richtext" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Writer", + "build": {}, + "repo": "default" + } +}); + }; +})(); diff --git a/build/htdocs/dist/packages/.gitignore b/build/htdocs/dist/packages/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/build/htdocs/dist/packages/default/About/about.png b/build/htdocs/dist/packages/default/About/about.png new file mode 100644 index 0000000..8821eae Binary files /dev/null and b/build/htdocs/dist/packages/default/About/about.png differ diff --git a/build/htdocs/dist/packages/default/About/combined.css b/build/htdocs/dist/packages/default/About/combined.css new file mode 100644 index 0000000..f8a478a --- /dev/null +++ b/build/htdocs/dist/packages/default/About/combined.css @@ -0,0 +1,44 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +.ApplicationAboutWindow application-window-content { + background-color : #fff; + color : #000; + text-align : center; +} +.ApplicationAboutWindow application-window-content > div > div { + padding : 10px; +} +.ApplicationAboutWindow h1 { + margin : 0; + padding : 10px; + font-size : 40px; +} + diff --git a/build/htdocs/dist/packages/default/About/combined.js b/build/htdocs/dist/packages/default/About/combined.js new file mode 100644 index 0000000..2adee1c --- /dev/null +++ b/build/htdocs/dist/packages/default/About/combined.js @@ -0,0 +1,85 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationAboutWindow(app, metadata, scheme) { + Window.apply(this, ['ApplicationAboutWindow', { + icon: metadata.icon, + title: metadata.name, + gravity: 'center', + allow_resize: false, + allow_maximize: false, + width: 320, + height: 320, + min_width: 320, + min_height: 320 + }, app, scheme]); + } + + ApplicationAboutWindow.prototype = Object.create(Window.prototype); + ApplicationAboutWindow.constructor = Window.prototype; + + ApplicationAboutWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + scheme.render(this, 'AboutWindow', root); + root.getElementsByTagName('img')[0].src = API.getApplicationResource(app, 'about.png'); + return root; + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationAbout = function(args, metadata) { + Application.apply(this, ['ApplicationAbout', args, metadata]); + }; + + ApplicationAbout.prototype = Object.create(Application.prototype); + ApplicationAbout.constructor = Application; + + ApplicationAbout.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.apply(this, arguments); + this._addWindow(new ApplicationAboutWindow(this, metadata, scheme)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationAbout = OSjs.Applications.ApplicationAbout || {}; + OSjs.Applications.ApplicationAbout.Class = Object.seal(ApplicationAbout); + +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/About/metadata.json b/build/htdocs/dist/packages/default/About/metadata.json new file mode 100644 index 0000000..5eefc34 --- /dev/null +++ b/build/htdocs/dist/packages/default/About/metadata.json @@ -0,0 +1,54 @@ +{ + "className": "ApplicationAbout", + "name": "About OS.js", + "description": "About OS.js", + "names": { + "bg_BG": " За OS.js", + "de_DE": "Über OS.js", + "fr_FR": "À propos d'OS.js", + "it_IT": "Informazioni su OS.js", + "ko_KR": "OS.js에 대하여", + "nl_NL": "Over OS.js", + "no_NO": "Om OS.js", + "pl_PL": "o OS.js", + "ru_RU": "Об OS.js", + "sk_SK": "o OS.js", + "tr_TR": "hakkında OS.js", + "vi_VN": "Thông tin về OS.js" + }, + "descriptions": { + "bg_BG": "За OS.js", + "de_DE": "Über OS.js", + "fr_FR": "À propos d'OS.js", + "it_IT": "Informazioni su OS.js", + "ko_KR": "OS.js에 대하여", + "nl_NL": "Over OS.js", + "no_NO": "Om OS.js", + "pl_PL": "o OS.js", + "ru_RU": "Об OS.js", + "sk_SK": "o OS.js", + "tr_TR": "hakkında OS.js", + "vi_VN": "Thông tin về OS.js" + }, + "singular": true, + "category": "system", + "icon": "apps/help-browser.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/About", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/About/scheme.html b/build/htdocs/dist/packages/default/About/scheme.html new file mode 100644 index 0000000..c598719 --- /dev/null +++ b/build/htdocs/dist/packages/default/About/scheme.html @@ -0,0 +1,20 @@ + + +
+

OS.js

+ +
+ Created by
+ Anders Evenrud +
+ +
+ +
+ + +
+ +
diff --git a/build/htdocs/dist/packages/default/Broadway/api.php b/build/htdocs/dist/packages/default/Broadway/api.php new file mode 100644 index 0000000..5ee5a75 --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/api.php @@ -0,0 +1,11 @@ + diff --git a/build/htdocs/dist/packages/default/Broadway/broadway.js b/build/htdocs/dist/packages/default/Broadway/broadway.js new file mode 100644 index 0000000..5d7c473 --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/broadway.js @@ -0,0 +1,1171 @@ +/** + * This a rewrite of GTK broadway.js + * + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function() { + + var connected = false; + var lastTimeStamp = 0; + var lastState; + var inputSocket = null; + var globalOpts = {}; + var connection; + var outstandingCommands = []; + var keyDownList = []; + var lastSerial = 0; + var surfaces = {}; + + ///////////////////////////////////////////////////////////////////////////// + // CONSTANTS + ///////////////////////////////////////////////////////////////////////////// + + var ON_KEYDOWN = 1 << 0; /* Report on keydown, otherwise wait until keypress */ + var GDK_CROSSING_NORMAL = 0; + var GDK_CROSSING_GRAB = 1; + var GDK_CROSSING_UNGRAB = 2; + + // GdkModifierType + var GDK_SHIFT_MASK = 1 << 0; + var GDK_LOCK_MASK = 1 << 1; + var GDK_CONTROL_MASK = 1 << 2; + var GDK_MOD1_MASK = 1 << 3; + var GDK_MOD2_MASK = 1 << 4; + var GDK_MOD3_MASK = 1 << 5; + var GDK_MOD4_MASK = 1 << 6; + var GDK_MOD5_MASK = 1 << 7; + var GDK_BUTTON1_MASK = 1 << 8; + var GDK_BUTTON2_MASK = 1 << 9; + var GDK_BUTTON3_MASK = 1 << 10; + var GDK_BUTTON4_MASK = 1 << 11; + var GDK_BUTTON5_MASK = 1 << 12; + var GDK_SUPER_MASK = 1 << 26; + var GDK_HYPER_MASK = 1 << 27; + var GDK_META_MASK = 1 << 28; + var GDK_RELEASE_MASK = 1 << 30; + + var specialKeyTable = { + 8: [0xFF08, ON_KEYDOWN], // BACKSPACE + 13: [0xFF0D, ON_KEYDOWN], // ENTER + + // This generates a keyDown and keyPress in Opera + 9: [0xFF09, ON_KEYDOWN], // TAB + + 27: 0xFF1B, // ESCAPE + 46: 0xFFFF, // DELETE + 36: 0xFF50, // HOME + 35: 0xFF57, // END + 33: 0xFF55, // PAGE_UP + 34: 0xFF56, // PAGE_DOWN + 45: 0xFF63, // INSERT + 37: 0xFF51, // LEFT + 38: 0xFF52, // UP + 39: 0xFF53, // RIGHT + 40: 0xFF54, // DOWN + 16: 0xFFE1, // SHIFT + 17: 0xFFE3, // CONTROL + 18: 0xFFE9, // Left ALT (Mac Command) + 112: 0xFFBE, // F1 + 113: 0xFFBF, // F2 + 114: 0xFFC0, // F3 + 115: 0xFFC1, // F4 + 116: 0xFFC2, // F5 + 117: 0xFFC3, // F6 + 118: 0xFFC4, // F7 + 119: 0xFFC5, // F8 + 120: 0xFFC6, // F9 + 121: 0xFFC7, // F10 + 122: 0xFFC8, // F11 + 123: 0xFFC9 // F12 + }; + + /* Some of the keyboard handling code is from noVNC and + * (c) Joel Martin (github@martintribe.org), used with permission + * Original code at: + * https://github.com/kanaka/noVNC/blob/master/include/input.js + */ + var unicodeTable = { + 0x0104: 0x01a1, 0x02D8: 0x01a2, 0x0141: 0x01a3, 0x013D: 0x01a5, 0x015A: 0x01a6, 0x0160: 0x01a9, 0x015E: 0x01aa, 0x0164: 0x01ab, 0x0179: 0x01ac, 0x017D: 0x01ae, 0x017B: 0x01af, 0x0105: 0x01b1, 0x02DB: 0x01b2, 0x0142: 0x01b3, 0x013E: 0x01b5, 0x015B: 0x01b6, 0x02C7: 0x01b7, 0x0161: 0x01b9, 0x015F: 0x01ba, 0x0165: 0x01bb, 0x017A: 0x01bc, 0x02DD: 0x01bd, 0x017E: 0x01be, 0x017C: 0x01bf, 0x0154: 0x01c0, 0x0102: 0x01c3, 0x0139: 0x01c5, 0x0106: 0x01c6, 0x010C: 0x01c8, 0x0118: 0x01ca, 0x011A: 0x01cc, 0x010E: 0x01cf, 0x0110: 0x01d0, 0x0143: 0x01d1, 0x0147: 0x01d2, 0x0150: 0x01d5, 0x0158: 0x01d8, 0x016E: 0x01d9, 0x0170: 0x01db, 0x0162: 0x01de, 0x0155: 0x01e0, 0x0103: 0x01e3, 0x013A: 0x01e5, 0x0107: 0x01e6, 0x010D: 0x01e8, 0x0119: 0x01ea, 0x011B: 0x01ec, 0x010F: 0x01ef, 0x0111: 0x01f0, 0x0144: 0x01f1, 0x0148: 0x01f2, 0x0151: 0x01f5, 0x0171: 0x01fb, 0x0159: 0x01f8, 0x016F: 0x01f9, 0x0163: 0x01fe, 0x02D9: 0x01ff, 0x0126: 0x02a1, 0x0124: 0x02a6, 0x0130: 0x02a9, 0x011E: 0x02ab, 0x0134: 0x02ac, 0x0127: 0x02b1, 0x0125: 0x02b6, 0x0131: 0x02b9, 0x011F: 0x02bb, 0x0135: 0x02bc, 0x010A: 0x02c5, 0x0108: 0x02c6, 0x0120: 0x02d5, 0x011C: 0x02d8, 0x016C: 0x02dd, 0x015C: 0x02de, 0x010B: 0x02e5, 0x0109: 0x02e6, 0x0121: 0x02f5, 0x011D: 0x02f8, 0x016D: 0x02fd, 0x015D: 0x02fe, 0x0138: 0x03a2, 0x0156: 0x03a3, 0x0128: 0x03a5, 0x013B: 0x03a6, 0x0112: 0x03aa, 0x0122: 0x03ab, 0x0166: 0x03ac, 0x0157: 0x03b3, 0x0129: 0x03b5, 0x013C: 0x03b6, 0x0113: 0x03ba, 0x0123: 0x03bb, 0x0167: 0x03bc, 0x014A: 0x03bd, 0x014B: 0x03bf, 0x0100: 0x03c0, 0x012E: 0x03c7, 0x0116: 0x03cc, 0x012A: 0x03cf, 0x0145: 0x03d1, 0x014C: 0x03d2, 0x0136: 0x03d3, 0x0172: 0x03d9, 0x0168: 0x03dd, 0x016A: 0x03de, 0x0101: 0x03e0, 0x012F: 0x03e7, 0x0117: 0x03ec, 0x012B: 0x03ef, 0x0146: 0x03f1, 0x014D: 0x03f2, 0x0137: 0x03f3, 0x0173: 0x03f9, 0x0169: 0x03fd, 0x016B: 0x03fe, 0x1E02: 0x1001e02, 0x1E03: 0x1001e03, 0x1E0A: 0x1001e0a, 0x1E80: 0x1001e80, 0x1E82: 0x1001e82, 0x1E0B: 0x1001e0b, 0x1EF2: 0x1001ef2, 0x1E1E: 0x1001e1e, 0x1E1F: 0x1001e1f, 0x1E40: 0x1001e40, 0x1E41: 0x1001e41, 0x1E56: 0x1001e56, 0x1E81: 0x1001e81, 0x1E57: 0x1001e57, 0x1E83: 0x1001e83, 0x1E60: 0x1001e60, 0x1EF3: 0x1001ef3, 0x1E84: 0x1001e84, 0x1E85: 0x1001e85, 0x1E61: 0x1001e61, 0x0174: 0x1000174, 0x1E6A: 0x1001e6a, 0x0176: 0x1000176, 0x0175: 0x1000175, 0x1E6B: 0x1001e6b, 0x0177: 0x1000177, 0x0152: 0x13bc, 0x0153: 0x13bd, 0x0178: 0x13be, 0x203E: 0x047e, 0x3002: 0x04a1, 0x300C: 0x04a2, 0x300D: 0x04a3, 0x3001: 0x04a4, 0x30FB: 0x04a5, 0x30F2: 0x04a6, 0x30A1: 0x04a7, 0x30A3: 0x04a8, 0x30A5: 0x04a9, 0x30A7: 0x04aa, 0x30A9: 0x04ab, 0x30E3: 0x04ac, 0x30E5: 0x04ad, 0x30E7: 0x04ae, 0x30C3: 0x04af, 0x30FC: 0x04b0, 0x30A2: 0x04b1, 0x30A4: 0x04b2, 0x30A6: 0x04b3, 0x30A8: 0x04b4, 0x30AA: 0x04b5, 0x30AB: 0x04b6, 0x30AD: 0x04b7, 0x30AF: 0x04b8, 0x30B1: 0x04b9, 0x30B3: 0x04ba, 0x30B5: 0x04bb, 0x30B7: 0x04bc, 0x30B9: 0x04bd, 0x30BB: 0x04be, 0x30BD: 0x04bf, 0x30BF: 0x04c0, 0x30C1: 0x04c1, 0x30C4: 0x04c2, 0x30C6: 0x04c3, 0x30C8: 0x04c4, 0x30CA: 0x04c5, 0x30CB: 0x04c6, 0x30CC: 0x04c7, 0x30CD: 0x04c8, 0x30CE: 0x04c9, 0x30CF: 0x04ca, 0x30D2: 0x04cb, 0x30D5: 0x04cc, 0x30D8: 0x04cd, 0x30DB: 0x04ce, 0x30DE: 0x04cf, 0x30DF: 0x04d0, 0x30E0: 0x04d1, 0x30E1: 0x04d2, 0x30E2: 0x04d3, 0x30E4: 0x04d4, 0x30E6: 0x04d5, 0x30E8: 0x04d6, 0x30E9: 0x04d7, 0x30EA: 0x04d8, 0x30EB: 0x04d9, 0x30EC: 0x04da, 0x30ED: 0x04db, 0x30EF: 0x04dc, 0x30F3: 0x04dd, 0x309B: 0x04de, 0x309C: 0x04df, 0x06F0: 0x10006f0, 0x06F1: 0x10006f1, 0x06F2: 0x10006f2, 0x06F3: 0x10006f3, 0x06F4: 0x10006f4, 0x06F5: 0x10006f5, 0x06F6: 0x10006f6, 0x06F7: 0x10006f7, 0x06F8: 0x10006f8, 0x06F9: 0x10006f9, 0x066A: 0x100066a, 0x0670: 0x1000670, 0x0679: 0x1000679, 0x067E: 0x100067e, 0x0686: 0x1000686, 0x0688: 0x1000688, 0x0691: 0x1000691, 0x060C: 0x05ac, 0x06D4: 0x10006d4, 0x0660: 0x1000660, 0x0661: 0x1000661, 0x0662: 0x1000662, 0x0663: 0x1000663, 0x0664: 0x1000664, 0x0665: 0x1000665, 0x0666: 0x1000666, 0x0667: 0x1000667, 0x0668: 0x1000668, 0x0669: 0x1000669, 0x061B: 0x05bb, 0x061F: 0x05bf, 0x0621: 0x05c1, 0x0622: 0x05c2, 0x0623: 0x05c3, 0x0624: 0x05c4, 0x0625: 0x05c5, 0x0626: 0x05c6, 0x0627: 0x05c7, 0x0628: 0x05c8, 0x0629: 0x05c9, 0x062A: 0x05ca, 0x062B: 0x05cb, 0x062C: 0x05cc, 0x062D: 0x05cd, 0x062E: 0x05ce, 0x062F: 0x05cf, 0x0630: 0x05d0, 0x0631: 0x05d1, 0x0632: 0x05d2, 0x0633: 0x05d3, 0x0634: 0x05d4, 0x0635: 0x05d5, 0x0636: 0x05d6, 0x0637: 0x05d7, 0x0638: 0x05d8, 0x0639: 0x05d9, 0x063A: 0x05da, 0x0640: 0x05e0, 0x0641: 0x05e1, 0x0642: 0x05e2, 0x0643: 0x05e3, 0x0644: 0x05e4, 0x0645: 0x05e5, 0x0646: 0x05e6, 0x0647: 0x05e7, 0x0648: 0x05e8, 0x0649: 0x05e9, 0x064A: 0x05ea, 0x064B: 0x05eb, 0x064C: 0x05ec, 0x064D: 0x05ed, 0x064E: 0x05ee, 0x064F: 0x05ef, 0x0650: 0x05f0, 0x0651: 0x05f1, 0x0652: 0x05f2, 0x0653: 0x1000653, 0x0654: 0x1000654, 0x0655: 0x1000655, 0x0698: 0x1000698, 0x06A4: 0x10006a4, 0x06A9: 0x10006a9, 0x06AF: 0x10006af, 0x06BA: 0x10006ba, 0x06BE: 0x10006be, 0x06CC: 0x10006cc, 0x06D2: 0x10006d2, 0x06C1: 0x10006c1, 0x0492: 0x1000492, 0x0493: 0x1000493, 0x0496: 0x1000496, 0x0497: 0x1000497, 0x049A: 0x100049a, 0x049B: 0x100049b, 0x049C: 0x100049c, 0x049D: 0x100049d, 0x04A2: 0x10004a2, 0x04A3: 0x10004a3, 0x04AE: 0x10004ae, 0x04AF: 0x10004af, 0x04B0: 0x10004b0, 0x04B1: 0x10004b1, 0x04B2: 0x10004b2, 0x04B3: 0x10004b3, 0x04B6: 0x10004b6, 0x04B7: 0x10004b7, 0x04B8: 0x10004b8, 0x04B9: 0x10004b9, 0x04BA: 0x10004ba, 0x04BB: 0x10004bb, 0x04D8: 0x10004d8, 0x04D9: 0x10004d9, 0x04E2: 0x10004e2, 0x04E3: 0x10004e3, 0x04E8: 0x10004e8, 0x04E9: 0x10004e9, 0x04EE: 0x10004ee, 0x04EF: 0x10004ef, 0x0452: 0x06a1, 0x0453: 0x06a2, 0x0451: 0x06a3, 0x0454: 0x06a4, 0x0455: 0x06a5, 0x0456: 0x06a6, 0x0457: 0x06a7, 0x0458: 0x06a8, 0x0459: 0x06a9, 0x045A: 0x06aa, 0x045B: 0x06ab, 0x045C: 0x06ac, 0x0491: 0x06ad, 0x045E: 0x06ae, 0x045F: 0x06af, 0x2116: 0x06b0, 0x0402: 0x06b1, 0x0403: 0x06b2, 0x0401: 0x06b3, 0x0404: 0x06b4, 0x0405: 0x06b5, 0x0406: 0x06b6, 0x0407: 0x06b7, 0x0408: 0x06b8, 0x0409: 0x06b9, 0x040A: 0x06ba, 0x040B: 0x06bb, 0x040C: 0x06bc, 0x0490: 0x06bd, 0x040E: 0x06be, 0x040F: 0x06bf, 0x044E: 0x06c0, 0x0430: 0x06c1, 0x0431: 0x06c2, 0x0446: 0x06c3, 0x0434: 0x06c4, 0x0435: 0x06c5, 0x0444: 0x06c6, 0x0433: 0x06c7, 0x0445: 0x06c8, 0x0438: 0x06c9, 0x0439: 0x06ca, 0x043A: 0x06cb, 0x043B: 0x06cc, 0x043C: 0x06cd, 0x043D: 0x06ce, 0x043E: 0x06cf, 0x043F: 0x06d0, 0x044F: 0x06d1, 0x0440: 0x06d2, 0x0441: 0x06d3, 0x0442: 0x06d4, 0x0443: 0x06d5, 0x0436: 0x06d6, 0x0432: 0x06d7, 0x044C: 0x06d8, 0x044B: 0x06d9, 0x0437: 0x06da, 0x0448: 0x06db, 0x044D: 0x06dc, 0x0449: 0x06dd, 0x0447: 0x06de, 0x044A: 0x06df, 0x042E: 0x06e0, 0x0410: 0x06e1, 0x0411: 0x06e2, 0x0426: 0x06e3, 0x0414: 0x06e4, 0x0415: 0x06e5, 0x0424: 0x06e6, 0x0413: 0x06e7, 0x0425: 0x06e8, 0x0418: 0x06e9, 0x0419: 0x06ea, 0x041A: 0x06eb, 0x041B: 0x06ec, 0x041C: 0x06ed, 0x041D: 0x06ee, 0x041E: 0x06ef, 0x041F: 0x06f0, 0x042F: 0x06f1, 0x0420: 0x06f2, 0x0421: 0x06f3, 0x0422: 0x06f4, 0x0423: 0x06f5, 0x0416: 0x06f6, 0x0412: 0x06f7, 0x042C: 0x06f8, 0x042B: 0x06f9, 0x0417: 0x06fa, 0x0428: 0x06fb, 0x042D: 0x06fc, 0x0429: 0x06fd, 0x0427: 0x06fe, 0x042A: 0x06ff, 0x0386: 0x07a1, 0x0388: 0x07a2, 0x0389: 0x07a3, 0x038A: 0x07a4, 0x03AA: 0x07a5, 0x038C: 0x07a7, 0x038E: 0x07a8, 0x03AB: 0x07a9, 0x038F: 0x07ab, 0x0385: 0x07ae, 0x2015: 0x07af, 0x03AC: 0x07b1, 0x03AD: 0x07b2, 0x03AE: 0x07b3, 0x03AF: 0x07b4, 0x03CA: 0x07b5, 0x0390: 0x07b6, 0x03CC: 0x07b7, 0x03CD: 0x07b8, 0x03CB: 0x07b9, 0x03B0: 0x07ba, 0x03CE: 0x07bb, 0x0391: 0x07c1, 0x0392: 0x07c2, 0x0393: 0x07c3, 0x0394: 0x07c4, 0x0395: 0x07c5, 0x0396: 0x07c6, 0x0397: 0x07c7, 0x0398: 0x07c8, 0x0399: 0x07c9, 0x039A: 0x07ca, 0x039B: 0x07cb, 0x039C: 0x07cc, 0x039D: 0x07cd, 0x039E: 0x07ce, 0x039F: 0x07cf, 0x03A0: 0x07d0, 0x03A1: 0x07d1, 0x03A3: 0x07d2, 0x03A4: 0x07d4, 0x03A5: 0x07d5, 0x03A6: 0x07d6, 0x03A7: 0x07d7, 0x03A8: 0x07d8, 0x03A9: 0x07d9, 0x03B1: 0x07e1, 0x03B2: 0x07e2, 0x03B3: 0x07e3, 0x03B4: 0x07e4, 0x03B5: 0x07e5, 0x03B6: 0x07e6, 0x03B7: 0x07e7, 0x03B8: 0x07e8, 0x03B9: 0x07e9, 0x03BA: 0x07ea, 0x03BB: 0x07eb, 0x03BC: 0x07ec, 0x03BD: 0x07ed, 0x03BE: 0x07ee, 0x03BF: 0x07ef, 0x03C0: 0x07f0, 0x03C1: 0x07f1, 0x03C3: 0x07f2, 0x03C2: 0x07f3, 0x03C4: 0x07f4, 0x03C5: 0x07f5, 0x03C6: 0x07f6, 0x03C7: 0x07f7, 0x03C8: 0x07f8, 0x03C9: 0x07f9, 0x23B7: 0x08a1, 0x2320: 0x08a4, 0x2321: 0x08a5, 0x23A1: 0x08a7, 0x23A3: 0x08a8, 0x23A4: 0x08a9, 0x23A6: 0x08aa, 0x239B: 0x08ab, 0x239D: 0x08ac, 0x239E: 0x08ad, 0x23A0: 0x08ae, 0x23A8: 0x08af, 0x23AC: 0x08b0, 0x2264: 0x08bc, 0x2260: 0x08bd, 0x2265: 0x08be, 0x222B: 0x08bf, 0x2234: 0x08c0, 0x221D: 0x08c1, 0x221E: 0x08c2, 0x2207: 0x08c5, 0x223C: 0x08c8, 0x2243: 0x08c9, 0x21D4: 0x08cd, 0x21D2: 0x08ce, 0x2261: 0x08cf, 0x221A: 0x08d6, 0x2282: 0x08da, 0x2283: 0x08db, 0x2229: 0x08dc, 0x222A: 0x08dd, 0x2227: 0x08de, 0x2228: 0x08df, 0x2202: 0x08ef, 0x0192: 0x08f6, 0x2190: 0x08fb, 0x2191: 0x08fc, 0x2192: 0x08fd, 0x2193: 0x08fe, 0x25C6: 0x09e0, 0x2592: 0x09e1, 0x2409: 0x09e2, 0x240C: 0x09e3, 0x240D: 0x09e4, 0x240A: 0x09e5, 0x2424: 0x09e8, 0x240B: 0x09e9, 0x2518: 0x09ea, 0x2510: 0x09eb, 0x250C: 0x09ec, 0x2514: 0x09ed, 0x253C: 0x09ee, 0x23BA: 0x09ef, 0x23BB: 0x09f0, 0x2500: 0x09f1, 0x23BC: 0x09f2, 0x23BD: 0x09f3, 0x251C: 0x09f4, 0x2524: 0x09f5, 0x2534: 0x09f6, 0x252C: 0x09f7, 0x2502: 0x09f8, 0x2003: 0x0aa1, 0x2002: 0x0aa2, 0x2004: 0x0aa3, 0x2005: 0x0aa4, 0x2007: 0x0aa5, 0x2008: 0x0aa6, 0x2009: 0x0aa7, 0x200A: 0x0aa8, 0x2014: 0x0aa9, 0x2013: 0x0aaa, 0x2026: 0x0aae, 0x2025: 0x0aaf, 0x2153: 0x0ab0, 0x2154: 0x0ab1, 0x2155: 0x0ab2, 0x2156: 0x0ab3, 0x2157: 0x0ab4, 0x2158: 0x0ab5, 0x2159: 0x0ab6, 0x215A: 0x0ab7, 0x2105: 0x0ab8, 0x2012: 0x0abb, 0x215B: 0x0ac3, 0x215C: 0x0ac4, 0x215D: 0x0ac5, 0x215E: 0x0ac6, 0x2122: 0x0ac9, 0x2018: 0x0ad0, 0x2019: 0x0ad1, 0x201C: 0x0ad2, 0x201D: 0x0ad3, 0x211E: 0x0ad4, 0x2032: 0x0ad6, 0x2033: 0x0ad7, 0x271D: 0x0ad9, 0x2663: 0x0aec, 0x2666: 0x0aed, 0x2665: 0x0aee, 0x2720: 0x0af0, 0x2020: 0x0af1, 0x2021: 0x0af2, 0x2713: 0x0af3, 0x2717: 0x0af4, 0x266F: 0x0af5, 0x266D: 0x0af6, 0x2642: 0x0af7, 0x2640: 0x0af8, 0x260E: 0x0af9, 0x2315: 0x0afa, 0x2117: 0x0afb, 0x2038: 0x0afc, 0x201A: 0x0afd, 0x201E: 0x0afe, 0x22A4: 0x0bc2, 0x230A: 0x0bc4, 0x2218: 0x0bca, 0x2395: 0x0bcc, 0x22A5: 0x0bce, 0x25CB: 0x0bcf, 0x2308: 0x0bd3, 0x22A3: 0x0bdc, 0x22A2: 0x0bfc, 0x2017: 0x0cdf, 0x05D0: 0x0ce0, 0x05D1: 0x0ce1, 0x05D2: 0x0ce2, 0x05D3: 0x0ce3, 0x05D4: 0x0ce4, 0x05D5: 0x0ce5, 0x05D6: 0x0ce6, 0x05D7: 0x0ce7, 0x05D8: 0x0ce8, 0x05D9: 0x0ce9, 0x05DA: 0x0cea, 0x05DB: 0x0ceb, 0x05DC: 0x0cec, 0x05DD: 0x0ced, 0x05DE: 0x0cee, 0x05DF: 0x0cef, 0x05E0: 0x0cf0, 0x05E1: 0x0cf1, 0x05E2: 0x0cf2, 0x05E3: 0x0cf3, 0x05E4: 0x0cf4, 0x05E5: 0x0cf5, 0x05E6: 0x0cf6, 0x05E7: 0x0cf7, 0x05E8: 0x0cf8, 0x05E9: 0x0cf9, 0x05EA: 0x0cfa, 0x0E01: 0x0da1, 0x0E02: 0x0da2, 0x0E03: 0x0da3, 0x0E04: 0x0da4, 0x0E05: 0x0da5, 0x0E06: 0x0da6, 0x0E07: 0x0da7, 0x0E08: 0x0da8, 0x0E09: 0x0da9, 0x0E0A: 0x0daa, 0x0E0B: 0x0dab, 0x0E0C: 0x0dac, 0x0E0D: 0x0dad, 0x0E0E: 0x0dae, 0x0E0F: 0x0daf, 0x0E10: 0x0db0, 0x0E11: 0x0db1, 0x0E12: 0x0db2, 0x0E13: 0x0db3, 0x0E14: 0x0db4, 0x0E15: 0x0db5, 0x0E16: 0x0db6, 0x0E17: 0x0db7, 0x0E18: 0x0db8, 0x0E19: 0x0db9, 0x0E1A: 0x0dba, 0x0E1B: 0x0dbb, 0x0E1C: 0x0dbc, 0x0E1D: 0x0dbd, 0x0E1E: 0x0dbe, 0x0E1F: 0x0dbf, 0x0E20: 0x0dc0, 0x0E21: 0x0dc1, 0x0E22: 0x0dc2, 0x0E23: 0x0dc3, 0x0E24: 0x0dc4, 0x0E25: 0x0dc5, 0x0E26: 0x0dc6, 0x0E27: 0x0dc7, 0x0E28: 0x0dc8, 0x0E29: 0x0dc9, 0x0E2A: 0x0dca, 0x0E2B: 0x0dcb, 0x0E2C: 0x0dcc, 0x0E2D: 0x0dcd, 0x0E2E: 0x0dce, 0x0E2F: 0x0dcf, 0x0E30: 0x0dd0, 0x0E31: 0x0dd1, 0x0E32: 0x0dd2, 0x0E33: 0x0dd3, 0x0E34: 0x0dd4, 0x0E35: 0x0dd5, 0x0E36: 0x0dd6, 0x0E37: 0x0dd7, 0x0E38: 0x0dd8, 0x0E39: 0x0dd9, 0x0E3A: 0x0dda, 0x0E3F: 0x0ddf, 0x0E40: 0x0de0, 0x0E41: 0x0de1, 0x0E42: 0x0de2, 0x0E43: 0x0de3, 0x0E44: 0x0de4, 0x0E45: 0x0de5, 0x0E46: 0x0de6, 0x0E47: 0x0de7, 0x0E48: 0x0de8, 0x0E49: 0x0de9, 0x0E4A: 0x0dea, 0x0E4B: 0x0deb, 0x0E4C: 0x0dec, 0x0E4D: 0x0ded, 0x0E50: 0x0df0, 0x0E51: 0x0df1, 0x0E52: 0x0df2, 0x0E53: 0x0df3, 0x0E54: 0x0df4, 0x0E55: 0x0df5, 0x0E56: 0x0df6, 0x0E57: 0x0df7, 0x0E58: 0x0df8, 0x0E59: 0x0df9, 0x0587: 0x1000587, 0x0589: 0x1000589, 0x055D: 0x100055d, 0x058A: 0x100058a, 0x055C: 0x100055c, 0x055B: 0x100055b, 0x055E: 0x100055e, 0x0531: 0x1000531, 0x0561: 0x1000561, 0x0532: 0x1000532, 0x0562: 0x1000562, 0x0533: 0x1000533, 0x0563: 0x1000563, 0x0534: 0x1000534, 0x0564: 0x1000564, 0x0535: 0x1000535, 0x0565: 0x1000565, 0x0536: 0x1000536, 0x0566: 0x1000566, 0x0537: 0x1000537, 0x0567: 0x1000567, 0x0538: 0x1000538, 0x0568: 0x1000568, 0x0539: 0x1000539, 0x0569: 0x1000569, 0x053A: 0x100053a, 0x056A: 0x100056a, 0x053B: 0x100053b, 0x056B: 0x100056b, 0x053C: 0x100053c, 0x056C: 0x100056c, 0x053D: 0x100053d, 0x056D: 0x100056d, 0x053E: 0x100053e, 0x056E: 0x100056e, 0x053F: 0x100053f, 0x056F: 0x100056f, 0x0540: 0x1000540, 0x0570: 0x1000570, 0x0541: 0x1000541, 0x0571: 0x1000571, 0x0542: 0x1000542, 0x0572: 0x1000572, 0x0543: 0x1000543, 0x0573: 0x1000573, 0x0544: 0x1000544, 0x0574: 0x1000574, 0x0545: 0x1000545, 0x0575: 0x1000575, 0x0546: 0x1000546, 0x0576: 0x1000576, 0x0547: 0x1000547, 0x0577: 0x1000577, 0x0548: 0x1000548, 0x0578: 0x1000578, 0x0549: 0x1000549, 0x0579: 0x1000579, 0x054A: 0x100054a, 0x057A: 0x100057a, 0x054B: 0x100054b, 0x057B: 0x100057b, 0x054C: 0x100054c, 0x057C: 0x100057c, 0x054D: 0x100054d, 0x057D: 0x100057d, 0x054E: 0x100054e, 0x057E: 0x100057e, 0x054F: 0x100054f, 0x057F: 0x100057f, 0x0550: 0x1000550, 0x0580: 0x1000580, 0x0551: 0x1000551, 0x0581: 0x1000581, 0x0552: 0x1000552, 0x0582: 0x1000582, 0x0553: 0x1000553, 0x0583: 0x1000583, 0x0554: 0x1000554, 0x0584: 0x1000584, 0x0555: 0x1000555, 0x0585: 0x1000585, 0x0556: 0x1000556, 0x0586: 0x1000586, 0x055A: 0x100055a, 0x10D0: 0x10010d0, 0x10D1: 0x10010d1, 0x10D2: 0x10010d2, 0x10D3: 0x10010d3, 0x10D4: 0x10010d4, 0x10D5: 0x10010d5, 0x10D6: 0x10010d6, 0x10D7: 0x10010d7, 0x10D8: 0x10010d8, 0x10D9: 0x10010d9, 0x10DA: 0x10010da, 0x10DB: 0x10010db, 0x10DC: 0x10010dc, 0x10DD: 0x10010dd, 0x10DE: 0x10010de, 0x10DF: 0x10010df, 0x10E0: 0x10010e0, 0x10E1: 0x10010e1, 0x10E2: 0x10010e2, 0x10E3: 0x10010e3, 0x10E4: 0x10010e4, 0x10E5: 0x10010e5, 0x10E6: 0x10010e6, 0x10E7: 0x10010e7, 0x10E8: 0x10010e8, 0x10E9: 0x10010e9, 0x10EA: 0x10010ea, 0x10EB: 0x10010eb, 0x10EC: 0x10010ec, 0x10ED: 0x10010ed, 0x10EE: 0x10010ee, 0x10EF: 0x10010ef, 0x10F0: 0x10010f0, 0x10F1: 0x10010f1, 0x10F2: 0x10010f2, 0x10F3: 0x10010f3, 0x10F4: 0x10010f4, 0x10F5: 0x10010f5, 0x10F6: 0x10010f6, 0x1E8A: 0x1001e8a, 0x012C: 0x100012c, 0x01B5: 0x10001b5, 0x01E6: 0x10001e6, 0x01D2: 0x10001d1, 0x019F: 0x100019f, 0x1E8B: 0x1001e8b, 0x012D: 0x100012d, 0x01B6: 0x10001b6, 0x01E7: 0x10001e7, 0x01D2: 0x10001d2, 0x0275: 0x1000275, 0x018F: 0x100018f, 0x0259: 0x1000259, 0x1E36: 0x1001e36, 0x1E37: 0x1001e37, 0x1EA0: 0x1001ea0, 0x1EA1: 0x1001ea1, 0x1EA2: 0x1001ea2, 0x1EA3: 0x1001ea3, 0x1EA4: 0x1001ea4, 0x1EA5: 0x1001ea5, 0x1EA6: 0x1001ea6, 0x1EA7: 0x1001ea7, 0x1EA8: 0x1001ea8, 0x1EA9: 0x1001ea9, 0x1EAA: 0x1001eaa, 0x1EAB: 0x1001eab, 0x1EAC: 0x1001eac, 0x1EAD: 0x1001ead, 0x1EAE: 0x1001eae, 0x1EAF: 0x1001eaf, 0x1EB0: 0x1001eb0, 0x1EB1: 0x1001eb1, 0x1EB2: 0x1001eb2, 0x1EB3: 0x1001eb3, 0x1EB4: 0x1001eb4, 0x1EB5: 0x1001eb5, 0x1EB6: 0x1001eb6, 0x1EB7: 0x1001eb7, 0x1EB8: 0x1001eb8, 0x1EB9: 0x1001eb9, 0x1EBA: 0x1001eba, 0x1EBB: 0x1001ebb, 0x1EBC: 0x1001ebc, 0x1EBD: 0x1001ebd, 0x1EBE: 0x1001ebe, 0x1EBF: 0x1001ebf, 0x1EC0: 0x1001ec0, 0x1EC1: 0x1001ec1, 0x1EC2: 0x1001ec2, 0x1EC3: 0x1001ec3, 0x1EC4: 0x1001ec4, 0x1EC5: 0x1001ec5, 0x1EC6: 0x1001ec6, 0x1EC7: 0x1001ec7, 0x1EC8: 0x1001ec8, 0x1EC9: 0x1001ec9, 0x1ECA: 0x1001eca, 0x1ECB: 0x1001ecb, 0x1ECC: 0x1001ecc, 0x1ECD: 0x1001ecd, 0x1ECE: 0x1001ece, 0x1ECF: 0x1001ecf, 0x1ED0: 0x1001ed0, 0x1ED1: 0x1001ed1, 0x1ED2: 0x1001ed2, 0x1ED3: 0x1001ed3, 0x1ED4: 0x1001ed4, 0x1ED5: 0x1001ed5, 0x1ED6: 0x1001ed6, 0x1ED7: 0x1001ed7, 0x1ED8: 0x1001ed8, 0x1ED9: 0x1001ed9, 0x1EDA: 0x1001eda, 0x1EDB: 0x1001edb, 0x1EDC: 0x1001edc, 0x1EDD: 0x1001edd, 0x1EDE: 0x1001ede, 0x1EDF: 0x1001edf, 0x1EE0: 0x1001ee0, 0x1EE1: 0x1001ee1, 0x1EE2: 0x1001ee2, 0x1EE3: 0x1001ee3, 0x1EE4: 0x1001ee4, 0x1EE5: 0x1001ee5, 0x1EE6: 0x1001ee6, 0x1EE7: 0x1001ee7, 0x1EE8: 0x1001ee8, 0x1EE9: 0x1001ee9, 0x1EEA: 0x1001eea, 0x1EEB: 0x1001eeb, 0x1EEC: 0x1001eec, 0x1EED: 0x1001eed, 0x1EEE: 0x1001eee, 0x1EEF: 0x1001eef, 0x1EF0: 0x1001ef0, 0x1EF1: 0x1001ef1, 0x1EF4: 0x1001ef4, 0x1EF5: 0x1001ef5, 0x1EF6: 0x1001ef6, 0x1EF7: 0x1001ef7, 0x1EF8: 0x1001ef8, 0x1EF9: 0x1001ef9, 0x01A0: 0x10001a0, 0x01A1: 0x10001a1, 0x01AF: 0x10001af, 0x01B0: 0x10001b0, 0x20A0: 0x10020a0, 0x20A1: 0x10020a1, 0x20A2: 0x10020a2, 0x20A3: 0x10020a3, 0x20A4: 0x10020a4, 0x20A5: 0x10020a5, 0x20A6: 0x10020a6, 0x20A7: 0x10020a7, 0x20A8: 0x10020a8, 0x20A9: 0x10020a9, 0x20AA: 0x10020aa, 0x20AB: 0x10020ab, 0x20AC: 0x20ac, 0x2070: 0x1002070, 0x2074: 0x1002074, 0x2075: 0x1002075, 0x2076: 0x1002076, 0x2077: 0x1002077, 0x2078: 0x1002078, 0x2079: 0x1002079, 0x2080: 0x1002080, 0x2081: 0x1002081, 0x2082: 0x1002082, 0x2083: 0x1002083, 0x2084: 0x1002084, 0x2085: 0x1002085, 0x2086: 0x1002086, 0x2087: 0x1002087, 0x2088: 0x1002088, 0x2089: 0x1002089, 0x2202: 0x1002202, 0x2205: 0x1002205, 0x2208: 0x1002208, 0x2209: 0x1002209, 0x220B: 0x100220B, 0x221A: 0x100221A, 0x221B: 0x100221B, 0x221C: 0x100221C, 0x222C: 0x100222C, 0x222D: 0x100222D, 0x2235: 0x1002235, 0x2245: 0x1002248, 0x2247: 0x1002247, 0x2262: 0x1002262, 0x2263: 0x1002263, 0x2800: 0x1002800, 0x2801: 0x1002801, 0x2802: 0x1002802, 0x2803: 0x1002803, 0x2804: 0x1002804, 0x2805: 0x1002805, 0x2806: 0x1002806, 0x2807: 0x1002807, 0x2808: 0x1002808, 0x2809: 0x1002809, 0x280a: 0x100280a, 0x280b: 0x100280b, 0x280c: 0x100280c, 0x280d: 0x100280d, 0x280e: 0x100280e, 0x280f: 0x100280f, 0x2810: 0x1002810, 0x2811: 0x1002811, 0x2812: 0x1002812, 0x2813: 0x1002813, 0x2814: 0x1002814, 0x2815: 0x1002815, 0x2816: 0x1002816, 0x2817: 0x1002817, 0x2818: 0x1002818, 0x2819: 0x1002819, 0x281a: 0x100281a, 0x281b: 0x100281b, 0x281c: 0x100281c, 0x281d: 0x100281d, 0x281e: 0x100281e, 0x281f: 0x100281f, 0x2820: 0x1002820, 0x2821: 0x1002821, 0x2822: 0x1002822, 0x2823: 0x1002823, 0x2824: 0x1002824, 0x2825: 0x1002825, 0x2826: 0x1002826, 0x2827: 0x1002827, 0x2828: 0x1002828, 0x2829: 0x1002829, 0x282a: 0x100282a, 0x282b: 0x100282b, 0x282c: 0x100282c, 0x282d: 0x100282d, 0x282e: 0x100282e, 0x282f: 0x100282f, 0x2830: 0x1002830, 0x2831: 0x1002831, 0x2832: 0x1002832, 0x2833: 0x1002833, 0x2834: 0x1002834, 0x2835: 0x1002835, 0x2836: 0x1002836, 0x2837: 0x1002837, 0x2838: 0x1002838, 0x2839: 0x1002839, 0x283a: 0x100283a, 0x283b: 0x100283b, 0x283c: 0x100283c, 0x283d: 0x100283d, 0x283e: 0x100283e, 0x283f: 0x100283f, 0x2840: 0x1002840, 0x2841: 0x1002841, 0x2842: 0x1002842, 0x2843: 0x1002843, 0x2844: 0x1002844, 0x2845: 0x1002845, 0x2846: 0x1002846, 0x2847: 0x1002847, 0x2848: 0x1002848, 0x2849: 0x1002849, 0x284a: 0x100284a, 0x284b: 0x100284b, 0x284c: 0x100284c, 0x284d: 0x100284d, 0x284e: 0x100284e, 0x284f: 0x100284f, 0x2850: 0x1002850, 0x2851: 0x1002851, 0x2852: 0x1002852, 0x2853: 0x1002853, 0x2854: 0x1002854, 0x2855: 0x1002855, 0x2856: 0x1002856, 0x2857: 0x1002857, 0x2858: 0x1002858, 0x2859: 0x1002859, 0x285a: 0x100285a, 0x285b: 0x100285b, 0x285c: 0x100285c, 0x285d: 0x100285d, 0x285e: 0x100285e, 0x285f: 0x100285f, 0x2860: 0x1002860, 0x2861: 0x1002861, 0x2862: 0x1002862, 0x2863: 0x1002863, 0x2864: 0x1002864, 0x2865: 0x1002865, 0x2866: 0x1002866, 0x2867: 0x1002867, 0x2868: 0x1002868, 0x2869: 0x1002869, 0x286a: 0x100286a, 0x286b: 0x100286b, 0x286c: 0x100286c, 0x286d: 0x100286d, 0x286e: 0x100286e, 0x286f: 0x100286f, 0x2870: 0x1002870, 0x2871: 0x1002871, 0x2872: 0x1002872, 0x2873: 0x1002873, 0x2874: 0x1002874, 0x2875: 0x1002875, 0x2876: 0x1002876, 0x2877: 0x1002877, 0x2878: 0x1002878, 0x2879: 0x1002879, 0x287a: 0x100287a, 0x287b: 0x100287b, 0x287c: 0x100287c, 0x287d: 0x100287d, 0x287e: 0x100287e, 0x287f: 0x100287f, 0x2880: 0x1002880, 0x2881: 0x1002881, 0x2882: 0x1002882, 0x2883: 0x1002883, 0x2884: 0x1002884, 0x2885: 0x1002885, 0x2886: 0x1002886, 0x2887: 0x1002887, 0x2888: 0x1002888, 0x2889: 0x1002889, 0x288a: 0x100288a, 0x288b: 0x100288b, 0x288c: 0x100288c, 0x288d: 0x100288d, 0x288e: 0x100288e, 0x288f: 0x100288f, 0x2890: 0x1002890, 0x2891: 0x1002891, 0x2892: 0x1002892, 0x2893: 0x1002893, 0x2894: 0x1002894, 0x2895: 0x1002895, 0x2896: 0x1002896, 0x2897: 0x1002897, 0x2898: 0x1002898, 0x2899: 0x1002899, 0x289a: 0x100289a, 0x289b: 0x100289b, 0x289c: 0x100289c, 0x289d: 0x100289d, 0x289e: 0x100289e, 0x289f: 0x100289f, 0x28a0: 0x10028a0, 0x28a1: 0x10028a1, 0x28a2: 0x10028a2, 0x28a3: 0x10028a3, 0x28a4: 0x10028a4, 0x28a5: 0x10028a5, 0x28a6: 0x10028a6, 0x28a7: 0x10028a7, 0x28a8: 0x10028a8, 0x28a9: 0x10028a9, 0x28aa: 0x10028aa, 0x28ab: 0x10028ab, 0x28ac: 0x10028ac, 0x28ad: 0x10028ad, 0x28ae: 0x10028ae, 0x28af: 0x10028af, 0x28b0: 0x10028b0, 0x28b1: 0x10028b1, 0x28b2: 0x10028b2, 0x28b3: 0x10028b3, 0x28b4: 0x10028b4, 0x28b5: 0x10028b5, 0x28b6: 0x10028b6, 0x28b7: 0x10028b7, 0x28b8: 0x10028b8, 0x28b9: 0x10028b9, 0x28ba: 0x10028ba, 0x28bb: 0x10028bb, 0x28bc: 0x10028bc, 0x28bd: 0x10028bd, 0x28be: 0x10028be, 0x28bf: 0x10028bf, 0x28c0: 0x10028c0, 0x28c1: 0x10028c1, 0x28c2: 0x10028c2, 0x28c3: 0x10028c3, 0x28c4: 0x10028c4, 0x28c5: 0x10028c5, 0x28c6: 0x10028c6, 0x28c7: 0x10028c7, 0x28c8: 0x10028c8, 0x28c9: 0x10028c9, 0x28ca: 0x10028ca, 0x28cb: 0x10028cb, 0x28cc: 0x10028cc, 0x28cd: 0x10028cd, 0x28ce: 0x10028ce, 0x28cf: 0x10028cf, 0x28d0: 0x10028d0, 0x28d1: 0x10028d1, 0x28d2: 0x10028d2, 0x28d3: 0x10028d3, 0x28d4: 0x10028d4, 0x28d5: 0x10028d5, 0x28d6: 0x10028d6, 0x28d7: 0x10028d7, 0x28d8: 0x10028d8, 0x28d9: 0x10028d9, 0x28da: 0x10028da, 0x28db: 0x10028db, 0x28dc: 0x10028dc, 0x28dd: 0x10028dd, 0x28de: 0x10028de, 0x28df: 0x10028df, 0x28e0: 0x10028e0, 0x28e1: 0x10028e1, 0x28e2: 0x10028e2, 0x28e3: 0x10028e3, 0x28e4: 0x10028e4, 0x28e5: 0x10028e5, 0x28e6: 0x10028e6, 0x28e7: 0x10028e7, 0x28e8: 0x10028e8, 0x28e9: 0x10028e9, 0x28ea: 0x10028ea, 0x28eb: 0x10028eb, 0x28ec: 0x10028ec, 0x28ed: 0x10028ed, 0x28ee: 0x10028ee, 0x28ef: 0x10028ef, 0x28f0: 0x10028f0, 0x28f1: 0x10028f1, 0x28f2: 0x10028f2, 0x28f3: 0x10028f3, 0x28f4: 0x10028f4, 0x28f5: 0x10028f5, 0x28f6: 0x10028f6, 0x28f7: 0x10028f7, 0x28f8: 0x10028f8, 0x28f9: 0x10028f9, 0x28fa: 0x10028fa, 0x28fb: 0x10028fb, 0x28fc: 0x10028fc, 0x28fd: 0x10028fd, 0x28fe: 0x10028fe, 0x28ff: 0x10028ff + }; + + + ///////////////////////////////////////////////////////////////////////////// + // HELPERS + ///////////////////////////////////////////////////////////////////////////// + + function getKeysymSpecial(ev) { + if (ev.keyCode in specialKeyTable) { + var r = specialKeyTable[ev.keyCode]; + var flags = 0; + if (typeof r !== 'number') { + flags = r[1]; + r = r[0]; + } + if (ev.type === 'keydown' || flags & ON_KEYDOWN) return r; + } + if (!ev.ctrlKey && !ev.altKey) return null; + + var keysym = getEventKeySym(ev); + + /* Remap symbols */ + switch (keysym) { + case 186 : keysym = 59; break; // ; (IE) + case 187 : keysym = 61; break; // = (IE) + case 188 : keysym = 44; break; // , (Mozilla, IE) + case 109 : // - (Mozilla, Opera) + if (true /* TODO: check if browser is firefox or opera */) + keysym = 45; + break; + case 189 : keysym = 45; break; // - (IE) + case 190 : keysym = 46; break; // . (Mozilla, IE) + case 191 : keysym = 47; break; // / (Mozilla, IE) + case 192 : keysym = 96; break; // ` (Mozilla, IE) + case 219 : keysym = 91; break; // [ (Mozilla, IE) + case 220 : keysym = 92; break; // \ (Mozilla, IE) + case 221 : keysym = 93; break; // ] (Mozilla, IE) + case 222 : keysym = 39; break; // ' (Mozilla, IE) + } + + /* Remap shifted and unshifted keys */ + if (!!ev.shiftKey) { + switch (keysym) { + case 48 : keysym = 41 ; break; // ) (shifted 0) + case 49 : keysym = 33 ; break; // ! (shifted 1) + case 50 : keysym = 64 ; break; // @ (shifted 2) + case 51 : keysym = 35 ; break; // # (shifted 3) + case 52 : keysym = 36 ; break; // $ (shifted 4) + case 53 : keysym = 37 ; break; // % (shifted 5) + case 54 : keysym = 94 ; break; // ^ (shifted 6) + case 55 : keysym = 38 ; break; // & (shifted 7) + case 56 : keysym = 42 ; break; // * (shifted 8) + case 57 : keysym = 40 ; break; // ( (shifted 9) + case 59 : keysym = 58 ; break; // : (shifted `) + case 61 : keysym = 43 ; break; // + (shifted ;) + case 44 : keysym = 60 ; break; // < (shifted ,) + case 45 : keysym = 95 ; break; // _ (shifted -) + case 46 : keysym = 62 ; break; // > (shifted .) + case 47 : keysym = 63 ; break; // ? (shifted /) + case 96 : keysym = 126; break; // ~ (shifted `) + case 91 : keysym = 123; break; // { (shifted [) + case 92 : keysym = 124; break; // | (shifted \) + case 93 : keysym = 125; break; // } (shifted ]) + case 39 : keysym = 34 ; break; // ' (shifted ') + } + } else if ((keysym >= 65) && (keysym <=90)) { + /* Remap unshifted A-Z */ + keysym += 32; + } else if (ev.keyLocation === 3) { + // numpad keys + switch (keysym) { + case 96 : keysym = 48; break; // 0 + case 97 : keysym = 49; break; // 1 + case 98 : keysym = 50; break; // 2 + case 99 : keysym = 51; break; // 3 + case 100: keysym = 52; break; // 4 + case 101: keysym = 53; break; // 5 + case 102: keysym = 54; break; // 6 + case 103: keysym = 55; break; // 7 + case 104: keysym = 56; break; // 8 + case 105: keysym = 57; break; // 9 + case 109: keysym = 45; break; // - + case 110: keysym = 46; break; // . + case 111: keysym = 47; break; // / + } + } + return keysym; + } + + function getEventKeySym(ev) { + if (typeof ev.which !== 'undefined' && ev.which > 0) + return ev.which; + return ev.keyCode; + } + + function ignoreKeyEvent(ev) { + // Blarg. Some keys have a different keyCode on keyDown vs keyUp + if (ev.keyCode === 229) { + // French AZERTY keyboard dead key. + // Lame thing is that the respective keyUp is 219 so we can't + // properly ignore the keyUp event + return true; + } + return false; + } + + function getKeysym(ev) { + var keysym = getEventKeySym(ev); + if ((keysym > 255) && (keysym < 0xFF00)) { // Map Unicode outside Latin 1 to gdk keysyms + keysym = (typeof keysym === 'undefined') ? 0 : unicodeTable[keysym]; + } + return keysym; + } + + function getRelativeLayer(id, ev, opts) { + opts = opts || {}; + + var cid = id; + if ( ev.target ) { + var tmp = ev.target.getAttribute('data-surface-id'); + if ( tmp ) { + cid = parseInt(tmp, 10); + } + } + + if ( cid !== id ) { + var surface = surfaces[cid]; + if ( surface && surface.canvas ) { + opts.mx -= surface.canvas.offsetLeft; + opts.my -= surface.canvas.offsetTop; + } + } + + return cid; + } + + ///////////////////////////////////////////////////////////////////////////// + // WRAPPERS + ///////////////////////////////////////////////////////////////////////////// + + /** + * Command for binary/arraybuffer connection + */ + function BinCommands(message) { + this.arraybuffer = message; + this.u8 = new Uint8Array(message); + this.length = this.u8.length; + this.pos = 0; + } + BinCommands.prototype.get_char = function() { + return String.fromCharCode(this.u8[this.pos++]); + }; + BinCommands.prototype.get_bool = function() { + return this.u8[this.pos++] !== 0; + }; + BinCommands.prototype.get_flags = function() { + return this.u8[this.pos++]; + } + BinCommands.prototype.get_16 = function() { + var v = this.u8[this.pos] + (this.u8[this.pos+1] << 8); + this.pos = this.pos + 2; + return v; + }; + BinCommands.prototype.get_16s = function() { + var v = this.get_16 (); + if (v > 32767) return v - 65536; + return v; + }; + BinCommands.prototype.get_32 = function() { + var v = this.u8[this.pos] + + (this.u8[this.pos+1] << 8) + + (this.u8[this.pos+2] << 16) + + (this.u8[this.pos+3] << 24); + + this.pos = this.pos + 4; + return v; + }; + BinCommands.prototype.get_image_url = function() { + var size = this.get_32(); + var png_blob = new Blob ([new Uint8Array (this.arraybuffer, this.pos, size)], {type:'image/png'}); + var url; + if (window.webkitURL) { + url = window.webkitURL.createObjectURL(png_blob); + } else { + url = window.URL.createObjectURL(png_blob, {oneTimeOnly: true}); + } + this.pos = this.pos + size; + return url; + }; + BinCommands.prototype.free_image_url = function(url) { + URL.revokeObjectURL(url); + }; + + ///////////////////////////////////////////////////////////////////////////// + // ACTIONS + ///////////////////////////////////////////////////////////////////////////// + + function doLogin() { + // TODO + } + + function doLoggedIn() { + // TODO + } + + function doDisconnect() { + // TODO + } + + /** + * Closes a surface + */ + function closeSurface(id) { + if ( surfaces[id] ) { + sendInput('W', [id]); + } + } + + /** + * Moves a surface + */ + function moveSurface(id, x, y) { + if ( surfaces[id] ) { + var surface = surfaces[id]; + surface.x = x; + surface.y = y; + sendConfigureNotify(surface); + } + } + + /** + * Resizes a surface + */ + function resizeSurface(id, w, h) { + if ( surfaces[id] ) { + var surface = surfaces[id]; + surface.width = w; + surface.height = h; + console.log(surface); + sendConfigureNotify(surface); + // sendInput('m', [id, 1, surface.x, surface.y, 2, surface.width, surface.height]); + } + } + + ///////////////////////////////////////////////////////////////////////////// + // EVENTS + ///////////////////////////////////////////////////////////////////////////// + + /** + * On Create Surface Event + */ + function onCreateSurface(cmd) { + var id = cmd.get_16(); + var x = cmd.get_16s(); + var y = cmd.get_16s(); + var w = cmd.get_16(); + var h = cmd.get_16(); + var isTemp = cmd.get_bool(); + var surface = { id: id, x: x, y:y, width: w, height: h, isTemp: isTemp }; + surface.positioned = isTemp; + surface.drawQueue = []; + surface.transientParent = 0; + surface.visible = false; + surfaces[id] = surface; + sendConfigureNotify(surface); + + console.debug('Broadway', 'onCreateSurface()', id, x, y, w, h, isTemp); + if ( isTemp ) { + surface.canvas = document.createElement('canvas'); + surface.canvas.width = w; + surface.canvas.height = h; + surface.canvas.style.position = 'absolute'; + surface.canvas.style.left = x + 'px'; + surface.canvas.style.top = y + 'px'; + surface.canvas.style.zIndex = '9999999'; + surface.canvas.style.display = 'none'; + surface.canvas.setAttribute('data-surface-id', id.toString()); + } else { + if ( globalOpts.onCreateSurface ) { + var canvas = globalOpts.onCreateSurface(id, surface); + if ( canvas ) { + canvas.surfaceId = id; + } + } + } + } + + /** + * On Show Surface Event + */ + function onShowSurface(cmd) { + var id = cmd.get_16(); + var surface = surfaces[id]; + + if ( surface ) { + surface.visible = true; + if ( surface.canvas ) { + surface.canvas.style.display = 'inline'; + } + + console.debug('Broadway', 'onShowSurface()', id); + if ( globalOpts.onShowSurface ) { + globalOpts.onShowSurface(id); + } + } + } + + /** + * On Hide Surface Event + */ + function onHideSurface(cmd) { + var id = cmd.get_16(); + var surface = surfaces[id]; + + if ( surface ) { + surface.visible = false; + if ( surface.canvas ) { + surface.canvas.style.display = 'none'; + } + + console.debug('Broadway', 'onHideSurface()', id); + if ( globalOpts.onHideSurface ) { + globalOpts.onHideSurface(id); + } + } + } + + /** + * On Set Transient Event + */ + function onSetTransient(cmd) { + var id = cmd.get_16(); + var parentId = cmd.get_16(); + var surface = surfaces[id]; + + if ( surface ) { + console.debug('Broadway', 'onSetTransient()', id, parentId); + + surface.transientParent = parentId; + if ( globalOpts.onSetTransient ) { + globalOpts.onSetTransient(id, parentId, surface); + } + } + } + + /** + * On Delete Surface Event + */ + function onDeleteSurface(cmd) { + var id = cmd.get_16(); + var surface = surfaces[id]; + + console.debug('Broadway', 'onDeleteSurface()', id); + if ( surface ) { + if ( surface.canvas ) { + if ( surface.canvas.parentNode ) { + surface.canvas.parentNode.removeChild(surface.canvas); + } + } else { + if ( globalOpts.onDeleteSurface ) { + globalOpts.onDeleteSurface(id); + } + } + delete surfaces[id]; + } + } + + /** + * On Move Surface Event + */ + function onMoveSurface(cmd) { + var id = cmd.get_16(); + var ops = cmd.get_flags(); + var surface = surfaces[id]; + + if ( !surface ) { return; } + + var has_pos = ops & 1; + if (has_pos) { + surface.x = cmd.get_16s(); + surface.y = cmd.get_16s(); + } + + var has_size = ops & 2; + if (has_size) { + surface.width = cmd.get_16(); + surface.height = cmd.get_16(); + } + + console.debug('Broadway', 'onMoveSurface()', id, has_pos, has_size, surface); + if ( surface.isTemp ) { + if ( has_pos ) { + var par = surfaces[surface.transientParent] || {x: 0, y: 0}; + console.log([surface.x, par.x], [surface.y, par.y]); + surface.canvas.style.left = (surface.x - par.x) + 'px'; + surface.canvas.style.top = (surface.y - par.y) + 'px'; + } + } else { + if ( globalOpts.onMoveSurface ) { + globalOpts.onMoveSurface(id, has_pos, has_size, surface); + } + } + sendConfigureNotify(surface); + } + + /** + * On Image Data Event + */ + function onImageData(cmd) { + var q = { + op: 'i', + id: cmd.get_16(), + x: cmd.get_16(), + y: cmd.get_16() + }; + + var url = cmd.get_image_url(); + q.img = new Image(); + q.img.src = url; + + //console.debug('Broadway', 'onImageData()', url); + surfaces[q.id].drawQueue.push(q); + + if (!q.img.complete) { + q.img.onload = function() { + cmd.free_image_url (url); + + handleOutstanding(); + }; + return false; + } + cmd.free_image_url(url); + + return true; + } + + /** + * On Copy Rects Event + */ + function onCopyRects(cmd) { + var id = cmd.get_16(); + if ( surfaces[id] ) { + console.debug('Broadway', 'onCopyRects()', id); + + var q = { + op: 'b', + id: id, + rects: [] + }; + + var nrects = cmd.get_16(); + for (var r = 0; r < nrects; r++) { + q.rects.push({ + x: cmd.get_16(), + y: cmd.get_16(), + w: cmd.get_16(), + h: cmd.get_16() + }); + } + + q.dx = cmd.get_16s(); + q.dy = cmd.get_16s(); + surfaces[q.id].drawQueue.push(q); + } + } + + /** + * On Flush Sufrace Event + */ + function onFlushSurface(cmd) { + var id = cmd.get_16(); + var surface = surfaces[id]; + + if ( surface ) { + //console.debug('Broadway', 'onFlushSurface()', id); + + var canvas = surface.canvas; + if ( !surface.isTemp && globalOpts.onFlushSurface ) { + canvas = globalOpts.onFlushSurface(id); + } + + if ( surface && canvas ) { + var commands = surface.drawQueue; + var context = canvas.getContext('2d'); + context.globalCompositeOperation = 'source-over'; + + var i = 0; + var cmd, j, rect; + for (i; i < commands.length; i++) { + cmd = commands[i]; + switch (cmd.op) { + case 'i': // put image data surface + context.globalCompositeOperation = 'source-over'; + context.drawImage(cmd.img, cmd.x, cmd.y); + break; + + case 'b': // copy rects + context.save(); + context.beginPath(); + + for (j = 0; j < cmd.rects.length; j++) { + rect = cmd.rects[j]; + context.rect(rect.x, rect.y, rect.w, rect.h); + } + + context.clip(); + context.drawImage(surface.canvas, cmd.dx, cmd.dy); + context.restore(); + break; + + default: + console.warn('Broadway', 'onFlushSurface()', 'Invalid command', cmd.op, cmd); + } + } + } + } + } + + /** + * On Grab Pointer Event + */ + function onGrabPointer(cmd) { + var id = cmd.get_16(); + var ownerEvents = cmd.get_bool(); + + // TODO + sendInput('g', []); + console.debug('Broadway', 'onGrabPointer()', id, ownerEvents); + } + + /** + * On Ungrab Pointer Event + */ + function onUngrabPointer() { + sendInput('u', []); + + // TODO + console.debug('Broadway', 'onUngrabPointer()'); + } + + ///////////////////////////////////////////////////////////////////////////// + // ACTIONS + ///////////////////////////////////////////////////////////////////////////// + + /** + * Handle outstanding commands + */ + function handleOutstanding() { + while ( outstandingCommands.length > 0 ) { + var cmd = outstandingCommands.shift(); + if ( !handleCommands(cmd) ) { + outstandingCommands.unshift(cmd); + return; + } + } + } + + /** + * Handles a list of commands + */ + function handleCommands(cmd) { + var mapping = { + 'l': doLogin, + 'L': doLoggedIn, + 'D': doDisconnect, + 's': onCreateSurface, + 'S': onShowSurface, + 'H': onHideSurface, + 'p': onSetTransient, + 'd': onDeleteSurface, + 'm': onMoveSurface, + 'i': onImageData, + 'b': onCopyRects, + 'f': onFlushSurface, + 'g': onGrabPointer, + 'u': onUngrabPointer + }; + + while (cmd.pos < cmd.length) { + var command = cmd.get_char(); + lastSerial = cmd.get_32(); + + //console.debug('Broadway', 'handleCommands()', command); + + if ( mapping[command] ) { + if ( mapping[command](cmd) === false ) { + return false; + } + } else { + console.error('Invalid command', command); + } + } + + return true; + } + + /** + * Send configuration notification + */ + function sendConfigureNotify(surface) { + if ( !connected ) { return; } + + sendInput('w', [surface.id, surface.x, surface.y, surface.width, surface.height]); + } + + /** + * Send input + */ + function sendInput(cmd, args) { + if ( !connected ) { return; } + + if ( inputSocket != null ) { + inputSocket.send(cmd + ([lastSerial, lastTimeStamp].concat(args)).join(',')); + } + } + + /** + * Update last input state + */ + function updateForEvent(ev) { + lastState &= ~(GDK_SHIFT_MASK|GDK_CONTROL_MASK|GDK_MOD1_MASK); + if (ev.shiftKey) lastState |= GDK_SHIFT_MASK; + if (ev.ctrlKey) lastState |= GDK_CONTROL_MASK; + if (ev.altKey) lastState |= GDK_MOD1_MASK; + lastTimeStamp = ev.timeStamp; + } + + /** + * Get GDK button mask from DOM Event + */ + function getButtonMask (button) { + if (button === 1) return GDK_BUTTON1_MASK; + if (button === 2) return GDK_BUTTON2_MASK; + if (button === 3) return GDK_BUTTON3_MASK; + if (button === 4) return GDK_BUTTON4_MASK; + if (button === 5) return GDK_BUTTON5_MASK; + return 0; + } + + /** + * Get GDK button + */ + function getKeyEvent(keyCode, pop) { + var i, fev = null; + for (i = keyDownList.length-1; i >= 0; i--) { + if ( keyDownList[i].keyCode === keyCode ) { + if ((typeof pop !== 'undefined') && pop) + fev = keyDownList.splice(i, 1)[0]; + else + fev = keyDownList[i]; + break; + } + } + return fev; + } + + /** + * Cancels an event + */ + function cancelEvent(ev) { + ev = ev ? ev : window.event; + if (ev.stopPropagation) ev.stopPropagation(); + if (ev.preventDefault) ev.preventDefault(); + ev.cancelBubble = true; + ev.cancel = true; + ev.returnValue = false; + return false; + } + + /** + * Copy the key event object + */ + function copyKeyEvent(ev) { + var members = ['type', 'keyCode', 'charCode', 'which', 'altKey', 'ctrlKey', 'shiftKey', 'keyLocation', 'keyIdentifier']; + var i, obj = {}; + for (i = 0; i < members.length; i++) { + if (typeof ev[members[i]] !== 'undefined') + obj[members[i]] = ev[members[i]]; + } + return obj; + } + + /** + * Keyboard Down + */ + function handleKeyDown(id, ev) { + updateForEvent(ev); + + if ( surfaces[id] ) { + var suppress = false; + var fev = copyKeyEvent(ev); + var keysym = getKeysymSpecial(ev); + fev.keysym = keysym; + + console.debug('Broadway', 'handleKeyDown()', fev, keysym); + + if ( keysym ) { + if ( !ignoreKeyEvent(ev) ) { + sendInput('k', [id, keysym, lastState]); + } + suppress = true; + } + + if ( !ignoreKeyEvent(ev) ) { + keyDownList.push(fev); + } + + if ( suppress ) { + return cancelEvent(ev); + } + + } + + return true; + } + + /** + * Keyboard Up + */ + function handleKeyUp(id, ev) { + updateForEvent(ev); + + if ( surfaces[id] ) { + var fev = getKeyEvent(ev.keyCode, true); + var keysym = fev ? fev.keysym : 0; + + console.debug('Broadway', 'handleKeyUp()', fev, keysym); + if ( keysym > 0 ) { + sendInput('K', [id, keysym, lastState]); + } + } + + return cancelEvent(ev); + } + + /** + * Keyboard Press + */ + function handleKeyPress(id, ev) { + updateForEvent(ev); + + if ( surfaces[id] ) { + + if (((ev.which !== 'undefined') && (ev.which === 0)) || getKeysymSpecial(ev)) { + return cancelEvent(ev); + } + + var keysym = getKeysym(ev); + var kdlen = keyDownList.length; + + console.debug('Broadway', 'handleKeyPress()', keysym); + + if ( kdlen > 0 ) { + keyDownList[kdlen-1].keysym = keysym; + } + + if ( keysym > 0 ) { + sendInput('k', [id, keysym, lastState]); + } + } + + return cancelEvent(ev); + } + + /** + * Mouse Wheel + */ + function handleMouseWheel(id, ev, opts) { + updateForEvent(ev); + if ( surfaces[id] ) { + var offset = ev.detail ? ev.detail : -ev.wheelDelta; + var dir = offset > 0 ? 1 : 0; + var cid = getRelativeLayer(id, ev, opts); + + console.debug('Broadway', 'handleMouseWheel()', dir); + sendInput('s', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState, dir]); + } + return true; + } + + /** + * Mouse Movment + */ + function handleMouseMove(id, ev, opts) { + updateForEvent(ev); + if ( surfaces[id] ) { + var cid = getRelativeLayer(id, ev, opts); + //console.debug('Broadway', 'handleMouseMove()', opts); + sendInput('m', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState]); + } + return true; + } + + /** + * Mouse Down + */ + function handleMouseDown(id, ev, opts) { + updateForEvent(ev); + var button = ev.button + 1; + var cid = getRelativeLayer(id, ev, opts); + lastState = lastState | getButtonMask (button); + + if ( surfaces[id] ) { + console.debug('Broadway', 'handleMouseDown()', opts); + sendInput('b', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState, button]); + } + return true; + } + + /** + * Mouse Up + */ + function handleMouseUp(id, ev, opts) { + updateForEvent(ev); + var button = ev.button + 1; + var cid = getRelativeLayer(id, ev, opts); + lastState = lastState & ~getButtonMask (button); + if ( surfaces[id] ) { + console.debug('Broadway', 'handleMouseUp()', opts); + sendInput('B', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState, button]); + } + return true; + } + + function handleMouseOver(id, ev, opts) { + updateForEvent(ev); + var cid = getRelativeLayer(id, ev, opts); + if ( surfaces[id] ) { + //console.debug('Broadway', 'handleMouseOver()', opts); + sendInput('e', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState, GDK_CROSSING_NORMAL]); + } + return true; + } + + function handleMouseOut(id, ev, opts) { + updateForEvent(ev); + var cid = getRelativeLayer(id, ev, opts); + if ( surfaces[id] ) { + //console.debug('Broadway', 'handleMouseOut()', opts); + sendInput('l', [id, cid, ev.pageX, ev.pageY, opts.mx, opts.my, lastState, GDK_CROSSING_NORMAL]); + } + return true; + } + + function handleResize(ev) { + if ( connected ) { + sendInput('d', [window.innerWidth, window.innerHeight]); + } + } + + ///////////////////////////////////////////////////////////////////////////// + // API + ///////////////////////////////////////////////////////////////////////////// + + /** + * On message() in socket + */ + function onSocketMessage(message) { + var cmd = new BinCommands(message); + outstandingCommands.push(cmd); + if ( outstandingCommands.length === 1 ) { + handleOutstanding(); + } + } + + /** + * Connects to Broadway server + */ + function connect(hostname, cb, cbclose) { + cb = cb || function() {}; + cbclose = cbclose || function() {}; + + function onSocketOpen() { + connected = true; + + handleResize(); + + if ( globalOpts.onSocketOpen ) { + globalOpts.onSocketOpen(); + } + + cb(false); + } + + function onSocketClose() { + if ( globalOpts.onSocketClose ) { + globalOpts.onSocketClose(); + } + } + + console.info('Broadway', 'Connecting to', hostname); + connection = new WebSocket(hostname, 'broadway'); + connection.binaryType = 'arraybuffer'; + + connection.onerror = function() { + if ( !connected ) { + cb('Connection timeout?'); + } + }; + + connection.onopen = function() { + inputSocket = connection; + + onSocketOpen(); + }; + connection.onclose = function() { + onSocketClose(); + + connection = null; + inputSocket = null; + + cbclose(); + }; + connection.onmessage = function(ev) { + onSocketMessage(ev.data); + }; + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + window.GTK = window.GTK || {}; + + window.GTK.disconnect = function() { + if ( connection && connected ) { + connection.close(); + } + + Object.keys(surfaces).forEach(function(i) { + if ( i && surfaces[i] ) { + if ( globalOpts.onDeleteSurface ) { + globalOpts.onDeleteSurface(i); + } + } + }); + + connected = false; + surfaces = {}; + lastTimeStamp = 0; + lastState = null; + keyDownList = []; + lastSerial = 0; + outstandingCommands = []; + + connection.onclose(); + }; + + /** + * Connect to broadway + * + * Available callbacks in opts: + * + * onImageData REQUIRED Return your canvas object here + * + * onCreateSurface + * onShowSurface + * onHideSurface + * onSetTransient + * onDeleteSurface + * onMoveSurface + * onFlushSurface + * + * onSocketOpen + * onSocketClose + * + */ + window.GTK.connect = function(host, opts, cb, cbclose) { + if ( connection ) { + console.error('Broadway', 'Only one connection allowed!'); + return; + } + + globalOpts = opts || {}; + connect(host, cb, cbclose); + }; + + /** + * Closes a surface + */ + window.GTK.close = function(id) { + closeSurface(id); + } + + /** + * Moves a surface + */ + window.GTK.move = function(id, x, y) { + moveSurface(id, x, y); + }; + + /** + * Resizes a surface + */ + window.GTK.resize = function(id, w, h) { + resizeSurface(id, w, h); + }; + + /** + * Inject keyboard/mouse event + */ + window.GTK.inject = function(id, type, ev, opts) { + if ( !connection ) { + console.error('Broadway', 'No connections created!'); + return false; + } + + switch ( type ) { + case 'resize' : + return handleResize(); + break; + + case 'mousewheel' : + return handleMouseWheel(id, ev, opts); + break; + + case 'mousemove' : + return handleMouseMove(id, ev, opts); + break; + + case 'mousedown' : + return handleMouseDown(id, ev, opts); + break; + + case 'mouseup' : + return handleMouseUp(id, ev, opts); + break; + + case 'keypress' : + return handleKeyPress(id, ev, opts); + break; + + case 'keyup' : + return handleKeyUp(id, ev, opts); + break; + + case 'keydown' : + return handleKeyDown(id, ev, opts); + break; + + case 'mouseout' : + return handleMouseOver(id, ev, opts); + break; + + case 'mouseover' : + return handleMouseOver(id, ev, opts); + break; + + default: + console.warn('Broadway', 'inject()', 'invalid type', type); + break; + } + + return true; + }; + +})(); diff --git a/build/htdocs/dist/packages/default/Broadway/extension.css b/build/htdocs/dist/packages/default/Broadway/extension.css new file mode 100644 index 0000000..eba6275 --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/extension.css @@ -0,0 +1,19 @@ + +/*.Window_BroadwayConnectionWindow .WindowWrapper { +} + +.Window_BroadwayConnectionWindow .WindowWrapper { +}*/ + +.Window_BroadwayConnectionWindow .WindowWrapper .supported { + color : #33dd33; +} + +.Window_BroadwayConnectionWindow .WindowWrapper .unsupported { + color : #dd3333; +} + +.Window_BroadwayConnectionWindow .WindowWrapper > * { + margin : 10px; +} + diff --git a/build/htdocs/dist/packages/default/Broadway/extension.js b/build/htdocs/dist/packages/default/Broadway/extension.js new file mode 100644 index 0000000..e9e053b --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/extension.js @@ -0,0 +1,459 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Window, Utils, API, GUI) { + 'use strict'; + + var _isConnected = false; + var _connWindow = null; + var _scheme = null; + + function createConnectionWindow() { + if ( _connWindow ) { return; } + + function addWindow() { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + _connWindow = new BroadwayConnectionWindow(_scheme); + wm.addWindow(_connWindow, true); + } + } + + if ( _scheme ) { + addWindow(); + return; + } + + var url = API.getApplicationResource('ExtensionBroadway', 'scheme.html'); + var scheme = GUI.createScheme(url); + scheme.load(function(error, result) { + if ( result ) { + _scheme = scheme; + addWindow(); + } + }); + } + + function destroyConnectionWindow() { + if ( _connWindow ) { + _connWindow._close(); + _connWindow = null; + } + } + + function createNotification() { + var wm = OSjs.Core.getWindowManager(); + + function displayMenu(ev) { + var menuItems = []; + if ( _isConnected ) { + menuItems.push({ + title: 'Disconnect from Broadway server', + onClick: function() { + window.GTK.disconnect(); + } + }); + } else { + menuItems.push({ + title: 'Connect to Broadway server', + onClick: function() { + createConnectionWindow(); + } + }); + } + + OSjs.API.createMenu(menuItems, ev); + } + + if ( wm ) { + removeNotification(); + + wm.createNotificationIcon('BroadwayService', { + image: API.getIcon('status/network-transmit-receive.png'), + onContextMenu: function(ev) { + displayMenu(ev); + return false; + }, + onClick: function(ev) { + displayMenu(ev); + return false; + } + }); + } + } + + function removeNotification() { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.removeNotificationIcon('BroadwayService'); + } + } + + function actionOnWindow(id, cb) { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + var win = wm.getWindow('BroadwayWindow' + id); + if ( win ) { + return cb(win); + } + } + return null; + } + + ///////////////////////////////////////////////////////////////////////////// + // CLIENT WINDOW + ///////////////////////////////////////////////////////////////////////////// + + /** + * Main Window Constructor + */ + var BroadwayConnectionWindow = function(scheme) { + Window.apply(this, ['BroadwayConnectionWindow', { + title: 'Broadway Client', + allow_maximize: false, + allow_reszie: false, + gravity: 'center', + width: 400, + height: 250 + }, null, scheme]); + }; + + BroadwayConnectionWindow.prototype = Object.create(Window.prototype); + + BroadwayConnectionWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + var self = this; + + var supported = OSjs.Helpers.Broadway ? true : false; + var lbl = 'Broadway support is ' + (supported ? 'loaded' : 'not loaded'); + var ws; + + scheme.render(this, 'ConnectionWindow', root); + + var connectInput = scheme.find(this, 'GtkConnection').set('disabled', !supported); + var procConnection = scheme.find(this, 'ProcConnection').set('disabled', !supported); + var connectButton = scheme.find(this, 'ConnectButton').set('disabled', !supported); + + var procInput = scheme.find(this, 'StartProc').set('disabled', true); + var procButton = scheme.find(this, 'StartButton').set('disabled', true); + + var statusText = scheme.find(this, 'StatusText').set('value', lbl); + + connectButton.on('click', function() { + if ( self._destroyed ) { return; } + + if ( ws ) { + ws.close(); + ws = null; + } + + ws = new WebSocket(procConnection.get('value'), 'broadway-spawner'); + ws.onerror = function() { + alert('Failed to connect to spawner'); + }; + ws.onopen = function() { + if ( self._destroyed ) { return; } + procButton.set('disabled', false); + }; + ws.onclose = function() { + if ( self._destroyed ) { return; } + procButton.set('disabled', true); + }; + + connectButton.set('disabled', true); + statusText.set('value', 'Connecting...'); + + OSjs.Helpers.Broadway.init(connectInput.get('value'), function(error) { + if ( self._destroyed ) { return; } + + if ( error ) { + console.warn('BroadwayClient', error); + statusText.set('value', error); + connectButton.set('disabled', false); + } else { + procInput.set('disabled', false); + connectButton.set('disabled', true); + statusText.set('value', 'Connected!'); + } + }, function() { + if ( self._destroyed ) { return; } + + statusText.set('value', 'Disconnecting...'); + connectButton.set('disabled', false); + procInput.set('disabled', true); + + if ( ws ) { + ws.close(); + ws = null; + } + }); + }); + + procButton.on('click', function() { + if ( self._destroyed ) { return; } + if ( ws ) { + ws.send(JSON.stringify({ + method: 'launch', + argument: procInput.get('value') + })); + } + }); + + return root; + }; + + BroadwayConnectionWindow.prototype.destroy = function() { + _connWindow = null; + return Window.prototype.destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // BROADWAY WINDOW + ///////////////////////////////////////////////////////////////////////////// + + /** + * Dialog Window + */ + var BroadwayWindow = function(id, x, y, w, h) { + Window.apply(this, ['BroadwayWindow' + id, { + w: w, + h: h, + title: 'Broadway Window ' + id.toString(), + min_width: 100, + min_height: 100, + allow_resize: false, + allow_minimize: false, + allow_maximize: false, + allow_session: false, + key_capture: true // IMPORTANT + }]); + + this._broadwayId = id; + this._canvas = document.createElement('canvas'); + }; + + BroadwayWindow.prototype = Object.create(Window.prototype); + + BroadwayWindow.prototype.init = function() { + var self = this; + var root = Window.prototype.init.apply(this, arguments); + this._canvas.width = this._dimension.w; + this._canvas.height = this._dimension.h; + + + function getMousePos(ev) { + return { + x:ev.pageX - self._position.x, + y:ev.pageY - self._position.y - 26 // FIXME + }; + } + + function inject(type, ev) { + var pos = getMousePos(ev); + return window.GTK.inject(self._broadwayId, type, ev, { + wx: self._position.x, + wy: self._position.y, + mx: parseInt(pos.x, 0), + my: parseInt(pos.y, 0) + }); + } + + Utils.$bind(root, 'mouseover', function(ev) { + return inject('mouseover', ev); + }); + Utils.$bind(root, 'mouseout', function(ev) { + return inject('mouseout', ev); + }); + Utils.$bind(root, 'mousemove', function(ev) { + return inject('mousemove', ev); + }); + Utils.$bind(root, 'mousedown', function(ev) { + return inject('mousedown', ev); + }); + Utils.$bind(root, 'mouseup', function(ev) { + return inject('mouseup', ev); + }); + Utils.$bind(root, 'DOMMouseScroll', function(ev) { + return inject('mousewheel', ev); + }); + Utils.$bind(root, 'mousewheel', function(ev) { + return inject('mousewheel', ev); + }); + + root.appendChild(this._canvas); + return root; + }; + + BroadwayWindow.prototype.destroy = function() { + Window.prototype.destroy.apply(this, arguments); + this._canvas = null; + }; + + BroadwayWindow.prototype._inited = function() { + Window.prototype._inited.apply(this, arguments); + + this._onChange('move', true); + }; + + BroadwayWindow.prototype._close = function() { + if ( !Window.prototype._close.apply(this, arguments) ) { + return false; + } + + window.GTK.close(this._broadwayId); + + return true; + }; + + BroadwayWindow.prototype._resize = function(w, h) { + if ( !Window.prototype._resize.apply(this, [w, h, true]) ) { + return false; + } + + function resizeCanvas(canvas, w, h) { + var tmpCanvas = canvas.ownerDocument.createElement("canvas"); + tmpCanvas.width = canvas.width; + tmpCanvas.height = canvas.height; + var tmpContext = tmpCanvas.getContext("2d"); + tmpContext.globalCompositeOperation = "copy"; + tmpContext.drawImage(canvas, 0, 0, tmpCanvas.width, tmpCanvas.height); + + canvas.width = w; + canvas.height = h; + + var context = canvas.getContext("2d"); + + context.globalCompositeOperation = "copy"; + context.drawImage(tmpCanvas, 0, 0, tmpCanvas.width, tmpCanvas.height); + } + + if ( this._canvas ) { + resizeCanvas(this._canvas, w, h); + } + + return true; + }; + + BroadwayWindow.prototype._onKeyEvent = function(ev, type) { + window.GTK.inject(this._broadwayId, type, ev); + }; + + BroadwayWindow.prototype._onChange = function(ev, byUser) { + if ( !byUser ) { return; } + + if ( ev === 'move' ) { + window.GTK.move(this._broadwayId, this._position.x, this._position.y); + } else if ( ev === 'resize' ) { + window.GTK.resize(this._broadwayId, this._dimension.w, this._dimension.h); + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.API.addHook('onSessionLoaded', function() { + createNotification(); + }); + OSjs.API.addHook('onLogout', function() { + removeNotification(); + destroyConnectionWindow(); + }); + + OSjs.Helpers.Broadway = {}; + OSjs.Helpers.Broadway.init = function(host, cb, cbclose) { + window.GTK.connect(host, { + onSocketOpen: function() { + _isConnected = true; + createNotification(); + }, + + onSocketClose: function() { + _isConnected = false; + createNotification(); + }, + + onSetTransient: function(id, parentId, surface) { + return actionOnWindow(parentId, function(win) { + if ( win._canvas && surface.canvas ) { + if ( win._canvas.parentNode ) { + win._canvas.parentNode.appendChild(surface.canvas); + } + } + }); + }, + + onFlushSurface: function(id, q) { + return actionOnWindow(id, function(win) { + return win._canvas; + }); + }, + + onDeleteSurface: function(id) { + return actionOnWindow(id, function(win) { + return win._close(); + }); + }, + + onShowSurface: function(id) { + return actionOnWindow(id, function(win) { + return win._restore(); + }); + }, + + onHideSurface: function(id) { + return actionOnWindow(id, function(win) { + return win._minimize(); + }); + }, + + onMoveSurface: function(id, has_pos, has_size, surface) { + return actionOnWindow(id, function(win) { + /* + if ( has_pos ) { + win._move(x, y); + } + */ + if ( has_size ) { + win._resize(surface.width, surface.height); + } + }); + }, + + onCreateSurface: function(id, surface) { + var wm = OSjs.Core.getWindowManager(); + var win = new BroadwayWindow(id, surface.x, surface.y, surface.width, surface.height); + wm.addWindow(win); + return win._canvas; + } + + }, cb, cbclose); + }; + +})(OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Broadway/metadata.json b/build/htdocs/dist/packages/default/Broadway/metadata.json new file mode 100644 index 0000000..82682ec --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/metadata.json @@ -0,0 +1,33 @@ +{ + "className": "ExtensionBroadway", + "type": "extension", + "enabled": false, + "config": {}, + "build": { + "copy": [ + "scheme.html", + "metadata.json", + "broadway.js", + "extension.js", + "extension.css", + "api.php" + ] + }, + "sources": [ + { + "type": "javascript", + "src": "packages/default/Broadway/broadway.js" + }, + { + "type": "stylesheet", + "src": "packages/default/Broadway/extension.css" + }, + { + "type": "javascript", + "src": "packages/default/Broadway/extension.js" + } + ], + "path": "default/Broadway", + "repo": "default", + "preload": [] +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Broadway/scheme.html b/build/htdocs/dist/packages/default/Broadway/scheme.html new file mode 100644 index 0000000..acd5375 --- /dev/null +++ b/build/htdocs/dist/packages/default/Broadway/scheme.html @@ -0,0 +1,35 @@ + + + + + Start new process + + + ws://10.0.0.113:8085/socket-bin + + + ws://10.0.0.113:9000 + + + Connect + + + + + Start new process + + + /usr/bin/gtk3-demo + + + Launch + + + + + Checking broadway support... + + + + + diff --git a/build/htdocs/dist/packages/default/Calculator/combined.css b/build/htdocs/dist/packages/default/Calculator/combined.css new file mode 100644 index 0000000..bc6be18 --- /dev/null +++ b/build/htdocs/dist/packages/default/Calculator/combined.css @@ -0,0 +1,142 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationCalculatorWindow { +}*/ + +.ApplicationCalculatorWindow gui-text { + display : block; + margin : 8px; + height : 50px; +} + +.ApplicationCalculatorWindow gui-text > input { + font-size : 30px; + font-family : Monospace; + line-height : 50px; + text-align : right; +} + +.ApplicationCalculatorWindow.noop { + opacity : .1; +} + +.ApplicationCalculatorWindow.NaN { + -webkit-animation:CalculatorSuck 3s linear; + -moz-animation:CalculatorSuck 3s linear; + -ms-animation:CalculatorSuck 3s linear; + -o-animation:CalculatorSuck 3s linear; + animation:CalculatorSuck 3s linear; +} + +@-webkit-keyframes CalculatorSuck { + 100% { + -webkit-transform: scale(0) rotate(360deg); + transform: scale(0) rotate(360deg); + -webkit-opacity: 0; + } + + 50% { + -webkit-transform: scale(.5) rotate(180deg); + transform: scale(.5) rotate(180deg); + } + + 10% { + -webkit-transform: scale(1.5) rotate(0deg); + transform: scale(1.5) rotate(0deg); + } + + 0% { + -webkit-opacity: 1; + } +} + +@-moz-keyframes CalculatorSuck { + 100% { + -moz-transform: scale(0) rotate(360deg); + transform: scale(0) rotate(360deg); + -moz-opacity: 0; + } + + 50% { + -moz-transform: scale(.5) rotate(180deg); + transform: scale(.5) rotate(180deg); + } + + 10% { + -moz-transform: scale(1.5) rotate(0deg); + transform: scale(1.5) rotate(0deg); + } + + 0% { + -moz-opacity: 1; + } +} + +@-o-keyframes CalculatorSuck { + 100% { + -o-transform: scale(0) rotate(360deg); + transform: scale(0) rotate(360deg); + -o-opacity: 0; + } + + 50% { + -o-transform: scale(.5) rotate(180deg); + transform: scale(.5) rotate(180deg); + } + + 10% { + -o-transform: scale(1.5) rotate(0deg); + transform: scale(1.5) rotate(0deg); + } + + 0% { + -o-opacity: 1; + } +} + +@keyframes CalculatorSuck { + 100% { + transform: scale(0) rotate(360deg); + opacity: 0; + } + + 50% { + transform: scale(.5) rotate(180deg); + } + + 10% { + transform: scale(1.5) rotate(0deg); + } + + 0% { + opacity: 1; + } +} diff --git a/build/htdocs/dist/packages/default/Calculator/combined.js b/build/htdocs/dist/packages/default/Calculator/combined.js new file mode 100644 index 0000000..150eb27 --- /dev/null +++ b/build/htdocs/dist/packages/default/Calculator/combined.js @@ -0,0 +1,256 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, Utils, API, VFS, GUI) { + /*eslint eqeqeq: "off"*/ + 'use strict'; + + var ops = { + dec : '.', + perc : '%', + minus : '-', + plus : '+', + multiply : '*', + divide : '/' + }; + + var keys = { + 107: 'plus', + 109: 'minus', + 106: 'multiply', + 111: 'divide', + 110: 'dec', + 188: 'dec', + 13: 'equal', + 47: 'divide', + 46: 'CE', + 45: 'minus', + 44: 'dec', + 43: 'plus', + 42: 'multiply', + 27: 'CE', + 8: 'nbs' + }; + + var labels = { + 'CE' : 'CE', 'AC' : 'AC', 'perc' : '%', 'plus' : '+', + '7' : '7', '8' : '8', '9' : '9', 'minus' : '-', + '4' : '4', '5' : '5', '6' : '6', 'multiply' : 'x', + '1' : '1', '2' : '2', '3' : '3', 'divide' : '÷', + '0' : '0', 'swap': '±', 'dec' : ',', 'equal' : '=' + }; + + var buttons = [ + ['CE', 'AC', 'perc', 'plus'], + ['7', '8', '9', 'minus'], + ['4', '5', '6', 'multiply'], + ['1', '2', '3', 'divide'], + ['0', 'dec', 'equal'] + ]; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationCalculatorWindow(app, metadata, scheme) { + Window.apply(this, ['ApplicationCalculatorWindow', { + icon: metadata.icon, + title: metadata.name, + allow_resize: false, + allow_maximize: false, + width: 220, + height: 340 + }, app, scheme]); + + this.total = 0; + this.entries = []; + this.temp = ''; + } + + ApplicationCalculatorWindow.prototype = Object.create(Window.prototype); + ApplicationCalculatorWindow.constructor = Window.prototype; + + ApplicationCalculatorWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + var self = this; + + // Load and gel.set up scheme (GUI) here + scheme.render(this, 'CalculatorWindow', root); + + this._scheme.find(this, 'Output').on('keypress', function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + + var keyCode = ev.which || ev.keyCode; + if ( (keyCode > 95) && (keyCode < 106) ) { + self.operation(keyCode - 96); + } else if ( (keyCode > 47) && (keyCode < 58) ) { + self.operation(keyCode - 48); + } else { + if ( typeof keys[keyCode] !== 'undefined' ) { + self.operation(keys[keyCode]); + } + } + }).set('readonly', true).focus(); + + root.querySelectorAll('gui-button').forEach(function(el, idx) { + var r = parseInt(idx / 4, 10); + var c = idx % 4; + var op = buttons[r][c]; + + el = scheme.get(el); + el.set('value', labels[op] || ''); + if ( op === null ) { + Utils.$addClass(el.$element, 'noop'); + el.set('disabled', true); + } else { + el.on('click', function() { + self.operation(op); + }); + } + }); + + return root; + }; + + ApplicationCalculatorWindow.prototype.operation = function(val) { + var self = this; + + if (this.temp == '' && ['plus', 'minus', 'multiply', 'divide'].indexOf(val) !== -1) { + this.temp = this._scheme.find(this, 'Output').get('value'); + } + + function getAnswer() { + var nt = Number(self.entries[0]); + + for ( var i = 1; i < self.entries.length; i++ ) { + var nextNum = Number(self.entries[i + 1]); + var symbol = self.entries[i]; + if (symbol === '+') { + nt += nextNum; + } else if ( symbol === '-' ) { + nt -= nextNum; + } else if ( symbol === '*' ) { + nt *= nextNum; + } else if ( symbol === '/' ) { + nt /= nextNum; + } + i++; + } + + if ( nt < 0 ) { + nt = '-' + Math.abs(nt); + } + + return nt; + } + + var output = (function() { + // Kudos http://codepen.io/GeoffStorbeck/pen/zxgaqw + + if ( !isNaN(val) || val === 'dec' ) { // Number + self.temp += val === 'dec' ? ops[val] : val; + + return self.temp.substring(0,10); + } else if ( val === 'AC' ) { // Clear + self.entries = []; + self.temp = ''; + self.total = 0; + + return ''; + } else if ( val === 'CE' ) { // Clear Last Entry + self.temp = ''; + + return ''; + } else if ( val === 'equal' ) { // Equal + self.entries.push(self.temp); + + var nt = getAnswer(); + self.entries = []; + self.temp = ''; + + return nt; + } else { + if ( typeof ops[val] !== 'undefined' ) { + val = ops[val]; + } + + self.entries.push(self.temp); + self.entries.push(val); + self.temp = ''; + } + + return null; + })(); + + if ( output !== null ) { + if ( !String(output).length ) { + output = String(0); + } + + if ( output === 'NaN' || output === 'Infinity' || isNaN(output) || !isFinite(output) ) { + Utils.$addClass(this._$element, 'NaN'); + + setTimeout(function() { + Utils.$removeClass(self._$element, 'NaN'); + }, 3000); + } + + this._scheme.find(this, 'Output').set('value', String(output)); + } + + this._scheme.find(this, 'Output').focus(); + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationCalculator = function(args, metadata) { + Application.apply(this, ['ApplicationCalculator', args, metadata]); + }; + + ApplicationCalculator.prototype = Object.create(Application.prototype); + ApplicationCalculator.constructor = Application; + + ApplicationCalculator.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.apply(this, arguments); + + this._addWindow(new ApplicationCalculatorWindow(this, metadata, scheme)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationCalculator = OSjs.Applications.ApplicationCalculator || {}; + OSjs.Applications.ApplicationCalculator.Class = Object.seal(ApplicationCalculator); + +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Calculator/metadata.json b/build/htdocs/dist/packages/default/Calculator/metadata.json new file mode 100644 index 0000000..e5d0756 --- /dev/null +++ b/build/htdocs/dist/packages/default/Calculator/metadata.json @@ -0,0 +1,37 @@ +{ + "className": "ApplicationCalculator", + "name": "Calculator", + "names": { + "bg_Bg": "Клакулатор", + "fr_FR": "Calculatrice", + "it_IT": "Calcolatrice", + "ko_KR": "계산기", + "nl_NL": "Rekenmachine", + "no_NO": "Kalkulator", + "pl_PL": "Kalkulator", + "ru_RU": "Калькулятор", + "sk_SK": "Kalkulačka", + "tr_TR": "Hesap Makinesi", + "vi_VN": "Máy tính" + }, + "icon": "apps/calc.png", + "category": "office", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Calculator", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Calculator/scheme.html b/build/htdocs/dist/packages/default/Calculator/scheme.html new file mode 100644 index 0000000..fbcf971 --- /dev/null +++ b/build/htdocs/dist/packages/default/Calculator/scheme.html @@ -0,0 +1,87 @@ + + + + + 0 + + + + + + + X + + + X + + + X + + + X + + + + + + X + + + X + + + X + + + X + + + + + + X + + + X + + + X + + + X + + + + + + X + + + X + + + X + + + X + + + + + + X + + + X + + + X + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/CoreWM/animations.css b/build/htdocs/dist/packages/default/CoreWM/animations.css new file mode 100644 index 0000000..8134b98 --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/animations.css @@ -0,0 +1,225 @@ + +/* Animations */ +@-webkit-keyframes fadeIn { from { opacity:0; } to { opacity:1; } } +@-moz-keyframes fadeIn { from { opacity:0; } to { opacity:1; } } +@-o-keyframes fadeIn { from { opacity:0; } to { opacity:1; } } +@keyframes fadeIn { from { opacity:0; } to { opacity:1; } } + +@-webkit-keyframes fadeOut { from { opacity:1; } to { opacity:0; } } +@-moz-keyframes fadeOut { from { opacity:1; } to { opacity:0; } } +@-o-keyframes fadeOut { from { opacity:1; } to { opacity:0; } } +@keyframes fadeOut { from { opacity:1; } to { opacity:0; } } + +@-webkit-keyframes windowloadinganim { + to { + -webkit-transform: rotate( 180deg ); + } +} +@-moz-keyframes windowloadinganim { + to { + -moz-transform: rotate( 180deg ); + } +} +@-o-keyframes windowloadinganim { + to { + -o-transform: rotate( 180deg ); + } +} +@keyframes windowloadinganim { + to { + transform: rotate( 180deg ); + } +} + +@-webkit-keyframes show { + 50% { -webkit-transform: scale(1.03); } +} +@-moz-keyframes show { + 50% { -moz-transform: scale(1.03); } +} +@keyframes show { + 50% { transform: scale(1.03); } +} + +@-webkit-keyframes hide { + 50% { -webkit-transform: scale(0.97); } + 100% { opacity: 0; -webkit-transform: scale(0.90); } +} +@-moz-keyframes hide { + 50% { -moz-transform: scale(0.97); } + 100% { opacity: 0; -moz-transform: scale(0.90); } +} +@keyframes hide { + 50% { transform: scale(0.97); } + 100% { opacity: 0; transform: scale(0.90); } +} + +@-webkit-keyframes pulse { + 0% {-webkit-transform: scale(0.95); opacity: 0;} + 8% {-webkit-transform: scale(1.0); opacity: 0;} + 15% {-webkit-transform: scale(1.001); opacity: 1;} + 30% {-webkit-transform: scale(1.005); opacity: 1;} + 100% {opacity: 0; -webkit-transform: scale(1);} +} +@-moz-keyframes pulse { + 0% {-moz-transform: scale(0.95); opacity: 0;} + 8% {-moz-transform: scale(1.0); opacity: 0;} + 15% {-moz-transform: scale(1.001); opacity: 1;} + 30% {-moz-transform: scale(1.005); opacity: 1;} + 100% {opacity: 0; -moz-transform: scale(1);} +} +@keyframes pulse { + 0% {transform: scale(0.95); opacity: 0;} + 8% {transform: scale(1.0); opacity: 0;} + 15% {transform: scale(1.001); opacity: 1;} + 30% {transform: scale(1.005); opacity: 1;} + 100% {opacity: 0; transform: scale(1);} +} + +@-webkit-keyframes pulseback { + 50% { opacity: .35; } +} +@-moz-keyframes pulseback { + 50% { opacity: .35; } +} +@keyframes pulseback { + 50% { opacity: .35; } +} + +@-webkit-keyframes attention { + 0% { -webkit-transform: scale(1); } + 30% { -webkit-transform: scale(1); } + 40% { -webkit-transform: scale(1.02); } + 50% { -webkit-transform: scale(1); } + 60% { -webkit-transform: scale(1); } + 70% { -webkit-transform: scale(1.005); } + 80% { -webkit-transform: scale(1); } + 100% { -webkit-transform: scale(1); } +} +@-moz-keyframes attention { + 0% { -moz-transform: scale(1); } + 30% { -moz-transform: scale(1); } + 40% { -moz-transform: scale(1.02); } + 50% { -moz-transform: scale(1); } + 60% { -moz-transform: scale(1); } + 70% { -moz-transform: scale(1.005); } + 80% { -moz-transform: scale(1); } + 100% { -moz-transform: scale(1); } +} +@keyframes attention { + 0% { transform: scale(1); } + 30% { transform: scale(1); } + 40% { transform: scale(1.02); } + 50% { transform: scale(1); } + 60% { transform: scale(1); } + 70% { transform: scale(1.005); } + 80% { transform: scale(1); } + 100% { transform: scale(1); } +} + +/* Windows */ +application-window { + -webkit-animation: show .3s; + -moz-animation: show .3s; + -ms-animation: show .3s; + animation: show .3s; + + -webkit-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s; + -moz-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s; + -ms-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s; + -o-transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s; + transition: height 0.3s ease-in-out, width 0.3s, top 0.3s, left 0.3s; +} +application-window[data-hint="resizing"], +application-window[data-hint="moving"] { + -webkit-transition: none; + -moz-transition: none; + -ms-transition: none; + -o-transition: none; + transition: none; +} + +application-window[data-hint="closing"], +application-window[data-minimized="true"] { + -webkit-animation: hide .3s; + -moz-animation: hide .3s; + -ms-animation: hide .3s; + animation: hide .3s; + + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + -ms-animation-fill-mode: forwards; + -o-animation-fill-mode: forwards; + animation-fill-mode: forwards; +} + +.WindowDropRect { + -webkit-animation: pulse 2s linear infinite; + -moz-animation: pulse 2s linear infinite; + -ms-animation: pulse 2s linear infinite; + animation: pulse 2s linear infinite; + + border-image: initial; +} + +.WindowAttentionBlink { + -webkit-animation: attention 2s linear infinite; + -moz-animation: attention 2s linear infinite; + -ms-animation: attention 2s linear infinite; + animation: attention 2s linear infinite; +} + + +/* Desktop */ +body[data-attention="true"]:after { + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + opacity : 0; + + -webkit-animation: pulseback 2s linear infinite; + -moz-animation: pulseback 2s linear infinite; + -ms-animation: pulseback 2s linear infinite; + animation: pulseback 2s linear infinite; +} + +/* Panel */ +corewm-panel { + -webkit-transition: all .3s ease-in-out; + -moz-transition: all .3s ease-in-out; + -ms-transition: all .3s ease-in-out; + -o-transition: all .3s ease-in-out; + transition: all .3s ease-in-out; +} + +corewm-panel .Button.Attention { + -webkit-animation: attention 2s linear infinite; + -moz-animation: attention 2s linear infinite; + -ms-animation: attention 2s linear infinite; + animation: attention 2s linear infinite; +} + +/* Menus */ +gui-menu, +corewm-notification-entry { + -webkit-animation: fadeIn .3s; + -moz-animation: fadeIn .3s; + -ms-animation: fadeIn .3s; + animation: fadeIn .3s; +} +gui-menu[data-hint="closing"], +corewm-notification[data-hint="closing"] { + -webkit-animation: fadeOut .3s; + -moz-animation: fadeOut .3s; + -ms-animation: fadeOut .3s; + animation: fadeOut .3s; + + -webkit-animation-fill-mode: forwards; + -moz-animation-fill-mode: forwards; + -ms-animation-fill-mode: forwards; + -o-animation-fill-mode: forwards; + animation-fill-mode: forwards; +} + diff --git a/build/htdocs/dist/packages/default/CoreWM/combined.css b/build/htdocs/dist/packages/default/CoreWM/combined.css new file mode 100644 index 0000000..f9bef36 --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/combined.css @@ -0,0 +1,672 @@ +application-window-top .WindowFrost { + position : absolute; + top : 0; + left : 0; + width : 100%; + height : 100%; + -webkit-filter : blur(4px); + opacity : .5; +} + +/** + * Default Wallpaper stuff + */ +body[data-background-style="color"] { + background-image : none; +} +body[data-background-style="default"] { + background-repeat : repeat; +} +body[data-background-style="normal"] { + background-repeat : no-repeat; +} +body[data-background-style="center"] { + background-repeat : no-repeat; + background-position : center center; +} +body[data-background-style="fill"] { + background-repeat : no-repeat; + background-size : cover; + background-position : center center; + /* + background-attachment : fixed; + */ +} +body[data-background-style="strech"] { + background-repeat : no-repeat; + background-size : 100% auto; +} + +/** + * =========================================================================== + * NOTIFICATIONS + * =========================================================================== + */ + +corewm-notifications { + position : absolute; + top : 0; + right : 0; + z-index : 10000000; + width : 400px; +} + +corewm-notification { + display : block; + position : relative; + min-height : 10px; + overflow : hidden; + white-space : nowrap; +} +corewm-notification.HasIcon { + min-height : 32px; +} +corewm-notification.HasIcon img { + position : absolute; +} +corewm-notification.HasIcon .Title, +corewm-notification.HasIcon .Message { + margin-left : 32px; + padding-left : 5px; + white-space: -moz-pre-wrap; + white-space: -o-pre-wrap; + white-space: -pre-wrap; + white-space: pre-wrap; + word-wrap: break-word; +} +corewm-notification:before { + content : ''; + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : -1; +} + +/** + * =========================================================================== + * WINDOW SWITCHER + * =========================================================================== + */ + +corewm-window-switcher { + display : block; + position : absolute; + top : 50%; + left : 50%; + width : 256px; + z-index : 999999; + overflow : hidden; + margin-left : -128px; +} +corewm-window-switcher > div { + width : 256px; + height : 32px; + line-height : 32px; + overflow : hidden; +} +corewm-window-switcher > div > img { + vertical-align : middle; + margin-right : 5px; + margin-left : 5px; + width : 16px; +} + +/** + * =========================================================================== + * ICON VIEW + * =========================================================================== + */ + +#CoreWMDesktopIconView { + background : transparent !important; + position : absolute; + top : 10px; + left : 10px; + right : 10px; + bottom : 10px; + z-index : 1; + border : 0 none !important; + box-shadow : none !important; + pointer-events : none; + box-sizing : border-box; +} + +#CoreWMDesktopIconView gui-icon-view-entry { + pointer-events : all; +} + +/** + * =========================================================================== + * APPLICATION MENU + * =========================================================================== + */ + +#CoreWMApplicationMenu { + z-index : 9999999999; + position : absolute; + left : 5%; + right : 5%; + top : 5% !important; + bottom : 5%; + width : 90%; + height : 90%; + overflow-x : hidden; + overflow-y : auto; + padding : 0; + margin : 0; + background : transparent; + border : 0 none; + box-shadow : none; + text-align : center; +} + +#CoreWMApplicationMenu:before { + z-index : -1; + position : fixed; + top : 0; + left : 0; + right : 0; + bottom : 0; + overflow : hidden; + background : rgba(0, 0, 0, .8); + content : ''; +} + + #CoreWMApplicationMenu gui-menu-entry { + width : 84px; + height : 84px; + padding : 4px; + display : inline-block; + overflow : hidden; + line-height : 16px; + position : relative; + box-sizing : border-box; + text-align : center; + } + + #CoreWMApplicationMenu gui-menu-entry img { + margin-top : 5px; + width : 32px; + height : 32px; + } + + #CoreWMApplicationMenu gui-menu-entry div { + white-space : normal; + max-height : 30px; + box-sizing : border-box; + margin-top : 5px; + color : #fff; + } + +/** + * =========================================================================== + * PANELS + * =========================================================================== + */ + +corewm-panel { + display : block; + position : absolute; + overflow : hidden; + z-index : 2; + margin : 0; + box-sizing : border-box; + + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + + min-width : 16px; + min-height : 16px; +} + +corewm-panel[data-orientation="horizontal"] { + top : 0; + left : 0; + right : 0; +} + corewm-panel[data-orientation="horizontal"] corewm-panel-item { + height : 100%; + } + corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width : 100%; + min-height : 16px; + height : 16px; + } + corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons { + height : 100%; + } + corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons > li { + height : 100%; + } + + corewm-panel[data-orientation="horizontal"] .corewm-panel-buttons > li > img { + height : 100%; + width : auto; + } + +corewm-panel[data-orientation="vertical"] { + left : 0; + bottom : 0; + top : 0; +} + corewm-panel[data-orientation="vertical"] corewm-panel-item { + width : 100%; + } + corewm-panel[data-orientation="vertical"] corewm-panel-container { + height : 100%; + min-width : 16px; + width : 16px; + flex-direction : column; + } + corewm-panel[data-orientation="vertical"] .corewm-panel-buttons { + flex-direction : column; + width : 100%; + } + corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li { + max-width : 100%; + width : 100%; + } + corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li > span { + transform : rotate(90deg); + } + corewm-panel[data-orientation="vertical"] .corewm-panel-buttons > li > img { + width : 100%; + height : auto; + } + +corewm-panel:before { + content : ''; + display : block; + position : absolute; + top : 0; + left : 0; + right : 0; + bottom : 0; + z-index : 1; +} + +corewm-panel[data-ontop="true"] { + z-index : 9999998; +} +corewm-panel[data-position="bottom"] { + top : auto; + bottom : 0; +} +corewm-panel[data-autohide="true"] { + height : 0; +} +corewm-panel[data-autohide="true"] > * { + visibility : hidden; +} + +corewm-panel-container { + position : relative; + z-index : 10; + + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + + justify-content: center; + + -ms-flex-align: center; + + -webkit-align-items: center; + -moz-align-items: center; + align-items: center; + + -webkit-box-align: center; + -moz-box-align: center; + -ms-box-align: center; + -o-box-align: center; + box-align: center; + + -webkit-flex-wrap: nowrap; + -moz-flex-wrap: nowrap; + -ms-flex-wrap: nowrap; + -o-flex-wrap: nowrap; + flex-wrap: nowrap; +} + +corewm-panel-item { + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + + box-sizing : border-box; + + -webkit-flex: 0 0 auto; + -moz-flex: 0 0 auto; + -ms-flex: 0 0 auto; + -o-flex: 0 0 auto; + flex: 0 0 auto; +} + +corewm-panel-container > .corewm-panel-expand { + -webkit-flex: 1 1 auto; + -moz-flex: 1 1 auto; + -ms-flex: 1 1 auto; + -o-flex: 1 1 auto; + flex: 1 1 auto; +} +corewm-panel-container > .corewm-panel-right { + -webkit-justify-content : flex-end; + -moz-justify-content : flex-end; + -ms-justify-content : flex-end; + -o-justify-content : flex-end; + justify-content : flex-end; +} + + corewm-panel-item .corewm-panel-buttons { + list-style : none; + margin : 0; + padding : 0; + position : relative; + z-index : 10; + box-sizing : border-box; + + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + + -ms-flex-align: center; + + -webkit-align-items: center; + -moz-align-items: center; + align-items: center; + } + corewm-panel-item .corewm-panel-buttons > li { + margin : 0; + padding : 0; + box-sizing : border-box; + position : relative; + min-width : 16px; + min-height : 16px; + + display: -webkit-box; + display: -moz-box; + display: -ms-flexbox; + display: -webkit-flex; + display: flex; + + -webkit-flex: 1 1 auto; + -moz-flex: 1 1 auto; + -ms-flex: 1 1 auto; + -o-flex: 1 1 auto; + flex: 1 1 auto; + + + justify-content: center; + + -ms-flex-align: center; + + -webkit-align-items: center; + -moz-align-items: center; + align-items: center; + + -webkit-box-align: center; + -moz-box-align: center; + } + corewm-panel-item .corewm-panel-buttons:first-child { + margin-right : 0; + margin-top : 0; + } + corewm-panel-item .corewm-panel-buttons:last-child { + margin-right : 0; + margin-bottom : 0; + } + corewm-panel-item .corewm-panel-buttons > li > img { + display : inline-block; + } + + corewm-panel-item .corewm-panel-buttons > li > img, + corewm-panel-item .corewm-panel-buttons > li > span { + pointer-events: none; + } + +corewm-panel-item .Ghost { + background-color : red !important; + min-width : 16px; +} + +.corewm-panel-dummy { + min-width : 16px; + min-height : 16px; +} +.corewm-panel-ellipsis span { + display : inline-block; + overflow : hidden; + white-space : nowrap; + text-overflow: ellipsis; + -o-text-overflow: ellipsis; +} + +/** + * =========================================================================== + * SEARCH + * =========================================================================== + */ + +corewm-search { + position : absolute; + display : none; + z-index : 99999; + max-width : 400px; +} +corewm-search:before { + position : absolute; + top : 0; + left : 0; + bottom : 0; + right : 0; + z-index : -1; +} +corewm-search[data-visible=true] { + display : block; +} + corewm-search > div { + margin-top : 5px; + } + corewm-search gui-text { + width : 100%; + } + + corewm-search > ul { + list-style-type : none; + margin : 0; + padding : 0; + } + corewm-search > ul > li { + position : relative; + margin : 0; + padding : 0; + } + corewm-search > ul > li > * { + pointer-events : none; + } + corewm-search > ul > li > img { + position : absolute; + top : 5px; + left : 5px; + } + +/** + * =========================================================================== + * PANEL ITEMS + * =========================================================================== + */ + +corewm-panel .PanelItemClock { + flex : 0 0 55px; +} +corewm-panel .PanelItemClock li { + cursor : default; +} +corewm-panel .PanelItemWindowList li > span { + max-width : 200px; +} + +corewm-panel[data-orientation="horizontal"] .PanelItemWindowList li { + -webkit-flex: 0 0 auto; + -moz-flex: 0 0 auto; + -ms-flex: 0 0 auto; + -o-flex: 0 0 auto; + flex: 0 0 auto; +} +corewm-panel[data-orientation="vertical"] .PanelItemWindowList li { + -ms-flex-align: flex-start; + + -webkit-align-items: flex-start; + -moz-align-items: flex-start; + align-items: flex-start; +} + +corewm-panel[data-orientation="vertical"] .PanelItemWindowList li > img { + transform : rotate(90deg); +} +corewm-panel[data-orientation="vertical"] .PanelItemWindowList li > span { + position: absolute; + left: .5em; + top: 20px; + transform-origin: left; +} + +corewm-panel .PanelItemNotificationArea .BusyNotification > div, +corewm-panel .PanelItemNotificationArea .StartupNotification > div { + cursor : help; + width : 20px; +} + +corewm-panel .PanelItemNotificationArea .BusyNotification > div > div, +corewm-panel .PanelItemNotificationArea .StartupNotification > div > div { + border: 2px solid #fff; + border-radius: 100%; + margin-left : -10px; + margin-top : -10px; + position : absolute; + top : 50%; + left : 50%; + width : 20px; + height : 20px; + box-sizing : border-box; +} +corewm-panel .PanelItemNotificationArea .StartupNotification > div > div:before { + display: block; + position: absolute; + left: 7px; + top: 2px; + width: 2px; + height: 6px; + background-color: #fff; + content: ""; + + -webkit-animation: NotificationSpinAnim 3s linear infinite; + -moz-animation: NotificationSpinAnim 3s linear infinite; + -ms-animation: NotificationSpinAnim 3s linear infinite; + animation: NotificationSpinAnim 3s linear infinite; + + -webkit-transform-origin: 1px 6px; + -moz-transform-origin: 1px 6px; + -ms-transform-origin: 1px 6px; + -o-transform-origin: 1px 6px; + transform-origin: 1px 6px; +} +corewm-panel .PanelItemNotificationArea .StartupNotification > div > div:after { + display: block; + position: absolute; + left: 7px; /*( 16px / 2 ) - 1px;*/ + top: 3px; + width: 2px; + height: 5px; /*( 16px / 2 ) - 3px;*/ + background-color: #fff; + content: ""; + + -webkit-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */ + -moz-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */ + -ms-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */ + -o-animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */ + animation: NotificationSpinAnim 18s linear infinite; /* NotificationSpinAnim 6 * 3s linear infinite; */ + + -webkit-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/ + -moz-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/ + -ms-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/ + -o-transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/ + transform-origin: 1px 5px; /* 1px ( 16px / 2 ) - 3px;*/ +} + +corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:after, +corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:before { + display: block; + position: absolute; + left: 7px; + top: 2px; + width: 2px; + height: 12px; + background-color: #fff; + content: ""; + + -webkit-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/ + -moz-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/ + -ms-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/ + -o-transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/ + transform-origin: 1px 6px; /* 1px ( 24px / 2 ) - 2px;*/ + + -webkit-animation: NotificationSpinAnim 3s linear infinite; + -moz-animation: NotificationSpinAnim 3s linear infinite; + -ms-animation: NotificationSpinAnim 3s linear infinite; + -o-animation: NotificationSpinAnim 3s linear infinite; + animation: NotificationSpinAnim 3s linear infinite; +} +corewm-panel .PanelItemNotificationArea .BusyNotification > div > div:after { + -webkit-animation: NotificationSpinAnim 3s linear -0.75s infinite; + -moz-animation: NotificationSpinAnim 3s linear -0.75s infinite; + -ms-animation: NotificationSpinAnim 3s linear -0.75s infinite; + -o-animation: NotificationSpinAnim 3s linear -0.75s infinite; + animation: NotificationSpinAnim 3s linear -0.75s infinite; +} + +@-webkit-keyframes NotificationSpinAnim { + to { + -webkit-transform: rotate( 360deg ); + } +} +@-moz-keyframes notificationspinanim { + to { + -moz-transform: rotate( 360deg ); + } +} +@-o-keyframes notificationspinanim { + to { + -o-transform: rotate( 360deg ); + } +} +@keyframes NotificationSpinAnim { + to { + transform: rotate( 360deg ); + } +} + +/** + * =========================================================================== + * RESPONSIVE + * =========================================================================== + */ + +@media all and (max-width: 800px) { + + .PanelItemWindowList > ul > li > span { + display: none; + } + +} diff --git a/build/htdocs/dist/packages/default/CoreWM/combined.js b/build/htdocs/dist/packages/default/CoreWM/combined.js new file mode 100644 index 0000000..59d118b --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/combined.js @@ -0,0 +1,4355 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, Window, GUI, Utils, API, VFS) { + 'use strict'; + + function _createIcon(aiter, aname, arg) { + return API.getIcon(aiter.icon, arg, aiter.className); + } + + /** + * Create default application menu with categories (sub-menus) + */ + function doBuildCategoryMenu(ev) { + var apps = OSjs.Core.getPackageManager().getPackages(); + var wm = OSjs.Core.getWindowManager(); + var cfgCategories = wm.getSetting('menu'); + + function createEvent(iter) { + return function(el) { + OSjs.GUI.Helpers.createDraggable(el, { + type : 'application', + data : { + launch: iter.name + } + }); + }; + } + + function clickEvent(iter) { + return function() { + API.launch(iter.name); + }; + } + + var cats = {}; + + Object.keys(cfgCategories).forEach(function(c) { + cats[c] = []; + }); + + Object.keys(apps).forEach(function(a) { + var iter = apps[a]; + if ( iter.type === 'application' && iter.visible !== false ) { + var cat = iter.category && cats[iter.category] ? iter.category : 'unknown'; + cats[cat].push({name: a, data: iter}); + } + }); + + var list = []; + Object.keys(cats).forEach(function(c) { + var submenu = []; + for ( var a = 0; a < cats[c].length; a++ ) { + var iter = cats[c][a]; + submenu.push({ + title: iter.data.name, + icon: _createIcon(iter.data, iter.name), + tooltip : iter.data.description, + onCreated: createEvent(iter), + onClick: clickEvent(iter) + }); + } + + if ( submenu.length ) { + list.push({ + title: OSjs.Applications.CoreWM._(cfgCategories[c].title), + icon: API.getIcon(cfgCategories[c].icon, '16x16'), + menu: submenu + }); + } + }); + + return list; + } + + ///////////////////////////////////////////////////////////////////////////// + // NEW MENU + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationMenu() { + var root = this.$element = document.createElement('gui-menu'); + this.$element.id = 'CoreWMApplicationMenu'; + + var apps = OSjs.Core.getPackageManager().getPackages(); + + function createEntry(a, iter) { + var entry = document.createElement('gui-menu-entry'); + + var img = document.createElement('img'); + img.src = _createIcon(iter, a, '32x32'); + + var txt = document.createElement('div'); + txt.appendChild(document.createTextNode(iter.name)); //.replace(/([^\s-]{8})([^\s-]{8})/, '$1-$2'))); + + Utils.$bind(entry, 'click', function(ev) { + ev.stopPropagation(); + API.launch(a); + API.blurMenu(); + }); + + entry.appendChild(img); + entry.appendChild(txt); + root.appendChild(entry); + } + + Object.keys(apps).forEach(function(a) { + var iter = apps[a]; + if ( iter.type === 'application' && iter.visible !== false ) { + createEntry(a, iter); + } + }); + } + + ApplicationMenu.prototype.destroy = function() { + if ( this.$element && this.$element.parentNode ) { + this.$element.parentNode.removeChild(this.$element); + } + this.$element = null; + }; + + ApplicationMenu.prototype.show = function(pos) { + if ( !this.$element ) { + return; + } + + if ( !this.$element.parentNode ) { + document.body.appendChild(this.$element); + } + + // FIXME: This is a very hackish way of doing it and does not work when button is moved! + Utils.$removeClass(this.$element, 'AtBottom'); + Utils.$removeClass(this.$element, 'AtTop'); + if ( pos.y > (window.innerHeight / 2) ) { + Utils.$addClass(this.$element, 'AtBottom'); + + this.$element.style.top = 'auto'; + this.$element.style.bottom = '30px'; + } else { + Utils.$addClass(this.$element, 'AtTop'); + + this.$element.style.bottom = 'auto'; + this.$element.style.top = '30px'; + } + + this.$element.style.left = pos.x + 'px'; + }; + + ApplicationMenu.prototype.getRoot = function() { + return this.$element; + }; + + ///////////////////////////////////////////////////////////////////////////// + // MENU + ///////////////////////////////////////////////////////////////////////////// + + function doShowMenu(ev) { + var wm = OSjs.Core.getWindowManager(); + + if ( (wm && wm.getSetting('useTouchMenu') === true) ) { + var inst = new ApplicationMenu(); + var pos = {x: ev.clientX, y: ev.clientY}; + + if ( ev.target ) { + var rect = Utils.$position(ev.target, document.body); + if ( rect.left && rect.top && rect.width && rect.height ) { + pos.x = rect.left - (rect.width / 2); + + if ( pos.x <= 16 ) { + pos.x = 0; // Snap to left + } + + var panel = Utils.$parent(ev.target, function(node) { + return node.tagName.toLowerCase() === 'corewm-panel'; + }); + + if ( panel ) { + var prect = Utils.$position(panel); + pos.y = prect.top + prect.height; + } else { + pos.y = rect.top + rect.height; + } + } + } + API.createMenu(null, pos, inst); + } else { + var list = doBuildCategoryMenu(ev); + var m = API.createMenu(list, ev); + if ( m && m.$element ) { + Utils.$addClass(m.$element, 'CoreWMDefaultApplicationMenu'); + } + } + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.showMenu = doShowMenu; + +})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, Window, GUI, Utils, API, VFS) { + 'use strict'; + + function createCreateDialog(title, dir, cb) { + API.createDialog('Input', { + value: title, + message: OSjs.Applications.CoreWM._('Create in {0}', dir) + }, function(ev, button, result) { + if ( result ) { + cb(new VFS.File(Utils.pathJoin(dir, result))); + } + }); + } + + ///////////////////////////////////////////////////////////////////////////// + // SHORTCUT DIALOG + ///////////////////////////////////////////////////////////////////////////// + + function IconViewShortcutDialog(item, scheme, closeCallback) { + Window.apply(this, ['IconViewShortcutDialog', { + title: 'Edit Launcher', + icon: 'status/appointment-soon.png', + width: 400, + height: 220, + allow_maximize: false, + allow_resize: false, + allow_minimize: false + }]); + + this.scheme = scheme; + this.values = { + path: item.path, + filename: item.filename, + args: item.args || {} + }; + this.cb = closeCallback || function() {}; + } + + IconViewShortcutDialog.prototype = Object.create(Window.prototype); + IconViewShortcutDialog.constructor = Window; + + IconViewShortcutDialog.prototype.init = function(wm, app) { + var self = this; + var root = Window.prototype.init.apply(this, arguments); + this.scheme.render(this, this._name); + + this.scheme.find(this, 'InputShortcutLaunch').set('value', this.values.path); + this.scheme.find(this, 'InputShortcutLabel').set('value', this.values.filename); + this.scheme.find(this, 'InputTooltipFormatString').set('value', JSON.stringify(this.values.args || {})); + + this.scheme.find(this, 'ButtonApply').on('click', function() { + self.applySettings(); + self._close('ok'); + }); + + this.scheme.find(this, 'ButtonCancel').on('click', function() { + self._close(); + }); + + return root; + }; + + IconViewShortcutDialog.prototype.applySettings = function() { + this.values.path = this.scheme.find(this, 'InputShortcutLaunch').get('value'); + this.values.filename = this.scheme.find(this, 'InputShortcutLabel').get('value'); + this.values.args = JSON.parse(this.scheme.find(this, 'InputTooltipFormatString').get('value') || {}); + }; + + IconViewShortcutDialog.prototype._close = function(button) { + this.cb(button, this.values); + return Window.prototype._close.apply(this, arguments); + }; + + IconViewShortcutDialog.prototype._destroy = function() { + this.scheme = null; + return Window.prototype._destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // ICON VIEW + ///////////////////////////////////////////////////////////////////////////// + + function DesktopIconView(wm) { + var self = this; + + this.dialog = null; + this.$iconview = null; + this.$element = document.createElement('gui-icon-view'); + this.$element.setAttribute('data-multiple', 'false'); + //this.$element.setAttribute('no-selection', 'true'); + this.$element.id = 'CoreWMDesktopIconView'; + this.shortcutCache = []; + + GUI.Elements['gui-icon-view'].build(this.$element); + + GUI.Helpers.createDroppable(this.$element, { + onOver: function(ev, el, args) { + wm.onDropOver(ev, el, args); + }, + + onLeave : function() { + wm.onDropLeave(); + }, + + onDrop : function() { + wm.onDrop(); + }, + + onItemDropped: function(ev, el, item, args) { + wm.onDropItem(ev, el, item, args); + }, + + onFilesDropped: function(ev, el, files, args) { + wm.onDropFile(ev, el, files, args); + } + }); + + this.$iconview = new GUI.ElementDataView(this.$element); + this.$iconview.on('activate', function(ev) { + if ( ev && ev.detail ) { + ev.detail.entries.forEach(function(entry) { + var item = entry.data; + var file = new VFS.File(item); + API.open(file, item.args); + }); + } + }).on('contextmenu', function(ev) { + if ( ev && ev.detail && ev.detail.entries ) { + self.createContextMenu(ev.detail.entries[0], ev); + } + }); + + this._refresh(); + this.resize(wm); + } + + DesktopIconView.prototype.destroy = function() { + Utils.$remove(this.$element); + this.$element = null; + this.$iconview = null; + + if ( this.dialog ) { + this.dialog.destroy(); + } + this.dialog = null; + + this.shortcutCache = []; + }; + + DesktopIconView.prototype.blur = function() { + var cel = new GUI.ElementDataView(this.$element); + cel.set('value', null); + }; + + DesktopIconView.prototype.getRoot = function() { + return this.$element; + }; + + DesktopIconView.prototype.resize = function(wm) { + var el = this.getRoot(); + var s = wm.getWindowSpace(); + + if ( el ) { + el.style.top = (s.top) + 'px'; + el.style.left = (s.left) + 'px'; + el.style.width = (s.width) + 'px'; + el.style.height = (s.height) + 'px'; + } + }; + + DesktopIconView.prototype._refresh = function(wm) { + var self = this; + var pm = OSjs.Core.getPackageManager(); + + var desktopPath = OSjs.Core.getWindowManager().getSetting('desktopPath'); + var shortcutPath = Utils.pathJoin(desktopPath, '.shortcuts.json'); + + VFS.read(shortcutPath, function(e, r) { + var entries = []; + + if ( r && r instanceof Array ) { + self.shortcutCache = r; + + entries = r.map(function(i) { + var iter = new VFS.File(i); + var type = 'shortcut'; + var icon; + + if ( iter.type === 'application' ) { + var appname = Utils.filename(iter.path); + var meta = pm.getPackage(appname); + if ( meta ) { + icon = API.getIcon(meta.icon, '32x32', appname); + } + type = 'application'; + } + + return { + _type: type, + icon: icon || API.getFileIcon(iter, '32x32'), + label: iter.filename, + value: iter, + args: iter.args || {} + }; + }); + } + + VFS.scandir(desktopPath, function(error, result) { + if ( self.$iconview && !error ) { + + entries = entries.concat(result.map(function(iter) { + return { + _type: 'vfs', + icon: API.getFileIcon(iter, '32x32'), + label: iter.filename, + value: iter + }; + }).filter(function(iter) { + if ( iter.value.path === shortcutPath ) { + return false; + } + return true; + })); + + entries.sort(function(a, b) { + return (a.filename > b.filename) ? 1 : ((b.filename > a.filename) ? -1 : 0); + }); + + self.$iconview.clear().add(entries); + } + }); + }, {type: 'json'}); + }; + + DesktopIconView.prototype._save = function(refresh) { + var desktopPath = OSjs.Core.getWindowManager().getSetting('desktopPath'); + var path = Utils.pathJoin(desktopPath, '.shortcuts.json'); + + VFS.write(path, JSON.stringify(this.shortcutCache, null, 4), function(e, r) { + if ( refresh ) { // Normally caught by VFS message in main.js + //self._refresh(); + } + }); + }; + + DesktopIconView.prototype.updateShortcut = function(data, values) { + var found = this.getShortcutByPath(data.path); + if ( found.item ) { + var o = this.shortcutCache[found.index]; + Object.keys(values).forEach(function(k) { + o[k] = values[k]; + }); + + this._save(true); + } + }; + + DesktopIconView.prototype.getShortcutByPath = function(path) { + var found = null; + var index = -1; + + this.shortcutCache.forEach(function(i, idx) { + if ( !found ) { + if ( i.path === path ) { + found = i; + index = idx; + } + } + }); + + return {item: found, index: index}; + }; + + DesktopIconView.prototype.addShortcut = function(data, wm, save) { + var found = this.getShortcutByPath(data.path); + if ( !found.item ) { + (['icon']).forEach(function(k) { + if ( data[k] ) { + delete data[k]; + } + }); + + if ( data.type === 'application' ) { + data.args = data.args || {}; + } + + this.shortcutCache.push(data); + this._save(true); + } + }; + + DesktopIconView.prototype.removeShortcut = function(data, wm) { + var found = this.getShortcutByPath(data.path); + + if ( found.item ) { + this.shortcutCache.splice(found.index, 1); + this._save(true); + } + }; + + DesktopIconView.prototype._getContextMenu = function(item) { + var self = this; + var mm = OSjs.Core.getMountManager(); + var desktopPath = OSjs.Core.getWindowManager().getSetting('desktopPath'); + var menu = [ + { + title: API._('LBL_UPLOAD'), + onClick: function() { + API.createDialog('FileUpload', { + dest: desktopPath + }, function() { + self._refresh(); + }); + } + }, + { + title: API._('LBL_CREATE'), + menu: [{ + title: API._('LBL_FILE'), + onClick: function() { + createCreateDialog('New file', desktopPath, function(f) { + VFS.write(f, '', function(err) { + if ( err ) { + API.error('CoreWM', API._('ERR_VFSMODULE_MKFILE'), err); + } + }); + }); + } + }, { + title: API._('LBL_DIRECTORY'), + onClick: function() { + createCreateDialog('New directory', desktopPath, function(f) { + VFS.mkdir(f, function(err) { + if ( err ) { + API.error('CoreWM', API._('ERR_VFSMODULE_MKDIR'), err); + } + }); + }); + } + }] + } + ]; + + if ( item ) { + var file = item.data; + + if ( file.type === 'application' ) { + menu.push({ + title: OSjs.Applications.CoreWM._('Edit shortcut'), + onClick: function() { + self.openShortcutEdit(file); + } + }); + } + + if ( mm.getRootFromPath(file.path) !== desktopPath ) { + menu.push({ + title: OSjs.Applications.CoreWM._('Remove shortcut'), + onClick: function() { + self.removeShortcut(file); + } + }); + } else { + menu.push({ + title: API._('LBL_DELETE'), + onClick: function() { + VFS.unlink(file, function() { + //self._refresh(); // Caught by VFS message in main.js + }); + } + }); + } + } + + return menu; + }; + + DesktopIconView.prototype.createContextMenu = function(item, ev) { + var wm = OSjs.Core.getWindowManager(); + var menu = wm._getContextMenu(item); + API.createMenu(menu, ev); + }; + + DesktopIconView.prototype.openShortcutEdit = function(item) { + if ( this.dialog ) { + this.dialog._close(); + } + + var self = this; + var wm = OSjs.Core.getWindowManager(); + + this.dialog = new IconViewShortcutDialog(item, wm._scheme, function(button, values) { + if ( button === 'ok' ) { + self.updateShortcut(item, values); + } + self.dialog = null; + }); + + wm.addWindow(this.dialog, true); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.DesktopIconView = DesktopIconView; + +})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, Window, GUI, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // Window Switcher + ///////////////////////////////////////////////////////////////////////////// + + var WindowSwitcher = function() { + this.$switcher = null; + this.showing = false; + this.index = -1; + this.winRef = null; + }; + + WindowSwitcher.prototype.destroy = function() { + this._remove(); + }; + + WindowSwitcher.prototype._remove = function() { + if ( this.$switcher ) { + if ( this.$switcher.parentNode ) { + this.$switcher.parentNode.removeChild(this.$switcher); + } + this.$switcher = null; + } + }; + + WindowSwitcher.prototype.show = function(ev, win, wm) { + win = win || wm.getLastWindow(); + + ev.preventDefault(); + + var height = 0; + var items = []; + var index = 0; + + // Render + if ( !this.$switcher ) { + this.$switcher = document.createElement('corewm-window-switcher'); + } else { + Utils.$empty(this.$switcher); + } + + var container, image, label, iter; + for ( var i = 0; i < wm._windows.length; i++ ) { + iter = wm._windows[i]; + if ( iter ) { + container = document.createElement('div'); + + image = document.createElement('img'); + image.src = iter._icon; + + label = document.createElement('span'); + label.innerHTML = iter._title; + + container.appendChild(image); + container.appendChild(label); + this.$switcher.appendChild(container); + + height += 32; // FIXME: We can automatically calculate this + + if ( win && win._wid === iter._wid ) { + index = i; + } + + items.push({ + element: container, + win: iter + }); + } + } + + if ( !this.$switcher.parentNode ) { + document.body.appendChild(this.$switcher); + } + + this.$switcher.style.height = height + 'px'; + this.$switcher.style.marginTop = (height ? -((height / 2) << 0) : 0) + 'px'; + + // Select + if ( this.showing ) { + this.index++; + if ( this.index > (items.length - 1) ) { + this.index = -1; + } + } else { + this.index = index; + this.showing = true; + } + + console.debug('WindowSwitcher::show()', this.index); + + if ( items[this.index] ) { + items[this.index].element.className = 'Active'; + this.winRef = items[this.index].win; + } else { + this.winRef = null; + } + }; + + WindowSwitcher.prototype.hide = function(ev, win, wm) { + if ( !this.showing ) { + return; + } + + ev.preventDefault(); + + this._remove(); + + win = this.winRef || win; + if ( win ) { + win._focus(); + } + + this.winRef = null; + this.index = -1; + this.showing = false; + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.WindowSwitcher = WindowSwitcher; + +})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, Window, GUI, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // PANEL ITEM DIALOG + ///////////////////////////////////////////////////////////////////////////// + + function PanelItemDialog(name, args, settings, scheme, closeCallback) { + this._closeCallback = closeCallback || function() {}; + this._settings = settings; + this.scheme = scheme; + + Window.apply(this, [name, args]); + } + + PanelItemDialog.prototype = Object.create(Window.prototype); + PanelItemDialog.constructor = Window; + + PanelItemDialog.prototype.init = function(wm, app) { + var self = this; + var root = Window.prototype.init.apply(this, arguments); + this.scheme.render(this, this._name); + + this.scheme.find(this, 'ButtonApply').on('click', function() { + self.applySettings(); + self._close('ok'); + }); + + this.scheme.find(this, 'ButtonCancel').on('click', function() { + self._close(); + }); + + return root; + }; + + PanelItemDialog.prototype.applySettings = function() { + }; + + PanelItemDialog.prototype._close = function(button) { + this._closeCallback(button); + return Window.prototype._close.apply(this, arguments); + }; + + PanelItemDialog.prototype._destroy = function() { + this.scheme = null; + this._settings = null; + + return Window.prototype._destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // PANELS + ///////////////////////////////////////////////////////////////////////////// + + var PANEL_SHOW_TIMEOUT = 150; + var PANEL_HIDE_TIMEOUT = 600; + + function Panel(name, options, wm) { + options = options || {}; + + this._name = name; + this._$element = null; + this._$container = null; + this._items = []; + this._outtimeout = null; + this._intimeout = null; + this._options = options.mergeDefaults({ + position: 'top' + }); + + console.debug('Panel::construct()', this._name, this._options.get()); + } + + Panel.prototype.init = function(root) { + var self = this; + var wm = OSjs.Core.getWindowManager(); + + function createMenu(ev) { + var menu = [ + {title: OSjs.Applications.CoreWM._('Open Panel Settings'), onClick: function(ev) { + wm.showSettings('panel'); + }} + ]; + + if ( wm.getSetting('useTouchMenu') === true ) { + menu.push({ + title: OSjs.Applications.CoreWM._('Turn off TouchMenu'), + onClick: function(ev) { + wm.applySettings({useTouchMenu: false}, false, true); + } + }); + } else { + menu.push({ + title: OSjs.Applications.CoreWM._('Turn on TouchMenu'), + onClick: function(ev) { + wm.applySettings({useTouchMenu: true}, false, true); + } + }); + } + + API.createMenu(menu, ev); + } + + this._$container = document.createElement('corewm-panel-container'); + this._$element = document.createElement('corewm-panel'); + this._$element.setAttribute('data-orientation', 'horizontal'); + this._$element.setAttribute('role', 'toolbar'); + + Utils.$bind(this._$element, 'mousedown', function(ev) { + ev.preventDefault(); + }); + Utils.$bind(this._$element, 'mouseover', function(ev) { + self.onMouseOver(ev); + }); + Utils.$bind(this._$element, 'mouseout', function(ev) { + self.onMouseOut(ev); + }); + Utils.$bind(this._$element, 'click', function(ev) { + OSjs.API.blurMenu(); + }); + Utils.$bind(this._$element, 'contextmenu', function(ev) { + createMenu(ev); + }); + + Utils.$bind(document, 'mouseout:panelmouseleave', function(ev) { + self.onMouseLeave(ev); + }, false); + + this._$element.appendChild(this._$container); + root.appendChild(this._$element); + + setTimeout(function() { + self.update(); + }, 0); + }; + + Panel.prototype.destroy = function() { + this._clearTimeouts(); + Utils.$unbind(document, 'mouseout:panelmouseleave'); + + this._items.forEach(function(item) { + item.destroy(); + }); + this._items = []; + this._$element = Utils.$remove(this._$element); + this._$container = null; + }; + + Panel.prototype.update = function(options) { + options = options || this._options.get(); + + // CSS IS SET IN THE WINDOW MANAGER! + var self = this; + var attrs = { + ontop: !!options.ontop, + position: options.position || 'bottom' + }; + + if ( options.autohide ) { + this.onMouseOut(); + } + if ( this._$element ) { + Object.keys(attrs).forEach(function(k) { + self._$element.setAttribute('data-' + k, typeof attrs[k] === 'boolean' ? (attrs[k] ? 'true' : 'false') : attrs[k]); + }); + } + this._options.set(null, options); + }; + + Panel.prototype.autohide = function(hide) { + if ( !this._options.get('autohide') || !this._$element ) { + return; + } + + if ( hide ) { + this._$element.setAttribute('data-autohide', 'true'); + } else { + this._$element.setAttribute('data-autohide', 'false'); + } + }; + + Panel.prototype._clearTimeouts = function() { + if ( this._outtimeout ) { + clearTimeout(this._outtimeout); + this._outtimeout = null; + } + if ( this._intimeout ) { + clearTimeout(this._intimeout); + this._intimeout = null; + } + }; + + Panel.prototype.onMouseLeave = function(ev) { + var from = ev.relatedTarget || ev.toElement; + if ( !from || from.nodeName === 'HTML' ) { + this.onMouseOut(ev); + } + }; + + Panel.prototype.onMouseOver = function() { + var self = this; + this._clearTimeouts(); + this._intimeout = setTimeout(function() { + self.autohide(false); + }, PANEL_SHOW_TIMEOUT); + }; + + Panel.prototype.onMouseOut = function() { + var self = this; + this._clearTimeouts(); + this._outtimeout = setTimeout(function() { + self.autohide(true); + }, PANEL_HIDE_TIMEOUT); + }; + + Panel.prototype.addItem = function(item) { + if ( !(item instanceof OSjs.Applications.CoreWM.PanelItem) ) { + throw 'Expected a PanelItem in Panel::addItem()'; + } + + this._items.push(item); + this._$container.appendChild(item.init()); + }; + + Panel.prototype.getItemByType = function(type) { + return this.getItem(type); + }; + + Panel.prototype.getItemsByType = function(type) { + return this.getItem(type, true); + }; + + Panel.prototype.getItem = function(type, multiple) { + var result = multiple ? [] : null; + + this._items.forEach(function(item, idx) { + if ( item instanceof type ) { + if ( multiple ) { + result.push(item); + } else { + result = item; + return false; + } + } + return true; + }); + + return result; + }; + + Panel.prototype.getOntop = function() { + return this._options.get('ontop'); + }; + + Panel.prototype.getPosition = function(pos) { + return pos ? (this._options.get('position') === pos) : this._options.get('position'); + }; + + Panel.prototype.getAutohide = function() { + return this._options.get('autohide'); + }; + + Panel.prototype.getRoot = function() { + return this._$element; + }; + + Panel.prototype.getHeight = function() { + return this._$element ? this._$element.offsetHeight : 0; + }; + + ///////////////////////////////////////////////////////////////////////////// + // PANEL ITEM + ///////////////////////////////////////////////////////////////////////////// + + var PanelItem = function(className, itemName, settings, defaults) { + this._$root = null; + this._$container = null; + this._className = className || 'Unknown'; + this._itemName = itemName || className.split(' ')[0]; + this._settings = null; + this._settingsDialog = null; + + if ( settings && (settings instanceof OSjs.Helpers.SettingsFragment) && defaults ) { + this._settings = settings.mergeDefaults(defaults); + } + }; + + PanelItem.Name = 'PanelItem'; // Static name + PanelItem.Description = 'PanelItem Description'; // Static description + PanelItem.Icon = 'actions/stock_about.png'; // Static icon + PanelItem.HasOptions = false; + + PanelItem.prototype.init = function() { + var self = this; + + this._$root = document.createElement('corewm-panel-item'); + this._$root.className = this._className; + + this._$container = document.createElement('ul'); + this._$container.setAttribute('role', 'toolbar'); + this._$container.className = 'corewm-panel-buttons'; + + if ( this._settings ) { + var title = 'Open ' + this._itemName + ' settings'; // FIXME: Locale + Utils.$bind(this._$root, 'contextmenu', function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + + API.createMenu([{ + title: title, + onClick: function() { + self.openSettings(); + } + }], ev); + }); + } + + this._$root.appendChild(this._$container); + + return this._$root; + }; + + PanelItem.prototype.destroy = function() { + if ( this._settingsDialog ) { + this._settingsDialog.destroy(); + } + this._settingsDialog = null; + this._$root = Utils.$remove(this._$root); + this._$container = Utils.$remove(this._$container); + }; + + PanelItem.prototype.applySettings = function() { + }; + + PanelItem.prototype.openSettings = function(DialogRef, args) { + if ( this._settingsDialog ) { + this._settingsDialog._restore(); + return false; + } + + var self = this; + var wm = OSjs.Core.getWindowManager(); + + if ( DialogRef ) { + this._settingsDialog = new DialogRef(this, wm._scheme, function(button) { + if ( button === 'ok' ) { + self.applySettings(); + } + self._settingsDialog = null; + }); + + OSjs.Core.getWindowManager().addWindow(this._settingsDialog, true); + } + }; + + PanelItem.prototype.getRoot = function() { + return this._$root; + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.Panel = Panel; + OSjs.Applications.CoreWM.PanelItem = PanelItem; + OSjs.Applications.CoreWM.PanelItemDialog = PanelItemDialog; + +})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, Utils, API, GUI, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + /** + * PanelItem: Buttons + */ + function PanelItemButtons(settings) { + PanelItem.apply(this, ['PanelItemButtons', 'Buttons', settings, { + buttons: [ + { + title: API._('LBL_SETTINGS'), + icon: 'categories/applications-system.png', + launch: 'ApplicationSettings' + } + ] + }]); + } + + PanelItemButtons.prototype = Object.create(PanelItem.prototype); + PanelItemButtons.constructor = PanelItem; + + PanelItemButtons.prototype.init = function() { + var self = this; + var root = PanelItem.prototype.init.apply(this, arguments); + + this.renderButtons(); + + var ghost; + var lastTarget; + var removeTimeout; + var lastPadding = null; + + function clearGhost() { + removeTimeout = clearTimeout(removeTimeout); + ghost = Utils.$remove(ghost); + lastTarget = null; + if ( lastPadding !== null ) { + self._$container.style.paddingRight = lastPadding; + } + } + + function createGhost(target) { + if ( !target || !target.parentNode ) { + return; + } + if ( target.tagName !== 'LI' && target.tagName !== 'UL' ) { + return; + } + + if ( lastPadding === null ) { + lastPadding = self._$container.style.paddingRight; + } + + if ( target !== lastTarget ) { + clearGhost(); + + ghost = document.createElement('li'); + ghost.className = 'Ghost'; + + if ( target.tagName === 'LI' ) { + try { + target.parentNode.insertBefore(ghost, target); + } catch ( e ) {} + } else { + target.appendChild(ghost); + } + } + lastTarget = target; + + self._$container.style.paddingRight = '16px'; + } + + GUI.Helpers.createDroppable(this._$container, { + onOver: function(ev, el, args) { + if ( ev.target && !Utils.$hasClass(ev.target, 'Ghost') ) { + createGhost(ev.target); + } + }, + + onLeave : function() { + clearTimeout(removeTimeout); + removeTimeout = setTimeout(function() { + clearGhost(); + }, 1000); + + // clearGhost(); + }, + + onDrop : function() { + clearGhost(); + }, + + onItemDropped: function(ev, el, item, args) { + if ( item && item.data && item.data.mime === 'osjs/application' ) { + var appName = item.data.path.split('applications:///')[1]; + self.createButton(appName); + } + clearGhost(); + }, + + onFilesDropped: function(ev, el, files, args) { + clearGhost(); + } + }); + + return root; + }; + + PanelItemButtons.prototype.clearButtons = function() { + Utils.$empty(this._$container); + }; + + PanelItemButtons.prototype.renderButtons = function() { + var self = this; + var systemButtons = { + applications: function(ev) { + OSjs.Applications.CoreWM.showMenu(ev); + }, + settings: function(ev) { + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.showSettings(); + } + }, + exit: function(ev) { + OSjs.API.signOut(); + } + }; + + this.clearButtons(); + + (this._settings.get('buttons') || []).forEach(function(btn, idx) { + var menu = [{ + title: 'Remove button', + onClick: function() { + self.removeButton(idx); + } + }]; + var callback = function() { + API.launch(btn.launch); + }; + + if ( btn.system ) { + menu = null; //systemMenu; + callback = function(ev) { + ev.stopPropagation(); + systemButtons[btn.system](ev); + }; + } + + self.addButton(btn.title, btn.icon, menu, callback); + }); + }; + + PanelItemButtons.prototype.removeButton = function(index) { + var buttons = this._settings.get('buttons'); + buttons.splice(index, 1); + this.renderButtons(); + + this._settings.save(); + }; + + PanelItemButtons.prototype.createButton = function(appName) { + var pkg = OSjs.Core.getPackageManager().getPackage(appName); + var buttons = this._settings.get('buttons'); + buttons.push({ + title: appName, + icon: pkg.icon, + launch: appName + }); + + this.renderButtons(); + + this._settings.save(); + }; + + PanelItemButtons.prototype.addButton = function(title, icon, menu, callback) { + var sel = document.createElement('li'); + sel.title = title; + sel.innerHTML = ''; + sel.setAttribute('role', 'button'); + sel.setAttribute('aria-label', title); + + Utils.$bind(sel, 'mousedown', function(ev) { + ev.preventDefault(); + ev.stopPropagation(); + }); + Utils.$bind(sel, 'click', callback, true); + Utils.$bind(sel, 'contextmenu', function(ev) { + ev.preventDefault(); + ev.stopPropagation(); + if ( menu ) { + API.createMenu(menu, ev); + } + }); + + this._$container.appendChild(sel); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.Buttons = PanelItemButtons; + +})(OSjs.Applications.CoreWM.Class, OSjs.Applications.CoreWM.Panel, OSjs.Applications.CoreWM.PanelItem, OSjs.Utils, OSjs.API, OSjs.GUI, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, PanelItemDialog, Utils, API, VFS, GUI, Window) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // Clock Settings Dialog + ///////////////////////////////////////////////////////////////////////////// + + function ClockSettingsDialog(panelItem, scheme, closeCallback) { + PanelItemDialog.apply(this, ['ClockSettingsDialog', { + title: 'Clock Settings', + icon: 'status/appointment-soon.png', + width: 400, + height: 280 + }, panelItem._settings, scheme, closeCallback]); + } + + ClockSettingsDialog.prototype = Object.create(PanelItemDialog.prototype); + ClockSettingsDialog.constructor = PanelItemDialog; + + ClockSettingsDialog.prototype.init = function(wm, app) { + var root = PanelItemDialog.prototype.init.apply(this, arguments); + this.scheme.find(this, 'InputUseUTC').set('value', this._settings.get('utc')); + this.scheme.find(this, 'InputInterval').set('value', String(this._settings.get('interval'))); + this.scheme.find(this, 'InputTimeFormatString').set('value', this._settings.get('format')); + this.scheme.find(this, 'InputTooltipFormatString').set('value', this._settings.get('tooltip')); + return root; + }; + + ClockSettingsDialog.prototype.applySettings = function() { + this._settings.set('utc', this.scheme.find(this, 'InputUseUTC').get('value')); + this._settings.set('interval', parseInt(this.scheme.find(this, 'InputInterval').get('value'), 10)); + this._settings.set('format', this.scheme.find(this, 'InputTimeFormatString').get('value'), true); + this._settings.set('tooltip', this.scheme.find(this, 'InputTooltipFormatString').get('value'), true); + }; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + /** + * PanelItem: Clock + */ + function PanelItemClock(settings) { + PanelItem.apply(this, ['PanelItemClock corewm-panel-right', 'Clock', settings, { + utc: false, + interval: 1000, + format: 'H:i:s', + tooltip: 'l, j F Y' + }]); + this.clockInterval = null; + this.$clock = null; + } + + PanelItemClock.prototype = Object.create(PanelItem.prototype); + PanelItemClock.constructor = PanelItem; + + PanelItemClock.prototype.createInterval = function() { + var self = this; + var timeFmt = this._settings.get('format'); + var tooltipFmt = this._settings.get('tooltip'); + + function update() { + var clock = self.$clock; + if ( clock ) { + var now = new Date(); + var t = OSjs.Helpers.Date.format(now, timeFmt); + var d = OSjs.Helpers.Date.format(now, tooltipFmt); + Utils.$empty(clock); + clock.appendChild(document.createTextNode(t)); + clock.setAttribute('aria-label', String(t)); + clock.title = d; + } + clock = null; + } + + function create(interval) { + clearInterval(self.clockInterval); + self.clockInterval = clearInterval(self.clockInterval); + self.clockInterval = setInterval(function() { + update(); + }, interval); + } + + create(this._settings.get('interval')); + update(); + }; + + PanelItemClock.prototype.init = function() { + var root = PanelItem.prototype.init.apply(this, arguments); + + this.$clock = document.createElement('span'); + this.$clock.innerHTML = '00:00:00'; + this.$clock.setAttribute('role', 'button'); + + var li = document.createElement('li'); + li.appendChild(this.$clock); + this._$container.appendChild(li); + + this.createInterval(); + + return root; + }; + + PanelItemClock.prototype.applySettings = function() { + this.createInterval(); + }; + + PanelItemClock.prototype.openSettings = function() { + PanelItem.prototype.openSettings.call(this, ClockSettingsDialog, {}); + }; + + PanelItemClock.prototype.destroy = function() { + this.clockInterval = clearInterval(this.clockInterval); + this.$clock = Utils.$remove(this.$clock); + PanelItem.prototype.destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.Clock = PanelItemClock; + +})( + OSjs.Applications.CoreWM.Class, + OSjs.Applications.CoreWM.Panel, + OSjs.Applications.CoreWM.PanelItem, + OSjs.Applications.CoreWM.PanelItemDialog, + OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI, OSjs.Core.Window); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + function NotificationAreaItem(name, opts) { + opts = opts || {}; + + this.name = name; + this.opts = opts; + this.$container = document.createElement('li'); + this.$image = (opts.image || opts.icon) ? document.createElement('img') : null; + this.onCreated = opts.onCreated || function() {}; + this.onInited = opts.onInited || function() {}; + this.onDestroy = opts.onDestroy || function() {}; + this.onClick = opts.onClick || function() {}; + this.onContextMenu = opts.onContextMenu || function() {}; + + this._build(name); + this.onCreated.call(this); + } + + NotificationAreaItem.prototype._build = function(name) { + var self = this; + var classNames = ['NotificationArea', 'NotificationArea_' + name]; + if ( this.opts.className ) { + classNames.push(this.opts.className); + } + + this.$container.className = classNames.join(' '); + this.$container.setAttribute('role', 'button'); + this.$container.setAttribute('aria-label', this.opts.title); + + if ( this.opts.tooltip ) { + this.$container.title = this.opts.tooltip; + } + + Utils.$bind(this.$container, 'mousedown', function(ev) { + ev.preventDefault(); + ev.stopPropagation(); + }); + + Utils.$bind(this.$container, 'click', function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + OSjs.API.blurMenu(); + self.onClick.apply(self, arguments); + return false; + }); + + Utils.$bind(this.$container, 'contextmenu', function(ev) { + ev.stopPropagation(); + ev.preventDefault(); + OSjs.API.blurMenu(); + self.onContextMenu.apply(self, arguments); + return false; + }); + + if ( this.$image ) { + this.$image.title = this.opts.title || ''; + this.$image.src = (this.opts.image || this.opts.icon || 'about:blank'); + this.$container.appendChild(this.$image); + } + + var inner = document.createElement('div'); + inner.appendChild(document.createElement('div')); + this.$container.appendChild(inner); + }; + + NotificationAreaItem.prototype.init = function(root) { + root.appendChild(this.$container); + + try { + this.onInited.call(this, this.$container, this.$image); + } catch ( e ) { + console.warn('NotificationAreaItem', 'onInited error'); + console.warn(e, e.stack); + } + }; + + NotificationAreaItem.prototype.setIcon = function(src) { + return this.setImage(src); + }; + + NotificationAreaItem.prototype.setImage = function(src) { + if ( this.$image ) { + this.$image.src = src; + } + this.opts.image = src; + }; + + NotificationAreaItem.prototype.setTitle = function(title) { + if ( this.$image ) { + this.$image.title = title; + } + this.opts.title = title; + }; + + NotificationAreaItem.prototype.destroy = function() { + if ( this.$container ) { + Utils.$unbind(this.$container, 'click'); + Utils.$unbind(this.$container, 'contextmenu'); + } + this.onDestroy.call(this); + + this.$image = Utils.$remove(this.$image); + this.$container = Utils.$remove(this.$container); + }; + + // NOTE: This is a workaround for resetting items on panel change + var _restartFix = {}; + + /** + * PanelItem: NotificationArea + */ + function PanelItemNotificationArea() { + PanelItem.apply(this, ['PanelItemNotificationArea corewm-panel-right']); + this.notifications = {}; + } + + PanelItemNotificationArea.prototype = Object.create(PanelItem.prototype); + PanelItemNotificationArea.constructor = PanelItem; + + PanelItemNotificationArea.prototype.init = function() { + var self = this; + + var root = PanelItem.prototype.init.apply(this, arguments); + root.setAttribute('role', 'toolbar'); + + var fix = Object.keys(_restartFix); + if ( fix.length ) { + fix.forEach(function(k) { + self.createNotification(k, _restartFix[k]); + }); + } + + return root; + }; + + PanelItemNotificationArea.prototype.createNotification = function(name, opts) { + if ( this._$root ) { + if ( !this.notifications[name] ) { + var item = new NotificationAreaItem(name, opts); + item.init(this._$container); + this.notifications[name] = item; + _restartFix[name] = opts; + + return item; + } + } + return null; + }; + + PanelItemNotificationArea.prototype.removeNotification = function(name) { + if ( this._$root ) { + if ( this.notifications[name] ) { + this.notifications[name].destroy(); + delete this.notifications[name]; + if ( _restartFix[name] ) { + delete _restartFix[name]; + } + return true; + } + } + + return false; + }; + + PanelItemNotificationArea.prototype.getNotification = function(name) { + if ( this._$root ) { + if ( this.notifications[name] ) { + return this.notifications[name]; + } + } + return false; + }; + + PanelItemNotificationArea.prototype.destroy = function() { + for ( var i in this.notifications ) { + if ( this.notifications.hasOwnProperty(i) ) { + if ( this.notifications[i] ) { + this.notifications[i].destroy(); + } + delete this.notifications[i]; + } + } + + PanelItem.prototype.destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.NotificationArea = PanelItemNotificationArea; + +})(OSjs.Applications.CoreWM.Class, OSjs.Applications.CoreWM.Panel, OSjs.Applications.CoreWM.PanelItem, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, Utils, API, GUI, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + function WindowListEntry(win, className) { + + var el = document.createElement('li'); + el.className = className; + el.title = win._title; + el.setAttribute('role', 'button'); + el.setAttribute('aria-label', win._title); + + var img = document.createElement('img'); + img.alt = win._title; + img.src = win._icon; + + var span = document.createElement('span'); + span.appendChild(document.createTextNode(win._title)); + + el.appendChild(img); + el.appendChild(span); + + Utils.$bind(el, 'click', function() { + win._restore(false, true); + }); + + Utils.$bind(el, 'contextmenu', function(ev) { + ev.preventDefault(); + ev.stopPropagation(); + + if ( win ) { + win._onWindowIconClick(ev, this); + } + + return false; + }); + + var peeking = false; + OSjs.GUI.Helpers.createDroppable(el, { + onDrop: function(ev, el) { + if ( win ) { + win._focus(); + } + }, + onLeave: function() { + if ( peeking ) { + peeking = false; + } + }, + onEnter: function(ev, inst, args) { + if ( !peeking ) { + if ( win ) { + win._focus(); + } + peeking = true; + } + }, + onItemDropped: function(ev, el, item, args) { + if ( win ) { + return win._onDndEvent(ev, 'itemDrop', item, args); + } + return false; + }, + onFilesDropped: function(ev, el, files, args) { + if ( win ) { + return win._onDndEvent(ev, 'filesDrop', files, args); + } + return false; + } + }); + + if ( win._state.focused ) { + el.className += ' Focused'; + } + + this.$element = el; + this.id = win._wid; + } + + WindowListEntry.prototype.destroy = function() { + if ( this.$element ) { + Utils.$unbind(this.$element, 'click'); + Utils.$unbind(this.$element, 'contextmenu'); + this.$element = Utils.$remove(this.$element); + } + }; + + WindowListEntry.prototype.event = function(ev, win, parentEl) { + var cn = 'WindowList_Window_' + win._wid; + + function _change(cn, callback) { + var els = parentEl.getElementsByClassName(cn); + if ( els.length ) { + for ( var i = 0, l = els.length; i < l; i++ ) { + if ( els[i] && els[i].parentNode ) { + callback(els[i]); + } + } + } + } + + if ( ev === 'focus' ) { + _change(cn, function(el) { + el.className += ' Focused'; + }); + } else if ( ev === 'blur' ) { + _change(cn, function(el) { + el.className = el.className.replace(/\s?Focused/, ''); + }); + } else if ( ev === 'title' ) { + _change(cn, function(el) { + el.setAttribute('aria-label', win._title); + + var span = el.getElementsByTagName('span')[0]; + if ( span ) { + Utils.$empty(span); + span.appendChild(document.createTextNode(win._title)); + } + var img = el.getElementsByTagName('img')[0]; + if ( img ) { + img.alt = win._title; + } + }); + } else if ( ev === 'icon' ) { + _change(cn, function(el) { + el.getElementsByTagName('img')[0].src = win._icon; + }); + } else if ( ev === 'attention_on' ) { + _change(cn, function(el) { + if ( !el.className.match(/Attention/) ) { + el.className += ' Attention'; + } + }); + } else if ( ev === 'attention_off' ) { + _change(cn, function(el) { + if ( !el.className.match(/Attention/) ) { + el.className = el.className.replace(/\s?Attention/, ''); + } + }); + } else if ( ev === 'close' ) { + return false; + } + + return true; + }; + + /** + * PanelItem: WindowList + */ + function PanelItemWindowList() { + PanelItem.apply(this, ['PanelItemWindowList corewm-panel-expand']); + this.entries = []; + } + + PanelItemWindowList.prototype = Object.create(PanelItem.prototype); + PanelItemWindowList.constructor = PanelItem; + + PanelItemWindowList.prototype.init = function() { + var root = PanelItem.prototype.init.apply(this, arguments); + + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + var wins = wm.getWindows(); + for ( var i = 0; i < wins.length; i++ ) { + if ( wins[i] ) { + this.update('create', wins[i]); + } + } + } + + return root; + }; + + PanelItemWindowList.prototype.destroy = function() { + this.entries.forEach(function(e) { + try { + e.destroy(); + } catch ( e ) {} + e = null; + }); + + this.entries = []; + + PanelItem.prototype.destroy.apply(this, arguments); + }; + + PanelItemWindowList.prototype.update = function(ev, win) { + if ( !this._$container || (win && win._properties.allow_windowlist === false) ) { + return; + } + + var entry = null; + if ( ev === 'create' ) { + var className = 'corewm-panel-ellipsis WindowList_Window_' + win._wid; + if ( this._$container.getElementsByClassName(className).length ) { + return; + } + + entry = new WindowListEntry(win, className); + this.entries.push(entry); + this._$container.appendChild(entry.$element); + } else { + var found = -1; + this.entries.forEach(function(e, idx) { + if ( e.id === win._wid ) { + found = idx; + } + return found !== -1; + }); + + entry = this.entries[found]; + if ( entry ) { + if ( entry.event(ev, win, this._$container) === false ) { + entry.destroy(); + + this.entries.splice(found, 1); + } + } + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.WindowList = PanelItemWindowList; + +})(OSjs.Applications.CoreWM.Class, OSjs.Applications.CoreWM.Panel, OSjs.Applications.CoreWM.PanelItem, OSjs.Utils, OSjs.API, OSjs.GUI, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + /** + * PanelItem: Weather + */ + function PanelItemWeather() { + var self = this; + + PanelItem.apply(this, ['PanelItemWeather corewm-panel-right corewm-panel-dummy']); + + this.clockInterval = null; + this.position = null; + this.interval = null; + this.$element = null; + this.$image = null; + + if ( navigator.geolocation ) { + navigator.geolocation.getCurrentPosition(function(pos) { + self.position = pos; + setTimeout(function() { + self.updateWeather(); + }, 100); + }); + } + } + + PanelItemWeather.prototype = Object.create(PanelItem.prototype); + PanelItemWeather.constructor = PanelItem; + + PanelItemWeather.prototype.init = function() { + var root = PanelItem.prototype.init.apply(this, arguments); + this.$element = document.createElement('li'); + this.$image = document.createElement('img'); + this.$element.appendChild(this.$image); + this._$container.appendChild(this.$element); + this.updateWeather(); + return root; + }; + + PanelItemWeather.prototype.destroy = function() { + this.interval = clearInterval(this.interval); + this.$image = Utils.$remove(this.$image); + this.$element = Utils.$remove(this.$element); + + PanelItem.prototype.destroy.apply(this, arguments); + }; + + PanelItemWeather.prototype.updateWeather = function() { + var self = this; + + if ( !this.$image ) { + return; + } + + this.$image.title = 'Not allowed or unavailable'; + + var busy = false; + + function setImage(src) { + self.$image.src = src; + } + + function setWeather(name, weather, main) { + name = name || ''; + weather = weather || {}; + main = main || {}; + + var desc = weather.description || ''; + var temp = main.temp || ''; + if ( main.temp ) { + temp += 'C'; + } + var icon = 'sunny.png'; + + switch ( desc ) { + case 'clear sky': + if ( weather.icon === '01n' ) { + icon = 'weather-clear-night.png'; + } else { + icon = 'weather-clear.png'; + } + break; + case 'few clouds': + if ( weather.icon === '02n' ) { + icon = 'weather-few-clouds-night.png'; + } else { + icon = 'weather-few-clouds.png'; + } + break; + case 'scattered clouds': + case 'broken clouds': + icon = 'weather-overcast.png'; + break; + case 'shower rain': + icon = 'weather-showers.png'; + break; + case 'rain': + icon = 'weather-showers-scattered.png'; + break; + case 'thunderstorm': + icon = 'stock_weather-storm.png'; + break; + case 'snow': + icon = 'stock_weather-snow.png'; + break; + case 'mist': + icon = 'stock_weather-fog.png'; + break; + default: + if ( desc.match(/rain$/) ) { + icon = 'weather-showers-scattered.png'; + } + break; + } + + var src = API.getIcon('status/' + icon); + self.$image.title = Utils.format('{0} - {1} - {2}', name, desc, temp); + setImage(src); + } + + function updateWeather() { + if ( busy || !self.position ) { + return; + } + busy = true; + + var lat = self.position.coords.latitude; + var lon = self.position.coords.longitude; + var unt = 'metric'; + var key = '4ea33327bcfa4ea0293b2d02b6fda385'; + var url = Utils.format('http://api.openweathermap.org/data/2.5/weather?lat={0}&lon={1}&units={2}&APPID={3}', lat, lon, unt, key); + + API.curl({ + url: url + }, function(error, response) { + if ( !error && response ) { + var result = null; + try { + result = JSON.parse(response.body); + } catch ( e ) {} + + if ( result ) { + setWeather(result.name, result.weather ? result.weather[0] : null, result.main); + } + } + + busy = false; + }); + } + + setImage(API.getIcon('status/weather-severe-alert.png')); + + this.interval = setInterval(function() { + updateWeather(); + }, (60 * 60 * 1000)); + + Utils.$bind(this._$root, 'click', function() { + updateWeather(); + }); + + setTimeout(function() { + updateWeather(); + }, 1000); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.Weather = PanelItemWeather; + +})(OSjs.Applications.CoreWM.Class, OSjs.Applications.CoreWM.Panel, OSjs.Applications.CoreWM.PanelItem, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + /** + * PanelItem: AppMenu + */ + function PanelItemAppMenu(settings) { + PanelItem.apply(this, ['PanelItemAppMenu', 'AppMenu', settings, {}]); + this.$container = null; + } + + PanelItemAppMenu.prototype = Object.create(PanelItem.prototype); + PanelItemAppMenu.constructor = PanelItem; + + PanelItemAppMenu.prototype.init = function() { + var root = PanelItem.prototype.init.apply(this, arguments); + var wm = OSjs.Core.getWindowManager(); + + var sel = document.createElement('li'); + sel.title = API._('LBL_APPLICATIONS'); + sel.innerHTML = ''; + sel.className = 'corewm-panel-button-centered'; + sel.setAttribute('role', 'button'); + sel.setAttribute('data-label', 'OS.js Application Menu'); + + Utils.$bind(sel, 'click', function(ev) { + ev.preventDefault(); + ev.stopPropagation(); + OSjs.Applications.CoreWM.showMenu(ev); + }); + + this._$container.appendChild(sel); + + return root; + }; + + PanelItemAppMenu.prototype.destroy = function() { + this.$container = null; + PanelItem.prototype.destroy.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.AppMenu = PanelItemAppMenu; + +})(OSjs.Applications.CoreWM.Class, OSjs.Applications.CoreWM.Panel, OSjs.Applications.CoreWM.PanelItem, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(CoreWM, Panel, PanelItem, PanelItemDialog, Utils, API, VFS, GUI, Window) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // Search Settings Dialog + ///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// + // ITEM + ///////////////////////////////////////////////////////////////////////////// + + /** + * PanelItem: Search + */ + function PanelItemSearch(settings) { + PanelItem.apply(this, ['PanelItemSearch corewm-panel-right', 'Search', settings, { + }]); + + this.$ul = null; + this.$box = null; + this.$input = null; + + this.$message = null; + this.visible = false; + this.hookId = -1; + this.currentIndex = -1; + this.currentCount = 0; + } + + PanelItemSearch.prototype = Object.create(PanelItem.prototype); + PanelItemSearch.constructor = PanelItem; + + PanelItemSearch.prototype.init = function() { + var self = this; + var root = PanelItem.prototype.init.apply(this, arguments); + + var img = document.createElement('img'); + img.src = API.getIcon('actions/search.png'); + + var input = document.createElement('input'); + input.setAttribute('type', 'text'); + + var guinput = document.createElement('gui-text'); + guinput.appendChild(input); + + var ul = document.createElement('ul'); + + this.$message = document.createElement('div'); + this.$message.appendChild(document.createTextNode(API._('SEARCH_LOADING'))); + + this.$box = document.createElement('corewm-search'); + this.$box.className = 'custom-notification'; + this.$box.appendChild(guinput); + this.$box.appendChild(this.$message); + this.$box.appendChild(ul); + + var keyEvents = {}; + keyEvents[Utils.Keys.DOWN] = function(ev) { + self.navigateDown(); + }; + keyEvents[Utils.Keys.UP] = function(ev) { + self.navigateUp(); + }; + keyEvents[Utils.Keys.ESC] = function(ev) { + self.hide(); + }; + keyEvents[Utils.Keys.ENTER] = function(ev) { + console.error(this); + if ( this.value.length ) { + self.search(this.value); + this.value = ''; + } else { + self.navigateOpen(); + } + }; + + API.addHook('onBlurMenu', function() { + self.hide(); + }); + + Utils.$bind(root, 'click', function(ev) { + ev.stopPropagation(); + + if ( self.visible ) { + self.hide(); + } else { + self.show(); + } + }); + + Utils.$bind(input, 'mousedown', function(ev) { + ev.stopPropagation(); + }); + + Utils.$bind(input, 'keydown', function(ev) { + if ( keyEvents[ev.keyCode] ) { + ev.preventDefault(); + ev.stopPropagation(); + + keyEvents[ev.keyCode].call(this, ev); + } + }); + + Utils.$bind(ul, 'mousedown', function(ev) { + ev.stopPropagation(); + }); + + Utils.$bind(ul, 'click', function(ev) { + var target = ev.target; + if ( target.tagName === 'LI' ) { + self.launch(target); + } + }); + + Utils.$bind(this.$box, 'mousedown', function() { + if ( input ) { + input.focus(); + } + }); + + var li = document.createElement('li'); + li.appendChild(img); + + this.$ul = ul; + this.$input = input; + this._$container.appendChild(li); + + document.body.appendChild(this.$box); + + return root; + }; + + PanelItemSearch.prototype.applySettings = function() { + }; + + PanelItemSearch.prototype.openSettings = function() { + API.launch('ApplicationSettings', {category: 'search'}); + }; + + PanelItemSearch.prototype.destroy = function() { + if ( this.hookId >= 0 ) { + API.removeHook(this.hookId); + } + + Utils.$unbind(this._$root, 'click'); + Utils.$unbind(this.$input, 'mousedown'); + Utils.$unbind(this.$input, 'keydown'); + Utils.$unbind(this.$ul, 'mousedown'); + Utils.$unbind(this.$ul, 'click'); + Utils.$unbind(this.$box, 'mousedown'); + + this.$message = Utils.$remove(this.$message); + this.$input = Utils.$remove(this.$input); + this.$box = Utils.$remove(this.$box); + this.$ul = Utils.$remove(this.$ul); + + PanelItem.prototype.destroy.apply(this, arguments); + }; + + PanelItemSearch.prototype.launch = function(target) { + var launch = target.getAttribute('data-launch'); + var args = JSON.parse(target.getAttribute('data-args')); + var file = target.getAttribute('data-file'); + var mime = target.getAttribute('data-mime'); + var type = target.getAttribute('data-type'); + + if ( file ) { + if ( type === 'dir' ) { + API.launch('ApplicationFileManager', {path: file}); + } else { + API.open(new VFS.File(file, mime)); + } + } else { + API.launch(launch, args); + } + + this.hide(); + }; + + PanelItemSearch.prototype.show = function() { + if ( !this.$box || this.visible ) { + return; + } + + var wm = OSjs.Core.getWindowManager(); + var space = wm.getWindowSpace(true); + + Utils.$empty(this.$box.querySelector('ul')); + this.$box.style.marginTop = String(space.top) + 'px'; + this.$box.querySelector('input').value = ''; + this.$box.setAttribute('data-visible', String(true)); + + this.$box.querySelector('input').focus(); + this.visible = true; + + this.$message.style.display = 'none'; + }; + + PanelItemSearch.prototype.hide = function() { + if ( !this.$box || !this.visible ) { + return; + } + + this.$box.setAttribute('data-visible', String(false)); + this.visible = false; + }; + + PanelItemSearch.prototype.search = function(q) { + if ( !this.$box ) { + return; + } + + this.currentIndex = -1; + this.currentCount = 0; + + Utils.$empty(this.$message); + this.$message.appendChild(document.createTextNode(API._('SEARCH_LOADING'))); + this.$message.style.display = 'block'; + + var self = this; + OSjs.Core.getSearchEngine().search(q, {limit: 10, recursive: true}, function(errors, result) { + if ( errors.length ) { + console.error('PanelItemSearch::search()', 'errors', errors); + } else { + self.renderResult(result); + } + }); + }; + + PanelItemSearch.prototype.renderResult = function(list) { + if ( !this.$box ) { + return; + } + + var root = this.$box.querySelector('ul'); + Utils.$empty(root); + + this.currentCount = list.length; + + if ( this.currentCount ) { + this.$message.style.display = 'none'; + } else { + Utils.$empty(this.$message); + this.$message.appendChild(document.createTextNode(API._('SEARCH_NO_RESULTS'))); + this.$message.style.display = 'block'; + } + + list.forEach(function(l) { + var img = document.createElement('img'); + img.src = l.icon; + + var title = document.createElement('div'); + title.className = 'Title'; + title.appendChild(document.createTextNode(l.title)); + + var description = document.createElement('div'); + description.className = 'Message'; + description.appendChild(document.createTextNode(l.description)); + + var node = document.createElement('li'); + node.setAttribute('data-launch', l.launch.application); + node.setAttribute('data-args', JSON.stringify(l.launch.args)); + if ( l.launch.file ) { + node.setAttribute('data-file', l.launch.file.path); + node.setAttribute('data-mime', l.launch.file.mime); + node.setAttribute('data-type', l.launch.file.type); + } + + node.appendChild(img); + node.appendChild(title); + node.appendChild(description); + root.appendChild(node); + }); + }; + + PanelItemSearch.prototype.updateSelection = function() { + var root = this.$box.querySelector('ul'); + var child = root.children[this.currentIndex]; + + root.querySelectorAll('li').forEach(function(el) { + Utils.$removeClass(el, 'active'); + }); + + Utils.$addClass(child, 'active'); + }; + + PanelItemSearch.prototype.navigateUp = function() { + if ( !this.currentCount ) { + return; + } + + if ( this.currentIndex > 0 ) { + this.currentIndex--; + } else { + this.currentIndex = this.currentCount - 1; + } + + this.updateSelection(); + }; + + PanelItemSearch.prototype.navigateDown = function() { + if ( !this.currentCount ) { + return; + } + + if ( this.currentIndex < 0 || this.currentIndex >= (this.currentCount - 1) ) { + this.currentIndex = 0; + } else { + this.currentIndex++; + } + + this.updateSelection(); + }; + + PanelItemSearch.prototype.navigateOpen = function() { + if ( this.currentIndex === -1 || !this.currentCount ) { + return; + } + + var root = this.$box.querySelector('ul'); + var child = root.children[this.currentIndex]; + if ( child ) { + this.launch(child); + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.PanelItems.Search = PanelItemSearch; + +})( + OSjs.Applications.CoreWM.Class, + OSjs.Applications.CoreWM.Panel, + OSjs.Applications.CoreWM.PanelItem, + OSjs.Applications.CoreWM.PanelItemDialog, + OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI, OSjs.Core.Window); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, GUI, Utils, API, VFS) { + 'use strict'; + + var PADDING_PANEL_AUTOHIDE = 10; // FIXME: Replace with a constant ?! + + function defaultSettings(defaults) { + var compability = Utils.getCompability(); + + var cfg = { + animations: compability.css.animation, + useTouchMenu: compability.touch + }; + + if ( defaults ) { + cfg = Utils.mergeObject(cfg, defaults); + } + + return cfg; + } + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + /** + * Application + */ + var CoreWM = function(args, metadata) { + var importSettings = args.defaults || {}; + + WindowManager.apply(this, ['CoreWM', this, args, metadata, defaultSettings(importSettings)]); + + this.panels = []; + this.switcher = null; + this.iconView = null; + this.$themeLink = null; + this.$themeScript = null; + this.$animationLink = null; + this.importedSettings = Utils.mergeObject(API.getConfig('SettingsManager.CoreWM'), importSettings); + this.isResponsive = window.innerWidth <= 800; + + this.generatedHotkeyMap = {}; + + function _winGenericHotkey(ev, win, wm, hotkey) { + if ( win ) { + win._onKeyEvent(ev, 'keydown', hotkey); + } + } + this.hotkeyMap = { + SEARCH: function(ev, win, wm) { + if ( wm ) { + var panel = wm.getPanel(); + if ( panel ) { + var pitem = panel.getItemByType(OSjs.Applications.CoreWM.PanelItems.Search); + if ( pitem ) { + ev.preventDefault(); + pitem.show(); + } + } + } + }, + SWITCHER: function(ev, win, wm) { + if ( wm.getSetting('enableSwitcher') && wm.switcher ) { + wm.switcher.show(ev, win, wm); + } + }, + WINDOW_MINIMIZE: function(ev, win) { + if ( win ) { + win._minimize(); + } + }, + WINDOW_MAXIMIZE: function(ev, win) { + if ( win ) { + win._maximize(); + } + }, + WINDOW_RESTORE: function(ev, win) { + if ( win ) { + win._restore(); + } + }, + WINDOW_MOVE_LEFT: function(ev, win) { + if ( win ) { + win._moveTo('left'); + } + }, + WINDOW_MOVE_RIGHT: function(ev, win) { + if ( win ) { + win._moveTo('right'); + } + }, + WINDOW_MOVE_UP: function(ev, win) { + if ( win ) { + win._moveTo('top'); + } + }, + WINDOW_MOVE_DOWN: function(ev, win) { + if ( win ) { + win._moveTo('bottom'); + } + }, + SAVE: _winGenericHotkey, + SAVEAS: _winGenericHotkey, + OPEN: _winGenericHotkey + }; + + this._$notifications = document.createElement('corewm-notifications'); + this._$notifications.setAttribute('role', 'log'); + + document.body.appendChild(this._$notifications); + }; + + CoreWM.prototype = Object.create(WindowManager.prototype); + CoreWM.constructor = WindowManager; + + CoreWM.prototype.init = function() { + var link = (OSjs.Core.getConfig().Connection.RootURI || '/') + 'blank.css'; + + this.setThemeLink(Utils.checkdir(link)); + this.setAnimationLink(Utils.checkdir(link)); + + WindowManager.prototype.init.apply(this, arguments); + }; + + CoreWM.prototype.setup = function(cb) { + var self = this; + + function initNotifications() { + var user = OSjs.Core.getHandler().getUserData(); + + function displayMenu(ev) { + OSjs.API.createMenu([{ + title: API._('TITLE_SIGN_OUT'), + onClick: function() { + OSjs.API.signOut(); + } + }], ev); + + return false; + } + + function toggleFullscreen() { + var docElm = document.documentElement; + var notif = self.getNotificationIcon('_FullscreenNotification'); + if ( notif ) { + API.toggleFullscreen(notif.opts._isFullscreen ? document : docElm, !notif.opts._isFullscreen); + } + } + + if ( self.getSetting('fullscreen') ) { + self.createNotificationIcon('_FullscreenNotification', { + image: OSjs.API.getIcon('actions/gtk-fullscreen.png', '16x16'), + title: 'Enter fullscreen', + onClick: toggleFullscreen, + _isFullscreen: false + }); + } + + self.createNotificationIcon('_HandlerUserNotification', { + image: API.getIcon('status/avatar-default.png', '16x16'), + title: API._('TITLE_SIGNED_IN_AS_FMT', user.username), + onContextMenu: displayMenu, + onClick: displayMenu + }); + } + + this.applySettings(this._settings.get()); + + this._on('vfs', function(msg, obj) { + if ( !obj || msg.match(/^vfs:(un)?mount/) ) { + return; + } + + var wasTouched = false; + var desktopPath = self.getSetting('desktopPath'); + + function _check(f) { + return f.path.substr(0, desktopPath.length) === desktopPath; + } + + if ( obj.destination ) { + wasTouched = _check(obj.destination); + if ( !wasTouched ) { + wasTouched = _check(obj.source); + } + } else { + wasTouched = _check(obj); + } + + if ( wasTouched && self.iconView ) { + self.iconView._refresh(); + } + }); + + self.initSwitcher(); + self.initDesktop(); + self.initPanels(); + self.initIconView(); + + initNotifications(); + + cb(); + }; + + CoreWM.prototype.destroy = function(force) { + /*eslint new-cap: "warn"*/ + + if ( !force && !window.confirm(OSjs.Applications.CoreWM._('Killing this process will stop things from working!')) ) { + return false; + } + + this.removeNotificationIcon('_HandlerUserNotification'); + + if ( this.iconView ) { + this.iconView.destroy(); + } + if ( this.switcher ) { + this.switcher.destroy(); + } + + // Reset + this.destroyPanels(); + var settings = this.importedSettings; + try { + settings.background = 'color'; + } catch ( e ) {} + + this.applySettings(defaultSettings(settings), true); + + // Clear DOM + this._$notifications = Utils.$remove(this._$notifications); + this.$themeLink = Utils.$remove(this.$themeLink); + this.$themeScript = Utils.$remove(this.$themeScript); + this.$animationLink = Utils.$remove(this.$animationLink); + this.switcher = null; + this.iconView = null; + + return WindowManager.prototype.destroy.apply(this, []); + }; + + CoreWM.prototype.destroyPanels = function() { + this.panels.forEach(function(p) { + p.destroy(); + }); + this.panels = []; + }; + + // Copy from Application + CoreWM.prototype._createDialog = function(className, args, parentClass) { + if ( OSjs.Dialogs[className] ) { + + var w = Object.create(OSjs.Dialogs[className].prototype); + OSjs.Dialogs[className].apply(w, args); + + if ( parentClass && (parentClass instanceof OSjs.Core.Window) ) { + parentClass._addChild(w); + } + + this.addWindow(w); + return w; + } + return false; + }; + + // + // Initialization + // + + CoreWM.prototype.initSwitcher = function() { + this.switcher = new OSjs.Applications.CoreWM.WindowSwitcher(); + }; + + CoreWM.prototype.initDesktop = function() { + var self = this; + + // Enable dropping of new wallpaper if no iconview is enabled + GUI.Helpers.createDroppable(document.body, { + onOver: function(ev, el, args) { + self.onDropOver(ev, el, args); + }, + + onLeave : function() { + self.onDropLeave(); + }, + + onDrop : function() { + self.onDrop(); + }, + + onItemDropped: function(ev, el, item, args) { + self.onDropItem(ev, el, item, args); + }, + + onFilesDropped: function(ev, el, files, args) { + self.onDropFile(ev, el, files, args); + } + }); + + document.addEventListener('contextmenu', function(ev) { + return self.onContextMenu(ev); + }, true); + + document.addEventListener('click', function(ev) { + return self.onGlobalClick(ev); + }, true); + }; + + CoreWM.prototype.initPanels = function(applySettings) { + var ps = this.getSetting('panels'); + var added = false; + var self = this; + + if ( ps === false ) { + added = true; + } else { + this.destroyPanels(); + + (ps || []).forEach(function(storedItem) { + if ( !storedItem.options ) { + storedItem.options = {}; + } + + var panelSettings = new OSjs.Helpers.SettingsFragment(storedItem.options, 'CoreWM'); + var p = new OSjs.Applications.CoreWM.Panel('Default', panelSettings, self); + p.init(document.body); + + (storedItem.items || []).forEach(function(iter) { + try { + if ( typeof iter.settings === 'undefined' || iter.settings === null ) { + iter.settings = {}; + } + + var itemSettings = {}; + try { + itemSettings = new OSjs.Helpers.SettingsFragment(iter.settings, 'CoreWM'); + } catch ( ex ) { + console.warn('An error occured while loading PanelItem settings', ex); + console.warn('stack', ex.stack); + } + + p.addItem(new OSjs.Applications.CoreWM.PanelItems[iter.name](itemSettings)); + added = true; + } catch ( e ) { + console.warn('An error occured while creating PanelItem', e); + console.warn('stack', e.stack); + + self.notification({ + icon: 'status/important.png', + title: 'CoreWM', + message: OSjs.Applications.CoreWM._('An error occured while creating PanelItem: {0}', e) + }); + } + }); + + self.panels.push(p); + }); + } + + if ( !added ) { + this.notification({ + timeout : 0, + icon: 'status/important.png', + title: 'CoreWM', + message: OSjs.Applications.CoreWM._('Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)') + }); + } + + if ( applySettings ) { + // Workaround for windows appearing behind panel + var p = this.panels[0]; + if ( p && p.getOntop() && p.getPosition('top') ) { + setTimeout(function() { + var space = self.getWindowSpace(); + self._windows.forEach(function(iter) { + if ( iter && iter._position.y < space.top ) { + console.warn('CoreWM::initPanels()', 'I moved this window because it overlapped with a panel!', iter); + iter._move(iter._position.x, space.top); + } + }); + }, 800); + } + + if ( this.iconView ) { + this.iconView.resize(this); + } + } + + setTimeout(function() { + self.setStyles(self._settings.get()); + }, 1000); + }; + + CoreWM.prototype.initIconView = function() { + var self = this; + + var en = this.getSetting('enableIconView'); + if ( !en && this.iconView ) { + this.iconView.destroy(); + this.iconView = null; + return; + } + + if ( en && !this.iconView ) { + this.iconView = new OSjs.Applications.CoreWM.DesktopIconView(this); + document.body.appendChild(this.iconView.getRoot()); + } + + setTimeout(function() { + if ( self.iconView ) { + self.iconView.resize(self); + } + }, 1000); + }; + + // + // Events + // + + CoreWM.prototype.resize = function(ev, rect, wasInited) { + + var space = this.getWindowSpace(); + var margin = this.getSetting('desktopMargin'); + var windows = this._windows; + var responsive = window.innerWidth <= 800; + + function moveIntoView() { + var i = 0, l = windows.length, iter, wrect; + var mx, my, moved; + + for ( i; i < l; i++ ) { + iter = windows[i]; + if ( !iter ) { + continue; + } + wrect = iter._getViewRect(); + if ( wrect === null || iter._state.mimimized ) { + continue; + } + + // Move the window into view if outside of view + mx = iter._position.x; + my = iter._position.y; + moved = false; + + if ( (wrect.left + margin) > rect.width ) { + mx = space.width - iter._dimension.w; + moved = true; + } + if ( (wrect.top + margin) > rect.height ) { + my = space.height - iter._dimension.h; + moved = true; + } + + if ( moved ) { + if ( mx < space.left ) { + mx = space.left; + } + if ( my < space.top ) { + my = space.top; + } + iter._move(mx, my); + } + + // Restore maximized windows (FIXME: Better solution?) + if ( iter._state.maximized && (wasInited ? iter._restored : true) ) { + iter._restore(true, false); + } + } + } + + function emitResize() { + windows.forEach(function(w) { + if ( w ) { + w._emit('resize'); + } + }); + } + + if ( responsive ) { + emitResize(); + } else { + if ( this.isResponsive ) { // Emit the resize signal again if we changed view + emitResize(); + } + + if ( this.getSetting('moveOnResize') ) { + moveIntoView(); + } + } + + this.isResponsive = responsive; + }; + + CoreWM.prototype.onDropLeave = function() { + document.body.setAttribute('data-attention', 'false'); + }; + + CoreWM.prototype.onDropOver = function() { + document.body.setAttribute('data-attention', 'true'); + }; + + CoreWM.prototype.onDrop = function() { + document.body.setAttribute('data-attention', 'false'); + }; + + CoreWM.prototype.onDropItem = function(ev, el, item, args) { + document.body.setAttribute('data-attention', 'false'); + + var self = this; + + var _applyWallpaper = function(data) { + this.applySettings({wallpaper: data.path}, false, true); + }; + + var _createShortcut = function(data) { + if ( this.iconView ) { + this.iconView.addShortcut(data, this, true); + } + }; + + var _openMenu = function(data) { + var pos = {x: ev.clientX, y: ev.clientY}; + OSjs.API.createMenu([{ + title: OSjs.Applications.CoreWM._('Create shortcut'), + onClick: function() { + _createShortcut.call(self, data); + } + }, { + title: OSjs.Applications.CoreWM._('Set as wallpaper'), + onClick: function() { + _applyWallpaper.call(self, data); + } + }], pos); + }; + + if ( item ) { + var data = item.data; + if ( item.type === 'file' ) { + if ( data && data.mime ) { + if ( data.mime.match(/^image/) ) { + if ( this.iconView ) { + _openMenu(data); + } else { + _applyWallpaper.call(this, data); + } + } else { + _createShortcut.call(this, data); + } + } + } else if ( item.type === 'application' ) { + _createShortcut.call(this, data); + } + } + }; + + CoreWM.prototype.onDropFile = function(ev, el, files, args) { + VFS.upload({ + destination: 'desktop:///', + files: files + }, function(error, file) { + // Do nothing as the message API will catch this + }); + }; + + CoreWM.prototype.onGlobalClick = function(ev) { + this.themeAction('event', [ev]); + return true; + }; + + CoreWM.prototype.onContextMenu = function(ev) { + if ( ev.target === document.body ) { + ev.preventDefault(); + ev.stopPropagation(); + this.openDesktopMenu(ev); + return false; + } + return true; + }; + + CoreWM.prototype.onKeyUp = function(ev, win) { + if ( !ev ) { + return; + } + + if ( !ev.altKey ) { + if ( this.switcher ) { + this.switcher.hide(ev, win, this); + } + } + }; + + CoreWM.prototype.onKeyDown = function(ev, win) { + var combination = false; + var self = this; + + if ( ev ) { + var map = this.generatedHotkeyMap; + Object.keys(map).some(function(i) { + if ( Utils.keyCombination(ev, i) ) { + map[i](ev, win, self); + combination = i; + return true; + } + return false; + }); + } + return combination; + }; + + CoreWM.prototype.showSettings = function(category) { + OSjs.API.launch('ApplicationSettings', {category: category}); + }; + + CoreWM.prototype.eventWindow = function(ev, win) { + // Make sure panel items are updated correctly + // FIXME: This is not compatible with other PanelItems + + this.panels.forEach(function(panel) { + if ( panel ) { + var panelItem = panel.getItem(OSjs.Applications.CoreWM.PanelItems.WindowList); + if ( panelItem ) { + panelItem.update(ev, win); + } + } + }); + + // Unfocus IconView if we focus a window + if ( ev === 'focus' ) { + if ( this.iconView ) { + this.iconView.blur(); + } + } + }; + + CoreWM.prototype.notification = (function() { + var _visible = 0; + + return function(opts) { + opts = opts || {}; + opts.icon = opts.icon || null; + opts.title = opts.title || null; + opts.message = opts.message || ''; + opts.onClick = opts.onClick || function() {}; + + if ( typeof opts.timeout === 'undefined' ) { + opts.timeout = 5000; + } + + console.debug('CoreWM::notification()', opts); + + var container = document.createElement('corewm-notification'); + var classNames = ['']; + var self = this; + var timeout = null; + var wm = OSjs.Core.getWindowManager(); + + var animationCallback = null; + + function _remove() { + if ( timeout ) { + clearTimeout(timeout); + timeout = null; + } + + container.onclick = null; + function _removeDOM() { + Utils.$unbind(container); + if ( container.parentNode ) { + container.parentNode.removeChild(container); + } + _visible--; + if ( _visible <= 0 ) { + self._$notifications.style.display = 'none'; + } + } + + var anim = wm ? wm.getSetting('animations') : false; + if ( anim ) { + container.setAttribute('data-hint', 'closing'); + animationCallback = function() { + _removeDOM(); + }; + } else { + container.style.display = 'none'; + _removeDOM(); + } + } + + if ( opts.icon ) { + var icon = document.createElement('img'); + icon.alt = ''; + icon.src = API.getIcon(opts.icon, '32x32'); + classNames.push('HasIcon'); + container.appendChild(icon); + } + + if ( opts.title ) { + var title = document.createElement('div'); + title.className = 'Title'; + title.appendChild(document.createTextNode(opts.title)); + classNames.push('HasTitle'); + container.appendChild(title); + } + + if ( opts.message ) { + var message = document.createElement('div'); + message.className = 'Message'; + var lines = opts.message.split('\n'); + lines.forEach(function(line, idx) { + message.appendChild(document.createTextNode(line)); + if ( idx < (lines.length - 1) ) { + message.appendChild(document.createElement('br')); + } + }); + classNames.push('HasMessage'); + container.appendChild(message); + } + + _visible++; + if ( _visible > 0 ) { + this._$notifications.style.display = 'block'; + } + + container.setAttribute('aria-label', String(opts.title)); + container.setAttribute('role', 'alert'); + + container.className = classNames.join(' '); + container.onclick = function(ev) { + _remove(); + + opts.onClick(ev); + }; + + var preventTimeout; + function _onanimationend(ev) { + if ( typeof self._animationCallback === 'function') { + clearTimeout(preventTimeout); + preventTimeout = setTimeout(function() { + animationCallback(ev); + animationCallback = false; + }, 10); + } + } + + Utils.$bind(container, 'transitionend', _onanimationend); + Utils.$bind(container, 'animationend', _onanimationend); + + var space = this.getWindowSpace(true); + this._$notifications.style.marginTop = String(space.top) + 'px'; + this._$notifications.appendChild(container); + + if ( opts.timeout ) { + timeout = setTimeout(function() { + _remove(); + }, opts.timeout); + } + }; + })(); + + CoreWM.prototype._getNotificationArea = function(panelId) { + panelId = panelId || 0; + var panel = this.panels[panelId]; + if ( panel ) { + return panel.getItem(OSjs.Applications.CoreWM.PanelItems.NotificationArea, false); + } + + return false; + }; + + CoreWM.prototype.createNotificationIcon = function(name, opts, panelId) { + opts = opts || {}; + if ( !name ) { + return false; + } + + var pitem = this._getNotificationArea(panelId); + if ( pitem ) { + return pitem.createNotification(name, opts); + } + return null; + }; + + CoreWM.prototype.removeNotificationIcon = function(name, panelId) { + if ( !name ) { + return false; + } + + var pitem = this._getNotificationArea(panelId); + if ( pitem ) { + pitem.removeNotification(name); + return true; + } + return false; + }; + + CoreWM.prototype.getNotificationIcon = function(name, panelId) { + if ( !name ) { + return false; + } + + var pitem = this._getNotificationArea(panelId); + if ( pitem ) { + return pitem.getNotification(name); + } + return false; + }; + + CoreWM.prototype._getContextMenu = function(arg) { + var self = this; + var menu = []; + + if ( this.iconView ) { + menu = this.iconView._getContextMenu(arg); + } + + menu.push({ + title: OSjs.Applications.CoreWM._('Open settings'), + onClick: function(ev) { + self.showSettings(); + } + }); + + if ( this.getSetting('enableIconView') === true ) { + menu.push({ + title: OSjs.Applications.CoreWM._('Hide Icons'), + onClick: function(ev) { + self.applySettings({enableIconView: false}, false, true); + } + }); + } else { + menu.push({ + title: OSjs.Applications.CoreWM._('Show Icons'), + onClick: function(ev) { + self.applySettings({enableIconView: true}, false, true); + } + }); + } + + return menu; + }; + + CoreWM.prototype.openDesktopMenu = function(ev) { + if ( this._emit('wm:contextmenu', [ev, this]) === false ) { + return; + } + + var menu = this._getContextMenu(); + API.createMenu(menu, ev); + }; + + CoreWM.prototype.applySettings = function(settings, force, save, triggerWatch) { + var self = this; + console.group('CoreWM::applySettings()'); + + settings = force ? settings : Utils.mergeObject(this._settings.get(), settings); + + console.log(settings); + + this.setBackground(settings); + this.setTheme(settings); + this.setIconView(settings); + this.setStyles(settings); + + if ( save ) { + this.initPanels(true); + if ( settings ) { + if ( settings.language ) { + OSjs.Core.getSettingsManager().set('Core', 'Locale', settings.language, triggerWatch); + API.setLocale(settings.language); + } + this._settings.set(null, settings, save, triggerWatch); + } + } + + this.generatedHotkeyMap = {}; + + var keys = this._settings.get('hotkeys'); + Object.keys(keys).forEach(function(k) { + self.generatedHotkeyMap[keys[k]] = function() { + var args = Array.prototype.slice.call(arguments); + args.push(k); + return self.hotkeyMap[k].apply(this, args); + }; + }); + + console.groupEnd(); + + return true; + }; + + CoreWM.prototype.themeAction = function(action, args) { + args = args || []; + if ( OSjs.Applications.CoreWM.CurrentTheme ) { + try { + OSjs.Applications.CoreWM.CurrentTheme[action].apply(null, args); + } catch ( e ) { + console.warn('CoreWM::themeAction()', 'exception', e); + console.warn(e.stack); + } + } + }; + + // + // Theme Setters + // + + CoreWM.prototype.setBackground = function(settings) { + if ( settings.backgroundColor ) { + document.body.style.backgroundColor = settings.backgroundColor; + } + if ( settings.fontFamily ) { + document.body.style.fontFamily = settings.fontFamily; + } + + var name = settings.wallpaper; + var type = settings.background; + + var className = 'color'; + var back = 'none'; + + if ( name && type.match(/^image/) ) { + back = name; + switch ( type ) { + case 'image' : className = 'normal'; break; + case 'image-center': className = 'center'; break; + case 'image-fill' : className = 'fill'; break; + case 'image-strech': className = 'strech'; break; + default: className = 'default'; break; + } + } + + document.body.setAttribute('data-background-style', className); + + if ( back !== 'none' ) { + try { + VFS.url(back, function(error, result) { + if ( !error ) { + back = 'url(\'' + result + '\')'; + document.body.style.backgroundImage = back; + } + }); + } catch ( e ) { + console.warn('CoreWM::setBackground()', e, e.stack); + } + } else { + document.body.style.backgroundImage = back; + } + }; + + CoreWM.prototype.setTheme = function(settings) { + if ( this.$themeLink ) { + if ( settings.styleTheme ) { + this.setThemeLink(API.getThemeCSS(settings.styleTheme)); + } else { + console.warn('NO THEME WAS SELECTED!'); + } + } + + if ( this.$themeLink ) { + this.themeAction('destroy'); + } + + this.setThemeScript(API.getThemeResource('theme.js')); + + if ( this.$animationLink ) { + if ( settings.animations ) { + this.setAnimationLink(API.getApplicationResource(this, 'animations.css')); + } else { + this.setAnimationLink(API.getThemeCSS(null)); + } + } + }; + + CoreWM.prototype.setIconView = function(settings) { + if ( settings.enableIconView ) { + this.initIconView(); + } else { + if ( this.iconView ) { + this.iconView.destroy(); + this.iconView = null; + } + } + }; + + CoreWM.prototype.setStyles = function(settings) { + /*eslint dot-notation: "off"*/ + + var styles = {}; + var raw = ''; + + if ( settings.panels ) { + settings.panels.forEach(function(p, i) { + styles['corewm-panel'] = {}; + styles['corewm-notification'] = {}; + styles['corewm-notification:before'] = { + 'opacity': p.options.opacity / 100 + }; + styles['corewm-panel:before'] = { + 'opacity': p.options.opacity / 100 + }; + + styles['.custom-notification'] = {}; + styles['.custom-notification:before'] = { + 'opacity': p.options.opacity / 100 + }; + + if ( p.options.background ) { + styles['corewm-panel:before']['background-color'] = p.options.background; + styles['corewm-notification:before']['background-color'] = p.options.background; + styles['.custom-notification:before']['background-color'] = p.options.background; + } + if ( p.options.foreground ) { + styles['corewm-panel']['color'] = p.options.foreground; + styles['corewm-notification']['color'] = p.options.foreground; + styles['.custom-notification']['color'] = p.options.foreground; + } + }); + } + + raw += '@media all and (max-width: 800px) {\n'; + raw += 'application-window {\n'; + + var borderSize = 0; + var space = this.getWindowSpace(true); + var theme = this.getStyleTheme(true); + if ( theme && theme.style && theme.style.window ) { + borderSize = theme.style.window.border; + } + + raw += 'top:' + String(space.top + borderSize) + 'px !important;\n'; + raw += 'left:' + String(space.left + borderSize) + 'px !important;\n'; + raw += 'right:' + String(borderSize) + 'px !important;\n'; + raw += 'bottom:' + String(space.bottom + borderSize) + 'px !important;\n'; + raw += '\n}'; + raw += '\n}'; + + styles['#CoreWMDesktopIconView'] = {}; + if ( settings.invertIconViewColor && settings.backgroundColor ) { + styles['#CoreWMDesktopIconView']['color'] = Utils.invertHEX(settings.backgroundColor); + } + + if ( Object.keys(styles).length ) { + this.createStylesheet(styles, raw); + } + }; + + CoreWM.prototype.setAnimationLink = function(src) { + if ( this.$animationLink ) { + this.$animationLink = Utils.$remove(this.$animationLink); + } + this.$animationLink = Utils.$createCSS(src); + }; + + CoreWM.prototype.setThemeLink = function(src) { + if ( this.$themeLink ) { + this.$themeLink = Utils.$remove(this.$themeLink); + } + this.$themeLink = Utils.$createCSS(src); + }; + + CoreWM.prototype.setThemeScript = function(src) { + if ( this.$themeScript ) { + this.$themeScript = Utils.$remove(this.$themeScript); + } + + var self = this; + if ( src ) { + this.$themeScript = Utils.$createJS(src, null, function() { + self.themeAction('init'); + }); + } + }; + + // + // Getters / Setters + // + + CoreWM.prototype.getWindowSpace = function(noMargin) { + var s = WindowManager.prototype.getWindowSpace.apply(this, arguments); + var d = this.getSetting('desktopMargin'); + + s.bottom = 0; + + this.panels.forEach(function(p) { + if ( p && p.getOntop() ) { + var ph = p.getHeight(); + if ( p.getAutohide() ) { + s.top += PADDING_PANEL_AUTOHIDE; + s.height -= PADDING_PANEL_AUTOHIDE; + } else if ( p.getPosition('top') ) { + s.top += ph; + s.height -= ph; + } else { + s.height -= ph; + } + + if ( p._options.get('position') === 'bottom' ) { + s.bottom += ph; + } + } + }); + + if ( !noMargin ) { + if ( d > 0 ) { + s.top += d; + s.left += d; + s.width -= (d * 2); + s.height -= (d * 2); + } + } + + return s; + }; + + CoreWM.prototype.getWindowPosition = function(borders) { + borders = (typeof borders === 'undefined') || (borders === true); + var pos = WindowManager.prototype.getWindowPosition.apply(this, arguments); + + var m = borders ? this.getSetting('desktopMargin') : 0; + pos.x += m || 0; + pos.y += m || 0; + + this.panels.forEach(function(p) { + if ( p && p.getOntop() && p.getPosition('top') ) { + if ( p.getAutohide() ) { + pos.y += PADDING_PANEL_AUTOHIDE; + } else { + pos.y += p.getHeight(); + } + } + }); + + return pos; + }; + + CoreWM.prototype.getSetting = function(k) { + var val = WindowManager.prototype.getSetting.apply(this, arguments); + if ( typeof val === 'undefined' || val === null ) { + return defaultSettings(this.importedSettings)[k]; + } + return val; + }; + + CoreWM.prototype.getDefaultSetting = function(k) { + var settings = defaultSettings(this.importedSettings); + if ( typeof k !== 'undefined' ) { + return settings[k]; + } + return settings; + }; + + CoreWM.prototype.getPanels = function() { + return this.panels; + }; + + CoreWM.prototype.getPanel = function(idx) { + return this.panels[(idx || 0)]; + }; + + CoreWM.prototype.getStyleTheme = function(returnMetadata) { + var name = this.getSetting('styleTheme') || null; + if ( returnMetadata ) { + var found = null; + if ( name ) { + this.getStyleThemes().forEach(function(t) { + if ( t && t.name === name ) { + found = t; + } + }); + } + return found; + } + return name; + }; + + CoreWM.prototype.getSoundTheme = function() { + return this.getSetting('soundTheme') || 'default'; + }; + + CoreWM.prototype.getIconTheme = function() { + return this.getSetting('iconTheme') || 'default'; + }; + + CoreWM.prototype.getSoundFilename = function(k) { + var sounds = this.getSetting('sounds') || {}; + return sounds[k] || null; + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM.Class = Object.seal(CoreWM); + OSjs.Applications.CoreWM.PanelItems = OSjs.Applications.CoreWM.PanelItems || {}; + OSjs.Applications.CoreWM.CurrentTheme = OSjs.Applications.CoreWM.CurrentTheme || null; + +})(OSjs.Core.WindowManager, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, GUI, Utils, API, VFS) { + // jscs:disable validateQuoteMarks + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + var _Locales = { + bg_BG : { + 'Killing this process will stop things from working!' : 'Прекратяването на този процес ще спре някой приложения!', + 'Open settings' : 'Отвори настойки', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Вашият панел няма обекти. Отидете в настойки за да върнете по подразбиране или да модифицирате ръчно\n(Тази грешка може да се появи след актуализация на OS.js)', + 'Create shortcut' : 'Създай пряк път', + 'Set as wallpaper' : 'Направи изображение за фон', + 'An error occured while creating PanelItem: {0}' : 'Появи се грешка докато се създаваше панелен обект: {0}', + + 'Development' : 'Разработка', + 'Education' : 'Образование', + 'Games' : 'Игри', + 'Graphics' : 'Графика', + 'Network' : 'Мрежа', + 'Multimedia' : 'Мултимедия', + 'Office' : 'Офис', + 'System' : 'Система', + 'Utilities' : 'Инструменти', + 'Other' : 'Други' + }, + de_DE : { + 'Killing this process will stop things from working!' : 'Das Beenden dieses Prozesses wird Konsequenzen haben!', + 'Open settings' : 'Einstellungen öffnen', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Ihr Panel enthält keine Items. Öffnen Sie die Einstellungen um die Panel-Einstellungen zurückzusetzen oder manuell zu ändern (Dieser Fehler kann nach einem Upgrade von OS.js entstehen)', + 'Create shortcut' : 'Verknüpfung erstellen', + 'Set as wallpaper' : 'Als Hintergrund verwenden', + 'An error occured while creating PanelItem: {0}' : 'Während des Erstellens eines Panel-Items ist folgender Fehler aufgetreten: {0}', + + 'Development' : 'Entwicklung', + 'Education' : 'Bildung', + 'Games' : 'Spiele', + 'Graphics' : 'Grafik', + 'Network' : 'Netzwerk', + 'Multimedia' : 'Multimedia', + 'Office' : 'Büro', + 'System' : 'System', + 'Utilities' : 'Zubehör', + 'Other' : 'Andere' + }, + es_ES : { + 'Killing this process will stop things from working!' : '¡Forzar la terminación de este proceso hará que las cosas dejen de funcionar!', + 'Open settings': 'Abrir preferencias', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Tu panel no tiene elementos. Restablece los valores por defecto en las preferencias, o modifícalo manualmente\n(Este error puede aparecer tras una actualización de OS.js)', + 'Create shortcut': 'Crear acceso directo', + 'Set as wallpaper' : 'Seleccionar como fondo de pantalla', + 'An error occured while creating PanelItem: {0}' : 'Se produjo un error al crear el PanelItem: {0}', + + 'Development' : 'Desarrollo', + 'Education' : 'Educación', + 'Games' : 'Juegos', + 'Graphics' : 'Gráficos', + 'Network' : 'Red', + 'Multimedia' : 'Multimedia', + 'Office' : 'Ofimática', + 'System' : 'Sistema', + 'Utilities' : 'Herramientas', + 'Other' : 'Otros' + }, + fr_FR : { + 'Killing this process will stop things from working!' : 'Tuer ce processus va arrêter d\'autres éléments de fonctionner !', + 'Open settings' : 'Ouvrir les paramètres', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Votre panneau n\'a aucun objet. Rendez-vous dans les paramètres pour remettre à zéro ou modifier manuellement\n(Cette erreur peut survenir après avori mis à jour OS.js)', + 'Create shortcut' : 'Créer un raccourci', + 'Set as wallpaper' : 'Définir un fond d\'écran', + 'An error occured while creating PanelItem: {0}' : 'Une erreur est survenue pendant la création du PanelItem: {0}', + 'Show Icons' : 'Afficher les icônes', + 'Hide Icons' : 'Cacher les icônes', + + 'Development' : 'Développement', + 'Education' : 'Éducation', + 'Games' : 'Jeux', + 'Graphics' : 'Graphique', + 'Network' : 'Réseau', + 'Multimedia' : 'Multimédia', + 'Office' : 'Bureautique', + 'System' : 'Système', + 'Utilities' : 'Utilitaires', + 'Other' : 'Autre' + }, + ar_DZ : { + 'Killing this process will stop things from working!' : 'إنهاء هذا البرنامج سيوقف الأشياء عن العمل', + 'Open settings' : 'فتح الإعدادات', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'لايوجد أي شيء في لوحتك، إذهب إلى إعدادات وقم بإستعادة الأشياء إلى الحالة الإفتراضية أو غيرها يدويا (يحدث هذا أحيانا عند تحديث الـ OS.js)', + 'Create shortcut' : 'إنشاء إختصار', + 'Set as wallpaper' : 'وضع كخلفية سطح المكتب', + 'An error occured while creating PanelItem: {0}' : 'حدث خطأ أثناء إنشاء عنصر في اللوحة : {0}', + 'Show Icons' : 'إظهار الأيقونات', + 'Hide Icons' : 'إخفاء الأيقونات', + + 'Development' : 'تطوير', + 'Education' : 'تعليم', + 'Games' : 'ألعاب', + 'Graphics' : 'رسومات', + 'Network' : 'شبكة', + 'Multimedia' : 'تعدد الوسائط', + 'Office' : 'مكتبيات', + 'System' : 'نظام', + 'Utilities' : 'أدوات', + 'Other' : 'أخرى' + }, + it_IT : { + 'Killing this process will stop things from working!' : 'Terminare questo processo bloccherà altre funzionalità!', + 'Open settings' : 'Apri settaggi', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Il tuo pannello non ha elementi. Vai nei settaggi per resettare ai valori predefiniti o modificarli manualmente\n(Questo errore può accadere dopo un aggiornamento di OS.js)', + 'Create shortcut' : 'Crea colelgamento', + 'Set as wallpaper' : 'Imposta come sfondo desktop', + 'An error occured while creating PanelItem: {0}' : 'Si è verificato un errore nella creazione del PanelItem: {0}', + 'Show Icons' : 'Mostra icone', + 'Hide Icons' : 'Nascondi icone', + + 'Development' : 'Sviluppo', + 'Education' : 'Educazione', + 'Games' : 'Giochi', + 'Graphics' : 'Grafica', + 'Network' : 'Reti', + 'Multimedia' : 'Multimedia', + 'Office' : 'Ufficio', + 'System' : 'Sistema', + 'Utilities' : 'Utilità', + 'Other' : 'Altro' + }, + ko_KR : { + 'Killing this process will stop things from working!' : '이 프로세스를 종료 할 시 작업 중인 것들이 종료됩니다!', + 'Open settings' : '환경설정 열기', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : '패널에 항목이 없습니다. 환경설정에서 초기화하거나 직접 수정하여 주십시오.\n(이 오류는 OS.js의 업그레이드 후 발생하는 문제일 수도 있습니다)', + 'Create shortcut' : '단축키 생성', + 'Set as wallpaper' : '바탕화면으로 지정', + 'An error occured while creating PanelItem: {0}' : '해당 패널 항목 생성 중 오류가 발생 하였습니다: {0}', + + 'Development' : '개발', + 'Education' : '교육', + 'Games' : '게임', + 'Graphics' : '그래픽', + 'Network' : '네트워크', + 'Multimedia' : '멀티미디어', + 'Office' : '오피스', + 'System' : '시스템', + 'Utilities' : '유틸리티', + 'Other' : '기타' + }, + nl_NL : { + 'Killing this process will stop things from working!' : 'Het stoppen van dit proces zal er voor zorgen dat dingen niet meer werken!', + 'Open settings' : 'Instellingen openen', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Het paneel bevat geen items. Ga naar instellingen om te herstellen naar de standaard of om handmatig te wijzigen\n(Deze fout kan het gevolg zijn van een update van OS.js)', + 'Create shortcut' : 'Maak een link', + 'Set as wallpaper' : 'Als achtergrond gebruiken', + 'An error occured while creating PanelItem: {0}' : 'Er is een fout opgetreden tijdens het maken van paneel item: {0}', + + 'Development' : 'Ontwikkeling', + 'Education' : 'Educatie', + 'Games' : 'Spellen', + 'Graphics' : 'Grafisch', + 'Network' : 'Netwerk', + 'Multimedia' : 'Multimedia', + 'Office' : 'Kantoor', + 'System' : 'Systeem', + 'Utilities' : 'Toebehoren', + 'Other' : 'Overig' + }, + no_NO : { + 'Killing this process will stop things from working!' : 'Dreping av denne prosessen vil få konsekvenser!', + 'Open settings' : 'Åpne instillinger', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Ditt panel har ingen objekter. Gå til instillinger for å nullstille eller modifisere manuelt\n(Denne feilen kan oppstå etter en oppdatering av OS.js)', + 'Create shortcut' : 'Lag snarvei', + 'Set as wallpaper' : 'Sett som bakgrunn', + 'An error occured while creating PanelItem: {0}' : 'En feil oppstod under lasting av PanelItem: {0}', + 'Show Icons' : 'Vis Ikoner', + 'Hide Icons' : 'Skjul Ikoner', + 'Create in {0}' : 'Opprett i {0}', + + 'Development' : 'Utvikling', + 'Education' : 'Utdanning', + 'Games' : 'Spill', + 'Graphics' : 'Grafikk', + 'Network' : 'Nettverk', + 'Multimedia' : 'Multimedia', + 'Office' : 'Kontor', + 'System' : 'System', + 'Utilities' : 'Verktøy', + 'Other' : 'Andre' + }, + pl_PL : { + 'Killing this process will stop things from working!' : 'Zabicie tego procesu zatrzyma wykonywanie działań!', + 'Open settings' : 'Otwórz ustawienia', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Twój panel nie ma elementów. Idź do ustawień aby przywrócić domyślne lub zmień ręcznie\n(Ten błąd może wystąpić po aktualizacji OS.js)', + 'Create shortcut' : 'Utwórz skrót', + 'Set as wallpaper' : 'Ustaw jako tapetę', + 'An error occured while creating PanelItem: {0}' : 'Wystąpił błąd podczas tworzenia PanelItem: {0}', + 'Show Icons' : 'Pokaż Ikony', + 'Hide Icons' : 'Ukryj Ikony', + + 'Development' : 'Development', + 'Education' : 'Edukacja', + 'Games' : 'Gry', + 'Graphics' : 'Graficzne', + 'Network' : 'Sieć', + 'Multimedia' : 'Multimedia', + 'Office' : 'Biuro', + 'System' : 'System', + 'Utilities' : 'Użytkowe', + 'Other' : 'Inne' + }, + ru_RU : { + 'Killing this process will stop things from working!' : 'Завершение этого процесса остановит работу системы!', + 'Open settings': 'Открыть настройки', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'На вашей панели отсутствуют элементы. Откройте настройки для сброса панели к начальному состоянию или ручной настройки\n(Эта ошибка может произойти после обновления OS.js)', + 'Create shortcut': 'Создать ярлык', + 'Set as wallpaper' : 'Установить как обои', + 'An error occured while creating PanelItem: {0}' : 'Произошла обшибка при создании PanelItem: {0}', + + 'Development' : 'Разработка', + 'Education' : 'Образование', + 'Games' : 'Игры', + 'Graphics' : 'Графика', + 'Network' : 'Интернет', + 'Multimedia' : 'Мультимедиа', + 'Office' : 'Офис', + 'System' : 'Система', + 'Utilities' : 'Утилиты', + 'Other' : 'Другое' + }, + sk_SK : { + 'Open settings' : 'Otvor nastavenia', + 'Create shortcut' : 'Vytvor linku', + 'Set as wallpaper' : 'Nastav ako tapetu', + 'An error occured while creating PanelItem: {0}' : 'Chyba pri vytváraní položky: {0}', + + 'Development' : 'Vývoj', + 'Education' : 'Vzdelávanie', + 'Games' : 'Hry', + 'Graphics' : 'Grafika', + 'Network' : 'Sieť', + 'Multimedia' : 'Multimédiá', + 'Office' : 'Kancelária', + 'System' : 'Systém', + 'Utilities' : 'Pomôcky', + 'Other' : 'Ostatné' + }, + tr_TR : { + 'Open settings' : 'Ayarları Aç', + 'Create shortcut' : 'Kısayol Oluştur', + 'Set as wallpaper' : 'Arkaplan olarak ayarla', + 'An error occured while creating PanelItem: {0}' : '{0} oluşturulurken bir hata meydana geldi', + + 'Development' : 'Geliştirici', + 'Education' : 'Eğitim', + 'Games' : 'Oyunlar', + 'Graphics' : 'Grafikler', + 'Network' : 'Ağ', + 'Multimedia' : 'Multimedia', + 'Office' : 'Ofis', + 'System' : 'Sistem', + 'Utilities' : 'Yan Gereksinimler', + 'Other' : 'Diğer' + }, + vi_VN : { + 'Killing this process will stop things from working!' : 'Đóng quá trình này sẽ làm mọi thứ bị tắt!', + 'Open settings' : 'Mở cài đặt', + 'Your panel has no items. Go to settings to reset default or modify manually\n(This error may occur after upgrades of OS.js)' : 'Bảng điều khiển của bạn không có mục nào. Vào cài đặt để thiết lập lại mặc định hoặc sửa đổi bằng tay\n(Lỗi này có thể xảy ra sau khi nâng cấp OS.js)', + 'Create shortcut' : 'Tạo lối tắt', + 'Set as wallpaper' : 'Đặt làm hình nền', + 'An error occured while creating PanelItem: {0}' : 'Có lỗi xảy ra trong khi tạo PanelItem: {0}', + 'Show Icons' : 'Hiện các biểu tượng', + 'Hide Icons' : 'Ẩn các biểu tượng', + 'Create in {0}' : 'Tạo trong {0}', + + 'Development' : 'Phát triển', + 'Education' : 'Giáo dục', + 'Games' : 'Trò chơi', + 'Graphics' : 'Đồ họa', + 'Network' : 'Mạng', + 'Multimedia' : 'Đa phương tiện', + 'Office' : 'Văn phòng', + 'System' : 'Hệ thống', + 'Utilities' : 'Tiện ích', + 'Other' : '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.CoreWM = OSjs.Applications.CoreWM || {}; + OSjs.Applications.CoreWM._ = _; + +})(OSjs.Core.WindowManager, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); diff --git a/build/htdocs/dist/packages/default/CoreWM/libs.js b/build/htdocs/dist/packages/default/CoreWM/libs.js new file mode 100644 index 0000000..2d11890 --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/libs.js @@ -0,0 +1,44 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(WindowManager, Window, GUI, Utils, API, VFS) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + +})(OSjs.Core.WindowManager, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); diff --git a/build/htdocs/dist/packages/default/CoreWM/metadata.json b/build/htdocs/dist/packages/default/CoreWM/metadata.json new file mode 100644 index 0000000..4633c23 --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/metadata.json @@ -0,0 +1,80 @@ +{ + "className": "CoreWM", + "name": "OS.js Window Manager", + "names": { + "bg_BG": "Мениджър на прозорци на OS.js", + "de_DE": "OS.js Fenster-Manager", + "es_ES": "OS.js Window Manager", + "fr_FR": "Gestionnaire de fenêtre OS.js", + "it_IT": "OS.js Gestore Finestre", + "ko_KR": "OS.js 윈도우 관리자", + "nl_NL": "OS.js venster beheer", + "no_NO": "OS.js Vinduhåndterer", + "pl_PL": "Menedżer Okien OS.js", + "ru_RU": "OS.js Оконный менеджер", + "sk_SK": "Správca Okien OS.js", + "tr_TR": "OS.js Pencere Yöneticisi", + "vi_VN": "Quản lí cửa sổ OS.js" + }, + "singular": true, + "type": "windowmanager", + "icon": "apps/gnome-window-manager.png", + "splash": false, + "preload": [ + { + "src": "scheme.html", + "type": "scheme" + }, + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + } + ], + "panelItems": { + "AppMenu": { + "Name": "AppMenu", + "Description": "Application Menu", + "Icon": "actions/stock_about.png", + "HasOptions": false + }, + "Buttons": { + "Name": "Buttons", + "Description": "Button Bar", + "Icon": "actions/stock_about.png" + }, + "Clock": { + "Name": "Clock", + "Description": "View the time", + "Icon": "status/appointment-soon.png", + "HasOptions": true + }, + "NotificationArea": { + "Name": "NotificationArea", + "Description": "View notifications", + "Icon": "apps/gnome-panel-notification-area.png" + }, + "Search": { + "Name": "Search", + "Description": "Perform searches", + "Icon": "actions/find.png", + "HasOptions": true + }, + "Weather": { + "Name": "Weather", + "Description": "Weather notification", + "Icon": "status/weather-few-clouds.png" + }, + "WindowList": { + "Name": "Window List", + "Description": "Toggle between open windows", + "Icon": "apps/xfwm4.png" + } + }, + "path": "default/CoreWM", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/CoreWM/scheme.html b/build/htdocs/dist/packages/default/CoreWM/scheme.html new file mode 100644 index 0000000..d9e1e0b --- /dev/null +++ b/build/htdocs/dist/packages/default/CoreWM/scheme.html @@ -0,0 +1,78 @@ + + + + Time Format String: + + + H:i:s + + + + Tooltip Format String: + + + l, j F Y + + + + Interval: + + + + 1 second + 1 minute + 1 hour + + + + + UTC Time: + + + + + + + + + Apply + Cancel + + + + + + + + + + Launch: + + + ApplicationClassName + + + + Label: + + + + + + + Launch arguments: + + + + + + + + + Apply + Cancel + + + + + diff --git a/build/htdocs/dist/packages/default/Draw/checkerboard.png b/build/htdocs/dist/packages/default/Draw/checkerboard.png new file mode 100644 index 0000000..b757ac3 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/checkerboard.png differ diff --git a/build/htdocs/dist/packages/default/Draw/combined.css b/build/htdocs/dist/packages/default/Draw/combined.css new file mode 100644 index 0000000..d4fc2d2 --- /dev/null +++ b/build/htdocs/dist/packages/default/Draw/combined.css @@ -0,0 +1,41 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationDrawWindow { +}*/ + +.ApplicationDrawWindow gui-canvas { + background : url('checkerboard.png'); +} + +.ApplicationDrawWindow gui-vbox-container[data-id="ScrollContainer"] { + background : #DADADA; +} + diff --git a/build/htdocs/dist/packages/default/Draw/combined.js b/build/htdocs/dist/packages/default/Draw/combined.js new file mode 100644 index 0000000..e57bdd7 --- /dev/null +++ b/build/htdocs/dist/packages/default/Draw/combined.js @@ -0,0 +1,1238 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, GUI, Dialogs, Utils, API, VFS) { + // jscs:disable validateQuoteMarks + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + var _Locales = { + bg_BG : { + 'Toggle tools toolbar' : 'Бар с инструменти', + 'Toggle layers toolbar' : 'Бар с слоеве', + 'Layer' : 'Слой', + 'Effect' : 'Ефект', + 'Flip Horizontally' : 'Обърни хоризонтално', + 'Flip Vertically' : 'Обърни вертикално', + 'Foreground' : 'Преден фон', + 'Bakgrunn' : 'Заден фон', + 'Foreground (Fill) Color' : 'Преден фон (Запълни) цвят', + 'Background (Stroke) Color' : 'Заден фон цвят', + 'Line join' : 'Съединяване на линии', + 'Line width' : 'Широчина на линия', + 'Toggle Stroke' : 'Превключване на удър', + 'Enable stroke' : 'Включи удър', + 'Round' : 'Кръгъл', + 'Miter' : 'Митра', + 'Bevel' : 'Откос', + 'Stroked' : 'Ударен', + 'No stroke' : 'Без удър', + + 'Pointer' : 'Стрелка', + 'Move active layer' : 'Премести активен слой', + + 'Picker' : 'берач', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: изберете цвят за преден план, RMB: изберете цвят за фон', + + 'Pencil' : 'Молив', + 'LMB/RMB: Draw with fg/bg color' : 'LMB/RMB: рисувай с fg/bg цвят', + 'Path' : 'Път', + + 'Square/Rectangle' : 'Квадрат/Правоъгъкник', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw rectangle' : 'LMB/RMB: рисувай с fb/bg цвят, SHIFT: нарисувай правоъгълник', + + 'Circle/Ellipse' : 'Кръг/Елипса', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw ellipse' : 'LMB/RMB: рисувай с fb/bg цвят, SHIFT: нарисувай елипса', + + 'Blur' : 'Замъгли', + 'Noise' : 'Шум', + 'Invert colors' : 'Инвертирай цветове', + 'Grayscale' : 'Черно-бяло', + 'Sharpen' : 'Острота', + 'Simple Blur' : 'Опростено замъгляване', + + 'Radius' : 'Радиус', + 'Iterations' : 'Повторения' + }, + de_DE : { + 'Toggle tools toolbar' : 'Tools Toolbar', + 'Toggle layers toolbar' : 'Ebenen Toolbar', + 'Layer' : 'Ebene', + 'Effect' : 'Effekt', + 'Flip Horizontally' : 'Horizontal spiegeln', + 'Flip Vertically' : 'Vertikal spiegeln', + 'Foreground' : 'Vordergrund', + 'Bakgrunn' : 'Hintergrund', + 'Foreground (Fill) Color' : 'Vordergrund (Füll-) Farbe', + 'Background (Stroke) Color' : 'Hintergrund (Streich-) Farbe', + 'Line join' : 'Linienverbindung', + 'Line width' : 'Linienbreite', + 'Toggle Stroke' : 'Streichen', + 'Enable stroke' : 'Streichen aktivieren', + 'Round' : 'Runde', + 'Miter' : 'Live', + 'Bevel' : 'Schräge', + 'Stroked' : 'Gestrichen', + 'No stroke' : 'Nicht gestrichen', + + 'Pointer' : 'Zeiger', + 'Move active layer' : 'Bewege aktive Ebene', + + 'Picker' : 'Wähler', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: wähle Vordergrundfarbe, RMB: wähle Hintergrundfarbe', + + 'Pencil' : 'Stift', + 'LMB/RMB: Draw with fg/bg color' : 'LMB/RMB: Zeichnen mit fg/bg Farbe', + 'Path' : 'Pfad', + + 'Square/Rectangle' : 'Quadrat/Rechteck', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw rectangle' : 'LMB/RMB: Zeichnen mit fb/bg Farbe, SHIFT: Rechteck zeichnen', + + 'Circle/Ellipse' : 'Kreis/Ellipse', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw ellipse' : 'LMB/RMB: Zeichnen mit fb/bg Farbe, SHIFT: Ellipse zeichnen', + + 'Blur' : 'Weichzeichner (Blur)', + 'Noise' : 'Rauschen', + 'Invert colors' : 'Farben invertieren', + 'Grayscale' : 'Graustufen', + 'Sharpen' : 'Schärfen', + 'Simple Blur' : 'Einfacher Weichzeichner (Blur)', + + 'Radius' : 'Radius', + 'Iterations' : 'Iterationen' + }, + es_ES : { + 'Toggle tools toolbar' : 'Mostrar/ocultar la barra de herramientas de utilidades', + 'Toggle layers toolbar' : 'Mostrar/ocultar la barra de herramientas de capas', + 'Layer' : 'Capa', + 'Effect' : 'Efecto', + 'Flip Horizontally' : 'Girar horizontalmente', + 'Flip Vertically' : 'Girar verticalmente', + 'Foreground' : 'Primer plano', + 'Bakgrunn' : 'Fondo', + 'Foreground (Fill) Color' : 'Color de primer plano (relleno)', + 'Background (Stroke) Color' : 'Color de de fondo (contorno)', + 'Line join' : 'Terminación de línea', + 'Line width' : 'Ancho de línea', + 'Toggle Stroke' : 'Activar/Desactivar trazado', + 'Enable stroke' : 'Activar trazado', + 'Round' : 'Curvo', + 'Miter' : 'En ángulo', + 'Bevel' : 'Biselado', + 'Stroked' : 'Trazado', + 'No stroke' : 'Sin trazado', + + 'Pointer' : 'Puntero', + 'Move active layer' : 'Mover la capa activa', + + 'Picker' : 'Selector', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: Establecer el color de primer plano, RMB: Establecer el color de fondo', + + 'Pencil' : 'Lápiz', + 'LMB/RMB: Draw with fg/bg color' : 'LMB/RMB: Dibujar con el color de fondo/de primer plano', + 'Path' : 'Ruta', + + 'Square/Rectangle' : 'Cuadrado/Rectángulo', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw rectangle' : 'LMB/RMB: Zeichnen mit fb/bg Farbe, SHIFT: Rechteck zeichnen', + + 'Circle/Ellipse' : 'Kreis/Ellipse', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw ellipse' : 'LMB/RMB: Dibujar con el color de fondo/de primer plano, SHIFT: Dibujar una elipse', + + 'Blur' : 'Desenfoque', + 'Noise' : 'Ruido', + 'Invert colors' : 'Invertir colores', + 'Grayscale' : 'Escala de grises', + 'Sharpen' : 'Afilar', + 'Simple Blur' : 'Desenfoque simple', + + 'Radius' : 'Radio', + 'Iterations' : 'Iteraciones' + }, + fr_FR : { + 'Toggle tools toolbar' : 'Afficher la barre d\'outils', + 'Toggle layers toolbar' : 'Afficher la barre des calques', + 'Layer' : 'Calque', + 'Effect' : 'Effet', + 'Flip Horizontally' : 'Pivoter horizontalement', + 'Flip Vertically' : 'Pivoter verticalement', + 'Foreground' : 'Avant-plan', + 'Background' : 'Arrière-plan', + 'Foreground (Fill) Color' : 'Couleur de l\'avant-plan (remplissage)', + 'Background (Stroke) Color' : 'Couleur de l\'arrière-plan (trait)', + 'Line join' : 'Jointure', + 'Line width' : 'Taille de la ligne', + 'Toggle Stroke' : 'Afficher les traits', + 'Enable stroke' : 'Activer les traits', + 'Round' : 'Arrondi', + 'Miter' : 'Pointu', + 'Bevel' : 'Biseauté', + 'Stroked' : 'Barré', + 'No stroke' : 'Non barré', + + 'Pointer' : 'Pointeur', + 'Move active layer' : 'Déplacer le calque actif', + + 'Picker' : 'Sélecteur', + 'LMB: Pick foreground-, RMB: Pick background color' : 'Clic gauche: sélectionne la couleur de l\'avant-plan, clic droit: sélectionne la couleur de l\'arrière-plan', + + 'Pencil' : 'Pinceau', + 'LMB: Use foreground-, RMB: Use background color' : 'Clic gauche: utilise la couleur d\'avant-plan, clic droit : utilise la couleur d\'arrière-plan', + 'Path' : 'Chemin', + + 'Square/Rectangle' : 'Carré/Rectangle', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'Clic gauche: utilise la couleur d\'avant-plan, clic droit: utilise la couleur d\'arrière-plan, SHIFT: affiche le mode rectangle', + + 'Circle/Ellipse' : 'Cercle/Ellipse', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'Clic gauche: utilise la couleur d\'avant-plan, clic droit: utilise la couleur d\'arrière-plan, SHIFT: affiche le mode ellipse', + + 'LMB: Fill with foreground-, RMB: Fill with background color': 'Clic gauche: remplir avec la couleur d\'avant-plan, clic droit: remplir avec la couleur d\'arrière-plan', + 'Set foreground color': 'Définir la couleur d\'avant-plan', + 'Set background color': 'Définir la couleur d\'arrière-plan', + + 'Blur' : 'Flou', + 'Noise' : 'Bruit', + 'Invert colors' : 'Inverser les couleurs', + 'Grayscale' : 'Niveau de gris', + 'Sharpen' : 'Netteté', + 'Simple Blur' : 'Flou simple', + + 'Radius' : 'Rayon', + 'Iterations' : 'Itérations' + }, + ar_DZ : { + 'Toggle tools toolbar' : 'إظهار شريط الأدوات', + 'Toggle layers toolbar' : 'إظهار شريط الشفائف', + 'Layer' : 'شفيفة', + 'Effect' : 'تأثير', + 'Flip Horizontally' : 'دوران أفقي', + 'Flip Vertically' : 'دوران عمودي', + 'Foreground' : 'الأمامي', + 'Background' : 'الخلفية', + 'Foreground (Fill) Color' : 'اللون الأمامي (التعبئة)', + 'Background (Stroke) Color' : 'لون الخلفية (الخط)', + 'Line join' : 'مفصل خطي', + 'Line width' : 'عرض الخط', + 'Toggle Stroke' : 'إظهار الخطوط', + 'Enable stroke' : 'تفعيل الخطوط', + 'Round' : 'دائري', + 'Miter' : 'مذبب', + 'Bevel' : 'شطف', + 'Stroked' : 'مشطوب', + 'No stroke' : 'بدون خط', + + 'Pointer' : 'المؤشر', + 'Move active layer' : 'نقل الشفيفة المفعلة', + + 'Picker' : 'المرشح', + 'LMB: Pick foreground-, RMB: Pick background color' : 'ضغط باليسار: إختيار اللون الأمامي, ضغط باليمين: إختيار لون الخلفية', + + 'Pencil' : 'القلم', + 'LMB: Use foreground-, RMB: Use background color' : 'ضغط باليسار: إستعمال اللون الأمامي, ضغط باليمين: إستعمال لون الخلفية', + 'Path' : 'المسار', + + 'Square/Rectangle' : 'مربع/مستطيل', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'ضغط باليسار: إستعمال اللون الأمامي, ضغط باليمين: إستعمال لون الخلفية، SHIFT : تحويل بين مربع/مستطيل', + + 'Circle/Ellipse' : 'دائرة/قطع ناقص', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'ضغط باليسار: إستعمال اللون الأمامي, ضغط باليمين: إستعمال لون الخلفية، SHIFT : تحويل بين دائرة/قطع ناقص', + + 'LMB: Fill with foreground-, RMB: Fill with background color': 'ضغط باليسار: ملئ باللون الأمامي, ضغط باليمين: ملئ بلون الخلفية', + 'Set foreground color': 'إستعمال كلون أمامي', + 'Set background color': 'إستعمال كلون للخلفية', + + 'Blur' : 'ضبابي', + 'Noise' : 'ضجيج', + 'Invert colors' : 'عكس الألوان', + 'Grayscale' : 'مستوى الرمادي', + 'Sharpen' : 'صفاء', + 'Simple Blur' : 'ضباب عادي', + + 'Radius' : 'القطر', + 'Iterations' : 'عدد العمليات' + }, + it_IT : { + 'Toggle tools toolbar' : 'Mostra la barra strumenti', + 'Toggle layers toolbar' : 'Mostra la barra dei livelli', + 'Layer' : 'Livello', + 'Effect' : 'Effetto', + 'Flip Horizontally' : 'Specchia orizzontalmente', + 'Flip Vertically' : 'Specchia verticalmente', + 'Foreground' : 'Primopiano', + 'Background' : 'Sfondo', + 'Foreground (Fill) Color' : 'Colore in primopiano (Riempimento)', + 'Background (Stroke) Color' : 'Colore di sfondo (Tracciato)', + 'Line join' : 'Congiungi linea', + 'Line width' : 'Lunghezza linea', + 'Toggle Stroke' : 'Mostra tracciato', + 'Enable stroke' : 'Abilita tracciato', + 'Round' : 'Arrotonda', + 'Miter' : 'Miter', + 'Bevel' : 'Smussatura', + 'Stroked' : 'Tracciato', + 'No stroke' : 'Nessun tracciato', + + 'Pointer' : 'Puntatore', + 'Move active layer' : 'Sposta livello attivo', + + 'Picker' : 'Selettore', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: Imposta colore primopiano, RMB: Imposta colore di sfondo', + + 'Pencil' : 'Matita', + 'LMB/RMB: Draw with fg/bg color' : 'LMB/RMB: Disegna con colori fg/bg', + 'Path' : 'Percorso', + + 'Square/Rectangle' : 'Quadrato/Rettangolo', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw rectangle' : 'LMB/RMB: Disegna con colori di fg/bg, SHIFT: Disegna rettangolo', + + 'Circle/Ellipse' : 'Cerchio/Ellisse', + 'LMB/RMB: Draw with fg/bg color, SHIFT: Draw ellipse' : 'LMB/RMB: Disegna con colori di fg/bg, SHIFT: Disegna ellisse', + + 'Blur' : 'Sfoca', + 'Noise' : 'Disturbo', + 'Invert colors' : 'Inverti colori', + 'Grayscale' : 'Scala di grigi', + 'Sharpen' : 'Intensifica', + 'Simple Blur' : 'Sfocatura leggera', + + 'Radius' : 'Raggio', + 'Iterations' : 'Ripetizioni' + }, + ko_KR : { + 'Toggle tools toolbar' : '도구 툴바 켜기/끄기', + 'Toggle layers toolbar' : '레이어 툴바 켜기/끄기', + 'Layer' : '레이어', + 'Effect' : '효과', + 'Flip Horizontally' : '수평으로 뒤집기', + 'Flip Vertically' : '수직으로 뒤집기', + 'Foreground' : '전경', + 'Background' : '배경', + 'Foreground (Fill) Color' : '전경색(채우기)', + 'Background (Stroke) Color' : '배경색(칠하기)', + 'Line join' : '선 종류', + 'Line width' : '선 굵기', + 'Toggle Stroke' : '선 활성화', + 'Enable stroke' : '선 그리기', + 'Round' : '둥글게', + 'Miter' : '기울이기', + 'Bevel' : '비스듬히', + 'Stroked' : '선 보이기', + 'No stroke' : '선없음', + + 'Pointer' : '포인터', + 'Move active layer' : '활성 레이어 옮기기', + + 'Picker' : '색상 추출', + 'LMB: Pick foreground-, RMB: Pick background color' : '왼쪽 마우스 버튼: 전경색, 오른쪽 마우스 버튼 : 배경색', + + 'Pencil' : '연필', + 'LMB: Use foreground-, RMB: Use background color' : '왼쪽 마우스/오른쪽 마우스 버튼 전경/배경색 그리기', + 'Path' : '경로', + + 'Square/Rectangle' : '정사각형/직사각형', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : '왼쪽/오른쪽 마우스 버튼 전경/배경색 그리기, SHIFT: 직사각형 그리기', + + 'Circle/Ellipse' : '원/타원', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : '왼쪽/오른쪽 마우스 버튼 전경/배경색 그리기, SHIFT: 타원 그리기', + + 'Blur' : '블러', + 'Noise' : '노이즈', + 'Invert colors' : '반전', + 'Grayscale' : '흑백', + 'Sharpen' : '샤픈', + 'Simple Blur' : '약한 블러', + + 'Radius' : '반경', + 'Iterations' : '반복', + + 'LMB: Fill with foreground-, RMB: Fill with background color': '왼쪽 마우스/오른쪽 마우스 버튼 전경/배경색 칠하기', + 'Set {0} color': '{0}색을 선택' + }, + nl_NL : { + 'Toggle tools toolbar' : 'Toolbar gereedschappen', + 'Toggle layers toolbar' : 'Toolbar lagen', + 'Layer' : 'Laag', + 'Effect' : 'Effecten', + 'Flip Horizontally' : 'Horizontaal spiegelen', + 'Flip Vertically' : 'Verticaal spiegelen', + 'Foreground' : 'Voorgrond', + 'Background' : 'Achtergrond', + 'Foreground (Fill) Color' : 'Voorgrond (vul) kleur', + 'Background (Stroke) Color' : 'Achtergrond (penseel-) kleur', + 'Line join' : 'Lijnverbinding', + 'Line width' : 'Lijnbreedte', + 'Toggle Stroke' : 'Penseel streek', + 'Enable stroke' : 'Penseel activeren', + 'Round' : 'Rond', + 'Miter' : 'Live', + 'Bevel' : 'Schuin', + 'Stroked' : 'Gestreken', + 'No stroke' : 'Geen penseel streken', + + 'Pointer' : 'Aanwijzer', + 'Move active layer' : 'Verplaats de actieve laag', + + 'Picker' : 'Kiezer', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: Kies voorgrond-kleur, RMB: Kies achtergrondkleur', + + 'Pencil' : 'Penseel', + 'LMB: Use foreground-, RMB: Use background color' : 'LMB: Teken met voorgrond-, RMB: Teken met achtergrond-kleur', + 'Path' : 'Pfad', + + 'Square/Rectangle' : 'Vierkant/rechthoek', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: Teken met voor- en achtergrondkleur, SHIFT: Rechthoek tekenen', + + 'Circle/Ellipse' : 'Cirkel/elipse', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: Teken met voor- en achtergrondkleur, SHIFT: Elipse tekenen', + + 'Blur' : 'Vervagen (Blur)', + 'Noise' : 'Ruis', + 'Invert colors' : 'Kleuren inverteren', + 'Grayscale' : 'Grijstinten', + 'Sharpen' : 'Verscherpen', + 'Simple Blur' : 'Eenvoudig vervagen (Blur)', + + 'Radius' : 'Radius', + 'Iterations' : 'Herhalingen' + }, + no_NO : { + 'Toggle tools toolbar' : 'Svitsj verktøylinje', + 'Toggle layers toolbar' : 'Svitsj lag-verktøylinje', + 'Layer' : 'Lag', + 'Effect' : 'Effekt', + 'Flip Horizontally' : 'Flipp Horisontalt', + 'Flip Vertically' : 'Flipp Vertikalt', + 'Foreground' : 'Forgrunn', + 'Background' : 'Bakgrunn', + 'Foreground (Fill) Color' : 'Forgrunn (Fyll) Farge', + 'Background (Stroke) Color' : 'Bakgrunn (Strøk) Farge', + 'Line join' : 'Linje Knytting', + 'Line width' : 'Linje Bredde', + 'Toggle Stroke' : 'Svitsj strøk', + 'Enable stroke' : 'Skru på strøk', + 'Round' : 'Rund', + 'Miter' : 'Skjev', + 'Bevel' : 'Kantet', + 'Stroked' : 'Strøk På', + 'No stroke' : 'Strøk Av', + + 'Pointer' : 'Peker', + 'Move active layer' : 'Flytt aktivt lag', + + 'Picker' : 'Plukker', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: sett bg farge, RMB: sett fg farge', + + 'Pencil' : 'Penn', + 'LMB: Use foreground-, RMB: Use background color' : 'LMB/RMB: Tegn med fg/bg farge', + 'Path' : 'Sti', + + 'Square/Rectangle' : 'Firkant/Rektangel', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: Tegn med fg/bg farge, SHIFT: Tegn rektangel', + + 'Circle/Ellipse' : 'Sirkel/Ellipse', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: Tegn med fg/bg farge, SHIFT: Tegn ellipse', + + 'Blur' : 'Klatte (Blur)', + 'Noise' : 'Støy', + 'Invert colors' : 'Inverter farger', + 'Grayscale' : 'Gråskala', + 'Sharpen' : 'Skarpgjør', + 'Simple Blur' : 'Simpel Klatte (Blur)', + + 'Radius' : 'Radius', + 'Iterations' : 'Itereringer' + }, + pl_PL : { + 'Toggle tools toolbar' : 'Przełącz Pasek narzędzi', + 'Toggle layers toolbar' : 'Przełącz Pasek warstw', + 'Layer' : 'Warstwy', + 'Effect' : 'Efekty', + 'Flip Horizontally' : 'Przerzuć w poziomie', + 'Flip Vertically' : 'Przerzuć w pionie', + 'Foreground' : 'Pierwszy plan', + 'Bakgrunn' : 'Tło', + 'Foreground (Fill) Color' : 'Kolor pierwszoplanowy (Wypełnienie)', + 'Background (Stroke) Color' : 'Kolor tła (Wycinanie)', + 'Line join' : 'Rodzaj lini', + 'Line width' : 'Grubość', + 'Toggle Stroke' : 'Włącz/wyłącz obramowanie', + 'Enable stroke' : 'Włącz obramowanie', + 'Round' : 'Zwykłe', + 'Miter' : 'Paski', + 'Bevel' : 'Kątownik', + 'Stroked' : 'Obranowanie', + 'No stroke' : 'Bez obramowania', + + 'Pointer' : 'Wskaźnik', + 'Move active layer' : 'Przenieś aktywne warstwy', + + 'Picker' : 'Wybór', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: Wstaw kolor bg, RMB: ustaw kolor fg', + + 'Pencil' : 'Ołówek', + 'LMB: Use foreground-, RMB: Use background color' : 'Maluj w kolorze fg/bg', + 'Path' : 'Ścieżka', + + 'Square/Rectangle' : 'Kwadratowe / prostokątne', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: Maluj w kolorze fb/bg, SHIFT: Narysuj prostokąt', + + 'Circle/Ellipse' : 'Koło / Elipsa', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: Maluj w kolorze fb/bg, SHIFT: Narysuj elipse', + + 'Blur' : 'Blur', + 'Noise' : 'Szum', + 'Invert colors' : 'Odwróc kolory', + 'Grayscale' : 'Skala szaroścu', + 'Sharpen' : 'Zaostrzone', + 'Simple Blur' : 'Łatwy Blur', + + 'Radius' : 'Promień', + 'Iterations' : 'Powtórzenia' + }, + ru_RU : { + 'Toggle tools toolbar' : 'Панель инструментов', + 'Toggle layers toolbar' : 'Панель слоев', + 'Layer' : 'Слой', + 'Effect' : 'Эффекты', + 'Flip Horizontally' : 'Отразить горизонтально', + 'Flip Vertically' : 'Отразить вертикально', + 'Foreground' : 'Передний план', + 'Bakgrunn' : 'Фон', + 'Foreground (Fill) Color' : 'Передний план (Заливка) цвет', + 'Background (Stroke) Color' : 'Фоновый (Обводка) цвет', + 'Line join' : 'Замкнутая линия', + 'Line width' : 'Ширина линии', + 'Toggle Stroke' : 'Вкл/выкл обводку', + 'Enable stroke' : 'Включить обводку', + 'Round' : 'Закругленный', + 'Miter' : 'Прямой', + 'Bevel' : 'Скошенный', + 'Stroked' : 'С обводкой', + 'No stroke' : 'Без обводки', + + 'Pointer' : 'Указатель', + 'Move active layer' : 'Перемещает активный слой', + + 'Picker' : 'Пипетка', + 'LMB: Pick foreground-, RMB: Pick background color' : 'ЛКМ: устананавливает первичный цвет, ПКМ: устанавливает вторичный(фоновый) цвет', + + 'Pencil' : 'Карандаш', + 'LMB: Use foreground-, RMB: Use background color' : 'ЛКМ/ПКМ: Рисует первичным/вторичным цветом', + 'Path' : 'Прямая', + + 'Square/Rectangle' : 'Квадрат/Прямоугольник', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'ЛКМ/ПКМ: рисует первичным/вторичным цветом квадрат, SHIFT: нарисовать прямоуголник', + + 'Circle/Ellipse' : 'Круг/Эллипс', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'ЛКМ/ПКМ: рисует первичным/вторичным цветом круг, SHIFT: нарисовать эллипс', + + 'Blur' : 'Размытие (Blur)', + 'Noise' : 'Шум', + 'Invert colors' : 'Инвертировать цвета', + 'Grayscale' : 'Обесцветить', + 'Sharpen' : 'Сточить', + 'Simple Blur' : 'Простое размытие (Blur)', + + 'Radius' : 'Радиус', + 'Iterations' : 'Итерации' + }, + sk_SK : { + 'Toggle tools toolbar' : 'Zobraz panel nástrojov', + 'Toggle layers toolbar' : 'Zobraz vrstvy', + 'Layer' : 'Vrstvy', + 'Effect' : 'Efekty', + 'Flip Horizontally' : 'Transformuj horizontálne', + 'Flip Vertically' : 'Transformuj vertikálne', + 'Foreground' : 'Popredie', + 'Bakgrunn' : 'Pozadie', + 'Line join' : 'Typ čiary', + 'Line width' : 'Šírka čiary', + 'Toggle Stroke' : 'Zapnúť orámovanie', + 'Enable stroke' : 'Orámovanie', + 'Round' : 'Okrúhly', + 'Miter' : 'Naklonený', + 'Bevel' : 'Šikmý', + 'Stroked' : 'Orámovaný', + 'No stroke' : 'Bez orámovania', + + 'Pointer' : 'Ukazovateľ', + 'Move active layer' : 'Presuň aktívnu vrstvu', + + 'Picker' : 'Kurzor', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: nastav farbu pozadia, RMB: nastav farbu popredia', + + 'Pencil' : 'Ceruzka', + 'LMB: Use foreground-, RMB: Use background color' : 'Maľuj farbou fg/bg', + 'Path' : 'Cesta', + + 'Square/Rectangle' : 'Štvorec / Obdĺžnik', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: Maľuj farbou fb/bg, SHIFT: Obdĺžnik', + + 'Circle/Ellipse' : 'Kruh / Elipsa', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: Maľuj farbou fb/bg, SHIFT: Elipsa', + + 'Blur' : 'Rozmazať', + 'Noise' : 'Šum', + 'Invert colors' : 'Invertovať farby', + 'Grayscale' : 'Odtiene šedej', + 'Sharpen' : 'Zostriť', + 'Simple Blur' : 'Jednoduchý Blur', + + 'Radius' : 'Rádius', + 'Iterations' : 'Iterácie' + }, + tr_TR : { + 'Toggle tools toolbar' : 'araç çubugu değiştirme araçları', //yanlış olabilir + 'Toggle layers toolbar' : 'Araç çubugu katmanı değiştirme', + 'Layer' : 'Katman', + 'Effect' : 'efekt', + 'Flip Horizontally' : 'Yatay çevir', + 'Flip Vertically' : 'Dikey çevir', + 'Foreground' : 'Önplana al', + 'Background' : 'Arkaplana al', + 'Foreground (Fill) Color' : 'Önplan rengi', + 'Background (Stroke) Color' : 'Arkaplan rengi', + 'Line join' : 'Çizgi bitişimi', + 'Line width' : 'Çizgi genişliği', + 'Toggle Stroke' : 'vuruşu değiştir', //eklenecek + 'Enable stroke' : 'vuruş aktif', //eklenecek + 'Round' : 'yuvarlamak', + 'Miter' : 'gönye', + 'Bevel' : 'eğmek', + 'Stroked' : 'Stroked', + 'No stroke' : 'No stroke', + + 'Pointer' : 'işaretçi', + 'Move active layer' : 'hareket eden katman', + + 'Picker' : 'toplayıcı', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: fg rengi ayarla, RMB: gb rengi ayarla', + + 'Pencil' : 'kalem', + 'LMB: Use foreground-, RMB: Use background color' : 'LMB/RMB:fg/bg rengi ile çiz', + 'Path' : 'yol', + + 'Square/Rectangle' : 'kare/üçgen', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: fg/bg renkleri ile çiz , SHIFT: üçgen çiz', + + 'Circle/Ellipse' : 'dair/elips', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: fb/bg ile çiz , SHIFT: elips çiz', + + 'Blur' : 'Bulanık', + 'Noise' : 'gürültü', + 'Invert colors' : 'renkleri tersine çevir', + 'Grayscale' : 'gri ton', + 'Sharpen' : 'keskinleştirmek', + 'Simple Blur' : 'sade Bulanık', + + 'Radius' : 'yarıçap', + 'Iterations' : 'yineleme' + }, + vi_VN : { + 'Toggle tools toolbar' : 'Công cụ bật tắt thanh công cụ', + 'Toggle layers toolbar' : 'Bật tắt cửa sổ layer', + 'Layer' : 'Lớp', + 'Effect' : 'Hiệu ứng', + 'Flip Horizontally' : 'Lật ngang', + 'Flip Vertically' : 'Lật theo chiều dọc', + 'Foreground' : 'Nền trước', + 'Background' : 'Nền dưới', + 'Foreground (Fill) Color' : 'Màu nền trước', + 'Background (Stroke) Color' : 'Màu nền dưới', + 'Line join' : 'Ghép đoạn thằng', + 'Line width' : 'Độ rộng dòng', + 'Toggle Stroke' : 'Bật tắt nét', + 'Enable stroke' : 'Bật nét', + 'Round' : 'Tròn', + 'Miter' : 'Góc', + 'Bevel' : 'Góc xiên', + 'Stroked' : 'Vuốt', + 'No stroke' : 'Không vuốt', + + 'Pointer' : 'Con trỏ', + 'Move active layer' : 'Di chuyển layer đang chọn', + + 'Picker' : 'Bảng chọn', + 'LMB: Pick foreground-, RMB: Pick background color' : 'LMB: chọn màu fg, RMB: chọn màu gb', + + 'Pencil' : 'Bút chì', + 'LMB: Use foreground-, RMB: Use background color' : 'LMB/RMB: vẽ với màu fg/bg', + 'Path' : 'Đường', + + 'Square/Rectangle' : 'Firkant/Rektangel', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' : 'LMB/RMB: Tegn med fg/bg farge, SHIFT: Tegn rektangel', + + 'Circle/Ellipse' : 'Vuông / chữ nhật', + 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' : 'LMB/RMB: vẽ với màu fg/bg, SHIFT: Vẽ ê-líp', + + 'Blur' : 'Làm mờ', + 'Noise' : 'Làm nhiễu', + 'Invert colors' : 'Nghịch đảo màu', + 'Grayscale' : 'Độ xám', + 'Sharpen' : 'Làm sắc nét', + 'Simple Blur' : 'Làm mờ đơn giản', + + 'Radius' : 'Bán kính', + 'Iterations' : 'Lặp đi lặp lại' + } + }; + + function _() { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(_Locales); + return API.__.apply(this, args); + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationDraw = OSjs.Applications.ApplicationDraw || {}; + OSjs.Applications.ApplicationDraw._ = _; + +})(OSjs.Helpers.DefaultApplication, 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 + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + var DEFAULT_WIDTH = 1024; + var DEFAULT_HEIGHT = 768; + + var tools = { + pointer: { + statusText: '' + }, + picker: { + statusText: 'LMB: Pick foreground-, RMB: Pick background color' + }, + bucket: { + statusText: 'LMB: Fill with foreground-, RMB: Fill with background color' + }, + pencil: { + statusText: 'LMB: Use foreground-, RMB: Use background color' + }, + path: { + statusText: 'LMB: Use foreground-, RMB: Use background color' + }, + rectangle: { + statusText: 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle rectangle/square mode' + }, + circle: { + statusText: 'LMB: Use foreground-, RMB: Use background color. SHIFT: Toggle circle/ellipse mode' + } + }; + var toolEvents = { + pointer: { + }, + + picker: (function() { + var imageData; + + function pick(ev, args) { + var value = '#000000'; + var t = (ev.shiftKey || ev.button > 0) ? 'background' : 'foreground'; + + if ( !imageData ) { + imageData = args.ctx.getImageData(0, 0, args.canvas.width, args.canvas.height).data; + } + + var index = ((args.pos.x + args.pos.y * args.canvas.width) * 4); + try { + value = Utils.convertToHEX({ + r:imageData[index + 0], + g:imageData[index + 1], + b:imageData[index + 2], + a:imageData[index + 3] + }); + } catch ( e ) { + } + + args.win.setToolProperty(t, value); + } + + return { + mousedown: pick, + mousemove: pick, + mouseup: function(ev, pos, canvas, ctx, win) { + imageData = null; + } + }; + })(), + + bucket: { + mousedown: function(ev, args) { + var t = (ev.shiftKey || ev.button > 0) ? 'background' : 'foreground'; + args.ctx.fillStyle = args.win.tool[t]; + args.ctx.fillRect(0, 0, args.canvas.width, args.canvas.height); + } + }, + + pencil: { + mousedown: function(ev, args) { + var t = (ev.shiftKey || ev.button > 0) ? 'background' : 'foreground'; + args.ctx.strokeStyle = args.win.tool[t]; + }, + mousemove: function(ev, args) { + args.ctx.beginPath(); + args.ctx.moveTo(args.pos.x - 1, args.pos.y); + args.ctx.lineTo(args.pos.x, args.pos.y); + args.ctx.closePath(); + args.ctx.stroke(); + } + }, + + path: { + mousemove: function(ev, args) { + if ( args.tmpContext ) { + args.tmpContext.clearRect(0, 0, args.tmpCanvas.width, args.tmpCanvas.height); + args.tmpContext.beginPath(); + args.tmpContext.moveTo(args.start.x, args.start.y); + args.tmpContext.lineTo(args.pos.x, args.pos.y); + args.tmpContext.closePath(); + args.tmpContext.stroke(); + } + } + }, + + rectangle: { + mousedown: function(ev, args) { + args.tmpContext.fillStyle = (ev.button > 0) ? args.win.tool.background : args.win.tool.foreground; + args.tmpContext.strokeStyle = (ev.button <= 0) ? args.win.tool.background : args.win.tool.foreground; + }, + mousemove: function(ev, args) { + var x, y, w, h; + + if ( ev.shiftKey ) { + x = Math.min(args.pos.x, args.start.x); + y = Math.min(args.pos.y, args.start.y); + w = Math.abs(args.pos.x - args.start.x); + h = Math.abs(args.pos.y - args.start.y); + } else { + x = args.start.x; //Math.min(args.pos.x, args.start.x); + y = args.start.y; //Math.min(args.pos.y, args.start.y); + w = Math.abs(args.pos.x - args.start.x) * (args.pos.x < args.start.x ? -1 : 1); + h = Math.abs(w) * (args.pos.y < args.start.y ? -1 : 1); + } + + args.tmpContext.clearRect(0, 0, args.tmpCanvas.width, args.tmpCanvas.height); + if ( w && h ) { + if ( args.win.tool.lineStroke ) { + args.tmpContext.strokeRect(x, y, w, h); + } + args.tmpContext.fillRect(x, y, w, h); + } + } + }, + + circle: { + mousedown: function(ev, args) { + args.tmpContext.fillStyle = (ev.button > 0) ? args.win.tool.background : args.win.tool.foreground; + args.tmpContext.strokeStyle = (ev.button <= 0) ? args.win.tool.background : args.win.tool.foreground; + }, + mousemove: function(ev, args) { + if ( ev.shiftKey ) { + var width = Math.abs(args.start.x - args.pos.x); + var height = Math.abs(args.start.y - args.pos.y); + + args.tmpContext.clearRect(0, 0, args.tmpCanvas.width, args.tmpCanvas.height); + if ( width > 0 && height > 0 ) { + args.tmpContext.beginPath(); + args.tmpContext.moveTo(args.start.x, args.start.y - height * 2); // A1 + args.tmpContext.bezierCurveTo( + args.start.x + width * 2, args.start.y - height * 2, // C1 + args.start.x + width * 2, args.start.y + height * 2, // C2 + args.start.x, args.start.y + height * 2); // A2 + + args.tmpContext.bezierCurveTo( + args.start.x - width * 2, args.start.y + height * 2, // C3 + args.start.x - width * 2, args.start.y - height * 2, // C4 + args.start.x, args.start.y - height * 2); // A1 + + args.tmpContext.closePath(); + if ( args.win.tool.lineStroke ) { + args.tmpContext.stroke(); + } + args.tmpContext.fill(); + } + } else { + var x = Math.abs(args.start.x - args.pos.x); + var y = Math.abs(args.start.y - args.pos.y); + var r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); + + args.tmpContext.clearRect(0, 0, args.tmpCanvas.width, args.tmpCanvas.height); + if ( r > 0 ) { + args.tmpContext.beginPath(); + args.tmpContext.arc(args.start.x, args.start.y, r, 0, Math.PI * 2, true); + args.tmpContext.closePath(); + + if ( args.win.tool.lineStroke ) { + args.tmpContext.stroke(); + } + args.tmpContext.fill(); + } + } + } + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + var doTranslate = OSjs.Applications.ApplicationDraw._; + + function ApplicationDrawWindow(app, metadata, scheme, file) { + DefaultApplicationWindow.apply(this, ['ApplicationDrawWindow', { + icon: metadata.icon, + title: metadata.name, + allow_drop: true, + min_width: 400, + min_height: 450, + width: 800, + height: 450 + }, app, scheme, file]); + + this.tool = { + name: 'pointer', + background: '#ffffff', + foreground: '#000000', + lineJoin: 'round', + lineWidth: 1, + lineStroke: false + }; + } + + ApplicationDrawWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationDrawWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationDrawWindow.prototype.init = function(wm, app, scheme) { + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + var self = this; + + // Load and set up scheme (GUI) here + scheme.render(this, 'DrawWindow', root, null, null, { + _: doTranslate + }); + + var statusbar = scheme.find(this, 'Statusbar'); + + // + // Canvas + // + var canvas = scheme.find(this, 'Canvas').querySelector('canvas'); + canvas.width = DEFAULT_WIDTH; + canvas.height = DEFAULT_HEIGHT; + + var ctx = canvas.getContext('2d'); + + var startPos = {x: 0, y: 0}; + var cpos = {x: 0, y: 0}; + var tmpTools = ['path', 'rectangle', 'circle']; + var tmpCanvas, tmpContext; + + function createTempCanvas(ev) { + tmpCanvas = document.createElement('canvas'); + tmpCanvas.width = canvas.width; + tmpCanvas.height = canvas.height; + tmpCanvas.style.position = 'absolute'; + tmpCanvas.style.top = '0px'; + tmpCanvas.style.left = '0px'; + tmpCanvas.style.zIndex = 9999999999; + canvas.parentNode.appendChild(tmpCanvas); + + var t = (ev.shiftKey || ev.button > 0); + + tmpContext = tmpCanvas.getContext('2d'); + tmpContext.strokeStyle = t ? ctx.fillStyle : ctx.strokeStyle; + tmpContext.fillStyle = t ? ctx.strokeStyle : ctx.fillStyle; + tmpContext.lineWidth = ctx.lineWidth; + tmpContext.lineJoin = ctx.lineJoin; + } + + function removeTempCanvas() { + Utils.$remove(tmpCanvas); + tmpContext = null; + tmpCanvas = null; + } + + function toolAction(action, ev, pos, diff) { + if ( action === 'down' ) { + startPos = {x: pos.x, y: pos.y}; + + removeTempCanvas(); + + var elpos = Utils.$position(canvas); + startPos.x = pos.x - elpos.left; + startPos.y = pos.y - elpos.top; + cpos = {x: startPos.x, y: startPos.y}; + + ctx.strokeStyle = self.tool.foreground; + ctx.fillStyle = self.tool.background; + ctx.lineWidth = self.tool.lineWidth; + ctx.lineJoin = self.tool.lineJoin; + + if ( tmpTools.indexOf(self.tool.name) >= 0 ) { + createTempCanvas(ev); + } + } else if ( action === 'move' ) { + cpos.x = startPos.x + diff.x; + cpos.y = startPos.y + diff.y; + } else if ( action === 'up' ) { + if ( tmpCanvas && ctx ) { + ctx.drawImage(tmpCanvas, 0, 0); + } + removeTempCanvas(); + startPos = null; + } + + if ( toolEvents[self.tool.name] && toolEvents[self.tool.name]['mouse' + action] ) { + toolEvents[self.tool.name]['mouse' + action](ev, { + pos: cpos, + start: startPos, + canvas: canvas, + ctx: ctx, + tmpContext: tmpContext, + tmpCanvas: tmpCanvas, + win: self + }); + } + } + + GUI.Helpers.createDrag(canvas, function(ev, pos) { + toolAction('down', ev, pos); + }, function(ev, diff, pos) { + toolAction('move', ev, pos, diff); + }, function(ev, pos) { + toolAction('up', ev, pos); + self.hasChanged = true; + }); + + // + // Toolbars + // + scheme.find(this, 'Foreground').on('click', function() { + self.openColorDialog('foreground'); + }); + scheme.find(this, 'Background').on('click', function() { + self.openColorDialog('background'); + }); + + var ts = Object.keys(tools); + ts.forEach(function(t) { + scheme.find(self, 'tool-' + t).on('click', function() { + var stats = tools[t].statusText || ''; + statusbar.set('value', doTranslate(stats)); + + self.setToolProperty('name', t); + }); + }); + + var lineWidths = []; + for ( var i = 1; i < 22; i++ ) { + lineWidths.push({label: i.toString(), value: i}); + } + + scheme.find(this, 'LineWidth').add(lineWidths).on('change', function(ev) { + self.setToolProperty('lineWidth', parseInt(ev.detail, 10)); + }); + scheme.find(this, 'LineJoin').on('change', function(ev) { + self.setToolProperty('lineJoin', ev.detail); + }); + scheme.find(this, 'LineStroke').on('change', function(ev) { + self.setToolProperty('lineStroke', ev.detail); + }); + + // + // Init + // + this.setToolProperty('background', null); + this.setToolProperty('foreground', null); + this.setToolProperty('lineJoin', null); + this.setToolProperty('lineWidth', null); + this.setToolProperty('lineStroke', null); + + return root; + }; + + ApplicationDrawWindow.prototype.openColorDialog = function(param) { + var self = this; + + var colorParam = null; + if (param === 'background') { + colorParam = doTranslate('Set background color'); + } else if (param === 'foreground') { + colorParam = doTranslate('Set foreground color'); + } + + API.createDialog('Color', { + title: colorParam, + color: self.tool[param] + }, function(ev, button, result) { + if ( button !== 'ok' ) { + return; + } + self.setToolProperty(param, result.hex); + }, this); + }; + + ApplicationDrawWindow.prototype.setToolProperty = function(param, value) { + console.warn('setToolProperty', param, value); + + if ( typeof this.tool[param] !== 'undefined' ) { + if ( value !== null ) { + this.tool[param] = value; + } + } + + this._scheme.find(this, 'Foreground').set('value', this.tool.foreground); + this._scheme.find(this, 'Background').set('value', this.tool.background); + this._scheme.find(this, 'LineJoin').set('value', this.tool.lineJoin); + this._scheme.find(this, 'LineWidth').set('value', this.tool.lineWidth); + this._scheme.find(this, 'LineStroke').set('value', this.tool.lineStroke); + }; + + ApplicationDrawWindow.prototype.showFile = function(file, result) { + var self = this; + DefaultApplicationWindow.prototype.showFile.apply(this, arguments); + + var canvas = this._scheme.find(this, 'Canvas').querySelector('canvas'); + var ctx = canvas.getContext('2d'); + + function open(img) { + if ( (window.Uint8Array && (img instanceof Uint8Array)) ) { + var image = ctx.createImageData(canvas.width, ctx.height); + for (var i = 0; i < img.length; i++) { + image.data[i] = img[i]; + } + ctx.clearRect(0, 0, canvas.width, canvas.height); + ctx.drawImage(image, 0, 0); + } else if ( (img instanceof Image) || (img instanceof HTMLImageElement) ) { + canvas.width = img.width; + canvas.height = img.height; + ctx.clearRect(0, 0, img.width, img.height); + ctx.drawImage(img, 0, 0); + } + } + + if ( result ) { + this._toggleLoading(true); + + var tmp = new Image(); + tmp.onerror = function() { + self._toggleLoading(false); + alert('Failed to open image'); + }; + tmp.onload = function() { + self._toggleLoading(false); + open(this); + }; + tmp.src = result; + } else { + canvas.width = DEFAULT_WIDTH; + canvas.height = DEFAULT_HEIGHT; + ctx.clearRect(0, 0, canvas.width, canvas.height); + } + }; + + ApplicationDrawWindow.prototype.getFileData = function() { + var canvas = this._scheme.find(this, 'Canvas').querySelector('canvas'); + if ( canvas ) { + return new VFS.FileDataURL(canvas.toDataURL('image/png')); + } + return null; + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationDraw = function(args, metadata) { + DefaultApplication.apply(this, ['ApplicationDraw', args, metadata, { + readData: false, + extension: 'png', + mime: 'image/png', + filename: 'New image.png', + filetypes: [{ + label: 'PNG Image', + mime: 'image/png', + extension: 'png' + }] + }]); + }; + + ApplicationDraw.prototype = Object.create(DefaultApplication.prototype); + ApplicationDraw.constructor = DefaultApplication; + + ApplicationDraw.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationDrawWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationDraw = OSjs.Applications.ApplicationDraw || {}; + OSjs.Applications.ApplicationDraw.Class = Object.seal(ApplicationDraw); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-color-pick-from-screen-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-color-pick-from-screen-16.png new file mode 100644 index 0000000..34762fe Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-color-pick-from-screen-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-cursor-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-cursor-16.png new file mode 100644 index 0000000..b17e23a Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-cursor-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-selection-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-selection-16.png new file mode 100644 index 0000000..9ab8602 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-selection-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-shape-circle-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-circle-16.png new file mode 100644 index 0000000..c0a8ff4 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-circle-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-shape-ellipse-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-ellipse-16.png new file mode 100644 index 0000000..77abaf6 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-ellipse-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-shape-rectangle-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-rectangle-16.png new file mode 100644 index 0000000..e561eef Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-rectangle-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-shape-square-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-square-16.png new file mode 100644 index 0000000..e3c9e5a Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-shape-square-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-tool-bucket-fill-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-bucket-fill-16.png new file mode 100644 index 0000000..e0389db Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-bucket-fill-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-tool-eraser-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-eraser-16.png new file mode 100644 index 0000000..0e7f873 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-eraser-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-tool-path-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-path-16.png new file mode 100644 index 0000000..70d3547 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-path-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-tool-pencil-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-pencil-16.png new file mode 100644 index 0000000..43ec401 Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-pencil-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/icons/stock-tool-text-16.png b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-text-16.png new file mode 100644 index 0000000..60eb5ad Binary files /dev/null and b/build/htdocs/dist/packages/default/Draw/icons/stock-tool-text-16.png differ diff --git a/build/htdocs/dist/packages/default/Draw/metadata.json b/build/htdocs/dist/packages/default/Draw/metadata.json new file mode 100644 index 0000000..7e81305 --- /dev/null +++ b/build/htdocs/dist/packages/default/Draw/metadata.json @@ -0,0 +1,58 @@ +{ + "className": "ApplicationDraw", + "name": "Draw", + "description": "Simple drawing application", + "names": { + "bg_BG": "Рисуване", + "de_DE": "Zeichnen", + "fr_FR": "Dessin", + "it_IT": "Disegna", + "ko_KR": "그림판", + "nl_NL": "Tekenen", + "no_NO": "Tegne", + "pl_PL": "Rysowanie", + "ru_RU": "Графический редактор", + "sk_SK": "Kreslenie", + "tr_TR": "Çiz", + "vi_VN": "Vẽ" + }, + "descriptions": { + "bg_BG": "Приложение за рисуване", + "de_DE": "Einfaches Zeichen-Programm", + "fr_FR": "Programme de dessin simple", + "it_IT": "Semplice applicazione per creazione/modifica immagini", + "ko_KR": "간단한 그리기 응용 프로그램", + "nl_NL": "Eenvoudig tekenprogramma", + "no_NO": "Simpelt tegne-program", + "pl_PL": "Prosta aplikacja do rysowania", + "ru_RU": "Простой графический редактор", + "sk_SK": "Jednoduchá aplikácia na kreslenie", + "vi_VN": "Phần mềm vẽ đơn giản" + }, + "mime": [ + "^image" + ], + "category": "graphics", + "icon": "categories/gnome-graphics.png", + "compability": [ + "canvas" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Draw", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Draw/scheme.html b/build/htdocs/dist/packages/default/Draw/scheme.html new file mode 100644 index 0000000..e8c15c0 --- /dev/null +++ b/build/htdocs/dist/packages/default/Draw/scheme.html @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Line join + + Round + Miter + Bevel + + + Line width + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/FileManager/combined.css b/build/htdocs/dist/packages/default/FileManager/combined.css new file mode 100644 index 0000000..1984e44 --- /dev/null +++ b/build/htdocs/dist/packages/default/FileManager/combined.css @@ -0,0 +1,39 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationFileManagerWindow { +}*/ + +.ApplicationFileManagerWindow .unmounted { + opacity : .6; +} +.ApplicationFileManagerWindow gui-menu-bar-entry[data-id="ContextMenu"] { + display : none; +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/FileManager/combined.js b/build/htdocs/dist/packages/default/FileManager/combined.js new file mode 100644 index 0000000..47c0db6 --- /dev/null +++ b/build/htdocs/dist/packages/default/FileManager/combined.js @@ -0,0 +1,1143 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + function getSelected(view) { + var selected = []; + (view.get('value') || []).forEach(function(sub) { + selected.push(sub.data); + }); + return selected; + } + + var notificationWasDisplayed = {}; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationFileManagerWindow(app, metadata, scheme, path, settings) { + Window.apply(this, ['ApplicationFileManagerWindow', { + icon: metadata.icon, + title: metadata.name, + allow_drop: true, + width: 650, + height: 420 + }, app, scheme]); + + this.wasFileDropped = false; + this.currentPath = path; + this.currentSummary = {}; + this.viewOptions = Utils.argumentDefaults(settings || {}, { + ViewNavigation: true, + ViewSide: true + }, true); + this.history = []; + this.historyIndex = -1; + + var self = this; + this.settingsWatch = OSjs.Core.getSettingsManager().watch('VFS', function() { + if ( self._loaded ) { + self.changePath(); + } + }); + + this._on('drop:upload', function(ev, item) { + app.upload(self.currentPath, item, self); + }); + + this._on('drop:file', function(ev, src) { + if ( Utils.dirname(src.path) !== self.currentPath ) { + var dst = new VFS.File(Utils.pathJoin(self.currentPath, src.filename)); + self.wasFileDropped = dst; + app.copy(src, dst, self); + } + }); + + this._on('keydown', function(ev, keyCode, shiftKey, ctrlKey, altKey) { + if ( Utils.keyCombination(ev, 'CTRL+V') ) { + var clip = API.getClipboard(); + if ( clip && (clip instanceof Array) ) { + clip.forEach(function(c) { + if ( c && (c instanceof VFS.File) ) { + var dst = new VFS.File(Utils.pathJoin(self.currentPath, c.filename)); + app.copy(c, dst, self); + } + }); + } + } else if ( ev.keyCode === Utils.Keys.DELETE ) { + app.rm(getSelected(self._find('FileView')), self); + } + }); + + this._on('destroy', function() { + try { + OSjs.Core.getSettingsManager().unwatch(self.settingsWatch); + } catch ( e ) {} + }); + } + + ApplicationFileManagerWindow.prototype = Object.create(Window.prototype); + ApplicationFileManagerWindow.constructor = Window.prototype; + + ApplicationFileManagerWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + var self = this; + var view; + + var viewType = this.viewOptions.ViewType || 'gui-list-view'; + var viewSide = this.viewOptions.ViewSide === true; + var viewNav = this.viewOptions.ViewNavigation === true; + + var vfsOptions = Utils.cloneObject(OSjs.Core.getSettingsManager().get('VFS') || {}); + var scandirOptions = vfsOptions.scandir || {}; + + var viewHidden = scandirOptions.showHiddenFiles === true; + var viewExtension = scandirOptions.showFileExtensions === true; + + // Load and set up scheme (GUI) here + scheme.render(this, 'FileManagerWindow', root, null, null, { + _: OSjs.Applications.ApplicationFileManager._ + }); + + if ( (API.getConfig('Connection.Type') !== 'nw') && window.location.protocol.match(/^file/) ) { // FIXME: Translation + this._setWarning('VFS does not work when in standalone mode'); + } + + // + // Menus + // + + var menuMap = { + MenuClose: function() { + self._close(); + }, + MenuCreateFile: function() { + app.mkfile(self.currentPath, self); + }, + MenuCreateDirectory:function() { + app.mkdir(self.currentPath, self); + }, + MenuUpload: function() { + app.upload(self.currentPath, null, self); + }, + MenuRename: function() { + app.rename(getSelected(view), self); + }, + MenuDelete: function() { + app.rm(getSelected(view), self); + }, + MenuInfo: function() { + app.info(getSelected(view), self); + }, + MenuOpen: function() { + app.open(getSelected(view), self); + }, + MenuDownload: function() { + app.download(getSelected(view), self); + }, + MenuRefresh: function() { + self.changePath(); + }, + MenuViewList: function() { + self.changeView('gui-list-view', true); + }, + MenuViewTree: function() { + self.changeView('gui-tree-view', true); + }, + MenuViewIcon: function() { + self.changeView('gui-icon-view', true); + }, + MenuShowSidebar: function() { + viewSide = self.toggleSidebar(!viewSide, true); + }, + MenuShowNavigation: function() { + viewNav = self.toggleNavbar(!viewNav, true); + }, + MenuShowHidden: function() { + viewHidden = self.toggleHidden(!viewHidden, true); + }, + MenuShowExtension: function() { + viewExtension = self.toggleExtension(!viewExtension, true); + }, + MenuColumnFilename: function() { + self.toggleColumn('filename', true); + }, + MenuColumnMIME: function() { + self.toggleColumn('mime', true); + }, + MenuColumnCreated: function() { + self.toggleColumn('ctime', true); + }, + MenuColumnModified: function() { + self.toggleColumn('mtime', true); + }, + MenuColumnSize: function() { + self.toggleColumn('size', true); + } + }; + + function menuEvent(ev) { + var f = ev.detail.func || ev.detail.id; + if ( menuMap[f] ) { + menuMap[f](); + } + } + + scheme.find(this, 'SubmenuFile').on('select', menuEvent); + var contextMenu = scheme.find(this, 'SubmenuContext').on('select', menuEvent); + scheme.find(this, 'SubmenuEdit').on('select', menuEvent); + var viewMenu = scheme.find(this, 'SubmenuView').on('select', menuEvent); + + viewMenu.set('checked', 'MenuViewList', viewType === 'gui-list-view'); + viewMenu.set('checked', 'MenuViewTree', viewType === 'gui-tree-view'); + viewMenu.set('checked', 'MenuViewIcon', viewType === 'gui-icon-view'); + viewMenu.set('checked', 'MenuShowSidebar', viewSide); + viewMenu.set('checked', 'MenuShowNavigation', viewNav); + viewMenu.set('checked', 'MenuShowHidden', viewHidden); + viewMenu.set('checked', 'MenuShowExtension', viewExtension); + + // + // Toolbar + // + scheme.find(this, 'GoLocation').on('enter', function(ev) { + self.changePath(ev.detail, null, false, true); + }); + scheme.find(this, 'GoBack').on('click', function(ev) { + self.changeHistory(-1); + }); + scheme.find(this, 'GoNext').on('click', function(ev) { + self.changeHistory(1); + }); + + // + // Side View + // + var side = scheme.find(this, 'SideView'); + side.on('activate', function(ev) { + if ( ev && ev.detail && ev.detail.entries ) { + var entry = ev.detail.entries[0]; + if ( entry ) { + self.changePath(entry.data.root); + } + } + }); + + // + // File View + // + view = this._scheme.find(this, 'FileView'); + view.on('activate', function(ev) { + if ( ev && ev.detail && ev.detail.entries ) { + self.checkActivation(ev.detail.entries); + } + }); + view.on('select', function(ev) { + if ( ev && ev.detail && ev.detail.entries ) { + self.checkSelection(ev.detail.entries); + } + }); + view.on('contextmenu', function(ev) { + if ( ev && ev.detail && ev.detail.entries ) { + self.checkSelection(ev.detail.entries); + } + contextMenu.show(ev); + }); + + // + // Init + // + + this.renderSideView(); + + this.changeView(viewType, false); + this.toggleHidden(viewHidden, false); + this.toggleExtension(viewExtension, false); + this.toggleSidebar(viewSide, false); + this.toggleNavbar(viewNav, false); + + this.changePath(this.currentPath); + this.toggleColumn(); + + return root; + }; + + ApplicationFileManagerWindow.prototype.checkSelection = function(files) { + var scheme = this._scheme; + + if ( !scheme ) { + return; + } + + var self = this; + var content = ''; + var statusbar = scheme.find(this, 'Statusbar'); + var doTranslate = OSjs.Applications.ApplicationFileManager._; + + var sum, label; + + function toggleMenuItems(isFile, isDirectory) { + /* + * Toggling MenuItems with the bit MODE_F or MODE_FD set by type of selected items + * MODE_F : Selected items consist of ONLY files + * MODE_FD : One or many items are selected (type doesn't matter) + */ + + var MODE_F = !isFile || !!isDirectory; + var MODE_FD = !(isFile || isDirectory); + + scheme.find(self, 'MenuRename').set('disabled', MODE_FD); + scheme.find(self, 'MenuDelete').set('disabled', MODE_FD); + scheme.find(self, 'MenuInfo').set('disabled', MODE_FD); // TODO: Directory info must be supported + scheme.find(self, 'MenuDownload').set('disabled', MODE_F); + scheme.find(self, 'MenuOpen').set('disabled', MODE_F); + + scheme.find(self, 'ContextMenuRename').set('disabled', MODE_FD); + scheme.find(self, 'ContextMenuDelete').set('disabled', MODE_FD); + scheme.find(self, 'ContextMenuInfo').set('disabled', MODE_FD); // TODO: Directory info must be supported + scheme.find(self, 'ContextMenuDownload').set('disabled', MODE_F); + scheme.find(self, 'ContextMenuOpen').set('disabled', MODE_F); + } + + if ( files && files.length ) { + sum = {files: 0, directories: 0, size: 0}; + (files || []).forEach(function(f) { + if ( f.data.type === 'dir' ) { + sum.directories++; + } else { + sum.files++; + sum.size += f.data.size; + } + }); + + label = 'Selected {0} files, {1} dirs, {2}'; + content = doTranslate(label, sum.files, sum.directories, Utils.humanFileSize(sum.size)); + + toggleMenuItems(sum.files, sum.directories); + } else { + sum = this.currentSummary; + if ( sum ) { + label = 'Showing {0} files ({1} hidden), {2} dirs, {3}'; + content = doTranslate(label, sum.files, sum.hidden, sum.directories, Utils.humanFileSize(sum.size)); + } + + toggleMenuItems(false, false); + } + + statusbar.set('value', content); + }; + + ApplicationFileManagerWindow.prototype.checkActivation = function(files) { + var self = this; + (files || []).forEach(function(f) { + if ( f.data.type === 'dir' ) { + self.changePath(f.data.path); + return false; + } + + API.open(new VFS.File(f.data)); + + return true; + }); + }; + + ApplicationFileManagerWindow.prototype.updateSideView = function(updateModule) { + if ( this._destroyed || !this._scheme ) { + return; + } + + var found = null; + var path = this.currentPath || '/'; + + if ( updateModule ) { + this.renderSideView(); + } + + OSjs.Core.getMountManager().getModules({special: true}).forEach(function(m, i) { + if ( path.match(m.module.match) ) { + found = m.module.root; + } + }); + + var view = this._scheme.find(this, 'SideView'); + view.set('selected', found, 'root'); + }; + + ApplicationFileManagerWindow.prototype.renderSideView = function() { + if ( this._destroyed || !this._scheme ) { + return; + } + + var sideViewItems = []; + OSjs.Core.getMountManager().getModules({special: true}).forEach(function(m, i) { + if ( m.module.dynamic && !m.module.mounted() ) { + return; + } + + var classNames = [m.module.mounted() ? 'mounted' : 'unmounted']; + if ( m.module.readOnly ) { + classNames.push('readonly gui-has-emblem'); + } + + sideViewItems.push({ + value: m.module, + className: classNames.join(' '), + columns: [ + { + label: m.module.description, + icon: API.getIcon(m.module.icon) + } + ], + onCreated: function(nel) { + if ( m.module.readOnly ) { + nel.style.backgroundImage = 'url(' + API.getIcon('emblems/emblem-readonly.png', '16x16') + ')'; + } + } + }); + }); + + var side = this._scheme.find(this, 'SideView'); + side.clear(); + side.add(sideViewItems); + }; + + ApplicationFileManagerWindow.prototype.onMountEvent = function(module, msg) { + var m = OSjs.Core.getMountManager().getModule(module); + if ( m ) { + if ( msg === 'vfs:unmount' ) { + if ( this.currentPath.match(m.match) ) { + this.changePath(API.getDefaultPath()); + } + } + this.updateSideView(m); + } + }; + + ApplicationFileManagerWindow.prototype.onFileEvent = function(chk, isDest) { + if ( (this.currentPath === Utils.dirname(chk.path)) || (this.currentPath === chk.path) ) { + this.changePath(null, this.wasFileDropped, false, false, !this.wasFileDroped); + } + }; + + ApplicationFileManagerWindow.prototype.changeHistory = function(dir) { + if ( this.historyIndex !== -1 ) { + if ( dir < 0 ) { + if ( this.historyIndex > 0 ) { + this.historyIndex--; + } + } else if ( dir > 0 ) { + if ( this.historyIndex < this.history.length - 1 ) { + this.historyIndex++; + } + } + + this.changePath(this.history[this.historyIndex], null, true); + } + }; + + ApplicationFileManagerWindow.prototype.changePath = function(dir, selectFile, isNav, isInput, applyScroll) { + if ( this._destroyed || !this._scheme ) { + return; + } + this.wasFileDropped = false; + + //if ( dir === this.currentPath ) { return; } + dir = dir || this.currentPath; + + var self = this; + var view = this._scheme.find(this, 'FileView'); + + function updateNavigation() { + self._scheme.find(self, 'GoLocation').set('value', dir); + self._scheme.find(self, 'GoBack').set('disabled', self.historyIndex <= 0); + self._scheme.find(self, 'GoNext').set('disabled', self.historyIndex < 0 || self.historyIndex >= (self.history.length - 1)); + } + + function updateHistory(dir) { + if ( !isNav ) { + if ( self.historyIndex >= 0 && self.historyIndex < self.history.length - 1 ) { + self.history = []; + } + + var current = self.history[self.history.length - 1]; + if ( current !== dir ) { + self.history.push(dir); + } + + if ( self.history.length > 1 ) { + self.historyIndex = self.history.length - 1; + } else { + self.historyIndex = -1; + } + } + if ( isInput ) { + self.history = [dir]; + self.historyIndex = 0; + } + + self._setTitle(dir, true); + } + + this._toggleLoading(true); + + view._call('chdir', { + path: dir, + done: function(error, summary) { + if ( self._destroyed || !self._scheme ) { + return; + } + + if ( dir && !error ) { + self.currentPath = dir; + self.currentSummary = summary; + if ( self._app ) { + self._app._setArgument('path', dir); + } + updateHistory(dir); + } + self._toggleLoading(false); + + self.checkSelection([]); + self.updateSideView(); + + if ( selectFile && view ) { + view.set('selected', selectFile.filename, 'filename', { + scroll: applyScroll + }); + } + + updateNavigation(); + } + }); + + }; + + ApplicationFileManagerWindow.prototype.changeView = function(viewType, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + var view = this._scheme.find(this, 'FileView'); + view.set('type', viewType, !!set); + + if ( set ) { + this._app._setSetting('ViewType', viewType, true); + } + }; + + ApplicationFileManagerWindow.prototype.toggleSidebar = function(toggle, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + this.viewOptions.ViewSide = toggle; + + var container = this._scheme.find(this, 'SideContainer'); + var handle = new GUI.Element(container.$element.parentNode.querySelector('gui-paned-view-handle')); + if ( toggle ) { + container.show(); + handle.show(); + } else { + container.hide(); + handle.hide(); + } + if ( set ) { + this._app._setSetting('ViewSide', toggle, true); + } + return toggle; + }; + + ApplicationFileManagerWindow.prototype.toggleVFSOption = function(opt, key, toggle, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + var view = this._scheme.find(this, 'FileView'); + var vfsOptions = OSjs.Core.getSettingsManager().instance('VFS'); + + var opts = {scandir: {}}; + opts.scandir[opt] = toggle; + + vfsOptions.set(null, opts, null, set); // set triggers refresh because of watch + view.set(key, toggle); + + return toggle; + }; + + ApplicationFileManagerWindow.prototype.toggleHidden = function(toggle, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + return this.toggleVFSOption('showHiddenFiles', 'dotfiles', toggle, set); + }; + + ApplicationFileManagerWindow.prototype.toggleExtension = function(toggle, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + return this.toggleVFSOption('showFileExtensions', 'extensions', toggle, set); + }; + + ApplicationFileManagerWindow.prototype.toggleNavbar = function(toggle, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + this.viewOptions.ViewNavigation = toggle; + + var viewNav = this._scheme.find(this, 'ToolbarContainer'); + if ( toggle ) { + viewNav.show(); + } else { + viewNav.hide(); + } + + if ( set ) { + this._app._setSetting('ViewNavigation', toggle, true); + } + + return toggle; + }; + + ApplicationFileManagerWindow.prototype.toggleColumn = function(col, set) { + if ( this._destroyed || !this._scheme ) { + return; + } + + var vfsOptions = Utils.cloneObject(OSjs.Core.getSettingsManager().get('VFS') || {}); + var scandirOptions = vfsOptions.scandir || {}; + var viewColumns = scandirOptions.columns || ['filename', 'mime', 'size']; + + if ( col ) { + var found = viewColumns.indexOf(col); + if ( found >= 0 ) { + viewColumns.splice(found, 1); + } else { + viewColumns.push(col); + } + + scandirOptions.columns = viewColumns; + + OSjs.Core.getSettingsManager().set('VFS', 'scandir', scandirOptions, set); + } + + var viewMenu = this._scheme.find(this, 'SubmenuView'); + viewMenu.set('checked', 'MenuColumnFilename', viewColumns.indexOf('filename') >= 0); + viewMenu.set('checked', 'MenuColumnMIME', viewColumns.indexOf('mime') >= 0); + viewMenu.set('checked', 'MenuColumnCreated', viewColumns.indexOf('ctime') >= 0); + viewMenu.set('checked', 'MenuColumnModified', viewColumns.indexOf('mtime') >= 0); + viewMenu.set('checked', 'MenuColumnSize', viewColumns.indexOf('size') >= 0); + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationFileManager = function(args, metadata) { + Application.apply(this, ['ApplicationFileManager', args, metadata]); + }; + + ApplicationFileManager.prototype = Object.create(Application.prototype); + ApplicationFileManager.constructor = Application; + + ApplicationFileManager.prototype.destroy = function() { + return Application.prototype.destroy.apply(this, arguments); + }; + + ApplicationFileManager.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.apply(this, arguments); + + var self = this; + var path = this._getArgument('path') || API.getDefaultPath(); + + this._on('vfs', function(msg, obj) { + var win = self._getMainWindow(); + if ( win ) { + if ( msg === 'vfs:mount' || msg === 'vfs:unmount' ) { + win.onMountEvent(obj, msg); + } else { + if ( obj.destination ) { + win.onFileEvent(obj.destination, true); + win.onFileEvent(obj.source); + } else { + win.onFileEvent(obj); + } + } + } + }); + + this._addWindow(new ApplicationFileManagerWindow(this, metadata, scheme, path, settings)); + }; + + ApplicationFileManager.prototype.download = function(items) { + items.forEach(function(item) { + VFS.url(new VFS.File(item), function(error, result) { + if ( result ) { + window.open(result); + } + }); + }); + }; + + ApplicationFileManager.prototype.rm = function(items, win) { + var self = this; + + // TODO: These must be async + var files = []; + items.forEach(function(i) { + files.push(i.filename); + }); + files = files.join(', '); + + win._toggleDisabled(true); + API.createDialog('Confirm', { + buttons: ['yes', 'no'], + message: Utils.format(OSjs.Applications.ApplicationFileManager._('Delete **{0}** ?'), files) + }, function(ev, button) { + win._toggleDisabled(false); + if ( button !== 'ok' && button !== 'yes' ) { + return; + } + + items.forEach(function(item) { + item = new VFS.File(item); + self._action('delete', [item], function() { + win.changePath(null); + }); + }); + }, win); + + }; + + ApplicationFileManager.prototype.info = function(items, win) { + items.forEach(function(item) { + if ( item.type === 'file' ) { + API.createDialog('FileInfo', { + file: new VFS.File(item) + }, null, win); + } + }); + }; + + ApplicationFileManager.prototype.open = function(items) { + items.forEach(function(item) { + if ( item.type === 'file' ) { + API.open(new VFS.File(item), {forceList: true}); + } + }); + }; + + ApplicationFileManager.prototype.rename = function(items, win) { + // TODO: These must be async + var self = this; + + function rename(item, newName) { + item = new VFS.File(item); + + var newitem = new VFS.File(item); + newitem.filename = newName; + newitem.path = Utils.replaceFilename(item.path, newName); + + self._action('move', [item, newitem], function(error) { + if ( !error ) { + win.changePath(null, newitem); + } + }); + } + + items.forEach(function(item) { + var dialog = API.createDialog('Input', { + message: OSjs.Applications.ApplicationFileManager._('Rename **{0}**', item.filename), + value: item.filename + }, function(ev, button, result) { + if ( button === 'ok' && result ) { + rename(item, result); + } + }, win); + dialog.setRange(Utils.getFilenameRange(item.filename)); + }); + }; + + ApplicationFileManager.prototype.mkfile = function(dir, win) { + var self = this; + + win._toggleDisabled(true); + function finished(write, item) { + win._toggleDisabled(false); + + if ( item ) { + VFS.write(item, '', function() { + win.changePath(null, item); + }, {}, self); + } + } + + API.createDialog('Input', { + value: 'My new File', + message: OSjs.Applications.ApplicationFileManager._('Create a new file in **{0}**', dir) + }, function(ev, button, result) { + if ( !result ) { + win._toggleDisabled(false); + return; + } + + var item = new VFS.File(dir + '/' + result); + VFS.exists(item, function(error, result) { + if ( result ) { + win._toggleDisabled(true); + + API.createDialog('Confirm', { + buttons: ['yes', 'no'], + message: API._('DIALOG_FILE_OVERWRITE', item.filename) + }, function(ev, button) { + finished(button === 'yes' || button === 'ok', item); + }, self); + } else { + finished(true, item); + } + }); + }, win); + }; + + ApplicationFileManager.prototype.mkdir = function(dir, win) { + var self = this; + + win._toggleDisabled(true); + API.createDialog('Input', { + message: OSjs.Applications.ApplicationFileManager._('Create a new directory in **{0}**', dir) + }, function(ev, button, result) { + if ( !result ) { + win._toggleDisabled(false); + return; + } + + var item = new VFS.File(dir + '/' + result); + self._action('mkdir', [item], function() { + win._toggleDisabled(false); + win.changePath(null, item); + }); + }, win); + }; + + ApplicationFileManager.prototype.copy = function(src, dest, win) { + var self = this; + var dialog = API.createDialog('FileProgress', { + message: OSjs.Applications.ApplicationFileManager._('Copying **{0}** to **{1}**', src.filename, dest.path) + }, function() { + }, win); + + win._toggleLoading(true); + + VFS.copy(src, dest, function(error, result) { + win._toggleLoading(false); + + try { + dialog._close(); + } catch ( e ) {} + + if ( error ) { + API.error(API._('ERR_GENERIC_APP_FMT', self.__label), API._('ERR_GENERIC_APP_REQUEST'), error); + return; + } + }, {dialog: dialog}, this._app); + }; + + ApplicationFileManager.prototype.upload = function(dest, files, win) { + var self = this; + + function upload() { + win._toggleLoading(true); + + VFS.upload({ + files: files, + destination: dest, + win: win, + app: self + }, function(error, file) { + win._toggleLoading(false); + if ( error ) { + API.error(API._('ERR_GENERIC_APP_FMT', self.__label), API._('ERR_GENERIC_APP_REQUEST'), error); + return; + } + win.changePath(null, file, false, false, true); + }); + } + + if ( files ) { + upload(); + } else { + API.createDialog('FileUpload', { + dest: dest + }, function(ev, button, result) { + if ( result ) { + win.changePath(null, result); + } + }, win); + } + }; + + ApplicationFileManager.prototype.showStorageNotification = function(type) { + if ( notificationWasDisplayed[type] ) { + return; + } + notificationWasDisplayed[type] = true; + + var wm = OSjs.Core.getWindowManager(); + if ( wm ) { + wm.notification({ + title: 'External Storage', + message: 'Using external services requires authorization. A popup-window may appear.', + icon: 'status/dialog-information.png' + }); + } + }; + + ApplicationFileManager.prototype._action = function(name, args, callback) { + callback = callback || function() {}; + var self = this; + var _onError = function(error) { + API.error(API._('ERR_GENERIC_APP_FMT', self.__label), API._('ERR_GENERIC_APP_REQUEST'), error); + callback(false); + }; + + VFS[name].apply(VFS, args.concat(function(error, result) { + if ( error ) { + _onError(error); + return; + } + callback(error, result); + }, null, this)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationFileManager = OSjs.Applications.ApplicationFileManager || {}; + OSjs.Applications.ApplicationFileManager.Class = Object.seal(ApplicationFileManager); + +})(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 + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, GUI, Utils, API, VFS) { + // jscs:disable validateQuoteMarks + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + var _Locales = { + bg_BG : { + 'Copying file...' : 'Копиране на файл...', + "Copying **{0}** to **{1}**" : "Копиране **{0}** към **{1}**", + "Refreshing..." : "Опресняване...", + "Loading..." : "Зареждане...", + "Create a new directory in **{0}**" : "Създаване на нова директория в **{0}**", + "Rename **{0}**" : "преименуване на **{0}**", + "Delete **{0}** ?" : "Изтриване на **{0}**?" + }, + de_DE : { + 'Copying file...' : 'Kopiere Datei...', + "Copying **{0}** to **{1}**" : "Kopiere **{0}** nach **{1}**", + "Refreshing..." : "Aktualisiere...", + "Loading..." : "Lade...", + "Create a new directory in **{0}**" : "Erstelle ein neues Verzeichnis in **{0}**", + "Rename **{0}**" : "**{0}** umbenennen", + "Delete **{0}** ?" : "**{0}** löschen?" + }, + fr_FR : { + 'Copying file...' : 'Copie de fichier...', + "Copying **{0}** to **{1}**" : "Copie de **{0}** à **{1}**", + "Refreshing..." : "Rafraichissement...", + "Loading..." : "Chargement...", + "Create a new file in **{0}**" : "Créer un nouveau fichier dans **{0}**", + "Create a new directory in **{0}**" : "Créer un nouveau dossier dans **{0}**", + "Rename **{0}**" : "Renommer **{0}**", + "Delete **{0}** ?" : "Supprimer **{0}** ?", + 'Selected {0} files, {1} dirs, {2}' : '{0} fichier(s) selectionné(s), {1} dossier(s), {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : '{0} fichier(s) affiché(s) ({1} caché(s)), {2} dossier(s), {3}' + }, + ar_DZ : { + 'Copying file...' : 'جاري نسخ الملف...', + "Copying **{0}** to **{1}**" : "نسخ من **{0}** إلى **{1}**", + "Refreshing..." : "جاري التحديث...", + "Loading..." : "جاري التحميل...", + "Create a new file in **{0}**" : "إنشاء ملف جديد في **{0}**", + "Create a new directory in **{0}**" : "إنشاء مجلد جديد في **{0}**", + "Rename **{0}**" : "إعادة التسمية **{0}**", + "Delete **{0}** ?" : "حذف **{0}** ?", + 'Selected {0} files, {1} dirs, {2}' : '{0} ملف مختار, {1} مجلد, {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : '{0} ملف مرئي ({1} مخفي(s)), {2} مجلد, {3}' + }, + it_IT : { + 'Copying file...' : 'Copiamento file...', + "Copying **{0}** to **{1}**" : "Copia **{0}** in **{1}**", + "Refreshing..." : "Ricarica...", + "Loading..." : "Caricamento...", + "Create a new file in **{0}**" : "Creazione nuovo file in **{0}**", + "Create a new directory in **{0}**" : "Creazione nuova cartella in **{0}**", + "Rename **{0}**" : "Rinomina **{0}**", + "Delete **{0}** ?" : "Cancellare **{0}** ?", + 'Selected {0} files, {1} dirs, {2}' : '{0} file selezionati, {1} cartelle, {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : 'Mostrando {0} file(s) ({1} nascosti), {2} cartelle, {3}' + }, + ko_KR : { + 'Copying file...' : '파일 복사...', + "Copying **{0}** to **{1}**" : "**{0}**를 **{1}**으로 복사", + "Refreshing..." : "새로고치는 중...", + "Loading..." : "기다려주세요...", + "Create a new file in **{0}**" : "**{0}**에 새 파일 만들기", + "Create a new directory in **{0}**" : "**{0}**에 새 디렉토리 만들기", + "Rename **{0}**" : "**{0}**의 이름 바꾸기", + "Delete **{0}** ?" : "**{0}**을 삭제하시겠습니까?", + 'Selected {0} files, {1} dirs, {2}' : '{0} 개의 파일, {1} 개의 디렉토리가 선택됨, {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : '{0} 개의 파일({1} 개의 숨긴 파일), {2} 개의 디렉토리가 존재, {3}' + }, + nl_NL : { + 'Copying file...' : 'Bestand kopieren...', + "Copying **{0}** to **{1}**" : "Kopieer **{0}** naar **{1}**", + "Refreshing..." : "Vernieuwen...", + "Loading..." : "Laden...", + "Create a new directory in **{0}**" : "Maak een nieuwe map in **{0}**", + "Rename **{0}**" : "Hernoem **{0}**", + "Delete **{0}** ?" : "**{0}** verwijderen?" + }, + no_NO : { + 'Copying file...' : 'Kopierer fil...', + "Copying **{0}** to **{1}**" : "Kopierer **{0}** to **{1}**", + "Refreshing..." : "Gjenoppfrisker...", + "Loading..." : "Laster...", + "Create a new file in **{0}**" : "Opprett ny fil i **{0}**", + "Create a new directory in **{0}**" : "Opprett ny mappe i **{0}**", + "Rename **{0}**" : "Navngi **{0}**", + "Delete **{0}** ?" : "Slette **{0}** ?" + }, + pl_PL : { + 'Copying file...' : 'Kopiowanie pliku...', + "Copying **{0}** to **{1}**" : "Kopiowanie **{0}** do **{1}**", + "Refreshing..." : "Odświeżanie...", + "Loading..." : "Ładowanie...", + "Create a new file in **{0}**" : "Utwórz nowy plik w **{0}**", + "Create a new directory in **{0}**" : "Utwórz nowy folder w **{0}**", + "Rename **{0}**" : "Zmień nazwę **{0}**", + "Delete **{0}** ?" : "Usunąć **{0}** ?", + 'Selected {0} files, {1} dirs, {2}' : 'Wybrane pliki: {0}, foldery: {1}, {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : 'Pokazywane pliki: {0} /(ukryte: {1}, foldery: {2}, {3}' + }, + ru_RU : { + 'Copying file...' : 'Копирование файла...', + "Copying **{0}** to **{1}**" : "Копирование **{0}** в **{1}**", + "Refreshing..." : "Обновление...", + "Loading..." : "Загрузка...", + "Create a new directory in **{0}**" : "Создать новый каталог в **{0}**", + "Rename **{0}**" : "Переименовать **{0}**", + "Delete **{0}** ?" : "Удалить **{0}** ?" + }, + sk_SK : { + 'Copying file...' : 'Kopírujem súbor...', + "Copying **{0}** to **{1}**" : "Kopírujem **{0}** do **{1}**", + "Refreshing..." : "Obnovujem...", + "Loading..." : "Nahrávam...", + "Create a new file in **{0}**" : "Vytvor nový súbor v **{0}**", + "Create a new directory in **{0}**" : "Vytvor nový adresár v **{0}**", + "Rename **{0}**" : "Premenuj **{0}**", + "Delete **{0}** ?" : "Zmazať **{0}** ?" + }, + tr_TR : { + 'Copying file...' : 'kopyalanıyor...', + "Copying **{0}** to **{1}**" : "**{0}** dosyası **{1}**e kopyalanıyor", + "Refreshing..." : "yenileniyor...", + "Loading..." : "yükleniyor...", + "Create a new directory in **{0}**" : " **{0}** içinde yeni bir klasör aç", + "Rename **{0}**" : "yeniden adlandır **{0}**", + "Delete **{0}** ?" : "sil **{0}**?" + }, + vi_VN : { + 'Copying file...' : 'Đang sao chép...', + "Copying **{0}** to **{1}**" : "Đang chép **{0}** tới **{1}**", + "Refreshing..." : "Đang làm mới...", + "Loading..." : "Đang tải...", + "Create a new file in **{0}**" : "Tạo một tập tin mới trong **{0}**", + "Create a new directory in **{0}**" : "Tạo một thư mục mới trong **{0}**", + "Rename **{0}**" : "Đổi tên **{0}**", + "Delete **{0}** ?" : "Xóa **{0}**?", + 'Selected {0} files, {1} dirs, {2}' : 'Đã chọn {0} tập tin, {1} thư mục, {2}', + 'Showing {0} files ({1} hidden), {2} dirs, {3}' : 'Đang hiển thị {0} tập tin({1} bị ẩn), {2} thư mục, {3}' + } + }; + + function _() { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(_Locales); + return API.__.apply(this, args); + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationFileManager = OSjs.Applications.ApplicationFileManager || {}; + OSjs.Applications.ApplicationFileManager._ = _; + +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.GUI, OSjs.Utils, OSjs.API, OSjs.VFS); diff --git a/build/htdocs/dist/packages/default/FileManager/metadata.json b/build/htdocs/dist/packages/default/FileManager/metadata.json new file mode 100644 index 0000000..5bb8e9b --- /dev/null +++ b/build/htdocs/dist/packages/default/FileManager/metadata.json @@ -0,0 +1,53 @@ +{ + "className": "ApplicationFileManager", + "name": "File Manager", + "description": "The default file manager", + "names": { + "bg_BG": "Файлов мениджър", + "de_DE": "Dateimanager", + "fr_FR": "Explorateur de fichier", + "it_IT": "Gestore File", + "nl_NL": "bestands beheer", + "no_NO": "Fil-håndtering", + "pl_PL": "Menedżer Plików", + "ko_KR": "파일 탐색기", + "sk_SK": "Správca súborov", + "ru_RU": "Файловый менеджер", + "tr_TR": "Dosya Yöneticisi", + "vi_VN": "Quản lí file" + }, + "descriptions": { + "bg_BG": "Стандартния файлов мениджър", + "de_DE": "Standardmäßiger Dateimanager", + "fr_FR": "Gestionnaire de fichier par défaut", + "it_IT": "Il gestore file predefinito", + "nl_NL": "Standaard bestands beheerder", + "no_NO": "Standard Fil-håndtering program", + "pl_PL": "Domyślny Menedżer Plików", + "ko_KR": "기본 파일 관리자", + "sk_SK": "Štandardný správca súborov", + "ru_RU": "Стандартный файловый менеджер", + "tr_TR": "Varsayılan dosya yöneticisi", + "vi_VN": "Trình quản lí file mặc định" + }, + "category": "utilities", + "icon": "apps/file-manager.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/FileManager", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/FileManager/scheme.html b/build/htdocs/dist/packages/default/FileManager/scheme.html new file mode 100644 index 0000000..a5a4f55 --- /dev/null +++ b/build/htdocs/dist/packages/default/FileManager/scheme.html @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/HTMLViewer/combined.js b/build/htdocs/dist/packages/default/HTMLViewer/combined.js new file mode 100644 index 0000000..786f39e --- /dev/null +++ b/build/htdocs/dist/packages/default/HTMLViewer/combined.js @@ -0,0 +1,93 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationHTMLViewerWindow(app, metadata, scheme, file) { + DefaultApplicationWindow.apply(this, ['ApplicationHTMLViewerWindow', { + icon: metadata.icon, + title: metadata.name, + width: 400, + height: 200 + }, app, scheme, file]); + } + + ApplicationHTMLViewerWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationHTMLViewerWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationHTMLViewerWindow.prototype.init = function(wmRef, app, scheme) { + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + scheme.render(this, 'HTMLViewerWindow', root); + return root; + }; + + ApplicationHTMLViewerWindow.prototype.showFile = function(file, url) { + if ( this._scheme ) { + this._find('iframe').set('src', url); + } + DefaultApplicationWindow.prototype.showFile.apply(this, arguments); + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationHTMLViewer(args, metadata) { + DefaultApplication.apply(this, ['ApplicationHTMLViewer', args, metadata, { + extension: 'html', + mime: 'text/htm', + filename: 'index.html', + fileypes: ['htm', 'html'], + readData: false + }]); + } + + ApplicationHTMLViewer.prototype = Object.create(DefaultApplication.prototype); + ApplicationHTMLViewer.constructor = DefaultApplication; + + ApplicationHTMLViewer.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationHTMLViewerWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationHTMLViewer = OSjs.Applications.ApplicationHTMLViewer || {}; + OSjs.Applications.ApplicationHTMLViewer.Class = Object.seal(ApplicationHTMLViewer); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/HTMLViewer/metadata.json b/build/htdocs/dist/packages/default/HTMLViewer/metadata.json new file mode 100644 index 0000000..731c268 --- /dev/null +++ b/build/htdocs/dist/packages/default/HTMLViewer/metadata.json @@ -0,0 +1,23 @@ +{ + "className": "ApplicationHTMLViewer", + "name": "HTML Viewer", + "mime": [ + "text\\/html" + ], + "icon": "mimetypes/html.png", + "category": "utilities", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/HTMLViewer", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/HTMLViewer/scheme.html b/build/htdocs/dist/packages/default/HTMLViewer/scheme.html new file mode 100644 index 0000000..4d02442 --- /dev/null +++ b/build/htdocs/dist/packages/default/HTMLViewer/scheme.html @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/MusicPlayer/api.php b/build/htdocs/dist/packages/default/MusicPlayer/api.php new file mode 100644 index 0000000..ff31f6b --- /dev/null +++ b/build/htdocs/dist/packages/default/MusicPlayer/api.php @@ -0,0 +1,47 @@ +File[0]) && isset($xml->File[0]->track) && ($node = $xml->File->track) ) { + return Array( + 'Artist' => isset($node->Performer) ? htmlspecialchars($node->Performer) : null, + 'Album' => isset($node->Album) ? htmlspecialchars($node->Album) : null, + 'Track' => isset($node->Track_name) ? htmlspecialchars($node->Track_name) : null + ); + } + } + } + + return false; + } + +} + +?> diff --git a/build/htdocs/dist/packages/default/MusicPlayer/combined.css b/build/htdocs/dist/packages/default/MusicPlayer/combined.css new file mode 100644 index 0000000..5200b26 --- /dev/null +++ b/build/htdocs/dist/packages/default/MusicPlayer/combined.css @@ -0,0 +1,47 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationMusicPlayerWindow { +}*/ + +.ApplicationMusicPlayerWindow gui-slider { + margin : 4px; + margin-top : 10px; + margin-bottom : 10px; +} +.ApplicationMusicPlayerWindow gui-vbox[data-id="Metadata"] { + margin : 4px; +} +.ApplicationMusicPlayerWindow gui-audio { + display : none; +} +.ApplicationMusicPlayerWindow gui-button-bar { + text-align : center; +} diff --git a/build/htdocs/dist/packages/default/MusicPlayer/combined.js b/build/htdocs/dist/packages/default/MusicPlayer/combined.js new file mode 100644 index 0000000..e471115 --- /dev/null +++ b/build/htdocs/dist/packages/default/MusicPlayer/combined.js @@ -0,0 +1,541 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, GUI, Dialogs, VFS) { + // jscs:disable validateQuoteMarks + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + var _Locales = { + bg_BG : { + 'Playlist' : 'Плейлист', + 'Playback aborted' : 'Прекратено изпълнение', + 'Network or communication error' : 'Проблем с връзка към мрежа', + 'Decoding failed. Corruption or unsupported media' : 'Провалено декодиране, повереден файл или неподдържан формат', + 'Media source not supported' : 'Източника на медия не се поддържа', + 'Failed to play file' : 'Изпълнението на файла се провали', + 'Artist' : 'Изпълнител', + 'Album' : 'Албум', + 'Track' : 'Песен', + 'Time' : 'Време', + 'Media information query failed' : 'Получаване на информация провалено', + 'seek unavailable in format' : 'Невъществуващ формат', + 'The audio type is not supported: {0}' : 'Аудио формата не се поддържа' + }, + de_DE : { + 'Playlist' : 'Wiedergabeliste', + 'Playback aborted' : 'Wiedergabe abgebrochen', + 'Network or communication error' : 'Netzwerk Kommunikationsfehler', + 'Decoding failed. Corruption or unsupported media' : 'Dekodierung gescheitert. Fehlerhafte oder nicht unterstützte Datei', + 'Media source not supported' : 'Medienquelle nicht unterstützt', + 'Failed to play file' : 'Wiedergabe der Datei gescheitert', + 'Artist' : 'Künstler', + 'Album' : 'Album', + 'Track' : 'Titel', + 'Time' : 'Zeit', + 'Media information query failed' : 'Media Informationssuche gescheitert', + 'seek unavailable in format' : 'Spulen im Format nicht verfügbar', + 'The audio type is not supported: {0}' : 'Der Audio-Typ {0} ist nicht unterstützt' + }, + es_ES : { + 'Playlist' : 'Lista de reproducción', + 'Playback aborted' : 'Playback anulado', + 'Network or communication error' : 'Error de red o de comunicación', + 'Decoding failed. Corruption or unsupported media' : 'Fallo en el desentrelazado. Medio corrupto o no soportado', + 'Media source not supported' : 'Medio no soportado', + 'Failed to play file' : 'Error reproduciendo archivo', + 'Artist' : 'Artista', + 'Album' : 'Album', + 'Track' : 'Pista', + 'Time' : 'Tiempo', + 'Media information query failed' : 'Error recupersqndo información del medio', + 'seek unavailable in format' : 'búsqueda no disponible en este formato', + 'The audio type is not supported: {0}' : 'El tipo de audio no está soportado: {0}' + }, + fr_FR : { + 'Playlist' : 'Liste de lecture', + 'Playback aborted' : 'Lecture interrompue', + 'Network or communication error' : 'Erreur de communication ou de réseau', + 'Decoding failed. Corruption or unsupported media' : 'Décodage raté. Média corrompus ou non pris en charge', + 'Media source not supported' : 'Source de médias non pris en charge', + 'Failed to play file' : 'Impossible de lire le fichier', + 'Artist' : 'Artiste', + 'Album' : 'Album', + 'Track' : 'Piste', + 'Time' : 'Durée', + 'Media information query failed' : 'Requête des informations média échoué', + 'seek unavailable in format' : 'recherche indisponible dans ce format', + 'The audio type is not supported: {0}' : 'Le type audio n\'est pas pris en charge: {0}' + }, + ar_DZ : { + 'Playlist' : 'قائمة القرائة', + 'Playback aborted' : 'قطع التشغيل', + 'Network or communication error' : 'خطأ في الإتصال بالشبكة', + 'Decoding failed. Corruption or unsupported media' : 'فشل في فك التشفير. وسائط غير صالحة أو غير مدعومة', + 'Media source not supported' : 'وسائط غير مدعومة', + 'Failed to play file' : 'لايمكن قراءة الملف', + 'Artist' : 'الفنان', + 'Album' : 'الألبوم', + 'Track' : 'المقطع', + 'Time' : 'المدة', + 'Media information query failed' : 'خطأ في قراءة معلومات الوسائط', + 'seek unavailable in format' : 'بحث غير ممكن في هذا النوع', + 'The audio type is not supported: {0}' : 'نوع الملف الصوتي غير مدعوم: {0}' + }, + it_IT : { + 'Playlist' : 'Playlist', + 'Playback aborted' : 'Riproduzione terminata', + 'Network or communication error' : 'Errore di rete o di comunicazione', + 'Decoding failed. Corruption or unsupported media' : 'Decodifica fallita. Supporto corroto o non supportato.', + 'Media source not supported' : 'Sorgente multimediale non supportata', + 'Failed to play file' : 'Riproduzione file fallita', + 'Artist' : 'Artista', + 'Album' : 'Album', + 'Track' : 'Traccia', + 'Time' : 'Tempo', + 'Media information query failed' : 'Recupero informazioni media fallita', + 'seek unavailable in format' : 'ricerca non disponibile nel formato', + 'The audio type is not supported: {0}' : 'Tipo di audio non supportato: {0}' + }, + ko_KR : { + 'Playlist' : '재생목록', + 'Playback aborted' : '일시중지', + 'Network or communication error' : '네트워크 등 통신 문제가 발생했습니다', + 'Decoding failed. Corruption or unsupported media' : '디코딩에 실패했습니다. 손상되었거나 지원하지 않는 형식입니다', + 'Media source not supported' : '지원하지 않는 미디어 소스입니다', + 'Failed to play file' : '파일을 재생하는데 실패했습니다', + 'Artist' : '아티스트', + 'Album' : '앨범', + 'Track' : '트랙', + 'Time' : '시간', + 'Media information query failed' : '미디어 정보 조회에 실패했습니다', + 'seek unavailable in format' : '탐색을 지원하지 않는 형식입니다', + 'The audio type is not supported: {0}' : '이 오디오 형식은 지원하지 않습니다: {0}' + }, + nl_NL : { + 'Playlist' : 'Afspeellijst', + 'Playback aborted' : 'Afspelen afgebroken', + 'Network or communication error' : 'Netwerk of communicatie fout', + 'Decoding failed. Corruption or unsupported media' : 'Decoderen mislukt: bestandstype wordt niet ondersteund', + 'Media source not supported' : 'Mediabron wordt niet ondersteund', + 'Failed to play file' : 'Afspelen van bestand mislukt', + 'Artist' : 'Artiest', + 'Album' : 'Album', + 'Track' : 'Nummer', + 'Time' : 'Tijd', + 'Media information query failed' : 'Zoeken naar media is niet gelukt', + 'seek unavailable in format' : 'Voor/achteruit spoelen is niet beschikbaar in dit formaat', + 'The audio type is not supported: {0}' : 'Audio type {0} wordt niet ondersteund' + }, + no_NO : { + 'Playlist' : 'Spilleliste', + 'Playback aborted' : 'Avspilling avbrutt', + 'Network or communication error' : 'Nettverks- eller kommunikasjonsfeil', + 'Decoding failed. Corruption or unsupported media' : 'Dekoding feilet. Korrupt eller ustøttet media', + 'Media source not supported' : 'Media-kilde ikke støttet', + 'Failed to play file' : 'Klarte ikke spille av fil', + 'Artist' : 'Artist', + 'Album' : 'Album', + 'Track' : 'Låt', + 'Time' : 'Tid', + 'Media information query failed' : 'Media-informasjon forespursel feil', + 'seek unavailable in format' : 'spoling utilgjenglig i format', + 'The audio type is not supported: {0}' : 'Denne lyd-typen er ikke støttet: {0}' + }, + pl_PL : { + 'Playlist' : 'Playlista', + 'Playback aborted' : 'Odtwarzanie Przerwane', + 'Network or communication error' : 'Błąd Sieci lub Komunikacji', + 'Decoding failed. Corruption or unsupported media' : 'Dekodowanie nie powiodło się. Uszkodzony lub nieobsługiwany plik', + 'Media source not supported' : 'Plik nie jest wspierany', + 'Failed to play file' : 'Nie można odtworzyć pliku', + 'Artist' : 'Artysta', + 'Album' : 'Album', + 'Track' : 'Ścieżka', + 'Time' : 'Czas', + 'Media information query failed' : 'Brak informacji', + 'seek unavailable in format' : 'Przewijanie nie jest obsługiwane w tym formacie', + 'The audio type is not supported: {0}' : 'Ten typ audio nie jest obsługiwany: {0}' + }, + ru_RU : { + 'Playlist' : 'Список воспроизведения', + 'Playback aborted' : 'Воспроизведение прервано', + 'Network or communication error' : 'Ошибка соединения', + 'Decoding failed. Corruption or unsupported media' : 'Не удалось декодировать файл. Файл поврежден или данынй формат не поддерживается', + 'Media source not supported' : 'Тип файла не поддерживается', + 'Failed to play file' : 'Ошибка воспроизведения', + 'Artist' : 'Артист', + 'Album' : 'Альбом', + 'Track' : 'Трек', + 'Time' : 'Время', + 'Media information query failed' : 'Ошибка в запросе медиа-информации', + 'seek unavailable in format' : 'Перемотка недоступна в этом формате', + 'The audio type is not supported: {0}' : 'Тип аудио не поддерживается: {0}' + }, + sk_SK : { + 'Playlist' : 'Zoznam skladieb', + 'Playback aborted' : 'Prehrávanie prerušené', + 'Network or communication error' : 'Chyba v sieťovej komunikácii', + 'Decoding failed. Corruption or unsupported media' : 'Dekódovanie sa nepodarilo alebo médium je nepodporované', + 'Media source not supported' : 'Zdrojové médium nie je podporované', + 'Failed to play file' : 'Chyba pri prehrávaní súboru', + 'Artist' : 'Umelec', + 'Album' : 'Album', + 'Track' : 'Skladba', + 'Time' : 'Čas', + 'Media information query failed' : 'Chyba pri získavaní informácii o médiu', + 'seek unavailable in format' : 'Formát média nepodporuje preskakovanie (seek)', + 'The audio type is not supported: {0}' : 'Nepodporovaný formát: {0}' + }, + + tr_TR : { + 'Playlist' : 'Oynatma listesi', + 'Playback aborted' : 'kayıt çalma/dinleme durduruldu', + 'Network or communication error' : 'ağ veya iletişim hatası', + 'Decoding failed. Corruption or unsupported media' : 'çözümleme hatası. Bozuk veya çalışmıyor.', + 'Media source not supported' : 'medya kaynağı bulunamadı', + 'Failed to play file' : 'Oynatma hatası', + 'Artist' : 'Artist', + 'Album' : 'Album', + 'Track' : 'Parça', + 'Time' : 'zaman', + 'Media information query failed' : 'medya bilgisini elde etmede hata oluştu', + 'seek unavailable in format' : 'bu formatta ileri saramazsınız', + 'The audio type is not supported: {0}' : 'Bu format desteklenmiyor: {0}' + }, + vi_VN : { + 'Playlist' : 'Danh sách phát', + 'Playback aborted' : 'Phát lại bị hủy', + 'Network or communication error' : 'Mạng hoặc thông tin liên lạc bị lỗi', + 'Decoding failed. Corruption or unsupported media' : 'Giải mã thất bại. Tập tin bị hỏng hoặc không được hỗ trợ', + 'Media source not supported' : 'Nguồn phương tiện không được hỗ trợ', + 'Failed to play file' : 'Không thể chơi tập tin', + 'Artist' : 'Ca sĩ', + 'Album' : 'Album', + 'Track' : 'Bài hát', + 'Time' : 'Thời gian', + 'Media information query failed' : 'Truy vấn thông tin tập tin thất bại', + 'seek unavailable in format' : 'không tua được trong định dạng này', + 'The audio type is not supported: {0}' : 'Loại âm thanh {0} không được hỗ trợ' + } + }; + + function _() { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(_Locales); + return OSjs.API.__.apply(this, args); + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationMusicPlayer = OSjs.Applications.ApplicationMusicPlayer || {}; + OSjs.Applications.ApplicationMusicPlayer._ = _; + +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.GUI, OSjs.Dialogs, OSjs.VFS); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + // TODO: Playlist + // TODO: Server seek support: https://gist.github.com/codler/3906826 + + function formatTime(secs) { + var hr = Math.floor(secs / 3600); + var min = Math.floor((secs - (hr * 3600)) / 60); + var sec = Math.floor(secs - (hr * 3600) - (min * 60)); + + if (min < 10) { + min = '0' + min; + } + if (sec < 10) { + sec = '0' + sec; + } + + return min + ':' + sec; + } + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationMusicPlayerWindow(app, metadata, scheme, file) { + DefaultApplicationWindow.apply(this, ['ApplicationMusicPlayerWindow', { + icon: metadata.icon, + title: metadata.name, + allow_drop: true, + allow_resize: false, + allow_maximize: false, + width: 370, + height: 260 + }, app, scheme, file]); + + this.updated = false; + } + + ApplicationMusicPlayerWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationMusicPlayerWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationMusicPlayerWindow.prototype.init = function(wm, app, scheme) { + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + var self = this; + + // Load and set up scheme (GUI) here + scheme.render(this, 'MusicPlayerWindow', root, null, null, { + _: OSjs.Applications.ApplicationMusicPlayer._ + }); + + var label = this._scheme.find(this, 'LabelTime'); + var seeker = this._scheme.find(this, 'Seek'); + + var player = scheme.find(this, 'Player'); + var audio = player.$element.firstChild; + + scheme.find(this, 'ButtonStart').set('disabled', true); + scheme.find(this, 'ButtonRew').set('disabled', true); + var buttonPlay = scheme.find(this, 'ButtonPlay').set('disabled', true).on('click', function() { + audio.play(); + }); + var buttonPause = scheme.find(this, 'ButtonPause').set('disabled', true).on('click', function() { + audio.pause(); + }); + scheme.find(this, 'ButtonFwd').set('disabled', true); + scheme.find(this, 'ButtonEnd').set('disabled', true); + + seeker.on('change', function(ev) { + if ( audio && !audio.paused ) { + try { + audio.pause(); + if ( ev ) { + audio.currentTime = ev.detail || 0; + } + audio.play(); + } catch ( e ) {} + } + }); + + player.on('play', function(ev) { + seeker.set('disabled', false); + buttonPause.set('disabled', false); + buttonPlay.set('disabled', true); + }); + player.on('ended', function(ev) { + seeker.set('disabled', true); + buttonPause.set('disabled', true); + }); + player.on('pause', function(ev) { + seeker.set('disabled', true); + buttonPause.set('disabled', false); + buttonPlay.set('disabled', false); + }); + player.on('loadeddata', function(ev) { + }); + player.on('timeupdate', function(ev) { + self.updateTime(label, seeker); + }); + player.on('error', function(ev) { + if ( !player.$element.src ) { + return; + } + + var msg = null; + try { + switch ( ev.target.error.code ) { + case ev.target.error.MEDIA_ERR_ABORTED: + msg = OSjs.Applications.ApplicationMusicPlayer._('Playback aborted'); + break; + case ev.target.error.MEDIA_ERR_NETWORK: + msg = OSjs.Applications.ApplicationMusicPlayer._('Network or communication error'); + break; + case ev.target.error.MEDIA_ERR_DECODE: + msg = OSjs.Applications.ApplicationMusicPlayer._('Decoding failed. Corruption or unsupported media'); + break; + case ev.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED: + msg = OSjs.Applications.ApplicationMusicPlayer._('Media source not supported'); + break; + default: + msg = OSjs.API._('ERR_APP_UNKNOWN_ERROR'); + break; + } + } catch ( e ) { + msg = OSjs.API._('ERR_GENERIC_APP_FATAL_FMT', e); + } + + if ( msg ) { + API.createDialog('Alert', {title: self._title, message: msg}, null, self); + } + }); + + return root; + }; + + ApplicationMusicPlayerWindow.prototype.showFile = function(file, content) { + if ( !file || !content ) { + return; + } + + var self = this; + var scheme = this._scheme; + var player = scheme.find(this, 'Player'); + var seeker = this._scheme.find(this, 'Seek'); + var audio = player.$element.firstChild; + + var artist = file ? file.filename : ''; + var album = file ? Utils.dirname(file.path) : ''; + + var labelArtist = this._scheme.find(this, 'LabelArtist').set('value', ''); + var labelTitle = this._scheme.find(this, 'LabelTitle').set('value', artist); + var labelAlbum = this._scheme.find(this, 'LabelAlbum').set('value', album); + this._scheme.find(this, 'LabelTime').set('value', ''); + seeker.set('min', 0); + seeker.set('max', 0); + seeker.set('value', 0); + + this.updated = false; + + function getInfo() { + self._app._api('info', {filename: file.path}, function(err, info) { + if ( info ) { + if ( info.Artist ) { + labelArtist.set('value', info.Artist); + } + if ( info.Album ) { + labelAlbum.set('value', info.Album); + } + if ( info.Title ) { + labelTitle.set('value', info.Track); + } + } + }); + } + + audio.src = content || ''; + audio.play(); + getInfo(); + }; + + ApplicationMusicPlayerWindow.prototype.updateTime = function(label, seeker) { + if ( this._destroyed ) { + return; // Important because async + } + + var player = this._scheme.find(this, 'Player'); + var audio = player.$element.firstChild; + + var total = audio.duration; + var current = audio.currentTime; + var unknown = false; + + if ( isNaN(current) || !isFinite(current) ) { + current = 0.0; + } + + if ( isNaN(total) || !isFinite(total) ) { + total = current; + unknown = true; + } + + var time = Utils.format('{0} / {1}', formatTime(current), unknown ? '' : formatTime(total)); + + if ( !this.updated ) { + seeker.set('min', 0); + seeker.set('max', total); + } + + label.set('value', time); + seeker.set('value', current); + + this.updated = true; + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationMusicPlayer = function(args, metadata) { + DefaultApplication.apply(this, ['ApplicationMusicPlayer', args, metadata, { + readData: false + }]); + }; + + ApplicationMusicPlayer.prototype = Object.create(DefaultApplication.prototype); + ApplicationMusicPlayer.constructor = DefaultApplication; + + ApplicationMusicPlayer.prototype.destroy = function() { + return DefaultApplication.prototype.destroy.apply(this, arguments); + }; + + ApplicationMusicPlayer.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationMusicPlayerWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationMusicPlayer = OSjs.Applications.ApplicationMusicPlayer || {}; + OSjs.Applications.ApplicationMusicPlayer.Class = Object.seal(ApplicationMusicPlayer); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/MusicPlayer/metadata.json b/build/htdocs/dist/packages/default/MusicPlayer/metadata.json new file mode 100644 index 0000000..2c52789 --- /dev/null +++ b/build/htdocs/dist/packages/default/MusicPlayer/metadata.json @@ -0,0 +1,47 @@ +{ + "className": "ApplicationMusicPlayer", + "name": "Music Player", + "names": { + "bg_BG": "Музикален плеър", + "de_DE": "Musikspieler", + "es_ES": "Music Player", + "fr_FR": "Lecteur de musique", + "it_IT": "Lettore Musicale", + "ko_KR": "뮤직 플레이어", + "nl_NL": "Audio speler", + "no_NO": "Musikkspiller", + "pl_PL": "Odtwarzacz muzyki", + "ru_RU": "Аудиоплеер", + "sk_SK": "Prehrávač hudby", + "tr_TR": "Muzik Çalar", + "vi_VN": "Nghe nhạc" + }, + "mime": [ + "^audio", + "osjs\\/playlist" + ], + "category": "multimedia", + "icon": "status/audio-volume-high.png", + "singular": true, + "compability": [ + "audio" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/MusicPlayer", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/MusicPlayer/scheme.html b/build/htdocs/dist/packages/default/MusicPlayer/scheme.html new file mode 100644 index 0000000..1ee502b --- /dev/null +++ b/build/htdocs/dist/packages/default/MusicPlayer/scheme.html @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + Artist + + + + + + + + + + + Album + + + + + + + + + + + Title + + + + + + + + + + + Time + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/Preview/combined.css b/build/htdocs/dist/packages/default/Preview/combined.css new file mode 100644 index 0000000..ff51b0a --- /dev/null +++ b/build/htdocs/dist/packages/default/Preview/combined.css @@ -0,0 +1,55 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +.ApplicationPreviewWindow gui-container { + overflow : hidden; + font-size : 0; + text-align : center; +} +.ApplicationPreviewWindow gui-video { + vertical-align : middle; + display : inline-block; + background : #000; + height : 100%; + width : 100%; +} + +.ApplicationPreviewWindow gui-video > video { + height : 100%; + width : 100%; + display : inline-block; +} + +.ApplicationPreviewWindow gui-image { + width : auto; +} +.ApplicationPreviewWindow gui-image[data-zoom="fit"] > img { + width : 100%; +} diff --git a/build/htdocs/dist/packages/default/Preview/combined.js b/build/htdocs/dist/packages/default/Preview/combined.js new file mode 100644 index 0000000..2a9848c --- /dev/null +++ b/build/htdocs/dist/packages/default/Preview/combined.js @@ -0,0 +1,204 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationPreviewWindow(app, metadata, scheme, file) { + DefaultApplicationWindow.apply(this, ['ApplicationPreviewWindow', { + allow_drop: true, + icon: metadata.icon, + title: metadata.name, + width: 400, + height: 200 + }, app, scheme, file]); + + this.zoomLevel = 0; + this.isImage = true; + this.origWidth = 0; + this.origHeight = 0; + this.$view = null; + } + + ApplicationPreviewWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationPreviewWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationPreviewWindow.prototype.destroy = function() { + this.$view = null; + + return DefaultApplicationWindow.prototype.destroy.apply(this, arguments); + }; + + ApplicationPreviewWindow.prototype.init = function(wm, app, scheme) { + var self = this; + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + + // Load and set up scheme (GUI) here + scheme.render(this, 'PreviewWindow', root); + + this._find('ZoomIn').son('click', this, this.onZoomIn); + this._find('ZoomOut').son('click', this, this.onZoomOut); + this._find('ZoomFit').son('click', this, this.onZoomFit); + this._find('ZoomOriginal').son('click', this, this.onZoomOriginal); + + var c = this._find('Content').$element; + Utils.$bind(c, 'mousewheel', function(ev, pos) { + if ( pos.z === 1 ) { + self.onZoomOut(); + } else if ( pos.z === -1 ) { + self.onZoomIn(); + } + }); + + return root; + }; + + ApplicationPreviewWindow.prototype.showFile = function(file, result) { + var self = this; + var root = this._scheme.find(this, 'Content').$element; + Utils.$empty(root); + + if ( result ) { + this.zoomLevel = 0; + + if ( file.mime.match(/^image/) ) { + this.isImage = true; + this.$view = this._scheme.create(self, 'gui-image', {src: result}, root, { + onload: function() { + self.origWidth = this.offsetWidth; + self.origHeight = this.offsetHeight; + self._resizeTo(this.offsetWidth, this.offsetHeight, true, false, this); + } + }); + } else if ( file.mime.match(/^video/) ) { + this.isImage = false; + this.$view = this._scheme.create(self, 'gui-video', {src: result, controls: true, autoplay: true}, root, { + onload: function() { + self._resizeTo(this.offsetWidth, this.offsetHeight, true, false, this); + } + }); + } + } + + var toolbar = this._find('Toolbar'); + if ( toolbar ) { + toolbar[this.isImage ? 'show' : 'hide'](); + } + + DefaultApplicationWindow.prototype.showFile.apply(this, arguments); + }; + + ApplicationPreviewWindow.prototype._onZoom = function(val) { + if ( !this.isImage || !this.$view ) { + return; + } + + var zoom = ['in', 'out'].indexOf(val) !== -1; + var attr = 'zoomed'; + var w = null; + + if ( val === 'in' ) { + this.zoomLevel = Math.min(10, this.zoomLevel + 1); + } else if ( val === 'out' ) { + this.zoomLevel = Math.max(-10, this.zoomLevel - 1); + } else { + this.zoomLevel = 0; + attr = val === 'fit' ? val : ''; + } + + if ( zoom ) { + var z = this.zoomLevel; + if ( z === 0 ) { + z = 1; + w = this.origWidth; + } else if ( z > 0 ) { + z += 1; + w = this.origWidth * z; + } else if ( z < 0 ) { + z -= 1; + w = Math.abs(this.origWidth / z); + } + + this._setTitle(this.currentFile.filename + ' (' + String(z * 100) + '%)', true); + } else { + this._setTitle(this.currentFile.filename, true); + } + + this.$view.$element.setAttribute('data-zoom', attr); + this.$view.$element.firstChild.style.width = (w === null ? 'auto' : String(w) + 'px'); + } + + ApplicationPreviewWindow.prototype.onZoomIn = function() { + this._onZoom('in'); + }; + + ApplicationPreviewWindow.prototype.onZoomOut = function() { + this._onZoom('out'); + }; + + ApplicationPreviewWindow.prototype.onZoomFit = function() { + this._onZoom('fit'); + }; + + ApplicationPreviewWindow.prototype.onZoomOriginal = function() { + this._onZoom(); + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationPreview = function(args, metadata) { + DefaultApplication.apply(this, ['ApplicationPreview', args, metadata, { + readData: false + }]); + }; + + ApplicationPreview.prototype = Object.create(DefaultApplication.prototype); + ApplicationPreview.constructor = DefaultApplication; + + ApplicationPreview.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationPreviewWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationPreview = OSjs.Applications.ApplicationPreview || {}; + OSjs.Applications.ApplicationPreview.Class = Object.seal(ApplicationPreview); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Preview/metadata.json b/build/htdocs/dist/packages/default/Preview/metadata.json new file mode 100644 index 0000000..99d3d95 --- /dev/null +++ b/build/htdocs/dist/packages/default/Preview/metadata.json @@ -0,0 +1,57 @@ +{ + "className": "ApplicationPreview", + "name": "Preview", + "description": "Preview image files", + "names": { + "bg_BG": "Преглед на изображения", + "de_DE": "Vorschau", + "fr_FR": "Visionneuse", + "it_IT": "Anteprima Immagini", + "ko_KR": "미리보기", + "nl_NL": "Foto viewer", + "no_NO": "Forhåndsviser", + "pl_PL": "Podgląd", + "ru_RU": "Просмотрщик", + "sk_SK": "Prehliadač obrázkov", + "tr_TR": "Önizle", + "vi_VN": "Trình xem ảnh" + }, + "descriptions": { + "bg_BG": "Преглед на изображения", + "de_DE": "Bildervorschau", + "fr_FR": "Visionneuse de photos", + "it_IT": "Anteprima Immagini", + "ko_KR": "이미지 파일을 미리 봅니다", + "nl_NL": "Foto viewer", + "no_NO": "Forhåndsvisning av bilde-filer", + "pl_PL": "Podgląd zdjęć", + "ru_RU": "Просмотрщик изображений", + "sk_SK": "Prehliadač obrázkov", + "tr_TR": "resim dosyalarını önizle", + "vi_VN": "Trình xem ảnh" + }, + "mime": [ + "^image", + "^video" + ], + "category": "multimedia", + "icon": "mimetypes/image.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Preview", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Preview/scheme.html b/build/htdocs/dist/packages/default/Preview/scheme.html new file mode 100644 index 0000000..9d2433d --- /dev/null +++ b/build/htdocs/dist/packages/default/Preview/scheme.html @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/ProcessViewer/combined.css b/build/htdocs/dist/packages/default/ProcessViewer/combined.css new file mode 100644 index 0000000..d456dfb --- /dev/null +++ b/build/htdocs/dist/packages/default/ProcessViewer/combined.css @@ -0,0 +1,33 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationProcessViewerWindow application-window-content { +}*/ + diff --git a/build/htdocs/dist/packages/default/ProcessViewer/combined.js b/build/htdocs/dist/packages/default/ProcessViewer/combined.js new file mode 100644 index 0000000..b9d638d --- /dev/null +++ b/build/htdocs/dist/packages/default/ProcessViewer/combined.js @@ -0,0 +1,137 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationProcessViewerWindow(app, metadata, scheme) { + Window.apply(this, ['ApplicationProcessViewerWindow', { + icon: metadata.icon, + title: metadata.name, + width: 400, + height: 300 + }, app, scheme]); + + this.interval = null; + } + + ApplicationProcessViewerWindow.prototype = Object.create(Window.prototype); + ApplicationProcessViewerWindow.constructor = Window.prototype; + + ApplicationProcessViewerWindow.prototype.init = function(wm, app, scheme) { + var root = Window.prototype.init.apply(this, arguments); + + // Load and set up scheme (GUI) here + scheme.render(this, 'ProcessViewerWindow', root); + + var view = scheme.find(this, 'View'); + + function update() { + var now = new Date(); + var rows = []; + API.getProcesses().forEach(function(p) { + if ( p ) { + var alive = now - p.__started; + var iter = { + value: p.__pid, + id: p.__pid, + columns: [ + {label: p.__pname}, + {label: p.__pid.toString(), textalign: 'right'}, + {label: alive.toString(), textalign: 'right'} + ] + }; + + rows.push(iter); + } + }); + + view.patch(rows); + } + + view.set('columns', [ + {label: 'Name'}, + {label: 'PID', size: '60px', textalign: 'right'}, + {label: 'Alive', size: '60px', textalign: 'right'} + ]); + + scheme.find(this, 'ButtonKill').on('click', function() { + var selected = view.get('selected'); + if ( selected && selected[0] && typeof selected[0].data !== 'undefined' ) { + API.kill(selected[0].data); + } + }); + + this.interval = setInterval(function() { + update(); + }, 1000); + + update(); + + return root; + }; + + ApplicationProcessViewerWindow.prototype.destroy = function() { + Window.prototype.destroy.apply(this, arguments); + this.interval = clearInterval(this.interval); + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationProcessViewer = function(args, metadata) { + Application.apply(this, ['ApplicationProcessViewer', args, metadata]); + }; + + ApplicationProcessViewer.prototype = Object.create(Application.prototype); + ApplicationProcessViewer.constructor = Application; + + ApplicationProcessViewer.prototype.destroy = function() { + return Application.prototype.destroy.apply(this, arguments); + }; + + ApplicationProcessViewer.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.apply(this, arguments); + this._addWindow(new ApplicationProcessViewerWindow(this, metadata, scheme)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationProcessViewer = OSjs.Applications.ApplicationProcessViewer || {}; + OSjs.Applications.ApplicationProcessViewer.Class = Object.seal(ApplicationProcessViewer); + +})(OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/ProcessViewer/metadata.json b/build/htdocs/dist/packages/default/ProcessViewer/metadata.json new file mode 100644 index 0000000..f18b735 --- /dev/null +++ b/build/htdocs/dist/packages/default/ProcessViewer/metadata.json @@ -0,0 +1,54 @@ +{ + "className": "ApplicationProcessViewer", + "name": "Process Viewer", + "description": "View running processes", + "names": { + "bg_BG": "Процеси", + "de_DE": "Prozess-Manager", + "fr_FR": "Gestionnaire de processus", + "it_IT": "Gestore Attività", + "ko_KR": "프로세스 관리자", + "nl_NL": "Proces manager", + "no_NO": "Prosess oversikt", + "pl_PL": "Procesy", + "ru_RU": "Менеджер процессов", + "sk_SK": "Správca procesov", + "tr_TR": "İşlemleri Görüntüle", + "vi_VN": "Xem tiến trình" + }, + "descriptions": { + "bg_BG": "Преглед на процеси", + "de_DE": "Laufende Prozesse verwalten", + "fr_FR": "Visualiser les processus en cours", + "it_IT": "Mostri processi attivi", + "ko_KR": "실행 중인 프로세스를 관리합니다", + "nl_NL": "Bekijk de lopende processen", + "no_NO": "Se oversikt over kjørende prosesser", + "pl_PL": "Zobacz działające procesy", + "ru_RU": "Менеджер запущенных процессов", + "sk_SK": "Spravovanie bežiacich procesov", + "tr_TR": "çalışan işlemleri görüntüle", + "vi_VN": "Xem các tiến trình đang chạy" + }, + "singular": true, + "category": "system", + "icon": "apps/gnome-monitor.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/ProcessViewer", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/ProcessViewer/scheme.html b/build/htdocs/dist/packages/default/ProcessViewer/scheme.html new file mode 100644 index 0000000..6f9947b --- /dev/null +++ b/build/htdocs/dist/packages/default/ProcessViewer/scheme.html @@ -0,0 +1,16 @@ + + + + + + + + + + + LBL_KILL + + + + + diff --git a/build/htdocs/dist/packages/default/Settings/api.js b/build/htdocs/dist/packages/default/Settings/api.js new file mode 100644 index 0000000..96c1b97 --- /dev/null +++ b/build/htdocs/dist/packages/default/Settings/api.js @@ -0,0 +1,51 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function() { + 'use strict'; + + /* + * See http://os.js.org/doc/tutorials/application-with-server-api.html + */ + + // + // Run `app._api('test', {}, fn)` in client to reach this + // + module.exports.test = function(args, callback, request, response) { + callback(false, 'test'); + }; + + // + // This is called whenever the HTTP server starts up + // + module.exports._onServerStart = function(server, instance, metadata) { + }; + +})(); + diff --git a/build/htdocs/dist/packages/default/Settings/combined.css b/build/htdocs/dist/packages/default/Settings/combined.css new file mode 100644 index 0000000..dbb1844 --- /dev/null +++ b/build/htdocs/dist/packages/default/Settings/combined.css @@ -0,0 +1,108 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +.ApplicationSettingsWindow application-window-content { + overflow : hidden; +} + +.ApplicationSettingsWindow application-window-content gui-expander { + margin-bottom : 5px; +} + +.ApplicationSettingsWindow application-window-content [data-id="ContainerButtons"], +.ApplicationSettingsWindow application-window-content [data-id="ContainerContent"] { + overflow : hidden; + display : none; +} + +.ApplicationSettingsWindow application-window-content [data-id="SoundsList"] { + height : 150px; +} + +.ApplicationSettingsWindow application-window-content [data-id="HotkeysList"] { + height : 200px; +} + +.ApplicationSettingsWindow application-window-content [data-id="UsersList"], +.ApplicationSettingsWindow application-window-content [data-id="InstalledPackages"], +.ApplicationSettingsWindow application-window-content [data-id="PackagePaths"], +.ApplicationSettingsWindow application-window-content [data-id="PanelItems"], +.ApplicationSettingsWindow application-window-content [data-id="MountList"], +.ApplicationSettingsWindow application-window-content [data-id="SearchPaths"] { + height : 140px; +} + +.ApplicationSettingsWindow application-window-content [data-id="ContainerContent"] > div { + overflow : auto; + height : 100%; + width : 100%; +} + +.ApplicationSettingsWindow application-window-content [data-id="ContainerSelection"] { +} + +.ApplicationSettingsWindow application-window-content .ListView { + overflow : hidden; + height : 100%; + width : 100%; +} + .ApplicationSettingsWindow application-window-content .ListView > div { + min-height : 32px; + } + .ApplicationSettingsWindow application-window-content .ListView > div > ul { + list-style : none; + margin : 0; + padding : 0; + pointer-events: none; + } + .ApplicationSettingsWindow application-window-content .ListView > div > ul > li { + box-sizing : border-box; + display : inline-block; + margin : 0; + padding : 10px; + text-align : center; + cursor : pointer; + width : 90px; + height : 70px; + pointer-events: all; + } + .ApplicationSettingsWindow application-window-content .ListView > div > ul > li * { + pointer-events : none; + } + .ApplicationSettingsWindow application-window-content .ListView > div > ul > li > span { + display : block; + } + + .ApplicationSettingsWindow application-window-content .ListView > div > span { + display : block; + font-weight : bold; + margin-bottom : 5px; + pointer-events: none; + } diff --git a/build/htdocs/dist/packages/default/Settings/combined.js b/build/htdocs/dist/packages/default/Settings/combined.js new file mode 100644 index 0000000..49965fb --- /dev/null +++ b/build/htdocs/dist/packages/default/Settings/combined.js @@ -0,0 +1,2724 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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 + * 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 + * @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); diff --git a/build/htdocs/dist/packages/default/Settings/metadata.json b/build/htdocs/dist/packages/default/Settings/metadata.json new file mode 100644 index 0000000..f34e568 --- /dev/null +++ b/build/htdocs/dist/packages/default/Settings/metadata.json @@ -0,0 +1,57 @@ +{ + "className": "ApplicationSettings", + "preloadParallel": true, + "name": "Settings", + "mime": null, + "icon": "categories/applications-system.png", + "category": "system", + "singular": true, + "names": { + "bg_BG": "Настройки", + "de_DE": "Einstellungen", + "es_ES": "Settings", + "fr_FR": "Paramètres", + "it_IT": "Settaggi", + "ko_KR": "환경설정", + "nl_NL": "Instellingen", + "no_NO": "Instillinger", + "pl_PL": "Ustawienia", + "ru_RU": "Настройки", + "sk_SK": "Nastavenia", + "tr_TR": "Ayarlar", + "vi_VN": "Cài đặt" + }, + "descriptions": { + "bg_BG": "Настройки", + "de_DE": "Einstellungen", + "es_ES": "Settings", + "fr_FR": "Paramètres", + "it_IT": "Settaggi", + "ko_KR": "환경설정", + "nl_NL": "Instellingen", + "no_NO": "Instillinger", + "pl_PL": "Ustawienia", + "ru_RU": "Настройки", + "sk_SK": "Nastavenia", + "tr_TR": "Program Ayarlarını düzenle", + "vi_VN": "Cài đặt" + }, + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Settings", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Settings/scheme.html b/build/htdocs/dist/packages/default/Settings/scheme.html new file mode 100644 index 0000000..0edc7e8 --- /dev/null +++ b/build/htdocs/dist/packages/default/Settings/scheme.html @@ -0,0 +1,655 @@ + + + + + + + +
+ + + + + + + + + +
+ + + + + Desktop Margin + + + + + Desktop Corner Snapping + + + + + Window Snapping + + + + + Enable Window Switcher + + + + + Enable Animations + + + + + + + + + Enable Icon View + + + + + Invert Text Color + + + + + + + + + Enable TouchMenu + + + + + +
+ + + + + + +
+ + + + + + Enable Hotkeys + + + + + + + + + + + + + LBL_NAME + LBL_HOTKEY + + + + + + + + + + + + + +
+ + + +
+ + + + + Language (requires restart) + + + + + +
+ + + + + + + +
+ + + + + LBL_POSITION + + + + + LBL_AUTOHIDE + + + + + LBL_ONTOP + + + + + LBL_BACKGROUND_COLOR + + + + + LBL_TEXT_COLOR + + + + + LBL_OPACITY + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + LBL_HIDE + LBL_APPLICATION + LBL_SCOPE + Name + + + + + + + + LBL_UNINSTALL + LBL_SAVE + LBL_REGENERATE + Install from zip + + + + + + + + + + + + + + + + + + + + +
+ + + + + + LBL_NAME + LBL_REPOSITORY + LBL_VERSION + LBL_AUTHOR + + + + + + + + LBL_REFRESH + LBL_INSTALL + + + +
+ +
+ + + + + + +
+ + + + + Enable Application Search + + + + Enable File Search + + + + + + + + + + + + + + + + + + + + +
+ + + + + + +
+ + + + + + + + + + Enable Sounds + + + + + + + + + + + + + LBL_NAME + LBL_FILENAME + + + + + + + + + + + + + + +
+ + + + + + + + + +
+ + + + + LBL_THEME + + + + + LBL_ICONS + + + + + + + + + LBL_BACKGROUND_IMAGE + + + + + LBL_BACKGROUND_COLOR + + + + + Background Type + + + + + + + + + LBL_FONT + + + + + +
+ + + +
+ + + + + + LBL_ID + + + + + LBL_NAME + + + + + LBL_USERNAME + + + + + LBL_GROUPS + + + + + +
+ + + + + + +
+ + + + + + LBL_SHOW_HIDDENFILES + + + + LBL_SHOW_FILEEXTENSIONS + + + + + + + + + + + + + + + + + + + + + + +
+ + + +
+ + + + + + + + LBL_USERNAME + LBL_NAME + + + + + + + + + + + + + + + + +
+ + + + LBL_SAVE + LBL_BACK + + +
+ +
+ + + + + + + + + + + LBL_OK + LBL_CANCEL + + + + + + + + + + + + + LBL_TYPE + + + + WebDAV (OwnCloud) + + + + + LBL_NAME + + + + + + + LBL_DESCRIPTION + + + + + + + + + + + LBL_HOST + + + + + + + LBL_NAMESPACE + + + + + + + LBL_USERNAME + + + + + + + LBL_PASSWORD + + + + + + + CORS Enabled + + + + + + + + + + + + + + + LBL_CONNECT + LBL_CLOSE + + + + + + + + + + + + + + LBL_USERNAME + + + + + + + LBL_NAME + + + + + + + LBL_GROUPS + + + + + + + + + + + + LBL_SAVE + LBL_CLOSE + + + + + diff --git a/build/htdocs/dist/packages/default/Textpad/combined.css b/build/htdocs/dist/packages/default/Textpad/combined.css new file mode 100644 index 0000000..19a7ec9 --- /dev/null +++ b/build/htdocs/dist/packages/default/Textpad/combined.css @@ -0,0 +1,33 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationTextpadWindow { +}*/ + diff --git a/build/htdocs/dist/packages/default/Textpad/combined.js b/build/htdocs/dist/packages/default/Textpad/combined.js new file mode 100644 index 0000000..e31625a --- /dev/null +++ b/build/htdocs/dist/packages/default/Textpad/combined.js @@ -0,0 +1,119 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationTextpadWindow(app, metadata, scheme, file) { + DefaultApplicationWindow.apply(this, ['ApplicationTextpadWindow', { + allow_drop: true, + icon: metadata.icon, + title: metadata.name, + width: 450, + height: 300 + }, app, scheme, file]); + } + + ApplicationTextpadWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationTextpadWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationTextpadWindow.prototype.init = function(wmRef, app, scheme) { + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + var self = this; + + // Load and set up scheme (GUI) here + scheme.render(this, 'TextpadWindow', root); + scheme.find(this, 'Text').on('change', function() { + self.hasChanged = true; + }); + + return root; + }; + + ApplicationTextpadWindow.prototype.updateFile = function(file) { + DefaultApplicationWindow.prototype.updateFile.apply(this, arguments); + this._scheme.find(this, 'Text').$element.focus(); + }; + + ApplicationTextpadWindow.prototype.showFile = function(file, content) { + this._scheme.find(this, 'Text').set('value', content || ''); + DefaultApplicationWindow.prototype.showFile.apply(this, arguments); + }; + + ApplicationTextpadWindow.prototype.getFileData = function() { + return this._scheme.find(this, 'Text').get('value'); + }; + + ApplicationTextpadWindow.prototype._focus = function() { + if ( DefaultApplicationWindow.prototype._focus.apply(this, arguments) ) { + if ( this._scheme ) { + var input = this._scheme.find(this, 'Text').$element; + if ( input ) { + input.focus(); + } + } + return true; + } + return false; + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + var ApplicationTextpad = function(args, metadata) { + DefaultApplication.apply(this, ['ApplicationTextpad', args, metadata, { + extension: 'txt', + mime: 'text/plain', + filename: 'New text file.txt' + }]); + }; + + ApplicationTextpad.prototype = Object.create(DefaultApplication.prototype); + ApplicationTextpad.constructor = DefaultApplication; + + ApplicationTextpad.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationTextpadWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationTextpad = OSjs.Applications.ApplicationTextpad || {}; + OSjs.Applications.ApplicationTextpad.Class = Object.seal(ApplicationTextpad); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Textpad/metadata.json b/build/htdocs/dist/packages/default/Textpad/metadata.json new file mode 100644 index 0000000..210ba03 --- /dev/null +++ b/build/htdocs/dist/packages/default/Textpad/metadata.json @@ -0,0 +1,62 @@ +{ + "className": "ApplicationTextpad", + "name": "Textpad", + "description": "Simple text editor", + "names": { + "bg_BG": "Текстов редактор", + "de_DE": "Texteditor", + "fr_FR": "Éditeur de texte", + "it_IT": "Editor Testi", + "ko_KR": "텍스트패드", + "nl_NL": "Notities", + "no_NO": "Tekstblokk", + "pl_PL": "Notatnik", + "ru_RU": "Редактор текста", + "sk_SK": "Poznámkový blok", + "tr_TR": "Basit Bir Metin Düzenleyicisi", + "vi_VN": "Trình sửa văn bản" + }, + "descriptions": { + "bg_BG": "Стандартен текстов редактор", + "de_DE": "Einfacher Texteditor", + "fr_FR": "Éditeur de texte simple", + "it_IT": "Semplice editor di testi", + "ko_KR": "간단한 텍스트 편집기", + "nl_NL": "Eenvoudige Tekstverwerker", + "no_NO": "Simpel tekst redigering", + "pl_PL": "Prosty edytor tekstu", + "ru_RU": "Простой текстовый редактор", + "sk_SK": "Jednoduchý textový editor", + "tr_TR": "Basit Bir Metin Düzenleyicisi", + "vi_VN": "Trình sửa văn bản đơn giản" + }, + "mime": [ + "^text", + "inode\\/x\\-empty", + "application\\/x\\-empty", + "application\\/x\\-lua", + "application\\/x\\-python", + "application\\/javascript", + "application\\/json" + ], + "category": "utilities", + "icon": "apps/accessories-text-editor.png", + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Textpad", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Textpad/scheme.html b/build/htdocs/dist/packages/default/Textpad/scheme.html new file mode 100644 index 0000000..eca1344 --- /dev/null +++ b/build/htdocs/dist/packages/default/Textpad/scheme.html @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/packages/default/Writer/combined.css b/build/htdocs/dist/packages/default/Writer/combined.css new file mode 100644 index 0000000..32dd4ed --- /dev/null +++ b/build/htdocs/dist/packages/default/Writer/combined.css @@ -0,0 +1,33 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2015, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ + +/*.ApplicationWriterWindow application-window-content { +}*/ + diff --git a/build/htdocs/dist/packages/default/Writer/combined.js b/build/htdocs/dist/packages/default/Writer/combined.js new file mode 100644 index 0000000..3c070b0 --- /dev/null +++ b/build/htdocs/dist/packages/default/Writer/combined.js @@ -0,0 +1,461 @@ +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(Application, Window, GUI, Dialogs, VFS, Utils) { + // jscs:disable validateQuoteMarks + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // LOCALES + ///////////////////////////////////////////////////////////////////////////// + + var _Locales = { + bg_BG : { + 'Insert URL' : 'Въведи URL' + }, + de_DE : { + 'Insert URL' : 'URL einfügen' + }, + es_ES : { + 'Insert URL' : 'Insertar URL' + }, + fr_FR : { + 'Insert URL' : 'Insérer une URL' + }, + ar_DZ : { + 'Insert URL' : 'أدخل رابط' + }, + it_IT : { + 'Insert URL' : 'Inserisci URL' + }, + ko_KR : { + 'Insert URL' : '링크 삽입' + }, + nl_NL : { + 'Insert URL' : 'URL invoegen' + }, + no_NO : { + 'Insert URL' : 'Sett inn URL' + }, + pl_PL : { + 'Insert URL' : 'Wpisz URL' + }, + ru_RU : { + 'Insert URL' : 'Вставить ссылку' + }, + sk_SK : { + 'Insert URL' : 'Vložiť URL' + }, + tr_TR : { + 'Insert URL' : 'URL ekle' + }, + vi_VN : { + 'Insert URL' : 'Thêm URL' + } + }; + + function _() { + var args = Array.prototype.slice.call(arguments, 0); + args.unshift(_Locales); + return OSjs.API.__.apply(this, args); + } + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationWriter = OSjs.Applications.ApplicationWriter || {}; + OSjs.Applications.ApplicationWriter._ = _; + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.GUI, OSjs.Dialogs, OSjs.VFS, OSjs.Utils); + +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +(function(DefaultApplication, DefaultApplicationWindow, Application, Window, Utils, API, VFS, GUI) { + 'use strict'; + + ///////////////////////////////////////////////////////////////////////////// + // WINDOWS + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationWriterWindow(app, metadata, scheme, file) { + /*eslint dot-notation: "off"*/ + var config = OSjs.Core.getConfig(); + + DefaultApplicationWindow.apply(this, ['ApplicationWriterWindow', { + allow_drop: true, + icon: metadata.icon, + title: metadata.name, + width: 550, + height: 400 + }, app, scheme, file]); + + this.checkChangeLength = -1; + this.checkChangeInterval = null; + this.color = { + background : '#ffffff', + foreground : '#000000' + }; + this.font = { + name: config.Fonts['default'], + size: 3 + }; + } + + ApplicationWriterWindow.prototype = Object.create(DefaultApplicationWindow.prototype); + ApplicationWriterWindow.constructor = DefaultApplicationWindow.prototype; + + ApplicationWriterWindow.prototype.destroy = function() { + this.checkChangeInterval = clearInterval(this.checkChangeInterval); + return DefaultApplicationWindow.prototype.destroy.apply(this, arguments); + }; + + ApplicationWriterWindow.prototype.init = function(wmRef, app, scheme) { + var root = DefaultApplicationWindow.prototype.init.apply(this, arguments); + var self = this; + var _ = OSjs.Applications.ApplicationWriter._; + + // Load and set up scheme (GUI) here + scheme.render(this, 'WriterWindow', root, null, null, { + _: _ + }); + + var text = scheme.find(this, 'Text'); + + var buttons = { + 'text-bold': { + command: 'bold' + }, + 'text-italic': { + command: 'italic' + }, + 'text-underline': { + command: 'underline' + }, + 'text-strikethrough': { + command: 'strikeThrough' + }, + + 'justify-left': { + command: 'justifyLeft' + }, + 'justify-center': { + command: 'justifyCenter' + }, + 'justify-right': { + command: 'justifyRight' + }, + + 'indent': { + command: 'indent' + }, + 'unindent': { + command: 'outdent' + } + }; + + var menuEntries = { + 'MenuUndo': function() { + text._call('command', ['undo', false]); + }, + 'MenuRedo': function() { + text._call('command', ['redo', false]); + }, + 'MenuCopy': function() { + text._call('command', ['copy', false]); + }, + 'MenuCut': function() { + text._call('command', ['cut', false]); + }, + 'MenuDelete': function() { + text._call('command', ['delete', false]); + }, + 'MenuPaste': function() { + text._call('command', ['paste', false]); + }, + 'MenuUnlink': function() { + text._call('command', ['unlink', false]); + }, + 'MenuInsertOL': function() { + text._call('command', ['insertOrderedList', false]); + }, + 'MenuInsertUL': function() { + text._call('command', ['insertUnorderedList', false]); + }, + 'MenuInsertImage': function() { + API.createDialog('File', { + filter: ['^image'] + }, function(ev, button, result) { + if ( button !== 'ok' || !result ) { + return; + } + + VFS.url(result, function(error, url) { + text._call('command', ['insertImage', false, url]); + }); + }, self); + }, + 'MenuInsertLink': function() { + API.createDialog('Input', { + message: _('Insert URL'), + placeholder: 'https://os.js.org' + }, function(ev, button, result) { + if ( button !== 'ok' || !result ) { + return; + } + text._call('command', ['createLink', false, result]); + }, self); + } + }; + + function menuEvent(ev) { + if ( menuEntries[ev.detail.id] ) { + menuEntries[ev.detail.id](); + } + } + + scheme.find(this, 'SubmenuEdit').on('select', menuEvent); + scheme.find(this, 'SubmenuInsert').on('select', menuEvent); + + function getSelectionStyle() { + function _call(cmd) { + return text._call('query', [cmd]); + } + + var style = { + fontName: ((_call('fontName') || '').split(',')[0]).replace(/^'/, '').replace(/'$/, ''), + fontSize: parseInt(_call('fontSize'), 10) || self.font.size, + foreColor: _call('foreColor'), + hiliteColor: _call('hiliteColor') + }; + + Object.keys(buttons).forEach(function(b) { + var button = buttons[b]; + style[button.command] = { + button: b, + value:_call(button.command) + }; + }); + return style; + } + + function createColorDialog(current, cb) { + self._toggleDisabled(true); + API.createDialog('Color', { + color: current + }, function(ev, button, result) { + self._toggleDisabled(false); + if ( button === 'ok' && result ) { + cb(result.hex); + } + }, self); + } + + function createFontDialog(current, cb) { + self._toggleDisabled(true); + API.createDialog('Font', { + fontSize: self.font.size, + fontName: self.font.name, + minSize: 1, + maxSize: 8, + unit: 'null' + }, function(ev, button, result) { + self._toggleDisabled(false); + if ( button === 'ok' && result ) { + cb(result); + } + }, self); + } + + var back = scheme.find(this, 'Background').on('click', function() { + createColorDialog(self.color.background, function(hex) { + text._call('command', ['hiliteColor', false, hex]); + self.color.background = hex; + back.set('value', hex); + }); + }); + var front = scheme.find(this, 'Foreground').on('click', function() { + createColorDialog(self.color.foreground, function(hex) { + text._call('command', ['foreColor', false, hex]); + self.color.foreground = hex; + front.set('value', hex); + }); + }); + + var font = scheme.find(this, 'Font').on('click', function() { + createFontDialog(null, function(font) { + text._call('command', ['fontName', false, font.fontName]); + text._call('command', ['fontSize', false, font.fontSize]); + self.font.name = font.fontName; + self.font.size = font.fontSize; + }); + }); + + root.querySelectorAll('gui-toolbar > gui-button').forEach(function(b) { + var id = b.getAttribute('data-id'); + var button = buttons[id]; + if ( button ) { + (new GUI.Element(b)).on('click', function() { + text._call('command', [button.command]); + }).on('mousedown', function(ev) { + ev.preventDefault(); + }); + } + }); + + function updateToolbar(style) { + back.set('value', style.hiliteColor); + front.set('value', style.foreColor); + if ( style.fontName ) { + font.set('label', Utils.format('{0} ({1})', style.fontName, style.fontSize.toString())); + } + } + + function updateSelection() { + var style = getSelectionStyle(); + updateToolbar(style); + } + + back.set('value', this.color.background); + front.set('value', this.color.foreground); + font.set('label', Utils.format('{0} ({1})', this.font.name, this.font.size.toString())); + + text.on('selection', function() { + updateSelection(); + }); + + this.checkChangeInterval = setInterval(function() { + if ( self.hasChanged ) { + return; + } + + if ( self.checkChangeLength < 0 ) { + self.checkChangeLength = text.get('value').length; + } + + var len = text.get('value').length; + if ( len !== self.checkChangeLength ) { + self.hasChanged = true; + } + self.checkChangeLength = len; + }, 500); + + return root; + }; + + ApplicationWriterWindow.prototype.updateFile = function(file) { + DefaultApplicationWindow.prototype.updateFile.apply(this, arguments); + + try { + var el = this._scheme.find(this, 'Text'); + el.$element.focus(); + } catch ( e ) {} + + this.checkChangeLength = -1; + }; + + ApplicationWriterWindow.prototype.showFile = function(file, content) { + this._scheme.find(this, 'Text').set('value', content || ''); + DefaultApplicationWindow.prototype.showFile.apply(this, arguments); + }; + + ApplicationWriterWindow.prototype.getFileData = function() { + return this._scheme.find(this, 'Text').get('value'); + }; + + ApplicationWriterWindow.prototype._focus = function(file, content) { + if ( DefaultApplicationWindow.prototype._focus.apply(this, arguments) ) { + this._scheme.find(this, 'Text').focus(); + return true; + } + return false; + }; + + ///////////////////////////////////////////////////////////////////////////// + // APPLICATION + ///////////////////////////////////////////////////////////////////////////// + + function ApplicationWriter(args, metadata) { + DefaultApplication.apply(this, ['ApplicationWriter', args, metadata, { + extension: 'odoc', + mime: 'osjs/document', + filename: 'New text file.odoc' + }]); + } + + ApplicationWriter.prototype = Object.create(DefaultApplication.prototype); + ApplicationWriter.constructor = DefaultApplication; + + ApplicationWriter.prototype.destroy = function() { + return DefaultApplication.prototype.destroy.apply(this, arguments); + }; + + ApplicationWriter.prototype.init = function(settings, metadata, scheme) { + Application.prototype.init.call(this, settings, metadata, scheme); + var file = this._getArgument('file'); + this._addWindow(new ApplicationWriterWindow(this, metadata, scheme, file)); + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.ApplicationWriter = OSjs.Applications.ApplicationWriter || {}; + OSjs.Applications.ApplicationWriter.Class = Object.seal(ApplicationWriter); + +})(OSjs.Helpers.DefaultApplication, OSjs.Helpers.DefaultApplicationWindow, OSjs.Core.Application, OSjs.Core.Window, OSjs.Utils, OSjs.API, OSjs.VFS, OSjs.GUI); diff --git a/build/htdocs/dist/packages/default/Writer/metadata.json b/build/htdocs/dist/packages/default/Writer/metadata.json new file mode 100644 index 0000000..2574d70 --- /dev/null +++ b/build/htdocs/dist/packages/default/Writer/metadata.json @@ -0,0 +1,60 @@ +{ + "className": "ApplicationWriter", + "name": "Writer", + "description": "Write rich text documents", + "names": { + "bg_BG": "Текст", + "de_DE": "Writer", + "fr_FR": "Traitement de texte", + "it_IT": "Editor Testi", + "ko_KR": "글쓰기", + "nl_NL": "Tekstverwerker", + "no_NO": "Writer", + "pl_PL": "Writer", + "ru_RU": "Текстовый процессор", + "sk_SK": "Writer", + "tr_TR": "Writer", + "vi_VN": "Viết" + }, + "descriptions": { + "bg_BG": "Писанене на обогатен текст", + "de_DE": "Verfassen Sie Rich-Text-Dokumente", + "fr_FR": "Traitement de texte riche", + "it_IT": "Scrivi documenti di testo formattati", + "ko_KR": "리치 텍스트 문서 작성", + "nl_NL": "Tekst verwerker met opmaak", + "no_NO": "Skriv riktekst dokumenter", + "pl_PL": "Twórz dokumenty rich text", + "ru_RU": "Текстовый процессор", + "sk_SK": "Editor na tvorbu Rich-Text dokumentov", + "tr_TR": "Gelişmiş dökümanlar oluşturun", + "vi_VN": "Xem, chỉnh sửa văn bản" + }, + "mime": [ + "^text", + "osjs\\/document" + ], + "category": "office", + "icon": "apps/libreoffice34-writer.png", + "compability": [ + "richtext" + ], + "preload": [ + { + "type": "javascript", + "src": "combined.js" + }, + { + "type": "stylesheet", + "src": "combined.css" + }, + { + "src": "scheme.html", + "type": "scheme" + } + ], + "type": "application", + "path": "default/Writer", + "build": {}, + "repo": "default" +} \ No newline at end of file diff --git a/build/htdocs/dist/packages/default/Writer/scheme.html b/build/htdocs/dist/packages/default/Writer/scheme.html new file mode 100644 index 0000000..96b0161 --- /dev/null +++ b/build/htdocs/dist/packages/default/Writer/scheme.html @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FONT (SIZE) + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/settings.js b/build/htdocs/dist/settings.js new file mode 100644 index 0000000..187b20f --- /dev/null +++ b/build/htdocs/dist/settings.js @@ -0,0 +1,500 @@ +(function() { + window.OSjs = window.OSjs || {} + OSjs.Core = OSjs.Core || {} + OSjs.Core.getConfig = (function() { + var _cache; + return function() { + if ( !_cache ) { + _cache = { + "Version": "2.0-alpha80", + "SettingsManager": { + "VFS": { + "scandir": { + "showHiddenFiles": true, + "showFileExtensions": true, + "columns": [ + "filename", + "mime", + "size" + ] + }, + "mounts": [] + }, + "CoreWM": { + "styleTheme": "default", + "iconTheme": "default", + "soundTheme": "default", + "animations": true, + "fullscreen": true, + "desktopMargin": 5, + "wallpaper": "osjs:///themes/wallpapers/wallpaper.png", + "desktopPath": "desktop:///", + "icon": "osjs-white.png", + "backgroundColor": "#572a79", + "fontFamily": "Karla", + "background": "image-fill", + "windowCornerSnap": 0, + "windowSnap": 0, + "useTouchMenu": false, + "enableIconView": false, + "enableSwitcher": true, + "enableHotkeys": true, + "enableSounds": true, + "invertIconViewColor": false, + "moveOnResize": true, + "hotkeys": { + "WINDOW_MOVE_UP": "ALT+UP", + "WINDOW_MOVE_DOWN": "ALT+DOWN", + "WINDOW_MOVE_LEFT": "ALT+LEFT", + "WINDOW_MOVE_RIGHT": "ALT+RIGHT", + "WINDOW_MINIMIZE": "ALT+H", + "WINDOW_RESTORE": "ALT+R", + "WINDOW_MAXIMIZE": "ALT+M", + "SEARCH": "F3", + "SWITCHER": "ALT+TILDE", + "SAVEAS": "CTRL+SHIFT+S", + "SAVE": "CTRL+S", + "OPEN": "CTRL+O" + }, + "sounds": { + "LOGOUT": "service-logout", + "LOGIN": "service-login", + "ERROR": "dialog-warning" + }, + "panels": [ + { + "options": { + "position": "top", + "ontop": true, + "autohide": false, + "background": "#101010", + "foreground": "#ffffff", + "opacity": 85 + }, + "items": [ + { + "name": "AppMenu", + "settings": {} + }, + { + "name": "Buttons", + "settings": {} + }, + { + "name": "WindowList", + "settings": {} + }, + { + "name": "NotificationArea", + "settings": {} + }, + { + "name": "Search", + "settings": {} + }, + { + "name": "Clock", + "settings": {} + } + ] + } + ], + "mediaQueries": { + "mobile": 320, + "tablet": 800 + }, + "menu": { + "development": { + "icon": "categories/package_development.png", + "title": "Development" + }, + "education": { + "icon": "categories/applications-sience.png", + "title": "Education" + }, + "games": { + "icon": "categories/package_games.png", + "title": "Games" + }, + "graphics": { + "icon": "categories/package_graphics.png", + "title": "Graphics" + }, + "network": { + "icon": "categories/package_network.png", + "title": "Network" + }, + "multimedia": { + "icon": "categories/package_multimedia.png", + "title": "Multimedia" + }, + "office": { + "icon": "categories/package_office.png", + "title": "Office" + }, + "system": { + "icon": "categories/package_system.png", + "title": "System" + }, + "utilities": { + "icon": "categories/package_utilities.png", + "title": "Utilities" + }, + "unknown": { + "icon": "categories/applications-other.png", + "title": "Other" + } + } + }, + "PackageManager": { + "Repositories": [ + "https://builds.os.js.org/store/packages.json" + ], + "PackagePaths": [ + "home:///.packages" + ], + "Hidden": [] + }, + "DefaultApplication": { + "dir": "ApplicationFileManager" + }, + "SearchEngine": { + "applications": true, + "files": true, + "paths": [ + "home:///" + ] + } + }, + "PackageManager": { + "UseStaticManifest": false + }, + "Preloads": [], + "AutoStart": [], + "Languages": { + "en_EN": "English", + "bg_BG": "Bulgarian (Bulgaria)", + "no_NO": "Norsk (Norwegian)", + "de_DE": "Deutsch (German)", + "es_ES": "Spanish (Spain)", + "fr_FR": "French (France)", + "ru_RU": "Russian (Russia)", + "ko_KR": "Korean (한국어)", + "zh_CN": "Chinese (China)", + "nl_NL": "Dutch (Nederlands)", + "pl_PL": "Polski (Poland)", + "pt_BR": "Portuguese (Brazil)", + "sk_SK": "Slovak (Slovenčina)", + "vi_VN": "Vietnamese (Tiếng Việt)", + "tr_TR": "Turkish (Turkey)", + "it_IT": "Italiano (Italian)", + "fa_FA": "Farsi (Persian)", + "ar_DZ": "Arabic (Algeria)" + }, + "Styles": [ + { + "name": "dark", + "title": "Dark", + "style": { + "window": { + "margin": 30, + "border": 3 + } + } + }, + { + "name": "default", + "title": "Default", + "style": { + "window": { + "margin": 30, + "border": 3 + } + } + }, + { + "name": "glass", + "title": "Glass", + "style": { + "window": { + "margin": 30, + "border": 5 + } + } + }, + { + "name": "material", + "title": "Material Design", + "style": { + "window": { + "margin": 34, + "border": 0 + } + } + }, + { + "name": "windows8", + "title": "Windows 8", + "style": { + "window": { + "margin": 30, + "border": 3 + } + } + } + ], + "Sounds": { + "default": "Default (Freedesktop)" + }, + "Icons": { + "default": "Default (Gnome)" + }, + "Fonts": { + "default": "Karla", + "list": [ + "Arial", + "Arial Black", + "Sans-serif", + "Serif", + "Trebuchet MS", + "Impact", + "Georgia", + "Courier New", + "Comic Sans MS", + "Monospace", + "Symbol", + "Webdings" + ] + }, + "MIME": { + "descriptions": { + "image/bmp": "Bitmap Image", + "image/gif": "GIF Image", + "image/jpeg": "JPEG Image", + "image/jpg": "JPEG Image", + "image/png": "PNG Image", + "text/plain": "Text Document", + "text/css": "Cascade Stylesheet", + "text/html": "HTML Document", + "text/xml": "XML Document", + "application/javascript": "JavaScript Document", + "application/json": "JSON Document", + "application/x-python": "Python Document", + "application/x-lua": "Lua Document", + "application/x-shellscript": "Shell Script", + "text/x-c": "C Document", + "text/x-cplusplus": "C++ Document", + "application/pdf": "PDF Document", + "application/zip": "ZIP Archive", + "audio/aac": "AAC Audio", + "audio/mp4": "MP4 Audio", + "audio/mpeg": "MPEG Audio", + "audio/ogg": "OGG Audio", + "audio/wav": "WAV Audio", + "audio/webm": "WEBM Audio", + "video/mp4": "MP4 Video", + "video/ogg": "OGG Video", + "video/webm": "WEBM Video", + "video/x-ms-video": "AVI Video", + "video/x-flv": "FLV Video", + "video/x-matroska": "MKV Video", + "application/x-ipkg": "Itsy Package", + "osjs/document": "OS.js Document", + "osjs/draw": "OS.js Image", + "osjs/project": "OS.js Project" + }, + "mapping": { + ".bmp": "image/bmp", + ".css": "text/css", + ".gif": "image/gif", + ".htm": "text/html", + ".html": "text/html", + ".jpg": "image/jpeg", + ".jpeg": "image/jpeg", + ".js": "application/javascript", + ".json": "application/json", + ".lua": "application/x-lua", + ".sh": "application/x-shellscript", + ".c": "text/x-c", + ".cpp": "text/x-cplusplus", + ".cc": "text/x-cplusplus", + ".otf": "font/opentype", + ".ttf": "font/opentype", + ".png": "image/png", + ".zip": "application/zip", + ".aac": "audio/aac", + ".mp4": "video/mp4", + ".m4a": "audio/mp4", + ".mp1": "audio/mpeg", + ".mp2": "audio/mpeg", + ".mp3": "audio/mpeg", + ".mpg": "audio/mpeg", + ".mpeg": "audio/mpeg", + ".oga": "audio/ogg", + ".ogg": "audio/ogg", + ".wav": "audio/wav", + ".webm": "video/webm", + ".m4v": "video/mp4", + ".ogv": "video/ogg", + ".avi": "video/x-ms-video", + ".flv": "video/x-flv", + ".mkv": "video/x-matroska", + ".py": "application/x-python", + ".xml": "text/xml", + ".md": "text/plain", + ".txt": "text/plain", + ".log": "text/plain", + ".doc": "text/plain", + ".pdf": "application/pdf", + ".ipk": "application/x-ipkg", + ".odbeat": "osjs/dbeat", + ".oplist": "osjs/playlist", + ".odoc": "osjs/document", + ".odraw": "osjs/draw", + ".oproj": "osjs/project", + "default": "application/octet-stream" + } + }, + "WM": { + "exec": "CoreWM", + "args": { + "defaults": {} + } + }, + "VFS": { + "MaxUploadSize": 2097152, + "Home": "home:///", + "GoogleDrive": { + "Enabled": false + }, + "OneDrive": { + "Enabled": false + }, + "Dropbox": { + "Enabled": false + }, + "LocalStorage": { + "Enabled": false + }, + "Mountpoints": { + "applications": { + "enabled": true, + "transport": "Applications", + "icon": "places/user-bookmarks.png", + "description": "Applications" + }, + "desktop": { + "enabled": true, + "icon": "places/desktop.png", + "description": "Desktop", + "options": { + "alias": "home:///.desktop", + "path": "home:///.desktop" + } + }, + "osjs": { + "enabled": true, + "transport": "OSjs", + "icon": "devices/harddrive.png", + "description": "OS.js" + }, + "home": { + "enabled": true, + "icon": "places/folder_home.png", + "description": "Home" + }, + "shared": { + "enabled": true, + "description": "Shared", + "icon": "places/folder-publicshare.png" + } + } + }, + "Connection": { + "Type": "http", + "Handler": "demo", + "RootURI": "", + "APIURI": "API", + "FSURI": "FS", + "MetadataURI": "packages.js", + "ThemeURI": "themes/styles", + "SoundURI": "themes/sounds", + "IconURI": "themes/icons", + "FontURI": "themes/fonts", + "PackageURI": "packages", + "AppendVersion": "", + "PreloadParallel": 3, + "Dist": "dist" + }, + "BugReporting": { + "enabled": true, + "url": "//github.com/os-js/OS.js/issues/new?title=%TITLE%&body=%BODY%", + "options": { + "issue": true, + "title": "[Automated Bugreport] YOUR TITLE HERE", + "message": "This bugreport was generated by OS.js" + } + }, + "ShowQuitWarning": false, + "ReloadOnShutdown": false, + "PreloadOnBoot": [], + "Watermark": { + "enabled": true, + "lines": [ + "OS.js %VERSION%", + "Copyright © 2011-2016 Anders Evenrud" + ] + }, + "DropboxAPI": { + "ClientKey": "" + }, + "GoogleAPI": { + "ClientId": "" + }, + "WindowsLiveAPI": { + "ClientId": "" + }, + "Locale": "en_EN", + "LocaleOptions": { + "AutoDetect": true, + "RTL": [ + "az", + "fa", + "he", + "uz", + "zh", + "ar" + ] + } +}; + + var rootURI = window.location.pathname || '/'; + if ( window.location.protocol === 'file:' ) { + rootURI = ''; + } + + var replace = ['RootURI', 'APIURI', 'FSURI', 'MetadataURI', 'ThemeURI', 'SoundURI', 'IconURI', 'PackageURI']; + replace.forEach(function(val) { + if ( _cache[val] ) { + _cache[val] = _cache[val].replace(/^\//, rootURI); + } + }); + + var preloads = _cache.Preloads; + if ( preloads ) { + preloads.forEach(function(item, key) { + if ( item && item.src && item.src.match(/^\//) ) { + preloads[key].src = item.src.replace(/^\//, rootURI); + } + }); + } + + var dev =_cache.Connection.Dist === 'dist-dev'; + _cache.MOCHAMODE = dev && window.location.hash === '#mocha'; + _cache.DEVMODE = dev && window.location.hash === '#developer'; + } + + return Object.freeze(_cache); + }; + })(); +})(); diff --git a/build/htdocs/dist/splash.png b/build/htdocs/dist/splash.png new file mode 100644 index 0000000..606e72e Binary files /dev/null and b/build/htdocs/dist/splash.png differ diff --git a/build/htdocs/dist/themes/.gitignore b/build/htdocs/dist/themes/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/build/htdocs/dist/themes/fonts.css b/build/htdocs/dist/themes/fonts.css new file mode 100644 index 0000000..48c80da --- /dev/null +++ b/build/htdocs/dist/themes/fonts.css @@ -0,0 +1,198 @@ +@font-face { + font-family:Karla; + src: url('fonts/Karla/Regular.eot'); + src: url('fonts/Karla/Regular.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/Regular.woff') format('woff'), + url('fonts/Karla/Regular.ttf') format('truetype'), + url('fonts/Karla/Regular.svg#karla') format('svg'); + font-weight:normal; + font-style:normal; +} +@font-face { + font-family:Karla; + src: url('fonts/Karla/Bold.eot'); + src: url('fonts/Karla/Bold.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/Bold.woff') format('woff'), + url('fonts/Karla/Bold.ttf') format('truetype'), + url('fonts/Karla/Bold.svg#karla_bold') format('svg'); + font-weight:bold; +} +@font-face { + font-family:Karla; + src: url('fonts/Karla/Italic.eot'); + src: url('fonts/Karla/Italic.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/Italic.woff') format('woff'), + url('fonts/Karla/Italic.ttf') format('truetype'), + url('fonts/Karla/Italic.svg#karla_italic') format('svg'); + font-style:italic; +} +@font-face { + font-family:Karla; + src: url('fonts/Karla/Italic.eot'); + src: url('fonts/Karla/Italic.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/Italic.woff') format('woff'), + url('fonts/Karla/Italic.ttf') format('truetype'), + url('fonts/Karla/Italic.svg#karla_italic') format('svg'); + font-style:oblique; +} +@font-face { + font-family:Karla; + src: url('fonts/Karla/BoldItalic.eot'); + src: url('fonts/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/BoldItalic.woff') format('woff'), + url('fonts/Karla/BoldItalic.ttf') format('truetype'), + url('fonts/Karla/BoldItalic.svg#karla_bolditalic') format('svg'); + font-weight:bold; + font-style:italic; +} +@font-face { + font-family:Karla; + src: url('fonts/Karla/BoldItalic.eot'); + src: url('fonts/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'), + url('fonts/Karla/BoldItalic.woff') format('woff'), + url('fonts/Karla/BoldItalic.ttf') format('truetype'), + url('fonts/Karla/BoldItalic.svg#karla_bolditalic') format('svg'); + font-weight:bold; + font-style:oblique; +} + +@font-face { + font-family: 'Roboto'; + font-weight: 100; + font-style: normal; + src: url('fonts/Roboto/fonts/Roboto-100/Roboto-100.eot'); + src: url('fonts/Roboto/fonts/Roboto-100/Roboto-100.eot?#iefix') format('embedded-opentype'), + local('Roboto Thin'), + local('Roboto-100'), + url('fonts/Roboto/fonts/Roboto-100/Roboto-100.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-100/Roboto-100.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-100/Roboto-100.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-100/Roboto-100.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 300; + font-style: normal; + src: url('fonts/Roboto/fonts/Roboto-300/Roboto-300.eot'); + src: url('fonts/Roboto/fonts/Roboto-300/Roboto-300.eot?#iefix') format('embedded-opentype'), + local('Roboto Light'), + local('Roboto-300'), + url('fonts/Roboto/fonts/Roboto-300/Roboto-300.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-300/Roboto-300.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-300/Roboto-300.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-300/Roboto-300.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 400; + font-style: normal; + src: url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot'); + src: url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot?#iefix') format('embedded-opentype'), + local('Roboto'), + local('Roboto-regular'), + url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-regular/Roboto-regular.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 500; + font-style: normal; + src: url('fonts/Roboto/fonts/Roboto-500/Roboto-500.eot'); + src: url('fonts/Roboto/fonts/Roboto-500/Roboto-500.eot?#iefix') format('embedded-opentype'), + local('Roboto Medium'), + local('Roboto-500'), + url('fonts/Roboto/fonts/Roboto-500/Roboto-500.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-500/Roboto-500.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-500/Roboto-500.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-500/Roboto-500.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 700; + font-style: normal; + src: url('fonts/Roboto/fonts/Roboto-700/Roboto-700.eot'); + src: url('fonts/Roboto/fonts/Roboto-700/Roboto-700.eot?#iefix') format('embedded-opentype'), + local('Roboto Bold'), + local('Roboto-700'), + url('fonts/Roboto/fonts/Roboto-700/Roboto-700.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-700/Roboto-700.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-700/Roboto-700.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-700/Roboto-700.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 100; + font-style: italic; + src: url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot'); + src: url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Thin Italic'), + local('Roboto-100italic'), + url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 300; + font-style: italic; + src: url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot'); + src: url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Light Italic'), + local('Roboto-300italic'), + url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 400; + font-style: italic; + src: url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot'); + src: url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Italic'), + local('Roboto-italic'), + url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-italic/Roboto-italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 500; + font-style: italic; + src: url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot'); + src: url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Medium Italic'), + local('Roboto-500italic'), + url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 700; + font-style: italic; + src: url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot'); + src: url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Bold Italic'), + local('Roboto-700italic'), + url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff2') format('woff2'), + url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff') format('woff'), + url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.ttf') format('truetype'), + url('fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.svg#Roboto') format('svg'); +} + diff --git a/build/htdocs/dist/themes/fonts/Karla/Bold.eot b/build/htdocs/dist/themes/fonts/Karla/Bold.eot new file mode 100644 index 0000000..89dbc36 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Bold.eot differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Bold.svg b/build/htdocs/dist/themes/fonts/Karla/Bold.svg new file mode 100644 index 0000000..688e602 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/Bold.svg @@ -0,0 +1,599 @@ + + + + +Created by FontForge 20120731 at Tue Jul 8 22:17:55 2014 + By World Wide Web Server +Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Karla/Bold.ttf b/build/htdocs/dist/themes/fonts/Karla/Bold.ttf new file mode 100644 index 0000000..9efe736 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Bold.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Bold.woff b/build/htdocs/dist/themes/fonts/Karla/Bold.woff new file mode 100644 index 0000000..147e706 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Bold.woff differ diff --git a/build/htdocs/dist/themes/fonts/Karla/BoldItalic.eot b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.eot new file mode 100644 index 0000000..abc96b6 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Karla/BoldItalic.svg b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.svg new file mode 100644 index 0000000..30ea557 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.svg @@ -0,0 +1,605 @@ + + + + +Created by FontForge 20120731 at Tue Jul 8 22:17:40 2014 + By World Wide Web Server +Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Karla/BoldItalic.ttf b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.ttf new file mode 100644 index 0000000..8b4684d Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Karla/BoldItalic.woff b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.woff new file mode 100644 index 0000000..1e959f0 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/BoldItalic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Italic.eot b/build/htdocs/dist/themes/fonts/Karla/Italic.eot new file mode 100644 index 0000000..0fed915 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Italic.svg b/build/htdocs/dist/themes/fonts/Karla/Italic.svg new file mode 100644 index 0000000..c61bb61 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/Italic.svg @@ -0,0 +1,605 @@ + + + + +Created by FontForge 20120731 at Tue Jul 8 22:17:25 2014 + By World Wide Web Server +Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Karla/Italic.ttf b/build/htdocs/dist/themes/fonts/Karla/Italic.ttf new file mode 100644 index 0000000..0cf5e37 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Italic.woff b/build/htdocs/dist/themes/fonts/Karla/Italic.woff new file mode 100644 index 0000000..df51619 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Karla/LICENSE.txt b/build/htdocs/dist/themes/fonts/Karla/LICENSE.txt new file mode 100644 index 0000000..78ed4ef --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/LICENSE.txt @@ -0,0 +1,43 @@ +Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil". + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- + +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide development of collaborative font projects, to support the font creation efforts of academic and linguistic communities, and to provide a free and open framework in which fonts may be shared and improved in partnership with others. + +The OFL allows the licensed fonts to be used, studied, modified and redistributed freely as long as they are not sold by themselves. The fonts, including any derivative works, can be bundled, embedded, redistributed and/or sold with any software provided that any reserved names are not used by derivative works. The fonts and derivatives, however, cannot be released under any other type of license. The requirement for fonts to remain under this license does not apply to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright Holder(s) under this license and clearly marked as such. This may include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the copyright statement(s). + +"Original Version" refers to the collection of Font Software components as distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, or substituting -- in part or in whole -- any of the components of the Original Version, by changing formats or by porting the Font Software to a new environment. + +"Author" refers to any designer, engineer, programmer, technical writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining a copy of the Font Software, to use, study, copy, merge, embed, modify, redistribute, and sell modified and unmodified copies of the Font Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, redistributed and/or sold with any software, provided that each copy contains the above copyright notice and this license. These can be included either as stand-alone text files, human-readable headers or in the appropriate machine-readable metadata fields within text or binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font Name(s) unless explicit written permission is granted by the corresponding Copyright Holder. This restriction only applies to the primary font name as presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font Software shall not be used to promote, endorse or advertise any Modified Version, except to acknowledge the contribution(s) of the Copyright Holder(s) and the Author(s) or with their explicit written permission. + +5) The Font Software, modified or unmodified, in part or in whole, must be distributed entirely under this license, and must not be distributed under any other license. The requirement for fonts to remain under this license does not apply to any document created using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM OTHER DEALINGS IN THE FONT SOFTWARE. \ No newline at end of file diff --git a/build/htdocs/dist/themes/fonts/Karla/Regular.eot b/build/htdocs/dist/themes/fonts/Karla/Regular.eot new file mode 100644 index 0000000..0ba8a5e Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Regular.eot differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Regular.svg b/build/htdocs/dist/themes/fonts/Karla/Regular.svg new file mode 100644 index 0000000..6cd15c1 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/Regular.svg @@ -0,0 +1,594 @@ + + + + +Created by FontForge 20120731 at Tue Jul 8 22:17:10 2014 + By World Wide Web Server +Copyright (c) 2011, Jonathan Pinhorn (pinhorn.typedesign@gmail.com), with Reserved Font Names "Karla" and "Karla Tamil". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Karla/Regular.ttf b/build/htdocs/dist/themes/fonts/Karla/Regular.ttf new file mode 100644 index 0000000..81b3de6 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Regular.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Karla/Regular.woff b/build/htdocs/dist/themes/fonts/Karla/Regular.woff new file mode 100644 index 0000000..97766c7 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Karla/Regular.woff differ diff --git a/build/htdocs/dist/themes/fonts/Karla/style.css b/build/htdocs/dist/themes/fonts/Karla/style.css new file mode 100644 index 0000000..d80af6a --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Karla/style.css @@ -0,0 +1,57 @@ +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/Regular.eot'); + src: url('%FONTURI%/Karla/Regular.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/Regular.woff') format('woff'), + url('%FONTURI%/Karla/Regular.ttf') format('truetype'), + url('%FONTURI%/Karla/Regular.svg#karla') format('svg'); + font-weight:normal; + font-style:normal; +} +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/Bold.eot'); + src: url('%FONTURI%/Karla/Bold.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/Bold.woff') format('woff'), + url('%FONTURI%/Karla/Bold.ttf') format('truetype'), + url('%FONTURI%/Karla/Bold.svg#karla_bold') format('svg'); + font-weight:bold; +} +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/Italic.eot'); + src: url('%FONTURI%/Karla/Italic.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/Italic.woff') format('woff'), + url('%FONTURI%/Karla/Italic.ttf') format('truetype'), + url('%FONTURI%/Karla/Italic.svg#karla_italic') format('svg'); + font-style:italic; +} +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/Italic.eot'); + src: url('%FONTURI%/Karla/Italic.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/Italic.woff') format('woff'), + url('%FONTURI%/Karla/Italic.ttf') format('truetype'), + url('%FONTURI%/Karla/Italic.svg#karla_italic') format('svg'); + font-style:oblique; +} +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/BoldItalic.eot'); + src: url('%FONTURI%/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/BoldItalic.woff') format('woff'), + url('%FONTURI%/Karla/BoldItalic.ttf') format('truetype'), + url('%FONTURI%/Karla/BoldItalic.svg#karla_bolditalic') format('svg'); + font-weight:bold; + font-style:italic; +} +@font-face { + font-family:Karla; + src: url('%FONTURI%/Karla/BoldItalic.eot'); + src: url('%FONTURI%/Karla/BoldItalic.eot?#iefix') format('embedded-opentype'), + url('%FONTURI%/Karla/BoldItalic.woff') format('woff'), + url('%FONTURI%/Karla/BoldItalic.ttf') format('truetype'), + url('%FONTURI%/Karla/BoldItalic.svg#karla_bolditalic') format('svg'); + font-weight:bold; + font-style:oblique; +} diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.eot new file mode 100644 index 0000000..5550120 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.svg new file mode 100644 index 0000000..d1e02c3 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.svg @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.ttf new file mode 100644 index 0000000..89131db Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff new file mode 100644 index 0000000..e392f0d Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff2 new file mode 100644 index 0000000..c3502b8 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100/Roboto-100.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot new file mode 100644 index 0000000..38abbf7 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.svg new file mode 100644 index 0000000..8bb177d --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.svg @@ -0,0 +1,332 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.ttf new file mode 100644 index 0000000..9bbf86f Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff new file mode 100644 index 0000000..8002490 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff2 new file mode 100644 index 0000000..15a6edc Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-100italic/Roboto-100italic.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.eot new file mode 100644 index 0000000..826acfd Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.svg new file mode 100644 index 0000000..52b2832 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.svg @@ -0,0 +1,314 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.ttf new file mode 100644 index 0000000..66bc5ab Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff new file mode 100644 index 0000000..1bff3ec Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff2 new file mode 100644 index 0000000..4411cbc Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300/Roboto-300.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot new file mode 100644 index 0000000..c47c43e Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.svg new file mode 100644 index 0000000..ea86b20 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.ttf new file mode 100644 index 0000000..ef1d13c Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff new file mode 100644 index 0000000..fc4a8b5 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff2 new file mode 100644 index 0000000..05fdb0a Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-300italic/Roboto-300italic.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.eot new file mode 100644 index 0000000..8c06caa Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.svg new file mode 100644 index 0000000..2b98916 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.svg @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.ttf new file mode 100644 index 0000000..8d6fa92 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff new file mode 100644 index 0000000..d3c82e1 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff2 new file mode 100644 index 0000000..6be92c7 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500/Roboto-500.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot new file mode 100644 index 0000000..2b253af Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.svg new file mode 100644 index 0000000..43c3be6 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.svg @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.ttf new file mode 100644 index 0000000..28d03db Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff new file mode 100644 index 0000000..072ca9b Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff2 new file mode 100644 index 0000000..382866a Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-500italic/Roboto-500italic.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.eot new file mode 100644 index 0000000..f89cad7 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.svg new file mode 100644 index 0000000..fc8d42f --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.svg @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.ttf new file mode 100644 index 0000000..19090af Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff new file mode 100644 index 0000000..3143de2 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff2 new file mode 100644 index 0000000..3b2dd4e Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700/Roboto-700.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot new file mode 100644 index 0000000..b8bbdf2 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.svg new file mode 100644 index 0000000..c71c29e --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.svg @@ -0,0 +1,325 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.ttf new file mode 100644 index 0000000..a20e388 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff new file mode 100644 index 0000000..7a0ae05 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff2 new file mode 100644 index 0000000..91d2aa6 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-700italic/Roboto-700italic.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot new file mode 100644 index 0000000..f2d020a Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.svg new file mode 100644 index 0000000..738b829 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.svg @@ -0,0 +1,323 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.ttf new file mode 100644 index 0000000..b0dd4a1 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff new file mode 100644 index 0000000..dcfeb00 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff2 new file mode 100644 index 0000000..1bb77f9 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-italic/Roboto-italic.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/LICENSE.txt b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/LICENSE.txt new file mode 100644 index 0000000..d645695 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/LICENSE.txt @@ -0,0 +1,202 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot new file mode 100644 index 0000000..d26bc8f Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.eot differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.svg b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.svg new file mode 100644 index 0000000..ed55c10 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.svg @@ -0,0 +1,308 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.ttf b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.ttf new file mode 100644 index 0000000..7b25f3c Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.ttf differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff new file mode 100644 index 0000000..5e353cf Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff2 b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff2 new file mode 100644 index 0000000..d1035f9 Binary files /dev/null and b/build/htdocs/dist/themes/fonts/Roboto/fonts/Roboto-regular/Roboto-regular.woff2 differ diff --git a/build/htdocs/dist/themes/fonts/Roboto/style.css b/build/htdocs/dist/themes/fonts/Roboto/style.css new file mode 100644 index 0000000..6c58e08 --- /dev/null +++ b/build/htdocs/dist/themes/fonts/Roboto/style.css @@ -0,0 +1,140 @@ +@font-face { + font-family: 'Roboto'; + font-weight: 100; + font-style: normal; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.eot?#iefix') format('embedded-opentype'), + local('Roboto Thin'), + local('Roboto-100'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100/Roboto-100.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 300; + font-style: normal; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.eot?#iefix') format('embedded-opentype'), + local('Roboto Light'), + local('Roboto-300'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300/Roboto-300.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 400; + font-style: normal; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.eot?#iefix') format('embedded-opentype'), + local('Roboto'), + local('Roboto-regular'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-regular/Roboto-regular.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 500; + font-style: normal; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.eot?#iefix') format('embedded-opentype'), + local('Roboto Medium'), + local('Roboto-500'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500/Roboto-500.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 700; + font-style: normal; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.eot?#iefix') format('embedded-opentype'), + local('Roboto Bold'), + local('Roboto-700'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700/Roboto-700.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 100; + font-style: italic; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Thin Italic'), + local('Roboto-100italic'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-100italic/Roboto-100italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 300; + font-style: italic; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Light Italic'), + local('Roboto-300italic'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-300italic/Roboto-300italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 400; + font-style: italic; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Italic'), + local('Roboto-italic'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-italic/Roboto-italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 500; + font-style: italic; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Medium Italic'), + local('Roboto-500italic'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-500italic/Roboto-500italic.svg#Roboto') format('svg'); +} + +@font-face { + font-family: 'Roboto'; + font-weight: 700; + font-style: italic; + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.eot'); + src: url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.eot?#iefix') format('embedded-opentype'), + local('Roboto Bold Italic'), + local('Roboto-700italic'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.woff2') format('woff2'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.woff') format('woff'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.ttf') format('truetype'), + url('%FONTURI%/Roboto/%FONTURI%/Roboto-700italic/Roboto-700italic.svg#Roboto') format('svg'); +} + diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/add.png b/build/htdocs/dist/themes/icons/default/16x16/actions/add.png new file mode 100644 index 0000000..3f1347e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/add.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/address-book-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/address-book-new.png new file mode 100644 index 0000000..8023b06 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/address-book-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/application-exit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/application-exit.png new file mode 100644 index 0000000..1c6ddf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/application-exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/appointment-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/appointment-new.png new file mode 100644 index 0000000..d1cfd45 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/appointment-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/appointment.png b/build/htdocs/dist/themes/icons/default/16x16/actions/appointment.png new file mode 100644 index 0000000..d1cfd45 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/appointment.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/back.png b/build/htdocs/dist/themes/icons/default/16x16/actions/back.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/back.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark-new.png new file mode 100644 index 0000000..4dc0327 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark_add.png b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark_add.png new file mode 100644 index 0000000..4dc0327 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmark_add.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/bookmarks_list_add.png b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmarks_list_add.png new file mode 100644 index 0000000..4dc0327 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/bookmarks_list_add.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/bottom.png b/build/htdocs/dist/themes/icons/default/16x16/actions/bottom.png new file mode 100644 index 0000000..073ee66 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/call-start.png b/build/htdocs/dist/themes/icons/default/16x16/actions/call-start.png new file mode 100644 index 0000000..fbc983c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/call-start.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/call-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/call-stop.png new file mode 100644 index 0000000..428eb2b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/call-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/centrejust.png b/build/htdocs/dist/themes/icons/default/16x16/actions/centrejust.png new file mode 100644 index 0000000..6fc98d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/centrejust.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/contact-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/contact-new.png new file mode 100644 index 0000000..ee82c53 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/contact-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-new.png new file mode 100644 index 0000000..a995737 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-open-recent.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-open-recent.png new file mode 100644 index 0000000..aa5bb54 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-open-recent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-open.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-open.png new file mode 100644 index 0000000..43c9e63 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-page-setup.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-page-setup.png new file mode 100644 index 0000000..8e3ea0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-page-setup.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-print-preview.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-print-preview.png new file mode 100644 index 0000000..2346f92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-print.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-print.png new file mode 100644 index 0000000..b6e439c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-print.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-properties.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-properties.png new file mode 100644 index 0000000..9229b3b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert-rtl.png new file mode 100644 index 0000000..302df4d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert.png new file mode 100644 index 0000000..27e2eda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-revert.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-save-as.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-save-as.png new file mode 100644 index 0000000..d528533 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-save.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-save.png new file mode 100644 index 0000000..8fee7bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-save.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/document-send.png b/build/htdocs/dist/themes/icons/default/16x16/actions/document-send.png new file mode 100644 index 0000000..4a065e7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/document-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/down.png b/build/htdocs/dist/themes/icons/default/16x16/actions/down.png new file mode 100644 index 0000000..d228f04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/down.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-clear.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-clear.png new file mode 100644 index 0000000..3be482d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-copy.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-copy.png new file mode 100644 index 0000000..a454881 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-cut.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-cut.png new file mode 100644 index 0000000..f579313 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-delete.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-delete.png new file mode 100644 index 0000000..ec35ed2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find-replace.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find-replace.png new file mode 100644 index 0000000..df956ab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find.png new file mode 100644 index 0000000..05c6821 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-find.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-paste.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-paste.png new file mode 100644 index 0000000..4458622 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo-rtl.png new file mode 100644 index 0000000..48f0602 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo.png new file mode 100644 index 0000000..3be0d9e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-select-all.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-select-all.png new file mode 100644 index 0000000..e7d21a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo-rtl.png new file mode 100644 index 0000000..f55b2ff Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo.png new file mode 100644 index 0000000..750e3eb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/edit-undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/editclear.png b/build/htdocs/dist/themes/icons/default/16x16/actions/editclear.png new file mode 100644 index 0000000..3be482d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/editclear.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/editcopy.png b/build/htdocs/dist/themes/icons/default/16x16/actions/editcopy.png new file mode 100644 index 0000000..a454881 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/editcopy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/editcut.png b/build/htdocs/dist/themes/icons/default/16x16/actions/editcut.png new file mode 100644 index 0000000..f579313 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/editcut.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/editdelete.png b/build/htdocs/dist/themes/icons/default/16x16/actions/editdelete.png new file mode 100644 index 0000000..ec35ed2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/editdelete.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/editpaste.png b/build/htdocs/dist/themes/icons/default/16x16/actions/editpaste.png new file mode 100644 index 0000000..4458622 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/editpaste.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/exit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/exit.png new file mode 100644 index 0000000..1c6ddf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/filefind.png b/build/htdocs/dist/themes/icons/default/16x16/actions/filefind.png new file mode 100644 index 0000000..05c6821 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/filefind.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/filenew.png b/build/htdocs/dist/themes/icons/default/16x16/actions/filenew.png new file mode 100644 index 0000000..a995737 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/filenew.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/fileopen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/fileopen.png new file mode 100644 index 0000000..43c9e63 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/fileopen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/fileprint.png b/build/htdocs/dist/themes/icons/default/16x16/actions/fileprint.png new file mode 100644 index 0000000..b6e439c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/fileprint.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/filequickprint.png b/build/htdocs/dist/themes/icons/default/16x16/actions/filequickprint.png new file mode 100644 index 0000000..2346f92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/filequickprint.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/filesave.png b/build/htdocs/dist/themes/icons/default/16x16/actions/filesave.png new file mode 100644 index 0000000..8fee7bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/filesave.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/filesaveas.png b/build/htdocs/dist/themes/icons/default/16x16/actions/filesaveas.png new file mode 100644 index 0000000..d528533 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/filesaveas.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/find.png b/build/htdocs/dist/themes/icons/default/16x16/actions/find.png new file mode 100644 index 0000000..05c6821 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/find.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/finish.png b/build/htdocs/dist/themes/icons/default/16x16/actions/finish.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/finish.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/folder-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/folder-new.png new file mode 100644 index 0000000..69d60ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/folder-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/folder_new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/folder_new.png new file mode 100644 index 0000000..69d60ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/folder_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less-rtl.png new file mode 100644 index 0000000..a6621ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less.png new file mode 100644 index 0000000..ed971bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-less.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more-rtl.png new file mode 100644 index 0000000..37740f7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more.png new file mode 100644 index 0000000..81b8859 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-indent-more.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-center.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-center.png new file mode 100644 index 0000000..6fc98d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-fill.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-fill.png new file mode 100644 index 0000000..a210598 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-fill.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-left.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-left.png new file mode 100644 index 0000000..bedcff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-right.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-right.png new file mode 100644 index 0000000..88f4217 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-justify-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-bold.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-bold.png new file mode 100644 index 0000000..fdf8a95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-ltr.png new file mode 100644 index 0000000..679c2ec Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-rtl.png new file mode 100644 index 0000000..e0982ff Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-direction-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-italic.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-italic.png new file mode 100644 index 0000000..2a217b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-strikethrough.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-strikethrough.png new file mode 100644 index 0000000..580893d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-underline.png b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-underline.png new file mode 100644 index 0000000..bd81df4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/format-text-underline.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/forward.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-lockscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-lockscreen.png new file mode 100644 index 0000000..05e3bd8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-lockscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-logout.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-logout.png new file mode 100644 index 0000000..ea40957 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-logout.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-run.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-run.png new file mode 100644 index 0000000..ad6d572 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-run.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-searchtool.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-searchtool.png new file mode 100644 index 0000000..a20f45c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-searchtool.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-shutdown.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-shutdown.png new file mode 100644 index 0000000..3c628c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-shutdown.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-fwd.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-fwd.png new file mode 100644 index 0000000..6c7823f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-new.png new file mode 100644 index 0000000..a62d668 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-rpl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-rpl.png new file mode 100644 index 0000000..dd7acad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-rpl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-snd.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-snd.png new file mode 100644 index 0000000..c640c2b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-mail-snd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-indent.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-indent.png new file mode 100644 index 0000000..81b8859 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-indent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-unindent.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-unindent.png new file mode 100644 index 0000000..ed971bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gnome-stock-text-unindent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-bottom.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-bottom.png new file mode 100644 index 0000000..073ee66 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-down.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-down.png new file mode 100644 index 0000000..d228f04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-down.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-first-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-first-rtl.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-first-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-first.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-first.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-first.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-home.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-home.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-jump.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-jump.png new file mode 100644 index 0000000..b2a5c21 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-jump.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-last-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-last-rtl.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-last-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-last.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-last.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-last.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-next-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-next-rtl.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-next-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-next.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-next.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-next.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous-rtl.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-previous.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-top.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-top.png new file mode 100644 index 0000000..78c254a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-top.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/go-up.png b/build/htdocs/dist/themes/icons/default/16x16/actions/go-up.png new file mode 100644 index 0000000..c7189e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/go-up.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gohome.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gohome.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gohome.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-about.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-about.png new file mode 100644 index 0000000..3d9d4da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-about.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-add.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-add.png new file mode 100644 index 0000000..3f1347e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-add.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-bold.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-bold.png new file mode 100644 index 0000000..fdf8a95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cancel.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cancel.png new file mode 100644 index 0000000..67815fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cancel.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-clear.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-clear.png new file mode 100644 index 0000000..3be482d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-close.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-close.png new file mode 100644 index 0000000..a033c4e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-close.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-copy.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-copy.png new file mode 100644 index 0000000..a454881 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cut.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cut.png new file mode 100644 index 0000000..f579313 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-delete.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-delete.png new file mode 100644 index 0000000..ec35ed2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-execute.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-execute.png new file mode 100644 index 0000000..ad6d572 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-execute.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find-and-replace.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find-and-replace.png new file mode 100644 index 0000000..df956ab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find-and-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find.png new file mode 100644 index 0000000..05c6821 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-find.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-fullscreen.png new file mode 100644 index 0000000..975fdfe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-ltr.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-rtl.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-back-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-down.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-down.png new file mode 100644 index 0000000..d228f04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-down.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-ltr.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-rtl.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-up.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-up.png new file mode 100644 index 0000000..c7189e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-go-up.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-bottom.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-bottom.png new file mode 100644 index 0000000..073ee66 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-ltr.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-rtl.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-first-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-ltr.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-rtl.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-last-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-top.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-top.png new file mode 100644 index 0000000..78c254a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-goto-top.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-help.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-help.png new file mode 100644 index 0000000..b2309d2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-home.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-home.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-ltr.png new file mode 100644 index 0000000..81b8859 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-rtl.png new file mode 100644 index 0000000..ed971bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-indent-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-italic.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-italic.png new file mode 100644 index 0000000..2a217b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-ltr.png new file mode 100644 index 0000000..b2a5c21 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-rtl.png new file mode 100644 index 0000000..b2a5c21 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-jump-to-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-center.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-center.png new file mode 100644 index 0000000..6fc98d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-fill.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-fill.png new file mode 100644 index 0000000..a210598 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-fill.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-left.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-left.png new file mode 100644 index 0000000..bedcff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-right.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-right.png new file mode 100644 index 0000000..88f4217 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-justify-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-leave-fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-leave-fullscreen.png new file mode 100644 index 0000000..ca14e83 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-leave-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-ltr.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-rtl.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-ltr.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-rtl.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-next-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-pause.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-pause.png new file mode 100644 index 0000000..c384034 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-play-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-play-ltr.png new file mode 100644 index 0000000..7d39b2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-play-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-ltr.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-rtl.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-previous-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-record.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-record.png new file mode 100644 index 0000000..8d893e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-record.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-ltr.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-rtl.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-rewind-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-stop.png new file mode 100644 index 0000000..740bed0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-media-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-new.png new file mode 100644 index 0000000..a995737 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-open.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-open.png new file mode 100644 index 0000000..43c9e63 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-paste.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-paste.png new file mode 100644 index 0000000..4458622 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print-preview.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print-preview.png new file mode 100644 index 0000000..2346f92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print.png new file mode 100644 index 0000000..b6e439c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-print.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-properties.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-properties.png new file mode 100644 index 0000000..9229b3b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-quit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-quit.png new file mode 100644 index 0000000..1c6ddf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-quit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-redo-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-redo-ltr.png new file mode 100644 index 0000000..3be0d9e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-redo-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-refresh.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-refresh.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-remove.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-remove.png new file mode 100644 index 0000000..28db302 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-ltr.png new file mode 100644 index 0000000..27e2eda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-rtl.png new file mode 100644 index 0000000..27e2eda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-revert-to-saved-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save-as.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save-as.png new file mode 100644 index 0000000..d528533 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save.png new file mode 100644 index 0000000..8fee7bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-save.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-select-all.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-select-all.png new file mode 100644 index 0000000..e7d21a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-ascending.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-ascending.png new file mode 100644 index 0000000..5ee08a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-ascending.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-descending.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-descending.png new file mode 100644 index 0000000..4a64e3c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-sort-descending.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-spell-check.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-spell-check.png new file mode 100644 index 0000000..39643a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-spell-check.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-stop.png new file mode 100644 index 0000000..67815fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-strikethrough.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-strikethrough.png new file mode 100644 index 0000000..580893d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-underline.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-underline.png new file mode 100644 index 0000000..bd81df4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-underline.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-undo-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-undo-ltr.png new file mode 100644 index 0000000..750e3eb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-undo-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-ltr.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-ltr.png new file mode 100644 index 0000000..ed971bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-rtl.png new file mode 100644 index 0000000..81b8859 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-unindent-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-100.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-100.png new file mode 100644 index 0000000..b089a09 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-100.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-fit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-fit.png new file mode 100644 index 0000000..2cea443 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-fit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-in.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-in.png new file mode 100644 index 0000000..c5b3936 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-out.png b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-out.png new file mode 100644 index 0000000..01399fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/gtk-zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/help-about.png b/build/htdocs/dist/themes/icons/default/16x16/actions/help-about.png new file mode 100644 index 0000000..3d9d4da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/help-about.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/help-contents.png b/build/htdocs/dist/themes/icons/default/16x16/actions/help-contents.png new file mode 100644 index 0000000..b2309d2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/help-contents.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/help-faq.png b/build/htdocs/dist/themes/icons/default/16x16/actions/help-faq.png new file mode 100644 index 0000000..ade6da9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/help-faq.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/help.png b/build/htdocs/dist/themes/icons/default/16x16/actions/help.png new file mode 100644 index 0000000..b2309d2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/help.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/insert-image.png b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-image.png new file mode 100644 index 0000000..6d7084b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/insert-link.png b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-link.png new file mode 100644 index 0000000..ba68f72 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-link.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/insert-object.png b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-object.png new file mode 100644 index 0000000..a51d5e0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-object.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/insert-text.png b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-text.png new file mode 100644 index 0000000..fdde4ec Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/insert-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/kfind.png b/build/htdocs/dist/themes/icons/default/16x16/actions/kfind.png new file mode 100644 index 0000000..a20f45c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/kfind.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/kfm_home.png b/build/htdocs/dist/themes/icons/default/16x16/actions/kfm_home.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/kfm_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/leftjust.png b/build/htdocs/dist/themes/icons/default/16x16/actions/leftjust.png new file mode 100644 index 0000000..bedcff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/leftjust.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/list-add.png b/build/htdocs/dist/themes/icons/default/16x16/actions/list-add.png new file mode 100644 index 0000000..3f1347e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/list-add.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/list-remove.png b/build/htdocs/dist/themes/icons/default/16x16/actions/list-remove.png new file mode 100644 index 0000000..28db302 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/list-remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/lock.png b/build/htdocs/dist/themes/icons/default/16x16/actions/lock.png new file mode 100644 index 0000000..05e3bd8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-forward.png new file mode 100644 index 0000000..6c7823f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-important.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-important.png new file mode 100644 index 0000000..9b5f128 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-important.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-junk.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-junk.png new file mode 100644 index 0000000..6e94c4d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-junk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-notjunk.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-notjunk.png new file mode 100644 index 0000000..5c78c03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-notjunk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-read.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-read.png new file mode 100644 index 0000000..dc624bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-read.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-unread.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-unread.png new file mode 100644 index 0000000..c4ebbcf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-mark-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-message-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-message-new.png new file mode 100644 index 0000000..a62d668 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-message-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-all.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-all.png new file mode 100644 index 0000000..5ddc59a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-sender.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-sender.png new file mode 100644 index 0000000..dd7acad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-reply-sender.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send-receive.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send-receive.png new file mode 100644 index 0000000..a3af872 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send.png new file mode 100644 index 0000000..c640c2b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_forward.png new file mode 100644 index 0000000..6c7823f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_new.png new file mode 100644 index 0000000..a62d668 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_reply.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_reply.png new file mode 100644 index 0000000..dd7acad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_reply.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_replyall.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_replyall.png new file mode 100644 index 0000000..5ddc59a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_replyall.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_send.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_send.png new file mode 100644 index 0000000..c640c2b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_send.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/mail_spam.png b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_spam.png new file mode 100644 index 0000000..6e94c4d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/mail_spam.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-eject.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-eject.png new file mode 100644 index 0000000..8e547d9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-eject.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-pause.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-pause.png new file mode 100644 index 0000000..c384034 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start-rtl.png new file mode 100644 index 0000000..dc463af Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start.png new file mode 100644 index 0000000..7d39b2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-start.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-stop.png new file mode 100644 index 0000000..740bed0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-playback-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-record.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-record.png new file mode 100644 index 0000000..8d893e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-record.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward-rtl.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-backward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward-rtl.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-seek-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward-rtl.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-backward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward-rtl.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward-rtl.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/media-skip-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/next.png b/build/htdocs/dist/themes/icons/default/16x16/actions/next.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/next.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-horizontal.png b/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-horizontal.png new file mode 100644 index 0000000..097a593 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-horizontal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-vertical.png b/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-vertical.png new file mode 100644 index 0000000..9569613 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/object-flip-vertical.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-left.png b/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-left.png new file mode 100644 index 0000000..2ff5570 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-right.png b/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-right.png new file mode 100644 index 0000000..d51aaa5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/object-rotate-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_eject.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_eject.png new file mode 100644 index 0000000..8e547d9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_eject.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_end.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_end.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_end.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_fwd.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_fwd.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_pause.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_pause.png new file mode 100644 index 0000000..c384034 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_play.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_play.png new file mode 100644 index 0000000..7d39b2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_play.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_record.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_record.png new file mode 100644 index 0000000..8d893e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_record.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_rew.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_rew.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_rew.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_start.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_start.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_start.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/player_stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/player_stop.png new file mode 100644 index 0000000..740bed0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/player_stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/previous.png b/build/htdocs/dist/themes/icons/default/16x16/actions/previous.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/previous.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/process-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/process-stop.png new file mode 100644 index 0000000..67815fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/process-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/redhat-home.png b/build/htdocs/dist/themes/icons/default/16x16/actions/redhat-home.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/redhat-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/redo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/redo.png new file mode 100644 index 0000000..3be0d9e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/reload.png b/build/htdocs/dist/themes/icons/default/16x16/actions/reload.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/reload.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/reload3.png b/build/htdocs/dist/themes/icons/default/16x16/actions/reload3.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/reload3.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/reload_all_tabs.png b/build/htdocs/dist/themes/icons/default/16x16/actions/reload_all_tabs.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/reload_all_tabs.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/reload_page.png b/build/htdocs/dist/themes/icons/default/16x16/actions/reload_page.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/reload_page.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/remove.png b/build/htdocs/dist/themes/icons/default/16x16/actions/remove.png new file mode 100644 index 0000000..28db302 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/revert.png b/build/htdocs/dist/themes/icons/default/16x16/actions/revert.png new file mode 100644 index 0000000..27e2eda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/revert.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/rightjust.png b/build/htdocs/dist/themes/icons/default/16x16/actions/rightjust.png new file mode 100644 index 0000000..88f4217 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/rightjust.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/search.png b/build/htdocs/dist/themes/icons/default/16x16/actions/search.png new file mode 100644 index 0000000..a20f45c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/search.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/start.png b/build/htdocs/dist/themes/icons/default/16x16/actions/start.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/start.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_about.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_about.png new file mode 100644 index 0000000..3d9d4da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_about.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_add-bookmark.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_add-bookmark.png new file mode 100644 index 0000000..4dc0327 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_add-bookmark.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_bottom.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_bottom.png new file mode 100644 index 0000000..073ee66 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_close.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_close.png new file mode 100644 index 0000000..a033c4e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_close.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_copy.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_copy.png new file mode 100644 index 0000000..a454881 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_cut.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_cut.png new file mode 100644 index 0000000..f579313 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_delete.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_delete.png new file mode 100644 index 0000000..ec35ed2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_down.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_down.png new file mode 100644 index 0000000..d228f04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_down.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_file-properites.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_file-properites.png new file mode 100644 index 0000000..9229b3b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_file-properites.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_first.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_first.png new file mode 100644 index 0000000..718cd36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_first.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_fullscreen.png new file mode 100644 index 0000000..975fdfe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help-add-bookmark.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help-add-bookmark.png new file mode 100644 index 0000000..4dc0327 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help-add-bookmark.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help.png new file mode 100644 index 0000000..b2309d2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_help.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_home.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_home.png new file mode 100644 index 0000000..91af0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_last.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_last.png new file mode 100644 index 0000000..578e66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_last.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_leave-fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_leave-fullscreen.png new file mode 100644 index 0000000..ca14e83 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_leave-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_left.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_left.png new file mode 100644 index 0000000..12fed7f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_left.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-compose.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-compose.png new file mode 100644 index 0000000..a62d668 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-compose.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-forward.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-forward.png new file mode 100644 index 0000000..6c7823f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply-to-all.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply-to-all.png new file mode 100644 index 0000000..5ddc59a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply-to-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply.png new file mode 100644 index 0000000..dd7acad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-reply.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send-receive.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send-receive.png new file mode 100644 index 0000000..a3af872 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send.png new file mode 100644 index 0000000..c640c2b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_mail-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-fwd.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-fwd.png new file mode 100644 index 0000000..0c93e1b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-next.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-next.png new file mode 100644 index 0000000..b55cfba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-next.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-pause.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-pause.png new file mode 100644 index 0000000..c384034 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-play.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-play.png new file mode 100644 index 0000000..7d39b2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-play.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-prev.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-prev.png new file mode 100644 index 0000000..c01a665 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-prev.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rec.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rec.png new file mode 100644 index 0000000..8d893e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rec.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rew.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rew.png new file mode 100644 index 0000000..a67dbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-rew.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-stop.png new file mode 100644 index 0000000..740bed0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_media-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-address-book.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-address-book.png new file mode 100644 index 0000000..8023b06 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-address-book.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-appointment.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-appointment.png new file mode 100644 index 0000000..d1cfd45 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-appointment.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-bcard.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-bcard.png new file mode 100644 index 0000000..ee82c53 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-bcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-dir.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-dir.png new file mode 100644 index 0000000..69d60ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-dir.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-tab.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-tab.png new file mode 100644 index 0000000..a73fe6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-tab.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-text.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-text.png new file mode 100644 index 0000000..a995737 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-window.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-window.png new file mode 100644 index 0000000..8cd21a1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_new-window.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_paste.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_paste.png new file mode 100644 index 0000000..4458622 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-preview.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-preview.png new file mode 100644 index 0000000..2346f92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-setup.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-setup.png new file mode 100644 index 0000000..8e3ea0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print-setup.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print.png new file mode 100644 index 0000000..b6e439c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_print.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_properties.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_properties.png new file mode 100644 index 0000000..9229b3b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_redo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_redo.png new file mode 100644 index 0000000..3be0d9e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_refresh.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_refresh.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_right.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_right.png new file mode 100644 index 0000000..1ae0411 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_right.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save-as.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save-as.png new file mode 100644 index 0000000..d528533 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save.png new file mode 100644 index 0000000..8fee7bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_save.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search-and-replace.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search-and-replace.png new file mode 100644 index 0000000..df956ab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search-and-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search.png new file mode 100644 index 0000000..05c6821 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_search.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_select-all.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_select-all.png new file mode 100644 index 0000000..e7d21a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spam.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spam.png new file mode 100644 index 0000000..6e94c4d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spam.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spellcheck.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spellcheck.png new file mode 100644 index 0000000..39643a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_spellcheck.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_stop.png new file mode 100644 index 0000000..67815fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text-strikethrough.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text-strikethrough.png new file mode 100644 index 0000000..580893d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_bold.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_bold.png new file mode 100644 index 0000000..fdf8a95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_center.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_center.png new file mode 100644 index 0000000..6fc98d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_center.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_indent.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_indent.png new file mode 100644 index 0000000..81b8859 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_indent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_italic.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_italic.png new file mode 100644 index 0000000..2a217b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_justify.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_justify.png new file mode 100644 index 0000000..a210598 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_justify.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_left.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_left.png new file mode 100644 index 0000000..bedcff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_left.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_right.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_right.png new file mode 100644 index 0000000..88f4217 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_right.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_underlined.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_underlined.png new file mode 100644 index 0000000..bd81df4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_underlined.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_unindent.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_unindent.png new file mode 100644 index 0000000..ed971bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_text_unindent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_top.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_top.png new file mode 100644 index 0000000..78c254a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_top.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_undo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_undo.png new file mode 100644 index 0000000..750e3eb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_up.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_up.png new file mode 100644 index 0000000..c7189e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_up.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-1.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-1.png new file mode 100644 index 0000000..b089a09 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-1.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-in.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-in.png new file mode 100644 index 0000000..c5b3936 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-out.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-out.png new file mode 100644 index 0000000..01399fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-page.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-page.png new file mode 100644 index 0000000..2cea443 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stock_zoom-page.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/stop.png b/build/htdocs/dist/themes/icons/default/16x16/actions/stop.png new file mode 100644 index 0000000..67815fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/system-lock-screen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/system-lock-screen.png new file mode 100644 index 0000000..05e3bd8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/system-lock-screen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/system-log-out.png b/build/htdocs/dist/themes/icons/default/16x16/actions/system-log-out.png new file mode 100644 index 0000000..ea40957 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/system-log-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/system-run.png b/build/htdocs/dist/themes/icons/default/16x16/actions/system-run.png new file mode 100644 index 0000000..ad6d572 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/system-run.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/system-search.png b/build/htdocs/dist/themes/icons/default/16x16/actions/system-search.png new file mode 100644 index 0000000..a20f45c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/system-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/system-shutdown.png b/build/htdocs/dist/themes/icons/default/16x16/actions/system-shutdown.png new file mode 100644 index 0000000..3c628c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/system-shutdown.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/tab-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/tab-new.png new file mode 100644 index 0000000..a73fe6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/tab-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/tab_new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/tab_new.png new file mode 100644 index 0000000..a73fe6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/tab_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/text_bold.png b/build/htdocs/dist/themes/icons/default/16x16/actions/text_bold.png new file mode 100644 index 0000000..fdf8a95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/text_bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/text_italic.png b/build/htdocs/dist/themes/icons/default/16x16/actions/text_italic.png new file mode 100644 index 0000000..2a217b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/text_italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/text_strike.png b/build/htdocs/dist/themes/icons/default/16x16/actions/text_strike.png new file mode 100644 index 0000000..580893d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/text_strike.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/text_under.png b/build/htdocs/dist/themes/icons/default/16x16/actions/text_under.png new file mode 100644 index 0000000..bd81df4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/text_under.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/tools-check-spelling.png b/build/htdocs/dist/themes/icons/default/16x16/actions/tools-check-spelling.png new file mode 100644 index 0000000..39643a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/tools-check-spelling.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/top.png b/build/htdocs/dist/themes/icons/default/16x16/actions/top.png new file mode 100644 index 0000000..78c254a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/top.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/undo.png b/build/htdocs/dist/themes/icons/default/16x16/actions/undo.png new file mode 100644 index 0000000..750e3eb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/up.png b/build/htdocs/dist/themes/icons/default/16x16/actions/up.png new file mode 100644 index 0000000..c7189e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/up.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/view-fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/view-fullscreen.png new file mode 100644 index 0000000..975fdfe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/view-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/view-refresh.png b/build/htdocs/dist/themes/icons/default/16x16/actions/view-refresh.png new file mode 100644 index 0000000..3af6f42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/view-refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/view-restore.png b/build/htdocs/dist/themes/icons/default/16x16/actions/view-restore.png new file mode 100644 index 0000000..ca14e83 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/view-restore.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-ascending.png b/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-ascending.png new file mode 100644 index 0000000..5ee08a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-ascending.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-descending.png b/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-descending.png new file mode 100644 index 0000000..4a64e3c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/view-sort-descending.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag+.png b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag+.png new file mode 100644 index 0000000..c5b3936 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag+.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag-.png b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag-.png new file mode 100644 index 0000000..01399fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag-.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag1.png b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag1.png new file mode 100644 index 0000000..b089a09 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmag1.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/viewmagfit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmagfit.png new file mode 100644 index 0000000..2cea443 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/viewmagfit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/window-close.png b/build/htdocs/dist/themes/icons/default/16x16/actions/window-close.png new file mode 100644 index 0000000..a033c4e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/window-close.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/window-new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/window-new.png new file mode 100644 index 0000000..8cd21a1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/window-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/window_fullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/window_fullscreen.png new file mode 100644 index 0000000..975fdfe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/window_fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/window_new.png b/build/htdocs/dist/themes/icons/default/16x16/actions/window_new.png new file mode 100644 index 0000000..8cd21a1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/window_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/window_nofullscreen.png b/build/htdocs/dist/themes/icons/default/16x16/actions/window_nofullscreen.png new file mode 100644 index 0000000..ca14e83 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/window_nofullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-exit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-exit.png new file mode 100644 index 0000000..1c6ddf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-lock.png b/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-lock.png new file mode 100644 index 0000000..05e3bd8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/xfce-system-lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-best-fit.png b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-best-fit.png new file mode 100644 index 0000000..2cea443 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-best-fit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-fit-best.png b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-fit-best.png new file mode 100644 index 0000000..2cea443 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-fit-best.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-in.png b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-in.png new file mode 100644 index 0000000..c5b3936 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-original.png b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-original.png new file mode 100644 index 0000000..b089a09 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-original.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-out.png b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-out.png new file mode 100644 index 0000000..01399fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/actions/zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/animations/gnome-spinner.png b/build/htdocs/dist/themes/icons/default/16x16/animations/gnome-spinner.png new file mode 100644 index 0000000..5e0a4cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/animations/gnome-spinner.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/animations/process-working.png b/build/htdocs/dist/themes/icons/default/16x16/animations/process-working.png new file mode 100644 index 0000000..5e0a4cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/animations/process-working.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/access.png b/build/htdocs/dist/themes/icons/default/16x16/apps/access.png new file mode 100644 index 0000000..2c1ace5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/access.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/accessibility-directory.png b/build/htdocs/dist/themes/icons/default/16x16/apps/accessibility-directory.png new file mode 100644 index 0000000..2c1ace5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/accessibility-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-calculator.png b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-calculator.png new file mode 100644 index 0000000..b9e6f70 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-calculator.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-character-map.png b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-character-map.png new file mode 100644 index 0000000..1a1fbaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-character-map.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-dictionary.png b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-dictionary.png new file mode 100644 index 0000000..c466bda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-dictionary.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-text-editor.png b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-text-editor.png new file mode 100644 index 0000000..af6336f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/accessories-text-editor.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/applets-screenshooter.png b/build/htdocs/dist/themes/icons/default/16x16/apps/applets-screenshooter.png new file mode 100644 index 0000000..961f48c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/applets-screenshooter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/arts.png b/build/htdocs/dist/themes/icons/default/16x16/apps/arts.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/arts.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/background.png b/build/htdocs/dist/themes/icons/default/16x16/apps/background.png new file mode 100644 index 0000000..61fc3d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/background.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/calc.png b/build/htdocs/dist/themes/icons/default/16x16/apps/calc.png new file mode 100644 index 0000000..b9e6f70 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/config-language.png b/build/htdocs/dist/themes/icons/default/16x16/apps/config-language.png new file mode 100644 index 0000000..50b1aab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/config-language.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/config-users.png b/build/htdocs/dist/themes/icons/default/16x16/apps/config-users.png new file mode 100644 index 0000000..ed1fb60 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/config-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/file-manager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/file-manager.png new file mode 100644 index 0000000..90552df Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/file-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/fonts.png b/build/htdocs/dist/themes/icons/default/16x16/apps/fonts.png new file mode 100644 index 0000000..6c7e349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/fonts.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-calculator.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-calculator.png new file mode 100644 index 0000000..b9e6f70 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-calculator.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-character-map.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-character-map.png new file mode 100644 index 0000000..1a1fbaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-character-map.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-help.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-help.png new file mode 100644 index 0000000..0a986b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-mixer.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-mixer.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-mixer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-monitor.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-monitor.png new file mode 100644 index 0000000..1b0c236 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-monitor.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel-notification-area.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel-notification-area.png new file mode 100644 index 0000000..3d7b00c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel-notification-area.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel.png new file mode 100644 index 0000000..f841cb4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-panel.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-remote-desktop.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-remote-desktop.png new file mode 100644 index 0000000..5051d7c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-remote-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-accessibility-technologies.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-accessibility-technologies.png new file mode 100644 index 0000000..2c1ace5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-accessibility-technologies.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-background.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-background.png new file mode 100644 index 0000000..61fc3d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-background.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-font.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-font.png new file mode 100644 index 0000000..6c7e349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-font.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-keybindings.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-keybindings.png new file mode 100644 index 0000000..b52f371 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-keybindings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-theme.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-theme.png new file mode 100644 index 0000000..b3d4100 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-settings-theme.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-terminal.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-terminal.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-window-manager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-window-manager.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gnome-window-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/gucharmap.png b/build/htdocs/dist/themes/icons/default/16x16/apps/gucharmap.png new file mode 100644 index 0000000..1a1fbaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/gucharmap.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/help-browser.png b/build/htdocs/dist/themes/icons/default/16x16/apps/help-browser.png new file mode 100644 index 0000000..0a986b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/help-browser.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kcalc.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kcalc.png new file mode 100644 index 0000000..b9e6f70 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kcalc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kcharselect.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kcharselect.png new file mode 100644 index 0000000..1a1fbaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kcharselect.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kcmkwm.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kcmkwm.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kcmkwm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kcmsound.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kcmsound.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kcmsound.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kedit.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kedit.png new file mode 100644 index 0000000..af6336f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kedit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/key_bindings.png b/build/htdocs/dist/themes/icons/default/16x16/apps/key_bindings.png new file mode 100644 index 0000000..b52f371 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/key_bindings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kfm.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kfm.png new file mode 100644 index 0000000..90552df Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kfm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/khelpcenter.png b/build/htdocs/dist/themes/icons/default/16x16/apps/khelpcenter.png new file mode 100644 index 0000000..0a986b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/khelpcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/konsole.png b/build/htdocs/dist/themes/icons/default/16x16/apps/konsole.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/konsole.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/krfb.png b/build/htdocs/dist/themes/icons/default/16x16/apps/krfb.png new file mode 100644 index 0000000..5051d7c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/krfb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kscreensaver.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kscreensaver.png new file mode 100644 index 0000000..da90e77 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kscreensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/ksysguard.png b/build/htdocs/dist/themes/icons/default/16x16/apps/ksysguard.png new file mode 100644 index 0000000..1b0c236 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/ksysguard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kuser.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kuser.png new file mode 100644 index 0000000..ed1fb60 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kuser.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/kwin.png b/build/htdocs/dist/themes/icons/default/16x16/apps/kwin.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/kwin.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-base.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-base.png new file mode 100644 index 0000000..3465f32 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-base.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-calc.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-calc.png new file mode 100644 index 0000000..3f1f4ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-draw.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-draw.png new file mode 100644 index 0000000..94bc2aa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-draw.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-impress.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-impress.png new file mode 100644 index 0000000..75d94f0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-main.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-main.png new file mode 100644 index 0000000..2459b2a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-main.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-math.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-math.png new file mode 100644 index 0000000..ab945b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-math.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-printeradmin.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-printeradmin.png new file mode 100644 index 0000000..7f2a946 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-printeradmin.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-startcenter.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-startcenter.png new file mode 100644 index 0000000..2459b2a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-startcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-writer.png b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-writer.png new file mode 100644 index 0000000..1aacbb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/libreoffice34-writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/locale.png b/build/htdocs/dist/themes/icons/default/16x16/apps/locale.png new file mode 100644 index 0000000..50b1aab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/locale.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia-volume-control.png b/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia-volume-control.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia-volume-control.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia.png b/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/openterm.png b/build/htdocs/dist/themes/icons/default/16x16/apps/openterm.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/openterm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-accessibility.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-accessibility.png new file mode 100644 index 0000000..2c1ace5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-accessibility.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-display.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-display.png new file mode 100644 index 0000000..c172499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-font.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-font.png new file mode 100644 index 0000000..6c7e349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-font.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard-shortcuts.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard-shortcuts.png new file mode 100644 index 0000000..b52f371 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard-shortcuts.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard.png new file mode 100644 index 0000000..535b914 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-locale.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-locale.png new file mode 100644 index 0000000..50b1aab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-locale.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-remote-desktop.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-remote-desktop.png new file mode 100644 index 0000000..5051d7c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-remote-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-screensaver.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-screensaver.png new file mode 100644 index 0000000..da90e77 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-screensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-theme.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-theme.png new file mode 100644 index 0000000..b3d4100 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-theme.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-wallpaper.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-wallpaper.png new file mode 100644 index 0000000..61fc3d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-desktop-wallpaper.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-system-windows.png b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-system-windows.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/preferences-system-windows.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/redhat-filemanager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/redhat-filemanager.png new file mode 100644 index 0000000..90552df Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/redhat-filemanager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/screensaver.png b/build/htdocs/dist/themes/icons/default/16x16/apps/screensaver.png new file mode 100644 index 0000000..da90e77 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/screensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/style.png b/build/htdocs/dist/themes/icons/default/16x16/apps/style.png new file mode 100644 index 0000000..b3d4100 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/style.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/susehelpcenter.png b/build/htdocs/dist/themes/icons/default/16x16/apps/susehelpcenter.png new file mode 100644 index 0000000..0a986b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/susehelpcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/system-config-users.png b/build/htdocs/dist/themes/icons/default/16x16/apps/system-config-users.png new file mode 100644 index 0000000..ed1fb60 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/system-config-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/system-file-manager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/system-file-manager.png new file mode 100644 index 0000000..90552df Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/system-file-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-install.png b/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-install.png new file mode 100644 index 0000000..98969ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-install.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-update.png b/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-update.png new file mode 100644 index 0000000..7c13db5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/system-software-update.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/system-users.png b/build/htdocs/dist/themes/icons/default/16x16/apps/system-users.png new file mode 100644 index 0000000..ed1fb60 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/system-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/terminal.png b/build/htdocs/dist/themes/icons/default/16x16/apps/terminal.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/text-editor.png b/build/htdocs/dist/themes/icons/default/16x16/apps/text-editor.png new file mode 100644 index 0000000..af6336f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/text-editor.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/update-manager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/update-manager.png new file mode 100644 index 0000000..7c13db5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/update-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/user-info.png b/build/htdocs/dist/themes/icons/default/16x16/apps/user-info.png new file mode 100644 index 0000000..c8077d4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/user-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-system-monitor.png b/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-system-monitor.png new file mode 100644 index 0000000..1b0c236 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-system-monitor.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-terminal.png b/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-terminal.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/utilities-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/volume-knob.png b/build/htdocs/dist/themes/icons/default/16x16/apps/volume-knob.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/volume-knob.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/wallpaper.png b/build/htdocs/dist/themes/icons/default/16x16/apps/wallpaper.png new file mode 100644 index 0000000..61fc3d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/wallpaper.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/web-browser.png b/build/htdocs/dist/themes/icons/default/16x16/apps/web-browser.png new file mode 100644 index 0000000..67f5053 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/web-browser.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-filemanager.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-filemanager.png new file mode 100644 index 0000000..90552df Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-filemanager.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-terminal.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-terminal.png new file mode 100644 index 0000000..c0e6c0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-backdrop.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-backdrop.png new file mode 100644 index 0000000..61fc3d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-backdrop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-mixer.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-mixer.png new file mode 100644 index 0000000..07ec24c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xfce4-mixer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xfwm4.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xfwm4.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xfwm4.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/xscreensaver.png b/build/htdocs/dist/themes/icons/default/16x16/apps/xscreensaver.png new file mode 100644 index 0000000..da90e77 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/xscreensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/apps/zen-icon.png b/build/htdocs/dist/themes/icons/default/16x16/apps/zen-icon.png new file mode 100644 index 0000000..7c13db5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/apps/zen-icon.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-accessories.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-accessories.png new file mode 100644 index 0000000..a2f41f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-accessories.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-development.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-development.png new file mode 100644 index 0000000..59e186a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-development.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-engineering.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-engineering.png new file mode 100644 index 0000000..4f4ad2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-engineering.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-games.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-games.png new file mode 100644 index 0000000..f28208f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-graphics.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-graphics.png new file mode 100644 index 0000000..66e46cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-internet.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-internet.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-multimedia.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-multimedia.png new file mode 100644 index 0000000..b25afaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-office.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-office.png new file mode 100644 index 0000000..981db6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-other.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-other.png new file mode 100644 index 0000000..4530760 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-science.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-science.png new file mode 100644 index 0000000..14de63c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-science.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-system.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-system.png new file mode 100644 index 0000000..6c5284d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/applications-utilities.png b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-utilities.png new file mode 100644 index 0000000..ad5722b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/applications-utilities.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-applications.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-applications.png new file mode 100644 index 0000000..981db6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-applications.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-control-center.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-control-center.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-control-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-devel.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-devel.png new file mode 100644 index 0000000..59e186a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-devel.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-globe.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-globe.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-globe.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-graphics.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-graphics.png new file mode 100644 index 0000000..66e46cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-joystick.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-joystick.png new file mode 100644 index 0000000..f28208f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-multimedia.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-multimedia.png new file mode 100644 index 0000000..b25afaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-other.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-other.png new file mode 100644 index 0000000..4530760 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-settings.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-system.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-system.png new file mode 100644 index 0000000..6c5284d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-util.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-util.png new file mode 100644 index 0000000..a2f41f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gnome-util.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/gtk-preferences.png b/build/htdocs/dist/themes/icons/default/16x16/categories/gtk-preferences.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/gtk-preferences.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/input_devices_settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/input_devices_settings.png new file mode 100644 index 0000000..400ef53 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/input_devices_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/kcontrol.png b/build/htdocs/dist/themes/icons/default/16x16/categories/kcontrol.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/kcontrol.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_development.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_development.png new file mode 100644 index 0000000..59e186a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_development.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_games.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_games.png new file mode 100644 index 0000000..f28208f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_games.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_graphics.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_graphics.png new file mode 100644 index 0000000..66e46cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_multimedia.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_multimedia.png new file mode 100644 index 0000000..b25afaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_network.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_network.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_office.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_office.png new file mode 100644 index 0000000..981db6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_office.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_settings.png new file mode 100644 index 0000000..eb28840 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_system.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_system.png new file mode 100644 index 0000000..6c5284d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/package_utilities.png b/build/htdocs/dist/themes/icons/default/16x16/categories/package_utilities.png new file mode 100644 index 0000000..a2f41f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/package_utilities.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-peripherals.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-peripherals.png new file mode 100644 index 0000000..400ef53 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-peripherals.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-personal.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-personal.png new file mode 100644 index 0000000..57ce63c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop-personal.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-other.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-other.png new file mode 100644 index 0000000..26aa6e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system-network.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system-network.png new file mode 100644 index 0000000..d08f264 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system.png b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system.png new file mode 100644 index 0000000..eb28840 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/preferences-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-accessories.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-accessories.png new file mode 100644 index 0000000..a2f41f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-accessories.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-games.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-games.png new file mode 100644 index 0000000..f28208f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-graphics.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-graphics.png new file mode 100644 index 0000000..66e46cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-internet.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-internet.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-office.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-office.png new file mode 100644 index 0000000..981db6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-preferences.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-preferences.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-preferences.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-programming.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-programming.png new file mode 100644 index 0000000..59e186a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-programming.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-sound_video.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-sound_video.png new file mode 100644 index 0000000..b25afaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-sound_video.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_settings.png new file mode 100644 index 0000000..eb28840 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_tools.png b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_tools.png new file mode 100644 index 0000000..6c5284d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/redhat-system_tools.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/stock_internet.png b/build/htdocs/dist/themes/icons/default/16x16/categories/stock_internet.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/stock_internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/system-help.png b/build/htdocs/dist/themes/icons/default/16x16/categories/system-help.png new file mode 100644 index 0000000..edd850a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/system-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-games.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-games.png new file mode 100644 index 0000000..f28208f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-graphics.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-graphics.png new file mode 100644 index 0000000..66e46cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-internet.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-internet.png new file mode 100644 index 0000000..36756bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-multimedia.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-multimedia.png new file mode 100644 index 0000000..b25afaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-office.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-office.png new file mode 100644 index 0000000..981db6a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-system-settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-system-settings.png new file mode 100644 index 0000000..eb28840 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-system-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-utils.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-utils.png new file mode 100644 index 0000000..a2f41f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce-utils.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/categories/xfce4-settings.png b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce4-settings.png new file mode 100644 index 0000000..84da587 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/categories/xfce4-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/3floppy_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/3floppy_unmount.png new file mode 100644 index 0000000..15eb867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/3floppy_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/ac-adapter.png b/build/htdocs/dist/themes/icons/default/16x16/devices/ac-adapter.png new file mode 100644 index 0000000..cbd8284 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/ac-adapter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/audio-card.png b/build/htdocs/dist/themes/icons/default/16x16/devices/audio-card.png new file mode 100644 index 0000000..ee746a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/audio-card.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/audio-input-microphone.png b/build/htdocs/dist/themes/icons/default/16x16/devices/audio-input-microphone.png new file mode 100644 index 0000000..c85d912 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/audio-input-microphone.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/battery.png b/build/htdocs/dist/themes/icons/default/16x16/devices/battery.png new file mode 100644 index 0000000..3111404 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/battery.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/camera-photo.png b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-photo.png new file mode 100644 index 0000000..13eaf2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-photo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/camera-video.png b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-video.png new file mode 100644 index 0000000..651fd96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-video.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/camera-web.png b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-web.png new file mode 100644 index 0000000..63a81b0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/camera-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/camera.png b/build/htdocs/dist/themes/icons/default/16x16/devices/camera.png new file mode 100644 index 0000000..13eaf2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/camera.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/camera_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/camera_unmount.png new file mode 100644 index 0000000..13eaf2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/camera_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/cdrom_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/cdrom_unmount.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/cdrom_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/cdwriter_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/cdwriter_unmount.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/cdwriter_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/chardevice.png b/build/htdocs/dist/themes/icons/default/16x16/devices/chardevice.png new file mode 100644 index 0000000..e0fa075 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/chardevice.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/computer-apple-ipad.png b/build/htdocs/dist/themes/icons/default/16x16/devices/computer-apple-ipad.png new file mode 100644 index 0000000..edffd40 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/computer-apple-ipad.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/computer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/computer.png new file mode 100644 index 0000000..8b53536 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/computer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/display.png b/build/htdocs/dist/themes/icons/default/16x16/devices/display.png new file mode 100644 index 0000000..e0fa075 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/display.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-cdrom.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-cdrom.png new file mode 100644 index 0000000..174e6ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-ieee1394.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-ieee1394.png new file mode 100644 index 0000000..7865c41 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-ieee1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-system.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-system.png new file mode 100644 index 0000000..b4c9a92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-usb.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-usb.png new file mode 100644 index 0000000..d07c454 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-optical.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-optical.png new file mode 100644 index 0000000..174e6ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/drive-removable-media.png b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-removable-media.png new file mode 100644 index 0000000..9b027a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/drive-removable-media.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/dvd_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/dvd_unmount.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/dvd_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-battery.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-battery.png new file mode 100644 index 0000000..3111404 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-battery.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom-audio.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom-audio.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom.png new file mode 100644 index 0000000..174e6ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-computer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-computer.png new file mode 100644 index 0000000..8b53536 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-computer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdr.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdr.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdrw.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdrw.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-cdrw.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr-plus.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr-plus.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr-plus.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdram.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdram.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdram.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrom.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrom.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrw.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrw.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-disc-dvdrw.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-dvd.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-dvd.png new file mode 100644 index 0000000..174e6ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-dvd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ethernet.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ethernet.png new file mode 100644 index 0000000..02f636a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ethernet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-floppy.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-floppy.png new file mode 100644 index 0000000..15eb867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-1394.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-1394.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-usb.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-usb.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ipod.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ipod.png new file mode 100644 index 0000000..dc22324 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-ipod.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-keyboard.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-keyboard.png new file mode 100644 index 0000000..aafa1ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-cf.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-cf.png new file mode 100644 index 0000000..be67c0b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-cf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-ms.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-ms.png new file mode 100644 index 0000000..be67c0b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-ms.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sdmmc.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sdmmc.png new file mode 100644 index 0000000..be67c0b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sdmmc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sm.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sm.png new file mode 100644 index 0000000..be67c0b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-media-sm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-ball.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-ball.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-ball.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-optical.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-optical.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-mouse-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-printer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-printer.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-1394.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-1394.png new file mode 100644 index 0000000..9b027a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-usb.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-usb.png new file mode 100644 index 0000000..9b027a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable.png new file mode 100644 index 0000000..9b027a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-removable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-wavelan.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-wavelan.png new file mode 100644 index 0000000..0331faa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-dev-wavelan.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-fs-client.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-fs-client.png new file mode 100644 index 0000000..8b53536 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-fs-client.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-modem.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-modem.png new file mode 100644 index 0000000..6bce1b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-modem.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-stock-mic.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-stock-mic.png new file mode 100644 index 0000000..c85d912 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gnome-stock-mic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-cdrom.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-cdrom.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-floppy.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-floppy.png new file mode 100644 index 0000000..15eb867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-harddisk.png b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-harddisk.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/gtk-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/harddrive.png b/build/htdocs/dist/themes/icons/default/16x16/devices/harddrive.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/harddrive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/hdd_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/hdd_unmount.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/hdd_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-dialpad.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-dialpad.png new file mode 100644 index 0000000..131553e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-dialpad.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-gaming.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-gaming.png new file mode 100644 index 0000000..a28f32a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-gaming.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-keyboard.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-keyboard.png new file mode 100644 index 0000000..aafa1ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-mouse.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-mouse.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-tablet.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-tablet.png new file mode 100644 index 0000000..a77ee76 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-tablet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/input-touchpad.png b/build/htdocs/dist/themes/icons/default/16x16/devices/input-touchpad.png new file mode 100644 index 0000000..c91f228 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/input-touchpad.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/ipod_mount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/ipod_mount.png new file mode 100644 index 0000000..dc22324 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/ipod_mount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/joystick.png b/build/htdocs/dist/themes/icons/default/16x16/devices/joystick.png new file mode 100644 index 0000000..a28f32a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/keyboard.png b/build/htdocs/dist/themes/icons/default/16x16/devices/keyboard.png new file mode 100644 index 0000000..aafa1ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/kjobviewer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/kjobviewer.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/kjobviewer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/kxkb.png b/build/htdocs/dist/themes/icons/default/16x16/devices/kxkb.png new file mode 100644 index 0000000..aafa1ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/kxkb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-cdrom.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-cdrom.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-flash.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-flash.png new file mode 100644 index 0000000..be67c0b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-flash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-floppy.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-floppy.png new file mode 100644 index 0000000..15eb867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-bd.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-bd.png new file mode 100644 index 0000000..02ad46a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-bd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-cd-audio.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-cd-audio.png new file mode 100644 index 0000000..76b4ded Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-cd-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-dvd.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-dvd.png new file mode 100644 index 0000000..8057196 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical-dvd.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical.png new file mode 100644 index 0000000..dd1dbcd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-removable.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-removable.png new file mode 100644 index 0000000..d38fa13 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-removable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-tape.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-tape.png new file mode 100644 index 0000000..884835e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-tape.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/media-zip.png b/build/htdocs/dist/themes/icons/default/16x16/devices/media-zip.png new file mode 100644 index 0000000..f5efced Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/media-zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/modem.png b/build/htdocs/dist/themes/icons/default/16x16/devices/modem.png new file mode 100644 index 0000000..6bce1b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/modem.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/mouse.png b/build/htdocs/dist/themes/icons/default/16x16/devices/mouse.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player-apple-ipod-touch.png b/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player-apple-ipod-touch.png new file mode 100644 index 0000000..629e19b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player-apple-ipod-touch.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player.png b/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player.png new file mode 100644 index 0000000..dc22324 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/multimedia-player.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/network-vpn.png b/build/htdocs/dist/themes/icons/default/16x16/devices/network-vpn.png new file mode 100644 index 0000000..aa5c5cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/network-vpn.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/network-wired.png b/build/htdocs/dist/themes/icons/default/16x16/devices/network-wired.png new file mode 100644 index 0000000..02f636a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/network-wired.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/network-wireless.png b/build/htdocs/dist/themes/icons/default/16x16/devices/network-wireless.png new file mode 100644 index 0000000..0331faa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/network-wireless.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/pda.png b/build/htdocs/dist/themes/icons/default/16x16/devices/pda.png new file mode 100644 index 0000000..d882a83 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/pda.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone-apple-iphone.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-apple-iphone.png new file mode 100644 index 0000000..c01ce8a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-apple-iphone.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone-google-nexus-one.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-google-nexus-one.png new file mode 100644 index 0000000..c468d6c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-google-nexus-one.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone-htc-g1-white.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-htc-g1-white.png new file mode 100644 index 0000000..8f26366 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-htc-g1-white.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone-palm-pre.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-palm-pre.png new file mode 100644 index 0000000..4548d31 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-palm-pre.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone-samsung-galaxy-s.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-samsung-galaxy-s.png new file mode 100644 index 0000000..d5f9ae2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone-samsung-galaxy-s.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/phone.png b/build/htdocs/dist/themes/icons/default/16x16/devices/phone.png new file mode 100644 index 0000000..e1b7762 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/phone.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/printer-network.png b/build/htdocs/dist/themes/icons/default/16x16/devices/printer-network.png new file mode 100644 index 0000000..837e77b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/printer-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/printer-remote.png b/build/htdocs/dist/themes/icons/default/16x16/devices/printer-remote.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/printer-remote.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/printer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/printer.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/printer1.png b/build/htdocs/dist/themes/icons/default/16x16/devices/printer1.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/printer1.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/printmgr.png b/build/htdocs/dist/themes/icons/default/16x16/devices/printmgr.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/printmgr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/scanner.png b/build/htdocs/dist/themes/icons/default/16x16/devices/scanner.png new file mode 100644 index 0000000..23e5cb4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/scanner.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/speaker.png b/build/htdocs/dist/themes/icons/default/16x16/devices/speaker.png new file mode 100644 index 0000000..7ec3c2a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/speaker.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/stock_cell-phone.png b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_cell-phone.png new file mode 100644 index 0000000..e1b7762 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_cell-phone.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/stock_mic.png b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_mic.png new file mode 100644 index 0000000..c85d912 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_mic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/stock_printers.png b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_printers.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/stock_printers.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/system-floppy.png b/build/htdocs/dist/themes/icons/default/16x16/devices/system-floppy.png new file mode 100644 index 0000000..15eb867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/system-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/system.png b/build/htdocs/dist/themes/icons/default/16x16/devices/system.png new file mode 100644 index 0000000..8b53536 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/usbpendrive_unmount.png b/build/htdocs/dist/themes/icons/default/16x16/devices/usbpendrive_unmount.png new file mode 100644 index 0000000..9b027a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/usbpendrive_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/video-display.png b/build/htdocs/dist/themes/icons/default/16x16/devices/video-display.png new file mode 100644 index 0000000..e0fa075 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/video-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/xfce-printer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce-printer.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce-printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-display.png b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-display.png new file mode 100644 index 0000000..e0fa075 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-keyboard.png b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-keyboard.png new file mode 100644 index 0000000..aafa1ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-mouse.png b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-mouse.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/xfce4-mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_HD.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_HD.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_HD.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_idetude.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_idetude.png new file mode 100644 index 0000000..ae804a2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_idetude.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_joystick.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_joystick.png new file mode 100644 index 0000000..a28f32a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_mouse.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_mouse.png new file mode 100644 index 0000000..4266677 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_printer.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_printer.png new file mode 100644 index 0000000..7578b29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/devices/yast_soundcard.png b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_soundcard.png new file mode 100644 index 0000000..ee746a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/devices/yast_soundcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-default.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-default.png new file mode 100644 index 0000000..8e07437 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-default.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-documents.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-documents.png new file mode 100644 index 0000000..71937d6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-documents.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-downloads.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-downloads.png new file mode 100644 index 0000000..504d94e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-downloads.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-favorite.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-favorite.png new file mode 100644 index 0000000..6d73609 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-favorite.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-generic.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-generic.png new file mode 100644 index 0000000..80f4374 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-important.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-important.png new file mode 100644 index 0000000..c95ed50 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-important.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-mail.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-mail.png new file mode 100644 index 0000000..a96bdfb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-mail.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-new.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-new.png new file mode 100644 index 0000000..283ead7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-noread.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-noread.png new file mode 100644 index 0000000..8aa4a46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-noread.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-nowrite.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-nowrite.png new file mode 100644 index 0000000..2baa4f0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-nowrite.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-package.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-package.png new file mode 100644 index 0000000..b933edd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-package.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-photos.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-photos.png new file mode 100644 index 0000000..dc95aaa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-photos.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-readonly.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-readonly.png new file mode 100644 index 0000000..2baa4f0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-readonly.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-shared.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-shared.png new file mode 100644 index 0000000..374be37 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-shared.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-symbolic-link.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-symbolic-link.png new file mode 100644 index 0000000..6847452 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-symbolic-link.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-synchronizing.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-synchronizing.png new file mode 100644 index 0000000..61e854c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-synchronizing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-system.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-system.png new file mode 100644 index 0000000..cf2cea1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-unreadable.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-unreadable.png new file mode 100644 index 0000000..8aa4a46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-unreadable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-urgent.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-urgent.png new file mode 100644 index 0000000..e5d157b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-urgent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-web.png b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-web.png new file mode 100644 index 0000000..148126a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emblems/emblem-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angel.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angel.png new file mode 100644 index 0000000..3228ec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angel.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angry.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angry.png new file mode 100644 index 0000000..078e6c6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-angry.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-cool.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-cool.png new file mode 100644 index 0000000..e31fa41 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-cool.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-crying.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-crying.png new file mode 100644 index 0000000..87d73d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-crying.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-devilish.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-devilish.png new file mode 100644 index 0000000..7d546aa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-devilish.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-embarrassed.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-embarrassed.png new file mode 100644 index 0000000..06b9fff Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-embarrassed.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-glasses.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-glasses.png new file mode 100644 index 0000000..c34f1fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-glasses.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-kiss.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-kiss.png new file mode 100644 index 0000000..9197bd6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-kiss.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-laugh.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-laugh.png new file mode 100644 index 0000000..3fd3fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-laugh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-monkey.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-monkey.png new file mode 100644 index 0000000..b2b31ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-monkey.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-plain.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-plain.png new file mode 100644 index 0000000..9f1b867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-plain.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-raspberry.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-raspberry.png new file mode 100644 index 0000000..99b6e40 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-raspberry.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sad.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sad.png new file mode 100644 index 0000000..0555e07 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sad.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sick.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sick.png new file mode 100644 index 0000000..c99b3bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-sick.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile-big.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile-big.png new file mode 100644 index 0000000..be9652d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile-big.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile.png new file mode 100644 index 0000000..b8a3d90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smile.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smirk.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smirk.png new file mode 100644 index 0000000..65965ff Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-smirk.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-surprise.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-surprise.png new file mode 100644 index 0000000..e997ac3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-surprise.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-tired.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-tired.png new file mode 100644 index 0000000..9b27f90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-tired.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-uncertain.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-uncertain.png new file mode 100644 index 0000000..4f48769 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-uncertain.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-wink.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-wink.png new file mode 100644 index 0000000..fb0d5ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-wink.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/face-worried.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-worried.png new file mode 100644 index 0000000..a9ef13e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/face-worried.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-1.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-1.png new file mode 100644 index 0000000..b8a3d90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-1.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-10.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-10.png new file mode 100644 index 0000000..99b6e40 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-10.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-11.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-11.png new file mode 100644 index 0000000..87d73d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-11.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-13.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-13.png new file mode 100644 index 0000000..9197bd6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-13.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-15.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-15.png new file mode 100644 index 0000000..e31fa41 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-15.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-18.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-18.png new file mode 100644 index 0000000..3228ec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-18.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-2.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-2.png new file mode 100644 index 0000000..b8a3d90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-2.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-22.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-22.png new file mode 100644 index 0000000..b2b31ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-22.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-3.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-3.png new file mode 100644 index 0000000..fb0d5ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-3.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-4.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-4.png new file mode 100644 index 0000000..0555e07 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-4.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-5.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-5.png new file mode 100644 index 0000000..e997ac3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-5.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-6.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-6.png new file mode 100644 index 0000000..be9652d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-6.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-7.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-7.png new file mode 100644 index 0000000..b8a3d90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-7.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-8.png b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-8.png new file mode 100644 index 0000000..9f1b867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/emotes/stock_smiley-8.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-certificate.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-certificate.png new file mode 100644 index 0000000..2d824f9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-certificate.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-rss+xml.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-rss+xml.png new file mode 100644 index 0000000..bacaba9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-rss+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openofficeorg.extension.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openofficeorg.extension.png new file mode 100644 index 0000000..204d005 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openofficeorg.extension.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png new file mode 100644 index 0000000..3db8926 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png new file mode 100644 index 0000000..607982a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png new file mode 100644 index 0000000..6769062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-blender.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-blender.png new file mode 100644 index 0000000..a64f57c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-blender.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-cd-image.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-cd-image.png new file mode 100644 index 0000000..bd7b11e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-cd-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-executable.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-executable.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-mono-develop-xib.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-mono-develop-xib.png new file mode 100644 index 0000000..d652bd5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/application-x-mono-develop-xib.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/ascii.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/ascii.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/ascii.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/audio-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/audio-x-generic.png new file mode 100644 index 0000000..a96f899 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/audio-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/binary.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/binary.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/binary.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/contents2.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/contents2.png new file mode 100644 index 0000000..100a496 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/contents2.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/deb.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/deb.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/deb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/document.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/document.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/document.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/empty.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/empty.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/exec.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/exec.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/exec.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/folder_tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/folder_tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/folder_tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font-x-generic.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_bitmap.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_bitmap.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_bitmap.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_truetype.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_truetype.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_truetype.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_type1.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_type1.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/font_type1.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-executable.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-executable.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-regular.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-regular.png new file mode 100644 index 0000000..3c285b0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-fs-regular.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-magicpoint.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-magicpoint.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-magicpoint.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-msword.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-msword.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-msword.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-ogg.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-ogg.png new file mode 100644 index 0000000..a96f899 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-ogg.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-pdf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-pdf.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-pdf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-postscript.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-postscript.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-postscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-rtf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-rtf.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-rtf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-excel.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-excel.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-excel.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png new file mode 100644 index 0000000..0b481cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png new file mode 100644 index 0000000..bf8b19e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png new file mode 100644 index 0000000..bf8b19e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png new file mode 100644 index 0000000..3db8926 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png new file mode 100644 index 0000000..607982a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png new file mode 100644 index 0000000..6769062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.rn-realmedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.calc.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.calc.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.impress.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.impress.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.writer.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.writer.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.stardivision.writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png new file mode 100644 index 0000000..607982a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png new file mode 100644 index 0000000..bf8b19e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png new file mode 100644 index 0000000..0b481cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png new file mode 100644 index 0000000..3db8926 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png new file mode 100644 index 0000000..6769062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-wordperfect.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-wordperfect.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-wordperfect.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-7z-compressed.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-7z-compressed.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-7z-compressed.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-abiword.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-abiword.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-abiword.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-spreadsheet.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-word.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-word.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-applix-word.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-archive.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-archive.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-archive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-arj.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-arj.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-arj.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-bzip.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compress.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compress.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compress.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compressed-tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compressed-tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio-compressed.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio-compressed.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio-compressed.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-cpio.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-deb.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-deb.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-deb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-dvi.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-dvi.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-dvi.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-executable.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-executable.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-afm.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-afm.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-afm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-bdf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-bdf.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-bdf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-linux-psf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-linux-psf.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-linux-psf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-pcf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-pcf.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-pcf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-sunos-news.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-sunos-news.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-sunos-news.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-ttf.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-ttf.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-font-ttf.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gnumeric.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gnumeric.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gnumeric.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzip.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzip.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzip.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzpostscript.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzpostscript.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-gzpostscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-jar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-jar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-jar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-killustrator.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-killustrator.png new file mode 100644 index 0000000..78f7aa3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-killustrator.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kpresenter.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kpresenter.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kpresenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kspread.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kspread.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kspread.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kword.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kword.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-kword.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lha.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lha.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lha.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lhz.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lhz.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lhz.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-lzma.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-ms-dos-executable.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-ms-dos-executable.png new file mode 100644 index 0000000..11ff118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-ms-dos-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-perl.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-perl.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-perl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-php.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-php.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-php.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-python-bytecode.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-python-bytecode.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-python-bytecode.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rpm.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rpm.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-rpm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-scribus.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-scribus.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-scribus.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shellscript.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shellscript.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shellscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shockwave-flash.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shockwave-flash.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-shockwave-flash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-stuffit.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-stuffit.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-stuffit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tarz.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tarz.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tarz.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tex.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tex.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-x-tex.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-xhtml+xml.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-xhtml+xml.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-xhtml+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-zip.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-zip.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-application-zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-audio.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-audio.png new file mode 100644 index 0000000..a96f899 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-image.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-image.png new file mode 100644 index 0000000..78f7aa3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-html.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-html.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-html.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-vnd.wap.wml.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-vnd.wap.wml.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-vnd.wap.wml.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-csh.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-csh.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-csh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-python.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-python.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-python.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-sh.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-sh.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-sh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcalendar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcalendar.png new file mode 100644 index 0000000..9a01283 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcalendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcard.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcard.png new file mode 100644 index 0000000..100a496 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-vcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-zsh.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-zsh.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text-x-zsh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-video.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-video.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-video.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-x-font-afm.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-x-font-afm.png new file mode 100644 index 0000000..0f8c531 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-mime-x-font-afm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-package.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-package.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gnome-package.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gtk-file.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gtk-file.png new file mode 100644 index 0000000..3c285b0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/gtk-file.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/html.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/html.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/html.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image-x-generic.png new file mode 100644 index 0000000..78f7aa3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image.png new file mode 100644 index 0000000..78f7aa3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/kpresenter_kpr.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/kpresenter_kpr.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/kpresenter_kpr.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-database.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-database.png new file mode 100644 index 0000000..bbf4855 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-database.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing-template.png new file mode 100644 index 0000000..74770d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing.png new file mode 100644 index 0000000..3030379 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-extension.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-extension.png new file mode 100644 index 0000000..be3c8ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-extension.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-formula.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-formula.png new file mode 100644 index 0000000..3eb7f88 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-formula.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-master-document.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-master-document.png new file mode 100644 index 0000000..c424e4f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-master-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-database.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-database.png new file mode 100644 index 0000000..3465f32 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-database.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing-template.png new file mode 100644 index 0000000..456b810 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing.png new file mode 100644 index 0000000..94bc2aa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-formula.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-formula.png new file mode 100644 index 0000000..ab945b1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-formula.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-master-document.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-master-document.png new file mode 100644 index 0000000..40777f7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-master-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation-template.png new file mode 100644 index 0000000..99d38d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation.png new file mode 100644 index 0000000..75d94f0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet-template.png new file mode 100644 index 0000000..74c312c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet.png new file mode 100644 index 0000000..3f1f4ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text-template.png new file mode 100644 index 0000000..9d7c277 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text.png new file mode 100644 index 0000000..1aacbb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-web-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-web-template.png new file mode 100644 index 0000000..16bf02e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-oasis-web-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation-template.png new file mode 100644 index 0000000..bb20d13 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation.png new file mode 100644 index 0000000..b82ddf7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet-template.png new file mode 100644 index 0000000..3546349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet.png new file mode 100644 index 0000000..df164ff Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text-template.png new file mode 100644 index 0000000..4d89528 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text.png new file mode 100644 index 0000000..6ff2517 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/libreoffice34-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/mime_ascii.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/mime_ascii.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/mime_ascii.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/misc.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/misc.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/misc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package-x-generic.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_editors.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_editors.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_editors.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_wordprocessing.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_wordprocessing.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/package_wordprocessing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/plan.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/plan.png new file mode 100644 index 0000000..9a01283 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/plan.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/rpm.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/rpm.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/rpm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/shellscript.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/shellscript.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/shellscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/sound.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/sound.png new file mode 100644 index 0000000..a96f899 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/sound.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/spreadsheet.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_addressbook.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_addressbook.png new file mode 100644 index 0000000..100a496 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_addressbook.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_calendar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_calendar.png new file mode 100644 index 0000000..9a01283 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_calendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_certificate.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_certificate.png new file mode 100644 index 0000000..2d824f9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_certificate.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_script.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_script.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/stock_script.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tar.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/template_source.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/template_source.png new file mode 100644 index 0000000..54bfb56 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/template_source.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-html.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-html.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-html.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic-template.png new file mode 100644 index 0000000..54bfb56 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-opml+xml.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-opml+xml.png new file mode 100644 index 0000000..1677ba4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-opml+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-preview.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-preview.png new file mode 100644 index 0000000..3c285b0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-script.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-script.png new file mode 100644 index 0000000..ed4174c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/text-x-script.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tgz.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tgz.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/tgz.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt2.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt2.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/txt2.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/unknown.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/unknown.png new file mode 100644 index 0000000..3dd98c9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/unknown.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcalendar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcalendar.png new file mode 100644 index 0000000..9a01283 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcalendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcard.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcard.png new file mode 100644 index 0000000..100a496 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/vcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video-x-generic.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video-x-generic.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video.png new file mode 100644 index 0000000..8aeb199 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/video.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/wordprocessing.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/wordprocessing.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/wordprocessing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/www.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/www.png new file mode 100644 index 0000000..479c118 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/www.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-address-book.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-address-book.png new file mode 100644 index 0000000..100a496 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-address-book.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-calendar.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-calendar.png new file mode 100644 index 0000000..9a01283 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-calendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document-template.png new file mode 100644 index 0000000..6769062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document.png new file mode 100644 index 0000000..878a7ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing-template.png new file mode 100644 index 0000000..0b481cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing.png new file mode 100644 index 0000000..bf8b19e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation-template.png new file mode 100644 index 0000000..3db8926 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation.png new file mode 100644 index 0000000..e563699 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet-template.png new file mode 100644 index 0000000..607982a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet.png new file mode 100644 index 0000000..6c84540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/x-office-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/mimetypes/zip.png b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/zip.png new file mode 100644 index 0000000..eb6c923 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/mimetypes/zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/osjs-white.png b/build/htdocs/dist/themes/icons/default/16x16/osjs-white.png new file mode 100644 index 0000000..0f3fa30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/osjs-white.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/osjs.png b/build/htdocs/dist/themes/icons/default/16x16/osjs.png new file mode 100644 index 0000000..694ec13 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/osjs.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/application-x-gnome-saved-search.png b/build/htdocs/dist/themes/icons/default/16x16/places/application-x-gnome-saved-search.png new file mode 100644 index 0000000..7b5cd15 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/application-x-gnome-saved-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/desktop.png b/build/htdocs/dist/themes/icons/default/16x16/places/desktop.png new file mode 100644 index 0000000..a1b6806 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/distributor-logo.png b/build/htdocs/dist/themes/icons/default/16x16/places/distributor-logo.png new file mode 100644 index 0000000..dc7196d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/distributor-logo.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/dropbox.png b/build/htdocs/dist/themes/icons/default/16x16/places/dropbox.png new file mode 100644 index 0000000..b35bddb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/dropbox.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/emptytrash.png b/build/htdocs/dist/themes/icons/default/16x16/places/emptytrash.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/emptytrash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-documents.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-documents.png new file mode 100644 index 0000000..17fd74a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-documents.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-download.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-download.png new file mode 100644 index 0000000..81f2656 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-download.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-music.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-music.png new file mode 100644 index 0000000..053b86a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-music.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-pictures.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-pictures.png new file mode 100644 index 0000000..a817065 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-pictures.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-publicshare.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-publicshare.png new file mode 100644 index 0000000..0a07993 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-publicshare.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-remote.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-remote.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-remote.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-saved-search.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-saved-search.png new file mode 100644 index 0000000..7b5cd15 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-saved-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-templates.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-templates.png new file mode 100644 index 0000000..69770dc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-templates.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder-videos.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder-videos.png new file mode 100644 index 0000000..4ee17cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder-videos.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder.png new file mode 100644 index 0000000..f808d75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/folder_home.png b/build/htdocs/dist/themes/icons/default/16x16/places/folder_home.png new file mode 100644 index 0000000..47e49b3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/folder_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-desktop.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-desktop.png new file mode 100644 index 0000000..a1b6806 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-directory.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-directory.png new file mode 100644 index 0000000..f808d75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ftp.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ftp.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ftp.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-home.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-home.png new file mode 100644 index 0000000..47e49b3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-network.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-network.png new file mode 100644 index 0000000..697c5ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-nfs.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-nfs.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-nfs.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-server.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-share.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-share.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-share.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-smb.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-smb.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-smb.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ssh.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ssh.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-ssh.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-trash-empty.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-trash-empty.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-fs-trash-empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-main-menu.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-main-menu.png new file mode 100644 index 0000000..dc7196d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-main-menu.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-nfs-server.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-nfs-server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-nfs-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-server.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-share.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-share.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-share.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-workgroup.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-workgroup.png new file mode 100644 index 0000000..697c5ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-mime-x-directory-smb-workgroup.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gnome-stock-trash.png b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-stock-trash.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gnome-stock-trash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/google-drive.png b/build/htdocs/dist/themes/icons/default/16x16/places/google-drive.png new file mode 100644 index 0000000..ec56287 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/google-drive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gtk-directory.png b/build/htdocs/dist/themes/icons/default/16x16/places/gtk-directory.png new file mode 100644 index 0000000..f808d75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gtk-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/gtk-network.png b/build/htdocs/dist/themes/icons/default/16x16/places/gtk-network.png new file mode 100644 index 0000000..697c5ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/gtk-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/inode-directory.png b/build/htdocs/dist/themes/icons/default/16x16/places/inode-directory.png new file mode 100644 index 0000000..f808d75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/inode-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/network-server.png b/build/htdocs/dist/themes/icons/default/16x16/places/network-server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/network-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/network-workgroup.png b/build/htdocs/dist/themes/icons/default/16x16/places/network-workgroup.png new file mode 100644 index 0000000..697c5ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/network-workgroup.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/network.png b/build/htdocs/dist/themes/icons/default/16x16/places/network.png new file mode 100644 index 0000000..04a75d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/network.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/network_local.png b/build/htdocs/dist/themes/icons/default/16x16/places/network_local.png new file mode 100644 index 0000000..697c5ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/network_local.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/novell-button.png b/build/htdocs/dist/themes/icons/default/16x16/places/novell-button.png new file mode 100644 index 0000000..dc7196d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/novell-button.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/onedrive.png b/build/htdocs/dist/themes/icons/default/16x16/places/onedrive.png new file mode 100644 index 0000000..85b9892 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/onedrive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/redhat-network-server.png b/build/htdocs/dist/themes/icons/default/16x16/places/redhat-network-server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/redhat-network-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/server.png b/build/htdocs/dist/themes/icons/default/16x16/places/server.png new file mode 100644 index 0000000..aadb1a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/server.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/start-here.png b/build/htdocs/dist/themes/icons/default/16x16/places/start-here.png new file mode 100644 index 0000000..dc7196d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/start-here.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/stock_folder.png b/build/htdocs/dist/themes/icons/default/16x16/places/stock_folder.png new file mode 100644 index 0000000..f808d75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/stock_folder.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/trashcan_empty.png b/build/htdocs/dist/themes/icons/default/16x16/places/trashcan_empty.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/trashcan_empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/user-bookmarks.png b/build/htdocs/dist/themes/icons/default/16x16/places/user-bookmarks.png new file mode 100644 index 0000000..e08c7be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/user-bookmarks.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/user-desktop.png b/build/htdocs/dist/themes/icons/default/16x16/places/user-desktop.png new file mode 100644 index 0000000..a1b6806 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/user-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/user-home.png b/build/htdocs/dist/themes/icons/default/16x16/places/user-home.png new file mode 100644 index 0000000..47e49b3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/user-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/user-trash.png b/build/htdocs/dist/themes/icons/default/16x16/places/user-trash.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/user-trash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/places/xfce-trash_empty.png b/build/htdocs/dist/themes/icons/default/16x16/places/xfce-trash_empty.png new file mode 100644 index 0000000..f403f93 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/places/xfce-trash_empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/appointment-missed.png b/build/htdocs/dist/themes/icons/default/16x16/status/appointment-missed.png new file mode 100644 index 0000000..51339f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/appointment-missed.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/appointment-soon.png b/build/htdocs/dist/themes/icons/default/16x16/status/appointment-soon.png new file mode 100644 index 0000000..f801693 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/appointment-soon.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-high.png b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-high.png new file mode 100644 index 0000000..583e26f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-low.png b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-low.png new file mode 100644 index 0000000..331af2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-medium.png b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-medium.png new file mode 100644 index 0000000..4383e35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-muted.png b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-muted.png new file mode 100644 index 0000000..b39a1b5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/audio-volume-muted.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/avatar-default.png b/build/htdocs/dist/themes/icons/default/16x16/status/avatar-default.png new file mode 100644 index 0000000..0d231ee Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/avatar-default.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution-charging.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution-charging.png new file mode 100644 index 0000000..ae57414 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution.png new file mode 100644 index 0000000..4c9c132 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-caution.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-empty.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-empty.png new file mode 100644 index 0000000..68b4d02 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charged.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charged.png new file mode 100644 index 0000000..6264182 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charged.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charging.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charging.png new file mode 100644 index 0000000..ee4e862 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-full.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full.png new file mode 100644 index 0000000..1f1314f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-good-charging.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-good-charging.png new file mode 100644 index 0000000..4291d53 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-good-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-good.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-good.png new file mode 100644 index 0000000..4d21410 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-good.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-low-charging.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-low-charging.png new file mode 100644 index 0000000..20f2d22 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-low-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-low.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-low.png new file mode 100644 index 0000000..4d00dc2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/battery-missing.png b/build/htdocs/dist/themes/icons/default/16x16/status/battery-missing.png new file mode 100644 index 0000000..56121af Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/battery-missing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/changes-allow.png b/build/htdocs/dist/themes/icons/default/16x16/status/changes-allow.png new file mode 100644 index 0000000..9716a05 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/changes-allow.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/changes-prevent.png b/build/htdocs/dist/themes/icons/default/16x16/status/changes-prevent.png new file mode 100644 index 0000000..1dc97d9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/changes-prevent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/computer-fail.png b/build/htdocs/dist/themes/icons/default/16x16/status/computer-fail.png new file mode 100644 index 0000000..3960c52 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/computer-fail.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/connect_creating.png b/build/htdocs/dist/themes/icons/default/16x16/status/connect_creating.png new file mode 100644 index 0000000..d3310c1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/connect_creating.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/connect_established.png b/build/htdocs/dist/themes/icons/default/16x16/status/connect_established.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/connect_established.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/connect_no.png b/build/htdocs/dist/themes/icons/default/16x16/status/connect_no.png new file mode 100644 index 0000000..e698da1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/connect_no.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/dialog-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-error.png new file mode 100644 index 0000000..0b0d8be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/dialog-information.png b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-information.png new file mode 100644 index 0000000..a90c024 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-information.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/dialog-password.png b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-password.png new file mode 100644 index 0000000..61da270 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-password.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/dialog-question.png b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-question.png new file mode 100644 index 0000000..b8fe1ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/dialog-warning.png b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-warning.png new file mode 100644 index 0000000..219432c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/edittrash.png b/build/htdocs/dist/themes/icons/default/16x16/status/edittrash.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/edittrash.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/error.png b/build/htdocs/dist/themes/icons/default/16x16/status/error.png new file mode 100644 index 0000000..0b0d8be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/folder-drag-accept.png b/build/htdocs/dist/themes/icons/default/16x16/status/folder-drag-accept.png new file mode 100644 index 0000000..40073dd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/folder-drag-accept.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/folder-open.png b/build/htdocs/dist/themes/icons/default/16x16/status/folder-open.png new file mode 100644 index 0000000..775979d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/folder-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/folder-visiting.png b/build/htdocs/dist/themes/icons/default/16x16/status/folder-visiting.png new file mode 100644 index 0000000..c273764 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/folder-visiting.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/folder_open.png b/build/htdocs/dist/themes/icons/default/16x16/status/folder_open.png new file mode 100644 index 0000000..775979d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/folder_open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-dev-wavelan-encrypted.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-dev-wavelan-encrypted.png new file mode 100644 index 0000000..4a92b2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-dev-wavelan-encrypted.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-accept.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-accept.png new file mode 100644 index 0000000..40073dd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-accept.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-visiting.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-visiting.png new file mode 100644 index 0000000..c273764 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-directory-visiting.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-loading-icon.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-loading-icon.png new file mode 100644 index 0000000..9966320 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-loading-icon.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-trash-full.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-trash-full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-fs-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-disconn.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-disconn.png new file mode 100644 index 0000000..e698da1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-disconn.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-error.png new file mode 100644 index 0000000..ac952ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-idle.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-idle.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-rx.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-rx.png new file mode 100644 index 0000000..a374062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-rx.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-tx.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-tx.png new file mode 100644 index 0000000..9cb4673 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-tx.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-txrx.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-txrx.png new file mode 100644 index 0000000..d3310c1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-netstatus-txrx.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gnome-stock-trash-full.png b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-stock-trash-full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gnome-stock-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-authentication.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-authentication.png new file mode 100644 index 0000000..61da270 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-authentication.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-error.png new file mode 100644 index 0000000..0b0d8be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-info.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-info.png new file mode 100644 index 0000000..a90c024 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-question.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-question.png new file mode 100644 index 0000000..b8fe1ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-warning.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-warning.png new file mode 100644 index 0000000..219432c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/gtk-missing-image.png b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-missing-image.png new file mode 100644 index 0000000..a86106e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/gtk-missing-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/image-loading.png b/build/htdocs/dist/themes/icons/default/16x16/status/image-loading.png new file mode 100644 index 0000000..9966320 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/image-loading.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/image-missing.png b/build/htdocs/dist/themes/icons/default/16x16/status/image-missing.png new file mode 100644 index 0000000..a86106e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/image-missing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/important.png b/build/htdocs/dist/themes/icons/default/16x16/status/important.png new file mode 100644 index 0000000..219432c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/important.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/info.png b/build/htdocs/dist/themes/icons/default/16x16/status/info.png new file mode 100644 index 0000000..a90c024 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/info.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-attachment.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-attachment.png new file mode 100644 index 0000000..3bd5dc0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-attachment.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-read.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-read.png new file mode 100644 index 0000000..94950a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-read.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-replied.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-replied.png new file mode 100644 index 0000000..b1f0b56 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-replied.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed-verified.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed-verified.png new file mode 100644 index 0000000..d879b16 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed-verified.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed.png new file mode 100644 index 0000000..16d6f1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-signed.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/mail-unread.png b/build/htdocs/dist/themes/icons/default/16x16/status/mail-unread.png new file mode 100644 index 0000000..7f81c36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/mail-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-repeat.png b/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-repeat.png new file mode 100644 index 0000000..a5b676b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-repeat.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-shuffle.png b/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-shuffle.png new file mode 100644 index 0000000..2477061 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/media-playlist-shuffle.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_critical.png b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_critical.png new file mode 100644 index 0000000..0b0d8be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_critical.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_info.png b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_info.png new file mode 100644 index 0000000..a90c024 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_info.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_warning.png b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_warning.png new file mode 100644 index 0000000..219432c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/messagebox_warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-high.png b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-high.png new file mode 100644 index 0000000..eaa708b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-low.png b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-low.png new file mode 100644 index 0000000..c6d5896 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-medium.png b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-medium.png new file mode 100644 index 0000000..cc80115 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-muted.png b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-muted.png new file mode 100644 index 0000000..d4937a9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/microphone-sensitivity-muted.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-error.png new file mode 100644 index 0000000..ac952ba Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-idle.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-idle.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-offline.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-offline.png new file mode 100644 index 0000000..e698da1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-offline.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-receive.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-receive.png new file mode 100644 index 0000000..a374062 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit-receive.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit-receive.png new file mode 100644 index 0000000..d3310c1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit.png new file mode 100644 index 0000000..9cb4673 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-transmit.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-wired-disconnected.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-wired-disconnected.png new file mode 100644 index 0000000..147a29f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-wired-disconnected.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/network-wireless-encrypted.png b/build/htdocs/dist/themes/icons/default/16x16/status/network-wireless-encrypted.png new file mode 100644 index 0000000..4a92b2e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/network-wireless-encrypted.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/nm-adhoc.png b/build/htdocs/dist/themes/icons/default/16x16/status/nm-adhoc.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/nm-adhoc.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wired.png b/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wired.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wired.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wireless.png b/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wireless.png new file mode 100644 index 0000000..cda5785 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/nm-device-wireless.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/nm-no-connection.png b/build/htdocs/dist/themes/icons/default/16x16/status/nm-no-connection.png new file mode 100644 index 0000000..e698da1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/nm-no-connection.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/non-starred.png b/build/htdocs/dist/themes/icons/default/16x16/status/non-starred.png new file mode 100644 index 0000000..03c35eb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/non-starred.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/printer-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/printer-error.png new file mode 100644 index 0000000..ce8db60 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/printer-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/printer-printing.png b/build/htdocs/dist/themes/icons/default/16x16/status/printer-printing.png new file mode 100644 index 0000000..7aded06 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/printer-printing.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/security-high.png b/build/htdocs/dist/themes/icons/default/16x16/status/security-high.png new file mode 100644 index 0000000..1dcdb75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/security-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/security-low.png b/build/htdocs/dist/themes/icons/default/16x16/status/security-low.png new file mode 100644 index 0000000..ccdcb1e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/security-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/security-medium.png b/build/htdocs/dist/themes/icons/default/16x16/status/security-medium.png new file mode 100644 index 0000000..e27c5a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/security-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/software-update-available.png b/build/htdocs/dist/themes/icons/default/16x16/status/software-update-available.png new file mode 100644 index 0000000..518414f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/software-update-available.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/software-update-urgent.png b/build/htdocs/dist/themes/icons/default/16x16/status/software-update-urgent.png new file mode 100644 index 0000000..99e31cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/software-update-urgent.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/starred.png b/build/htdocs/dist/themes/icons/default/16x16/status/starred.png new file mode 100644 index 0000000..3be364a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/starred.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder-excl.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder-excl.png new file mode 100644 index 0000000..51339f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder-excl.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder.png new file mode 100644 index 0000000..f801693 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_appointment-reminder.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_attach.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_attach.png new file mode 100644 index 0000000..3bd5dc0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_attach.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-error.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-error.png new file mode 100644 index 0000000..0b0d8be Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-info.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-info.png new file mode 100644 index 0000000..a90c024 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-question.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-question.png new file mode 100644 index 0000000..b8fe1ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-warning.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-warning.png new file mode 100644 index 0000000..219432c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-broken.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-broken.png new file mode 100644 index 0000000..ccdcb1e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-broken.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-ok.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-ok.png new file mode 100644 index 0000000..1dcdb75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-ok.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-open.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-open.png new file mode 100644 index 0000000..ccdcb1e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock.png new file mode 100644 index 0000000..e27c5a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-open.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-open.png new file mode 100644 index 0000000..94950a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-replied.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-replied.png new file mode 100644 index 0000000..b1f0b56 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-replied.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-unread.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-unread.png new file mode 100644 index 0000000..7f81c36 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_mail-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_open.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_open.png new file mode 100644 index 0000000..775979d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_open.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_repeat.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_repeat.png new file mode 100644 index 0000000..a5b676b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_repeat.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_shuffle.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_shuffle.png new file mode 100644 index 0000000..2477061 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_shuffle.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_trash_full.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_trash_full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_trash_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-0.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-0.png new file mode 100644 index 0000000..331af2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-0.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-max.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-max.png new file mode 100644 index 0000000..583e26f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-max.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-med.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-med.png new file mode 100644 index 0000000..4383e35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-med.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-min.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-min.png new file mode 100644 index 0000000..331af2f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-min.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-mute.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-mute.png new file mode 100644 index 0000000..b39a1b5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume-mute.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume.png new file mode 100644 index 0000000..583e26f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_volume.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-cloudy.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-cloudy.png new file mode 100644 index 0000000..ae4524c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-cloudy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-few-clouds.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-few-clouds.png new file mode 100644 index 0000000..ad7631b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-fog.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-fog.png new file mode 100644 index 0000000..fab8146 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-fog.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-clear.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-clear.png new file mode 100644 index 0000000..6d0ed5b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-few-clouds.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-few-clouds.png new file mode 100644 index 0000000..514c90b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-night-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-showers.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-showers.png new file mode 100644 index 0000000..902f585 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-showers.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-snow.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-snow.png new file mode 100644 index 0000000..d0e0d45 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-snow.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-storm.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-storm.png new file mode 100644 index 0000000..2a326ed Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-storm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-sunny.png b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-sunny.png new file mode 100644 index 0000000..a22bd73 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/stock_weather-sunny.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/sunny.png b/build/htdocs/dist/themes/icons/default/16x16/status/sunny.png new file mode 100644 index 0000000..a22bd73 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/sunny.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/task-due.png b/build/htdocs/dist/themes/icons/default/16x16/status/task-due.png new file mode 100644 index 0000000..97c8181 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/task-due.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/task-past-due.png b/build/htdocs/dist/themes/icons/default/16x16/status/task-past-due.png new file mode 100644 index 0000000..a8d66b4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/task-past-due.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/trashcan_full.png b/build/htdocs/dist/themes/icons/default/16x16/status/trashcan_full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/trashcan_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-available.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-available.png new file mode 100644 index 0000000..eb67717 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-available.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-away.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-away.png new file mode 100644 index 0000000..8e99e42 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-away.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-busy.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-busy.png new file mode 100644 index 0000000..90665a4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-busy.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-idle.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-idle.png new file mode 100644 index 0000000..f72565f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-invisible.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-invisible.png new file mode 100644 index 0000000..3075bb3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-invisible.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-offline.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-offline.png new file mode 100644 index 0000000..7566c3f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-offline.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/user-trash-full.png b/build/htdocs/dist/themes/icons/default/16x16/status/user-trash-full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/user-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear-night.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear-night.png new file mode 100644 index 0000000..6d0ed5b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear-night.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear.png new file mode 100644 index 0000000..a22bd73 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds-night.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds-night.png new file mode 100644 index 0000000..514c90b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds-night.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds.png new file mode 100644 index 0000000..ad7631b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-fog.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-fog.png new file mode 100644 index 0000000..fab8146 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-fog.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-overcast.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-overcast.png new file mode 100644 index 0000000..ae4524c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-overcast.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-severe-alert.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-severe-alert.png new file mode 100644 index 0000000..34d945b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-severe-alert.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers-scattered.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers-scattered.png new file mode 100644 index 0000000..7991b25 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers-scattered.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers.png new file mode 100644 index 0000000..902f585 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-showers.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-snow.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-snow.png new file mode 100644 index 0000000..d0e0d45 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-snow.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/weather-storm.png b/build/htdocs/dist/themes/icons/default/16x16/status/weather-storm.png new file mode 100644 index 0000000..2a326ed Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/weather-storm.png differ diff --git a/build/htdocs/dist/themes/icons/default/16x16/status/xfce-trash_full.png b/build/htdocs/dist/themes/icons/default/16x16/status/xfce-trash_full.png new file mode 100644 index 0000000..4a5278a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/16x16/status/xfce-trash_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/add.png b/build/htdocs/dist/themes/icons/default/32x32/actions/add.png new file mode 100644 index 0000000..184afa8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/add.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/address-book-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/address-book-new.png new file mode 100644 index 0000000..99aa2da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/address-book-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/application-exit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/application-exit.png new file mode 100644 index 0000000..c3f905e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/application-exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/appointment-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/appointment-new.png new file mode 100644 index 0000000..c5e20fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/appointment-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/appointment.png b/build/htdocs/dist/themes/icons/default/32x32/actions/appointment.png new file mode 100644 index 0000000..c5e20fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/appointment.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/back.png b/build/htdocs/dist/themes/icons/default/32x32/actions/back.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/back.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark-new.png new file mode 100644 index 0000000..aaf2fe2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark_add.png b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark_add.png new file mode 100644 index 0000000..aaf2fe2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmark_add.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/bookmarks_list_add.png b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmarks_list_add.png new file mode 100644 index 0000000..aaf2fe2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/bookmarks_list_add.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/bottom.png b/build/htdocs/dist/themes/icons/default/32x32/actions/bottom.png new file mode 100644 index 0000000..1bd33f2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/call-start.png b/build/htdocs/dist/themes/icons/default/32x32/actions/call-start.png new file mode 100644 index 0000000..7342af6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/call-start.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/call-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/call-stop.png new file mode 100644 index 0000000..00336c3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/call-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/centrejust.png b/build/htdocs/dist/themes/icons/default/32x32/actions/centrejust.png new file mode 100644 index 0000000..a7cbacf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/centrejust.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/contact-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/contact-new.png new file mode 100644 index 0000000..8785fda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/contact-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-new.png new file mode 100644 index 0000000..b7e3276 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-open-recent.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-open-recent.png new file mode 100644 index 0000000..eb7d222 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-open-recent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-open.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-open.png new file mode 100644 index 0000000..fce8c44 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-page-setup.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-page-setup.png new file mode 100644 index 0000000..22c8788 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-page-setup.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-print-preview.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-print-preview.png new file mode 100644 index 0000000..cae353c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-print.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-print.png new file mode 100644 index 0000000..3e69d95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-print.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-properties.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-properties.png new file mode 100644 index 0000000..b649d91 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert-rtl.png new file mode 100644 index 0000000..264ba19 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert.png new file mode 100644 index 0000000..2d6ee1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-revert.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-save-as.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-save-as.png new file mode 100644 index 0000000..b32b96c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-save.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-save.png new file mode 100644 index 0000000..db10f68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-save.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/document-send.png b/build/htdocs/dist/themes/icons/default/32x32/actions/document-send.png new file mode 100644 index 0000000..c92aec0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/document-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/down.png b/build/htdocs/dist/themes/icons/default/32x32/actions/down.png new file mode 100644 index 0000000..53cedf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/down.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-clear.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-clear.png new file mode 100644 index 0000000..6f9fa04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-copy.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-copy.png new file mode 100644 index 0000000..210c07a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-cut.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-cut.png new file mode 100644 index 0000000..d04f3ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-delete.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-delete.png new file mode 100644 index 0000000..72a1507 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find-replace.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find-replace.png new file mode 100644 index 0000000..b5b88e4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find.png new file mode 100644 index 0000000..8bd61a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-find.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-paste.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-paste.png new file mode 100644 index 0000000..1868224 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo-rtl.png new file mode 100644 index 0000000..ceb3115 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo.png new file mode 100644 index 0000000..063600d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-select-all.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-select-all.png new file mode 100644 index 0000000..ba8b523 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo-rtl.png new file mode 100644 index 0000000..9610d96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo.png new file mode 100644 index 0000000..ab01729 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/edit-undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/editclear.png b/build/htdocs/dist/themes/icons/default/32x32/actions/editclear.png new file mode 100644 index 0000000..6f9fa04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/editclear.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/editcopy.png b/build/htdocs/dist/themes/icons/default/32x32/actions/editcopy.png new file mode 100644 index 0000000..210c07a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/editcopy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/editcut.png b/build/htdocs/dist/themes/icons/default/32x32/actions/editcut.png new file mode 100644 index 0000000..d04f3ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/editcut.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/editdelete.png b/build/htdocs/dist/themes/icons/default/32x32/actions/editdelete.png new file mode 100644 index 0000000..72a1507 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/editdelete.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/editpaste.png b/build/htdocs/dist/themes/icons/default/32x32/actions/editpaste.png new file mode 100644 index 0000000..1868224 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/editpaste.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/exit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/exit.png new file mode 100644 index 0000000..c3f905e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/filefind.png b/build/htdocs/dist/themes/icons/default/32x32/actions/filefind.png new file mode 100644 index 0000000..8bd61a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/filefind.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/filenew.png b/build/htdocs/dist/themes/icons/default/32x32/actions/filenew.png new file mode 100644 index 0000000..b7e3276 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/filenew.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/fileopen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/fileopen.png new file mode 100644 index 0000000..fce8c44 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/fileopen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/fileprint.png b/build/htdocs/dist/themes/icons/default/32x32/actions/fileprint.png new file mode 100644 index 0000000..3e69d95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/fileprint.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/filequickprint.png b/build/htdocs/dist/themes/icons/default/32x32/actions/filequickprint.png new file mode 100644 index 0000000..cae353c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/filequickprint.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/filesave.png b/build/htdocs/dist/themes/icons/default/32x32/actions/filesave.png new file mode 100644 index 0000000..db10f68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/filesave.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/filesaveas.png b/build/htdocs/dist/themes/icons/default/32x32/actions/filesaveas.png new file mode 100644 index 0000000..b32b96c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/filesaveas.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/find.png b/build/htdocs/dist/themes/icons/default/32x32/actions/find.png new file mode 100644 index 0000000..8bd61a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/find.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/finish.png b/build/htdocs/dist/themes/icons/default/32x32/actions/finish.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/finish.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/folder-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/folder-new.png new file mode 100644 index 0000000..cdd34ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/folder-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/folder_new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/folder_new.png new file mode 100644 index 0000000..cdd34ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/folder_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less-rtl.png new file mode 100644 index 0000000..14f7a46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less.png new file mode 100644 index 0000000..c2e54ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-less.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more-rtl.png new file mode 100644 index 0000000..b30a0f4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more.png new file mode 100644 index 0000000..c506a71 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-indent-more.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-center.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-center.png new file mode 100644 index 0000000..a7cbacf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-fill.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-fill.png new file mode 100644 index 0000000..e660e29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-fill.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-left.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-left.png new file mode 100644 index 0000000..2aa1b0d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-right.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-right.png new file mode 100644 index 0000000..57cb607 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-justify-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-bold.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-bold.png new file mode 100644 index 0000000..fcf0f30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-ltr.png new file mode 100644 index 0000000..c8dc82a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-rtl.png new file mode 100644 index 0000000..f508cf5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-direction-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-italic.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-italic.png new file mode 100644 index 0000000..a8a5b17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-strikethrough.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-strikethrough.png new file mode 100644 index 0000000..9d8fafe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-underline.png b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-underline.png new file mode 100644 index 0000000..c3603e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/format-text-underline.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/forward.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-lockscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-lockscreen.png new file mode 100644 index 0000000..aec49c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-lockscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-logout.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-logout.png new file mode 100644 index 0000000..e835402 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-logout.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-run.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-run.png new file mode 100644 index 0000000..1284713 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-run.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-searchtool.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-searchtool.png new file mode 100644 index 0000000..bbb6931 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-searchtool.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-shutdown.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-shutdown.png new file mode 100644 index 0000000..1cd85cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-shutdown.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-fwd.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-fwd.png new file mode 100644 index 0000000..cd1f317 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-new.png new file mode 100644 index 0000000..8e6cbe0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-rpl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-rpl.png new file mode 100644 index 0000000..7da6250 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-rpl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-snd.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-snd.png new file mode 100644 index 0000000..069269b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-mail-snd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-indent.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-indent.png new file mode 100644 index 0000000..c506a71 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-indent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-unindent.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-unindent.png new file mode 100644 index 0000000..c2e54ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gnome-stock-text-unindent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-bottom.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-bottom.png new file mode 100644 index 0000000..1bd33f2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-down.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-down.png new file mode 100644 index 0000000..53cedf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-down.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-first-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-first-rtl.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-first-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-first.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-first.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-first.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-home.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-home.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-jump.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-jump.png new file mode 100644 index 0000000..76e23cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-jump.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-last-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-last-rtl.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-last-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-last.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-last.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-last.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-next-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-next-rtl.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-next-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-next.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-next.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-next.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous-rtl.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-previous.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-top.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-top.png new file mode 100644 index 0000000..5c2c4bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-top.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/go-up.png b/build/htdocs/dist/themes/icons/default/32x32/actions/go-up.png new file mode 100644 index 0000000..e13742a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/go-up.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gohome.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gohome.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gohome.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-about.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-about.png new file mode 100644 index 0000000..399d484 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-about.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-add.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-add.png new file mode 100644 index 0000000..184afa8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-add.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-bold.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-bold.png new file mode 100644 index 0000000..fcf0f30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cancel.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cancel.png new file mode 100644 index 0000000..3bc6298 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cancel.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-clear.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-clear.png new file mode 100644 index 0000000..6f9fa04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-close.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-close.png new file mode 100644 index 0000000..1c395e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-close.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-copy.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-copy.png new file mode 100644 index 0000000..210c07a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cut.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cut.png new file mode 100644 index 0000000..d04f3ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-delete.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-delete.png new file mode 100644 index 0000000..72a1507 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-execute.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-execute.png new file mode 100644 index 0000000..1284713 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-execute.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find-and-replace.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find-and-replace.png new file mode 100644 index 0000000..b5b88e4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find-and-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find.png new file mode 100644 index 0000000..8bd61a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-find.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-fullscreen.png new file mode 100644 index 0000000..8a7cbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-ltr.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-rtl.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-back-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-down.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-down.png new file mode 100644 index 0000000..53cedf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-down.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-ltr.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-rtl.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-up.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-up.png new file mode 100644 index 0000000..e13742a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-go-up.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-bottom.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-bottom.png new file mode 100644 index 0000000..1bd33f2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-ltr.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-rtl.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-first-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-ltr.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-rtl.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-last-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-top.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-top.png new file mode 100644 index 0000000..5c2c4bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-goto-top.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-help.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-help.png new file mode 100644 index 0000000..88c0b9b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-home.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-home.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-ltr.png new file mode 100644 index 0000000..c506a71 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-rtl.png new file mode 100644 index 0000000..c2e54ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-indent-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-italic.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-italic.png new file mode 100644 index 0000000..a8a5b17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-ltr.png new file mode 100644 index 0000000..76e23cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-rtl.png new file mode 100644 index 0000000..76e23cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-jump-to-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-center.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-center.png new file mode 100644 index 0000000..a7cbacf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-fill.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-fill.png new file mode 100644 index 0000000..e660e29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-fill.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-left.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-left.png new file mode 100644 index 0000000..2aa1b0d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-right.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-right.png new file mode 100644 index 0000000..57cb607 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-justify-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-leave-fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-leave-fullscreen.png new file mode 100644 index 0000000..75bd581 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-leave-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-ltr.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-rtl.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-ltr.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-rtl.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-next-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-pause.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-pause.png new file mode 100644 index 0000000..4955542 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-play-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-play-ltr.png new file mode 100644 index 0000000..6992d7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-play-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-ltr.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-rtl.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-previous-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-record.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-record.png new file mode 100644 index 0000000..8fb3dfc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-record.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-ltr.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-rtl.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-rewind-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-stop.png new file mode 100644 index 0000000..bfd56f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-media-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-new.png new file mode 100644 index 0000000..b7e3276 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-open.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-open.png new file mode 100644 index 0000000..fce8c44 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-paste.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-paste.png new file mode 100644 index 0000000..1868224 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print-preview.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print-preview.png new file mode 100644 index 0000000..cae353c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print.png new file mode 100644 index 0000000..3e69d95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-print.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-properties.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-properties.png new file mode 100644 index 0000000..b649d91 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-quit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-quit.png new file mode 100644 index 0000000..c3f905e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-quit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-redo-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-redo-ltr.png new file mode 100644 index 0000000..063600d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-redo-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-refresh.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-refresh.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-remove.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-remove.png new file mode 100644 index 0000000..9af91bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-ltr.png new file mode 100644 index 0000000..2d6ee1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-rtl.png new file mode 100644 index 0000000..2d6ee1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-revert-to-saved-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save-as.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save-as.png new file mode 100644 index 0000000..b32b96c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save.png new file mode 100644 index 0000000..db10f68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-save.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-select-all.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-select-all.png new file mode 100644 index 0000000..ba8b523 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-ascending.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-ascending.png new file mode 100644 index 0000000..16fb624 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-ascending.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-descending.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-descending.png new file mode 100644 index 0000000..e88bc10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-sort-descending.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-spell-check.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-spell-check.png new file mode 100644 index 0000000..a5419ad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-spell-check.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-stop.png new file mode 100644 index 0000000..3bc6298 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-strikethrough.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-strikethrough.png new file mode 100644 index 0000000..9d8fafe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-underline.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-underline.png new file mode 100644 index 0000000..c3603e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-underline.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-undo-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-undo-ltr.png new file mode 100644 index 0000000..ab01729 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-undo-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-ltr.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-ltr.png new file mode 100644 index 0000000..c2e54ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-ltr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-rtl.png new file mode 100644 index 0000000..c506a71 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-unindent-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-100.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-100.png new file mode 100644 index 0000000..1d948db Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-100.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-fit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-fit.png new file mode 100644 index 0000000..f584e67 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-fit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-in.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-in.png new file mode 100644 index 0000000..c172457 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-out.png b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-out.png new file mode 100644 index 0000000..7fde3bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/gtk-zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/help-about.png b/build/htdocs/dist/themes/icons/default/32x32/actions/help-about.png new file mode 100644 index 0000000..399d484 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/help-about.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/help-contents.png b/build/htdocs/dist/themes/icons/default/32x32/actions/help-contents.png new file mode 100644 index 0000000..88c0b9b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/help-contents.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/help-faq.png b/build/htdocs/dist/themes/icons/default/32x32/actions/help-faq.png new file mode 100644 index 0000000..75295e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/help-faq.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/help.png b/build/htdocs/dist/themes/icons/default/32x32/actions/help.png new file mode 100644 index 0000000..88c0b9b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/help.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/insert-image.png b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-image.png new file mode 100644 index 0000000..f5cd8da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/insert-link.png b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-link.png new file mode 100644 index 0000000..42a8924 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-link.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/insert-object.png b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-object.png new file mode 100644 index 0000000..2a5c45e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-object.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/insert-text.png b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-text.png new file mode 100644 index 0000000..f56e856 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/insert-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/kfind.png b/build/htdocs/dist/themes/icons/default/32x32/actions/kfind.png new file mode 100644 index 0000000..bbb6931 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/kfind.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/kfm_home.png b/build/htdocs/dist/themes/icons/default/32x32/actions/kfm_home.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/kfm_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/leftjust.png b/build/htdocs/dist/themes/icons/default/32x32/actions/leftjust.png new file mode 100644 index 0000000..2aa1b0d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/leftjust.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/list-add.png b/build/htdocs/dist/themes/icons/default/32x32/actions/list-add.png new file mode 100644 index 0000000..184afa8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/list-add.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/list-remove.png b/build/htdocs/dist/themes/icons/default/32x32/actions/list-remove.png new file mode 100644 index 0000000..9af91bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/list-remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/lock.png b/build/htdocs/dist/themes/icons/default/32x32/actions/lock.png new file mode 100644 index 0000000..aec49c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-forward.png new file mode 100644 index 0000000..cd1f317 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-important.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-important.png new file mode 100644 index 0000000..5db80bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-important.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-junk.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-junk.png new file mode 100644 index 0000000..8f00a8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-junk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-notjunk.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-notjunk.png new file mode 100644 index 0000000..c09c56a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-notjunk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-read.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-read.png new file mode 100644 index 0000000..32f2add Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-read.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-unread.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-unread.png new file mode 100644 index 0000000..261bb7c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-mark-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-message-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-message-new.png new file mode 100644 index 0000000..8e6cbe0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-message-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-all.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-all.png new file mode 100644 index 0000000..f2531bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-sender.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-sender.png new file mode 100644 index 0000000..7da6250 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-reply-sender.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send-receive.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send-receive.png new file mode 100644 index 0000000..ea61e12 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send.png new file mode 100644 index 0000000..069269b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_forward.png new file mode 100644 index 0000000..cd1f317 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_new.png new file mode 100644 index 0000000..8e6cbe0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_reply.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_reply.png new file mode 100644 index 0000000..7da6250 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_reply.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_replyall.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_replyall.png new file mode 100644 index 0000000..f2531bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_replyall.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_send.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_send.png new file mode 100644 index 0000000..069269b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_send.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/mail_spam.png b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_spam.png new file mode 100644 index 0000000..8f00a8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/mail_spam.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-eject.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-eject.png new file mode 100644 index 0000000..63868b3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-eject.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-pause.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-pause.png new file mode 100644 index 0000000..4955542 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start-rtl.png new file mode 100644 index 0000000..177f084 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start.png new file mode 100644 index 0000000..6992d7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-start.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-stop.png new file mode 100644 index 0000000..bfd56f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-playback-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-record.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-record.png new file mode 100644 index 0000000..8fb3dfc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-record.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward-rtl.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-backward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward-rtl.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-seek-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward-rtl.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-backward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward-rtl.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward-rtl.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward-rtl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/media-skip-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/next.png b/build/htdocs/dist/themes/icons/default/32x32/actions/next.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/next.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-horizontal.png b/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-horizontal.png new file mode 100644 index 0000000..8172ae9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-horizontal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-vertical.png b/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-vertical.png new file mode 100644 index 0000000..26c3716 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/object-flip-vertical.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-left.png b/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-left.png new file mode 100644 index 0000000..b792480 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-left.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-right.png b/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-right.png new file mode 100644 index 0000000..da255ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/object-rotate-right.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_eject.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_eject.png new file mode 100644 index 0000000..63868b3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_eject.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_end.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_end.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_end.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_fwd.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_fwd.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_pause.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_pause.png new file mode 100644 index 0000000..4955542 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_play.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_play.png new file mode 100644 index 0000000..6992d7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_play.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_record.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_record.png new file mode 100644 index 0000000..8fb3dfc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_record.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_rew.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_rew.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_rew.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_start.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_start.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_start.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/player_stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/player_stop.png new file mode 100644 index 0000000..bfd56f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/player_stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/previous.png b/build/htdocs/dist/themes/icons/default/32x32/actions/previous.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/previous.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/process-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/process-stop.png new file mode 100644 index 0000000..3bc6298 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/process-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/redhat-home.png b/build/htdocs/dist/themes/icons/default/32x32/actions/redhat-home.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/redhat-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/redo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/redo.png new file mode 100644 index 0000000..063600d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/reload.png b/build/htdocs/dist/themes/icons/default/32x32/actions/reload.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/reload.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/reload3.png b/build/htdocs/dist/themes/icons/default/32x32/actions/reload3.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/reload3.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/reload_all_tabs.png b/build/htdocs/dist/themes/icons/default/32x32/actions/reload_all_tabs.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/reload_all_tabs.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/reload_page.png b/build/htdocs/dist/themes/icons/default/32x32/actions/reload_page.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/reload_page.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/remove.png b/build/htdocs/dist/themes/icons/default/32x32/actions/remove.png new file mode 100644 index 0000000..9af91bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/remove.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/revert.png b/build/htdocs/dist/themes/icons/default/32x32/actions/revert.png new file mode 100644 index 0000000..2d6ee1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/revert.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/rightjust.png b/build/htdocs/dist/themes/icons/default/32x32/actions/rightjust.png new file mode 100644 index 0000000..57cb607 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/rightjust.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/search.png b/build/htdocs/dist/themes/icons/default/32x32/actions/search.png new file mode 100644 index 0000000..bbb6931 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/search.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/start.png b/build/htdocs/dist/themes/icons/default/32x32/actions/start.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/start.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_about.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_about.png new file mode 100644 index 0000000..399d484 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_about.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_add-bookmark.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_add-bookmark.png new file mode 100644 index 0000000..aaf2fe2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_add-bookmark.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_bottom.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_bottom.png new file mode 100644 index 0000000..1bd33f2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_bottom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_close.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_close.png new file mode 100644 index 0000000..1c395e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_close.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_copy.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_copy.png new file mode 100644 index 0000000..210c07a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_copy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_cut.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_cut.png new file mode 100644 index 0000000..d04f3ae Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_cut.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_delete.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_delete.png new file mode 100644 index 0000000..72a1507 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_delete.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_down.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_down.png new file mode 100644 index 0000000..53cedf0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_down.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_file-properites.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_file-properites.png new file mode 100644 index 0000000..b649d91 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_file-properites.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_first.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_first.png new file mode 100644 index 0000000..5d720fb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_first.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_fullscreen.png new file mode 100644 index 0000000..8a7cbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help-add-bookmark.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help-add-bookmark.png new file mode 100644 index 0000000..aaf2fe2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help-add-bookmark.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help.png new file mode 100644 index 0000000..88c0b9b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_help.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_home.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_home.png new file mode 100644 index 0000000..8c848bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_last.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_last.png new file mode 100644 index 0000000..4eb5b75 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_last.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_leave-fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_leave-fullscreen.png new file mode 100644 index 0000000..75bd581 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_leave-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_left.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_left.png new file mode 100644 index 0000000..0df44ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_left.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-compose.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-compose.png new file mode 100644 index 0000000..8e6cbe0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-compose.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-forward.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-forward.png new file mode 100644 index 0000000..cd1f317 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-forward.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply-to-all.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply-to-all.png new file mode 100644 index 0000000..f2531bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply-to-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply.png new file mode 100644 index 0000000..7da6250 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-reply.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send-receive.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send-receive.png new file mode 100644 index 0000000..ea61e12 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send.png new file mode 100644 index 0000000..069269b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_mail-send.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-fwd.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-fwd.png new file mode 100644 index 0000000..8a84058 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-fwd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-next.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-next.png new file mode 100644 index 0000000..6afee8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-next.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-pause.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-pause.png new file mode 100644 index 0000000..4955542 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-pause.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-play.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-play.png new file mode 100644 index 0000000..6992d7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-play.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-prev.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-prev.png new file mode 100644 index 0000000..5e7b3a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-prev.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rec.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rec.png new file mode 100644 index 0000000..8fb3dfc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rec.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rew.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rew.png new file mode 100644 index 0000000..18bb10a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-rew.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-stop.png new file mode 100644 index 0000000..bfd56f8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_media-stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-address-book.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-address-book.png new file mode 100644 index 0000000..99aa2da Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-address-book.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-appointment.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-appointment.png new file mode 100644 index 0000000..c5e20fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-appointment.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-bcard.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-bcard.png new file mode 100644 index 0000000..8785fda Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-bcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-dir.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-dir.png new file mode 100644 index 0000000..cdd34ef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-dir.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-text.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-text.png new file mode 100644 index 0000000..b7e3276 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-window.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-window.png new file mode 100644 index 0000000..55962a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_new-window.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_paste.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_paste.png new file mode 100644 index 0000000..1868224 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_paste.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-preview.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-preview.png new file mode 100644 index 0000000..cae353c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-setup.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-setup.png new file mode 100644 index 0000000..22c8788 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print-setup.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print.png new file mode 100644 index 0000000..3e69d95 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_print.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_properties.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_properties.png new file mode 100644 index 0000000..b649d91 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_properties.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_redo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_redo.png new file mode 100644 index 0000000..063600d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_redo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_refresh.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_refresh.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_right.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_right.png new file mode 100644 index 0000000..3b7d049 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_right.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save-as.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save-as.png new file mode 100644 index 0000000..b32b96c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save-as.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save.png new file mode 100644 index 0000000..db10f68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_save.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search-and-replace.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search-and-replace.png new file mode 100644 index 0000000..b5b88e4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search-and-replace.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search.png new file mode 100644 index 0000000..8bd61a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_search.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_select-all.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_select-all.png new file mode 100644 index 0000000..ba8b523 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_select-all.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spam.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spam.png new file mode 100644 index 0000000..8f00a8b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spam.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spellcheck.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spellcheck.png new file mode 100644 index 0000000..a5419ad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_spellcheck.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_stop.png new file mode 100644 index 0000000..3bc6298 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text-strikethrough.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text-strikethrough.png new file mode 100644 index 0000000..9d8fafe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text-strikethrough.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_bold.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_bold.png new file mode 100644 index 0000000..fcf0f30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_center.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_center.png new file mode 100644 index 0000000..a7cbacf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_center.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_indent.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_indent.png new file mode 100644 index 0000000..c506a71 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_indent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_italic.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_italic.png new file mode 100644 index 0000000..a8a5b17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_justify.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_justify.png new file mode 100644 index 0000000..e660e29 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_justify.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_left.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_left.png new file mode 100644 index 0000000..2aa1b0d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_left.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_right.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_right.png new file mode 100644 index 0000000..57cb607 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_right.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_underlined.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_underlined.png new file mode 100644 index 0000000..c3603e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_underlined.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_unindent.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_unindent.png new file mode 100644 index 0000000..c2e54ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_text_unindent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_top.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_top.png new file mode 100644 index 0000000..5c2c4bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_top.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_undo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_undo.png new file mode 100644 index 0000000..ab01729 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_up.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_up.png new file mode 100644 index 0000000..e13742a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_up.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-1.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-1.png new file mode 100644 index 0000000..1d948db Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-1.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-in.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-in.png new file mode 100644 index 0000000..c172457 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-out.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-out.png new file mode 100644 index 0000000..7fde3bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-page.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-page.png new file mode 100644 index 0000000..f584e67 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stock_zoom-page.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/stop.png b/build/htdocs/dist/themes/icons/default/32x32/actions/stop.png new file mode 100644 index 0000000..3bc6298 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/stop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/system-lock-screen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/system-lock-screen.png new file mode 100644 index 0000000..aec49c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/system-lock-screen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/system-log-out.png b/build/htdocs/dist/themes/icons/default/32x32/actions/system-log-out.png new file mode 100644 index 0000000..e835402 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/system-log-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/system-run.png b/build/htdocs/dist/themes/icons/default/32x32/actions/system-run.png new file mode 100644 index 0000000..1284713 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/system-run.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/system-search.png b/build/htdocs/dist/themes/icons/default/32x32/actions/system-search.png new file mode 100644 index 0000000..bbb6931 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/system-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/system-shutdown.png b/build/htdocs/dist/themes/icons/default/32x32/actions/system-shutdown.png new file mode 100644 index 0000000..1cd85cd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/system-shutdown.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/text_bold.png b/build/htdocs/dist/themes/icons/default/32x32/actions/text_bold.png new file mode 100644 index 0000000..fcf0f30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/text_bold.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/text_italic.png b/build/htdocs/dist/themes/icons/default/32x32/actions/text_italic.png new file mode 100644 index 0000000..a8a5b17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/text_italic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/text_strike.png b/build/htdocs/dist/themes/icons/default/32x32/actions/text_strike.png new file mode 100644 index 0000000..9d8fafe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/text_strike.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/text_under.png b/build/htdocs/dist/themes/icons/default/32x32/actions/text_under.png new file mode 100644 index 0000000..c3603e6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/text_under.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/tools-check-spelling.png b/build/htdocs/dist/themes/icons/default/32x32/actions/tools-check-spelling.png new file mode 100644 index 0000000..a5419ad Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/tools-check-spelling.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/top.png b/build/htdocs/dist/themes/icons/default/32x32/actions/top.png new file mode 100644 index 0000000..5c2c4bb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/top.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/undo.png b/build/htdocs/dist/themes/icons/default/32x32/actions/undo.png new file mode 100644 index 0000000..ab01729 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/undo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/up.png b/build/htdocs/dist/themes/icons/default/32x32/actions/up.png new file mode 100644 index 0000000..e13742a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/up.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/view-fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/view-fullscreen.png new file mode 100644 index 0000000..8a7cbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/view-fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/view-refresh.png b/build/htdocs/dist/themes/icons/default/32x32/actions/view-refresh.png new file mode 100644 index 0000000..e0ccac7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/view-refresh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/view-restore.png b/build/htdocs/dist/themes/icons/default/32x32/actions/view-restore.png new file mode 100644 index 0000000..75bd581 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/view-restore.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-ascending.png b/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-ascending.png new file mode 100644 index 0000000..16fb624 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-ascending.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-descending.png b/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-descending.png new file mode 100644 index 0000000..e88bc10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/view-sort-descending.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag+.png b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag+.png new file mode 100644 index 0000000..c172457 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag+.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag-.png b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag-.png new file mode 100644 index 0000000..7fde3bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag-.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag1.png b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag1.png new file mode 100644 index 0000000..1d948db Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmag1.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/viewmagfit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmagfit.png new file mode 100644 index 0000000..f584e67 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/viewmagfit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/window-close.png b/build/htdocs/dist/themes/icons/default/32x32/actions/window-close.png new file mode 100644 index 0000000..1c395e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/window-close.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/window-new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/window-new.png new file mode 100644 index 0000000..55962a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/window-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/window_fullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/window_fullscreen.png new file mode 100644 index 0000000..8a7cbc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/window_fullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/window_new.png b/build/htdocs/dist/themes/icons/default/32x32/actions/window_new.png new file mode 100644 index 0000000..55962a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/window_new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/window_nofullscreen.png b/build/htdocs/dist/themes/icons/default/32x32/actions/window_nofullscreen.png new file mode 100644 index 0000000..75bd581 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/window_nofullscreen.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-exit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-exit.png new file mode 100644 index 0000000..c3f905e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-exit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-lock.png b/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-lock.png new file mode 100644 index 0000000..aec49c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/xfce-system-lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-best-fit.png b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-best-fit.png new file mode 100644 index 0000000..f584e67 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-best-fit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-fit-best.png b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-fit-best.png new file mode 100644 index 0000000..f584e67 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-fit-best.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-in.png b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-in.png new file mode 100644 index 0000000..c172457 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-in.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-original.png b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-original.png new file mode 100644 index 0000000..1d948db Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-original.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-out.png b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-out.png new file mode 100644 index 0000000..7fde3bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/actions/zoom-out.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/animations/gnome-spinner.png b/build/htdocs/dist/themes/icons/default/32x32/animations/gnome-spinner.png new file mode 100644 index 0000000..6ee362c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/animations/gnome-spinner.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/animations/process-working.png b/build/htdocs/dist/themes/icons/default/32x32/animations/process-working.png new file mode 100644 index 0000000..6ee362c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/animations/process-working.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/access.png b/build/htdocs/dist/themes/icons/default/32x32/apps/access.png new file mode 100644 index 0000000..7a02b28 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/access.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/accessibility-directory.png b/build/htdocs/dist/themes/icons/default/32x32/apps/accessibility-directory.png new file mode 100644 index 0000000..7a02b28 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/accessibility-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-calculator.png b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-calculator.png new file mode 100644 index 0000000..0bd8d96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-calculator.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-character-map.png b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-character-map.png new file mode 100644 index 0000000..52616a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-character-map.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-dictionary.png b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-dictionary.png new file mode 100644 index 0000000..0f165d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-dictionary.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-text-editor.png b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-text-editor.png new file mode 100644 index 0000000..f4891bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/accessories-text-editor.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/applets-screenshooter.png b/build/htdocs/dist/themes/icons/default/32x32/apps/applets-screenshooter.png new file mode 100644 index 0000000..fb5ed4d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/applets-screenshooter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/arts.png b/build/htdocs/dist/themes/icons/default/32x32/apps/arts.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/arts.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/background.png b/build/htdocs/dist/themes/icons/default/32x32/apps/background.png new file mode 100644 index 0000000..cfdf28c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/background.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/calc.png b/build/htdocs/dist/themes/icons/default/32x32/apps/calc.png new file mode 100644 index 0000000..0bd8d96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/config-language.png b/build/htdocs/dist/themes/icons/default/32x32/apps/config-language.png new file mode 100644 index 0000000..c6b9a68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/config-language.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/config-users.png b/build/htdocs/dist/themes/icons/default/32x32/apps/config-users.png new file mode 100644 index 0000000..7371f18 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/config-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/file-manager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/file-manager.png new file mode 100644 index 0000000..011affb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/file-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/fonts.png b/build/htdocs/dist/themes/icons/default/32x32/apps/fonts.png new file mode 100644 index 0000000..f1c9a14 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/fonts.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-calculator.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-calculator.png new file mode 100644 index 0000000..0bd8d96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-calculator.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-character-map.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-character-map.png new file mode 100644 index 0000000..52616a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-character-map.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-help.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-help.png new file mode 100644 index 0000000..91b0c90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-mixer.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-mixer.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-mixer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-monitor.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-monitor.png new file mode 100644 index 0000000..14cc6a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-monitor.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel-notification-area.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel-notification-area.png new file mode 100644 index 0000000..f842985 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel-notification-area.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel.png new file mode 100644 index 0000000..3d12867 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-panel.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-remote-desktop.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-remote-desktop.png new file mode 100644 index 0000000..0c93ab9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-remote-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-accessibility-technologies.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-accessibility-technologies.png new file mode 100644 index 0000000..7a02b28 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-accessibility-technologies.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-background.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-background.png new file mode 100644 index 0000000..cfdf28c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-background.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-font.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-font.png new file mode 100644 index 0000000..f1c9a14 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-font.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-keybindings.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-keybindings.png new file mode 100644 index 0000000..fd1eb8c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-keybindings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-theme.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-theme.png new file mode 100644 index 0000000..78ec52e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-settings-theme.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-terminal.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-terminal.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-window-manager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-window-manager.png new file mode 100644 index 0000000..0cc63bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gnome-window-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/gucharmap.png b/build/htdocs/dist/themes/icons/default/32x32/apps/gucharmap.png new file mode 100644 index 0000000..52616a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/gucharmap.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/help-browser.png b/build/htdocs/dist/themes/icons/default/32x32/apps/help-browser.png new file mode 100644 index 0000000..91b0c90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/help-browser.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kcalc.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kcalc.png new file mode 100644 index 0000000..0bd8d96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kcalc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kcharselect.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kcharselect.png new file mode 100644 index 0000000..52616a7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kcharselect.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kcmkwm.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kcmkwm.png new file mode 100644 index 0000000..0cc63bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kcmkwm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kcmsound.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kcmsound.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kcmsound.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kedit.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kedit.png new file mode 100644 index 0000000..f4891bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kedit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/key_bindings.png b/build/htdocs/dist/themes/icons/default/32x32/apps/key_bindings.png new file mode 100644 index 0000000..fd1eb8c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/key_bindings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kfm.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kfm.png new file mode 100644 index 0000000..011affb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kfm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/khelpcenter.png b/build/htdocs/dist/themes/icons/default/32x32/apps/khelpcenter.png new file mode 100644 index 0000000..91b0c90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/khelpcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/konsole.png b/build/htdocs/dist/themes/icons/default/32x32/apps/konsole.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/konsole.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/krfb.png b/build/htdocs/dist/themes/icons/default/32x32/apps/krfb.png new file mode 100644 index 0000000..0c93ab9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/krfb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kscreensaver.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kscreensaver.png new file mode 100644 index 0000000..8a5aa96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kscreensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/ksysguard.png b/build/htdocs/dist/themes/icons/default/32x32/apps/ksysguard.png new file mode 100644 index 0000000..14cc6a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/ksysguard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kuser.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kuser.png new file mode 100644 index 0000000..7371f18 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kuser.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/kwin.png b/build/htdocs/dist/themes/icons/default/32x32/apps/kwin.png new file mode 100644 index 0000000..0cc63bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/kwin.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-base.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-base.png new file mode 100644 index 0000000..549bcb7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-base.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-calc.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-calc.png new file mode 100644 index 0000000..162f69c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-draw.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-draw.png new file mode 100644 index 0000000..2e05ffe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-draw.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-impress.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-impress.png new file mode 100644 index 0000000..a046ed3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-main.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-main.png new file mode 100644 index 0000000..dba5f4e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-main.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-math.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-math.png new file mode 100644 index 0000000..f392014 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-math.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-printeradmin.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-printeradmin.png new file mode 100644 index 0000000..05cfd5f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-printeradmin.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-startcenter.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-startcenter.png new file mode 100644 index 0000000..dba5f4e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-startcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-writer.png b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-writer.png new file mode 100644 index 0000000..1942e73 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/libreoffice34-writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/locale.png b/build/htdocs/dist/themes/icons/default/32x32/apps/locale.png new file mode 100644 index 0000000..c6b9a68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/locale.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia-volume-control.png b/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia-volume-control.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia-volume-control.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia.png b/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/openterm.png b/build/htdocs/dist/themes/icons/default/32x32/apps/openterm.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/openterm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-accessibility.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-accessibility.png new file mode 100644 index 0000000..7a02b28 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-accessibility.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-display.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-display.png new file mode 100644 index 0000000..389b408 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-font.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-font.png new file mode 100644 index 0000000..f1c9a14 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-font.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard-shortcuts.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard-shortcuts.png new file mode 100644 index 0000000..fd1eb8c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard-shortcuts.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard.png new file mode 100644 index 0000000..eeaa121 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-locale.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-locale.png new file mode 100644 index 0000000..c6b9a68 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-locale.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-remote-desktop.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-remote-desktop.png new file mode 100644 index 0000000..0c93ab9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-remote-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-screensaver.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-screensaver.png new file mode 100644 index 0000000..8a5aa96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-screensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-theme.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-theme.png new file mode 100644 index 0000000..78ec52e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-theme.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-wallpaper.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-wallpaper.png new file mode 100644 index 0000000..cfdf28c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-desktop-wallpaper.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-system-windows.png b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-system-windows.png new file mode 100644 index 0000000..0cc63bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/preferences-system-windows.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/redhat-filemanager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/redhat-filemanager.png new file mode 100644 index 0000000..011affb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/redhat-filemanager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/screensaver.png b/build/htdocs/dist/themes/icons/default/32x32/apps/screensaver.png new file mode 100644 index 0000000..8a5aa96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/screensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/style.png b/build/htdocs/dist/themes/icons/default/32x32/apps/style.png new file mode 100644 index 0000000..78ec52e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/style.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/susehelpcenter.png b/build/htdocs/dist/themes/icons/default/32x32/apps/susehelpcenter.png new file mode 100644 index 0000000..91b0c90 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/susehelpcenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/system-config-users.png b/build/htdocs/dist/themes/icons/default/32x32/apps/system-config-users.png new file mode 100644 index 0000000..7371f18 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/system-config-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/system-file-manager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/system-file-manager.png new file mode 100644 index 0000000..011affb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/system-file-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-install.png b/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-install.png new file mode 100644 index 0000000..ba2e42d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-install.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-update.png b/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-update.png new file mode 100644 index 0000000..b494ba0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/system-software-update.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/system-users.png b/build/htdocs/dist/themes/icons/default/32x32/apps/system-users.png new file mode 100644 index 0000000..7371f18 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/system-users.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/terminal.png b/build/htdocs/dist/themes/icons/default/32x32/apps/terminal.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/text-editor.png b/build/htdocs/dist/themes/icons/default/32x32/apps/text-editor.png new file mode 100644 index 0000000..f4891bd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/text-editor.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/update-manager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/update-manager.png new file mode 100644 index 0000000..b494ba0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/update-manager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/user-info.png b/build/htdocs/dist/themes/icons/default/32x32/apps/user-info.png new file mode 100644 index 0000000..9206ea0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/user-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-system-monitor.png b/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-system-monitor.png new file mode 100644 index 0000000..14cc6a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-system-monitor.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-terminal.png b/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-terminal.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/utilities-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/volume-knob.png b/build/htdocs/dist/themes/icons/default/32x32/apps/volume-knob.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/volume-knob.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/wallpaper.png b/build/htdocs/dist/themes/icons/default/32x32/apps/wallpaper.png new file mode 100644 index 0000000..cfdf28c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/wallpaper.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/web-browser.png b/build/htdocs/dist/themes/icons/default/32x32/apps/web-browser.png new file mode 100644 index 0000000..074fa05 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/web-browser.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-filemanager.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-filemanager.png new file mode 100644 index 0000000..011affb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-filemanager.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-terminal.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-terminal.png new file mode 100644 index 0000000..95a45fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce-terminal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-backdrop.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-backdrop.png new file mode 100644 index 0000000..cfdf28c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-backdrop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-mixer.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-mixer.png new file mode 100644 index 0000000..6925485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xfce4-mixer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xfwm4.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xfwm4.png new file mode 100644 index 0000000..0cc63bc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xfwm4.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/xscreensaver.png b/build/htdocs/dist/themes/icons/default/32x32/apps/xscreensaver.png new file mode 100644 index 0000000..8a5aa96 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/xscreensaver.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/apps/zen-icon.png b/build/htdocs/dist/themes/icons/default/32x32/apps/zen-icon.png new file mode 100644 index 0000000..b494ba0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/apps/zen-icon.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-accessories.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-accessories.png new file mode 100644 index 0000000..d77ea92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-accessories.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-development.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-development.png new file mode 100644 index 0000000..3450750 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-development.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-engineering.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-engineering.png new file mode 100644 index 0000000..050ccef Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-engineering.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-games.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-games.png new file mode 100644 index 0000000..06abec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-graphics.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-graphics.png new file mode 100644 index 0000000..f74f540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-internet.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-internet.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-multimedia.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-multimedia.png new file mode 100644 index 0000000..f21cff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-office.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-office.png new file mode 100644 index 0000000..9287851 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-other.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-other.png new file mode 100644 index 0000000..729eb0f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-science.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-science.png new file mode 100644 index 0000000..2958f3e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-science.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-system.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-system.png new file mode 100644 index 0000000..371c19b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/applications-utilities.png b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-utilities.png new file mode 100644 index 0000000..e3d5ac5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/applications-utilities.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-applications.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-applications.png new file mode 100644 index 0000000..9287851 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-applications.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-control-center.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-control-center.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-control-center.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-devel.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-devel.png new file mode 100644 index 0000000..3450750 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-devel.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-globe.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-globe.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-globe.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-graphics.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-graphics.png new file mode 100644 index 0000000..f74f540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-joystick.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-joystick.png new file mode 100644 index 0000000..06abec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-multimedia.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-multimedia.png new file mode 100644 index 0000000..f21cff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-other.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-other.png new file mode 100644 index 0000000..729eb0f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-settings.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-system.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-system.png new file mode 100644 index 0000000..371c19b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-util.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-util.png new file mode 100644 index 0000000..d77ea92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gnome-util.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/gtk-preferences.png b/build/htdocs/dist/themes/icons/default/32x32/categories/gtk-preferences.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/gtk-preferences.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/input_devices_settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/input_devices_settings.png new file mode 100644 index 0000000..a37b5d6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/input_devices_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/kcontrol.png b/build/htdocs/dist/themes/icons/default/32x32/categories/kcontrol.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/kcontrol.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_development.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_development.png new file mode 100644 index 0000000..3450750 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_development.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_games.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_games.png new file mode 100644 index 0000000..06abec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_games.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_graphics.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_graphics.png new file mode 100644 index 0000000..f74f540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_multimedia.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_multimedia.png new file mode 100644 index 0000000..f21cff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_network.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_network.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_office.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_office.png new file mode 100644 index 0000000..9287851 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_office.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_settings.png new file mode 100644 index 0000000..2f09ef3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_system.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_system.png new file mode 100644 index 0000000..371c19b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/package_utilities.png b/build/htdocs/dist/themes/icons/default/32x32/categories/package_utilities.png new file mode 100644 index 0000000..d77ea92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/package_utilities.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-peripherals.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-peripherals.png new file mode 100644 index 0000000..a37b5d6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-peripherals.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-personal.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-personal.png new file mode 100644 index 0000000..6b2e05a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop-personal.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-other.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-other.png new file mode 100644 index 0000000..2f61e3b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-other.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system-network.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system-network.png new file mode 100644 index 0000000..fbc89a1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system.png b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system.png new file mode 100644 index 0000000..2f09ef3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/preferences-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-accessories.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-accessories.png new file mode 100644 index 0000000..d77ea92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-accessories.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-games.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-games.png new file mode 100644 index 0000000..06abec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-graphics.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-graphics.png new file mode 100644 index 0000000..f74f540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-internet.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-internet.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-office.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-office.png new file mode 100644 index 0000000..9287851 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-preferences.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-preferences.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-preferences.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-programming.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-programming.png new file mode 100644 index 0000000..3450750 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-programming.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-sound_video.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-sound_video.png new file mode 100644 index 0000000..f21cff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-sound_video.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_settings.png new file mode 100644 index 0000000..2f09ef3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_tools.png b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_tools.png new file mode 100644 index 0000000..371c19b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/redhat-system_tools.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/stock_internet.png b/build/htdocs/dist/themes/icons/default/32x32/categories/stock_internet.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/stock_internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/system-help.png b/build/htdocs/dist/themes/icons/default/32x32/categories/system-help.png new file mode 100644 index 0000000..26598e8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/system-help.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-games.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-games.png new file mode 100644 index 0000000..06abec7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-games.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-graphics.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-graphics.png new file mode 100644 index 0000000..f74f540 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-internet.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-internet.png new file mode 100644 index 0000000..cc989b6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-internet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-multimedia.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-multimedia.png new file mode 100644 index 0000000..f21cff0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-multimedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-office.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-office.png new file mode 100644 index 0000000..9287851 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-office.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-system-settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-system-settings.png new file mode 100644 index 0000000..2f09ef3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-system-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-utils.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-utils.png new file mode 100644 index 0000000..d77ea92 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce-utils.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/categories/xfce4-settings.png b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce4-settings.png new file mode 100644 index 0000000..f59417b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/categories/xfce4-settings.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/3floppy_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/3floppy_unmount.png new file mode 100644 index 0000000..1f1bc8e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/3floppy_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/ac-adapter.png b/build/htdocs/dist/themes/icons/default/32x32/devices/ac-adapter.png new file mode 100644 index 0000000..4b190b8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/ac-adapter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/audio-card.png b/build/htdocs/dist/themes/icons/default/32x32/devices/audio-card.png new file mode 100644 index 0000000..dbe1719 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/audio-card.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/audio-input-microphone.png b/build/htdocs/dist/themes/icons/default/32x32/devices/audio-input-microphone.png new file mode 100644 index 0000000..824712c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/audio-input-microphone.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/battery.png b/build/htdocs/dist/themes/icons/default/32x32/devices/battery.png new file mode 100644 index 0000000..8cc17ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/battery.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/camera-photo.png b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-photo.png new file mode 100644 index 0000000..f0c9901 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-photo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/camera-video.png b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-video.png new file mode 100644 index 0000000..fcdf4a0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-video.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/camera-web.png b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-web.png new file mode 100644 index 0000000..b34f2c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/camera-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/camera.png b/build/htdocs/dist/themes/icons/default/32x32/devices/camera.png new file mode 100644 index 0000000..f0c9901 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/camera.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/camera_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/camera_unmount.png new file mode 100644 index 0000000..f0c9901 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/camera_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/cdrom_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/cdrom_unmount.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/cdrom_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/cdwriter_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/cdwriter_unmount.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/cdwriter_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/chardevice.png b/build/htdocs/dist/themes/icons/default/32x32/devices/chardevice.png new file mode 100644 index 0000000..fda6bf5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/chardevice.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/computer-apple-ipad.png b/build/htdocs/dist/themes/icons/default/32x32/devices/computer-apple-ipad.png new file mode 100644 index 0000000..da1061c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/computer-apple-ipad.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/computer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/computer.png new file mode 100644 index 0000000..7cf6441 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/computer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/display.png b/build/htdocs/dist/themes/icons/default/32x32/devices/display.png new file mode 100644 index 0000000..fda6bf5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/display.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-cdrom.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-cdrom.png new file mode 100644 index 0000000..9c8882b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-ieee1394.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-ieee1394.png new file mode 100644 index 0000000..034c381 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-ieee1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-system.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-system.png new file mode 100644 index 0000000..f12b388 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-usb.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-usb.png new file mode 100644 index 0000000..5851777 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-optical.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-optical.png new file mode 100644 index 0000000..9c8882b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/drive-removable-media.png b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-removable-media.png new file mode 100644 index 0000000..36af104 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/drive-removable-media.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/dvd_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/dvd_unmount.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/dvd_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-battery.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-battery.png new file mode 100644 index 0000000..8cc17ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-battery.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom-audio.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom-audio.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom.png new file mode 100644 index 0000000..9c8882b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-computer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-computer.png new file mode 100644 index 0000000..7cf6441 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-computer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdr.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdr.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdrw.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdrw.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-cdrw.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr-plus.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr-plus.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr-plus.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdram.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdram.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdram.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrom.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrom.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrw.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrw.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-disc-dvdrw.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-dvd.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-dvd.png new file mode 100644 index 0000000..9c8882b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-dvd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ethernet.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ethernet.png new file mode 100644 index 0000000..87487c8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ethernet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-floppy.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-floppy.png new file mode 100644 index 0000000..1f1bc8e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-1394.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-1394.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-usb.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-usb.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ipod.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ipod.png new file mode 100644 index 0000000..0a1c1a4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-ipod.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-keyboard.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-keyboard.png new file mode 100644 index 0000000..f0213d1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-cf.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-cf.png new file mode 100644 index 0000000..f3e4621 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-cf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-ms.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-ms.png new file mode 100644 index 0000000..f3e4621 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-ms.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sdmmc.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sdmmc.png new file mode 100644 index 0000000..f3e4621 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sdmmc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sm.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sm.png new file mode 100644 index 0000000..f3e4621 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-media-sm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-ball.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-ball.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-ball.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-optical.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-optical.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-mouse-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-printer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-printer.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-1394.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-1394.png new file mode 100644 index 0000000..36af104 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-1394.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-usb.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-usb.png new file mode 100644 index 0000000..36af104 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable-usb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable.png new file mode 100644 index 0000000..36af104 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-removable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-wavelan.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-wavelan.png new file mode 100644 index 0000000..4358de7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-dev-wavelan.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-fs-client.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-fs-client.png new file mode 100644 index 0000000..7cf6441 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-fs-client.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-modem.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-modem.png new file mode 100644 index 0000000..74a253c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-modem.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-stock-mic.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-stock-mic.png new file mode 100644 index 0000000..824712c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gnome-stock-mic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-cdrom.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-cdrom.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-floppy.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-floppy.png new file mode 100644 index 0000000..1f1bc8e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-harddisk.png b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-harddisk.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/gtk-harddisk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/harddrive.png b/build/htdocs/dist/themes/icons/default/32x32/devices/harddrive.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/harddrive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/hdd_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/hdd_unmount.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/hdd_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-dialpad.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-dialpad.png new file mode 100644 index 0000000..5f2c446 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-dialpad.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-gaming.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-gaming.png new file mode 100644 index 0000000..9670ee8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-gaming.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-keyboard.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-keyboard.png new file mode 100644 index 0000000..f0213d1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-mouse.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-mouse.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-tablet.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-tablet.png new file mode 100644 index 0000000..b437e2c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-tablet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/input-touchpad.png b/build/htdocs/dist/themes/icons/default/32x32/devices/input-touchpad.png new file mode 100644 index 0000000..0e52113 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/input-touchpad.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/ipod_mount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/ipod_mount.png new file mode 100644 index 0000000..0a1c1a4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/ipod_mount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/joystick.png b/build/htdocs/dist/themes/icons/default/32x32/devices/joystick.png new file mode 100644 index 0000000..9670ee8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/keyboard.png b/build/htdocs/dist/themes/icons/default/32x32/devices/keyboard.png new file mode 100644 index 0000000..f0213d1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/kjobviewer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/kjobviewer.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/kjobviewer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/kxkb.png b/build/htdocs/dist/themes/icons/default/32x32/devices/kxkb.png new file mode 100644 index 0000000..f0213d1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/kxkb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-cdrom.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-cdrom.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-cdrom.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-flash.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-flash.png new file mode 100644 index 0000000..f3e4621 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-flash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-floppy.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-floppy.png new file mode 100644 index 0000000..1f1bc8e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-bd.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-bd.png new file mode 100644 index 0000000..d8a87c7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-bd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-cd-audio.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-cd-audio.png new file mode 100644 index 0000000..eb09702 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-cd-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-dvd.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-dvd.png new file mode 100644 index 0000000..cc0f571 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical-dvd.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical.png new file mode 100644 index 0000000..b0fff39 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-optical.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-removable.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-removable.png new file mode 100644 index 0000000..c3a1846 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-removable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-tape.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-tape.png new file mode 100644 index 0000000..45abe84 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-tape.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/media-zip.png b/build/htdocs/dist/themes/icons/default/32x32/devices/media-zip.png new file mode 100644 index 0000000..9ce987f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/media-zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/modem.png b/build/htdocs/dist/themes/icons/default/32x32/devices/modem.png new file mode 100644 index 0000000..74a253c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/modem.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/mouse.png b/build/htdocs/dist/themes/icons/default/32x32/devices/mouse.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player-apple-ipod-touch.png b/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player-apple-ipod-touch.png new file mode 100644 index 0000000..1c27794 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player-apple-ipod-touch.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player.png b/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player.png new file mode 100644 index 0000000..0a1c1a4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/multimedia-player.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/network-vpn.png b/build/htdocs/dist/themes/icons/default/32x32/devices/network-vpn.png new file mode 100644 index 0000000..d3be66f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/network-vpn.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/network-wired.png b/build/htdocs/dist/themes/icons/default/32x32/devices/network-wired.png new file mode 100644 index 0000000..87487c8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/network-wired.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/network-wireless.png b/build/htdocs/dist/themes/icons/default/32x32/devices/network-wireless.png new file mode 100644 index 0000000..4358de7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/network-wireless.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/pda.png b/build/htdocs/dist/themes/icons/default/32x32/devices/pda.png new file mode 100644 index 0000000..1764bcc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/pda.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone-apple-iphone.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-apple-iphone.png new file mode 100644 index 0000000..9be5f03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-apple-iphone.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone-google-nexus-one.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-google-nexus-one.png new file mode 100644 index 0000000..7a00d51 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-google-nexus-one.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone-htc-g1-white.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-htc-g1-white.png new file mode 100644 index 0000000..fa24512 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-htc-g1-white.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone-palm-pre.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-palm-pre.png new file mode 100644 index 0000000..521f097 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-palm-pre.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone-samsung-galaxy-s.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-samsung-galaxy-s.png new file mode 100644 index 0000000..8070d50 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone-samsung-galaxy-s.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/phone.png b/build/htdocs/dist/themes/icons/default/32x32/devices/phone.png new file mode 100644 index 0000000..1bdfbed Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/phone.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/printer-network.png b/build/htdocs/dist/themes/icons/default/32x32/devices/printer-network.png new file mode 100644 index 0000000..f7d286c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/printer-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/printer-remote.png b/build/htdocs/dist/themes/icons/default/32x32/devices/printer-remote.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/printer-remote.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/printer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/printer.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/printer1.png b/build/htdocs/dist/themes/icons/default/32x32/devices/printer1.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/printer1.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/printmgr.png b/build/htdocs/dist/themes/icons/default/32x32/devices/printmgr.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/printmgr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/scanner.png b/build/htdocs/dist/themes/icons/default/32x32/devices/scanner.png new file mode 100644 index 0000000..66c2deb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/scanner.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/speaker.png b/build/htdocs/dist/themes/icons/default/32x32/devices/speaker.png new file mode 100644 index 0000000..4d37be4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/speaker.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/stock_cell-phone.png b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_cell-phone.png new file mode 100644 index 0000000..1bdfbed Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_cell-phone.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/stock_mic.png b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_mic.png new file mode 100644 index 0000000..824712c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_mic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/stock_printers.png b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_printers.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/stock_printers.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/system-floppy.png b/build/htdocs/dist/themes/icons/default/32x32/devices/system-floppy.png new file mode 100644 index 0000000..1f1bc8e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/system-floppy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/system.png b/build/htdocs/dist/themes/icons/default/32x32/devices/system.png new file mode 100644 index 0000000..7cf6441 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/usbpendrive_unmount.png b/build/htdocs/dist/themes/icons/default/32x32/devices/usbpendrive_unmount.png new file mode 100644 index 0000000..36af104 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/usbpendrive_unmount.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/video-display.png b/build/htdocs/dist/themes/icons/default/32x32/devices/video-display.png new file mode 100644 index 0000000..fda6bf5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/video-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/xfce-printer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce-printer.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce-printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-display.png b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-display.png new file mode 100644 index 0000000..fda6bf5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-display.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-keyboard.png b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-keyboard.png new file mode 100644 index 0000000..f0213d1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-keyboard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-mouse.png b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-mouse.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/xfce4-mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_HD.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_HD.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_HD.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_idetude.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_idetude.png new file mode 100644 index 0000000..cfe4c10 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_idetude.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_joystick.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_joystick.png new file mode 100644 index 0000000..9670ee8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_joystick.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_mouse.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_mouse.png new file mode 100644 index 0000000..d718aca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_mouse.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_printer.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_printer.png new file mode 100644 index 0000000..3f188cb Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_printer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/devices/yast_soundcard.png b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_soundcard.png new file mode 100644 index 0000000..dbe1719 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/devices/yast_soundcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-default.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-default.png new file mode 100644 index 0000000..4caba38 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-default.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-documents.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-documents.png new file mode 100644 index 0000000..93fddb8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-documents.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-downloads.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-downloads.png new file mode 100644 index 0000000..de0d0b8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-downloads.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-favorite.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-favorite.png new file mode 100644 index 0000000..c569834 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-favorite.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-generic.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-generic.png new file mode 100644 index 0000000..a922133 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-important.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-important.png new file mode 100644 index 0000000..40cc71d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-important.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-mail.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-mail.png new file mode 100644 index 0000000..109bfca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-mail.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-new.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-new.png new file mode 100644 index 0000000..9c59c9a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-new.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-noread.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-noread.png new file mode 100644 index 0000000..a7d5c03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-noread.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-nowrite.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-nowrite.png new file mode 100644 index 0000000..fc86422 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-nowrite.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-package.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-package.png new file mode 100644 index 0000000..1cd3466 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-package.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-photos.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-photos.png new file mode 100644 index 0000000..2369b6d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-photos.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-readonly.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-readonly.png new file mode 100644 index 0000000..fc86422 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-readonly.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-shared.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-shared.png new file mode 100644 index 0000000..554d1c3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-shared.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-symbolic-link.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-symbolic-link.png new file mode 100644 index 0000000..6aa2b30 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-symbolic-link.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-synchronizing.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-synchronizing.png new file mode 100644 index 0000000..a5a5958 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-synchronizing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-system.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-system.png new file mode 100644 index 0000000..49d728d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-system.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-unreadable.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-unreadable.png new file mode 100644 index 0000000..a7d5c03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-unreadable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-urgent.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-urgent.png new file mode 100644 index 0000000..d9b124f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-urgent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-web.png b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-web.png new file mode 100644 index 0000000..b6a84ce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emblems/emblem-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angel.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angel.png new file mode 100644 index 0000000..6357d02 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angel.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angry.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angry.png new file mode 100644 index 0000000..52612f5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-angry.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-cool.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-cool.png new file mode 100644 index 0000000..475181a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-cool.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-crying.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-crying.png new file mode 100644 index 0000000..5d3dab0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-crying.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-devilish.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-devilish.png new file mode 100644 index 0000000..c8dc471 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-devilish.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-embarrassed.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-embarrassed.png new file mode 100644 index 0000000..105001e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-embarrassed.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-glasses.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-glasses.png new file mode 100644 index 0000000..2dad18e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-glasses.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-kiss.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-kiss.png new file mode 100644 index 0000000..691a5ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-kiss.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-laugh.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-laugh.png new file mode 100644 index 0000000..0cf201b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-laugh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-monkey.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-monkey.png new file mode 100644 index 0000000..3ffe3f6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-monkey.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-plain.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-plain.png new file mode 100644 index 0000000..58dded9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-plain.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-raspberry.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-raspberry.png new file mode 100644 index 0000000..12a13ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-raspberry.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sad.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sad.png new file mode 100644 index 0000000..febb349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sad.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sick.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sick.png new file mode 100644 index 0000000..d2a257d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-sick.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile-big.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile-big.png new file mode 100644 index 0000000..29c1ef5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile-big.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile.png new file mode 100644 index 0000000..8c9b04e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smile.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smirk.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smirk.png new file mode 100644 index 0000000..b8c90ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-smirk.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-surprise.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-surprise.png new file mode 100644 index 0000000..f52aa0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-surprise.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-tired.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-tired.png new file mode 100644 index 0000000..7cac0e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-tired.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-uncertain.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-uncertain.png new file mode 100644 index 0000000..8d766fa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-uncertain.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-wink.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-wink.png new file mode 100644 index 0000000..145488c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-wink.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/face-worried.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-worried.png new file mode 100644 index 0000000..a4b4bc5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/face-worried.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-1.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-1.png new file mode 100644 index 0000000..8c9b04e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-1.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-10.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-10.png new file mode 100644 index 0000000..12a13ca Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-10.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-11.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-11.png new file mode 100644 index 0000000..5d3dab0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-11.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-13.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-13.png new file mode 100644 index 0000000..691a5ea Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-13.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-15.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-15.png new file mode 100644 index 0000000..475181a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-15.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-18.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-18.png new file mode 100644 index 0000000..6357d02 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-18.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-2.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-2.png new file mode 100644 index 0000000..8c9b04e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-2.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-22.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-22.png new file mode 100644 index 0000000..3ffe3f6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-22.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-3.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-3.png new file mode 100644 index 0000000..145488c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-3.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-4.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-4.png new file mode 100644 index 0000000..febb349 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-4.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-5.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-5.png new file mode 100644 index 0000000..f52aa0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-5.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-6.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-6.png new file mode 100644 index 0000000..29c1ef5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-6.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-7.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-7.png new file mode 100644 index 0000000..8c9b04e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-7.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-8.png b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-8.png new file mode 100644 index 0000000..58dded9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/emotes/stock_smiley-8.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-certificate.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-certificate.png new file mode 100644 index 0000000..af3dafa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-certificate.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-rss+xml.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-rss+xml.png new file mode 100644 index 0000000..d058b22 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-rss+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-excel.sheet.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-powerpoint.presentation.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.ms-word.document.macroEnabled.12.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openofficeorg.extension.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openofficeorg.extension.png new file mode 100644 index 0000000..1ad1db4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openofficeorg.extension.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png new file mode 100644 index 0000000..b455989 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.presentationml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.sheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png new file mode 100644 index 0000000..387b9cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.spreadsheetml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.document.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png new file mode 100644 index 0000000..9d4b25f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-vnd.openxmlformats-officedocument.wordprocessingml.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-blender.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-blender.png new file mode 100644 index 0000000..1624c84 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-blender.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-cd-image.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-cd-image.png new file mode 100644 index 0000000..cc8147b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-cd-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-executable.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-executable.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-mono-develop-xib.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-mono-develop-xib.png new file mode 100644 index 0000000..b1b4a1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/application-x-mono-develop-xib.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/ascii.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/ascii.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/ascii.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/audio-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/audio-x-generic.png new file mode 100644 index 0000000..ede8e9d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/audio-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/binary.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/binary.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/binary.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/contents2.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/contents2.png new file mode 100644 index 0000000..d2a8669 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/contents2.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/deb.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/deb.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/deb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/document.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/document.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/document.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/empty.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/empty.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/exec.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/exec.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/exec.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/folder_tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/folder_tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/folder_tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font-x-generic.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_bitmap.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_bitmap.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_bitmap.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_truetype.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_truetype.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_truetype.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_type1.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_type1.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/font_type1.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-executable.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-executable.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-regular.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-regular.png new file mode 100644 index 0000000..7cad893 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-fs-regular.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-magicpoint.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-magicpoint.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-magicpoint.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-msword.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-msword.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-msword.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-ogg.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-ogg.png new file mode 100644 index 0000000..ede8e9d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-ogg.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-pdf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-pdf.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-pdf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-postscript.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-postscript.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-postscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-rtf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-rtf.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-rtf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.lotus-1-2-3.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-excel.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-excel.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-excel.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.ms-powerpoint.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png new file mode 100644 index 0000000..5cd2a35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png new file mode 100644 index 0000000..7f9cf1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.graphics.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png new file mode 100644 index 0000000..7f9cf1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png new file mode 100644 index 0000000..b455989 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png new file mode 100644 index 0000000..387b9cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png new file mode 100644 index 0000000..9d4b25f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text-web.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.oasis.opendocument.text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-secure.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia-vbr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.rn-realmedia.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.calc.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.calc.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.impress.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.impress.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.writer.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.writer.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.stardivision.writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png new file mode 100644 index 0000000..387b9cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.calc.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png new file mode 100644 index 0000000..7f9cf1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png new file mode 100644 index 0000000..5cd2a35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.draw.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png new file mode 100644 index 0000000..b455989 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.impress.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png new file mode 100644 index 0000000..9d4b25f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-vnd.sun.xml.writer.template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-wordperfect.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-wordperfect.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-wordperfect.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-7z-compressed.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-7z-compressed.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-7z-compressed.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-abiword.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-abiword.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-abiword.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-spreadsheet.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-word.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-word.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-applix-word.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-archive.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-archive.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-archive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-arj.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-arj.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-arj.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-bzip.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compress.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compress.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compress.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compressed-tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compressed-tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio-compressed.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio-compressed.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio-compressed.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-cpio.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-deb.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-deb.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-deb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-dvi.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-dvi.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-dvi.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-executable.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-executable.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-afm.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-afm.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-afm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-bdf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-bdf.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-bdf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-linux-psf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-linux-psf.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-linux-psf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-pcf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-pcf.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-pcf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-sunos-news.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-sunos-news.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-sunos-news.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-ttf.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-ttf.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-font-ttf.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gnumeric.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gnumeric.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gnumeric.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzip.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzip.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzip.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzpostscript.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzpostscript.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-gzpostscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-jar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-jar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-jar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-killustrator.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-killustrator.png new file mode 100644 index 0000000..3ad564c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-killustrator.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kpresenter.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kpresenter.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kpresenter.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kspread.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kspread.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kspread.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kword.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kword.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-kword.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lha.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lha.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lha.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lhz.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lhz.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lhz.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma-compressed-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-lzma.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-ms-dos-executable.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-ms-dos-executable.png new file mode 100644 index 0000000..b810fc1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-ms-dos-executable.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-perl.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-perl.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-perl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-php.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-php.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-php.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-python-bytecode.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-python-bytecode.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-python-bytecode.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rpm.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rpm.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-rpm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-scribus.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-scribus.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-scribus.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shellscript.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shellscript.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shellscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shockwave-flash.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shockwave-flash.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-shockwave-flash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-stuffit.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-stuffit.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-stuffit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tarz.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tarz.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tarz.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tex.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tex.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-x-tex.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-xhtml+xml.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-xhtml+xml.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-xhtml+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-zip.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-zip.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-application-zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-audio.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-audio.png new file mode 100644 index 0000000..ede8e9d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-audio.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-image.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-image.png new file mode 100644 index 0000000..3ad564c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-html.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-html.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-html.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-vnd.wap.wml.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-vnd.wap.wml.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-vnd.wap.wml.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-csh.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-csh.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-csh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-python.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-python.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-python.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-sh.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-sh.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-sh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcalendar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcalendar.png new file mode 100644 index 0000000..cec3de3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcalendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcard.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcard.png new file mode 100644 index 0000000..d2a8669 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-vcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-zsh.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-zsh.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text-x-zsh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-video.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-video.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-video.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-x-font-afm.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-x-font-afm.png new file mode 100644 index 0000000..3041a0e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-mime-x-font-afm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-package.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-package.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gnome-package.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gtk-file.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gtk-file.png new file mode 100644 index 0000000..7cad893 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/gtk-file.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/html.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/html.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/html.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image-x-generic.png new file mode 100644 index 0000000..3ad564c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image.png new file mode 100644 index 0000000..3ad564c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/kpresenter_kpr.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/kpresenter_kpr.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/kpresenter_kpr.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-database.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-database.png new file mode 100644 index 0000000..709903d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-database.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing-template.png new file mode 100644 index 0000000..76e5abd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing.png new file mode 100644 index 0000000..380c60a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-extension.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-extension.png new file mode 100644 index 0000000..b4d8171 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-extension.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-formula.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-formula.png new file mode 100644 index 0000000..37306ac Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-formula.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-master-document.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-master-document.png new file mode 100644 index 0000000..1f3e799 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-master-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-database.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-database.png new file mode 100644 index 0000000..549bcb7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-database.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing-template.png new file mode 100644 index 0000000..3bd7387 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing.png new file mode 100644 index 0000000..2e05ffe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-formula.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-formula.png new file mode 100644 index 0000000..f392014 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-formula.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-master-document.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-master-document.png new file mode 100644 index 0000000..2cf6741 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-master-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation-template.png new file mode 100644 index 0000000..ea8579d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation.png new file mode 100644 index 0000000..a046ed3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet-template.png new file mode 100644 index 0000000..0b2b6c5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet.png new file mode 100644 index 0000000..162f69c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text-template.png new file mode 100644 index 0000000..cfd3907 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text.png new file mode 100644 index 0000000..1942e73 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-web-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-web-template.png new file mode 100644 index 0000000..c08fd88 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-oasis-web-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation-template.png new file mode 100644 index 0000000..0edabbc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation.png new file mode 100644 index 0000000..0eee116 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet-template.png new file mode 100644 index 0000000..158a63a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet.png new file mode 100644 index 0000000..f7352ab Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text-template.png new file mode 100644 index 0000000..cfba261 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text.png new file mode 100644 index 0000000..77f87e7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/libreoffice34-text.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/mime_ascii.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/mime_ascii.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/mime_ascii.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/misc.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/misc.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/misc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package-x-generic.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_editors.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_editors.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_editors.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_wordprocessing.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_wordprocessing.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/package_wordprocessing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/plan.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/plan.png new file mode 100644 index 0000000..cec3de3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/plan.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/rpm.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/rpm.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/rpm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/shellscript.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/shellscript.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/shellscript.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/sound.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/sound.png new file mode 100644 index 0000000..ede8e9d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/sound.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/spreadsheet.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_addressbook.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_addressbook.png new file mode 100644 index 0000000..d2a8669 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_addressbook.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_calendar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_calendar.png new file mode 100644 index 0000000..cec3de3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_calendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_certificate.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_certificate.png new file mode 100644 index 0000000..af3dafa Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_certificate.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_script.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_script.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/stock_script.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tar.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/template_source.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/template_source.png new file mode 100644 index 0000000..a23677f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/template_source.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-html.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-html.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-html.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic-template.png new file mode 100644 index 0000000..a23677f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-opml+xml.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-opml+xml.png new file mode 100644 index 0000000..9c322ee Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-opml+xml.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-preview.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-preview.png new file mode 100644 index 0000000..7cad893 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-preview.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-script.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-script.png new file mode 100644 index 0000000..c3145d3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/text-x-script.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tgz.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tgz.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/tgz.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt2.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt2.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/txt2.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/unknown.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/unknown.png new file mode 100644 index 0000000..9212b03 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/unknown.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcalendar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcalendar.png new file mode 100644 index 0000000..cec3de3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcalendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcard.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcard.png new file mode 100644 index 0000000..d2a8669 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/vcard.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video-x-generic.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video-x-generic.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video-x-generic.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video.png new file mode 100644 index 0000000..79af499 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/video.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/wordprocessing.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/wordprocessing.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/wordprocessing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/www.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/www.png new file mode 100644 index 0000000..b1df007 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/www.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-address-book.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-address-book.png new file mode 100644 index 0000000..d2a8669 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-address-book.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-calendar.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-calendar.png new file mode 100644 index 0000000..cec3de3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-calendar.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document-template.png new file mode 100644 index 0000000..9d4b25f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document.png new file mode 100644 index 0000000..c9e318e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-document.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing-template.png new file mode 100644 index 0000000..5cd2a35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing.png new file mode 100644 index 0000000..7f9cf1d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-drawing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation-template.png new file mode 100644 index 0000000..b455989 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation.png new file mode 100644 index 0000000..839e9a3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-presentation.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet-template.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet-template.png new file mode 100644 index 0000000..387b9cf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet-template.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet.png new file mode 100644 index 0000000..0a531a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/x-office-spreadsheet.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/mimetypes/zip.png b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/zip.png new file mode 100644 index 0000000..05676e2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/mimetypes/zip.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/osjs-white.png b/build/htdocs/dist/themes/icons/default/32x32/osjs-white.png new file mode 100644 index 0000000..136fc54 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/osjs-white.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/osjs.png b/build/htdocs/dist/themes/icons/default/32x32/osjs.png new file mode 100644 index 0000000..95bfee1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/osjs.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/application-x-gnome-saved-search.png b/build/htdocs/dist/themes/icons/default/32x32/places/application-x-gnome-saved-search.png new file mode 100644 index 0000000..870ae5b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/application-x-gnome-saved-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/desktop.png b/build/htdocs/dist/themes/icons/default/32x32/places/desktop.png new file mode 100644 index 0000000..844dff3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/distributor-logo.png b/build/htdocs/dist/themes/icons/default/32x32/places/distributor-logo.png new file mode 100644 index 0000000..231dcde Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/distributor-logo.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/dropbox.png b/build/htdocs/dist/themes/icons/default/32x32/places/dropbox.png new file mode 100644 index 0000000..3a04ecd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/dropbox.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/emptytrash.png b/build/htdocs/dist/themes/icons/default/32x32/places/emptytrash.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/emptytrash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-documents.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-documents.png new file mode 100644 index 0000000..a0dd813 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-documents.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-download.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-download.png new file mode 100644 index 0000000..3fa1a7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-download.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-music.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-music.png new file mode 100644 index 0000000..dc6caaf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-music.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-pictures.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-pictures.png new file mode 100644 index 0000000..a894386 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-pictures.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-publicshare.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-publicshare.png new file mode 100644 index 0000000..d66e189 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-publicshare.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-remote.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-remote.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-remote.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-saved-search.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-saved-search.png new file mode 100644 index 0000000..870ae5b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-saved-search.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-templates.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-templates.png new file mode 100644 index 0000000..e7e9c04 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-templates.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder-videos.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder-videos.png new file mode 100644 index 0000000..a6783a5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder-videos.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder.png new file mode 100644 index 0000000..2a1e0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/folder_home.png b/build/htdocs/dist/themes/icons/default/32x32/places/folder_home.png new file mode 100644 index 0000000..b73f2f5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/folder_home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-desktop.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-desktop.png new file mode 100644 index 0000000..844dff3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-directory.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-directory.png new file mode 100644 index 0000000..2a1e0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ftp.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ftp.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ftp.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-home.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-home.png new file mode 100644 index 0000000..b73f2f5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-network.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-network.png new file mode 100644 index 0000000..d208ef7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-nfs.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-nfs.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-nfs.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-server.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-share.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-share.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-share.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-smb.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-smb.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-smb.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ssh.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ssh.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-ssh.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-trash-empty.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-trash-empty.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-fs-trash-empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-main-menu.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-main-menu.png new file mode 100644 index 0000000..231dcde Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-main-menu.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-nfs-server.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-nfs-server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-nfs-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-server.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-share.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-share.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-share.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-workgroup.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-workgroup.png new file mode 100644 index 0000000..d208ef7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-mime-x-directory-smb-workgroup.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gnome-stock-trash.png b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-stock-trash.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gnome-stock-trash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/google-drive.png b/build/htdocs/dist/themes/icons/default/32x32/places/google-drive.png new file mode 100644 index 0000000..c3295dc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/google-drive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gtk-directory.png b/build/htdocs/dist/themes/icons/default/32x32/places/gtk-directory.png new file mode 100644 index 0000000..2a1e0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gtk-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/gtk-network.png b/build/htdocs/dist/themes/icons/default/32x32/places/gtk-network.png new file mode 100644 index 0000000..d208ef7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/gtk-network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/inode-directory.png b/build/htdocs/dist/themes/icons/default/32x32/places/inode-directory.png new file mode 100644 index 0000000..2a1e0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/inode-directory.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/network-server.png b/build/htdocs/dist/themes/icons/default/32x32/places/network-server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/network-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/network-workgroup.png b/build/htdocs/dist/themes/icons/default/32x32/places/network-workgroup.png new file mode 100644 index 0000000..d208ef7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/network-workgroup.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/network.png b/build/htdocs/dist/themes/icons/default/32x32/places/network.png new file mode 100644 index 0000000..896bfe5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/network.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/network_local.png b/build/htdocs/dist/themes/icons/default/32x32/places/network_local.png new file mode 100644 index 0000000..d208ef7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/network_local.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/novell-button.png b/build/htdocs/dist/themes/icons/default/32x32/places/novell-button.png new file mode 100644 index 0000000..231dcde Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/novell-button.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/redhat-network-server.png b/build/htdocs/dist/themes/icons/default/32x32/places/redhat-network-server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/redhat-network-server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/server.png b/build/htdocs/dist/themes/icons/default/32x32/places/server.png new file mode 100644 index 0000000..81d0479 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/server.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/start-here.png b/build/htdocs/dist/themes/icons/default/32x32/places/start-here.png new file mode 100644 index 0000000..231dcde Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/start-here.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/stock_folder.png b/build/htdocs/dist/themes/icons/default/32x32/places/stock_folder.png new file mode 100644 index 0000000..2a1e0e1 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/stock_folder.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/trashcan_empty.png b/build/htdocs/dist/themes/icons/default/32x32/places/trashcan_empty.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/trashcan_empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/user-bookmarks.png b/build/htdocs/dist/themes/icons/default/32x32/places/user-bookmarks.png new file mode 100644 index 0000000..3bef096 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/user-bookmarks.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/user-desktop.png b/build/htdocs/dist/themes/icons/default/32x32/places/user-desktop.png new file mode 100644 index 0000000..844dff3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/user-desktop.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/user-home.png b/build/htdocs/dist/themes/icons/default/32x32/places/user-home.png new file mode 100644 index 0000000..b73f2f5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/user-home.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/user-trash.png b/build/htdocs/dist/themes/icons/default/32x32/places/user-trash.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/user-trash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/places/xfce-trash_empty.png b/build/htdocs/dist/themes/icons/default/32x32/places/xfce-trash_empty.png new file mode 100644 index 0000000..1ee9206 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/places/xfce-trash_empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/appointment-missed.png b/build/htdocs/dist/themes/icons/default/32x32/status/appointment-missed.png new file mode 100644 index 0000000..c4660b4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/appointment-missed.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/appointment-soon.png b/build/htdocs/dist/themes/icons/default/32x32/status/appointment-soon.png new file mode 100644 index 0000000..c065baf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/appointment-soon.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-high.png b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-high.png new file mode 100644 index 0000000..cdf0b46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-low.png b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-low.png new file mode 100644 index 0000000..8949da6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-medium.png b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-medium.png new file mode 100644 index 0000000..6d260bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-muted.png b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-muted.png new file mode 100644 index 0000000..b41dcb3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/audio-volume-muted.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/avatar-default.png b/build/htdocs/dist/themes/icons/default/32x32/status/avatar-default.png new file mode 100644 index 0000000..b4f31d4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/avatar-default.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution-charging.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution-charging.png new file mode 100644 index 0000000..c22f0af Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution.png new file mode 100644 index 0000000..5e667cc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-caution.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-empty.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-empty.png new file mode 100644 index 0000000..c7045d5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-empty.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charged.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charged.png new file mode 100644 index 0000000..7a248af Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charged.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charging.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charging.png new file mode 100644 index 0000000..c352fe7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-full.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full.png new file mode 100644 index 0000000..f80529b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-good-charging.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-good-charging.png new file mode 100644 index 0000000..cc2a9bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-good-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-good.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-good.png new file mode 100644 index 0000000..8bae646 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-good.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-low-charging.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-low-charging.png new file mode 100644 index 0000000..f999837 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-low-charging.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-low.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-low.png new file mode 100644 index 0000000..bba45d7 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/battery-missing.png b/build/htdocs/dist/themes/icons/default/32x32/status/battery-missing.png new file mode 100644 index 0000000..632907e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/battery-missing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/changes-allow.png b/build/htdocs/dist/themes/icons/default/32x32/status/changes-allow.png new file mode 100644 index 0000000..a69c54f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/changes-allow.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/changes-prevent.png b/build/htdocs/dist/themes/icons/default/32x32/status/changes-prevent.png new file mode 100644 index 0000000..93f7ab8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/changes-prevent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/computer-fail.png b/build/htdocs/dist/themes/icons/default/32x32/status/computer-fail.png new file mode 100644 index 0000000..cb2f0a4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/computer-fail.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/connect_creating.png b/build/htdocs/dist/themes/icons/default/32x32/status/connect_creating.png new file mode 100644 index 0000000..0baa8fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/connect_creating.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/connect_established.png b/build/htdocs/dist/themes/icons/default/32x32/status/connect_established.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/connect_established.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/connect_no.png b/build/htdocs/dist/themes/icons/default/32x32/status/connect_no.png new file mode 100644 index 0000000..f0d8a4a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/connect_no.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/dialog-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-error.png new file mode 100644 index 0000000..d58f363 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/dialog-information.png b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-information.png new file mode 100644 index 0000000..d46095a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-information.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/dialog-password.png b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-password.png new file mode 100644 index 0000000..7c79580 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-password.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/dialog-question.png b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-question.png new file mode 100644 index 0000000..2cb857f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/dialog-warning.png b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-warning.png new file mode 100644 index 0000000..3d7cdb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/edittrash.png b/build/htdocs/dist/themes/icons/default/32x32/status/edittrash.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/edittrash.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/error.png b/build/htdocs/dist/themes/icons/default/32x32/status/error.png new file mode 100644 index 0000000..d58f363 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/folder-drag-accept.png b/build/htdocs/dist/themes/icons/default/32x32/status/folder-drag-accept.png new file mode 100644 index 0000000..512d8fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/folder-drag-accept.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/folder-open.png b/build/htdocs/dist/themes/icons/default/32x32/status/folder-open.png new file mode 100644 index 0000000..4794aa0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/folder-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/folder-visiting.png b/build/htdocs/dist/themes/icons/default/32x32/status/folder-visiting.png new file mode 100644 index 0000000..030541e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/folder-visiting.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/folder_open.png b/build/htdocs/dist/themes/icons/default/32x32/status/folder_open.png new file mode 100644 index 0000000..4794aa0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/folder_open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-accept.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-accept.png new file mode 100644 index 0000000..512d8fe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-accept.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-visiting.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-visiting.png new file mode 100644 index 0000000..030541e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-directory-visiting.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-loading-icon.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-loading-icon.png new file mode 100644 index 0000000..7b725a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-loading-icon.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-trash-full.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-trash-full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-fs-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-disconn.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-disconn.png new file mode 100644 index 0000000..f0d8a4a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-disconn.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-error.png new file mode 100644 index 0000000..7c91d24 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-idle.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-idle.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-rx.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-rx.png new file mode 100644 index 0000000..8d7b76d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-rx.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-tx.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-tx.png new file mode 100644 index 0000000..032334d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-tx.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-txrx.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-txrx.png new file mode 100644 index 0000000..0baa8fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-netstatus-txrx.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gnome-stock-trash-full.png b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-stock-trash-full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gnome-stock-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-authentication.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-authentication.png new file mode 100644 index 0000000..7c79580 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-authentication.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-error.png new file mode 100644 index 0000000..d58f363 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-info.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-info.png new file mode 100644 index 0000000..d46095a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-question.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-question.png new file mode 100644 index 0000000..2cb857f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-warning.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-warning.png new file mode 100644 index 0000000..3d7cdb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/gtk-missing-image.png b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-missing-image.png new file mode 100644 index 0000000..d8b7e5a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/gtk-missing-image.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/image-loading.png b/build/htdocs/dist/themes/icons/default/32x32/status/image-loading.png new file mode 100644 index 0000000..7b725a6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/image-loading.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/image-missing.png b/build/htdocs/dist/themes/icons/default/32x32/status/image-missing.png new file mode 100644 index 0000000..d8b7e5a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/image-missing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/important.png b/build/htdocs/dist/themes/icons/default/32x32/status/important.png new file mode 100644 index 0000000..3d7cdb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/important.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/info.png b/build/htdocs/dist/themes/icons/default/32x32/status/info.png new file mode 100644 index 0000000..d46095a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/info.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/mail-attachment.png b/build/htdocs/dist/themes/icons/default/32x32/status/mail-attachment.png new file mode 100644 index 0000000..670d67b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/mail-attachment.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/mail-read.png b/build/htdocs/dist/themes/icons/default/32x32/status/mail-read.png new file mode 100644 index 0000000..4e7f165 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/mail-read.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/mail-replied.png b/build/htdocs/dist/themes/icons/default/32x32/status/mail-replied.png new file mode 100644 index 0000000..3a6b0d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/mail-replied.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/mail-unread.png b/build/htdocs/dist/themes/icons/default/32x32/status/mail-unread.png new file mode 100644 index 0000000..d2af300 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/mail-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-repeat.png b/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-repeat.png new file mode 100644 index 0000000..8801e5c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-repeat.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-shuffle.png b/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-shuffle.png new file mode 100644 index 0000000..6ed3b84 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/media-playlist-shuffle.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_critical.png b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_critical.png new file mode 100644 index 0000000..d58f363 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_critical.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_info.png b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_info.png new file mode 100644 index 0000000..d46095a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_info.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_warning.png b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_warning.png new file mode 100644 index 0000000..3d7cdb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/messagebox_warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-high.png b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-high.png new file mode 100644 index 0000000..77fb5fd Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-low.png b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-low.png new file mode 100644 index 0000000..537e28b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-medium.png b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-medium.png new file mode 100644 index 0000000..89726e9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-muted.png b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-muted.png new file mode 100644 index 0000000..f4d7cf9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/microphone-sensitivity-muted.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-error.png new file mode 100644 index 0000000..7c91d24 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-idle.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-idle.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-offline.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-offline.png new file mode 100644 index 0000000..f0d8a4a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-offline.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-receive.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-receive.png new file mode 100644 index 0000000..8d7b76d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit-receive.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit-receive.png new file mode 100644 index 0000000..0baa8fc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit-receive.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit.png new file mode 100644 index 0000000..032334d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-transmit.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/network-wired-disconnected.png b/build/htdocs/dist/themes/icons/default/32x32/status/network-wired-disconnected.png new file mode 100644 index 0000000..6d3c919 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/network-wired-disconnected.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/nm-adhoc.png b/build/htdocs/dist/themes/icons/default/32x32/status/nm-adhoc.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/nm-adhoc.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wired.png b/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wired.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wired.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wireless.png b/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wireless.png new file mode 100644 index 0000000..5558f1c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/nm-device-wireless.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/nm-no-connection.png b/build/htdocs/dist/themes/icons/default/32x32/status/nm-no-connection.png new file mode 100644 index 0000000..f0d8a4a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/nm-no-connection.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/non-starred.png b/build/htdocs/dist/themes/icons/default/32x32/status/non-starred.png new file mode 100644 index 0000000..93d3273 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/non-starred.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/printer-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/printer-error.png new file mode 100644 index 0000000..582511f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/printer-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/printer-printing.png b/build/htdocs/dist/themes/icons/default/32x32/status/printer-printing.png new file mode 100644 index 0000000..0d47184 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/printer-printing.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/security-high.png b/build/htdocs/dist/themes/icons/default/32x32/status/security-high.png new file mode 100644 index 0000000..9985dd6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/security-high.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/security-low.png b/build/htdocs/dist/themes/icons/default/32x32/status/security-low.png new file mode 100644 index 0000000..4c68e35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/security-low.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/security-medium.png b/build/htdocs/dist/themes/icons/default/32x32/status/security-medium.png new file mode 100644 index 0000000..e64d43d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/security-medium.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/software-update-available.png b/build/htdocs/dist/themes/icons/default/32x32/status/software-update-available.png new file mode 100644 index 0000000..f63b4d8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/software-update-available.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/software-update-urgent.png b/build/htdocs/dist/themes/icons/default/32x32/status/software-update-urgent.png new file mode 100644 index 0000000..d2baed6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/software-update-urgent.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/starred.png b/build/htdocs/dist/themes/icons/default/32x32/status/starred.png new file mode 100644 index 0000000..c7adaf9 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/starred.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder-excl.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder-excl.png new file mode 100644 index 0000000..c4660b4 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder-excl.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder.png new file mode 100644 index 0000000..c065baf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_appointment-reminder.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_attach.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_attach.png new file mode 100644 index 0000000..670d67b Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_attach.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-error.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-error.png new file mode 100644 index 0000000..d58f363 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-error.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-info.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-info.png new file mode 100644 index 0000000..d46095a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-info.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-question.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-question.png new file mode 100644 index 0000000..2cb857f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-question.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-warning.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-warning.png new file mode 100644 index 0000000..3d7cdb5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_dialog-warning.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-broken.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-broken.png new file mode 100644 index 0000000..4c68e35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-broken.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-ok.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-ok.png new file mode 100644 index 0000000..9985dd6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-ok.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-open.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-open.png new file mode 100644 index 0000000..4c68e35 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock.png new file mode 100644 index 0000000..e64d43d Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_lock.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-open.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-open.png new file mode 100644 index 0000000..4e7f165 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-replied.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-replied.png new file mode 100644 index 0000000..3a6b0d0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-replied.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-unread.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-unread.png new file mode 100644 index 0000000..d2af300 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_mail-unread.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_open.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_open.png new file mode 100644 index 0000000..4794aa0 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_open.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_repeat.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_repeat.png new file mode 100644 index 0000000..8801e5c Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_repeat.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_shuffle.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_shuffle.png new file mode 100644 index 0000000..6ed3b84 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_shuffle.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_trash_full.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_trash_full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_trash_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-0.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-0.png new file mode 100644 index 0000000..8949da6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-0.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-max.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-max.png new file mode 100644 index 0000000..cdf0b46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-max.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-med.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-med.png new file mode 100644 index 0000000..6d260bf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-med.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-min.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-min.png new file mode 100644 index 0000000..8949da6 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-min.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-mute.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-mute.png new file mode 100644 index 0000000..b41dcb3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume-mute.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume.png new file mode 100644 index 0000000..cdf0b46 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_volume.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-cloudy.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-cloudy.png new file mode 100644 index 0000000..bc4d34a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-cloudy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-few-clouds.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-few-clouds.png new file mode 100644 index 0000000..ca379dc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-fog.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-fog.png new file mode 100644 index 0000000..dea9bbf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-fog.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-clear.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-clear.png new file mode 100644 index 0000000..926274f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-few-clouds.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-few-clouds.png new file mode 100644 index 0000000..c80c334 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-night-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-showers.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-showers.png new file mode 100644 index 0000000..e3cd8a8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-showers.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-snow.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-snow.png new file mode 100644 index 0000000..f847e7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-snow.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-storm.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-storm.png new file mode 100644 index 0000000..53fbca5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-storm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-sunny.png b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-sunny.png new file mode 100644 index 0000000..8c65a17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/stock_weather-sunny.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/sunny.png b/build/htdocs/dist/themes/icons/default/32x32/status/sunny.png new file mode 100644 index 0000000..8c65a17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/sunny.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/task-due.png b/build/htdocs/dist/themes/icons/default/32x32/status/task-due.png new file mode 100644 index 0000000..6fffff2 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/task-due.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/task-past-due.png b/build/htdocs/dist/themes/icons/default/32x32/status/task-past-due.png new file mode 100644 index 0000000..0dde106 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/task-past-due.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/trashcan_full.png b/build/htdocs/dist/themes/icons/default/32x32/status/trashcan_full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/trashcan_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-available.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-available.png new file mode 100644 index 0000000..1d00cbe Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-available.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-away.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-away.png new file mode 100644 index 0000000..ea77a66 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-away.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-busy.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-busy.png new file mode 100644 index 0000000..e73cc78 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-busy.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-idle.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-idle.png new file mode 100644 index 0000000..dd2c485 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-idle.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-invisible.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-invisible.png new file mode 100644 index 0000000..226fcce Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-invisible.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-offline.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-offline.png new file mode 100644 index 0000000..fa91056 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-offline.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/user-trash-full.png b/build/htdocs/dist/themes/icons/default/32x32/status/user-trash-full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/user-trash-full.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear-night.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear-night.png new file mode 100644 index 0000000..926274f Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear-night.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear.png new file mode 100644 index 0000000..8c65a17 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-clear.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds-night.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds-night.png new file mode 100644 index 0000000..c80c334 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds-night.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds.png new file mode 100644 index 0000000..ca379dc Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-few-clouds.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-fog.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-fog.png new file mode 100644 index 0000000..dea9bbf Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-fog.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-overcast.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-overcast.png new file mode 100644 index 0000000..bc4d34a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-overcast.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-severe-alert.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-severe-alert.png new file mode 100644 index 0000000..a01e96e Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-severe-alert.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers-scattered.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers-scattered.png new file mode 100644 index 0000000..cbeb504 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers-scattered.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers.png new file mode 100644 index 0000000..e3cd8a8 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-showers.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-snow.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-snow.png new file mode 100644 index 0000000..f847e7a Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-snow.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/weather-storm.png b/build/htdocs/dist/themes/icons/default/32x32/status/weather-storm.png new file mode 100644 index 0000000..53fbca5 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/weather-storm.png differ diff --git a/build/htdocs/dist/themes/icons/default/32x32/status/xfce-trash_full.png b/build/htdocs/dist/themes/icons/default/32x32/status/xfce-trash_full.png new file mode 100644 index 0000000..f37f3e3 Binary files /dev/null and b/build/htdocs/dist/themes/icons/default/32x32/status/xfce-trash_full.png differ diff --git a/build/htdocs/dist/themes/icons/default/metadata.json b/build/htdocs/dist/themes/icons/default/metadata.json new file mode 100644 index 0000000..a6aa883 --- /dev/null +++ b/build/htdocs/dist/themes/icons/default/metadata.json @@ -0,0 +1,4 @@ +{ + "name": "default", + "title": "Default (Gnome)" +} diff --git a/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.mp3 b/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.mp3 new file mode 100644 index 0000000..323c830 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.oga b/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.oga new file mode 100644 index 0000000..a253702 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/alarm-clock-elapsed.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.mp3 new file mode 100644 index 0000000..8faad16 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.oga new file mode 100644 index 0000000..9697888 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-center.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.mp3 new file mode 100644 index 0000000..2d27e84 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.oga new file mode 100644 index 0000000..7c8e97e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-left.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.mp3 new file mode 100644 index 0000000..5dbdae5 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.oga new file mode 100644 index 0000000..a7c2c01 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-front-right.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.mp3 new file mode 100644 index 0000000..24a3f78 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.oga new file mode 100644 index 0000000..c0effd6 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-center.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.mp3 new file mode 100644 index 0000000..429cbaf Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.oga new file mode 100644 index 0000000..5e16455 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-left.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.mp3 new file mode 100644 index 0000000..cc49a87 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.oga new file mode 100644 index 0000000..e243b5e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-rear-right.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.mp3 new file mode 100644 index 0000000..d5373f8 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.oga new file mode 100644 index 0000000..8ffc13c Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-side-left.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.mp3 b/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.mp3 new file mode 100644 index 0000000..a563059 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.oga b/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.oga new file mode 100644 index 0000000..50a6560 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-channel-side-right.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-test-signal.mp3 b/build/htdocs/dist/themes/sounds/default/audio-test-signal.mp3 new file mode 100644 index 0000000..370f3bf Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-test-signal.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-test-signal.oga b/build/htdocs/dist/themes/sounds/default/audio-test-signal.oga new file mode 100644 index 0000000..51266c6 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-test-signal.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-volume-change.mp3 b/build/htdocs/dist/themes/sounds/default/audio-volume-change.mp3 new file mode 100644 index 0000000..9d7e4c2 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-volume-change.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/audio-volume-change.oga b/build/htdocs/dist/themes/sounds/default/audio-volume-change.oga new file mode 100644 index 0000000..e4a33dc Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/audio-volume-change.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/bell.mp3 b/build/htdocs/dist/themes/sounds/default/bell.mp3 new file mode 100644 index 0000000..e40cc0f Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/bell.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/bell.oga b/build/htdocs/dist/themes/sounds/default/bell.oga new file mode 100644 index 0000000..ea605c7 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/bell.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/camera-shutter.mp3 b/build/htdocs/dist/themes/sounds/default/camera-shutter.mp3 new file mode 100644 index 0000000..e237258 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/camera-shutter.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/camera-shutter.oga b/build/htdocs/dist/themes/sounds/default/camera-shutter.oga new file mode 100644 index 0000000..b51a467 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/camera-shutter.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/complete.mp3 b/build/htdocs/dist/themes/sounds/default/complete.mp3 new file mode 100644 index 0000000..824b606 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/complete.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/complete.oga b/build/htdocs/dist/themes/sounds/default/complete.oga new file mode 100644 index 0000000..7d34954 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/complete.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/device-added.mp3 b/build/htdocs/dist/themes/sounds/default/device-added.mp3 new file mode 100644 index 0000000..1b221b3 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/device-added.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/device-added.oga b/build/htdocs/dist/themes/sounds/default/device-added.oga new file mode 100644 index 0000000..c5ad86b Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/device-added.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/device-removed.mp3 b/build/htdocs/dist/themes/sounds/default/device-removed.mp3 new file mode 100644 index 0000000..787014e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/device-removed.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/device-removed.oga b/build/htdocs/dist/themes/sounds/default/device-removed.oga new file mode 100644 index 0000000..abfd60c Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/device-removed.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/dialog-information.mp3 b/build/htdocs/dist/themes/sounds/default/dialog-information.mp3 new file mode 100644 index 0000000..6eab26e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/dialog-information.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/dialog-information.oga b/build/htdocs/dist/themes/sounds/default/dialog-information.oga new file mode 100644 index 0000000..ddbf700 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/dialog-information.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/dialog-warning.mp3 b/build/htdocs/dist/themes/sounds/default/dialog-warning.mp3 new file mode 100644 index 0000000..4dc872e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/dialog-warning.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/dialog-warning.oga b/build/htdocs/dist/themes/sounds/default/dialog-warning.oga new file mode 100644 index 0000000..734cae7 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/dialog-warning.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/message-new-instant.mp3 b/build/htdocs/dist/themes/sounds/default/message-new-instant.mp3 new file mode 100644 index 0000000..70a1e5e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/message-new-instant.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/message-new-instant.oga b/build/htdocs/dist/themes/sounds/default/message-new-instant.oga new file mode 100644 index 0000000..e6bdd7a Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/message-new-instant.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/message.mp3 b/build/htdocs/dist/themes/sounds/default/message.mp3 new file mode 100644 index 0000000..e4a81cb Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/message.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/message.oga b/build/htdocs/dist/themes/sounds/default/message.oga new file mode 100644 index 0000000..e96c3a1 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/message.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/network-connectivity-established.mp3 b/build/htdocs/dist/themes/sounds/default/network-connectivity-established.mp3 new file mode 100644 index 0000000..1b221b3 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/network-connectivity-established.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/network-connectivity-established.oga b/build/htdocs/dist/themes/sounds/default/network-connectivity-established.oga new file mode 100644 index 0000000..c5ad86b Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/network-connectivity-established.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.mp3 b/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.mp3 new file mode 100644 index 0000000..787014e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.oga b/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.oga new file mode 100644 index 0000000..abfd60c Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/network-connectivity-lost.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-incoming-call.mp3 b/build/htdocs/dist/themes/sounds/default/phone-incoming-call.mp3 new file mode 100644 index 0000000..cd08517 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-incoming-call.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-incoming-call.oga b/build/htdocs/dist/themes/sounds/default/phone-incoming-call.oga new file mode 100644 index 0000000..a0ff221 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-incoming-call.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.mp3 b/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.mp3 new file mode 100644 index 0000000..0fb4501 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.oga b/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.oga new file mode 100644 index 0000000..d2e6010 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-outgoing-busy.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.mp3 b/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.mp3 new file mode 100644 index 0000000..98c6b2d Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.oga b/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.oga new file mode 100644 index 0000000..33dfeae Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/phone-outgoing-calling.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/power-plug.mp3 b/build/htdocs/dist/themes/sounds/default/power-plug.mp3 new file mode 100644 index 0000000..1b221b3 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/power-plug.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/power-plug.oga b/build/htdocs/dist/themes/sounds/default/power-plug.oga new file mode 100644 index 0000000..c5ad86b Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/power-plug.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/power-unplug.mp3 b/build/htdocs/dist/themes/sounds/default/power-unplug.mp3 new file mode 100644 index 0000000..787014e Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/power-unplug.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/power-unplug.oga b/build/htdocs/dist/themes/sounds/default/power-unplug.oga new file mode 100644 index 0000000..abfd60c Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/power-unplug.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/screen-capture.mp3 b/build/htdocs/dist/themes/sounds/default/screen-capture.mp3 new file mode 100644 index 0000000..e237258 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/screen-capture.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/screen-capture.oga b/build/htdocs/dist/themes/sounds/default/screen-capture.oga new file mode 100644 index 0000000..b51a467 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/screen-capture.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/service-login.mp3 b/build/htdocs/dist/themes/sounds/default/service-login.mp3 new file mode 100644 index 0000000..1013e1b Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/service-login.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/service-login.oga b/build/htdocs/dist/themes/sounds/default/service-login.oga new file mode 100644 index 0000000..7d931b7 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/service-login.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/service-logout.mp3 b/build/htdocs/dist/themes/sounds/default/service-logout.mp3 new file mode 100644 index 0000000..f16c407 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/service-logout.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/service-logout.oga b/build/htdocs/dist/themes/sounds/default/service-logout.oga new file mode 100644 index 0000000..c5b6f31 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/service-logout.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/suspend-error.mp3 b/build/htdocs/dist/themes/sounds/default/suspend-error.mp3 new file mode 100644 index 0000000..1070b2d Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/suspend-error.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/suspend-error.oga b/build/htdocs/dist/themes/sounds/default/suspend-error.oga new file mode 100644 index 0000000..1896185 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/suspend-error.oga differ diff --git a/build/htdocs/dist/themes/sounds/default/trash-empty.mp3 b/build/htdocs/dist/themes/sounds/default/trash-empty.mp3 new file mode 100644 index 0000000..c933e8b Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/trash-empty.mp3 differ diff --git a/build/htdocs/dist/themes/sounds/default/trash-empty.oga b/build/htdocs/dist/themes/sounds/default/trash-empty.oga new file mode 100644 index 0000000..f78a5a6 Binary files /dev/null and b/build/htdocs/dist/themes/sounds/default/trash-empty.oga differ diff --git a/build/htdocs/dist/themes/styles/dark.css b/build/htdocs/dist/themes/styles/dark.css new file mode 100644 index 0000000..6e09074 --- /dev/null +++ b/build/htdocs/dist/themes/styles/dark.css @@ -0,0 +1,1254 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +/** + * =========================================================================== + * CLASSES + * =========================================================================== + */ +.gui-has-emblem { + background-repeat: no-repeat; + background-position: calc(96%) center; + padding-right: calc(20px); +} +.gui-generic-container { + padding: 4px; + color: #ffffff; +} +.gui-generic-zebra-container { + background-color: #777777; +} +.gui-generic-zebra-container > * { + padding: 4px; +} +.gui-generic-zebra-container > *:nth-child(even) { + background: rgba(53, 53, 53, 0.5); +} +.gui-generic-hoverable:hover { + background-color: #2d73d2; +} +.gui-generic-padded { + padding: 4px; +} +.gui-generic-double-padded { + padding: calc(8px); +} +.gui-generic-margin { + margin: 4px; +} +/** + * =========================================================================== + * OVERRIDES + * =========================================================================== + */ +body, +input, +button, +textarea, +label, +select { + font-family: Karla, Sans-serif; + font-weight: normal; + font-style: normal; + font-size: 12px; + color: #ffffff; +} +::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-button { + background: #232323; + color: #444444; + width: 12px; + height: 12px; + display: none; +} +::-webkit-scrollbar-track { + background: #353535; +} +::-webkit-scrollbar-track-piece { + background: #353535; +} +::-webkit-scrollbar-thumb { + background: #232323; +} +::-webkit-scrollbar-corner { + background: #353535; +} +::-webkit-resizer { + background: #353535; +} +/** + * =========================================================================== + * WM + * =========================================================================== + */ +body[data-attention="true"]:after { + background-color: #ffffff; +} +corewm-panel { + color: #ffffff; + /* Window Manager manages this */ + font-size: 0; + padding: 4px; +} +corewm-panel:before { + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +corewm-panel-container { + padding: 8px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width: calc(100% - 8px); +} +corewm-panel[data-orientation="vertical"] corewm-panel-container { + height: calc(100% - 8px); +} +corewm-panel corewm-panel-item .corewm-panel-buttons > li { + cursor: pointer; + font-size: 12px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-item .corewm-panel-buttons > li { + margin-right: 4px; + margin-left: 4px; +} +corewm-panel[data-orientation="vertical"] corewm-panel-item .corewm-panel-buttons > li { + margin-top: 4px; + margin-bottom: 4px; +} +corewm-panel .PanelItemClock { + font-family: Monospace, Courier New; + font-weight: normal; + text-align: right; +} +corewm-panel .PanelItemWindowList li { + opacity: .50; +} +corewm-panel .PanelItemWindowList li.Focused { + opacity: 1; +} +corewm-panel .PanelItemWindowList li img { + margin-right: 4px; +} +html[dir="rtl"] corewm-panel .PanelItemWindowList li img { + margin-right: 0; + margin-left: 4px; +} +/* Notifications */ +application-splash { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #353535; + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; + cursor: pointer; +} +.custom-notification { + color: #fff; + /* Window Manager manages this */ +} +corewm-notifications { + top: 10px; + right: 10px; +} +corewm-notification { + color: #fff; + /* Window Manager manages this */ + cursor: pointer; + padding: 8px; + margin-bottom: 4px; +} +.custom-notification:before, +corewm-notification:before { + content: ''; + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +.custom-notification .Title, +corewm-notification .Title { + font-weight: bold; +} +.custom-notification .Title, +.custom-notification .Message, +corewm-notification .Title, +corewm-notification .Message { + line-height: 16px; +} +/* Desktop drop wallpaper effect */ +#Background.Blinking { + background: #fff; +} +/* Window Switcher */ +corewm-window-switcher { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #353535; +} +corewm-window-switcher > div.Active { + background: #2d73d2; +} +corewm-window-switcher > div.Active > span { + color: #ffffff; +} +corewm-search { + padding: 4px; + min-width: 200px; + max-width: 40%; + right: 10px; + top: 10px; +} +corewm-search > div { + margin-top: 4px; +} +corewm-search > ul { + margin-top: 4px; + cursor: pointer; +} +corewm-search > ul > li { + padding: 4px; + padding-left: 24px; +} +corewm-search > ul > li > img { + top: 4px; + left: 4px; +} +corewm-search > ul > .active, +corewm-search > ul > li:hover { + background: #fff; + color: #000; +} +/** + * =========================================================================== + * WINDOW + * =========================================================================== + */ +application-window { + opacity: 0.8; + margin-top: 30px; +} +application-window:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.3); + background: #353535; + top: calc(-33px); + left: -3px; + right: -3px; + bottom: -3px; +} +application-window[data-focused="true"] { + opacity: 1.0; +} +application-window[data-focused="true"]:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); +} +application-window[data-dnd-state="true"]:after { + top: -30px; +} +application-window-top { + top: -30px; + height: 30px; +} +application-window-top application-window-icon { + width: 30px; +} +/* application-window-content {overflow : hidden;}*/ +application-window-top:active { + cursor: move; + cursor: pointer; +} +application-window-title { + font-weight: bold; + color: #ffffff; + opacity: .5; + left: 24px; + line-height: 30px; + text-align: center; +} +application-window-title:active { + cursor: move; + cursor: pointer; +} +application-window[data-focused="true"] application-window-title { + opacity: 1; +} +.application-window-button-entry { + width: 22px; + text-align: center; + cursor: pointer; +} +application-window-resize { + cursor: move; +} +application-window-top, +application-window-top > * { + cursor: default; +} +application-window-loading { + background: #000; + opacity: 0.8; +} +application-window-loading-indicator { + position: absolute; + width: 48px; + height: 48px; + left: 50%; + top: 50%; + margin-left: -24px; + margin-top: -24px; +} +application-window-loading-indicator:before { + display: block; + content: ''; + width: 44px; + height: 44px; + border-top: 4px solid #fff; + border-right: 4px solid #666; + border-left: 4px solid #666; + border-bottom: 4px solid #fff; + border-radius: 100%; + -webkit-animation: windowloadinganim 0.75s linear infinite; + -moz-animation: windowloadinganim 0.75s linear infinite; + -ms-animation: windowloadinganim 0.75s linear infinite; + animation: windowloadinganim 0.75s linear infinite; +} +application-window[data-dnd-state="true"]:after { + border: 4px solid rgba(0, 0, 0, 0.7); + border-radius: 1px; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + margin: -4px; +} +application-window-disabled { + background: #000; + opacity: 0.5; + cursor: not-allowed; +} +application-window-warning { + background: #FFB800; + color: #fff; + border-color: #DF9F15; + height: 30px; + line-height: 20px; + margin: 4px; + border: 1px solid transparent; +} +application-window-warning > div:nth-child(1) { + padding: 4px; +} +application-window-warning > div:nth-child(2) { + right: 20px; + padding: 4px; +} +application-window-warning > div:nth-child(1):hover { + color: #111; + cursor: pointer; + opacity: .9; +} +application-window-resize { + top: -38px; + left: -8px; + right: -8px; + bottom: -8px; +} +/** + * =========================================================================== + * CONTAINERS + * =========================================================================== + */ +/* Container */ +gui-container { + margin: 4px; +} +gui-container[data-borders="true"] { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; +} +/* Box */ +gui-hbox-container > .gui-element, +gui-vbox-container > .gui-element { + margin: 4px; +} +gui-hbox-container[data-fill='true'] > *, +gui-vbox-container[data-fill='true'] > * { + width: calc(100% - 8px); + height: calc(100% - 8px); +} +gui-hbox-container > .perc-100 { + height: calc(100% - 8px); +} +gui-vbox-container > .perc-100 { + width: calc(100% - 8px); +} +gui-hbox-container > .perc-90 { + height: calc(90% - 8px); +} +gui-vbox-container > .perc-90 { + width: calc(90% - 8px); +} +gui-hbox-container > .perc-80 { + height: calc(80% - 8px); +} +gui-vbox-container > .perc-80 { + width: calc(80% - 8px); +} +gui-hbox-container > .perc-70 { + height: calc(70% - 8px); +} +gui-vbox-container > .perc-70 { + width: calc(70% - 8px); +} +gui-hbox-container > .perc-60 { + height: calc(60% - 8px); +} +gui-vbox-container > .perc-60 { + width: calc(60% - 8px); +} +gui-hbox-container > .perc-50 { + height: calc(50% - 8px); +} +gui-vbox-container > .perc-50 { + width: calc(50% - 8px); +} +gui-hbox-container > .perc-40 { + height: calc(40% - 8px); +} +gui-vbox-container > .perc-40 { + width: calc(40% - 8px); +} +gui-hbox-container > .perc-30 { + height: calc(30% - 8px); +} +gui-vbox-container > .perc-30 { + width: calc(30% - 8px); +} +gui-hbox-container > .perc-20 { + height: calc(20% - 8px); +} +gui-vbox-container > .perc-20 { + width: calc(20% - 8px); +} +gui-hbox-container > .perc-10 { + height: calc(10% - 8px); +} +gui-vbox-container > .perc-10 { + width: calc(10% - 8px); +} +/* Paned View */ +gui-paned-view > gui-paned-view-handle { + min-width: 8px; + width: 8px; + cursor: ew-resize; +} +gui-paned-view[data-orientation='vertical'] > gui-paned-view-handle { + min-width: auto; + width: auto; + min-height: 8px; + height: 8px; + cursor: ns-resize; +} +/* IFrame */ +gui-iframe { + background-color: #777777; +} +gui-iframe > iframe { + background-color: #777777; +} +/* Button Bar */ +/* Toolbar */ +gui-toolbar > *, +gui-button-bar > *, +gui-toolbar > gui-expander > *, +gui-button-bar > gui-expander > * { + margin: 4px; +} +gui-toolbar > gui-expander, +gui-button-bar > gui-expander { + margin: 0; +} +gui-toolbar[data-orientation="vertical"] { + margin-left: 0; + margin-right: 0; + margin-top: 4px; + margin-bottom: 4px; +} +/* Expander */ +gui-expander { + font-size: 12px; +} +gui-expander-label { + cursor: pointer; + padding: 4px; + background-color: #444444; + margin-bottom: 4px; +} +gui-expander-label:before { + content: '▼'; + font-family: sans-serif; + padding-right: 4px; +} +gui-expander[data-expanded="false"] > gui-expander-label:before { + content: '►'; +} +/* Tabs */ +gui-tabs > ul { + height: 25px; +} +gui-tabs > ul > li { + padding-left: 8px; + padding-right: 8px; + cursor: pointer; + background-color: #444444; + border: 1px solid transparent; + border-bottom: 0 none; + line-height: 25px; +} +gui-tabs > ul > li.gui-active { + background-color: transparent; + border-color: #232323; +} +gui-tabs > ul > li.gui-active:after { + bottom: -1px; + border-bottom: 1px solid #353535; +} +gui-tabs > gui-tab-container { + height: calc(100% - 25px); + border: 1px solid #232323; + padding: 4px; +} +/* Button Bar */ +/** + * =========================================================================== + * INPUTS + * =========================================================================== + */ +/* Label */ +gui-label { + height: 26px; + line-height: 26px; +} +gui-hbox-container > gui-label, +gui-vbox-container > gui-label { + height: 16px; + line-height: 16px; + min-height: 16px; +} +/* Button */ +gui-button { + height: 26px; +} +gui-button[data-icon-size="32"] { + height: 42px; +} +gui-button button { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; +} +gui-button button:focus { + outline: 0 none transparent; +} +gui-button button.gui-active, +gui-button button:active { + border-color: #333333; + color: #ffffff; + background-color: #353535; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); +} +gui-button button.gui-active:disabled, +gui-button button:disabled:active, +gui-button button:disabled { + border-color: #000000; + color: #ffffff; + background-color: #333232; + background: #333232; +} +gui-button button:disabled img { + opacity: .5; +} +gui-button button:disabled { + cursor: default; + color: #565656; +} +gui-button button.gui-has-image img { + padding-right: 4px; +} +gui-button.gui-has-image.gui-has-label button { + padding-left: 28px; +} +gui-button[data-icon-size="32"].gui-has-image.gui-has-label button { + padding-left: 44px; +} +/* Checkbox Button */ +/* Radio Button */ +gui-radio, +gui-checkbox { + height: 26px; +} +gui-radio input, +gui-checkbox input { + text-align: center; + background: #777777; + border: 1px solid #232323; + width: 16px; + height: 16px; + line-height: 12px; + color: #ffffff; + font-family: Arial; +} +gui-radio input:focus, +gui-checkbox input:focus { + outline: 0 none transparent; +} +gui-radio input { + -webkit-border-radius: 16px; + -moz-border-radius: 16px; + -ms-border-radius: 16px; + border-radius: 16px; +} +gui-radio input:checked:after { + content: "\2022"; + font-size: 32px; +} +gui-checkbox input:checked:after { + content: "\2713"; + font-size: 12px; +} +gui-radio[data-disabled="true"] label, +gui-checkbox[data-disabled="true"] label { + color: #565656; +} +gui-radio input:disabled, +gui-checkbox input:disabled { + border-color: #000000; + background-color: #333232; +} +gui-radio > label, +gui-checkbox > label { + line-height: 26px; +} +gui-radio > label > span, +gui-checkbox > label > span { + padding-left: 4px; +} +/* Select Dropdown */ +gui-select { + height: 26px; +} +gui-select select { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; + padding-right: 20px; +} +gui-select select:disabled { + border-color: #000000; + background-color: #333232; + color: #565656; +} +gui-select select:focus { + outline: 0 none transparent; +} +gui-select:before { + right: 1px; + top: 1px; + bottom: 1px; + width: 22px; + background: #777777; +} +gui-select:after { + content: '<>'; + font: 11px "Consolas", monospace; + color: #232323; + right: 2px; + top: 5px; + padding: 0 0 2px; + border-bottom: 1px solid #232323; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +gui-select[data-disabled="true"]:before { + background-color: #333232; +} +/* Select List */ +gui-select-list select { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; +} +gui-select-list select:focus { + outline: 0 none transparent; +} +gui-select-list select:disabled { + border-color: #000000; + background-color: #333232; + color: #565656; +} +/* Slider */ +gui-slider { + height: 26px; +} +gui-slider input { + background: transparent; + border: 0 none; + height: 26px; +} +/* + * RANGE TRACK + */ +gui-slider input::-moz-range-track { + height: 4px; + background-color: #444444; +} +gui-slider input::-webkit-slider-runnable-track { + height: 4px; + background-color: #444444; +} +gui-slider input::-ms-track { + height: 4px; + background-color: #444444; +} +/* + * RANGE THUMB + */ +gui-slider input::-moz-range-thumb { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; + height: 18px; + width: 10px; +} +gui-slider input:disabled::-moz-range-thumb { + border-color: #000000; + color: #ffffff; + background-color: #333232; + background: #333232; +} +gui-slider input::-webkit-slider-thumb { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; + height: 24px; + width: 16px; + margin-top: -10px; +} +gui-slider input:disabled::-webkit-range-thumb { + border-color: #000000; + color: #ffffff; + background-color: #333232; + background: #333232; +} +gui-slider input::-ms-thumb { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; + height: 24px; + width: 16px; +} +gui-slider input:disabled::-ms-thumb { + border-color: #000000; + color: #ffffff; + background-color: #333232; + background: #333232; +} +/** + * MISC + */ +gui-slider input[type=range]::-ms-fill-lower { + border: 0 none; + background-color: #444444; +} +gui-slider input[type=range]::-ms-fill-upper { + border: 0 none; + background-color: #444444; +} +gui-slider input[type=range]:focus::-ms-fill-lower { + background-color: #444444; +} +gui-slider input[type=range]:focus::-ms-fill-upper { + background-color: #444444; +} +/* Switch */ +gui-switch { + height: 26px; +} +gui-switch div { + width: 48px; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; + cursor: pointer; + padding: 0; +} +gui-switch button { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; +} +gui-switch button:focus { + outline: 0 none transparent; +} +gui-switch > label > div { + margin-left: 4px; +} +gui-switch[data-disabled="true"] button { + border-color: #000000; + color: #ffffff; + background-color: #333232; + background: #333232; +} +gui-switch[data-disabled="true"] div { + border-color: #000000; + background-color: #333232; + color: #565656; + padding: 0; +} +gui-switch[data-disabled="true"] button, +gui-switch[data-disabled="true"] label { + color: #565656; +} +/* Text Field */ +/* Password Field */ +gui-password, +gui-text { + height: 26px; +} +gui-password input, +gui-text input { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; + padding-left: 8px; + padding-right: 8px; +} +gui-password > label > input, +gui-text > label > input { + margin-left: 4px; +} +gui-password input:disabled, +gui-text input:disabled { + border-color: #000000; + background-color: #333232; + color: #565656; +} +gui-password input:focus, +gui-text input:focus { + outline: 0 none transparent; +} +gui-password[data-disabled="true"] label, +gui-text[data-disabled="true"] label { + color: #565656; +} +/* Text Area */ +gui-textarea textarea { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; +} +gui-textarea textarea:focus { + outline: 0 none transparent; +} +gui-textarea textarea:disabled { + border-color: #000000; + background-color: #333232; + color: #565656; +} +gui-textarea[data-disabled="true"] label { + color: #565656; +} +/* Rich Text */ +gui-richtext { + padding: 4px; + background-color: #777777; + border: 1px solid #232323; +} +gui-richtext > iframe { + background-color: #777777; +} +/* Grid */ +gui-grid > gui-grid-row > gui-grid-entry { + /* li */ + margin: 4px; +} +/* Modal Input */ +gui-input-modal input { + cursor: pointer; + padding: 4px; + background-color: #777777; + border: 1px solid #232323; + border-color: #000000; + background-color: #333232; + color: #565656; +} +gui-input-modal button { + margin-left: 4px; + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; + padding-left: 8px; + padding-right: 8px; +} +gui-input-modal button:focus { + outline: 0 none transparent; +} +/** + * =========================================================================== + * MISC + * =========================================================================== + */ +/* Video */ +/* Color Swatch */ +gui-color-swatch { + border: 1px solid #232323; +} +/* Color Box */ +gui-color-box { + cursor: pointer; + padding: 4px; + background-color: #353535; + background: #353535; + border: 1px solid #232323; + color: #ffffff; +} +gui-color-box > div { + background: #fff; +} +/* Menu */ +gui-menu { + border: 1px solid transparent; + background: #353535; + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + color: #ffffff; +} +gui-menu > gui-menu-entry { + color: #ffffff; +} +gui-menu > gui-menu-entry > label { + cursor: pointer; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 16px; +} +html[dir="rtl"] gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 0; +} +html[dir="rtl"] gui-menu > gui-menu-entry[data-icon] { + padding-right: 16px; +} +gui-menu > gui-menu-entry.gui-menu-expand:after { + content: '►'; + font-family: sans-serif; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-hover, +gui-menu > gui-menu-entry:hover { + background-color: #2d73d2; +} +gui-menu > gui-menu-entry.gui-hover > label, +gui-menu > gui-menu-entry:hover > label { + color: #ffffff; +} +gui-menu > gui-menu-entry { + background-position: 4px center; +} +html[dir="rtl"] gui-menu > gui-menu-entry { + background-position: right 4px center; +} +gui-menu > gui-menu-entry > label.gui-has-image { + padding-left: 22px; +} +gui-menu > gui-menu-entry[data-disabled="true"], +gui-menu > gui-menu-entry[data-disabled="true"] > label { + color: #565656; +} +/* Menu Bar */ +gui-menu-bar { + padding-left: 4px; + padding-right: 4px; +} +gui-menu-bar-entry { + cursor: pointer; + padding: 4px; +} +gui-menu-bar-entry:hover { + background: #2d73d2; + color: #ffffff; +} +gui-menu-bar-entry[data-disabled="true"] > span { + color: #565656; +} +/* Progressbar */ +gui-progress-bar { + display: block; + height: 26px; +} +gui-progress-bar:before { + background-color: #444444; + border: 1px solid #232323; + padding: 4px; +} +gui-progress-bar > div { + background: #2d73d2 url('/themes/styles/dark/gui/progressbar.png') repeat-x center; +} +gui-progress-bar > span { + color: #fff; +} +/* Statusbar */ +gui-statusbar { + margin: 4px; + padding-bottom: 4px; +} +/** + * =========================================================================== + * VIEWS + * =========================================================================== + */ +/* Icon View */ +gui-icon-view { + background-color: #777777; + border: 1px solid #232323; + padding: 4px; +} +gui-icon-view.gui-element-focused { + outline: 0 none transparent; +} +gui-icon-view-entry { + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + min-width: 60px !important; + min-height: 60px !important; +} +gui-icon-view-entry.gui-active { + background: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(45, 115, 210, 0.2); +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active { + background: #2d73d2; +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active > div > span { + background: #2d73d2; +} +/* List View */ +gui-list-view { + background-color: #777777; + border: 1px solid #232323; +} +gui-list-view.gui-element-focused { + outline: 0 none transparent; +} +gui-list-view-head { + background-color: #444444; +} +gui-list-view[data-zebra="true"] gui-list-view-body gui-list-view-row:nth-child(2n) { + background-color: #5A5A5A; + color: inherit; +} +gui-list-view-column { + padding: 4px; +} +gui-list-view-column.gui-has-image { + padding-left: 24px; + background-position: 4px; +} +html[dir="rtl"] gui-list-view gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 24px; + background-position: right 4px center; +} +gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 40px; +} +html[dir="rtl"] gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 40px; +} +gui-list-view-row.gui-active { + background-color: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-list-view.gui-element-focused gui-list-view-row.gui-active { + background-color: #2d73d2; +} +gui-list-view-column-resizer { + cursor: ew-resize; + width: 3px; + right: 0px; +} +gui-list-view-column-resizer:after { + background: #232323; +} +/* Tree View */ +gui-tree-view { + background-color: #777777; + border: 1px solid #232323; +} +gui-tree-view.gui-element-focused { + outline: 0 none transparent; +} +gui-tree-view-entry.dnd-over > div { + font-weight: bold; + text-decoration: underline; +} +gui-tree-view-entry > div { + padding: 4px; +} +gui-tree-view-entry > div > span { + cursor: pointer; + padding: 2px; +} +gui-tree-view-entry > div > span.gui-has-image { + padding-left: 20px; +} +gui-tree-view-entry > gui-tree-view-entry { + margin-left: 16px; +} +gui-tree-view-entry > gui-tree-view-entry.gui-expandable { + margin-left: 2px; +} +gui-tree-view-entry.gui-active > div { + background-color: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-tree-view.gui-element-focused gui-tree-view-entry.gui-active > div { + background-color: #2d73d2; +} +gui-tree-view-entry.gui-expandable { + padding-left: 16px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander { + padding-left: 4px; + cursor: pointer; + line-height: 24px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander:before { + content: '\25BA'; + font-family: Arial; + color: #232323; +} +gui-tree-view-entry.gui-expandable.gui-expanded > gui-tree-view-expander:before { + content: '\25BC'; +} +/* Max */ +application-window-button-maximize { + background: url('dark/wm/maximize_unfocused.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +application-window-button-maximize:hover { + background: url('dark/wm/maximize_unfocused_prelight.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +application-window-button-maximize:active { + background: url('dark/wm/maximize_unfocused_pressed.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize { + background: url('dark/wm/maximize_focused_normal.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize:hover { + background: url('dark/wm/maximize_focused_prelight.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize:active { + background: url('dark/wm/maximize_focused_pressed.png') no-repeat center center, url('dark/wm/maximize.png') no-repeat center center !important; +} +/* Min */ +application-window-button-minimize { + background: url('dark/wm/minimize_unfocused.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +application-window-button-minimize:hover { + background: url('dark/wm/minimize_unfocused_prelight.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +application-window-button-minimize:active { + background: url('dark/wm/minimize_unfocused_pressed.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize { + background: url('dark/wm/minimize_focused_normal.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize:hover { + background: url('dark/wm/minimize_focused_prelight.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize:active { + background: url('dark/wm/minimize_focused_pressed.png') no-repeat center center, url('dark/wm/minimize.png') no-repeat center center !important; +} +/* Close */ +application-window-button-close { + background: url('dark/wm/close_unfocused.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} +application-window-button-close:hover { + background: url('dark/wm/close_unfocused_prelight.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} +application-window-button-close:active { + background: url('dark/wm/close_unfocused_pressed.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close { + background: url('dark/wm/close_focused_normal.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close:hover { + background: url('dark/wm/close_focused_prelight.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close:active { + background: url('dark/wm/close_focused_pressed.png') no-repeat center center, url('dark/wm/close.png') no-repeat center center !important; +} diff --git a/build/htdocs/dist/themes/styles/dark.css.map b/build/htdocs/dist/themes/styles/dark.css.map new file mode 100644 index 0000000..e14ce29 --- /dev/null +++ b/build/htdocs/dist/themes/styles/dark.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/mrsang/Google Drive/ushare/IoTOS/OS.js/src/client/stylesheets/theme.less","input"],"names":[],"mappings":"AAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT;EACE,4BAAA;EACA,qBAAsB,gBAAtB;EACA,eAAgB,UAAhB;;AAIF;EACE,YAAA;EACA,cAAA;;AAGF;EACE,yBAAA;;AAEA,4BAA6B;EAC3B,YAAA;;AAEF,4BAA6B,IAAG,UAAU;EACxC,iCAAA;;AAGJ,sBAAsB;EACpB,yBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,SAAU,SAAV;;AAEF;EACE,WAAA;;;;;;;AASF;AAAM;AAAO;AAAQ;AAAU;AAAO;EACpC,8BAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;;AAEF;EACE,mBAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;;;;;;AASF,IAAI,uBAAuB;EACzB,yBAAA;;AAGF;EACE,cAAA;;EACA,YAAA;EACA,YAAA;;AAEF,YAAY;EACV,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF;EACE,YAAA;;AAEF,YAAY,+BAAgC;EAC1C,OAAQ,iBAAR;;AAEF,YAAY,6BAA8B;EACxC,QAAS,iBAAT;;AAGA,YAAa,kBAAkB,sBAAsB;EACnD,eAAA;EACA,eAAA;;AAEF,YAAY,+BAAgC,kBAAkB,sBAAsB;EAClF,iBAAA;EACA,gBAAA;;AAEF,YAAY,6BAA8B,kBAAkB,sBAAsB;EAChF,eAAA;EACA,kBAAA;;AAGJ,YAAa;EACX,mCAAA;EACA,mBAAA;EACA,iBAAA;;AAGF,YAAa,qBAAqB;EAChC,YAAA;;AAEF,YAAa,qBAAqB,GAAE;EAClC,UAAA;;AAEF,YAAa,qBAAqB,GAAG;EACnC,iBAAA;;AAEF,IAAI,WAAY,aAAa,qBAAqB,GAAG;EACnD,eAAA;EACA,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;EACA,kDAAA;EACA,YAAA;EACA,eAAA;;AAGF;EACE,WAAA;;;AAGF;EACE,SAAA;EACA,WAAA;;AAGF;EACE,WAAA;;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAGA,oBAAoB;AACpB,mBAAmB;EACjB,SAAU,EAAV;EACA,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF,oBAAqB;AACrB,mBAAoB;EAClB,iBAAA;;AAGF,oBAAqB;AACrB,oBAAqB;AACrB,mBAAoB;AACpB,mBAAoB;EAClB,iBAAA;;;AAIF,WAAW;EACT,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;;AAEF,sBAAuB,MAAK;EAC1B,mBAAA;;AAEF,sBAAuB,MAAK,OAAQ;EAClC,cAAA;;AAGJ;EACE,YAAA;EACA,gBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;;AAEA,aAAc;EACZ,eAAA;;AAEF,aAAc;EACZ,eAAA;EACA,eAAA;;AAEA,aAAc,KAAK;EACjB,YAAA;EACA,kBAAA;;AAEA,aAAc,KAAK,KAAK;EACtB,QAAA;EACA,SAAA;;AAEJ,aAAc,KAAK;AACnB,aAAc,KAAK,KAAI;EACrB,gBAAA;EACA,WAAA;;;;;;;AAQN;EACE,YAAA;EACA,gBAAA;;AAEF,kBAAkB;EAChB,+CAAA;EACA,mBAAA;EACA,KAAM,WAAN;EACA,UAAA;EACA,WAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,YAAA;;AAEF,kBAAkB,qBAAqB;EACrC,+CAAA;;AAEA,kBAAkB,uBAAuB;EACzC,UAAA;;AAEF;EACE,UAAA;EACA,YAAA;;AAFF,sBAIE;EACE,WAAA;;;AAMJ,sBAAsB;EACpB,YAAA;EACA,eAAA;;AAEF;EACE,iBAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;;AAEF,wBAAwB;EACtB,YAAA;EACA,eAAA;;AAEF,kBAAkB,qBAAsB;EACtC,UAAA;;AAEF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;;AAEF;EACE,YAAA;;AAEF;AAAwB,sBAAuB;EAC7C,eAAA;;AAEF;EACE,gBAAA;EACA,YAAA;;AAEF;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,iBAAA;;AAEF,oCAAoC;EAClC,cAAA;EACA,SAAS,EAAT;EACA,WAAA;EACA,YAAA;EACA,0BAAA;EACA,4BAAA;EACA,2BAAA;EACA,6BAAA;EACA,mBAAA;EACA,0DAAA;EACG,uDAAA;EACC,sDAAA;EACI,kDAAA;;AAEV,kBAAkB,uBAAuB;EACvC,oCAAA;EACA,kBAAA;EA7XA,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;EA0XR,YAAA;;AAEF;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;;AAEF;EACE,mBAAA;EACA,WAAA;EACA,qBAAA;EAEA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,6BAAA;;AAEA,0BAA2B,MAAK,UAAU;EACxC,YAAA;;AAEF,0BAA2B,MAAK,UAAU;EACxC,WAAA;EACA,YAAA;;AAEF,0BAA2B,MAAK,UAAU,GAAG;EAC3C,WAAA;EACA,eAAA;EACA,WAAA;;AAEJ;EACE,UAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;;;;;;;;AAUF;EACE,WAAA;;AAEF,aAAa;EAnYX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;;AAqYA,kBAAmB;AACnB,kBAAmB;EACjB,WAAA;;AAGA,kBAAkB,kBAAmB;AACrC,kBAAkB,kBAAmB;EACnC,OAAQ,iBAAR;EACA,QAAS,iBAAT;;AAGF,kBAAmB;EACjB,QAAS,iBAAT;;AAEF,kBAAmB;EACjB,OAAQ,iBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;;AAIN,cAAe;EACb,cAAA;EACA,UAAA;EACA,iBAAA;;AAEF,cAAc,6BAA8B;EAC1C,eAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;;;AAIF;EACE,yBAAA;;AAEA,UAAW;EACT,yBAAA;;;;AAKJ,WAAY;AACZ,cAAe;AACf,WAAY,eAAe;AAC3B,cAAe,eAAe;EAC5B,WAAA;;AAEF,WAAY;AACZ,cAAe;EACb,SAAA;;AAMF,WAAW;EACT,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;;;AAIF;EACE,eAAA;;AAEA;EACE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;;AAEF,kBAAkB;EAChB,SAAU,GAAV;EACA,uBAAA;EACA,kBAAA;;AAEF,YAAY,uBAAwB,qBAAoB;EACtD,SAAU,GAAV;;;AAIF,QAAS;EACP,YAAA;;AAEA,QAAS,KAAK;EACZ,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,6BAAA;EACA,qBAAA;EACA,iBAAA;;AAEF,QAAS,KAAK,KAAI;EAChB,6BAAA;EACA,qBAAA;;AAEA,QAAS,KAAK,KAAI,WAAW;EAC3B,YAAA;EACA,gCAAA;;AAEN,QAAS;EACP,yBAAA;EACA,yBAAA;EACA,YAAA;;;;;;;;;AAYJ;EACE,YAAA;EACA,iBAAA;;AAEF,kBAAmB;AACnB,kBAAmB;EACjB,YAAA;EACA,iBAAA;EACA,gBAAA;;;AAIF;EACE,YAAA;;AAEF,UAAU;EACR,YAAA;;AAEA,UAAW;EAvmBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;;AAqmBA,UAAW,OAAM;EACf,2BAAA;;AAEF,UAAW,OAAM;AACjB,UAAW,OAAM;EAhmBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,YA5DqC,oDA4DrC;;AAgmBA,UAAW,OAAM,WAAW;AAC5B,UAAW,OAAM,SAAS;AAC1B,UAAW,OAAM;EA3mBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA2mBA,UAAW,OAAM,SAAU;EACzB,WAAA;;AAEF,UAAW,OAAM;EACf,eAAA;EACA,cAAA;;AAEF,UAAW,OAAM,cAAe;EAC9B,kBAAA;;AAEF,UAAU,cAAc,cAAe;EACrC,kBAAA;;AAEF,UAAU,qBAAqB,cAAc,cAAe;EAC1D,kBAAA;;;;AAKJ;AACA;EACE,YAAA;;AAEA,SAAU;AACV,YAAa;EACX,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;;AAEF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,2BAAA;;AAGF,SAAU;EACR,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;;AAGV,SAAU,MAAK,QAAQ;EACrB,SAAS,OAAT;EACA,eAAA;;AAGF,YAAa,MAAK,QAAQ;EACxB,SAAS,OAAT;EACA,eAAA;;AAGF,SAAS,sBAAuB;AAChC,YAAY,sBAAuB;EACjC,cAAA;;AAGF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,qBAAA;EACA,yBAAA;;AAGF,SAAU;AACV,YAAa;EACX,iBAAA;;AAEF,SAAU,QAAQ;AAClB,YAAa,QAAQ;EACnB,iBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EA9qBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EA6qBE,mBAAA;;AAEF,UAAW,OAAM;EA5qBjB,qBAAA;EACA,yBAAA;EACA,cAAA;;AA6qBA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAU;EACR,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AAEF,UAAU;EACR,SAAS,IAAT;EACA,WAAW,qBAAX;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,gBAAA;EACA,gCAAA;EAEA,mBAAmB,aAAnB;EACG,gBAAgB,aAAhB;EACC,eAAe,aAAf;EACI,WAAW,aAAX;;AAEV,UAAU,sBAAsB;EAC9B,yBAAA;;;AAIJ,eAAgB;EAntBd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAmtBA,eAAgB,OAAM;EACpB,2BAAA;;AAEJ,eAAgB,OAAM;EAntBpB,qBAAA;EACA,yBAAA;EACA,cAAA;;;AAstBF;EACE,YAAA;;AAEA,UAAW;EACT,uBAAA;EACA,cAAA;EACA,YAAA;;;;;AAOF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;;;;AAOF,UAAW,MAAK;EAtxBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;EAmxBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAnxBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAoxBA,UAAW,MAAK;EA/xBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;EA4xBE,YAAA;EACA,WAAA;EACA,iBAAA;;AAEF,UAAW,MAAK,SAAS;EA7xBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA8xBA,UAAW,MAAK;EAzyBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;EAsyBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAtyBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;;;;AA0yBA,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EACT,WAAA;EAhzBF,YAAA;EACA,yBAAA;EACA,yBAAA;EAizBE,eAAA;EACA,UAAA;;AAGF,UAAW;EAh1BX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;;AA80BA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAW,QAAQ;EACjB,gBAAA;;AAGF,UAAU,sBAAuB;EAn1BjC,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAm1BA,UAAU,sBAAuB;EAh0BjC,qBAAA;EACA,yBAAA;EACA,cAAA;EAg0BE,UAAA;;AAGF,UAAU,sBAAuB;AACjC,UAAU,sBAAuB;EA/0BjC,cAAA;;;;AAq1BF;AACA;EACE,YAAA;;AAEA,YAAa;AACb,QAAS;EAv1BT,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAs1BE,iBAAA;EACA,kBAAA;;AAGF,YAAa,QAAQ;AACrB,QAAS,QAAQ;EACf,gBAAA;;AAGF,YAAa,MAAK;AAClB,QAAS,MAAK;EA71Bd,qBAAA;EACA,yBAAA;EACA,cAAA;;AA81BA,YAAa,MAAK;AAClB,QAAS,MAAK;EACZ,2BAAA;;AAGF,YAAY,sBAAuB;AACnC,QAAQ,sBAAuB;EA/2B/B,cAAA;;;AAq3BA,YAAa;EAl3Bb,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAk3BA,YAAa,SAAQ;EACnB,2BAAA;;AAEF,YAAa,SAAQ;EAl3BrB,qBAAA;EACA,yBAAA;EACA,cAAA;;AAo3BA,YAAY,sBAAuB;EA/3BnC,cAAA;;;AAo4BF;EACE,YAAA;EACA,yBAAA;EACA,yBAAA;;AAEA,YAAa;EACX,yBAAA;;;AAIJ,QAAS,eAAe;;EACtB,WAAA;;;AAIF,eAAgB;EAh5Bd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAGA,qBAAA;EACA,yBAAA;EACA,cAAA;;AA44BF,eAAgB;EACd,gBAAA;EA76BA,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;EA06BA,iBAAA;EACA,kBAAA;;AAEA,eAAgB,OAAM;EACpB,2BAAA;;;;;;;;;AAgBJ;EACE,yBAAA;;;AAIF;EAx8BE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,cAAA;;AAs8BA,aAAc;EACZ,gBAAA;;;AAIJ;EACE,6BAAA;EACA,mBAAA;EACA,+CAAA;EACA,cAAA;;AAEA,QAAS;EACP,cAAA;;AAEF,QAAS,iBAAiB;EACxB,eAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;EACvB,mBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,gBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,mBAAA;;AAEF,QAAS,iBAAgB,gBAAgB;EACvC,SAAU,GAAV;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB;EACvB,yBAAA;;AAEF,QAAS,iBAAgB,UAAW;AACpC,QAAS,iBAAgB,MAAO;EAC9B,cAAA;;AAEA,QAAS;EACP,+BAAA;;AAEF,IAAI,WAAY,SAAS;EACvB,qCAAA;;AAEF,QAAS,iBAAiB,QAAO;EAC/B,kBAAA;;AAEF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB,sBAAuB;EAC9C,cAAA;;;AAIN;EACE,iBAAA;EACA,kBAAA;;AAEA;EACE,eAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,mBAAA;EACA,cAAA;;AAEF,kBAAkB,sBAAuB;EACvC,cAAA;;;AAKJ;EACE,cAAA;EACA,YAAA;;AAEA,gBAAgB;EACd,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEF,gBAAiB;EACf,wBC1iC8D,0DD0iC9D;;AAEF,gBAAiB;EACf,WAAA;;;AAIJ;EACE,WAAA;EACA,mBAAA;;;;;;;;AAUF;EACE,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0BAAA;EACA,2BAAA;;AAGA,mBAAmB;EACjB,mCAAA;EACA,cAAA;;AAEF,mBAAmB,WAAY,MAAM;EACnC,mCAAA;;AAEF,aAAa,oBAAqB,oBAAmB;EACnD,mBAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY,MAAM;EACrE,mBAAA;;;AAIN;EACE,yBAAA;EACA,yBAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,yBAAA;;AAIE,aAAa,mBAAoB,mBAAmB,kBAAiB,UAAU;EAC7E,yBAAA;EACA,cAAA;;AAEF;EACE,YAAA;;AAEF,oBAAoB;EAClB,kBAAA;EACA,wBAAA;;AAEF,IAAI,WAAY,cAAc,qBAAoB;EAChD,eAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAa,qBAAsB,qBAAoB;EACrD,kBAAA;;AAEF,IAAI,WAAY,cAAa,qBAAsB,qBAAoB;EACrE,eAAA;EACA,mBAAA;;AAGJ,iBAAiB;EACf,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,kBAAiB;EACjD,yBAAA;;AAGF;EACE,iBAAA;EACA,UAAA;EACA,UAAA;;AAEA,4BAA4B;EAC1B,mBAAA;;;AAKR;EACE,yBAAA;EACA,yBAAA;;AAEE,aAAa;EACX,2BAAA;;AAEF,mBAAmB,SAAU;EAC3B,iBAAA;EACA,0BAAA;;AAEF,mBAAoB;EAClB,YAAA;;AAEF,mBAAoB,MAAM;EACxB,eAAA;EACA,YAAA;;AAEF,mBAAoB,MAAM,OAAM;EAC9B,kBAAA;;AAEF,mBAAoB;EAClB,iBAAA;;AAEF,mBAAoB,sBAAqB;EACvC,gBAAA;;AAEF,mBAAmB,WAAY;EAC7B,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY;EAC/D,yBAAA;;AAGJ,mBAAmB;EACjB,kBAAA;;AAEF,mBAAmB,eAAgB;EACjC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAEF,mBAAmB,eAAgB,uBAAsB;EACvD,SAAU,OAAV;EACA,kBAAA;EACA,cAAA;;AAEF,mBAAmB,eAAe,aAAc,yBAAwB;EACtE,SAAU,OAAV;;;ACtxCJ;EACE,gBAAiB,+DACA,+CADjB;;AAGF,kCAAkC;EAChC,gBAAiB,wEACA,+CADjB;;AAGF,kCAAkC;EAChC,gBAAiB,uEACA,+CADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,oEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,sEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,qEACA,+CADjB;;;AAKF;EACE,gBAAiB,+DACA,+CADjB;;AAGF,kCAAkC;EAChC,gBAAiB,wEACA,+CADjB;;AAGF,kCAAkC;EAChC,gBAAiB,uEACA,+CADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,oEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,sEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,qEACA,+CADjB;;;AAKF;EACE,gBAAiB,4DACA,4CADjB;;AAGF,+BAA+B;EAC7B,gBAAiB,qEACA,4CADjB;;AAGF,+BAA+B;EAC7B,gBAAiB,oEACA,4CADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,iEACA,4CADjB;;AAGF,kBAAkB,qBAAsB,gCAA+B;EACrE,gBAAiB,mEACA,4CADjB;;AAGF,kBAAkB,qBAAsB,gCAA+B;EACrE,gBAAiB,kEACA,4CADjB"} \ No newline at end of file diff --git a/build/htdocs/dist/themes/styles/dark/gui/progressbar.png b/build/htdocs/dist/themes/styles/dark/gui/progressbar.png new file mode 100644 index 0000000..c1b1afc Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/gui/progressbar.png differ diff --git a/build/htdocs/dist/themes/styles/dark/theme.js b/build/htdocs/dist/themes/styles/dark/theme.js new file mode 100644 index 0000000..ab07df7 --- /dev/null +++ b/build/htdocs/dist/themes/styles/dark/theme.js @@ -0,0 +1,27 @@ +(function(API, Utils) { + 'use strict'; + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + + ///////////////////////////////////////////////////////////////////////////// + // API + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications.CoreWM.CurrentTheme = { + init: function() { + }, + + destroy: function() { + }, + + event: function(ev) { + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + +})(OSjs.API, OSjs.Utils); diff --git a/build/htdocs/dist/themes/styles/dark/wm/close.png b/build/htdocs/dist/themes/styles/dark/wm/close.png new file mode 100644 index 0000000..514d5cd Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_focused_normal.png b/build/htdocs/dist/themes/styles/dark/wm/close_focused_normal.png new file mode 100644 index 0000000..514d5cd Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_focused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/close_focused_prelight.png new file mode 100644 index 0000000..adf2eb1 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_focused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/close_focused_pressed.png new file mode 100644 index 0000000..932e79b Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_unfocused.png b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused.png new file mode 100644 index 0000000..f5d6c6d Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_prelight.png new file mode 100644 index 0000000..adf2eb1 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_pressed.png new file mode 100644 index 0000000..932e79b Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/close_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize.png b/build/htdocs/dist/themes/styles/dark/wm/maximize.png new file mode 100644 index 0000000..fa5222e Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_normal.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_normal.png new file mode 100644 index 0000000..fa5222e Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_prelight.png new file mode 100644 index 0000000..8dda70f Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_pressed.png new file mode 100644 index 0000000..28c0b66 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused.png new file mode 100644 index 0000000..f5d6c6d Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_prelight.png new file mode 100644 index 0000000..8dda70f Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_pressed.png new file mode 100644 index 0000000..28c0b66 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/maximize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize.png b/build/htdocs/dist/themes/styles/dark/wm/minimize.png new file mode 100644 index 0000000..9dcb622 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_normal.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_normal.png new file mode 100644 index 0000000..9dcb622 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_prelight.png new file mode 100644 index 0000000..5e5551c Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_pressed.png new file mode 100644 index 0000000..a518754 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused.png new file mode 100644 index 0000000..f5d6c6d Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_prelight.png new file mode 100644 index 0000000..5e5551c Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_pressed.png new file mode 100644 index 0000000..a518754 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/minimize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize.png new file mode 100644 index 0000000..fa5222e Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_normal.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_normal.png new file mode 100644 index 0000000..fa5222e Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_prelight.png new file mode 100644 index 0000000..8dda70f Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_pressed.png new file mode 100644 index 0000000..28c0b66 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused.png new file mode 100644 index 0000000..f5d6c6d Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_prelight.png new file mode 100644 index 0000000..8dda70f Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_pressed.png new file mode 100644 index 0000000..28c0b66 Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/unmaximize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/dark/wm/wm.png b/build/htdocs/dist/themes/styles/dark/wm/wm.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/styles/dark/wm/wm.png differ diff --git a/build/htdocs/dist/themes/styles/default.css b/build/htdocs/dist/themes/styles/default.css new file mode 100644 index 0000000..591bd67 --- /dev/null +++ b/build/htdocs/dist/themes/styles/default.css @@ -0,0 +1,1267 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +/** + * =========================================================================== + * CLASSES + * =========================================================================== + */ +.gui-has-emblem { + background-repeat: no-repeat; + background-position: calc(96%) center; + padding-right: calc(20px); +} +.gui-generic-container { + padding: 4px; + color: #242424; +} +.gui-generic-zebra-container { + background-color: #ffffff; +} +.gui-generic-zebra-container > * { + padding: 4px; +} +.gui-generic-zebra-container > *:nth-child(even) { + background: rgba(235, 235, 235, 0.5); +} +.gui-generic-hoverable:hover { + background-color: #2d73d2; +} +.gui-generic-padded { + padding: 4px; +} +.gui-generic-double-padded { + padding: calc(8px); +} +.gui-generic-margin { + margin: 4px; +} +/** + * =========================================================================== + * OVERRIDES + * =========================================================================== + */ +body, +input, +button, +textarea, +label, +select { + font-family: Karla, Sans-serif; + font-weight: normal; + font-style: normal; + font-size: 12px; + color: #242424; +} +::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-button { + background: #b2b2b2; + color: #d9d9d9; + width: 12px; + height: 12px; + display: none; +} +::-webkit-scrollbar-track { + background: #ebebeb; +} +::-webkit-scrollbar-track-piece { + background: #ebebeb; +} +::-webkit-scrollbar-thumb { + background: #b2b2b2; +} +::-webkit-scrollbar-corner { + background: #ebebeb; +} +::-webkit-resizer { + background: #ebebeb; +} +/** + * =========================================================================== + * WM + * =========================================================================== + */ +body[data-attention="true"]:after { + background-color: #242424; +} +corewm-panel { + color: #ffffff; + /* Window Manager manages this */ + font-size: 0; + padding: 4px; +} +corewm-panel:before { + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +corewm-panel-container { + padding: 8px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width: calc(100% - 8px); +} +corewm-panel[data-orientation="vertical"] corewm-panel-container { + height: calc(100% - 8px); +} +corewm-panel corewm-panel-item .corewm-panel-buttons > li { + cursor: pointer; + font-size: 12px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-item .corewm-panel-buttons > li { + margin-right: 4px; + margin-left: 4px; +} +corewm-panel[data-orientation="vertical"] corewm-panel-item .corewm-panel-buttons > li { + margin-top: 4px; + margin-bottom: 4px; +} +corewm-panel .PanelItemClock { + font-family: Monospace, Courier New; + font-weight: normal; + text-align: right; +} +corewm-panel .PanelItemWindowList li { + opacity: .50; +} +corewm-panel .PanelItemWindowList li.Focused { + opacity: 1; +} +corewm-panel .PanelItemWindowList li img { + margin-right: 4px; +} +html[dir="rtl"] corewm-panel .PanelItemWindowList li img { + margin-right: 0; + margin-left: 4px; +} +/* Notifications */ +application-splash { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #ebebeb; + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; + cursor: pointer; +} +.custom-notification { + color: #fff; + /* Window Manager manages this */ +} +corewm-notifications { + top: 10px; + right: 10px; +} +corewm-notification { + color: #fff; + /* Window Manager manages this */ + cursor: pointer; + padding: 8px; + margin-bottom: 4px; +} +.custom-notification:before, +corewm-notification:before { + content: ''; + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +.custom-notification .Title, +corewm-notification .Title { + font-weight: bold; +} +.custom-notification .Title, +.custom-notification .Message, +corewm-notification .Title, +corewm-notification .Message { + line-height: 16px; +} +/* Desktop drop wallpaper effect */ +#Background.Blinking { + background: #fff; +} +/* Window Switcher */ +corewm-window-switcher { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #ebebeb; +} +corewm-window-switcher > div.Active { + background: #2d73d2; +} +corewm-window-switcher > div.Active > span { + color: #ffffff; +} +corewm-search { + padding: 4px; + min-width: 200px; + max-width: 40%; + right: 10px; + top: 10px; +} +corewm-search > div { + margin-top: 4px; +} +corewm-search > ul { + margin-top: 4px; + cursor: pointer; +} +corewm-search > ul > li { + padding: 4px; + padding-left: 24px; +} +corewm-search > ul > li > img { + top: 4px; + left: 4px; +} +corewm-search > ul > .active, +corewm-search > ul > li:hover { + background: #fff; + color: #000; +} +/** + * =========================================================================== + * WINDOW + * =========================================================================== + */ +application-window { + opacity: 0.8; + margin-top: 30px; +} +application-window:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.3); + background: #ebebeb; + top: calc(-33px); + left: -3px; + right: -3px; + bottom: -3px; +} +application-window[data-focused="true"] { + opacity: 1.0; +} +application-window[data-focused="true"]:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); +} +application-window[data-dnd-state="true"]:after { + top: -30px; +} +application-window-top { + top: -30px; + height: 30px; +} +application-window-top application-window-icon { + width: 30px; +} +/* application-window-content {overflow : hidden;}*/ +application-window-top:active { + cursor: move; + cursor: pointer; +} +application-window-title { + font-weight: bold; + color: #242424; + opacity: .5; + left: 24px; + line-height: 30px; + text-align: center; +} +application-window-title:active { + cursor: move; + cursor: pointer; +} +application-window[data-focused="true"] application-window-title { + opacity: 1; +} +.application-window-button-entry { + width: 22px; + text-align: center; + cursor: pointer; +} +application-window-resize { + cursor: move; +} +application-window-top, +application-window-top > * { + cursor: default; +} +application-window-loading { + background: #000; + opacity: 0.8; +} +application-window-loading-indicator { + position: absolute; + width: 48px; + height: 48px; + left: 50%; + top: 50%; + margin-left: -24px; + margin-top: -24px; +} +application-window-loading-indicator:before { + display: block; + content: ''; + width: 44px; + height: 44px; + border-top: 4px solid #fff; + border-right: 4px solid #666; + border-left: 4px solid #666; + border-bottom: 4px solid #fff; + border-radius: 100%; + -webkit-animation: windowloadinganim 0.75s linear infinite; + -moz-animation: windowloadinganim 0.75s linear infinite; + -ms-animation: windowloadinganim 0.75s linear infinite; + animation: windowloadinganim 0.75s linear infinite; +} +application-window[data-dnd-state="true"]:after { + border: 4px solid rgba(0, 0, 0, 0.7); + border-radius: 1px; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + margin: -4px; +} +application-window-disabled { + background: #000; + opacity: 0.5; + cursor: not-allowed; +} +application-window-warning { + background: #FFB800; + color: #fff; + border-color: #DF9F15; + height: 30px; + line-height: 20px; + margin: 4px; + border: 1px solid transparent; +} +application-window-warning > div:nth-child(1) { + padding: 4px; +} +application-window-warning > div:nth-child(2) { + right: 20px; + padding: 4px; +} +application-window-warning > div:nth-child(1):hover { + color: #111; + cursor: pointer; + opacity: .9; +} +application-window-resize { + top: -38px; + left: -8px; + right: -8px; + bottom: -8px; +} +/** + * =========================================================================== + * CONTAINERS + * =========================================================================== + */ +/* Container */ +gui-container { + margin: 4px; +} +gui-container[data-borders="true"] { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +/* Box */ +gui-hbox-container > .gui-element, +gui-vbox-container > .gui-element { + margin: 4px; +} +gui-hbox-container[data-fill='true'] > *, +gui-vbox-container[data-fill='true'] > * { + width: calc(100% - 8px); + height: calc(100% - 8px); +} +gui-hbox-container > .perc-100 { + height: calc(100% - 8px); +} +gui-vbox-container > .perc-100 { + width: calc(100% - 8px); +} +gui-hbox-container > .perc-90 { + height: calc(90% - 8px); +} +gui-vbox-container > .perc-90 { + width: calc(90% - 8px); +} +gui-hbox-container > .perc-80 { + height: calc(80% - 8px); +} +gui-vbox-container > .perc-80 { + width: calc(80% - 8px); +} +gui-hbox-container > .perc-70 { + height: calc(70% - 8px); +} +gui-vbox-container > .perc-70 { + width: calc(70% - 8px); +} +gui-hbox-container > .perc-60 { + height: calc(60% - 8px); +} +gui-vbox-container > .perc-60 { + width: calc(60% - 8px); +} +gui-hbox-container > .perc-50 { + height: calc(50% - 8px); +} +gui-vbox-container > .perc-50 { + width: calc(50% - 8px); +} +gui-hbox-container > .perc-40 { + height: calc(40% - 8px); +} +gui-vbox-container > .perc-40 { + width: calc(40% - 8px); +} +gui-hbox-container > .perc-30 { + height: calc(30% - 8px); +} +gui-vbox-container > .perc-30 { + width: calc(30% - 8px); +} +gui-hbox-container > .perc-20 { + height: calc(20% - 8px); +} +gui-vbox-container > .perc-20 { + width: calc(20% - 8px); +} +gui-hbox-container > .perc-10 { + height: calc(10% - 8px); +} +gui-vbox-container > .perc-10 { + width: calc(10% - 8px); +} +/* Paned View */ +gui-paned-view > gui-paned-view-handle { + min-width: 8px; + width: 8px; + cursor: ew-resize; +} +gui-paned-view[data-orientation='vertical'] > gui-paned-view-handle { + min-width: auto; + width: auto; + min-height: 8px; + height: 8px; + cursor: ns-resize; +} +/* IFrame */ +gui-iframe { + background-color: #ffffff; +} +gui-iframe > iframe { + background-color: #ffffff; +} +/* Button Bar */ +/* Toolbar */ +gui-toolbar > *, +gui-button-bar > *, +gui-toolbar > gui-expander > *, +gui-button-bar > gui-expander > * { + margin: 4px; +} +gui-toolbar > gui-expander, +gui-button-bar > gui-expander { + margin: 0; +} +gui-toolbar[data-orientation="vertical"] { + margin-left: 0; + margin-right: 0; + margin-top: 4px; + margin-bottom: 4px; +} +/* Expander */ +gui-expander { + font-size: 12px; +} +gui-expander-label { + cursor: pointer; + padding: 4px; + background-color: #d9d9d9; + margin-bottom: 4px; +} +gui-expander-label:before { + content: '▼'; + font-family: sans-serif; + padding-right: 4px; +} +gui-expander[data-expanded="false"] > gui-expander-label:before { + content: '►'; +} +/* Tabs */ +gui-tabs > ul { + height: 25px; +} +gui-tabs > ul > li { + padding-left: 8px; + padding-right: 8px; + cursor: pointer; + background-color: #d9d9d9; + border: 1px solid transparent; + border-bottom: 0 none; + line-height: 25px; +} +gui-tabs > ul > li.gui-active { + background-color: transparent; + border-color: #b2b2b2; +} +gui-tabs > ul > li.gui-active:after { + bottom: -1px; + border-bottom: 1px solid #ebebeb; +} +gui-tabs > gui-tab-container { + height: calc(100% - 25px); + border: 1px solid #b2b2b2; + padding: 4px; +} +/* Button Bar */ +/** + * =========================================================================== + * INPUTS + * =========================================================================== + */ +/* Label */ +gui-label { + height: 26px; + line-height: 26px; +} +gui-hbox-container > gui-label, +gui-vbox-container > gui-label { + height: 16px; + line-height: 16px; + min-height: 16px; +} +/* Button */ +gui-button { + height: 26px; +} +gui-button[data-icon-size="32"] { + height: 42px; +} +gui-button button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; +} +gui-button button:focus { + outline: 0 none transparent; +} +gui-button button.gui-active, +gui-button button:active { + border-color: #242424; + color: #242424; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); +} +gui-button button.gui-active:disabled, +gui-button button:disabled:active, +gui-button button:disabled { + border-color: #cccccc; + color: #242424; + background-color: #dddddd; + background: #dddddd; +} +gui-button button:disabled img { + opacity: .5; +} +gui-button button:disabled { + cursor: default; + color: #C7C7C7; +} +gui-button button.gui-has-image img { + padding-right: 4px; +} +gui-button.gui-has-image.gui-has-label button { + padding-left: 28px; +} +gui-button[data-icon-size="32"].gui-has-image.gui-has-label button { + padding-left: 44px; +} +/* Checkbox Button */ +/* Radio Button */ +gui-radio, +gui-checkbox { + height: 26px; +} +gui-radio input, +gui-checkbox input { + text-align: center; + background: #ffffff; + border: 1px solid #c1c1c1; + width: 16px; + height: 16px; + line-height: 12px; + color: #242424; + font-family: Arial; +} +gui-radio input:focus, +gui-checkbox input:focus { + outline: 0 none transparent; +} +gui-radio input { + -webkit-border-radius: 16px; + -moz-border-radius: 16px; + -ms-border-radius: 16px; + border-radius: 16px; +} +gui-radio input:checked:after { + content: "\2022"; + font-size: 32px; +} +gui-checkbox input:checked:after { + content: "\2713"; + font-size: 12px; +} +gui-radio[data-disabled="true"] label, +gui-checkbox[data-disabled="true"] label { + color: #C7C7C7; +} +gui-radio input:disabled, +gui-checkbox input:disabled { + border-color: #cccccc; + background-color: #dddddd; +} +gui-radio > label, +gui-checkbox > label { + line-height: 26px; +} +gui-radio > label > span, +gui-checkbox > label > span { + padding-left: 4px; +} +/* Select Dropdown */ +gui-select { + height: 26px; +} +gui-select select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; + padding-right: 20px; +} +gui-select select:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-select select:focus { + outline: 0 none transparent; +} +gui-select:before { + right: 1px; + top: 1px; + bottom: 1px; + width: 22px; + background: #ffffff; +} +gui-select:after { + content: '<>'; + font: 11px "Consolas", monospace; + color: #c1c1c1; + right: 2px; + top: 5px; + padding: 0 0 2px; + border-bottom: 1px solid #c1c1c1; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +gui-select[data-disabled="true"]:before { + background-color: #dddddd; +} +/* Select List */ +gui-select-list select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +gui-select-list select:focus { + outline: 0 none transparent; +} +gui-select-list select:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +/* Slider */ +gui-slider { + height: 26px; +} +gui-slider input { + background: transparent; + border: 0 none; + height: 26px; +} +/* + * RANGE TRACK + */ +gui-slider input::-moz-range-track { + height: 4px; + background-color: #d9d9d9; +} +gui-slider input::-webkit-slider-runnable-track { + height: 4px; + background-color: #d9d9d9; +} +gui-slider input::-ms-track { + height: 4px; + background-color: #d9d9d9; +} +/* + * RANGE THUMB + */ +gui-slider input::-moz-range-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; + height: 18px; + width: 10px; +} +gui-slider input:disabled::-moz-range-thumb { + border-color: #cccccc; + color: #242424; + background-color: #dddddd; + background: #dddddd; +} +gui-slider input::-webkit-slider-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; + height: 24px; + width: 16px; + margin-top: -10px; +} +gui-slider input:disabled::-webkit-range-thumb { + border-color: #cccccc; + color: #242424; + background-color: #dddddd; + background: #dddddd; +} +gui-slider input::-ms-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; + height: 24px; + width: 16px; +} +gui-slider input:disabled::-ms-thumb { + border-color: #cccccc; + color: #242424; + background-color: #dddddd; + background: #dddddd; +} +/** + * MISC + */ +gui-slider input[type=range]::-ms-fill-lower { + border: 0 none; + background-color: #d9d9d9; +} +gui-slider input[type=range]::-ms-fill-upper { + border: 0 none; + background-color: #d9d9d9; +} +gui-slider input[type=range]:focus::-ms-fill-lower { + background-color: #d9d9d9; +} +gui-slider input[type=range]:focus::-ms-fill-upper { + background-color: #d9d9d9; +} +/* Switch */ +gui-switch { + height: 26px; +} +gui-switch div { + width: 48px; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; + cursor: pointer; + padding: 0; +} +gui-switch button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; +} +gui-switch button:focus { + outline: 0 none transparent; +} +gui-switch > label > div { + margin-left: 4px; +} +gui-switch[data-disabled="true"] button { + border-color: #cccccc; + color: #242424; + background-color: #dddddd; + background: #dddddd; +} +gui-switch[data-disabled="true"] div { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; + padding: 0; +} +gui-switch[data-disabled="true"] button, +gui-switch[data-disabled="true"] label { + color: #C7C7C7; +} +/* Text Field */ +/* Password Field */ +gui-password, +gui-text { + height: 26px; +} +gui-password input, +gui-text input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; + padding-left: 8px; + padding-right: 8px; +} +gui-password > label > input, +gui-text > label > input { + margin-left: 4px; +} +gui-password input:disabled, +gui-text input:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-password input:focus, +gui-text input:focus { + outline: 0 none transparent; +} +gui-password[data-disabled="true"] label, +gui-text[data-disabled="true"] label { + color: #C7C7C7; +} +/* Text Area */ +gui-textarea textarea { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +gui-textarea textarea:focus { + outline: 0 none transparent; +} +gui-textarea textarea:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-textarea[data-disabled="true"] label { + color: #C7C7C7; +} +/* Rich Text */ +gui-richtext { + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +gui-richtext > iframe { + background-color: #ffffff; +} +/* Grid */ +gui-grid > gui-grid-row > gui-grid-entry { + /* li */ + margin: 4px; +} +/* Modal Input */ +gui-input-modal input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c1c1c1; + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-input-modal button { + margin-left: 4px; + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; + padding-left: 8px; + padding-right: 8px; +} +gui-input-modal button:focus { + outline: 0 none transparent; +} +/** + * =========================================================================== + * MISC + * =========================================================================== + */ +/* Video */ +/* Color Swatch */ +gui-color-swatch { + border: 1px solid #c1c1c1; +} +/* Color Box */ +gui-color-box { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c1c1c1; + color: #242424; +} +gui-color-box > div { + background: #fff; +} +/* Menu */ +gui-menu { + border: 1px solid transparent; + background: #ebebeb; + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + color: #242424; +} +gui-menu > gui-menu-entry { + color: #242424; +} +gui-menu > gui-menu-entry > label { + cursor: pointer; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 16px; +} +html[dir="rtl"] gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 0; +} +html[dir="rtl"] gui-menu > gui-menu-entry[data-icon] { + padding-right: 16px; +} +gui-menu > gui-menu-entry.gui-menu-expand:after { + content: '►'; + font-family: sans-serif; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-hover, +gui-menu > gui-menu-entry:hover { + background-color: #2d73d2; +} +gui-menu > gui-menu-entry.gui-hover > label, +gui-menu > gui-menu-entry:hover > label { + color: #ffffff; +} +gui-menu > gui-menu-entry { + background-position: 4px center; +} +html[dir="rtl"] gui-menu > gui-menu-entry { + background-position: right 4px center; +} +gui-menu > gui-menu-entry > label.gui-has-image { + padding-left: 22px; +} +gui-menu > gui-menu-entry[data-disabled="true"], +gui-menu > gui-menu-entry[data-disabled="true"] > label { + color: #C7C7C7; +} +/* Menu Bar */ +gui-menu-bar { + padding-left: 4px; + padding-right: 4px; +} +gui-menu-bar-entry { + cursor: pointer; + padding: 4px; +} +gui-menu-bar-entry:hover { + background: #2d73d2; + color: #ffffff; +} +gui-menu-bar-entry[data-disabled="true"] > span { + color: #C7C7C7; +} +/* Progressbar */ +gui-progress-bar { + display: block; + height: 26px; +} +gui-progress-bar:before { + background-color: #d9d9d9; + border: 1px solid #c1c1c1; + padding: 4px; +} +gui-progress-bar > div { + background: #2d73d2 url('/themes/styles/default/gui/progressbar.png') repeat-x center; +} +gui-progress-bar > span { + color: #fff; +} +/* Statusbar */ +gui-statusbar { + margin: 4px; + padding-bottom: 4px; +} +/** + * =========================================================================== + * VIEWS + * =========================================================================== + */ +/* Icon View */ +gui-icon-view { + background-color: #ffffff; + border: 1px solid #c1c1c1; + padding: 4px; +} +gui-icon-view.gui-element-focused { + outline: 0 none transparent; +} +gui-icon-view-entry { + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + min-width: 60px !important; + min-height: 60px !important; +} +gui-icon-view-entry.gui-active { + background: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(45, 115, 210, 0.2); +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active { + background: #2d73d2; +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active > div > span { + background: #2d73d2; +} +/* List View */ +gui-list-view { + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +gui-list-view.gui-element-focused { + outline: 0 none transparent; +} +gui-list-view-head { + background-color: #d9d9d9; +} +gui-list-view[data-zebra="true"] gui-list-view-body gui-list-view-row:nth-child(2n) { + background-color: #F9F9F9; + color: inherit; +} +gui-list-view-column { + padding: 4px; +} +gui-list-view-column.gui-has-image { + padding-left: 24px; + background-position: 4px; +} +html[dir="rtl"] gui-list-view gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 24px; + background-position: right 4px center; +} +gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 40px; +} +html[dir="rtl"] gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 40px; +} +gui-list-view-row.gui-active { + background-color: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-list-view.gui-element-focused gui-list-view-row.gui-active { + background-color: #2d73d2; +} +gui-list-view-column-resizer { + cursor: ew-resize; + width: 3px; + right: 0px; +} +gui-list-view-column-resizer:after { + background: #c1c1c1; +} +/* Tree View */ +gui-tree-view { + background-color: #ffffff; + border: 1px solid #c1c1c1; +} +gui-tree-view.gui-element-focused { + outline: 0 none transparent; +} +gui-tree-view-entry.dnd-over > div { + font-weight: bold; + text-decoration: underline; +} +gui-tree-view-entry > div { + padding: 4px; +} +gui-tree-view-entry > div > span { + cursor: pointer; + padding: 2px; +} +gui-tree-view-entry > div > span.gui-has-image { + padding-left: 20px; +} +gui-tree-view-entry > gui-tree-view-entry { + margin-left: 16px; +} +gui-tree-view-entry > gui-tree-view-entry.gui-expandable { + margin-left: 2px; +} +gui-tree-view-entry.gui-active > div { + background-color: rgba(45, 115, 210, 0.2); + color: #ffffff; +} +gui-tree-view.gui-element-focused gui-tree-view-entry.gui-active > div { + background-color: #2d73d2; +} +gui-tree-view-entry.gui-expandable { + padding-left: 16px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander { + padding-left: 4px; + cursor: pointer; + line-height: 24px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander:before { + content: '\25BA'; + font-family: Arial; + color: #b2b2b2; +} +gui-tree-view-entry.gui-expandable.gui-expanded > gui-tree-view-expander:before { + content: '\25BC'; +} +/** + * Original theme by Rafa Cobreros + * From Gnome + * http://gnome-look.org/content/show.php/?content=157986 + */ +application-window:before { + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; +} +/* Max */ +application-window-button-maximize { + background: url('default/wm/maximize_unfocused.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +application-window-button-maximize:hover { + background: url('default/wm/maximize_unfocused_prelight.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +application-window-button-maximize:active { + background: url('default/wm/maximize_unfocused_pressed.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize { + background: url('default/wm/maximize_focused_normal.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize:hover { + background: url('default/wm/maximize_focused_prelight.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-maximize:active { + background: url('default/wm/maximize_focused_pressed.png') no-repeat center center, url('default/wm/maximize.png') no-repeat center center !important; +} +/* Min */ +application-window-button-minimize { + background: url('default/wm/minimize_unfocused.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +application-window-button-minimize:hover { + background: url('default/wm/minimize_unfocused_prelight.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +application-window-button-minimize:active { + background: url('default/wm/minimize_unfocused_pressed.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize { + background: url('default/wm/minimize_focused_normal.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize:hover { + background: url('default/wm/minimize_focused_prelight.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-minimize:active { + background: url('default/wm/minimize_focused_pressed.png') no-repeat center center, url('default/wm/minimize.png') no-repeat center center !important; +} +/* Close */ +application-window-button-close { + background: url('default/wm/close_unfocused.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} +application-window-button-close:hover { + background: url('default/wm/close_unfocused_prelight.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} +application-window-button-close:active { + background: url('default/wm/close_unfocused_pressed.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close { + background: url('default/wm/close_focused_normal.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close:hover { + background: url('default/wm/close_focused_prelight.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} +application-window[data-focused="true"] application-window-button-close:active { + background: url('default/wm/close_focused_pressed.png') no-repeat center center, url('default/wm/close.png') no-repeat center center !important; +} diff --git a/build/htdocs/dist/themes/styles/default.css.map b/build/htdocs/dist/themes/styles/default.css.map new file mode 100644 index 0000000..30e2667 --- /dev/null +++ b/build/htdocs/dist/themes/styles/default.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/mrsang/Google Drive/ushare/IoTOS/OS.js/src/client/stylesheets/theme.less","input"],"names":[],"mappings":"AAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT;EACE,4BAAA;EACA,qBAAsB,gBAAtB;EACA,eAAgB,UAAhB;;AAIF;EACE,YAAA;EACA,cAAA;;AAGF;EACE,yBAAA;;AAEA,4BAA6B;EAC3B,YAAA;;AAEF,4BAA6B,IAAG,UAAU;EACxC,oCAAA;;AAGJ,sBAAsB;EACpB,yBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,SAAU,SAAV;;AAEF;EACE,WAAA;;;;;;;AASF;AAAM;AAAO;AAAQ;AAAU;AAAO;EACpC,8BAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;;AAEF;EACE,mBAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;;;;;;AASF,IAAI,uBAAuB;EACzB,yBAAA;;AAGF;EACE,cAAA;;EACA,YAAA;EACA,YAAA;;AAEF,YAAY;EACV,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF;EACE,YAAA;;AAEF,YAAY,+BAAgC;EAC1C,OAAQ,iBAAR;;AAEF,YAAY,6BAA8B;EACxC,QAAS,iBAAT;;AAGA,YAAa,kBAAkB,sBAAsB;EACnD,eAAA;EACA,eAAA;;AAEF,YAAY,+BAAgC,kBAAkB,sBAAsB;EAClF,iBAAA;EACA,gBAAA;;AAEF,YAAY,6BAA8B,kBAAkB,sBAAsB;EAChF,eAAA;EACA,kBAAA;;AAGJ,YAAa;EACX,mCAAA;EACA,mBAAA;EACA,iBAAA;;AAGF,YAAa,qBAAqB;EAChC,YAAA;;AAEF,YAAa,qBAAqB,GAAE;EAClC,UAAA;;AAEF,YAAa,qBAAqB,GAAG;EACnC,iBAAA;;AAEF,IAAI,WAAY,aAAa,qBAAqB,GAAG;EACnD,eAAA;EACA,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;EACA,kDAAA;EACA,YAAA;EACA,eAAA;;AAGF;EACE,WAAA;;;AAGF;EACE,SAAA;EACA,WAAA;;AAGF;EACE,WAAA;;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAGA,oBAAoB;AACpB,mBAAmB;EACjB,SAAU,EAAV;EACA,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF,oBAAqB;AACrB,mBAAoB;EAClB,iBAAA;;AAGF,oBAAqB;AACrB,oBAAqB;AACrB,mBAAoB;AACpB,mBAAoB;EAClB,iBAAA;;;AAIF,WAAW;EACT,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;;AAEF,sBAAuB,MAAK;EAC1B,mBAAA;;AAEF,sBAAuB,MAAK,OAAQ;EAClC,cAAA;;AAGJ;EACE,YAAA;EACA,gBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;;AAEA,aAAc;EACZ,eAAA;;AAEF,aAAc;EACZ,eAAA;EACA,eAAA;;AAEA,aAAc,KAAK;EACjB,YAAA;EACA,kBAAA;;AAEA,aAAc,KAAK,KAAK;EACtB,QAAA;EACA,SAAA;;AAEJ,aAAc,KAAK;AACnB,aAAc,KAAK,KAAI;EACrB,gBAAA;EACA,WAAA;;;;;;;AAQN;EACE,YAAA;EACA,gBAAA;;AAEF,kBAAkB;EAChB,+CAAA;EACA,mBAAA;EACA,KAAM,WAAN;EACA,UAAA;EACA,WAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,YAAA;;AAEF,kBAAkB,qBAAqB;EACrC,+CAAA;;AAEA,kBAAkB,uBAAuB;EACzC,UAAA;;AAEF;EACE,UAAA;EACA,YAAA;;AAFF,sBAIE;EACE,WAAA;;;AAMJ,sBAAsB;EACpB,YAAA;EACA,eAAA;;AAEF;EACE,iBAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;;AAEF,wBAAwB;EACtB,YAAA;EACA,eAAA;;AAEF,kBAAkB,qBAAsB;EACtC,UAAA;;AAEF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;;AAEF;EACE,YAAA;;AAEF;AAAwB,sBAAuB;EAC7C,eAAA;;AAEF;EACE,gBAAA;EACA,YAAA;;AAEF;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,iBAAA;;AAEF,oCAAoC;EAClC,cAAA;EACA,SAAS,EAAT;EACA,WAAA;EACA,YAAA;EACA,0BAAA;EACA,4BAAA;EACA,2BAAA;EACA,6BAAA;EACA,mBAAA;EACA,0DAAA;EACG,uDAAA;EACC,sDAAA;EACI,kDAAA;;AAEV,kBAAkB,uBAAuB;EACvC,oCAAA;EACA,kBAAA;EA7XA,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;EA0XR,YAAA;;AAEF;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;;AAEF;EACE,mBAAA;EACA,WAAA;EACA,qBAAA;EAEA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,6BAAA;;AAEA,0BAA2B,MAAK,UAAU;EACxC,YAAA;;AAEF,0BAA2B,MAAK,UAAU;EACxC,WAAA;EACA,YAAA;;AAEF,0BAA2B,MAAK,UAAU,GAAG;EAC3C,WAAA;EACA,eAAA;EACA,WAAA;;AAEJ;EACE,UAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;;;;;;;;AAUF;EACE,WAAA;;AAEF,aAAa;EAnYX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;;AAqYA,kBAAmB;AACnB,kBAAmB;EACjB,WAAA;;AAGA,kBAAkB,kBAAmB;AACrC,kBAAkB,kBAAmB;EACnC,OAAQ,iBAAR;EACA,QAAS,iBAAT;;AAGF,kBAAmB;EACjB,QAAS,iBAAT;;AAEF,kBAAmB;EACjB,OAAQ,iBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;;AAIN,cAAe;EACb,cAAA;EACA,UAAA;EACA,iBAAA;;AAEF,cAAc,6BAA8B;EAC1C,eAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;;;AAIF;EACE,yBAAA;;AAEA,UAAW;EACT,yBAAA;;;;AAKJ,WAAY;AACZ,cAAe;AACf,WAAY,eAAe;AAC3B,cAAe,eAAe;EAC5B,WAAA;;AAEF,WAAY;AACZ,cAAe;EACb,SAAA;;AAMF,WAAW;EACT,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;;;AAIF;EACE,eAAA;;AAEA;EACE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;;AAEF,kBAAkB;EAChB,SAAU,GAAV;EACA,uBAAA;EACA,kBAAA;;AAEF,YAAY,uBAAwB,qBAAoB;EACtD,SAAU,GAAV;;;AAIF,QAAS;EACP,YAAA;;AAEA,QAAS,KAAK;EACZ,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,6BAAA;EACA,qBAAA;EACA,iBAAA;;AAEF,QAAS,KAAK,KAAI;EAChB,6BAAA;EACA,qBAAA;;AAEA,QAAS,KAAK,KAAI,WAAW;EAC3B,YAAA;EACA,gCAAA;;AAEN,QAAS;EACP,yBAAA;EACA,yBAAA;EACA,YAAA;;;;;;;;;AAYJ;EACE,YAAA;EACA,iBAAA;;AAEF,kBAAmB;AACnB,kBAAmB;EACjB,YAAA;EACA,iBAAA;EACA,gBAAA;;;AAIF;EACE,YAAA;;AAEF,UAAU;EACR,YAAA;;AAEA,UAAW;EAvmBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AAqmBA,UAAW,OAAM;EACf,2BAAA;;AAEF,UAAW,OAAM;AACjB,UAAW,OAAM;EAhmBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,YA5DqC,oDA4DrC;;AAgmBA,UAAW,OAAM,WAAW;AAC5B,UAAW,OAAM,SAAS;AAC1B,UAAW,OAAM;EA3mBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA2mBA,UAAW,OAAM,SAAU;EACzB,WAAA;;AAEF,UAAW,OAAM;EACf,eAAA;EACA,cAAA;;AAEF,UAAW,OAAM,cAAe;EAC9B,kBAAA;;AAEF,UAAU,cAAc,cAAe;EACrC,kBAAA;;AAEF,UAAU,qBAAqB,cAAc,cAAe;EAC1D,kBAAA;;;;AAKJ;AACA;EACE,YAAA;;AAEA,SAAU;AACV,YAAa;EACX,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;;AAEF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,2BAAA;;AAGF,SAAU;EACR,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;;AAGV,SAAU,MAAK,QAAQ;EACrB,SAAS,OAAT;EACA,eAAA;;AAGF,YAAa,MAAK,QAAQ;EACxB,SAAS,OAAT;EACA,eAAA;;AAGF,SAAS,sBAAuB;AAChC,YAAY,sBAAuB;EACjC,cAAA;;AAGF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,qBAAA;EACA,yBAAA;;AAGF,SAAU;AACV,YAAa;EACX,iBAAA;;AAEF,SAAU,QAAQ;AAClB,YAAa,QAAQ;EACnB,iBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EA9qBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EA6qBE,mBAAA;;AAEF,UAAW,OAAM;EA5qBjB,qBAAA;EACA,yBAAA;EACA,cAAA;;AA6qBA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAU;EACR,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AAEF,UAAU;EACR,SAAS,IAAT;EACA,WAAW,qBAAX;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,gBAAA;EACA,gCAAA;EAEA,mBAAmB,aAAnB;EACG,gBAAgB,aAAhB;EACC,eAAe,aAAf;EACI,WAAW,aAAX;;AAEV,UAAU,sBAAsB;EAC9B,yBAAA;;;AAIJ,eAAgB;EAntBd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAmtBA,eAAgB,OAAM;EACpB,2BAAA;;AAEJ,eAAgB,OAAM;EAntBpB,qBAAA;EACA,yBAAA;EACA,cAAA;;;AAstBF;EACE,YAAA;;AAEA,UAAW;EACT,uBAAA;EACA,cAAA;EACA,YAAA;;;;;AAOF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;;;;AAOF,UAAW,MAAK;EAtxBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EAmxBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAnxBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAoxBA,UAAW,MAAK;EA/xBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EA4xBE,YAAA;EACA,WAAA;EACA,iBAAA;;AAEF,UAAW,MAAK,SAAS;EA7xBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA8xBA,UAAW,MAAK;EAzyBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EAsyBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAtyBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;;;;AA0yBA,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EACT,WAAA;EAhzBF,YAAA;EACA,yBAAA;EACA,yBAAA;EAizBE,eAAA;EACA,UAAA;;AAGF,UAAW;EAh1BX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AA80BA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAW,QAAQ;EACjB,gBAAA;;AAGF,UAAU,sBAAuB;EAn1BjC,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAm1BA,UAAU,sBAAuB;EAh0BjC,qBAAA;EACA,yBAAA;EACA,cAAA;EAg0BE,UAAA;;AAGF,UAAU,sBAAuB;AACjC,UAAU,sBAAuB;EA/0BjC,cAAA;;;;AAq1BF;AACA;EACE,YAAA;;AAEA,YAAa;AACb,QAAS;EAv1BT,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAs1BE,iBAAA;EACA,kBAAA;;AAGF,YAAa,QAAQ;AACrB,QAAS,QAAQ;EACf,gBAAA;;AAGF,YAAa,MAAK;AAClB,QAAS,MAAK;EA71Bd,qBAAA;EACA,yBAAA;EACA,cAAA;;AA81BA,YAAa,MAAK;AAClB,QAAS,MAAK;EACZ,2BAAA;;AAGF,YAAY,sBAAuB;AACnC,QAAQ,sBAAuB;EA/2B/B,cAAA;;;AAq3BA,YAAa;EAl3Bb,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAk3BA,YAAa,SAAQ;EACnB,2BAAA;;AAEF,YAAa,SAAQ;EAl3BrB,qBAAA;EACA,yBAAA;EACA,cAAA;;AAo3BA,YAAY,sBAAuB;EA/3BnC,cAAA;;;AAo4BF;EACE,YAAA;EACA,yBAAA;EACA,yBAAA;;AAEA,YAAa;EACX,yBAAA;;;AAIJ,QAAS,eAAe;;EACtB,WAAA;;;AAIF,eAAgB;EAh5Bd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAGA,qBAAA;EACA,yBAAA;EACA,cAAA;;AA44BF,eAAgB;EACd,gBAAA;EA76BA,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EA06BA,iBAAA;EACA,kBAAA;;AAEA,eAAgB,OAAM;EACpB,2BAAA;;;;;;;;;AAgBJ;EACE,yBAAA;;;AAIF;EAx8BE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AAs8BA,aAAc;EACZ,gBAAA;;;AAIJ;EACE,6BAAA;EACA,mBAAA;EACA,+CAAA;EACA,cAAA;;AAEA,QAAS;EACP,cAAA;;AAEF,QAAS,iBAAiB;EACxB,eAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;EACvB,mBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,gBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,mBAAA;;AAEF,QAAS,iBAAgB,gBAAgB;EACvC,SAAU,GAAV;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB;EACvB,yBAAA;;AAEF,QAAS,iBAAgB,UAAW;AACpC,QAAS,iBAAgB,MAAO;EAC9B,cAAA;;AAEA,QAAS;EACP,+BAAA;;AAEF,IAAI,WAAY,SAAS;EACvB,qCAAA;;AAEF,QAAS,iBAAiB,QAAO;EAC/B,kBAAA;;AAEF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB,sBAAuB;EAC9C,cAAA;;;AAIN;EACE,iBAAA;EACA,kBAAA;;AAEA;EACE,eAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,mBAAA;EACA,cAAA;;AAEF,kBAAkB,sBAAuB;EACvC,cAAA;;;AAKJ;EACE,cAAA;EACA,YAAA;;AAEA,gBAAgB;EACd,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEF,gBAAiB;EACf,wBC5jC8D,6DD4jC9D;;AAEF,gBAAiB;EACf,WAAA;;;AAIJ;EACE,WAAA;EACA,mBAAA;;;;;;;;AAUF;EACE,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0BAAA;EACA,2BAAA;;AAGA,mBAAmB;EACjB,mCAAA;EACA,cAAA;;AAEF,mBAAmB,WAAY,MAAM;EACnC,mCAAA;;AAEF,aAAa,oBAAqB,oBAAmB;EACnD,mBAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY,MAAM;EACrE,mBAAA;;;AAIN;EACE,yBAAA;EACA,yBAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,yBAAA;;AAIE,aAAa,mBAAoB,mBAAmB,kBAAiB,UAAU;EAC7E,yBAAA;EACA,cAAA;;AAEF;EACE,YAAA;;AAEF,oBAAoB;EAClB,kBAAA;EACA,wBAAA;;AAEF,IAAI,WAAY,cAAc,qBAAoB;EAChD,eAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAa,qBAAsB,qBAAoB;EACrD,kBAAA;;AAEF,IAAI,WAAY,cAAa,qBAAsB,qBAAoB;EACrE,eAAA;EACA,mBAAA;;AAGJ,iBAAiB;EACf,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,kBAAiB;EACjD,yBAAA;;AAGF;EACE,iBAAA;EACA,UAAA;EACA,UAAA;;AAEA,4BAA4B;EAC1B,mBAAA;;;AAKR;EACE,yBAAA;EACA,yBAAA;;AAEE,aAAa;EACX,2BAAA;;AAEF,mBAAmB,SAAU;EAC3B,iBAAA;EACA,0BAAA;;AAEF,mBAAoB;EAClB,YAAA;;AAEF,mBAAoB,MAAM;EACxB,eAAA;EACA,YAAA;;AAEF,mBAAoB,MAAM,OAAM;EAC9B,kBAAA;;AAEF,mBAAoB;EAClB,iBAAA;;AAEF,mBAAoB,sBAAqB;EACvC,gBAAA;;AAEF,mBAAmB,WAAY;EAC7B,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY;EAC/D,yBAAA;;AAGJ,mBAAmB;EACjB,kBAAA;;AAEF,mBAAmB,eAAgB;EACjC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAEF,mBAAmB,eAAgB,uBAAsB;EACvD,SAAU,OAAV;EACA,kBAAA;EACA,cAAA;;AAEF,mBAAmB,eAAe,aAAc,yBAAwB;EACtE,SAAU,OAAV;;;;;;;AC7yCJ,kBAAkB;ED6FhB,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;;;AC7FV;EACE,gBAAiB,kEACA,kDADjB;;AAGF,kCAAkC;EAChC,gBAAiB,2EACA,kDADjB;;AAGF,kCAAkC;EAChC,gBAAiB,0EACA,kDADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,uEACA,kDADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,yEACA,kDADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,wEACA,kDADjB;;;AAKF;EACE,gBAAiB,kEACA,kDADjB;;AAGF,kCAAkC;EAChC,gBAAiB,2EACA,kDADjB;;AAGF,kCAAkC;EAChC,gBAAiB,0EACA,kDADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,uEACA,kDADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,yEACA,kDADjB;;AAGF,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,wEACA,kDADjB;;;AAKF;EACE,gBAAiB,+DACA,+CADjB;;AAGF,+BAA+B;EAC7B,gBAAiB,wEACA,+CADjB;;AAGF,+BAA+B;EAC7B,gBAAiB,uEACA,+CADjB;;AAIF,kBAAkB,qBAAsB;EACtC,gBAAiB,oEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,gCAA+B;EACrE,gBAAiB,sEACA,+CADjB;;AAGF,kBAAkB,qBAAsB,gCAA+B;EACrE,gBAAiB,qEACA,+CADjB"} \ No newline at end of file diff --git a/build/htdocs/dist/themes/styles/default/gui/progressbar.png b/build/htdocs/dist/themes/styles/default/gui/progressbar.png new file mode 100644 index 0000000..3adf92e Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/gui/progressbar.png differ diff --git a/build/htdocs/dist/themes/styles/default/theme.js b/build/htdocs/dist/themes/styles/default/theme.js new file mode 100644 index 0000000..ab07df7 --- /dev/null +++ b/build/htdocs/dist/themes/styles/default/theme.js @@ -0,0 +1,27 @@ +(function(API, Utils) { + 'use strict'; + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + + ///////////////////////////////////////////////////////////////////////////// + // API + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications.CoreWM.CurrentTheme = { + init: function() { + }, + + destroy: function() { + }, + + event: function(ev) { + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + +})(OSjs.API, OSjs.Utils); diff --git a/build/htdocs/dist/themes/styles/default/wm/close.png b/build/htdocs/dist/themes/styles/default/wm/close.png new file mode 100644 index 0000000..efb9d00 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_focused_normal.png b/build/htdocs/dist/themes/styles/default/wm/close_focused_normal.png new file mode 100644 index 0000000..efb9d00 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_focused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/close_focused_prelight.png new file mode 100644 index 0000000..0922da0 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_focused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/close_focused_pressed.png new file mode 100644 index 0000000..0aef683 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_unfocused.png b/build/htdocs/dist/themes/styles/default/wm/close_unfocused.png new file mode 100644 index 0000000..41f007d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_unfocused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/close_unfocused_prelight.png new file mode 100644 index 0000000..0922da0 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/close_unfocused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/close_unfocused_pressed.png new file mode 100644 index 0000000..0aef683 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/close_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize.png b/build/htdocs/dist/themes/styles/default/wm/maximize.png new file mode 100644 index 0000000..0ec48d5 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_focused_normal.png b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_normal.png new file mode 100644 index 0000000..0ec48d5 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_focused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_prelight.png new file mode 100644 index 0000000..b5f7a16 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_focused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_pressed.png new file mode 100644 index 0000000..c3770f3 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused.png b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused.png new file mode 100644 index 0000000..41f007d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_prelight.png new file mode 100644 index 0000000..b5f7a16 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_pressed.png new file mode 100644 index 0000000..c3770f3 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/maximize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize.png b/build/htdocs/dist/themes/styles/default/wm/minimize.png new file mode 100644 index 0000000..e8b86d0 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_focused_normal.png b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_normal.png new file mode 100644 index 0000000..e8b86d0 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_focused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_prelight.png new file mode 100644 index 0000000..d0707e4 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_focused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_pressed.png new file mode 100644 index 0000000..5b7806d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused.png b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused.png new file mode 100644 index 0000000..41f007d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_prelight.png new file mode 100644 index 0000000..d0707e4 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_pressed.png new file mode 100644 index 0000000..5b7806d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/minimize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize.png new file mode 100644 index 0000000..0ec48d5 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_normal.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_normal.png new file mode 100644 index 0000000..0ec48d5 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_normal.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_prelight.png new file mode 100644 index 0000000..b5f7a16 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_pressed.png new file mode 100644 index 0000000..c3770f3 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_focused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused.png new file mode 100644 index 0000000..41f007d Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_prelight.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_prelight.png new file mode 100644 index 0000000..b5f7a16 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_prelight.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_pressed.png b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_pressed.png new file mode 100644 index 0000000..c3770f3 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/unmaximize_unfocused_pressed.png differ diff --git a/build/htdocs/dist/themes/styles/default/wm/wm.png b/build/htdocs/dist/themes/styles/default/wm/wm.png new file mode 100644 index 0000000..fba0eb7 Binary files /dev/null and b/build/htdocs/dist/themes/styles/default/wm/wm.png differ diff --git a/build/htdocs/dist/themes/styles/glass.css b/build/htdocs/dist/themes/styles/glass.css new file mode 100644 index 0000000..b4063e9 --- /dev/null +++ b/build/htdocs/dist/themes/styles/glass.css @@ -0,0 +1,1240 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +/** + * =========================================================================== + * CLASSES + * =========================================================================== + */ +.gui-has-emblem { + background-repeat: no-repeat; + background-position: calc(96%) center; + padding-right: calc(20px); +} +.gui-generic-container { + padding: 4px; + color: #656565; +} +.gui-generic-zebra-container { + background-color: #ffffff; +} +.gui-generic-zebra-container > * { + padding: 4px; +} +.gui-generic-zebra-container > *:nth-child(even) { + background: rgba(254, 254, 254, 0.5); +} +.gui-generic-hoverable:hover { + background-color: #33a550; +} +.gui-generic-padded { + padding: 4px; +} +.gui-generic-double-padded { + padding: calc(8px); +} +.gui-generic-margin { + margin: 4px; +} +/** + * =========================================================================== + * OVERRIDES + * =========================================================================== + */ +body, +input, +button, +textarea, +label, +select { + font-family: Karla, Sans-serif; + font-weight: normal; + font-style: normal; + font-size: 12px; + color: #656565; +} +::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-button { + background: #c3c3c3; + color: #d9d9d9; + width: 12px; + height: 12px; + display: none; +} +::-webkit-scrollbar-track { + background: #fefefe; +} +::-webkit-scrollbar-track-piece { + background: #fefefe; +} +::-webkit-scrollbar-thumb { + background: #c3c3c3; +} +::-webkit-scrollbar-corner { + background: #fefefe; +} +::-webkit-resizer { + background: #fefefe; +} +/** + * =========================================================================== + * WM + * =========================================================================== + */ +body[data-attention="true"]:after { + background-color: #656565; +} +corewm-panel { + color: #ffffff; + /* Window Manager manages this */ + font-size: 0; + padding: 4px; +} +corewm-panel:before { + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +corewm-panel-container { + padding: 8px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width: calc(100% - 8px); +} +corewm-panel[data-orientation="vertical"] corewm-panel-container { + height: calc(100% - 8px); +} +corewm-panel corewm-panel-item .corewm-panel-buttons > li { + cursor: pointer; + font-size: 12px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-item .corewm-panel-buttons > li { + margin-right: 4px; + margin-left: 4px; +} +corewm-panel[data-orientation="vertical"] corewm-panel-item .corewm-panel-buttons > li { + margin-top: 4px; + margin-bottom: 4px; +} +corewm-panel .PanelItemClock { + font-family: Monospace, Courier New; + font-weight: normal; + text-align: right; +} +corewm-panel .PanelItemWindowList li { + opacity: .50; +} +corewm-panel .PanelItemWindowList li.Focused { + opacity: 1; +} +corewm-panel .PanelItemWindowList li img { + margin-right: 4px; +} +html[dir="rtl"] corewm-panel .PanelItemWindowList li img { + margin-right: 0; + margin-left: 4px; +} +/* Notifications */ +application-splash { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #fefefe; + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; + cursor: pointer; +} +.custom-notification { + color: #fff; + /* Window Manager manages this */ +} +corewm-notifications { + top: 10px; + right: 10px; +} +corewm-notification { + color: #fff; + /* Window Manager manages this */ + cursor: pointer; + padding: 8px; + margin-bottom: 4px; +} +.custom-notification:before, +corewm-notification:before { + content: ''; + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +.custom-notification .Title, +corewm-notification .Title { + font-weight: bold; +} +.custom-notification .Title, +.custom-notification .Message, +corewm-notification .Title, +corewm-notification .Message { + line-height: 16px; +} +/* Desktop drop wallpaper effect */ +#Background.Blinking { + background: #fff; +} +/* Window Switcher */ +corewm-window-switcher { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #fefefe; +} +corewm-window-switcher > div.Active { + background: #33a550; +} +corewm-window-switcher > div.Active > span { + color: #ffffff; +} +corewm-search { + padding: 4px; + min-width: 200px; + max-width: 40%; + right: 10px; + top: 10px; +} +corewm-search > div { + margin-top: 4px; +} +corewm-search > ul { + margin-top: 4px; + cursor: pointer; +} +corewm-search > ul > li { + padding: 4px; + padding-left: 24px; +} +corewm-search > ul > li > img { + top: 4px; + left: 4px; +} +corewm-search > ul > .active, +corewm-search > ul > li:hover { + background: #fff; + color: #000; +} +/** + * =========================================================================== + * WINDOW + * =========================================================================== + */ +application-window { + opacity: 0.8; + margin-top: 30px; +} +application-window:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.3); + background: #fefefe; + top: calc(-35px); + left: -5px; + right: -5px; + bottom: -5px; +} +application-window[data-focused="true"] { + opacity: 1.0; +} +application-window[data-focused="true"]:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); +} +application-window[data-dnd-state="true"]:after { + top: -30px; +} +application-window-top { + top: -30px; + height: 30px; +} +application-window-top application-window-icon { + width: 30px; +} +/* application-window-content {overflow : hidden;}*/ +application-window-top:active { + cursor: move; + cursor: pointer; +} +application-window-title { + font-weight: bold; + color: #656565; + opacity: .5; + left: 24px; + line-height: 30px; + text-align: center; +} +application-window-title:active { + cursor: move; + cursor: pointer; +} +application-window[data-focused="true"] application-window-title { + opacity: 1; +} +.application-window-button-entry { + width: 22px; + text-align: center; + cursor: pointer; +} +application-window-resize { + cursor: move; +} +application-window-top, +application-window-top > * { + cursor: default; +} +application-window-loading { + background: #000; + opacity: 0.8; +} +application-window-loading-indicator { + position: absolute; + width: 48px; + height: 48px; + left: 50%; + top: 50%; + margin-left: -24px; + margin-top: -24px; +} +application-window-loading-indicator:before { + display: block; + content: ''; + width: 44px; + height: 44px; + border-top: 4px solid #fff; + border-right: 4px solid #666; + border-left: 4px solid #666; + border-bottom: 4px solid #fff; + border-radius: 100%; + -webkit-animation: windowloadinganim 0.75s linear infinite; + -moz-animation: windowloadinganim 0.75s linear infinite; + -ms-animation: windowloadinganim 0.75s linear infinite; + animation: windowloadinganim 0.75s linear infinite; +} +application-window[data-dnd-state="true"]:after { + border: 4px solid rgba(0, 0, 0, 0.7); + border-radius: 1px; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + margin: -4px; +} +application-window-disabled { + background: #000; + opacity: 0.5; + cursor: not-allowed; +} +application-window-warning { + background: #FFB800; + color: #fff; + border-color: #DF9F15; + height: 30px; + line-height: 20px; + margin: 4px; + border: 1px solid transparent; +} +application-window-warning > div:nth-child(1) { + padding: 4px; +} +application-window-warning > div:nth-child(2) { + right: 20px; + padding: 4px; +} +application-window-warning > div:nth-child(1):hover { + color: #111; + cursor: pointer; + opacity: .9; +} +application-window-resize { + top: -38px; + left: -8px; + right: -8px; + bottom: -8px; +} +/** + * =========================================================================== + * CONTAINERS + * =========================================================================== + */ +/* Container */ +gui-container { + margin: 4px; +} +gui-container[data-borders="true"] { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +/* Box */ +gui-hbox-container > .gui-element, +gui-vbox-container > .gui-element { + margin: 4px; +} +gui-hbox-container[data-fill='true'] > *, +gui-vbox-container[data-fill='true'] > * { + width: calc(100% - 8px); + height: calc(100% - 8px); +} +gui-hbox-container > .perc-100 { + height: calc(100% - 8px); +} +gui-vbox-container > .perc-100 { + width: calc(100% - 8px); +} +gui-hbox-container > .perc-90 { + height: calc(90% - 8px); +} +gui-vbox-container > .perc-90 { + width: calc(90% - 8px); +} +gui-hbox-container > .perc-80 { + height: calc(80% - 8px); +} +gui-vbox-container > .perc-80 { + width: calc(80% - 8px); +} +gui-hbox-container > .perc-70 { + height: calc(70% - 8px); +} +gui-vbox-container > .perc-70 { + width: calc(70% - 8px); +} +gui-hbox-container > .perc-60 { + height: calc(60% - 8px); +} +gui-vbox-container > .perc-60 { + width: calc(60% - 8px); +} +gui-hbox-container > .perc-50 { + height: calc(50% - 8px); +} +gui-vbox-container > .perc-50 { + width: calc(50% - 8px); +} +gui-hbox-container > .perc-40 { + height: calc(40% - 8px); +} +gui-vbox-container > .perc-40 { + width: calc(40% - 8px); +} +gui-hbox-container > .perc-30 { + height: calc(30% - 8px); +} +gui-vbox-container > .perc-30 { + width: calc(30% - 8px); +} +gui-hbox-container > .perc-20 { + height: calc(20% - 8px); +} +gui-vbox-container > .perc-20 { + width: calc(20% - 8px); +} +gui-hbox-container > .perc-10 { + height: calc(10% - 8px); +} +gui-vbox-container > .perc-10 { + width: calc(10% - 8px); +} +/* Paned View */ +gui-paned-view > gui-paned-view-handle { + min-width: 8px; + width: 8px; + cursor: ew-resize; +} +gui-paned-view[data-orientation='vertical'] > gui-paned-view-handle { + min-width: auto; + width: auto; + min-height: 8px; + height: 8px; + cursor: ns-resize; +} +/* IFrame */ +gui-iframe { + background-color: #ffffff; +} +gui-iframe > iframe { + background-color: #ffffff; +} +/* Button Bar */ +/* Toolbar */ +gui-toolbar > *, +gui-button-bar > *, +gui-toolbar > gui-expander > *, +gui-button-bar > gui-expander > * { + margin: 4px; +} +gui-toolbar > gui-expander, +gui-button-bar > gui-expander { + margin: 0; +} +gui-toolbar[data-orientation="vertical"] { + margin-left: 0; + margin-right: 0; + margin-top: 4px; + margin-bottom: 4px; +} +/* Expander */ +gui-expander { + font-size: 12px; +} +gui-expander-label { + cursor: pointer; + padding: 4px; + background-color: #d9d9d9; + margin-bottom: 4px; +} +gui-expander-label:before { + content: '▼'; + font-family: sans-serif; + padding-right: 4px; +} +gui-expander[data-expanded="false"] > gui-expander-label:before { + content: '►'; +} +/* Tabs */ +gui-tabs > ul { + height: 25px; +} +gui-tabs > ul > li { + padding-left: 8px; + padding-right: 8px; + cursor: pointer; + background-color: #d9d9d9; + border: 1px solid transparent; + border-bottom: 0 none; + line-height: 25px; +} +gui-tabs > ul > li.gui-active { + background-color: transparent; + border-color: #c3c3c3; +} +gui-tabs > ul > li.gui-active:after { + bottom: -1px; + border-bottom: 1px solid #fefefe; +} +gui-tabs > gui-tab-container { + height: calc(100% - 25px); + border: 1px solid #c3c3c3; + padding: 4px; +} +/* Button Bar */ +/** + * =========================================================================== + * INPUTS + * =========================================================================== + */ +/* Label */ +gui-label { + height: 26px; + line-height: 26px; +} +gui-hbox-container > gui-label, +gui-vbox-container > gui-label { + height: 16px; + line-height: 16px; + min-height: 16px; +} +/* Button */ +gui-button { + height: 26px; +} +gui-button[data-icon-size="32"] { + height: 42px; +} +gui-button button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; +} +gui-button button:focus { + outline: 0 none transparent; +} +gui-button button.gui-active, +gui-button button:active { + border-color: #242424; + color: #656565; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); +} +gui-button button.gui-active:disabled, +gui-button button:disabled:active, +gui-button button:disabled { + border-color: #cccccc; + color: #656565; + background-color: #dddddd; + background: #dddddd; +} +gui-button button:disabled img { + opacity: .5; +} +gui-button button:disabled { + cursor: default; + color: #C7C7C7; +} +gui-button button.gui-has-image img { + padding-right: 4px; +} +gui-button.gui-has-image.gui-has-label button { + padding-left: 28px; +} +gui-button[data-icon-size="32"].gui-has-image.gui-has-label button { + padding-left: 44px; +} +/* Checkbox Button */ +/* Radio Button */ +gui-radio, +gui-checkbox { + height: 26px; +} +gui-radio input, +gui-checkbox input { + text-align: center; + background: #ffffff; + border: 1px solid #c3c3c3; + width: 16px; + height: 16px; + line-height: 12px; + color: #656565; + font-family: Arial; +} +gui-radio input:focus, +gui-checkbox input:focus { + outline: 0 none transparent; +} +gui-radio input { + -webkit-border-radius: 16px; + -moz-border-radius: 16px; + -ms-border-radius: 16px; + border-radius: 16px; +} +gui-radio input:checked:after { + content: "\2022"; + font-size: 32px; +} +gui-checkbox input:checked:after { + content: "\2713"; + font-size: 12px; +} +gui-radio[data-disabled="true"] label, +gui-checkbox[data-disabled="true"] label { + color: #C7C7C7; +} +gui-radio input:disabled, +gui-checkbox input:disabled { + border-color: #cccccc; + background-color: #dddddd; +} +gui-radio > label, +gui-checkbox > label { + line-height: 26px; +} +gui-radio > label > span, +gui-checkbox > label > span { + padding-left: 4px; +} +/* Select Dropdown */ +gui-select { + height: 26px; +} +gui-select select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; + padding-right: 20px; +} +gui-select select:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-select select:focus { + outline: 0 none transparent; +} +gui-select:before { + right: 1px; + top: 1px; + bottom: 1px; + width: 22px; + background: #ffffff; +} +gui-select:after { + content: '<>'; + font: 11px "Consolas", monospace; + color: #c3c3c3; + right: 2px; + top: 5px; + padding: 0 0 2px; + border-bottom: 1px solid #c3c3c3; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +gui-select[data-disabled="true"]:before { + background-color: #dddddd; +} +/* Select List */ +gui-select-list select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +gui-select-list select:focus { + outline: 0 none transparent; +} +gui-select-list select:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +/* Slider */ +gui-slider { + height: 26px; +} +gui-slider input { + background: transparent; + border: 0 none; + height: 26px; +} +/* + * RANGE TRACK + */ +gui-slider input::-moz-range-track { + height: 4px; + background-color: #d9d9d9; +} +gui-slider input::-webkit-slider-runnable-track { + height: 4px; + background-color: #d9d9d9; +} +gui-slider input::-ms-track { + height: 4px; + background-color: #d9d9d9; +} +/* + * RANGE THUMB + */ +gui-slider input::-moz-range-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; + height: 18px; + width: 10px; +} +gui-slider input:disabled::-moz-range-thumb { + border-color: #cccccc; + color: #656565; + background-color: #dddddd; + background: #dddddd; +} +gui-slider input::-webkit-slider-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; + height: 24px; + width: 16px; + margin-top: -10px; +} +gui-slider input:disabled::-webkit-range-thumb { + border-color: #cccccc; + color: #656565; + background-color: #dddddd; + background: #dddddd; +} +gui-slider input::-ms-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; + height: 24px; + width: 16px; +} +gui-slider input:disabled::-ms-thumb { + border-color: #cccccc; + color: #656565; + background-color: #dddddd; + background: #dddddd; +} +/** + * MISC + */ +gui-slider input[type=range]::-ms-fill-lower { + border: 0 none; + background-color: #d9d9d9; +} +gui-slider input[type=range]::-ms-fill-upper { + border: 0 none; + background-color: #d9d9d9; +} +gui-slider input[type=range]:focus::-ms-fill-lower { + background-color: #d9d9d9; +} +gui-slider input[type=range]:focus::-ms-fill-upper { + background-color: #d9d9d9; +} +/* Switch */ +gui-switch { + height: 26px; +} +gui-switch div { + width: 48px; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; + cursor: pointer; + padding: 0; +} +gui-switch button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; +} +gui-switch button:focus { + outline: 0 none transparent; +} +gui-switch > label > div { + margin-left: 4px; +} +gui-switch[data-disabled="true"] button { + border-color: #cccccc; + color: #656565; + background-color: #dddddd; + background: #dddddd; +} +gui-switch[data-disabled="true"] div { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; + padding: 0; +} +gui-switch[data-disabled="true"] button, +gui-switch[data-disabled="true"] label { + color: #C7C7C7; +} +/* Text Field */ +/* Password Field */ +gui-password, +gui-text { + height: 26px; +} +gui-password input, +gui-text input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; + padding-left: 8px; + padding-right: 8px; +} +gui-password > label > input, +gui-text > label > input { + margin-left: 4px; +} +gui-password input:disabled, +gui-text input:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-password input:focus, +gui-text input:focus { + outline: 0 none transparent; +} +gui-password[data-disabled="true"] label, +gui-text[data-disabled="true"] label { + color: #C7C7C7; +} +/* Text Area */ +gui-textarea textarea { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +gui-textarea textarea:focus { + outline: 0 none transparent; +} +gui-textarea textarea:disabled { + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-textarea[data-disabled="true"] label { + color: #C7C7C7; +} +/* Rich Text */ +gui-richtext { + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +gui-richtext > iframe { + background-color: #ffffff; +} +/* Grid */ +gui-grid > gui-grid-row > gui-grid-entry { + /* li */ + margin: 4px; +} +/* Modal Input */ +gui-input-modal input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #c3c3c3; + border-color: #cccccc; + background-color: #dddddd; + color: #C7C7C7; +} +gui-input-modal button { + margin-left: 4px; + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; + padding-left: 8px; + padding-right: 8px; +} +gui-input-modal button:focus { + outline: 0 none transparent; +} +/** + * =========================================================================== + * MISC + * =========================================================================== + */ +/* Video */ +/* Color Swatch */ +gui-color-swatch { + border: 1px solid #c3c3c3; +} +/* Color Box */ +gui-color-box { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); + border: 1px solid #c3c3c3; + color: #656565; +} +gui-color-box > div { + background: #fff; +} +/* Menu */ +gui-menu { + border: 1px solid transparent; + background: #fefefe; + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + color: #656565; +} +gui-menu > gui-menu-entry { + color: #656565; +} +gui-menu > gui-menu-entry > label { + cursor: pointer; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 16px; +} +html[dir="rtl"] gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 0; +} +html[dir="rtl"] gui-menu > gui-menu-entry[data-icon] { + padding-right: 16px; +} +gui-menu > gui-menu-entry.gui-menu-expand:after { + content: '►'; + font-family: sans-serif; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-hover, +gui-menu > gui-menu-entry:hover { + background-color: #33a550; +} +gui-menu > gui-menu-entry.gui-hover > label, +gui-menu > gui-menu-entry:hover > label { + color: #ffffff; +} +gui-menu > gui-menu-entry { + background-position: 4px center; +} +html[dir="rtl"] gui-menu > gui-menu-entry { + background-position: right 4px center; +} +gui-menu > gui-menu-entry > label.gui-has-image { + padding-left: 22px; +} +gui-menu > gui-menu-entry[data-disabled="true"], +gui-menu > gui-menu-entry[data-disabled="true"] > label { + color: #C7C7C7; +} +/* Menu Bar */ +gui-menu-bar { + padding-left: 4px; + padding-right: 4px; +} +gui-menu-bar-entry { + cursor: pointer; + padding: 4px; +} +gui-menu-bar-entry:hover { + background: #33a550; + color: #ffffff; +} +gui-menu-bar-entry[data-disabled="true"] > span { + color: #C7C7C7; +} +/* Progressbar */ +gui-progress-bar { + display: block; + height: 26px; +} +gui-progress-bar:before { + background-color: #d9d9d9; + border: 1px solid #c3c3c3; + padding: 4px; +} +gui-progress-bar > div { + background: #33a550 url('/themes/styles/glass/gui/progressbar.png') repeat-x center; +} +gui-progress-bar > span { + color: #fff; +} +/* Statusbar */ +gui-statusbar { + margin: 4px; + padding-bottom: 4px; +} +/** + * =========================================================================== + * VIEWS + * =========================================================================== + */ +/* Icon View */ +gui-icon-view { + background-color: #ffffff; + border: 1px solid #c3c3c3; + padding: 4px; +} +gui-icon-view.gui-element-focused { + outline: 0 none transparent; +} +gui-icon-view-entry { + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + min-width: 60px !important; + min-height: 60px !important; +} +gui-icon-view-entry.gui-active { + background: rgba(51, 165, 80, 0.8); + color: #ffffff; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(51, 165, 80, 0.8); +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active { + background: #33a550; +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active > div > span { + background: #33a550; +} +/* List View */ +gui-list-view { + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +gui-list-view.gui-element-focused { + outline: 0 none transparent; +} +gui-list-view-head { + background-color: #d9d9d9; +} +gui-list-view[data-zebra="true"] gui-list-view-body gui-list-view-row:nth-child(2n) { + background-color: #F9F9F9; + color: inherit; +} +gui-list-view-column { + padding: 4px; +} +gui-list-view-column.gui-has-image { + padding-left: 24px; + background-position: 4px; +} +html[dir="rtl"] gui-list-view gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 24px; + background-position: right 4px center; +} +gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 40px; +} +html[dir="rtl"] gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 40px; +} +gui-list-view-row.gui-active { + background-color: rgba(51, 165, 80, 0.8); + color: #ffffff; +} +gui-list-view.gui-element-focused gui-list-view-row.gui-active { + background-color: #33a550; +} +gui-list-view-column-resizer { + cursor: ew-resize; + width: 3px; + right: 0px; +} +gui-list-view-column-resizer:after { + background: #c3c3c3; +} +/* Tree View */ +gui-tree-view { + background-color: #ffffff; + border: 1px solid #c3c3c3; +} +gui-tree-view.gui-element-focused { + outline: 0 none transparent; +} +gui-tree-view-entry.dnd-over > div { + font-weight: bold; + text-decoration: underline; +} +gui-tree-view-entry > div { + padding: 4px; +} +gui-tree-view-entry > div > span { + cursor: pointer; + padding: 2px; +} +gui-tree-view-entry > div > span.gui-has-image { + padding-left: 20px; +} +gui-tree-view-entry > gui-tree-view-entry { + margin-left: 16px; +} +gui-tree-view-entry > gui-tree-view-entry.gui-expandable { + margin-left: 2px; +} +gui-tree-view-entry.gui-active > div { + background-color: rgba(51, 165, 80, 0.8); + color: #ffffff; +} +gui-tree-view.gui-element-focused gui-tree-view-entry.gui-active > div { + background-color: #33a550; +} +gui-tree-view-entry.gui-expandable { + padding-left: 16px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander { + padding-left: 4px; + cursor: pointer; + line-height: 24px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander:before { + content: '\25BA'; + font-family: Arial; + color: #c3c3c3; +} +gui-tree-view-entry.gui-expandable.gui-expanded > gui-tree-view-expander:before { + content: '\25BC'; +} +application-window-top { + height: 25px; +} +application-window-title { + line-height: 25px; +} +.application-window-button-entry { + width: 20px; +} +application-window-content { + background: #fefefe; +} +application-window:before { + opacity: .7; + border: 1px solid #fefefe; +} +/* Max */ +application-window-button-maximize, +application-window-button-maximize:hover, +application-window-button-maximize:active, +application-window[data-focused="true"] application-window-button-maximize, +application-window[data-focused="true"] application-window-button-maximize:hover, +application-window[data-focused="true"] application-window-button-maximize:active { + background: url('glass/wm/maximize.png') no-repeat center center; +} +/* Min */ +application-window-button-minimize, +application-window-button-minimize:hover, +application-window-button-minimize:active, +application-window[data-focused="true"] application-window-button-minimize, +application-window[data-focused="true"] application-window-button-minimize:hover, +application-window[data-focused="true"] application-window-button-minimize:active { + background: url('glass/wm/minimize.png') no-repeat center 70%; +} +/* Close */ +application-window-button-close, +application-window-button-close:hover, +application-window-button-close:active, +application-window[data-focused="true"] application-window-button-close, +application-window[data-focused="true"] application-window-button-close:hover, +application-window[data-focused="true"] application-window-button-close:active { + background: url('glass/wm/close.png') no-repeat center center; +} diff --git a/build/htdocs/dist/themes/styles/glass.css.map b/build/htdocs/dist/themes/styles/glass.css.map new file mode 100644 index 0000000..7b53e62 --- /dev/null +++ b/build/htdocs/dist/themes/styles/glass.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/mrsang/Google Drive/ushare/IoTOS/OS.js/src/client/stylesheets/theme.less","input"],"names":[],"mappings":"AAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT;EACE,4BAAA;EACA,qBAAsB,gBAAtB;EACA,eAAgB,UAAhB;;AAIF;EACE,YAAA;EACA,cAAA;;AAGF;EACE,yBAAA;;AAEA,4BAA6B;EAC3B,YAAA;;AAEF,4BAA6B,IAAG,UAAU;EACxC,oCAAA;;AAGJ,sBAAsB;EACpB,yBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,SAAU,SAAV;;AAEF;EACE,WAAA;;;;;;;AASF;AAAM;AAAO;AAAQ;AAAU;AAAO;EACpC,8BAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;;AAEF;EACE,mBAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;;;;;;AASF,IAAI,uBAAuB;EACzB,yBAAA;;AAGF;EACE,cAAA;;EACA,YAAA;EACA,YAAA;;AAEF,YAAY;EACV,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF;EACE,YAAA;;AAEF,YAAY,+BAAgC;EAC1C,OAAQ,iBAAR;;AAEF,YAAY,6BAA8B;EACxC,QAAS,iBAAT;;AAGA,YAAa,kBAAkB,sBAAsB;EACnD,eAAA;EACA,eAAA;;AAEF,YAAY,+BAAgC,kBAAkB,sBAAsB;EAClF,iBAAA;EACA,gBAAA;;AAEF,YAAY,6BAA8B,kBAAkB,sBAAsB;EAChF,eAAA;EACA,kBAAA;;AAGJ,YAAa;EACX,mCAAA;EACA,mBAAA;EACA,iBAAA;;AAGF,YAAa,qBAAqB;EAChC,YAAA;;AAEF,YAAa,qBAAqB,GAAE;EAClC,UAAA;;AAEF,YAAa,qBAAqB,GAAG;EACnC,iBAAA;;AAEF,IAAI,WAAY,aAAa,qBAAqB,GAAG;EACnD,eAAA;EACA,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;EACA,kDAAA;EACA,YAAA;EACA,eAAA;;AAGF;EACE,WAAA;;;AAGF;EACE,SAAA;EACA,WAAA;;AAGF;EACE,WAAA;;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAGA,oBAAoB;AACpB,mBAAmB;EACjB,SAAU,EAAV;EACA,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF,oBAAqB;AACrB,mBAAoB;EAClB,iBAAA;;AAGF,oBAAqB;AACrB,oBAAqB;AACrB,mBAAoB;AACpB,mBAAoB;EAClB,iBAAA;;;AAIF,WAAW;EACT,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;;AAEF,sBAAuB,MAAK;EAC1B,mBAAA;;AAEF,sBAAuB,MAAK,OAAQ;EAClC,cAAA;;AAGJ;EACE,YAAA;EACA,gBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;;AAEA,aAAc;EACZ,eAAA;;AAEF,aAAc;EACZ,eAAA;EACA,eAAA;;AAEA,aAAc,KAAK;EACjB,YAAA;EACA,kBAAA;;AAEA,aAAc,KAAK,KAAK;EACtB,QAAA;EACA,SAAA;;AAEJ,aAAc,KAAK;AACnB,aAAc,KAAK,KAAI;EACrB,gBAAA;EACA,WAAA;;;;;;;AAQN;EACE,YAAA;EACA,gBAAA;;AAEF,kBAAkB;EAChB,+CAAA;EACA,mBAAA;EACA,KAAM,WAAN;EACA,UAAA;EACA,WAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,YAAA;;AAEF,kBAAkB,qBAAqB;EACrC,+CAAA;;AAEA,kBAAkB,uBAAuB;EACzC,UAAA;;AAEF;EACE,UAAA;EACA,YAAA;;AAFF,sBAIE;EACE,WAAA;;;AAMJ,sBAAsB;EACpB,YAAA;EACA,eAAA;;AAEF;EACE,iBAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;;AAEF,wBAAwB;EACtB,YAAA;EACA,eAAA;;AAEF,kBAAkB,qBAAsB;EACtC,UAAA;;AAEF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;;AAEF;EACE,YAAA;;AAEF;AAAwB,sBAAuB;EAC7C,eAAA;;AAEF;EACE,gBAAA;EACA,YAAA;;AAEF;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,iBAAA;;AAEF,oCAAoC;EAClC,cAAA;EACA,SAAS,EAAT;EACA,WAAA;EACA,YAAA;EACA,0BAAA;EACA,4BAAA;EACA,2BAAA;EACA,6BAAA;EACA,mBAAA;EACA,0DAAA;EACG,uDAAA;EACC,sDAAA;EACI,kDAAA;;AAEV,kBAAkB,uBAAuB;EACvC,oCAAA;EACA,kBAAA;EA7XA,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;EA0XR,YAAA;;AAEF;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;;AAEF;EACE,mBAAA;EACA,WAAA;EACA,qBAAA;EAEA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,6BAAA;;AAEA,0BAA2B,MAAK,UAAU;EACxC,YAAA;;AAEF,0BAA2B,MAAK,UAAU;EACxC,WAAA;EACA,YAAA;;AAEF,0BAA2B,MAAK,UAAU,GAAG;EAC3C,WAAA;EACA,eAAA;EACA,WAAA;;AAEJ;EACE,UAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;;;;;;;;AAUF;EACE,WAAA;;AAEF,aAAa;EAnYX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;;AAqYA,kBAAmB;AACnB,kBAAmB;EACjB,WAAA;;AAGA,kBAAkB,kBAAmB;AACrC,kBAAkB,kBAAmB;EACnC,OAAQ,iBAAR;EACA,QAAS,iBAAT;;AAGF,kBAAmB;EACjB,QAAS,iBAAT;;AAEF,kBAAmB;EACjB,OAAQ,iBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;;AAIN,cAAe;EACb,cAAA;EACA,UAAA;EACA,iBAAA;;AAEF,cAAc,6BAA8B;EAC1C,eAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;;;AAIF;EACE,yBAAA;;AAEA,UAAW;EACT,yBAAA;;;;AAKJ,WAAY;AACZ,cAAe;AACf,WAAY,eAAe;AAC3B,cAAe,eAAe;EAC5B,WAAA;;AAEF,WAAY;AACZ,cAAe;EACb,SAAA;;AAMF,WAAW;EACT,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;;;AAIF;EACE,eAAA;;AAEA;EACE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;;AAEF,kBAAkB;EAChB,SAAU,GAAV;EACA,uBAAA;EACA,kBAAA;;AAEF,YAAY,uBAAwB,qBAAoB;EACtD,SAAU,GAAV;;;AAIF,QAAS;EACP,YAAA;;AAEA,QAAS,KAAK;EACZ,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,6BAAA;EACA,qBAAA;EACA,iBAAA;;AAEF,QAAS,KAAK,KAAI;EAChB,6BAAA;EACA,qBAAA;;AAEA,QAAS,KAAK,KAAI,WAAW;EAC3B,YAAA;EACA,gCAAA;;AAEN,QAAS;EACP,yBAAA;EACA,yBAAA;EACA,YAAA;;;;;;;;;AAYJ;EACE,YAAA;EACA,iBAAA;;AAEF,kBAAmB;AACnB,kBAAmB;EACjB,YAAA;EACA,iBAAA;EACA,gBAAA;;;AAIF;EACE,YAAA;;AAEF,UAAU;EACR,YAAA;;AAEA,UAAW;EAvmBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AAqmBA,UAAW,OAAM;EACf,2BAAA;;AAEF,UAAW,OAAM;AACjB,UAAW,OAAM;EAhmBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,YA5DqC,oDA4DrC;;AAgmBA,UAAW,OAAM,WAAW;AAC5B,UAAW,OAAM,SAAS;AAC1B,UAAW,OAAM;EA3mBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA2mBA,UAAW,OAAM,SAAU;EACzB,WAAA;;AAEF,UAAW,OAAM;EACf,eAAA;EACA,cAAA;;AAEF,UAAW,OAAM,cAAe;EAC9B,kBAAA;;AAEF,UAAU,cAAc,cAAe;EACrC,kBAAA;;AAEF,UAAU,qBAAqB,cAAc,cAAe;EAC1D,kBAAA;;;;AAKJ;AACA;EACE,YAAA;;AAEA,SAAU;AACV,YAAa;EACX,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;;AAEF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,2BAAA;;AAGF,SAAU;EACR,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;;AAGV,SAAU,MAAK,QAAQ;EACrB,SAAS,OAAT;EACA,eAAA;;AAGF,YAAa,MAAK,QAAQ;EACxB,SAAS,OAAT;EACA,eAAA;;AAGF,SAAS,sBAAuB;AAChC,YAAY,sBAAuB;EACjC,cAAA;;AAGF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,qBAAA;EACA,yBAAA;;AAGF,SAAU;AACV,YAAa;EACX,iBAAA;;AAEF,SAAU,QAAQ;AAClB,YAAa,QAAQ;EACnB,iBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EA9qBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EA6qBE,mBAAA;;AAEF,UAAW,OAAM;EA5qBjB,qBAAA;EACA,yBAAA;EACA,cAAA;;AA6qBA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAU;EACR,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AAEF,UAAU;EACR,SAAS,IAAT;EACA,WAAW,qBAAX;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,gBAAA;EACA,gCAAA;EAEA,mBAAmB,aAAnB;EACG,gBAAgB,aAAhB;EACC,eAAe,aAAf;EACI,WAAW,aAAX;;AAEV,UAAU,sBAAsB;EAC9B,yBAAA;;;AAIJ,eAAgB;EAntBd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAmtBA,eAAgB,OAAM;EACpB,2BAAA;;AAEJ,eAAgB,OAAM;EAntBpB,qBAAA;EACA,yBAAA;EACA,cAAA;;;AAstBF;EACE,YAAA;;AAEA,UAAW;EACT,uBAAA;EACA,cAAA;EACA,YAAA;;;;;AAOF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;;;;AAOF,UAAW,MAAK;EAtxBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EAmxBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAnxBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAoxBA,UAAW,MAAK;EA/xBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EA4xBE,YAAA;EACA,WAAA;EACA,iBAAA;;AAEF,UAAW,MAAK,SAAS;EA7xBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA8xBA,UAAW,MAAK;EAzyBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EAsyBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAtyBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;;;;AA0yBA,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EACT,WAAA;EAhzBF,YAAA;EACA,yBAAA;EACA,yBAAA;EAizBE,eAAA;EACA,UAAA;;AAGF,UAAW;EAh1BX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AA80BA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAW,QAAQ;EACjB,gBAAA;;AAGF,UAAU,sBAAuB;EAn1BjC,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAm1BA,UAAU,sBAAuB;EAh0BjC,qBAAA;EACA,yBAAA;EACA,cAAA;EAg0BE,UAAA;;AAGF,UAAU,sBAAuB;AACjC,UAAU,sBAAuB;EA/0BjC,cAAA;;;;AAq1BF;AACA;EACE,YAAA;;AAEA,YAAa;AACb,QAAS;EAv1BT,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAs1BE,iBAAA;EACA,kBAAA;;AAGF,YAAa,QAAQ;AACrB,QAAS,QAAQ;EACf,gBAAA;;AAGF,YAAa,MAAK;AAClB,QAAS,MAAK;EA71Bd,qBAAA;EACA,yBAAA;EACA,cAAA;;AA81BA,YAAa,MAAK;AAClB,QAAS,MAAK;EACZ,2BAAA;;AAGF,YAAY,sBAAuB;AACnC,QAAQ,sBAAuB;EA/2B/B,cAAA;;;AAq3BA,YAAa;EAl3Bb,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAk3BA,YAAa,SAAQ;EACnB,2BAAA;;AAEF,YAAa,SAAQ;EAl3BrB,qBAAA;EACA,yBAAA;EACA,cAAA;;AAo3BA,YAAY,sBAAuB;EA/3BnC,cAAA;;;AAo4BF;EACE,YAAA;EACA,yBAAA;EACA,yBAAA;;AAEA,YAAa;EACX,yBAAA;;;AAIJ,QAAS,eAAe;;EACtB,WAAA;;;AAIF,eAAgB;EAh5Bd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAGA,qBAAA;EACA,yBAAA;EACA,cAAA;;AA44BF,eAAgB;EACd,gBAAA;EA76BA,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;EA06BA,iBAAA;EACA,kBAAA;;AAEA,eAAgB,OAAM;EACpB,2BAAA;;;;;;;;;AAgBJ;EACE,yBAAA;;;AAIF;EAx8BE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YAnDqC,oDAmDrC;EACA,yBAAA;EACA,cAAA;;AAs8BA,aAAc;EACZ,gBAAA;;;AAIJ;EACE,6BAAA;EACA,mBAAA;EACA,+CAAA;EACA,cAAA;;AAEA,QAAS;EACP,cAAA;;AAEF,QAAS,iBAAiB;EACxB,eAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;EACvB,mBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,gBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,mBAAA;;AAEF,QAAS,iBAAgB,gBAAgB;EACvC,SAAU,GAAV;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB;EACvB,yBAAA;;AAEF,QAAS,iBAAgB,UAAW;AACpC,QAAS,iBAAgB,MAAO;EAC9B,cAAA;;AAEA,QAAS;EACP,+BAAA;;AAEF,IAAI,WAAY,SAAS;EACvB,qCAAA;;AAEF,QAAS,iBAAiB,QAAO;EAC/B,kBAAA;;AAEF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB,sBAAuB;EAC9C,cAAA;;;AAIN;EACE,iBAAA;EACA,kBAAA;;AAEA;EACE,eAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,mBAAA;EACA,cAAA;;AAEF,kBAAkB,sBAAuB;EACvC,cAAA;;;AAKJ;EACE,cAAA;EACA,YAAA;;AAEA,gBAAgB;EACd,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEF,gBAAiB;EACf,wBC3lC8D,2DD2lC9D;;AAEF,gBAAiB;EACf,WAAA;;;AAIJ;EACE,WAAA;EACA,mBAAA;;;;;;;;AAUF;EACE,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0BAAA;EACA,2BAAA;;AAGA,mBAAmB;EACjB,kCAAA;EACA,cAAA;;AAEF,mBAAmB,WAAY,MAAM;EACnC,kCAAA;;AAEF,aAAa,oBAAqB,oBAAmB;EACnD,mBAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY,MAAM;EACrE,mBAAA;;;AAIN;EACE,yBAAA;EACA,yBAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,yBAAA;;AAIE,aAAa,mBAAoB,mBAAmB,kBAAiB,UAAU;EAC7E,yBAAA;EACA,cAAA;;AAEF;EACE,YAAA;;AAEF,oBAAoB;EAClB,kBAAA;EACA,wBAAA;;AAEF,IAAI,WAAY,cAAc,qBAAoB;EAChD,eAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAa,qBAAsB,qBAAoB;EACrD,kBAAA;;AAEF,IAAI,WAAY,cAAa,qBAAsB,qBAAoB;EACrE,eAAA;EACA,mBAAA;;AAGJ,iBAAiB;EACf,wCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,kBAAiB;EACjD,yBAAA;;AAGF;EACE,iBAAA;EACA,UAAA;EACA,UAAA;;AAEA,4BAA4B;EAC1B,mBAAA;;;AAKR;EACE,yBAAA;EACA,yBAAA;;AAEE,aAAa;EACX,2BAAA;;AAEF,mBAAmB,SAAU;EAC3B,iBAAA;EACA,0BAAA;;AAEF,mBAAoB;EAClB,YAAA;;AAEF,mBAAoB,MAAM;EACxB,eAAA;EACA,YAAA;;AAEF,mBAAoB,MAAM,OAAM;EAC9B,kBAAA;;AAEF,mBAAoB;EAClB,iBAAA;;AAEF,mBAAoB,sBAAqB;EACvC,gBAAA;;AAEF,mBAAmB,WAAY;EAC7B,wCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY;EAC/D,yBAAA;;AAGJ,mBAAmB;EACjB,kBAAA;;AAEF,mBAAmB,eAAgB;EACjC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAEF,mBAAmB,eAAgB,uBAAsB;EACvD,SAAU,OAAV;EACA,kBAAA;EACA,cAAA;;AAEF,mBAAmB,eAAe,aAAc,yBAAwB;EACtE,SAAU,OAAV;;ACzyCJ;EACE,YAAA;;AAEF;EACE,iBAAA;;AAGF;EACE,WAAA;;AAGF;EACE,mBAAA;;AAGF,kBAAkB;EAChB,WAAA;EACA,yBAAA;;;AAIF;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kBAAkB,qBAAsB;AACxC,kBAAkB,qBAAsB,mCAAkC;AAC1E,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,gDAAjB;;;AAIF;AACA,kCAAkC;AAClC,kCAAkC;AAClC,kBAAkB,qBAAsB;AACxC,kBAAkB,qBAAsB,mCAAkC;AAC1E,kBAAkB,qBAAsB,mCAAkC;EACxE,gBAAiB,6CAAjB;;;AAIF;AACA,+BAA+B;AAC/B,+BAA+B;AAC/B,kBAAkB,qBAAsB;AACxC,kBAAkB,qBAAsB,gCAA+B;AACvE,kBAAkB,qBAAsB,gCAA+B;EACrE,gBAAiB,6CAAjB"} \ No newline at end of file diff --git a/build/htdocs/dist/themes/styles/glass/gui/progressbar.png b/build/htdocs/dist/themes/styles/glass/gui/progressbar.png new file mode 100644 index 0000000..c1b1afc Binary files /dev/null and b/build/htdocs/dist/themes/styles/glass/gui/progressbar.png differ diff --git a/build/htdocs/dist/themes/styles/glass/theme.js b/build/htdocs/dist/themes/styles/glass/theme.js new file mode 100644 index 0000000..ab07df7 --- /dev/null +++ b/build/htdocs/dist/themes/styles/glass/theme.js @@ -0,0 +1,27 @@ +(function(API, Utils) { + 'use strict'; + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + + ///////////////////////////////////////////////////////////////////////////// + // API + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications.CoreWM.CurrentTheme = { + init: function() { + }, + + destroy: function() { + }, + + event: function(ev) { + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + +})(OSjs.API, OSjs.Utils); diff --git a/build/htdocs/dist/themes/styles/glass/wm/close.png b/build/htdocs/dist/themes/styles/glass/wm/close.png new file mode 100644 index 0000000..6d451e7 Binary files /dev/null and b/build/htdocs/dist/themes/styles/glass/wm/close.png differ diff --git a/build/htdocs/dist/themes/styles/glass/wm/maximize.png b/build/htdocs/dist/themes/styles/glass/wm/maximize.png new file mode 100644 index 0000000..277b150 Binary files /dev/null and b/build/htdocs/dist/themes/styles/glass/wm/maximize.png differ diff --git a/build/htdocs/dist/themes/styles/glass/wm/minimize.png b/build/htdocs/dist/themes/styles/glass/wm/minimize.png new file mode 100644 index 0000000..37bbb06 Binary files /dev/null and b/build/htdocs/dist/themes/styles/glass/wm/minimize.png differ diff --git a/build/htdocs/dist/themes/styles/glass/wm/wm.png b/build/htdocs/dist/themes/styles/glass/wm/wm.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/styles/glass/wm/wm.png differ diff --git a/build/htdocs/dist/themes/styles/material.css b/build/htdocs/dist/themes/styles/material.css new file mode 100644 index 0000000..5b1026c --- /dev/null +++ b/build/htdocs/dist/themes/styles/material.css @@ -0,0 +1,1478 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +/** + * =========================================================================== + * CLASSES + * =========================================================================== + */ +.gui-has-emblem { + background-repeat: no-repeat; + background-position: calc(96%) center; + padding-right: calc(20px); +} +.gui-generic-container { + padding: 4px; + color: #242424; +} +.gui-generic-zebra-container { + background-color: #ffffff; +} +.gui-generic-zebra-container > * { + padding: 4px; +} +.gui-generic-zebra-container > *:nth-child(even) { + background: rgba(25, 118, 210, 0.5); +} +.gui-generic-hoverable:hover { + background-color: #2d73d2; +} +.gui-generic-padded { + padding: 4px; +} +.gui-generic-double-padded { + padding: calc(8px); +} +.gui-generic-margin { + margin: 4px; +} +/** + * =========================================================================== + * OVERRIDES + * =========================================================================== + */ +body, +input, +button, +textarea, +label, +select { + font-family: Karla, Sans-serif; + font-weight: normal; + font-style: normal; + font-size: 12px; + color: #242424; +} +::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-button { + background: #cdcdcd; + color: #f0f0f0; + width: 12px; + height: 12px; + display: none; +} +::-webkit-scrollbar-track { + background: #f0f0f0; +} +::-webkit-scrollbar-track-piece { + background: #f0f0f0; +} +::-webkit-scrollbar-thumb { + background: #cdcdcd; +} +::-webkit-scrollbar-corner { + background: #f0f0f0; +} +::-webkit-resizer { + background: #f0f0f0; +} +/** + * =========================================================================== + * WM + * =========================================================================== + */ +body[data-attention="true"]:after { + background-color: #242424; +} +corewm-panel { + color: #ffffff; + /* Window Manager manages this */ + font-size: 0; + padding: 4px; +} +corewm-panel:before { + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +corewm-panel-container { + padding: 8px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width: calc(100% - 8px); +} +corewm-panel[data-orientation="vertical"] corewm-panel-container { + height: calc(100% - 8px); +} +corewm-panel corewm-panel-item .corewm-panel-buttons > li { + cursor: pointer; + font-size: 12px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-item .corewm-panel-buttons > li { + margin-right: 4px; + margin-left: 4px; +} +corewm-panel[data-orientation="vertical"] corewm-panel-item .corewm-panel-buttons > li { + margin-top: 4px; + margin-bottom: 4px; +} +corewm-panel .PanelItemClock { + font-family: Monospace, Courier New; + font-weight: normal; + text-align: right; +} +corewm-panel .PanelItemWindowList li { + opacity: .50; +} +corewm-panel .PanelItemWindowList li.Focused { + opacity: 1; +} +corewm-panel .PanelItemWindowList li img { + margin-right: 4px; +} +html[dir="rtl"] corewm-panel .PanelItemWindowList li img { + margin-right: 0; + margin-left: 4px; +} +/* Notifications */ +application-splash { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #1976d2; + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; + cursor: pointer; +} +.custom-notification { + color: #fff; + /* Window Manager manages this */ +} +corewm-notifications { + top: 10px; + right: 10px; +} +corewm-notification { + color: #fff; + /* Window Manager manages this */ + cursor: pointer; + padding: 8px; + margin-bottom: 4px; +} +.custom-notification:before, +corewm-notification:before { + content: ''; + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +.custom-notification .Title, +corewm-notification .Title { + font-weight: bold; +} +.custom-notification .Title, +.custom-notification .Message, +corewm-notification .Title, +corewm-notification .Message { + line-height: 16px; +} +/* Desktop drop wallpaper effect */ +#Background.Blinking { + background: #fff; +} +/* Window Switcher */ +corewm-window-switcher { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #1976d2; +} +corewm-window-switcher > div.Active { + background: #2d73d2; +} +corewm-window-switcher > div.Active > span { + color: #ffffff; +} +corewm-search { + padding: 4px; + min-width: 200px; + max-width: 40%; + right: 10px; + top: 10px; +} +corewm-search > div { + margin-top: 4px; +} +corewm-search > ul { + margin-top: 4px; + cursor: pointer; +} +corewm-search > ul > li { + padding: 4px; + padding-left: 24px; +} +corewm-search > ul > li > img { + top: 4px; + left: 4px; +} +corewm-search > ul > .active, +corewm-search > ul > li:hover { + background: #fff; + color: #000; +} +/** + * =========================================================================== + * WINDOW + * =========================================================================== + */ +application-window { + opacity: 0.8; + margin-top: 34px; +} +application-window:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.3); + background: #1976d2; + top: calc(-34px); + left: 0; + right: 0; + bottom: 0; +} +application-window[data-focused="true"] { + opacity: 1.0; +} +application-window[data-focused="true"]:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); +} +application-window[data-dnd-state="true"]:after { + top: -34px; +} +application-window-top { + top: -34px; + height: 34px; +} +application-window-top application-window-icon { + width: 34px; +} +/* application-window-content {overflow : hidden;}*/ +application-window-top:active { + cursor: move; + cursor: pointer; +} +application-window-title { + font-weight: bold; + color: #242424; + opacity: .5; + left: 24px; + line-height: 34px; + text-align: center; +} +application-window-title:active { + cursor: move; + cursor: pointer; +} +application-window[data-focused="true"] application-window-title { + opacity: 1; +} +.application-window-button-entry { + width: 22px; + text-align: center; + cursor: pointer; +} +application-window-resize { + cursor: move; +} +application-window-top, +application-window-top > * { + cursor: default; +} +application-window-loading { + background: #000; + opacity: 0.8; +} +application-window-loading-indicator { + position: absolute; + width: 48px; + height: 48px; + left: 50%; + top: 50%; + margin-left: -24px; + margin-top: -24px; +} +application-window-loading-indicator:before { + display: block; + content: ''; + width: 44px; + height: 44px; + border-top: 4px solid #fff; + border-right: 4px solid #666; + border-left: 4px solid #666; + border-bottom: 4px solid #fff; + border-radius: 100%; + -webkit-animation: windowloadinganim 0.75s linear infinite; + -moz-animation: windowloadinganim 0.75s linear infinite; + -ms-animation: windowloadinganim 0.75s linear infinite; + animation: windowloadinganim 0.75s linear infinite; +} +application-window[data-dnd-state="true"]:after { + border: 4px solid rgba(0, 0, 0, 0.7); + border-radius: 1px; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + margin: -4px; +} +application-window-disabled { + background: #000; + opacity: 0.5; + cursor: not-allowed; +} +application-window-warning { + background: #FFB800; + color: #fff; + border-color: #DF9F15; + height: 30px; + line-height: 20px; + margin: 4px; + border: 1px solid transparent; +} +application-window-warning > div:nth-child(1) { + padding: 4px; +} +application-window-warning > div:nth-child(2) { + right: 20px; + padding: 4px; +} +application-window-warning > div:nth-child(1):hover { + color: #111; + cursor: pointer; + opacity: .9; +} +application-window-resize { + top: -42px; + left: -8px; + right: -8px; + bottom: -8px; +} +/** + * =========================================================================== + * CONTAINERS + * =========================================================================== + */ +/* Container */ +gui-container { + margin: 4px; +} +gui-container[data-borders="true"] { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +/* Box */ +gui-hbox-container > .gui-element, +gui-vbox-container > .gui-element { + margin: 4px; +} +gui-hbox-container[data-fill='true'] > *, +gui-vbox-container[data-fill='true'] > * { + width: calc(100% - 8px); + height: calc(100% - 8px); +} +gui-hbox-container > .perc-100 { + height: calc(100% - 8px); +} +gui-vbox-container > .perc-100 { + width: calc(100% - 8px); +} +gui-hbox-container > .perc-90 { + height: calc(90% - 8px); +} +gui-vbox-container > .perc-90 { + width: calc(90% - 8px); +} +gui-hbox-container > .perc-80 { + height: calc(80% - 8px); +} +gui-vbox-container > .perc-80 { + width: calc(80% - 8px); +} +gui-hbox-container > .perc-70 { + height: calc(70% - 8px); +} +gui-vbox-container > .perc-70 { + width: calc(70% - 8px); +} +gui-hbox-container > .perc-60 { + height: calc(60% - 8px); +} +gui-vbox-container > .perc-60 { + width: calc(60% - 8px); +} +gui-hbox-container > .perc-50 { + height: calc(50% - 8px); +} +gui-vbox-container > .perc-50 { + width: calc(50% - 8px); +} +gui-hbox-container > .perc-40 { + height: calc(40% - 8px); +} +gui-vbox-container > .perc-40 { + width: calc(40% - 8px); +} +gui-hbox-container > .perc-30 { + height: calc(30% - 8px); +} +gui-vbox-container > .perc-30 { + width: calc(30% - 8px); +} +gui-hbox-container > .perc-20 { + height: calc(20% - 8px); +} +gui-vbox-container > .perc-20 { + width: calc(20% - 8px); +} +gui-hbox-container > .perc-10 { + height: calc(10% - 8px); +} +gui-vbox-container > .perc-10 { + width: calc(10% - 8px); +} +/* Paned View */ +gui-paned-view > gui-paned-view-handle { + min-width: 8px; + width: 8px; + cursor: ew-resize; +} +gui-paned-view[data-orientation='vertical'] > gui-paned-view-handle { + min-width: auto; + width: auto; + min-height: 8px; + height: 8px; + cursor: ns-resize; +} +/* IFrame */ +gui-iframe { + background-color: #ffffff; +} +gui-iframe > iframe { + background-color: #ffffff; +} +/* Button Bar */ +/* Toolbar */ +gui-toolbar > *, +gui-button-bar > *, +gui-toolbar > gui-expander > *, +gui-button-bar > gui-expander > * { + margin: 4px; +} +gui-toolbar > gui-expander, +gui-button-bar > gui-expander { + margin: 0; +} +gui-toolbar[data-orientation="vertical"] { + margin-left: 0; + margin-right: 0; + margin-top: 4px; + margin-bottom: 4px; +} +/* Expander */ +gui-expander { + font-size: 12px; +} +gui-expander-label { + cursor: pointer; + padding: 4px; + background-color: #f5f6f8; + margin-bottom: 4px; +} +gui-expander-label:before { + content: '▼'; + font-family: sans-serif; + padding-right: 4px; +} +gui-expander[data-expanded="false"] > gui-expander-label:before { + content: '►'; +} +/* Tabs */ +gui-tabs > ul { + height: 25px; +} +gui-tabs > ul > li { + padding-left: 8px; + padding-right: 8px; + cursor: pointer; + background-color: #f5f6f8; + border: 1px solid transparent; + border-bottom: 0 none; + line-height: 25px; +} +gui-tabs > ul > li.gui-active { + background-color: transparent; + border-color: #dbdbdb; +} +gui-tabs > ul > li.gui-active:after { + bottom: -1px; + border-bottom: 1px solid #1976d2; +} +gui-tabs > gui-tab-container { + height: calc(100% - 25px); + border: 1px solid #dbdbdb; + padding: 4px; +} +/* Button Bar */ +/** + * =========================================================================== + * INPUTS + * =========================================================================== + */ +/* Label */ +gui-label { + height: 26px; + line-height: 26px; +} +gui-hbox-container > gui-label, +gui-vbox-container > gui-label { + height: 16px; + line-height: 16px; + min-height: 16px; +} +/* Button */ +gui-button { + height: 26px; +} +gui-button[data-icon-size="32"] { + height: 42px; +} +gui-button button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-button button:focus { + outline: 0 none transparent; +} +gui-button button.gui-active, +gui-button button:active { + border-color: #242424; + color: #242424; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); +} +gui-button button.gui-active:disabled, +gui-button button:disabled:active, +gui-button button:disabled { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-button button:disabled img { + opacity: .5; +} +gui-button button:disabled { + cursor: default; + color: #727272; +} +gui-button button.gui-has-image img { + padding-right: 4px; +} +gui-button.gui-has-image.gui-has-label button { + padding-left: 28px; +} +gui-button[data-icon-size="32"].gui-has-image.gui-has-label button { + padding-left: 44px; +} +/* Checkbox Button */ +/* Radio Button */ +gui-radio, +gui-checkbox { + height: 26px; +} +gui-radio input, +gui-checkbox input { + text-align: center; + background: #ffffff; + border: 1px solid #dbdbdb; + width: 16px; + height: 16px; + line-height: 12px; + color: #242424; + font-family: Arial; +} +gui-radio input:focus, +gui-checkbox input:focus { + outline: 0 none transparent; +} +gui-radio input { + -webkit-border-radius: 16px; + -moz-border-radius: 16px; + -ms-border-radius: 16px; + border-radius: 16px; +} +gui-radio input:checked:after { + content: "\2022"; + font-size: 32px; +} +gui-checkbox input:checked:after { + content: "\2713"; + font-size: 12px; +} +gui-radio[data-disabled="true"] label, +gui-checkbox[data-disabled="true"] label { + color: #727272; +} +gui-radio input:disabled, +gui-checkbox input:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; +} +gui-radio > label, +gui-checkbox > label { + line-height: 26px; +} +gui-radio > label > span, +gui-checkbox > label > span { + padding-left: 4px; +} +/* Select Dropdown */ +gui-select { + height: 26px; +} +gui-select select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding-right: 20px; +} +gui-select select:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-select select:focus { + outline: 0 none transparent; +} +gui-select:before { + right: 1px; + top: 1px; + bottom: 1px; + width: 22px; + background: #ffffff; +} +gui-select:after { + content: '<>'; + font: 11px "Consolas", monospace; + color: #dbdbdb; + right: 2px; + top: 5px; + padding: 0 0 2px; + border-bottom: 1px solid #dbdbdb; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +gui-select[data-disabled="true"]:before { + background-color: #e6e6e6; +} +/* Select List */ +gui-select-list select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-select-list select:focus { + outline: 0 none transparent; +} +gui-select-list select:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +/* Slider */ +gui-slider { + height: 26px; +} +gui-slider input { + background: transparent; + border: 0 none; + height: 26px; +} +/* + * RANGE TRACK + */ +gui-slider input::-moz-range-track { + height: 4px; + background-color: #f5f6f8; +} +gui-slider input::-webkit-slider-runnable-track { + height: 4px; + background-color: #f5f6f8; +} +gui-slider input::-ms-track { + height: 4px; + background-color: #f5f6f8; +} +/* + * RANGE THUMB + */ +gui-slider input::-moz-range-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 18px; + width: 10px; +} +gui-slider input:disabled::-moz-range-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-slider input::-webkit-slider-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 24px; + width: 16px; + margin-top: -10px; +} +gui-slider input:disabled::-webkit-range-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-slider input::-ms-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 24px; + width: 16px; +} +gui-slider input:disabled::-ms-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +/** + * MISC + */ +gui-slider input[type=range]::-ms-fill-lower { + border: 0 none; + background-color: #f5f6f8; +} +gui-slider input[type=range]::-ms-fill-upper { + border: 0 none; + background-color: #f5f6f8; +} +gui-slider input[type=range]:focus::-ms-fill-lower { + background-color: #f5f6f8; +} +gui-slider input[type=range]:focus::-ms-fill-upper { + background-color: #f5f6f8; +} +/* Switch */ +gui-switch { + height: 26px; +} +gui-switch div { + width: 48px; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + cursor: pointer; + padding: 0; +} +gui-switch button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-switch button:focus { + outline: 0 none transparent; +} +gui-switch > label > div { + margin-left: 4px; +} +gui-switch[data-disabled="true"] button { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-switch[data-disabled="true"] div { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; + padding: 0; +} +gui-switch[data-disabled="true"] button, +gui-switch[data-disabled="true"] label { + color: #727272; +} +/* Text Field */ +/* Password Field */ +gui-password, +gui-text { + height: 26px; +} +gui-password input, +gui-text input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding-left: 8px; + padding-right: 8px; +} +gui-password > label > input, +gui-text > label > input { + margin-left: 4px; +} +gui-password input:disabled, +gui-text input:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-password input:focus, +gui-text input:focus { + outline: 0 none transparent; +} +gui-password[data-disabled="true"] label, +gui-text[data-disabled="true"] label { + color: #727272; +} +/* Text Area */ +gui-textarea textarea { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-textarea textarea:focus { + outline: 0 none transparent; +} +gui-textarea textarea:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-textarea[data-disabled="true"] label { + color: #727272; +} +/* Rich Text */ +gui-richtext { + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-richtext > iframe { + background-color: #ffffff; +} +/* Grid */ +gui-grid > gui-grid-row > gui-grid-entry { + /* li */ + margin: 4px; +} +/* Modal Input */ +gui-input-modal input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-input-modal button { + margin-left: 4px; + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + padding-left: 8px; + padding-right: 8px; +} +gui-input-modal button:focus { + outline: 0 none transparent; +} +/** + * =========================================================================== + * MISC + * =========================================================================== + */ +/* Video */ +/* Color Swatch */ +gui-color-swatch { + border: 1px solid #dbdbdb; +} +/* Color Box */ +gui-color-box { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-color-box > div { + background: #fff; +} +/* Menu */ +gui-menu { + border: 1px solid transparent; + background: #fff; + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + color: #242424; +} +gui-menu > gui-menu-entry { + color: #242424; +} +gui-menu > gui-menu-entry > label { + cursor: pointer; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 16px; +} +html[dir="rtl"] gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 0; +} +html[dir="rtl"] gui-menu > gui-menu-entry[data-icon] { + padding-right: 16px; +} +gui-menu > gui-menu-entry.gui-menu-expand:after { + content: '►'; + font-family: sans-serif; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-hover, +gui-menu > gui-menu-entry:hover { + background-color: #2d73d2; +} +gui-menu > gui-menu-entry.gui-hover > label, +gui-menu > gui-menu-entry:hover > label { + color: #ffffff; +} +gui-menu > gui-menu-entry { + background-position: 4px center; +} +html[dir="rtl"] gui-menu > gui-menu-entry { + background-position: right 4px center; +} +gui-menu > gui-menu-entry > label.gui-has-image { + padding-left: 22px; +} +gui-menu > gui-menu-entry[data-disabled="true"], +gui-menu > gui-menu-entry[data-disabled="true"] > label { + color: #727272; +} +/* Menu Bar */ +gui-menu-bar { + padding-left: 4px; + padding-right: 4px; +} +gui-menu-bar-entry { + cursor: pointer; + padding: 4px; +} +gui-menu-bar-entry:hover { + background: #2d73d2; + color: #ffffff; +} +gui-menu-bar-entry[data-disabled="true"] > span { + color: #727272; +} +/* Progressbar */ +gui-progress-bar { + display: block; + height: 26px; +} +gui-progress-bar:before { + background-color: #f5f6f8; + border: 1px solid #dbdbdb; + padding: 4px; +} +gui-progress-bar > div { + background: #2d73d2 url('/themes/styles/default/gui/progressbar.png') repeat-x center; +} +gui-progress-bar > span { + color: #fff; +} +/* Statusbar */ +gui-statusbar { + margin: 4px; + padding-bottom: 4px; +} +/** + * =========================================================================== + * VIEWS + * =========================================================================== + */ +/* Icon View */ +gui-icon-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding: 4px; +} +gui-icon-view.gui-element-focused { + outline: 0 none transparent; +} +gui-icon-view-entry { + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + min-width: 60px !important; + min-height: 60px !important; +} +gui-icon-view-entry.gui-active { + background: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(45, 115, 210, 0.8); +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active { + background: #2d73d2; +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active > div > span { + background: #2d73d2; +} +/* List View */ +gui-list-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-list-view.gui-element-focused { + outline: 0 none transparent; +} +gui-list-view-head { + background-color: #f5f6f8; +} +gui-list-view[data-zebra="true"] gui-list-view-body gui-list-view-row:nth-child(2n) { + background-color: #F9F9F9; + color: inherit; +} +gui-list-view-column { + padding: 4px; +} +gui-list-view-column.gui-has-image { + padding-left: 24px; + background-position: 4px; +} +html[dir="rtl"] gui-list-view gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 24px; + background-position: right 4px center; +} +gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 40px; +} +html[dir="rtl"] gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 40px; +} +gui-list-view-row.gui-active { + background-color: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-list-view.gui-element-focused gui-list-view-row.gui-active { + background-color: #2d73d2; +} +gui-list-view-column-resizer { + cursor: ew-resize; + width: 3px; + right: 0px; +} +gui-list-view-column-resizer:after { + background: #dbdbdb; +} +/* Tree View */ +gui-tree-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-tree-view.gui-element-focused { + outline: 0 none transparent; +} +gui-tree-view-entry.dnd-over > div { + font-weight: bold; + text-decoration: underline; +} +gui-tree-view-entry > div { + padding: 4px; +} +gui-tree-view-entry > div > span { + cursor: pointer; + padding: 2px; +} +gui-tree-view-entry > div > span.gui-has-image { + padding-left: 20px; +} +gui-tree-view-entry > gui-tree-view-entry { + margin-left: 16px; +} +gui-tree-view-entry > gui-tree-view-entry.gui-expandable { + margin-left: 2px; +} +gui-tree-view-entry.gui-active > div { + background-color: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-tree-view.gui-element-focused gui-tree-view-entry.gui-active > div { + background-color: #2d73d2; +} +gui-tree-view-entry.gui-expandable { + padding-left: 16px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander { + padding-left: 4px; + cursor: pointer; + line-height: 24px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander:before { + content: '\25BA'; + font-family: Arial; + color: #dbdbdb; +} +gui-tree-view-entry.gui-expandable.gui-expanded > gui-tree-view-expander:before { + content: '\25BC'; +} +/* +* Material Theme +*/ +gui-progress-bar > div { + background: #fff; +} +gui-progress-bar > span { + color: #000; +} +application-window:before { + background: #1976d2; +} +application-window application-window-content { + background: #fff; + padding-top: 0; +} +application-window application-window-content[data-focused="false"] { + border: 1px solid #2196f3; +} +application-window application-window-content[data-focused="true"] { + border: 1px solid #dadada; +} +application-window application-window-content gui-menu-bar { + background: #1e88e5; + color: #fff; +} +application-window application-window-content gui-menu-bar gui-menu-bar-entry { + padding: 8px 6px; +} +application-window application-window-content gui-menu-bar gui-menu-bar-entry:hover, +application-window application-window-content gui-menu-bar .gui-active { + background: #1976d2; +} +application-window application-window-content gui-menu-bar gui-menu { + min-width: 100px; + background: #1e88e5; +} +application-window application-window-content gui-menu-bar gui-menu gui-menu-entry:hover { + background-color: #1976d2; +} +application-window application-window-content gui-menu-bar gui-menu gui-menu-entry > * { + color: #fff; +} +application-window application-window-content gui-menu-bar gui-menu gui-menu-entry label { + padding: 6px; +} +application-window application-window-content gui-menu-bar gui-menu gui-menu-entry[data-disabled="true"] > * { + color: rgba(255, 255, 255, 0.5) !important; +} +application-window application-window-top application-window-icon { + width: 30px; +} +application-window application-window-top application-window-title { + font-size: 14px; + font-weight: 300; + color: rgba(255, 255, 255, 0.9); +} +application-window application-window-top .application-window-button-entry { + height: 100%; + width: 30px; + line-height: 20px; + text-align: center; + font-family: Arial; + font-size: 10px; + z-index: 0; +} +application-window application-window-top .application-window-button-entry:hover { + background-color: rgba(255, 255, 255, 0.2); +} +application-window application-window-top .application-window-button-entry:after, +application-window application-window-top .application-window-button-entry:before { + z-index: 1; + content: ''; + position: absolute; + top: 50%; + left: 50%; +} +application-window application-window-top application-window-button-close:before, +application-window application-window-top application-window-button-close:after { + width: 15px; + height: 2px; + background-color: rgba(255, 255, 255, 0.7); + transition: background-color 0.2s; +} +application-window application-window-top application-window-button-close:before { + transform: translate(-50%, -50%) rotate(45deg); +} +application-window application-window-top application-window-button-close:after { + transform: translate(-50%, -50%) rotate(-45deg); +} +application-window application-window-top application-window-button-close:hover:after, +application-window application-window-top application-window-button-close:hover:before { + background-color: #fff; +} +application-window application-window-top application-window-button-maximize:before, +application-window application-window-top application-window-button-maximize:after { + width: 11px; + height: 9px; + background: #1976d2; + border: 1px solid rgba(255, 255, 255, 0.7); + border-top-width: 2px; + transform: translate(-50%, -50%); + transition: border-color 0.2s; +} +application-window application-window-top application-window-button-maximize:before { + opacity: 0; + margin: -3px 0 0 3px; + transition: margin 0.3s, opacity 0.3s; +} +application-window application-window-top application-window-button-maximize:hover:before, +application-window application-window-top application-window-button-maximize:hover:after { + border-color: #fff; + background: #468FD8; +} +application-window application-window-top application-window-button-minimize:after { + width: 11px; + height: 9px; + border-bottom: 2px solid rgba(255, 255, 255, 0.7); + transform: translate(-50%, -50%); + transition: border-color 0.2s; +} +application-window application-window-top application-window-button-minimize:hover:after { + border-color: #fff; +} +application-window[data-maximized="true"] application-window-button-maximize:before { + opacity: 1; +} +application-splash > span { + color: #fff; +} +gui-menu { + background: #2196f3; +} +gui-menu gui-menu-entry:after { + color: #fff; +} +gui-menu gui-menu-entry > div, +gui-menu gui-menu-entry > label { + color: #fff; +} +gui-menu gui-menu-entry:hover { + background-color: #1976d2; +} +gui-tabs > ul { + height: 32px; +} +gui-tabs > ul > li { + padding: 3px 6px; +} +gui-tabs .gui-active:after { + border: 1px solid #e91e63 !important; +} +gui-list-view gui-list-view-row.gui-active { + background-color: #1976d2 !important; +} +gui-icon-view-entry.gui-active { + background-color: #1976d2 !important; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(0, 0, 0, 0) !important; +} +gui-switch > div { + width: 64px; +} +gui-switch button.gui-active { + margin-left: calc(49%); +} +gui-select, +gui-password, +gui-text { + height: 36px; +} +gui-input-modal, +gui-switch, +gui-button { + height: 36px; +} +gui-input-modal button, +gui-switch button, +gui-button button { + position: relative; + font-size: 16px; + padding: 5px 16px; + color: rgba(0, 0, 0, 0.9); + border-radius: 3px; + border: 0; + background: #fff; + overflow: hidden; + outline: 0 !important; + text-decoration: none !important; + cursor: pointer; + transition: background 0.3s; +} +gui-input-modal button img, +gui-switch button img, +gui-button button img { + pointer-events: none; +} +gui-input-modal button .drop, +gui-switch button .drop, +gui-button button .drop { + background: rgba(0, 0, 0, 0.16); +} +gui-input-modal button[disabled="disabled"], +gui-switch button[disabled="disabled"], +gui-button button[disabled="disabled"] { + background: #fff; + color: rgba(0, 0, 0, 0.26); +} +gui-input-modal button[disabled="disabled"]:active, +gui-switch button[disabled="disabled"]:active, +gui-button button[disabled="disabled"]:active { + color: rgba(0, 0, 0, 0.26); +} +gui-input-modal button:hover, +gui-switch button:hover, +gui-button button:hover { + background: rgba(153, 153, 153, 0.1); +} +gui-input-modal button:active, +gui-switch button:active, +gui-button button:active { + background: rgba(153, 153, 153, 0.2); +} +gui-tabs > div { + height: calc(100% - 32px); +} +gui-select:after { + top: 10px; +} +corewm-notification-entry:before { + background: #1976d2 !important; +} +corewm-panel:before { + background: #1976d2 !important; +} +corewm-panel .PanelItemWindowList li { + opacity: 1 !important; +} +corewm-panel .PanelItemWindowList li span { + color: rgba(255, 255, 255, 0.7); +} +corewm-panel .PanelItemWindowList li img { + opacity: 0.7; +} +corewm-panel .PanelItemWindowList li.Focused span { + color: #fff; +} +corewm-panel .PanelItemWindowList li.Focused img { + opacity: 1; +} +.drop { + display: block; + position: absolute; + background: #CCC; + border-radius: 100%; + transform: scale(0); + pointer-events: none; + width: 100%; + height: 100%; +} +.drop.animate { + animation: drop 1s ease-out; +} +@keyframes drop { + 100% { + opacity: 0; + transform: scale(2.5); + } +} +a { + color: rgba(0, 0, 0, 0.9); + padding: 5px; +} +application-window-loading { + background: rgba(0, 0, 0, 0); +} +/* Application styles */ +.ApplicationCalculatorWindow button { + padding: 0; +} diff --git a/build/htdocs/dist/themes/styles/material.css.map b/build/htdocs/dist/themes/styles/material.css.map new file mode 100644 index 0000000..50e72ca --- /dev/null +++ b/build/htdocs/dist/themes/styles/material.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/mrsang/Google Drive/ushare/IoTOS/OS.js/src/client/stylesheets/theme.less","input"],"names":[],"mappings":"AAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT;EACE,4BAAA;EACA,qBAAsB,gBAAtB;EACA,eAAgB,UAAhB;;AAIF;EACE,YAAA;EACA,cAAA;;AAGF;EACE,yBAAA;;AAEA,4BAA6B;EAC3B,YAAA;;AAEF,4BAA6B,IAAG,UAAU;EACxC,mCAAA;;AAGJ,sBAAsB;EACpB,yBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,SAAU,SAAV;;AAEF;EACE,WAAA;;;;;;;AASF;AAAM;AAAO;AAAQ;AAAU;AAAO;EACpC,8BAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;;AAEF;EACE,mBAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;;;;;;AASF,IAAI,uBAAuB;EACzB,yBAAA;;AAGF;EACE,cAAA;;EACA,YAAA;EACA,YAAA;;AAEF,YAAY;EACV,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF;EACE,YAAA;;AAEF,YAAY,+BAAgC;EAC1C,OAAQ,iBAAR;;AAEF,YAAY,6BAA8B;EACxC,QAAS,iBAAT;;AAGA,YAAa,kBAAkB,sBAAsB;EACnD,eAAA;EACA,eAAA;;AAEF,YAAY,+BAAgC,kBAAkB,sBAAsB;EAClF,iBAAA;EACA,gBAAA;;AAEF,YAAY,6BAA8B,kBAAkB,sBAAsB;EAChF,eAAA;EACA,kBAAA;;AAGJ,YAAa;EACX,mCAAA;EACA,mBAAA;EACA,iBAAA;;AAGF,YAAa,qBAAqB;EAChC,YAAA;;AAEF,YAAa,qBAAqB,GAAE;EAClC,UAAA;;AAEF,YAAa,qBAAqB,GAAG;EACnC,iBAAA;;AAEF,IAAI,WAAY,aAAa,qBAAqB,GAAG;EACnD,eAAA;EACA,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;EACA,kDAAA;EACA,YAAA;EACA,eAAA;;AAGF;EACE,WAAA;;;AAGF;EACE,SAAA;EACA,WAAA;;AAGF;EACE,WAAA;;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAGA,oBAAoB;AACpB,mBAAmB;EACjB,SAAU,EAAV;EACA,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF,oBAAqB;AACrB,mBAAoB;EAClB,iBAAA;;AAGF,oBAAqB;AACrB,oBAAqB;AACrB,mBAAoB;AACpB,mBAAoB;EAClB,iBAAA;;;AAIF,WAAW;EACT,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;;AAEF,sBAAuB,MAAK;EAC1B,mBAAA;;AAEF,sBAAuB,MAAK,OAAQ;EAClC,cAAA;;AAGJ;EACE,YAAA;EACA,gBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;;AAEA,aAAc;EACZ,eAAA;;AAEF,aAAc;EACZ,eAAA;EACA,eAAA;;AAEA,aAAc,KAAK;EACjB,YAAA;EACA,kBAAA;;AAEA,aAAc,KAAK,KAAK;EACtB,QAAA;EACA,SAAA;;AAEJ,aAAc,KAAK;AACnB,aAAc,KAAK,KAAI;EACrB,gBAAA;EACA,WAAA;;;;;;;AAQN;EACE,YAAA;EACA,gBAAA;;AAEF,kBAAkB;EAChB,+CAAA;EACA,mBAAA;EACA,KAAM,WAAN;EACA,OAAA;EACA,QAAA;EACA,SAAA;;AAEF,kBAAkB;EAChB,YAAA;;AAEF,kBAAkB,qBAAqB;EACrC,+CAAA;;AAEA,kBAAkB,uBAAuB;EACzC,UAAA;;AAEF;EACE,UAAA;EACA,YAAA;;AAFF,sBAIE;EACE,WAAA;;;AAMJ,sBAAsB;EACpB,YAAA;EACA,eAAA;;AAEF;EACE,iBAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;;AAEF,wBAAwB;EACtB,YAAA;EACA,eAAA;;AAEF,kBAAkB,qBAAsB;EACtC,UAAA;;AAEF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;;AAEF;EACE,YAAA;;AAEF;AAAwB,sBAAuB;EAC7C,eAAA;;AAEF;EACE,gBAAA;EACA,YAAA;;AAEF;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,iBAAA;;AAEF,oCAAoC;EAClC,cAAA;EACA,SAAS,EAAT;EACA,WAAA;EACA,YAAA;EACA,0BAAA;EACA,4BAAA;EACA,2BAAA;EACA,6BAAA;EACA,mBAAA;EACA,0DAAA;EACG,uDAAA;EACC,sDAAA;EACI,kDAAA;;AAEV,kBAAkB,uBAAuB;EACvC,oCAAA;EACA,kBAAA;EA7XA,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;EA0XR,YAAA;;AAEF;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;;AAEF;EACE,mBAAA;EACA,WAAA;EACA,qBAAA;EAEA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,6BAAA;;AAEA,0BAA2B,MAAK,UAAU;EACxC,YAAA;;AAEF,0BAA2B,MAAK,UAAU;EACxC,WAAA;EACA,YAAA;;AAEF,0BAA2B,MAAK,UAAU,GAAG;EAC3C,WAAA;EACA,eAAA;EACA,WAAA;;AAEJ;EACE,UAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;;;;;;;;AAUF;EACE,WAAA;;AAEF,aAAa;EAnYX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;;AAqYA,kBAAmB;AACnB,kBAAmB;EACjB,WAAA;;AAGA,kBAAkB,kBAAmB;AACrC,kBAAkB,kBAAmB;EACnC,OAAQ,iBAAR;EACA,QAAS,iBAAT;;AAGF,kBAAmB;EACjB,QAAS,iBAAT;;AAEF,kBAAmB;EACjB,OAAQ,iBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;;AAIN,cAAe;EACb,cAAA;EACA,UAAA;EACA,iBAAA;;AAEF,cAAc,6BAA8B;EAC1C,eAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;;;AAIF;EACE,yBAAA;;AAEA,UAAW;EACT,yBAAA;;;;AAKJ,WAAY;AACZ,cAAe;AACf,WAAY,eAAe;AAC3B,cAAe,eAAe;EAC5B,WAAA;;AAEF,WAAY;AACZ,cAAe;EACb,SAAA;;AAMF,WAAW;EACT,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;;;AAIF;EACE,eAAA;;AAEA;EACE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;;AAEF,kBAAkB;EAChB,SAAU,GAAV;EACA,uBAAA;EACA,kBAAA;;AAEF,YAAY,uBAAwB,qBAAoB;EACtD,SAAU,GAAV;;;AAIF,QAAS;EACP,YAAA;;AAEA,QAAS,KAAK;EACZ,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,6BAAA;EACA,qBAAA;EACA,iBAAA;;AAEF,QAAS,KAAK,KAAI;EAChB,6BAAA;EACA,qBAAA;;AAEA,QAAS,KAAK,KAAI,WAAW;EAC3B,YAAA;EACA,gCAAA;;AAEN,QAAS;EACP,yBAAA;EACA,yBAAA;EACA,YAAA;;;;;;;;;AAYJ;EACE,YAAA;EACA,iBAAA;;AAEF,kBAAmB;AACnB,kBAAmB;EACjB,YAAA;EACA,iBAAA;EACA,gBAAA;;;AAIF;EACE,YAAA;;AAEF,UAAU;EACR,YAAA;;AAEA,UAAW;EAvmBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;;AAqmBA,UAAW,OAAM;EACf,2BAAA;;AAEF,UAAW,OAAM;AACjB,UAAW,OAAM;EAhmBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,YChGqC,oDDgGrC;;AAgmBA,UAAW,OAAM,WAAW;AAC5B,UAAW,OAAM,SAAS;AAC1B,UAAW,OAAM;EA3mBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA2mBA,UAAW,OAAM,SAAU;EACzB,WAAA;;AAEF,UAAW,OAAM;EACf,eAAA;EACA,cAAA;;AAEF,UAAW,OAAM,cAAe;EAC9B,kBAAA;;AAEF,UAAU,cAAc,cAAe;EACrC,kBAAA;;AAEF,UAAU,qBAAqB,cAAc,cAAe;EAC1D,kBAAA;;;;AAKJ;AACA;EACE,YAAA;;AAEA,SAAU;AACV,YAAa;EACX,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;;AAEF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,2BAAA;;AAGF,SAAU;EACR,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;;AAGV,SAAU,MAAK,QAAQ;EACrB,SAAS,OAAT;EACA,eAAA;;AAGF,YAAa,MAAK,QAAQ;EACxB,SAAS,OAAT;EACA,eAAA;;AAGF,SAAS,sBAAuB;AAChC,YAAY,sBAAuB;EACjC,cAAA;;AAGF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,qBAAA;EACA,yBAAA;;AAGF,SAAU;AACV,YAAa;EACX,iBAAA;;AAEF,SAAU,QAAQ;AAClB,YAAa,QAAQ;EACnB,iBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EA9qBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EA6qBE,mBAAA;;AAEF,UAAW,OAAM;EA5qBjB,qBAAA;EACA,yBAAA;EACA,cAAA;;AA6qBA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAU;EACR,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AAEF,UAAU;EACR,SAAS,IAAT;EACA,WAAW,qBAAX;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,gBAAA;EACA,gCAAA;EAEA,mBAAmB,aAAnB;EACG,gBAAgB,aAAhB;EACC,eAAe,aAAf;EACI,WAAW,aAAX;;AAEV,UAAU,sBAAsB;EAC9B,yBAAA;;;AAIJ,eAAgB;EAntBd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAmtBA,eAAgB,OAAM;EACpB,2BAAA;;AAEJ,eAAgB,OAAM;EAntBpB,qBAAA;EACA,yBAAA;EACA,cAAA;;;AAstBF;EACE,YAAA;;AAEA,UAAW;EACT,uBAAA;EACA,cAAA;EACA,YAAA;;;;;AAOF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;;;;AAOF,UAAW,MAAK;EAtxBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;EAmxBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAnxBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAoxBA,UAAW,MAAK;EA/xBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;EA4xBE,YAAA;EACA,WAAA;EACA,iBAAA;;AAEF,UAAW,MAAK,SAAS;EA7xBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA8xBA,UAAW,MAAK;EAzyBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;EAsyBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAtyBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;;;;AA0yBA,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EACT,WAAA;EAhzBF,YAAA;EACA,yBAAA;EACA,yBAAA;EAizBE,eAAA;EACA,UAAA;;AAGF,UAAW;EAh1BX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;;AA80BA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAW,QAAQ;EACjB,gBAAA;;AAGF,UAAU,sBAAuB;EAn1BjC,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAm1BA,UAAU,sBAAuB;EAh0BjC,qBAAA;EACA,yBAAA;EACA,cAAA;EAg0BE,UAAA;;AAGF,UAAU,sBAAuB;AACjC,UAAU,sBAAuB;EA/0BjC,cAAA;;;;AAq1BF;AACA;EACE,YAAA;;AAEA,YAAa;AACb,QAAS;EAv1BT,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAs1BE,iBAAA;EACA,kBAAA;;AAGF,YAAa,QAAQ;AACrB,QAAS,QAAQ;EACf,gBAAA;;AAGF,YAAa,MAAK;AAClB,QAAS,MAAK;EA71Bd,qBAAA;EACA,yBAAA;EACA,cAAA;;AA81BA,YAAa,MAAK;AAClB,QAAS,MAAK;EACZ,2BAAA;;AAGF,YAAY,sBAAuB;AACnC,QAAQ,sBAAuB;EA/2B/B,cAAA;;;AAq3BA,YAAa;EAl3Bb,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAk3BA,YAAa,SAAQ;EACnB,2BAAA;;AAEF,YAAa,SAAQ;EAl3BrB,qBAAA;EACA,yBAAA;EACA,cAAA;;AAo3BA,YAAY,sBAAuB;EA/3BnC,cAAA;;;AAo4BF;EACE,YAAA;EACA,yBAAA;EACA,yBAAA;;AAEA,YAAa;EACX,yBAAA;;;AAIJ,QAAS,eAAe;;EACtB,WAAA;;;AAIF,eAAgB;EAh5Bd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAGA,qBAAA;EACA,yBAAA;EACA,cAAA;;AA44BF,eAAgB;EACd,gBAAA;EA76BA,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;EA06BA,iBAAA;EACA,kBAAA;;AAEA,eAAgB,OAAM;EACpB,2BAAA;;;;;;;;;AAgBJ;EACE,yBAAA;;;AAIF;EAx8BE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCvFqC,oDDuFrC;EACA,yBAAA;EACA,cAAA;;AAs8BA,aAAc;EACZ,gBAAA;;;AAIJ;EACE,6BAAA;EACA,gBAAA;EACA,+CAAA;EACA,cAAA;;AAEA,QAAS;EACP,cAAA;;AAEF,QAAS,iBAAiB;EACxB,eAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;EACvB,mBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,gBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,mBAAA;;AAEF,QAAS,iBAAgB,gBAAgB;EACvC,SAAU,GAAV;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB;EACvB,yBAAA;;AAEF,QAAS,iBAAgB,UAAW;AACpC,QAAS,iBAAgB,MAAO;EAC9B,cAAA;;AAEA,QAAS;EACP,+BAAA;;AAEF,IAAI,WAAY,SAAS;EACvB,qCAAA;;AAEF,QAAS,iBAAiB,QAAO;EAC/B,kBAAA;;AAEF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB,sBAAuB;EAC9C,cAAA;;;AAIN;EACE,iBAAA;EACA,kBAAA;;AAEA;EACE,eAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,mBAAA;EACA,cAAA;;AAEF,kBAAkB,sBAAuB;EACvC,cAAA;;;AAKJ;EACE,cAAA;EACA,YAAA;;AAEA,gBAAgB;EACd,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEF,gBAAiB;EACf,wBAtkC8D,6DAskC9D;;AAEF,gBAAiB;EACf,WAAA;;;AAIJ;EACE,WAAA;EACA,mBAAA;;;;;;;;AAUF;EACE,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0BAAA;EACA,2BAAA;;AAGA,mBAAmB;EACjB,mCAAA;EACA,cAAA;;AAEF,mBAAmB,WAAY,MAAM;EACnC,mCAAA;;AAEF,aAAa,oBAAqB,oBAAmB;EACnD,mBAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY,MAAM;EACrE,mBAAA;;;AAIN;EACE,yBAAA;EACA,yBAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,yBAAA;;AAIE,aAAa,mBAAoB,mBAAmB,kBAAiB,UAAU;EAC7E,yBAAA;EACA,cAAA;;AAEF;EACE,YAAA;;AAEF,oBAAoB;EAClB,kBAAA;EACA,wBAAA;;AAEF,IAAI,WAAY,cAAc,qBAAoB;EAChD,eAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAa,qBAAsB,qBAAoB;EACrD,kBAAA;;AAEF,IAAI,WAAY,cAAa,qBAAsB,qBAAoB;EACrE,eAAA;EACA,mBAAA;;AAGJ,iBAAiB;EACf,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,kBAAiB;EACjD,yBAAA;;AAGF;EACE,iBAAA;EACA,UAAA;EACA,UAAA;;AAEA,4BAA4B;EAC1B,mBAAA;;;AAKR;EACE,yBAAA;EACA,yBAAA;;AAEE,aAAa;EACX,2BAAA;;AAEF,mBAAmB,SAAU;EAC3B,iBAAA;EACA,0BAAA;;AAEF,mBAAoB;EAClB,YAAA;;AAEF,mBAAoB,MAAM;EACxB,eAAA;EACA,YAAA;;AAEF,mBAAoB,MAAM,OAAM;EAC9B,kBAAA;;AAEF,mBAAoB;EAClB,iBAAA;;AAEF,mBAAoB,sBAAqB;EACvC,gBAAA;;AAEF,mBAAmB,WAAY;EAC7B,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY;EAC/D,yBAAA;;AAGJ,mBAAmB;EACjB,kBAAA;;AAEF,mBAAmB,eAAgB;EACjC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAEF,mBAAmB,eAAgB,uBAAsB;EACvD,SAAU,OAAV;EACA,kBAAA;EACA,cAAA;;AAEF,mBAAmB,eAAe,aAAc,yBAAwB;EACtE,SAAU,OAAV;;;;;AC/vCJ,gBACE;EACE,gBAAA;;AAFJ,gBAIE;EACE,WAAA;;AAIF,kBAAC;EACC,mBAAA;;AAFJ,kBAIE;EACE,gBAAA;EACA,cAAA;;AAEA,kBAJF,2BAIG;EACC,yBAAA;;AAEF,kBAPF,2BAOG;EACC,yBAAA;;AAZN,kBAIE,2BAUE;EACE,mBAAA;EACA,WAAA;;AAhBN,kBAIE,2BAUE,aAIE;EACE,gBAAA;;AAnBR,kBAIE,2BAUE,aAOE,mBAAkB;AArBxB,kBAIE,2BAUE,aAQE;EACE,mBAAA;;AAvBR,kBAIE,2BAUE,aAWE;EACE,gBAAA;EACA,mBAAA;;AAGE,kBA1BR,2BAUE,aAWE,SAIE,eACG;EACC,yBAAA;;AA/BZ,kBAIE,2BAUE,aAWE,SAIE,eAIE;EACE,WAAA;;AAlCZ,kBAIE,2BAUE,aAWE,SAIE,eAOE;EACE,YAAA;;AAEF,kBAnCR,2BAUE,aAWE,SAIE,eAUG,sBAAuB;EACtB,+BAAA;;AAxCZ,kBA8CE,uBACE;EACE,WAAA;;AAhDN,kBA8CE,uBAIE;EACE,eAAA;EACA,gBAAA;EACA,+BAAA;;AArDN,kBA8CE,uBAUE;EACE,YAAA;EACA,WAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,UAAA;;AAEA,kBAnBJ,uBAUE,iCASG;EACC,0CAAA;;AAEF,kBAtBJ,uBAUE,iCAYG;AACD,kBAvBJ,uBAUE,iCAaG;EACC,UAAA;EACA,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,SAAA;;AA1ER,kBA8CE,uBA+BE,gCAA+B;AA7EnC,kBA8CE,uBAgCE,gCAA+B;EAC7B,WAAA;EACA,WAAA;EACA,0CAAA;EACA,iCAAA;;AAGA,kBAvCJ,uBAsCE,gCACG;EACC,WAAW,sBAAsB,aAAjC;;AAEF,kBA1CJ,uBAsCE,gCAIG;EACC,WAAW,sBAAsB,cAAjC;;AAGA,kBA9CN,uBAsCE,gCAOG,MACE;AACD,kBA/CN,uBAsCE,gCAOG,MAEE;EACC,sBAAA;;AAKJ,kBArDJ,uBAoDE,mCACG;AACD,kBAtDJ,uBAoDE,mCAEG;EACC,WAAA;EACA,WAAA;EACA,mBAAA;EACA,0CAAA;EACA,qBAAA;EACA,WAAW,qBAAX;EACA,6BAAA;;AAEF,kBA/DJ,uBAoDE,mCAWG;EACC,UAAA;EACA,oBAAA;EACA,qCAAA;;AAGA,kBArEN,uBAoDE,mCAgBG,MACE;AACD,kBAtEN,uBAoDE,mCAgBG,MAEE;EACC,kBAAA;EACA,mBAAA;;AAKJ,kBA7EJ,uBA4EE,mCACG;EACC,WAAA;EACA,WAAA;EACA,iDAAA;EACA,WAAW,qBAAX;EACA,6BAAA;;AAEF,kBApFJ,uBA4EE,mCAQG,MAAM;EACL,kBAAA;;AAIN,kBAAC,uBACC,mCAAkC;EAChC,UAAA;;AAIN,kBACE;EACE,WAAA;;AAGJ;EACE,mBAAA;;AAGE,QADF,eACG;EACC,WAAA;;AALN,QAGE,eAIE;AAPJ,QAGE,eAKE;EACE,WAAA;;AAEF,QARF,eAQG;EACC,yBAAA;;AAIN,QAAS;EACP,YAAA;;AAEF,QAAS,KAAK;EACZ,gBAAA;;AAEF,QAAS,YAAW;EAClB,yBAAA;;AAEF,aAAc,kBAAiB;EAC7B,yBAAA;;AAEF,mBAAmB;EACjB,yBAAA;;AADF,mBAAmB,WAEjB,MAAM;EACJ,4BAAA;;AAGJ,UAAW;EACT,WAAA;;AAEF,UAAW,OAAM;EACf,aAAa,SAAb;;AAGF;AACA;AACA;EACE,YAAA;;AAGF;AACA;AACA;EACE,YAAA;;AAHF,eAKE;AAJF,UAIE;AAHF,UAGE;EACE,kBAAA;EACA,eAAA;EACA,iBAAA;EACA,yBAAA;EACA,kBAAA;EACA,SAAA;EACA,gBAAA;EACA,gBAAA;EACA,qBAAA;EACA,gCAAA;EACA,eAAA;EACA,2BAAA;;AAjBJ,eAKE,OAcE;AAlBJ,UAIE,OAcE;AAjBJ,UAGE,OAcE;EACE,oBAAA;;AApBN,eAKE,OAiBE;AArBJ,UAIE,OAiBE;AApBJ,UAGE,OAiBE;EACE,+BAAA;;AAEF,eApBF,OAoBG;AAAD,UApBF,OAoBG;AAAD,UApBF,OAoBG;EACC,gBAAA;EACA,0BAAA;;AACA,eAvBJ,OAoBG,qBAGE;AAAD,UAvBJ,OAoBG,qBAGE;AAAD,UAvBJ,OAoBG,qBAGE;EACC,0BAAA;;AAGJ,eA3BF,OA2BG;AAAD,UA3BF,OA2BG;AAAD,UA3BF,OA2BG;EACC,oCAAA;;AAEF,eA9BF,OA8BG;AAAD,UA9BF,OA8BG;AAAD,UA9BF,OA8BG;EACC,oCAAA;;AAKN,QAAS;EACP,yBAAA;;AAGF,UAAU;EACR,SAAA;;AAGF,yBAAyB;EACvB,mBAAA;;AAGA,YAAC;EACC,mBAAA;;AAFJ,YAIE,qBAAqB;EACnB,qBAAA;;AALJ,YAIE,qBAAqB,GAGnB;EACE,+BAAA;;AARN,YAIE,qBAAqB,GAMnB;EACE,YAAA;;AAEF,YATF,qBAAqB,GASlB,QACC;EACE,WAAA;;AAFJ,YATF,qBAAqB,GASlB,QAIC;EACE,UAAA;;AAMR;EACE,cAAA;EACA,kBAAA;EACA,gBAAA;EACA,mBAAA;EACA,WAAW,QAAX;EACA,oBAAA;EACA,WAAA;EACA,YAAA;;AAEA,KAAC;EACC,2BAAA;;AAIJ;EACE;IACE,UAAA;IACA,WAAW,UAAX;;;AAGJ;EACE,yBAAA;EACA,YAAA;;AAEF;EACE,4BAAA;;;AAIF,4BACE;EACE,UAAA"} \ No newline at end of file diff --git a/build/htdocs/dist/themes/styles/material/materialColors.less b/build/htdocs/dist/themes/styles/material/materialColors.less new file mode 100644 index 0000000..1ea606e --- /dev/null +++ b/build/htdocs/dist/themes/styles/material/materialColors.less @@ -0,0 +1,532 @@ +// ========================================================================== +// +// Name: UI Color Palette +// Description: The color palette of material design. +// Version: 2.2.0 +// +// Author: Denis Malinochkin +// Git: https://github.com/mrmlnc/material-color +// +// twitter: @mrmlnc +// +// ========================================================================== + + +// +// Red +// + +@clr-red-list: #ffebee, #ffcdd2, #ef9a9a, #e57373, #ef5350, + #f44336, #e53935, #d32f2f, #c62828, #b71c1c, + #ff8a80, #ff5252, #ff1744, #d50000; + +@clr-red: extract(@clr-red-list, 6); + +@clr-red-50: extract(@clr-red-list, 1); +@clr-red-100: extract(@clr-red-list, 2); +@clr-red-200: extract(@clr-red-list, 3); +@clr-red-300: extract(@clr-red-list, 4); +@clr-red-400: extract(@clr-red-list, 5); +@clr-red-500: extract(@clr-red-list, 6); +@clr-red-600: extract(@clr-red-list, 7); +@clr-red-700: extract(@clr-red-list, 8); +@clr-red-800: extract(@clr-red-list, 9); +@clr-red-900: extract(@clr-red-list, 10); +@clr-red-A100: extract(@clr-red-list, 11); +@clr-red-A200: extract(@clr-red-list, 12); +@clr-red-A400: extract(@clr-red-list, 13); +@clr-red-A700: extract(@clr-red-list, 14); + + +// +// Pink +// + +@clr-pink-list: #fce4ec, #f8bbd0, #f48fb1, #f06292, #ec407a, + #e91e63, #d81b60, #c2185b, #ad1457, #880e4f, + #ff80ab, #ff4081, #f50057, #c51162; + +@clr-pink: extract(@clr-pink-list, 6); + +@clr-pink-50: extract(@clr-pink-list, 1); +@clr-pink-100: extract(@clr-pink-list, 2); +@clr-pink-200: extract(@clr-pink-list, 3); +@clr-pink-300: extract(@clr-pink-list, 4); +@clr-pink-400: extract(@clr-pink-list, 5); +@clr-pink-500: extract(@clr-pink-list, 6); +@clr-pink-600: extract(@clr-pink-list, 7); +@clr-pink-700: extract(@clr-pink-list, 8); +@clr-pink-800: extract(@clr-pink-list, 9); +@clr-pink-900: extract(@clr-pink-list, 10); +@clr-pink-A100: extract(@clr-pink-list, 11); +@clr-pink-A200: extract(@clr-pink-list, 12); +@clr-pink-A400: extract(@clr-pink-list, 13); +@clr-pink-A700: extract(@clr-pink-list, 14); + + +// +// Purple +// + +@clr-purple-list: #f3e5f5, #e1bee7, #ce93d8, #ba68c8, #ab47bc, + #9c27b0, #8e24aa, #7b1fa2, #6a1b9a, #4a148c, + #ea80fc, #e040fb, #d500f9, #aa00ff; + +@clr-purple: extract(@clr-purple-list, 6); + +@clr-purple-50: extract(@clr-purple-list, 1); +@clr-purple-100: extract(@clr-purple-list, 2); +@clr-purple-200: extract(@clr-purple-list, 3); +@clr-purple-300: extract(@clr-purple-list, 4); +@clr-purple-400: extract(@clr-purple-list, 5); +@clr-purple-500: extract(@clr-purple-list, 6); +@clr-purple-600: extract(@clr-purple-list, 7); +@clr-purple-700: extract(@clr-purple-list, 8); +@clr-purple-800: extract(@clr-purple-list, 9); +@clr-purple-900: extract(@clr-purple-list, 10); +@clr-purple-A100: extract(@clr-purple-list, 11); +@clr-purple-A200: extract(@clr-purple-list, 12); +@clr-purple-A400: extract(@clr-purple-list, 13); +@clr-purple-A700: extract(@clr-purple-list, 14); + + +// +// Deep Purple +// +@clr-deep-purple-list: #ede7f6, #d1c4e9, #b39ddb, #9575cd, #7e57c2, + #673ab7, #5e35b1, #512da8, #4527a0, #311b92, + #b388ff, #7c4dff, #651fff, #6200ea; + +@clr-deep-purple: extract(@clr-deep-purple-list, 6); + +@clr-deep-purple-50: extract(@clr-deep-purple-list, 1); +@clr-deep-purple-100: extract(@clr-deep-purple-list, 2); +@clr-deep-purple-200: extract(@clr-deep-purple-list, 3); +@clr-deep-purple-300: extract(@clr-deep-purple-list, 4); +@clr-deep-purple-400: extract(@clr-deep-purple-list, 5); +@clr-deep-purple-500: extract(@clr-deep-purple-list, 6); +@clr-deep-purple-600: extract(@clr-deep-purple-list, 7); +@clr-deep-purple-700: extract(@clr-deep-purple-list, 8); +@clr-deep-purple-800: extract(@clr-deep-purple-list, 9); +@clr-deep-purple-900: extract(@clr-deep-purple-list, 10); +@clr-deep-purple-A100: extract(@clr-deep-purple-list, 11); +@clr-deep-purple-A200: extract(@clr-deep-purple-list, 12); +@clr-deep-purple-A400: extract(@clr-deep-purple-list, 13); +@clr-deep-purple-A700: extract(@clr-deep-purple-list, 14); + + +// +// Indigo +// + +@clr-indigo-list: #e8eaf6, #c5cae9, #9fa8da, #7986cb, #5c6bc0, + #3f51b5, #3949ab, #303f9f, #283593, #1a237e, + #8c9eff, #536dfe, #3d5afe, #304ffe; + +@clr-indigo: extract(@clr-indigo-list, 6); + +@clr-indigo-50: extract(@clr-indigo-list, 1); +@clr-indigo-100: extract(@clr-indigo-list, 2); +@clr-indigo-200: extract(@clr-indigo-list, 3); +@clr-indigo-300: extract(@clr-indigo-list, 4); +@clr-indigo-400: extract(@clr-indigo-list, 5); +@clr-indigo-500: extract(@clr-indigo-list, 6); +@clr-indigo-600: extract(@clr-indigo-list, 7); +@clr-indigo-700: extract(@clr-indigo-list, 8); +@clr-indigo-800: extract(@clr-indigo-list, 9); +@clr-indigo-900: extract(@clr-indigo-list, 10); +@clr-indigo-A100: extract(@clr-indigo-list, 11); +@clr-indigo-A200: extract(@clr-indigo-list, 12); +@clr-indigo-A400: extract(@clr-indigo-list, 13); +@clr-indigo-A700: extract(@clr-indigo-list, 14); + + +// +// Blue +// + +@clr-blue-list: #e3f2fd, #bbdefb, #90caf9, #64b5f6, #42a5f5, + #2196f3, #1e88e5, #1976d2, #1565c0, #0d47a1, + #82b1ff, #448aff, #2979ff, #2962ff; + +@clr-blue: extract(@clr-blue-list, 6); + +@clr-blue-50: extract(@clr-blue-list, 1); +@clr-blue-100: extract(@clr-blue-list, 2); +@clr-blue-200: extract(@clr-blue-list, 3); +@clr-blue-300: extract(@clr-blue-list, 4); +@clr-blue-400: extract(@clr-blue-list, 5); +@clr-blue-500: extract(@clr-blue-list, 6); +@clr-blue-600: extract(@clr-blue-list, 7); +@clr-blue-700: extract(@clr-blue-list, 8); +@clr-blue-800: extract(@clr-blue-list, 9); +@clr-blue-900: extract(@clr-blue-list, 10); +@clr-blue-A100: extract(@clr-blue-list, 11); +@clr-blue-A200: extract(@clr-blue-list, 12); +@clr-blue-A400: extract(@clr-blue-list, 13); +@clr-blue-A700: extract(@clr-blue-list, 14); + + +// +// Light Blue +// + +@clr-light-blue-list: #e1f5fe, #b3e5fc, #81d4fa, #4fc3f7, #29b6f6, + #03a9f4, #039be5, #0288d1, #0277bd, #01579b, + #80d8ff, #40c4ff, #00b0ff, #0091ea; + +@clr-light-blue: extract(@clr-light-blue-list, 6); + +@clr-light-blue-50: extract(@clr-light-blue-list, 1); +@clr-light-blue-100: extract(@clr-light-blue-list, 2); +@clr-light-blue-200: extract(@clr-light-blue-list, 3); +@clr-light-blue-300: extract(@clr-light-blue-list, 4); +@clr-light-blue-400: extract(@clr-light-blue-list, 5); +@clr-light-blue-500: extract(@clr-light-blue-list, 6); +@clr-light-blue-600: extract(@clr-light-blue-list, 7); +@clr-light-blue-700: extract(@clr-light-blue-list, 8); +@clr-light-blue-800: extract(@clr-light-blue-list, 9); +@clr-light-blue-900: extract(@clr-light-blue-list, 10); +@clr-light-blue-A100: extract(@clr-light-blue-list, 11); +@clr-light-blue-A200: extract(@clr-light-blue-list, 12); +@clr-light-blue-A400: extract(@clr-light-blue-list, 13); +@clr-light-blue-A700: extract(@clr-light-blue-list, 14); + + +// +// Cyan +// + +@clr-cyan-list: #e0f7fa, #b2ebf2, #80deea, #4dd0e1, #26c6da, + #00bcd4, #00acc1, #0097a7, #00838f, #006064, + #84ffff, #18ffff, #00e5ff, #00b8d4; + +@clr-cyan: extract(@clr-cyan-list, 6); + +@clr-cyan-50: extract(@clr-cyan-list, 1); +@clr-cyan-100: extract(@clr-cyan-list, 2); +@clr-cyan-200: extract(@clr-cyan-list, 3); +@clr-cyan-300: extract(@clr-cyan-list, 4); +@clr-cyan-400: extract(@clr-cyan-list, 5); +@clr-cyan-500: extract(@clr-cyan-list, 6); +@clr-cyan-600: extract(@clr-cyan-list, 7); +@clr-cyan-700: extract(@clr-cyan-list, 8); +@clr-cyan-800: extract(@clr-cyan-list, 9); +@clr-cyan-900: extract(@clr-cyan-list, 10); +@clr-cyan-A100: extract(@clr-cyan-list, 11); +@clr-cyan-A200: extract(@clr-cyan-list, 12); +@clr-cyan-A400: extract(@clr-cyan-list, 13); +@clr-cyan-A700: extract(@clr-cyan-list, 14); + + +// +// Teal +// + +@clr-teal-list: #e0f2f1, #b2dfdb, #80cbc4, #4db6ac, #26a69a, + #009688, #00897b, #00796b, #00695c, #004d40, + #a7ffeb, #64ffda, #1de9b6, #00bfa5; + +@clr-teal: extract(@clr-teal-list, 6); + +@clr-teal-50: extract(@clr-teal-list, 1); +@clr-teal-100: extract(@clr-teal-list, 2); +@clr-teal-200: extract(@clr-teal-list, 3); +@clr-teal-300: extract(@clr-teal-list, 4); +@clr-teal-400: extract(@clr-teal-list, 5); +@clr-teal-500: extract(@clr-teal-list, 6); +@clr-teal-600: extract(@clr-teal-list, 7); +@clr-teal-700: extract(@clr-teal-list, 8); +@clr-teal-800: extract(@clr-teal-list, 9); +@clr-teal-900: extract(@clr-teal-list, 10); +@clr-teal-A100: extract(@clr-teal-list, 11); +@clr-teal-A200: extract(@clr-teal-list, 12); +@clr-teal-A400: extract(@clr-teal-list, 13); +@clr-teal-A700: extract(@clr-teal-list, 14); + + +// +// Green +// + +@clr-green-list: #e8f5e9, #c8e6c9, #a5d6a7, #81c784, #66bb6a, + #4caf50, #43a047, #388e3c, #2e7d32, #1b5e20, + #b9f6ca, #69f0ae, #00e676, #00c853; + +@clr-green: extract(@clr-green-list, 6); + +@clr-green-50: extract(@clr-green-list, 1); +@clr-green-100: extract(@clr-green-list, 2); +@clr-green-200: extract(@clr-green-list, 3); +@clr-green-300: extract(@clr-green-list, 4); +@clr-green-400: extract(@clr-green-list, 5); +@clr-green-500: extract(@clr-green-list, 6); +@clr-green-600: extract(@clr-green-list, 7); +@clr-green-700: extract(@clr-green-list, 8); +@clr-green-800: extract(@clr-green-list, 9); +@clr-green-900: extract(@clr-green-list, 10); +@clr-green-A100: extract(@clr-green-list, 11); +@clr-green-A200: extract(@clr-green-list, 12); +@clr-green-A400: extract(@clr-green-list, 13); +@clr-green-A700: extract(@clr-green-list, 14); + + +// +// Light Green +// + +@clr-light-green-list: #f1f8e9, #dcedc8, #c5e1a5, #aed581, #9ccc65, + #8bc34a, #7cb342, #689f38, #558b2f, #33691e, + #ccff90, #b2ff59, #76ff03, #64dd17; + +@clr-light-green: extract(@clr-light-green-list, 6); + +@clr-light-green-50: extract(@clr-light-green-list, 1); +@clr-light-green-100: extract(@clr-light-green-list, 2); +@clr-light-green-200: extract(@clr-light-green-list, 3); +@clr-light-green-300: extract(@clr-light-green-list, 4); +@clr-light-green-400: extract(@clr-light-green-list, 5); +@clr-light-green-500: extract(@clr-light-green-list, 6); +@clr-light-green-600: extract(@clr-light-green-list, 7); +@clr-light-green-700: extract(@clr-light-green-list, 8); +@clr-light-green-800: extract(@clr-light-green-list, 9); +@clr-light-green-900: extract(@clr-light-green-list, 10); +@clr-light-green-A100: extract(@clr-light-green-list, 11); +@clr-light-green-A200: extract(@clr-light-green-list, 12); +@clr-light-green-A400: extract(@clr-light-green-list, 13); +@clr-light-green-A700: extract(@clr-light-green-list, 14); + + +// +// Lime +// +@clr-lime-list: #f9fbe7, #f0f4c3, #e6ee9c, #dce775, #d4e157, + #cddc39, #c0ca33, #afb42b, #9e9d24, #827717, + #f4ff81, #eeff41, #c6ff00, #aeea00; + +@clr-lime: extract(@clr-lime-list, 6); + +@clr-lime-50: extract(@clr-lime-list, 1); +@clr-lime-100: extract(@clr-lime-list, 2); +@clr-lime-200: extract(@clr-lime-list, 3); +@clr-lime-300: extract(@clr-lime-list, 4); +@clr-lime-400: extract(@clr-lime-list, 5); +@clr-lime-500: extract(@clr-lime-list, 6); +@clr-lime-600: extract(@clr-lime-list, 7); +@clr-lime-700: extract(@clr-lime-list, 8); +@clr-lime-800: extract(@clr-lime-list, 9); +@clr-lime-900: extract(@clr-lime-list, 10); +@clr-lime-A100: extract(@clr-lime-list, 11); +@clr-lime-A200: extract(@clr-lime-list, 12); +@clr-lime-A400: extract(@clr-lime-list, 13); +@clr-lime-A700: extract(@clr-lime-list, 14); + + +// +// Yellow +// + +@clr-yellow-list: #fffde7, #fff9c4, #fff59d, #fff176, #ffee58, + #ffeb3b, #fdd835, #fbc02d, #f9a825, #f57f17, + #ffff8d, #ffff00, #ffea00, #ffd600; + +@clr-yellow: extract(@clr-yellow-list, 6); + +@clr-yellow-50: extract(@clr-yellow-list, 1); +@clr-yellow-100: extract(@clr-yellow-list, 2); +@clr-yellow-200: extract(@clr-yellow-list, 3); +@clr-yellow-300: extract(@clr-yellow-list, 4); +@clr-yellow-400: extract(@clr-yellow-list, 5); +@clr-yellow-500: extract(@clr-yellow-list, 6); +@clr-yellow-600: extract(@clr-yellow-list, 7); +@clr-yellow-700: extract(@clr-yellow-list, 8); +@clr-yellow-800: extract(@clr-yellow-list, 9); +@clr-yellow-900: extract(@clr-yellow-list, 10); +@clr-yellow-A100: extract(@clr-yellow-list, 11); +@clr-yellow-A200: extract(@clr-yellow-list, 12); +@clr-yellow-A400: extract(@clr-yellow-list, 13); +@clr-yellow-A700: extract(@clr-yellow-list, 14); + + +// +// Amber +// + +@clr-amber-list: #fff8e1, #ffecb3, #ffe082, #ffd54f, #ffca28, + #ffc107, #ffb300, #ffa000, #ff8f00, #ff6f00, + #ffe57f, #ffd740, #ffc400, #ffab00; + +@clr-amber: extract(@clr-amber-list, 6); + +@clr-amber-50: extract(@clr-amber-list, 1); +@clr-amber-100: extract(@clr-amber-list, 2); +@clr-amber-200: extract(@clr-amber-list, 3); +@clr-amber-300: extract(@clr-amber-list, 4); +@clr-amber-400: extract(@clr-amber-list, 5); +@clr-amber-500: extract(@clr-amber-list, 6); +@clr-amber-600: extract(@clr-amber-list, 7); +@clr-amber-700: extract(@clr-amber-list, 8); +@clr-amber-800: extract(@clr-amber-list, 9); +@clr-amber-900: extract(@clr-amber-list, 10); +@clr-amber-A100: extract(@clr-amber-list, 11); +@clr-amber-A200: extract(@clr-amber-list, 12); +@clr-amber-A400: extract(@clr-amber-list, 13); +@clr-amber-A700: extract(@clr-amber-list, 14); + + +// +// Orange +// + +@clr-orange-list: #fff3e0, #ffe0b2, #ffcc80, #ffb74d, #ffa726, + #ff9800, #fb8c00, #f57c00, #ef6c00, #e65100, + #ffd180, #ffab40, #ff9100, #ff6d00; + +@clr-orange: extract(@clr-orange-list, 6); + +@clr-orange-50: extract(@clr-orange-list, 1); +@clr-orange-100: extract(@clr-orange-list, 2); +@clr-orange-200: extract(@clr-orange-list, 3); +@clr-orange-300: extract(@clr-orange-list, 4); +@clr-orange-400: extract(@clr-orange-list, 5); +@clr-orange-500: extract(@clr-orange-list, 6); +@clr-orange-600: extract(@clr-orange-list, 7); +@clr-orange-700: extract(@clr-orange-list, 8); +@clr-orange-800: extract(@clr-orange-list, 9); +@clr-orange-900: extract(@clr-orange-list, 10); +@clr-orange-A100: extract(@clr-orange-list, 11); +@clr-orange-A200: extract(@clr-orange-list, 12); +@clr-orange-A400: extract(@clr-orange-list, 13); +@clr-orange-A700: extract(@clr-orange-list, 14); + + +// +// Deep Orange +// + +@clr-deep-orange-list: #fbe9e7, #ffccbc, #ffab91, #ff8a65, #ff7043, + #ff5722, #f4511e, #e64a19, #d84315, #bf360c, + #ff9e80, #ff6e40, #ff3d00, #dd2c00; + +@clr-deep-orange: extract(@clr-deep-orange-list, 6); + +@clr-deep-orange-50: extract(@clr-deep-orange-list, 1); +@clr-deep-orange-100: extract(@clr-deep-orange-list, 2); +@clr-deep-orange-200: extract(@clr-deep-orange-list, 3); +@clr-deep-orange-300: extract(@clr-deep-orange-list, 4); +@clr-deep-orange-400: extract(@clr-deep-orange-list, 5); +@clr-deep-orange-500: extract(@clr-deep-orange-list, 6); +@clr-deep-orange-600: extract(@clr-deep-orange-list, 7); +@clr-deep-orange-700: extract(@clr-deep-orange-list, 8); +@clr-deep-orange-800: extract(@clr-deep-orange-list, 9); +@clr-deep-orange-900: extract(@clr-deep-orange-list, 10); +@clr-deep-orange-A100: extract(@clr-deep-orange-list, 11); +@clr-deep-orange-A200: extract(@clr-deep-orange-list, 12); +@clr-deep-orange-A400: extract(@clr-deep-orange-list, 13); +@clr-deep-orange-A700: extract(@clr-deep-orange-list, 14); + + +// +// Brown +// + +@clr-brown-list: #efebe9, #d7ccc8, #bcaaa4, #a1887f, #8d6e63, + #795548, #6d4c41, #5d4037, #4e342e, #3e2723; + +@clr-brown: extract(@clr-brown-list, 6); + +@clr-brown-50: extract(@clr-brown-list, 1); +@clr-brown-100: extract(@clr-brown-list, 2); +@clr-brown-200: extract(@clr-brown-list, 3); +@clr-brown-300: extract(@clr-brown-list, 4); +@clr-brown-400: extract(@clr-brown-list, 5); +@clr-brown-500: extract(@clr-brown-list, 6); +@clr-brown-600: extract(@clr-brown-list, 7); +@clr-brown-700: extract(@clr-brown-list, 8); +@clr-brown-800: extract(@clr-brown-list, 9); +@clr-brown-900: extract(@clr-brown-list, 10); + + +// +// Grey +// + +@clr-grey-list: #fafafa, #f5f5f5, #eeeeee, #e0e0e0, #bdbdbd, + #9e9e9e, #757575, #616161, #424242, #212121; + +@clr-grey: extract(@clr-grey-list, 6); + +@clr-grey-50: extract(@clr-grey-list, 1); +@clr-grey-100: extract(@clr-grey-list, 2); +@clr-grey-200: extract(@clr-grey-list, 3); +@clr-grey-300: extract(@clr-grey-list, 4); +@clr-grey-400: extract(@clr-grey-list, 5); +@clr-grey-500: extract(@clr-grey-list, 6); +@clr-grey-600: extract(@clr-grey-list, 7); +@clr-grey-700: extract(@clr-grey-list, 8); +@clr-grey-800: extract(@clr-grey-list, 9); +@clr-grey-900: extract(@clr-grey-list, 10); + + +// +// Blue Grey +// + +@clr-blue-grey-list: #eceff1, #cfd8dc, #b0bec5, #90a4ae, #78909c, + #607d8b, #546e7a, #455a64, #37474f, #263238; + +@clr-blue-grey: extract(@clr-blue-grey-list, 6); + +@clr-blue-grey-50: extract(@clr-blue-grey-list, 1); +@clr-blue-grey-100: extract(@clr-blue-grey-list, 2); +@clr-blue-grey-200: extract(@clr-blue-grey-list, 3); +@clr-blue-grey-300: extract(@clr-blue-grey-list, 4); +@clr-blue-grey-400: extract(@clr-blue-grey-list, 5); +@clr-blue-grey-500: extract(@clr-blue-grey-list, 6); +@clr-blue-grey-600: extract(@clr-blue-grey-list, 7); +@clr-blue-grey-700: extract(@clr-blue-grey-list, 8); +@clr-blue-grey-800: extract(@clr-blue-grey-list, 9); +@clr-blue-grey-900: extract(@clr-blue-grey-list, 10); + + +// +// Black +// +@clr-black-list: #000; + +@clr-black: extract(@clr-blue-grey-list, 1); + + +// +// White +// + +@clr-white-list: #fff; + +@clr-white: extract(@clr-blue-grey-list, 1); + + +// +// List of all color names +// +@clr-list-all: red, pink, purple, deep-purple, indigo, blue, light-blue, cyan, + teal, green, light-green, lime, yellow, amber, orange, + deep-orange, brown, grey, blue-grey, black, white; + + +// +// Typography +// + +@clr-ui-display-4: @clr-grey-600; +@clr-ui-display-3: @clr-grey-600; +@clr-ui-display-2: @clr-grey-600; +@clr-ui-display-1: @clr-grey-600; +@clr-ui-headline: @clr-grey-900; +@clr-ui-title: @clr-grey-900; +@clr-ui-subhead-1: @clr-grey-900; +@clr-ui-body-2: @clr-grey-900; +@clr-ui-body-1: @clr-grey-900; +@clr-ui-caption: @clr-grey-600; +@clr-ui-menu: @clr-grey-900; +@clr-ui-button: @clr-grey-900; diff --git a/build/htdocs/dist/themes/styles/material/theme.js b/build/htdocs/dist/themes/styles/material/theme.js new file mode 100644 index 0000000..c4dfdff --- /dev/null +++ b/build/htdocs/dist/themes/styles/material/theme.js @@ -0,0 +1,41 @@ +'use strict'; + +OSjs.Applications.CoreWM.CurrentTheme = { + init: function() { + }, + + destroy: function() { + }, + + event: function(e) { + if ( e.target && e.target.nodeName.toLowerCase() === 'button' ) { + var parent = e.target; + if ( parseFloat(window.getComputedStyle(parent).getPropertyValue('opacity')) > 0 ) { + var drop; + var maxWidthHeight = Math.max(parent.clientWidth, parent.clientHeight); + var drops = Array.prototype.slice.call(parent.childNodes).filter(function(e) { + return (e.className === 'drop animate'); + }); + var freeDrops = drops.slice().filter(function(e) { + // .drop opacity is 1 when it's hidden... css animations + return parseFloat(window.getComputedStyle(e).getPropertyValue('opacity')) === 1; + }); + if ( drops.length === 0 || freeDrops.length === 0 ) { + drop = document.createElement('b'); + drop.className = 'drop'; + drop.style.width = maxWidthHeight + 'px'; + drop.style.height = maxWidthHeight + 'px'; + drop = parent.appendChild(drop); + } + else { + drop = freeDrops[0]; + drop.className = 'drop'; + } + var rect = parent.getBoundingClientRect(); + drop.style.top = (e.pageY - rect.top - maxWidthHeight / 2) + 'px'; + drop.style.left = (e.pageX - rect.left - maxWidthHeight / 2) + 'px'; + drop.className = 'drop animate'; + } + } + } +}; diff --git a/build/htdocs/dist/themes/styles/windows8.css b/build/htdocs/dist/themes/styles/windows8.css new file mode 100644 index 0000000..b685dc6 --- /dev/null +++ b/build/htdocs/dist/themes/styles/windows8.css @@ -0,0 +1,1257 @@ +@charset "UTF-8"; +/*! + * OS.js - JavaScript Cloud/Web Desktop Platform + * + * Copyright (c) 2011-2016, Anders Evenrud + * 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 + * @licence Simplified BSD License + */ +/** + * =========================================================================== + * CLASSES + * =========================================================================== + */ +.gui-has-emblem { + background-repeat: no-repeat; + background-position: calc(96%) center; + padding-right: calc(20px); +} +.gui-generic-container { + padding: 4px; + color: #242424; +} +.gui-generic-zebra-container { + background-color: #ffffff; +} +.gui-generic-zebra-container > * { + padding: 4px; +} +.gui-generic-zebra-container > *:nth-child(even) { + background: rgba(109, 171, 244, 0.5); +} +.gui-generic-hoverable:hover { + background-color: #2d73d2; +} +.gui-generic-padded { + padding: 4px; +} +.gui-generic-double-padded { + padding: calc(8px); +} +.gui-generic-margin { + margin: 4px; +} +/** + * =========================================================================== + * OVERRIDES + * =========================================================================== + */ +body, +input, +button, +textarea, +label, +select { + font-family: Karla, Sans-serif; + font-weight: normal; + font-style: normal; + font-size: 12px; + color: #242424; +} +::-webkit-scrollbar { + width: 12px; + height: 12px; +} +::-webkit-scrollbar-button { + background: #cdcdcd; + color: #f0f0f0; + width: 12px; + height: 12px; + display: none; +} +::-webkit-scrollbar-track { + background: #f0f0f0; +} +::-webkit-scrollbar-track-piece { + background: #f0f0f0; +} +::-webkit-scrollbar-thumb { + background: #cdcdcd; +} +::-webkit-scrollbar-corner { + background: #f0f0f0; +} +::-webkit-resizer { + background: #f0f0f0; +} +/** + * =========================================================================== + * WM + * =========================================================================== + */ +body[data-attention="true"]:after { + background-color: #242424; +} +corewm-panel { + color: #ffffff; + /* Window Manager manages this */ + font-size: 0; + padding: 4px; +} +corewm-panel:before { + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +corewm-panel-container { + padding: 8px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-container { + width: calc(100% - 8px); +} +corewm-panel[data-orientation="vertical"] corewm-panel-container { + height: calc(100% - 8px); +} +corewm-panel corewm-panel-item .corewm-panel-buttons > li { + cursor: pointer; + font-size: 12px; +} +corewm-panel[data-orientation="horizontal"] corewm-panel-item .corewm-panel-buttons > li { + margin-right: 4px; + margin-left: 4px; +} +corewm-panel[data-orientation="vertical"] corewm-panel-item .corewm-panel-buttons > li { + margin-top: 4px; + margin-bottom: 4px; +} +corewm-panel .PanelItemClock { + font-family: Monospace, Courier New; + font-weight: normal; + text-align: right; +} +corewm-panel .PanelItemWindowList li { + opacity: .50; +} +corewm-panel .PanelItemWindowList li.Focused { + opacity: 1; +} +corewm-panel .PanelItemWindowList li img { + margin-right: 4px; +} +html[dir="rtl"] corewm-panel .PanelItemWindowList li img { + margin-right: 0; + margin-left: 4px; +} +/* Notifications */ +application-splash { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #6dabf4; + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; + cursor: pointer; +} +.custom-notification { + color: #fff; + /* Window Manager manages this */ +} +corewm-notifications { + top: 10px; + right: 10px; +} +corewm-notification { + color: #fff; + /* Window Manager manages this */ + cursor: pointer; + padding: 8px; + margin-bottom: 4px; +} +.custom-notification:before, +corewm-notification:before { + content: ''; + background: #101010; + /* Window Manager manages this */ + box-shadow: 0px 0px 10px 1px rgba(34, 34, 34, 0.3); + opacity: .85; +} +.custom-notification .Title, +corewm-notification .Title { + font-weight: bold; +} +.custom-notification .Title, +.custom-notification .Message, +corewm-notification .Title, +corewm-notification .Message { + line-height: 16px; +} +/* Desktop drop wallpaper effect */ +#Background.Blinking { + background: #fff; +} +/* Window Switcher */ +corewm-window-switcher { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + background: #6dabf4; +} +corewm-window-switcher > div.Active { + background: #2d73d2; +} +corewm-window-switcher > div.Active > span { + color: #ffffff; +} +corewm-search { + padding: 4px; + min-width: 200px; + max-width: 40%; + right: 10px; + top: 10px; +} +corewm-search > div { + margin-top: 4px; +} +corewm-search > ul { + margin-top: 4px; + cursor: pointer; +} +corewm-search > ul > li { + padding: 4px; + padding-left: 24px; +} +corewm-search > ul > li > img { + top: 4px; + left: 4px; +} +corewm-search > ul > .active, +corewm-search > ul > li:hover { + background: #fff; + color: #000; +} +/** + * =========================================================================== + * WINDOW + * =========================================================================== + */ +application-window { + opacity: 0.8; + margin-top: 30px; +} +application-window:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.3); + background: #6dabf4; + top: calc(-35px); + left: -5px; + right: -5px; + bottom: -5px; +} +application-window[data-focused="true"] { + opacity: 1.0; +} +application-window[data-focused="true"]:before { + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); +} +application-window[data-dnd-state="true"]:after { + top: -30px; +} +application-window-top { + top: -30px; + height: 30px; +} +application-window-top application-window-icon { + width: 30px; +} +/* application-window-content {overflow : hidden;}*/ +application-window-top:active { + cursor: move; + cursor: pointer; +} +application-window-title { + font-weight: bold; + color: #242424; + opacity: .5; + left: 24px; + line-height: 30px; + text-align: center; +} +application-window-title:active { + cursor: move; + cursor: pointer; +} +application-window[data-focused="true"] application-window-title { + opacity: 1; +} +.application-window-button-entry { + width: 22px; + text-align: center; + cursor: pointer; +} +application-window-resize { + cursor: move; +} +application-window-top, +application-window-top > * { + cursor: default; +} +application-window-loading { + background: #000; + opacity: 0.8; +} +application-window-loading-indicator { + position: absolute; + width: 48px; + height: 48px; + left: 50%; + top: 50%; + margin-left: -24px; + margin-top: -24px; +} +application-window-loading-indicator:before { + display: block; + content: ''; + width: 44px; + height: 44px; + border-top: 4px solid #fff; + border-right: 4px solid #666; + border-left: 4px solid #666; + border-bottom: 4px solid #fff; + border-radius: 100%; + -webkit-animation: windowloadinganim 0.75s linear infinite; + -moz-animation: windowloadinganim 0.75s linear infinite; + -ms-animation: windowloadinganim 0.75s linear infinite; + animation: windowloadinganim 0.75s linear infinite; +} +application-window[data-dnd-state="true"]:after { + border: 4px solid rgba(0, 0, 0, 0.7); + border-radius: 1px; + -webkit-border-top-left-radius: 3px; + -moz-border-top-left-radius: 3px; + border-top-left-radius: 3px; + -webkit-border-top-right-radius: 3px; + -moz-border-top-right-radius: 3px; + border-top-right-radius: 3px; + margin: -4px; +} +application-window-disabled { + background: #000; + opacity: 0.5; + cursor: not-allowed; +} +application-window-warning { + background: #FFB800; + color: #fff; + border-color: #DF9F15; + height: 30px; + line-height: 20px; + margin: 4px; + border: 1px solid transparent; +} +application-window-warning > div:nth-child(1) { + padding: 4px; +} +application-window-warning > div:nth-child(2) { + right: 20px; + padding: 4px; +} +application-window-warning > div:nth-child(1):hover { + color: #111; + cursor: pointer; + opacity: .9; +} +application-window-resize { + top: -38px; + left: -8px; + right: -8px; + bottom: -8px; +} +/** + * =========================================================================== + * CONTAINERS + * =========================================================================== + */ +/* Container */ +gui-container { + margin: 4px; +} +gui-container[data-borders="true"] { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +/* Box */ +gui-hbox-container > .gui-element, +gui-vbox-container > .gui-element { + margin: 4px; +} +gui-hbox-container[data-fill='true'] > *, +gui-vbox-container[data-fill='true'] > * { + width: calc(100% - 8px); + height: calc(100% - 8px); +} +gui-hbox-container > .perc-100 { + height: calc(100% - 8px); +} +gui-vbox-container > .perc-100 { + width: calc(100% - 8px); +} +gui-hbox-container > .perc-90 { + height: calc(90% - 8px); +} +gui-vbox-container > .perc-90 { + width: calc(90% - 8px); +} +gui-hbox-container > .perc-80 { + height: calc(80% - 8px); +} +gui-vbox-container > .perc-80 { + width: calc(80% - 8px); +} +gui-hbox-container > .perc-70 { + height: calc(70% - 8px); +} +gui-vbox-container > .perc-70 { + width: calc(70% - 8px); +} +gui-hbox-container > .perc-60 { + height: calc(60% - 8px); +} +gui-vbox-container > .perc-60 { + width: calc(60% - 8px); +} +gui-hbox-container > .perc-50 { + height: calc(50% - 8px); +} +gui-vbox-container > .perc-50 { + width: calc(50% - 8px); +} +gui-hbox-container > .perc-40 { + height: calc(40% - 8px); +} +gui-vbox-container > .perc-40 { + width: calc(40% - 8px); +} +gui-hbox-container > .perc-30 { + height: calc(30% - 8px); +} +gui-vbox-container > .perc-30 { + width: calc(30% - 8px); +} +gui-hbox-container > .perc-20 { + height: calc(20% - 8px); +} +gui-vbox-container > .perc-20 { + width: calc(20% - 8px); +} +gui-hbox-container > .perc-10 { + height: calc(10% - 8px); +} +gui-vbox-container > .perc-10 { + width: calc(10% - 8px); +} +/* Paned View */ +gui-paned-view > gui-paned-view-handle { + min-width: 8px; + width: 8px; + cursor: ew-resize; +} +gui-paned-view[data-orientation='vertical'] > gui-paned-view-handle { + min-width: auto; + width: auto; + min-height: 8px; + height: 8px; + cursor: ns-resize; +} +/* IFrame */ +gui-iframe { + background-color: #ffffff; +} +gui-iframe > iframe { + background-color: #ffffff; +} +/* Button Bar */ +/* Toolbar */ +gui-toolbar > *, +gui-button-bar > *, +gui-toolbar > gui-expander > *, +gui-button-bar > gui-expander > * { + margin: 4px; +} +gui-toolbar > gui-expander, +gui-button-bar > gui-expander { + margin: 0; +} +gui-toolbar[data-orientation="vertical"] { + margin-left: 0; + margin-right: 0; + margin-top: 4px; + margin-bottom: 4px; +} +/* Expander */ +gui-expander { + font-size: 12px; +} +gui-expander-label { + cursor: pointer; + padding: 4px; + background-color: #f5f6f8; + margin-bottom: 4px; +} +gui-expander-label:before { + content: '▼'; + font-family: sans-serif; + padding-right: 4px; +} +gui-expander[data-expanded="false"] > gui-expander-label:before { + content: '►'; +} +/* Tabs */ +gui-tabs > ul { + height: 25px; +} +gui-tabs > ul > li { + padding-left: 8px; + padding-right: 8px; + cursor: pointer; + background-color: #f5f6f8; + border: 1px solid transparent; + border-bottom: 0 none; + line-height: 25px; +} +gui-tabs > ul > li.gui-active { + background-color: transparent; + border-color: #dbdbdb; +} +gui-tabs > ul > li.gui-active:after { + bottom: -1px; + border-bottom: 1px solid #6dabf4; +} +gui-tabs > gui-tab-container { + height: calc(100% - 25px); + border: 1px solid #dbdbdb; + padding: 4px; +} +/* Button Bar */ +/** + * =========================================================================== + * INPUTS + * =========================================================================== + */ +/* Label */ +gui-label { + height: 26px; + line-height: 26px; +} +gui-hbox-container > gui-label, +gui-vbox-container > gui-label { + height: 16px; + line-height: 16px; + min-height: 16px; +} +/* Button */ +gui-button { + height: 26px; +} +gui-button[data-icon-size="32"] { + height: 42px; +} +gui-button button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-button button:focus { + outline: 0 none transparent; +} +gui-button button.gui-active, +gui-button button:active { + border-color: #242424; + color: #242424; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f8f8f8 0%, #f4f4f4 100%); +} +gui-button button.gui-active:disabled, +gui-button button:disabled:active, +gui-button button:disabled { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-button button:disabled img { + opacity: .5; +} +gui-button button:disabled { + cursor: default; + color: #727272; +} +gui-button button.gui-has-image img { + padding-right: 4px; +} +gui-button.gui-has-image.gui-has-label button { + padding-left: 28px; +} +gui-button[data-icon-size="32"].gui-has-image.gui-has-label button { + padding-left: 44px; +} +/* Checkbox Button */ +/* Radio Button */ +gui-radio, +gui-checkbox { + height: 26px; +} +gui-radio input, +gui-checkbox input { + text-align: center; + background: #ffffff; + border: 1px solid #dbdbdb; + width: 16px; + height: 16px; + line-height: 12px; + color: #242424; + font-family: Arial; +} +gui-radio input:focus, +gui-checkbox input:focus { + outline: 0 none transparent; +} +gui-radio input { + -webkit-border-radius: 16px; + -moz-border-radius: 16px; + -ms-border-radius: 16px; + border-radius: 16px; +} +gui-radio input:checked:after { + content: "\2022"; + font-size: 32px; +} +gui-checkbox input:checked:after { + content: "\2713"; + font-size: 12px; +} +gui-radio[data-disabled="true"] label, +gui-checkbox[data-disabled="true"] label { + color: #727272; +} +gui-radio input:disabled, +gui-checkbox input:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; +} +gui-radio > label, +gui-checkbox > label { + line-height: 26px; +} +gui-radio > label > span, +gui-checkbox > label > span { + padding-left: 4px; +} +/* Select Dropdown */ +gui-select { + height: 26px; +} +gui-select select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding-right: 20px; +} +gui-select select:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-select select:focus { + outline: 0 none transparent; +} +gui-select:before { + right: 1px; + top: 1px; + bottom: 1px; + width: 22px; + background: #ffffff; +} +gui-select:after { + content: '<>'; + font: 11px "Consolas", monospace; + color: #dbdbdb; + right: 2px; + top: 5px; + padding: 0 0 2px; + border-bottom: 1px solid #dbdbdb; + -webkit-transform: rotate(90deg); + -moz-transform: rotate(90deg); + -ms-transform: rotate(90deg); + transform: rotate(90deg); +} +gui-select[data-disabled="true"]:before { + background-color: #e6e6e6; +} +/* Select List */ +gui-select-list select { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-select-list select:focus { + outline: 0 none transparent; +} +gui-select-list select:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +/* Slider */ +gui-slider { + height: 26px; +} +gui-slider input { + background: transparent; + border: 0 none; + height: 26px; +} +/* + * RANGE TRACK + */ +gui-slider input::-moz-range-track { + height: 4px; + background-color: #f5f6f8; +} +gui-slider input::-webkit-slider-runnable-track { + height: 4px; + background-color: #f5f6f8; +} +gui-slider input::-ms-track { + height: 4px; + background-color: #f5f6f8; +} +/* + * RANGE THUMB + */ +gui-slider input::-moz-range-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 18px; + width: 10px; +} +gui-slider input:disabled::-moz-range-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-slider input::-webkit-slider-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 24px; + width: 16px; + margin-top: -10px; +} +gui-slider input:disabled::-webkit-range-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-slider input::-ms-thumb { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + height: 24px; + width: 16px; +} +gui-slider input:disabled::-ms-thumb { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +/** + * MISC + */ +gui-slider input[type=range]::-ms-fill-lower { + border: 0 none; + background-color: #f5f6f8; +} +gui-slider input[type=range]::-ms-fill-upper { + border: 0 none; + background-color: #f5f6f8; +} +gui-slider input[type=range]:focus::-ms-fill-lower { + background-color: #f5f6f8; +} +gui-slider input[type=range]:focus::-ms-fill-upper { + background-color: #f5f6f8; +} +/* Switch */ +gui-switch { + height: 26px; +} +gui-switch div { + width: 48px; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + cursor: pointer; + padding: 0; +} +gui-switch button { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-switch button:focus { + outline: 0 none transparent; +} +gui-switch > label > div { + margin-left: 4px; +} +gui-switch[data-disabled="true"] button { + border-color: #d9d9d9; + color: #242424; + background-color: #e6e6e6; + background: #e6e6e6; +} +gui-switch[data-disabled="true"] div { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; + padding: 0; +} +gui-switch[data-disabled="true"] button, +gui-switch[data-disabled="true"] label { + color: #727272; +} +/* Text Field */ +/* Password Field */ +gui-password, +gui-text { + height: 26px; +} +gui-password input, +gui-text input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding-left: 8px; + padding-right: 8px; +} +gui-password > label > input, +gui-text > label > input { + margin-left: 4px; +} +gui-password input:disabled, +gui-text input:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-password input:focus, +gui-text input:focus { + outline: 0 none transparent; +} +gui-password[data-disabled="true"] label, +gui-text[data-disabled="true"] label { + color: #727272; +} +/* Text Area */ +gui-textarea textarea { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-textarea textarea:focus { + outline: 0 none transparent; +} +gui-textarea textarea:disabled { + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-textarea[data-disabled="true"] label { + color: #727272; +} +/* Rich Text */ +gui-richtext { + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-richtext > iframe { + background-color: #ffffff; +} +/* Grid */ +gui-grid > gui-grid-row > gui-grid-entry { + /* li */ + margin: 4px; +} +/* Modal Input */ +gui-input-modal input { + cursor: pointer; + padding: 4px; + background-color: #ffffff; + border: 1px solid #dbdbdb; + border-color: #d9d9d9; + background-color: #e6e6e6; + color: #727272; +} +gui-input-modal button { + margin-left: 4px; + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; + padding-left: 8px; + padding-right: 8px; +} +gui-input-modal button:focus { + outline: 0 none transparent; +} +/** + * =========================================================================== + * MISC + * =========================================================================== + */ +/* Video */ +/* Color Swatch */ +gui-color-swatch { + border: 1px solid #dbdbdb; +} +/* Color Box */ +gui-color-box { + cursor: pointer; + padding: 4px; + background-color: #f8f8f8; + background: linear-gradient(to bottom, #f1f1f1 0%, #e5e5e5 100%); + border: 1px solid #ababab; + color: #242424; +} +gui-color-box > div { + background: #fff; +} +/* Menu */ +gui-menu { + border: 1px solid transparent; + background: #fff; + box-shadow: 0px 0px 10px 1px rgba(0, 0, 0, 0.6); + color: #242424; +} +gui-menu > gui-menu-entry { + color: #242424; +} +gui-menu > gui-menu-entry > label { + cursor: pointer; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 16px; +} +html[dir="rtl"] gui-menu > gui-menu-entry.gui-menu-expand { + padding-right: 0; +} +html[dir="rtl"] gui-menu > gui-menu-entry[data-icon] { + padding-right: 16px; +} +gui-menu > gui-menu-entry.gui-menu-expand:after { + content: '►'; + font-family: sans-serif; + line-height: 18px; + padding: 4px; +} +gui-menu > gui-menu-entry.gui-hover, +gui-menu > gui-menu-entry:hover { + background-color: #2d73d2; +} +gui-menu > gui-menu-entry.gui-hover > label, +gui-menu > gui-menu-entry:hover > label { + color: #ffffff; +} +gui-menu > gui-menu-entry { + background-position: 4px center; +} +html[dir="rtl"] gui-menu > gui-menu-entry { + background-position: right 4px center; +} +gui-menu > gui-menu-entry > label.gui-has-image { + padding-left: 22px; +} +gui-menu > gui-menu-entry[data-disabled="true"], +gui-menu > gui-menu-entry[data-disabled="true"] > label { + color: #727272; +} +/* Menu Bar */ +gui-menu-bar { + padding-left: 4px; + padding-right: 4px; +} +gui-menu-bar-entry { + cursor: pointer; + padding: 4px; +} +gui-menu-bar-entry:hover { + background: #2d73d2; + color: #ffffff; +} +gui-menu-bar-entry[data-disabled="true"] > span { + color: #727272; +} +/* Progressbar */ +gui-progress-bar { + display: block; + height: 26px; +} +gui-progress-bar:before { + background-color: #f5f6f8; + border: 1px solid #dbdbdb; + padding: 4px; +} +gui-progress-bar > div { + background: #2d73d2 url('/themes/styles/default/gui/progressbar.png') repeat-x center; +} +gui-progress-bar > span { + color: #fff; +} +/* Statusbar */ +gui-statusbar { + margin: 4px; + padding-bottom: 4px; +} +/** + * =========================================================================== + * VIEWS + * =========================================================================== + */ +/* Icon View */ +gui-icon-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; + padding: 4px; +} +gui-icon-view.gui-element-focused { + outline: 0 none transparent; +} +gui-icon-view-entry { + cursor: pointer; + margin: 2px; + padding: 2px; + text-align: center; + min-width: 60px !important; + min-height: 60px !important; +} +gui-icon-view-entry.gui-active { + background: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-icon-view-entry.gui-active > div > span { + background: rgba(45, 115, 210, 0.8); +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active { + background: #2d73d2; +} +gui-icon-view.gui-element-focused gui-icon-view-entry.gui-active > div > span { + background: #2d73d2; +} +/* List View */ +gui-list-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-list-view.gui-element-focused { + outline: 0 none transparent; +} +gui-list-view-head { + background-color: #f5f6f8; +} +gui-list-view[data-zebra="true"] gui-list-view-body gui-list-view-row:nth-child(2n) { + background-color: #F9F9F9; + color: inherit; +} +gui-list-view-column { + padding: 4px; +} +gui-list-view-column.gui-has-image { + padding-left: 24px; + background-position: 4px; +} +html[dir="rtl"] gui-list-view gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 24px; + background-position: right 4px center; +} +gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 40px; +} +html[dir="rtl"] gui-list-view[data-icon-size="32"] gui-list-view-column.gui-has-image { + padding-left: 0; + padding-right: 40px; +} +gui-list-view-row.gui-active { + background-color: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-list-view.gui-element-focused gui-list-view-row.gui-active { + background-color: #2d73d2; +} +gui-list-view-column-resizer { + cursor: ew-resize; + width: 3px; + right: 0px; +} +gui-list-view-column-resizer:after { + background: #dbdbdb; +} +/* Tree View */ +gui-tree-view { + background-color: #ffffff; + border: 1px solid #dbdbdb; +} +gui-tree-view.gui-element-focused { + outline: 0 none transparent; +} +gui-tree-view-entry.dnd-over > div { + font-weight: bold; + text-decoration: underline; +} +gui-tree-view-entry > div { + padding: 4px; +} +gui-tree-view-entry > div > span { + cursor: pointer; + padding: 2px; +} +gui-tree-view-entry > div > span.gui-has-image { + padding-left: 20px; +} +gui-tree-view-entry > gui-tree-view-entry { + margin-left: 16px; +} +gui-tree-view-entry > gui-tree-view-entry.gui-expandable { + margin-left: 2px; +} +gui-tree-view-entry.gui-active > div { + background-color: rgba(45, 115, 210, 0.8); + color: #ffffff; +} +gui-tree-view.gui-element-focused gui-tree-view-entry.gui-active > div { + background-color: #2d73d2; +} +gui-tree-view-entry.gui-expandable { + padding-left: 16px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander { + padding-left: 4px; + cursor: pointer; + line-height: 24px; +} +gui-tree-view-entry.gui-expandable gui-tree-view-expander:before { + content: '\25BA'; + font-family: Arial; + color: #dbdbdb; +} +gui-tree-view-entry.gui-expandable.gui-expanded > gui-tree-view-expander:before { + content: '\25BC'; +} +/** + * Windows 8 Theme + */ +gui-tabs > ul > li.gui-active:after { + border-bottom: 1px solid #fff; +} +gui-progress-bar > div { + background: #6dabf4; +} +application-window-top { + height: 25px; +} +application-window-title { + line-height: 25px; +} +application-window[data-focused="false"]:before { + background: #ebebeb; + border: 1px solid #d3d3d3; +} +application-window[data-focused="true"]:before { + background: #6dabf4; + border: 1px solid #5185be; +} +application-window-content { + background: #ffffff; + padding-top: 2px; +} +application-window-content[data-focused="false"] { + border: 1px solid #5d93d1; +} +application-window-content[data-focused="true"] { + border: 1px solid #dadada; +} +.application-window-button-entry { + width: 26px; + line-height: 20px; + text-align: center; + font-family: Arial; + font-size: 10px; + margin-top: -5px; +} +application-window-button-maximize { + background: url('windows8/wm/maximize.png') no-repeat center center; +} +application-window-button-minimize { + background: url('windows8/wm/minimize.png') no-repeat center center; +} +application-window-button-close { + background: #c74f51 url('windows8/wm/close.png') no-repeat 49% center; +} +application-window-button-maximize:hover, +application-window-button-minimize:hover { + background-color: #5185be; +} +application-window-button-close:hover { + background-color: #de1e19; +} +application-window-button-close { + width: 45px !important; +} diff --git a/build/htdocs/dist/themes/styles/windows8.css.map b/build/htdocs/dist/themes/styles/windows8.css.map new file mode 100644 index 0000000..785cdad --- /dev/null +++ b/build/htdocs/dist/themes/styles/windows8.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["/Users/mrsang/Google Drive/ushare/IoTOS/OS.js/src/client/stylesheets/theme.less","input"],"names":[],"mappings":"AAAA,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2JT;EACE,4BAAA;EACA,qBAAsB,gBAAtB;EACA,eAAgB,UAAhB;;AAIF;EACE,YAAA;EACA,cAAA;;AAGF;EACE,yBAAA;;AAEA,4BAA6B;EAC3B,YAAA;;AAEF,4BAA6B,IAAG,UAAU;EACxC,oCAAA;;AAGJ,sBAAsB;EACpB,yBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,SAAU,SAAV;;AAEF;EACE,WAAA;;;;;;;AASF;AAAM;AAAO;AAAQ;AAAU;AAAO;EACpC,8BAAA;EACA,mBAAA;EACA,kBAAA;EACA,eAAA;EACA,cAAA;;AAGF;EACE,WAAA;EACA,YAAA;;AAEF;EACE,mBAAA;EACA,cAAA;EACA,WAAA;EACA,YAAA;EACA,aAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;AAEF;EACE,mBAAA;;;;;;;AASF,IAAI,uBAAuB;EACzB,yBAAA;;AAGF;EACE,cAAA;;EACA,YAAA;EACA,YAAA;;AAEF,YAAY;EACV,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF;EACE,YAAA;;AAEF,YAAY,+BAAgC;EAC1C,OAAQ,iBAAR;;AAEF,YAAY,6BAA8B;EACxC,QAAS,iBAAT;;AAGA,YAAa,kBAAkB,sBAAsB;EACnD,eAAA;EACA,eAAA;;AAEF,YAAY,+BAAgC,kBAAkB,sBAAsB;EAClF,iBAAA;EACA,gBAAA;;AAEF,YAAY,6BAA8B,kBAAkB,sBAAsB;EAChF,eAAA;EACA,kBAAA;;AAGJ,YAAa;EACX,mCAAA;EACA,mBAAA;EACA,iBAAA;;AAGF,YAAa,qBAAqB;EAChC,YAAA;;AAEF,YAAa,qBAAqB,GAAE;EAClC,UAAA;;AAEF,YAAa,qBAAqB,GAAG;EACnC,iBAAA;;AAEF,IAAI,WAAY,aAAa,qBAAqB,GAAG;EACnD,eAAA;EACA,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;EACA,kDAAA;EACA,YAAA;EACA,eAAA;;AAGF;EACE,WAAA;;;AAGF;EACE,SAAA;EACA,WAAA;;AAGF;EACE,WAAA;;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAGA,oBAAoB;AACpB,mBAAmB;EACjB,SAAU,EAAV;EACA,mBAAA;;EACA,kDAAA;EACA,YAAA;;AAGF,oBAAqB;AACrB,mBAAoB;EAClB,iBAAA;;AAGF,oBAAqB;AACrB,oBAAqB;AACrB,mBAAoB;AACpB,mBAAoB;EAClB,iBAAA;;;AAIF,WAAW;EACT,gBAAA;;;AAIF;EACE,+CAAA;EACA,mBAAA;;AAEF,sBAAuB,MAAK;EAC1B,mBAAA;;AAEF,sBAAuB,MAAK,OAAQ;EAClC,cAAA;;AAGJ;EACE,YAAA;EACA,gBAAA;EACA,cAAA;EACA,WAAA;EACA,SAAA;;AAEA,aAAc;EACZ,eAAA;;AAEF,aAAc;EACZ,eAAA;EACA,eAAA;;AAEA,aAAc,KAAK;EACjB,YAAA;EACA,kBAAA;;AAEA,aAAc,KAAK,KAAK;EACtB,QAAA;EACA,SAAA;;AAEJ,aAAc,KAAK;AACnB,aAAc,KAAK,KAAI;EACrB,gBAAA;EACA,WAAA;;;;;;;AAQN;EACE,YAAA;EACA,gBAAA;;AAEF,kBAAkB;EAChB,+CAAA;EACA,mBAAA;EACA,KAAM,WAAN;EACA,UAAA;EACA,WAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,YAAA;;AAEF,kBAAkB,qBAAqB;EACrC,+CAAA;;AAEA,kBAAkB,uBAAuB;EACzC,UAAA;;AAEF;EACE,UAAA;EACA,YAAA;;AAFF,sBAIE;EACE,WAAA;;;AAMJ,sBAAsB;EACpB,YAAA;EACA,eAAA;;AAEF;EACE,iBAAA;EACA,cAAA;EACA,WAAA;EACA,UAAA;EACA,iBAAA;EACA,kBAAA;;AAEF,wBAAwB;EACtB,YAAA;EACA,eAAA;;AAEF,kBAAkB,qBAAsB;EACtC,UAAA;;AAEF;EACE,WAAA;EACA,kBAAA;EACA,eAAA;;AAEF;EACE,YAAA;;AAEF;AAAwB,sBAAuB;EAC7C,eAAA;;AAEF;EACE,gBAAA;EACA,YAAA;;AAEF;EACE,kBAAA;EACA,WAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,kBAAA;EACA,iBAAA;;AAEF,oCAAoC;EAClC,cAAA;EACA,SAAS,EAAT;EACA,WAAA;EACA,YAAA;EACA,0BAAA;EACA,4BAAA;EACA,2BAAA;EACA,6BAAA;EACA,mBAAA;EACA,0DAAA;EACG,uDAAA;EACC,sDAAA;EACI,kDAAA;;AAEV,kBAAkB,uBAAuB;EACvC,oCAAA;EACA,kBAAA;EA7XA,mCAAA;EACG,gCAAA;EACK,2BAAA;EACR,oCAAA;EACG,iCAAA;EACK,4BAAA;EA0XR,YAAA;;AAEF;EACE,gBAAA;EACA,YAAA;EACA,mBAAA;;AAEF;EACE,mBAAA;EACA,WAAA;EACA,qBAAA;EAEA,YAAA;EACA,iBAAA;EACA,WAAA;EACA,6BAAA;;AAEA,0BAA2B,MAAK,UAAU;EACxC,YAAA;;AAEF,0BAA2B,MAAK,UAAU;EACxC,WAAA;EACA,YAAA;;AAEF,0BAA2B,MAAK,UAAU,GAAG;EAC3C,WAAA;EACA,eAAA;EACA,WAAA;;AAEJ;EACE,UAAA;EACA,UAAA;EACA,WAAA;EACA,YAAA;;;;;;;;AAUF;EACE,WAAA;;AAEF,aAAa;EAnYX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;;AAqYA,kBAAmB;AACnB,kBAAmB;EACjB,WAAA;;AAGA,kBAAkB,kBAAmB;AACrC,kBAAkB,kBAAmB;EACnC,OAAQ,iBAAR;EACA,QAAS,iBAAT;;AAGF,kBAAmB;EACjB,QAAS,iBAAT;;AAEF,kBAAmB;EACjB,OAAQ,iBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;AAGF,kBAAmB;EACjB,QAAS,gBAAT;;AAEF,kBAAmB;EACjB,OAAQ,gBAAR;;;AAIN,cAAe;EACb,cAAA;EACA,UAAA;EACA,iBAAA;;AAEF,cAAc,6BAA8B;EAC1C,eAAA;EACA,WAAA;EACA,eAAA;EACA,WAAA;EACA,iBAAA;;;AAIF;EACE,yBAAA;;AAEA,UAAW;EACT,yBAAA;;;;AAKJ,WAAY;AACZ,cAAe;AACf,WAAY,eAAe;AAC3B,cAAe,eAAe;EAC5B,WAAA;;AAEF,WAAY;AACZ,cAAe;EACb,SAAA;;AAMF,WAAW;EACT,cAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;;;AAIF;EACE,eAAA;;AAEA;EACE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,kBAAA;;AAEF,kBAAkB;EAChB,SAAU,GAAV;EACA,uBAAA;EACA,kBAAA;;AAEF,YAAY,uBAAwB,qBAAoB;EACtD,SAAU,GAAV;;;AAIF,QAAS;EACP,YAAA;;AAEA,QAAS,KAAK;EACZ,iBAAA;EACA,kBAAA;EACA,eAAA;EACA,yBAAA;EACA,6BAAA;EACA,qBAAA;EACA,iBAAA;;AAEF,QAAS,KAAK,KAAI;EAChB,6BAAA;EACA,qBAAA;;AAEA,QAAS,KAAK,KAAI,WAAW;EAC3B,YAAA;EACA,gCAAA;;AAEN,QAAS;EACP,yBAAA;EACA,yBAAA;EACA,YAAA;;;;;;;;;AAYJ;EACE,YAAA;EACA,iBAAA;;AAEF,kBAAmB;AACnB,kBAAmB;EACjB,YAAA;EACA,iBAAA;EACA,gBAAA;;;AAIF;EACE,YAAA;;AAEF,UAAU;EACR,YAAA;;AAEA,UAAW;EAvmBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;;AAqmBA,UAAW,OAAM;EACf,2BAAA;;AAEF,UAAW,OAAM;AACjB,UAAW,OAAM;EAhmBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,YCjGqC,oDDiGrC;;AAgmBA,UAAW,OAAM,WAAW;AAC5B,UAAW,OAAM,SAAS;AAC1B,UAAW,OAAM;EA3mBjB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA2mBA,UAAW,OAAM,SAAU;EACzB,WAAA;;AAEF,UAAW,OAAM;EACf,eAAA;EACA,cAAA;;AAEF,UAAW,OAAM,cAAe;EAC9B,kBAAA;;AAEF,UAAU,cAAc,cAAe;EACrC,kBAAA;;AAEF,UAAU,qBAAqB,cAAc,cAAe;EAC1D,kBAAA;;;;AAKJ;AACA;EACE,YAAA;;AAEA,SAAU;AACV,YAAa;EACX,kBAAA;EACA,mBAAA;EACA,yBAAA;EACA,WAAA;EACA,YAAA;EACA,iBAAA;EACA,cAAA;EACA,kBAAA;;AAEF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,2BAAA;;AAGF,SAAU;EACR,2BAAA;EACG,wBAAA;EACC,uBAAA;EACI,mBAAA;;AAGV,SAAU,MAAK,QAAQ;EACrB,SAAS,OAAT;EACA,eAAA;;AAGF,YAAa,MAAK,QAAQ;EACxB,SAAS,OAAT;EACA,eAAA;;AAGF,SAAS,sBAAuB;AAChC,YAAY,sBAAuB;EACjC,cAAA;;AAGF,SAAU,MAAK;AACf,YAAa,MAAK;EAChB,qBAAA;EACA,yBAAA;;AAGF,SAAU;AACV,YAAa;EACX,iBAAA;;AAEF,SAAU,QAAQ;AAClB,YAAa,QAAQ;EACnB,iBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EA9qBX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EA6qBE,mBAAA;;AAEF,UAAW,OAAM;EA5qBjB,qBAAA;EACA,yBAAA;EACA,cAAA;;AA6qBA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAU;EACR,UAAA;EACA,QAAA;EACA,WAAA;EACA,WAAA;EACA,mBAAA;;AAEF,UAAU;EACR,SAAS,IAAT;EACA,WAAW,qBAAX;EACA,cAAA;EACA,UAAA;EACA,QAAA;EACA,gBAAA;EACA,gCAAA;EAEA,mBAAmB,aAAnB;EACG,gBAAgB,aAAhB;EACC,eAAe,aAAf;EACI,WAAW,aAAX;;AAEV,UAAU,sBAAsB;EAC9B,yBAAA;;;AAIJ,eAAgB;EAntBd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAmtBA,eAAgB,OAAM;EACpB,2BAAA;;AAEJ,eAAgB,OAAM;EAntBpB,qBAAA;EACA,yBAAA;EACA,cAAA;;;AAstBF;EACE,YAAA;;AAEA,UAAW;EACT,uBAAA;EACA,cAAA;EACA,YAAA;;;;;AAOF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;AAGF,UAAW,MAAK;EACd,WAAA;EACA,yBAAA;;;;;AAOF,UAAW,MAAK;EAtxBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;EAmxBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAnxBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAoxBA,UAAW,MAAK;EA/xBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;EA4xBE,YAAA;EACA,WAAA;EACA,iBAAA;;AAEF,UAAW,MAAK,SAAS;EA7xBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AA8xBA,UAAW,MAAK;EAzyBhB,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;EAsyBE,YAAA;EACA,WAAA;;AAEF,UAAW,MAAK,SAAS;EAtyBzB,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;;;;AA0yBA,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY;EAC1B,cAAA;EACA,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;AAEF,UAAW,MAAK,YAAY,MAAM;EAChC,yBAAA;;;AAIJ;EACE,YAAA;;AAEA,UAAW;EACT,WAAA;EAhzBF,YAAA;EACA,yBAAA;EACA,yBAAA;EAizBE,eAAA;EACA,UAAA;;AAGF,UAAW;EAh1BX,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;;AA80BA,UAAW,OAAM;EACf,2BAAA;;AAGF,UAAW,QAAQ;EACjB,gBAAA;;AAGF,UAAU,sBAAuB;EAn1BjC,qBAAA;EACA,cAAA;EACA,yBAAA;EACA,mBAAA;;AAm1BA,UAAU,sBAAuB;EAh0BjC,qBAAA;EACA,yBAAA;EACA,cAAA;EAg0BE,UAAA;;AAGF,UAAU,sBAAuB;AACjC,UAAU,sBAAuB;EA/0BjC,cAAA;;;;AAq1BF;AACA;EACE,YAAA;;AAEA,YAAa;AACb,QAAS;EAv1BT,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAs1BE,iBAAA;EACA,kBAAA;;AAGF,YAAa,QAAQ;AACrB,QAAS,QAAQ;EACf,gBAAA;;AAGF,YAAa,MAAK;AAClB,QAAS,MAAK;EA71Bd,qBAAA;EACA,yBAAA;EACA,cAAA;;AA81BA,YAAa,MAAK;AAClB,QAAS,MAAK;EACZ,2BAAA;;AAGF,YAAY,sBAAuB;AACnC,QAAQ,sBAAuB;EA/2B/B,cAAA;;;AAq3BA,YAAa;EAl3Bb,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;;AAk3BA,YAAa,SAAQ;EACnB,2BAAA;;AAEF,YAAa,SAAQ;EAl3BrB,qBAAA;EACA,yBAAA;EACA,cAAA;;AAo3BA,YAAY,sBAAuB;EA/3BnC,cAAA;;;AAo4BF;EACE,YAAA;EACA,yBAAA;EACA,yBAAA;;AAEA,YAAa;EACX,yBAAA;;;AAIJ,QAAS,eAAe;;EACtB,WAAA;;;AAIF,eAAgB;EAh5Bd,eAAA;EACA,YAAA;EACA,yBAAA;EACA,yBAAA;EAGA,qBAAA;EACA,yBAAA;EACA,cAAA;;AA44BF,eAAgB;EACd,gBAAA;EA76BA,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;EA06BA,iBAAA;EACA,kBAAA;;AAEA,eAAgB,OAAM;EACpB,2BAAA;;;;;;;;;AAgBJ;EACE,yBAAA;;;AAIF;EAx8BE,eAAA;EACA,YAAA;EACA,yBAAA;EACA,YCxFqC,oDDwFrC;EACA,yBAAA;EACA,cAAA;;AAs8BA,aAAc;EACZ,gBAAA;;;AAIJ;EACE,6BAAA;EACA,gBAAA;EACA,+CAAA;EACA,cAAA;;AAEA,QAAS;EACP,cAAA;;AAEF,QAAS,iBAAiB;EACxB,eAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;EACvB,mBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,gBAAA;;AAEF,IAAI,WAAY,SAAS,iBAAgB;EACvC,mBAAA;;AAEF,QAAS,iBAAgB,gBAAgB;EACvC,SAAU,GAAV;EACA,uBAAA;EACA,iBAAA;EACA,YAAA;;AAGF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB;EACvB,yBAAA;;AAEF,QAAS,iBAAgB,UAAW;AACpC,QAAS,iBAAgB,MAAO;EAC9B,cAAA;;AAEA,QAAS;EACP,+BAAA;;AAEF,IAAI,WAAY,SAAS;EACvB,qCAAA;;AAEF,QAAS,iBAAiB,QAAO;EAC/B,kBAAA;;AAEF,QAAS,iBAAgB;AACzB,QAAS,iBAAgB,sBAAuB;EAC9C,cAAA;;;AAIN;EACE,iBAAA;EACA,kBAAA;;AAEA;EACE,eAAA;EACA,YAAA;;AAEF,kBAAkB;EAChB,mBAAA;EACA,cAAA;;AAEF,kBAAkB,sBAAuB;EACvC,cAAA;;;AAKJ;EACE,cAAA;EACA,YAAA;;AAEA,gBAAgB;EACd,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEF,gBAAiB;EACf,wBAtkC8D,6DAskC9D;;AAEF,gBAAiB;EACf,WAAA;;;AAIJ;EACE,WAAA;EACA,mBAAA;;;;;;;;AAUF;EACE,yBAAA;EACA,yBAAA;EACA,YAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,eAAA;EACA,WAAA;EACA,YAAA;EACA,kBAAA;EACA,0BAAA;EACA,2BAAA;;AAGA,mBAAmB;EACjB,mCAAA;EACA,cAAA;;AAEF,mBAAmB,WAAY,MAAM;EACnC,mCAAA;;AAEF,aAAa,oBAAqB,oBAAmB;EACnD,mBAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY,MAAM;EACrE,mBAAA;;;AAIN;EACE,yBAAA;EACA,yBAAA;;AAEA,aAAa;EACX,2BAAA;;AAEF;EACE,yBAAA;;AAIE,aAAa,mBAAoB,mBAAmB,kBAAiB,UAAU;EAC7E,yBAAA;EACA,cAAA;;AAEF;EACE,YAAA;;AAEF,oBAAoB;EAClB,kBAAA;EACA,wBAAA;;AAEF,IAAI,WAAY,cAAc,qBAAoB;EAChD,eAAA;EACA,mBAAA;EACA,qCAAA;;AAGF,aAAa,qBAAsB,qBAAoB;EACrD,kBAAA;;AAEF,IAAI,WAAY,cAAa,qBAAsB,qBAAoB;EACrE,eAAA;EACA,mBAAA;;AAGJ,iBAAiB;EACf,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,kBAAiB;EACjD,yBAAA;;AAGF;EACE,iBAAA;EACA,UAAA;EACA,UAAA;;AAEA,4BAA4B;EAC1B,mBAAA;;;AAKR;EACE,yBAAA;EACA,yBAAA;;AAEE,aAAa;EACX,2BAAA;;AAEF,mBAAmB,SAAU;EAC3B,iBAAA;EACA,0BAAA;;AAEF,mBAAoB;EAClB,YAAA;;AAEF,mBAAoB,MAAM;EACxB,eAAA;EACA,YAAA;;AAEF,mBAAoB,MAAM,OAAM;EAC9B,kBAAA;;AAEF,mBAAoB;EAClB,iBAAA;;AAEF,mBAAoB,sBAAqB;EACvC,gBAAA;;AAEF,mBAAmB,WAAY;EAC7B,yCAAA;EACA,cAAA;;AAEF,aAAa,oBAAqB,oBAAmB,WAAY;EAC/D,yBAAA;;AAGJ,mBAAmB;EACjB,kBAAA;;AAEF,mBAAmB,eAAgB;EACjC,iBAAA;EACA,eAAA;EACA,iBAAA;;AAEF,mBAAmB,eAAgB,uBAAsB;EACvD,SAAU,OAAV;EACA,kBAAA;EACA,cAAA;;AAEF,mBAAmB,eAAe,aAAc,yBAAwB;EACtE,SAAU,OAAV;;;;;ACnwCJ,QAAS,KAAK,KAAI,WAAW;EAC3B,6BAAA;;AAEF,gBAAiB;EACf,mBAAA;;AAGF;EACE,YAAA;;AAEF;EACE,iBAAA;;AAGF,kBAAkB,sBAAsB;EACtC,mBAAA;EACA,yBAAA;;AAEF,kBAAkB,qBAAqB;EACrC,mBAAA;EACA,yBAAA;;AAEF;EACE,mBAAA;EACA,gBAAA;;AAEF,0BAA0B;EACxB,yBAAA;;AAEF,0BAA0B;EACxB,yBAAA;;AAGF;EACE,WAAA;EACA,iBAAA;EACA,kBAAA;EACA,kBAAA;EACA,eAAA;EACA,gBAAA;;AAEF;EACE,gBAAiB,mDAAjB;;AAEF;EACE,gBAAiB,mDAAjB;;AAEF;EACE,wBAAyB,6CAAzB;;AAEF,kCAAkC;AAClC,kCAAkC;EAChC,yBAAA;;AAEF,+BAA+B;EAC7B,yBAAA;;AAEF;EACE,sBAAA"} \ No newline at end of file diff --git a/build/htdocs/dist/themes/styles/windows8/theme.js b/build/htdocs/dist/themes/styles/windows8/theme.js new file mode 100644 index 0000000..ab07df7 --- /dev/null +++ b/build/htdocs/dist/themes/styles/windows8/theme.js @@ -0,0 +1,27 @@ +(function(API, Utils) { + 'use strict'; + + OSjs.Applications = OSjs.Applications || {}; + OSjs.Applications.CoreWM = OSjs.Applications.CoreWM || {}; + + ///////////////////////////////////////////////////////////////////////////// + // API + ///////////////////////////////////////////////////////////////////////////// + + OSjs.Applications.CoreWM.CurrentTheme = { + init: function() { + }, + + destroy: function() { + }, + + event: function(ev) { + } + }; + + ///////////////////////////////////////////////////////////////////////////// + // EXPORTS + ///////////////////////////////////////////////////////////////////////////// + + +})(OSjs.API, OSjs.Utils); diff --git a/build/htdocs/dist/themes/styles/windows8/wm/close.png b/build/htdocs/dist/themes/styles/windows8/wm/close.png new file mode 100644 index 0000000..b9ac0b4 Binary files /dev/null and b/build/htdocs/dist/themes/styles/windows8/wm/close.png differ diff --git a/build/htdocs/dist/themes/styles/windows8/wm/maximize.png b/build/htdocs/dist/themes/styles/windows8/wm/maximize.png new file mode 100644 index 0000000..c12d9e5 Binary files /dev/null and b/build/htdocs/dist/themes/styles/windows8/wm/maximize.png differ diff --git a/build/htdocs/dist/themes/styles/windows8/wm/minimize.png b/build/htdocs/dist/themes/styles/windows8/wm/minimize.png new file mode 100644 index 0000000..cd66992 Binary files /dev/null and b/build/htdocs/dist/themes/styles/windows8/wm/minimize.png differ diff --git a/build/htdocs/dist/themes/styles/windows8/wm/wm.png b/build/htdocs/dist/themes/styles/windows8/wm/wm.png new file mode 100644 index 0000000..39733cf Binary files /dev/null and b/build/htdocs/dist/themes/styles/windows8/wm/wm.png differ diff --git a/build/htdocs/dist/themes/wallpapers/diamond_upholstery.png b/build/htdocs/dist/themes/wallpapers/diamond_upholstery.png new file mode 100644 index 0000000..1c4701a Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/diamond_upholstery.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_blue.png b/build/htdocs/dist/themes/wallpapers/noise_blue.png new file mode 100644 index 0000000..caffba5 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_blue.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_emerald.png b/build/htdocs/dist/themes/wallpapers/noise_emerald.png new file mode 100644 index 0000000..701161e Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_emerald.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_green.png b/build/htdocs/dist/themes/wallpapers/noise_green.png new file mode 100644 index 0000000..7eef459 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_green.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_orange.png b/build/htdocs/dist/themes/wallpapers/noise_orange.png new file mode 100644 index 0000000..9e4bdae Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_orange.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_pink.png b/build/htdocs/dist/themes/wallpapers/noise_pink.png new file mode 100644 index 0000000..fc473e7 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_pink.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_purple.png b/build/htdocs/dist/themes/wallpapers/noise_purple.png new file mode 100644 index 0000000..376cc96 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_purple.png differ diff --git a/build/htdocs/dist/themes/wallpapers/noise_red.png b/build/htdocs/dist/themes/wallpapers/noise_red.png new file mode 100644 index 0000000..7c2ebf6 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/noise_red.png differ diff --git a/build/htdocs/dist/themes/wallpapers/wallpaper.png b/build/htdocs/dist/themes/wallpapers/wallpaper.png new file mode 100644 index 0000000..803ed02 Binary files /dev/null and b/build/htdocs/dist/themes/wallpapers/wallpaper.png differ diff --git a/build/htdocs/dist/vendor/.gitignore b/build/htdocs/dist/vendor/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/build/htdocs/dist/vendor/dropbox.js b/build/htdocs/dist/vendor/dropbox.js new file mode 120000 index 0000000..09e8a48 --- /dev/null +++ b/build/htdocs/dist/vendor/dropbox.js @@ -0,0 +1 @@ +../../vendor/dropbox-js/lib/dropbox.js \ No newline at end of file diff --git a/build/htdocs/dist/vendor/dropbox.min.map b/build/htdocs/dist/vendor/dropbox.min.map new file mode 120000 index 0000000..bbaff7d --- /dev/null +++ b/build/htdocs/dist/vendor/dropbox.min.map @@ -0,0 +1 @@ +../../vendor/dropbox-js/lib/dropbox.min.map \ No newline at end of file diff --git a/build/htdocs/dist/vendor/dropboxOauthReceiver.html b/build/htdocs/dist/vendor/dropboxOauthReceiver.html new file mode 100644 index 0000000..459a09c --- /dev/null +++ b/build/htdocs/dist/vendor/dropboxOauthReceiver.html @@ -0,0 +1,13 @@ + + + + + + + +

Dropbox sign-in successful

+

Please close this window.

+ + diff --git a/build/htdocs/dist/vendor/html2canvas b/build/htdocs/dist/vendor/html2canvas new file mode 120000 index 0000000..fa1fbb7 --- /dev/null +++ b/build/htdocs/dist/vendor/html2canvas @@ -0,0 +1 @@ +../../vendor/html2canvas/dist \ No newline at end of file diff --git a/build/htdocs/dist/vendor/wlOauthReceiver.html b/build/htdocs/dist/vendor/wlOauthReceiver.html new file mode 100644 index 0000000..9510e8a --- /dev/null +++ b/build/htdocs/dist/vendor/wlOauthReceiver.html @@ -0,0 +1,10 @@ + + + + + + +

Windows Live sign-in successful

+

Please close this window.

+ + diff --git a/build/htdocs/dist/vendor/zip.js b/build/htdocs/dist/vendor/zip.js new file mode 120000 index 0000000..e3e2067 --- /dev/null +++ b/build/htdocs/dist/vendor/zip.js @@ -0,0 +1 @@ +../../vendor/zip.js \ No newline at end of file