Initial Sass and JavaScript files
This commit is contained in:
parent
6bbc6bebd4
commit
875f486890
37
UI/WebServerResources/Gruntfile.js
Normal file
37
UI/WebServerResources/Gruntfile.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
module.exports = function(grunt) {
|
||||
grunt.initConfig({
|
||||
pkg: grunt.file.readJSON('package.json'),
|
||||
|
||||
sass: {
|
||||
options: {
|
||||
includePaths: ['bower_components/foundation/scss']
|
||||
},
|
||||
dist: {
|
||||
options: {
|
||||
// outputStyle: 'compressed'
|
||||
outputStyle: 'expanded'
|
||||
},
|
||||
files: {
|
||||
'css/app.css': 'scss/app.scss',
|
||||
'css/SOGoRootPage.css': 'scss/SOGoRootPage.scss',
|
||||
'css/ContactsUI.css': 'scss/ContactsUI.scss'
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
watch: {
|
||||
grunt: { files: ['Gruntfile.js'] },
|
||||
|
||||
sass: {
|
||||
files: 'scss/**/*.scss',
|
||||
tasks: ['sass']
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
grunt.loadNpmTasks('grunt-sass');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
|
||||
grunt.registerTask('build', ['sass']);
|
||||
grunt.registerTask('default', ['build','watch']);
|
||||
}
|
209
UI/WebServerResources/js/ContactsUI.js
Normal file
209
UI/WebServerResources/js/ContactsUI.js
Normal file
|
@ -0,0 +1,209 @@
|
|||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* JavaScript for SOGoContacts */
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
angular.module('SOGo').config(['$routeProvider', function($routeProvider) {
|
||||
$routeProvider
|
||||
.when('/:addressbook_id', {
|
||||
controller: 'contactDisplayController',
|
||||
templateUrl: 'rightPanel.html'
|
||||
})
|
||||
.when('/:addressbook_id/:contact_id', {
|
||||
controller: 'contactDisplayController',
|
||||
templateUrl: 'rightPanel.html'
|
||||
})
|
||||
.otherwise({
|
||||
redirectTo: '/personal'
|
||||
});
|
||||
}]);
|
||||
|
||||
angular.module('SOGo').directive('sgFocusOn', function() {
|
||||
return function(scope, elem, attr) {
|
||||
scope.$on('sgFocusOn', function(e, name) {
|
||||
if (name === attr.sgFocusOn) {
|
||||
elem[0].focus();
|
||||
}
|
||||
});
|
||||
};
|
||||
});
|
||||
|
||||
angular.module('SOGo').factory('sgFocus', ['$rootScope', '$timeout', function ($rootScope, $timeout) {
|
||||
return function(name) {
|
||||
$timeout(function (){
|
||||
$rootScope.$broadcast('sgFocusOn', name);
|
||||
});
|
||||
}
|
||||
}]);
|
||||
|
||||
// angular.module('SOGo').provider('Contact', function() {
|
||||
// var folders = contactFolders;
|
||||
// var selectedIndex;
|
||||
// this.$get = [function() {
|
||||
// var self = this;
|
||||
// var service = {
|
||||
// getFoldersList: function() {
|
||||
// return folders
|
||||
// },
|
||||
// selectFolder: function(index) {
|
||||
// selectedIndex = index;
|
||||
// },
|
||||
// currentFolder: function() {
|
||||
// return selectedIndex;
|
||||
// }
|
||||
// };
|
||||
// return service;
|
||||
// }];
|
||||
// });
|
||||
|
||||
// angular.module('SOGo').controller('addressbookSharingModal', ['$scope', '$rootScope', '$modal', function($scope, $rootScope, $modal) {
|
||||
|
||||
// }]);
|
||||
|
||||
angular.module('SOGo').controller('addressbooksList', ['$scope', '$rootScope', '$timeout', '$modal', 'sgFocus', 'sgContact', 'sgAddressBook', function($scope, $rootScope, $timeout, $modal, focus, Contact, AddressBook) {
|
||||
// Initialize with data from template
|
||||
// $rootScope.addressbooks = new Array();
|
||||
// angular.forEach(contactFolders, function(folder, index) {
|
||||
// $rootScope.addressbooks.push(new AddressBook(folder));
|
||||
// // contactFolders[index].$omit();
|
||||
// });
|
||||
//$scope.contactFolders = contactFolders;
|
||||
$rootScope.addressbooks = contactFolders;
|
||||
$scope.select = function(rowIndex) {
|
||||
//$rootScope.selectedAddressBook = $scope.contactFolders[rowIndex];
|
||||
$scope.editMode = false;
|
||||
};
|
||||
// $rootScope.$on('AddressBook:selected', function(event, id) {
|
||||
// $rootScope.selectedAddressBook = id;
|
||||
// });
|
||||
$scope.rename = function() {
|
||||
console.debug("rename folder");
|
||||
$scope.editMode = $rootScope.addressbook.id;
|
||||
focus('folderName');
|
||||
};
|
||||
$scope.save = function() {
|
||||
console.debug("save addressbook");
|
||||
$rootScope.addressbook.$save()
|
||||
.then(function(data) {
|
||||
console.debug("saved!");
|
||||
$scope.editMode = false;
|
||||
}, function(data, status) {
|
||||
console.debug("failed");
|
||||
});
|
||||
};
|
||||
$scope.sharing = function() {
|
||||
var modal = $modal.open({
|
||||
templateUrl: 'addressbookSharing.html',
|
||||
//controller: 'addressbookSharingCtrl'
|
||||
controller: function($scope, $modalInstance) {
|
||||
$scope.closeModal = function() {
|
||||
console.debug('please close it');
|
||||
$modalInstance.close();
|
||||
};
|
||||
}
|
||||
});
|
||||
// modal.result.then(function() {
|
||||
// console.debug('close');
|
||||
// }, function() {
|
||||
// console.debug('dismiss');
|
||||
// });
|
||||
};
|
||||
// $scope.rename = function(rowIndex) {
|
||||
// var folder = $scope.contactFolders[rowIndex];
|
||||
// if (folder.owner != "nobody") {
|
||||
// showPromptDialog(l("Properties"),
|
||||
// l("Address Book Name"),
|
||||
// onAddressBookModifyConfirm,
|
||||
// folder.name);
|
||||
// }
|
||||
// };
|
||||
}]);
|
||||
|
||||
// angular.module('SOGo').controller('addressbookSharingCtrl', ['$scope', '$modalInstance', function($scope, modal) {
|
||||
// $scope.closeModal = function() {
|
||||
// console.debug('please close it');
|
||||
// modal.close();
|
||||
// };
|
||||
// }]);
|
||||
|
||||
|
||||
angular.module('SOGo').controller('contactDisplayController', ['$scope', '$rootScope', 'sgAddressBook', 'sgContact', 'sgFocus', '$routeParams', function($scope, $rootScope, AddressBook, Contact, focus, $routeParams) {
|
||||
if ($routeParams.addressbook_id &&
|
||||
($rootScope.addressbook == undefined || $routeParams.addressbook_id != $rootScope.addressbook.id)) {
|
||||
// Selected addressbook has changed
|
||||
console.debug("show addressbook " + $routeParams.addressbook_id);
|
||||
$rootScope.addressbook = AddressBook.$find($routeParams.addressbook_id);
|
||||
// Extend resulting model instance with parameters from addressbooks listing
|
||||
angular.forEach($rootScope.addressbooks, function(o, i) {
|
||||
if (o.id == $routeParams.addressbook_id) {
|
||||
angular.extend($rootScope.addressbook, o);
|
||||
$rootScope.addressbooks[i] = $rootScope.addressbook;
|
||||
}
|
||||
});
|
||||
angular.extend($rootScope.addressbook, $rootScope.selectedAddressBook);
|
||||
}
|
||||
|
||||
if ($routeParams.contact_id) {
|
||||
console.debug("show contact " + $routeParams.contact_id);
|
||||
$rootScope.addressbook.$getContact($routeParams.contact_id);
|
||||
$scope.editMode = false;
|
||||
}
|
||||
$scope.allEmailTypes = Contact.$email_types;
|
||||
$scope.allTelTypes = Contact.$tel_types;
|
||||
$scope.allUrlTypes = Contact.$url_types;
|
||||
$scope.allAddressTypes = Contact.$address_types;
|
||||
// $scope.select = function(cname) {
|
||||
// console.debug('show contact ' + cname);
|
||||
// };
|
||||
$scope.edit = function() {
|
||||
$rootScope.master_contact = angular.copy($rootScope.addressbook.contact);
|
||||
$scope.editMode = true;
|
||||
console.debug('edit');
|
||||
};
|
||||
$scope.addOrgUnit = function() {
|
||||
var i = $rootScope.addressbook.contact.$addOrgUnit('');
|
||||
focus('orgUnit_' + i);
|
||||
};
|
||||
$scope.addCategory = function() {
|
||||
var i = $rootScope.addressbook.contact.$addCategory($scope.new_category);
|
||||
focus('category_' + i);
|
||||
};
|
||||
$scope.addEmail = function() {
|
||||
var i = $rootScope.addressbook.contact.$addEmail($scope.new_email_type);
|
||||
focus('email_' + i);
|
||||
};
|
||||
$scope.addPhone = function() {
|
||||
var i = $rootScope.addressbook.contact.$addPhone($scope.new_phone_type);
|
||||
focus('phone_' + i);
|
||||
};
|
||||
$scope.addUrl = function() {
|
||||
var i = $rootScope.addressbook.contact.$addUrl('', '');
|
||||
focus('url_' + i);
|
||||
};
|
||||
$scope.addAddress = function() {
|
||||
var i = $rootScope.addressbook.contact.$addAddress('', '', '', '', '', '', '', '');
|
||||
focus('address_' + i);
|
||||
};
|
||||
$scope.save = function(contactForm) {
|
||||
console.debug("save");
|
||||
if (contactForm.$valid) {
|
||||
$rootScope.addressbook.contact.$save()
|
||||
.then(function(data) {
|
||||
console.debug("saved!");
|
||||
$scope.editMode = false;
|
||||
}, function(data, status) {
|
||||
console.debug("failed");
|
||||
});
|
||||
}
|
||||
};
|
||||
$scope.cancel = function() {
|
||||
$scope.reset();
|
||||
$scope.editMode = false;
|
||||
};
|
||||
$scope.reset = function() {
|
||||
$rootScope.addressbook.contact = angular.copy($rootScope.master_contact);
|
||||
};
|
||||
}]);
|
||||
|
||||
})();
|
8
UI/WebServerResources/js/SOGo.js
Normal file
8
UI/WebServerResources/js/SOGo.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
(function() {
|
||||
'use strict';
|
||||
|
||||
angular.module('SOGo', ['ngRoute', 'ngSanitize', 'mm.foundation', 'mm.foundation.offcanvas'])
|
||||
.constant('sgSettings', {
|
||||
'baseURL': '/SOGo/so/francis/Contacts'
|
||||
});
|
||||
})();
|
45
UI/WebServerResources/js/SOGoRootPage.js
Normal file
45
UI/WebServerResources/js/SOGoRootPage.js
Normal file
|
@ -0,0 +1,45 @@
|
|||
/* -*- Mode: javascript; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
||||
/* JavaScript for SOGoContacts */
|
||||
|
||||
'use strict';
|
||||
|
||||
var SOGoRootPageApp = angular.module('SOGoRootPage', ['SOGoAuthentication']);
|
||||
|
||||
SOGoRootPageApp.controller('loginController', ['$scope', '$http', 'SOGoAuthentication', function($scope, $http, SOGoAuthentication) {
|
||||
$scope.warning = false;
|
||||
$scope.login = function($event) {
|
||||
//$event.stopPropagation();
|
||||
$scope.warning = false;
|
||||
|
||||
var username = $scope.username,
|
||||
password = $scope.password,
|
||||
domain = $scope.domain,
|
||||
language,
|
||||
rememberLogin = $scope.rememberLogin ? 1 : 0;
|
||||
|
||||
if ($scope.loginSuffix && !username.endsWith($scope.loginSuffix)) {
|
||||
username += loginSuffix;
|
||||
domain = false;
|
||||
}
|
||||
if ($scope.language && $scope.language != 'WONoSelectionString') {
|
||||
language = $scope.language;
|
||||
}
|
||||
|
||||
SOGoAuthentication.login(username, password, domain, language, rememberLogin)
|
||||
.then(function(url) {
|
||||
window.location.href = url;
|
||||
}, function(msg) {
|
||||
$scope.warning = msg;
|
||||
});
|
||||
// $http({
|
||||
// method: 'POST',
|
||||
// url: 'http://debian.inverse.ca/SOGo/connect',
|
||||
// params: postData})
|
||||
// .success(function(data, status, headers, config) {
|
||||
// alert('success: ' + status);
|
||||
// }).error(function(data, status, headers, config) {
|
||||
// alert('error: ' + status);
|
||||
// });
|
||||
return false;
|
||||
};
|
||||
}]);
|
84
UI/WebServerResources/js/app.js
Normal file
84
UI/WebServerResources/js/app.js
Normal file
|
@ -0,0 +1,84 @@
|
|||
//$(document).foundation();
|
||||
|
||||
String.prototype.endsWith = function(suffix) {
|
||||
return this.indexOf(suffix, this.length - suffix.length) !== -1;
|
||||
};
|
||||
|
||||
String.prototype.startsWith = function(pattern, position) {
|
||||
position = angular.isNumber(position) ? position : 0;
|
||||
return this.lastIndexOf(pattern, position) === position;
|
||||
};
|
||||
|
||||
String.prototype._base64_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
|
||||
String.prototype.base64encode = function () {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3, enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
var input = this.utf8encode();
|
||||
|
||||
while (i < input.length) {
|
||||
chr1 = input.charCodeAt(i++);
|
||||
chr2 = input.charCodeAt(i++);
|
||||
chr3 = input.charCodeAt(i++);
|
||||
|
||||
enc1 = chr1 >> 2;
|
||||
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
|
||||
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
|
||||
enc4 = chr3 & 63;
|
||||
|
||||
if (isNaN(chr2)) {
|
||||
enc3 = enc4 = 64;
|
||||
} else if (isNaN(chr3)) {
|
||||
enc4 = 64;
|
||||
}
|
||||
|
||||
output = output +
|
||||
this._base64_keyStr.charAt(enc1) + this._base64_keyStr.charAt(enc2) +
|
||||
this._base64_keyStr.charAt(enc3) + this._base64_keyStr.charAt(enc4);
|
||||
}
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
String.prototype.base64decode = function() {
|
||||
var output = "";
|
||||
var chr1, chr2, chr3;
|
||||
var enc1, enc2, enc3, enc4;
|
||||
var i = 0;
|
||||
|
||||
var input = "" + this; // .replace(/[^A-Za-z0-9\+\/\=]/g, "")
|
||||
while (i < input.length) {
|
||||
enc1 = this._base64_keyStr.indexOf(input.charAt(i++));
|
||||
enc2 = this._base64_keyStr.indexOf(input.charAt(i++));
|
||||
enc3 = this._base64_keyStr.indexOf(input.charAt(i++));
|
||||
enc4 = this._base64_keyStr.indexOf(input.charAt(i++));
|
||||
|
||||
chr1 = (enc1 << 2) | (enc2 >> 4);
|
||||
chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
|
||||
chr3 = ((enc3 & 3) << 6) | enc4;
|
||||
|
||||
output = output + String.fromCharCode(chr1);
|
||||
|
||||
if (enc3 != 64) {
|
||||
output = output + String.fromCharCode(chr2);
|
||||
}
|
||||
if (enc4 != 64) {
|
||||
output = output + String.fromCharCode(chr3);
|
||||
}
|
||||
}
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
function l(key) {
|
||||
var value = key;
|
||||
if (labels[key]) {
|
||||
value = labels[key];
|
||||
}
|
||||
else if (clabels[key]) {
|
||||
value = clabels[key];
|
||||
}
|
||||
|
||||
return value;
|
||||
}
|
10
UI/WebServerResources/package.json
Normal file
10
UI/WebServerResources/package.json
Normal file
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"name": "foundation-libsass-template",
|
||||
"version": "0.0.1",
|
||||
"devDependencies": {
|
||||
"node-sass": "~0.7.0",
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-sass": "~0.8.0"
|
||||
}
|
||||
}
|
489
UI/WebServerResources/scss/ContactsUI.scss
Normal file
489
UI/WebServerResources/scss/ContactsUI.scss
Normal file
|
@ -0,0 +1,489 @@
|
|||
@import "settings";
|
||||
|
||||
//$primary-color: #75B4BF;
|
||||
//$topbar-link-bg-active: #75B4BF;
|
||||
//$topbar-bg-color: $primary-color;
|
||||
$module-color: #75B4BF;
|
||||
$module-color: #C6C543;
|
||||
$module-color: #6F5A73;
|
||||
$module-secondary-color: #8EC588; // light green
|
||||
$module-secondary-color: #3D792A; // green
|
||||
$module-secondary-color: #B996BF;
|
||||
$module-secondary-color: #B59BB9;
|
||||
$module-light-color: #F7ECFF;
|
||||
$topbar-bg-color: $module-color;
|
||||
$topbar-link-bg-active-hover: scale-color($module-secondary-color, $lightness: -14%);
|
||||
$topbar-link-bg-active: $module-secondary-color;
|
||||
$topbar-link-bg-hover: scale-color($module-color, $lightness: -14%);
|
||||
//$topbar-link-font-size: rem-calc(12);
|
||||
|
||||
//$off-canvas-link-text-size: rem-calc(12);
|
||||
|
||||
//$table-head-font-size: rem-calc(12);
|
||||
//$table-row-font-size: rem-calc(12);
|
||||
|
||||
@import "foundation";
|
||||
//@import "foundation/components/grid";
|
||||
@import "foundation/components/offcanvas";
|
||||
//@import "toolbars";
|
||||
|
||||
@mixin off-canvas-list {
|
||||
list-style-type: none;
|
||||
padding:0;
|
||||
margin:0;
|
||||
|
||||
li {
|
||||
label {
|
||||
padding: $off-canvas-label-padding;
|
||||
color: $off-canvas-label-color;
|
||||
text-transform: $off-canvas-label-text-transform;
|
||||
font-weight: $off-canvas-label-font-weight;
|
||||
background: $off-canvas-label-bg;
|
||||
border-top: $off-canvas-label-border-top;
|
||||
border-bottom: $off-canvas-label-border-bottom;
|
||||
margin: $off-canvas-label-margin;
|
||||
}
|
||||
div, a {
|
||||
display: block;
|
||||
}
|
||||
div {
|
||||
padding: $off-canvas-link-padding;
|
||||
color: $off-canvas-link-color;
|
||||
border-bottom: $off-canvas-link-border-bottom;
|
||||
&:hover { background: scale-color($tabbar-bg, $lightness: -30%); }
|
||||
transition: background 300ms ease;
|
||||
a { color: $off-canvas-link-color; }
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
//ul.off-canvas-list { @include off-canvas-list; }
|
||||
|
||||
$total-columns: 13;
|
||||
$column-gutter: 0;
|
||||
|
||||
.folders-list {
|
||||
@include off-canvas-wrap();
|
||||
ul {
|
||||
@include off-canvas-list();
|
||||
li {
|
||||
&._selected {
|
||||
background-color: #242424 !important;
|
||||
border: 0 !important;
|
||||
a {
|
||||
color: #eee !important;
|
||||
}
|
||||
}
|
||||
div {
|
||||
@include grid-row($behavior: nest);
|
||||
.folder {
|
||||
@include grid-column($columns:11);
|
||||
i {
|
||||
float: left;
|
||||
width: 30px;
|
||||
padding: $off-canvas-link-padding / 2;
|
||||
}
|
||||
}
|
||||
.actions {
|
||||
@include grid-column($columns:2);
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
a {
|
||||
&[data-ng-click] {
|
||||
//display: table-cell;
|
||||
//font-size: $off-canvas-link-text-size;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
//padding-right: 30px;
|
||||
}
|
||||
&[data-dropdown-toggle-n0] {
|
||||
//display: table-cell;
|
||||
//float: right;
|
||||
color: #fff;
|
||||
position: absolute;
|
||||
right: 7px;
|
||||
//line-height: 3em;
|
||||
}
|
||||
}
|
||||
input {
|
||||
//padding-right: 30px;
|
||||
//background-color: scale-color($f-dropdown-list-hover-bg, $lightness: 28%);
|
||||
//background-color: scale-color($tabbar-bg, $lightness: 52%);
|
||||
font-size: 1em;
|
||||
height: 23px;
|
||||
height: 1.6em;
|
||||
padding-left: 30px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.contact-picture {
|
||||
display: inline-block;
|
||||
float: left;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
border-radius: 20px;
|
||||
color: $input-disabled-bg;
|
||||
line-height: 40px;
|
||||
text-align: center;
|
||||
border: 1px solid $input-disabled-bg;
|
||||
margin-right: 1em;
|
||||
i {
|
||||
font-size: 42px;
|
||||
line-height: 36px;
|
||||
}
|
||||
}
|
||||
|
||||
#pageContent {
|
||||
@include grid-row($behavior: nest);
|
||||
|
||||
#addressbooksList {
|
||||
position: absolute;
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
top: $topbar-height;
|
||||
bottom: 0;
|
||||
background-color: #333;
|
||||
@include grid-column($columns:13); //, $collapse:true);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:3);
|
||||
}
|
||||
.newItemsToolbar {
|
||||
margin-top: rem-calc(6);
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
}
|
||||
|
||||
#rightPanel {
|
||||
#contactsList {
|
||||
position: absolute;
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
top: $topbar-height;
|
||||
bottom: 0;
|
||||
left: 23.07692%;
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
@include grid-column($columns:13);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:5);
|
||||
}
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 5px 0;
|
||||
li {
|
||||
list-style-type: none;
|
||||
//border-bottom: $topbar-divider-border-bottom;
|
||||
width: 100%;
|
||||
float: left;
|
||||
clear: left;
|
||||
//border: 2px solid #fff;
|
||||
//-webkit-border-radius: 4px;
|
||||
//-moz-border-radius: 4px;
|
||||
//border-radius: 4px;
|
||||
//transition: all 300ms ease;
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
transition: background 300ms ease;
|
||||
a {
|
||||
display: block;
|
||||
color: #666;
|
||||
//border-bottom: 1px dotted #ddd;
|
||||
//width: 100%;
|
||||
//font-size: $table-row-font-size;
|
||||
//line-height: $table-line-height;
|
||||
line-height: rem-calc(24);
|
||||
padding: $table-head-padding;
|
||||
//padding: rem-calc(8 10 18);
|
||||
//margin: 0 rem-calc(12);
|
||||
.name {
|
||||
margin: 0;
|
||||
//font-size: $table-head-font-size;
|
||||
color: $table-head-font-color;
|
||||
font-weight: $table-head-font-weight;
|
||||
}
|
||||
}
|
||||
&:hover, &:active {
|
||||
background-color: $f-dropdown-list-hover-bg;
|
||||
//background-color: scale-color($f-dropdown-list-hover-bg, $lightness: 28%);
|
||||
background-color: #fff;
|
||||
}
|
||||
&._selected, &._selected span {
|
||||
//background-color: $module-light-color;
|
||||
//background-color: $sub-nav-active-bg-hover;
|
||||
//background-color: $f-dropdown-list-hover-bg;
|
||||
background-color: $module-color;
|
||||
background-color: #fff;
|
||||
//color: $module-color;
|
||||
//color: $module-secondary-color;
|
||||
.name {
|
||||
//color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#contactView {
|
||||
position: absolute;
|
||||
top: $topbar-height;
|
||||
bottom: 0;
|
||||
left: 61.53846%;
|
||||
overflow: auto;
|
||||
overflow-x: hidden;
|
||||
border-left: $topbar-divider-border-bottom;
|
||||
padding: $table-head-padding;
|
||||
padding-top: 0;
|
||||
//font-size: $table-row-font-size;
|
||||
/* span { */
|
||||
/* ul { */
|
||||
/* margin-left: 20px; */
|
||||
/* } */
|
||||
/* } */
|
||||
@include grid-column($columns:13);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:5);
|
||||
}
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
margin-left: rem-calc(12);
|
||||
margin-top: 0;
|
||||
}
|
||||
h1 {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
ul {
|
||||
font-size: $form-label-font-size;
|
||||
}
|
||||
.label {
|
||||
margin-left: rem-calc(3);
|
||||
}
|
||||
.header {
|
||||
background-color: $secondary-color;
|
||||
padding-bottom: 0.2em;
|
||||
h1, h6 {
|
||||
color: #fff;
|
||||
}
|
||||
.label {
|
||||
background-color: transparent;
|
||||
border: 1px solid $primary-color;
|
||||
border: 1px solid scale-color($primary-color, $lightness: 52%);
|
||||
color: $primary-color;
|
||||
color: scale-color($primary-color, $lightness: 52%);
|
||||
}
|
||||
}
|
||||
.section {
|
||||
border-bottom: 1px solid #ddd;
|
||||
//margin-bottom: rem-calc(12);
|
||||
margin: 0 rem-calc(12) rem-calc(12) rem-calc(12);
|
||||
padding-bottom: rem-calc(12);
|
||||
}
|
||||
/*
|
||||
+-----------------------------------------------+
|
||||
+ .attr (13) |
|
||||
|+-------------+-------------------------------+|
|
||||
|| .key (4) | .value (9) ||
|
||||
|+-------------+-------------------------------+|
|
||||
+-----------------------------------------------+
|
||||
*/
|
||||
.attr {
|
||||
@include grid-row($behavior:collapse);
|
||||
.key {
|
||||
@include grid-column($columns:4);
|
||||
label {
|
||||
color: #999;
|
||||
margin-right: rem-calc(12);
|
||||
}
|
||||
}
|
||||
.value {
|
||||
@include grid-column($columns:9);
|
||||
&.single {
|
||||
@include grid-column($offset: 4, $columns:9);
|
||||
}
|
||||
}
|
||||
}
|
||||
.buttonsToolbar {
|
||||
margin-bottom: rem-calc(12);
|
||||
//text-align: right;
|
||||
background-color: #eee;
|
||||
border-top: 2px solid #ddd;
|
||||
.button {
|
||||
margin: 0.4em;
|
||||
&.alert {
|
||||
//display: $button-display;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
.viewer {
|
||||
.value {
|
||||
div, a, ul, span {
|
||||
line-height: $form-label-line-height;
|
||||
margin-left: rem-calc(12);
|
||||
}
|
||||
}
|
||||
}
|
||||
.editor {
|
||||
.section {
|
||||
border-bottom: 0;
|
||||
}
|
||||
/*
|
||||
+-----------------------------------------------+
|
||||
+ .attr (13) |
|
||||
|+-------------+-------------------------------+|
|
||||
|+ .action (1) | .key (4) | .value (8) ||
|
||||
|+-------------+-------------------------------+|
|
||||
+-----------------------------------------------+
|
||||
*/
|
||||
.attr {
|
||||
.action {
|
||||
@include grid-column($columns:1);
|
||||
padding-left: rem-calc(6);
|
||||
}
|
||||
.key {
|
||||
@include grid-column($columns:4);
|
||||
}
|
||||
.value {
|
||||
@include grid-column($columns:8);
|
||||
padding-right: rem-calc(6);
|
||||
&.compact {
|
||||
margin-bottom: $form-spacing;
|
||||
input {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
||||
&.single {
|
||||
@include grid-column($offset: 5, $columns:8);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.buttonsToolbar {
|
||||
/* background-color: $secondary-color; */
|
||||
/* text-align: center; */
|
||||
text-align: right;
|
||||
/* font-size: 1.5em; */
|
||||
/* line-height: 2.5em; */
|
||||
/* min-height: 2.5em; */
|
||||
.button {
|
||||
margin-bottom: 0;
|
||||
//background-color: $tabbar-bg;
|
||||
/* background-color: $secondary-color; */
|
||||
/* color: scale-color($secondary-color, $lightness: 52%); */
|
||||
//padding: 0.45em 1em 0.35em 1em;
|
||||
/* padding: 0 1em; */
|
||||
/* font-size: 1.0em; */
|
||||
font-size: 1.0em;
|
||||
/* transition: color 300ms ease; */
|
||||
//&.success {
|
||||
// background-color: $secondary-color;
|
||||
//}
|
||||
/* &:focus, &:hover { */
|
||||
/* color: #fff; */
|
||||
/* //background-color: #449539; */
|
||||
/* //background-color: scale-color($secondary-color, $lightness: 13%); */
|
||||
/* } */
|
||||
}
|
||||
.folders-list & {
|
||||
background-color: $tabbar-bg;
|
||||
background-color: $off-canvas-bg;
|
||||
text-align: center;
|
||||
.button {
|
||||
background-color: $tabbar-bg;
|
||||
font-size: 1.5em;
|
||||
transition: color 300ms ease;
|
||||
color: scale-color($tabbar-bg, $lightness: 52%);
|
||||
&:focus, &:hover {
|
||||
color: $primary-color;
|
||||
color: #fff;
|
||||
//background-color: scale-color($tabbar-bg, $lightness: 13%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.searchToolbar {
|
||||
@include grid-row($behavior:collapse);
|
||||
.inputField {
|
||||
//@include grid-column($offset:1, $columns:9);
|
||||
@include grid-column($offset:0, $columns:11);
|
||||
input {
|
||||
transition: background-color 300ms ease;
|
||||
//background-color: $secondary-color;
|
||||
background-color: transparent;
|
||||
margin: 0.4em;
|
||||
&:focus {
|
||||
background-color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
.optionsButton {
|
||||
@include grid-column($columns:2);
|
||||
.button {
|
||||
color: $input-disabled-bg;
|
||||
background-color: transparent;
|
||||
//line-height: 3.5em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.button {
|
||||
&.icon {
|
||||
background-color: transparent;
|
||||
color: $primary-color;
|
||||
padding: 0;
|
||||
@include button-size($padding:$button-tny,$full-width:true);
|
||||
}
|
||||
&.alert {
|
||||
color: $alert-color;
|
||||
}
|
||||
}
|
||||
|
||||
.f-dropdown {
|
||||
dd {
|
||||
a {
|
||||
background-color: $module-secondary-color;
|
||||
color: #fff;
|
||||
&:hover {
|
||||
background-color: $module-color;
|
||||
}
|
||||
}
|
||||
&.active {
|
||||
a {
|
||||
background-color: $module-color;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
}
|
||||
&.icons-dropdown {
|
||||
width: auto;
|
||||
//background-color: $primary-color;
|
||||
.button {
|
||||
margin: 0;
|
||||
padding: $f-dropdown-list-padding;
|
||||
border-color: $primary-color;
|
||||
//color: scale-color($secondary-color, $lightness: 52%);
|
||||
color: #fff;
|
||||
}
|
||||
background-color: $primary-color;
|
||||
border-color: $primary-color;
|
||||
&:before {
|
||||
border-color: transparent transparent $primary-color transparent;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-weight: lighter;
|
||||
}
|
||||
|
||||
input.ng-dirty.ng-invalid {
|
||||
border-color: $alert-color !important;
|
||||
color: $alert-color !important;
|
||||
}
|
||||
|
30
UI/WebServerResources/scss/SOGoRootPage.scss
Normal file
30
UI/WebServerResources/scss/SOGoRootPage.scss
Normal file
|
@ -0,0 +1,30 @@
|
|||
@import "settings";
|
||||
@import "foundation/components/grid";
|
||||
@import "foundation/components/forms";
|
||||
|
||||
$total-columns: 12;
|
||||
|
||||
#pageContent {
|
||||
|
||||
#login {
|
||||
@include grid-row();
|
||||
@media #{$medium-up} {
|
||||
padding-top: rem-calc(48);
|
||||
}
|
||||
#logo {
|
||||
text-align: center;
|
||||
@include grid-column(12);
|
||||
@media #{$medium-up} {
|
||||
text-align: right;
|
||||
@include grid-column($columns:4, $offset:2);
|
||||
}
|
||||
}
|
||||
form {
|
||||
@include grid-column(12);
|
||||
@media #{$medium-up} {
|
||||
@include grid-column($columns:3);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
1292
UI/WebServerResources/scss/_settings.scss
Normal file
1292
UI/WebServerResources/scss/_settings.scss
Normal file
File diff suppressed because it is too large
Load diff
83
UI/WebServerResources/scss/app.scss
Normal file
83
UI/WebServerResources/scss/app.scss
Normal file
|
@ -0,0 +1,83 @@
|
|||
//@import "settings";
|
||||
//@import "foundation";
|
||||
|
||||
// Or selectively include components
|
||||
// @import
|
||||
// "foundation/components/accordion",
|
||||
// "foundation/components/alert-boxes",
|
||||
// "foundation/components/block-grid",
|
||||
// "foundation/components/breadcrumbs",
|
||||
// "foundation/components/button-groups",
|
||||
// "foundation/components/buttons",
|
||||
// "foundation/components/clearing",
|
||||
// "foundation/components/dropdown",
|
||||
// "foundation/components/dropdown-buttons",
|
||||
// "foundation/components/flex-video",
|
||||
// "foundation/components/forms",
|
||||
// "foundation/components/grid",
|
||||
// "foundation/components/inline-lists",
|
||||
// "foundation/components/joyride",
|
||||
// "foundation/components/keystrokes",
|
||||
// "foundation/components/labels",
|
||||
// "foundation/components/magellan",
|
||||
// "foundation/components/orbit",
|
||||
// "foundation/components/pagination",
|
||||
// "foundation/components/panels",
|
||||
// "foundation/components/pricing-tables",
|
||||
// "foundation/components/progress-bars",
|
||||
// "foundation/components/reveal",
|
||||
// "foundation/components/side-nav",
|
||||
// "foundation/components/split-buttons",
|
||||
// "foundation/components/sub-nav",
|
||||
// "foundation/components/switch",
|
||||
// "foundation/components/tables",
|
||||
// "foundation/components/tabs",
|
||||
// "foundation/components/thumbs",
|
||||
// "foundation/components/tooltips",
|
||||
// "foundation/components/top-bar",
|
||||
// "foundation/components/type",
|
||||
// "foundation/components/offcanvas",
|
||||
// "foundation/components/visibility";
|
||||
|
||||
// http://docs.angularjs.org/api/ng/directive/ngCloak
|
||||
[ng\:cloak], [ng-cloak], [data-ng-cloak], [x-ng-cloak], .ng-cloak, .x-ng-cloak {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.animate-show {
|
||||
-webkit-transition:all linear 0.5s;
|
||||
transition:all linear 0.5s;
|
||||
line-height:20px;
|
||||
opacity:1;
|
||||
padding:10px;
|
||||
border:1px solid black;
|
||||
background:white;
|
||||
}
|
||||
|
||||
.animate-show.ng-hide-add,
|
||||
.animate-show.ng-hide-remove {
|
||||
display:block!important;
|
||||
}
|
||||
|
||||
.animate-show.ng-hide {
|
||||
line-height:0;
|
||||
opacity:0;
|
||||
padding:0 10px;
|
||||
}
|
||||
|
||||
.reveal-modal {
|
||||
.close-reveal-modal {
|
||||
&:hover {
|
||||
color: #aaa;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
._selected {
|
||||
//background-color: #ddd !important;
|
||||
//border: 2px solid #ddd !important;
|
||||
/* -webkit-border-radius: 2px; */
|
||||
/* -moz-border-radius: 2px; */
|
||||
/* border-radius: 2px; */
|
||||
}
|
Loading…
Reference in a new issue