From 472155af227c29f877c65e2f673895514470ad18 Mon Sep 17 00:00:00 2001
From: nixa <4dmitr@gmail.com>
Date: Thu, 5 May 2016 19:10:08 +0300
Subject: [PATCH] todolist component
---
.../pages/dashboard/dashboard.component.ts | 3 +-
src/app/pages/dashboard/dashboard.html | 8 +
src/app/pages/dashboard/todo/index.ts | 1 +
.../pages/dashboard/todo/todo.component.ts | 63 ++
src/app/pages/dashboard/todo/todo.html | 17 +
src/app/pages/dashboard/todo/todo.scss | 226 +++++++
src/app/pages/dashboard/todo/todo.service.ts | 84 +++
src/app/theme/sass/_form.scss | 563 ++++++++++++++++++
src/app/theme/theme.scss | 1 +
9 files changed, 965 insertions(+), 1 deletion(-)
create mode 100644 src/app/pages/dashboard/todo/index.ts
create mode 100644 src/app/pages/dashboard/todo/todo.component.ts
create mode 100644 src/app/pages/dashboard/todo/todo.html
create mode 100644 src/app/pages/dashboard/todo/todo.scss
create mode 100644 src/app/pages/dashboard/todo/todo.service.ts
create mode 100644 src/app/theme/sass/_form.scss
diff --git a/src/app/pages/dashboard/dashboard.component.ts b/src/app/pages/dashboard/dashboard.component.ts
index 696c1862..e8814fbf 100644
--- a/src/app/pages/dashboard/dashboard.component.ts
+++ b/src/app/pages/dashboard/dashboard.component.ts
@@ -6,12 +6,13 @@ import {TrafficChart} from './trafficChart';
import {UsersMap} from './usersMap';
import {LineChart} from './lineChart';
import {Feed} from './feed';
+import {Todo} from './todo';
import {BaCard} from '../../theme/components';
@Component({
selector: 'dashboard',
pipes: [],
- directives: [PopularApp, PieChart, TrafficChart, UsersMap, LineChart, Feed, BaCard],
+ directives: [PopularApp, PieChart, TrafficChart, UsersMap, LineChart, Feed, Todo, BaCard],
encapsulation: ViewEncapsulation.None,
styles: [require('./dashboard.scss')],
template: require('./dashboard.html')
diff --git a/src/app/pages/dashboard/dashboard.html b/src/app/pages/dashboard/dashboard.html
index 07c80601..5f9b8d8f 100644
--- a/src/app/pages/dashboard/dashboard.html
+++ b/src/app/pages/dashboard/dashboard.html
@@ -38,3 +38,11 @@
+
+
+
+
+
+
+
diff --git a/src/app/pages/dashboard/todo/index.ts b/src/app/pages/dashboard/todo/index.ts
new file mode 100644
index 00000000..989f7b61
--- /dev/null
+++ b/src/app/pages/dashboard/todo/index.ts
@@ -0,0 +1 @@
+export * from './todo.component';
diff --git a/src/app/pages/dashboard/todo/todo.component.ts b/src/app/pages/dashboard/todo/todo.component.ts
new file mode 100644
index 00000000..a2be2f14
--- /dev/null
+++ b/src/app/pages/dashboard/todo/todo.component.ts
@@ -0,0 +1,63 @@
+import {Component, ViewEncapsulation} from 'angular2/core';
+
+import {TodoService} from './todo.service';
+
+@Component({
+ selector: 'todo',
+ encapsulation: ViewEncapsulation.None,
+ providers: [TodoService],
+ styles: [require('./todo.scss')],
+ template: require('./todo.html')
+})
+export class Todo {
+
+ public marks:Array;
+ public todoList:Array;
+ public newTodoText:string = '';
+
+ constructor(private _todoService:TodoService) {
+ this.marks = this._todoService.getMarks();
+ this.todoList = this._todoService.getTodoList();
+ }
+
+ ngOnInit() {
+
+ }
+
+ getNotDeleted() {
+ return this.todoList.filter((item:any) => {return !item.deleted})
+ }
+
+ getMarkColor(id) {
+ return this.marks.filter((item) => { return item.id === id;} )[0].color || '';
+ }
+
+ changeColor(todo) {
+ for (var i = 0; i < this.marks.length; ++i) {
+ if (this.marks[i].id === todo.markId) {
+ var next = (i + 1 !== this.marks.length) ? i + 1 : 0;
+ todo.markId = this.marks[next].id;
+ return false;
+ }
+ }
+ }
+
+ blurOnEnter(event, item) {
+ if (event.which === 13) {
+ item.edit = false;
+ }
+ }
+
+ addToDoItem($event, clickPlus) {
+
+ if ($event.which === 1 || $event.which === 13) {
+
+ this.todoList.unshift({
+ text: this.newTodoText,
+ edit: false,
+ markId: 0
+ });
+ this.newTodoText = '';
+ }
+ }
+}
diff --git a/src/app/pages/dashboard/todo/todo.html b/src/app/pages/dashboard/todo/todo.html
new file mode 100644
index 00000000..33087494
--- /dev/null
+++ b/src/app/pages/dashboard/todo/todo.html
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/src/app/pages/dashboard/todo/todo.scss b/src/app/pages/dashboard/todo/todo.scss
new file mode 100644
index 00000000..ef35b311
--- /dev/null
+++ b/src/app/pages/dashboard/todo/todo.scss
@@ -0,0 +1,226 @@
+@import '../../../theme/sass/conf/conf';
+
+
+input.task-todo {
+ margin-bottom: 8px;
+}
+
+ul.todo-list {
+ margin: 0;
+ padding: 0;
+ .placeholder, .ui-sortable-placeholder {
+ }
+ li {
+ margin: 0 0 -1px 0;
+ padding: 12px;
+ list-style: none;
+ position: relative;
+ border: 1px solid $input-border;
+ cursor: grab;
+ height: 42px;
+ i.remove-todo {
+ position: absolute;
+ cursor: pointer;
+ top: 0px;
+ right: 12px;
+ font-size: 32px;
+ transition: color 0.2s;
+ color: $input-border;
+ visibility: hidden;
+ line-height: 42px;
+ &:hover {
+ color: $danger-dark;
+ }
+ }
+ &:hover {
+ i.remove-todo {
+ visibility: visible;
+ }
+ }
+
+ &.checked {
+ .todo-text {
+ color: #BFBFBF;
+ }
+ &:before {
+ background: $input-border !important;
+ }
+ }
+
+ @mixin mark($color) {
+ i.mark {
+ background: $color;
+ }
+ }
+ &.primary {
+ @include mark($primary);
+ }
+ &.danger {
+ @include mark($danger);
+ }
+ &.success {
+ @include mark($success);
+ }
+ &.info {
+ @include mark($info);
+ }
+ &.warning {
+ @include mark($warning);
+ }
+
+ i.mark {
+ display: block;
+ position: absolute;
+ top: -1px;
+ left: -1px;
+ height: 42px;
+ min-width: 4px;
+ background: $input-border;
+ cursor: pointer;
+ transition: min-width 0.3s ease-out;
+ }
+
+ &.active {
+ i.mark {
+ min-width: 40px;
+ }
+ label.todo-checkbox > span {
+ &:before {
+ color: white;
+ content: '\f10c';
+ margin-right: 20px;
+ transition: margin-right 0.1s ease-out;
+ transition-delay: 0.2s;
+ float: none;
+ }
+ }
+ label.todo-checkbox > input:checked + span:before {
+ content: '\f00c';
+ }
+ }
+ }
+}
+
+label.todo-checkbox {
+ padding-left: 0;
+ margin-bottom: 0;
+
+ width: 100%;
+ padding-right: 25px;
+ min-height: 16px;
+ cursor: pointer;
+ > span {
+ white-space: nowrap;
+ height: 16px;
+ &:before {
+ border: none;
+ color: $help-text;
+ transition: all 0.15s ease-out;
+ }
+ }
+}
+
+.add-item-icon {
+ display: none;
+}
+
+body.badmin-transparent {
+ .todo-panel.panel {
+ color: white;
+ opacity: 0.9;
+ }
+ input.task-todo {
+ color: white;
+ width: calc(100% - 25px);
+ border-radius: 0;
+ border: none;
+ background: transparent;
+ &:focus {
+ outline: none;
+ background-color: transparent;
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.12);
+ }
+ }
+ .add-item-icon {
+ display: block;
+ float: right;
+ margin-top: -45px;
+ margin-right: 5px;
+ font-size: 25px;
+ cursor: pointer;
+ }
+
+ ul.todo-list {
+ li {
+ margin: 0;
+ border: none;
+ font-weight: $font-light;
+
+ .blur-container{
+ height: 40px;
+ position: absolute;
+ width: calc(100% + 40px);;
+ top: 0;
+ left: -25px;
+ overflow-y: hidden;
+ }
+ &:hover{
+ .blur-container{
+ box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.12);
+ }
+ .blur-box {
+ height: 100%;
+ background: linear-gradient(to right, rgba(255,255,255,0.3) 0%,rgba(255,255,255,0) 100%);
+ -webkit-filter: blur(3px);
+ }
+ }
+ &.primary, &.danger,&.success, &.info, &.warning {
+ i.mark {
+ background-color: transparent;
+ }
+ }
+ i.remove-todo {
+ color: white;
+ opacity: 0.4;
+ &:hover {
+ color: white;
+ opacity: 0.95;
+ }
+ }
+ i.mark {
+ min-width: 40px;
+ background-color: transparent;
+ }
+ label.todo-checkbox > span {
+ &:before {
+ position: absolute;
+ color: white;
+ content: '\f10c';
+ float: none;
+ margin-right: 6px;
+ transition: none;
+ }
+ }
+ &.checked {
+ label.todo-checkbox > span {
+ &:before {
+ margin-right: 0;
+ position: absolute;
+ content: '';
+ background-size: contain;
+ background: url($images-root + "app/todo/check-icon.png") no-repeat;
+ }
+ }
+ }
+ }
+ }
+
+ .box-shadow-border{
+ border-bottom: 1px solid rgba(0, 0, 0, 0.12);
+ box-shadow: 0px 1px 0px 0px rgba(255, 255, 255, 0.12);
+ width: calc(100% + 44px);
+ margin-left: -22px;
+ }
+
+}
diff --git a/src/app/pages/dashboard/todo/todo.service.ts b/src/app/pages/dashboard/todo/todo.service.ts
new file mode 100644
index 00000000..967d6bb5
--- /dev/null
+++ b/src/app/pages/dashboard/todo/todo.service.ts
@@ -0,0 +1,84 @@
+import {Injectable} from 'angular2/core';
+
+@Injectable()
+export class TodoService {
+
+ private _marks = [
+ {
+ id: 0,
+ color: 'default'
+ },
+ {
+ id: 1,
+ color: 'primary'
+ },
+ {
+ id: 2,
+ color: 'success'
+ },
+ {
+ id: 3,
+ color: 'warning'
+ },
+ {
+ id: 4,
+ color: 'danger'
+ }
+ ];
+
+ private _todoList = [
+ {
+ text: 'Check me out',
+ edit: false,
+ markId: 4
+ },
+ {
+ text: 'Lorem ipsum dolor sit amet, possit denique oportere at his, etiam corpora deseruisse te pro',
+ edit: false,
+ markId: 3
+ },
+ {
+ text: 'Ex has semper alterum, expetenda dignissim',
+ edit: false,
+ markId: 2
+ },
+ {
+ text: 'Vim an eius ocurreret abhorreant, id nam aeque persius ornatus.',
+ edit: false,
+ markId: 1
+ },
+ {
+ text: 'Simul erroribus ad usu',
+ edit: false,
+ markId: 0
+ },
+ {
+ text: 'Ei cum solet appareat, ex est graeci mediocritatem',
+ edit: false,
+ markId: 4
+ },
+ {
+ text: 'Get in touch with akveo team',
+ edit: false,
+ markId: 1
+ },
+ {
+ text: 'Write email to business cat',
+ edit: false,
+ markId: 3
+ },
+ {
+ text: 'Have fun with blur admin',
+ edit: false,
+ markId: 2
+ },
+ ];
+
+ getMarks() {
+ return this._marks;
+ }
+
+ getTodoList() {
+ return this._todoList;
+ }
+}
diff --git a/src/app/theme/sass/_form.scss b/src/app/theme/sass/_form.scss
new file mode 100644
index 00000000..de8b8720
--- /dev/null
+++ b/src/app/theme/sass/_form.scss
@@ -0,0 +1,563 @@
+.label {
+ border-radius: 0;
+}
+
+.label-primary {
+ background: $primary;
+}
+
+.label-info {
+ background: $primary-light;
+}
+
+.label-success {
+ background: $success;
+}
+
+.label-warning {
+ background: $warning;
+}
+
+.label-danger {
+ background: $danger;
+}
+
+.form-horizontal {
+ label {
+ line-height: 34px;
+ margin-bottom: 0;
+ padding-top: 0 !important;
+ }
+}
+
+.form-group {
+ label {
+ margin-bottom: 5px;
+ color: $default-text;
+ font-weight: $font-normal;
+ font-size: 13px;
+ }
+}
+
+.form-control {
+ border-radius: 0;
+ background: transparent;
+ box-shadow: none;
+ border: none;
+ &:focus {
+ box-shadow: none;
+ border-color: $primary-bg;
+ background: #ffffff;
+ }
+}
+
+select.form-control {
+ padding-left: 8px;
+}
+
+textarea.form-control {
+ height: 96px;
+}
+
+.modal-form-btn {
+ text-align: center;
+}
+
+.form-inline {
+ .form-group {
+ input {
+ width: 100%;
+ }
+ label {
+ margin-right: 12px;
+ }
+ }
+
+ button[type="submit"] {
+ margin-left: 12px;
+ }
+
+ label.custom-checkbox > span {
+ display: block;
+ margin-top: -13px;
+ margin-right: 10px;
+ }
+}
+
+.modal-content {
+ border-radius: 5px;
+ border: none;
+ color: $default-text;
+ .modal-header {
+ color: $default;
+ border-top-left-radius: 5px;
+ border-top-right-radius: 5px;
+ }
+}
+
+@mixin setSwitchBorder($color) {
+ .bootstrap-switch.bootstrap-switch-on {
+ border-color: $color;
+ }
+}
+
+.switch-container {
+ display: inline-block;
+ & {
+ @include setSwitchBorder($default);
+ }
+ &.primary {
+ @include setSwitchBorder($primary);
+ }
+ &.success {
+ @include setSwitchBorder($success);
+ }
+ &.warning {
+ @include setSwitchBorder($warning);
+ }
+ &.danger {
+ @include setSwitchBorder($danger);
+ }
+ &.info {
+ @include setSwitchBorder($primary-light);
+ }
+}
+
+.bootstrap-switch {
+ border-radius: 5px;
+ border: 1px solid $default;
+ transition: border-color ease-in-out .7s, box-shadow ease-in-out .7s;
+ &:focus {
+ outline: none;
+ }
+ &.bootstrap-switch-off {
+ border-color: $input-border;
+ }
+ &.bootstrap-switch-focused {
+ box-shadow: none;
+ &.bootstrap-switch-off {
+ border-color: $input-border;
+ }
+ }
+ .bootstrap-switch-container {
+ border-radius: 0;
+ &:focus {
+ outline: none;
+ }
+ }
+ .bootstrap-switch-handle-on {
+ border-radius: 0;
+ &.bootstrap-switch-default {
+ background: $default;
+ }
+ &.bootstrap-switch-success {
+ background: $success;
+ }
+ &.bootstrap-switch-primary {
+ background: $primary;
+ }
+ &.bootstrap-switch-warning {
+ background: $warning;
+ }
+ &.bootstrap-switch-danger {
+ background: $danger;
+ }
+ &.bootstrap-switch-info {
+ background: $primary-light;
+ }
+ }
+ .bootstrap-switch-handle-off {
+ border-radius: 0;
+ }
+
+ .bootstrap-switch-label {
+ background: transparent;
+ }
+
+ &.bootstrap-switch-animate .bootstrap-switch-container {
+ transition: margin-left .2s;
+ }
+}
+
+.switches {
+ margin-left: -12px;
+ margin-bottom: -12px;
+ .switch-container {
+ float: left;
+ margin-left: 12px;
+ margin-bottom: 12px;
+ }
+}
+
+.input-group {
+ width: 100%;
+ margin-bottom: 15px;
+ & > span {
+ border-radius: 0;
+ }
+}
+
+label.custom-checkbox {
+ padding-right: 0;
+ padding-left: 0;
+ margin-bottom: 0;
+ & > input {
+ height: 0;
+ z-index: -100 !important;
+ opacity: 0;
+ position: absolute;
+ &:checked {
+ & + span {
+ &:before {
+ content: "\f00c";
+ font-weight: $font-light;
+ }
+ }
+ }
+ &:disabled {
+ & + span {
+ color: $disabled;
+ cursor: not-allowed;
+ &:before {
+ border-color: $disabled !important;
+ cursor: not-allowed;
+ }
+ }
+ }
+ }
+ & > span {
+ position: relative;
+ display: inline-block;
+ margin: 0;
+ line-height: 16px;
+ font-weight: $font-light;
+ cursor: pointer;
+ padding-left: 22px;
+ width: 100%;
+ &:before {
+ cursor: pointer;
+ font-family: fontAwesome;
+ font-weight: $font-light;
+ font-size: 12px;
+ color: $default;
+ content: "\a0";
+ background-color: transparent;
+ border: 1px solid $default;
+ border-radius: 0;
+ display: inline-block;
+ text-align: center;
+ height: 16px;
+ line-height: 14px;
+ min-width: 16px;
+ margin-right: 6px;
+ position: relative;
+ top: 0;
+ margin-left: -22px;
+ float: left;
+ }
+ &:hover {
+ &:before {
+ border-color: $primary-bg;
+ }
+ }
+ }
+}
+
+.nowrap {
+ white-space: nowrap;
+}
+
+.cut-with-dots {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ display: block;
+}
+
+label.custom-radio {
+ @extend .custom-checkbox;
+ & > input {
+ &:checked {
+ & + span {
+ &:before {
+ content: "\f111";
+ }
+ }
+ }
+ }
+ & > span {
+ &:before {
+ border-radius: 16px;
+ font-size: 9px;
+ }
+ }
+}
+
+@mixin customInput($color) {
+ & > span {
+ &:before {
+ color: $color;
+ }
+ &:hover {
+ &:before {
+ border-color: $color;
+ }
+ }
+ }
+}
+
+label.custom-input-primary {
+ @include customInput($primary);
+}
+
+label.custom-input-success {
+ @include customInput($success);
+}
+
+label.custom-input-warning {
+ @include customInput($warning)
+}
+
+label.custom-input-danger {
+ @include customInput($danger)
+}
+
+.form-horizontal {
+ .radio, .checkbox, .radio-inline, .checkbox-inline {
+ padding-top: 0px;
+ }
+}
+
+.input-demo {
+ line-height: 25px;
+}
+
+@mixin validationState($color, $focusColor) {
+ .control-label {
+ color: $color;
+ }
+ .form-control {
+ border: 1px solid $color;
+ &:focus {
+ box-shadow: none;
+ border-color: $focusColor;
+ }
+ }
+
+ label.custom-checkbox {
+ color: $color;
+ & > span {
+ &:before {
+ color: $color;
+ }
+ &:hover {
+ &:before {
+ border-color: $color;
+ }
+ }
+ }
+ }
+ .form-control-feedback {
+ color: $color;
+ }
+ .input-group-addon {
+ background-color: $color;
+ color: #ffffff;
+ }
+}
+
+.has-success {
+ @include validationState($success-bg, $success);
+}
+
+.has-warning {
+ @include validationState($warning-bg, $warning);
+}
+
+.has-error {
+ @include validationState($danger-bg, $danger);
+}
+
+.has-feedback label ~ .form-control-feedback {
+ top: 21px;
+ font-size: 18px;
+}
+
+.bootstrap-select {
+ .btn-default {
+ &:focus {
+ color: $default-text;
+ }
+ }
+}
+
+.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
+ background: transparent;
+ color: $disabled;
+ border-color: $disabled-bg;
+ @include placeholderStyle($disabled, 1);
+}
+
+.form-control-rounded {
+ border-radius: 16px;
+}
+
+.help-block {
+ color: $help-text;
+}
+
+.help-block.error-block {
+ display: none;
+ .has-error &.basic-block {
+ display: block;
+ }
+}
+
+@mixin groupAddon($color) {
+ background: $color;
+ color: #ffffff;
+ border-color: $color;
+}
+
+.input-group-addon-danger {
+ @include groupAddon($danger);
+}
+
+.input-group-addon-warning {
+ @include groupAddon($warning);
+}
+
+.input-group-addon-success {
+ @include groupAddon($success);
+}
+
+.input-group-addon-primary {
+ @include groupAddon($primary);
+}
+
+.checkbox-demo-row {
+ margin-bottom: 12px;
+}
+
+.dropdown-menu {
+ border-radius: 5px;
+}
+
+.bootstrap-select {
+ .btn-default {
+ background: transparent;
+ color: $default;
+ &:focus {
+ background: #ffffff;
+ box-shadow: none;
+ outline: 0 !important;
+ }
+ &:active {
+ border-color: $default;
+ box-shadow: none;
+ background: #ffffff;
+ }
+ }
+ &.open {
+ .btn-default.dropdown-toggle {
+ box-shadow: none;
+ background-color: #ffffff;
+ border-color: $default;
+ color: $default;
+ }
+ .dropdown-menu {
+ border-left: 1px solid $default;
+ border-right: 1px solid $default;
+ border-bottom-color: $default;
+ border-radius: 0 0 5px 5px;
+ }
+ > .btn.dropdown-toggle {
+ border-bottom-left-radius: 0;
+ border-bottom-right-radius: 0;
+ border-color: transparent;
+ box-shadow: none;
+ }
+ .dropdown-menu {
+ border-top: none;
+ }
+ }
+ &.with-search.open{
+ .btn-default.btn{
+ background-color: rgba(0, 0, 0, 0.2);
+ border-color: 1px solid $default;
+ }
+ }
+ &.with-search.open .btn-default + .dropdown-menu {
+ .bs-searchbox .form-control {
+ background-color: rgba(0, 0, 0, 0.35);
+ }
+ .no-results {
+ color: $default-text;
+ }
+ }
+ .notify {
+ color: $default-text;
+ }
+}
+
+.bootstrap-tagsinput {
+ background-color: transparent;
+ border: 1px solid $input-border;
+ box-shadow: none;
+ color: #555555;
+ max-width: 100%;
+ font-size: 14px;
+ line-height: 26px;
+ width: 100%;
+ &.form-control {
+ display: block;
+ width: 100%;
+ }
+ .tag {
+ border-radius: 3px;
+ font-weight: $font-normal;
+ font-size: 11px;
+ padding: 4px 8px;
+ & [data-role="remove"]:hover {
+ box-shadow: none;
+ }
+ }
+ input {
+ line-height: 22px;
+ font-size: 11px;
+ min-width: 53px;
+ }
+}
+
+.progress-bar-primary {
+ background-color: $primary;
+}
+
+.progress-bar-success {
+ background-color: $success-light;
+}
+
+.progress-bar-warning {
+ background-color: $warning;
+}
+
+.progress-bar-danger {
+ background-color: $danger;
+}
+
+.has-success .input-group-addon {
+ border: none;
+}
+
+.input-group > span.addon-left {
+ border-top-left-radius: 5px;
+ border-bottom-left-radius: 5px;
+}
+
+.input-group > span.addon-right {
+ border-top-right-radius: 5px;
+ border-bottom-right-radius: 5px;
+}
+
+.sub-little-text{
+ font-size: 12px;
+}
\ No newline at end of file
diff --git a/src/app/theme/theme.scss b/src/app/theme/theme.scss
index ae7ca054..b19f94bd 100644
--- a/src/app/theme/theme.scss
+++ b/src/app/theme/theme.scss
@@ -9,3 +9,4 @@
@import "sass/preloader";
@import "sass/socicon";
@import "sass/table";
+@import "sass/form";