rejiggered event html/css, added print stylesheet, much more printer friendly

This commit is contained in:
Adam Shaw 2011-02-01 13:09:32 -08:00
parent bef6f92836
commit f3fcd57530
20 changed files with 366 additions and 326 deletions

View file

@ -56,6 +56,10 @@ zip:
@echo "building core..."
@$(call concat_js,${SRC_DIR},"${BUILD_DIR}/fullcalendar/fullcalendar/fullcalendar.js")
@$(call concat_css,${SRC_DIR},"${BUILD_DIR}/fullcalendar/fullcalendar/fullcalendar.css")
@cat "${SRC_DIR}/common/print.css" \
| ${VER_SED} \
| ${DATE_SED} \
> "${BUILD_DIR}/fullcalendar/fullcalendar/fullcalendar.print.css"
@echo "compressing core js..."
@java -jar ${BUILD_DIR}/compiler.jar --warning_level VERBOSE --jscomp_off checkTypes --externs build/externs.js \

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -5,6 +5,7 @@
<script type='text/javascript' src='../src/gcal/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -4,6 +4,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -5,6 +5,7 @@
<script type='text/javascript' src='../src/_loader.js'></script>
<!--[[
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.css' />
<link rel='stylesheet' type='text/css' href='../fullcalendar/fullcalendar.print.css' media='print' />
<script type='text/javascript' src='../jquery/jquery.js'></script>
<script type='text/javascript' src='../jquery/jquery-ui.js'></script>
<script type='text/javascript' src='../fullcalendar/fullcalendar.min.js'></script>

View file

@ -72,7 +72,7 @@ function Header(calendar, options) {
var text = smartProperty(options.buttonText, buttonName);
var button = $(
"<span class='fc-button fc-button-" + buttonName + " " + tm + "-state-default'>" +
"<span class='fc-inner'>" +
"<span class='fc-button-inner'>" +
"<span class='fc-button-content'>" +
(icon ?
"<span class='fc-icon-wrap'>" +

View file

@ -19,6 +19,7 @@ css('main.css');
css('common/common.css');
css('basic/basic.css');
css('agenda/agenda.css');
cssprint('common/print.css');
if (!legacy) {
jslib('../lib/' + JQUERY);
@ -119,6 +120,11 @@ function css(file) {
}
function cssprint(file) {
tags.push("<link rel='stylesheet' type='text/css' href='" + prefix + file + "' media='print' />");
}
function js(file) {
tags.push("<script type='text/javascript' src='" + prefix + file + "'></script>");
}

View file

@ -280,10 +280,18 @@ function AgendaEventRenderer() {
function slotSegHtml(event, seg, className) {
return "<div class='" + className + event.className.join(' ') + "' style='position:absolute;z-index:8;top:" + seg.top + "px;left:" + seg.left + "px'>" +
"<a" + (event.url ? " href='" + htmlEscape(event.url) + "'" : '') + ">" +
"<span class='fc-event-bg'></span>" +
"<span class='fc-event-time'>" + htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) + "</span>" +
"<span class='fc-event-title'>" + htmlEscape(event.title) + "</span>" +
"<a class='fc-event-inner'" + (event.url ? " href='" + htmlEscape(event.url) + "'" : '') + ">" + // good for escaping quotes?
"<div class='fc-event-head'>" +
"<div class='fc-event-time'>" +
htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +
"</div>" +
"</div>" +
"<div class='fc-event-content'>" +
"<div class='fc-event-title'>" +
htmlEscape(event.title) +
"</div>" +
"</div>" +
"<div class='fc-event-bg'></div>" +
"</a>" +
((event.editable || event.editable === undefined && opt('editable')) && !opt('disableResizing') && $.fn.resizable ?
"<div class='ui-resizable-handle ui-resizable-s'>=</div>"
@ -434,7 +442,7 @@ function AgendaEventRenderer() {
trigger('eventDragStart', eventElement, event, ev, ui);
hideEvents(event, eventElement);
if ($.browser.msie) {
eventElement.find('span.fc-event-bg').hide(); // nested opacities mess up in IE, just hide
eventElement.find('div.fc-event-bg').hide(); // nested opacities mess up in IE, just hide
}
origPosition = eventElement.position();
minuteDelta = prevMinuteDelta = 0;
@ -483,11 +491,11 @@ function AgendaEventRenderer() {
resetElement();
eventElement.css(origPosition); // sometimes fast drags make event revert to wrong position
updateTimeText(0);
if ($.browser.msie) {
if ($.browser.msie) { // TODO: dont use browser detection. base off of the presence of filter
eventElement
.css('filter', '') // clear IE opacity side-effects
.find('span.fc-event-bg')
.css('display', ''); // .show() made display=inline
.find('div.fc-event-bg')
.show();
}
showEvents(event, eventElement);
}

View file

@ -259,7 +259,7 @@ function AgendaView(element, calendar, viewName) {
}
slotScroller =
$("<div style='position:absolute;left:0;width:100%;overflow-x:hidden;overflow-y:auto'/>")
$("<div style='position:absolute;width:100%;overflow-x:hidden;overflow-y:auto'/>")
.appendTo(slotLayer);
slotContent =

View file

@ -6,6 +6,10 @@
border-collapse: separate;
}
.fc-agenda-days th {
text-align: center;
}
.fc-agenda .fc-agenda-axis {
width: 50px;
padding: 0 4px;
@ -19,12 +23,7 @@
padding: 2px 2px 1px;
}
.fc-agenda-days th {
text-align: center;
}
/* make axis border take precedence */
.fc-agenda-days .fc-agenda-axis {
border-right-width: 1px;
@ -34,20 +33,18 @@
border-left-width: 0;
}
/* all-day area */
.fc-agenda-allday th {
border-width: 0 1px;
}
.fc-agenda-allday .fc-day-content {
min-height: 34px; /* TODO: doesnt work in quirksmode */
min-height: 34px; /* TODO: doesnt work well in quirksmode */
_height: 34px;
}
/* divider (between all-day and slots) */
.fc-agenda-divider-inner {
height: 2px;
@ -58,9 +55,7 @@
background: #eee;
}
/* slot rows */
.fc-agenda-slots th {
border-width: 1px 1px 0;
@ -86,10 +81,9 @@
}
.fc-agenda-slots tr.fc-minor th.ui-widget-header {
*border-top-style: solid;
*border-top-style: solid; /* doesn't work with background in IE6/7 */
}
/* Vertical Events
@ -99,51 +93,25 @@
border-width: 0 1px;
}
.fc-event-vert a {
border-width: 0;
.fc-event-vert .fc-event-inner {
display: block; /* might be an <a> */
height: 100%;
}
/* for fake rounded corners */
.fc-content .fc-corner-top {
margin-top: 1px;
}
.fc-content .fc-corner-top a {
margin-top: -1px;
border-top-width: 1px;
}
.fc-content .fc-corner-bottom {
margin-bottom: 1px;
}
.fc-content .fc-corner-bottom a {
margin-bottom: -1px;
border-bottom-width: 1px;
}
/* event content */
.fc-event-vert span {
display: block;
.fc-event-vert .fc-event-head,
.fc-event-vert .fc-event-content {
position: relative;
z-index: 2;
width: 100%;
overflow: hidden;
}
.fc-event-vert span.fc-event-time {
.fc-event-vert .fc-event-time {
white-space: nowrap;
_white-space: normal;
overflow: hidden;
border: 0;
font-size: 10px;
}
.fc-event-vert span.fc-event-title {
line-height: 13px;
}
.fc-event-vert span.fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay */
position: absolute;
z-index: 1;
top: 0;
@ -152,7 +120,7 @@
height: 100%;
background: #fff;
opacity: .3;
filter: alpha(opacity=30); /* for IE */
filter: alpha(opacity=30);
}
/* resizable */

View file

@ -39,3 +39,5 @@
.fc-rtl .fc-grid .fc-event-time {
float: right;
}

View file

@ -157,7 +157,7 @@ function DayEventRenderer() {
}
html +=
"<div class='" + className + event.className.join(' ') + "' style='position:absolute;z-index:8;left:"+left+"px'>" +
"<a" + (event.url ? " href='" + htmlEscape(event.url) + "'" : '') + ">" +
"<a class='fc-event-inner'" + (event.url ? " href='" + htmlEscape(event.url) + "'" : '') + ">" +
(!event.allDay && seg.isStart ?
"<span class='fc-event-time'>" +
htmlEscape(formatDates(event.start, event.end, opt('timeFormat'))) +

View file

@ -1,69 +1,156 @@
/* Cell Styles
------------------------------------------------------------------------*/
table.fc-border-separate {
border-collapse: separate;
.fc-widget-header, /* <th>, usually */
.fc-widget-content { /* <td>, usually */
border: 1px solid #ccc;
}
.fc-border-separate th,
.fc-border-separate td {
border-width: 1px 0 0 1px;
.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */
background: #ffc;
}
.fc-border-separate th.fc-last,
.fc-border-separate td.fc-last {
border-right-width: 1px;
.fc-cell-overlay { /* semi-transparent rectangle while dragging */
background: #9cf;
opacity: .2;
filter: alpha(opacity=20); /* for IE */
}
.fc-border-separate tr.fc-last th,
.fc-border-separate tr.fc-last td {
border-bottom-width: 1px;
/* Buttons
------------------------------------------------------------------------*/
.fc-button {
position: relative;
display: inline-block;
border-style: solid;
border-width: 1px 0;
cursor: pointer;
}
.fc-border-separate tbody tr.fc-first td,
.fc-border-separate tbody tr.fc-first th {
border-top-width: 0;
.fc-button-inner {
position: relative;
float: left;
border-style: solid;
border-width: 0 1px;
overflow: hidden;
}
.fc-button-content {
position: relative;
float: left;
height: 1.9em;
line-height: 1.9em;
padding: 0 .6em;
white-space: nowrap;
}
/* icon (for jquery ui) */
.fc-button-content .fc-icon-wrap {
position: relative;
float: left;
top: 50%;
}
.fc-button-content .ui-icon {
position: relative;
float: left;
margin-top: -50%;
*margin-top: 0;
*top: -50%;
}
/* gloss effect */
.fc-state-default .fc-button-effect {
position: absolute;
top: 50%;
left: 0;
}
.fc-state-default .fc-button-effect span {
position: absolute;
top: -100px;
left: 0;
width: 500px;
height: 100px;
border-width: 100px 0 0 1px;
border-style: solid;
border-color: #fff;
background: #444;
opacity: .09;
filter: alpha(opacity=9);
}
/* button states (determines colors) */
.fc-state-default,
.fc-state-default .fc-button-inner {
border-style: solid;
border-color: #ccc #bbb #aaa;
background: #F3F3F3;
color: #000;
}
.fc-state-hover,
.fc-state-hover .fc-button-inner {
border-color: #999;
}
.fc-state-down,
.fc-state-down .fc-button-inner {
border-color: #555;
background: #777;
}
.fc-state-active,
.fc-state-active .fc-button-inner {
border-color: #555;
background: #777;
color: #fff;
}
.fc-state-disabled,
.fc-state-disabled .fc-button-inner {
color: #999;
border-color: #ddd;
}
.fc-state-disabled .fc-button-effect {
display: none;
}
/* Global Event Styles
------------------------------------------------------------------------*/
.fc-event,
.fc-agenda .fc-event-time,
.fc-event a {
border-style: solid;
border-color: #36c; /* default BORDER color (probably the same as background-color) */
.fc-event, /* TODO: change this to a fc-event-skin class (and change print.css) */
.fc-event-inner,
.fc-event-head {
border-color: #36c; /* default BORDER color */
background-color: #36c; /* default BACKGROUND color */
color: #fff; /* default TEXT color */
}
/* Use the 'className' CalEvent property and the following
* example CSS to change event color on a per-event basis:
*
* .myclass,
* .fc-agenda .myclass .fc-event-time,
* .myclass a {
* background-color: black;
* border-color: black;
* color: red;
* }
*/
.fc-event {
text-align: left;
}
.fc-event a {
overflow: hidden;
border-style: solid;
border-width: 0;
font-size: .85em;
text-decoration: none;
cursor: pointer;
}
.fc-event-editable {
.fc-rtl .fc-event {
text-align: right;
}
.fc-event-inner {
position: relative;
border-style: solid;
border-width: 0;
text-decoration: none;
cursor: pointer;
}
@ -72,24 +159,7 @@ table.fc-border-separate {
padding: 0 1px;
}
/* for fake rounded corners */
.fc-event a {
display: block;
position: relative;
width: 100%;
height: 100%;
}
/* right-to-left */
.fc-rtl .fc-event a {
text-align: right;
}
/* resizable */
.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anoymore, change class ***/
.fc .ui-resizable-handle { /*** TODO: don't use ui-resizable anymore, change class ***/
display: block;
position: absolute;
z-index: 99999;
@ -107,28 +177,9 @@ table.fc-border-separate {
margin-bottom: 1px;
}
.fc-event-hori a {
border-width: 0;
}
/* for fake rounded corners */
.fc-content .fc-corner-left {
margin-left: 1px;
}
.fc-content .fc-corner-left a {
margin-left: -1px;
border-left-width: 1px;
}
.fc-content .fc-corner-right {
margin-right: 1px;
}
.fc-content .fc-corner-right a {
margin-right: -1px;
border-right-width: 1px;
.fc-event-hori .fc-event-inner {
display: block; /* might be an <a> tag */
width: 100%; /* needed for fake rounded corners in IE6/7 */
}
/* resizable */
@ -155,3 +206,91 @@ table.fc-border-separate {
/* Fake Rounded Corners (for buttons and events)
------------------------------------------------------------*/
.fc-corner-left {
margin-left: 1px;
}
.fc-corner-left .fc-button-inner,
.fc-corner-left .fc-event-inner {
margin-left: -1px;
}
.fc-corner-right {
margin-right: 1px;
}
.fc-corner-right .fc-button-inner,
.fc-corner-right .fc-event-inner {
margin-right: -1px;
}
.fc-corner-top {
margin-top: 1px;
}
.fc-corner-top .fc-event-inner {
margin-top: -1px;
}
.fc-corner-bottom {
margin-bottom: 1px;
}
.fc-corner-bottom .fc-event-inner {
margin-bottom: -1px;
}
/* Fake Rounded Corners SPECIFICALLY FOR EVENTS
-----------------------------------------------------------------*/
.fc-corner-left .fc-event-inner {
border-left-width: 1px;
}
.fc-corner-right .fc-event-inner {
border-right-width: 1px;
}
.fc-corner-top .fc-event-inner {
border-top-width: 1px;
}
.fc-corner-bottom .fc-event-inner {
border-bottom-width: 1px;
}
/* Reusable Separate-border Table
------------------------------------------------------------*/
table.fc-border-separate {
border-collapse: separate;
}
.fc-border-separate th,
.fc-border-separate td {
border-width: 1px 0 0 1px;
}
.fc-border-separate th.fc-last,
.fc-border-separate td.fc-last {
border-right-width: 1px;
}
.fc-border-separate tr.fc-last th,
.fc-border-separate tr.fc-last td {
border-bottom-width: 1px;
}
.fc-border-separate tbody tr.fc-first td,
.fc-border-separate tbody tr.fc-first th {
border-top-width: 0;
}

59
src/common/print.css Normal file
View file

@ -0,0 +1,59 @@
/*
* FullCalendar v@VERSION Print Stylesheet
*
* Include this stylesheet on your page to get a more printer-friendly calendar.
* When including this stylesheet, use the media='print' attribute of the <link> tag.
* Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.
*
* Date: @DATE
*
*/
/* Events
-----------------------------------------------------*/
.fc-event,
.fc-event-inner,
.fc-event-head {
background: none !important;
color: #000 !important;
}
/* horizontal events */
.fc-event-hori {
border-width: 0 0 1px 0 !important;
border-bottom-style: dotted !important;
border-bottom-color: #000 !important;
padding: 1px 0 0 0 !important;
}
.fc-event-hori .fc-event-inner {
border-width: 0 !important;
padding: 0 1px !important;
}
/* vertical events */
.fc-event-vert {
border-width: 0 0 0 1px !important;
border-left-style: dotted !important;
border-left-color: #000 !important;
padding: 0 1px 0 0 !important;
}
.fc-event-vert .fc-event-inner {
border-width: 0 !important;
padding: 1px 0 !important;
}
.fc-event-bg {
display: none !important;
}
.fc-event .ui-resizable-handle {
display: none !important;
}

View file

@ -1,16 +1,9 @@
/*
* FullCalendar v@VERSION Stylesheet
*
* Feel free to edit this file to customize the look of FullCalendar.
* When upgrading to newer versions, please upgrade this file as well,
* porting over any customizations afterwards.
*
* Date: @DATE
*
*/
/* TODO: make font sizes look the same in all doctypes */
.fc {
@ -39,7 +32,7 @@ html .fc,
/* Header
------------------------------------------------------------------------*/
table.fc-header td {
.fc-header td {
white-space: nowrap;
}
@ -57,22 +50,41 @@ table.fc-header td {
text-align: right;
}
.fc-header-title {
display: inline-block;
vertical-align: top;
}
.fc-header-title h2 {
margin-top: 0;
white-space: nowrap;
}
.fc .fc-header-space {
padding-left: 10px;
}
.fc-header .fc-button {
margin-right: -1px;
margin-bottom: 1em;
vertical-align: top;
}
/* buttons edges butting together */
.fc-header .fc-button {
margin-right: -1px;
}
.fc-header .fc-corner-right {
margin-right: 1px;
margin-right: 1px; /* back to normal */
}
.fc-header .ui-corner-right {
margin-right: 0;
margin-right: 0; /* back to normal */
}
/* button layering (for border precedence) */
.fc-header .fc-state-hover,
.fc-header .ui-state-hover {
z-index: 2;
@ -87,183 +99,17 @@ table.fc-header td {
z-index: 4;
}
.fc-header-title {
display: inline-block;
vertical-align: top;
}
.fc-header-title h2 {
margin-top: 0;
white-space: nowrap;
}
.fc .fc-header-space {
padding-left: 10px;
}
/* Buttons
------------------------------------------------------------------------*/
.fc-button {
position: relative;
display: inline-block;
cursor: pointer;
}
.fc-button .fc-inner {
float: left;
}
.fc-button-content {
position: relative;
float: left;
height: 1.9em;
line-height: 1.9em;
padding: 0 .6em;
white-space: nowrap;
}
.fc-button-content .fc-icon-wrap {
position: relative;
float: left;
top: 50%;
}
.fc-button-content .ui-icon {
position: relative;
float: left;
margin-top: -50%;
*margin-top: 0;
*top: -50%;
}
/* fake rounded corners */
.fc-state-default {
border-style: solid;
border-width: 1px 0;
padding: 0 1px;
}
.fc-state-default .fc-inner {
position: relative;
border-style: solid;
border-width: 0 1px;
margin: 0 -1px;
overflow: hidden;
}
.fc-corner-left {
margin-left: 1px;
padding-left: 0;
}
.fc-corner-right {
margin-right: 1px;
padding-right: 0;
}
/* gloss effect */
.fc-state-default .fc-button-effect {
position: absolute;
top: 50%;
left: 0;
}
.fc-state-default .fc-button-effect span {
position: absolute;
top: -100px;
left: 0;
width: 500px;
height: 100px;
border-width: 100px 0 0 1px;
border-style: solid;
border-color: #fff;
background: #444;
opacity: .09;
filter: alpha(opacity=9);
}
.fc-state-disabled .fc-button-effect {
display: none;
}
.fc-state-default,
.fc-state-default .fc-inner {
border-style: solid;
border-color: #ccc #bbb #aaa;
background: #F3F3F3;
color: #000;
}
.fc-state-hover,
.fc-state-hover .fc-inner {
border-color: #999;
}
.fc-state-down,
.fc-state-down .fc-inner {
border-color: #555;
background: #777;
}
.fc-state-active,
.fc-state-active .fc-inner {
border-color: #555;
background: #777;
color: #fff;
}
.fc-state-disabled,
.fc-state-disabled .fc-inner {
color: #999;
border-color: #ddd;
}
/* TODO: calendar column headings */
/* Content Area & Global Cell Styles
/* Content
------------------------------------------------------------------------*/
.fc-content {
clear: both;
}
.fc-widget-header,
.fc-widget-content {
border: 1px solid #ccc;
}
.fc-state-highlight { /* today */
background: #ffc;
}
.fc-cell-overlay { /* semi-transparent rectangle while dragging */
background: #9cf;
opacity: .2;
filter: alpha(opacity=20); /* for IE */
}
.fc-view {
width: 100%; /* needed for view switching (when view is absolute) */
}

View file

@ -1 +1 @@
1.4.10
1.5alpha