init commit
This commit is contained in:
483
plugins/xskin/CHANGE_LOG
Normal file
483
plugins/xskin/CHANGE_LOG
Normal file
@ -0,0 +1,483 @@
|
||||
1.9.2 (2024-11-08)
|
||||
==================
|
||||
- fixed colors on inputs with errors
|
||||
- fixed settings sections titles in larry-based skins
|
||||
- fixed settings input widths in larry-based skins
|
||||
- fixed settings error popups in larry-based skins
|
||||
- added Arabic translation
|
||||
- added Bulgarian translation
|
||||
- added Chinese (Simplified) translation
|
||||
- added Chinese (Traditional) translation
|
||||
- added Estonian translation
|
||||
- added Greek translation
|
||||
- added Hungarian translation
|
||||
- added Japanese translation
|
||||
- added Korean translation
|
||||
- added Latvian translation
|
||||
- added Portuguese (Portugal) translation
|
||||
- added Slovak translation
|
||||
- added Swedish translation
|
||||
- updated license agreement
|
||||
|
||||
1.9.1 (2024-07-15)
|
||||
==================
|
||||
- updated larry-based skins UI
|
||||
|
||||
1.9 (2024-01-31)
|
||||
================
|
||||
- fixed button colors
|
||||
- updated the icon system
|
||||
- added new element styles
|
||||
|
||||
1.8.9 (2023-09-15)
|
||||
==================
|
||||
- fixed the light menu background highlight problem
|
||||
|
||||
1.8.8 (2023-05-25)
|
||||
==================
|
||||
- improved the switchbox UI on larry-based skins
|
||||
- fixed the unreachable render page hook
|
||||
- fixed pager UI on mobile larry-based skins
|
||||
|
||||
1.8.7 (2023-05-09)
|
||||
==================
|
||||
- added Norwegian translation
|
||||
|
||||
1.8.6 (2023-03-14)
|
||||
==================
|
||||
- added a config option to disable remotely loaded fonts
|
||||
|
||||
1.8.5 (2023-02-27)
|
||||
==================
|
||||
- fixed the elastic-based skin mobile layout
|
||||
- removed backward compatibility with RC <= 1.4
|
||||
|
||||
1.8.4 (2023-02-15)
|
||||
==================
|
||||
- made the plugin fully compatible with PHP 8.2
|
||||
- removed code providing RC 1.3 compatibility
|
||||
- fixed the quick language change functionality
|
||||
- fixed the quick skin change functionality
|
||||
- added Czech translation
|
||||
- added Danish translation
|
||||
- added Dutch translation
|
||||
- added Finnish translation
|
||||
- added Indonesian translation
|
||||
- added Lithuanian translation
|
||||
- added Portuguese translation
|
||||
- added Romanian translation
|
||||
- added Russian translation
|
||||
- added Slovenian translation
|
||||
- added Spanish translation
|
||||
- added Turkish translation
|
||||
- added Ukrainian translation
|
||||
|
||||
1.8.3 (2022-12-16)
|
||||
==================
|
||||
- fixed some small dark mode login UI issues on elastic-based skins
|
||||
|
||||
1.8.2 (2022-06-20)
|
||||
==================
|
||||
- fixed icon positioning in the larry-based skins
|
||||
|
||||
1.8.1 (2022-05-30)
|
||||
==================
|
||||
- UI improvements and fixes
|
||||
|
||||
1.8 (2022-04-06)
|
||||
==================
|
||||
- fixed some potential html encoding problems
|
||||
- fixed some issues with litecube icons
|
||||
|
||||
1.7.9 (2022-02-15)
|
||||
==================
|
||||
- fixed litecube skin icons on mobile
|
||||
|
||||
1.7.8 (2022-01-31)
|
||||
==================
|
||||
- fixed a skin changing error under PHP 8
|
||||
- fixed PHP warnings in the Roundcube 1.5.2 about dialog
|
||||
|
||||
1.7.7 (2022-01-11)
|
||||
==================
|
||||
- fixed datepicker UI
|
||||
- fixed the disablePluginsOnMobile warning
|
||||
- added the Italian translation
|
||||
- fixed some small css issues
|
||||
- upgraded the PHP code syntax
|
||||
- changed the minimum required Roundcube version to 1.4
|
||||
|
||||
1.7.6 (2021-09-08)
|
||||
==================
|
||||
- fixed button borders in the litecube skin
|
||||
- fixed message footer UI in the larry-based skins
|
||||
- fixed group button borders in the larry-based skins
|
||||
|
||||
1.7.5 (2021-09-01)
|
||||
==================
|
||||
- added Skin Look & Feel options to larry-based skins
|
||||
- removed skin-specific overwrite_css config options in favor of global overwrite_css
|
||||
- changed the font sources
|
||||
- removed Cairo font because of line spacing issues
|
||||
- added Noto Sans font
|
||||
- added Ubuntu font
|
||||
- fixed overflowing text in lists
|
||||
- fixed login UI issues
|
||||
- fixed html editor input border shadows
|
||||
- fixed table width on login page
|
||||
- fixed submenu arrow hover colors
|
||||
- made the RC 1.4 & 1.5 compose html editors compatible with elastic-based skins colors
|
||||
|
||||
1.7.4 (2021-08-05)
|
||||
==================
|
||||
- enabled interface skin list code modifications
|
||||
|
||||
1.7.3 (2021-07-21)
|
||||
==================
|
||||
- fixed popup menu UI problems
|
||||
- fixed input shadow UI problems
|
||||
- updated the Polish translation
|
||||
- updated the French translation
|
||||
|
||||
1.7.2 (2021-06-02)
|
||||
==================
|
||||
- extended the functionality of hide_about_link to apply to all skins
|
||||
- fixed config docs
|
||||
|
||||
1.7.1 (2021-05-25)
|
||||
==================
|
||||
- made the plugin compatible with RC 1.5
|
||||
- made the plugin compatible with the dark mode
|
||||
|
||||
1.7 (2021-02-08)
|
||||
================
|
||||
- fixed issues with content replacement on the login page
|
||||
|
||||
1.6.9 (2021-01-21)
|
||||
==================
|
||||
- updated the x2fa plugin UI
|
||||
|
||||
1.6.8 (2020-10-28)
|
||||
==================
|
||||
- fixed skin logo warning
|
||||
- fixed the loader positioning on the login page of the larry-based skins
|
||||
|
||||
1.6.7 (2020-10-19)
|
||||
==================
|
||||
- fixed problems with displaying default skin on the login/logout pages
|
||||
- fixed problems with displaying branding images on the login page
|
||||
|
||||
1.6.6 (2020-10-06)
|
||||
==================
|
||||
- added the indent_switch plugin select element to larry-based mobile skins
|
||||
|
||||
1.6.5 (2020-09-25)
|
||||
==================
|
||||
- added German translation
|
||||
|
||||
1.6.4 (2020-08-18)
|
||||
==================
|
||||
- fixed favicon setting and display on larry-based skins
|
||||
- fixed logout skin problems when user config skin is larry-based and default config skin is elastic-based
|
||||
|
||||
1.6.3 (2020-05-29)
|
||||
==================
|
||||
- fixed the loading of the Google fonts on WHM 88
|
||||
|
||||
1.6.2 (2020-05-25)
|
||||
==================
|
||||
- fixed the issues with the dont_overwrite config setting on Roundcube 1.3 disabling the skins
|
||||
|
||||
1.6.1 (2020-05-04)
|
||||
==================
|
||||
- added support for larry-style logo config options to elastic-based skins
|
||||
|
||||
1.6 (2020-04-29)
|
||||
================
|
||||
- updated popup styles
|
||||
|
||||
1.5.9 (2020-03-12)
|
||||
==================
|
||||
- updated UI styles
|
||||
|
||||
1.5.8 (2020-02-14)
|
||||
==================
|
||||
- modified the overwrite_css config option to work on Elastic-based skins and on Elastic itself
|
||||
|
||||
1.5.7 (2020-02-04)
|
||||
==================
|
||||
- added a system to prevent using elastic based skins on RC 1.3.x or below
|
||||
- changed the default value of the hide_about_link config option
|
||||
|
||||
1.5.6 (2020-01-20)
|
||||
==================
|
||||
- fixed quick skin change when using larry-based skins
|
||||
|
||||
1.5.5 (2020-01-08)
|
||||
==================
|
||||
- upgraded to work with cPanel 84
|
||||
|
||||
1.5.4 (2019-12-19)
|
||||
==================
|
||||
- made the plugin compatible with ident_switch
|
||||
|
||||
1.5.3 (2019-12-17)
|
||||
==================
|
||||
- fixed hiding the about link via config
|
||||
|
||||
1.5.2 (2019-11-25)
|
||||
==================
|
||||
- updated the config file and changed some default values
|
||||
|
||||
1.5.1 (2019-11-07)
|
||||
==================
|
||||
- fixed quick skin change functionality
|
||||
- added elastic to the quick skin change list
|
||||
- upgraded to be compatible with Roundcube 1.4 RC 2
|
||||
|
||||
1.5 (2019-10-10)
|
||||
================
|
||||
- removed the skin html replacement error when displaying Roundcube error page
|
||||
|
||||
1.4.9 (2019-09-24)
|
||||
==================
|
||||
- fixed box page navigation icons
|
||||
|
||||
1.4.8 (2019-09-02)
|
||||
==================
|
||||
- fixed interface options label on mobile devices
|
||||
- added a config option to disable mobile interface on larry-based skins
|
||||
- updated the html replacement error message to make it more legible
|
||||
|
||||
1.4.7 (2019-07-11)
|
||||
==================
|
||||
- translated to French
|
||||
|
||||
1.4.6 (2019-06-05)
|
||||
==================
|
||||
- fixed mobile dialog formatting
|
||||
- fixed selectable list check mark positioning
|
||||
|
||||
1.4.5 (2019-05-22)
|
||||
==================
|
||||
- added support for Roundcube 1.4 RC1 and elastic-based skins
|
||||
- removed separate skin selection for desktop, tablet, and phone
|
||||
- added an option to change larry-based skin icons in skin's settings.php
|
||||
|
||||
1.4.4 (2019-03-04)
|
||||
==================
|
||||
- updated loader image to svg
|
||||
|
||||
1.4.3 (2019-02-28)
|
||||
==================
|
||||
- fixed message highlighting colors in thread view
|
||||
|
||||
1.4.2 (2018-07-03)
|
||||
==================
|
||||
- added styles for xemail_schedule on mobiles
|
||||
|
||||
1.4.1 (2018-06-04)
|
||||
==================
|
||||
- added support for the thunderbird labels plugin
|
||||
|
||||
1.4 (2018-03-19)
|
||||
================
|
||||
- fixed the compose field expanding height problems
|
||||
- restored dialog shadows to improve the UI
|
||||
|
||||
1.3.9 (2018-02-27)
|
||||
==================
|
||||
- fixed login page blurred background icon display
|
||||
- made the skins compatible with the twofactor_gauthentictor plugin
|
||||
|
||||
1.3.8 (2018-01-22)
|
||||
==================
|
||||
- added an option to disable/enable mobile skin on a specific device
|
||||
- removed the outlook hero image config options
|
||||
|
||||
1.3.7 (2018-01-03)
|
||||
==================
|
||||
- fixed image paths
|
||||
|
||||
1.3.6 (2017-12-06)
|
||||
==================
|
||||
- made the plugin compatible with xbackground login images
|
||||
- fixed the UI of some settings pages on mobile devices
|
||||
|
||||
1.3.5 (2017-11-01)
|
||||
==================
|
||||
- upgrading skin loading and handling
|
||||
- enhanced the functionality of dontoverwrite config setting to force the default skins on all the user accounts
|
||||
- added config setting for including a global css overwrite file (overwrite_css)
|
||||
|
||||
1.3.4 (2017-10-20)
|
||||
==================
|
||||
- fixed the problem with overwriting mobile css
|
||||
- made it possible to enforce a skin color in config
|
||||
|
||||
1.3.3 (2017-09-04)
|
||||
==================
|
||||
- fixed javascript initialization problems on third-party, non-Roundcube Plus skins
|
||||
- added a class that disables converting checkboxes to switchboxes
|
||||
|
||||
1.3.2 (2017-07-05)
|
||||
==================
|
||||
- added login body class to logout pages to fix styling
|
||||
- fixed mobile message view attachment download menu
|
||||
- fixed mobile compose attachment option buttons
|
||||
|
||||
1.3.1 (2017-06-28)
|
||||
==================
|
||||
- implemented setting layout to list on mobile devices so widescreen layouts can be displayed properly on RC 1.3
|
||||
|
||||
1.3 (2017-06-07)
|
||||
==================
|
||||
- fixed skin record focus color on RC 1.3
|
||||
- added config options to specify the skin-specific login hero images
|
||||
- added config options to specify the skin-specific login product name text
|
||||
- added config options for overwriting skin css files
|
||||
|
||||
1.2.9 (2017-05-10)
|
||||
==================
|
||||
- fixed disabled listbox button colors
|
||||
- fixed mobile UI under Lumia
|
||||
|
||||
1.2.8 (2017-04-11)
|
||||
==================
|
||||
- tweaked the icloud login screen design
|
||||
- fixed the settings / folders gear button popup on mobile devices
|
||||
|
||||
1.2.7 (2017-03-08)
|
||||
==================
|
||||
- fixed problems with content scrolling on some mobile devices
|
||||
|
||||
1.2.6 (2017-03-07)
|
||||
==================
|
||||
- added Polish translation
|
||||
|
||||
1.2.5 (2017-03-01)
|
||||
==================
|
||||
- adjusted the main screen position under cPanel
|
||||
- removed the white top line on minimized screen in cPanel
|
||||
|
||||
1.2.4 (2017-02-15)
|
||||
==================
|
||||
- fixed problems with adding mailbox item classes
|
||||
- fixed filter plugin settings display
|
||||
- added mobile quota display
|
||||
|
||||
1.2.3 (2017-02-08)
|
||||
==================
|
||||
- fixed address book navigation issues on IE
|
||||
|
||||
1.2.2 (2017-02-07)
|
||||
==================
|
||||
- added new icons to icon font
|
||||
- added classes to mailbox items
|
||||
- fixed cut font in toolbar
|
||||
- moved rc+ font to xframework
|
||||
- updated watermark image
|
||||
|
||||
1.2.1 (2017-01-11)
|
||||
==================
|
||||
- added unit tests
|
||||
|
||||
1.2 (2017-01-04)
|
||||
==================
|
||||
- added new protected properties to make the plugin compatible with upgraded xframework
|
||||
|
||||
1.1.9 (2016-12-19)
|
||||
==================
|
||||
- fixed quick skin switching in larry on IE
|
||||
- fixed messagesieve settings page layout
|
||||
|
||||
1.1.8 (2016-12-13)
|
||||
==================
|
||||
- fixed disappearing skin/language/color change menu in Firefox
|
||||
|
||||
1.1.7 (2016-12-09)
|
||||
==================
|
||||
- made plugin compatible with xactivate
|
||||
- updated license agreement
|
||||
|
||||
1.1.6 (2016-11-30)
|
||||
==================
|
||||
- fixed compose textarea height
|
||||
- corrected a typo in the localization file
|
||||
- made plugin compatible with the updated framework
|
||||
|
||||
1.1.5 (2016-11-16)
|
||||
==================
|
||||
- removed references to legacy functions
|
||||
|
||||
1.1.4 (2016-11-07)
|
||||
==================
|
||||
- added a config option to disable the menu skin selection
|
||||
- added a config option to disable the menu language selection
|
||||
- added a config option to change the message preview branding watermark image
|
||||
- added a config option to change the default skin colors
|
||||
- changed the delete icon to trash and junk icon to recycle
|
||||
- changed the vendor icon on the login page
|
||||
|
||||
1.1.3 (2016-10-17)
|
||||
==================
|
||||
- added print logo config option
|
||||
- set the print background to white in all skins
|
||||
|
||||
1.1.2 (2016-10-11)
|
||||
==================
|
||||
- made plugin compatible with the new way of including assets
|
||||
- made plugin compatible with xbackground
|
||||
|
||||
1.1.1 (2016-10-04)
|
||||
==================
|
||||
- UI tweaks
|
||||
|
||||
1.1 (2016-09-27)
|
||||
================
|
||||
- added quick skin selection box to the interface options popup
|
||||
- added support for interface options in Larry
|
||||
|
||||
1.0.9 (2016-09-20)
|
||||
==================
|
||||
- improved the handling of skin logos
|
||||
|
||||
1.0.8 (2016-09-06)
|
||||
==================
|
||||
- added a new mobile swipe gesture to mark messages as read/unread
|
||||
- minor changes to make the plugin compatible with upgraded xframework
|
||||
|
||||
1.0.7 (2016-08-16)
|
||||
==================
|
||||
- fixed the color problems with mce dialog buttons on RC < 1.2.1
|
||||
|
||||
1.0.6 (2016-08-15)
|
||||
==================
|
||||
- fixed the color problems with mce dialog buttons
|
||||
|
||||
1.0.5 (2016-08-08)
|
||||
==================
|
||||
- upgraded to be compatible with RC 1.2.1
|
||||
|
||||
1.0.4 (2016-07-04)
|
||||
==================
|
||||
- fixed disabled text color
|
||||
- fixed contextmenu popup icons display
|
||||
|
||||
1.0.3 (2016-06-14)
|
||||
==================
|
||||
- hiding desktop filter and search controls if they overlay toolbar buttons
|
||||
|
||||
1.0.2 (2016-06-06)
|
||||
==================
|
||||
- added folder actions to mobile options menu
|
||||
- added selection actions to mobile options menu
|
||||
- fixed the message pager mobile layout
|
||||
|
||||
1.0.1 (2016-06-02)
|
||||
==================
|
||||
- added message list display and sorting options to mobile skins
|
||||
|
||||
1.0 (2016-06-01)
|
||||
================
|
||||
- initial release
|
98
plugins/xskin/LICENSE
Normal file
98
plugins/xskin/LICENSE
Normal file
@ -0,0 +1,98 @@
|
||||
LICENSE AGREEMENT
|
||||
|
||||
This License Agreement ("Agreement") is a legal agreement between you and Tecorama LLC ("Tecorama"). By installing the
|
||||
Software (as defined below), you agree to all of the terms of this Agreement. If you do not agree with all of the terms
|
||||
of this Agreement, you must not install, access, or otherwise use the Software.
|
||||
|
||||
1. Software Definition
|
||||
|
||||
The Software covered by this Agreement constitutes the Roundcube Plus Skin plugin (xskin) created and released
|
||||
by Tecorama, including any source code and any associated media, printed materials and electronic documentation provided
|
||||
by Tecorama. However, certain components of the Software, including but not limited to third-party integrations, and
|
||||
media, may be subject to separate licenses provided by the respective third-party licensors. You are responsible for
|
||||
ensuring your compliance with the applicable third-party license terms.
|
||||
|
||||
2. Terms of Use
|
||||
|
||||
The Software is distributed under a commercial license. In order to use the Software, you must first purchase the
|
||||
license from Tecorama. Purchasing the license grants you a non-exclusive, non-transferable, limited license to install
|
||||
and use the Software in accordance with this Agreement and the specifications of the license.
|
||||
|
||||
2.a. License Duration and Renewal
|
||||
|
||||
The license granted under this Agreement is valid for a period of one (1) year from the date of purchase. To maintain an
|
||||
active license and continue using the Software, you must renew your license prior or on the expiration of the current
|
||||
term. Tecorama reserves the right to adjust the renewal fees at its discretion. Failure to renew the license will result
|
||||
in the termination of the license and right to use the Software.
|
||||
|
||||
3. Intellectual Property Rights
|
||||
|
||||
The Software is licensed, not sold. Tecorama retains all rights, title, and interest, including all intellectual
|
||||
property rights, in and to the Software. You acknowledge that no title or ownership to the Software is transferred to
|
||||
you under this Agreement.
|
||||
|
||||
4. Software Modification
|
||||
|
||||
You are allowed to modify or adapt the Software for use in accordance with the specifications of the license you
|
||||
purchased, except to the extent expressly permitted by applicable law. You may not distribute the modified versions of
|
||||
the Software. If the Software is modified, Tecorama is not obligated to, provide updates or support for the Software.
|
||||
Tecorama will not provide any technical support for altered versions of the Software.
|
||||
|
||||
5. Support and Updates
|
||||
|
||||
Tecorama may, but is not obligated to, provide updates or support for the Software. If support is provided, it will be
|
||||
subject to Tecorama’s support policies in effect at the time. This Agreement does not entitle you to any future updates
|
||||
or upgrades to the Software unless such updates are expressly provided with the license purchased.
|
||||
|
||||
6. Resale
|
||||
|
||||
You are not allowed to resell, lease, sub-license, or otherwise transfer rights to the Software without obtaining
|
||||
prior written permission from Tecorama.
|
||||
|
||||
7. Warranty Disclaimer
|
||||
|
||||
The Software is provided "AS IS" without any warranty of any kind, express or implied, including but not limited to the
|
||||
implied warranties of merchantability, fitness for a particular purpose, and non-infringement. Tecorama does not warrant
|
||||
that the Software will be uninterrupted or error-free, that defects will be corrected, or that the Software is free of
|
||||
viruses or other harmful components.
|
||||
|
||||
You agree to use the Software in compliance with all applicable data privacy and security laws and regulations. Tecorama
|
||||
makes no representation regarding the Software's compliance with any specific data protection or privacy laws, and you
|
||||
are solely responsible for ensuring that your use of the Software complies with such laws.
|
||||
|
||||
8. Compliance with Laws
|
||||
|
||||
You agree to comply with all applicable local, state, national, and international laws and regulations in connection
|
||||
with your use of the Software.
|
||||
|
||||
9. Anonymous Statistics
|
||||
|
||||
The Software gathers general settings for the purpose of statistical analysis and improvement. This data includes
|
||||
aggregated, non-personal information such as the selected skin, language, country, version of Roundcube, PHP,
|
||||
xFramework, server operating system name, active plugins. Additionally, the software gathers hashed identifiers,
|
||||
including the Roundcube user ID and username. No personal or identifiable information is stored. This process is
|
||||
seamless, does not affect performance, and remains fully anonymous. For more information, please refer to our Privacy
|
||||
Policy.
|
||||
|
||||
10. Indemnification
|
||||
|
||||
You agree to indemnify, defend, and hold harmless Tecorama and its officers, directors, employees, and agents from and
|
||||
against any claims, damages, losses, liabilities, costs, and expenses (including reasonable attorneys' fees) arising out
|
||||
of or related to your use of the Software, any violation of this Agreement, or any violation of applicable laws or
|
||||
regulations.
|
||||
|
||||
11. Termination
|
||||
|
||||
You may terminate the Agreement at any time by uninstalling and discontinuing the usage of the Software.
|
||||
|
||||
Tecorama may terminate the Agreement at any time if you are in breach of any of the terms and conditions of this
|
||||
Agreement. Upon termination, you must immediately uninstall and discontinue all use of the Software. The Agreement will
|
||||
also automatically terminate at the end of the one (1) year license period unless you renew your license for an
|
||||
additional term.
|
||||
|
||||
12. Governing Law
|
||||
|
||||
This Agreement shall be governed, construed, and enforced in accordance with the laws of the State of Florida, U.S.A.,
|
||||
without regard to its conflict of law principles. You agree that any legal action or proceeding arising under this
|
||||
Agreement shall be brought exclusively in the courts located in Florida, and you consent to the jurisdiction of such
|
||||
courts.
|
48
plugins/xskin/README
Normal file
48
plugins/xskin/README
Normal file
@ -0,0 +1,48 @@
|
||||
ROUNDCUBE PLUS SKIN PLUGIN
|
||||
==========================
|
||||
|
||||
This plugin is required to use the Roundcube Plus skins.
|
||||
|
||||
REQUIREMENTS
|
||||
------------
|
||||
- Roundcube: 1.5, 1.6
|
||||
- PHP: 7.4 or higher
|
||||
|
||||
INSTALLATION
|
||||
------------
|
||||
1. Copy the directories xskin and xframework included in this package to the 'plugins' directory of your Roundcube
|
||||
installation.
|
||||
|
||||
2. Edit the file <roundcube>/config/config.inc.php, and add 'xskin' to the plugins array, like this:
|
||||
|
||||
$config['plugins'] = array('xskin');
|
||||
|
||||
If you already have other plugins in the plugins array, add 'xskin' at the begining, like this:
|
||||
|
||||
$config['plugins'] = array('xskin', 'other_plugin', 'one_more_plugin');
|
||||
|
||||
3. Add the license key to <roundcube>/config.config.inc.php, like this:
|
||||
|
||||
$config['license_key'] = 'your-license-key-here';
|
||||
|
||||
4. Rename the file <roundcube>/plugins/xskin/config.inc.php.dist to config.inc.php, edit the file and configure the
|
||||
plugin according to your needs following the instructions included before the config options.
|
||||
|
||||
For more information on installing Roundcube Plus plugins see:
|
||||
https://roundcubeplus.com/helpdesk/knowledgebase.php?article=29
|
||||
|
||||
COMPATIBILITY
|
||||
-------------
|
||||
This plugin has been created for the standard version of Roundcube as provided on the Roundcube website:
|
||||
https://roundcube.net. It might not work properly with customized versions of Roundcube including the version provided
|
||||
as part of the Kolab system. Please note that we cannot provide any technical support for the plugin deployed on a
|
||||
non-standard version of Roundcube.
|
||||
|
||||
LICENSE
|
||||
-------
|
||||
This plugin is distributed under a commercial license. In order to use the plugin, you must purchase the license
|
||||
from Tecorama LLC. See the LICENSE file for details.
|
||||
|
||||
COPYRIGHT
|
||||
---------
|
||||
Copyright (c) 2024, Tecorama LLC
|
1
plugins/xskin/VERSION
Normal file
1
plugins/xskin/VERSION
Normal file
@ -0,0 +1 @@
|
||||
1.9.2 (2024-11-08)
|
BIN
plugins/xskin/assets/images/MultiBox_logo-512px_mail-b.png
Normal file
BIN
plugins/xskin/assets/images/MultiBox_logo-512px_mail-b.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 185 KiB |
BIN
plugins/xskin/assets/images/loader.gif
Normal file
BIN
plugins/xskin/assets/images/loader.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
57
plugins/xskin/assets/images/loader.svg
Normal file
57
plugins/xskin/assets/images/loader.svg
Normal file
@ -0,0 +1,57 @@
|
||||
<svg class="lds-spin" width="16px" height="16px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" style="background: none;"><g transform="translate(86,50)">
|
||||
<g transform="rotate(0)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="1" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.875s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.875s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(75.45584412271572,75.45584412271572)">
|
||||
<g transform="rotate(45)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.875" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.75s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.75s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(50,86)">
|
||||
<g transform="rotate(90)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.75" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.625s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.625s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(24.54415587728429,75.45584412271572)">
|
||||
<g transform="rotate(135)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.625" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.5s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.5s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(14,50.00000000000001)">
|
||||
<g transform="rotate(180)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.5" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.375s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.375s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(24.544155877284282,24.54415587728429)">
|
||||
<g transform="rotate(225)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.375" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.25s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.25s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(49.99999999999999,14)">
|
||||
<g transform="rotate(270)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.25" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="-0.125s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="-0.125s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g><g transform="translate(75.4558441227157,24.544155877284282)">
|
||||
<g transform="rotate(315)">
|
||||
<circle cx="0" cy="0" r="10" fill="#333333" fill-opacity="0.125" transform="scale(1 1)">
|
||||
<animateTransform attributeName="transform" type="scale" begin="0s" values="1 1;1 1" keyTimes="0;1" dur="1s" repeatCount="indefinite"></animateTransform>
|
||||
<animate attributeName="fill-opacity" keyTimes="0;1" dur="1s" repeatCount="indefinite" values="1;0" begin="0s"></animate>
|
||||
</circle>
|
||||
</g>
|
||||
</g></svg>
|
After Width: | Height: | Size: 3.9 KiB |
BIN
plugins/xskin/assets/images/quota.png
Normal file
BIN
plugins/xskin/assets/images/quota.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.8 KiB |
BIN
plugins/xskin/assets/images/watermark.png
Normal file
BIN
plugins/xskin/assets/images/watermark.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
7
plugins/xskin/assets/scripts/hammer.min.js
vendored
Normal file
7
plugins/xskin/assets/scripts/hammer.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
33
plugins/xskin/assets/scripts/jquery.hammer.js
Normal file
33
plugins/xskin/assets/scripts/jquery.hammer.js
Normal file
@ -0,0 +1,33 @@
|
||||
(function(factory) {
|
||||
if (typeof define === 'function' && define.amd) {
|
||||
define(['jquery', 'hammerjs'], factory);
|
||||
} else if (typeof exports === 'object') {
|
||||
factory(require('jquery'), require('hammerjs'));
|
||||
} else {
|
||||
factory(jQuery, Hammer);
|
||||
}
|
||||
}(function($, Hammer) {
|
||||
function hammerify(el, options) {
|
||||
var $el = $(el);
|
||||
if(!$el.data("hammer")) {
|
||||
$el.data("hammer", new Hammer($el[0], options));
|
||||
}
|
||||
}
|
||||
|
||||
$.fn.hammer = function(options) {
|
||||
return this.each(function() {
|
||||
hammerify(this, options);
|
||||
});
|
||||
};
|
||||
|
||||
// extend the emit method to also trigger jQuery events
|
||||
Hammer.Manager.prototype.emit = (function(originalEmit) {
|
||||
return function(type, data) {
|
||||
originalEmit.call(this, type, data);
|
||||
$(this.element).trigger({
|
||||
type: type,
|
||||
gesture: data
|
||||
});
|
||||
};
|
||||
})(Hammer.Manager.prototype.emit);
|
||||
}));
|
1
plugins/xskin/assets/scripts/larry_desktop.min.js
vendored
Normal file
1
plugins/xskin/assets/scripts/larry_desktop.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";$(document).ready(function(){xdesktop.afterReady()});$(window).resize(function(){xdesktop.windowResize()});var xdesktop=new function(){var _this=this;this.afterReady=function(){setTimeout(function(){xdesktop.windowResize()},0);if($(".compact-message-list #listoptions fieldset").length){$("#listoptions fieldset:first").remove()}if($("body.skin-icloud.login-page").length&&!$("body.xbackground-login-image").length){var iconDiv=$("<div/>").addClass("icl-icons");var icount=0;for(var i=1;i<=13;i++){iconDiv.append($("<img/>").addClass("icl-icon-"+i).attr("src","skins/icloud/assets/images/icon-"+i+".png").attr("alt","").on("load",function(){icount++;if(icount>=13){setTimeout(function(){iconDiv.fadeIn(800)},500)}}))}$("body").append(iconDiv)}_this.enableIdentSwitch()};this.windowResize=function(){var toolbar=$(".toolbar");if(toolbar.length){var width=toolbar.width()+5;var element=$("#searchfilter");if(element.length){element.css("visibility",element.offset().left<width?"hidden":"visible")}element=$("#quicksearchbar");if(element.length){element.css("visibility",element.offset().left<width?"hidden":"visible")}}};this.enableIdentSwitch=function(){if(!rcmail.env["rcp_skin"]){return}var select=$("#plugin-ident_switch-account");if(!select.length||typeof plugin_switchIdent_addCbLarry!=="function"){return}if(plugin_switchIdent_addCbLarry(select)){select.show()}}};
|
1
plugins/xskin/assets/scripts/larry_mobile.min.js
vendored
Normal file
1
plugins/xskin/assets/scripts/larry_mobile.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
plugins/xskin/assets/scripts/xskin.min.js
vendored
Normal file
1
plugins/xskin/assets/scripts/xskin.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
"use strict";$(document).ready(function(){xskin.afterReady()});var xskin=new function(){var _this=this;this.afterReady=function(){_this.elastic=$("body.xelastic").length;if(!_this.elastic){$("#xshortcut-skins select").on("mouseup",function(event){event.stopPropagation()})}if(!rcmail.env.rcp_skin){return}_this.addMailboxClasses();_this.fixIdentSwitch();if($("body.xmaterial-design").length){xskin.enableMaterialDesign()}if(!_this.elastic){var iconButton=$("a.iconbutton");if(iconButton.length){iconButton.html("")}if($("body.skin-icloud #login-form").length){var loginPassword=$("#rcmloginpwd");loginPassword.after($("<button/>").attr("id","custom-login-submit").attr("type","submit"));$("#rcmloginuser").attr("placeholder",$("label[for=rcmloginuser]").text());loginPassword.attr("placeholder",$("label[for=rcmloginpwd]").text())}if(rcmail.env.xskin=="droid"){xskin.enableMaterialDesign()}else{xskin.enableSwitchboxes()}if($("#printmessageframe").length){$("body").addClass("print-message")}}if($("body.login-page").length&&!$("#logo").length){var title=$("<div>").attr("id","login-title").text(rcmail.gettext("login"));if(_this.elastic){title.insertBefore("#login-form")}else{title.prependTo("#login-form .box-inner")}}};this.applySetting=function(element,key,container,value){element=$(element);if(value!==undefined){element.val(value)}else{if(element.is(":checkbox")){value=element.is(":checked")?"yes":"no"}else{value=element.val()}}$(container).alterClass(key+"-*",key+"-"+value);$(container,window.parent.document).alterClass(key+"-*",key+"-"+value);$(".xsave-hint").fadeIn()};this.updateIFrameClasses=function(){$.each($("html").attr("class").split(/\s+/),function(index,item){if(item.indexOf("x")==0){$("html").removeClass(item)}});$.each($("body").attr("class").split(/\s+/),function(index,item){if(item.indexOf("x")==0){$("body").removeClass(item)}});$.each($("html",window.parent.document).attr("class").split(/\s+/),function(index,item){if(item.indexOf("x")==0){$("html").addClass(item)}});$.each($("body",window.parent.document).attr("class").split(/\s+/),function(index,item){if(item.indexOf("x")==0){$("body").addClass(item)}})};this.quickSkinChange=function(){var skin=$("#xshortcut-skins select").val();if(skin){location.replace("//"+location.host+location.pathname+xframework.replaceUrlParam("skin",skin))}};this.quickLanguageChange=function(){var language=$("#quick-language-change select").val();language&&(location.href=xframework.replaceUrlParam("language",language))};this.addMailboxClasses=function(){var classes=["sent","drafts","trash","archive","junk","spam"];$("#mailboxlist li.mailbox a").each(function(){var rel=$(this).attr("rel");if(rel!==undefined){rel=rel.toLowerCase();for(var i=0;i<classes.length;i++){if(rel.indexOf(classes[i])!=-1){$(this).parent("li.mailbox").addClass(classes[i])}}}})};this.disableMobileSkin=function(){var expires=new Date;expires.setFullYear(expires.getFullYear()+10);rcmail.set_cookie("rcs_disable_mobile_skin",1,expires);location.reload()};this.enableMobileSkin=function(){var expires=new Date;expires.setFullYear(expires.getFullYear()-10);rcmail.set_cookie("rcs_disable_mobile_skin","",expires);location.reload()};this.enableSwitchboxes=function(){var index=0;$("input[type='checkbox']").not(".no-switchbox").each(function(){var checkbox=$(this);var position=checkbox.css("position");var id=checkbox.attr("id");if(!id){id="switchbox-"+index;checkbox.attr("id",id);index++}var switchbox=$("<label/>").addClass("switchbox").attr("for",id).css("margin",checkbox.css("margin"));if(position=="absolute"||position=="fixed"){switchbox.css({position:position,left:checkbox.css("left"),right:checkbox.css("right"),top:checkbox.css("top"),bottom:checkbox.css("bottom"),"z-index":checkbox.css("z-index")})}switchbox.on("click",function(e){e.stopPropagation()});checkbox.addClass("switchbox-input").after(switchbox)})};this.enableMaterialDesign=function(){$(".listing td.name, .listing td.section, .listing li.listitem, #directorylist li.addressbook, "+".listing li.mailbox a, .toolbar a.button, .xmobile #taskbar > a").addClass("wave-container").on("click",function(event){var container=$(this);var size=Math.ceil(Math.max(container.outerWidth(),container.outerHeight())*2/100);var wave=$("<span/>").addClass("wave").css({height:size,width:size,left:event.offsetX+"px",top:event.offsetY+"px"});container.append(wave);setTimeout(function(){wave.remove()},600)})};this.fixIdentSwitch=function(){if(!rcmail.env["rcp_skin"]){return}var select=$("#plugin-ident_switch-account");if(!select.length||typeof plugin_switchIdent_addCbElastic!=="function"){return}if(plugin_switchIdent_addCbElastic(select)){select.show()}}};
|
223
plugins/xskin/assets/styles/_elastic_skins_commons.scss
Normal file
223
plugins/xskin/assets/styles/_elastic_skins_commons.scss
Normal file
@ -0,0 +1,223 @@
|
||||
@import "../../../xframework/assets/styles/_colors";
|
||||
|
||||
@mixin basic-styles() {
|
||||
//*:not(.flatpickr-day),
|
||||
// *:not(.fc-timegrid-now-indicator-arrow),
|
||||
// *:not(.fc-timegrid-now-indicator-line) {
|
||||
:not(.flatpickr-calendar *, .error) {
|
||||
@include border-color;
|
||||
}
|
||||
|
||||
body #layout > #layout-menu .special-buttons {
|
||||
&, a {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
.popupmenu .listing li.selected,
|
||||
.popupmenu .listing li>a:not(.disabled):hover,
|
||||
.popover .menu li a:not(.disabled):hover,
|
||||
{
|
||||
@include background-highlight-color(5, true);
|
||||
@include text-color(true);
|
||||
}
|
||||
|
||||
html.dark-mode {
|
||||
.messagelist tr:not(.flagged):not(.deleted).selected td.subject {
|
||||
a,
|
||||
span.msgicon.status {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#layout #xsidebar {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin secondary-button-styles() {
|
||||
div.tox .tox-button.tox-button--secondary, // html editor
|
||||
.mce-window .mce-foot .mce-btn,
|
||||
.btn.btn-secondary:not(.btn.btn-danger):not(.xanchor),
|
||||
.btn.btn-link {
|
||||
@include background-highlight-color(8);
|
||||
border: 1px solid;
|
||||
@include text-color(true);
|
||||
@include border-strong-color(true);
|
||||
|
||||
&:hover {
|
||||
@include background-highlight-color(12, true);
|
||||
}
|
||||
|
||||
&.ui-dialog-titlebar-close {
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
.mce-window .mce-foot .mce-btn button {
|
||||
@include text-color(true);
|
||||
}
|
||||
}
|
||||
|
||||
@mixin primary-button-colors($background, $backgroundHighlight) {
|
||||
.btn.btn-primary,
|
||||
.btn.btn-success,
|
||||
div.tox .tox-dialog__footer .tox-button, // html editor
|
||||
.mce-window .mce-foot .mce-btn.mce-primary,
|
||||
.floating-action-buttons a.button {
|
||||
background-color: $background !important;
|
||||
border: 1px solid $background !important;
|
||||
color: #fff;
|
||||
|
||||
&:hover {
|
||||
background-color: $backgroundHighlight !important;
|
||||
}
|
||||
}
|
||||
|
||||
.btn.disabled,
|
||||
.btn:disabled {
|
||||
&, &:hover {
|
||||
//border: 1px solid #777 !important;
|
||||
//background-color: #777 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.mce-window .mce-foot .mce-btn.mce-primary button {
|
||||
color: #fff !important;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin switchbox-colors($normalColor, $highlightColor) {
|
||||
.custom-switch .custom-control-input:checked ~ .custom-control-label {
|
||||
&:before {
|
||||
background-color: $normalColor !important;
|
||||
border: 1px solid $normalColor !important;
|
||||
}
|
||||
|
||||
&:hover:before {
|
||||
background-color: $highlightColor !important;
|
||||
border: 1px solid $highlightColor !important;
|
||||
}
|
||||
}
|
||||
|
||||
.mce-window .mce-checkbox i.mce-i-checkbox {
|
||||
color: #c0c0c0;
|
||||
}
|
||||
|
||||
.mce-window .mce-checkbox.mce-checked i.mce-i-checkbox {
|
||||
color: $normalColor !important;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin input-colors($borderColor) {
|
||||
.custom-file-label:focus:not(.is-invalid),
|
||||
.form-control:focus:not(.is-invalid),
|
||||
.recipient-input.focus,
|
||||
.mce-tinymce.focused,
|
||||
div.tox.focused {
|
||||
border-color: $borderColor !important;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin anchor-colors($normalColor, $darkModeColor) {
|
||||
a,
|
||||
button.xanchor,
|
||||
div.tox .tox-dialog .tox-dialog__body-nav-item--active,
|
||||
input.icon-checkbox + label:before,
|
||||
input.icon-checkbox:checked + label:before {
|
||||
color: $normalColor;
|
||||
|
||||
html.dark-mode & {
|
||||
color: $darkModeColor;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin listing-colors($background: false, $dmBackground: false, $text: false, $dmText: false) {
|
||||
#settings-menu li.selected,
|
||||
.listing tr.selected td,
|
||||
.listing li.selected > a,
|
||||
ul.treelist li.selected > div > a,
|
||||
ul.treelist li.selected > a,
|
||||
.toolbarmenu.listing li:hover a.active {
|
||||
@if $background {
|
||||
background-color: $background;
|
||||
}
|
||||
|
||||
@if $text {
|
||||
color: $text;
|
||||
} @else {
|
||||
@include text-color;
|
||||
}
|
||||
|
||||
html.dark-mode & {
|
||||
@if $dmBackground {
|
||||
background-color: $dmBackground;
|
||||
}
|
||||
|
||||
@if $dmText {
|
||||
color: $dmText;
|
||||
} @else {
|
||||
@include text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin unread-count-colors($background, $dmBackground: false, $text: false, $dmText: false) {
|
||||
.folderlist li.mailbox .unreadcount {
|
||||
@if $background {
|
||||
background-color: $background !important;
|
||||
}
|
||||
|
||||
@if $text {
|
||||
color: $text;
|
||||
} @else {
|
||||
@include text-color;
|
||||
}
|
||||
|
||||
html.dark-mode & {
|
||||
@if $dmBackground {
|
||||
background-color: $dmBackground !important;
|
||||
}
|
||||
|
||||
@if $dmText {
|
||||
color: $dmText;
|
||||
} @else {
|
||||
@include text-color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin logo-background-color($background: false, $dmBackground: false) {
|
||||
#layout-menu .popover-header {
|
||||
@if $background {
|
||||
background-color: $background !important;
|
||||
}
|
||||
|
||||
html.dark-mode & {
|
||||
@if $dmBackground {
|
||||
background-color: $dmBackground !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@mixin datepicker-colors($background: false, $dmBackground: false) {
|
||||
.ui-datepicker {
|
||||
a.ui-state-active {
|
||||
@if $background {
|
||||
background-color: $background !important;
|
||||
}
|
||||
|
||||
html.dark-mode & {
|
||||
@if $dmBackground {
|
||||
background-color: $dmBackground !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
518
plugins/xskin/assets/styles/_larry_common.scss
Normal file
518
plugins/xskin/assets/styles/_larry_common.scss
Normal file
@ -0,0 +1,518 @@
|
||||
* {
|
||||
text-shadow: none !important;
|
||||
box-shadow: none !important;
|
||||
-o-box-shadow: none !important;
|
||||
-webkit-box-shadow: none !important;
|
||||
-moz-box-shadow: none !important;
|
||||
}
|
||||
|
||||
.ui-dialog {
|
||||
box-shadow: 1px 1px 18px #666 !important;
|
||||
}
|
||||
|
||||
*:focus { /* remove chrome border around active fields */
|
||||
outline: none;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
color: #333;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
body,
|
||||
#login-form .box-inner,
|
||||
#login-form .box-bottom {
|
||||
background-image: none;
|
||||
}
|
||||
|
||||
a {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
/* buttons */
|
||||
|
||||
input[type="button"],
|
||||
input[type="submit"],
|
||||
input[type="reset"],
|
||||
button,
|
||||
button.ui-button,
|
||||
a.button,
|
||||
input.button {
|
||||
|
||||
&,
|
||||
.formbuttons & {
|
||||
border: 1px solid #adadad;
|
||||
color: #212121;
|
||||
background: #fff;
|
||||
font-weight: normal;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus,
|
||||
.formbuttons &:hover {
|
||||
border-color: #949494;
|
||||
color: #212121;
|
||||
background: #efefef;
|
||||
}
|
||||
}
|
||||
|
||||
body:not(.skin-litecube) {
|
||||
.prevpage,
|
||||
.nextpage {
|
||||
background: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
.buttongroup a.button {
|
||||
background: #fff !important;
|
||||
|
||||
&.selected {
|
||||
background: #aaa !important;
|
||||
}
|
||||
}
|
||||
|
||||
#look-and-feel-shortcut a.btn {
|
||||
display: block;
|
||||
text-align: center;
|
||||
margin-top: 8px;
|
||||
text-decoration: none;
|
||||
padding: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
ul.toolbarmenu li a.icon {
|
||||
padding-top: 6px !important;
|
||||
padding-bottom: 6px !important;
|
||||
}
|
||||
|
||||
#login-form input[type="text"],
|
||||
#login-form input[type="password"],
|
||||
input[type=text],
|
||||
input[type=email],
|
||||
input[type=password],
|
||||
textarea {
|
||||
margin-bottom: 0;
|
||||
padding: 5px;
|
||||
border: 1px solid #ccc !important;
|
||||
background: #fff;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
textarea:focus,
|
||||
textarea:hover,
|
||||
input[type=text]:focus,
|
||||
input[type=text]:hover,
|
||||
input[type=password]:focus,
|
||||
input[type=password]:hover,
|
||||
select:focus,
|
||||
select:hover {
|
||||
border-color: #8f8f8f;
|
||||
}
|
||||
|
||||
.propform {
|
||||
fieldset > legend {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
input[type=text],
|
||||
input[type=password],
|
||||
input[type=email],
|
||||
select {
|
||||
width: 100%;
|
||||
max-width: 600px;
|
||||
margin-right: 0;
|
||||
margin-left: 0;
|
||||
box-sizing: border-box;
|
||||
|
||||
&.error {
|
||||
border-color: #d30000 !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
/*margin-bottom: 8px;*/
|
||||
margin-right: 4px;
|
||||
border: 1px solid #ccc;
|
||||
padding: 5px;
|
||||
background: #fff;
|
||||
border-radius: 0 !important;
|
||||
color: #333;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
select.decorated option {
|
||||
background: #fff;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
fieldset {
|
||||
border-radius: 0 !important;
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
|
||||
legend {
|
||||
font-weight: normal !important;
|
||||
font-style: normal !important;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.messagelist tr>.flag span,
|
||||
.messagelist tr>.status span,
|
||||
.messagelist tr>.attachment span,
|
||||
.messagelist tr>.priority span {
|
||||
text-indent: 0;
|
||||
}
|
||||
|
||||
#interface-options span.tooltip {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#messagestack div:after {
|
||||
position: absolute !important;
|
||||
}
|
||||
|
||||
.formbuttons {
|
||||
text-align: right;
|
||||
padding-right: 10px;
|
||||
}
|
||||
|
||||
.ui-dialog-titlebar {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
|
||||
button {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
body.iframe .footerleft.floating,
|
||||
#composeview-bottom .formbuttons.floating {
|
||||
right: 0;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
body.print-message,
|
||||
#printmessageframe {
|
||||
background: #fff !important;
|
||||
}
|
||||
|
||||
.minicolors-swatch .minicolors-swatch-color {
|
||||
border-radius: 5px;
|
||||
}
|
||||
|
||||
/* iehacks */
|
||||
|
||||
input.button,
|
||||
.formbuttons input.button,
|
||||
.formbuttons input.button:active,
|
||||
input.button.mainaction,
|
||||
input.button.mainaction:active,
|
||||
a.button,
|
||||
a.button.pressed,
|
||||
a.button:active,
|
||||
input.button:active,
|
||||
.pagenav.dark a.button,
|
||||
.pagenav.dark a.button.pressed,
|
||||
#message.statusbar,
|
||||
.ui-dialog.popupmessage .ui-dialog-titlebar,
|
||||
.ui-dialog.popupmessage .ui-widget-content,
|
||||
#topnav,
|
||||
.records-table tr.selected td,
|
||||
.contentbox .boxtitle,
|
||||
body.iframe .boxtitle,
|
||||
#login-form input.button,
|
||||
#login-form input.button:active,
|
||||
.toolbar a.button,
|
||||
a.menuselector,
|
||||
a.menuselector:active,
|
||||
.googie_list td.googie_list_onhover,
|
||||
ul.toolbarmenu li a.active:hover,
|
||||
#rcmKSearchpane ul li.selected,
|
||||
.tabsbar .tablink,
|
||||
.tabsbar .selected a,
|
||||
.contactfieldgroup,
|
||||
.contactfieldgroup legend,
|
||||
#messagelistfooter,
|
||||
#mailboxlist li.mailbox .unreadcount,
|
||||
#mailboxlist li.mailbox.selected > a .unreadcount,
|
||||
#messageheader, #partheader, #composeheaders,
|
||||
#previewheaderstoggle {
|
||||
filter: none;
|
||||
}
|
||||
|
||||
/* login */
|
||||
|
||||
#login-form td.title {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#login-form input[type="text"],
|
||||
#login-form input[type="password"] {
|
||||
border: 1px solid #ddd;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#ifplcontainer div label {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#login-form {
|
||||
select#_language {
|
||||
width: 100% !important;
|
||||
}
|
||||
}
|
||||
|
||||
/* switch checkboxes */
|
||||
|
||||
input.switchbox-input {
|
||||
opacity: 0 !important;
|
||||
position: absolute !important;
|
||||
}
|
||||
|
||||
label.switchbox {
|
||||
font-size: 1em;
|
||||
position: relative;
|
||||
display: inline-block !important;
|
||||
padding: 0 !important;
|
||||
width: 2em !important;
|
||||
height: 1.1em !important;
|
||||
background: #a5a5a5 !important;
|
||||
border: 1px solid #ddd !important;
|
||||
border-radius: 1em !important;
|
||||
vertical-align: -0.15em !important;
|
||||
transition: all 0.5s cubic-bezier(.17,.67,.43,.98);
|
||||
cursor: pointer;
|
||||
-webkit-user-select: none;
|
||||
-moz-user-select: none;
|
||||
-ms-user-select: none;
|
||||
user-select: none;
|
||||
-webkit-tap-highlight-color: transparent;
|
||||
tap-highlight-color: transparent;
|
||||
}
|
||||
|
||||
label.switchbox:hover {
|
||||
background: #ddd !important;
|
||||
}
|
||||
|
||||
label.switchbox:after {
|
||||
position: absolute !important;
|
||||
display: block !important;
|
||||
content: '' !important;
|
||||
top: 1px !important;
|
||||
left: 1px !important;
|
||||
bottom: 1px !important;
|
||||
width: 1em !important;
|
||||
border-radius: 50% !important;
|
||||
background: #fff !important;
|
||||
box-shadow: 0 0 0.1em 0 #aaa !important;
|
||||
}
|
||||
|
||||
input.switchbox-input:checked + label.switchbox {
|
||||
background: #4cd964 !important;
|
||||
border-color: #4cd964 !important;
|
||||
}
|
||||
|
||||
input.switchbox-input:checked + label.switchbox:hover {
|
||||
background: #41c658 !important;
|
||||
}
|
||||
|
||||
input.switchbox-input:checked + label.switchbox:after {
|
||||
left: auto !important;
|
||||
right: 1px !important;
|
||||
box-shadow: 0 0 0.1em 0 #aaa !important;
|
||||
}
|
||||
|
||||
body.xskin input.switchbox-input:disabled + label.switchbox,
|
||||
body.xskin input.switchbox-input:checked:disabled + label.switchbox {
|
||||
background: #ddd !important;
|
||||
border-color: #ddd !important;
|
||||
cursor:not-allowed;
|
||||
}
|
||||
|
||||
input.switchbox-input:disabled + label.switchbox:after,
|
||||
input.switchbox-input:checked:disabled + label.switchbox:after {
|
||||
background: #eee !important;
|
||||
}
|
||||
|
||||
// fix positioning
|
||||
#subscription-table label.switchbox,
|
||||
#subscription-table label.material.checkbox {
|
||||
left: auto !important;
|
||||
}
|
||||
|
||||
/* compose */
|
||||
|
||||
.mce-btn,
|
||||
.mce-btn button,
|
||||
button.mce-close {
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
margin-right: 2px !important;
|
||||
}
|
||||
|
||||
.mce-btn .mce-txt,
|
||||
.mce-btn button {
|
||||
color: #333 !important;
|
||||
}
|
||||
|
||||
.mce-colorbutton:hover .mce-open {
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
i.mce-i-backcolor {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.mce-widget button {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
#composeoptions {
|
||||
border: none;
|
||||
}
|
||||
|
||||
#composeheaders .moreheaderstoggle {
|
||||
border: none !important;
|
||||
background: transparent !important;
|
||||
}
|
||||
|
||||
.moreheaderstoggle .iconlink {
|
||||
top: auto;
|
||||
bottom: 2px;
|
||||
}
|
||||
|
||||
.moreheaderstoggle.remove .iconlink {
|
||||
bottom: 2px;
|
||||
}
|
||||
|
||||
#composebodycontainer .mce-tinymce {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#compose-attachments {
|
||||
top: 0;
|
||||
border: 0;
|
||||
border-left: 1px solid #DFDFDF;
|
||||
}
|
||||
|
||||
#composebodycontainer .mce-edit-area {
|
||||
border-top: 1px solid #DFDFDF !important;
|
||||
}
|
||||
|
||||
// html editor buttons
|
||||
|
||||
button.tox-tbtn,
|
||||
button.tox-button,
|
||||
button.mce-close {
|
||||
color: #222f3e !important;
|
||||
background: transparent !important;
|
||||
|
||||
&:hover {
|
||||
background: #dee0e2 !important;
|
||||
}
|
||||
}
|
||||
|
||||
.tox-dialog {
|
||||
border: 1px solid #bbbbbb;
|
||||
}
|
||||
|
||||
.tox-dialog__footer {
|
||||
button.tox-button {
|
||||
background: #fff;
|
||||
border: 1px solid #aaa;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
button.tox-button--secondary {
|
||||
border: 1px solid #ddd;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* plugin: treecol */
|
||||
|
||||
#mailview-tc-mid,
|
||||
#mailview-tc-right {
|
||||
top: 0;
|
||||
}
|
||||
|
||||
/* plugin: xcalendar */
|
||||
|
||||
.xcalendar .fc-state-default, .xcalendar .boxtitle button {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* plugin: help */
|
||||
|
||||
#helptoolbar a.button.help {
|
||||
display: none; // this button doesn't do anything
|
||||
}
|
||||
|
||||
/* plugin: rcguard */
|
||||
|
||||
#recaptcha_area {
|
||||
padding: 0 !important;
|
||||
}
|
||||
|
||||
/* plugin managesieve */
|
||||
|
||||
#filter-form {
|
||||
select,
|
||||
input,
|
||||
textarea {
|
||||
font-size: 1em;
|
||||
padding: 4px;
|
||||
}
|
||||
|
||||
.rulerow .listarea {
|
||||
padding: 0;
|
||||
border: 1px solid #ddd;
|
||||
background: transparent;
|
||||
|
||||
.listelement {
|
||||
height: auto;
|
||||
|
||||
.reset {
|
||||
margin-top: 3px;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
input {
|
||||
padding: 4px !important;
|
||||
background: transparent;
|
||||
border: none !important;
|
||||
line-height: normal;
|
||||
margin-left: 5px;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* plugin: filters */
|
||||
|
||||
.xskin #pluginbody #filters-form {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
bottom: 0;
|
||||
overflow: auto;
|
||||
|
||||
.uibox.listbox.scroller {
|
||||
position: static;
|
||||
margin-top: 0 !important;
|
||||
border: none;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
.boxcontent {
|
||||
border: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
97
plugins/xskin/assets/styles/_larry_desktop_light.scss
Normal file
97
plugins/xskin/assets/styles/_larry_desktop_light.scss
Normal file
@ -0,0 +1,97 @@
|
||||
|
||||
.uibox .boxtitle,
|
||||
.uibox .listing thead td,
|
||||
.uibox .listing thead th {
|
||||
background: #aaa;
|
||||
color: #fff !important;
|
||||
}
|
||||
|
||||
a.menuselector {
|
||||
color: #333 !important;
|
||||
border: 1px solid #ccc;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#mailboxlist li.mailbox ul {
|
||||
border-top-color: #ddd;
|
||||
}
|
||||
|
||||
.toolbar a.button,
|
||||
.pagenavbuttons a.button {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
|
||||
.popupmenu,
|
||||
#rcmKSearchpane {
|
||||
border-color: #999;
|
||||
border-width: 2px !important;
|
||||
border-style: solid !important;
|
||||
background: #fff;
|
||||
color: #333;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.popupmenu li,
|
||||
.popupmenu a {
|
||||
background-image: none !important;
|
||||
}
|
||||
|
||||
.popupmenu a,
|
||||
.googie_list td span,
|
||||
ul.toolbarmenu li a {
|
||||
color: #aaa;
|
||||
|
||||
&.active {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
#enigmamenu {
|
||||
overflow-y: hidden;
|
||||
|
||||
label {
|
||||
color: #333;
|
||||
}
|
||||
}
|
||||
|
||||
.googie_list td,
|
||||
ul.toolbarmenu li,
|
||||
ul.toolbarmenu li label,
|
||||
ul.toolbarmenu li a.icon,
|
||||
#rcmKSearchpane ul li {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.googie_list td.googie_list_onhover,
|
||||
ul.toolbarmenu li a.active:hover,
|
||||
ul.toolbarmenu li a.active:focus,
|
||||
#rcmKSearchpane ul li.selected,
|
||||
select.decorated option:hover,
|
||||
select.decorated option[selected='selected'] {
|
||||
background: #e9e9e9 !important;
|
||||
}
|
||||
|
||||
.googie_list td span, ul.toolbarmenu li a.active {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.popupmenu a:hover {
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
#background-more-actions a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
#interface-options {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
// plugin: primitivenotes
|
||||
#newmenu.popupmenu a {
|
||||
color: #333 !important;
|
||||
|
||||
&:hover {
|
||||
background: #e9e9e9;
|
||||
}
|
||||
}
|
27
plugins/xskin/assets/styles/_larry_desktop_square.scss
Normal file
27
plugins/xskin/assets/styles/_larry_desktop_square.scss
Normal file
@ -0,0 +1,27 @@
|
||||
|
||||
a.button,
|
||||
.uibox,
|
||||
.uibox .boxtitle,
|
||||
.uibox .listing thead td,
|
||||
.uibox .listing thead th,
|
||||
a.menuselector,
|
||||
#messagestack .notice,
|
||||
input.button,
|
||||
.formbuttons input.button,
|
||||
input.button.mainaction,
|
||||
input.button.mainaction:active,
|
||||
#login-form input.button,
|
||||
#mailboxlist li,
|
||||
.listbox .boxfooter,
|
||||
.contentbox .boxtitle,
|
||||
body.iframe .boxtitle,
|
||||
.contactfieldgroup legend,
|
||||
.records-table thead td,
|
||||
.records-table thead th,
|
||||
#messagelistfooter,
|
||||
.popupmenu,
|
||||
#rcmKSearchpane,
|
||||
body.xlarry-font-icons #mailboxlist li.mailbox .unreadcount,
|
||||
.minicolors-swatch .minicolors-swatch-color {
|
||||
border-radius: 0 !important;
|
||||
}
|
212
plugins/xskin/assets/styles/_options.scss
Normal file
212
plugins/xskin/assets/styles/_options.scss
Normal file
@ -0,0 +1,212 @@
|
||||
@import "../../../xframework/assets/styles/_colors";
|
||||
|
||||
@mixin font-family($font) {
|
||||
body, button, input, optgroup, select, textarea, .popover {
|
||||
font-family: $font;
|
||||
}
|
||||
}
|
||||
|
||||
// user option: font family
|
||||
html.xfont-family-arial { @include font-family((Arial, Helvetica, sans-serif)); }
|
||||
html.xfont-family-courier { @include font-family(("Courier New", Courier, monospace)); }
|
||||
html.xfont-family-merienda { @include font-family(('Merienda', cursive)); }
|
||||
html.xfont-family-montserrat { @include font-family(('Montserrat Alternates', sans-serif)); }
|
||||
html.xfont-family-noto-sans { @include font-family(('Noto Sans', sans-serif)); }
|
||||
html.xfont-family-quattrocento { @include font-family(('Quattrocento', serif)); }
|
||||
html.xfont-family-roboto { @include font-family(("Roboto", sans-serif)); }
|
||||
html.xfont-family-sarala { @include font-family(('Sarala', sans-serif)); }
|
||||
html.xfont-family-times { @include font-family(("Times New Roman", Times, serif)); }
|
||||
html.xfont-family-ubuntu { @include font-family(('Ubuntu', sans-serif)); }
|
||||
|
||||
// user option: font thickness
|
||||
html.xthick-font-yes body * {
|
||||
font-weight: bold !important;
|
||||
}
|
||||
|
||||
// user option: font size
|
||||
html, body {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
html.xfont-size-xs {
|
||||
&, body { font-size: 12px; }
|
||||
}
|
||||
|
||||
html.xfont-size-s {
|
||||
&, body { font-size: 13px; }
|
||||
|
||||
}
|
||||
html.xfont-size-l {
|
||||
&, body { font-size: 15px; }
|
||||
}
|
||||
|
||||
html.xfont-size-xl {
|
||||
&, body { font-size: 16px; }
|
||||
}
|
||||
|
||||
// user option: icons in lists
|
||||
body.xlist-icons-no {
|
||||
.scroller .listing.iconized li > a:before,
|
||||
.scroller .listing.iconized tr > td.section:before,
|
||||
.scroller .listing.iconized tr.contact > td:before,
|
||||
.scroller .folderlist li > a:before,
|
||||
.popupmenu:not(#spell-menu) .listing a:before {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
// user option: icons on buttons
|
||||
body.xbutton-icons-no button.btn {
|
||||
&:not(.ui-dialog-titlebar-close):before {
|
||||
display: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
// skin option: normal (not bold) header font
|
||||
body.xnormal-header-font {
|
||||
#layout > div > .header,
|
||||
#layout > div > .footer,
|
||||
.folderlist li.mailbox .unreadcount,
|
||||
#sidebar-calendar .ui-datepicker select {
|
||||
font-weight: normal;
|
||||
}
|
||||
}
|
||||
|
||||
// skin option: inverted colors on header
|
||||
body.xinverted-header-colors {
|
||||
&.xsidebar-mobile-visible #xsidebar #xsidebar-mobile-header a {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
#messagelist-header,
|
||||
#layout > div > .header {
|
||||
border-bottom: none;
|
||||
}
|
||||
}
|
||||
|
||||
// skin option: no icons on taskbar
|
||||
@media screen and (min-width: 480px) {
|
||||
body.xno-taskbar-icons {
|
||||
#taskmenu a {
|
||||
padding: 0;
|
||||
height: 36px;
|
||||
font-size: 1rem;
|
||||
|
||||
&:before {
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
span.inner {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// skin option: no border radius
|
||||
body.xno-border-radius {
|
||||
* :not(.spinner) {
|
||||
border-radius: 0 !important;
|
||||
}
|
||||
}
|
||||
|
||||
// skin option: inverted menu
|
||||
body.xinverted-menu {
|
||||
#sidebar-calendar .ui-datepicker {
|
||||
border-left: 1px solid !important;
|
||||
border-right: 1px solid !important;
|
||||
@include border-color(true);
|
||||
}
|
||||
|
||||
#layout>div>.header {
|
||||
background: #ddd;
|
||||
|
||||
|
||||
&,
|
||||
.menu.toolbar a,
|
||||
a.button,
|
||||
select {
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
.header {
|
||||
.listing li {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
#layout-sidebar,
|
||||
#layout-list,
|
||||
#layout-content {
|
||||
border: none !important;
|
||||
|
||||
.iframe-wrapper,
|
||||
.searchbar,
|
||||
.footer,
|
||||
.scroller {
|
||||
border-left: 1px solid;
|
||||
@include border-color;
|
||||
}
|
||||
|
||||
#calendar-list-container {
|
||||
border-right: 1px solid;
|
||||
@include border-color;
|
||||
}
|
||||
|
||||
// fix for rc 1.5 vs 1.4
|
||||
#compose-content {
|
||||
border-left: 1px solid;
|
||||
@include border-color;
|
||||
|
||||
.scroller {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#layout > div.sidebar {
|
||||
.pagenav,
|
||||
.scroller,
|
||||
.footer {
|
||||
border-left: 1px solid;
|
||||
@include border-color;
|
||||
}
|
||||
}
|
||||
|
||||
#layout > #layout-menu {
|
||||
border-right: none;
|
||||
|
||||
&,
|
||||
#taskmenu .action-buttons a {
|
||||
background-color: #F4F4F4 !important;
|
||||
}
|
||||
|
||||
#taskmenu a {
|
||||
@include text-color(true);
|
||||
background-color: transparent !important;
|
||||
|
||||
&.selected,
|
||||
&.selected:hover,
|
||||
&:hover {
|
||||
@include background-highlight-color(10, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
html.dark-mode body.xinverted-menu {
|
||||
#layout > #layout-menu {
|
||||
background-color: #21292c !important;
|
||||
|
||||
#taskmenu .action-buttons a {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
.floating-action-buttons a {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
2
plugins/xskin/assets/styles/larry_desktop.css
Normal file
2
plugins/xskin/assets/styles/larry_desktop.css
Normal file
File diff suppressed because one or more lines are too long
7
plugins/xskin/assets/styles/larry_desktop.css.map
Normal file
7
plugins/xskin/assets/styles/larry_desktop.css.map
Normal file
File diff suppressed because one or more lines are too long
1039
plugins/xskin/assets/styles/larry_desktop.scss
Normal file
1039
plugins/xskin/assets/styles/larry_desktop.scss
Normal file
File diff suppressed because it is too large
Load Diff
2
plugins/xskin/assets/styles/larry_mobile.css
Normal file
2
plugins/xskin/assets/styles/larry_mobile.css
Normal file
File diff suppressed because one or more lines are too long
7
plugins/xskin/assets/styles/larry_mobile.css.map
Normal file
7
plugins/xskin/assets/styles/larry_mobile.css.map
Normal file
File diff suppressed because one or more lines are too long
3020
plugins/xskin/assets/styles/larry_mobile.scss
Normal file
3020
plugins/xskin/assets/styles/larry_mobile.scss
Normal file
File diff suppressed because it is too large
Load Diff
2
plugins/xskin/assets/styles/styles.css
Normal file
2
plugins/xskin/assets/styles/styles.css
Normal file
File diff suppressed because one or more lines are too long
7
plugins/xskin/assets/styles/styles.css.map
Normal file
7
plugins/xskin/assets/styles/styles.css.map
Normal file
File diff suppressed because one or more lines are too long
361
plugins/xskin/assets/styles/styles.scss
Normal file
361
plugins/xskin/assets/styles/styles.scss
Normal file
@ -0,0 +1,361 @@
|
||||
@import "_options";
|
||||
@import "../../../xframework/assets/styles/_colors";
|
||||
|
||||
.btn {
|
||||
// border: none !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
// gray out disabled dialog buttons
|
||||
.xelastic div.ui-dialog-buttonset button.btn:disabled {
|
||||
background-color: #aaa !important;
|
||||
}
|
||||
|
||||
.form-control:focus,
|
||||
.recipient-input.focus,
|
||||
.mce-tinymce.focused, // rc 1.4 html editor
|
||||
div.tox.focused, // rc 1.5 html editor
|
||||
div.tox .tox-color-input>input:focus,
|
||||
div.tox .tox-selectfield select:focus,
|
||||
div.tox .tox-textarea:focus,
|
||||
div.tox .tox-textfield:focus {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
body .ui-dialog .ui-dialog-titlebar .ui-dialog-titlebar-close {
|
||||
&, &:hover {
|
||||
@include text-color(true);
|
||||
background: transparent !important;
|
||||
}
|
||||
}
|
||||
|
||||
body.xelastic {
|
||||
.menu a:not(.disabled),
|
||||
.menu.toolbar .dropbutton:not(.disabled),
|
||||
.header a.button.icon:not(.disabled),
|
||||
.menu.toolbar .dropbutton a.dropdown,
|
||||
.menu.toolbar .menuitem:not(.select) {
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: rgba(255, 255, 255, .15);
|
||||
}
|
||||
}
|
||||
|
||||
.menu span.dropbutton a {
|
||||
&:hover,
|
||||
&:focus {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
html.dark-mode {
|
||||
#settings-menu li.selected,
|
||||
.listing tr.selected td,
|
||||
.listing li.selected,
|
||||
ul.treelist li.selected,
|
||||
ul.treelist li.selected,
|
||||
.toolbar a.button:not(.disabled):focus,
|
||||
.toolbar a.button:not(.disabled):hover,
|
||||
.toolbarmenu.listing li:hover a.active,
|
||||
.menu.toolbar .dropbutton:not(.disabled):hover,
|
||||
.popupmenu .listing li > a:not(.disabled):hover,
|
||||
#taskmenu a:hover,
|
||||
.header a.button.icon:not(.disabled):focus,
|
||||
.header a.button.icon:not(.disabled):hover,
|
||||
.menu a:not(.disabled):focus,
|
||||
.menu a:not(.disabled):hover {
|
||||
background-color: rgba(255, 255, 255, .06);
|
||||
}
|
||||
|
||||
.listing li.selected > a,
|
||||
ul.treelist li.selected > div > a,
|
||||
ul.treelist li.selected > a {
|
||||
background-color: transparent;
|
||||
}
|
||||
}
|
||||
|
||||
.popover {
|
||||
font-size: 1rem;
|
||||
|
||||
.menu li a[aria-haspopup]:hover:after {
|
||||
@include text-color;
|
||||
}
|
||||
}
|
||||
|
||||
// login page (both elastic and larry)
|
||||
|
||||
body.xskin.login-page {
|
||||
#login-title {
|
||||
display: block;
|
||||
margin: 0 0 20px 0;
|
||||
text-align: center;
|
||||
font-size: 1.8em;
|
||||
}
|
||||
|
||||
#logo {
|
||||
position: static;
|
||||
display: block;
|
||||
box-sizing: border-box;
|
||||
max-width: 100%;
|
||||
margin: auto;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
#login-footer,
|
||||
#bottomline {
|
||||
position: fixed;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
padding: 8px;
|
||||
background: rgba(0, 0, 0, 0.4);
|
||||
text-align: left;
|
||||
color: #fff;
|
||||
font-size: 0.8em;
|
||||
|
||||
a {
|
||||
color: #fff;
|
||||
text-decoration: none;
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#vendor-branding {
|
||||
position: fixed;
|
||||
bottom: 3px;
|
||||
right: 8px;
|
||||
display: block;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
z-index: 1;
|
||||
background: rgba(0, 0, 0, .2);
|
||||
border-radius: 5px !important;
|
||||
text-decoration: none;
|
||||
color: #fff;
|
||||
font-weight: bold;
|
||||
font-size: 18px;
|
||||
text-align: center;
|
||||
line-height: 1em;
|
||||
|
||||
&:hover {
|
||||
background: #cc0000;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// login page (elastic only)
|
||||
|
||||
body.xelastic.login-page {
|
||||
background: #f0f0f0;
|
||||
|
||||
#layout {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
#layout-content {
|
||||
overflow: visible;
|
||||
margin: 20vh auto 0 auto !important;
|
||||
color: #333;
|
||||
max-width: 100%;
|
||||
width: 420px;
|
||||
background: #fff !important;
|
||||
padding: 35px;
|
||||
flex: none;
|
||||
|
||||
#login-form {
|
||||
position: static;
|
||||
max-width: 100%;
|
||||
width: 100%;
|
||||
box-sizing: border-box;
|
||||
|
||||
table {
|
||||
width: 100% !important;
|
||||
border-collapse: collapse;
|
||||
|
||||
tr.row {
|
||||
max-width: 100%;
|
||||
|
||||
td {
|
||||
display: block;
|
||||
padding-bottom: 5px;
|
||||
|
||||
&.title {
|
||||
display: block !important;
|
||||
line-height: 1.1em;
|
||||
padding-top: 4px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input[type='text'],
|
||||
input[type='password'],
|
||||
select {
|
||||
width: 100%;
|
||||
font-size: 1.2rem;
|
||||
}
|
||||
}
|
||||
|
||||
.input-group-prepend {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.formbuttons {
|
||||
margin: 20px 0 0 0;
|
||||
|
||||
button {
|
||||
margin: 0;
|
||||
padding: 0.6rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
&:not(.xbackground-login-image) #login-footer {
|
||||
background: transparent;
|
||||
|
||||
&, a {
|
||||
color: #717171;
|
||||
}
|
||||
}
|
||||
|
||||
html.dark-mode & {
|
||||
background: #21292c;
|
||||
|
||||
#layout-content {
|
||||
color: #f4f4f4;
|
||||
background-color: #313c40 !important;
|
||||
}
|
||||
|
||||
&:not(.xbackground-login-image) #login-footer {
|
||||
background: transparent;
|
||||
|
||||
&, a {
|
||||
color: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// skin look and feel
|
||||
|
||||
.skin_look_and_feel {
|
||||
.color-box {
|
||||
display: inline-block;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
margin: 0 4px 4px 0;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.xsave-hint {
|
||||
display: none;
|
||||
|
||||
&:before {
|
||||
margin-right: 6px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove right border from lists
|
||||
html:not(.touch) .listing li>a:focus,
|
||||
html:not(.touch) .listing.focus tbody tr.focused>td:first-child,
|
||||
html:not(.touch) .listing.focus:not(.withselection) tbody tr.focused>td.selection+td {
|
||||
border-left-color: transparent;
|
||||
}
|
||||
|
||||
// correct icon positions and colors
|
||||
.popover-body :before {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
.input-group-text.icon:before {
|
||||
@include text-color;
|
||||
}
|
||||
|
||||
.xicons-outlined {
|
||||
.input-group-text.icon:before,
|
||||
.popover-body :before {
|
||||
top: 2px;
|
||||
}
|
||||
|
||||
.popover-header a.icon:before {
|
||||
position: relative;
|
||||
top: 2px;
|
||||
}
|
||||
}
|
||||
|
||||
// checkboxes
|
||||
.custom-switch .custom-control-input {
|
||||
&:focus:not(:checked) ~ .custom-control-label::before {
|
||||
border-color: #adb5bd;
|
||||
}
|
||||
|
||||
&:focus ~ .custom-control-label::before {
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
&:checked~.custom-control-label::before { // overwrite this in skin colors
|
||||
border-color: #888;
|
||||
background-color: #888;
|
||||
}
|
||||
}
|
||||
|
||||
// popupmenu
|
||||
@media screen and (min-width: 768px) {
|
||||
.popupmenu:not(#listoptions-menu) {
|
||||
@include border-color;
|
||||
|
||||
ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
|
||||
li {
|
||||
border-bottom: 1px solid;
|
||||
@include border-color;
|
||||
|
||||
&:last-child {
|
||||
border-bottom: none;
|
||||
}
|
||||
|
||||
a {
|
||||
display: block;
|
||||
@include text-color;
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
span {
|
||||
padding: 0;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 480px) {
|
||||
#button-apps span.inner {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
// reset button settings on smallest screens
|
||||
body.xelastic .ui-dialog-buttonpane .ui-dialog-buttonset .btn {
|
||||
background: transparent !important;
|
||||
border: none !important;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (min-width: 1025px) {
|
||||
#taskmenu a:focus {
|
||||
background-color: transparent !important;
|
||||
}
|
||||
}
|
16
plugins/xskin/composer.json
Normal file
16
plugins/xskin/composer.json
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"name": "roundcubeplus/xskin",
|
||||
"type": "roundcube-plugin",
|
||||
"description": "Enables Roundcube Plus interface skin and mobile functionality. This plugin must be added to the plugin array for the Roundcube Plus skins to work.",
|
||||
"license": "Commercial",
|
||||
"version": "1.9.2",
|
||||
"homepage": "https://roundcubeplus.com",
|
||||
"authors": [
|
||||
{
|
||||
"name": "Roundcube Plus",
|
||||
"email": "contact@roundcubeplus.com"
|
||||
}
|
||||
],
|
||||
"repositories": [],
|
||||
"require": {}
|
||||
}
|
92
plugins/xskin/config.inc.php
Normal file
92
plugins/xskin/config.inc.php
Normal file
@ -0,0 +1,92 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
// Specify the url to the branding image that should be displayed as the message preview watermark. If this option is set to null, the skins
|
||||
// will use the default watermark located here: [roundcube]/plugins/xskin/assets/images/watermark.png
|
||||
// Example: $config['preview_branding'] = 'http://yourdomain.com/images/watermark.png';
|
||||
// Default: null
|
||||
$config['preview_branding'] = '/plugins/xskin/assets/images/MultiBox_logo-512px_mail-b.png';
|
||||
|
||||
// This setting allows you to always include a custom css file regardless of which skin is loaded.
|
||||
// Example: $config['overwrite_css'] = 'http://yourdomain.com/styles/custom.css';
|
||||
// Default: null
|
||||
$config['overwrite_css'] = null;
|
||||
|
||||
// Set this option to true if you want to remove the skin selection from the interface option dropdown menu.
|
||||
// Default: false
|
||||
$config['disable_menu_skins'] = false;
|
||||
|
||||
// Set this option to true if you want to remove the language selection from the interface option dropdown menu.
|
||||
// Default: false
|
||||
$config['disable_menu_languages'] = false;
|
||||
|
||||
// Set this option to true if you want to disable mobile detection and force the skins to use the desktop interface on mobile devices. This
|
||||
// setting is applicable only to the larry-based skins; it will have no effect on the elastic-based skins.
|
||||
// NOTE: This setting applies to Larry-based skins only.
|
||||
// Default: false
|
||||
$config['disable_mobile_interface'] = false;
|
||||
|
||||
// Specify the third-party plugins you use that don't function properly and should be disabled on mobile devices.
|
||||
// NOTE: This setting applies to Larry-based skins only.
|
||||
// Default: []
|
||||
$config['disable_plugins_on_mobile'] = [];
|
||||
|
||||
// If you find that the Roundcube html editor causes problems on mobile devices, you can disable the html composition support on mobile
|
||||
// devices by setting this option to false.
|
||||
// NOTE: This setting applies to Larry-based skins only.
|
||||
// Default: true
|
||||
$config['allow_mobile_html_composing'] = true;
|
||||
|
||||
// Set this option to true if you want to disable the skin color-changing menu. If you disable the menu, the skins will use the color last
|
||||
// selected by the user or if the user never changed the color, the default color specified in [roundcube]/skins/[skin_name]/settings.php
|
||||
// NOTE: This setting applies to Larry-based skins only.
|
||||
// Default: false
|
||||
$config['disable_menu_colors'] = false;
|
||||
|
||||
// By default the skins use fonts loaded from the remote Google font repository. Set this value to true to disable the remote fonts and
|
||||
// force the skins to use locally hosted fonts only. For the elastic-based skins it will be a local copy of Roboto (included with elastic)
|
||||
// and for the larry-based skins it will be a locally available sans-serif font with preference for Lucida Grande or Verdana. Setting this
|
||||
// value to true will also disable the font selection in the skins' Look & Feel settings section.
|
||||
// Default: false
|
||||
$config['disable_remote_skin_fonts'] = false;
|
||||
|
||||
// Specify the plugins that don't follow the Roundcube plugin development guidelines regarding skin support. Some developers don't
|
||||
// account for the possibility of their plugins being used under different skins than the default 'larry' and 'classic'. They hard-code
|
||||
// those skin names into their code which effectively makes the plugins unusable under any other skin. The xskin plugin can fix this problem
|
||||
// by making those plugin believe they run under larry even if in reality they run under a different skin. For this functionality to work,
|
||||
// the xskin plugin must be included at the very beginning of the plugin array in config/config.inc.php.
|
||||
$config['fix_plugins'] = [
|
||||
"carddav",
|
||||
"compose_in_taskbar",
|
||||
"contactus",
|
||||
"google_ads",
|
||||
"impressum",
|
||||
"jappix4roundcube",
|
||||
"keyboard_shortcuts",
|
||||
"message_highlight",
|
||||
"moreuserinfo",
|
||||
"myrc_sprites",
|
||||
"nabble",
|
||||
"persistent_login",
|
||||
"planner",
|
||||
"plugin_manager",
|
||||
"pwtools",
|
||||
"register",
|
||||
"settings",
|
||||
"sticky_notes",
|
||||
"taskbar",
|
||||
"tasklist",
|
||||
"timepicker",
|
||||
"threecol",
|
||||
"scheduled_sending",
|
||||
"summary",
|
||||
"vcard_send",
|
||||
"vkeyboard",
|
||||
];
|
||||
|
40
plugins/xskin/localization/ar.inc
Normal file
40
plugins/xskin/localization/ar.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'خيارات الواجهة';
|
||||
$labels['disable_mobile_skin'] = 'استخدام مظهر سطح المكتب';
|
||||
$labels['enable_mobile_skin'] = 'استخدام بشرة الهاتف المحمول';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'مظهر البشرة وملمسها';
|
||||
$labels['skin_look_and_feel'] = 'مظهر البشرة وملمسها';
|
||||
$labels['setting_icons'] = 'الأيقونات';
|
||||
$labels['icons_solid'] = 'صلبة';
|
||||
$labels['icons_traditional'] = 'تقليدي';
|
||||
$labels['icons_outlined'] = 'الخطوط العريضة';
|
||||
$labels['icons_material'] = 'المواد';
|
||||
$labels['icons_cartoon'] = 'رسوم متحركة';
|
||||
$labels['setting_list_icons'] = 'الأيقونات في القوائم';
|
||||
$labels['setting_button_icons'] = 'أيقونات على الأزرار';
|
||||
$labels['setting_font_size'] = 'حجم الخط';
|
||||
$labels['font_size_xs'] = 'الأصغر';
|
||||
$labels['font_size_s'] = 'أصغر';
|
||||
$labels['font_size_n'] = 'عادي';
|
||||
$labels['font_size_l'] = 'أكبر';
|
||||
$labels['font_size_xl'] = 'الأكبر';
|
||||
$labels['setting_thick_font'] = 'خط سميك';
|
||||
$labels['setting_font_family'] = 'عائلة الخط';
|
||||
$labels['setting_color'] = 'اللون';
|
||||
$labels['save_hint'] = 'لا تنسَ حفظ إعداداتك بالنقر على زر "حفظ" أدناه.';
|
||||
|
40
plugins/xskin/localization/bg_BG.inc
Normal file
40
plugins/xskin/localization/bg_BG.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Опции на интерфейса';
|
||||
$labels['disable_mobile_skin'] = 'Използване на кожата на работния плот';
|
||||
$labels['enable_mobile_skin'] = 'Използване на мобилна кожа';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Вид и усещане на кожата';
|
||||
$labels['skin_look_and_feel'] = 'Вид и усещане на кожата';
|
||||
$labels['setting_icons'] = 'Икони';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Традиционен';
|
||||
$labels['icons_outlined'] = 'Очертан';
|
||||
$labels['icons_material'] = 'Материал';
|
||||
$labels['icons_cartoon'] = 'Карикатура';
|
||||
$labels['setting_list_icons'] = 'Икони в списъци';
|
||||
$labels['setting_button_icons'] = 'Икони върху бутоните';
|
||||
$labels['setting_font_size'] = 'Размер на шрифта';
|
||||
$labels['font_size_xs'] = 'Най-малкият';
|
||||
$labels['font_size_s'] = 'По-малко';
|
||||
$labels['font_size_n'] = 'Нормален';
|
||||
$labels['font_size_l'] = 'По-голям';
|
||||
$labels['font_size_xl'] = 'Най-големият';
|
||||
$labels['setting_thick_font'] = 'Дебел шрифт';
|
||||
$labels['setting_font_family'] = 'Семейство шрифтове';
|
||||
$labels['setting_color'] = 'Цвят';
|
||||
$labels['save_hint'] = 'Не забравяйте да запазите настройките си, като кликнете върху бутона "Запази" по-долу.';
|
||||
|
40
plugins/xskin/localization/cs_CZ.inc
Normal file
40
plugins/xskin/localization/cs_CZ.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Možnosti rozhraní';
|
||||
$labels['disable_mobile_skin'] = 'Použití skinu na ploše';
|
||||
$labels['enable_mobile_skin'] = 'Použití mobilní kůže';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Vzhled a pocit pokožky';
|
||||
$labels['skin_look_and_feel'] = 'Vzhled a pocit pokožky';
|
||||
$labels['setting_icons'] = 'Ikony';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradiční';
|
||||
$labels['icons_outlined'] = 'Načrtnuto';
|
||||
$labels['icons_material'] = 'Materiál';
|
||||
$labels['icons_cartoon'] = 'Kreslený film';
|
||||
$labels['setting_list_icons'] = 'Ikony v seznamech';
|
||||
$labels['setting_button_icons'] = 'Ikony na tlačítkách';
|
||||
$labels['setting_font_size'] = 'Velikost písma';
|
||||
$labels['font_size_xs'] = 'Nejmenší';
|
||||
$labels['font_size_s'] = 'Menší';
|
||||
$labels['font_size_n'] = 'Normální';
|
||||
$labels['font_size_l'] = 'Větší';
|
||||
$labels['font_size_xl'] = 'Největší';
|
||||
$labels['setting_thick_font'] = 'Silné písmo';
|
||||
$labels['setting_font_family'] = 'Rodina písma';
|
||||
$labels['setting_color'] = 'Barva';
|
||||
$labels['save_hint'] = 'Nezapomeňte uložit nastavení kliknutím na tlačítko "Uložit" níže.';
|
||||
|
40
plugins/xskin/localization/da_DK.inc
Normal file
40
plugins/xskin/localization/da_DK.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Indstillinger for grænseflader';
|
||||
$labels['disable_mobile_skin'] = 'Brug desktop skin';
|
||||
$labels['enable_mobile_skin'] = 'Brug mobil hud';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Brugerfladens udseende';
|
||||
$labels['skin_look_and_feel'] = 'Brugerfladens udseende';
|
||||
$labels['setting_icons'] = 'Ikoner';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Traditionel';
|
||||
$labels['icons_outlined'] = 'Skitseret';
|
||||
$labels['icons_material'] = 'Materiale';
|
||||
$labels['icons_cartoon'] = 'Tegneserie';
|
||||
$labels['setting_list_icons'] = 'Ikoner i lister';
|
||||
$labels['setting_button_icons'] = 'Ikoner på knapper';
|
||||
$labels['setting_font_size'] = 'Skriftstørrelse';
|
||||
$labels['font_size_xs'] = 'Mindste';
|
||||
$labels['font_size_s'] = 'Mindre';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Større';
|
||||
$labels['font_size_xl'] = 'Største';
|
||||
$labels['setting_thick_font'] = 'Tyk skrifttype';
|
||||
$labels['setting_font_family'] = 'Skrifttypefamilie';
|
||||
$labels['setting_color'] = 'Farve';
|
||||
$labels['save_hint'] = 'Glem ikke at gemme dine indstillinger ved at klikke på knappen "Gem" nedenfor.';
|
||||
|
39
plugins/xskin/localization/de_DE.inc
Normal file
39
plugins/xskin/localization/de_DE.inc
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Bedienoberflächeneinstellungen';
|
||||
$labels['disable_mobile_skin'] = 'Benutze Desktop Skin';
|
||||
$labels['enable_mobile_skin'] = 'Benutze Mobilen skin';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Skin Einstellungen';
|
||||
$labels['skin_look_and_feel'] = 'Skin Einstellungen';
|
||||
$labels['setting_icons'] = 'Icons';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Traditional';
|
||||
$labels['icons_outlined'] = 'Outlined';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Cartoon';
|
||||
$labels['setting_list_icons'] = 'Integriere Icons in Listen';
|
||||
$labels['setting_button_icons'] = 'Integriere Icons in Knöpfen';
|
||||
$labels['setting_font_size'] = 'Schriftgröße';
|
||||
$labels['font_size_xs'] = 'Kleinste';
|
||||
$labels['font_size_s'] = 'Kleiner';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Größer';
|
||||
$labels['font_size_xl'] = 'Größte';
|
||||
$labels['setting_thick_font'] = 'Konturstarke Schrift';
|
||||
$labels['setting_font_family'] = 'Schriftartenfamilie';
|
||||
$labels['setting_color'] = 'Farbe';
|
||||
$labels['save_hint'] = 'Nicht vergessen die Einstellungen per Klick auf den unten stehenden \'Speichern\' Knopf zu sichern.';
|
40
plugins/xskin/localization/el_GR.inc
Normal file
40
plugins/xskin/localization/el_GR.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Επιλογές διασύνδεσης';
|
||||
$labels['disable_mobile_skin'] = 'Χρήση επιφάνειας εργασίας';
|
||||
$labels['enable_mobile_skin'] = 'Χρησιμοποιήστε το δέρμα του κινητού';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Εμφάνιση & αίσθηση του δέρματος';
|
||||
$labels['skin_look_and_feel'] = 'Εμφάνιση & αίσθηση του δέρματος';
|
||||
$labels['setting_icons'] = 'Εικόνες';
|
||||
$labels['icons_solid'] = 'Στερεά';
|
||||
$labels['icons_traditional'] = 'Παραδοσιακό';
|
||||
$labels['icons_outlined'] = 'Σκιαγραφημένο';
|
||||
$labels['icons_material'] = 'Υλικό';
|
||||
$labels['icons_cartoon'] = 'Κινούμενα σχέδια';
|
||||
$labels['setting_list_icons'] = 'Εικονίδια σε λίστες';
|
||||
$labels['setting_button_icons'] = 'Εικονίδια στα κουμπιά';
|
||||
$labels['setting_font_size'] = 'Μέγεθος γραμματοσειράς';
|
||||
$labels['font_size_xs'] = 'Το μικρότερο';
|
||||
$labels['font_size_s'] = 'Μικρότερο';
|
||||
$labels['font_size_n'] = 'Κανονικό';
|
||||
$labels['font_size_l'] = 'Μεγαλύτερο';
|
||||
$labels['font_size_xl'] = 'Μεγαλύτερο';
|
||||
$labels['setting_thick_font'] = 'Παχιά γραμματοσειρά';
|
||||
$labels['setting_font_family'] = 'Οικογένεια γραμματοσειρών';
|
||||
$labels['setting_color'] = 'Χρώμα';
|
||||
$labels['save_hint'] = 'Μην ξεχάσετε να αποθηκεύσετε τις ρυθμίσεις σας κάνοντας κλικ στο κουμπί "Αποθήκευση" παρακάτω.';
|
||||
|
40
plugins/xskin/localization/en_US.inc
Normal file
40
plugins/xskin/localization/en_US.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Interface Options';
|
||||
$labels['disable_mobile_skin'] = 'Use desktop skin';
|
||||
$labels['enable_mobile_skin'] = 'Use mobile skin';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Skin Look & Feel';
|
||||
$labels['skin_look_and_feel'] = 'Skin Look & Feel';
|
||||
$labels['setting_icons'] = 'Icons';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Traditional';
|
||||
$labels['icons_outlined'] = 'Outlined';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Cartoon';
|
||||
$labels['setting_list_icons'] = 'Icons in lists';
|
||||
$labels['setting_button_icons'] = 'Icons on buttons';
|
||||
$labels['setting_font_size'] = 'Font size';
|
||||
$labels['font_size_xs'] = 'Smallest';
|
||||
$labels['font_size_s'] = 'Smaller';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Larger';
|
||||
$labels['font_size_xl'] = 'Largest';
|
||||
$labels['setting_thick_font'] = 'Thick font';
|
||||
$labels['setting_font_family'] = 'Font family';
|
||||
$labels['setting_color'] = 'Color';
|
||||
$labels['save_hint'] = 'Don\'t forget to save your settings by clicking the "Save" button below.';
|
||||
|
40
plugins/xskin/localization/es_ES.inc
Normal file
40
plugins/xskin/localization/es_ES.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opciones de interfaz';
|
||||
$labels['disable_mobile_skin'] = 'Usar skin de escritorio';
|
||||
$labels['enable_mobile_skin'] = 'Utilizar la piel móvil';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Aspecto y tacto de la piel';
|
||||
$labels['skin_look_and_feel'] = 'Aspecto y tacto de la piel';
|
||||
$labels['setting_icons'] = 'Iconos';
|
||||
$labels['icons_solid'] = 'Sólido';
|
||||
$labels['icons_traditional'] = 'Tradicional';
|
||||
$labels['icons_outlined'] = 'Esbozado';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Dibujos animados';
|
||||
$labels['setting_list_icons'] = 'Iconos en las listas';
|
||||
$labels['setting_button_icons'] = 'Iconos en los botones';
|
||||
$labels['setting_font_size'] = 'Tamaño de letra';
|
||||
$labels['font_size_xs'] = 'El más pequeño';
|
||||
$labels['font_size_s'] = 'Más pequeño';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Más grande';
|
||||
$labels['font_size_xl'] = 'Mayor';
|
||||
$labels['setting_thick_font'] = 'Fuente gruesa';
|
||||
$labels['setting_font_family'] = 'Familia de fuentes';
|
||||
$labels['setting_color'] = 'Color';
|
||||
$labels['save_hint'] = 'No olvides guardar la configuración haciendo clic en el botón "Guardar".';
|
||||
|
40
plugins/xskin/localization/et_EE.inc
Normal file
40
plugins/xskin/localization/et_EE.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Liidesevõimalused';
|
||||
$labels['disable_mobile_skin'] = 'Kasutage töölaua nahka';
|
||||
$labels['enable_mobile_skin'] = 'Kasutage mobiiltelefoni nahka';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Naha välimus ja tunne';
|
||||
$labels['skin_look_and_feel'] = 'Naha välimus ja tunne';
|
||||
$labels['setting_icons'] = 'Ikoonid';
|
||||
$labels['icons_solid'] = 'Soliidne';
|
||||
$labels['icons_traditional'] = 'Traditsiooniline';
|
||||
$labels['icons_outlined'] = 'Välja toodud';
|
||||
$labels['icons_material'] = 'Materjal';
|
||||
$labels['icons_cartoon'] = 'Cartoon';
|
||||
$labels['setting_list_icons'] = 'Ikoonid nimekirjades';
|
||||
$labels['setting_button_icons'] = 'Ikoonid nuppudel';
|
||||
$labels['setting_font_size'] = 'Kirjasuurus';
|
||||
$labels['font_size_xs'] = 'Väikseim';
|
||||
$labels['font_size_s'] = 'Väiksemad';
|
||||
$labels['font_size_n'] = 'Tavaline';
|
||||
$labels['font_size_l'] = 'Suurem';
|
||||
$labels['font_size_xl'] = 'Suurim';
|
||||
$labels['setting_thick_font'] = 'Paks kirjatüüp';
|
||||
$labels['setting_font_family'] = 'Kirjatüüpkond';
|
||||
$labels['setting_color'] = 'Värv';
|
||||
$labels['save_hint'] = 'Ärge unustage oma seaded salvestada, klõpsates alloleval nupul "Salvesta".';
|
||||
|
40
plugins/xskin/localization/fi_FI.inc
Normal file
40
plugins/xskin/localization/fi_FI.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Liitäntäasetukset';
|
||||
$labels['disable_mobile_skin'] = 'Käytä työpöydän ihoa';
|
||||
$labels['enable_mobile_skin'] = 'Käytä mobiili-ihoa';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Ihon ulkoasu & tuntuma';
|
||||
$labels['skin_look_and_feel'] = 'Ihon ulkoasu & tuntuma';
|
||||
$labels['setting_icons'] = 'Kuvakkeet';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Perinteinen';
|
||||
$labels['icons_outlined'] = 'Hahmoteltu';
|
||||
$labels['icons_material'] = 'Materiaali';
|
||||
$labels['icons_cartoon'] = 'Sarjakuva';
|
||||
$labels['setting_list_icons'] = 'Kuvakkeet luetteloissa';
|
||||
$labels['setting_button_icons'] = 'Kuvakkeet painikkeissa';
|
||||
$labels['setting_font_size'] = 'Kirjasinkoko';
|
||||
$labels['font_size_xs'] = 'Pienin';
|
||||
$labels['font_size_s'] = 'Pienempi';
|
||||
$labels['font_size_n'] = 'Normaali';
|
||||
$labels['font_size_l'] = 'Suurempi';
|
||||
$labels['font_size_xl'] = 'Suurin';
|
||||
$labels['setting_thick_font'] = 'Paksu fontti';
|
||||
$labels['setting_font_family'] = 'Fonttiperhe';
|
||||
$labels['setting_color'] = 'Väri';
|
||||
$labels['save_hint'] = 'Muista tallentaa asetukset napsauttamalla alla olevaa "Tallenna"-painiketta.';
|
||||
|
40
plugins/xskin/localization/fr_FR.inc
Normal file
40
plugins/xskin/localization/fr_FR.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Options de l\'interface';
|
||||
$labels['disable_mobile_skin'] = 'Utiliser le thème bureau';
|
||||
$labels['enable_mobile_skin'] = 'Utiliser le thème mobile';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Paramètres du thème';
|
||||
$labels['skin_look_and_feel'] = 'Apparence du thème';
|
||||
$labels['setting_icons'] = 'Icônes';
|
||||
$labels['icons_solid'] = 'Solide';
|
||||
$labels['icons_traditional'] = 'Traditionnel';
|
||||
$labels['icons_outlined'] = 'Contour';
|
||||
$labels['icons_material'] = 'Matière';
|
||||
$labels['icons_cartoon'] = 'Dessin';
|
||||
$labels['setting_list_icons'] = 'Icônes dans les listes';
|
||||
$labels['setting_button_icons'] = 'Icônes sur les boutons';
|
||||
$labels['setting_font_size'] = 'Taille de la police';
|
||||
$labels['font_size_xs'] = 'Le plus petit';
|
||||
$labels['font_size_s'] = 'Plus petit';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Plus grand';
|
||||
$labels['font_size_xl'] = 'Le plus grand';
|
||||
$labels['setting_thick_font'] = 'Police épaisse';
|
||||
$labels['setting_font_family'] = 'Famille de police';
|
||||
$labels['setting_color'] = 'Couleur';
|
||||
$labels['save_hint'] = 'N\'oubliez pas de sauvegarder vos paramètres en cliquant sur le bouton \'Enregistrer\' ci-dessous.';
|
||||
|
40
plugins/xskin/localization/hu_HU.inc
Normal file
40
plugins/xskin/localization/hu_HU.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Interfész opciók';
|
||||
$labels['disable_mobile_skin'] = 'Asztali skin használata';
|
||||
$labels['enable_mobile_skin'] = 'Mobil skin használata';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Bőr megjelenés és érzés';
|
||||
$labels['skin_look_and_feel'] = 'Bőr megjelenés és érzés';
|
||||
$labels['setting_icons'] = 'Ikonok';
|
||||
$labels['icons_solid'] = 'Szilárd';
|
||||
$labels['icons_traditional'] = 'Hagyományos';
|
||||
$labels['icons_outlined'] = 'Vázlatos';
|
||||
$labels['icons_material'] = 'Anyag';
|
||||
$labels['icons_cartoon'] = 'Rajzfilm';
|
||||
$labels['setting_list_icons'] = 'Ikonok a listákban';
|
||||
$labels['setting_button_icons'] = 'Ikonok a gombokon';
|
||||
$labels['setting_font_size'] = 'Betűméret';
|
||||
$labels['font_size_xs'] = 'Legkisebb';
|
||||
$labels['font_size_s'] = 'Kisebb';
|
||||
$labels['font_size_n'] = 'Normál';
|
||||
$labels['font_size_l'] = 'Nagyobb';
|
||||
$labels['font_size_xl'] = 'Legnagyobb';
|
||||
$labels['setting_thick_font'] = 'Vastag betűtípus';
|
||||
$labels['setting_font_family'] = 'Betűcsalád';
|
||||
$labels['setting_color'] = 'Színes';
|
||||
$labels['save_hint'] = 'Ne felejtse el elmenteni a beállításokat az alábbi "Mentés" gombra kattintva.';
|
||||
|
40
plugins/xskin/localization/id_ID.inc
Normal file
40
plugins/xskin/localization/id_ID.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opsi Antarmuka';
|
||||
$labels['disable_mobile_skin'] = 'Gunakan kulit desktop';
|
||||
$labels['enable_mobile_skin'] = 'Gunakan kulit seluler';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Tampilan & Rasa Kulit';
|
||||
$labels['skin_look_and_feel'] = 'Tampilan & Rasa Kulit';
|
||||
$labels['setting_icons'] = 'Ikon';
|
||||
$labels['icons_solid'] = 'Padat';
|
||||
$labels['icons_traditional'] = 'Tradisional';
|
||||
$labels['icons_outlined'] = 'Diuraikan';
|
||||
$labels['icons_material'] = 'Bahan';
|
||||
$labels['icons_cartoon'] = 'Kartun';
|
||||
$labels['setting_list_icons'] = 'Ikon dalam daftar';
|
||||
$labels['setting_button_icons'] = 'Ikon pada tombol';
|
||||
$labels['setting_font_size'] = 'Ukuran huruf';
|
||||
$labels['font_size_xs'] = 'Terkecil';
|
||||
$labels['font_size_s'] = 'Lebih kecil';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Lebih besar';
|
||||
$labels['font_size_xl'] = 'Terbesar';
|
||||
$labels['setting_thick_font'] = 'Font tebal';
|
||||
$labels['setting_font_family'] = 'Keluarga font';
|
||||
$labels['setting_color'] = 'Warna';
|
||||
$labels['save_hint'] = 'Jangan lupa untuk menyimpan pengaturan Anda dengan mengeklik tombol "Simpan" di bawah ini.';
|
||||
|
40
plugins/xskin/localization/it_IT.inc
Normal file
40
plugins/xskin/localization/it_IT.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opzioni interfaccia';
|
||||
$labels['disable_mobile_skin'] = 'Usa tema desktop';
|
||||
$labels['enable_mobile_skin'] = 'Usa tema mobile';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Aspetto del tema';
|
||||
$labels['skin_look_and_feel'] = 'Aspetto del tema';
|
||||
$labels['setting_icons'] = 'Icone';
|
||||
$labels['icons_solid'] = 'Solido';
|
||||
$labels['icons_traditional'] = 'Tradizionale';
|
||||
$labels['icons_outlined'] = 'Delineato';
|
||||
$labels['icons_material'] = 'Materiale';
|
||||
$labels['icons_cartoon'] = 'Cartone animato';
|
||||
$labels['setting_list_icons'] = 'Icone nelle liste';
|
||||
$labels['setting_button_icons'] = 'Icone sui pulsanti';
|
||||
$labels['setting_font_size'] = 'Dimensione carattere';
|
||||
$labels['font_size_xs'] = 'Il più piccolo';
|
||||
$labels['font_size_s'] = 'Piccolo';
|
||||
$labels['font_size_n'] = 'Normale';
|
||||
$labels['font_size_l'] = 'Grande';
|
||||
$labels['font_size_xl'] = 'Il più grande';
|
||||
$labels['setting_thick_font'] = 'Carattere spesso';
|
||||
$labels['setting_font_family'] = 'Famiglia di caratteri';
|
||||
$labels['setting_color'] = 'Colore';
|
||||
$labels['save_hint'] = 'Non dimenticare di salvare le tue impostazioni facendo clic sul pulsante "Salva" in basso.';
|
||||
|
40
plugins/xskin/localization/ja_JP.inc
Normal file
40
plugins/xskin/localization/ja_JP.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'インターフェース・オプション';
|
||||
$labels['disable_mobile_skin'] = 'デスクトップスキンを使用する';
|
||||
$labels['enable_mobile_skin'] = 'モバイルスキンの使用';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'スキンルック&フィール';
|
||||
$labels['skin_look_and_feel'] = 'スキンルック&フィール';
|
||||
$labels['setting_icons'] = 'アイコン';
|
||||
$labels['icons_solid'] = 'ソリッド';
|
||||
$labels['icons_traditional'] = 'トラディショナル';
|
||||
$labels['icons_outlined'] = '概要';
|
||||
$labels['icons_material'] = '素材';
|
||||
$labels['icons_cartoon'] = '漫画';
|
||||
$labels['setting_list_icons'] = 'リスト内のアイコン';
|
||||
$labels['setting_button_icons'] = 'ボタン上のアイコン';
|
||||
$labels['setting_font_size'] = '文字サイズ';
|
||||
$labels['font_size_xs'] = '最小';
|
||||
$labels['font_size_s'] = '小さめ';
|
||||
$labels['font_size_n'] = 'ノーマル';
|
||||
$labels['font_size_l'] = 'より大きい';
|
||||
$labels['font_size_xl'] = '最大';
|
||||
$labels['setting_thick_font'] = '太いフォント';
|
||||
$labels['setting_font_family'] = 'フォントファミリー';
|
||||
$labels['setting_color'] = 'カラー';
|
||||
$labels['save_hint'] = '下の「保存」ボタンをクリックして設定を保存することをお忘れなく。';
|
||||
|
40
plugins/xskin/localization/ko_KR.inc
Normal file
40
plugins/xskin/localization/ko_KR.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = '인터페이스 옵션';
|
||||
$labels['disable_mobile_skin'] = '데스크톱 스킨 사용';
|
||||
$labels['enable_mobile_skin'] = '모바일 스킨 사용';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = '피부 룩 & 필';
|
||||
$labels['skin_look_and_feel'] = '피부 룩 & 필';
|
||||
$labels['setting_icons'] = '아이콘';
|
||||
$labels['icons_solid'] = '솔리드';
|
||||
$labels['icons_traditional'] = '전통';
|
||||
$labels['icons_outlined'] = '개요';
|
||||
$labels['icons_material'] = '재료';
|
||||
$labels['icons_cartoon'] = '카툰';
|
||||
$labels['setting_list_icons'] = '목록의 아이콘';
|
||||
$labels['setting_button_icons'] = '버튼의 아이콘';
|
||||
$labels['setting_font_size'] = '글꼴 크기';
|
||||
$labels['font_size_xs'] = '가장 작은';
|
||||
$labels['font_size_s'] = '더 작게';
|
||||
$labels['font_size_n'] = '보통';
|
||||
$labels['font_size_l'] = '더 크게';
|
||||
$labels['font_size_xl'] = '가장 큰';
|
||||
$labels['setting_thick_font'] = '두꺼운 글꼴';
|
||||
$labels['setting_font_family'] = '글꼴 패밀리';
|
||||
$labels['setting_color'] = '색상';
|
||||
$labels['save_hint'] = '아래의 \'저장\' 버튼을 클릭하여 설정을 저장하는 것을 잊지 마세요.';
|
||||
|
40
plugins/xskin/localization/lt_LT.inc
Normal file
40
plugins/xskin/localization/lt_LT.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Sąsajos parinktys';
|
||||
$labels['disable_mobile_skin'] = 'Naudoti darbalaukio odą';
|
||||
$labels['enable_mobile_skin'] = 'Naudokite mobiliąją odą';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Odos išvaizda ir pojūtis';
|
||||
$labels['skin_look_and_feel'] = 'Odos išvaizda ir pojūtis';
|
||||
$labels['setting_icons'] = 'Ikonos';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradicinis';
|
||||
$labels['icons_outlined'] = 'Apibrėžta';
|
||||
$labels['icons_material'] = 'Medžiaga';
|
||||
$labels['icons_cartoon'] = 'Karikatūra';
|
||||
$labels['setting_list_icons'] = 'Ikonos sąrašuose';
|
||||
$labels['setting_button_icons'] = 'Mygtukų piktogramos';
|
||||
$labels['setting_font_size'] = 'Šrifto dydis';
|
||||
$labels['font_size_xs'] = 'Mažiausias';
|
||||
$labels['font_size_s'] = 'Mažesnis';
|
||||
$labels['font_size_n'] = 'Normalus';
|
||||
$labels['font_size_l'] = 'Didesnis';
|
||||
$labels['font_size_xl'] = 'Didžiausias';
|
||||
$labels['setting_thick_font'] = 'Storas šriftas';
|
||||
$labels['setting_font_family'] = 'Šriftų šeima';
|
||||
$labels['setting_color'] = 'Spalva';
|
||||
$labels['save_hint'] = 'Nepamirškite išsaugoti nustatymų spustelėdami toliau esantį mygtuką "Išsaugoti".';
|
||||
|
40
plugins/xskin/localization/lv_LV.inc
Normal file
40
plugins/xskin/localization/lv_LV.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Saskarnes opcijas';
|
||||
$labels['disable_mobile_skin'] = 'Darbvirsmas ādas lietošana';
|
||||
$labels['enable_mobile_skin'] = 'Izmantojiet mobilo ādu';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Ādas izskats un sajūta';
|
||||
$labels['skin_look_and_feel'] = 'Ādas izskats un sajūta';
|
||||
$labels['setting_icons'] = 'Ikonas';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradicionālais';
|
||||
$labels['icons_outlined'] = 'Izklāstīts';
|
||||
$labels['icons_material'] = 'Materiāls';
|
||||
$labels['icons_cartoon'] = 'Karikatūra';
|
||||
$labels['setting_list_icons'] = 'Ikonas sarakstos';
|
||||
$labels['setting_button_icons'] = 'Ikonas uz pogām';
|
||||
$labels['setting_font_size'] = 'Fonta lielums';
|
||||
$labels['font_size_xs'] = 'Mazākais';
|
||||
$labels['font_size_s'] = 'Mazāks';
|
||||
$labels['font_size_n'] = 'Parasts';
|
||||
$labels['font_size_l'] = 'Lielāks';
|
||||
$labels['font_size_xl'] = 'Lielākais';
|
||||
$labels['setting_thick_font'] = 'Biezs fonts';
|
||||
$labels['setting_font_family'] = 'Fontu ģimene';
|
||||
$labels['setting_color'] = 'Krāsa';
|
||||
$labels['save_hint'] = 'Neaizmirstiet saglabāt iestatījumus, noklikšķinot uz zemāk redzamās pogas "Saglabāt".';
|
||||
|
40
plugins/xskin/localization/nb_NO.inc
Normal file
40
plugins/xskin/localization/nb_NO.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Alternativer for grensesnitt';
|
||||
$labels['disable_mobile_skin'] = 'Bruk skrivebordsskinn';
|
||||
$labels['enable_mobile_skin'] = 'Bruk mobil hud';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Hudens utseende og følelse';
|
||||
$labels['skin_look_and_feel'] = 'Hudens utseende og følelse';
|
||||
$labels['setting_icons'] = 'Ikoner';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradisjonell';
|
||||
$labels['icons_outlined'] = 'Skissert';
|
||||
$labels['icons_material'] = 'Materiell';
|
||||
$labels['icons_cartoon'] = 'Tegneserie';
|
||||
$labels['setting_list_icons'] = 'Ikoner i lister';
|
||||
$labels['setting_button_icons'] = 'Ikoner på knapper';
|
||||
$labels['setting_font_size'] = 'Skriftstørrelse';
|
||||
$labels['font_size_xs'] = 'Minste';
|
||||
$labels['font_size_s'] = 'Mindre';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Større';
|
||||
$labels['font_size_xl'] = 'Største';
|
||||
$labels['setting_thick_font'] = 'Tykk skrift';
|
||||
$labels['setting_font_family'] = 'Skriftfamilie';
|
||||
$labels['setting_color'] = 'Farge';
|
||||
$labels['save_hint'] = 'Ikke glem å lagre innstillingene dine ved å klikke på "Lagre"-knappen nedenfor.';
|
||||
|
40
plugins/xskin/localization/nl_NL.inc
Normal file
40
plugins/xskin/localization/nl_NL.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Interface-opties';
|
||||
$labels['disable_mobile_skin'] = 'Desktop skin gebruiken';
|
||||
$labels['enable_mobile_skin'] = 'Gebruik mobiele huid';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Huidbeeld en -gevoel';
|
||||
$labels['skin_look_and_feel'] = 'Huidbeeld en -gevoel';
|
||||
$labels['setting_icons'] = 'Pictogrammen';
|
||||
$labels['icons_solid'] = 'Massief';
|
||||
$labels['icons_traditional'] = 'Traditioneel';
|
||||
$labels['icons_outlined'] = 'Geschetst';
|
||||
$labels['icons_material'] = 'Materiaal';
|
||||
$labels['icons_cartoon'] = 'Cartoon';
|
||||
$labels['setting_list_icons'] = 'Pictogrammen in lijsten';
|
||||
$labels['setting_button_icons'] = 'Pictogrammen op knoppen';
|
||||
$labels['setting_font_size'] = 'Lettergrootte';
|
||||
$labels['font_size_xs'] = 'Kleinste';
|
||||
$labels['font_size_s'] = 'Kleiner';
|
||||
$labels['font_size_n'] = 'Normaal';
|
||||
$labels['font_size_l'] = 'Groter';
|
||||
$labels['font_size_xl'] = 'Grootste';
|
||||
$labels['setting_thick_font'] = 'Dik lettertype';
|
||||
$labels['setting_font_family'] = 'Lettertype familie';
|
||||
$labels['setting_color'] = 'Kleur';
|
||||
$labels['save_hint'] = 'Vergeet niet uw instellingen op te slaan door op de knop "Opslaan" hieronder te klikken.';
|
||||
|
39
plugins/xskin/localization/pl_PL.inc
Normal file
39
plugins/xskin/localization/pl_PL.inc
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opcje interfejsu';
|
||||
$labels['disable_mobile_skin'] = 'Użyj skórki na desktop';
|
||||
$labels['enable_mobile_skin'] = 'Użycie skórki mobilnej';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Ustawienia wyglądu';
|
||||
$labels['skin_look_and_feel'] = 'Ustawienia wyglądu';
|
||||
$labels['setting_icons'] = 'Ikony';
|
||||
$labels['icons_solid'] = 'Masywne';
|
||||
$labels['icons_traditional'] = 'Tradycjonalne';
|
||||
$labels['icons_outlined'] = 'Nakreślone';
|
||||
$labels['icons_material'] = 'Materiałowe';
|
||||
$labels['icons_cartoon'] = 'Kreskówkowe';
|
||||
$labels['setting_list_icons'] = 'Ikony na listach';
|
||||
$labels['setting_button_icons'] = 'Ikony na przyciskach';
|
||||
$labels['setting_font_size'] = 'Rozmiar czcionki';
|
||||
$labels['font_size_xs'] = 'Najmniejsza';
|
||||
$labels['font_size_s'] = 'Mniejsza';
|
||||
$labels['font_size_n'] = 'Normalna';
|
||||
$labels['font_size_l'] = 'Większa';
|
||||
$labels['font_size_xl'] = 'Największa';
|
||||
$labels['setting_thick_font'] = 'Gruba czcionka';
|
||||
$labels['setting_font_family'] = 'Rodzina czcionek';
|
||||
$labels['setting_color'] = 'Kolor';
|
||||
$labels['save_hint'] = 'Nie zapomnij zapisać swoich ustawień klikając przycisk "Zapisz" poniżej.';
|
40
plugins/xskin/localization/pt_BR.inc
Normal file
40
plugins/xskin/localization/pt_BR.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opções de interface';
|
||||
$labels['disable_mobile_skin'] = 'Usar pele de mesa';
|
||||
$labels['enable_mobile_skin'] = 'Usar pele móvel';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Olhar e sentir da pele';
|
||||
$labels['skin_look_and_feel'] = 'Olhar e sentir da pele';
|
||||
$labels['setting_icons'] = 'Ícones';
|
||||
$labels['icons_solid'] = 'Sólido';
|
||||
$labels['icons_traditional'] = 'Tradicional';
|
||||
$labels['icons_outlined'] = 'Esboçado';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Desenho animado';
|
||||
$labels['setting_list_icons'] = 'Ícones em listas';
|
||||
$labels['setting_button_icons'] = 'Ícones nos botões';
|
||||
$labels['setting_font_size'] = 'Tamanho de letra';
|
||||
$labels['font_size_xs'] = 'O menor';
|
||||
$labels['font_size_s'] = 'Menor';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Aumentar';
|
||||
$labels['font_size_xl'] = 'A maior';
|
||||
$labels['setting_thick_font'] = 'Fonte espessa';
|
||||
$labels['setting_font_family'] = 'Família de fontes';
|
||||
$labels['setting_color'] = 'Cor';
|
||||
$labels['save_hint'] = 'Não se esqueça de salvar suas configurações, clicando no botão "Salvar" abaixo.';
|
||||
|
40
plugins/xskin/localization/pt_PT.inc
Normal file
40
plugins/xskin/localization/pt_PT.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opções de interface';
|
||||
$labels['disable_mobile_skin'] = 'Utilizar a skin do ambiente de trabalho';
|
||||
$labels['enable_mobile_skin'] = 'Utilizar a pele móvel';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Aspeto e sensação da pele';
|
||||
$labels['skin_look_and_feel'] = 'Aspeto e sensação da pele';
|
||||
$labels['setting_icons'] = 'Ícones';
|
||||
$labels['icons_solid'] = 'Sólido';
|
||||
$labels['icons_traditional'] = 'Tradicional';
|
||||
$labels['icons_outlined'] = 'Delineado';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Desenho animado';
|
||||
$labels['setting_list_icons'] = 'Ícones em listas';
|
||||
$labels['setting_button_icons'] = 'Ícones nos botões';
|
||||
$labels['setting_font_size'] = 'Tamanho da letra';
|
||||
$labels['font_size_xs'] = 'Mais pequeno';
|
||||
$labels['font_size_s'] = 'Mais pequeno';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Maior';
|
||||
$labels['font_size_xl'] = 'Maior';
|
||||
$labels['setting_thick_font'] = 'Tipo de letra espesso';
|
||||
$labels['setting_font_family'] = 'Família de fontes';
|
||||
$labels['setting_color'] = 'Cor';
|
||||
$labels['save_hint'] = 'Não se esqueça de guardar as suas definições clicando no botão "Guardar" abaixo.';
|
||||
|
40
plugins/xskin/localization/ro_RO.inc
Normal file
40
plugins/xskin/localization/ro_RO.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Opțiuni de interfață';
|
||||
$labels['disable_mobile_skin'] = 'Utilizați skin-ul pentru desktop';
|
||||
$labels['enable_mobile_skin'] = 'Utilizați pielea mobilă';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Aspectul și senzația pielii';
|
||||
$labels['skin_look_and_feel'] = 'Aspectul și senzația pielii';
|
||||
$labels['setting_icons'] = 'Icoane';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradițional';
|
||||
$labels['icons_outlined'] = 'Schițat';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Desen animat';
|
||||
$labels['setting_list_icons'] = 'Icoane în liste';
|
||||
$labels['setting_button_icons'] = 'Pictograme pe butoane';
|
||||
$labels['setting_font_size'] = 'Mărimea fontului';
|
||||
$labels['font_size_xs'] = 'Cel mai mic';
|
||||
$labels['font_size_s'] = 'Mai mici';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Mai mare';
|
||||
$labels['font_size_xl'] = 'Cel mai mare';
|
||||
$labels['setting_thick_font'] = 'Font gros';
|
||||
$labels['setting_font_family'] = 'Familie de fonturi';
|
||||
$labels['setting_color'] = 'Culoare';
|
||||
$labels['save_hint'] = 'Nu uitați să vă salvați setările făcând clic pe butonul "Save" de mai jos.';
|
||||
|
40
plugins/xskin/localization/ru_RU.inc
Normal file
40
plugins/xskin/localization/ru_RU.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Параметры интерфейса';
|
||||
$labels['disable_mobile_skin'] = 'Использовать вид рабочего стола';
|
||||
$labels['enable_mobile_skin'] = 'Использовать вид мобильного';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Внешний вид и ощущения кожи';
|
||||
$labels['skin_look_and_feel'] = 'Внешний вид и ощущения кожи';
|
||||
$labels['setting_icons'] = 'Иконки';
|
||||
$labels['icons_solid'] = 'Твердый';
|
||||
$labels['icons_traditional'] = 'Традиционный';
|
||||
$labels['icons_outlined'] = 'Описано';
|
||||
$labels['icons_material'] = 'Материал';
|
||||
$labels['icons_cartoon'] = 'Мультфильм';
|
||||
$labels['setting_list_icons'] = 'Значки в списках';
|
||||
$labels['setting_button_icons'] = 'Иконки на кнопках';
|
||||
$labels['setting_font_size'] = 'Размер шрифта';
|
||||
$labels['font_size_xs'] = 'Самый маленький';
|
||||
$labels['font_size_s'] = 'Меньше';
|
||||
$labels['font_size_n'] = 'Нормальный';
|
||||
$labels['font_size_l'] = 'Крупнее';
|
||||
$labels['font_size_xl'] = 'Крупнейший';
|
||||
$labels['setting_thick_font'] = 'Толстый шрифт';
|
||||
$labels['setting_font_family'] = 'Семейство шрифтов';
|
||||
$labels['setting_color'] = 'Цвет';
|
||||
$labels['save_hint'] = 'Не забудьте сохранить настройки, нажав кнопку "Сохранить" ниже.';
|
||||
|
40
plugins/xskin/localization/sk_SK.inc
Normal file
40
plugins/xskin/localization/sk_SK.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Možnosti rozhrania';
|
||||
$labels['disable_mobile_skin'] = 'Používanie kože na pracovnej ploche';
|
||||
$labels['enable_mobile_skin'] = 'Používanie mobilnej kože';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Vzhľad a pocit pokožky';
|
||||
$labels['skin_look_and_feel'] = 'Vzhľad a pocit pokožky';
|
||||
$labels['setting_icons'] = 'Ikony';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradičné';
|
||||
$labels['icons_outlined'] = 'Náčrt';
|
||||
$labels['icons_material'] = 'Materiál';
|
||||
$labels['icons_cartoon'] = 'Kreslený film';
|
||||
$labels['setting_list_icons'] = 'Ikony v zoznamoch';
|
||||
$labels['setting_button_icons'] = 'Ikony na tlačidlách';
|
||||
$labels['setting_font_size'] = 'Veľkosť písma';
|
||||
$labels['font_size_xs'] = 'Najmenší';
|
||||
$labels['font_size_s'] = 'Menšie';
|
||||
$labels['font_size_n'] = 'Normálne';
|
||||
$labels['font_size_l'] = 'Väčšie';
|
||||
$labels['font_size_xl'] = 'Najväčší';
|
||||
$labels['setting_thick_font'] = 'Hrubé písmo';
|
||||
$labels['setting_font_family'] = 'Rodina písiem';
|
||||
$labels['setting_color'] = 'Farba';
|
||||
$labels['save_hint'] = 'Nezabudnite uložiť svoje nastavenia kliknutím na tlačidlo "Uložiť" nižšie.';
|
||||
|
40
plugins/xskin/localization/sl_SI.inc
Normal file
40
plugins/xskin/localization/sl_SI.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Možnosti vmesnika';
|
||||
$labels['disable_mobile_skin'] = 'Uporaba namizne kože';
|
||||
$labels['enable_mobile_skin'] = 'Uporaba mobilne kože';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Videz in občutek kože';
|
||||
$labels['skin_look_and_feel'] = 'Videz in občutek kože';
|
||||
$labels['setting_icons'] = 'Ikone';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Tradicionalni';
|
||||
$labels['icons_outlined'] = 'Opisano';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Risanka';
|
||||
$labels['setting_list_icons'] = 'Ikone na seznamih';
|
||||
$labels['setting_button_icons'] = 'Ikone na gumbih';
|
||||
$labels['setting_font_size'] = 'Velikost pisave';
|
||||
$labels['font_size_xs'] = 'Najmanjši';
|
||||
$labels['font_size_s'] = 'Manjši';
|
||||
$labels['font_size_n'] = 'Normalno';
|
||||
$labels['font_size_l'] = 'Večji';
|
||||
$labels['font_size_xl'] = 'Največji';
|
||||
$labels['setting_thick_font'] = 'Debela pisava';
|
||||
$labels['setting_font_family'] = 'Družina pisav';
|
||||
$labels['setting_color'] = 'Barva';
|
||||
$labels['save_hint'] = 'Ne pozabite shraniti nastavitev s klikom na spodnji gumb "Shrani".';
|
||||
|
40
plugins/xskin/localization/sv_SE.inc
Normal file
40
plugins/xskin/localization/sv_SE.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Alternativ för gränssnitt';
|
||||
$labels['disable_mobile_skin'] = 'Använd desktop skin';
|
||||
$labels['enable_mobile_skin'] = 'Använd mobil hud';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Hudens utseende och känsla';
|
||||
$labels['skin_look_and_feel'] = 'Hudens utseende och känsla';
|
||||
$labels['setting_icons'] = 'Ikoner';
|
||||
$labels['icons_solid'] = 'Solid';
|
||||
$labels['icons_traditional'] = 'Traditionell';
|
||||
$labels['icons_outlined'] = 'Beskrivet';
|
||||
$labels['icons_material'] = 'Material';
|
||||
$labels['icons_cartoon'] = 'Tecknad film';
|
||||
$labels['setting_list_icons'] = 'Ikoner i listor';
|
||||
$labels['setting_button_icons'] = 'Ikoner på knappar';
|
||||
$labels['setting_font_size'] = 'Fontstorlek';
|
||||
$labels['font_size_xs'] = 'Den minsta';
|
||||
$labels['font_size_s'] = 'Mindre';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Större';
|
||||
$labels['font_size_xl'] = 'Störst';
|
||||
$labels['setting_thick_font'] = 'Tjockt typsnitt';
|
||||
$labels['setting_font_family'] = 'Fontfamilj';
|
||||
$labels['setting_color'] = 'Färg';
|
||||
$labels['save_hint'] = 'Glöm inte att spara dina inställningar genom att klicka på knappen "Spara" nedan.';
|
||||
|
40
plugins/xskin/localization/tr_TR.inc
Normal file
40
plugins/xskin/localization/tr_TR.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Arayüz Seçenekleri';
|
||||
$labels['disable_mobile_skin'] = 'Masaüstü görünümünü kullanma';
|
||||
$labels['enable_mobile_skin'] = 'Mobil cilt kullanın';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Cilt Görünümü ve Hissi';
|
||||
$labels['skin_look_and_feel'] = 'Cilt Görünümü ve Hissi';
|
||||
$labels['setting_icons'] = 'Simgeler';
|
||||
$labels['icons_solid'] = 'Katı';
|
||||
$labels['icons_traditional'] = 'Geleneksel';
|
||||
$labels['icons_outlined'] = 'Ana hatlarıyla';
|
||||
$labels['icons_material'] = 'Malzeme';
|
||||
$labels['icons_cartoon'] = 'Karikatür';
|
||||
$labels['setting_list_icons'] = 'Listelerdeki simgeler';
|
||||
$labels['setting_button_icons'] = 'Düğmelerdeki simgeler';
|
||||
$labels['setting_font_size'] = 'Yazı tipi boyutu';
|
||||
$labels['font_size_xs'] = 'En küçük';
|
||||
$labels['font_size_s'] = 'Daha küçük';
|
||||
$labels['font_size_n'] = 'Normal';
|
||||
$labels['font_size_l'] = 'Daha büyük';
|
||||
$labels['font_size_xl'] = 'En büyük';
|
||||
$labels['setting_thick_font'] = 'Kalın yazı tipi';
|
||||
$labels['setting_font_family'] = 'Yazı tipi ailesi';
|
||||
$labels['setting_color'] = 'Renk';
|
||||
$labels['save_hint'] = 'Aşağıdaki "Kaydet" düğmesine tıklayarak ayarlarınızı kaydetmeyi unutmayın.';
|
||||
|
39
plugins/xskin/localization/uk_UA.inc
Normal file
39
plugins/xskin/localization/uk_UA.inc
Normal file
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = 'Параметри інтерфейсу';
|
||||
$labels['disable_mobile_skin'] = 'Використовуйте скін робочого столу';
|
||||
$labels['enable_mobile_skin'] = 'Використовуйте скін мобільного';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = 'Вигляд і відчуття шкіри';
|
||||
$labels['skin_look_and_feel'] = 'Вигляд і відчуття шкіри';
|
||||
$labels['setting_icons'] = 'Ікони';
|
||||
$labels['icons_solid'] = 'Твердий';
|
||||
$labels['icons_traditional'] = 'Традиційний';
|
||||
$labels['icons_outlined'] = 'Накреслений';
|
||||
$labels['icons_material'] = 'Матеріальний';
|
||||
$labels['icons_cartoon'] = 'Мультяшний';
|
||||
$labels['setting_list_icons'] = 'Значки в списках';
|
||||
$labels['setting_button_icons'] = 'Значки на кнопках';
|
||||
$labels['setting_font_size'] = 'Розмір шрифту';
|
||||
$labels['font_size_xs'] = 'Найменший';
|
||||
$labels['font_size_s'] = 'Менший';
|
||||
$labels['font_size_n'] = 'Нормальний';
|
||||
$labels['font_size_l'] = 'Більший';
|
||||
$labels['font_size_xl'] = 'Найбільший';
|
||||
$labels['setting_thick_font'] = 'Щільний шрифт';
|
||||
$labels['setting_font_family'] = 'Сімейство шрифтів';
|
||||
$labels['setting_color'] = 'Колір';
|
||||
$labels['save_hint'] = 'Не забудьте зберегти свої налаштування, натиснувши кнопку «Зберегти» нижче.';
|
40
plugins/xskin/localization/zh_CN.inc
Normal file
40
plugins/xskin/localization/zh_CN.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = '接口选项';
|
||||
$labels['disable_mobile_skin'] = '使用桌面皮肤';
|
||||
$labels['enable_mobile_skin'] = '使用移动皮肤';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = '皮肤外观与触感';
|
||||
$labels['skin_look_and_feel'] = '皮肤外观与触感';
|
||||
$labels['setting_icons'] = '图标';
|
||||
$labels['icons_solid'] = '固体';
|
||||
$labels['icons_traditional'] = '传统';
|
||||
$labels['icons_outlined'] = '概述';
|
||||
$labels['icons_material'] = '材料';
|
||||
$labels['icons_cartoon'] = '卡通';
|
||||
$labels['setting_list_icons'] = '列表中的图标';
|
||||
$labels['setting_button_icons'] = '按钮上的图标';
|
||||
$labels['setting_font_size'] = '字体大小';
|
||||
$labels['font_size_xs'] = '最小';
|
||||
$labels['font_size_s'] = '较小';
|
||||
$labels['font_size_n'] = '正常';
|
||||
$labels['font_size_l'] = '更大';
|
||||
$labels['font_size_xl'] = '最大';
|
||||
$labels['setting_thick_font'] = '粗字体';
|
||||
$labels['setting_font_family'] = '字体系列';
|
||||
$labels['setting_color'] = '颜色';
|
||||
$labels['save_hint'] = '别忘了点击下面的 "保存 "按钮保存设置。';
|
||||
|
40
plugins/xskin/localization/zh_TW.inc
Normal file
40
plugins/xskin/localization/zh_TW.inc
Normal file
@ -0,0 +1,40 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
$labels = [];
|
||||
|
||||
// larry based
|
||||
|
||||
$labels['interface_options'] = '介面選項';
|
||||
$labels['disable_mobile_skin'] = '使用桌面皮膚';
|
||||
$labels['enable_mobile_skin'] = '使用行動皮膚';
|
||||
|
||||
// elastic based
|
||||
|
||||
$labels['skin_look_and_feel_shortcut'] = '肌膚外觀與觸感';
|
||||
$labels['skin_look_and_feel'] = '肌膚外觀與觸感';
|
||||
$labels['setting_icons'] = '圖示';
|
||||
$labels['icons_solid'] = '堅固';
|
||||
$labels['icons_traditional'] = '傳統';
|
||||
$labels['icons_outlined'] = '概述';
|
||||
$labels['icons_material'] = '材質';
|
||||
$labels['icons_cartoon'] = '卡通';
|
||||
$labels['setting_list_icons'] = '清單中的圖示';
|
||||
$labels['setting_button_icons'] = '按鈕上的圖示';
|
||||
$labels['setting_font_size'] = '字型大小';
|
||||
$labels['font_size_xs'] = '最小';
|
||||
$labels['font_size_s'] = '較小';
|
||||
$labels['font_size_n'] = '正常';
|
||||
$labels['font_size_l'] = '較大';
|
||||
$labels['font_size_xl'] = '最大';
|
||||
$labels['setting_thick_font'] = '粗體字';
|
||||
$labels['setting_font_family'] = '字型系列';
|
||||
$labels['setting_color'] = '顏色';
|
||||
$labels['save_hint'] = '別忘了按一下下方的「儲存」按鈕來儲存您的設定。';
|
||||
|
1
plugins/xskin/version.js
Normal file
1
plugins/xskin/version.js
Normal file
@ -0,0 +1 @@
|
||||
const version = '1.9.2 (2024-11-08)';
|
866
plugins/xskin/xskin.php
Normal file
866
plugins/xskin/xskin.php
Normal file
@ -0,0 +1,866 @@
|
||||
<?php
|
||||
/**
|
||||
* Roundcube Plus Skin plugin.
|
||||
*
|
||||
* Copyright 2019, Tecorama LLC.
|
||||
*
|
||||
* @license Commercial. See the LICENSE file for details.
|
||||
*/
|
||||
|
||||
require_once(__DIR__ . "/../xframework/common/Plugin.php");
|
||||
|
||||
class xskin extends XFramework\Plugin
|
||||
{
|
||||
protected bool $settings = false;
|
||||
private string $lookAndFeelUrl = "?_task=settings&_action=preferences&_section=xskin";
|
||||
private array $disablePluginsConfig = [];
|
||||
|
||||
public function initialize()
|
||||
{
|
||||
$this->handleQuickLanguageChange();
|
||||
$this->handleQuickSkinChange();
|
||||
$this->addSkinInterfaceMenuItem();
|
||||
$this->addLanguageInterfaceMenuItem();
|
||||
|
||||
// include scripts (doing it here so the quick skin change works in elastic/larry)
|
||||
$this->includeAsset("assets/scripts/xskin.min.js");
|
||||
|
||||
// return if we're not running a Roundcube Plus skin (but add custom css so it applies to all skins)
|
||||
if (!$this->rcpSkin) {
|
||||
$this->includeCustomCss();
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->elastic) {
|
||||
$this->disablePluginsConfig = $this->rcmail->config->get("disable_plugins_on_mobile", []);
|
||||
}
|
||||
|
||||
// add hooks
|
||||
$this->add_hook("startup", [$this, "startup"]);
|
||||
$this->add_hook("config_get", [$this, $this->elastic ? "elasticGetConfig" : "larryGetConfig"]);
|
||||
$this->add_hook("render_page", [$this, $this->elastic ? "elasticRenderPage" : "larryRenderPage"]);
|
||||
|
||||
if ($this->rcmail->task == "settings") {
|
||||
$this->add_hook('preferences_sections_list', [$this, 'preferencesSectionsList']);
|
||||
$this->add_hook("preferences_list", [$this, "preferencesList"]);
|
||||
$this->add_hook("preferences_save", [$this, "preferencesSave"]);
|
||||
}
|
||||
|
||||
// include assets
|
||||
$this->includeAsset("assets/scripts/xskin.min.js");
|
||||
$this->includeAsset("assets/styles/styles.css");
|
||||
$this->includeSkinConfig();
|
||||
|
||||
if ($this->skinBase == "larry") {
|
||||
$this->larrySetSkin();
|
||||
$this->addDisableMobileInterfaceMenuItem();
|
||||
|
||||
if ($this->rcmail->output->get_env("xskin_type") == "mobile") {
|
||||
$this->includeAsset("assets/scripts/hammer.min.js");
|
||||
$this->includeAsset("assets/scripts/jquery.hammer.js");
|
||||
$this->includeAsset("assets/scripts/larry_mobile.min.js");
|
||||
$this->includeAsset("assets/styles/larry_mobile.css");
|
||||
$this->includeAsset("../../skins/$this->skin/assets/styles/mobile.css");
|
||||
} else {
|
||||
$this->includeAsset("assets/scripts/larry_desktop.min.js");
|
||||
$this->includeAsset("assets/styles/larry_desktop.css");
|
||||
$this->includeAsset("../../skins/$this->skin/assets/styles/desktop.css");
|
||||
}
|
||||
} else {
|
||||
$this->includeAsset("../../skins/$this->skin/assets/styles/styles.css");
|
||||
$this->includeAsset("../../skins/$this->skin/assets/scripts/scripts.min.js");
|
||||
}
|
||||
|
||||
// removed the cairo font (included with previous versions) because of line spacing issues - fix any old font settings
|
||||
if ($this->rcmail->config->get("xskin_font_family_$this->skin") == "cairo") {
|
||||
$this->rcmail->config->set("xskin_font_family_$this->skin", "noto-sans");
|
||||
}
|
||||
|
||||
// if remote assets are disabled, set the font to roboto (loaded from elastic) and don't load fonts from google
|
||||
if ($this->rcmail->config->get("disable_remote_skin_fonts")) {
|
||||
// set these to a value that doesn't exist in _options.scss so it won't set the font
|
||||
$this->rcmail->config->set("xskin_font_family", "inherited-local");
|
||||
$this->rcmail->config->set("xskin_font_family_$this->skin", "inherited-local");
|
||||
} else {
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Roboto&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Noto+Sans&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Ubuntu&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Montserrat+Alternates&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Sarala&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Quattrocento&display=block");
|
||||
$this->include_stylesheet("https://fonts.googleapis.com/css2?family=Merienda&display=block");
|
||||
}
|
||||
|
||||
$this->ensureSkinLogo();
|
||||
$this->setPreviewBranding();
|
||||
$this->includeCustomCss();
|
||||
}
|
||||
|
||||
public function startup()
|
||||
{
|
||||
if ($this->elastic) {
|
||||
// add labels to env (for creating the mobile interface in js)
|
||||
$this->rcmail->output->add_label("login");
|
||||
} else {
|
||||
// litecube is the only skin not using font icons in desktop; but it does use it on mobile
|
||||
if ($this->skin == "litecube" && $this->rcmail->output->get_env("xmobile")) {
|
||||
$this->rcmail->config->set("xlarry_font_icons", true);
|
||||
}
|
||||
|
||||
// add larry-based classes to body
|
||||
$bodyClasses = ["x" . $this->rcmail->output->get_env("xskin_type")];
|
||||
$this->rcmail->config->get("xlarry_font_icons") && ($bodyClasses[] = "xlarry-font-icons");
|
||||
$this->rcmail->config->get("xlarry_square_ui") && ($bodyClasses[] = "xlarry-square-ui");
|
||||
$this->rcmail->config->get("xlarry_light_ui") && ($bodyClasses[] = "xlarry-light-ui");
|
||||
$this->rcmail->task == "logout" && ($bodyClasses[] = "login-page");
|
||||
$this->addBodyClass(implode(" ", $bodyClasses));
|
||||
|
||||
// add labels to env (for creating the mobile interface in js)
|
||||
$this->rcmail->output->add_label("login", "folders", "search", "attachment", "section", "options");
|
||||
|
||||
// disable composing in html on mobile devices unless config option set to allow
|
||||
if ($this->rcmail->output->get_env("xmobile") && !$this->rcmail->config->get("allow_mobile_html_composing")) {
|
||||
global $CONFIG;
|
||||
$CONFIG['htmleditor'] = false;
|
||||
}
|
||||
}
|
||||
|
||||
$this->rcmail->output->set_env("rcp_skin", $this->rcpSkin);
|
||||
$this->addClasses();
|
||||
}
|
||||
|
||||
/**
|
||||
* Hook retrieving config options (including user settings).
|
||||
*/
|
||||
public function elasticGetConfig($arg)
|
||||
{
|
||||
// Substitute the skin name retrieved from the config file with "elastic" for the plugins that treat
|
||||
// elastic-based skins as "elastic."
|
||||
if (empty($arg['name']) || $arg['name'] != "skin" || !array_key_exists(str_replace("_elastic", "", $arg['result']), $this->getSkins())) {
|
||||
return $arg;
|
||||
}
|
||||
|
||||
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 4);
|
||||
|
||||
// this is a call from the rc core, let's hope they fix this
|
||||
if (!empty($trace[3]['class']) && $trace[3]['class'] == "jqueryui") {
|
||||
$arg['result'] = "elastic";
|
||||
}
|
||||
|
||||
// check if the calling file is in the list of plugins to fix or it's a unit test and set the skin to elastic
|
||||
$fixPlugins = $this->rcmail->config->get("fix_plugins", []);
|
||||
if (!empty($trace[3]['file']) &&
|
||||
(in_array(basename(dirname($trace[3]['file'])), $fixPlugins) || basename($trace[3]['file']) == "TestCase.php")
|
||||
) {
|
||||
$arg['result'] = "elastic";
|
||||
}
|
||||
|
||||
return $arg;
|
||||
}
|
||||
|
||||
function larryGetConfig($arg)
|
||||
{
|
||||
if ($this->rcmail->output->get_env("xskin_type") == "mobile") {
|
||||
// disable unwanted plugins on mobile devices
|
||||
$disablePlugins = ["preview_pane", "google_ads", "threecol"];
|
||||
|
||||
if (!empty($this->larryDisabledPluginsConfig) && is_array($this->larryDisabledPluginsConfig)) {
|
||||
$disablePlugins = array_merge($disablePlugins, $this->larryDisabledPluginsConfig);
|
||||
}
|
||||
|
||||
foreach ($disablePlugins as $val) {
|
||||
if (isset($arg['name']) && strpos($arg['name'], $val) !== false) {
|
||||
$arg['result'] = false;
|
||||
return $arg;
|
||||
}
|
||||
}
|
||||
|
||||
// set the layout to list on mobile devices so it can be displayed properly
|
||||
// IMPORTANT: we have to unset $_GET['_layout'] because on RC 1.4 setting $arg here results in adding
|
||||
// the new layout value to GET, which is then picked up and saved into the database by
|
||||
// program/steps/mail/list.inc. So the 'list' value we set here for mobile is then applied to desktop
|
||||
// as well. Unsetting GET fixes the issue.
|
||||
if (isset($arg['name']) && $arg['name'] == "layout") {
|
||||
$arg['result'] = "list";
|
||||
unset($_GET['_layout']);
|
||||
return $arg;
|
||||
}
|
||||
}
|
||||
|
||||
// Substitute the skin name retrieved from the config file with "larry" for the plugins that treat larry-based
|
||||
// skins as "classic."
|
||||
if (empty($arg['name']) || $arg['name'] != "skin" || !$this->isRcpSkin($arg['result'])) {
|
||||
return $arg;
|
||||
}
|
||||
|
||||
$trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 4);
|
||||
|
||||
// check if the calling file is in the list of plugins to fix or it's a unit test and set the skin to larry
|
||||
$fixPlugins = $this->rcmail->config->get("fix_plugins", []);
|
||||
if (!empty($trace[3]['file']) &&
|
||||
(in_array(basename(dirname($trace[3]['file'])), $fixPlugins) || basename($trace[3]['file']) == "TestCase.php")
|
||||
) {
|
||||
$arg['result'] = "larry";
|
||||
}
|
||||
|
||||
return $arg;
|
||||
}
|
||||
|
||||
public function elasticRenderPage($arg)
|
||||
{
|
||||
$this->addLoginRcpBranding($arg);
|
||||
return $arg;
|
||||
}
|
||||
|
||||
public function larryRenderPage($arg)
|
||||
{
|
||||
// check if it's an error page
|
||||
if (strpos($arg['content'], "uibox centerbox errorbox")) {
|
||||
return;
|
||||
}
|
||||
|
||||
$this->addLoginRcpBranding($arg);
|
||||
|
||||
if ($this->rcmail->task != "login" && $this->rcmail->task != "logout") {
|
||||
$this->larryModifyPageHtml($arg);
|
||||
}
|
||||
|
||||
return $arg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Modifies the html of the non-login Roundcube pages.
|
||||
* Unit tested via renderPage()
|
||||
*
|
||||
* @param array $arg
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function larryModifyPageHtml(array &$arg)
|
||||
{
|
||||
// check if it's an error page
|
||||
if (strpos($arg['content'], "uibox centerbox errorbox")) {
|
||||
return;
|
||||
}
|
||||
|
||||
// if using a desktop skin on mobile devices after clicked "use desktop skin" show a link to revert to
|
||||
// mobile skin in the top bar
|
||||
if (isset($_COOKIE['rcs_disable_mobile_skin'])) {
|
||||
$this->replace(
|
||||
'<div class="topleft">',
|
||||
'<div class="topleft">'.
|
||||
html::a(
|
||||
[
|
||||
"class" => "enable-mobile-skin",
|
||||
"href" => "javascript:void(0)",
|
||||
"onclick" => "xskin.enableMobileSkin()",
|
||||
],
|
||||
rcube::Q($this->rcmail->gettext("xskin.enable_mobile_skin"))
|
||||
),
|
||||
$arg['content']
|
||||
);
|
||||
}
|
||||
|
||||
// add the toolbar-bg element that is used by alpha
|
||||
$this->replace(
|
||||
'<div id="mainscreencontent',
|
||||
'<div id="toolbar-bg"></div><div id="mainscreencontent',
|
||||
$arg['content']
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the skin config files from <skin>/config.inc.php to the main config, if the file exists.
|
||||
*/
|
||||
protected function includeSkinConfig()
|
||||
{
|
||||
// include the default setting values from the skin's meta.json in the config
|
||||
// values from meta.json get automatically included in the config, but at the same time they're included
|
||||
// in dontoverride, which is not good because we want admins to be able to include/exclude it from dontoverride
|
||||
// so we set the default values in meta as 'xskin_default_*' and here we translate them to 'xskin_*'
|
||||
// this way the values 'xskin_*' can be used normally in dontoverride
|
||||
foreach ($this->rcmail->config->all() as $key => $val) {
|
||||
if (strpos($key, "xskin_default") === 0) {
|
||||
$this->rcmail->config->set("xskin" . substr($key, 13), $val);
|
||||
}
|
||||
}
|
||||
|
||||
$file = RCUBE_INSTALL_PATH . "skins/" . $this->skin . "/config.inc.php";
|
||||
|
||||
if (!file_exists($file)) {
|
||||
return;
|
||||
}
|
||||
|
||||
$config = [];
|
||||
@include($file);
|
||||
|
||||
if (is_array($config)) {
|
||||
foreach ($config as $key => $val) {
|
||||
$this->rcmail->config->set($key, $val);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the current skin and color and fills in the correct properties for the desktop, tablet and phone skin.
|
||||
* Larry only.
|
||||
*/
|
||||
public function larrySetSkin()
|
||||
{
|
||||
// check if already set
|
||||
if ($this->rcmail->output->get_env("xskin")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($this->rcmail->output->get_env("xphone")) {
|
||||
$skinType = "mobile";
|
||||
} else if ($this->rcmail->output->get_env("xtablet")) {
|
||||
$skinType = "mobile";
|
||||
} else {
|
||||
$skinType = "desktop";
|
||||
}
|
||||
|
||||
// litecube-f doesn't support mobile, set the device to desktop to avoid errors
|
||||
// also set device to desktop if mobile interface is disabled in config
|
||||
if ($this->skin == "litecube-f" || $this->rcmail->config->get("disable_mobile_interface")) {
|
||||
$this->setDevice(true);
|
||||
$skinType = "desktop";
|
||||
}
|
||||
|
||||
// change the skin in the environment
|
||||
if (isset($GLOBALS['OUTPUT']) && method_exists($GLOBALS['OUTPUT'], "set_skin")) {
|
||||
$GLOBALS['OUTPUT']->set_skin($this->skin);
|
||||
}
|
||||
|
||||
// if running a mobile skin, remove the apps menu before it gets added using js
|
||||
if ($skinType != "desktop") {
|
||||
$this->setJsVar("appsMenu", "");
|
||||
}
|
||||
|
||||
// sent environment variables
|
||||
$this->rcmail->output->set_env("xskin", $this->skin);
|
||||
$this->rcmail->output->set_env("xskin_type", $skinType);
|
||||
$this->rcmail->output->set_env("rcp_skin", $this->rcpSkin);
|
||||
}
|
||||
|
||||
protected function addLanguageInterfaceMenuItem()
|
||||
{
|
||||
if ($this->getDontOverride("language") || $this->rcmail->config->get("disable_menu_languages")) {
|
||||
return;
|
||||
}
|
||||
|
||||
$languages = $this->rcmail->list_languages();
|
||||
asort($languages);
|
||||
|
||||
$select = new html_select(["onchange" => "xskin.quickLanguageChange()", "class"=>"form-control", "name" => "quick-language-change"]);
|
||||
$select->add(array_values($languages), array_keys($languages));
|
||||
|
||||
$this->addToInterfaceMenu(
|
||||
"quick-language-change",
|
||||
html::div(
|
||||
["id" => "quick-language-change", "class" => "section"],
|
||||
html::div(["class" => "section-title"], $this->gettext("language")) . $select->show($this->rcmail->user->language)
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
public function preferencesSectionsList(array $arg): array
|
||||
{
|
||||
$arg['list']['xskin'] = ['id' => 'xskin', 'section' => $this->gettext("skin_look_and_feel")];
|
||||
return $arg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Replaces the preference skin selection with a dialog-based selection that allows specifying separate desktop
|
||||
* table and phone skins.
|
||||
*
|
||||
* @param array $arg
|
||||
* @return array
|
||||
*/
|
||||
public function preferencesList(array $arg): array
|
||||
{
|
||||
if ($arg['section'] != 'xskin' || $this->getDontOverride("look_and_feel")) {
|
||||
return $arg;
|
||||
}
|
||||
|
||||
$arg['blocks']['skin_look_and_feel']['name'] = $this->gettext("skin_look_and_feel");
|
||||
$skin = $this->skin;
|
||||
|
||||
if (!$this->getDontOverride("xskin_icons") && ($this->elastic || $this->rcmail->config->get("xlarry_font_icons"))) {
|
||||
$this->getSettingSelect(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"icons_$skin",
|
||||
[
|
||||
$this->gettext("icons_solid") => "solid",
|
||||
$this->gettext("icons_traditional") => "traditional",
|
||||
$this->gettext("icons_outlined") => "outlined",
|
||||
$this->gettext("icons_material") => "material",
|
||||
$this->gettext("icons_cartoon") => "cartoon",
|
||||
],
|
||||
$this->getCurrentIcons(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xicons', 'html')"],
|
||||
"icons"
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->getDontOverride("xskin_list_icons") && ($this->elastic || $this->rcmail->config->get("xlarry_font_icons"))) {
|
||||
$this->getSettingCheckbox(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"list_icons_$skin",
|
||||
$this->getCurrentListIcons(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xlist-icons', 'body')"],
|
||||
"list_icons"
|
||||
);
|
||||
}
|
||||
|
||||
// larry-based skins don't have icons on buttons, disabling this option for larry
|
||||
if (!$this->getDontOverride("xskin_button_icons") && $this->elastic) {
|
||||
$this->getSettingCheckbox(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"button_icons_$skin",
|
||||
$this->getCurrentButtonIcons(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xbutton-icons', 'body')"],
|
||||
"button_icons"
|
||||
);
|
||||
}
|
||||
|
||||
// if remote assets are disabled, don't give the users the choice of a font because they load from google
|
||||
if (!$this->getDontOverride("xskin_font_family") && !$this->rcmail->config->get("disable_remote_skin_fonts")) {
|
||||
$fonts = [];
|
||||
$fontList = ["Arial", "Courier", "Merienda", "Montserrat", "Noto Sans", "Quattrocento", "Sarala", "Roboto", "Times", "Ubuntu"];
|
||||
|
||||
foreach ($fontList as $font) {
|
||||
$fonts[$font] = strtolower(str_replace(" ", "-", $font));
|
||||
}
|
||||
|
||||
ksort($fonts);
|
||||
|
||||
$this->getSettingSelect(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"font_family_$skin",
|
||||
$fonts,
|
||||
$this->getCurrentFontFamily(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xfont-family', 'html')"],
|
||||
"font_family"
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->getDontOverride("xskin_font_size")) {
|
||||
$this->getSettingSelect(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"font_size_$skin",
|
||||
[
|
||||
$this->gettext("font_size_xs") => "xs",
|
||||
$this->gettext("font_size_s") => "s",
|
||||
$this->gettext("font_size_n") => "n",
|
||||
$this->gettext("font_size_l") => "l",
|
||||
$this->gettext("font_size_xl") => "xl",
|
||||
],
|
||||
$this->getCurrentFontSize(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xfont-size', 'html')"],
|
||||
"font_size"
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->getDontOverride("xskin_thick_font")) {
|
||||
$this->getSettingCheckbox(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"thick_font_$skin",
|
||||
$this->getCurrentThickFont(),
|
||||
false,
|
||||
["onchange" => "xskin.applySetting(this, 'xthick-font', 'html')"],
|
||||
"thick_font"
|
||||
);
|
||||
}
|
||||
|
||||
if (!$this->getDontOverride("xskin_color")) {
|
||||
$colorBoxes = "";
|
||||
foreach ($this->rcmail->config->get("xskin_colors") as $color) {
|
||||
$colorBoxes .= html::a(
|
||||
[
|
||||
"class" => "color-box",
|
||||
"onclick" => "xskin.applySetting('#xcolor-input', 'xcolor', 'body', '$color')",
|
||||
"style" => "background:#$color !important",
|
||||
],
|
||||
" "
|
||||
);
|
||||
}
|
||||
|
||||
$this->addSetting(
|
||||
$arg,
|
||||
"skin_look_and_feel",
|
||||
"color_$skin",
|
||||
$colorBoxes . "<input id='xcolor-input' type='hidden' name='color_$skin' value='" .
|
||||
$this->getCurrentColor() . "' />",
|
||||
"",
|
||||
"color"
|
||||
);
|
||||
}
|
||||
|
||||
$arg['blocks']["skin_look_and_feel"]['options']["save_hint"] = [
|
||||
"title" => "",
|
||||
"content" => "<span class='xsave-hint'>" . rcube::Q($this->gettext("save_hint")) . "</span>" .
|
||||
"<script>xskin.updateIFrameClasses();</script>"
|
||||
];
|
||||
|
||||
return $arg;
|
||||
}
|
||||
|
||||
/**
|
||||
* Saves the skin selection preferences.
|
||||
*
|
||||
* @param array $arg
|
||||
* @return array
|
||||
*/
|
||||
public function preferencesSave(array $arg): array
|
||||
{
|
||||
if ($arg['section'] == "xskin") {
|
||||
$this->saveSetting($arg, "icons_$this->skin");
|
||||
$this->saveSetting($arg, "list_icons_$this->skin");
|
||||
$this->saveSetting($arg, "button_icons_$this->skin");
|
||||
$this->saveSetting($arg, "font_family_$this->skin");
|
||||
$this->saveSetting($arg, "font_size_$this->skin");
|
||||
$this->saveSetting($arg, "thick_font_$this->skin");
|
||||
$this->saveSetting($arg, "color_$this->skin");
|
||||
$this->addClasses();
|
||||
}
|
||||
|
||||
return $arg;
|
||||
}
|
||||
|
||||
public function addSkinInterfaceMenuItem()
|
||||
{
|
||||
if ($this->getDontOverride("skin") || $this->rcmail->config->get("disable_menu_skins")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if ($html = $this->getShortcutSkinsHtml()) {
|
||||
$this->addToInterfaceMenu(
|
||||
"skin-options",
|
||||
html::div(
|
||||
["id" => "xskin-options", "class" => "section"],
|
||||
html::div(["class" => "section-title"], $this->gettext("skin")) . $html
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
protected function getShortcutSkinsHtml()
|
||||
{
|
||||
if (count($this->getInstalledSkins()) <= 1 ||
|
||||
$this->getDontOverride("skin") ||
|
||||
$this->rcmail->config->get("disable_menu_skins")
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$select = new html_select(["onchange" => "xskin.quickSkinChange()", "class" => "form-control", "name" => "quick-skin-change"]);
|
||||
$added = 0;
|
||||
|
||||
foreach ($this->getInstalledSkins() as $installedSkin) {
|
||||
if (array_key_exists($installedSkin, $this->skins)) {
|
||||
$select->add($this->skins[$installedSkin], $installedSkin);
|
||||
$added++;
|
||||
} else if ($installedSkin == "elastic" || $installedSkin == "larry") {
|
||||
$select->add(ucfirst($installedSkin), $installedSkin);
|
||||
$added++;
|
||||
}
|
||||
}
|
||||
|
||||
if ($added > 1) {
|
||||
if ($this->rcpSkin) {
|
||||
$lookAndFeelHtml = html::div(
|
||||
["id" => "look-and-feel-shortcut"],
|
||||
html::a(
|
||||
["href" => $this->lookAndFeelUrl, "class" => "btn btn-sm btn-success"],
|
||||
rcube::Q($this->gettext("skin_look_and_feel_shortcut"))
|
||||
)
|
||||
);
|
||||
} else {
|
||||
$lookAndFeelHtml = "";
|
||||
}
|
||||
|
||||
return html::div(["id" => "xshortcut-skins", "class" => "shortcut-item"], $select->show($this->skin)) . $lookAndFeelHtml;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
protected function getCurrentColor()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_color")) {
|
||||
return $this->rcmail->config->get("xskin_color");
|
||||
}
|
||||
|
||||
$color = $this->rcmail->config->get(
|
||||
"xskin_color_" . $this->skin,
|
||||
$this->rcmail->config->get("xskin_color", "")
|
||||
);
|
||||
|
||||
// have to do strlen because in_array thinks that "0" == "000000"
|
||||
$colors = $this->rcmail->config->get("xskin_colors");
|
||||
|
||||
if (strlen($color) != 6 || !is_array($colors) || !in_array($color, $colors)) {
|
||||
$color = $this->rcmail->config->get("xskin_color");
|
||||
}
|
||||
|
||||
return $color;
|
||||
}
|
||||
|
||||
protected function getCurrentFontFamily()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_font_family")) {
|
||||
return $this->rcmail->config->get("xskin_font_family");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_font_family_$this->skin", $this->rcmail->config->get("xskin_font_family"));
|
||||
}
|
||||
|
||||
protected function getCurrentFontSize()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_font_size")) {
|
||||
return $this->rcmail->config->get("xskin_font_size");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_font_size_$this->skin", $this->rcmail->config->get("xskin_font_size"));
|
||||
}
|
||||
|
||||
protected function getCurrentThickFont()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_thick_font")) {
|
||||
return $this->rcmail->config->get("xskin_thick_font");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_thick_font_$this->skin", $this->rcmail->config->get("xskin_thick_font"));
|
||||
}
|
||||
|
||||
protected function getCurrentIcons()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_icons")) {
|
||||
return $this->rcmail->config->get("xskin_icons");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_icons_$this->skin", $this->rcmail->config->get("xskin_icons"));
|
||||
}
|
||||
|
||||
protected function getCurrentListIcons()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_list_icons")) {
|
||||
return $this->rcmail->config->get("xskin_list_icons");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_list_icons_$this->skin", $this->rcmail->config->get("xskin_list_icons"));
|
||||
}
|
||||
|
||||
protected function getCurrentButtonIcons()
|
||||
{
|
||||
if ($this->getDontOverride("xskin_button_icons")) {
|
||||
return $this->rcmail->config->get("xskin_button_icons");
|
||||
}
|
||||
|
||||
return $this->rcmail->config->get("xskin_button_icons_$this->skin", $this->rcmail->config->get("xskin_button_icons"));
|
||||
}
|
||||
|
||||
protected function addClasses()
|
||||
{
|
||||
// add html classes
|
||||
$classes = [
|
||||
"xfont-family-" . $this->getCurrentFontFamily(),
|
||||
"xfont-size-" . $this->getCurrentFontSize(),
|
||||
"xthick-font-" . ($this->getCurrentThickFont() ? "yes" : "no"),
|
||||
];
|
||||
|
||||
$this->addHtmlClass(implode(" ", $classes));
|
||||
|
||||
// add body classes
|
||||
$classes = [
|
||||
"{$this->rcmail->task}-page",
|
||||
"xskin",
|
||||
"skin-" . $this->skin,
|
||||
"xcolor-" . $this->getCurrentColor(),
|
||||
"xlist-icons-" . ($this->getCurrentListIcons() ? "yes" : "no"),
|
||||
"xbutton-icons-" . ($this->getCurrentButtonIcons() ? "yes" : "no"),
|
||||
];
|
||||
|
||||
// add body classes from skin's meta.json
|
||||
$classes[] = $this->rcmail->config->get("xbody-classes", "");
|
||||
|
||||
if ($this->rcmail->task == "logout") {
|
||||
$classes[] = "login-page";
|
||||
}
|
||||
|
||||
$this->addBodyClass(implode(" ", $classes));
|
||||
|
||||
// this needs to be added to html so the icon() scss function works properly
|
||||
$this->addHtmlClass("xicons-" . $this->getCurrentIcons());
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the Roundcube Plus icon to the login page.
|
||||
*
|
||||
* @param $arg
|
||||
*/
|
||||
protected function addLoginRcpBranding(&$arg)
|
||||
{
|
||||
if ($this->rcmail->task != "login" && $this->rcmail->task != "logout") {
|
||||
return;
|
||||
}
|
||||
|
||||
if (!$this->rcmail->config->get("remove_vendor_branding")) {
|
||||
$this->replace(
|
||||
"</body>",
|
||||
html::a(
|
||||
[
|
||||
"id" => "vendor-branding",
|
||||
"href" => "https://roundcubeplus.com",
|
||||
"target" => "_blank",
|
||||
"title" => "More Roundcube skins and plugins at roundcubeplus.com",
|
||||
],
|
||||
html::span([], "+")
|
||||
).
|
||||
"</body>",
|
||||
$arg['content']
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Performs string replacement with error checking. If the string to search for cannot be found it exits with an
|
||||
* error message.
|
||||
*
|
||||
* @param string $search
|
||||
* @param string $replace
|
||||
* @param string $subject
|
||||
* @param string|int $errorNumber
|
||||
* @return int
|
||||
* @codeCoverageIgnore
|
||||
*/
|
||||
protected function replace(string $search, string $replace, string &$subject, $errorNumber = ""): int
|
||||
{
|
||||
$count = 0;
|
||||
$subject = str_replace($search, $replace, $subject, $count);
|
||||
|
||||
if ($errorNumber && !$count) {
|
||||
exit(
|
||||
"<p>ERROR $errorNumber: Roundcube is not running properly or it is not compatible with the Roundcube ".
|
||||
"Plus skin. Disable the xskin plugin in config.inc.php and refresh this page to check for errors.</p>"
|
||||
);
|
||||
}
|
||||
|
||||
return $count;
|
||||
}
|
||||
|
||||
protected function handleQuickSkinChange()
|
||||
{
|
||||
// set skin by a url parameter - this is used by the quick skin change select option in the popup
|
||||
if (($skin = rcube_utils::get_input_value('skin', rcube_utils::INPUT_GET)) &&
|
||||
!empty($this->userId) &&
|
||||
!$this->getDontOverride("skin") &&
|
||||
($pref = $this->rcmail->user->get_prefs())
|
||||
) {
|
||||
$pref['skin'] = $skin;
|
||||
$this->rcmail->user->save_prefs($pref);
|
||||
header("Refresh:0; url=" . XFramework\Utils::removeVarsFromUrl("skin"));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the language if it's specified as a url parameter. Applicable only after the user is logged in.
|
||||
*/
|
||||
protected function handleQuickLanguageChange()
|
||||
{
|
||||
if (($lan = rcube_utils::get_input_value('language', rcube_utils::INPUT_GET)) &&
|
||||
!empty($this->userId) &&
|
||||
!$this->getDontOverride("language") &&
|
||||
array_key_exists($lan, $this->rcmail->list_languages())
|
||||
) {
|
||||
// es_419 is too long and doesn't fit to the db field, so RC doesn't save it at all; we're saving it as es_ES
|
||||
$lan == "es_419" && ($lan = "es_ES");
|
||||
|
||||
$this->db->update("users", ["language" => $lan], ["user_id" => $this->userId]);
|
||||
header("Refresh:0; url=" . XFramework\Utils::removeVarsFromUrl("language"));
|
||||
exit;
|
||||
}
|
||||
}
|
||||
|
||||
protected function setPreviewBranding()
|
||||
{
|
||||
// set the preview background logo (loaded using js in [skin]/watermark.html)
|
||||
$this->rcmail->output->set_env(
|
||||
"xwatermark",
|
||||
$this->rcmail->config->get("preview_branding", "../../plugins/xskin/assets/images/watermark.png")
|
||||
);
|
||||
|
||||
}
|
||||
|
||||
protected function includeCustomCss()
|
||||
{
|
||||
// include the custom css if specified in the xskin config
|
||||
if ($overwriteCss = $this->rcmail->config->get("overwrite_css")) {
|
||||
$this->includeAsset($overwriteCss);
|
||||
}
|
||||
|
||||
// include the custom css if specified in skin json
|
||||
if ($customCss = $this->rcmail->config->get("custom_css")) {
|
||||
$this->includeAsset($customCss);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Larry only.
|
||||
*/
|
||||
protected function addDisableMobileInterfaceMenuItem()
|
||||
{
|
||||
// create the 'use mobile skin' button (added only if user switched to desktop skin on mobile)
|
||||
$skinType = $this->rcmail->output->get_env("xskin_type");
|
||||
|
||||
if ($skinType == "desktop" && isset($_COOKIE['rcs_disable_mobile_skin'])) {
|
||||
$this->addToInterfaceMenu(
|
||||
"enable-mobile-skin",
|
||||
html::div(
|
||||
["id" => "enable-mobile-skin", "class" => "section"],
|
||||
"<input type='button' class='button mainaction' onclick='xskin.enableMobileSkin()' value='" .
|
||||
rcube::Q($this->rcmail->gettext("xskin.enable_mobile_skin")) . "' />"
|
||||
|
||||
)
|
||||
);
|
||||
} else if ($skinType != "desktop") {
|
||||
$this->addToInterfaceMenu(
|
||||
"disable-mobile-skin",
|
||||
html::div(
|
||||
["id" => "disable-mobile-skin", "class" => "section"],
|
||||
"<input type='button' class='button mainaction' onclick='xskin.disableMobileSkin()' value='" .
|
||||
rcube::Q($this->rcmail->gettext("xskin.disable_mobile_skin")) . "' />"
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the default logo images to RC+ if they're not set up otherwise in the config.
|
||||
*/
|
||||
protected function ensureSkinLogo()
|
||||
{
|
||||
if (empty($this->rcmail->config->get("skin_logo"))) {
|
||||
$this->rcmail->config->set(
|
||||
"skin_logo",
|
||||
[
|
||||
"*" => "skins/$this->skin/assets/images/logo_header.png",
|
||||
"[print]" => "skins/$this->skin/assets/images/logo_print.png",
|
||||
"login" => false,
|
||||
]
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user