(html) Add missing options to subscribed calendars

Fixes #3863
pull/225/head
Francis Lachapelle 2016-11-01 12:09:08 -04:00
parent 613d21b0c5
commit 1c689719ac
2 changed files with 336 additions and 324 deletions

1
NEWS
View File

@ -22,6 +22,7 @@ Bug fixes
- [web] improved validation of mail account delegators - [web] improved validation of mail account delegators
- [web] fixed auto-completion of list members (#3870) - [web] fixed auto-completion of list members (#3870)
- [web] added missing options to subscribed addressbooks (#3850) - [web] added missing options to subscribed addressbooks (#3850)
- [web] added missing options to subscribed calendars (#3863)
- [web] fixed resource conflict error handling (403 vs 409 HTTP code) - [web] fixed resource conflict error handling (403 vs 409 HTTP code)
- [web] restored immediate deletion of messages (without moving them to the trash) - [web] restored immediate deletion of messages (without moving them to the trash)
- [eas] improve handling of email folders without a parent - [eas] improve handling of email folders without a parent

View File

@ -25,12 +25,12 @@
<script type="text/ng-template" id="UIxCalMainView"> <script type="text/ng-template" id="UIxCalMainView">
<!-- calendars colors --> <!-- calendars colors -->
<sg-folder-stylesheet <sg-folder-stylesheet
ng-repeat="calendar in app.service.$findAll()" ng-repeat="calendar in app.service.$findAll()"
ng-model="calendar"><!-- stylesheet --></sg-folder-stylesheet> ng-model="calendar"><!-- stylesheet --></sg-folder-stylesheet>
<!-- categories colors --> <!-- categories colors -->
<sg-category-stylesheet <sg-category-stylesheet
ng-repeat="category in app.categories" ng-repeat="category in app.categories"
ng-model="category"><!-- stylesheet --></sg-category-stylesheet> ng-model="category"><!-- stylesheet --></sg-category-stylesheet>
<!-- Sidenav --> <!-- Sidenav -->
<md-sidenav class="md-sidenav-left md-whiteframe-z1" layout="column" <md-sidenav class="md-sidenav-left md-whiteframe-z1" layout="column"
md-component-id="left" md-is-locked-open="isGtMedium" md-component-id="left" md-is-locked-open="isGtMedium"
@ -190,11 +190,22 @@
</md-button> </md-button>
<md-menu class="md-secondary sg-list-sortable-hide" label:aria-label="Options"> <md-menu class="md-secondary sg-list-sortable-hide" label:aria-label="Options">
<md-button class="md-icon-button" label:aria-label="Options" <md-button class="md-icon-button" label:aria-label="Options"
ng-click="$mdOpenMenu()" ng-click="$mdOpenMenu()"
md-menu-origin="md-menu-origin"> md-menu-origin="md-menu-origin">
<md-icon>more_vert</md-icon> <md-icon>more_vert</md-icon>
</md-button> </md-button>
<md-menu-content width="2"> <md-menu-content width="2">
<md-menu-item>
<md-button ng-click="app.showOnly(calendar)">
<var:string label:value="Show Only This Calendar"/>
</md-button>
</md-menu-item>
<md-menu-item>
<md-button ng-click="app.showAll()">
<var:string label:value="Show All Calendars"/>
</md-button>
</md-menu-item>
<md-menu-divider><!-- divider --></md-menu-divider>
<md-menu-item> <md-menu-item>
<md-button ng-click="app.showProperties(calendar)"> <md-button ng-click="app.showProperties(calendar)">
<var:string label:value="Properties"/> <var:string label:value="Properties"/>
@ -342,335 +353,335 @@
</md-toolbar> </md-toolbar>
<div layout="row" class="md-flex"> <div layout="row" class="md-flex">
<div class="view-list" layout="column"> <div class="view-list" layout="column">
<md-toolbar class="md-accent md-hue-1" flex-none="flex-none" <md-toolbar class="md-accent md-hue-1" flex-none="flex-none"
ng-hide="list.mode.multiple"> ng-hide="list.mode.multiple">
<!-- sort/filter mode (default) --> <!-- sort/filter mode (default) -->
<div class="md-toolbar-tools" layout="row" ng-hide="list.mode.search"> <div class="md-toolbar-tools" layout="row" ng-hide="list.mode.search">
<md-button class="sg-icon-button" label:aria-label="Search" <md-button class="sg-icon-button" label:aria-label="Search"
ng-click="list.searchMode()"> ng-click="list.searchMode()">
<md-icon>search</md-icon> <md-icon>search</md-icon>
</md-button>
<div class="md-flex"><!-- spacer --></div>
<md-menu>
<md-button class="sg-icon-button" label:aria-label="Filter"
ng-click="$mdOpenMenu()">
<md-icon>filter_list</md-icon>
</md-button> </md-button>
<md-menu-content width="4"> <div class="md-flex"><!-- spacer --></div>
<md-menu-item> <md-menu>
<md-button ng-click="list.filter('view_all')"> <md-button class="sg-icon-button" label:aria-label="Filter"
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_all') }"> ng-click="$mdOpenMenu()">
<!-- selected --></md-icon> <var:string label:value="view_all"/> <md-icon>filter_list</md-icon>
</md-button> </md-button>
</md-menu-item> <md-menu-content width="4">
<md-menu-item> <md-menu-item>
<md-button ng-click="list.filter('view_today')"> <md-button ng-click="list.filter('view_all')">
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_today') }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_all') }">
<!-- selected --></md-icon> <var:string label:value="view_today"/> <!-- selected --></md-icon> <var:string label:value="view_all"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item> <md-menu-item>
<md-button ng-click="list.filter('view_next7')"> <md-button ng-click="list.filter('view_today')">
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_next7') }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_today') }">
<!-- selected --></md-icon> <var:string label:value="view_next7"/> <!-- selected --></md-icon> <var:string label:value="view_today"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item> <md-menu-item>
<md-button ng-click="list.filter('view_next14')"> <md-button ng-click="list.filter('view_next7')">
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_next14') }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_next7') }">
<!-- selected --></md-icon> <var:string label:value="view_next14"/> <!-- selected --></md-icon> <var:string label:value="view_next7"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item> <md-menu-item>
<md-button ng-click="list.filter('view_next31')"> <md-button ng-click="list.filter('view_next14')">
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_next31') }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_next14') }">
<!-- selected --></md-icon><var:string label:value="view_next31"/> <!-- selected --></md-icon> <var:string label:value="view_next14"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item> <md-menu-item>
<md-button ng-click="list.filter('view_thismonth')"> <md-button ng-click="list.filter('view_next31')">
<md-icon ng-class="{ 'icon-check': list.filteredBy('view_thismonth') }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_next31') }">
<!-- selected --></md-icon><var:string label:value="view_thismonth"/> <!-- selected --></md-icon><var:string label:value="view_next31"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-if="list.componentType == 'events'"> <md-menu-item>
<md-button ng-click="list.filter('view_future')"> <md-button ng-click="list.filter('view_thismonth')">
<md-icon ng-class="{ 'icon-check': list.component.$queryEvents.filterpopup == 'view_future' }"> <md-icon ng-class="{ 'icon-check': list.filteredBy('view_thismonth') }">
<!-- selected --></md-icon> <var:string label:value="view_future"/> <!-- selected --></md-icon><var:string label:value="view_thismonth"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-if="list.componentType == 'events'"> <md-menu-item ng-if="list.componentType == 'events'">
<md-button ng-click="list.filter('view_selectedday')"> <md-button ng-click="list.filter('view_future')">
<md-icon ng-class="{ 'icon-check': list.component.$queryEvents.filterpopup == 'view_selectedday' }"> <md-icon ng-class="{ 'icon-check': list.component.$queryEvents.filterpopup == 'view_future' }">
<!-- selected --></md-icon> <var:string label:value="view_selectedday"/> <!-- selected --></md-icon> <var:string label:value="view_future"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'"> <md-menu-item ng-if="list.componentType == 'events'">
<md-button ng-click="list.filter('view_not_started')"> <md-button ng-click="list.filter('view_selectedday')">
<md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_not_started' }"> <md-icon ng-class="{ 'icon-check': list.component.$queryEvents.filterpopup == 'view_selectedday' }">
<!-- selected --></md-icon> <var:string label:value="view_not_started"/> <!-- selected --></md-icon> <var:string label:value="view_selectedday"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'"> <md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.filter('view_overdue')"> <md-button ng-click="list.filter('view_not_started')">
<md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_overdue' }"> <md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_not_started' }">
<!-- selected --></md-icon> <var:string label:value="view_overdue"/> <!-- selected --></md-icon> <var:string label:value="view_not_started"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'"> <md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.filter('view_incomplete')"> <md-button ng-click="list.filter('view_overdue')">
<md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_incomplete' }"> <md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_overdue' }">
<!-- selected --></md-icon> <var:string label:value="view_incomplete"/> <!-- selected --></md-icon> <var:string label:value="view_overdue"/>
</md-button> </md-button>
</md-menu-item> </md-menu-item>
<md-menu-divider ng-if="list.componentType == 'tasks'"><!-- divider --></md-menu-divider> <md-menu-item ng-if="list.componentType == 'tasks'">
<md-menu-item ng-if="list.componentType == 'tasks'"> <md-button ng-click="list.filter('view_incomplete')">
<sg-checkmark <md-icon ng-class="{ 'icon-check': list.component.$queryTasks.filterpopup == 'view_incomplete' }">
ng-change="list.component.$filter(list.componentType)" <!-- selected --></md-icon> <var:string label:value="view_incomplete"/>
ng-model="list.component.$queryTasks.show_completed" </md-button>
sg-true-value="1" </md-menu-item>
sg-false-value="0"> <var:string label:value="Show completed tasks"/></sg-checkmark> <md-menu-divider ng-if="list.componentType == 'tasks'"><!-- divider --></md-menu-divider>
</md-menu-item> <md-menu-item ng-if="list.componentType == 'tasks'">
</md-menu-content> <sg-checkmark
</md-menu> ng-change="list.component.$filter(list.componentType)"
<md-menu> ng-model="list.component.$queryTasks.show_completed"
<md-button class="sg-icon-button" label:aria-label="Sort" sg-true-value="1"
ng-click="$mdOpenMenu()"> sg-false-value="0"> <var:string label:value="Show completed tasks"/></sg-checkmark>
<md-icon>sort</md-icon> </md-menu-item>
</md-menu-content>
</md-menu>
<md-menu>
<md-button class="sg-icon-button" label:aria-label="Sort"
ng-click="$mdOpenMenu()">
<md-icon>sort</md-icon>
</md-button>
<md-menu-content width="4">
<md-menu-item>
<md-button ng-click="list.sort('title')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('title') }">
<!-- selected --></md-icon> <var:string label:value="Title"/>
</md-button>
</md-menu-item>
<md-menu-item>
<md-button ng-click="list.sort('location')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('location') }">
<!-- selected --></md-icon> <var:string label:value="Location"/>
</md-button>
</md-menu-item>
<md-menu-item>
<md-button ng-click="list.sort('calendarName')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('calendarName') }">
<!-- selected --></md-icon> <var:string label:value="Calendar"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'events'">
<md-button ng-click="list.sort('start')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('start') }">
<!-- selected --></md-icon> <var:string label:value="Start"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'events'">
<md-button ng-click="list.sort('end')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('end') }">
<!-- selected --></md-icon> <var:string label:value="End"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('end')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('end') }">
<!-- selected --></md-icon> <var:string label:value="Due Date"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('priority')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('priority') }">
<!-- selected --></md-icon> <var:string label:value="Priority"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('category')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('category') }">
<!-- selected --></md-icon> <var:string label:value="Category"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('status')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('status') }">
<!-- selected --></md-icon> <var:string label:value="Status"/>
</md-button>
</md-menu-item>
<md-menu-divider><!-- divider --></md-menu-divider>
<md-menu-item ng-if="list.componentType == 'events'">
<sg-checkmark
class="sg-no-wrap"
ng-change="list.component.$filter(list.componentType)"
ng-model="list.component.$queryEvents.asc"
sg-true-value="0"
sg-false-value="1"><var:string label:value="Descending Order"/></sg-checkmark>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<sg-checkmark
class="sg-no-wrap"
ng-change="list.component.$filter(list.componentType)"
ng-model="list.component.$queryTasks.asc"
sg-true-value="0"
sg-false-value="1"><var:string label:value="Descending Order"/></sg-checkmark>
</md-menu-item>
</md-menu-content>
</md-menu>
<md-button class="sg-icon-button" ng-click="list.reload()">
<md-icon>refresh</md-icon>
</md-button> </md-button>
<md-menu-content width="4"> </div>
<md-menu-item> <!-- search mode -->
<md-button ng-click="list.sort('title')"> <form class="md-toolbar-tools sg-toolbar-secondary"
<md-icon ng-class="{ 'icon-check': list.sortedBy('title') }"> name="searchForm"
<!-- selected --></md-icon> <var:string label:value="Title"/> layout="row"
</md-button> ng-show="list.mode.search"
</md-menu-item> sg-search="list.component.$filter(list.componentType, { value: searchText, search: searchField })"
<md-menu-item> sg-allow-dot="false">
<md-button ng-click="list.sort('location')"> <md-button class="md-icon-button"
<md-icon ng-class="{ 'icon-check': list.sortedBy('location') }"> sg-search-cancel="list.cancelSearch()"
<!-- selected --></md-icon> <var:string label:value="Location"/> label:aria-label="Back">
</md-button> <md-icon>arrow_back</md-icon>
</md-menu-item> </md-button>
<md-menu-item> <md-input-container class="md-flex" md-no-float="md-no-float">
<md-button ng-click="list.sort('calendarName')"> <input name="folderSearch" type="search" var:minlength="minimumSearchLength" label:placeholder="Search"
<md-icon ng-class="{ 'icon-check': list.sortedBy('calendarName') }"> sg-focus-on="search"/>
<!-- selected --></md-icon> <var:string label:value="Calendar"/> <div ng-messages="searchForm.folderSearch.$error" ng-show="searchForm.folderSearch.$dirty">
</md-button> <div ng-message="minlength"><var:string value="minimumSearchLengthLabel"/></div>
</md-menu-item> </div>
<md-menu-item ng-if="list.componentType == 'events'"> </md-input-container>
<md-button ng-click="list.sort('start')"> <md-input-container flex="25">
<md-icon ng-class="{ 'icon-check': list.sortedBy('start') }"> <md-select label:aria-label="Search scope">
<!-- selected --></md-icon> <var:string label:value="Start"/> <md-option value="title_Category_Location" selected="selected"><var:string label:value="Title, category or location"/></md-option>
</md-button> <md-option value="entireContent"><var:string label:value="Entire content"/></md-option>
</md-menu-item> </md-select>
<md-menu-item ng-if="list.componentType == 'events'"> </md-input-container>
<md-button ng-click="list.sort('end')"> </form>
<md-icon ng-class="{ 'icon-check': list.sortedBy('end') }"> </md-toolbar>
<!-- selected --></md-icon> <var:string label:value="End"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('end')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('end') }">
<!-- selected --></md-icon> <var:string label:value="Due Date"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('priority')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('priority') }">
<!-- selected --></md-icon> <var:string label:value="Priority"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('category')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('category') }">
<!-- selected --></md-icon> <var:string label:value="Category"/>
</md-button>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<md-button ng-click="list.sort('status')">
<md-icon ng-class="{ 'icon-check': list.sortedBy('status') }">
<!-- selected --></md-icon> <var:string label:value="Status"/>
</md-button>
</md-menu-item>
<md-menu-divider><!-- divider --></md-menu-divider>
<md-menu-item ng-if="list.componentType == 'events'">
<sg-checkmark
class="sg-no-wrap"
ng-change="list.component.$filter(list.componentType)"
ng-model="list.component.$queryEvents.asc"
sg-true-value="0"
sg-false-value="1"><var:string label:value="Descending Order"/></sg-checkmark>
</md-menu-item>
<md-menu-item ng-if="list.componentType == 'tasks'">
<sg-checkmark
class="sg-no-wrap"
ng-change="list.component.$filter(list.componentType)"
ng-model="list.component.$queryTasks.asc"
sg-true-value="0"
sg-false-value="1"><var:string label:value="Descending Order"/></sg-checkmark>
</md-menu-item>
</md-menu-content>
</md-menu>
<md-button class="sg-icon-button" ng-click="list.reload()">
<md-icon>refresh</md-icon>
</md-button>
</div>
<!-- search mode -->
<form class="md-toolbar-tools sg-toolbar-secondary"
name="searchForm"
layout="row"
ng-show="list.mode.search"
sg-search="list.component.$filter(list.componentType, { value: searchText, search: searchField })"
sg-allow-dot="false">
<md-button class="md-icon-button"
sg-search-cancel="list.cancelSearch()"
label:aria-label="Back">
<md-icon>arrow_back</md-icon>
</md-button>
<md-input-container class="md-flex" md-no-float="md-no-float">
<input name="folderSearch" type="search" var:minlength="minimumSearchLength" label:placeholder="Search"
sg-focus-on="search"/>
<div ng-messages="searchForm.folderSearch.$error" ng-show="searchForm.folderSearch.$dirty">
<div ng-message="minlength"><var:string value="minimumSearchLengthLabel"/></div>
</div>
</md-input-container>
<md-input-container flex="25">
<md-select label:aria-label="Search scope">
<md-option value="title_Category_Location" selected="selected"><var:string label:value="Title, category or location"/></md-option>
<md-option value="entireContent"><var:string label:value="Entire content"/></md-option>
</md-select>
</md-input-container>
</form>
</md-toolbar>
<!-- multiple-selection mode --> <!-- multiple-selection mode -->
<md-toolbar class="md-whiteframe-z1 md-hue-1 sg-toolbar-secondary" <md-toolbar class="md-whiteframe-z1 md-hue-1 sg-toolbar-secondary"
ng-show="list.mode.multiple"> ng-show="list.mode.multiple">
<div class="md-toolbar-tools"> <div class="md-toolbar-tools">
<md-button class="sg-icon-button" ng-click="list.unselectComponents()"> <md-button class="sg-icon-button" ng-click="list.unselectComponents()">
<md-icon>arrow_back</md-icon> <md-icon>arrow_back</md-icon>
</md-button> </md-button>
<label>{{list.component.$selectedCount()}} <var:string label:value="selected"/></label> <label>{{list.component.$selectedCount()}} <var:string label:value="selected"/></label>
<div class="md-flex"><!-- spacer --></div> <div class="md-flex"><!-- spacer --></div>
<md-button class="sg-icon-button" ng-click="list.selectAll()"> <md-button class="sg-icon-button" ng-click="list.selectAll()">
<md-tooltip md-direction="left"><var:string label:value="Select All"/></md-tooltip> <md-tooltip md-direction="left"><var:string label:value="Select All"/></md-tooltip>
<md-icon>select_all</md-icon> <md-icon>select_all</md-icon>
</md-button> </md-button>
<md-button class="sg-icon-button" ng-click="list.confirmDeleteSelectedComponents()"> <md-button class="sg-icon-button" ng-click="list.confirmDeleteSelectedComponents()">
<md-icon>delete</md-icon> <md-icon>delete</md-icon>
</md-button> </md-button>
</div> </div>
</md-toolbar> </md-toolbar>
<md-divider><!-- divider --></md-divider> <md-divider><!-- divider --></md-divider>
<md-content layout="column" class="view-list"> <md-content layout="column" class="view-list">
<md-tabs md-dynamic-height="true" <md-tabs md-dynamic-height="true"
md-selected="list.selectedList"> md-selected="list.selectedList">
<!-- Events list --> <!-- Events list -->
<md-tab label:label="Events" <md-tab label:label="Events"
md-on-select="list.selectComponentType('events')"> md-on-select="list.selectComponentType('events')">
<md-subheader> <md-subheader>
<span>{{list.filterpopup() | loc}}</span> <span>{{list.filterpopup() | loc}}</span>
</md-subheader> </md-subheader>
<md-list class="sg-section-list" <md-list class="sg-section-list"
ng-class="{ 'sg-list-selectable': list.mode.multiple }"> ng-class="{ 'sg-list-selectable': list.mode.multiple }">
<md-list-item ng-repeat="event in list.component.$events" <md-list-item ng-repeat="event in list.component.$events"
aria-label="{{::event.c_title}}" aria-label="{{::event.c_title}}"
ng-click="list.openEvent($event, event)"> ng-click="list.openEvent($event, event)">
<div class="md-secondary sg-avatar-selectable" <div class="md-secondary sg-avatar-selectable"
label:aria-label="Toggle item" label:aria-label="Toggle item"
ng-class="[event.getClassName('fg'), { 'sg-avatar-selected' : event.selected }]" ng-class="[event.getClassName('fg'), { 'sg-avatar-selected' : event.selected }]"
ng-click="list.toggleComponentSelection($event, event)"> ng-click="list.toggleComponentSelection($event, event)">
<div class="sg-color-chip" <div class="sg-color-chip"
ng-class="::event.getClassName('bg')"><!-- calendar color --></div> ng-class="::event.getClassName('bg')"><!-- calendar color --></div>
</div> </div>
<div class="sg-category" <div class="sg-category"
ng-repeat="category in ::event.categories | limitTo:5" ng-repeat="category in ::event.categories | limitTo:5"
ng-class="::'bg-category' + category" ng-class="::'bg-category' + category"
ng-style="::{ left: ($index * 3) + 'px' }"><!-- calendar color --></div> ng-style="::{ left: ($index * 3) + 'px' }"><!-- calendar color --></div>
<div class="sg-tile-content"> <div class="sg-tile-content">
<div class="sg-md-subhead"> <div class="sg-md-subhead">
<div> <div>
<span ng-show="::event.c_priority" class="sg-priority">{{::event.c_priority}}</span> <span ng-show="::event.c_priority" class="sg-priority">{{::event.c_priority}}</span>
{{::event.c_title}} {{::event.c_title}}
</div>
</div>
<div class="sg-md-body">
<div>{{::event.c_location}}</div>
<div class="sg-tile-date" ng-bind="::event.formatted_startdate"><!-- start --></div>
</div> </div>
</div> </div>
<div class="sg-md-body"> <div class="sg-tile-icons">
<div>{{::event.c_location}}</div> <md-icon ng-show="::event.c_iscycle">repeat</md-icon>
<div class="sg-tile-date" ng-bind="::event.formatted_startdate"><!-- start --></div> <md-icon ng-show="::event.c_nextalarm">alarm</md-icon>
</div> </div>
</div> <md-divider><!-- divider --></md-divider>
<div class="sg-tile-icons"> </md-list-item>
<md-icon ng-show="::event.c_iscycle">repeat</md-icon> <md-list-item disabled="disabled" ng-if="list.component.$events.length == 0">
<md-icon ng-show="::event.c_nextalarm">alarm</md-icon> <p class="sg-md-caption"><var:string label:value="No events for selected criteria"/></p>
</div> </md-list-item>
<md-divider><!-- divider --></md-divider> </md-list>
</md-list-item> </md-tab>
<md-list-item disabled="disabled" ng-if="list.component.$events.length == 0"> <!-- Tasks list -->
<p class="sg-md-caption"><var:string label:value="No events for selected criteria"/></p> <md-tab label:label="Tasks"
</md-list-item> md-on-select="list.selectComponentType('tasks')">
</md-list> <md-subheader>
</md-tab> <span>{{list.filterpopup() | loc}}</span>
<!-- Tasks list --> </md-subheader>
<md-tab label:label="Tasks" <md-list class="sg-section-list"
md-on-select="list.selectComponentType('tasks')"> ng-class="{ 'sg-list-selectable': list.mode.multiple }">
<md-subheader> <md-list-item ng-repeat="task in list.component.$tasks"
<span>{{list.filterpopup() | loc}}</span> aria-label="{{::task.c_title}}"
</md-subheader> ng-click="list.openTask($event, task)">
<md-list class="sg-section-list" <div class="md-secondary sg-avatar-selectable"
ng-class="{ 'sg-list-selectable': list.mode.multiple }"> label:aria-label="Toggle item"
<md-list-item ng-repeat="task in list.component.$tasks" ng-class="[task.getClassName('fg'), { 'sg-avatar-selected' : task.selected }]"
aria-label="{{::task.c_title}}" ng-click="list.toggleComponentSelection($event, task)">
ng-click="list.openTask($event, task)"> <div class="sg-color-chip"
<div class="md-secondary sg-avatar-selectable" ng-class="::task.getClassName('bg')"><!-- calendar color --></div>
label:aria-label="Toggle item" </div>
ng-class="[task.getClassName('fg'), { 'sg-avatar-selected' : task.selected }]" <div class="sg-category"
ng-click="list.toggleComponentSelection($event, task)"> ng-repeat="category in ::task.categories | limitTo:5"
<div class="sg-color-chip" ng-class="::'bg-category' + category"
ng-class="::task.getClassName('bg')"><!-- calendar color --></div> ng-style="::{ left: ($index * 3) + 'px' }"><!-- calendar color --></div>
</div> <div class="sg-tile-content">
<div class="sg-category" <div class="sg-md-subhead">
ng-repeat="category in ::task.categories | limitTo:5" <div>
ng-class="::'bg-category' + category" <span ng-show="::task.c_priority" class="sg-priority">{{::task.c_priority}}</span>
ng-style="::{ left: ($index * 3) + 'px' }"><!-- calendar color --></div> {{::task.c_title}}
<div class="sg-tile-content"> </div>
<div class="sg-md-subhead"> </div>
<div> <div class="sg-md-body">
<span ng-show="::task.c_priority" class="sg-priority">{{::task.c_priority}}</span> <div><!-- spacer --></div>
{{::task.c_title}} <div>{{::task.formatted_enddate}}</div>
</div> </div>
</div> </div>
<div class="sg-md-body"> <div class="sg-tile-icons">
<div><!-- spacer --></div> <md-icon ng-show="::task.c_iscycle">repeat</md-icon>
<div>{{::task.formatted_enddate}}</div> <md-icon ng-show="::event.c_nextalarm">alarm</md-icon>
</div> </div>
</div> <md-divider><!-- divider --></md-divider>
<div class="sg-tile-icons"> </md-list-item>
<md-icon ng-show="::task.c_iscycle">repeat</md-icon> <md-list-item disabled="disabled" ng-if="list.component.$tasks.length == 0">
<md-icon ng-show="::event.c_nextalarm">alarm</md-icon> <p class="sg-md-caption"><var:string label:value="No tasks for selected criteria"/></p>
</div> </md-list-item>
<md-divider><!-- divider --></md-divider> </md-list>
</md-list-item> </md-tab>
<md-list-item disabled="disabled" ng-if="list.component.$tasks.length == 0"> </md-tabs>
<p class="sg-md-caption"><var:string label:value="No tasks for selected criteria"/></p> </md-content>
</md-list-item> <div class="sg-progress-circular-floating"
</md-list> ng-show="list.component.$isLoading()">
</md-tab> <md-progress-circular class="md-accent"
</md-tabs> md-mode="indeterminate"
</md-content> md-diameter="32"><!-- mailbox loading progress --></md-progress-circular>
<div class="sg-progress-circular-floating" </div>
ng-show="list.component.$isLoading()"> <md-fab-speed-dial
<md-progress-circular class="md-accent" class="md-scale md-fab-bottom-right"
md-mode="indeterminate" ng-cloak="ng-cloak"
md-diameter="32"><!-- mailbox loading progress --></md-progress-circular> md-direction="up">
</div>
<md-fab-speed-dial
class="md-scale md-fab-bottom-right"
ng-cloak="ng-cloak"
md-direction="up">
<md-fab-trigger> <md-fab-trigger>
<md-button class="md-fab md-accent" label:aria-label="New Event"> <md-button class="md-fab md-accent" label:aria-label="New Event">
<md-icon>add</md-icon> <md-icon>add</md-icon>