mirror of
https://github.com/atlanticbiomedical/biomedjs.git
synced 2025-07-02 00:47:26 -04:00
latest changes
This commit is contained in:
@ -43,7 +43,7 @@
|
||||
|
||||
.navbar-inner {
|
||||
background-color: @navbarSecondaryBackground;
|
||||
min-height: auto;
|
||||
min-height: 40px;
|
||||
}
|
||||
|
||||
.nav > li {
|
||||
@ -75,4 +75,4 @@
|
||||
color: @navbarSecondaryLinkColorActive;
|
||||
background-color: @navbarSecondaryLinkBackgroundActive;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
|
||||
body {
|
||||
background-image: url('/img/bodyBg.png');
|
||||
min-width: 980px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar {
|
||||
@ -115,4 +116,4 @@ body::-webkit-scrollbar-corner {
|
||||
-moz-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);
|
||||
-webkit-box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);
|
||||
box-shadow: inset 1px 1px 0 rgba(0,0,0,.14);
|
||||
}
|
||||
}
|
||||
|
@ -43,4 +43,4 @@
|
||||
// Sprite icons path
|
||||
// -------------------------
|
||||
@iconSpritePath: "/img/glyphicons-halflings.png";
|
||||
@iconWhiteSpritePath: "/img/glyphicons-halflings-white.png";
|
||||
@iconWhiteSpritePath: "/img/glyphicons-halflings-white.png";
|
||||
|
@ -305,3 +305,417 @@ header {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/* The MIT License */
|
||||
.dropzone,
|
||||
.dropzone *,
|
||||
.dropzone-previews,
|
||||
.dropzone-previews * {
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
.dropzone {
|
||||
position: relative;
|
||||
border: 1px solid rgba(0,0,0,0.08);
|
||||
background: rgba(0,0,0,0.02);
|
||||
padding: 1em;
|
||||
}
|
||||
.dropzone.dz-clickable {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropzone.dz-clickable .dz-message,
|
||||
.dropzone.dz-clickable .dz-message span {
|
||||
cursor: pointer;
|
||||
}
|
||||
.dropzone.dz-clickable * {
|
||||
cursor: default;
|
||||
}
|
||||
.dropzone .dz-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone.dz-drag-hover {
|
||||
border-color: rgba(0,0,0,0.15);
|
||||
background: rgba(0,0,0,0.04);
|
||||
}
|
||||
.dropzone.dz-started .dz-message {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview,
|
||||
.dropzone-previews .dz-preview {
|
||||
background: rgba(255,255,255,0.8);
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
margin: 17px;
|
||||
vertical-align: top;
|
||||
border: 1px solid #acacac;
|
||||
padding: 6px 6px 6px 6px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],
|
||||
.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details,
|
||||
.dropzone-previews .dz-preview .dz-details {
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
position: relative;
|
||||
background: #ebebeb;
|
||||
padding: 5px;
|
||||
margin-bottom: 22px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details .dz-filename,
|
||||
.dropzone-previews .dz-preview .dz-details .dz-filename {
|
||||
overflow: hidden;
|
||||
height: 100%;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details img,
|
||||
.dropzone-previews .dz-preview .dz-details img {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100px;
|
||||
height: 100px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-details .dz-size,
|
||||
.dropzone-previews .dz-preview .dz-details .dz-size {
|
||||
position: absolute;
|
||||
bottom: -28px;
|
||||
left: 3px;
|
||||
height: 28px;
|
||||
line-height: 28px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-error-mark,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-success-mark,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview:hover .dz-details img,
|
||||
.dropzone-previews .dz-preview:hover .dz-details img {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark,
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
display: none;
|
||||
position: absolute;
|
||||
width: 40px;
|
||||
height: 40px;
|
||||
font-size: 30px;
|
||||
text-align: center;
|
||||
right: -10px;
|
||||
top: -10px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
color: #8cc657;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
color: #ee162d;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress,
|
||||
.dropzone-previews .dz-preview .dz-progress {
|
||||
position: absolute;
|
||||
top: 100px;
|
||||
left: 6px;
|
||||
right: 6px;
|
||||
height: 6px;
|
||||
background: #d7d7d7;
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
display: block;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
width: 0%;
|
||||
background-color: #8cc657;
|
||||
}
|
||||
.dropzone .dz-preview.dz-processing .dz-progress,
|
||||
.dropzone-previews .dz-preview.dz-processing .dz-progress {
|
||||
display: block;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-message,
|
||||
.dropzone-previews .dz-preview .dz-error-message {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: -5px;
|
||||
left: -20px;
|
||||
background: rgba(245,245,245,0.8);
|
||||
padding: 8px 10px;
|
||||
color: #800;
|
||||
min-width: 140px;
|
||||
max-width: 500px;
|
||||
z-index: 500;
|
||||
}
|
||||
.dropzone .dz-preview:hover.dz-error .dz-error-message,
|
||||
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
|
||||
display: block;
|
||||
}
|
||||
.dropzone {
|
||||
border: 1px solid rgba(0,0,0,0.03);
|
||||
min-height: 360px;
|
||||
-webkit-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
background: rgba(0,0,0,0.03);
|
||||
padding: 23px;
|
||||
}
|
||||
.dropzone .dz-default.dz-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
-webkit-transition: opacity 0.3s ease-in-out;
|
||||
-moz-transition: opacity 0.3s ease-in-out;
|
||||
-o-transition: opacity 0.3s ease-in-out;
|
||||
-ms-transition: opacity 0.3s ease-in-out;
|
||||
transition: opacity 0.3s ease-in-out;
|
||||
background-image: url("/img/spritemap.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: 0 0;
|
||||
position: absolute;
|
||||
width: 428px;
|
||||
height: 123px;
|
||||
margin-left: -214px;
|
||||
margin-top: -61.5px;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
|
||||
.dropzone .dz-default.dz-message {
|
||||
background-image: url("/img/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-default.dz-message span {
|
||||
display: none;
|
||||
}
|
||||
.dropzone.dz-square .dz-default.dz-message {
|
||||
background-position: 0 -123px;
|
||||
width: 268px;
|
||||
margin-left: -134px;
|
||||
height: 174px;
|
||||
margin-top: -87px;
|
||||
}
|
||||
.dropzone.dz-drag-hover .dz-message {
|
||||
opacity: 0.15;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=15)";
|
||||
filter: alpha(opacity=15);
|
||||
}
|
||||
.dropzone.dz-started .dz-message {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
}
|
||||
.dropzone .dz-preview,
|
||||
.dropzone-previews .dz-preview {
|
||||
-webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
|
||||
box-shadow: 1px 1px 4px rgba(0,0,0,0.16);
|
||||
font-size: 14px;
|
||||
}
|
||||
.dropzone .dz-preview.dz-image-preview:hover .dz-details img,
|
||||
.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img {
|
||||
display: block;
|
||||
opacity: 0.1;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=10)";
|
||||
filter: alpha(opacity=10);
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-success-mark,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-success-mark {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-error-mark,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-error-mark {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone .dz-preview.dz-error .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload {
|
||||
background: #ee1e2d;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark,
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
-webkit-transition: opacity 0.4s ease-in-out;
|
||||
-moz-transition: opacity 0.4s ease-in-out;
|
||||
-o-transition: opacity 0.4s ease-in-out;
|
||||
-ms-transition: opacity 0.4s ease-in-out;
|
||||
transition: opacity 0.4s ease-in-out;
|
||||
background-image: url("/img/spritemap.png");
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark,
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
background-image: url("/img/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark span,
|
||||
.dropzone-previews .dz-preview .dz-error-mark span,
|
||||
.dropzone .dz-preview .dz-success-mark span,
|
||||
.dropzone-previews .dz-preview .dz-success-mark span {
|
||||
display: none;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-mark,
|
||||
.dropzone-previews .dz-preview .dz-error-mark {
|
||||
background-position: -268px -123px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-success-mark,
|
||||
.dropzone-previews .dz-preview .dz-success-mark {
|
||||
background-position: -268px -163px;
|
||||
}
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
-webkit-animation: loading 0.4s linear infinite;
|
||||
-moz-animation: loading 0.4s linear infinite;
|
||||
-o-animation: loading 0.4s linear infinite;
|
||||
-ms-animation: loading 0.4s linear infinite;
|
||||
animation: loading 0.4s linear infinite;
|
||||
-webkit-transition: width 0.3s ease-in-out;
|
||||
-moz-transition: width 0.3s ease-in-out;
|
||||
-o-transition: width 0.3s ease-in-out;
|
||||
-ms-transition: width 0.3s ease-in-out;
|
||||
transition: width 0.3s ease-in-out;
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 0%;
|
||||
height: 100%;
|
||||
background-image: url("/img/spritemap.png");
|
||||
background-repeat: repeat-x;
|
||||
background-position: 0px -400px;
|
||||
}
|
||||
@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {
|
||||
.dropzone .dz-preview .dz-progress .dz-upload,
|
||||
.dropzone-previews .dz-preview .dz-progress .dz-upload {
|
||||
background-image: url("/img/spritemap@2x.png");
|
||||
-webkit-background-size: 428px 406px;
|
||||
-moz-background-size: 428px 406px;
|
||||
background-size: 428px 406px;
|
||||
}
|
||||
}
|
||||
.dropzone .dz-preview.dz-success .dz-progress,
|
||||
.dropzone-previews .dz-preview.dz-success .dz-progress {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
-webkit-transition: opacity 0.4s ease-in-out;
|
||||
-moz-transition: opacity 0.4s ease-in-out;
|
||||
-o-transition: opacity 0.4s ease-in-out;
|
||||
-ms-transition: opacity 0.4s ease-in-out;
|
||||
transition: opacity 0.4s ease-in-out;
|
||||
}
|
||||
.dropzone .dz-preview .dz-error-message,
|
||||
.dropzone-previews .dz-preview .dz-error-message {
|
||||
display: block;
|
||||
opacity: 0;
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=0)";
|
||||
filter: alpha(opacity=0);
|
||||
-webkit-transition: opacity 0.3s ease-in-out;
|
||||
-moz-transition: opacity 0.3s ease-in-out;
|
||||
-o-transition: opacity 0.3s ease-in-out;
|
||||
-ms-transition: opacity 0.3s ease-in-out;
|
||||
transition: opacity 0.3s ease-in-out;
|
||||
}
|
||||
.dropzone .dz-preview:hover.dz-error .dz-error-message,
|
||||
.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {
|
||||
opacity: 1;
|
||||
-ms-filter: none;
|
||||
filter: none;
|
||||
}
|
||||
.dropzone a.dz-remove,
|
||||
.dropzone-previews a.dz-remove {
|
||||
background-image: -webkit-linear-gradient(top, #fafafa, #eee);
|
||||
background-image: -moz-linear-gradient(top, #fafafa, #eee);
|
||||
background-image: -o-linear-gradient(top, #fafafa, #eee);
|
||||
background-image: -ms-linear-gradient(top, #fafafa, #eee);
|
||||
background-image: linear-gradient(to bottom, #fafafa, #eee);
|
||||
-webkit-border-radius: 2px;
|
||||
border-radius: 2px;
|
||||
border: 1px solid #eee;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
padding: 4px 5px;
|
||||
text-align: center;
|
||||
color: #aaa;
|
||||
margin-top: 26px;
|
||||
}
|
||||
.dropzone a.dz-remove:hover,
|
||||
.dropzone-previews a.dz-remove:hover {
|
||||
color: #666;
|
||||
}
|
||||
@-moz-keyframes loading {
|
||||
from {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
to {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@-webkit-keyframes loading {
|
||||
from {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
to {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@-o-keyframes loading {
|
||||
from {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
to {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
@keyframes loading {
|
||||
from {
|
||||
background-position: 0 -400px;
|
||||
}
|
||||
to {
|
||||
background-position: -7px -400px;
|
||||
}
|
||||
}
|
||||
|
42
public/css/site.css
Normal file
42
public/css/site.css
Normal file
@ -0,0 +1,42 @@
|
||||
body {
|
||||
min-width: initial;
|
||||
}
|
||||
|
||||
input {
|
||||
width: 100% !important;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
button {
|
||||
width: 100% !important;
|
||||
}
|
||||
|
||||
textarea {
|
||||
width: 100% !important;
|
||||
height: 300px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
.dropzone {
|
||||
min-height: initial !important;
|
||||
}
|
||||
|
||||
.dz-message {
|
||||
background-image: none !important;
|
||||
position: initial !important;
|
||||
width: initial !important;
|
||||
height: initial !important;
|
||||
margin-left: initial !important;
|
||||
margin-top: initial !important;
|
||||
}
|
||||
|
||||
.dz-message span {
|
||||
display: block !important;
|
||||
font-size: 24px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
h1.msg {
|
||||
text-align: center;
|
||||
}
|
BIN
public/img/spritemap.png
Normal file
BIN
public/img/spritemap.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
BIN
public/img/spritemap@2x.png
Normal file
BIN
public/img/spritemap@2x.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
@ -73,6 +73,18 @@ angular.module('biomed', ['biomed.filters', 'biomed.services', 'biomed.directive
|
||||
templateUrl: '/partials/techs/schedule.html',
|
||||
controller: biomed.TechScheduleCtrl
|
||||
})
|
||||
.when('/posts', {
|
||||
templateUrl: '/partials/posts/index.html',
|
||||
controller: biomed.PostIndexCtrl
|
||||
})
|
||||
.when('/posts/add', {
|
||||
templateUrl: '/partials/posts/add.html',
|
||||
controller: biomed.PostAddCtrl
|
||||
})
|
||||
.when('/posts/:id', {
|
||||
templateUrl: '/partials/posts/edit.html',
|
||||
controller: biomed.PostEditCtrl
|
||||
})
|
||||
.when('/admin', {
|
||||
templateUrl: '/partials/users/index.html',
|
||||
controller: biomed.UsersIndexCtrl,
|
||||
|
@ -174,13 +174,206 @@ biomed.UsersIndexCtrl = function($scope, $filter, $routeParams, $location, Users
|
||||
|
||||
biomed.UserClockCtrl = function($scope, $routeParams, Users) {
|
||||
Users.index({userid: $routeParams.id}, function(result) {
|
||||
console.log(result);
|
||||
$scope.tech = result[0];
|
||||
});
|
||||
|
||||
$scope.clocks = Users.clocks($routeParams);
|
||||
};
|
||||
|
||||
biomed.PostIndexCtrl = function($scope, $routeParams, Posts, LocationBinder) {
|
||||
$scope.loading = true;
|
||||
|
||||
$scope.posts = Posts.index(function() {
|
||||
$scope.loading = false;
|
||||
});
|
||||
};
|
||||
|
||||
biomed.PostAddCtrl = function($scope, Posts, $location) {
|
||||
|
||||
$scope.model = {
|
||||
gallery: []
|
||||
};
|
||||
|
||||
$scope.titleImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
maxFiles: 1,
|
||||
addRemoveLinks: true
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('adding file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = response.filename;
|
||||
});
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('removing file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = undefined;
|
||||
});
|
||||
},
|
||||
maxfilesexceeded: function(file) {
|
||||
this.removeAllFiles();
|
||||
this.addFile(file);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var galleryImages = {};
|
||||
|
||||
$scope.galleryImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
addRemoveLinks: true
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('Adding File');
|
||||
file.filename = response.filename;
|
||||
|
||||
if (galleryImages[file.filename]) {
|
||||
galleryImages[file.filename]++;
|
||||
this.removeFile(file);
|
||||
} else {
|
||||
galleryImages[file.filename] = 1;
|
||||
}
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('Removing File');
|
||||
galleryImages[file.filename]--;
|
||||
|
||||
if (galleryImages[file.filename] <= 0) {
|
||||
delete galleryImages[file.filename];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var save = function(status) {
|
||||
$scope.model.gallery = Object.keys(galleryImages);
|
||||
$scope.model.status = status;
|
||||
$scope.model.createdOn = new Date();
|
||||
|
||||
if (status === 'posted') {
|
||||
$scope.model.postedOn = new Date();
|
||||
}
|
||||
|
||||
Posts.create($scope.model, function(result) {
|
||||
$location.path("/posts/" + result._id);
|
||||
});
|
||||
}
|
||||
|
||||
$scope.saveAsDraft = function() {
|
||||
save('draft');
|
||||
};
|
||||
|
||||
$scope.saveAsPosted = function() {
|
||||
save('posted');
|
||||
};
|
||||
};
|
||||
|
||||
biomed.PostEditCtrl = function($scope, Posts, $routeParams, $location) {
|
||||
var galleryImages = {};
|
||||
|
||||
$scope.model = Posts.get($routeParams, function() {
|
||||
$scope.loading = false;
|
||||
|
||||
if ($scope.model.image) {
|
||||
$scope.existingTitleImages = [$scope.model.image];
|
||||
}
|
||||
|
||||
$scope.existingGalleryImages = $scope.model.gallery;
|
||||
for (var i = 0; i < $scope.model.gallery.length; i++) {
|
||||
galleryImages[$scope.model.gallery[i]] = 1;
|
||||
}
|
||||
});
|
||||
|
||||
$scope.titleImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
maxFiles: 1,
|
||||
addRemoveLinks: true,
|
||||
existing: []
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('adding file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = response.filename;
|
||||
});
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('removing file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = undefined;
|
||||
});
|
||||
},
|
||||
maxfilesexceeded: function(file) {
|
||||
this.removeAllFiles();
|
||||
this.addFile(file);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$scope.galleryImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
addRemoveLinks: true,
|
||||
existing: []
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('Adding File');
|
||||
file.filename = response.filename;
|
||||
|
||||
if (galleryImages[file.filename]) {
|
||||
galleryImages[file.filename]++;
|
||||
this.removeFile(file);
|
||||
} else {
|
||||
galleryImages[file.filename] = 1;
|
||||
}
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('Removing File');
|
||||
galleryImages[file.filename]--;
|
||||
|
||||
if (galleryImages[file.filename] <= 0) {
|
||||
delete galleryImages[file.filename];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var save = function(status) {
|
||||
$scope.model.gallery = Object.keys(galleryImages);
|
||||
$scope.model.status = status;
|
||||
|
||||
if (status === 'posted') {
|
||||
$scope.model.postedOn = new Date();
|
||||
} else {
|
||||
$scope.model.postedOn = null;
|
||||
}
|
||||
|
||||
Posts.update({id: $scope.model._id}, $scope.model, function(result) {
|
||||
$location.path("/posts/");
|
||||
});
|
||||
}
|
||||
|
||||
$scope.saveAsDraft = function() {
|
||||
save('draft');
|
||||
};
|
||||
|
||||
$scope.saveAsPosted = function() {
|
||||
save('posted');
|
||||
};
|
||||
|
||||
$scope.saveAsArchived = function() {
|
||||
save('archived');
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
biomed.ClientIndexCtrl = function($scope, $filter, $routeParams, Clients, LocationBinder) {
|
||||
$scope.loading = true;
|
||||
|
||||
@ -347,7 +540,7 @@ biomed.ClientEditCtrl = function($scope, $routeParams, Clients) {
|
||||
}
|
||||
|
||||
$scope.toggleFrequency = function(frequency, month) {
|
||||
if (accountHasPermission('system.edit')) {
|
||||
if ($scope.accountHasPermission('system.edit')) {
|
||||
$scope.master.frequencies[frequency][month] =! $scope.master.frequencies[frequency][month];
|
||||
Clients.update({id: $scope.master._id}, $scope.master, function() {
|
||||
updatePms();
|
||||
@ -822,7 +1015,6 @@ biomed.PageCtrl = function($scope, $dialog, Account) {
|
||||
};
|
||||
|
||||
$scope.accountHasPermission = function(perm) {
|
||||
console.log($scope);
|
||||
if ($scope.account && $scope.account.perms) {
|
||||
return $scope.account.perms.indexOf(perm) > -1;
|
||||
}
|
||||
|
@ -787,4 +787,36 @@ angular.module('biomed.directives', [])
|
||||
};
|
||||
}
|
||||
};
|
||||
})
|
||||
.directive('dropzone', function() {
|
||||
return {
|
||||
scope: {
|
||||
dropzone: '=',
|
||||
existing: '='
|
||||
},
|
||||
controller: function($scope, $element, $attrs) {
|
||||
var config, dropzone;
|
||||
config = $scope.dropzone;
|
||||
|
||||
dropzone = new Dropzone($element[0], config.options);
|
||||
angular.forEach(config.eventHandlers, function (handler, event) {
|
||||
dropzone.on(event, handler);
|
||||
});
|
||||
|
||||
$scope.$watch('existing', function() {
|
||||
var existing = $scope.existing;
|
||||
|
||||
console.log(dropzone);
|
||||
|
||||
if (existing) {
|
||||
for (var i = 0; i < existing.length; i++) {
|
||||
var file = { name: existing[i], size: 0, accepted: true, filename: existing[i] };
|
||||
dropzone.options.addedfile.call(dropzone, file);
|
||||
dropzone.options.thumbnail.call(dropzone, file, "http://atlanticbiomedical.com/images/" + existing[i]);
|
||||
dropzone.files.push(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
1874
public/js/lib/dropzone.js
Normal file
1874
public/js/lib/dropzone.js
Normal file
File diff suppressed because it is too large
Load Diff
@ -13,6 +13,17 @@ angular.module('biomed.services', [])
|
||||
tags: { method: 'GET', params: { id: 0, cmd: 'tags' }, isArray: true }
|
||||
});
|
||||
})
|
||||
.factory("Posts", function($resource) {
|
||||
return $resource('/api/posts/:id',
|
||||
{ id: "@id" },
|
||||
{
|
||||
index: { method: 'GET', params: {}, isArray: true },
|
||||
get: { method: 'GET', params: { id: 0} },
|
||||
create: { method: 'POST', params: {} },
|
||||
update: { method: 'POST', params: { id: 0} },
|
||||
destroy: { method: 'DELETE', params: { id: 0 } },
|
||||
});
|
||||
})
|
||||
.factory("Workorders", function($resource) {
|
||||
return $resource('/api/workorders/:id',
|
||||
{ id: "@id" },
|
||||
|
61
public/partials/posts/add.html
Normal file
61
public/partials/posts/add.html
Normal file
@ -0,0 +1,61 @@
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="/posts"><i class="icon-briefcase"></i> Posts</a><span class="divider"></span><li>
|
||||
<li class="active">New Post<li>
|
||||
</ul>
|
||||
<header>
|
||||
<h1>New Post</h1>
|
||||
</header>
|
||||
|
||||
<div class="form">
|
||||
<div class="form-section">
|
||||
<div class="section-label">Post</div>
|
||||
<div class="section-container">
|
||||
<div class="form-editor">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Title</label>
|
||||
<div class="controls">
|
||||
<input ng-model="model.title" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Body</label>
|
||||
<div class="controls">
|
||||
<textarea ng-model="model.preview" class="input-xlarge"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Extended</label>
|
||||
<div class="controls">
|
||||
<textarea ng-model="model.details" class="input-xlarge"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-section">
|
||||
<div class="section-label">Images</div>
|
||||
<div class="section-container">
|
||||
<div class="form-editor">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Title Image</label>
|
||||
<div class="controls">
|
||||
<div class="dropzone" dropzone="titleImageOptions"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Gallery</label>
|
||||
<div class="controls">
|
||||
<div class="dropzone" dropzone="galleryImageOptions"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-section">
|
||||
<div class="section-label"> </div>
|
||||
<div class="section-container">
|
||||
<button ng-click="saveAsDraft()" type="button" class="btn btn-primary">Save as Draft</button>
|
||||
<button ng-click="saveAsPosted()" type="button" class="btn">Save as Posted</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
62
public/partials/posts/edit.html
Normal file
62
public/partials/posts/edit.html
Normal file
@ -0,0 +1,62 @@
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="/posts"><i class="icon-briefcase"></i> Posts</a><span class="divider"></span><li>
|
||||
<li class="active">New Post<li>
|
||||
</ul>
|
||||
<header>
|
||||
<h1>Edit Post</h1>
|
||||
</header>
|
||||
|
||||
<div class="form">
|
||||
<div class="form-section">
|
||||
<div class="section-label">Post</div>
|
||||
<div class="section-container">
|
||||
<div class="form-editor">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Title</label>
|
||||
<div class="controls">
|
||||
<input ng-model="model.title" class="input-xlarge">
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Body</label>
|
||||
<div class="controls">
|
||||
<textarea ng-model="model.preview" class="input-xlarge"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Extended</label>
|
||||
<div class="controls">
|
||||
<textarea ng-model="model.details" class="input-xlarge"></textarea>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-section">
|
||||
<div class="section-label">Images</div>
|
||||
<div class="section-container">
|
||||
<div class="form-editor">
|
||||
<div class="control-group">
|
||||
<label class="control-label">Title Image</label>
|
||||
<div class="controls">
|
||||
<div class="dropzone" dropzone="titleImageOptions" existing="existingTitleImages"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="control-group">
|
||||
<label class="control-label">Gallery</label>
|
||||
<div class="controls">
|
||||
<div class="dropzone" dropzone="galleryImageOptions" existing="existingGalleryImages"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-section">
|
||||
<div class="section-label"> </div>
|
||||
<div class="section-container">
|
||||
<button ng-click="saveAsDraft()" type="button" class="btn btn-primary">Save as Draft</button>
|
||||
<button ng-click="saveAsPosted()" type="button" class="btn">Save as Posted</button>
|
||||
<button ng-click="saveAsArchived()" type="button" class="btn">Save as Archived</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
41
public/partials/posts/index.html
Normal file
41
public/partials/posts/index.html
Normal file
@ -0,0 +1,41 @@
|
||||
<ul class="breadcrumb">
|
||||
<li><a href="/posts"><i class="icon-briefcase"></i> Posts</a><li>
|
||||
</ul>
|
||||
<header>
|
||||
<h1>Posts</h1>
|
||||
</header>
|
||||
|
||||
<div class="row-fluid">
|
||||
<div class="span12">
|
||||
<div class="toolbelt">
|
||||
<a href="/posts/add" class="btn btn-primary">Create new Post</a>
|
||||
</div>
|
||||
<table class="biomed-table" infinite-scroll="addItems()" can-load="canLoad" threshold="300">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 5%">Title</th>
|
||||
<th style="width: 5%">Author</th>
|
||||
<th style="width: 5%">Created on</th>
|
||||
<th style="width: 5%">Posted on</th>
|
||||
<th style="width: 5%">Status</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-show="loading"><td colspan="4" class="table-loading"><i class="loader"></i></td></tr>
|
||||
<tr ng-hide="loading || posts.length"><td colspan="4" class="table-message">There is no information to display.</td></tr>
|
||||
<tr ng-hide="loading" ng-repeat="post in posts">
|
||||
<td>
|
||||
<a href="/posts/{{post._id}}">
|
||||
<span ng-show="post.title">{{post.title}}</span>
|
||||
<span ng-hide="post.title"><i>Missing Title</i></span>
|
||||
</a>
|
||||
</td>
|
||||
<td>{{post.author.name.first}} {{post.author.name.last}}</td>
|
||||
<td>{{post.createdOn | date:'medium'}}</td>
|
||||
<td>{{post.postedOn | date:'medium'}}</td>
|
||||
<td>{{post.status}}</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
@ -21,7 +21,7 @@
|
||||
<tr>
|
||||
<th colspan="2"></th>
|
||||
<th colspan="5">Groups</th>
|
||||
<th colspan="5">Permissions</th>
|
||||
<th colspan="6">Permissions</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th style="width: 15%">Name</th>
|
||||
@ -35,11 +35,12 @@
|
||||
<th style="width: 5%">Tags</th>
|
||||
<th style="width: 5%">Messages</th>
|
||||
<th style="width: 5%">Edit</th>
|
||||
<th style="width: 5%">Site</th>
|
||||
<th style="width: 5%">Admin</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr ng-show="loading"><td colspan="11" class="table-loading"><i class="loader"></i></td></tr>
|
||||
<tr ng-show="loading"><td colspan="13" class="table-loading"><i class="loader"></i></td></tr>
|
||||
<tr ng-hide="loading || users.length"><td colspan="11" class="table-message">There is no information to display.</td></tr>
|
||||
<tr ng-hide="loading" ng-repeat="user in users">
|
||||
<td class="name"><a href="/admin/users/{{user._id}}">{{user.name.first}} {{user.name.last}}</a> <span class="new" ng-show="isNew(user)">NEW</span></td>
|
||||
@ -54,6 +55,7 @@
|
||||
<td class="{{ checkPerm(user, 'system.tags') }}"><a ng-click="togglePerm(user, 'system.tags')"><i ng-class="{ 'icon-ok': checkPerm(user, 'system.tags'), 'icon-remove': !checkPerm(user, 'system.tags')}"></i></a></td>
|
||||
<td class="{{ checkPerm(user, 'messages.receive') }}"><a ng-click="togglePerm(user, 'messages.receive')"><i ng-class="{ 'icon-ok': checkPerm(user, 'messages.receive'), 'icon-remove': !checkPerm(user, 'messages.receive')}"></i></a></td>
|
||||
<td class="{{ checkPerm(user, 'system.edit') }}"><a ng-click="togglePerm(user, 'system.edit')"><i ng-class="{ 'icon-ok': checkPerm(user, 'system.edit'), 'icon-remove': !checkPerm(user, 'system.edit')}"></i></a></td>
|
||||
<td class="{{ checkPerm(user, 'system.site') }}"><a ng-click="togglePerm(user, 'system.site')"><i ng-class="{ 'icon-ok': checkPerm(user, 'system.site'), 'icon-remove': !checkPerm(user, 'system.site')}"></i></a></td>
|
||||
<td class="{{ checkPerm(user, 'system.admin') }}"><a ng-click="togglePerm(user, 'system.admin')"><i ng-class="{ 'icon-ok': checkPerm(user, 'system.admin'), 'icon-remove': !checkPerm(user, 'system.admin')}"></i></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
126
public/site/app.js
Normal file
126
public/site/app.js
Normal file
@ -0,0 +1,126 @@
|
||||
site = {};
|
||||
|
||||
|
||||
angular.module('site', ['ngResource'])
|
||||
.factory("Posts", function($resource) {
|
||||
return $resource('/api/posts/:id',
|
||||
{ id: "@id" },
|
||||
{
|
||||
index: { method: 'GET', params: {}, isArray: true },
|
||||
get: { method: 'GET', params: { id: 0} },
|
||||
create: { method: 'POST', params: {} },
|
||||
update: { method: 'POST', params: { id: 0} },
|
||||
destroy: { method: 'DELETE', params: { id: 0 } },
|
||||
});
|
||||
})
|
||||
.directive('dropzone', function() {
|
||||
return {
|
||||
scope: {
|
||||
dropzone: '=',
|
||||
existing: '='
|
||||
},
|
||||
controller: function($scope, $element, $attrs) {
|
||||
var config, dropzone;
|
||||
config = $scope.dropzone;
|
||||
|
||||
dropzone = new Dropzone($element[0], config.options);
|
||||
angular.forEach(config.eventHandlers, function (handler, event) {
|
||||
dropzone.on(event, handler);
|
||||
});
|
||||
|
||||
$scope.$watch('existing', function() {
|
||||
var existing = $scope.existing;
|
||||
|
||||
console.log(dropzone);
|
||||
|
||||
if (existing) {
|
||||
for (var i = 0; i < existing.length; i++) {
|
||||
var file = { name: existing[i], size: 0, accepted: true, filename: existing[i] };
|
||||
dropzone.options.addedfile.call(dropzone, file);
|
||||
dropzone.options.thumbnail.call(dropzone, file, "http://atlanticbiomedical.com/images/" + existing[i]);
|
||||
dropzone.files.push(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
site.PageCtrl = function($scope, Posts, $location) {
|
||||
|
||||
$scope.model = {
|
||||
gallery: []
|
||||
};
|
||||
|
||||
$scope.titleImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
maxFiles: 1,
|
||||
addRemoveLinks: true
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('adding file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = response.filename;
|
||||
});
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('removing file');
|
||||
$scope.$apply(function() {
|
||||
$scope.model.image = undefined;
|
||||
});
|
||||
},
|
||||
maxfilesexceeded: function(file) {
|
||||
this.removeAllFiles();
|
||||
this.addFile(file);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var galleryImages = {};
|
||||
|
||||
$scope.galleryImageOptions = {
|
||||
options: {
|
||||
url: '/api/posts/upload',
|
||||
addRemoveLinks: true
|
||||
},
|
||||
eventHandlers: {
|
||||
success: function(file, response) {
|
||||
console.log('Adding File');
|
||||
file.filename = response.filename;
|
||||
|
||||
if (galleryImages[file.filename]) {
|
||||
galleryImages[file.filename]++;
|
||||
this.removeFile(file);
|
||||
} else {
|
||||
galleryImages[file.filename] = 1;
|
||||
}
|
||||
},
|
||||
removedfile: function(file) {
|
||||
console.log('Removing File');
|
||||
galleryImages[file.filename]--;
|
||||
|
||||
if (galleryImages[file.filename] <= 0) {
|
||||
delete galleryImages[file.filename];
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
$scope.save = function() {
|
||||
$scope.model.gallery = Object.keys(galleryImages);
|
||||
$scope.model.status = "draft";
|
||||
$scope.model.createdOn = new Date();
|
||||
|
||||
Posts.create($scope.model, function(result) {
|
||||
$scope.saved = true;
|
||||
});
|
||||
};
|
||||
|
||||
$scope.refresh = function() {
|
||||
window.location.reload();
|
||||
}
|
||||
}
|
||||
|
||||
|
1874
public/site/dropzone.js
Normal file
1874
public/site/dropzone.js
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user