timestamper/web/www/css/ts-screen.scss

381 lines
8.3 KiB
SCSS
Raw Normal View History

/*
* author: Jonathan Bernard
* TimeStamper main CSS for screen media types
*/
$smallScreen: 640px;
$wideScreen: 1000px;
$ultraWideScreen: 1400px;
@import "rounded";
@import "forSize";
$darkTxt: #222;
$lightTxt: #eee;
$darkBg: #222;
$lightBg: #eee;
$medBg: #CCC;
* {
color: inherit;
margin: 0;
padding: 0;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box; }
/* HTML5 elements */
article,aside,details,figcaption,figure,
footer,header,hgroup,menu,nav,section {
display:block; }
body {
color: $darkTxt;
margin: auto;
line-height: 1.4; }
.hidden { display: none; }
input {
border: solid thin lighten($darkTxt, 20%);
-webkit-box-shadow: inset 0px 2px 4px #CCC;
box-shadow: inset 0px 2px 4px #CCC;
font-family: Cantarell; }
#top {
background: $darkBg;
color: $lightTxt;
opacity: 1;
padding-top: 0.5rem; }
#timeline {
border-bottom: thin solid $lightBg;
font-family: Arvo;
Duration display, time formatting, UI tweaks. Client Behaviour (ts.js) ======================== - Created EntryView.getViewModel: translates model data to view data, specifically synthesizes the start time and duration from the timestamp. - Added nextModel option to EntryView, needed for calculating the entry duration. - Created EntryView.formatStart: given the timestamp, return the start time, in HH:MM format. Code is written for both 24hr and 12hr format, still need to write a selector mechanism. For now, uses 12hr format. - Created EntryView.formatDuration: Get the duration of the entry based on this entry's timestamp and and the next entry's timestamp in a display-able form. If nextModel is `null` or `undefined` it is assumed that `model` is the most recent model and duration is calculated against the current time. - Changed EntryView.render to use getViewModel. - Added 'blur' listeners to the mark and timestamp input fields to close them without persisting the changes. - Created EntryView.update: Refresh the display based on the model using the existing DOM elements. - EntryView.save() now uses EntryView.update() instead of EntryView.render() and no longer includes an implicit close() - EntryView.close() has been split into seperate save() and close() functions, to persist the changes and hide the input dialogs, respectively. - EntryListView.addOne now passes the nextModel to EntryViews is creates. - EntryListView.createNewEntryOnEnter() now clear the new intry input after creating a new entry. - EntryListView.render() now uses a for-structure to traverse the entry collection and passes the nextModel (if there is one) to EntryListView.addOne. Client UI (ts-screen.scss) ========================== - Font size, family, and color adjusted on timeline and user input fields. - Day seperator secondary header colors adjusted. - Mark column width shortened, timestamp and duration columns widened. - Styles added for notes UI Client UI (index.yaws) ====================== - Markup changes needed for getViewModel chanes. - Expanded day seperator.
2011-05-07 21:31:30 -05:00
.timeline-desc-input, .timeline-id-input {
font-family: inherit;
font-size: inherit;
color: $darkBg;
display: none; }
&.edit-id {
.timeline-id-input { display: inline-block; }
.timeline-id { display: none; } }
&.edit-desc {
.timeline-desc-input { display: inline-block; }
.timeline-desc { display: none; } }
}
#entry-list {
padding-bottom: 1rem;
2011-06-01 06:29:48 -05:00
.day-seperator {
2011-06-01 06:29:48 -05:00
background: $medBg;
color: $darkBg;
font-family: Cantarell;
font-weight: bold;
margin: 1rem 0 0 0;
padding: 0 2rem;
2011-06-01 06:29:48 -05:00
h5 { color: #667; } }
2011-06-01 06:29:48 -05:00
#new-entry {
margin: 0.5rem 0 0 0;
padding: 0 2rem; }
2011-06-01 06:29:48 -05:00
.timestamp, .timestamp-input, .duration { text-align: right; }
2011-06-01 06:29:48 -05:00
.entry {
2011-06-01 06:29:48 -05:00
font-family: Cantarell;
padding: 0 2rem;
2011-06-01 06:29:48 -05:00
.mark {
position: relative;
2011-06-01 06:29:48 -05:00
img.expand-entry, img.collapse-entry {
display: none;
left: -20px;
position: absolute;
top: 6px; } }
2011-06-01 06:29:48 -05:00
&:hover .mark img.expand-entry, &.show-notes img.collapse-entry { display: inline; }
2011-06-01 06:29:48 -05:00
.mark-input, .timestamp-input,
&.show-notes:hover img.expand-entry { display: none; }
2011-06-01 06:29:48 -05:00
.notes {
display: none;
font-family: Cantarell;
font-size: small;
padding: 0 0 0 1em;
2011-06-01 06:29:48 -05:00
:first-child { margin-top: 0; }
2011-06-01 06:29:48 -05:00
.notes-input, pre, code { font-family: 'Anonymous Pro'; } }
2011-06-01 06:29:48 -05:00
.notes * { width: 100%; }
&.edit-mark {
.mark-input { display: inline-block; }
.mark { display: none; } }
2011-06-01 06:29:48 -05:00
&.edit-timestamp {
.timestamp-input { display: inline-block; }
.timestamp { display: none; } }
.notes-input { display: none; }
2011-06-01 06:29:48 -05:00
&.edit-notes .notes-input { display: block; }
&.edit-notes .notes-text { display: none; }
&.current .duration {
-webkit-animation: pulse 1s infinite alternate;
-moz-animation: pulse 1s infinite alternate;
-o-animation: pulse 1s infinite alternate;
animation: pulse 1s infinite alternate; } } }
.dialog {
background: white;
background: rgba(255, 255, 255, 0.5);
color: $lightTxt;
position: fixed;
top: 0px;
left: 0px;
width: 100%;
height: 100em;
z-index: 10;
div.container {
background: $darkBg;
border-radius: 10px;
font-family: Cantarell;
margin-left: auto;
margin-right: auto;
margin-top: 4em;
padding: 1em;
width: 20em;
h2 {
border-bottom: thin solid $lightBg;
font-family: Arvo;
padding-bottom: 0.5em;
margin-bottom: 0.5em; }
label {
display: inline-block;
width: 6em; }
input { color: $darkTxt; }
.button-panel {
margin-top: 0.5em;
overflow: hidden;
.validate-tips { font-size: 1em; }
.dialog-button {
float: right;
padding-left: 1em;
font-family: Arvo;
font-size: 1.2em;
a { color: $lightBg; } } } } }
#login.dialog {
background: white;
opacity: 1; }
.drop-menu {
position: relative;
.drop-menu-items {
2011-06-01 06:29:48 -05:00
display: none;
list-style: none;
position: absolute;
2011-06-01 06:29:48 -05:00
li {
display: inline-block;
padding-left: 0.5em; } }
&:hover .drop-menu-items, .drop-menu-items:hover { display: block; }
a {
display: inline-block;
text-decoration: none;
&:hover { text-decoration: underline; } } }
.footer {
background: $darkBg;
color: $lightTxt;
font-family: Bentham;
padding: 1rem 0;
text-align: center;
width: 100%;
Duration display, time formatting, UI tweaks. Client Behaviour (ts.js) ======================== - Created EntryView.getViewModel: translates model data to view data, specifically synthesizes the start time and duration from the timestamp. - Added nextModel option to EntryView, needed for calculating the entry duration. - Created EntryView.formatStart: given the timestamp, return the start time, in HH:MM format. Code is written for both 24hr and 12hr format, still need to write a selector mechanism. For now, uses 12hr format. - Created EntryView.formatDuration: Get the duration of the entry based on this entry's timestamp and and the next entry's timestamp in a display-able form. If nextModel is `null` or `undefined` it is assumed that `model` is the most recent model and duration is calculated against the current time. - Changed EntryView.render to use getViewModel. - Added 'blur' listeners to the mark and timestamp input fields to close them without persisting the changes. - Created EntryView.update: Refresh the display based on the model using the existing DOM elements. - EntryView.save() now uses EntryView.update() instead of EntryView.render() and no longer includes an implicit close() - EntryView.close() has been split into seperate save() and close() functions, to persist the changes and hide the input dialogs, respectively. - EntryListView.addOne now passes the nextModel to EntryViews is creates. - EntryListView.createNewEntryOnEnter() now clear the new intry input after creating a new entry. - EntryListView.render() now uses a for-structure to traverse the entry collection and passes the nextModel (if there is one) to EntryListView.addOne. Client UI (ts-screen.scss) ========================== - Font size, family, and color adjusted on timeline and user input fields. - Day seperator secondary header colors adjusted. - Mark column width shortened, timestamp and duration columns widened. - Styles added for notes UI Client UI (index.yaws) ====================== - Markup changes needed for getViewModel chanes. - Expanded day seperator.
2011-05-07 21:31:30 -05:00
a {
color: lighten($lightTxt, 20%);
text-decoration: none;
&:hover { text-decoration: underline; } } }
.logo {
font-family: Bentham;
text-decoration: overline underline; }
@include forSize(notSmall) {
body { width: 75%; }
#top {
position: fixed;
top: 0px;
width: 75%;
z-index: 1; }
#timeline {
font-size: 1.5em;
padding: 0 2rem;
.timeline-desc {
display: inline-block;
width: 70%; }
.timeline-desc-input { width: 70% }
.timeline-id { display: inline-block; }
.drop-menu {
text-align: right;
display: inline-block;
width: 29%;
.drop-menu-items {
text-align: right;
right: 0;
width: 172.41%;
.new-timeline-link {
padding-right: 0.5em;
font-size: medium;
a { text-decoration: underline; }
img {
position: relative;
top: 4px;
left: -4px; } }
.timeline-link {
padding: 0 0.5em;
font-size: medium;
border-left: thin solid white } } } }
#user {
font-family: "Josefin Sans";
margin-top: 0.3rem;
padding: 0 0 0.3rem 2rem;
width: 100%;
.fullname, .username {
display: inline-block;
font-size: larger; }
.fullname-input {
font-family: inherit;
font-size: inherit;
color: $darkBg;
display: none; }
&.edit-fullname{
.fullname-input { display: inline-block; }
.fullname { display: none; } }
.user-menu { display: inline-block; }
.user-menu .user-menu-items {
list-style: none;
display: none;
li {
display: inline-block;
padding-left: 0.5em; }
a { text-decoration: none; }
a:hover { text-decoration: underline; }
}
.user-menu:hover .user-menu-items, .user-menu-items:hover { display: inline-block; } }
#entry-list {
margin: 6rem 0 0 0;
Duration display, time formatting, UI tweaks. Client Behaviour (ts.js) ======================== - Created EntryView.getViewModel: translates model data to view data, specifically synthesizes the start time and duration from the timestamp. - Added nextModel option to EntryView, needed for calculating the entry duration. - Created EntryView.formatStart: given the timestamp, return the start time, in HH:MM format. Code is written for both 24hr and 12hr format, still need to write a selector mechanism. For now, uses 12hr format. - Created EntryView.formatDuration: Get the duration of the entry based on this entry's timestamp and and the next entry's timestamp in a display-able form. If nextModel is `null` or `undefined` it is assumed that `model` is the most recent model and duration is calculated against the current time. - Changed EntryView.render to use getViewModel. - Added 'blur' listeners to the mark and timestamp input fields to close them without persisting the changes. - Created EntryView.update: Refresh the display based on the model using the existing DOM elements. - EntryView.save() now uses EntryView.update() instead of EntryView.render() and no longer includes an implicit close() - EntryView.close() has been split into seperate save() and close() functions, to persist the changes and hide the input dialogs, respectively. - EntryListView.addOne now passes the nextModel to EntryViews is creates. - EntryListView.createNewEntryOnEnter() now clear the new intry input after creating a new entry. - EntryListView.render() now uses a for-structure to traverse the entry collection and passes the nextModel (if there is one) to EntryListView.addOne. Client UI (ts-screen.scss) ========================== - Font size, family, and color adjusted on timeline and user input fields. - Day seperator secondary header colors adjusted. - Mark column width shortened, timestamp and duration columns widened. - Styles added for notes UI Client UI (index.yaws) ====================== - Markup changes needed for getViewModel chanes. - Expanded day seperator.
2011-05-07 21:31:30 -05:00
.timestamp, .timestamp-input, .duration { width: 14%; }
.mark, .mark-input, .notes { width: 70%; }
h4, h5, .entry div { display: inline-block; }
2011-02-13 11:38:50 -06:00
}
}
@include forSize(small) {
body { width: 100%; }
#timeline {
font-size: 1.3em;
padding-bottom: 0.5rem;
.timeline-desc { display: block; }
.timeline-desc, .timeline-desc-input {
text-align: center;
width: 100%; }
.timeline-id, .timeline-id-input { display: none; } }
#user { display: none; }
#entry-list {
.timestamp, .timestamp-input { width: 18%; }
.mark, .notes { width: 80%; }
.mark-input { width: 98% }
.duration { display: none; }
h4.mark, h5.mark, h4.timestamp, h5.timestamp,
div.mark, div.timestamp{ display: inline-block; }
}
}
@-webkit-keyframes pulse {
from { opacity: 1; }
to { opacity: 0.2; } }
@-moz-keyframes pulse {
from { opacity: 1; }
to { opacity: 0.2; } }
@-o-keyframes pulse {
from { opacity: 1; }
to { opacity: 0.2; } }
@keyframes pulse {
from { opacity: 1; }
to { opacity: 0.2; } }