new design, set beginning of tasks
- new design - added possibility to set a start date for tasks - new collection for current tasks - show calendar color in calendar list
|
@ -191,6 +191,16 @@ $this->create('task_due', '/tasks/{taskID}/due')
|
|||
}
|
||||
);
|
||||
|
||||
$this->create('task_start', '/tasks/{taskID}/start')
|
||||
->post()
|
||||
->action(
|
||||
function($params){
|
||||
session_write_close();
|
||||
$dispatcher = new Dispatcher($params);
|
||||
$dispatcher->dispatch('TasksController', 'setStartDate');
|
||||
}
|
||||
);
|
||||
|
||||
$this->create('task_reminder', '/tasks/{taskID}/reminder')
|
||||
->post()
|
||||
->action(
|
||||
|
|
146
css/style.css
|
@ -7,7 +7,7 @@
|
|||
#content {
|
||||
overflow: hidden;
|
||||
color: #423E3E;
|
||||
background: url("../img/bgLinenBig.jpg") repeat scroll 0 0 #000000;
|
||||
background: url("../img/bgBig.png") repeat scroll 0 0 #f3f3f3;
|
||||
}
|
||||
#content .icon {
|
||||
background-image: url("../img/sprites.svg");
|
||||
|
@ -26,7 +26,7 @@
|
|||
#content .icon.collection-today {
|
||||
-moz-box-sizing: border-box;
|
||||
background-position: -240px 0px;
|
||||
color: #AAAAAA;
|
||||
color: #909090;
|
||||
font-size: 7px;
|
||||
font-weight: bold;
|
||||
line-height: 9px;
|
||||
|
@ -43,6 +43,9 @@
|
|||
#content .icon.collection-all {
|
||||
background-position: -200px 0px;
|
||||
}
|
||||
#content .icon.collection-current {
|
||||
background-position: -240px -40px;
|
||||
}
|
||||
#content .icon.detail-add {
|
||||
background-position: -80px 0px;
|
||||
cursor: default;
|
||||
|
@ -173,15 +176,19 @@
|
|||
text-decoration: line-through;
|
||||
text-shadow: none;
|
||||
}
|
||||
#content li.task-item:last-child .task-body {
|
||||
border-width: 1px;
|
||||
}
|
||||
#content li.task-item .task-body {
|
||||
-moz-box-sizing: border-box;
|
||||
background: url("../img/bgTask.png") repeat-x scroll 0 0 #f8f8f8;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(0, 0, 0, 0.08);
|
||||
height: 34px;
|
||||
background: url("../img/bgTask.png") repeat-x scroll 0 0 #ffffff;
|
||||
height: 37px;
|
||||
list-style: none outside none;
|
||||
margin: 1px 1px 0;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
border-style: solid;
|
||||
border-width: 1px 1px 0;
|
||||
border-color: #CCCCCC;
|
||||
}
|
||||
#content li.task-item .task-body .icon.task-separator {
|
||||
cursor: default;
|
||||
|
@ -245,19 +252,19 @@
|
|||
color: #B3312D;
|
||||
}
|
||||
#task-lists {
|
||||
background: url("../img/bgTasks.png") repeat scroll 0 0 #eeeeee;
|
||||
background: url("../img/bgTasks.png") repeat scroll 0 0 #e3e3e3;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 250px;
|
||||
font-family: "Helvetica Neue", "Helvetica", "Arial", Sans-Serif;
|
||||
border-right: 1px solid #CFCFCF;
|
||||
font-size: 13px;
|
||||
}
|
||||
#task-lists div.header {
|
||||
height: 37px;
|
||||
border-bottom: 1px solid #AFAFAF;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
||||
background: -webkit-linear-gradient(top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%) repeat scroll 0 0 transparent;
|
||||
background: -moz-linear-gradient(center top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%) repeat scroll 0 0 transparent;
|
||||
background: -ms-linear-gradient(center top, rgba(255, 255, 255, 0.5) 0%, rgba(255, 255, 255, 0) 100%) repeat scroll 0 0 transparent;
|
||||
|
@ -364,7 +371,7 @@
|
|||
background: none repeat scroll 0 0 transparent;
|
||||
}
|
||||
#task-lists .count {
|
||||
color: #B0B0B0;
|
||||
color: #909090;
|
||||
float: right;
|
||||
}
|
||||
#task-lists .addlist:hover .title {
|
||||
|
@ -374,7 +381,7 @@
|
|||
opacity: 1;
|
||||
}
|
||||
#task-lists .addlist .title {
|
||||
color: #999999;
|
||||
color: #909090;
|
||||
}
|
||||
#task-lists .addlist,
|
||||
#task-lists li a {
|
||||
|
@ -391,6 +398,9 @@
|
|||
font-weight: bold;
|
||||
text-shadow: 0 1px 0 white;
|
||||
}
|
||||
#task-lists #collection_lists li a {
|
||||
padding-right: 8px;
|
||||
}
|
||||
#task-lists input.edit {
|
||||
border: 1px solid #3F84B3;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) inset;
|
||||
|
@ -428,6 +438,9 @@
|
|||
#task-lists li.active .icon.collection-all {
|
||||
background-position: -200px -20px;
|
||||
}
|
||||
#task-lists li.active .icon.collection-current {
|
||||
background-position: -240px -60px;
|
||||
}
|
||||
#task-lists li.active .icon.list-list {
|
||||
background-position: -40px -20px;
|
||||
}
|
||||
|
@ -497,32 +510,26 @@
|
|||
padding: 6px 17px 15px 17px;
|
||||
}
|
||||
#task-tasks.details-visible {
|
||||
right: 360px;
|
||||
right: 370px;
|
||||
}
|
||||
#task-tasks h2 {
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
color: #909090;
|
||||
font-size: 12px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 20px !important;
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
||||
text-shadow: 0 1px 0 #ffffff;
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#task-tasks #add-task {
|
||||
background: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.1) 100%) repeat scroll 0 0 transparent;
|
||||
background: -moz-linear-gradient(center top, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.1) 100%) repeat scroll 0 0 transparent;
|
||||
background: -ms-linear-gradient(center top, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.1) 100%) repeat scroll 0 0 transparent;
|
||||
background: -o-linear-gradient(center top, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.1) 100%) repeat scroll 0 0 transparent;
|
||||
background: linear-gradient(top, rgba(0, 0, 0, 0.3) 0%, rgba(0, 0, 0, 0.1) 100%) repeat scroll 0 0 transparent;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.4);
|
||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.4) inset, 0 1px 0 rgba(255, 255, 255, 0.4);
|
||||
margin: 12px 0;
|
||||
padding: 6px 12px;
|
||||
position: relative;
|
||||
border: 1px solid #CCCCCC;
|
||||
background: none repeat scroll 0 0 #EEEEEE;
|
||||
}
|
||||
#task-tasks #add-task.focus {
|
||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.4) inset, 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 5px rgba(255, 255, 255, 0.7);
|
||||
background-color: #FFFFFF;
|
||||
}
|
||||
#task-tasks #add-task.focus .icon.input-date {
|
||||
display: block;
|
||||
|
@ -540,8 +547,7 @@
|
|||
font-weight: bold;
|
||||
padding-right: 60px;
|
||||
width: 100%;
|
||||
color: #DBDBDB;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
|
||||
color: #505050;
|
||||
background: none repeat scroll 0 0 transparent !important;
|
||||
border: medium none !important;
|
||||
border-radius: 0 0 0 0 !important;
|
||||
|
@ -573,14 +579,14 @@
|
|||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks text {
|
||||
opacity: 0.7;
|
||||
}
|
||||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks text:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks .icon.toggle-completed-tasks {
|
||||
opacity: 0.5;
|
||||
background-position: -120px -20px;
|
||||
}
|
||||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks .icon.toggle-completed-tasks:hover {
|
||||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks:hover text {
|
||||
opacity: 1;
|
||||
}
|
||||
#task-tasks div.task-list.completed-hidden h2.heading-hiddentasks:hover .icon.toggle-completed-tasks {
|
||||
opacity: 0.7;
|
||||
}
|
||||
#task-tasks div.task-list.completed-hidden div.loadmore {
|
||||
|
@ -599,22 +605,20 @@
|
|||
right: -400px;
|
||||
bottom: 0;
|
||||
top: 0;
|
||||
padding: 0;
|
||||
padding: 18px 10px 10px 0;
|
||||
width: 360px;
|
||||
}
|
||||
#task-details.details-visible {
|
||||
right: 0;
|
||||
}
|
||||
#task-details > div {
|
||||
background: url("../img/bgTaskDetail.png") repeat scroll 0 0 #f8f8f8;
|
||||
border-radius: 5px 0px 0px 5px;
|
||||
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4);
|
||||
background: url("../img/bgTaskDetail.png") repeat scroll 0 0 #ffffff;
|
||||
border: 1px solid #CCCCCC;
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
#task-details div.footer {
|
||||
background: none repeat scroll 0 0 #f1f1f1;
|
||||
border-radius: 0 0 5px 5px;
|
||||
background: url("../img/bgTask.png") repeat scroll 0 0 #ffffff;
|
||||
border-top: 1px solid #D3D3D3;
|
||||
bottom: 0;
|
||||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset;
|
||||
|
@ -648,8 +652,6 @@
|
|||
background: -o-linear-gradient(center top, rgba(255, 255, 255, 0.1) 0%, rgba(0, 0, 0, 0.05) 100%) repeat scroll 0 0 transparent;
|
||||
background: linear-gradient(top, rgba(255, 255, 255, 0.1) 0%, rgba(0, 0, 0, 0.05) 100%) repeat scroll 0 0 transparent;
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.24);
|
||||
border-radius: 5px 5px 0 0;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
line-height: 24px;
|
||||
|
@ -715,18 +717,19 @@
|
|||
top: 55px;
|
||||
}
|
||||
#task-details .body .note {
|
||||
background: -webkit-linear-gradient(top, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f8f5db;
|
||||
background: -moz-linear-gradient(center top, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f8f5db;
|
||||
background: -ms-linear-gradient(center top, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f8f5db;
|
||||
background: -o-linear-gradient(center top, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f8f5db;
|
||||
background: linear-gradient(top, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f8f5db;
|
||||
background-color: #f8f5db;
|
||||
border: 1px solid #CFCFCF;
|
||||
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), 0 1px 0 #f8f5db inset;
|
||||
background: -webkit-linear-gradient(bottom, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f5f5f5;
|
||||
background: -moz-linear-gradient(center bottom, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f5f5f5;
|
||||
background: -ms-linear-gradient(center bottom, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f5f5f5;
|
||||
background: -o-linear-gradient(center bottom, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f5f5f5;
|
||||
background: linear-gradient(bottom, #dee2d0 1px, transparent 1px) repeat scroll 0 0 / 100% 26px #f5f5f5;
|
||||
background-color: #f5f5f5;
|
||||
border-width: 1px 1px 1px 1px;
|
||||
border-style: solid;
|
||||
border-color: #CFCFCF;
|
||||
font-size: 13px;
|
||||
line-height: 26px;
|
||||
margin: 20px;
|
||||
padding: 8px 15px;
|
||||
padding: 5px 15px;
|
||||
cursor: text;
|
||||
}
|
||||
#task-details .body .note .expandingArea {
|
||||
|
@ -852,8 +855,9 @@
|
|||
left: auto;
|
||||
right: 40px;
|
||||
}
|
||||
#task-details .body .section .icon.detail-date {
|
||||
background-position: -220px 0;
|
||||
#task-details .body .section .icon.detail-date,
|
||||
#task-details .body .section .icon.detail-start {
|
||||
background-position: -220px -80px;
|
||||
}
|
||||
#task-details .body .section .section-title {
|
||||
color: #9FA2A6;
|
||||
|
@ -866,10 +870,12 @@
|
|||
#task-details .body .section.date.editing .icon.detail-delete {
|
||||
display: block;
|
||||
}
|
||||
#task-details .body .section.date .icon.detail-date {
|
||||
#task-details .body .section.date .icon.detail-date,
|
||||
#task-details .body .section.date .icon.detail-start {
|
||||
background-position: -220px -40px;
|
||||
}
|
||||
#task-details .body .section.date .icon.detail-date.overdue {
|
||||
#task-details .body .section.date .icon.detail-date.overdue,
|
||||
#task-details .body .section.date .icon.detail-start.overdue {
|
||||
background-position: -220px -60px;
|
||||
}
|
||||
#task-details .body .section.date .icon.detail-reminder {
|
||||
|
@ -926,11 +932,16 @@ textarea {
|
|||
#content a:hover .icon.input-star {
|
||||
opacity: 1;
|
||||
}
|
||||
input.datepicker-input {
|
||||
width: 120px;
|
||||
}
|
||||
input.timepicker-input {
|
||||
width: 80px;
|
||||
}
|
||||
.ui-widget-content {
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
color: #423E3E;
|
||||
display: none;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
|
@ -940,7 +951,6 @@ textarea {
|
|||
border: none;
|
||||
}
|
||||
.ui-datepicker {
|
||||
padding: 8px;
|
||||
width: 185px;
|
||||
}
|
||||
.ui-datepicker .ui-widget-header {
|
||||
|
@ -1041,20 +1051,22 @@ textarea {
|
|||
.ui-datepicker table a.ui-state-default:hover {
|
||||
background: none repeat scroll 0 0 #EAEAEA;
|
||||
}
|
||||
.popover {
|
||||
div.ui-datepicker,
|
||||
div.ui-timepicker {
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.5);
|
||||
color: #423E3E;
|
||||
display: none;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
margin-top: 9px;
|
||||
padding: 8px;
|
||||
}
|
||||
.popover .arrow {
|
||||
div.ui-datepicker .arrow,
|
||||
div.ui-timepicker .arrow {
|
||||
border-color: transparent transparent #F9F9F9;
|
||||
left: 50%;
|
||||
margin-left: -12px;
|
||||
|
@ -1066,7 +1078,8 @@ textarea {
|
|||
width: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
.popover:after {
|
||||
div.ui-datepicker:after,
|
||||
div.ui-timepicker:after {
|
||||
border-bottom: 9px solid #F9F9F9;
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
|
@ -1076,7 +1089,8 @@ textarea {
|
|||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
.popover:before {
|
||||
div.ui-datepicker:before,
|
||||
div.ui-timepicker:before {
|
||||
border-bottom: 9px solid rgba(0, 0, 0, 0.2);
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
|
@ -1092,9 +1106,9 @@ li.ui-draggable-dragging {
|
|||
li.ui-draggable-dragging .duedate {
|
||||
display: none;
|
||||
}
|
||||
.ng-enter,
|
||||
.ng-leave,
|
||||
.ng-move {
|
||||
.task-item.ng-enter,
|
||||
.task-item.ng-leave,
|
||||
.task-item.ng-move {
|
||||
-webkit-transition: 200ms cubic-bezier(0.25, 0.25, 0.75, 0.75) all;
|
||||
-moz-transition: 200ms cubic-bezier(0.25, 0.25, 0.75, 0.75) all;
|
||||
-ms-transition: 200ms cubic-bezier(0.25, 0.25, 0.75, 0.75) all;
|
||||
|
@ -1103,15 +1117,15 @@ li.ui-draggable-dragging .duedate {
|
|||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
.ng-enter.ng-enter-active,
|
||||
.ng-move.ng-move-active,
|
||||
.ng-leave {
|
||||
.task-item.ng-enter.ng-enter-active,
|
||||
.task-item.ng-move.ng-move-active,
|
||||
.task-item.ng-leave {
|
||||
opacity: 1;
|
||||
height: 37px !important;
|
||||
}
|
||||
.ng-leave.ng-leave-active,
|
||||
.ng-move,
|
||||
.ng-enter {
|
||||
.task-item.ng-leave.ng-leave-active,
|
||||
.task-item.ng-move,
|
||||
.task-item.ng-enter {
|
||||
opacity: 0;
|
||||
height: 0px !important;
|
||||
}
|
||||
|
|
304
css/style.less
|
@ -1,17 +1,17 @@
|
|||
|
||||
.background-gradient(@color_top:rgba(255, 255, 255, 0.5), @color_bottom:rgba(255, 255, 255, 0.0)){
|
||||
background: -webkit-linear-gradient(top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
background: -moz-linear-gradient( center top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
background: -moz-linear-gradient( center top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
background: -ms-linear-gradient( center top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
background: -o-linear-gradient( center top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
background: linear-gradient( top, @color_top 0%, @color_bottom 100%) repeat scroll 0 0 transparent;
|
||||
}
|
||||
.background-stripe(@color_top:#DEE2D0, @color_bottom:#F8F5DB){
|
||||
background: -webkit-linear-gradient(top, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -moz-linear-gradient( center top, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -ms-linear-gradient( center top, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -o-linear-gradient( center top, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: linear-gradient( top, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
.background-stripe(@color_top:#DEE2D0, @color_bottom:#F5F5F5){
|
||||
background: -webkit-linear-gradient(bottom, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -moz-linear-gradient( center bottom, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -ms-linear-gradient( center bottom, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: -o-linear-gradient( center bottom, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background: linear-gradient( bottom, @color_top 1px, transparent 1px) repeat scroll 0 0 e('/') 100% 26px @color_bottom;
|
||||
background-color: @color_bottom;
|
||||
}
|
||||
.transition-custom(@type:right, @time:0.4s){
|
||||
|
@ -23,15 +23,15 @@
|
|||
}
|
||||
|
||||
*{
|
||||
-moz-user-select: -moz-none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
-moz-user-select: -moz-none;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
text-decoration: none;
|
||||
}
|
||||
#content{
|
||||
overflow:hidden;
|
||||
color: #423E3E;
|
||||
background:url("../img/bgLinenBig.jpg") repeat scroll 0 0 black;
|
||||
background:url("../img/bgBig.png") repeat scroll 0 0 #F3F3F3;
|
||||
.icon{
|
||||
background-image: url("../img/sprites.svg");
|
||||
height:20px;
|
||||
|
@ -48,7 +48,7 @@
|
|||
&.collection-today{
|
||||
-moz-box-sizing: border-box;
|
||||
background-position: -240px 0px;
|
||||
color: #AAAAAA;
|
||||
color: #909090;
|
||||
font-size: 7px;
|
||||
font-weight: bold;
|
||||
line-height: 9px;
|
||||
|
@ -65,6 +65,9 @@
|
|||
&.collection-all{
|
||||
background-position: -200px 0px;
|
||||
}
|
||||
&.collection-current{
|
||||
background-position: -240px -40px;
|
||||
}
|
||||
&.detail-add{
|
||||
background-position: -80px 0px;
|
||||
cursor: default;
|
||||
|
@ -172,10 +175,10 @@
|
|||
}
|
||||
}
|
||||
&.toggle-completed-tasks {
|
||||
background-position: -120px 0;
|
||||
height: 20px;
|
||||
opacity: 0.8;
|
||||
width: 20px;
|
||||
background-position: -120px 0;
|
||||
height: 20px;
|
||||
opacity: 0.8;
|
||||
width: 20px;
|
||||
&:hover{
|
||||
opacity:1;
|
||||
}
|
||||
|
@ -195,15 +198,21 @@
|
|||
text-shadow: none;
|
||||
}
|
||||
}
|
||||
&:last-child .task-body{
|
||||
border-width: 1px;
|
||||
}
|
||||
.task-body{
|
||||
-moz-box-sizing: border-box;
|
||||
background: url("../img/bgTask.png") repeat-x scroll 0 0 #F8F8F8;
|
||||
border-radius: 2px 2px 2px 2px;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(0, 0, 0, 0.08);
|
||||
height: 34px;
|
||||
background: url("../img/bgTask.png") repeat-x scroll 0 0 #FFFFFF;
|
||||
// border-radius: 2px 2px 2px 2px;
|
||||
// box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4), 0 0 0 1px rgba(0, 0, 0, 0.08);
|
||||
height: 37px;
|
||||
list-style: none outside none;
|
||||
margin: 1px 1px 0;
|
||||
margin: 0;
|
||||
position: relative;
|
||||
border-style: solid;
|
||||
border-width: 1px 1px 0;
|
||||
border-color: #CCCCCC;
|
||||
.icon{
|
||||
&.task-separator {
|
||||
cursor: default;
|
||||
|
@ -271,18 +280,19 @@
|
|||
}
|
||||
}
|
||||
#task-lists{
|
||||
background:url("../img/bgTasks.png") repeat scroll 0 0 #EEE;
|
||||
background:url("../img/bgTasks.png") repeat scroll 0 0 #E3E3E3;
|
||||
position:absolute;
|
||||
top:0;
|
||||
bottom:0;
|
||||
left:0;
|
||||
width:250px;
|
||||
font-family: "Helvetica Neue","Helvetica","Arial",Sans-Serif;
|
||||
border-right: 1px solid #CFCFCF;
|
||||
font-size:13px;
|
||||
div.header{
|
||||
height:37px;
|
||||
border-bottom: 1px solid #AFAFAF;
|
||||
box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
||||
// box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
|
||||
.background-gradient();
|
||||
a{
|
||||
position:absolute;
|
||||
|
@ -386,7 +396,7 @@
|
|||
background: none repeat scroll 0 0 transparent;
|
||||
}
|
||||
.count{
|
||||
color: #B0B0B0;
|
||||
color: #909090;
|
||||
float: right;
|
||||
}
|
||||
.addlist{
|
||||
|
@ -399,7 +409,7 @@
|
|||
}
|
||||
}
|
||||
.title{
|
||||
color:#999999;
|
||||
color:#909090;
|
||||
}
|
||||
}
|
||||
.addlist, li a{
|
||||
|
@ -416,6 +426,9 @@
|
|||
font-weight: bold;
|
||||
text-shadow: 0 1px 0 white;
|
||||
}
|
||||
#collection_lists li a{
|
||||
padding-right: 8px;
|
||||
}
|
||||
input.edit{
|
||||
border: 1px solid #3F84B3;
|
||||
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1) inset;
|
||||
|
@ -452,6 +465,9 @@
|
|||
&.collection-all{
|
||||
background-position: -200px -20px;
|
||||
}
|
||||
&.collection-current{
|
||||
background-position: -240px -60px;
|
||||
}
|
||||
&.list-list{
|
||||
background-position: -40px -20px;
|
||||
}
|
||||
|
@ -522,27 +538,30 @@
|
|||
overflow-x:hidden;
|
||||
padding: 6px 17px 15px 17px;
|
||||
&.details-visible{
|
||||
right:360px;
|
||||
right: 370px;
|
||||
}
|
||||
h2 {
|
||||
font-weight:bold;
|
||||
color: white;
|
||||
color: #909090;
|
||||
font-size: 12px;
|
||||
margin-bottom: 10px;
|
||||
margin-top: 20px !important;
|
||||
text-shadow: 0 1px 0 rgba(0, 0, 0, 0.2);
|
||||
text-shadow: 0 1px 0 rgba(255, 255, 255, 1);
|
||||
word-wrap: break-word;
|
||||
}
|
||||
#add-task{
|
||||
.background-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.1));
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
border-top: 1px solid rgba(0, 0, 0, 0.4);
|
||||
box-shadow: 0 0 4px rgba(0, 0, 0, 0.4) inset, 0 1px 0 rgba(255, 255, 255, 0.4);
|
||||
// .background-gradient(rgba(0, 0, 0, 0.3), rgba(0, 0, 0, 0.1));
|
||||
// border-radius: 4px 4px 4px 4px;
|
||||
// border-top: 1px solid rgba(0, 0, 0, 0.4);
|
||||
// box-shadow: 0 0 4px rgba(0, 0, 0, 0.4) inset, 0 1px 0 rgba(255, 255, 255, 0.4);
|
||||
margin: 12px 0;
|
||||
padding: 6px 12px;
|
||||
position: relative;
|
||||
border:1px solid #CCCCCC;
|
||||
background: none repeat scroll 0 0 #EEEEEE;
|
||||
&.focus{
|
||||
box-shadow: 0 0 4px rgba(0,0,0,0.4) inset, 0 1px 0 rgba(255,255,255,0.1), 0 0 5px rgba(255,255,255,0.7);
|
||||
// box-shadow: 0 0 4px rgba(0,0,0,0.4) inset, 0 1px 0 rgba(255,255,255,0.1), 0 0 5px rgba(255,255,255,0.7);
|
||||
background-color: #FFFFFF;
|
||||
|
||||
.icon.input-date {
|
||||
display:block;
|
||||
|
@ -561,8 +580,8 @@
|
|||
font-weight: bold;
|
||||
padding-right: 60px;
|
||||
width: 100%;
|
||||
color: #DBDBDB;
|
||||
text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
|
||||
color: #505050;
|
||||
// text-shadow: 0 1px 2px rgba(0, 0, 0, 0.45);
|
||||
background: none repeat scroll 0 0 transparent !important;
|
||||
border: medium none !important;
|
||||
border-radius: 0 0 0 0 !important;
|
||||
|
@ -599,15 +618,17 @@
|
|||
h2.heading-hiddentasks{
|
||||
text{
|
||||
opacity:0.7;
|
||||
&:hover{
|
||||
opacity:1;
|
||||
}
|
||||
}
|
||||
.icon.toggle-completed-tasks{
|
||||
opacity:0.5;
|
||||
background-position: -120px -20px;
|
||||
&:hover{
|
||||
opacity:0.7;
|
||||
}
|
||||
&:hover{
|
||||
text{
|
||||
opacity: 1;
|
||||
}
|
||||
.icon.toggle-completed-tasks{
|
||||
opacity: 0.7;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -626,21 +647,21 @@
|
|||
right:-400px;
|
||||
bottom:0;
|
||||
top:0;
|
||||
padding:0;
|
||||
padding: 18px 10px 10px 0;
|
||||
width:360px;
|
||||
&.details-visible{
|
||||
right:0;
|
||||
}
|
||||
&>div{
|
||||
background: url("../img/bgTaskDetail.png") repeat scroll 0 0 #F8F8F8;
|
||||
border-radius: 5px 0px 0px 5px;
|
||||
box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4);
|
||||
background: url("../img/bgTaskDetail.png") repeat scroll 0 0 #FFFFFF;
|
||||
border:1px solid #CCCCCC;
|
||||
// box-shadow: 0 1px 5px rgba(0, 0, 0, 0.4);
|
||||
height: 100%;
|
||||
position: relative;
|
||||
}
|
||||
div.footer{
|
||||
background: none repeat scroll 0 0 #f1f1f1;
|
||||
border-radius: 0 0 5px 5px;
|
||||
// background: none repeat scroll 0 0 #f1f1f1;
|
||||
background: url("../img/bgTask.png") repeat scroll 0 0 #FFFFFF;
|
||||
border-top: 1px solid #D3D3D3;
|
||||
bottom: 0;
|
||||
box-shadow: 0 1px 0 rgba(255, 255, 255, 0.5) inset;
|
||||
|
@ -678,8 +699,8 @@
|
|||
.title {
|
||||
.background-gradient(rgba(255, 255, 255, 0.1),rgba(0, 0, 0, 0.05));
|
||||
border-bottom: 1px solid rgba(0, 0, 0, 0.24);
|
||||
border-radius: 5px 5px 0 0;
|
||||
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
|
||||
// border-radius: 5px 5px 0 0;
|
||||
// box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12);
|
||||
font-size: 16px;
|
||||
font-weight: bold;
|
||||
line-height: 24px;
|
||||
|
@ -744,13 +765,15 @@
|
|||
right: 0;
|
||||
top: 55px;
|
||||
.note{
|
||||
.background-stripe(#DEE2D0, #F8F5DB);
|
||||
border: 1px solid #CFCFCF;
|
||||
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), 0 1px 0 #F8F5DB inset;
|
||||
.background-stripe(#DEE2D0, #F5F5F5);
|
||||
border-width: 1px 1px 1px 1px;
|
||||
border-style: solid;
|
||||
border-color: #CFCFCF;
|
||||
// box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1), 0 1px 0 #F8F5DB inset;
|
||||
font-size: 13px;
|
||||
line-height: 26px;
|
||||
margin: 20px;
|
||||
padding: 8px 15px;
|
||||
padding: 5px 15px;
|
||||
cursor:text;
|
||||
.expandingArea{
|
||||
position:relative;
|
||||
|
@ -865,8 +888,8 @@
|
|||
left: auto;
|
||||
right: 40px;
|
||||
}
|
||||
&.detail-date {
|
||||
background-position: -220px 0;
|
||||
&.detail-date, &.detail-start {
|
||||
background-position: -220px -80px;
|
||||
}
|
||||
}
|
||||
.section-title{
|
||||
|
@ -884,7 +907,7 @@
|
|||
}
|
||||
}
|
||||
.icon{
|
||||
&.detail-date{
|
||||
&.detail-date, &.detail-start{
|
||||
background-position: -220px -40px;
|
||||
&.overdue{
|
||||
background-position: -220px -60px;
|
||||
|
@ -933,7 +956,7 @@
|
|||
}
|
||||
|
||||
input, textarea {
|
||||
-moz-user-select: text;
|
||||
-moz-user-select: text;
|
||||
}
|
||||
#content a:hover .icon{
|
||||
&.detail-trash{
|
||||
|
@ -955,22 +978,28 @@ input, textarea {
|
|||
opacity:1;
|
||||
}
|
||||
}
|
||||
|
||||
input.datepicker-input{
|
||||
width: 120px;
|
||||
}
|
||||
input.timepicker-input{
|
||||
width: 80px;
|
||||
}
|
||||
.ui-widget-content{
|
||||
color: #423E3E;
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
color: #423E3E;
|
||||
display: none;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
z-index: 1000;
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
color: #423E3E;
|
||||
// display: none;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
z-index: 1000;
|
||||
}
|
||||
.ui-widget-content{
|
||||
border:none;
|
||||
}
|
||||
.ui-datepicker {
|
||||
width: 185px;
|
||||
.ui-widget-header{
|
||||
background: none repeat scroll 0 0 transparent;
|
||||
border: none;
|
||||
|
@ -1006,8 +1035,6 @@ input, textarea {
|
|||
height: 10px;
|
||||
width: 10px;
|
||||
}
|
||||
padding: 8px;
|
||||
width: 185px;
|
||||
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default {
|
||||
color: #423E3E;
|
||||
background: none repeat scroll 0 0 #F8F8F8;
|
||||
|
@ -1044,12 +1071,12 @@ input, textarea {
|
|||
}
|
||||
}
|
||||
&.selected a{
|
||||
background: -moz-linear-gradient(center top , #33A3EF, #168AD4) repeat scroll 0 0 transparent !important;
|
||||
border-radius: 3px 3px 3px 3px;
|
||||
color: white;
|
||||
opacity: 1;
|
||||
position: relative;
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
|
||||
background: -moz-linear-gradient(center top , #33A3EF, #168AD4) repeat scroll 0 0 transparent !important;
|
||||
border-radius: 3px 3px 3px 3px;
|
||||
color: white;
|
||||
opacity: 1;
|
||||
position: relative;
|
||||
text-shadow: 0 1px 1px rgba(0, 0, 0, 0.4);
|
||||
}
|
||||
}
|
||||
a.ui-state-default{
|
||||
|
@ -1069,52 +1096,51 @@ input, textarea {
|
|||
}
|
||||
}
|
||||
}
|
||||
.popover{
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.5);
|
||||
color: #423E3E;
|
||||
display: none;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
margin-top: 9px;
|
||||
div.ui-datepicker, div.ui-timepicker{
|
||||
background: none repeat scroll 0 0 #F9F9F9;
|
||||
border-radius: 4px 4px 4px 4px;
|
||||
box-shadow: 0 1px 6px rgba(0, 0, 0, 0.5);
|
||||
color: #423E3E;
|
||||
max-width: 304px;
|
||||
min-height: 15px;
|
||||
min-width: 150px;
|
||||
position: absolute;
|
||||
z-index: 1000;
|
||||
margin-top: 9px;
|
||||
padding:8px;
|
||||
.arrow {
|
||||
border-color: transparent transparent #F9F9F9;
|
||||
left: 50%;
|
||||
margin-left: -12px;
|
||||
top: -24px;
|
||||
border-style: solid;
|
||||
border-width: 12px;
|
||||
height: 0;
|
||||
position: absolute;
|
||||
width: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
&:after{
|
||||
border-bottom: 9px solid #F9F9F9;
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
content: "";
|
||||
display: inline-block;
|
||||
left: 46%;
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
&:before {
|
||||
border-bottom: 9px solid rgba(0, 0, 0, 0.2);
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
content: "";
|
||||
display: inline-block;
|
||||
left: 46%;
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
}
|
||||
.popover .arrow {
|
||||
border-color: transparent transparent #F9F9F9;
|
||||
left: 50%;
|
||||
margin-left: -12px;
|
||||
top: -24px;
|
||||
border-style: solid;
|
||||
border-width: 12px;
|
||||
height: 0;
|
||||
position: absolute;
|
||||
width: 0;
|
||||
z-index: 100;
|
||||
}
|
||||
.popover:after{
|
||||
border-bottom: 9px solid #F9F9F9;
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
content: "";
|
||||
display: inline-block;
|
||||
left: 46%;
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
.popover:before {
|
||||
border-bottom: 9px solid rgba(0, 0, 0, 0.2);
|
||||
border-left: 9px solid rgba(0, 0, 0, 0);
|
||||
border-right: 9px solid rgba(0, 0, 0, 0);
|
||||
content: "";
|
||||
display: inline-block;
|
||||
left: 46%;
|
||||
position: absolute;
|
||||
top: -9px;
|
||||
}
|
||||
|
||||
|
||||
li.ui-draggable-dragging{
|
||||
width:300px;
|
||||
|
@ -1123,28 +1149,28 @@ li.ui-draggable-dragging{
|
|||
}
|
||||
}
|
||||
|
||||
.ng-enter,
|
||||
.ng-leave,
|
||||
.ng-move {
|
||||
-webkit-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-moz-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-ms-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-o-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
position: relative;
|
||||
display: block;
|
||||
.task-item.ng-enter,
|
||||
.task-item.ng-leave,
|
||||
.task-item.ng-move {
|
||||
-webkit-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-moz-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-ms-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
-o-transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
transition: 200ms cubic-bezier(0.250, 0.250, 0.750, 0.750) all;
|
||||
position: relative;
|
||||
display: block;
|
||||
}
|
||||
|
||||
.ng-enter.ng-enter-active,
|
||||
.ng-move.ng-move-active,
|
||||
.ng-leave {
|
||||
opacity: 1;
|
||||
height: 37px !important;
|
||||
.task-item.ng-enter.ng-enter-active,
|
||||
.task-item.ng-move.ng-move-active,
|
||||
.task-item.ng-leave {
|
||||
opacity: 1;
|
||||
height: 37px !important;
|
||||
}
|
||||
|
||||
.ng-leave.ng-leave-active,
|
||||
.ng-move,
|
||||
.ng-enter {
|
||||
opacity: 0;
|
||||
height: 0px !important;
|
||||
.task-item.ng-leave.ng-leave-active,
|
||||
.task-item.ng-move,
|
||||
.task-item.ng-enter {
|
||||
opacity: 0;
|
||||
height: 0px !important;
|
||||
}
|
BIN
img/bgBig.png
Normal file
After Width: | Height: | Size: 61 KiB |
BIN
img/bgTask.png
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 3.5 KiB |
Before Width: | Height: | Size: 5 KiB After Width: | Height: | Size: 2.9 KiB |
BIN
img/bgTasks.png
Before Width: | Height: | Size: 4 KiB After Width: | Height: | Size: 5.3 KiB |
166
img/sprites.svg
|
@ -15,9 +15,9 @@
|
|||
"/>
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" points="29.998,3.559 25.626,17.024
|
||||
37.078,8.701 22.92,8.701 34.374,17.02 "/>
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="#B0B0B0" points="29.999,2.551 25.627,16.015 37.078,7.692 22.92,7.692 34.374,16.014
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="#8F8F8F" points="29.999,2.551 25.627,16.015 37.078,7.692 22.92,7.692 34.374,16.014
|
||||
"/>
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="none" stroke="#B0B0B0" stroke-miterlimit="10" points="29.999,2.551 25.627,16.015
|
||||
<polygon clip-path="url(#SVGID_2_)" fill="none" stroke="#8F8F8F" stroke-miterlimit="10" points="29.999,2.551 25.627,16.015
|
||||
37.078,7.692 22.92,7.692 34.374,16.014 "/>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -54,11 +54,11 @@
|
|||
<clipPath id="SVGID_8_">
|
||||
<use xlink:href="#SVGID_7_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<path clip-path="url(#SVGID_8_)" fill="none" stroke="#B0B0B0" stroke-width="2.5" stroke-miterlimit="10" d="M15.619,14.348
|
||||
<path clip-path="url(#SVGID_8_)" fill="none" stroke="#8F9090" stroke-width="2.5" stroke-miterlimit="10" d="M15.619,14.348
|
||||
c-1.674,2.223-4.579,3.34-7.441,2.602c-3.79-0.981-6.066-4.846-5.085-8.637c0.979-3.789,4.845-6.066,8.633-5.086
|
||||
c1.856,0.479,3.35,1.651,4.275,3.168"/>
|
||||
<polygon clip-path="url(#SVGID_8_)" fill="#B0B0B0" points="17.434,3.447 12.623,6.281 17.482,9.028 "/>
|
||||
<polygon clip-path="url(#SVGID_8_)" fill="none" stroke="#B0B0B0" stroke-miterlimit="10" points="17.434,3.447 12.623,6.281
|
||||
<polygon clip-path="url(#SVGID_8_)" fill="#8F9090" points="17.434,3.447 12.623,6.281 17.482,9.028 "/>
|
||||
<polygon clip-path="url(#SVGID_8_)" fill="none" stroke="#8F9090" stroke-miterlimit="10" points="17.434,3.447 12.623,6.281
|
||||
17.482,9.028 "/>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -80,15 +80,15 @@
|
|||
<rect x="43.651" y="14.04" clip-path="url(#SVGID_10_)" fill="#FFFFFF" width="12.7" height="1.625"/>
|
||||
|
||||
<rect x="43.651" y="14.04" clip-path="url(#SVGID_10_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" width="12.7" height="1.625"/>
|
||||
<rect x="43.642" y="5.145" clip-path="url(#SVGID_10_)" fill="#B0B0B0" width="12.7" height="1.625"/>
|
||||
<rect x="43.642" y="5.145" clip-path="url(#SVGID_10_)" fill="#8F8F8F" width="12.7" height="1.625"/>
|
||||
|
||||
<rect x="43.642" y="5.145" clip-path="url(#SVGID_10_)" fill="none" stroke="#B0B0B0" stroke-miterlimit="10" width="12.7" height="1.625"/>
|
||||
<rect x="43.642" y="9.186" clip-path="url(#SVGID_10_)" fill="#B0B0B0" width="12.7" height="1.625"/>
|
||||
<rect x="43.642" y="5.145" clip-path="url(#SVGID_10_)" fill="none" stroke="#8F8F8F" stroke-miterlimit="10" width="12.7" height="1.625"/>
|
||||
<rect x="43.642" y="9.186" clip-path="url(#SVGID_10_)" fill="#8F8F8F" width="12.7" height="1.625"/>
|
||||
|
||||
<rect x="43.642" y="9.186" clip-path="url(#SVGID_10_)" fill="none" stroke="#B0B0B0" stroke-miterlimit="10" width="12.7" height="1.625"/>
|
||||
<rect x="43.658" y="13.229" clip-path="url(#SVGID_10_)" fill="#B0B0B0" width="12.701" height="1.625"/>
|
||||
<rect x="43.642" y="9.186" clip-path="url(#SVGID_10_)" fill="none" stroke="#8F8F8F" stroke-miterlimit="10" width="12.7" height="1.625"/>
|
||||
<rect x="43.658" y="13.229" clip-path="url(#SVGID_10_)" fill="#8F8F8F" width="12.701" height="1.625"/>
|
||||
|
||||
<rect x="43.658" y="13.229" clip-path="url(#SVGID_10_)" fill="none" stroke="#B0B0B0" stroke-miterlimit="10" width="12.701" height="1.625"/>
|
||||
<rect x="43.658" y="13.229" clip-path="url(#SVGID_10_)" fill="none" stroke="#8F8F8F" stroke-miterlimit="10" width="12.701" height="1.625"/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
|
@ -281,11 +281,11 @@
|
|||
c-2.3,1.496-6.603,6.302-8.249,7.968c-0.304,0.308-0.995,1.032-1.151,1.032c-0.174,0-0.762-0.272-1.099-0.47
|
||||
c-1.282-0.752-2.51-1.486-3.281-1.763c-1.641-0.59-1.177-0.029-1.083,0.158c0.293,0.586,4.255,3.762,5.567,5.262
|
||||
C110.021,16.164,110.506,16.763,110.506,16.763z"/>
|
||||
<path clip-path="url(#SVGID_36_)" fill="#BAB9B8" d="M110.506,15.344c0,0,0.146-0.402,0.316-0.769
|
||||
<path clip-path="url(#SVGID_36_)" fill="#8F8F8F" d="M110.506,15.344c0,0,0.146-0.402,0.316-0.769
|
||||
c2.76-5.944,6.306-9.858,7.878-11.635c1.274-1.439,0.776-1.213,0.211-0.846c-2.3,1.496-6.603,6.302-8.249,7.968
|
||||
c-0.304,0.308-0.995,1.032-1.151,1.032c-0.174,0-0.762-0.272-1.099-0.469c-1.282-0.752-2.51-1.487-3.281-1.764
|
||||
c-1.641-0.59-1.177-0.029-1.083,0.158c0.293,0.586,4.255,3.762,5.567,5.262C110.021,14.745,110.506,15.344,110.506,15.344"/>
|
||||
<path clip-path="url(#SVGID_36_)" fill="none" stroke="#BAB9B8" stroke-width="0.75" stroke-miterlimit="10" d="M110.506,15.344
|
||||
<path clip-path="url(#SVGID_36_)" fill="none" stroke="#8F8F8F" stroke-width="0.75" stroke-miterlimit="10" d="M110.506,15.344
|
||||
c0,0,0.146-0.402,0.316-0.769c2.76-5.944,6.306-9.858,7.878-11.635c1.274-1.439,0.776-1.213,0.211-0.846
|
||||
c-2.3,1.496-6.603,6.302-8.249,7.968c-0.304,0.308-0.995,1.032-1.151,1.032c-0.174,0-0.762-0.272-1.099-0.469
|
||||
c-1.282-0.752-2.51-1.487-3.281-1.764c-1.641-0.59-1.177-0.029-1.083,0.158c0.293,0.586,4.255,3.762,5.567,5.262
|
||||
|
@ -668,7 +668,7 @@
|
|||
|
||||
<circle clip-path="url(#SVGID_94_)" fill="none" stroke="#FFFFFF" stroke-width="2.5" stroke-miterlimit="10" cx="210" cy="10.833" r="7.088"/>
|
||||
|
||||
<circle clip-path="url(#SVGID_94_)" fill="none" stroke="#B0B0B0" stroke-width="2.5" stroke-miterlimit="10" cx="210" cy="10" r="7.088"/>
|
||||
<circle clip-path="url(#SVGID_94_)" fill="none" stroke="#8F9090" stroke-width="2.5" stroke-miterlimit="10" cx="210" cy="10" r="7.088"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -710,9 +710,9 @@
|
|||
<use xlink:href="#SVGID_101_" overflow="visible"/>
|
||||
</clipPath>
|
||||
|
||||
<circle clip-path="url(#SVGID_102_)" fill="none" stroke="#B0B0B0" stroke-width="2" stroke-miterlimit="10" cx="87.724" cy="26.724" r="3.898"/>
|
||||
<circle clip-path="url(#SVGID_102_)" fill="none" stroke="#8F9090" stroke-width="2" stroke-miterlimit="10" cx="87.724" cy="26.724" r="3.898"/>
|
||||
|
||||
<line clip-path="url(#SVGID_102_)" fill="none" stroke="#B0B0B0" stroke-width="2" stroke-miterlimit="10" x1="90.481" y1="29.481" x2="96.956" y2="35.956"/>
|
||||
<line clip-path="url(#SVGID_102_)" fill="none" stroke="#8F9090" stroke-width="2" stroke-miterlimit="10" x1="90.481" y1="29.481" x2="96.956" y2="35.956"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -739,14 +739,14 @@
|
|||
<rect x="222.875" y="6.218" clip-path="url(#SVGID_106_)" fill="#FFFFFF" width="14.25" height="2.813"/>
|
||||
<rect x="225.094" y="3.531" clip-path="url(#SVGID_106_)" fill="#FFFFFF" width="1.11" height="2.438"/>
|
||||
<rect x="233.796" y="3.531" clip-path="url(#SVGID_106_)" fill="#FFFFFF" width="1.108" height="2.438"/>
|
||||
<path clip-path="url(#SVGID_106_)" fill="none" stroke="#B0B0B0" stroke-width="2" stroke-miterlimit="8" d="M222.875,15.737
|
||||
<path clip-path="url(#SVGID_106_)" fill="none" stroke="#8F9090" stroke-width="2" stroke-miterlimit="8" d="M222.875,15.737
|
||||
c0,0.11,0.089,0.2,0.2,0.2h13.85c0.11,0,0.2-0.09,0.2-0.2V5.325c0-0.111-0.09-0.2-0.2-0.2h-13.85c-0.111,0-0.2,0.089-0.2,0.2
|
||||
V15.737z"/>
|
||||
<rect x="222.875" y="5.124" clip-path="url(#SVGID_106_)" fill="#B0B0B0" width="14.25" height="2.813"/>
|
||||
<rect x="225.094" y="2.437" clip-path="url(#SVGID_106_)" fill="#B0B0B0" width="1.11" height="2.438"/>
|
||||
<rect x="233.796" y="2.437" clip-path="url(#SVGID_106_)" fill="#B0B0B0" width="1.108" height="2.438"/>
|
||||
<rect x="224.555" y="9.344" clip-path="url(#SVGID_106_)" fill="#B0B0B0" width="10.891" height="1.406"/>
|
||||
<rect x="224.555" y="11.781" clip-path="url(#SVGID_106_)" fill="#B0B0B0" width="10.891" height="1.406"/>
|
||||
<rect x="222.875" y="5.124" clip-path="url(#SVGID_106_)" fill="#8F9090" width="14.25" height="2.813"/>
|
||||
<rect x="225.094" y="2.437" clip-path="url(#SVGID_106_)" fill="#8F9090" width="1.11" height="2.438"/>
|
||||
<rect x="233.796" y="2.437" clip-path="url(#SVGID_106_)" fill="#8F9090" width="1.108" height="2.438"/>
|
||||
<rect x="224.555" y="9.344" clip-path="url(#SVGID_106_)" fill="#8F9090" width="10.891" height="1.406"/>
|
||||
<rect x="224.555" y="11.781" clip-path="url(#SVGID_106_)" fill="#8F9090" width="10.891" height="1.406"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -771,12 +771,12 @@
|
|||
<rect x="242.875" y="6.218" clip-path="url(#SVGID_110_)" fill="#FFFFFF" width="14.25" height="2.813"/>
|
||||
<rect x="245.094" y="3.531" clip-path="url(#SVGID_110_)" fill="#FFFFFF" width="1.11" height="2.438"/>
|
||||
<rect x="253.796" y="3.531" clip-path="url(#SVGID_110_)" fill="#FFFFFF" width="1.108" height="2.438"/>
|
||||
<path clip-path="url(#SVGID_110_)" fill="none" stroke="#B0B0B0" stroke-width="2" stroke-miterlimit="8" d="M242.875,15.737
|
||||
<path clip-path="url(#SVGID_110_)" fill="none" stroke="#8F9090" stroke-width="2" stroke-miterlimit="8" d="M242.875,15.737
|
||||
c0,0.11,0.089,0.2,0.2,0.2h13.85c0.11,0,0.2-0.09,0.2-0.2V5.325c0-0.111-0.09-0.2-0.2-0.2h-13.85c-0.111,0-0.2,0.089-0.2,0.2
|
||||
V15.737z"/>
|
||||
<rect x="242.875" y="5.124" clip-path="url(#SVGID_110_)" fill="#B0B0B0" width="14.25" height="2.813"/>
|
||||
<rect x="245.094" y="2.437" clip-path="url(#SVGID_110_)" fill="#B0B0B0" width="1.11" height="2.438"/>
|
||||
<rect x="253.796" y="2.437" clip-path="url(#SVGID_110_)" fill="#B0B0B0" width="1.108" height="2.438"/>
|
||||
<rect x="242.875" y="5.124" clip-path="url(#SVGID_110_)" fill="#8F9090" width="14.25" height="2.813"/>
|
||||
<rect x="245.094" y="2.437" clip-path="url(#SVGID_110_)" fill="#8F9090" width="1.11" height="2.438"/>
|
||||
<rect x="253.796" y="2.437" clip-path="url(#SVGID_110_)" fill="#8F9090" width="1.108" height="2.438"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -909,26 +909,26 @@
|
|||
<clipPath id="SVGID_130_">
|
||||
<use xlink:href="#SVGID_129_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<path clip-path="url(#SVGID_130_)" fill="#727272" d="M137.891,10.875c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
<path clip-path="url(#SVGID_130_)" fill="#FFFFFF" d="M137.891,10.875c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
s3.532-5.078,7.89-5.078S137.891,9.687,137.891,10.875 M134.224,10.875c0-2.333-1.891-4.224-4.223-4.224
|
||||
c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224C132.333,15.099,134.224,13.207,134.224,10.875"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="none" stroke="#727272" stroke-miterlimit="10" d="M137.891,10.875
|
||||
<path clip-path="url(#SVGID_130_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" d="M137.891,10.875
|
||||
c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078s3.532-5.078,7.89-5.078S137.891,9.687,137.891,10.875z M134.224,10.875
|
||||
c0-2.333-1.891-4.224-4.223-4.224c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224
|
||||
C132.333,15.099,134.224,13.207,134.224,10.875z"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="#727272" d="M131.531,10.875c0,0.846-0.686,1.531-1.531,1.531
|
||||
<path clip-path="url(#SVGID_130_)" fill="#FFFFFF" d="M131.531,10.875c0,0.846-0.686,1.531-1.531,1.531
|
||||
c-0.846,0-1.532-0.685-1.532-1.531s0.686-1.531,1.532-1.531C130.845,9.344,131.531,10.029,131.531,10.875"/>
|
||||
<circle clip-path="url(#SVGID_130_)" fill="none" stroke="#727272" stroke-miterlimit="10" cx="130" cy="10.875" r="1.531"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="#FFFFFF" d="M137.891,10c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
<circle clip-path="url(#SVGID_130_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" cx="130" cy="10.875" r="1.531"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="#727272" d="M137.891,10c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
s3.532-5.078,7.89-5.078S137.891,8.812,137.891,10 M134.224,10c0-2.333-1.891-4.224-4.223-4.224
|
||||
c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224C132.333,14.224,134.224,12.332,134.224,10"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" d="M137.891,10
|
||||
<path clip-path="url(#SVGID_130_)" fill="none" stroke="#727272" stroke-miterlimit="10" d="M137.891,10
|
||||
c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078s3.532-5.078,7.89-5.078S137.891,8.812,137.891,10z M134.224,10
|
||||
c0-2.333-1.891-4.224-4.223-4.224c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224
|
||||
C132.333,14.224,134.224,12.332,134.224,10z"/>
|
||||
<path clip-path="url(#SVGID_130_)" fill="#FFFFFF" d="M131.531,10c0,0.846-0.686,1.531-1.531,1.531
|
||||
<path clip-path="url(#SVGID_130_)" fill="#727272" d="M131.531,10c0,0.846-0.686,1.531-1.531,1.531
|
||||
c-0.846,0-1.532-0.685-1.532-1.531s0.686-1.531,1.532-1.531C130.845,8.469,131.531,9.154,131.531,10"/>
|
||||
<circle clip-path="url(#SVGID_130_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" cx="130" cy="10" r="1.531"/>
|
||||
<circle clip-path="url(#SVGID_130_)" fill="none" stroke="#727272" stroke-miterlimit="10" cx="130" cy="10" r="1.531"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -947,30 +947,30 @@
|
|||
<clipPath id="SVGID_134_">
|
||||
<use xlink:href="#SVGID_133_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<path clip-path="url(#SVGID_134_)" fill="#727272" d="M137.891,30.875c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
<path clip-path="url(#SVGID_134_)" fill="#FFFFFF" d="M137.891,30.875c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
s3.532-5.078,7.89-5.078S137.891,29.687,137.891,30.875 M134.224,30.875c0-2.333-1.891-4.224-4.223-4.224
|
||||
c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224C132.333,35.099,134.224,33.207,134.224,30.875"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-miterlimit="10" d="M137.891,30.875
|
||||
<path clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" d="M137.891,30.875
|
||||
c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078s3.532-5.078,7.89-5.078S137.891,29.687,137.891,30.875z M134.224,30.875
|
||||
c0-2.333-1.891-4.224-4.223-4.224c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224
|
||||
C132.333,35.099,134.224,33.207,134.224,30.875z"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="#727272" d="M131.531,30.875c0,0.846-0.686,1.531-1.531,1.531
|
||||
<path clip-path="url(#SVGID_134_)" fill="#FFFFFF" d="M131.531,30.875c0,0.846-0.686,1.531-1.531,1.531
|
||||
c-0.846,0-1.532-0.685-1.532-1.531s0.686-1.531,1.532-1.531C130.845,29.344,131.531,30.029,131.531,30.875"/>
|
||||
<circle clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-miterlimit="10" cx="130" cy="30.875" r="1.531"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="#FFFFFF" d="M137.891,30c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
<circle clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" cx="130" cy="30.875" r="1.531"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="#727272" d="M137.891,30c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078
|
||||
s3.532-5.078,7.89-5.078S137.891,28.812,137.891,30 M134.224,30c0-2.333-1.891-4.224-4.223-4.224
|
||||
c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224C132.333,34.224,134.224,32.332,134.224,30"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" d="M137.891,30
|
||||
<path clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-miterlimit="10" d="M137.891,30
|
||||
c0,1.188-3.533,5.078-7.891,5.078s-7.89-3.89-7.89-5.078s3.532-5.078,7.89-5.078S137.891,28.812,137.891,30z M134.224,30
|
||||
c0-2.333-1.891-4.224-4.223-4.224c-2.333,0-4.223,1.891-4.223,4.224c0,2.332,1.89,4.224,4.223,4.224
|
||||
C132.333,34.224,134.224,32.332,134.224,30z"/>
|
||||
<path clip-path="url(#SVGID_134_)" fill="#FFFFFF" d="M131.531,30c0,0.846-0.686,1.531-1.531,1.531
|
||||
<path clip-path="url(#SVGID_134_)" fill="#727272" d="M131.531,30c0,0.846-0.686,1.531-1.531,1.531
|
||||
c-0.846,0-1.532-0.685-1.532-1.531s0.686-1.531,1.532-1.531C130.845,28.469,131.531,29.154,131.531,30"/>
|
||||
<circle clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-miterlimit="10" cx="130" cy="30" r="1.531"/>
|
||||
<circle clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-miterlimit="10" cx="130" cy="30" r="1.531"/>
|
||||
|
||||
<line clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-width="1.5" stroke-miterlimit="10" x1="122.254" y1="36.828" x2="138.035" y2="25.797"/>
|
||||
<line clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-width="1.5" stroke-miterlimit="10" x1="122.254" y1="36.828" x2="138.035" y2="25.797"/>
|
||||
|
||||
<line clip-path="url(#SVGID_134_)" fill="none" stroke="#FFFFFF" stroke-width="1.5" stroke-miterlimit="10" x1="122.109" y1="35.953" x2="137.891" y2="24.922"/>
|
||||
<line clip-path="url(#SVGID_134_)" fill="none" stroke="#727272" stroke-width="1.5" stroke-miterlimit="10" x1="122.109" y1="35.953" x2="137.891" y2="24.922"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
|
@ -1438,4 +1438,82 @@
|
|||
32.196,63.275 "/>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_197_" x="240" y="40" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_198_">
|
||||
<use xlink:href="#SVGID_197_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_198_)">
|
||||
<defs>
|
||||
<rect id="SVGID_199_" x="240" y="40" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_200_">
|
||||
<use xlink:href="#SVGID_199_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polyline clip-path="url(#SVGID_200_)" fill="none" stroke="#FFFFFF" stroke-width="2.5" stroke-miterlimit="10" points="
|
||||
242,50.927 246.624,50.927 248.313,45.927 251.688,55.927 253.377,50.928 258,50.928 "/>
|
||||
<polyline clip-path="url(#SVGID_200_)" fill="none" stroke="#8F9090" stroke-width="2.5" stroke-miterlimit="10" points="242,50
|
||||
246.624,50 248.313,45 251.688,55 253.377,50 258,50 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_201_" x="240" y="60" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_202_">
|
||||
<use xlink:href="#SVGID_201_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<g clip-path="url(#SVGID_202_)">
|
||||
<defs>
|
||||
<rect id="SVGID_203_" x="240" y="60" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_204_">
|
||||
<use xlink:href="#SVGID_203_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polyline clip-path="url(#SVGID_204_)" fill="none" stroke="#878787" stroke-width="2.5" stroke-miterlimit="10" points="
|
||||
242,70.927 246.624,70.927 248.313,65.927 251.688,75.927 253.377,70.928 258,70.928 "/>
|
||||
<polyline clip-path="url(#SVGID_204_)" fill="none" stroke="#FFFFFF" stroke-width="2.5" stroke-miterlimit="10" points="242,70
|
||||
246.624,70 248.313,65 251.688,75 253.377,70 258,70 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<rect id="SVGID_205_" x="220" y="80" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_206_">
|
||||
<use xlink:href="#SVGID_205_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<rect x="224.555" y="90.047" clip-path="url(#SVGID_206_)" fill="#FFFFFF" width="10.892" height="1.406"/>
|
||||
<rect x="224.555" y="92.485" clip-path="url(#SVGID_206_)" fill="#FFFFFF" width="10.892" height="1.406"/>
|
||||
<g clip-path="url(#SVGID_206_)">
|
||||
<defs>
|
||||
<rect id="SVGID_207_" x="220" y="80" width="20" height="20"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_208_">
|
||||
<use xlink:href="#SVGID_207_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<path clip-path="url(#SVGID_208_)" fill="none" stroke="#FFFFFF" stroke-width="2" stroke-miterlimit="8" d="M222.875,96.831
|
||||
c0,0.11,0.09,0.2,0.201,0.2h13.85c0.109,0,0.199-0.09,0.199-0.2V86.419c0-0.111-0.09-0.2-0.199-0.2h-13.85
|
||||
c-0.111,0-0.201,0.089-0.201,0.2V96.831z"/>
|
||||
<rect x="222.875" y="86.218" clip-path="url(#SVGID_208_)" fill="#FFFFFF" width="14.25" height="2.813"/>
|
||||
<rect x="225.095" y="83.531" clip-path="url(#SVGID_208_)" fill="#FFFFFF" width="1.11" height="2.438"/>
|
||||
<rect x="233.797" y="83.531" clip-path="url(#SVGID_208_)" fill="#FFFFFF" width="1.108" height="2.438"/>
|
||||
<path clip-path="url(#SVGID_208_)" fill="none" stroke="#B0B0B0" stroke-width="2" stroke-miterlimit="8" d="M222.875,95.737
|
||||
c0,0.11,0.09,0.2,0.201,0.2h13.85c0.109,0,0.199-0.09,0.199-0.2V85.325c0-0.111-0.09-0.2-0.199-0.2h-13.85
|
||||
c-0.111,0-0.201,0.089-0.201,0.2V95.737z"/>
|
||||
<rect x="222.875" y="85.124" clip-path="url(#SVGID_208_)" fill="#B0B0B0" width="14.25" height="2.813"/>
|
||||
<rect x="225.095" y="82.437" clip-path="url(#SVGID_208_)" fill="#B0B0B0" width="1.11" height="2.438"/>
|
||||
<rect x="233.797" y="82.437" clip-path="url(#SVGID_208_)" fill="#B0B0B0" width="1.108" height="2.438"/>
|
||||
<rect x="224.555" y="89.344" clip-path="url(#SVGID_208_)" fill="#B0B0B0" width="10.892" height="1.406"/>
|
||||
<rect x="224.555" y="91.781" clip-path="url(#SVGID_208_)" fill="#B0B0B0" width="10.892" height="1.406"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
||||
|
|
Before Width: | Height: | Size: 72 KiB After Width: | Height: | Size: 75 KiB |
|
@ -78,12 +78,26 @@ angular.module('Tasks').run ['Config', '$timeout',
|
|||
|
||||
moment.lang('details', {
|
||||
calendar: {
|
||||
lastDay : '['+t('tasks_enhanced','Due Yesterday')+']'
|
||||
sameDay : '['+t('tasks_enhanced','Due Today')+']'
|
||||
nextDay : '['+t('tasks_enhanced','Due Tomorrow')+']'
|
||||
lastWeek : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY'
|
||||
nextWeek : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY'
|
||||
sameElse : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY'
|
||||
lastDay : '['+t('tasks_enhanced','Due Yesterday')+'], HH:mm'
|
||||
sameDay : '['+t('tasks_enhanced','Due Today')+'], HH:mm'
|
||||
nextDay : '['+t('tasks_enhanced','Due Tomorrow')+'], HH:mm'
|
||||
lastWeek : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY, HH:mm'
|
||||
nextWeek : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY, HH:mm'
|
||||
sameElse : '['+t('tasks_enhanced', 'Due on')+'] MMM DD, YYYY, HH:mm'
|
||||
}
|
||||
})
|
||||
moment.lang('start', {
|
||||
calendar: {
|
||||
lastDay : '['+t('tasks_enhanced','Started Yesterday')+'], HH:mm'
|
||||
sameDay : '['+t('tasks_enhanced','Starts Today')+'], HH:mm'
|
||||
nextDay : '['+t('tasks_enhanced','Starts Tomorrow')+'], HH:mm'
|
||||
lastWeek : '['+t('tasks_enhanced', 'Started on')+'] MMM DD, YYYY, HH:mm'
|
||||
nextWeek : '['+t('tasks_enhanced', 'Starts on')+'] MMM DD, YYYY, HH:mm'
|
||||
sameElse : () ->
|
||||
if this.diff(moment()) > 0
|
||||
'['+t('tasks_enhanced', 'Starts on')+'] MMM DD, YYYY, HH:mm'
|
||||
else
|
||||
'['+t('tasks_enhanced', 'Started on')+'] MMM DD, YYYY, HH:mm'
|
||||
}
|
||||
})
|
||||
moment.lang('tasks', {
|
||||
|
|
|
@ -52,6 +52,7 @@ $routeParams, Loading) ->
|
|||
_$location.path('/lists/'+_$scope.route.listID)
|
||||
|
||||
_$scope.status.addingList = false
|
||||
_$scope.status.focusTaskInput = false
|
||||
_$scope.status.newListName = ""
|
||||
|
||||
@_$scope.isLoading = () ->
|
||||
|
|
|
@ -66,6 +66,14 @@ $timeout, $routeParams) ->
|
|||
_$location.path('/lists/'+_$scope.route.listID +
|
||||
'/tasks/' + _$scope.route.taskID + '/edit/duedate')
|
||||
|
||||
@_$scope.editStart = () ->
|
||||
if _$scope.status.searchActive
|
||||
_$location.path('/search/'+_$scope.route.searchString +
|
||||
'/tasks/' + _$scope.route.taskID + '/edit/startdate')
|
||||
else
|
||||
_$location.path('/lists/'+_$scope.route.listID +
|
||||
'/tasks/' + _$scope.route.taskID + '/edit/startdate')
|
||||
|
||||
@_$scope.editReminder = () ->
|
||||
if _$scope.status.searchActive
|
||||
_$location.path('/search/'+_$scope.route.searchString +
|
||||
|
@ -98,13 +106,17 @@ $timeout, $routeParams) ->
|
|||
_$scope.endEdit()
|
||||
|
||||
@_$scope.deleteDueDate = () ->
|
||||
_tasksbusinesslayer.setDueDate(_$scope.route.taskID, undefined)
|
||||
_tasksbusinesslayer.deleteDueDate(_$scope.route.taskID, undefined)
|
||||
_$scope.endEdit()
|
||||
|
||||
@_$scope.deleteReminder = () ->
|
||||
_tasksbusinesslayer.setReminderDate(_$scope.route.taskID, undefined)
|
||||
_$scope.endEdit()
|
||||
|
||||
@_$scope.deleteStartDate = () ->
|
||||
_tasksbusinesslayer.setStartDate(_$scope.route.taskID, undefined)
|
||||
_$scope.endEdit()
|
||||
|
||||
@_$scope.toggleCompleted = (taskID) ->
|
||||
if _$tasksmodel.completed(taskID)
|
||||
_tasksbusinesslayer.uncompleteTask(taskID)
|
||||
|
@ -142,9 +154,21 @@ $timeout, $routeParams) ->
|
|||
,5000)
|
||||
,true)
|
||||
|
||||
@_$scope.setdue = (date) ->
|
||||
_tasksbusinesslayer.setDueDate(_$scope.route.taskID,
|
||||
moment(date,'MM/DD/YYYY').format('YYYYMMDDTHHmmss'))
|
||||
@_$scope.setStartDay = (date) ->
|
||||
_tasksbusinesslayer.setStartDay(_$scope.route.taskID,
|
||||
moment(date,'MM/DD/YYYY'))
|
||||
|
||||
@_$scope.setStartTime = (date) ->
|
||||
_tasksbusinesslayer.setStartTime(_$scope.route.taskID,
|
||||
moment(date,'HH:mm'))
|
||||
|
||||
@_$scope.setDueDay = (date) ->
|
||||
_tasksbusinesslayer.setDueDay(_$scope.route.taskID,
|
||||
moment(date,'MM/DD/YYYY'))
|
||||
|
||||
@_$scope.setDueTime = (date) ->
|
||||
_tasksbusinesslayer.setDueTime(_$scope.route.taskID,
|
||||
moment(date,'HH:mm'))
|
||||
|
||||
@_$scope.setreminder = (date) ->
|
||||
_tasksbusinesslayer.setReminderDate(_$scope.route.taskID,
|
||||
|
|
|
@ -38,6 +38,8 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
|
||||
@_$scope.isAddingTask = false
|
||||
|
||||
@_$scope.focusInputField = false
|
||||
|
||||
@_$scope.TasksModel = @_$tasksmodel
|
||||
|
||||
@_$scope.TasksBusinessLayer = @_tasksbusinesslayer
|
||||
|
@ -53,13 +55,16 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
return t('tasks_enhanced','Add an item due today in "%s"...')
|
||||
.replace('%s',list.displayname)
|
||||
when 'all'
|
||||
return t('tasks_enhanced','Add an Entry in "%s"...')
|
||||
return t('tasks_enhanced','Add an entry in "%s"...')
|
||||
.replace('%s',list.displayname)
|
||||
when 'current'
|
||||
return t('tasks_enhanced','Add a current entry in "%s"...')
|
||||
.replace('%s',list.displayname)
|
||||
when 'completed', 'week'
|
||||
return null
|
||||
else
|
||||
if angular.isDefined(_$listsmodel.getById(_$scope.route.listID))
|
||||
return t('tasks_enhanced','Add an Entry in "%s"...')
|
||||
return t('tasks_enhanced','Add an entry in "%s"...')
|
||||
.replace('%s',
|
||||
_$listsmodel.getById(_$scope.route.listID).displayname)
|
||||
|
||||
|
@ -70,6 +75,9 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
else
|
||||
return true
|
||||
|
||||
@_$scope.focusInput = () ->
|
||||
_$scope.status.focusTaskInput = true
|
||||
|
||||
@_$scope.openDetails = (id) ->
|
||||
if _$scope.status.searchActive
|
||||
searchString = _$scope.route.searchString
|
||||
|
@ -101,10 +109,12 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
return task.completed == true
|
||||
when 'all'
|
||||
return task.completed == false
|
||||
when 'current'
|
||||
return (task.completed == false && _$tasksmodel.current(task.start))
|
||||
when 'starred'
|
||||
return (task.starred == true && task.completed == false)
|
||||
return (task.completed == false && task.starred == true)
|
||||
when 'today'
|
||||
return (_$tasksmodel.today(task.due) && task.completed == false)
|
||||
return (task.completed == false && _$tasksmodel.today(task.due))
|
||||
|
||||
@_$scope.filterLists = () ->
|
||||
return (list) ->
|
||||
|
@ -123,16 +133,19 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
name: taskName
|
||||
starred: false
|
||||
due: false
|
||||
start: false
|
||||
completed: false
|
||||
}
|
||||
|
||||
if (_$scope.route.listID in
|
||||
['starred', 'today', 'week', 'all', 'completed'])
|
||||
['starred', 'today', 'week', 'all', 'completed', 'current'])
|
||||
task.calendarID = _$listsmodel.getStandardList()
|
||||
if _$scope.route.listID == 'starred'
|
||||
task.starred = true
|
||||
if _$scope.route.listID == 'today'
|
||||
task.due = moment().startOf('day').format("YYYYMMDDTHHmmss")
|
||||
if _$scope.route.listID == 'current'
|
||||
task.start = moment().format("YYYYMMDDTHHmmss")
|
||||
else
|
||||
task.calendarID = _$scope.route.listID
|
||||
|
||||
|
@ -144,12 +157,14 @@ CollectionsModel, TasksBusinessLayer, $location) ->
|
|||
, =>
|
||||
_$scope.isAddingTask = false
|
||||
|
||||
_$scope.status.focusTaskInput = false
|
||||
_$scope.taskName = ''
|
||||
|
||||
@_$scope.checkTaskInput = (event) ->
|
||||
if(event.keyCode == 27)
|
||||
$('#target').blur()
|
||||
_$scope.taskName = ""
|
||||
_$scope.status.focusTaskInput = false
|
||||
|
||||
@_$scope.dayHasEntry = () ->
|
||||
return (date) ->
|
||||
|
|
|
@ -30,7 +30,8 @@ angular.module('Tasks').directive 'datepicker', ->
|
|||
dp = $(inst).datepicker('widget')
|
||||
marginLeft = -Math.abs($(input).outerWidth()-dp.outerWidth())/2+'px'
|
||||
dp.css({'margin-left':marginLeft})
|
||||
$(".popover:before").css({'left':100+'px'})
|
||||
$("div.ui-datepicker:before").css({'left':100+'px'})
|
||||
|
||||
beforeShowDay: (date) ->
|
||||
if (moment(date).startOf('day')
|
||||
.diff(moment(scope.task[attr.datepicker], "YYYYMMDDTHHmmss")
|
||||
|
@ -38,5 +39,4 @@ angular.module('Tasks').directive 'datepicker', ->
|
|||
return [1,"selected"]
|
||||
else
|
||||
return [1,""]
|
||||
})
|
||||
elm.datepicker('widget').addClass('popover')
|
||||
})
|
38
js/app/directives/timepicker.coffee
Normal file
|
@ -0,0 +1,38 @@
|
|||
###
|
||||
|
||||
ownCloud - Tasks
|
||||
|
||||
@author Raimund Schlüßler
|
||||
@copyright 2013
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
###
|
||||
angular.module('Tasks').directive 'timepicker', ->
|
||||
restrict: 'A'
|
||||
link: (scope, elm, attr) ->
|
||||
elm.timepicker({
|
||||
onSelect: (date, inst) ->
|
||||
scope['set'+attr.timepicker](date)
|
||||
scope.$apply()
|
||||
myPosition: 'center top'
|
||||
atPosition: 'center bottom'
|
||||
# beforeShowDay: (date) ->
|
||||
# if (moment(date).startOf('day')
|
||||
# .diff(moment(scope.task[attr.datepicker], "YYYYMMDDTHHmmss")
|
||||
# .startOf('day'),'days') == 0)
|
||||
# return [1,"selected"]
|
||||
# else
|
||||
# return [1,""]
|
||||
})
|
|
@ -19,7 +19,7 @@ You should have received a copy of the GNU Affero General Public
|
|||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
###
|
||||
angular.module('Tasks').filter 'dateTaskList', () ->
|
||||
angular.module('Tasks').filter 'dayTaskList', () ->
|
||||
(due) ->
|
||||
if moment(due, "YYYYMMDDTHHmmss").isValid()
|
||||
return moment(due, "YYYYMMDDTHHmmss").lang('tasks').calendar()
|
27
js/app/filters/startDetails.coffee
Normal file
|
@ -0,0 +1,27 @@
|
|||
###
|
||||
|
||||
ownCloud - Tasks
|
||||
|
||||
@author Raimund Schlüßler
|
||||
@copyright 2013
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
###
|
||||
angular.module('Tasks').filter 'startDetails', () ->
|
||||
(due) ->
|
||||
if moment(due, "YYYYMMDDTHHmmss").isValid()
|
||||
return moment(due, "YYYYMMDDTHHmmss").lang('start').calendar()
|
||||
else
|
||||
return t('tasks_enhanced', 'Set start date')
|
|
@ -23,6 +23,6 @@ angular.module('Tasks').filter 'timeDetails', () ->
|
|||
(reminder) ->
|
||||
if moment(reminder, "YYYYMMDDTHHmmss").isValid()
|
||||
return moment(reminder, "YYYYMMDDTHHmmss").
|
||||
format('['+t('tasks_enhanced','Remind me at')+'] h:mm A')
|
||||
format('['+t('tasks_enhanced','Remind me at')+'] HH:mm A')
|
||||
else
|
||||
return t('tasks_enhanced', 'Remind me')
|
27
js/app/filters/timeTaskList.coffee
Normal file
|
@ -0,0 +1,27 @@
|
|||
###
|
||||
|
||||
ownCloud - Tasks
|
||||
|
||||
@author Raimund Schlüßler
|
||||
@copyright 2013
|
||||
|
||||
This library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
License as published by the Free Software Foundation; either
|
||||
version 3 of the License, or any later version.
|
||||
|
||||
This library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
|
||||
You should have received a copy of the GNU Affero General Public
|
||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
###
|
||||
angular.module('Tasks').filter 'timeTaskList', () ->
|
||||
(due) ->
|
||||
if moment(due, "YYYYMMDDTHHmmss").isValid()
|
||||
return moment(due, "YYYYMMDDTHHmmss").format('HH:mm')
|
||||
else
|
||||
return ''
|
|
@ -62,11 +62,62 @@ angular.module('Tasks').factory 'TasksBusinessLayer',
|
|||
@_$tasksmodel.removeById(taskID)
|
||||
@_persistence.deleteTask(taskID)
|
||||
|
||||
setDueDate: (taskID, due) ->
|
||||
@_$tasksmodel.setDueDate(taskID,due)
|
||||
date = moment(due, "YYYYMMDDTHHmmss")
|
||||
setDueDay: (taskID, day) ->
|
||||
due = moment(@_$tasksmodel.getById(taskID).due, "YYYYMMDDTHHmmss")
|
||||
if moment(due).isValid()
|
||||
due.year(day.year()).month(day.month()).day(day.day())
|
||||
else
|
||||
due = day.add('h',12)
|
||||
|
||||
@_$tasksmodel.setDueDate(taskID,due.format('YYYYMMDDTHHmmss'))
|
||||
@_persistence.setDueDate(taskID,
|
||||
if date.isValid() then date.unix() else false)
|
||||
if due.isValid() then due.unix() else false)
|
||||
|
||||
setDueTime: (taskID, time) ->
|
||||
due = moment(@_$tasksmodel.getById(taskID).due, "YYYYMMDDTHHmmss")
|
||||
if moment(due).isValid()
|
||||
due.hour(time.hour()).minute(time.minute())
|
||||
else
|
||||
due = time
|
||||
@_$tasksmodel.setDueDate(taskID,due.format('YYYYMMDDTHHmmss'))
|
||||
@_persistence.setDueDate(taskID,
|
||||
if due.isValid() then due.unix() else false)
|
||||
|
||||
deleteDueDate: (taskID) ->
|
||||
@_$tasksmodel.setDueDate(taskID, undefined)
|
||||
@_persistence.setDueDate(taskID, false)
|
||||
|
||||
setStartDay: (taskID, day) ->
|
||||
start = moment(@_$tasksmodel.getById(taskID).start, "YYYYMMDDTHHmmss")
|
||||
if moment(start).isValid()
|
||||
start.year(day.year()).month(day.month()).day(day.day())
|
||||
else
|
||||
start = day.add('h',12)
|
||||
|
||||
@_$tasksmodel.setStartDate(taskID,start.format('YYYYMMDDTHHmmss'))
|
||||
@_persistence.setStartDate(taskID,
|
||||
if start.isValid() then start.unix() else false)
|
||||
|
||||
setStartTime: (taskID, time) ->
|
||||
start = moment(@_$tasksmodel.getById(taskID).start, "YYYYMMDDTHHmmss")
|
||||
if moment(start).isValid()
|
||||
start.hour(time.hour()).minute(time.minute())
|
||||
else
|
||||
start = time
|
||||
@_$tasksmodel.setStartDate(taskID,start.format('YYYYMMDDTHHmmss'))
|
||||
@_persistence.setStartDate(taskID,
|
||||
if start.isValid() then start.unix() else false)
|
||||
|
||||
deleteStartDate: (taskID) ->
|
||||
@_$tasksmodel.setStartDate(taskID, undefined)
|
||||
@_persistence.setStartDate(taskID, false)
|
||||
|
||||
|
||||
setStartDate: (taskID, start) ->
|
||||
@_$tasksmodel.setStartDate(taskID,start)
|
||||
date = moment(start, "YYYYMMDDTHHmmss")
|
||||
@_persistence.setStartDate(taskID,
|
||||
if date.isValid() then date.unix() else false)
|
||||
|
||||
setReminderDate: (taskID, reminder) ->
|
||||
@_$tasksmodel.setReminderDate(taskID,reminder)
|
||||
|
|
|
@ -44,6 +44,10 @@ angular.module('Tasks').factory 'CollectionsModel',
|
|||
id: "all",
|
||||
displayname: t('tasks_enhanced', 'All')
|
||||
},
|
||||
{
|
||||
id: "current",
|
||||
displayname: t('tasks_enhanced', 'Current')
|
||||
},
|
||||
{
|
||||
id: "completed"
|
||||
displayname: t('tasks_enhanced', 'Done')
|
||||
|
@ -74,6 +78,9 @@ angular.module('Tasks').factory 'CollectionsModel',
|
|||
when 'all'
|
||||
for task in tasks
|
||||
count += !task.completed
|
||||
when 'current'
|
||||
for task in tasks
|
||||
count += (!task.completed && @_$tasksmodel.current(task.start))
|
||||
when 'completed'
|
||||
for task in tasks
|
||||
count += task.completed
|
||||
|
|
|
@ -101,6 +101,11 @@ angular.module('Tasks').factory 'ListsModel',
|
|||
for task in tasks
|
||||
count += (task.calendarid==listID && !task.completed)
|
||||
return count
|
||||
when 'current'
|
||||
for task in tasks
|
||||
count += (task.calendarid==listID && !task.completed &&
|
||||
@_$tasksmodel.current(task.start))
|
||||
return count
|
||||
when 'completed'
|
||||
for task in tasks
|
||||
count += (task.calendarid==listID && task.completed)
|
||||
|
@ -112,7 +117,7 @@ angular.module('Tasks').factory 'ListsModel',
|
|||
when 'today'
|
||||
for task in tasks
|
||||
count += (task.calendarid==listID && !task.completed &&
|
||||
@_$tasksmodel.today(task.due))
|
||||
@_$tasksmodel.today(task.due))
|
||||
return count
|
||||
|
||||
return new ListsModel(TasksModel, Utils)
|
||||
|
|
|
@ -128,7 +128,10 @@ angular.module('Tasks').factory 'TasksModel',
|
|||
@update({id:taskID,due:date})
|
||||
|
||||
setReminderDate: (taskID,date) ->
|
||||
@update({id:taskID,reminder:date})
|
||||
@update({id:taskID,reminder:{date:date}})
|
||||
|
||||
setStartDate: (taskID,date) ->
|
||||
@update({id:taskID,start:date})
|
||||
|
||||
overdue: (due) ->
|
||||
return (moment(due, "YYYYMMDDTHHmmss").isValid() &&
|
||||
|
@ -148,6 +151,11 @@ angular.module('Tasks').factory 'TasksModel',
|
|||
moment(due, "YYYYMMDDTHHmmss").
|
||||
diff(moment().startOf('day'), 'days', true) < 7)
|
||||
|
||||
current: (start) ->
|
||||
return (!moment(start, "YYYYMMDDTHHmmss").isValid() ||
|
||||
moment(start, "YYYYMMDDTHHmmss").
|
||||
diff(moment(), 'days', true) < 0)
|
||||
|
||||
changeCalendarId: (taskID, calendarID) ->
|
||||
@update({id:taskID,calendarid:calendarID})
|
||||
|
||||
|
|
|
@ -151,6 +151,7 @@ angular.module('Tasks').factory 'Persistence',
|
|||
calendarID: task.calendarID
|
||||
starred: task.starred
|
||||
due: task.due
|
||||
start: task.start
|
||||
tmpID: task.tmpID
|
||||
onSuccess: onSuccess
|
||||
onFailure: onFailure
|
||||
|
@ -173,6 +174,15 @@ angular.module('Tasks').factory 'Persistence',
|
|||
|
||||
@_request.post '/apps/tasks_enhanced/tasks/{taskID}/due', params
|
||||
|
||||
setStartDate: (taskID, start) ->
|
||||
params =
|
||||
routeParams:
|
||||
taskID: taskID
|
||||
data:
|
||||
start: start
|
||||
|
||||
@_request.post '/apps/tasks_enhanced/tasks/{taskID}/start', params
|
||||
|
||||
setReminderDate: (taskID, reminder) ->
|
||||
params =
|
||||
routeParams:
|
||||
|
|
|
@ -29,6 +29,7 @@ angular.module('Tasks').factory 'Status',
|
|||
showhidden: true
|
||||
searchActive: false
|
||||
addingList: false
|
||||
focusTaskInput: false
|
||||
}
|
||||
|
||||
getStatus: () ->
|
||||
|
|
275
js/public/app.js
|
@ -74,12 +74,28 @@
|
|||
})();
|
||||
moment.lang('details', {
|
||||
calendar: {
|
||||
lastDay: '[' + t('tasks_enhanced', 'Due Yesterday') + ']',
|
||||
sameDay: '[' + t('tasks_enhanced', 'Due Today') + ']',
|
||||
nextDay: '[' + t('tasks_enhanced', 'Due Tomorrow') + ']',
|
||||
lastWeek: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY',
|
||||
nextWeek: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY',
|
||||
sameElse: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY'
|
||||
lastDay: '[' + t('tasks_enhanced', 'Due Yesterday') + '], HH:mm',
|
||||
sameDay: '[' + t('tasks_enhanced', 'Due Today') + '], HH:mm',
|
||||
nextDay: '[' + t('tasks_enhanced', 'Due Tomorrow') + '], HH:mm',
|
||||
lastWeek: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY, HH:mm',
|
||||
nextWeek: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY, HH:mm',
|
||||
sameElse: '[' + t('tasks_enhanced', 'Due on') + '] MMM DD, YYYY, HH:mm'
|
||||
}
|
||||
});
|
||||
moment.lang('start', {
|
||||
calendar: {
|
||||
lastDay: '[' + t('tasks_enhanced', 'Started Yesterday') + '], HH:mm',
|
||||
sameDay: '[' + t('tasks_enhanced', 'Starts Today') + '], HH:mm',
|
||||
nextDay: '[' + t('tasks_enhanced', 'Starts Tomorrow') + '], HH:mm',
|
||||
lastWeek: '[' + t('tasks_enhanced', 'Started on') + '] MMM DD, YYYY, HH:mm',
|
||||
nextWeek: '[' + t('tasks_enhanced', 'Starts on') + '] MMM DD, YYYY, HH:mm',
|
||||
sameElse: function() {
|
||||
if (this.diff(moment()) > 0) {
|
||||
return '[' + t('tasks_enhanced', 'Starts on') + '] MMM DD, YYYY, HH:mm';
|
||||
} else {
|
||||
return '[' + t('tasks_enhanced', 'Started on') + '] MMM DD, YYYY, HH:mm';
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
moment.lang('tasks', {
|
||||
|
@ -122,7 +138,7 @@
|
|||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, elm, attr) {
|
||||
elm.datepicker({
|
||||
return elm.datepicker({
|
||||
onSelect: function(date, inst) {
|
||||
scope['set' + attr.datepicker](date);
|
||||
return scope.$apply();
|
||||
|
@ -134,7 +150,7 @@
|
|||
dp.css({
|
||||
'margin-left': marginLeft
|
||||
});
|
||||
return $(".popover:before").css({
|
||||
return $("div.ui-datepicker:before").css({
|
||||
'left': 100 + 'px'
|
||||
});
|
||||
},
|
||||
|
@ -146,7 +162,6 @@
|
|||
}
|
||||
}
|
||||
});
|
||||
return elm.datepicker('widget').addClass('popover');
|
||||
}
|
||||
};
|
||||
});
|
||||
|
@ -216,6 +231,25 @@
|
|||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').directive('timepicker', function() {
|
||||
return {
|
||||
restrict: 'A',
|
||||
link: function(scope, elm, attr) {
|
||||
return elm.timepicker({
|
||||
onSelect: function(date, inst) {
|
||||
scope['set' + attr.timepicker](date);
|
||||
return scope.$apply();
|
||||
},
|
||||
myPosition: 'center top',
|
||||
atPosition: 'center bottom'
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').directive('watchTop', function() {
|
||||
return {
|
||||
|
@ -266,6 +300,7 @@
|
|||
_$location.path('/lists/' + _$scope.route.listID);
|
||||
}
|
||||
_$scope.status.addingList = false;
|
||||
_$scope.status.focusTaskInput = false;
|
||||
return _$scope.status.newListName = "";
|
||||
};
|
||||
this._$scope.isLoading = function() {
|
||||
|
@ -327,6 +362,13 @@
|
|||
return _$location.path('/lists/' + _$scope.route.listID + '/tasks/' + _$scope.route.taskID + '/edit/duedate');
|
||||
}
|
||||
};
|
||||
this._$scope.editStart = function() {
|
||||
if (_$scope.status.searchActive) {
|
||||
return _$location.path('/search/' + _$scope.route.searchString + '/tasks/' + _$scope.route.taskID + '/edit/startdate');
|
||||
} else {
|
||||
return _$location.path('/lists/' + _$scope.route.listID + '/tasks/' + _$scope.route.taskID + '/edit/startdate');
|
||||
}
|
||||
};
|
||||
this._$scope.editReminder = function() {
|
||||
if (_$scope.status.searchActive) {
|
||||
return _$location.path('/search/' + _$scope.route.searchString + '/tasks/' + _$scope.route.taskID + '/edit/reminder');
|
||||
|
@ -358,13 +400,17 @@
|
|||
}
|
||||
};
|
||||
this._$scope.deleteDueDate = function() {
|
||||
_tasksbusinesslayer.setDueDate(_$scope.route.taskID, void 0);
|
||||
_tasksbusinesslayer.deleteDueDate(_$scope.route.taskID, void 0);
|
||||
return _$scope.endEdit();
|
||||
};
|
||||
this._$scope.deleteReminder = function() {
|
||||
_tasksbusinesslayer.setReminderDate(_$scope.route.taskID, void 0);
|
||||
return _$scope.endEdit();
|
||||
};
|
||||
this._$scope.deleteStartDate = function() {
|
||||
_tasksbusinesslayer.setStartDate(_$scope.route.taskID, void 0);
|
||||
return _$scope.endEdit();
|
||||
};
|
||||
this._$scope.toggleCompleted = function(taskID) {
|
||||
if (_$tasksmodel.completed(taskID)) {
|
||||
return _tasksbusinesslayer.uncompleteTask(taskID);
|
||||
|
@ -407,8 +453,17 @@
|
|||
}
|
||||
}
|
||||
}, true);
|
||||
this._$scope.setdue = function(date) {
|
||||
return _tasksbusinesslayer.setDueDate(_$scope.route.taskID, moment(date, 'MM/DD/YYYY').format('YYYYMMDDTHHmmss'));
|
||||
this._$scope.setStartDay = function(date) {
|
||||
return _tasksbusinesslayer.setStartDay(_$scope.route.taskID, moment(date, 'MM/DD/YYYY'));
|
||||
};
|
||||
this._$scope.setStartTime = function(date) {
|
||||
return _tasksbusinesslayer.setStartTime(_$scope.route.taskID, moment(date, 'HH:mm'));
|
||||
};
|
||||
this._$scope.setDueDay = function(date) {
|
||||
return _tasksbusinesslayer.setDueDay(_$scope.route.taskID, moment(date, 'MM/DD/YYYY'));
|
||||
};
|
||||
this._$scope.setDueTime = function(date) {
|
||||
return _tasksbusinesslayer.setDueTime(_$scope.route.taskID, moment(date, 'HH:mm'));
|
||||
};
|
||||
this._$scope.setreminder = function(date) {
|
||||
return _tasksbusinesslayer.setReminderDate(_$scope.route.taskID, moment(date, 'MM/DD/YYYY').format('YYYYMMDDTHHmmss'));
|
||||
|
@ -625,6 +680,7 @@
|
|||
this._$scope.lists = this._$listsmodel.getAll();
|
||||
this._$scope.days = [0, 1, 2, 3, 4, 5, 6];
|
||||
this._$scope.isAddingTask = false;
|
||||
this._$scope.focusInputField = false;
|
||||
this._$scope.TasksModel = this._$tasksmodel;
|
||||
this._$scope.TasksBusinessLayer = this._tasksbusinesslayer;
|
||||
this._$scope.getAddString = function() {
|
||||
|
@ -636,13 +692,15 @@
|
|||
case 'today':
|
||||
return t('tasks_enhanced', 'Add an item due today in "%s"...').replace('%s', list.displayname);
|
||||
case 'all':
|
||||
return t('tasks_enhanced', 'Add an Entry in "%s"...').replace('%s', list.displayname);
|
||||
return t('tasks_enhanced', 'Add an entry in "%s"...').replace('%s', list.displayname);
|
||||
case 'current':
|
||||
return t('tasks_enhanced', 'Add a current entry in "%s"...').replace('%s', list.displayname);
|
||||
case 'completed':
|
||||
case 'week':
|
||||
return null;
|
||||
default:
|
||||
if (angular.isDefined(_$listsmodel.getById(_$scope.route.listID))) {
|
||||
return t('tasks_enhanced', 'Add an Entry in "%s"...').replace('%s', _$listsmodel.getById(_$scope.route.listID).displayname);
|
||||
return t('tasks_enhanced', 'Add an entry in "%s"...').replace('%s', _$listsmodel.getById(_$scope.route.listID).displayname);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -655,6 +713,9 @@
|
|||
return true;
|
||||
}
|
||||
};
|
||||
this._$scope.focusInput = function() {
|
||||
return _$scope.status.focusTaskInput = true;
|
||||
};
|
||||
this._$scope.openDetails = function(id) {
|
||||
var listID, searchString;
|
||||
if (_$scope.status.searchActive) {
|
||||
|
@ -690,10 +751,12 @@
|
|||
return task.completed === true;
|
||||
case 'all':
|
||||
return task.completed === false;
|
||||
case 'current':
|
||||
return task.completed === false && _$tasksmodel.current(task.start);
|
||||
case 'starred':
|
||||
return task.starred === true && task.completed === false;
|
||||
return task.completed === false && task.starred === true;
|
||||
case 'today':
|
||||
return _$tasksmodel.today(task.due) && task.completed === false;
|
||||
return task.completed === false && _$tasksmodel.today(task.due);
|
||||
}
|
||||
};
|
||||
};
|
||||
|
@ -715,9 +778,10 @@
|
|||
name: taskName,
|
||||
starred: false,
|
||||
due: false,
|
||||
start: false,
|
||||
completed: false
|
||||
};
|
||||
if (((_ref = _$scope.route.listID) === 'starred' || _ref === 'today' || _ref === 'week' || _ref === 'all' || _ref === 'completed')) {
|
||||
if (((_ref = _$scope.route.listID) === 'starred' || _ref === 'today' || _ref === 'week' || _ref === 'all' || _ref === 'completed' || _ref === 'current')) {
|
||||
task.calendarID = _$listsmodel.getStandardList();
|
||||
if (_$scope.route.listID === 'starred') {
|
||||
task.starred = true;
|
||||
|
@ -725,6 +789,9 @@
|
|||
if (_$scope.route.listID === 'today') {
|
||||
task.due = moment().startOf('day').format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
if (_$scope.route.listID === 'current') {
|
||||
task.start = moment().format("YYYYMMDDTHHmmss");
|
||||
}
|
||||
} else {
|
||||
task.calendarID = _$scope.route.listID;
|
||||
}
|
||||
|
@ -734,12 +801,14 @@
|
|||
}, function() {
|
||||
return _$scope.isAddingTask = false;
|
||||
});
|
||||
_$scope.status.focusTaskInput = false;
|
||||
return _$scope.taskName = '';
|
||||
};
|
||||
this._$scope.checkTaskInput = function(event) {
|
||||
if (event.keyCode === 27) {
|
||||
$('#target').blur();
|
||||
return _$scope.taskName = "";
|
||||
_$scope.taskName = "";
|
||||
return _$scope.status.focusTaskInput = false;
|
||||
}
|
||||
};
|
||||
this._$scope.dayHasEntry = function() {
|
||||
|
@ -880,11 +949,69 @@
|
|||
return this._persistence.deleteTask(taskID);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setDueDate = function(taskID, due) {
|
||||
TasksBusinessLayer.prototype.setDueDay = function(taskID, day) {
|
||||
var due;
|
||||
due = moment(this._$tasksmodel.getById(taskID).due, "YYYYMMDDTHHmmss");
|
||||
if (moment(due).isValid()) {
|
||||
due.year(day.year()).month(day.month()).day(day.day());
|
||||
} else {
|
||||
due = day.add('h', 12);
|
||||
}
|
||||
this._$tasksmodel.setDueDate(taskID, due.format('YYYYMMDDTHHmmss'));
|
||||
return this._persistence.setDueDate(taskID, due.isValid() ? due.unix() : false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setDueTime = function(taskID, time) {
|
||||
var due;
|
||||
due = moment(this._$tasksmodel.getById(taskID).due, "YYYYMMDDTHHmmss");
|
||||
if (moment(due).isValid()) {
|
||||
due.hour(time.hour()).minute(time.minute());
|
||||
} else {
|
||||
due = time;
|
||||
}
|
||||
this._$tasksmodel.setDueDate(taskID, due.format('YYYYMMDDTHHmmss'));
|
||||
return this._persistence.setDueDate(taskID, due.isValid() ? due.unix() : false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.deleteDueDate = function(taskID) {
|
||||
this._$tasksmodel.setDueDate(taskID, void 0);
|
||||
return this._persistence.setDueDate(taskID, false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setStartDay = function(taskID, day) {
|
||||
var start;
|
||||
start = moment(this._$tasksmodel.getById(taskID).start, "YYYYMMDDTHHmmss");
|
||||
if (moment(start).isValid()) {
|
||||
start.year(day.year()).month(day.month()).day(day.day());
|
||||
} else {
|
||||
start = day.add('h', 12);
|
||||
}
|
||||
this._$tasksmodel.setStartDate(taskID, start.format('YYYYMMDDTHHmmss'));
|
||||
return this._persistence.setStartDate(taskID, start.isValid() ? start.unix() : false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setStartTime = function(taskID, time) {
|
||||
var start;
|
||||
start = moment(this._$tasksmodel.getById(taskID).start, "YYYYMMDDTHHmmss");
|
||||
if (moment(start).isValid()) {
|
||||
start.hour(time.hour()).minute(time.minute());
|
||||
} else {
|
||||
start = time;
|
||||
}
|
||||
this._$tasksmodel.setStartDate(taskID, start.format('YYYYMMDDTHHmmss'));
|
||||
return this._persistence.setStartDate(taskID, start.isValid() ? start.unix() : false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.deleteStartDate = function(taskID) {
|
||||
this._$tasksmodel.setStartDate(taskID, void 0);
|
||||
return this._persistence.setStartDate(taskID, false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setStartDate = function(taskID, start) {
|
||||
var date;
|
||||
this._$tasksmodel.setDueDate(taskID, due);
|
||||
date = moment(due, "YYYYMMDDTHHmmss");
|
||||
return this._persistence.setDueDate(taskID, date.isValid() ? date.unix() : false);
|
||||
this._$tasksmodel.setStartDate(taskID, start);
|
||||
date = moment(start, "YYYYMMDDTHHmmss");
|
||||
return this._persistence.setStartDate(taskID, date.isValid() ? date.unix() : false);
|
||||
};
|
||||
|
||||
TasksBusinessLayer.prototype.setReminderDate = function(taskID, reminder) {
|
||||
|
@ -969,6 +1096,9 @@
|
|||
}, {
|
||||
id: "all",
|
||||
displayname: t('tasks_enhanced', 'All')
|
||||
}, {
|
||||
id: "current",
|
||||
displayname: t('tasks_enhanced', 'Current')
|
||||
}, {
|
||||
id: "completed",
|
||||
displayname: t('tasks_enhanced', 'Done')
|
||||
|
@ -993,7 +1123,7 @@
|
|||
};
|
||||
|
||||
CollectionsModel.prototype.getCount = function(collectionID) {
|
||||
var count, task, tasks, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m;
|
||||
var count, task, tasks, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _m, _n;
|
||||
count = 0;
|
||||
tasks = this._$tasksmodel.getAll();
|
||||
switch (collectionID) {
|
||||
|
@ -1021,9 +1151,15 @@
|
|||
count += !task.completed;
|
||||
}
|
||||
break;
|
||||
case 'completed':
|
||||
case 'current':
|
||||
for (_m = 0, _len4 = tasks.length; _m < _len4; _m++) {
|
||||
task = tasks[_m];
|
||||
count += !task.completed && this._$tasksmodel.current(task.start);
|
||||
}
|
||||
break;
|
||||
case 'completed':
|
||||
for (_n = 0, _len5 = tasks.length; _n < _len5; _n++) {
|
||||
task = tasks[_n];
|
||||
count += task.completed;
|
||||
}
|
||||
}
|
||||
|
@ -1159,7 +1295,7 @@
|
|||
};
|
||||
|
||||
ListsModel.prototype.getCount = function(listID, type) {
|
||||
var count, task, tasks, _i, _j, _k, _l, _len, _len1, _len2, _len3;
|
||||
var count, task, tasks, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m;
|
||||
count = 0;
|
||||
tasks = this._$tasksmodel.getAll();
|
||||
switch (type) {
|
||||
|
@ -1169,21 +1305,27 @@
|
|||
count += task.calendarid === listID && !task.completed;
|
||||
}
|
||||
return count;
|
||||
case 'completed':
|
||||
case 'current':
|
||||
for (_j = 0, _len1 = tasks.length; _j < _len1; _j++) {
|
||||
task = tasks[_j];
|
||||
count += task.calendarid === listID && !task.completed && this._$tasksmodel.current(task.start);
|
||||
}
|
||||
return count;
|
||||
case 'completed':
|
||||
for (_k = 0, _len2 = tasks.length; _k < _len2; _k++) {
|
||||
task = tasks[_k];
|
||||
count += task.calendarid === listID && task.completed;
|
||||
}
|
||||
return count;
|
||||
case 'starred':
|
||||
for (_k = 0, _len2 = tasks.length; _k < _len2; _k++) {
|
||||
task = tasks[_k];
|
||||
for (_l = 0, _len3 = tasks.length; _l < _len3; _l++) {
|
||||
task = tasks[_l];
|
||||
count += task.calendarid === listID && !task.completed && task.starred;
|
||||
}
|
||||
return count;
|
||||
case 'today':
|
||||
for (_l = 0, _len3 = tasks.length; _l < _len3; _l++) {
|
||||
task = tasks[_l];
|
||||
for (_m = 0, _len4 = tasks.length; _m < _len4; _m++) {
|
||||
task = tasks[_m];
|
||||
count += task.calendarid === listID && !task.completed && this._$tasksmodel.today(task.due);
|
||||
}
|
||||
return count;
|
||||
|
@ -1375,7 +1517,16 @@
|
|||
TasksModel.prototype.setReminderDate = function(taskID, date) {
|
||||
return this.update({
|
||||
id: taskID,
|
||||
reminder: date
|
||||
reminder: {
|
||||
date: date
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
TasksModel.prototype.setStartDate = function(taskID, date) {
|
||||
return this.update({
|
||||
id: taskID,
|
||||
start: date
|
||||
});
|
||||
};
|
||||
|
||||
|
@ -1395,6 +1546,10 @@
|
|||
return moment(due, "YYYYMMDDTHHmmss").isValid() && moment(due, "YYYYMMDDTHHmmss").diff(moment().startOf('day'), 'days', true) < 7;
|
||||
};
|
||||
|
||||
TasksModel.prototype.current = function(start) {
|
||||
return !moment(start, "YYYYMMDDTHHmmss").isValid() || moment(start, "YYYYMMDDTHHmmss").diff(moment(), 'days', true) < 0;
|
||||
};
|
||||
|
||||
TasksModel.prototype.changeCalendarId = function(taskID, calendarID) {
|
||||
return this.update({
|
||||
id: taskID,
|
||||
|
@ -1605,6 +1760,7 @@
|
|||
calendarID: task.calendarID,
|
||||
starred: task.starred,
|
||||
due: task.due,
|
||||
start: task.start,
|
||||
tmpID: task.tmpID
|
||||
},
|
||||
onSuccess: onSuccess,
|
||||
|
@ -1636,6 +1792,19 @@
|
|||
return this._request.post('/apps/tasks_enhanced/tasks/{taskID}/due', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.setStartDate = function(taskID, start) {
|
||||
var params;
|
||||
params = {
|
||||
routeParams: {
|
||||
taskID: taskID
|
||||
},
|
||||
data: {
|
||||
start: start
|
||||
}
|
||||
};
|
||||
return this._request.post('/apps/tasks_enhanced/tasks/{taskID}/start', params);
|
||||
};
|
||||
|
||||
Persistence.prototype.setReminderDate = function(taskID, reminder) {
|
||||
var params;
|
||||
params = {
|
||||
|
@ -1731,7 +1900,8 @@
|
|||
this._$status = {
|
||||
showhidden: true,
|
||||
searchActive: false,
|
||||
addingList: false
|
||||
addingList: false,
|
||||
focusTaskInput: false
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -1805,6 +1975,32 @@
|
|||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').filter('dayTaskList', function() {
|
||||
return function(due) {
|
||||
if (moment(due, "YYYYMMDDTHHmmss").isValid()) {
|
||||
return moment(due, "YYYYMMDDTHHmmss").lang('tasks').calendar();
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').filter('startDetails', function() {
|
||||
return function(due) {
|
||||
if (moment(due, "YYYYMMDDTHHmmss").isValid()) {
|
||||
return moment(due, "YYYYMMDDTHHmmss").lang('start').calendar();
|
||||
} else {
|
||||
return t('tasks_enhanced', 'Set start date');
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').filter('taskAtDay', function() {
|
||||
return function(tasks, date) {
|
||||
|
@ -1832,7 +2028,7 @@
|
|||
angular.module('Tasks').filter('timeDetails', function() {
|
||||
return function(reminder) {
|
||||
if (moment(reminder, "YYYYMMDDTHHmmss").isValid()) {
|
||||
return moment(reminder, "YYYYMMDDTHHmmss").format('[' + t('tasks_enhanced', 'Remind me at') + '] h:mm A');
|
||||
return moment(reminder, "YYYYMMDDTHHmmss").format('[' + t('tasks_enhanced', 'Remind me at') + '] HH:mm A');
|
||||
} else {
|
||||
return t('tasks_enhanced', 'Remind me');
|
||||
}
|
||||
|
@ -1841,4 +2037,17 @@
|
|||
|
||||
}).call(this);
|
||||
|
||||
(function() {
|
||||
angular.module('Tasks').filter('timeTaskList', function() {
|
||||
return function(due) {
|
||||
if (moment(due, "YYYYMMDDTHHmmss").isValid()) {
|
||||
return moment(due, "YYYYMMDDTHHmmss").format('HH:mm');
|
||||
} else {
|
||||
return '';
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
}).call(this);
|
||||
|
||||
})(window.angular, window.jQuery, window.moment);
|
1691
js/vendor/momentjs/moment.js
vendored
12
js/vendor/momentjs/moment.min.js
vendored
14
l10n/de.php
|
@ -6,9 +6,10 @@
|
|||
"Important" => "Wichtig",
|
||||
"Done" => "Erledigt",
|
||||
"All" => "Alle",
|
||||
"Current" => "Aktuell",
|
||||
"Week" => "Woche",
|
||||
"Add Task" => "Task hinzufügen",
|
||||
"Set due date" => "Datum auswählen",
|
||||
"Set due date" => "Fälligkeitsdatum auswählen",
|
||||
"Remind me" => "Erinnere mich",
|
||||
"Remind me at" => "Erinnere mich um",
|
||||
"Add Subtask" => "Teilaufgabe hinzufügen",
|
||||
|
@ -17,13 +18,20 @@
|
|||
"Due Yesterday" => "Zu erledigen Gestern",
|
||||
"Due Today" => "Zu erledigen Heute",
|
||||
"Due Tomorrow" => "Zu erledigen Morgen",
|
||||
"Starts on" => "Beginnt am",
|
||||
"Started on" => "Begann am",
|
||||
"Started Yesterday" => "Begann gestern",
|
||||
"Starts Today" => "Beginnt heute",
|
||||
"Starts Tomorrow" => "Beginnt morgen",
|
||||
"Set start date" => "Beginn auswählen",
|
||||
"Yesterday" => "Gestern",
|
||||
"Tomorrow" => "Morgen",
|
||||
"Remind me" => "Erinnere mich",
|
||||
'Add an important item in "%s"...' => 'Wichtigen Eintrag in "%s" hinzufügen...',
|
||||
'Add an item due today in "%s"...' => 'Eintrag für heute zu "%s" hinzufügen...',
|
||||
'Add an Entry in "%s"...' => 'Einen Eintrag in "%s" hinzufügen...',
|
||||
"Add an item in %s" => "Eintrag zu %s hinzufügen",
|
||||
'Add an entry in "%s"...' => 'Einen Eintrag in "%s" hinzufügen...',
|
||||
'Add a current entry in "%s"...' => 'Einen aktuellen Eintrag in "%s" hinzufügen...',
|
||||
'Add an item in %s' => "Eintrag zu %s hinzufügen",
|
||||
"Recently Completed" => "Zuletzt erledigt",
|
||||
"Completed Tasks" => "Erledigte Einträge",
|
||||
"1 Completed Task" => "1 Erledigter Eintrag",
|
||||
|
|
|
@ -40,11 +40,15 @@ class PageController extends Controller {
|
|||
\OCP\Util::addScript('tasks_enhanced', 'vendor/timepicker/jquery.ui.timepicker');
|
||||
\OCP\Util::addStyle('tasks_enhanced', 'style');
|
||||
|
||||
$date = new \DateTimeZone(\OC_Calendar_App::getTimezone());
|
||||
$day = new \DateTime('today', $date);
|
||||
$day = $day->format('d');
|
||||
|
||||
// TODO: Make a HTMLTemplateResponse class
|
||||
$response = new TemplateResponse('tasks_enhanced', 'main');
|
||||
/*$response->setParams(array(
|
||||
'var' => $var,
|
||||
));*/
|
||||
$response->setParams(array(
|
||||
'DOM' => $day
|
||||
));
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
|
|
@ -182,6 +182,7 @@ class TasksController extends Controller {
|
|||
$calendarId = $this->params('calendarID');
|
||||
$starred = $this->params('starred');
|
||||
$due = $this->params('due');
|
||||
$start = $this->params('start');
|
||||
$response = new JSONResponse();
|
||||
$userId = $this->api->getUserId();
|
||||
$calendars = \OC_Calendar_Calendar::allCalendars($userId, true);
|
||||
|
@ -192,6 +193,7 @@ class TasksController extends Controller {
|
|||
'priority' => $starred,
|
||||
'location' => null,
|
||||
'due' => $due,
|
||||
'start' => $start,
|
||||
'description' => null
|
||||
);
|
||||
$vcalendar = Helper::createVCalendarFromRequest($request);
|
||||
|
@ -282,7 +284,6 @@ class TasksController extends Controller {
|
|||
$taskId = $this->params('taskID');
|
||||
$due = $this->params('due');
|
||||
$response = new JSONResponse();
|
||||
$date = 1;
|
||||
try{
|
||||
$vcalendar = \OC_Calendar_App::getVCalendar($taskId);
|
||||
$vtodo = $vcalendar->VTODO;
|
||||
|
@ -294,9 +295,9 @@ class TasksController extends Controller {
|
|||
$due = new \DateTime('@'.$due);
|
||||
$due->setTimezone($timezone);
|
||||
$type = \Sabre\VObject\Property\DateTime::LOCALTZ;
|
||||
if ($due_date_only) {
|
||||
$type = \Sabre\VObject\Property\DateTime::DATE;
|
||||
}
|
||||
// if ($due_date_only) {
|
||||
// $type = \Sabre\VObject\Property\DateTime::DATE;
|
||||
// }
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
|
||||
|
@ -309,12 +310,69 @@ class TasksController extends Controller {
|
|||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function setReminderDate(){
|
||||
$taskID = $this->params('taskID');
|
||||
$reminder = $this->params('reminder');
|
||||
public function setStartDate(){
|
||||
$taskId = $this->params('taskID');
|
||||
$start = $this->params('start');
|
||||
$response = new JSONResponse();
|
||||
//TODO
|
||||
|
||||
try{
|
||||
$vcalendar = \OC_Calendar_App::getVCalendar($taskId);
|
||||
$vtodo = $vcalendar->VTODO;
|
||||
$type = null;
|
||||
if ($start != 'false') {
|
||||
$timezone = \OC_Calendar_App::getTimezone();
|
||||
$timezone = new \DateTimeZone($timezone);
|
||||
|
||||
$start = new \DateTime('@'.$start);
|
||||
$start->setTimezone($timezone);
|
||||
$type = \Sabre\VObject\Property\DateTime::LOCALTZ;
|
||||
// if ($due_date_only) {
|
||||
// $type = \Sabre\VObject\Property\DateTime::DATE;
|
||||
// }
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
|
||||
}
|
||||
$vtodo->setDateTime('DTSTART', $start, $type);
|
||||
\OC_Calendar_Object::edit($taskId, $vcalendar->serialize());
|
||||
return $response;
|
||||
}
|
||||
|
||||
/**
|
||||
* @NoAdminRequired
|
||||
*/
|
||||
public function setReminderDate(){
|
||||
$taskId = $this->params('taskID');
|
||||
$reminder = $this->params('reminder');
|
||||
$remindertype = $this->params('reminder_type');
|
||||
$response = new JSONResponse();
|
||||
try{
|
||||
$vcalendar = \OC_Calendar_App::getVCalendar($taskId);
|
||||
$vtodo = $vcalendar->VTODO;
|
||||
$valarm = $vtodo->VALARM;
|
||||
if ($reminder != 'false'){
|
||||
if($valarm == null) {
|
||||
$valarm = new OC_VObject('VALARM');
|
||||
|
||||
$valarm->setString('ACTION', $remindertype);
|
||||
$valarm->setString('DESCRIPTION', 'Default Event Notification');
|
||||
$valarm->setString('');
|
||||
|
||||
$vevent->add($valarm);
|
||||
} else {
|
||||
unset($valarm->TRIGGER);
|
||||
}
|
||||
|
||||
$valarm->addProperty('TRIGGER', $reminder, array('VALUE' => 'DURATION'));
|
||||
|
||||
} else {
|
||||
if($valarm != null) {
|
||||
unset($vevent->VALARM);
|
||||
}
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
|
||||
}
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
|
|
@ -153,13 +153,22 @@ Class helper {
|
|||
|
||||
$due = $request['due'];
|
||||
if ($due) {
|
||||
$timezone = self::getTimezone();
|
||||
$timezone = \OC_Calendar_App::getTimezone();
|
||||
$timezone = new \DateTimeZone($timezone);
|
||||
$due = new \DateTime($due, $timezone);
|
||||
$vtodo->setDateTime('DUE', $due);
|
||||
} else {
|
||||
unset($vtodo->DUE);
|
||||
}
|
||||
$start = $request['start'];
|
||||
if ($start) {
|
||||
$timezone = \OC_Calendar_App::getTimezone();
|
||||
$timezone = new \DateTimeZone($timezone);
|
||||
$start = new \DateTime($start, $timezone);
|
||||
$vtodo->setDateTime('DTSTART', $start);
|
||||
} else {
|
||||
unset($vtodo->DTSTART);
|
||||
}
|
||||
|
||||
return $vcalendar;
|
||||
}
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
<li ng-repeat="collection in collections" id="collection_{{ collection.id }}" rel="{{ collection.id }}"
|
||||
ng-class="{'animate-up': getCollectionCount(collection.id)<1, active: collection.id==route.listID}" oc-drop-task>
|
||||
<a href="#/lists/{{ collection.id }}">
|
||||
<span class="icon collection-{{ collection.id }}"><text ng-show="collection.id=='today'">{{ DOM }}</text></span>
|
||||
<span class="icon collection-{{ collection.id }}"><text ng-show="collection.id=='today'"><?php p($_['DOM']); ?></text></span>
|
||||
<span class="count">{{ getCollectionString(collection.id) }}</span>
|
||||
<span class="title"><text>{{ collection.displayname }}</text></span>
|
||||
</a>
|
||||
|
@ -30,7 +30,7 @@
|
|||
</ul>
|
||||
<ul id="collection_lists">
|
||||
<li ng-repeat="list in lists" id="list_{{ list.id }}" rel="{{ list.id }}" ng-class="{active: list.id==route.listID}" oc-drop-task>
|
||||
<a href="#/lists/{{ list.id }}">
|
||||
<a href="#/lists/{{ list.id }}" style="border-right: 4px solid {{ list.calendarcolor }};">
|
||||
<span class="icon list-list"></span>
|
||||
<span class="count"><text ng-show="getListCount(list.id,'all')">{{ getListCount(list.id,'all') }}</text></span>
|
||||
<span class="title"><text ng-dblclick="editName(list.id)" oc-click-focus="{selector: 'input.edit', timeout: 0}">{{ list.displayname }}</text></span>
|
||||
|
@ -54,7 +54,7 @@
|
|||
</div>
|
||||
|
||||
<div id="task-tasks" ng-controller="TasksController" ng-class="{'details-visible':route.taskID}">
|
||||
<div id="add-task" class="add-task" ng-show="showInput()" >
|
||||
<div id="add-task" class="add-task" ng-show="showInput()" ng-class="{'focus':status.focusTaskInput}" stop-event="click" >
|
||||
<a class="input-star">
|
||||
<span class="icon input-star "></span>
|
||||
</a>
|
||||
|
@ -62,7 +62,7 @@
|
|||
<span class="icon input-date"></span>
|
||||
</a>
|
||||
<form ng-submit="addTask(taskName)" name="addTaskForm">
|
||||
<input id="target" ng-disabled="isAddingTask" class="transparent" placeholder="{{ getAddString() }}" ng-model="taskName"
|
||||
<input id="target" ng-disabled="isAddingTask" ng-click="focusInput()" class="transparent" placeholder="{{ getAddString() }}" ng-model="taskName"
|
||||
ng-keydown="checkTaskInput($event)"/>
|
||||
</form>
|
||||
</div>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<div ng-switch-when="starred || completed || all || today">
|
||||
<div ng-switch-when="starred || completed || all || today || current">
|
||||
<div ng-repeat="list in lists | filter:filterLists()" class="grouped-tasks ui-droppable" rel="{{ list.id }}" oc-drop-task>
|
||||
<h2 class="heading">
|
||||
<text>{{ list.displayname }}</text>
|
||||
|
|
|
@ -16,8 +16,23 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="body" watch-top ng-style="{top:divTop}">
|
||||
<div class="section detail-date" ng-class="{'date':isDue(task.due), 'editing':route.parameter=='duedate'}" ng-click="editDueDate()" stop-event="click"
|
||||
oc-click-focus="{selector: 'div.detail-date input.datepicker-input', timeout: 0}">
|
||||
<div class="section detail-start" ng-class="{'date':isDue(task.start), 'editing':route.parameter=='startdate'}" ng-click="editStart()" stop-event="click">
|
||||
<!-- oc-click-focus="{selector: 'div.detail-start input.datepicker-input', timeout: 0}" -->
|
||||
<span class="icon detail-start" ng-class="{'overdue':isOverDue(task.start)}"></span>
|
||||
<div class="section-title" ng-class="{'overdue':isOverDue(task.start)}" ng-hide="route.parameter=='startdate'">
|
||||
<text>{{ task.start | startDetails }}</text>
|
||||
</div>
|
||||
<a class="detail-delete" ng-click="deleteStartDate()" stop-event="click">
|
||||
<span class="icon detail-delete"></span>
|
||||
</a>
|
||||
<span class="icon detail-save" ng-click="endEdit()" stop-event="click"></span>
|
||||
<div class="section-edit" ng-show="route.parameter=='startdate'">
|
||||
<input class="datepicker-input medium focus" type="text" key-value="" placeholder="dd.mm.yyyy" value="{{ task.start | dateTaskList }}" datepicker="StartDay">
|
||||
<input class="timepicker-input medium focus" type="text" key-value="" placeholder="hh:mm" value="{{ task.start | timeTaskList }}" timepicker="StartTime" stop-event="click">
|
||||
</div>
|
||||
</div>
|
||||
<div class="section detail-date" ng-class="{'date':isDue(task.due), 'editing':route.parameter=='duedate'}" ng-click="editDueDate()" stop-event="click">
|
||||
<!-- oc-click-focus="{selector: 'div.detail-date input.datepicker-input', timeout: 0}" -->
|
||||
<span class="icon detail-date" ng-class="{'overdue':isOverDue(task.due)}"></span>
|
||||
<div class="section-title" ng-class="{'overdue':isOverDue(task.due)}" ng-hide="route.parameter=='duedate'">
|
||||
<text>{{ task.due | dateDetails }}</text>
|
||||
|
@ -27,16 +42,17 @@
|
|||
</a>
|
||||
<span class="icon detail-save" ng-click="endEdit()" stop-event="click"></span>
|
||||
<div class="section-edit" ng-show="route.parameter=='duedate'">
|
||||
<input class="datepicker-input medium focus" type="text" key-value="" value="{{ task.due | dateTaskList }}" datepicker="due">
|
||||
<input class="datepicker-input medium focus" type="text" key-value="" placeholder="dd.mm.yyyy" value="{{ task.due | dateTaskList }}" datepicker="DueDay">
|
||||
<input class="timepicker-input medium focus" type="text" key-value="" placeholder="hh:mm" value="{{ task.due | timeTaskList }}" timepicker="DueTime" stop-event="click">
|
||||
</div>
|
||||
</div>
|
||||
<div class="section detail-reminder" ng-class="{'date':isDue(task.reminder.date), 'editing':route.parameter=='reminder'}" ng-click="editReminder()" stop-event="click"
|
||||
oc-click-focus="{selector: 'div.detail-reminder input.datepicker-input', timeout: 0}">
|
||||
<div class="section detail-reminder" ng-class="{'date':isDue(task.reminder.date), 'editing':route.parameter=='reminder'}" ng-click="editReminder()" stop-event="click">
|
||||
<!-- oc-click-focus="{selector: 'div.detail-reminder input.datepicker-input', timeout: 0}" -->
|
||||
<span class="icon detail-reminder" ng-class="{'overdue':isOverDue(task.reminder.date)}"></span>
|
||||
<div class="section-title" ng-class="{'overdue':isOverDue(task.reminder.date)}" ng-hide="route.parameter=='reminder'">
|
||||
<text rel="">{{ task.reminder.date | timeDetails }}</text>
|
||||
</div>
|
||||
<div class="section-description">{{ task.reminder.date | dateDetailsShort }}</div>
|
||||
<div class="section-description" ng-hide="route.parameter=='reminder'">{{ task.reminder.date | dateDetailsShort }}</div>
|
||||
<a class="detail-delete" ng-click="deleteReminder()" stop-event="click">
|
||||
<span class="icon detail-delete"></span>
|
||||
</a>
|
||||
|
@ -45,8 +61,7 @@
|
|||
<input class="datepicker-input medium focus" type="text" key-value="" value="{{ task.reminder.date | dateTaskList }}" datepicker="reminder">
|
||||
</div>
|
||||
</div>
|
||||
<ul class="subtasks buffer">
|
||||
</ul>
|
||||
<!-- <ul class="subtasks buffer"></ul> -->
|
||||
<div class="note">
|
||||
<div class="note-body selectable" ng-click="editNote()" stop-event="click" oc-click-focus="{selector: '.expandingArea textarea', timeout: 0}">
|
||||
<!--
|
||||
|
|