blob: bf1dc1c3dc5992424cbf06cf4f63b5591ca6ae04 [file] [log] [blame]
/**
* A list of colors for custom event colors. Can be an empty list of you don't
* need any custom event colors.
*
* @example javascript
* // Java code
* // 'event' is an instance of EditableCalendarEvent
* event.setStyleName("color1"); // 1st color in the list
* event.setStyleName("color2"); // 2nd color in the list
* // etc.
*
* @group calendar
*/
$v-calendar-event-colors: #00ace0, #2d9f19, #d18100, #ce3812, #2d55cd !default;
/**
* Outputs the global selectors and properties for the Calendar component - styles which are
* considered mandatory for the component to work properly.
*
* @param {string} $primary-stylename (v-calendar) - the primary style name for the selectors
*
* @group calendar
*/
@mixin valo-calendar-global ($primary-stylename: v-calendar) {
.#{$primary-stylename}-month-day-scrollable {
overflow-y: scroll;
}
.#{$primary-stylename}-week-wrapper {
position: relative;
overflow: hidden;
}
.#{$primary-stylename}-current-time {
position: absolute;
left: 0;
width: 100%;
height: 1px;
background: red;
z-index: 2;
}
.#{$primary-stylename}-event-resizetop,
.#{$primary-stylename}-event-resizebottom {
position: absolute;
height: 5%;
min-height: 3px;
width: 100%;
z-index: 1;
}
.#{$primary-stylename}-event-resizetop {
cursor: row-resize;
top: 0;
}
.#{$primary-stylename}-event-resizebottom {
cursor: row-resize;
bottom: 0;
}
// What a truckload of magic numbers!
// TODO Try to find out what these actually do, and how to make them dissappear
.#{$primary-stylename}-header-month td:first-child {
padding-left: 20px;
// Same as VCalendar.MONTHLY_WEEKTOOLBARWIDTH - .#{$primary-stylename}-week-numbers border
}
.#{$primary-stylename}-week-numbers {
//border-right: 1px solid;
}
.#{$primary-stylename}-month-sizedheight .#{$primary-stylename}-month-day {
height: 100px;
}
.#{$primary-stylename}-month-sizedwidth .#{$primary-stylename}-month-day {
width: 100px;
}
.#{$primary-stylename}-header-month-Hsized .#{$primary-stylename}-header-day {
width: 101px;
}
.#{$primary-stylename}-header-month-Hsized td:first-child {
padding-left: 21px;
}
.#{$primary-stylename}-header-day-Hsized {
width: 200px;
}
.#{$primary-stylename}-week-numbers-Vsized .#{$primary-stylename}-week-number {
height: 100px;
line-height: 100px;
}
.#{$primary-stylename}-week-wrapper-Vsized {
height: 400px;
overflow-x: hidden !important;
}
.#{$primary-stylename}-times-Vsized .#{$primary-stylename}-time {
height: 38px;
}
.#{$primary-stylename}-times-Hsized .#{$primary-stylename}-time {
width: 42px;
}
.#{$primary-stylename}-day-times-Vsized .v-datecellslot,
.#{$primary-stylename}-day-times-Vsized .v-datecellslot-even {
height: 18px;
}
.#{$primary-stylename}-day-times-Hsized,
.#{$primary-stylename}-day-times-Hsized .v-datecellslot,
.#{$primary-stylename}-day-times-Hsized .v-datecellslot-even {
width: 200px;
}
}
/**
* Outputs the selectors and properties for the Calendar component.
*
* @param {string} $primary-stylename (v-calendar) - the primary style name for the selectors
*
* @group calendar
*/
@mixin valo-calendar ($primary-stylename: v-calendar) {
.#{$primary-stylename}-header-day {
font-weight: $v-font-weight + 100;
text-align: center;
padding: round($v-unit-size/5) 0;
}
// Prev/next week buttons
.#{$primary-stylename}-header-week .#{$primary-stylename}-back,
.#{$primary-stylename}-header-week .#{$primary-stylename}-next {
@include appearance(none);
background: transparent;
border: none;
padding: 0;
margin: 0;
cursor: pointer;
outline: none;
color: inherit;
@include opacity(.5);
&:focus {
outline: none;
}
&:hover {
@include opacity(1);
}
&:active {
@include opacity(.5);
}
}
.#{$primary-stylename}-header-week .#{$primary-stylename}-back {
@include valo-calendar-prev-style;
}
.#{$primary-stylename}-header-week .#{$primary-stylename}-next {
@include valo-calendar-next-style;
}
// Month grid
.#{$primary-stylename}-month {
outline: none;
overflow: hidden;
td {
vertical-align: top;
}
}
.#{$primary-stylename}-week-number {
cursor: pointer;
width: 20px; // Same as VCalendar.MONTHLY_WEEKTOOLBARWIDTH
text-align: center;
font-size: 0.8em;
@include opacity(.5);
&:hover {
@include opacity(1);
}
}
.#{$primary-stylename}-month-day {
outline: none;
@include box-sizing(border-box);
line-height: 1.2;
}
.#{$primary-stylename}-month tr:not(:first-child) .#{$primary-stylename}-month-day {
//width: auto !important;
}
.#{$primary-stylename}-bottom-spacer,
.#{$primary-stylename}-spacer,
.#{$primary-stylename}-bottom-spacer-empty {
height: round($v-font-size * 1.2);
margin-bottom: round($v-unit-size/12);
}
.#{$primary-stylename}-bottom-spacer {
font-size: 0.8em;
padding: 0 round($v-unit-size/8);
cursor: pointer;
&:hover {
color: $v-focus-color;
}
}
.#{$primary-stylename}-day-number {
line-height: round($v-unit-size/1.5);
font-size: $v-font-size;
text-align: right;
margin: 0 round($v-unit-size/8);
white-space: nowrap;
border-top: 1px solid darken($v-background-color, 3%);
cursor: pointer;
&:hover {
color: $v-focus-color;
}
}
.#{$primary-stylename}-month-day-today {
background: blend-normal(rgba($v-focus-color, .05), $v-background-color);
.#{$primary-stylename}-day-number {
font-weight: $v-font-weight + 100;
color: $v-focus-color;
border-top: 2px solid $v-focus-color;
line-height: round($v-unit-size/1.5) - 1px;
margin: 0;
padding: 0 round($v-unit-size/8);
}
}
.#{$primary-stylename}-month-day-selected {
background-color: blend-normal(rgba($v-selection-color, .1), $v-background-color);
}
.#{$primary-stylename}-month-day-dragemphasis {
background-color: #a8a8a8;
}
.#{$primary-stylename}-month-day-scrollable {
overflow-y: scroll;
}
// Week/day view
$_times-column-width: 50px; // Seems to be a fixed number
.#{$primary-stylename}-weekly-longevents {
margin-left: $_times-column-width; // Seems to be a fixed number
border-bottom: round($v-unit-size/12) solid darken($v-background-color, 10%);
.#{$primary-stylename}-event-all-day {
height: round($v-font-size * 0.85 * 1.6);
line-height: 1.6;
margin-bottom: round($v-unit-size/12);
}
}
.#{$primary-stylename}-header-week td {
vertical-align: middle !important;
}
.#{$primary-stylename}-header-week .#{$primary-stylename}-header-day {
cursor: pointer;
}
.#{$primary-stylename}-times {
width: $_times-column-width;
font-size: 0.77em;
line-height: 1;
white-space: nowrap;
}
.#{$primary-stylename}-time {
text-align: right;
padding-right: round($v-unit-size/4);
margin-top: round($v-font-size*0.8/-2);
padding-bottom: round($v-font-size*0.8/2);
}
.#{$primary-stylename}-day-times,
.#{$primary-stylename}-day-times-today {
outline: none;
border-right: 1px solid transparent;
&:focus {
outline: none;
}
}
$valo-calendar-time-divider-color: first-color(valo-border($color: $v-app-background-color, $strength: 0.5));
.#{$primary-stylename} .v-datecellslot,
.#{$primary-stylename} .v-datecellslot-even {
border-top: 1px solid $valo-calendar-time-divider-color;
&:first-child {
border-top-color: transparent;
}
}
.#{$primary-stylename} .v-datecellslot {
border-top-style: dotted;
}
.#{$primary-stylename} .v-datecellslot,
.#{$primary-stylename} .v-datecellslot-even {
margin-right: round($v-unit-size/8);
}
.#{$primary-stylename}-current-time {
background: $v-focus-color;
line-height: 1px;
pointer-events: none;
@include opacity(.5);
&:before {
content: "\2022";
color: $v-focus-color;
font-size: 22px;
margin-left: -0.07em;
}
}
.#{$primary-stylename} .v-daterange {
position: relative;
&:before {
content: "";
position: absolute;
top: 0;
right: 0;
bottom: -1px;
left: 0;
background: $v-selection-color;
@include opacity(.5);
@if $v-border-radius > 0 {
border-radius: $v-border-radius $v-border-radius 0 0;
}
}
+ .v-daterange {
border-color: transparent;
&:before {
@if $v-border-radius > 0 {
border-radius: 0;
}
}
}
}
// Event styles
.#{$primary-stylename}-event {
font-size: 0.85em;
overflow: hidden;
cursor: pointer;
outline: none;
border-radius: $v-border-radius;
&:focus {
outline: none;
}
}
.#{$primary-stylename}-event-month {
padding: 0 round($v-unit-size/8);
@include box-sizing(border-box);
margin-bottom: round($v-unit-size/12);
white-space: nowrap;
text-overflow: ellipsis;
height: round($v-font-size * 1.2);
line-height: round($v-font-size * 1.2);
.#{$primary-stylename}-event-time {
float: right;
font-size: 0.9em;
line-height: round($v-font-size * 1.2);
@include opacity(.5);
}
&:before {
content: "\25cf";
margin-right: .2em;
}
}
.#{$primary-stylename}-event-all-day {
padding: 0 round($v-unit-size/8);
@include box-sizing(border-box);
height: round($v-font-size * 1.2);
line-height: round($v-font-size * 1.2);
border-radius: 0;
margin-left: -1px;
white-space: nowrap;
&:before {
content: "";
}
}
.#{$primary-stylename}-event-start {
overflow: visible;
margin-left: 0;
&.#{$primary-stylename}-event-continued-to,
&.#{$primary-stylename}-event-end {
overflow: hidden;
text-overflow: ellipsis;
}
}
@if $v-border-radius > 0 {
.#{$primary-stylename}-event-start {
border-top-left-radius: $v-border-radius;
border-bottom-left-radius: $v-border-radius;
margin-left: round($v-unit-size/8);
}
.#{$primary-stylename}-event-end {
border-top-right-radius: $v-border-radius;
border-bottom-right-radius: $v-border-radius;
margin-right: round($v-unit-size/8);
}
}
.#{$primary-stylename}-event-caption {
font-weight: $v-font-weight + 200;
line-height: 1.2;
padding: round($v-unit-size/8) 0;
position: absolute;
overflow: hidden;
right: round($v-unit-size/4);
left: round($v-unit-size/8);
bottom: 0;
top: 0;
span {
font-weight: $v-font-weight;
white-space: nowrap;
}
}
.#{$primary-stylename}-week-wrapper .#{$primary-stylename}-event {
overflow: visible;
// Event is being dragged
&[style*=" left:"] .#{$primary-stylename}-event-content {
}
}
.#{$primary-stylename}-week-wrapper .#{$primary-stylename}-event-caption {
}
.#{$primary-stylename}-week-wrapper .#{$primary-stylename}-event-content {
margin-top: -1px;
border-radius: $v-border-radius + 1px;
border: 1px solid $v-app-background-color;
padding-top: 3px;
margin-right: round($v-unit-size/8);
}
// Custom event colors
@for $i from 1 through length($v-calendar-event-colors) {
$color: nth($v-calendar-event-colors, $i);
$bg: blend-normal(rgba($color, .2), $v-background-color);
// First color is considered the default color (and stylename 'color1' will equal to that)
$stylename: if($i == 1, '', '[class*="color#{$i}"]');
.#{$primary-stylename}-event-month#{$stylename}:before {
color: $color;
}
.#{$primary-stylename}-event-all-day#{$stylename} {
background-color: $bg;
background-color: rgba($bg, .8);
color: $color;
}
.#{$primary-stylename}-week-wrapper .#{$primary-stylename}-event#{$stylename} {
color: $color;
.#{$primary-stylename}-event-content {
background-color: $bg;
background-color: rgba($bg, .8);
}
}
}
.#{$primary-stylename}.v-disabled * {
cursor: default;
}
}
/**
* Outputs the styles for the previous button.
*
* @group calendar
*/
@mixin valo-calendar-prev-style {
&:before {
@include valo-tabsheet-scroller-prev-icon-style;
}
}
/**
* Outputs the styles for the next button.
*
* @group calendar
*/
@mixin valo-calendar-next-style {
&:before {
@include valo-tabsheet-scroller-next-icon-style;
}
}