refactor(mails): routed mails

pull/3/head
alex 2016-01-04 16:36:41 +03:00
parent 40fcb40b9e
commit f5699120e0
19 changed files with 665 additions and 550 deletions

View File

@ -50,7 +50,8 @@
"angular-ui-tree": "~2.12.0",
"ionrangeslider": "~2.1.2",
"angular-bootstrap": "~0.14.3",
"angular-animate": "~1.4.8"
"angular-animate": "~1.4.8",
"textAngular": "~1.4.6"
},
"overrides": {
"amcharts": {

View File

@ -1,327 +0,0 @@
/**
* @author v.lugovsky
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.mail')
.controller('MailCtrl', MailCtrl);
/** @ngInject */
function MailCtrl($scope, $location, $sce, composeModal) {
$scope.showMail = false;
$scope.messages = [
{
"id": "4563faass",
"name": "Nasta Linnie",
"subject": "Great text",
"date": "2015-08-28T07:57:09",
"important": true,
"body": $sce.trustAsHtml("<p>Hey John, </p><p>Check out this cool text.</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"attachment": "poem.txt",
"draft": false,
"trash": false,
"position": "Great Employee",
"tag": "friend"
},
{
"id": "4563fdfvd",
"name": "Nasta Linnie",
"subject": "Lores ipsum",
"date": "2015-11-19T03:30:45",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ex mauris, ultrices vel lectus quis, scelerisque hendrerit ipsum. Suspendisse ullamcorper turpis neque, eget dapibus magna placerat ac. Suspendisse rhoncus ligula ac mi tempus varius ut sed lacus. Sed et commodo nulla, et placerat leo. Nam rhoncus vulputate sem non pharetra. Praesent fringilla massa in laoreet convallis. Aliquam lobortis dui a congue facilisis. Aenean dapibus semper semper. Quisque aliquam, nibh dapibus interdum condimentum, ex velit tempor tortor, at vestibulum magna leo quis leo. Morbi pulvinar varius erat ac rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In hac habitasse platea dictumst.</p>" +
"<br><p>Cras rhoncus quam ipsum, vel dignissim nisl egestas sed. Aliquam erat volutpat. Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"position": "Great Employee",
"tag": "study",
"draft": false,
"trash": false
},
{
"id": "4563zxcss",
"name": "Nasta Linnie",
"subject": "Lores ipsum",
"date": "2015-10-19T03:30:45",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"position": "Great Employee",
"tag": "work",
"draft": false,
"trash": true
},
{
"id": "8955sddf",
"name": "Nick Cat",
"subject": "New Design",
"date": "2015-05-05T12:59:45",
"important": true,
"body": $sce.trustAsHtml("<p>Hey John, Consectetur adipiscing elit</p><br>" +
"<p>Cras rhoncus quam ipsum, vel dignissim nisl egestas sed. Aliquam erat volutpat. Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"attachment": "design.psd",
"draft": false,
"trash": false,
"tag": "work"
},
{
"id": "8955sdfcc",
"name": "Nick Cat",
"subject": "Gift card",
"date": "2015-07-18T10:19:01",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Consectetur adipiscing elit, Lorem ipsum dolor sit amet</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"draft": false,
"trash": false,
"tag": "study"
},
{
"id": "8955asewf",
"name": "Nick Cat",
"subject": "Some news",
"date": "2015-09-23T03:04:10",
"important": true,
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"draft": false,
"trash": false,
"tag": "work"
},
{
"id": "8955asdff",
"name": "Nick Cat",
"subject": "Some news ",
"date": "2015-09-23T03:04:10",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"draft": true,
"trash": false,
"tag": "work"
},
{
"id": "2334uudsa",
"name": "Kostya Danovsky",
"subject": "Street Art",
"date": "2015-11-22T10:05:09",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><p>Aliquam eu facilisis eros, quis varius est.</p>" +
"<p>Consectetur adipiscing elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>" +
"<p>Lorem ipsum dolor sit amet! Nullam imperdiet justo a ipsum laoreet euismod.</p>" +
"<br><p>Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed." +
"Sed quis orci sed nisl sagittis viverra id at mauris. Nam venenatis mi nibh. Sed fringilla mattis vehic</p>"),
"pic": "img/Kostya.png",
"email": "schwartzalford@mail.com",
"position": "Technical Chef",
"draft": false,
"attachment": "file.doc",
"trash": false,
"tag" : "family"
},
{
"id": "2334aefvv",
"name": "Kostya Danovsky",
"subject": "New product",
"date": "2015-06-22T06:26:10",
"important": true,
"body": $sce.trustAsHtml("<p>Hello John, </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Consectetur adipiscing elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>" +
"<p>Aliquam eu facilisis eros, quis varius est. Nullam imperdiet justo a ipsum laoreet euismod.</p>" +
"<br><p>Nulla facilisi. Nulla congue, arcu eget blandit lacinia, leo ante ullamcorper lectus, vel pulvinar justo ipsum vitae justo." +
"Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed. Sed quis orci sed nisl sagittis viverra id at mauris. Nam venenatis mi nibh. Sed fringilla mattis vehic</p>"),
"pic": "img/Kostya.png",
"email": "schwartzalford@mail.com",
"position": "Technical Chef",
"draft": false,
"trash": false,
"tag" : "family"
},
{
"id": "8223xzxfn",
"name": "Andrey Hrabouski",
"subject": "Skype moji",
"date": "2015-07-16T06:47:53",
"important": false,
"body": $sce.trustAsHtml("<p>Hello John, </p><p>Aliquam sodales sem in nibh pellentesque</p>" +
"<p>Lorem ipsum dolor I find moji in skype sit amet!.</p>"),
"pic": "img/Andrey.png",
"email": "lakeishaphillips@mail.com",
"position": "Mobile Developer",
"tag" : 'family',
"draft": false,
"trash": true
},
{
"id": "8223sdffn",
"name": "Andrey Hrabouski",
"subject": "My App",
"date": "2015-06-20T07:05:02",
"important": false,
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Consectetur My Falasson App elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>"),
"pic": "img/Andrey.png",
"email": "lakeishaphillips@mail.com",
"position": "Mobile Developer",
"draft": false,
"trash": false,
"tag" : 'family',
"spam": true
},
{
"id": "9391xdsff",
"name": "Vlad Lugovsky",
"subject": "Cool",
"date": "2015-03-31T11:52:58",
"important": false,
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Aliquam sodales sem in nibh pellentesque</p>" +
"<p>Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed.</p>"),
"pic": "img/Vlad.png",
"email": "carlsongoodman@mail.com",
"my": true,
"position": "Fullstack man",
"tag": "study",
"draft": false,
"trash": false,
"spam": false
},
{
"id": "9391xdsff",
"name": "Vlad Lugovsky",
"subject": "What next",
"date": "2015-03-31T11:52:58",
"important": false,
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Esse esse labore tempor ullamco ullamco. Id veniam laborum c.</p>"),
"pic": "img/Vlad.png",
"email": "carlsongoodman@mail.com",
"my": true,
"position": "Fullstack man",
"tag": "study",
"draft": true,
"trash": false,
"spam": false
}
].sort(function (a, b) {
if (a.date > b.date) return 1;
if (a.date < b.date) return -1;
}).reverse();
$scope.tabs = [
{
label: 'inbox',
name: 'Inbox',
"newMails" : 7,
filter: function (messages) {
return messages.filter(function (m) {
return !m.trash && !m.draft && !m.spam && !m.my
});
}
},
{
label: 'sentMail',
name: 'Sent Mail',
filter: function (messages) {
return messages.filter(function (m) {
return m.my && !m.trash && !m.draft
});
}
},
{
label: 'important',
name: 'Important',
filter: function (messages) {
return messages.filter(function (m) {
return m.important && !m.trash && !m.draft
});
}
},
{
label: 'draft',
name: 'Draft',
"newMails" : 2,
filter: function (messages) {
return messages.filter(function (m) {
return m.draft && !m.trash
});
}
},
{
label: 'spam',
name: 'Spam',
filter: function (messages) {
return messages.filter(function (m) {
return m.spam && !m.trash
});
}
},
{
label: 'trash',
name: 'Trash',
filter: function (messages) {
return messages.filter(function (m) {
return m.trash
});
}
}];
$scope.selectTab = function (tab) {
$scope.tab = tab;
$scope.currentMessages = $scope.tabs[tab].filter($scope.messages);
$scope.mail = $scope.currentMessages[0];
$scope.showMail = false;
//var mailId = $scope.mail ? $scope.mail.id : '';
//$location.path("/mail/"+$scope.tabs[tab].label+"/"+ mailId);
};
$scope.selectMail = function (mail) {
$scope.mail = mail;
$scope.showMail = true;
//$location.path("/mail/"+$scope.tabs[$scope.tab].label+"/"+ mail.id);
};
$scope.isSelectedTab = function (tab) {
return $scope.tab === tab;
};
function findTabByLabel(label) {
var i = 0;
while (label && i < $scope.tabs.length && $scope.tabs[i].label.toLowerCase() !== label.toLowerCase())i++;
return i === $scope.tabs.length ? 0 : i;
}
function findMessageById(id) {
var i = 0;
while (id && i < $scope.currentMessages.length && $scope.currentMessages[i].id !== id)i++;
return i === $scope.currentMessages.length ? 0 : i;
}
$scope.tab = findTabByLabel(0);
$scope.currentMessages = $scope.tabs[$scope.tab].filter($scope.messages);
$scope.mail = $scope.currentMessages[findMessageById(0)];
$scope.showCompose = function(){
composeModal.open({
subject : "hello world"
})
}
}
})();

View File

@ -0,0 +1,34 @@
/**
* @author v.lugovsky
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.mail')
.controller('MailTabCtrl', MailTabCtrl);
/** @ngInject */
function MailTabCtrl($scope, $state, $stateParams, composeModal, mailMessages) {
$scope.selectTab = function (tab) {
$state.go('mail.label',{
label : tab
})
};
console.log($state);
$scope.showCompose = function(subject, to , text){
composeModal.open({
subject : subject,
to: to,
text: text
})
};
$scope.tabs = mailMessages.getTabs();
$scope.currentTabLabel = $stateParams.label ? $stateParams.label : $scope.tabs[0].label;
}
})();

View File

@ -1,20 +0,0 @@
/**
* @author v.lugovsky
* created on 16.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.mail')
.directive('blurEmail', blurEmail);
/** @ngInject */
function blurEmail() {
return {
restrict: 'EA',
controller: 'MailCtrl',
templateUrl: 'app/pages/mail/blurEmail.html'
};
}
})();

View File

@ -1,172 +0,0 @@
<div class="mail-container">
<div class="row letter-layout">
<div class="mail-navigation-container">
<div class="compose-button">
<button type="button" class="btn compose-button" ng-click="showCompose()">
Compose
</button>
</div>
<div ng-repeat="t in tabs" class="mail-navigation {{tab == $index ? 'active' : ''}}" ng-click="selectTab($index)">
{{t.name}}<span class="new-mails" ng-show="t.newMails">{{t.newMails}}</span>
</div>
<div class="labels">
<div class="labels-title">
<h5 class="label-header">
Labels
</h5>
</div>
<div class="label-item">
<span class="tag label work">Work</span>
</div>
<div class="label-item">
<span class="tag label family">Family</span>
</div>
<div class="label-item">
<span class="tag label friend">Friend</span>
</div>
<div class="label-item">
<span class="tag label study">Study</span>
</div>
</div>
<div class="add-label-container">
<i class="ion-plus-round"></i><span class="label-input-stub">Add new label</span>
</div>
</div>
<div ng-show="!showMail" class="side-message-navigation">
<div class="messages-control side-message-navigation-item">
<label class="checkbox-inline custom-checkbox nowrap margin-left">
<span class="select-all-label">Select All</span>
<input type="checkbox">
</label>
<button type="button" class="btn btn-icon margin-left"><i class="ion-refresh"></i></button>
<div class="btn-group margin-left">
<button type="button" class="btn btn-icon dropdown-toggle more-button" data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">More<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href>Action</a></li>
<li><a href>Another action</a></li>
<li><a href>Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href>Separated link</a></li>
</ul>
</div>
</div>
<div class="messages">
<table>
<tr ng-repeat="m in currentMessages | orderBy:'-date'"
class="side-message-navigation-item little-human {{m == mail ? 'active' : ''}} {{m.tag}}"
ng-click="selectMail(m)">
<td>
<div class="mail-checkbox">
<label class="checkbox-inline custom-checkbox nowrap margin-left">
<span></span>
<input type="checkbox">
</label>
</div>
</td>
<td><img ng-src="{{m.name.split(' ')[0] | profilePicture}}" class="little-human-picture"></td>
<td >
<div class="margin-left">
<div><span class="name">{{m.name.split(' ')[0] + ' ' + m.name.split(' ')[1][0]}}.</span></div>
<div><span class="tag label label-primary {{m.tag}}">{{m.tag}}</span></div>
</div>
</td>
<td >
<div class="margin-left additional-info">
<span class="subject"> {{m.subject}}</span>
</div>
</td>
<td>
<div class="mail-body-part">{{m.body | plainText}}</div>
</td>
<td class="date">
<span>{{m.date | date : 'MMM d HH:mm'}}</span>
</td>
</tr>
</table>
</div>
</div>
<div ng-show="showMail" class="message-container with-scroll">
<div class="message" ng-show="mail">
<div class="row">
<button ng-click="showMail=false" type="button" class="back-button btn btn-default btn-with-icon"><i
class="ion-chevron-left"></i>Back
</button>
</div>
<div class="person-info row">
<div class="col-lg-4 col-md-12 no-padding">
<img ng-src="{{mail.name.split(' ')[0] | profilePicture}}" class="human-picture">
<div class="name">
<h2 class="name-h">{{mail.name.split(' ')[0]}}</h2>
<h2 class="name-h second-name">{{mail.name.split(' ')[1]}}</h2>
<div>
<span class="mail-tag tag label {{mail.tag}}">{{mail.tag}}</span>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 no-padding">
<div class="contact-info phone-email">
<div>
<i class="ion-iphone"></i>
<span class="phone">777-777-7777</span>
</div>
<div>
<i class="ion-email"></i>
<span class="email">{{mail.email}}</span>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 no-padding">
<div class="contact-info position-address">
<div>
<span class="position">{{mail.position}}</span>
</div>
<div>
<span class="address">12 Nezavisimosti st. Vilnius, Lithuania</span>
</div>
</div>
</div>
</div>
<div class="row">
</div>
<div class="line"></div>
<div class="message-details">
<span class="subject">{{mail.subject}} </span>
<span class="date">• {{mail.date | date : 'h:mm a MMMM d '}}</span>
</div>
<div class="line"></div>
<div ng-bind-html="mail.body" class="message-body">
</div>
<div class="line"></div>
<div class="attachment" ng-show="mail.attachment">
<span class="file-links">1 Attachment - <a href>View</a> | <a href>Download</a></span>
<div>
<i class="file-icon ion-document"></i>
<span class="file-name">{{mail.attachment}}</span>
</div>
</div>
<div class="line" ng-show="mail.attachment"></div>
<div class="answer-container">
<button type="button" class="btn btn-with-icon"><i class="ion-reply"></i>Reply</button>
<button type="button" class="btn btn-with-icon"><i class="ion-forward"></i>Forward</button>
<button type="button" class="btn btn-with-icon"><i class="ion-printer"></i>Print</button>
<button type="button" class="btn btn-with-icon"><i class="ion-android-remove-circle"></i>Spam</button>
<button type="button" class="btn btn-with-icon"><i class="ion-android-delete"></i>Delete</button>
</div>
</div>
<div ng-show="!mail">
<h5 ng-class="text-center">Nothing to show</h5>
</div>
</div>
</div>
</div>

View File

@ -0,0 +1,21 @@
/**
* @author a.demeshko
* created on 28.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.mail')
.controller('MailDetailCtrl', MailDetailCtrl);
/** @ngInject */
function MailDetailCtrl($scope, $state,$stateParams, mailMessages) {
$scope.mail = mailMessages.getMessageById($stateParams.id);
$scope.back = function(){
$state.go('mail.label', {
label: 'inbox'
})
}
}
})();

View File

@ -0,0 +1,78 @@
<div class="message-container">
<div class="message">
<div class="row">
<button ng-click="back()" type="button" class="back-button btn btn-default btn-with-icon"><i
class="ion-chevron-left"></i>Back
</button>
</div>
<div class="person-info row">
<div class="col-lg-4 col-md-12 no-padding">
<img ng-src="{{mail.name.split(' ')[0] | profilePicture}}" class="human-picture">
<div class="name">
<h2 class="name-h">{{mail.name.split(' ')[0]}}</h2>
<h2 class="name-h second-name">{{mail.name.split(' ')[1]}}</h2>
<div>
<span class="mail-tag tag label {{mail.tag}}">{{mail.tag}}</span>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 no-padding">
<div class="contact-info phone-email">
<div>
<i class="ion-iphone"></i>
<span class="phone">777-777-7777</span>
</div>
<div>
<i class="ion-email"></i>
<span class="email">{{mail.email}}</span>
</div>
</div>
</div>
<div class="col-lg-4 col-md-6 col-xs-12 no-padding">
<div class="contact-info position-address">
<div>
<span class="position">{{mail.position}}</span>
</div>
<div>
<span class="address">12 Nezavisimosti st. Vilnius, Lithuania</span>
</div>
</div>
</div>
</div>
<div class="row">
</div>
<div class="line"></div>
<div class="message-details">
<span class="subject">{{mail.subject}} </span>
<span class="date">• {{mail.date | date : 'h:mm a MMMM d '}}</span>
</div>
<div class="line"></div>
<div ng-bind-html="mail.body" class="message-body">
</div>
<div class="line"></div>
<div class="attachment" ng-show="mail.attachment">
<span class="file-links">1 Attachment - <a href>View</a> | <a href>Download</a></span>
<div>
<i class="file-icon ion-document"></i>
<span class="file-name">{{mail.attachment}}</span>
</div>
</div>
<div class="line" ng-show="mail.attachment"></div>
<div class="answer-container">
<button type="button" class="btn btn-with-icon" ng-click="showCompose(mail.subject,mail.email,'')"><i class="ion-reply"></i>Reply</button>
<button type="button" class="btn btn-with-icon" ng-click="showCompose(mail.subject,'',mail.body)"><i class="ion-forward"></i>Forward</button>
<button type="button" class="btn btn-with-icon"><i class="ion-printer"></i>Print</button>
<button type="button" class="btn btn-with-icon"><i class="ion-android-remove-circle"></i>Spam</button>
<button type="button" class="btn btn-with-icon"><i class="ion-android-delete"></i>Delete</button>
</div>
</div>
<div ng-show="!mail">
<h5 ng-class="text-center">Nothing to show</h5>
</div>
</div>

View File

@ -0,0 +1,25 @@
/**
* @author a.demeshko
* created on 28.12.2015
*/
(function () {
'use strict';
angular.module('BlurAdmin.pages.mail')
.controller('MailListCtrl', MailListCtrl);
/** @ngInject */
function MailListCtrl($scope, $state, $stateParams, mailMessages) {
$scope.messages = mailMessages.getMessagesByLabel($stateParams.label);
$scope.$parent.currentTabLabel = $stateParams.label;
$scope.selectMail = function (mail) {
$state.go('mail.detail', {
id: mail.id,
back: $stateParams.label
})
};
}
})();

View File

@ -0,0 +1,56 @@
<div class="side-message-navigation">
<div class="messages-control side-message-navigation-item">
<label class="checkbox-inline custom-checkbox nowrap margin-left">
<span class="select-all-label">Select All</span>
<input type="checkbox" id="inlineCheckbox01" value="option1">
</label>
<button type="button" class="btn btn-icon margin-left"><i class="ion-refresh"></i></button>
<div class="btn-group margin-left">
<button type="button" class="btn btn-icon dropdown-toggle more-button" data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">More<span class="caret"></span>
</button>
<ul class="dropdown-menu">
<li><a href>Action</a></li>
<li><a href>Another action</a></li>
<li><a href>Something else here</a></li>
<li role="separator" class="divider"></li>
<li><a href>Separated link</a></li>
</ul>
</div>
</div>
<div class="messages">
<table>
<tr ng-repeat="m in messages track by m.id | orderBy:'-date'"
class="side-message-navigation-item little-human shineHover {{m.tag}}"
ng-click="selectMail(m)">
<td>
<div class="mail-checkbox">
<label class="checkbox-inline custom-checkbox nowrap margin-left">
<span></span>
<input type="checkbox">
</label>
</div>
</td>
<td><img ng-src="{{m.name.split(' ')[0] | profilePicture}}" class="little-human-picture"></td>
<td >
<div class="margin-left">
<div><span class="name">{{m.name.split(' ')[0] + ' ' + m.name.split(' ')[1][0]}}.</span></div>
<div><span class="tag label label-primary {{m.tag}}">{{m.tag}}</span></div>
</div>
</td>
<td >
<div class="margin-left additional-info">
<span class="subject"> {{m.subject}}</span>
</div>
</td>
<td>
<div class="mail-body-part">{{m.body | plainText}}</div>
</td>
<td class="date">
<span>{{m.date | date : 'MMM d HH:mm'}}</span>
</td>
</tr>
</table>
</div>
</div>

View File

@ -1,7 +1,44 @@
<div class="row">
<div class="row mail-row">
<div class="col-md-12 col-sm-12">
<blur-panel class-container="with-scroll mail-panel">
<blur-email></blur-email>
<blur-panel class-container="xmedium-panel mail-panel">
<div class="mail-container">
<div class="row letter-layout">
<div class="mail-navigation-container">
<div class="compose-button">
<button type="button" class="btn compose-button" ng-click="showCompose('','','')">
Compose
</button>
</div>
<div ng-repeat="t in tabs" class="mail-navigation {{currentTabLabel == t.label ? 'active' : ''}}"
ng-click="selectTab(t.label)">
{{t.name}}<span class="new-mails" ng-show="t.newMails">{{t.newMails}}</span>
</div>
<div class="labels">
<div class="labels-title">
<h5 class="label-header">
Labels
</h5>
</div>
<div class="label-item">
<span class="tag label work">Work</span>
</div>
<div class="label-item">
<span class="tag label family">Family</span>
</div>
<div class="label-item">
<span class="tag label friend">Friend</span>
</div>
<div class="label-item">
<span class="tag label study">Study</span>
</div>
</div>
<div class="add-label-container">
<i class="ion-plus-round"></i><span class="label-input-stub">Add new label</span>
</div>
</div>
<ui-view></ui-view>
</div>
</div>
</blur-panel>
</div>
</div>

View File

@ -6,15 +6,29 @@
'use strict';
angular.module('BlurAdmin.pages.mail', [])
.config(routeConfig);
.config(routeConfig);
/** @ngInject */
function routeConfig($stateProvider) {
function routeConfig($stateProvider,$urlRouterProvider) {
$stateProvider
.state('mail', {
url: '/mail',
templateUrl: 'app/pages/mail/mail.html'
});
.state('mail', {
url: '/mail',
abstract: true,
templateUrl: 'app/pages/mail/mail.html',
controller: "MailTabCtrl",
controllerAs: "tabCtrl"
}).state('mail.label', {
url: '/:label',
templateUrl: 'app/pages/mail/list/mailList.html',
controller: "MailListCtrl",
controllerAs: "listCtrl"
}).state('mail.detail', {
url: '/detail/:id',
templateUrl: 'app/pages/mail/detail/mailDetail.html',
controller: "MailDetailCtrl",
controllerAs: "detailCtrl"
});
$urlRouterProvider.when('/mail','/mail/inbox');
}
})();

View File

@ -1 +1,26 @@
<h1>Subject:{{subject}}</h1>
<div class="compose-header">
<span>
New message
</span>
<span class="header-controls">
<i class="ion-minus-round"></i>
<i class="ion-arrow-resize"></i>
<i ng-click="close()" class="ion-close-round"></i>
</span>
</div>
<div >
<input type="text" class="form-control compose-input" placeholder="To" ng-model="to">
<input type="text" class="form-control compose-input" placeholder="Subject" ng-model="subject">
<div class="compose-container">
<text-angular-toolbar ta-toolbar-class="toolbarMain" name="toolbarMain" ta-toolbar="[['h1','h2','h3','bold','italics', 'underline', 'justifyLeft', 'justifyCenter', 'justifyRight', 'justifyFull']]"></text-angular-toolbar>
<text-angular name="htmlcontent" ta-target-toolbars='toolbarMain,toolbarFooter' ng-model="text"></text-angular>
</div>
</div>
<div class="compose-footer">
<button type="button" ng-click="close()" class="btn btn-send">Send</button>
<text-angular-toolbar ta-toolbar-class="toolbarFooter" name="toolbarFooter" ta-toolbar="[['insertLink', 'insertImage', 'html', 'quote','insertVideo']]"></text-angular-toolbar>
<div class="footer-controls">
<i class="footer-control-first compose-footer-icon ion-arrow-down-b"></i>
<i ng-click="close()" class="compose-footer-icon ion-android-delete"></i>
</div>
</div>

View File

@ -9,12 +9,13 @@
.controller('composeBoxCtrl', composeBoxCtrl);
/** @ngInject */
function composeBoxCtrl($scope, $uibModalInstance) {
$scope.ok = function () {
$uibModalInstance.close($scope.selected.item);
};
function composeBoxCtrl($scope, $uibModalInstance, subject, to, text) {
$scope.cancel = function () {
$scope.subject = subject;
$scope.to = to;
$scope.text = text;
console.log(subject, to , text);
$scope.close = function () {
$uibModalInstance.dismiss('cancel');
};
}

View File

@ -114,7 +114,7 @@
{
title: 'Mail',
icon: 'ion-ios-email-outline',
root: '#/mail'
root: '#/mail/inbox'
},
{
title: 'Maps',

View File

@ -16,9 +16,17 @@
animation: false,
templateUrl: 'app/theme/components/composeBox/compose.html',
controller: 'composeBoxCtrl',
size: size,
size: 'slim',
resolve: {
subject : options.subject
subject: function () {
return options.subject;
},
to: function () {
return options.to;
},
text: function () {
return options.text;
}
}
});
}

View File

@ -0,0 +1,236 @@
/**
* @author a.demeshko
* created on 12/29/15
*/
(function () {
'use strict';
angular.module('BlurAdmin.theme')
.service('mailMessages', mailMessages);
/** @ngInject */
function mailMessages($sce) {
var messages = [
{
"id": "4563faass",
"name": "Nasta Linnie",
"subject": "Great text",
"date": "2015-08-28T07:57:09",
"body": $sce.trustAsHtml("<p>Hey John, </p><p>Check out this cool text.</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"attachment": "poem.txt",
"position": "Great Employee",
"tag": "friend",
"labels": ['inbox']
},
{
"id": "4563fdfvd",
"name": "Nasta Linnie",
"subject": "Lores ipsum",
"date": "2015-11-19T03:30:45",
"important": false,
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris ex mauris, ultrices vel lectus quis, scelerisque hendrerit ipsum. Suspendisse ullamcorper turpis neque, eget dapibus magna placerat ac. Suspendisse rhoncus ligula ac mi tempus varius ut sed lacus. Sed et commodo nulla, et placerat leo. Nam rhoncus vulputate sem non pharetra. Praesent fringilla massa in laoreet convallis. Aliquam lobortis dui a congue facilisis. Aenean dapibus semper semper. Quisque aliquam, nibh dapibus interdum condimentum, ex velit tempor tortor, at vestibulum magna leo quis leo. Morbi pulvinar varius erat ac rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; In hac habitasse platea dictumst.</p>" +
"<br><p>Cras rhoncus quam ipsum, vel dignissim nisl egestas sed. Aliquam erat volutpat. Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"position": "Great Employee",
"tag": "study",
"labels": ['inbox']
},
{
"id": "4563zxcss",
"name": "Nasta Linnie",
"subject": "Lores ipsum",
"date": "2015-10-19T03:30:45",
"important": false,
"body": $sce.trustAsHtml("<p>Hey Nasta, </p><p>Lorem ipsum dolor sit amet, consectetur adipiscing elit</p>"),
"pic": "img/Nasta.png",
"email": "petraramsey@mail.com",
"position": "Great Employee",
"tag": "work",
"labels": ['sent', 'important']
},
{
"id": "8955sddf",
"name": "Nick Cat",
"subject": "New Design",
"date": "2015-05-05T12:59:45",
"body": $sce.trustAsHtml("<p>Hey John, Consectetur adipiscing elit</p><br>" +
"<p>Cras rhoncus quam ipsum, vel dignissim nisl egestas sed. Aliquam erat volutpat. Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"attachment": "design.psd",
"tag": "work",
"labels": ['inbox']
},
{
"id": "8955sdfcc",
"name": "Nick Cat",
"subject": "Gift card",
"date": "2015-07-18T10:19:01",
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Consectetur adipiscing elit, Lorem ipsum dolor sit amet</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"tag": "study",
"labels": ['inbox']
},
{
"id": "8955asewf",
"name": "Nick Cat",
"subject": "Some news",
"date": "2015-09-23T03:04:10",
"body": $sce.trustAsHtml("<p>Hey John, </p><br><p>Integer eu nisl elit. Donec malesuada diam vitae tellus luctus tincidunt. Donec tempus blandit neque, rutrum egestas ipsum sagittis tempor. Curabitur volutpat ligula enim, nec vehicula purus molestie at. Sed a facilisis enim, nec molestie magna. Donec in augue non est viverra dapibus vel tempus risus. Nam porttitor purus sit amet hendrerit ullamcorper. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.</p>"),
"pic": "img/Nick.png",
"email": "barlowshort@mail.com",
"position": "Graphical designer",
"tag": "work",
"labels": ['inbox', 'important']
},
{
"id": "2334uudsa",
"name": "Kostya Danovsky",
"subject": "Street Art",
"date": "2015-11-22T10:05:09",
"body": $sce.trustAsHtml("<p>Hey John, </p><p>Aliquam eu facilisis eros, quis varius est.</p>" +
"<p>Consectetur adipiscing elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>" +
"<p>Lorem ipsum dolor sit amet! Nullam imperdiet justo a ipsum laoreet euismod.</p>" +
"<br><p>Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed." +
"Sed quis orci sed nisl sagittis viverra id at mauris. Nam venenatis mi nibh. Sed fringilla mattis vehic</p>"),
"pic": "img/Kostya.png",
"email": "schwartzalford@mail.com",
"position": "Technical Chef",
"attachment": "file.doc",
"tag": "family",
"labels": ['inbox', 'important']
},
{
"id": "2334aefvv",
"name": "Kostya Danovsky",
"subject": "New product",
"date": "2015-06-22T06:26:10",
"body": $sce.trustAsHtml("<p>Hello John, </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Consectetur adipiscing elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>" +
"<p>Aliquam eu facilisis eros, quis varius est. Nullam imperdiet justo a ipsum laoreet euismod.</p>" +
"<br><p>Nulla facilisi. Nulla congue, arcu eget blandit lacinia, leo ante ullamcorper lectus, vel pulvinar justo ipsum vitae justo." +
"Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed. Sed quis orci sed nisl sagittis viverra id at mauris. Nam venenatis mi nibh. Sed fringilla mattis vehic</p>"),
"pic": "img/Kostya.png",
"email": "schwartzalford@mail.com",
"position": "Technical Chef",
"tag": "family",
"labels": ['inbox', 'important']
},
{
"id": "2334cvdss",
"name": "Kostya Danovsky",
"subject": "Old product",
"date": "2015-06-22T06:26:10",
"body": $sce.trustAsHtml("<p>Hello John, </p>" +
"<p>Consectetur adipiscing elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>" +
"<br>"+
"<p>Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed. Sed quis orci sed nisl sagittis viverra id at mauris. Nam venenatis mi nibh. Sed fringilla mattis vehic</p>"),
"pic": "img/Kostya.png",
"email": "schwartzalford@mail.com",
"position": "Technical Chef",
"tag": "study",
"labels": ['trash']
},
{
"id": "8223xzxfn",
"name": "Andrey Hrabouski",
"subject": "Skype moji",
"date": "2015-07-16T06:47:53",
"body": $sce.trustAsHtml("<p>Hello John, </p><p>Aliquam sodales sem in nibh pellentesque</p>" +
"<p>Lorem ipsum dolor I find moji in skype sit amet!.</p>"),
"pic": "img/Andrey.png",
"email": "lakeishaphillips@mail.com",
"position": "Mobile Developer",
"tag": 'family',
"labels": ['trash']
},
{
"id": "8223sdffn",
"name": "Andrey Hrabouski",
"subject": "My App",
"date": "2015-06-20T07:05:02",
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Consectetur My Falasson App elit. Aliquam sodales sem in nibh pellentesque, ac dignissim mi dapibus.</p>"),
"pic": "img/Andrey.png",
"email": "lakeishaphillips@mail.com",
"position": "Mobile Developer",
"tag": 'family',
"labels": ['spam']
},
{
"id": "9391xdsff",
"name": "Vlad Lugovsky",
"subject": "Cool",
"date": "2015-03-31T11:52:58",
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Aliquam sodales sem in nibh pellentesque</p>" +
"<p>Cras tincidunt fermentum lectus, quis scelerisque lorem volutpat sed.</p>"),
"pic": "img/Vlad.png",
"email": "carlsongoodman@mail.com",
"position": "Fullstack man",
"tag": "study",
"labels": ['draft']
},
{
"id": "9391xdsff",
"name": "Vlad Lugovsky",
"subject": "What next",
"date": "2015-03-31T11:52:58",
"body": $sce.trustAsHtml("<p>Hey Vlad. </p><p>Lorem ipsum dolor sit amet!</p>" +
"<p>Esse esse labore tempor ullamco ullamco. Id veniam laborum c.</p>"),
"pic": "img/Vlad.png",
"email": "carlsongoodman@mail.com",
"position": "Fullstack man",
"tag": "study",
"labels": ['sent']
}
].sort(function (a, b) {
if (a.date > b.date) return 1;
if (a.date < b.date) return -1;
}).reverse();
var tabs = [{
label: 'inbox',
name: 'Inbox',
newMails: 7
}, {
label: 'sent',
name: 'Sent Mail'
}, {
label: 'important',
name: 'Important'
}, {
label: 'draft',
name: 'Draft',
newMails: 2
}, {
label: 'spam',
name: 'Spam'
}, {
label: 'trash',
name: 'Trash'
}];
return{
getTabs : function(){
return tabs
},
getMessagesByLabel : function(label){
return messages.filter(function(m){
return m.labels.indexOf(label) != -1;
});
},
getMessageById : function(id){
return messages.filter(function(m){
return m.id == id;
})[0];
}
}
}
})();

View File

@ -11,6 +11,7 @@
'angular-chartist',
'angular.morris-chart',
'ui.tree',
'textAngular',
'BlurAdmin.theme.components'
]);

View File

@ -1,5 +1,6 @@
.letter-layout{
margin-top: -15px;
margin-right: -22px;
}
.mail-panel {
@ -54,6 +55,7 @@
}
}
.labels, .add-label-container{
margin-top: 16px;
margin-left: 22px;
@ -117,7 +119,7 @@
float: left;
padding: 0 15px;
position: relative;
min-height: 650px;
height: 550px;
overflow: scroll;
}
@ -174,10 +176,10 @@
}
.message-container {
width: calc(100% - 320px);
padding: 15px 0 10px 30px;
width: calc(100% - 300px);
padding: 15px 15px 10px 30px;
box-shadow: -4px 0 7px -2px $input-border;
overflow: inherit;
overflow-x: hidden;
}
@ -250,7 +252,7 @@
}
&:hover {
.little-human-picture {
transform: rotate(5deg);
animation: rotateReturnAnimation 0.5s;
}
color: $dribble-color;
}
@ -392,6 +394,9 @@
cursor: pointer;
}
}
.date{
white-space: nowrap;
}
}
.message-body {
@ -468,6 +473,21 @@
.second-name {
margin-top: -7px;
}
@keyframes rotateReturnAnimation {
0% {
transform: rotate(0deg);
}
50%{
transform: rotate(10deg);
}
100% {
transform: rotate(0deg);
}
}
@media screen and (max-width: 1199px) {
.name-h{
display: inline;
@ -490,7 +510,7 @@
}
.message-container {
width: calc(100% - 220px);
width: calc(100% - 200px);
}
.person-info .human-picture {
@ -539,21 +559,24 @@
}
.message-container {
width: calc(100% - 185px);
width: calc(100% - 175px);
}
.mail-body-part{
display: none;
}
.little-human .little-human-picture{
display: none;
width: 30px;
height: 30px;
}
.messages-control .more-button {
width: 50px;
}
}
@media screen and (max-width: 470px) {
.little-human .little-human-picture{
display: none;
}
.mail-navigation-container{
width: 155px
@ -564,7 +587,7 @@
}
.message-container {
width: calc(100% - 165px);
width: calc(100% - 155px);
}
.mail-navigation-container .compose-button .btn {

View File

@ -1,5 +1,79 @@
.mail-container{
div{
.compose-header {
padding: 8px 3px 8px 10px;
color: white;
font-weight: 100;
font-size: 13px;
background-color: $github-color;
}
.header-controls {
display: inline-block;
float: right;
i {
margin-right: 5px;
font-size: 14px;
cursor: pointer;
&:hover {
color: $primary-light;
}
}
}
.compose-input {
border-left: 0;
border-right: 0;
border-top: 0;
}
.compose-footer {
padding: 2px 4px;
background-color: whitesmoke;
.btn-send {
background-color: $primary-light;
color: white;
padding: 2px 10px;
margin: 3px;
font-weight: 100;
}
.btn-default{
background-color: transparent;
border: none;
}
}
.footer-controls {
float: right;
margin: 6px;
}
.compose-footer-icon {
font-size: 18px;
margin-right: 5px;
cursor: pointer;
&:hover {
color: $primary-light;
}
}
.compose-container {
background-color: whitesmoke;
.ta-text.ta-editor {
background-color: white;
}
}
.footer-control-first {
border-right: 2px solid $help-text;
display: inline-block;
padding-right: 9px;
}
.modal .modal-dialog.modal-slim {
width: 398px;
float: right;
margin-top: 10%;
}