Add files via upload

This commit is contained in:
seb1k 2024-05-24 14:26:35 +02:00 committed by GitHub
parent ddb1a231b7
commit 82c0031049
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
77 changed files with 18157 additions and 36 deletions

140
README.md
View file

@ -1,51 +1,119 @@
# Elastic2022 Roundcube Webmail Skin "Elastic"
================================
This skin package contains a theme for the Roundcube Webmail
software. It can be used, modified and redistributed according to
the terms described in the LICENSE section.
For information about building or modifying Roundcube skins please visit
https://github.com/roundcube/roundcubemail/wiki/Skins
LICENSE
-------
Elastic2022 is a Roundcube skin based on Elastic The contents of this folder are subject to the Creative Commons
Attribution-ShareAlike License. It is allowed to copy, distribute,
transmit and to adapt the work by keeping credits to the original
authors in the README.md file.
See http://creativecommons.org/licenses/by-sa/3.0/ for details.
This folder also contains code licensed separately:
- Bootstrap Framework 4 from https://github.com/twbs/bootstrap
- FontAwesome 5 fonts from https://fontawesome.com/
- Roboto font from https://google-webfonts-helper.herokuapp.com/fonts/roboto?subsets=cyrillic,latin-ext,cyrillic-ext,latin,greek,greek-ext
- Design changed to fit android dark theme. INSTALLATION
- Better user interface ------------
- Modern menus
- Plugin support All styles are written using LESS syntax. Thus it needs to be compiled
- New Dark / Light mode using the `lessc` (>= 2.5.2) command line tool. This comes with the `nodejs-less`
RPM package or using `npm install less` which depend on nodejs.
```
$ lessc --clean-css="--s1 --advanced" styles/styles.less > styles/styles.min.css
$ lessc --clean-css="--s1 --advanced" styles/print.less > styles/print.min.css
$ lessc --clean-css="--s1 --advanced" styles/embed.less > styles/embed.min.css
```
(`--clean-css="--s1 --advanced"` minifies the css, requires the clean-css Less plugin.
The plugin can be installed using `npm install less-plugin-clean-css`)
References to image files from the included CSS files can be appended
with cache-buster marks to avoid browser caching issues after updating.
Run `bin/updatecss.sh --dir skins/elastic` before packaging the skin
or after installing it on the destination system.
## New features FOR DEVELOPERS
### Pull down to refresh email --------------
<img src="https://raw.githubusercontent.com/seb1k/Elastic2022/main/img/pulltorefresh.gif " width="200"/>
### Email autoresize - Supported browsers: IE11+, Edge, Last 2 versions for Chrome/Firefox/Safari,
<img src="https://raw.githubusercontent.com/seb1k/Elastic2022/main/img/autoresize.jpg" width="100"/> Android Browser 5+, iOS Safari 9+.
### Contact thumbail - Skin color palette changes and other css modifications can be done
![screenshot](img/preview-icon.png) via _styles.less and _variables.less files. Where you can overwrite all
variables and add custom styles.
## Screenshot - Minimum supported screen width is 240px (note that even if the device screen
resolution is e.g.320x372 changing the text size in device settings will reduce
the resolution)
![screenshot](img/2022-2.png) - Every page (which is not a frame) has following required structure:
![screenshot](img/phone2.png) ```
<body>
<div id="layout">
<div id="layout-menu"></div>
<div id="layout-sidebar"></div>
<div id="layout-list"></div>
<div id="layout-content"></div>
</div>
</body>
```
where `#layout-sidebar` and `#layout-list` are optional. Which element of the `#layout` will be displayed
as a main view on mobile devices can be defined by adding `selected` class to it.
![screenshot](img/phone2.jpg) - The `<html>` element will receive special classes that will be updated on resize
or orientation change:
- `touch`: A touch device, screen width <= 1024px,
- `layout-large`: Screen width > 1200px,
- `layout-normal`: Screen width <= 1200px and >= 768px,
- `layout-small`: Screen width < 768px and > 480px,
- `layout-phone`: Screen width <= 480px.
Frames will have the same classes applied as their parent windows.
- Every button, that is not <button> nor <input> should have inner <span class="inner"> element
for the button label.
- Every iframe need to be wrapped by an element with `iframe-wrapper` class. It is
required to have proper scrolling on mobile devices.
- Special attributes:
- `data-hidden`: Makes a menu entry/button hidden on specified screen sizes.
Can be used for example for functionality not implemented or that has no sense
on phones or touch devices. Contains a comma-separated list following values:
`large` (width > 1200px), `big` (width > 768px), `small` (width =< 768px),
`phone` (width =< 480px), `lbs` (width > 480px).
- `data-content-button`: Makes the action button with this attribute to be copied
to the content frame header on small/phone screens.
- Special URLs:
In phone mode we display Prev/Next navigation buttons below the content preview
frame. We do this e.g. for mail preview or contact preview. Plugins should use
_action=add* or _action=create* or _nav=hide in the frame URL if the navigation
should be hidden, which is the case when you create a content object.
- Dark mode:
In dark mode html element will have `dark-mode` class assigned.
It is possible to disable dark mode using less variable `@dark-mode-enabled`.
Option `dark_mode_support` in meta.json controls addition of the mode switch in the menu.
KNOWN ISSUES
------------
1. There are known issues with running less in Roundcube devel_mode:
## Install - Dialogs executed on page load are displayed out of screen.
- CodeMirror editor (in managesieve raw script editing mode) is broken.
Place Elastic2022 folder in the roundcube skins folder (skins)
##
If you like this skin, please give it a star !
If you want to help me improve it, consider making a donation : [<img src="https://raw.githubusercontent.com/seb1k/Elastic2022/main/img/button-PayPal-donate.png">](https://www.paypal.com/donate/?hosted_button_id=AQHZNZT5L7JSE)
Topic on the roundcube's forum :
https://www.roundcubeforum.net/index.php/topic,29883.0.html

6
deps/bootstrap.bundle.min.js vendored Normal file

File diff suppressed because one or more lines are too long

2117
deps/bootstrap.min.css vendored Normal file

File diff suppressed because it is too large Load diff

BIN
fonts/fa-regular-400.woff Normal file

Binary file not shown.

BIN
fonts/fa-regular-400.woff2 Normal file

Binary file not shown.

BIN
fonts/fa-solid-900.woff Normal file

Binary file not shown.

BIN
fonts/fa-solid-900.woff2 Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

3
images/contactgroup.svg Normal file
View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 640">
<path d="M133.5 273.5c30.3 0 55-24.7 55-55s-24.7-55-55-55-55 24.7-55 55 24.7 55 55 55zm385 0c30.3 0 55-24.7 55-55s-24.7-55-55-55-55 24.7-55 55 24.7 55 55 55zM546 301h-55c-15.1 0-28.8 6.1-38.8 16 34.6 19 59.2 53.3 64.5 94h56.7c15.2 0 27.5-12.3 27.5-27.5V356c.1-30.3-24.6-55-54.9-55zm-220 0c53.2 0 96.2-43.1 96.2-96.2s-43.1-96.2-96.2-96.2-96.2 43.1-96.2 96.2 43 96.2 96.2 96.2zm66 27.5h-7.1c-17.9 8.6-37.7 13.8-58.9 13.8s-40.9-5.2-58.9-13.8H260c-54.7 0-99 44.3-99 99v24.8c0 22.8 18.5 41.2 41.2 41.2h247.5c22.8 0 41.2-18.5 41.2-41.2v-24.8c.1-54.7-44.2-99-98.9-99zM199.8 317c-10-9.9-23.6-16-38.8-16h-55c-30.3 0-55 24.7-55 55v27.5c0 15.2 12.3 27.5 27.5 27.5h56.6c5.4-40.7 30-75 64.7-94z" fill="#ccc"/>
</svg>

After

Width:  |  Height:  |  Size: 769 B

3
images/contactpic.svg Normal file
View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<path d="M256 246c50.5 0 91.4-40.9 91.4-91.4S306.5 63.1 256 63.1s-91.4 40.9-91.4 91.4S205.5 246 256 246zm64 22.9h-11.9c-15.9 7.3-33.5 11.4-52.1 11.4s-36.1-4.1-52.1-11.4H192c-53 0-96 43-96 96v29.7c0 18.9 15.4 34.3 34.3 34.3h251.4c18.9 0 34.3-15.4 34.3-34.3v-29.7c0-53-43-96-96-96z" fill="#ccc"/>
</svg>

After

Width:  |  Height:  |  Size: 367 B

3
images/corner-handle.svg Normal file
View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16">
<path fill="#888" d="M6.7 16L16 6.7V5.3L5.3 16zM9.7 16L16 9.7V8.3L8.3 16zM12.7 16l3.3-3.3v-1.4L11.3 16zM15.7 16l.3-.3v-1.4L14.3 16z"/>
</svg>

After

Width:  |  Height:  |  Size: 205 B

3
images/download.svg Normal file
View file

@ -0,0 +1,3 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 960 560">
<path fill="#d4dbde" d="M690 245c0 9.2-3.5 17.9-10.1 24.9l-175 175c-6.6 6.6-15.3 10.1-24.9 10.1-9.2 0-18.4-3.5-24.9-10.1l-175-175c-6.6-7-10.1-15.8-10.1-24.9 0-4.4.9-9.2 2.6-13.6C277.9 218.3 291 210 305 210h87.5V35c0-19.2 15.8-35 35-35h105c19.2 0 35 15.8 35 35v175H655c14 0 27.1 8.3 32.4 21.4 1.7 4.4 2.6 9.2 2.6 13.6zm0 245H270V350h-70v140c0 38.5 31.5 70 70 70h420c38.5 0 70-31.5 70-70V350h-70v140z"/>
</svg>

After

Width:  |  Height:  |  Size: 472 B

BIN
images/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

1
images/google-icon.svg Normal file
View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 48 48"><path fill="#4285F4" d="M45.12 24.5c0-1.56-.14-3.06-.4-4.5H24v8.51h11.84c-.51 2.75-2.06 5.08-4.39 6.64v5.52h7.11c4.16-3.83 6.56-9.47 6.56-16.17z"></path><path fill="#34A853" d="M24 46c5.94 0 10.92-1.97 14.56-5.33l-7.11-5.52c-1.97 1.32-4.49 2.1-7.45 2.1-5.73 0-10.58-3.87-12.31-9.07H4.34v5.7C7.96 41.07 15.4 46 24 46z"></path><path fill="#FBBC05" d="M11.69 28.18C11.25 26.86 11 25.45 11 24s.25-2.86.69-4.18v-5.7H4.34C2.85 17.09 2 20.45 2 24c0 3.55.85 6.91 2.34 9.88l7.35-5.7z"></path><path fill="#EA4335" d="M24 10.75c3.23 0 6.13 1.11 8.41 3.29l6.31-6.31C34.91 4.18 29.93 2 24 2 15.4 2 7.96 6.93 4.34 14.12l7.35 5.7c1.73-5.2 6.58-9.07 12.31-9.07z"></path><path fill="none" d="M2 2h44v44H2z"></path></svg>

After

Width:  |  Height:  |  Size: 764 B

11
images/logo.svg Normal file
View file

@ -0,0 +1,11 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="9.14 141.8 573.65 573.65">
<style>
.st0,.st3{fill-rule:evenodd;clip-rule:evenodd;fill:#404f54}.st3{fill:#37beff}
</style>
<path class="st3" d="M582.79 549.77L295.96 384.1V207.27l286.83 165.68z"/>
<path class="st0" d="M9.14 549.77L295.96 384.1V207.27L9.14 372.95z"/>
<path d="M295.96 141.8c109.56 0 198.41 88.85 198.41 198.41s-88.85 198.41-198.41 198.41S97.55 449.77 97.55 340.21 186.4 141.8 295.96 141.8" fill-rule="evenodd" clip-rule="evenodd" fill="#ccc"/>
<path d="M295.96 141.8c109.6 0 198.48 88.85 198.48 198.41s-88.88 198.41-198.48 198.41c-62.91-42.34-88.94-127.64-88.94-198.3s26.03-156.1 88.94-198.52" fill-rule="evenodd" clip-rule="evenodd" fill="#e5e5e5"/>
<path class="st3" d="M582.79 372.95L295.96 538.62v176.83l286.83-165.68z"/>
<path class="st0" d="M9.14 372.95l286.82 165.67v176.83L9.14 549.77z"/>
</svg>

After

Width:  |  Height:  |  Size: 888 B

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg width="100%" height="100%" viewBox="0 0 116 116" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,145.515L77.643,145.515L77.639,197.07L26.088,197.07L26.088,145.515Z" style="fill:rgb(246,83,20);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.907,145.515L134.462,145.515C134.462,162.7 134.465,179.885 134.459,197.07C117.277,197.067 100.092,197.07 82.91,197.07C82.904,179.885 82.907,162.7 82.907,145.515Z" style="fill:rgb(127,187,65);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M26.088,202.331C43.273,202.337 60.458,202.329 77.643,202.337C77.646,219.522 77.643,236.704 77.643,253.889L26.088,253.889L26.088,202.331Z" style="fill:rgb(0,161,241);"/></g>
<g transform="matrix(1,0,0,1,-22.0613,-141.704)"><path d="M82.91,202.337C100.092,202.331 117.277,202.334 134.462,202.334L134.462,253.889L82.907,253.889C82.91,236.704 82.904,219.519 82.91,202.337Z" style="fill:rgb(255,187,0);"/></g>
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB

21
meta.json Normal file
View file

@ -0,0 +1,21 @@
{
"name": "Elastic2022",
"author": "Sebastien Mille",
"url": "https://github.com/seb1k/Elastic2022",
"license": "Creative Commons Attribution-ShareAlike",
"license-url": "http://creativecommons.org/licenses/by-sa/3.0/",
"config": {
"supported_layouts": ["widescreen"],
"jquery_ui_colors_theme": "bootstrap",
"embed_css_location": "/styles/embed.css",
"editor_css_location": "/styles/embed.css",
"dark_mode_support": true,
"media_browser_css_location": "none",
"additional_logo_types": ["dark", "small", "small-dark"]
},
"meta": {
"viewport": "width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0",
"theme-color": "#f4f4f4",
"msapplication-navbutton-color": "#f4f4f4"
}
}

View file

@ -0,0 +1,402 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="calendar.calendar" /></h1>
<!-- calendars list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="arial-label-calendars">
<div class="header">
<a class="button icon back-content-button" href="#back" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a>
<span id="aria-label-calendars" class="header-title"><roundcube:label name="calendar.calendars" /></span>
<roundcube:button name="calendaractionsmenu" id="calendaroptionsmenulink" type="link"
title="calendar.calendaractions" class="button icon sidebar-menu" data-popup="calendaractions-menu"
innerClass="inner" label="actions" />
</div>
<div id="datepicker" class="calendar-datepicker" role="presentation"></div>
<span class="spacer" style="height:30px"></span>
<roundcube:object name="libkolab.folder_search_form" id="calendarlistsearch" wrapper="searchbar menu"
ariatag="h2" label="calsearchform" label-domain="calendar" buttontitle="findcalendars" />
<div id="calendars-content" class="scroller">
<roundcube:object name="plugin.calendar_list" id="calendarslist" class="treelist listing iconized" />
</div>
<h2 id="aria-label-minical" class="voice"><roundcube:label name="calendar.arialabelminical" /></h2>
<roundcube:include file="includes/footer_menu.html" />
</div>
<!-- calendar -->
<div id="layout-content" class="selected no-navbar" role="main">
<roundcube:include file="includes/top-right_menu.html" />
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<div class="only_small_screen">
<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
</div>
<span class="header-title"></span>
<!-- toolbar -->
<div id="calendartoolbar" class="toolbar menu">
<roundcube:button command="addevent" type="link"
class="button create disabled" classAct="button create"
label="create" title="calendar.new_event" innerClass="inner" />
<roundcube:button command="print" type="link" data-hidden="small"
class="button print disabled" classAct="button print"
label="calendar.print" title="calendar.printtitle" innerClass="inner" />
<span class="spacer"></span>
<roundcube:button command="events-import" type="link"
class="button import disabled" classAct="button import"
label="import" title="calendar.importevents" innerClass="inner" />
<roundcube:button command="export" type="link"
class="button export disabled" classAct="button export"
label="calendar.export" title="calendar.exporttitle" innerClass="inner" />
<roundcube:container name="toolbar" id="calendartoolbar" />
<span class="spacer"></span><span class="spacer"></span>
<span class="spacer"></span><span class="spacer"></span>
</div>
</div>
<roundcube:object name="plugin.searchform" id="searchform" wrapper="searchbar menu"
label="searchform" buttontitle="calendar.findevents" label-domain="calendar" ariatag="h2" />
<h2 id="aria-label-calendarview" class="voice"><roundcube:label name="calendar.arialabelcalendarview" /></h2>
<div id="calendar" class="content" role="main" aria-labelledby="aria-label-calendarview" data-elastic-mode="true">
<roundcube:object name="plugin.agenda_options" id="agendaoptions" />
<div id="searchcontrols" class="search-controls"></div>
</div>
<div class="footer toolbar menu content-frame-navigation" role="toolbar" data-hidden="big">
<a href="#" class="button prev" onclick="$('.fc-prev-button').click()"><span class="inner"><roundcube:label name="previous" /></span></a>
<a href="#" class="button today" onclick="$('.fc-today-button').click()"><span class="inner"><roundcube:label name="today" /></span></a>
<a href="#" class="button date" onclick="window.calendar_datepicker()"><span class="inner"><roundcube:label name="date" /></span></a>
<a href="#" class="button next" onclick="$('.fc-next-button').click()"><span class="inner"><roundcube:label name="next" /></span></a>
</div>
</div>
<div id="timezone-display" class="hidden"><roundcube:var name="env:timezone" /></div>
<div id="eventshow" class="popupmenu formcontent propform text-only">
<h1 id="event-title" class="event-title form-group">Event Title</h1>
<div id="event-status-badge"><span></span></div>
<div class="event-location form-group" id="event-location">Location</div>
<div class="event-date form-group" id="event-date">From-To</div>
<div class="event-description form-group" id="event-description">
<div class="event-text"></div>
</div>
<div class="event-attendees form-group" id="event-attendees">
<div class="event-text"></div>
</div>
<div id="event-url" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.url" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-repeat" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.repeat" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-alarm" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.alarms" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-partstat" class="form-group row event-partstat">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.mystatus" /></label>
<span class="col-sm-8 form-control-plaintext">
<span class="event-text rsvp-status"></span>
<a class="changersvp button edit" href="#" title="<roundcube:label name='calendar.changepartstat' />"><span class="inner"><roundcube:label name='calendar.changepartstat' /></span></a>
</span>
</div>
<div id="event-calendar" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.calendar" /></label>
<span class="col-sm-8 form-control-plaintext event-text">Default</span>
</div>
<div id="event-category" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.category" /></label>
<span class="col-sm-8 form-control-plaintext event-text"></span>
</div>
<div id="event-status" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.status" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-free-busy" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.freebusy" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-priority" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.priority" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-rsvp-comment" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.rsvpcomment" /></label>
<span class="event-text col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-links" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.links" /></label>
<span class="event-text col-sm-8"></span>
</div>
<div id="event-attachments" class="form-group row">
<label class="col-sm-4 col-form-label"><roundcube:label name="attachments" /></label>
<span class="event-text col-sm-8"></span>
</div>
<div id="event-created" class="form-group row faded">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.created" /></label>
<span class="event-text event-created col-sm-8 form-control-plaintext"></span>
</div>
<div id="event-changed" class="form-group row faded">
<label class="col-sm-4 col-form-label"><roundcube:label name="calendar.changed" /></label>
<span class="event-text event-changed col-sm-8 form-control-plaintext"></span>
</div>
<roundcube:object name="plugin.event_rsvp_buttons" id="event-rsvp" class="calendar-invitebox invitebox boxinformation" style="display:none" />
</div>
<roundcube:include file="/templates/eventedit.html" />
<div id="calendaractions-menu" class="popupmenu">
<h3 id="aria-label-calendaroptions" class="voice"><roundcube:label name="calendar.calendaractions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-calendaroptions">
<roundcube:button type="link-menuitem" command="calendar-create" label="calendar.addcalendar" class="create disabled" classAct="create active" />
<roundcube:button type="link-menuitem" command="calendar-edit" label="calendar.editcalendar" class="edit disabled" classAct="edit active" />
<roundcube:button type="link-menuitem" command="calendar-delete" label="calendar.deletecalendar" class="delete disabled" classAct="delete active" />
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<roundcube:button type="link-menuitem" command="calendar-remove" label="calendar.removelist" class="remove disabled" classAct="remove active" />
<roundcube:endif />
<roundcube:if condition="env:calendar_driver != 'caldav'" />
<roundcube:button type="link-menuitem" command="calendar-showurl" label="calendar.showurl" class="showurl disabled" classAct="showurl active" />
<roundcube:endif />
<roundcube:if condition="!empty(env:calendar_settings['freebusy_url'])" />
<roundcube:button type="link-menuitem" command="calendar-showfburl" label="calendar.showfburl" class="showurl disabled" classAct="showurl active" />
<roundcube:endif />
<roundcube:if condition="env:calendar_driver == 'kolab'" />
<roundcube:button type="link-menuitem" command="folders" task="settings" label="managefolders" class="folders disabled" classAct="folders active" />
<roundcube:endif />
</ul>
</div>
<div id="eventoptionsmenu" class="popupmenu">
<h3 id="aria-label-eventoptions" class="voice"><roundcube:label name="calendar.eventoptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-eventoptions">
<roundcube:button type="link-menuitem" command="event-download" label="download" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="event-sendbymail" label="send" class="send disabled" classAct="send active" />
<roundcube:button type="link-menuitem" command="event-copy" label="copy" class="copy disabled" classAct="copy active" />
<roundcube:if condition="env:calendar_driver == 'kolab' && config:kolab_bonnie_api" />
<roundcube:button type="link-menuitem" command="event-history" label="calendar.eventhistory" class="history disabled" classAct="history active" />
<roundcube:endif />
</ul>
</div>
<div id="eventresourcesdialog" class="popupmenu">
<h3 class="voice" id="aria-label-resourceselection"><roundcube:label name="calendar.arialabelresourceselection" /></h3>
<div class="resource-selection selection-list" role="navigation" aria-labelledby="aria-label-resourceselection">
<div class="header">
<span class="header-title"><roundcube:label name="calendar.tabresources" /></span>
</div>
<roundcube:object name="plugin.resources_searchform" id="resourcesearchbox"
wrapper="searchbar menu" ariatag="h4" buttontitle="calendar.findresources"
label="resourcesearchform" label-domain="calendar" />
<div class="scroller">
<roundcube:object name="plugin.resources_list" id="resources-list" class="listing treelist" />
</div>
</div>
<div class="resource-content selection-content">
<div class="header" data-hidden="normal,big">
<a class="button icon back" href="#back" onclick="$('#eventresourcesdialog .resource-content').hide(); $('#eventresourcesdialog .resource-selection').show()">
<span class="inner"><roundcube:label name="back" /></span>
</a>
<span class="header-title"><roundcube:label name="calendar.resourceprops" /></span>
</div>
<ul class="nav nav-tabs" role="tablist">
<li class="nav-item">
<a class="nav-link active" href="#resource-availability" data-toggle="tab" role="tab">
<roundcube:label name="calendar.resourceavailability" />
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#resource-info" data-toggle="tab" role="tab">
<roundcube:label name="calendar.resourcedetails" />
</a>
</li>
</ul>
<div class="tab-content">
<div id="resource-availability" class="tab-pane active" role="tabpanel" aria-labelledby="aria-label-resourceavailability">
<h3 class="voice" id="aria-label-resourceavailability"><roundcube:label name="calendar.resourceavailability" /></h3>
<roundcube:object name="plugin.resource_calendar" id="resource-freebusy-calendar" class="raw-tables" />
<div class="slot-nav">
<roundcube:button name="resource-cal-prev" id="resource-calendar-prev" type="link"
class="icon prevpage" title="calendar.prevslot" label="calendar.prevweek" />
<roundcube:button name="resource-cal-next" id="resource-calendar-next" type="link"
class="icon nextpage" title="calendar.nextslot" label="calendar.nextweek" />
</div>
</div>
<div id="resource-info" class="tab-pane" role="tabpanel" aria-labelledby="aria-label-resourcedetails">
<h3 class="voice" id="aria-label-resourcedetails"><roundcube:label name="calendar.resourcedetails" /></h3>
<roundcube:object name="plugin.resource_info" id="resource-details" class="propform text-only"
aria-live="polite" aria-relevant="text" aria-atomic="true" />
</div>
</div>
</div>
</div>
<div id="eventfreebusy" class="popupmenu calendar-scheduler formcontent">
<roundcube:object name="plugin.attendees_freebusy_table" id="attendees-freebusy-table"
class="schedule-table" data-h-margin="-1" data-v-margin="1" />
<div class="nav">
<div class="schedule-buttons">
<button type="button" id="schedule-find-prev" class="btn btn-secondary prev-slot"><roundcube:label name="calendar.prevslot" /></button>
<button type="button" id="schedule-find-next" class="btn btn-secondary next-slot"><roundcube:label name="calendar.nextslot" /></button>
</div>
<div class="schedule-options">
<label><input type="checkbox" id="schedule-freebusy-workinghours" value="1" class="pretty-checkbox" /><roundcube:label name="calendar.onlyworkinghours" /></label>
</div>
<div class="schedule-nav">
<button type="button" id="schedule-freebusy-prev" title="<roundcube:label name='previouspage' />">&#9668;</button>
<button type="button" id="schedule-freebusy-next" title="<roundcube:label name='nextpage' />">&#9658;</button>
</div>
</div>
<div class="schedule-range">
<div class="form-group row">
<label for="schedule-startdate" class="col-form-label col-sm-2"><roundcube:label name="calendar.start" /></label>
<span class="col-sm-10 datetime">
<input type="text" name="startdate" size="11" id="schedule-startdate" class="form-control" disabled="true" /> &nbsp;
<input type="text" name="starttime" size="6" id="schedule-starttime" class="form-control" disabled="true" />
</span>
</div>
<div class="form-group row">
<label for="schedule-enddate" class="col-form-label col-sm-2"><roundcube:label name="calendar.end" /></label>
<span class="col-sm-10 datetime">
<input type="text" name="enddate" size="11" id="schedule-enddate" class="form-control" disabled="true" /> &nbsp;
<input type="text" name="endtime" size="6" id="schedule-endtime" class="form-control" disabled="true" />
</span>
</div>
<div class="schedule-legend form-group row">
<label class="col-form-label col-sm-2"><roundcube:label name="calendar.legend" /></label>
<span class="col-sm-10 form-control-plaintext">
<roundcube:include file="/templates/freebusylegend.html" />
<span class="attendee organizer"><roundcube:label name="calendar.roleorganizer" /></span>
<span class="attendee req-participant"><roundcube:label name="calendar.rolerequired" /></span>
<span class="attendee opt-participant"><roundcube:label name="calendar.roleoptional" /></span>
<span class="attendee non-participant"><roundcube:label name="calendar.rolenonparticipant" /></span>
<span class="attendee chair"><roundcube:label name="calendar.rolechair" /></span>
</span>
</div>
</div>
</div>
<div id="eventsimport" class="popupmenu formcontent">
<roundcube:object name="plugin.events_import_form" id="events-import-form" />
</div>
<div id="eventsexport" class="popupmenu formcontent">
<roundcube:object name="plugin.events_export_form" id="events-export-form" />
</div>
<div id="calendarurlbox" class="popupmenu">
<p><roundcube:label name="calendar.showurldescription" /></p>
<textarea id="calfeedurl" rows="2" readonly="readonly"></textarea>
<div id="calendarcaldavurl" style="display:none; margin-top:1rem">
<p><roundcube:label name="calendar.caldavurldescription" html="yes" /></p>
<textarea id="caldavurl" rows="2" readonly="readonly"></textarea>
</div>
</div>
<div id="fburlbox" class="popupmenu">
<p><roundcube:label name="calendar.fburldescription" /></p>
<textarea id="fburl" rows="2" readonly="readonly"></textarea>
</div>
<roundcube:if condition="config:kolab_bonnie_api" />
<div id="eventhistory" class="popupmenu" aria-hidden="true">
<roundcube:object name="plugin.object_changelog_table" id="event-changelog-table" class="changelog-table" />
<div class="compare-button"><input type="button" class="button" value="<roundcube:label name='libkolab.compare' />" /></div>
</div>
<div id="eventdiff" class="popupmenu formcontent text-only">
<h1 class="event-title">Event Title</h1>
<h1 class="event-title-new event-text-new"></h1>
<div class="form-group row event-date"></div>
<div class="form-group row event-location">
<h5 class="label"><roundcube:label name="calendar.location" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-description">
<h5 class="label"><roundcube:label name="calendar.description" /></h5>
<div class="event-text-diff" style="white-space:pre-wrap"></div>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-url">
<h5 class="label"><roundcube:label name="calendar.url" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-recurrence">
<h5 class="label"><roundcube:label name="calendar.repeat" /></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="form-group row event-alarms">
<h5 class="label"><roundcube:label name="calendar.alarms" /><span class="index"></span></h5>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
<div class="event-line event-start">
<label><roundcube:label name="calendar.start" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-end">
<label><roundcube:label name="calendar.end" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-attendees">
<label><roundcube:label name="calendar.tabattendees" /><span class="index"></span></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-calendar">
<label><roundcube:label name="calendar.calendar" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-categories">
<label><roundcube:label name="calendar.category" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-status">
<label><roundcube:label name="calendar.status" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-free_busy">
<label><roundcube:label name="calendar.freebusy" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="event-line event-priority">
<label><roundcube:label name="calendar.priority" /></label>
<span class="event-text-old"></span> &#8674;
<span class="event-text-new"></span>
</div>
<div class="form-group row event-attachments">
<label><roundcube:label name="attachments" /><span class="index"></span></label>
<div class="event-text-old"></div>
<div class="event-text-new"></div>
</div>
</div>
<roundcube:endif />
<roundcube:object name="plugin.calendar_css" folder-class="div.$class a.calname:before" folder-fallback-color="#161b1d" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,7 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="calendar.arialabeleventform" /></h1>
<roundcube:include file="/templates/eventedit.html" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,155 @@
<div id="eventedit" class="<roundcube:exp expression="env:framed ? '' : 'popupmenu '">formcontent" aria-hidden="true" data-notabs="true">
<form class="tabbed" action="#" method="post" enctype="multipart/form-data">
<!-- basic info -->
<fieldset id="event-panel-summary">
<legend><roundcube:label name="calendar.tabsummary" /></legend>
<div class="form-group">
<label for="edit-title"><roundcube:label name="calendar.title" /></label>
<input type="text" class="form-control" name="title" id="edit-title" size="40" required="true" />
</div>
<div class="form-group">
<label for="edit-location"><roundcube:label name="calendar.location" /></label>
<input type="text" class="form-control" name="location" id="edit-location" size="40" />
<roundcube:if condition="config:calendar_nextcloud_url" />
<a href="#" onclick="rcmail.command('talk-room-create')" style="float:right; margin-top:0.5em;"><roundcube:label name="calendar.createtalkroom" /></a>
<roundcube:endif />
</div>
<div class="form-group">
<label for="edit-description"><roundcube:label name="calendar.description" /></label>
<textarea name="description" id="edit-description" class="form-control" rows="5" cols="40"></textarea>
</div>
<div class="form-group row">
<label for="edit-startdate" class="col-sm-2 col-form-label"><roundcube:label name="calendar.start" /></label>
<div class="col-sm-10 datetime">
<input type="text" name="startdate" size="11" id="edit-startdate" class="form-control" required="true" /> &nbsp;
<input type="text" name="starttime" size="6" id="edit-starttime" class="form-control" aria-label="<roundcube:label name='calendar.starttime' />" />
<label><input type="checkbox" name="allday" id="edit-allday" value="1" class="pretty-checkbox" /><roundcube:label name="calendar.all-day" /></label>
</div>
</div>
<div class="form-group row">
<label for="edit-enddate" class="col-sm-2 col-form-label"><roundcube:label name="calendar.end" /></label>
<div class="col-sm-10 datetime">
<input type="text" name="enddate" size="11" id="edit-enddate" class="form-control" required="true" /> &nbsp;
<input type="text" name="endtime" size="6" id="edit-endtime" class="form-control" aria-label="<roundcube:label name='calendar.endtime' />" />
</div>
</div>
<div class="form-group row" id="edit-alarms">
<label for="edit-alarm-item" class="col-sm-2 col-form-label"><roundcube:label name="calendar.alarms" /></label>
<div class="col-sm-10 alarms-input">
<div class="edit-alarm-item input-group first">
<roundcube:object name="plugin.alarm_select" id="edit-alarm-item" />
<span class="edit-alarm-buttons input-group-append">
<a href="#add" class="icon button btn add add-alarm input-group-text"><span class="inner"><roundcube:label name="libcalendaring.addalarm" /></span></a>
<a href="#delete" class="icon button btn delete delete-alarm input-group-text"><span class="inner"><roundcube:label name="libcalendaring.removealarm" /></span></a>
</span>
</div>
</div>
</div>
<div class="form-group row" id="calendar-select">
<label for="edit-calendar" class="col-sm-2 col-form-label"><roundcube:label name="calendar.calendar" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.calendar_select" id="edit-calendar" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-categories" class="col-sm-2 col-form-label"><roundcube:label name="calendar.category" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.category_select" id="edit-categories" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-event-status" class="col-sm-2 col-form-label"><roundcube:label name="calendar.status" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.status_select" id="edit-event-status" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-free-busy" class="col-sm-2 col-form-label"><roundcube:label name="calendar.freebusy" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.freebusy_select" id="edit-free-busy" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-priority" class="col-sm-2 col-form-label"><roundcube:label name="calendar.priority" /></label>
<div class="col-sm-10">
<roundcube:object name="plugin.priority_select" id="edit-priority" class="form-control" />
</div>
</div>
<div class="form-group row">
<label for="edit-url" class="col-sm-2 col-form-label"><roundcube:label name="calendar.url" /></label>
<div class="col-sm-10">
<input type="text" class="form-control" name="vurl" id="edit-url" size="40" />
</div>
</div>
<div class="form-group row" id="edit-event-links">
<label class="col-sm-2 col-form-label"><roundcube:label name="calendar.links" /></label>
<div class="col-sm-10">
<div class="event-text"></div>
</div>
</div>
</fieldset>
<!-- recurrence settings -->
<fieldset id="event-panel-recurrence">
<legend><roundcube:label name="calendar.tabrecurrence" /></legend>
<div class="form-group row border-after">
<roundcube:object name="plugin.recurrence_form" part="frequency" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-daily">
<roundcube:object name="plugin.recurrence_form" part="daily" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-weekly">
<roundcube:object name="plugin.recurrence_form" part="weekly" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-monthly">
<roundcube:object name="plugin.recurrence_form" part="monthly" class="form-group row" />
</div>
<div class="recurrence-form border-after" id="recurrence-form-yearly">
<roundcube:object name="plugin.recurrence_form" part="yearly" class="form-group row" />
</div>
<div class="recurrence-form" id="recurrence-form-until">
<roundcube:object name="plugin.recurrence_form" part="until" class="form-group row" />
</div>
<div class="recurrence-form" id="recurrence-form-rdate">
<roundcube:object name="plugin.recurrence_form" part="rdate" class="form-group row" />
</div>
</fieldset>
<!-- attendees list -->
<fieldset id="event-panel-attendees" data-navlink-class="nav-icon attendees">
<legend><roundcube:label name="calendar.tabattendees" /></legend>
<h3 id="aria-label-attendeestable" class="voice"><roundcube:label name="calendar.arialabeleventattendees" /></h3>
<roundcube:object name="plugin.attendees_list" id="edit-attendees-table" class="edit-attendees-table no-img table table-sm"
coltitle="attendee" aria-labelledby="aria-label-attendeestable" />
<roundcube:object name="plugin.attendees_form" id="edit-attendees-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</fieldset>
<!-- resources list -->
<fieldset id="event-panel-resources" data-navlink-class="nav-icon resources">
<legend><roundcube:label name="calendar.tabresources" /></legend>
<h3 id="aria-label-resourcestable" class="voice"><roundcube:label name="calendar.arialabeleventresources" /></h3>
<roundcube:object name="plugin.attendees_list" id="edit-resources-table" class="edit-attendees-table no-img table table-sm"
coltitle="resource" aria-labelledby="aria-label-resourcestable" />
<roundcube:object name="plugin.resources_form" id="edit-resources-form" />
<roundcube:include file="/templates/freebusylegend.html" />
</fieldset>
<!-- attachments list (with upload form) -->
<fieldset id="event-panel-attachments" data-navlink-class="nav-icon attachments">
<legend><roundcube:label name="calendar.tabattachments" /></legend>
<div id="edit-attachments-droparea" class="file-upload">
<h3 id="aria-label-attachmentuploadform" class="voice"><roundcube:label name="arialabelattachmentuploadform" /></h3>
<div id="edit-attachments-form" class="upload-form" role="region" aria-labelledby="aria-label-attachmentuploadform">
<roundcube:object name="plugin.attachments_form" mode="hint" />
<button type="button" class="btn btn-secondary attach" onclick="rcmail.upload_input('event-attachment-form'); return false"><roundcube:label name="addattachment" /></button>
</div>
<div id="edit-attachments">
<roundcube:object name="plugin.attachments_list" id="attachmentlist" class="attachmentslist" />
</div>
</div>
<roundcube:object name="plugin.filedroparea" id="edit-attachments-droparea" />
</fieldset>
</form>
<roundcube:object name="plugin.edit_recurrence_sync" id="edit-recurrence-syncstart" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_attendees_notify" id="edit-attendees-notify" class="dialog-message" style="display:none" />
<roundcube:object name="plugin.edit_recurring_warning" class="dialog-message edit-recurring-warning" style="display:none" />
<roundcube:object name="plugin.attachments_form" id="event-attachment-form" mode="smart" />
<div id="edit-localchanges-warning" class="dialog-message" style="display:none"><roundcube:label name="calendar.localchangeswarning" /></div>
</div>

View file

@ -0,0 +1,9 @@
<div id="edit-attendees-legend" class="availability">
<span class="legend free"><roundcube:label name="calendar.availfree" /></span>
<span class="legend busy"><roundcube:label name="calendar.availbusy" /></span>
<span class="legend tentative"><roundcube:label name="calendar.availtentative" /></span>
<!--
<span class="legend out-of-office"><roundcube:label name="calendar.availoutofoffice" /></span>
-->
<span class="legend unknown"><roundcube:label name="calendar.availunknown" /></span>
</div>

View file

@ -0,0 +1,11 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="plugin.event_inviteform" class="standalone-invitebox" />
<roundcube:object name="logo" src="/images/logo.svg" data-src-small="0" id="logo" alt="Logo" />
<div class="calendar-invitebox invitebox boxinformation">
<roundcube:object name="plugin.event_invitebox" />
<roundcube:object name="plugin.event_rsvp_buttons" type="submit" iname="rsvp" id="event-rsvp" delegate="false" />
</div>
</form>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,19 @@
<roundcube:include file="includes/layout.html" />
<div class="print-config">
<button type="button" class="btn btn-primary print" onclick="window.print()"><roundcube:label name='print' /></button>
<span class="prop">
<input type="checkbox" id="propdescription" checked="checked" class="pretty-checkbox" />
<label for="propdescription"><roundcube:label name="calendar.printdescriptions" /></label>
</span>
<div id="calendar-view-selector" class="btn-group btn-group-toggle" role="group"></div>
</div>
<div class="print-content">
<div id="calendar" data-view-selector="calendar-view-selector"></div>
</div>
<roundcube:object name="plugin.calendar_list" activeonly="true" id="calendarlist" />
<roundcube:object name="plugin.calendar_css" printmode="true" folder-class="div.$class a.calname" folder-fallback-color="#000" />
<roundcube:include file="includes/footer.html" />

1
plugins/libkolab/libkolab.min.css vendored Normal file

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,33 @@
<div id="acllist-container" class="table-widget">
<div id="acllist-content" class="content">
<h2 class="voice" id="aria-label-acltable"><roundcube:label name="libkolab.ariasummaryacltable" /></h2>
<roundcube:object name="acltable" id="acltable" class="records-table options-table" aria-labelledby="aria-label-acltable" role="listbox" />
</div>
<div id="acllist-footer" class="footer toolbar menu">
<roundcube:button command="acl-create" type="link" class="create disabled" classAct="create"
label="libkolab.add" title="libkolab.newuser" innerClass="inner" />
<roundcube:button name="aclmenulink" type="link"
label="actions" title="libkolab.actions" href="#acl-actions"
class="actions" innerClass="inner" data-popup="acl-menu" />
</div>
</div>
<div id="acl-menu" class="popupmenu" aria-hidden="true" data-align="bottom">
<h3 id="aria-label-aclactions" class="voice"><roundcube:label name="libkolab.arialabelaclactions" /></h3>
<ul class="menu listing iconized" role="menu" aria-labelledby="aria-label-aclactions">
<roundcube:button command="acl-edit" label="edit" type="link-menuitem" class="edit disabled" classAct="edit active" />
<roundcube:button command="acl-delete" label="delete" type="link-menuitem" class="delete disabled" classAct="delete active" />
</ul>
</div>
<div id="aclform" class="popupmenu formcontent" aria-labelledby="aria-label-aclform" role="form">
<h3 id="aria-label-aclform" class="voice"><roundcube:label name="libkolab.arialabelaclform" /></h3>
<div class="row form-group">
<label class="col-sm-4 col-form-label"><roundcube:label name="libkolab.identifier" /></label>
<roundcube:object name="acluser" id="acluser" class="proplist col-sm-8" />
</div>
<div class="row form-group">
<label class="col-sm-4 col-form-label"><roundcube:label name="libkolab.myrights" /></label>
<roundcube:object name="aclrights" class="proplist col-sm-8" />
</div>
</div>

View file

@ -0,0 +1,68 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:var name="env:filename" /></h1>
<div id="layout-sidebar" class="listbox">
<div class="header">
<a class="button icon back-content-button" href="#content" data-hidden="big"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title" id="aria-label-contentinfo"><roundcube:label name="properties" /></span>
</div>
<div class="scroller">
<roundcube:object name="plugin.attachmentcontrols" class="listing props-table" role="contentinfo"
aria-labelledby="aria-label-contentinfo" />
</div>
</div>
<div id="layout-content" class="selected">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="button icon properties" id="properties-button" href="#properties" onclick="UI.show_sidebar()" data-hidden="big">
<span class="inner"><roundcube:label name="properties"></span>
</a>
<span class="header-title constant"><roundcube:var name="env:filename" /></span>
<div id="messagetoolbar" class="toolbar menu">
<roundcube:button command="download-attachment" type="link" label="download" title="download"
class="button download disabled" classAct="button download" innerclass="inner" />
<roundcube:button command="print-attachment" type="link" label="print" title="print"
class="button print disabled" classAct="button print" innerclass="inner" data-hidden="small" />
<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
<roundcube:button command="image-scale" type="link" prop="+" data-hidden="small"
class="button zoomin disabled" classAct="button zoomin"
label="zoomin" title="increaseimage" innerclass="inner" />
<roundcube:button command="image-scale" type="link" prop="-" data-hidden="small"
class="button zoomout disabled" classAct="button zoomout"
label="zoomout" title="decreaseimage" innerclass="inner" />
<roundcube:button command="image-rotate" type="link"
class="button rotate disabled" classAct="button rotate" data-hidden="small"
label="rotate" title="rotateimage" innerclass="inner" />
<roundcube:endif />
</div>
</div>
<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
<div class="iframe-wrapper">
<roundcube:object name="plugin.attachmentframe" id="attachmentframe" title="arialabelattachmentpreview"
role="main" aria-labelledby="aria-label-messagepart" />
</div>
<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
<div id="image-tools" class="image-tools" data-hidden="big">
<h3 id="aria-label-imagetools" class="voice"><roundcube:label name="arialabelimagetools" /></h3>
<div class="toolbar menu" role="menu" aria-labelledby="aria-label-imagetools">
<roundcube:button command="image-scale" type="link" prop="+"
class="button zoomin disabled" classAct="button zoomin"
label="zoomin" title="increaseimage" innerclass="inner" />
<roundcube:button command="image-scale" type="link" prop="-"
class="button zoomout disabled" classAct="button zoomout"
label="zoomout" title="decreaseimage" innerclass="inner" />
<roundcube:button command="image-rotate" type="link"
class="button rotate disabled" classAct="button rotate"
label="rotate" title="rotateimage" innerclass="inner" />
</div>
<a href="#" class="button icon tools" onclick="$(this).attr('title', $(this).data('label-' + ($('#image-tools').toggleClass('open').is('.open') ? 'hide' : 'show')))"
data-label-show="<roundcube:label name="showtools" />" data-label-hide="<roundcube:label name="hidetools" />" title="<roundcube:label name="showtools" />">
<span class="inner"><roundcube:label name="showtools" /></span>
</a>
</div>
<roundcube:endif />
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,9 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:var name="env:pagetitle" /></h1>
<div class="formcontent">
<roundcube:object name="folderform" class="tabbed propform" />
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,25 @@
<div id="swipeoptionsmenu" class="popupmenu propform" role="dialog" aria-labelledby="aria-label-listoptions">
<h3 id="aria-label-listoptions" class="voice"><roundcube:label name="swipe.swipeoptions" /></h3>
<div class="form-group row swipeoptions-left">
<label for="swipeoptions-left" class="col-form-label col-sm-4"><roundcube:label name="swipe.swipeleft" /></label>
<div class="col-sm-8">
<roundcube:object name="swipeoptionslist" type="select" direction="left" />
</div>
</div>
<div class="form-group row swipeoptions-right">
<label for="swipeoptions-right" class="col-form-label col-sm-4"><roundcube:label name="swipe.swiperight" /></label>
<div class="col-sm-8">
<roundcube:object name="swipeoptionslist" type="select" direction="right" />
</div>
</div>
<div class="form-group row swipeoptions-down">
<label for="swipeoptions-down" class="col-form-label col-sm-4"><roundcube:label name="swipe.swipedown" /></label>
<div class="col-sm-8">
<roundcube:object name="swipeoptionslist" type="select" direction="down" />
</div>
</div>
</div>
<script>
rcmail.swipe.container_class += ' menu';
rcmail.swipe.element = $('<ul>').addClass(rcmail.swipe.container_class).append($('<li>').append($('<a>').addClass(rcmail.swipe.button_class).append($('<span>').addClass(rcmail.swipe.label_class))));
</script>

245
plugins/swipe/swipe.less Normal file
View file

@ -0,0 +1,245 @@
/**
* Swipe plugin styles
*/
@import (reference) "../../../../skins/elastic/styles/variables";
@import (reference) "../../../../skins/elastic/styles/mixins";
@color-swipe-list-background: contrast(@color-layout-list-background, darken(@color-layout-list-background, 10%), lighten(@color-layout-list-background, 40%));
@color-swipe-list: contrast(@color-swipe-list-background, lighten(@color-swipe-list-background, 30%), darken(@color-swipe-list-background, 40%), 57%);
@color-swipe-mark: @color-message-text;
@color-swipe-mark-background: @color-message-information;
@color-swipe-danger: @color-message-error-text;
@color-swipe-danger-background: @color-message-error;
@color-swipe-move: @color-message-warning-text;
@color-swipe-move-background: @color-message-warning;
@color-swipe-compose: @color-message-success-text;
@color-swipe-compose-background: @color-message-success;
@color-swipe-down-border: @color-swipe-list-background;
@color-swipe-down-background: @color-layout-list-background;
@color-dark-swipe-list-background: contrast(@color-dark-background, darken(@color-dark-background, 15%), lighten(@color-dark-background, 10%));
@color-dark-swipe-list: contrast(@color-dark-swipe-list-background, lighten(@color-dark-swipe-list-background, 30%), darken(@color-dark-swipe-list-background, 40%), 57%);
@color-dark-swipe-mark: @color-dark-font;
@color-dark-swipe-mark-background: @color-dark-message-information;
@color-dark-swipe-danger: @color-dark-font;
@color-dark-swipe-danger-background: @color-dark-message-error;
@color-dark-swipe-move: @color-dark-font;
@color-dark-swipe-move-background: @color-dark-message-warning;
@color-dark-swipe-compose: @color-dark-font;
@color-dark-swipe-compose-background: @color-dark-message-success;
@color-dark-swipe-down-border: @color-dark-swipe-list-background;
@color-dark-swipe-down-background: @color-dark-background;
#swipe-action {
position: absolute;
display: flex;
align-items: center;
border-collapse: collapse;
&.horizontal {
background-color: @color-swipe-list-background;
a {
color: @color-swipe-list;
}
}
&.vertical {
top: 2em;
z-index: 1000;
a {
color: @color-swipe-list;
}
}
&.horizontal,
&.vertical > .swipe-container {
&.swipe-checkmail,
&.swipe-mark,
&.swipe-select {
background-color: @color-swipe-mark-background;
a {
color: @color-swipe-mark;
}
}
&.swipe-danger {
background-color: @color-swipe-danger-background;
a {
color: @color-swipe-danger;
}
}
&.swipe-move {
background-color: @color-swipe-move-background;
a {
color: @color-swipe-move;
}
}
&.swipe-success,
&.swipe-compose {
background-color: @color-swipe-compose-background;
a {
color: @color-swipe-compose;
}
}
}
> .swipe-container {
margin: 0;
padding: 0;
list-style-type: none;
.swipe-action {
font-size: 1.2em;
opacity: 1;
&::before {
margin: 0 .5rem;
font-size: inherit
}
}
&.left {
position: absolute;
right: 0;
.swipe-action::before {
float: right;
}
}
&.down {
margin: 0 auto;
padding: .01rem;
background-color: @color-swipe-down-background;
border-radius: 50%;
border: 1px solid @color-swipe-down-border;
.swipe-action {
&::before {
float: none;
margin: .4rem;
padding: .25rem;
line-height: 1;
font-size: 1.2em;
width: auto;
height: auto;
}
> .swipe-label {
display: none;
}
}
}
}
}
.swipe-active:not(#swipe-action),
.swipe-active > td {
background-color: @color-layout-list-background;
}
.toolbar.menu a.button.swipe {
display: none;
}
// no support in IE
html.layout-small.touch:not(.ie),
html.layout-phone.touch:not(.ie) {
.toolbar.menu {
a.button {
&.swipe {
display: inline-block;
&:before {
content: @fa-var-hand-pointer;
}
}
}
}
}
// hide down option in Edge (see known issues in readme)
html.edge #swipeoptionsmenu > .swipeoptions-down {
display: none;
}
// dark mode
& when (isdefined(@dark-mode-enabled)) {
& when (@dark-mode-enabled = true) {
html.dark-mode {
#swipe-action {
&.horizontal {
background-color: @color-dark-swipe-list-background;
a {
color: @color-dark-swipe-list;
}
}
&.vertical a {
color: @color-dark-swipe-list;
}
&.horizontal,
&.vertical > .swipe-container {
&.swipe-active,
&.swipe-mark {
background-color: @color-dark-swipe-mark-background;
a {
color: @color-dark-swipe-mark;
}
}
&.swipe-danger {
background-color: @color-dark-swipe-danger-background;
a {
color: @color-dark-swipe-danger;
}
}
&.swipe-move {
background-color: @color-dark-swipe-move-background;
a {
color: @color-dark-swipe-move;
}
}
&.swipe-success,
&.swipe-compose {
background-color: @color-dark-swipe-compose-background;
a {
color: @color-dark-swipe-compose;
}
}
}
> .swipe-container {
&.down {
background-color: @color-dark-swipe-down-background;
border-color: @color-dark-swipe-down-border;
}
}
}
.swipe-active:not(#swipe-action),
.swipe-active > td {
background-color: @color-dark-background;
}
}
}
}
@import (optional) "_custom";

1
plugins/swipe/swipe.min.css vendored Normal file
View file

@ -0,0 +1 @@
#swipe-action.horizontal a,#swipe-action.vertical a{color:grey}#swipe-action{position:absolute;display:flex;align-items:center;border-collapse:collapse}#swipe-action>.swipe-container.down .swipe-action>.swipe-label,.toolbar.menu a.button.swipe{display:none}#swipe-action.horizontal{background-color:#e6e6e6}#swipe-action.vertical{top:2em;z-index:1000}#swipe-action.horizontal.swipe-checkmail a,#swipe-action.horizontal.swipe-danger a,#swipe-action.horizontal.swipe-mark a,#swipe-action.horizontal.swipe-select a,#swipe-action.vertical>.swipe-container.swipe-checkmail a,#swipe-action.vertical>.swipe-container.swipe-danger a,#swipe-action.vertical>.swipe-container.swipe-mark a,#swipe-action.vertical>.swipe-container.swipe-select a{color:#fff}#swipe-action.horizontal.swipe-checkmail,#swipe-action.horizontal.swipe-mark,#swipe-action.horizontal.swipe-select,#swipe-action.vertical>.swipe-container.swipe-checkmail,#swipe-action.vertical>.swipe-container.swipe-mark,#swipe-action.vertical>.swipe-container.swipe-select{background-color:#37beff}#swipe-action.horizontal.swipe-danger,#swipe-action.vertical>.swipe-container.swipe-danger{background-color:#ff5552}#swipe-action.horizontal.swipe-move,#swipe-action.vertical>.swipe-container.swipe-move{background-color:#ffd452}#swipe-action.horizontal.swipe-move a,#swipe-action.vertical>.swipe-container.swipe-move a{color:#2c363a}#swipe-action.horizontal.swipe-compose,#swipe-action.horizontal.swipe-success,#swipe-action.vertical>.swipe-container.swipe-compose,#swipe-action.vertical>.swipe-container.swipe-success{background-color:#41b849}#swipe-action.horizontal.swipe-compose a,#swipe-action.horizontal.swipe-success a,#swipe-action.vertical>.swipe-container.swipe-compose a,#swipe-action.vertical>.swipe-container.swipe-success a{color:#fff}#swipe-action>.swipe-container{margin:0;padding:0;list-style-type:none}#swipe-action>.swipe-container .swipe-action{font-size:1.2em;opacity:1}#swipe-action>.swipe-container .swipe-action::before{margin:0 .5rem;font-size:inherit}#swipe-action>.swipe-container.left{position:absolute;right:0}#swipe-action>.swipe-container.left .swipe-action::before{float:right}#swipe-action>.swipe-container.down{margin:0 auto;padding:.01rem;background-color:#fff;border-radius:50%;border:1px solid #e6e6e6}#swipe-action>.swipe-container.down .swipe-action::before{float:none;margin:.4rem;padding:.25rem;line-height:1;font-size:1.2em;width:auto;height:auto}.swipe-active:not(#swipe-action),.swipe-active>td{background-color:#fff}html.layout-phone.touch:not(.ie) .toolbar.menu a.button.swipe,html.layout-small.touch:not(.ie) .toolbar.menu a.button.swipe{display:inline-block}html.layout-phone.touch:not(.ie) .toolbar.menu a.button.swipe:before,html.layout-small.touch:not(.ie) .toolbar.menu a.button.swipe:before{content:"\f25a"}html.edge #swipeoptionsmenu>.swipeoptions-down{display:none}html.dark-mode #swipe-action.horizontal{background-color:#374449}html.dark-mode #swipe-action.horizontal a,html.dark-mode #swipe-action.vertical a{color:#7c949d}html.dark-mode #swipe-action.horizontal.swipe-active a,html.dark-mode #swipe-action.horizontal.swipe-compose a,html.dark-mode #swipe-action.horizontal.swipe-danger a,html.dark-mode #swipe-action.horizontal.swipe-mark a,html.dark-mode #swipe-action.horizontal.swipe-move a,html.dark-mode #swipe-action.horizontal.swipe-success a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-active a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-compose a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-danger a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-mark a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-move a,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-success a{color:#c5d1d3}html.dark-mode #swipe-action.horizontal.swipe-active,html.dark-mode #swipe-action.horizontal.swipe-mark,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-active,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-mark{background-color:#217299}html.dark-mode #swipe-action.horizontal.swipe-danger,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-danger{background-color:#993331}html.dark-mode #swipe-action.horizontal.swipe-move,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-move{background-color:#997f31}html.dark-mode #swipe-action.horizontal.swipe-compose,html.dark-mode #swipe-action.horizontal.swipe-success,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-compose,html.dark-mode #swipe-action.vertical>.swipe-container.swipe-success{background-color:#276e2c}html.dark-mode #swipe-action>.swipe-container.down{background-color:#21292c;border-color:#374449}html.dark-mode .swipe-active:not(#swipe-action),html.dark-mode .swipe-active>td{background-color:#21292c}

1
styles/embed.min.css vendored Normal file
View file

@ -0,0 +1 @@
.popover,.rcmail-inline-message,body,button,input,optgroup,select,textarea{font-family:Roboto,sans-serif}@font-face{font-family:Icons;font-style:normal;font-weight:900;src:url(../fonts/fa-solid-900.woff2) format('woff2'),url(../fonts/fa-solid-900.woff) format('woff')}@font-face{font-family:Icons;font-style:normal;font-weight:400;src:url(../fonts/fa-regular-400.woff2) format('woff2'),url(../fonts/fa-regular-400.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:400;src:local('Roboto'),local('Roboto-Regular'),url(../fonts/roboto-v19-regular.woff2) format('woff2'),url(../fonts/roboto-v19-regular.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:400;src:local('Roboto Italic'),local('Roboto-Italic'),url(../fonts/roboto-v19-italic.woff2) format('woff2'),url(../fonts/roboto-v19-italic.woff) format('woff')}@font-face{font-family:Roboto;font-style:normal;font-weight:700;src:local('Roboto Bold'),local('Roboto-Bold'),url(../fonts/roboto-v19-regular-700.woff2) format('woff2'),url(../fonts/roboto-v19-regular-700.woff) format('woff')}@font-face{font-family:Roboto;font-style:italic;font-weight:700;src:local('Roboto Bold Italic'),local('Roboto-BoldItalic'),url(../fonts/roboto-v19-italic-700.woff2) format('woff2'),url(../fonts/roboto-v19-italic-700.woff) format('woff')}button,input,select,textarea{line-height:initial}input{vertical-align:middle}a{color:#00acff}a:hover{color:#008acc}a.disabled{pointer-events:none}a.disabled:not(.btn){opacity:.5}.mce-content-body{margin:4px;color:#2c363a}.mce-content-body div.pre{font-family:monospace}.mce-content-body blockquote{border-left:#1010ff 2px solid;margin:0;padding:0 .4em}.rcmail-inline-message{font-size:14px;padding:.5em;margin:0 0 .5em;opacity:.95;color:#2c363a;background-color:rgba(255,212,82,.2);display:flex;align-items:center}.rcmail-inline-message:before{display:block;float:left;margin:0 .3em 0 0;height:1em;font-family:Icons;font-style:normal;font-weight:900;text-decoration:inherit;text-align:center;speak:none;font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;font-size:1.5em;line-height:1;width:1em;content:"\f071";color:#ffd452}.rcmail-inline-message span{line-height:1.5}.rcmail-inline-message a{color:#00acff}.rcmail-inline-message a:hover{color:#008acc}.rcmail-inline-message button{vertical-align:middle;white-space:nowrap;padding:.375em .75em;margin-left:.5em;font-size:1em;line-height:1.5;border-radius:.25em;border:1px solid transparent;color:#fff;background:#37beff}.rcmail-inline-message button:focus{box-shadow:0 0 0 .2rem rgba(55,190,255,.5)}.rcmail-inline-message button:hover{background:#0eb1ff;border-color:#04adff}.rcmail-inline-message button:not([disabled]):not(.disabled):active{background:#00abfe;border-color:#00a4f4;box-shadow:0 0 0 .2rem rgba(55,190,255,.53)}.rcmail-inline-buttons{margin:0}

1
styles/print.min.css vendored Normal file
View file

@ -0,0 +1 @@
#print-layout #message-header,#print-layout .image-attachment .image-link{margin-bottom:.5rem}body{overflow:auto;height:auto}#print-layout{margin:1rem}#print-layout #logo{max-height:80px}#print-layout .image-attachment .attachment-links{display:none}#print-layout .attachment-size{padding-left:.1rem}#print-layout blockquote{page-break-inside:auto}#print-layout .formcontent{padding:0}#print-layout .formcontent legend{margin-top:.5rem}#print-layout .formcontent .row .form-control-plaintext{padding:.1rem}#print-layout .formcontent .contactfield{padding:.2rem 0}#print-layout .propform.grouped .row.input-group .input-group-text{padding:0;min-width:12rem;background:#fff;border:0}#print-layout .contact-header{margin-bottom:0}

7915
styles/styles.min.css vendored Normal file

File diff suppressed because it is too large Load diff

16
templates/about.html Normal file
View file

@ -0,0 +1,16 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="about" /></h1>
<div class="frame-content">
<roundcube:object name="aboutcontent" />
<h2 class="sysname">Roundcube Webmail <roundcube:object name="version" /></h2>
<p class="copyright"><roundcube:object name="copyright" /></p>
<p class="license"><roundcube:object name="license" /></p>
<div class="readtext">
<h3><roundcube:label name="installedplugins" /></h3>
<roundcube:object name="pluginlist" id="pluginlist" class="records-table" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

173
templates/addressbook.html Normal file
View file

@ -0,0 +1,173 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="addressbook" /></h1>
<!-- sources/groups list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="directorylist-header">
<div class="header">
<span id="directorylist-header" class="header-title"><roundcube:label name="groups" /></span>
<roundcube:button name="groupoptions" type="link" title="arialabelabookgroupoptions" label="actions"
class="button icon sidebar-menu" innerClass="inner" data-popup="groupoptions-menu" />
</div>
<div class="scroller">
<roundcube:object name="directorylist" id="directorylist" class="treelist listing iconized" />
<h3 class="voice"><roundcube:label name="savedsearches" /></h3>
<roundcube:object name="savedsearchlist" id="savedsearchlist" class="treelist listing iconized" />
</div>
<roundcube:include file="includes/footer_menu.html" />
</div>
<!-- contacts list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-contactslist">
<table class="tableheaderseb"><tr>
<td class="only_small_screen" style="padding:.5rem 0 0 1rem">
<a class="button icon task-menu-button" href="#menu" style="font-size: 20px;"><span class="inner"><roundcube:label name="menu" /></span></a>
</td>
<td>
<roundcube:object name="searchform" id="searchform" wrapper="searchbar menu"
label="contactsearchform" buttontitle="findcontacts" options="searchmenu" ariatag="h2" />
</td>
<td class='only_small_screen'></td>
</tr></table>
<div id="searchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu">
<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
<div class="formcontent">
<ul class="proplist">
<li><label><input type="checkbox" name="s_mods[]" value="name" /><roundcube:label name="name" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="firstname" /><roundcube:label name="firstname" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="surname" /><roundcube:label name="surname" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="email" /><roundcube:label name="email" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="*" /><roundcube:label name="allfields" /></label></li>
</ul>
</div>
<div class="formbuttons">
<button type="button" class="btn btn-primary icon search" onclick="return rcmail.command('search')"><roundcube:label name="search" /></button>
</div>
</div>
<div class="scroller">
<h2 id="aria-label-contactslist" class="voice"><roundcube:label name="contacts" /></h2>
<roundcube:object name="addresslist" id="contacts-table" class="listing iconized contactlist"
noheader="true" role="listbox" data-list="contact_list"
data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
</div>
<roundcube:include file="includes/pagenav.html" />
</div>
<!-- contact details frame -->
<div id="layout-content" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<roundcube:include file="includes/top-right_menu.html" />
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title only_small"></span>
<!-- toolbar -->
<div id="addressbooktoolbar" class="toolbar menu">
<roundcube:button command="add" type="link" class="create disabled" classAct="create"
label="create" title="newcontact" innerclass="inner" data-fab="true" />
<roundcube:button command="print" type="link" data-hidden="small"
class="print disabled" classAct="print"
label="print" title="printcontact" innerclass="inner" />
<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
label="delete" title="deletecontact" innerClass="inner" />
<span class="spacer"></span>
<roundcube:button command="advanced-search" type="link" class="search disabled" classAct="search"
label="search" title="advsearch" innerclass="inner" />
<roundcube:container name="toolbar" id="addressbooktoolbar" />
<roundcube:button command="import" type="link" class="import disabled" classAct="import"
label="import" title="importcontacts" innerclass="inner" />
<span class="dropbutton">
<roundcube:button command="export" type="link" class="export disabled" classAct="export"
label="export" title="exportvcards" innerclass="inner" />
<a href="#export" class="dropdown" data-popup="export-menu">
<span class="inner"><roundcube:label name="arialabelcontactexportoptions" /></span>
</a>
</span>
<roundcube:button name="contactmenulink" id="contactmenulink" type="link"
class="more" label="more" title="moreactions"
data-popup="contact-menu" innerclass="inner" />
</div>
</div>
<h2 id="aria-label-contact-frame" class="voice"><roundcube:label name="contactproperties" /></h2>
<div class="iframe-wrapper">
<roundcube:object name="contentframe" id="contact-frame" src="env:blankpage" title="contactproperties"
aria-labelledby="aria-label-contact-frame" />
</div>
</div>
<!-- popup menus -->
<div id="export-menu" class="popupmenu">
<h3 id="aria-label-export-menu" class="voice"><roundcube:label name="arialabelcontactexportoptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-export-menu">
<roundcube:button type="link-menuitem" command="export" label="exportall" prop="sub" class="export all disabled" classAct="export all active" />
<roundcube:button type="link-menuitem" command="export-selected" label="exportsel" prop="sub" class="export select disabled" classAct="export select active" />
</ul>
</div>
<div id="groupoptions-menu" class="popupmenu">
<h3 id="aria-label-groupoptions-menu" class="voice"><roundcube:label name="arialabelabookgroupoptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-groupoptions-menu">
<roundcube:button type="link-menuitem" command="group-create" title="newgroup" label="addgroup" class="create disabled" classAct="create active" />
<roundcube:button type="link-menuitem" command="group-rename" label="grouprename" class="group rename disabled" classAct="group rename active" />
<roundcube:button type="link-menuitem" command="group-delete" label="groupdelete" class="group delete disabled" classAct="group delete active" />
<roundcube:button type="link-menuitem" command="search-create" label="searchsave" class="search disabled" classAct="search active" />
<roundcube:button type="link-menuitem" command="search-delete" label="searchdelete" class="search delete disabled" classAct="search delete active" />
<roundcube:container name="groupoptions" id="groupoptionsmenu" />
</ul>
</div>
<div id="listselect-menu" class="popupmenu">
<h3 id="aria-label-listselect-menu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-listselect-menu">
<roundcube:button type="link-menuitem" label="selection" class="selection" classAct="selection active"
name="list-toggle-button" id="list-toggle-button" onclick="UI.toggle_list_selection(this, 'contacts-table')" />
<roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="select page disabled" classAct="select page active" />
<roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="select invert disabled" classAct="select invert active" />
<roundcube:button command="select-none" type="link-menuitem" label="none" class="select none disabled" classAct="select none active" />
</ul>
</div>
<div id="dragcontact-menu" class="popupmenu">
<h3 id="aria-label-dragcontact-menu" class="voice"><roundcube:label name="arialabeldropactionmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-dragcontact-menu">
<roundcube:button type="link-menuitem" command="move" onclick="return rcmail.drag_menu_action('move')" label="move" class="disabled" classAct="active" />
<roundcube:button type="link-menuitem" command="copy" onclick="return rcmail.drag_menu_action('copy')" label="copy" class="disabled" classAct="active" />
</ul>
</div>
<div id="contact-menu" class="popupmenu">
<h3 id="aria-label-contact-menu" class="voice"><roundcube:label name="arialabelmorecontactactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-contact-menu">
<roundcube:if condition="env:qrcode" />
<roundcube:button type="link-menuitem" command="qrcode" label="qrcode" class="qrcode disabled" classAct="qrcode active" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="group-assign-selected" label="groupassign" class="assigngroup disabled" classAct="assigngroup active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="group-remove-selected" label="groupremove" class="removegroup disabled" classAct="removegroup active" />
<roundcube:if condition="env:contact_move_enabled" />
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:endif />
<roundcube:if condition="env:contact_copy_enabled" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:endif />
<roundcube:container name="contactmenu" id="contact-menu" />
</ul>
</div>
<roundcube:include file="includes/footer.html" />

74
templates/bounce.html Normal file
View file

@ -0,0 +1,74 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="bouncemsg" /></h1>
<div class="formcontent">
<roundcube:object name="bounceObjects" id="bounce-objects" class="mb-3" />
<roundcube:object name="composeFormHead" role="main" />
<div id="bounceheaders" role="region" aria-labelledby="aria-label-composeheaders">
<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
<div class="compose-headers">
<div id="compose_from" class="form-group row">
<label for="_from" class="col-2 col-form-label"><roundcube:label name="from" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="from" id="_from" form="form" tabindex="1" class="form-control" />
<span class="input-group-append">
<a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="input-group-text icon edit" title="<roundcube:label name="editidents" />" tabindex="1"><span class="inner"><roundcube:label name="editidents" /></span></a>
</div>
</div>
</div>
<div id="compose_to" class="form-group row">
<label for="_to" class="col-2 col-form-label"><roundcube:label name="to" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="to" id="_to" form="form" tabindex="1" aria-required="true" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-header" data-popup="headers-menu" class="input-group-text icon add" title="<roundcube:label name="addheader" />" tabindex="1"><span class="inner"><roundcube:label name="addheader" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_cc" class="hidden form-group row">
<label for="_cc" class="col-2 col-form-label"><roundcube:label name="cc" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="cc" id="_cc" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_cc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_bcc" class="hidden form-group row">
<label for="_bcc" class="col-2 col-form-label"><roundcube:label name="bcc" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="bcc" id="_bcc" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_bcc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
</div>
<roundcube:if condition="!config:no_save_sent_messages" />
<div class="form-group row">
<label for="compose-store-target" class="col-form-label col-6"><roundcube:label name="savesentmessagein" /></label>
<div class="col-6">
<roundcube:object name="storetarget" id="compose-store-target" noform="true" tabindex="2" class="form-control" />
</div>
</div>
<roundcube:endif />
</form>
</div>
<div id="headers-menu" class="popupmenu" data-popup-init="headersmenu">
<h3 id="aria-label-headersmenu" class="voice"><roundcube:label name="arialabelheadersmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-headersmenu">
<li role="menuitem"><a data-target="cc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="cc" /></a></li>
<li role="menuitem"><a data-target="bcc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="bcc" /></a></li>
</ul>
</div>
<roundcube:include file="includes/footer.html" />

294
templates/compose.html Normal file
View file

@ -0,0 +1,294 @@
<roundcube:include file="includes/layout.html" />
<roundcube:add_label name="recipientsadded" />
<roundcube:add_label name="nocontactselected" />
<roundcube:add_label name="recipient" />
<roundcube:add_label name="insert" />
<roundcube:add_label name="insertcontact" />
<roundcube:add_label name="recipientedit" />
<h1 class="voice"><roundcube:label name="compose" /></h1>
<!-- compose options and attachments list -->
<div id="layout-sidebar" class="listbox sidebar-right">
<div class="header">
<a style="width:40px;font-size: 1.75rem;height: 58px;text-decoration:none;text-align:center;" class="back-content-button only_small" href="#content"><i class="sebicon backicon"></i></a>
<span class="header-title all-sizes">
<roundcube:label name="optionsandattachments" />
</span>
</div>
<div class="scroller">
<!-- attachments -->
<div id="compose-attachments" class="file-upload" role="region" aria-labelledby="aria-label-compose-attachments">
<h2 id="aria-label-compose-attachments" class="voice"><roundcube:label name="attachments" /></h2>
<div class="upload-form">
<roundcube:object name="composeAttachmentForm" mode="hint" />
<button type="button" class="btn btn-secondary attach" tabindex="2" onclick="rcmail.upload_input('uploadform')"><roundcube:label name="addattachment" /></button>
</div>
<roundcube:object name="composeAttachmentList" id="attachment-list" class="attachmentslist" tabindex="2" />
<roundcube:object name="fileDropArea" id="compose-attachments" />
</div>
<!-- compose options -->
<div id="compose-options" class="formcontent" role="region" aria-labelledby="aria-label-composeoptions">
<h2 id="aria-label-composeoptions" class="voice"><roundcube:label name="arialabelcomposeoptions" /></h2>
<roundcube:container name="composeoptions" id="compose-options" />
<roundcube:if condition="!in_array('mdn_default', (array)config:dont_override)" />
<div class="form-group row form-check">
<label for="compose-mdn" class="col-form-label col-6"><roundcube:label name="returnreceipt" /></label>
<div class="col-6 form-check">
<roundcube:object name="mdnCheckBox" id="compose-mdn" noform="true" tabindex="2" class="form-check-input" />
</div>
</div>
<roundcube:endif />
<roundcube:if condition="!in_array('dsn_default', (array)config:dont_override)" />
<div class="form-group row form-check">
<label for="compose-dsn" class="col-form-label col-6"><roundcube:label name="dsn" /></label>
<div class="col-6 form-check">
<roundcube:object name="dsnCheckBox" id="compose-dsn" noform="true" tabindex="2" class="form-check-input" />
</div>
</div>
<roundcube:endif />
<div class="form-group row">
<label for="compose-priority" class="col-form-label col-6"><roundcube:label name="priority" /></label>
<div class="col-6">
<roundcube:object name="prioritySelector" id="compose-priority" noform="true" tabindex="2" class="custom-select" />
</div>
</div>
<roundcube:if condition="!config:no_save_sent_messages" />
<div class="form-group row">
<label for="compose-store-target" class="col-form-label col-6"><roundcube:label name="savesentmessagein" /></label>
<div class="col-6">
<roundcube:object name="storetarget" id="compose-store-target" noform="true" tabindex="2" class="custom-select" />
</div>
</div>
<roundcube:endif />
</div>
</div>
</div>
<div id="layout-content" class="listbox selected" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header">
<a style="width:40px;font-size: 1.75rem;height: 58px;text-decoration:none;text-align:center;" href="./?_task=mail"><i class="sebicon backicon"></i></a>
<span class="header-title"><roundcube:label name="compose" /></span>
<div class="only_small_screen" style="width: 50px;text-align: center;" onclick="return rcmail.command('send','',this,event)">
<i class="sebicon sendicon" style=""></i>
</div>
<!-- toolbar -->
<div id="messagetoolbar" class="toolbar menu" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="options" href="#options" onclick="mail_menu_show_attachement()" data-hidden="big">
<span class="inner"><roundcube:label name="optionsandattachments"></span>
</a>
<roundcube:button command="savedraft" type="link" class="save draft disabled" classAct="save draft"
label="save" title="savemessage" tabindex="2" innerclass="inner" data-content-button="true" />
<span class="spacer"></span>
<roundcube:button name="addattachment" type="link" class="attach"
label="attach" title="addattachment" data-hidden="small"
onclick="if (!$(this).is('.disabled')) rcmail.upload_input('uploadform')"
aria-haspopup="true" aria-expanded="false" tabindex="2" innerclass="inner" />
<roundcube:button command="insert-sig" type="link" class="signature disabled" classAct="signature"
label="signature" title="insertsignature" tabindex="2" innerclass="inner" />
<a href="#responses" class="responses" label="responses" title="<roundcube:label name='insertresponse' />" unselectable="on" tabindex="2" data-popup="responses-menu">
<span class="inner"><roundcube:label name="responses" /></span>
</a>
<roundcube:if condition="!empty(env:spell_langs)" />
<span class="dropbutton">
<roundcube:button command="spellcheck" type="link" class="spellcheck disabled"
classAct="spellcheck" classSel="button spellcheck pressed"
label="spellcheck" title="checkspelling" tabindex="2" innerclass="inner" />
<a href="#languages" class="dropdown" tabindex="2" data-popup="spell-menu">
<span class="inner"><roundcube:label name="language" /></span>
</a>
</span>
<roundcube:endif />
<span class="dropbutton" style="display:none">
<roundcube:button command="compose-encrypted" type="link" class="encrypt disabled"
classAct="encrypt" classSel="encrypt selected" innerclass="inner"
label="encrypt" title="encryptmessagemailvelope" tabindex="2" />
<a href="#encryption" id="encryption-menu-button" class="dropdown" tabindex="2" data-popup="encryption-menu">
<span class="inner"><roundcube:label name="encryptmessagemailvelope" /></span>
</a>
</span>
<roundcube:container name="toolbar" id="compose-toolbar" />
</div>
</div>
<div id="compose-content" class="formcontainer content">
<roundcube:object name="composeFormHead" role="main" class="formcontent scroller" />
<roundcube:object name="composeObjects" id="compose-objects" class="mb-3" />
<!-- message headers -->
<div id="compose-headers" role="region" aria-labelledby="aria-label-composeheaders">
<h2 id="aria-label-composeheaders" class="voice"><roundcube:label name="arialabelmessageheaders" /></h2>
<div class="compose-headers">
<div id="compose_from" class="form-group row">
<label for="_from" class="col-2 col-form-label"><roundcube:label name="from" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="from" id="_from" form="form" tabindex="1" class="form-control" />
<span class="input-group-append">
<a href="#identities" onclick="return rcmail.command('switch-task', 'settings/identities')" class="input-group-text icon edit" title="<roundcube:label name="editidents" />" tabindex="1"><span class="inner"><roundcube:label name="editidents" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_to" class="form-group row">
<label for="_to" class="col-2 col-form-label"><roundcube:label name="to" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="to" id="_to" form="form" tabindex="1" aria-required="true" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-contact" onclick="UI.recipient_selector('to')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
</span>
<span class="input-group-append">
<a href="#add-header" data-popup="headers-menu" class="input-group-text icon add" title="<roundcube:label name="addheader" />" tabindex="1"><span class="inner"><roundcube:label name="addheader" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_cc" class="hidden form-group row">
<label for="_cc" class="col-2 col-form-label"><roundcube:label name="cc" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="cc" id="_cc" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-contact" onclick="UI.recipient_selector('cc')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
</span>
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_cc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_bcc" class="hidden form-group row">
<label for="_bcc" class="col-2 col-form-label"><roundcube:label name="bcc" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="bcc" id="_bcc" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-contact" onclick="UI.recipient_selector('bcc')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
</span>
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_bcc')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_replyto" class="hidden form-group row">
<label for="_replyto" class="col-2 col-form-label"><roundcube:label name="replyto" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="replyto" id="_replyto" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-contact" onclick="UI.recipient_selector('replyto')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
</span>
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_replyto')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_followupto" class="hidden form-group row">
<label for="_followupto" class="col-2 col-form-label"><roundcube:label name="followupto" /></label>
<div class="col-10">
<div class="input-group">
<roundcube:object name="composeHeaders" part="followupto" id="_followupto" form="form" tabindex="1" data-recipient-input="true" />
<span class="input-group-append">
<a href="#add-contact" onclick="UI.recipient_selector('followupto')" class="input-group-text icon add recipient" title="<roundcube:label name="addcontact" />" tabindex="1"><span class="inner"><roundcube:label name="addcontact" /></span></a>
</span>
<span class="input-group-append">
<a href="#delete" onclick="UI.header_reset('_followupto')" class="input-group-text icon delete" title="<roundcube:label name='delete' />" tabindex="1"><span class="inner"><roundcube:label name="delete" /></span></a>
</span>
</div>
</div>
</div>
<div id="compose_subject" class="form-group row">
<label for="compose-subject" class="col-2 col-form-label"><roundcube:label name="subject" /></label>
<div class="col-10">
<roundcube:object name="composeSubject" id="compose-subject" form="form" tabindex="1" class="form-control" />
</div>
</div>
</div>
</div>
<!-- message compose body -->
<div id="composebodycontainer">
<label for="composebody" class="voice"><roundcube:label name="arialabelmessagebody" /></label>
<roundcube:object name="composeBody" id="composebody" form="form" cols="70" rows="20" class="form-control" tabindex="1" />
<roundcube:if condition="!in_array('htmleditor', (array)config:dont_override)" />
<roundcube:object name="editorSelector" id="editor-selector" editorid="composebody" noform="true" class="hidden" />
<roundcube:endif />
</div>
</form>
<div class="formbuttons">
<roundcube:button command="send" class="btn btn-primary send" label="send" tabindex="1" data-content-button="true" />
<div class="float-right">
<roundcube:button command="extwin" type="link" label="openinextwin" data-hidden="small" class="button icon btn btn-link extwin" data-tabindex="1" condition="!env:extwin" />
</div>
</div>
</div>
</div>
<roundcube:object name="composeAttachmentForm" id="uploadform" mode="smart" />
<div id="spell-menu" class="popupmenu" data-popup-init="spellmenu"></div>
<div id="headers-menu" class="popupmenu" data-popup-init="headersmenu">
<h3 id="aria-label-headersmenu" class="voice"><roundcube:label name="arialabelheadersmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-headersmenu">
<li role="menuitem"><a data-target="cc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="cc" /></a></li>
<li role="menuitem"><a data-target="bcc" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="bcc" /></a></li>
<li role="menuitem"><a data-target="replyto" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="replyto" /></a></li>
<li role="menuitem"><a data-target="followupto" href="#" role="button" tabindex="-1" class="recipient active"><roundcube:label name="followupto" /></a></li>
</ul>
</div>
<div id="responses-menu" class="popupmenu">
<h3 id="aria-label-responsesmenu" class="voice"><roundcube:label name="arialabelresponsesmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-responsesmenu">
<li role="separator" class="separator"><label><roundcube:label name="insertresponse" /></label></li>
<roundcube:object name="responseslist" id="responseslist" tagname="ul" class="rounded-0" itemclass="active" list-placeholder="noresponsesavailable" />
<li role="separator" class="separator"><label><roundcube:label name="manageresponses" /></label></li>
<roundcube:button command="save-response" type="link-menuitem" label="newresponse" class="create responses disabled" classAct="create responses active" unselectable="on" />
<roundcube:button name="responses" type="link-menuitem" label="editresponses" class="edit responses active" onclick="return rcmail.command('switch-task', 'settings/responses')" />
</ul>
</div>
<div id="attachmentmenu" class="popupmenu">
<h3 id="aria-label-attachmentmenu" class="voice"><roundcube:label name="arialabelattachmentmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-attachmentmenu">
<roundcube:button command="open-attachment" id="attachmenuopen" type="link-menuitem" label="open" class="extwin disabled" classAct="extwin active" />
<roundcube:button command="download-attachment" id="attachmenudownload" type="link-menuitem" label="download" class="download disabled" classAct="download active" />
<roundcube:button command="rename-attachment" id="attachmenurename" type="link-menuitem" label="rename" class="rename disabled" classAct="rename active" />
<roundcube:container name="attachmentmenu" id="attachmentoptionsmenu" />
</ul>
</div>
<div id="encryption-menu" class="popupmenu">
<ul class="menu listing" role="menu">
<roundcube:button command="compose-encrypted" type="link-menuitem" label="encryptmessage" class="encrypt disabled" classAct="encrypt active" />
<roundcube:button command="compose-encrypted-signed" type="link-menuitem" label="encryptandsign" class="encrypt sign disabled" classAct="encrypt sign active" />
</ul>
</div>
<div id="recipient-dialog" class="popupmenu" role="region" aria-labelledby="aria-label-composecontacts">
<div class="listbox">
<roundcube:object name="searchform" id="searchform" wrapper="searchbar menu"
label="contactsearchform" buttontitle="findcontacts" ariatag="h2" class="no-bs" />
<div class="scroller" tabindex="-1">
<roundcube:object name="addressbooks" id="directorylist" class="treelist listing iconized"
summary="ariasummarycomposecontacts" />
<roundcube:object name="addresslist" id="contacts-table" class="listing iconized contactlist"
noheader="true" role="listbox" data-list="contact_list" data-list-select-replace="#recipient-dialog .pagenav-text" />
</div>
<roundcube:include file="includes/pagenav.html" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

23
templates/contact.html Normal file
View file

@ -0,0 +1,23 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="contactproperties" /></h1>
<div class="formcontent">
<div class="contact-header">
<div id="contactphoto" class="contact-photo">
<roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.svg"
placeholderGroup="/images/contactgroup.svg" />
</div>
<roundcube:object name="contacthead" id="contacthead" class="contact-head readonly" with-source="true" />
</div>
<div id="contacttabs" class="tabbed">
<roundcube:object name="contactdetails" fieldset-class="propform grouped readonly"
short-legend-labels="true" />
</div>
</div>
<div class="formbuttons">
<roundcube:button command="edit" class="btn btn-primary edit" label="edit" condition="!ENV:readonly" />
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,29 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:object name="steptitle" /></h1>
<roundcube:form name="editform" method="post" id="contact-details" class="formcontent">
<div class="contact-header">
<fieldset id="contactphoto" class="contact-photo">
<legend class="voice"><roundcube:label name="contactphoto" /></legend>
<roundcube:object name="contactphoto" id="contactpic" class="image-upload" placeholder="/images/contactpic.svg" />
<roundcube:if condition="env:photocol" />
<roundcube:object name="fileDropArea" id="contactpic" />
<roundcube:endif />
</fieldset>
<roundcube:object name="contactedithead" id="contacthead" form="editform"
class="propform contact-head" use-labels="true" with-source="true" />
</div>
<div id="contacttabs" class="tabbed">
<roundcube:object name="contacteditform" textareacols="60" form="editform"
fieldset-class="propform grouped" compact-form="true" short-legend-labels="true" />
</div>
</form>
<div class="formbuttons">
<roundcube:button command="save" class="btn btn-primary submit" label="save" onclick="LS_remove_contact();return rcmail.command('save','',this,event)"/>
</div>
<roundcube:object name="photoUploadForm" id="upload-form" mode="smart" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,9 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="importcontacts" /></h1>
<div class="formcontent">
<roundcube:object name="importstep" class="propform" table-header-class="form-group row d-none d-sm-flex" table-col-source-class="col-sm-4" table-col-destination-class="col-sm-8" />
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,19 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="logo" id="logo" alt="Logo" logo-type="print" logo-match="template" class="float-sm-right" />
<div class="print-content formcontent" role="main">
<div class="contact-header">
<div id="contactphoto" class="contact-photo">
<roundcube:object name="contactphoto" id="contactpic" placeholder="/images/contactpic.svg"
placeholderGroup="/images/contactgroup.svg" />
</div>
<roundcube:object name="contacthead" id="contacthead" class="contact-head readonly" with-source="true" />
</div>
<div id="contacttabs">
<roundcube:object name="contactdetails" fieldset-class="propform grouped readonly"
short-legend-labels="true" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,9 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="addressbook" /> : <roundcube:label name="advsearch" /></h1>
<div class="formcontent">
<roundcube:object name="searchform" id="advsearchform" class="tabbed propform" short-legend-labels="true" />
</div>
<roundcube:include file="includes/footer.html" />

7
templates/dialog.html Normal file
View file

@ -0,0 +1,7 @@
<roundcube:include file="includes/layout.html" />
<div class="frame-content <roundcube:var name="env:dialog_class" />">
<roundcube:object name="dialogcontent" />
</div>
<roundcube:include file="includes/footer.html" />

21
templates/error.html Normal file
View file

@ -0,0 +1,21 @@
<roundcube:include file="includes/layout.html" />
<roundcube:if condition="!env:framed && !env:extwin" />
<roundcube:include file="includes/menu.html" />
<div id="layout-content" class="selected" role="main">
<div class="header">
<a class="button icon task-menu-button" href="#menu"><span class="inner"><roundcube:label name="menu" /></span></a>
<span class="header-title"></span>
</div>
<div class="frame-content scroller">
<roundcube:else />
<div id="layout-content" class="selected" role="main">
<div class="frame-content scroller">
<roundcube:endif />
$__page_content
</div>
</div>
<roundcube:include file="includes/footer.html" />

13
templates/folderedit.html Normal file
View file

@ -0,0 +1,13 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:label name="folderproperties" /></h1>
<div class="formcontent">
<roundcube:object name="folderdetails" class="propform" />
</div>
<div class="formbuttons">
<roundcube:button command="save" class="btn btn-primary submit" label="save" />
</div>
<roundcube:include file="includes/footer.html" />

63
templates/folders.html Normal file
View file

@ -0,0 +1,63 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/settings-menu.html" />
<h1 class="voice"><roundcube:label name="folders" /></h1>
<!-- folders list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-folderslist">
<div class="header">
<a class="button icon back-list-button_middle" href="?_task=settings"><span class="inner"><roundcube:label name="back" /></span></a>
<span id="aria-label-identitieslist" class="header-title"> </span>
<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
</div>
<roundcube:object name="searchform" id="foldersearch" wrapper="searchbar menu" ariatag="h2"
label="foldersearchform" buttontitle="findfolders" options="foldersearchmenu" />
<div id="foldersearchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="subscription-table">
<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
<div class="formcontent">
<roundcube:object name="folderfilter" id="folderlist-filter" noheader="true" noevent="true" />
</div>
<div class="formbuttons">
<button type="button" class="btn btn-primary icon search" onclick="rcmail.folder_filter($('#folderlist-filter').val())"><roundcube:label name="search" /></button>
</div>
</div>
<div class="scroller" tabindex="-1">
<roundcube:object name="foldersubscription" id="subscription-table"
class="treelist listing folderlist iconized" role="listbox" data-list="subscription_list"
data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="folder-create" />
</div>
<div class="footer small">
<roundcube:if condition="env:quota" />
<div id="quotadisplay" class="quota-widget">
<span class="voice"><roundcube:label name="quota"></span>
<roundcube:object name="quotaDisplay" class="count" display="text" />
</div>
<roundcube:endif />
</div>
</div>
<!-- folder info frame -->
<div id="layout-content" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title"></span>
<!-- toolbar -->
<div id="folderstoolbar" class="toolbar menu">
<roundcube:button command="create-folder" type="link" class="create disabled" classAct="create"
label="create" title="createfolder" innerClass="inner" data-fab="true" />
<roundcube:button command="delete-folder" type="link" class="delete disabled" classAct="delete"
label="delete" title="delete" innerclass="inner" />
<roundcube:button command="purge" type="link" class="purge disabled" classAct="purge"
label="empty" title="empty" innerclass="inner" />
</div>
</div>
<div class="iframe-wrapper">
<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

43
templates/identities.html Normal file
View file

@ -0,0 +1,43 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/settings-menu.html" />
<h1 class="voice"><roundcube:label name="settings" /> : <roundcube:label name="identities" /></h1>
<!-- responses list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-identitieslist">
<div class="header">
<a class="button icon back-list-button_middle" href="?_task=settings"><span class="inner"><roundcube:label name="back" /></span></a>
<span id="aria-label-identitieslist" class="header-title"><roundcube:label name="identities" /></span>
<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
</div>
<div class="scroller">
<roundcube:object name="identitieslist" id="identities-table" class="listing"
noheader="true" role="listbox" data-list="identity_list"
data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
</div>
<div class="footer"></div>
</div>
<!-- response details frame -->
<div id="layout-content" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title"></span>
<!-- toolbar -->
<div id="identitiestoolbar" class="toolbar menu">
<roundcube:button command="add" type="link" class="create disabled" classAct="create"
label="create" title="newidentity" innerClass="inner"
condition="config:identities_level:0<2" data-fab="true" />
<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
label="delete" title="delete" innerClass="inner"
condition="config:identities_level:0<2" />
</div>
</div>
<div class="iframe-wrapper">
<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelidentityeditfrom" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,13 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:object name="steptitle" /></h1>
<div class="formcontent">
<roundcube:object name="identityform" class="propform" size="40" textareacols="40" textarearows="6" />
</div>
<div class="formbuttons">
<roundcube:button command="save" class="btn btn-primary submit" label="save" condition="!env:readonly" />
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,14 @@
<roundcube:if condition="!env:framed || env:extwin" />
</div>
<roundcube:if condition="config:support_url" />
<a href="<roundcube:var name='config:support_url' />" target="_blank" id="supportlink" class="hidden"><roundcube:label name="support" /></a>
<roundcube:endif />
<roundcube:endif />
<roundcube:object name="message" id="messagestack" />
<script src="/deps/bootstrap.bundle.min.js"></script>
<script src="/ui.js"></script>
</body>
</html>

View file

@ -0,0 +1,17 @@
<div class="menu menu_bottom">
<roundcube:button command="mail" label="mail" type="link" innerClass="inner" class="mail" classSel="mail selected" />
<roundcube:button command="addressbook" label="contacts" type="link" innerClass="inner" class="contacts" classSel="contacts selected" />
<roundcube:container name="taskbar" id="taskmenu" />
<roundcube:if condition="env:quota" />
<div id="quotadisplay" class="quota-widget">
<span class="voice"><roundcube:label name="quota"></span>
<roundcube:object name="quotaDisplay" class="count" display="text" />
</div>
<roundcube:endif />
</div>

View file

@ -0,0 +1,46 @@
<roundcube:add_label name="back" />
<roundcube:add_label name="errortitle" />
<roundcube:add_label name="options" />
<roundcube:add_label name="plaintoggle" />
<roundcube:add_label name="htmltoggle" />
<roundcube:add_label name="previous" />
<roundcube:add_label name="next" />
<roundcube:add_label name="select" />
<roundcube:add_label name="close" />
<roundcube:add_label name="browse" />
<roundcube:add_label name="choosefile" />
<roundcube:add_label name="choosefiles" />
<roundcube:object name="doctype" value="html5" />
<roundcube:if condition="!env:framed || env:extwin" />
<html>
<roundcube:else />
<html class="iframe">
<roundcube:endif />
<head>
<roundcube:object name="meta" />
<roundcube:object name="links" />
<link rel="stylesheet" href="/deps/bootstrap.min.css">
<roundcube:if condition="config:devel_mode" />
<link rel="stylesheet/less" href="/styles/styles.less">
<roundcube:link rel="stylesheet/less" href="/styles/print.less" condition="env:action == 'print'" />
<script src="/deps/less.min.js" data-env="development"></script>
<roundcube:else />
<link rel="stylesheet" href="/styles/styles.css">
<roundcube:link rel="stylesheet" href="/styles/print.css" condition="env:action == 'print'" />
<roundcube:endif />
<roundcube:if condition="env:action != 'print' && !config:devel_mode && config:dark_mode_support" />
<script>
try {
if (document.cookie.indexOf('colorMode=dark') > -1
|| (document.cookie.indexOf('colorMode=light') === -1 && window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
document.documentElement.className += ' dark-mode';
}
} catch (e) { }
</script>
<roundcube:endif />
</head>
<body class="task-<roundcube:exp expression="env:error_task ?: env:task ?: 'error'"> action-<roundcube:exp expression="asciiwords(env:action, true, '-') ?: 'none'">">
<roundcube:if condition="!env:framed || env:extwin" />
<div id="<roundcube:exp expression="env:action == 'print' ? 'print-' : ''">layout">
<roundcube:endif />

View file

@ -0,0 +1,101 @@
<roundcube:add_label name="viewsource" />
<div id="mailtoolbar" class="toolbar menu" role="toolbar">
<roundcube:button command="compose" type="link" class="compose hidden"
label="compose" title="writenewmessage" innerclass="inner" />
<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
label="reply" title="replytomessage" innerclass="inner" data-content-button="true" />
<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="more"
label="more" title="moreactions" data-popup="message-menu" innerclass="inner" />
</div>
<div id="message-menu" class="popupmenu">
<h3 id="aria-label-message-menu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-message-menu">
<roundcube:add_label name="arialabelmessageheaders" />
<roundcube:if condition="env:optional_format=='text'" />
<roundcube:button type="link-menuitem" command="change-format" prop="text" label="plaintoggle" class="changeformattext" classAct="changeformattext active" data-hidden="small"/>
<roundcube:elseif condition="env:optional_format=='html'" />
<roundcube:button type="link-menuitem" command="change-format" prop="html" label="htmltoggle" class="changeformathtml" classAct="changeformathtml active" data-hidden="small"/>
<roundcube:endif />
<roundcube:button type="link-menuitem" command="print" label="printmessage" class="print disabled" classAct="print active" data-hidden="small"/>
<roundcube:if condition="template:name != 'message'" />
<roundcube:button type="link-menuitem" command="import-messages" label="import" class="import disabled" classAct="import active" name="messageimport" onclick="UI.import_dialog()" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="download" label="export" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
<roundcube:button type="link-menuitem" command="headers" label="headers" class="headers-all" classAct="headers-all active" onclick="UI.headers_dialog()"/>
<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="extwin disabled" classAct="extwin active" data-hidden="small" />
<roundcube:container name="messagemenu" id="message-menu" />
</ul>
</div>
<div id="message-menu-small" class="popupmenu">
<h3 id="aria-label-message-menu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-message-menu">
<roundcube:button type="link-menuitem" command="delete" label="delete" class="delete disabled" classAct="delete" innerclass="inner"/>
<roundcube:container name="toolbar" id="mailtoolbar" />
<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" class="unread disabled" classAct="unread" innerclass="inner"/>
<roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" class="flag disabled" classAct="flag" innerclass="inner"/>
<roundcube:button type="link-menuitem" command="print" label="printmessage" class="print disabled" classAct="print active" data-hidden="small"/>
<roundcube:if condition="template:name != 'message'" />
<roundcube:button type="link-menuitem" command="import-messages" label="import" class="import disabled" classAct="import active"
name="messageimport" onclick="UI.import_dialog()" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="download" label="export" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="extwin disabled" classAct="extwin active" data-hidden="small" />
<roundcube:container name="messagemenu" id="message-menu" />
</ul>
</div>
<div id="markmessage-menu" class="popupmenu">
<h3 id="aria-label-markmessage-menu" class="voice"><roundcube:label name="arialabelmarkmessagesas" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-markmessage-menu">
<roundcube:button type="link-menuitem" command="mark" prop="read" label="markread" classAct="read active" class="read disabled" />
<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="unread active" class="unread disabled" />
<roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" classAct="flag active" class="flag disabled" />
<roundcube:button type="link-menuitem" command="mark" prop="unflagged" label="markunflagged" classAct="unflag active" class="unflag disabled" />
<roundcube:container name="markmenu" id="markmessage-menu" />
</ul>
</div>
<roundcube:if condition="template:name != 'message'" />
<roundcube:object name="messageimportform" id="uploadform" class="popupmenu formcontent" buttons="no" />
<roundcube:endif />

View file

@ -0,0 +1,42 @@
<div id="layout-menu">
<h2 id="aria-label-tasknav" class="voice"><roundcube:label name="arialabeltasknav" /></h2>
<div class="popover-header">
<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
<a class="button icon cancel"><span class="inner"><roundcube:label name="close" /></span></a>
</div>
<div id="taskmenu" class="menu toolbar" role="navigation" aria-labelledby="aria-label-tasknav">
<span class="action-buttons">
<roundcube:if condition="env:action == 'compose' and env:task == 'mail'" />
<roundcube:button command="compose" type="link" class="compose selected"
label="compose" title="writenewmessage" innerclass="inner" />
<roundcube:else />
<roundcube:button command="compose" type="link" class="compose"
label="compose" title="writenewmessage" innerclass="inner"
data-fab="true" data-fab-task="mail" data-fab-action="none" />
<roundcube:endif />
</span>
<roundcube:if condition="env:action == 'compose' and env:task == 'mail'" />
<roundcube:button command="mail" label="mail" type="link" innerClass="inner"
class="mail" />
<roundcube:else />
<roundcube:button command="mail" label="mail" type="link" innerClass="inner"
class="mail" classSel="mail selected" />
<roundcube:endif />
<roundcube:button command="addressbook" label="contacts" type="link" innerClass="inner"
class="contacts" classSel="contacts selected" />
<roundcube:container name="taskbar" id="taskmenu" />
<roundcube:button command="settings" label="settings" type="link" innerClass="inner"
class="settings" classSel="settings selected" />
<span class="special-buttons">
<roundcube:if condition="config:dark_mode_support" />
<roundcube:add_label name="darkmode" />
<roundcube:add_label name="lightmode" />
<roundcube:button name="theme" label="darkmode" type="link" innerClass="inner" class="theme dark" />
<roundcube:endif />
<roundcube:button name="about" label="about" type="link"
class="about" innerClass="inner" onclick="UI.about_dialog(this)" />
<roundcube:button command="logout" label="logout" type="link"
class="logout" innerClass="inner" />
</span>
</div>
</div>

View file

@ -0,0 +1,38 @@
<div id="message-menu-inner" class="popupmenu">
<h3 id="aria-label-message-menu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-message-menu">
<roundcube:button type="link-menuitem" command="reply-all" label="replyall" class="reply-all" classAct="reply-all active" />
<roundcube:button type="link-menuitem" command="forward" label="forward" class="forward" classAct="forward active" />
<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" classAct="unread active" class="unread disabled" onclick="unread_click()"/>
<roundcube:if condition="env:optional_format=='text'" />
<roundcube:button type="link-menuitem" command="change-format" prop="text" label="plaintoggle" class="changeformattext" classAct="changeformattext active" data-hidden="small"/>
<roundcube:elseif condition="env:optional_format=='html'" />
<roundcube:button type="link-menuitem" command="change-format" prop="html" label="htmltoggle" class="changeformathtml" classAct="changeformathtml active" data-hidden="small"/>
<roundcube:endif />
<roundcube:button type="link-menuitem" command="print" label="printmessage" class="print disabled" classAct="print active" data-hidden="small"/>
<roundcube:if condition="template:name != 'message'" />
<roundcube:button type="link-menuitem" command="import-messages" label="import" class="import disabled" classAct="import active" name="messageimport" onclick="UI.import_dialog()" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="download" label="export" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="headers" label="headers" class="headers-all" classAct="headers-all active" onclick="UI.headers_dialog()"/>
<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="extwin disabled" classAct="extwin active" data-hidden="small" />
<roundcube:container name="messagemenu" id="message-menu" />
</ul>
</div>

View file

@ -0,0 +1,20 @@
<div class="pagenav menu footer small" role="toolbar" aria-label="<roundcube:label name="arialabellistnav" />">
<roundcube:button command="firstpage" type="link" class="firstpage disabled" classAct="firstpage"
title="firstpage" label="first" innerclass="inner" />
<roundcube:button command="previouspage" type="link" class="prevpage disabled" classAct="prevpage"
title="previouspage" label="previous" innerclass="inner" />
<roundcube:if condition="template:name == 'mail'" />
<roundcube:object name="messageCountDisplay" class="pagenav-text" aria-live="polite" aria-relevant="text" />
<input class="form-control" type="text" size="3" disabled title="<roundcube:label name="currpage" />" />
<roundcube:elseif condition="template:name == 'addressbook'" />
<span class="pagenav-text" aria-live="polite" aria-relevant="text">
<roundcube:object name="recordsCountDisplay" label="fromtoshort" />
</span>
<roundcube:else />
<span class="pagenav-text" aria-live="polite" aria-relevant="text">&nbsp;</span>
<roundcube:endif />
<roundcube:button command="nextpage" type="link" class="nextpage disabled" classAct="nextpage"
title="nextpage" label="next" innerclass="inner" />
<roundcube:button command="lastpage" type="link" class="lastpage disabled" classAct="lastpage"
title="lastpage" label="last" innerclass="inner" />
</div>

View file

@ -0,0 +1,21 @@
<div id="layout-sidebar" class="listbox<roundcube:exp expression="!request:_action ? ' selected' : ''"/>" role="navigation" aria-labelledby="aria-label-settingstabs">
<div class="header">
<a style="width:40px;font-size: 1.75rem;height: 58px;text-decoration:none;text-align:center;" href="./?_task=mail"><i class="sebicon backicon"></i></a>
<span id="aria-label-settingstabs" class="header-title"><roundcube:label name="settings" /></span>
</div>
<div class="scroller">
<ul id="settings-menu" class="listing iconized settings-default-icon<roundcube:exp expression="!request:_action ? ' selection-large-only' : ''"/>">
<roundcube:object name="settingstabs" class="listitem" tagname="li" />
<roundcube:container name="tabs" id="settings-menu" />
<li class="listitem about" onclick="UI.about_dialog()" style="cursor:pointer">
<a><roundcube:label name="about" /></a>
</li>
</ul>
</div>
</div>

View file

@ -0,0 +1,16 @@
<div class=" sebmenu hidden-phone hidden-small">
<i class="sebicon usermenu"style='font-size: 2em;'></i>
<div class="hovermenu z-depth-2" id="taskmenu">
<div class="menuopt" onclick="rcmail.command('switch-task', 'settings', false, false)">
<i class="sebicon cog" ></i> &nbsp; <roundcube:label name="settings" />
</div>
<div class="click_change_theme menuopt">
<i class="sebicon contrast"></i> &nbsp; <span class="sebicon_contrast_txt"></span>
</div>
<div onclick="elastic2022_logout()" class='menuopt'>
<i class="sebicon logout"></i> &nbsp; <roundcube:label name="logout" />
</div>
</div>
</div>

24
templates/login.html Normal file
View file

@ -0,0 +1,24 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:object name="productname" /> <roundcube:label name="login" /></h1>
<div id="layout-content" class="selected no-navbar" role="main">
<roundcube:object name="logo" src="/images/logo.svg" id="logo" alt="Logo" />
<roundcube:form id="login-form" name="login-form" method="post" class="propform">
<roundcube:object name="loginform" form="login-form" size="40" submit=true class="form-control" />
<div id="login-footer" role="contentinfo">
<roundcube:object name="productname" condition="config:display_product_info &gt; 0" />
<roundcube:object name="version" condition="config:display_product_info == 2" />
<roundcube:if condition="config:support_url" />
&nbsp;&bull;&nbsp; <a href="<roundcube:var name='config:support_url' />" target="_blank" class="support-link"><roundcube:label name="support" /></a>
<roundcube:endif />
<roundcube:container name="loginfooter" id="login-footer" />
</div>
</form>
</div>
<noscript>
<p class="noscriptwarning"><roundcube:label name="noscriptwarning" /></p>
</noscript>
<roundcube:include file="includes/footer.html" />

292
templates/mail.html Normal file
View file

@ -0,0 +1,292 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/top-right_menu.html" />
<roundcube:include file="includes/message-popmenu.html" />
<div style="display:none">
<roundcube:if condition="env:threads" />
<roundcube:button command="compose" type="link" class="compose"
label="compose" title="writenewmessage" innerclass="inner"
data-fab="true" data-fab-task="mail" data-fab-action="none" />
<roundcube:endif />
</div>
<h1 class="voice"><roundcube:label name="mail" /></h1>
<!-- folders list -->
<div id="layout-sidebar" class="listbox" role="navigation" aria-labelledby="aria-label-folderlist">
<div class="header" style="border:0;">
<a href="./?_task=mail&_action=compose" class="compose button">
<div><i class="sebicon composeicon" style="margin: 1rem;"></i><roundcube:label name="compose" /></div>
</a>
</div>
<h2 id="aria-label-folderlist" class="voice"><roundcube:label name="arialabelfolderlist" /></h2>
<div id="folderlist-content" class="scroller">
<roundcube:object name="mailboxlist" id="mailboxlist" class="treelist listing folderlist" folder_filter="mail" unreadwrap="%s" />
<roundcube:button name="folderactions" type="link" title="folderactions" label="actions"
class="button icon sidebar-menu" innerclass="inner" data-popup="mailboxoptions-menu" />
</div>
<roundcube:include file="includes/footer_menu.html" />
</div>
<roundcube:include file="includes/mail-popmenu.html" />
<!-- messages list -->
<div id="layout-list" class="listbox selected">
<div id="messagelist-header" class="header" style="height:36px;min-height:36px;">
<a class="button icon task-menu-button" href="#menu" style="width:44px;height:44px;line-height: 38px;font-size: 16px;text-indent: 8px;"></a>
<div class="toolbar menu" role="toolbar">
<a href="#select" class="select disabled" data-popup="listselect-menu" data-toggle-button="list-toggle-button" title="<roundcube:label name="select" />"><span class="inner"><roundcube:label name="select" /></span></a>
<roundcube:if condition="env:threads" />
<a href="#threads" class="threads disabled" data-popup="threadselect-menu" title="<roundcube:label name="threads" />"><span class="inner"><roundcube:label name="threads" /></span></a>
<roundcube:endif />
<roundcube:object name="listmenulink" class="options active" label="options" innerclass="inner" />
<roundcube:container name="listcontrols" id="listcontrols" />
<roundcube:button command="checkmail" type="link" class="button icon toolbar-button refresh"
label="refresh" title="checkmail" innerclass="inner" />
</div>
</div>
<table class="tableheaderseb"><tr>
<td class="only_small_screen" style="padding: .2rem 0 0 1rem;vertical-align: baseline;">
<a class="button icon task-menu-button" href="#menu" style="font-size: 20px;"><span class="inner"><roundcube:label name="menu" /></span></a>
</td>
<td>
<roundcube:add_label name="showunread" />
<roundcube:object name="searchform" id="mailsearchform" wrapper="searchbar menu"
label="mailquicksearchbox" buttontitle="findmail" options="searchmenu" ariatag="h2" />
</td>
<td class='only_small_screen' style='width:0px;'></td>
</tr></table>
<div id="searchmenu" class="hidden searchoptions scroller propform formcontainer" aria-labelledby="aria-label-search-menu" aria-controls="messagelist">
<h3 id="aria-label-search-menu" class="voice"><roundcube:label name="searchmod" /></h3>
<div class="formcontent">
<ul class="proplist">
<li><label><input type="checkbox" name="s_mods[]" value="subject" /><roundcube:label name="subject" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="from" /><roundcube:label name="from" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="to" /><roundcube:label name="to" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="cc" /><roundcube:label name="cc" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="bcc" /><roundcube:label name="bcc" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="body" /><roundcube:label name="body" /></label></li>
<li><label><input type="checkbox" name="s_mods[]" value="text" /><roundcube:label name="msgtext" /></label></li>
</ul>
<div class="input-group">
<div class="input-group-prepend">
<label for="searchfilter" class="input-group-text"><roundcube:label name="type" /></label>
</div>
<roundcube:object name="searchfilter" id="searchfilter" noevent="true" class="custom-select" />
</div>
<div class="input-group">
<div class="input-group-prepend">
<label for="s_interval" class="input-group-text"><roundcube:label name="date" /></label>
</div>
<roundcube:object name="searchinterval" id="s_interval" class="custom-select" />
</div>
<div class="input-group">
<div class="input-group-prepend">
<label for="s_scope" class="input-group-text"><roundcube:label name="searchscope" /></label>
</div>
<select name="s_scope" id="s_scope" class="custom-select">
<option value="base"><roundcube:label name="currentfolder" /></option>
<option value="sub"><roundcube:label name="subfolders" /></option>
<option value="all"><roundcube:label name="allfolders" /></option>
</select>
</div>
</div>
<div class="formbuttons">
<button type="button" class="btn btn-primary icon search" onclick="return rcmail.command('search')"><roundcube:label name="search" /></button>
</div>
</div>
<div id="messagelist-content" class="scroller" tabindex="-1">
<h2 id="aria-label-messagelist" class="voice"><roundcube:label name="arialabelmessagelist" /></h2>
<roundcube:object name="messages" id="messagelist" class="listing messagelist sortheader fixedheader"
aria-labelledby="aria-label-messagelist" data-list="message_list" data-label-msg="listempty"
/>
</div>
<roundcube:include file="includes/pagenav.html" />
</div>
<!-- message preview -->
<div id="layout-content">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header_back">
<div class="header_topmenu menu">
<div class="header_back_back" style="width:58px;height:58px;float: left;" onclick="UI.show_list();">
<a class="button icon back" href="#sidebar" style="font-size: 1.5em"></a>
</div>
<a onclick="return rcmail.command('plugin.archive','',this,event)" id="header_topmenu_archive" style="display:none"class="sebicon archive"></a>
<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete" label="delete" title="delete" innerclass="inner" data-content-button="true" />
<roundcube:button name="messagemenulinkaaa" id="messagemenulinkaaa" type="link" class="more" label="more" title="moreactions" data-popup="message-menu-inner" innerclass="inner" />
</div>
</div>
<h2 id="aria-label-mailpreviewframe" class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h2>
<div class="iframe-wrapper">
<roundcube:object name="contentframe"
id="messagecontframe"
aria-labelledby="aria-label-mailpreviewframe"
src="env:blankpage"
title="arialabelmailpreviewframe"
/>
</div>
</div>
<!-- popup menus -->
<div id="message-menu-topmenu" class="popupmenu">
<h3 id="aria-label-dragmessage-menu" class="voice"><roundcube:label name="arialabeldropactionmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-dragmessage-menu">
<roundcube:button type="link-menuitem" command="mark" prop="unread" label="markunread" class="unread disabled" classAct="unread" innerclass="inner"/>
<roundcube:button type="link-menuitem" command="mark" prop="flagged" label="markflagged" class="flag disabled" classAct="flag" innerclass="inner"/>
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
</ul>
</div>
<div id="dragmessage-menu" class="popupmenu">
<h3 id="aria-label-dragmessage-menu" class="voice"><roundcube:label name="arialabeldropactionmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-dragmessage-menu">
<roundcube:button command="move" type="link-menuitem" onclick="return rcmail.drag_menu_action('move')" label="move" class="disabled" classAct="active" />
<roundcube:button command="copy" type="link-menuitem" onclick="return rcmail.drag_menu_action('copy')" label="copy" class="disabled" classAct="active" />
</ul>
</div>
<div id="mailboxoptions-menu" class="popupmenu">
<h3 id="aria-label-mailboxoptions-menu" class="voice"><roundcube:label name="arialabelmailboxmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-mailboxoptions-menu">
<roundcube:button command="expunge" type="link-menuitem" label="compact" class="expunge disabled" classAct="expunge active" />
<roundcube:button command="purge" type="link-menuitem" label="empty" class="purge disabled" classAct="purge active" />
<roundcube:button command="mark-all-read" type="link-menuitem" label="markallread" class="read disabled" classAct="read active" />
<roundcube:button command="folders" task="settings" type="link-menuitem" label="managefolders" class="folders disabled" classAct="folders active" />
<roundcube:container name="mailboxoptions" id="mailboxoptionsmenu" />
</ul>
</div>
<div id="listselect-menu" class="popupmenu">
<h3 id="aria-label-listselect-menu" class="voice"><roundcube:label name="arialabellistselectmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-listselect-menu">
<roundcube:button command="select-all" type="link-menuitem" label="all" class="select all disabled" classAct="select all active" />
<roundcube:button command="select-all" type="link-menuitem" prop="page" label="currpage" class="select page disabled" classAct="select page active" />
<roundcube:button command="select-all" type="link-menuitem" prop="unread" label="unread" class="select unread disabled" classAct="select unread active" />
<roundcube:button command="select-all" type="link-menuitem" prop="flagged" label="flagged" class="select flagged disabled" classAct="select flagged active" />
<roundcube:button command="select-all" type="link-menuitem" prop="invert" label="invert" class="select invert disabled" classAct="select invert active" />
<roundcube:button command="select-none" type="link-menuitem" label="none" class="select none disabled" classAct="select none active" />
</ul>
</div>
<div id="threadselect-menu" class="popupmenu">
<h3 id="aria-label-threadselectmenu" class="voice"><roundcube:label name="arialabelthreadselectmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-threadselectmenu">
<roundcube:button command="expand-unread" type="link-menuitem" label="expand-unread" class="expand unread disabled" classAct="expand unread active" />
<roundcube:button command="expand-all" type="link-menuitem" label="expand-all" class="expand all disabled" classAct="expand all active" />
<roundcube:button command="collapse-all" type="link-menuitem" label="collapse-all" class="expand none disabled" classAct="expand none active" />
</ul>
</div>
<div id="listoptions-menu" class="popupmenu propform" role="dialog" aria-labelledby="aria-label-listoptions">
<h3 id="aria-label-listoptions" class="voice"><roundcube:label name="arialabelmessagelistoptions" /></h3>
<roundcube:if condition="!in_array('message_sort_col', (array)config:dont_override)" />
<div class="form-group row">
<label for="listoptions-sortcol" class="col-form-label col-sm-4"><roundcube:label name="listsorting" /></label>
<div class="col-sm-8">
<select id="listoptions-sortcol" name="sort_col">
<option value=""><roundcube:label name="nonesort" /></option>
<option value="arrival"><roundcube:label name="arrival" /></option>
<option value="date"><roundcube:label name="sentdate" /></option>
<option value="subject"><roundcube:label name="subject" /></option>
<option value="fromto"><roundcube:label name="fromto" /></option>
<option value="from"><roundcube:label name="from" /></option>
<option value="to"><roundcube:label name="to" /></option>
<option value="cc"><roundcube:label name="cc" /></option>
<option value="size"><roundcube:label name="size" /></option>
</select>
</div>
</div>
<roundcube:endif />
<roundcube:if condition="!in_array('message_sort_order', (array)config:dont_override)" />
<div class="form-group row">
<label for="listoptions-sortord" class="col-form-label col-sm-4"><roundcube:label name="listorder" /></label>
<div class="col-sm-8">
<select id="listoptions-sortord" name="sort_ord">
<option value="ASC"><roundcube:label name="asc" /></option>
<option value="DESC"><roundcube:label name="desc" /></option>
</select>
</div>
</div>
<roundcube:endif />
<roundcube:if condition="env:threads" />
<div class="form-group row">
<label for="listoptions-threads" class="col-form-label col-sm-4"><roundcube:label name="lmode" /></label>
<div class="col-sm-8">
<select id="listoptions-threads" name="mode">
<option value="list"><roundcube:label name="list" /></option>
<option value="threads"><roundcube:label name="threads" /></option>
</select>
</div>
</div>
<roundcube:endif />
<roundcube:container name="listoptions" id="listoptionsmenu" />
<roundcube:add_label name="listoptionstitle" />
</div>
<div id="message-menu" class="popupmenu">
<h3 id="aria-label-message-menu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-message-menu">
<roundcube:button type="link-menuitem" command="print" label="printmessage" class="print disabled" classAct="print active" data-hidden="small"/>
<roundcube:if condition="template:name != 'message'" />
<roundcube:button type="link-menuitem" command="import-messages" label="import" class="import disabled" classAct="import active"
name="messageimport" onclick="UI.import_dialog()" />
<roundcube:endif />
<roundcube:button type="link-menuitem" command="download" label="export" class="download disabled" classAct="download active" />
<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
<roundcube:button type="link-menuitem" command="headers" label="headers" class="source disabled" classAct="source active" />
<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
<roundcube:button type="link-menuitem" command="move" label="moveto" class="move disabled" classAct="move active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="copy" label="copyto" class="copy disabled" classAct="copy active" innerclass="folder-selector-link" aria-haspopup="true" />
<roundcube:button type="link-menuitem" command="open" label="openinextwin" target="_blank" class="extwin disabled" classAct="extwin active" data-hidden="small" />
<roundcube:container name="messagemenu" id="message-menu" />
</ul>
</div>
<roundcube:include file="includes/footer.html" />

142
templates/message.html Normal file
View file

@ -0,0 +1,142 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="mailboxlist" folder_filter="mail" type="js" />
<roundcube:include file="includes/message-popmenu.html" />
<h1 class="voice"><roundcube:label name="arialabelmailpreviewframe" /></h1>
<div id="layout-content" class="selected">
<roundcube:if condition="!env:framed" />
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<roundcube:include file="includes/top-right_menu.html" />
</div>
<roundcube:endif />
<div class="content frame-content" role="main">
<div id="message-header">
<h2 class="subject">
<div style="display:inline-block;float:right;width:40px;height:30px"></div>
<span class="voice"><roundcube:label name="subject" />: </span>
<roundcube:object name="messageHeaders" valueOf="subject" />
</h2>
<div class="header">
<table style="width:100%">
<tr><td style="width:40px;vertical-align: top;">
<roundcube:object name="contactphoto" class="contactphoto" placeholder="/images/contactpic.svg" />
</td>
<td>
<div class="header-content">
<roundcube:object name="messageSummary" class="header-summary" addicon="virtual" />
<roundcube:object name="messageHeaders" class="header-headers" addicon="virtual" exclude="subject" max="10" />
</div>
</td>
<td>
<div id="mailtoolbar" class="tdmenuleft toolbar menu">
<a class="message_iconflag" onclick="flag_click()"></a>
<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
label="reply" title="replytomessage" innerclass="inner" data-content-button="true" />
<roundcube:button name="messagemenulink" id="messagemenulink" type="link" class="more"
label="more" title="moreactions" data-popup="message-menu-inner" innerclass="inner" />
</div>
</td>
</tr>
</table>
</div>
</div>
<div id="message-content">
<div class="leftcol" role="region" aria-labelledby="aria-label-messageattachments">
<h2 id="aria-label-messageattachments" class="voice"><roundcube:label name="attachments" /></h2>
<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
</div>
<div class="rightcol" role="region" aria-labelledby="aria-label-messagebody">
<h2 id="aria-label-messagebody" class="voice"><roundcube:label name="arialabelmessagebody" /></h2>
<roundcube:object name="messageObjects" id="message-objects" />
<roundcube:object name="messageBody" id="messagebody" headertableclass="headers-table" />
</div>
</div>
<div class="footer-mail-small">
<div class="toolbar menu" role="toolbar" style="display:flex;justify-content: space-between;max-width: 280px;width:100%">
<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
label="reply" title="replytomessage" innerclass="inner" data-content-button="true" />
<roundcube:button command="reply-all" type="link" class="reply-all disabled" classAct="reply-all"
label="replyall" title="replytoallmessage" innerclass="inner" />
<roundcube:button command="forward" type="link" class="forward disabled" classAct="forward"
label="forward" title="forwardmessage" innerclass="inner" />
</div>
</div>
<br>
</div>
</div>
<!-- popup menus -->
<div id="attachmentmenu" class="popupmenu">
<h3 id="aria-label-attachmentmenu" class="voice"><roundcube:label name="arialabelattachmentmenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-attachmentmenu">
<roundcube:button command="open-attachment" type="link-menuitem" id="attachmenuopen" label="open" class="extwin disabled" classAct="extwin active" />
<roundcube:button command="download-attachment" type="link-menuitem" id="attachmenudownload" label="download" class="download disabled" classAct="download active" />
<roundcube:container name="attachmentmenu" id="attachmentmenu" />
</ul>
</div>
<div id="mailto-menu" class="popupmenu">
<h3 id="aria-label-mailtomenu" class="voice"><roundcube:label name="arialabelmailtomenu" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-mailtomenu">
<roundcube:button name="addtoaddressbook" type="link-menuitem" label="addtoaddressbook" class="addressbook" classAct="addressbook active" />
<roundcube:button name="composeto" type="link-menuitem" label="composeto" class="compose" classAct="compose active" />
<roundcube:container name="mailtomenu" id="mailto-menu" />
</ul>
</div>
<roundcube:include file="includes/footer.html" />

119
templates/messagepart.html Normal file
View file

@ -0,0 +1,119 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:var name="env:filename" /></h1>
<div id="layout-content" class="selected">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<span class="header-title constant"><roundcube:var name="env:filename" /></span>
<div id="messagetoolbar" class="toolbar menu">
<roundcube:button type="link" name="info" label="properties" title="properties"
class="info" innerclass="inner" onclick="UI.props_dialog()" />
<roundcube:button command="download" type="link" label="download" title="download"
class="download disabled" classAct="download" innerclass="inner" />
<roundcube:button command="print" type="link" label="print" title="print"
class="print disabled" classAct="print" innerclass="inner" data-hidden="small" />
<roundcube:container name="toolbar" id="messagetoolbar" />
<roundcube:if condition="env:is_message" />
<span class="spacer"></span>
<roundcube:button command="reply" type="link" class="reply disabled" classAct="reply"
label="reply" title="replytomessage" innerclass="inner" />
<span class="dropbutton">
<roundcube:button command="reply-all" type="link" class="reply-all disabled" classAct="reply-all"
label="replyall" title="replytoallmessage" innerclass="inner" />
<a href="#reply-all" id="replyallmenulink" class="dropdown" data-popup="replyall-menu" tabindex="0">
<span class="inner"><roundcube:label name="arialabelreplyalloptions" /></span>
</a>
</span>
<span class="dropbutton">
<roundcube:button command="forward" type="link" class="forward disabled" classAct="forward"
label="forward" title="forwardmessage" innerclass="inner" />
<a href="#forward" id="forwardmenulink" class="dropdown" data-popup="forward-menu" tabindex="0">
<span class="inner"><roundcube:label name="arialabelforwardingoptions" /></span>
</a>
</span>
<span class="spacer"></span>
<roundcube:button name="messagemenulink" id="messagemenulink" type="link"
class="more" label="more" title="moreactions" data-popup="message-menu"
innerclass="inner" data-hidden="small" />
<roundcube:endif />
<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
<span class="spacer"></span>
<roundcube:button command="image-scale" type="link" prop="+" data-hidden="small"
class="zoomin disabled" classAct="zoomin"
label="zoomin" title="increaseimage" innerclass="inner" />
<roundcube:button command="image-scale" type="link" prop="-" data-hidden="small"
class="zoomout disabled" classAct="zoomout"
label="zoomout" title="decreaseimage" innerclass="inner" />
<roundcube:button command="image-rotate" type="link" data-hidden="small"
class="rotate disabled" classAct="rotate"
label="rotate" title="rotateimage" innerclass="inner" />
<roundcube:endif />
</div>
</div>
<h2 id="aria-label-messagepart" class="voice"><roundcube:label name="arialabelattachmentpreview" /></h2>
<div class="iframe-wrapper">
<roundcube:object name="messagePartFrame" id="messagepartframe" title="arialabelattachmentpreview"
role="main" aria-labelledby="aria-label-messagepart" />
</div>
<roundcube:if condition="stripos(env:mimetype, 'image/') === 0" />
<div id="image-tools" class="image-tools" data-hidden="big">
<h3 id="aria-label-imagetools" class="voice"><roundcube:label name="arialabelimagetools" /></h3>
<div class="toolbar menu" role="menu" aria-labelledby="aria-label-imagetools">
<roundcube:button command="image-scale" type="link" prop="+"
class="zoomin disabled" classAct="zoomin"
label="zoomin" title="increaseimage" innerclass="inner" />
<roundcube:button command="image-scale" type="link" prop="-"
class="zoomout disabled" classAct="zoomout"
label="zoomout" title="decreaseimage" innerclass="inner" />
<roundcube:button command="image-rotate" type="link"
class="rotate disabled" classAct="rotate"
label="rotate" title="rotateimage" innerclass="inner" />
</div>
<a href="#" class="button icon tools" onclick="$(this).attr('title', $(this).data('label-' + ($('#image-tools').toggleClass('open').is('.open') ? 'hide' : 'show')))"
data-label-show="<roundcube:label name="showtools" />" data-label-hide="<roundcube:label name="hidetools" />" title="<roundcube:label name="showtools" />">
<span class="inner"><roundcube:label name="showtools" /></span>
</a>
</div>
<roundcube:endif />
</div>
<roundcube:if condition="env:is_message" />
<div id="forward-menu" class="popupmenu">
<h3 id="aria-label-forwardmenu" class="voice"><roundcube:label name="arialabelforwardingoptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-forwardmenu">
<roundcube:button type="link-menuitem" command="forward-inline" label="forwardinline" prop="sub" classAct="forward inline active" class="forward disabled" />
<roundcube:button type="link-menuitem" command="forward-attachment" label="forwardattachment" prop="sub" classAct="forward attachment active" class="forward attachment disabled" />
<roundcube:container name="forwardmenu" id="forward-menu" />
</ul>
</div>
<div id="replyall-menu" class="popupmenu">
<h3 id="aria-label-replyallmenu" class="voice"><roundcube:label name="arialabelreplyalloptions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-replyallmenu">
<roundcube:button type="link-menuitem" command="reply-all" label="replyall" prop="sub" class="reply all disabled" classAct="reply all active" />
<roundcube:button type="link-menuitem" command="reply-list" label="replylist" prop="sub" class="reply list disabled" classAct="reply list active" />
<roundcube:container name="replyallmenu" id="replyall-menu" />
</ul>
</div>
<div id="message-menu" class="popupmenu">
<h3 id="aria-label-messagemenu" class="voice"><roundcube:label name="arialabelmoremessageactions" /></h3>
<ul class="menu listing" role="menu" aria-labelledby="aria-label-messagemenu">
<roundcube:button type="link-menuitem" command="edit" prop="new" label="editasnew" class="edit asnew disabled" classAct="edit asnew active" />
<roundcube:button type="link-menuitem" command="viewsource" label="viewsource" class="source disabled" classAct="source active" />
<roundcube:container name="messagemenu" id="message-menu" />
</ul>
</div>
<roundcube:endif />
<roundcube:add_label name="properties" />
<div id="properties-menu" class="popupmenu" role="dialog" aria-labelledby="aria-label-contentinfo">
<h3 id="aria-label-contentinfo" class="voice"><roundcube:label name="properties" /></h3>
<div class="scroller">
<roundcube:object name="messagePartControls" class="listing props-table" role="contentinfo"
aria-labelledby="aria-label-contentinfo" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,27 @@
<roundcube:include file="includes/layout.html" />
<roundcube:object name="logo" id="logo" alt="Logo" logo-type="print" logo-match="template" class="float-sm-right" />
<div class="print-content" role="main">
<div id="message-header">
<h2 class="subject">
<roundcube:object name="messageHeaders" valueOf="subject" />
</h2>
<div class="header">
<roundcube:object name="contactphoto" class="contactphoto" placeholder="/images/contactpic.svg" />
<div class="header-content details-view">
<roundcube:object name="messageHeaders" class="header-headers" addicon="virtual" exclude="subject" max="10" />
</div>
</div>
</div>
<div id="message-content">
<div role="region">
<roundcube:object name="messageAttachments" id="attachment-list" class="attachmentslist" />
</div>
<div role="region">
<roundcube:object name="messageBody" id="messagebody" headertableclass="headers-table" />
</div>
</div>
</div>
<roundcube:include file="includes/footer.html" />

15
templates/plugin.html Normal file
View file

@ -0,0 +1,15 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/menu.html" />
<roundcube:include file="includes/settings-menu.html" condition="env:task == 'settings'" />
<div id="layout-content" class="selected" role="main">
<div class="header">
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title"></span>
</div>
<roundcube:object name="plugin.body" />
</div>
<roundcube:object name="plugin.footer" />
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,13 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:object name="steptitle" /></h1>
<div class="formcontent">
<roundcube:object name="responseform" class="propform" size="60" textareacols="60" textarearows="18" />
</div>
<div class="formbuttons">
<roundcube:button command="save" class="btn btn-primary submit" label="save" condition="!env:readonly" />
</div>
<roundcube:include file="includes/footer.html" />

42
templates/responses.html Normal file
View file

@ -0,0 +1,42 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/settings-menu.html" />
<h1 class="voice"><roundcube:label name="responses" /></h1>
<!-- responses list -->
<div id="layout-list" class="listbox selected" aria-labelledby="aria-label-responseslist">
<div class="header">
<a class="button icon back-list-button_middle" href="?_task=settings"><span class="inner"><roundcube:label name="back" /></span></a>
<span id="aria-label-responseslist" class="header-title"><roundcube:label name="responses" /></span>
<a class="button icon toolbar-menu-button" href="#list-menu"><span class="inner"><roundcube:label name="menu" /></span></a>
</div>
<div class="scroller">
<roundcube:object name="responseslist" id="responses-table" class="listing"
noheader="true" role="listbox" data-list="responses_list"
data-label-msg="listempty" data-label-ext="listusebutton" data-create-command="add" />
</div>
<div class="footer"></div>
</div>
<!-- response details frame -->
<div id="layout-content" role="main">
<h2 id="aria-label-toolbar" class="voice"><roundcube:label name="arialabeltoolbar" /></h2>
<div class="header" role="toolbar" aria-labelledby="aria-label-toolbar">
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title"></span>
<!-- toolbar -->
<div id="responsestoolbar" class="toolbar menu">
<roundcube:button command="add" type="link" class="create disabled" classAct="create"
label="create" title="newresponse" innerClass="inner" data-fab="true" />
<roundcube:button command="delete" type="link" class="delete disabled" classAct="delete"
label="delete" title="delete" innerClass="inner" />
</div>
<roundcube:include file="includes/top-right_menu.html" />
</div>
<div class="iframe-wrapper">
<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelresponseeditfrom" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

28
templates/settings.html Normal file
View file

@ -0,0 +1,28 @@
<roundcube:include file="includes/layout.html" />
<roundcube:include file="includes/settings-menu.html" />
<h1 class="voice"><roundcube:label name="preferences" /></h1>
<div id="layout-list" class="listbox<roundcube:exp expression="!request:_action ? '' : ' selected'"/>" aria-labelledby="aria-label-prefsection">
<div class="header">
<a class="button icon back-sidebar-button" href="./?_task=settings"><span class="inner"><roundcube:label name="settings" /></span></a>
<span id="aria-label-prefsection" class="header-title"><roundcube:label name="preferences" /></span>
</div>
<div class="scroller">
<roundcube:object name="sectionslist" id="sections-table" class="listing iconized settings-default-icon"
noheader="true" role="listbox" data-list="sections_list" />
</div>
</div>
<div id="layout-content" role="main">
<div class="header">
<a class="button icon back-list-button" href="#back"><span class="inner"><roundcube:label name="back" /></span></a>
<span class="header-title"></span>
</div>
<div class="iframe-wrapper">
<roundcube:object name="contentframe" id="preferences-frame" src="env:blankpage" title="arialabelpreferencesform" />
</div>
</div>
<roundcube:include file="includes/footer.html" />

View file

@ -0,0 +1,13 @@
<roundcube:include file="includes/layout.html" />
<h1 class="voice"><roundcube:object name="sectionname" /></h1>
<div class="formcontent">
<roundcube:object name="userprefs" form="form" class="propform cols-sm-6-6" />
</div>
<div class="formbuttons">
<roundcube:button command="save" class="btn btn-primary submit" label="save" />
</div>
<roundcube:include file="includes/footer.html" />

BIN
thumbnail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

5101
ui.min.js vendored Normal file

File diff suppressed because it is too large Load diff

38
watermark.html Normal file
View file

@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style type="text/css">
html, body { height: 100%; overflow: hidden; }
body {
background: url(images/logo.svg) center no-repeat #fff;
background-size: 30%;
background-blend-mode: luminosity;
}
html:not(.dark-mode) body:before {
content: "";
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background: rgba(255, 255, 255, .85);
}
html.dark-mode > body {
background-color: #21292c;
background-blend-mode: soft-light;
}
</style>
<script>
try {
if (document.cookie.indexOf('colorMode=dark') > -1
|| (document.cookie.indexOf('colorMode=light') === -1 && window.matchMedia('(prefers-color-scheme: dark)').matches)
) {
document.documentElement.className += ' dark-mode';
}
} catch (e) { }
</script>
</head>
<body></body>
</html>