56 Commits
Author SHA1 Message Date
tmshv a34b9ecf6e package.json update; 2015-03-01 19:09:02 +03:00
tmshv 8b533f52a6 - main.js 2015-03-01 19:08:40 +03:00
tmshv 6994549360 + 404 page 2015-03-01 19:05:50 +03:00
tmshv 85ca132c3e document title; 2015-03-01 18:23:46 +03:00
tmshv af5f5dc5b1 document simplification; document metrika -> analytics; 2015-03-01 17:52:09 +03:00
tmshv ba2891d09b document simplification; document image size fixed; 2015-03-01 16:55:08 +03:00
tmshv d892105e9f simple document simplification 2015-03-01 16:48:35 +03:00
tmshv 467753a2e1 + helmet 2015-03-01 09:52:09 +03:00
tmshv ec51adbfbe proxy improvements 2015-03-01 09:50:47 +03:00
tmshv cc14b51fbb stability fixes; speed improvements; 2015-03-01 09:04:25 +03:00
tmshv 5dee8fd44a deploying update and speed imporvements 2015-03-01 09:03:30 +03:00
tmshv d178c1220f cleanup nginx.conf 2015-03-01 09:02:49 +03:00
tmshv 4d0c64bb93 code cleaning up; - pages/; -routers/; 2015-03-01 04:49:49 +03:00
tmshv 6e4749476a file reorganisation; + 3rdparty 2015-03-01 04:40:51 +03:00
tmshv 141a8ebdf4 client js minification 2015-03-01 03:20:39 +03:00
tmshv 54d3ee8ecc css minification 2015-03-01 03:03:24 +03:00
tmshv 02906582ac feed -> news; - api/ 2015-03-01 02:59:49 +03:00
tmshv 22edc3b275 + koa-useragent 2015-03-01 01:59:26 +03:00
tmshv a694abb3e5 updated schedule api; updated index routing; + routing based on Accept header; 2015-03-01 01:59:00 +03:00
tmshv 6af90258c9 client modules renamed 2015-03-01 01:56:21 +03:00
tmshv 38381b5605 + titles 2015-02-28 19:17:40 +03:00
tmshv f6a43ca7e1 yandex metrika -> google analytics 2015-02-28 10:12:50 +03:00
tmshv 1de5e31515 + prerender support (untested) 2015-02-28 09:49:23 +03:00
tmshv 14d89adb9d private data moved out of config.js 2015-02-28 09:49:07 +03:00
tmshv f3eb176dc4 bower update 2015-02-28 08:10:02 +03:00
tmshv 1226573b8b express -> koa (use --harmony flag); bower_components -> public/bower_components; views -> templates/views; 2015-02-28 08:07:00 +03:00
tmshv 6c27308c07 removed wildcard for views/index.html 2015-02-28 06:28:14 +03:00
tmshv 737bebec15 from mongoose to promised-mongo 2015-02-28 05:35:49 +03:00
tmshv 627a18c5fa bin insta 2014-11-26 22:02:36 +03:00
tmshv 1d2e17a581 fix instagram 2014-11-26 22:02:23 +03:00
tmshv 7f7dcf84f3 configured to home.tmshv 2014-11-26 22:01:46 +03:00
tmshv e67c012ef9 version 2.0 2014-11-24 18:31:18 +03:00
tmshv 3015e14e9c deploying scripts 2014-11-24 18:30:31 +03:00
tmshv 5f5909d2e9 doc previews removed from trunk 2014-11-24 16:43:46 +03:00
tmshv 9b843b21ca vk.png relocation 2014-11-24 16:42:42 +03:00
tmshv 164975f21f new document views; + pdf view; documents model update 2014-11-24 16:40:27 +03:00
tmshv 3f4b07e6c9 visual update: main menu, timeline, etc 2014-11-24 03:04:55 +03:00
tmshv 65ec12a328 + contacts field for as-timasheva 2014-11-24 03:04:27 +03:00
tmshv a09e4606d5 team anchors 2014-11-24 02:03:48 +03:00
tmshv 674aeace6a submenu hided 2014-11-24 02:03:29 +03:00
tmshv 88bbf78ff1 main on top of home page 2014-11-24 01:54:42 +03:00
tmshv 0905db1753 config service in data 2014-11-24 01:54:18 +03:00
tmshv a8bef3ea6b taped fotorama on home page 2014-11-24 01:12:48 +03:00
tmshv f583e1c7b2 + fotorama 2014-11-24 01:12:25 +03:00
tmshv 4cd6c9464b footer doc links in blank 2014-11-24 00:45:55 +03:00
tmshv 30dd51f94b timeline content update 2014-11-24 00:44:03 +03:00
tmshv 8e551ebd35 home.html clean up 2014-11-24 00:16:06 +03:00
tmshv 37d22b63ad + timeline 2014-11-24 00:15:18 +03:00
tmshv 0d6cf42c7f + bin, db, insagram, feed on main page 2014-11-23 21:57:34 +03:00
tmshv 09412f288f server.js cleaning up 2014-11-22 11:44:16 +03:00
tmshv 9445496b94 team page update 2014-11-21 19:09:17 +03:00
tmshv 0328dc745d footer docs fix 2014-11-21 19:08:53 +03:00
tmshv d7521e5ac5 schedule fixes 2014-11-21 18:53:45 +03:00
tmshv 7e1c33fdda footer 2014-11-21 18:29:31 +03:00
tmshv 941acc708c + graphics copy 2014-11-21 18:29:23 +03:00
tmshv efd77a62e3 angulared 2014-11-21 17:41:53 +03:00
94 changed files with 2058 additions and 1943 deletions

No files matched your search

+3
View File
@@ -0,0 +1,3 @@
{
"directory" : "public/bower_components"
}
+4 -1
View File
@@ -2,5 +2,8 @@
.idea
*.sublime*
private.json
/node_modules
/public
/bower_components
/public
File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

File renamed without changes.
Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 470 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 491 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 697 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 653 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 177 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 324 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 311 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 212 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 340 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 309 KiB

+11 -4
View File
@@ -1,12 +1,19 @@
.page-docs {
&.ng-leave {
transform-origin: 50% 50%;
animation: rotateOutNewspaper .3s both ease-in;
}
&.ng-enter {
animation: scaleUp 0.3s both ease-in
}
}
.act{
text-decoration: none;
border-bottom: 1px dashed #688fff;
}
.main{
margin-top: 50px;
}
.docblock{
// width:100%;
margin-bottom: 40px;
+88 -85
View File
@@ -1,10 +1,92 @@
* {
margin: 0;
padding: 0;
.document-block {
h1{
font-size: 14pt;
margin-left: 15px;
}
.menu{
position: fixed;
background-color: white;
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.5);
display: flex;
justify-content: space-between;
align-items: center;
&.transparent{
opacity: 0.95;
}
}
.controls {
input {
width: 30px;
height: 30px;
margin: 0 2px;
text-align: center;
font-size: .9em;
}
input:focus {
outline: 0;
}
button {
height: 30px;
border-radius: 6px;
border: 1px solid #666;
background-color: white;
font-size: 1.25em;
line-height: 0;
text-align: center;
outline: none;
&:hover {
border-color: #4d62d9;
color: #4d62d9;
}
&:active {
border-color: #3d4fb2;
color: #3d4fb2;
}
}
}
.controls .block {
display: inline-block;
margin: 0 5px;
vertical-align: middle;
}
a.download {
height:30px;
width: 23px;
vertical-align: middle;
padding: 0 8px;
display: inline-block;
background: url(/graphics/download.png) no-repeat 50%;
border-radius: 6px;
border: 1px solid #666;
&:hover{
border-color: #4d62d9;
}
&:active {
border-color: #3d4fb2;
}
}
}
body {
font-family: "PT Sans";
.document {
padding-top: 50px;
.page {
img {
width: 100%;
}
}
}
.norm {
@@ -15,85 +97,6 @@ body {
font-weight: 700;
}
#page-container > div {
/* box-shadow: 1px 1px 3px 1px #333;*/
}
.menu {
position: fixed;
width: 100%;
height: 45px;
background-color: #fff;
z-index: 100;
box-shadow: 0 1px 5px 0px rgba(0, 0, 0, 0.5);
&.opac {
opacity: .97;
}
.panel {
width: auto;
display: inline-block;
margin: 10px 25px 0;
&.right {
float: right;
}
}
h1 {
font-size: 14pt;
}
}
.controls {
display: inline-block;
margin-top: -4px;
/* vertical-align: middle;*/
.block {
display: inline-block;
/* height: 100%;*/
margin: 0px 5px;
vertical-align: middle;
}
input {
width: 30px;
height: 30px;
margin: 0 2px;
text-align: center;
font-size: .9em;
}
button {
display: inline-block;
height: 30px;
padding: 0 10px;
border-radius: 6px;
border: 2px solid #bbb;
color: #555;
background-color: white;
font-size: 1.3em;
text-align: center;
outline: none;
&:hover {
/* border: 1px solid #666;*/
/* background-color: #eee;*/
border: 2px solid #4d62d9;
color: #4d62d9;
}
&:active {
border: 2px solid #3d4fb2;
color: #3d4fb2;
background-color: rgba(61, 79, 178, 0.3);
}
}
a.download {
width: 22px;
height: 22px;
padding: 5px 8px;
display: inline-block;
background: #f3f3f3 url(download-icon.png) no-repeat;
background-position: 50%;
border-radius: 3px;
border: 1px solid #e0e0e0;
}
}
#page-container {
background-color: #c3bfa3;
transition: left 500ms;
@@ -102,7 +105,7 @@ body {
.pf {
margin: 60px auto 20px;
/* box-shadow: 1px 1px 3px 1px #333;*/
box-shadow: 0px 1px 4px 0px rgba(0, 0, 0, 0.9);
box-shadow: 0 1px 4px 0px rgba(0, 0, 0, 0.9);
border-collapse: separate;
}
+15
View File
@@ -0,0 +1,15 @@
.error-404{
text-align: center;
margin: 40px;
h1{
font-size: 16pt;
font-weight: normal;
}
img{
margin: 20px;
width: 40%;
max-width: 800px;
}
}
+31
View File
@@ -0,0 +1,31 @@
footer{
position: relative;
background-color: black;
color: #ffffff;
&:before{
content: '';
position: absolute;
top: -3px;
width: 100%;
height: 3px;
background-image: url('/graphics/rawline.png');
}
.info-block{
display: flex;
margin: 0 20px;
& > div{
margin: 0 30px 0 10px;
}
}
a{
color: #738cdb;
}
ul{
list-style: none;
}
}
+10
View File
@@ -0,0 +1,10 @@
.page-home {
&.ng-leave {
transform-origin: 0% 0%;
animation: rotateFall .3s both ease-in;
}
&.ng-enter {
animation: scaleUp 0.3s both ease-in;
}
}
+45 -56
View File
@@ -1,70 +1,59 @@
* {
//html {
// overflow-y: hidden;
//}
body {
font-family: "PT Sans", Arial, sans-serif;
margin: 0;
padding: 0;
}
body {
font-family: "PT Sans", Arial, sans-serif;
.main {
margin-top: 5px;
.telephone {
font-size: 1.25em;
margin-left: 30px;
}
h1 {
text-align: right;
margin: 20px 50px 0 0;
font-weight: normal;
padding: 0;
}
}
.menu {
$text_color: #666;
width: 100%;
background-color: black;
font-size: 13pt;
color: $text_color;
ul{
margin-left: 50px;
}
li {
display: inline-block;
padding: 5px 3px 13px 3px;
margin-right: 30px;
}
:link, :visited{
text-decoration: none;
border-bottom: 1px solid #333;
color: $text_color;
}
a:hover{
color: white;
}
.vk {
float: right;
margin: 13px 15px 0 0;
border: none;
}
a {
color: #3f9cea;
text-decoration: none;
border-bottom: 1px solid rgba(63, 156, 234, 0.25);
}
.selected {
border-top: 4px solid white;
font-weight: bold;
a:hover {
border-bottom: 1px solid rgba(63, 156, 234, 0.5);
}
a:link, a:visited{
color: white;
text-decoration: none;
border-bottom: none;
}
a:active {
border-bottom: 1px solid rgb(63, 156, 234);
}
&.blue{
border-top: 4px solid #3f9cea;
}
ul.submenu {
list-style: none;
display: inline-block;
margin: 0 auto;
width: 70%;
text-align: center;
&.green{
border-top: 4px solid #5cbe40;
}
li {
display: inline-block;
vertical-align: top;
margin: 0 30px 0 0;
&.yellow{
border-top: 4px solid #ffee00;
}
&.pink {
border-top: 4px solid #f655a0;
p {
margin: 2px 0 0;
font-size: 0.75em;
color: #999;
}
}
}
+64
View File
@@ -0,0 +1,64 @@
.menu {
$text_color: #666;
position:relative;
width: 100%;
background-color: black;
color: $text_color;
font-size: 13pt;
ul {
margin: 0 0 0 20px;
li {
display: inline-block;
padding: 5px 3px 13px 3px;
margin-right: 30px;
}
}
:link, :visited {
text-decoration: none;
border-bottom: 1px solid #333;
color: #ccc;
}
a:hover {
color: white;
border-bottom: 1px solid #555;
}
.vk {
float: right;
margin: 13px 15px 0 0;
border: none;
}
.selected {
border-top: 4px solid white;
font-weight: bold;
a:link, a:visited{
color: white;
text-decoration: none;
border-bottom: none;
}
&.blue{
border-top: 4px solid #3f9cea;
}
&.green{
border-top: 4px solid #5cbe40;
}
&.yellow{
border-top: 4px solid #ffee00;
}
&.pink {
border-top: 4px solid #f655a0;
}
}
}
+16
View File
@@ -0,0 +1,16 @@
.page {
// position: absolute;
// bottom: 0;
// top: 0;
padding-top: 0px;
width: 100%;
// z-index: -1;
}
.page.ng-leave {
// z-index: 9999;
}
.page.ng-enter {
// z-index: 8888;
}
+56
View File
@@ -0,0 +1,56 @@
@keyframes rotateFall {
0% {
transform: rotateZ(0deg);
}
20% {
transform: rotateZ(10deg);
animation-timing-function: ease-out;
}
40% {
transform: rotateZ(17deg);
}
60% {
transform: rotateZ(16deg);
}
100% {
transform: translateY(100%) rotateZ(17deg);
}
}
@keyframes scaleUp {
from {
opacity: 0.0;
transform: scale(0.5);
}
}
@keyframes slideInRight {
from {
transform: translateX(100%);
}
to {
transform: translateX(0);
}
}
@keyframes slideInUp {
from {
transform: translateY(100%);
}
to {
transform: translateY(0);
}
}
@keyframes slideOutLeft {
to {
transform: translateX(-100%);
}
}
@keyframes rotateOutNewspaper {
to {
transform: translateZ(-3000px) rotateZ(360deg);
opacity: 0;
}
}
+1 -1
View File
@@ -5,6 +5,7 @@
margin: 0;
padding: 0;
border: 0;
z-index: -1;
}
@media screen {
@@ -62,7 +63,6 @@
position: relative;
background-color: white;
overflow: hidden;
margin: 0;
border: 0;
}
+27 -11
View File
@@ -1,6 +1,18 @@
.page-schedule {
&.ng-leave {
transform-origin: 0% 0%;
animation: rotateFall 0.3s both ease-in;
}
&.ng-enter {
animation: scaleUp 0.3s both ease-in;
}
}
.schedule{
position: relative;
margin: 30px auto 0 auto;
padding-bottom: 50px;
text-align: center;
table{
@@ -30,17 +42,9 @@
vertical-align:baseline;
p.name{
// position: absolute;
width:30px;
height: 30px;
left: 0;
right: 0;
margin: 7px auto 10px auto;
padding: 7px;
border: 1px solid #e8e8e8;
// background-color: white;
border-radius: 50%;
font-size: 1.4em;
font-weight: 800;
color: #242424;
}
}
}
@@ -144,7 +148,7 @@
display: inline-block;
padding: 0px;
}
}
}
thead.fix{
position: fixed;
@@ -162,6 +166,8 @@
}
th{
height: auto;
:not(.group){
min-width: 150px;
/* width: 15%;*/
@@ -172,6 +178,16 @@
&.group{
width: 63px;
}
.day{
margin: 0;
line-height: 0;
}
.date{
margin: 15px 0;
line-height: 0;
}
}
}
+43
View File
@@ -0,0 +1,43 @@
.tape-block{
width: 70%;
max-width: 700px;
min-width: 300px;
margin: 100px auto 100px;
}
.tape-block-content{
position: relative;
width: 100%;
.tape {
width: 98px;
height: 98px;
position: absolute;
z-index: 10;
}
.tape-tl {
top: -25px;
left: -25px;
background-image: url(/graphics/tape-tl.png);
}
.tape-tr {
top: -25px;
right: -25px;
background-image: url(/graphics/tape-tr.png);
}
.tape-bl {
bottom: 0;
left: -25px;
background-image: url(/graphics/tape-lb.png);
}
.tape-br {
bottom: 0;
right: -25px;
background-image: url(/graphics/tape-rb.png);
}
}
+36 -27
View File
@@ -1,47 +1,56 @@
.main-picture{
.page-team {
&.ng-leave {
animation: slideOutLeft 0.3s both ease-in;
}
&.ng-enter {
animation: slideInRight 0.3s both ease-in;
}
}
.background-picture{
width: 100%;
position: fixed;
margin: 0;
top:0;
left: 0;
z-index: -999;
}
ul{
display: block;
}
.team-list{
list-style:none;
.team-block{
background-color: white;
width:100%;
min-height: 100px;
padding-top: 100px;
padding-bottom: 100px;
margin-top: 63%;
}
.team-member{
margin: 0 auto 50px auto;
width: 70%;
img{
width: 40%;
max-width: 600px;
min-width: 200px;
display: inline-block;
ul{
list-style:none;
}
.info{
display: inline-block;
float: right;
width: 55%;
line-height: 2em;
.team-member{
margin: 0 auto 50px auto;
width: 70%;
h3{
font-weight: 100;
img{
width: 40%;
max-width: 600px;
min-width: 200px;
display: inline-block;
}
span{
font-weight: 600;
.info{
display: inline-block;
float: right;
width: 55%;
line-height: 2em;
h3{
font-weight: 100;
span{
font-weight: 600;
}
}
}
}
+45
View File
@@ -0,0 +1,45 @@
.timeline {
.post {
.user{
margin-top: 4px;
span{
vertical-align: top;
line-height: 40px;
}
img {
width: 40px;
height: 40px;
border-radius: 50%;
}
}
.date{
margin: 5px 0 0;
color: #999;
font-size: 0.75em;
}
.body{
padding: 20px 20px 50px;
// padding: 12px 0 0;
// h2{
//
// }
a{
border-bottom: none;
}
img {
width: 100%;
max-width: 500px;
box-sizing: border-box;
border-radius: 5px;
border: 8px solid white;
box-shadow: 1px 2px 5px rgba(0, 0, 0, 0.35);
}
}
}
}
+103
View File
@@ -0,0 +1,103 @@
.timeline{
min-width: 500px;
position: relative;
margin: 0 0 50px;
&:before{
content: '';
width: 10px;
height: 10px;
position: absolute;
background-color: black;
top: 0;
left: calc(50% - 6px);
border-radius: 50%;
z-index: 1;
}
}
.post{
position: relative;
display: flex;
.head, .body{
position: relative;
width: 50%;
box-sizing: border-box;
}
.head {
padding: 25px 20px;
}
.body {
padding: 0 20px;
}
&.left{
flex-flow: row-reverse;
.body{
text-align: right;
}
.head{
text-align: left;
}
.body:after{
content: '';
position: absolute;
width: 12px;
height: calc(100% - 98px);
top: 98px;
right: 0;
background: url(/graphics/timeline-line.png) no-repeat right;
background-size: 2px 100%;
}
.head:after{
content: '';
position: absolute;
width: 12px;
height: 98px;
top: 0;
left: -12px;
background: url(/graphics/timeline-arrow-left.png) no-repeat;
}
}
&.right{
flex-flow: row;
.body{
text-align: left;
}
.head{
text-align: right;
margin: 0 10px;
}
.body:after{
content: '';
position: absolute;
width: 100px;
height: calc(100% - 98px);
top: 98px;
left: -12px;
background: url(/graphics/timeline-line.png) no-repeat;
background-size: 2px 100%;
}
.head:after{
content: '';
position: absolute;
width: 12px;
height: 98px;
top: 0;
left: calc(100% - 2px);
background: url(/graphics/timeline-arrow-right.png) no-repeat;
}
}
}
+140
View File
@@ -0,0 +1,140 @@
/**
* Created by tmshv on 22/11/14.
*/
var config = require("../config");
var db = require("../core/db");
var instagram = require("../core/instagram");
var express = require("express");
var Promise = require("promise");
var methodOverride = require("method-override");
var logger = require("morgan");
var cookieParser = require("cookie-parser");
var bodyParser = require("body-parser");
var Post = require("../schema/post");
db.init(config.db)
.then(function () {
server(config.port);
});
function server(port) {
var app = express();
app.use(logger("dev"));
app.use(cookieParser());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(methodOverride());
require("../routers/instagram")(app);
var Router = express.Router;
var instagram = require("../core/instagram");
var router = new Router();
router.route("/").get(function (req, res) {
if ("instagram_code" in req.cookies) {
var client = instagram.client(req.cookies["instagram_code"]);
instagramSandbox(client, res);
} else {
var ig = instagram.client();
var url = ig.get_authorization_url(config.instagram.redirect_uri, {scope: ["basic"], state: "hello"});
res.redirect(url);
}
});
app.use(router);
app.listen(port);
}
function instagramSandbox(ig, res) {
// //{"username":"mlazareffa","bio":"","website":"","profile_picture":"http://images.ak.instagram.com/profiles/anonymousUser.jpg","full_name":"","id":"1549382451"}
// //ig.user_search("mlazareffa", [], function(err, users, remaining, limit) {
// // console.log(err, users, remaining, limit);
// // res.json(users);
// //});
//
// // ig.user_media_recent("1549382451", [], function (err, medias, pagination, remaining, limit) {
// // console.log(err, medias, pagination, remaining, limit);
// // res.json(users);
// // });
//
// //ig.subscriptions(function(err, result, remaining, limit){
// // console.log(err, result, remaining, limit);
// // res.json(result);
// //});
//
// //ig.del_subscription({id: 14180526}, function (err, subscriptions, limit) {
// // console.log(err, subscriptions, limit);
// // res.json(subscriptions);
// //});
//
// ///* OPTIONS: { [verify_token] }
// // ig.add_tag_subscription("hello", "http://home.tmshv.ru:1337/instagram/tag/hello", [], function(err, result, remaining, limit){
// // console.log(err, result, remaining, limit);
// // res.json(result);
// //});
findByTag(ig, "shlb_hudozka", 50)
.catch(function (error) {
console.log(error);
})
.then(function (params) {
var list = params.medias;
var pagination = params.pagination;
var remaining = params.remaining;
var limit = params.limit;
var posts = list.map(function (gram) {
//var post = new Post();
var post = {};
post.id = gram.id;
post.author = gram.user["username"];
post.publishDate = new Date(parseInt(gram["created_time"]) * 1000);
post.data = gram;
post.body = "";
post.type = "instagram";
return post;
});
Promise.all(posts.map(function (post) {
return new Promise(function (resolve, reject) {
console.log('updating', post.id);
Post.update({id: post.id}, post, {upsert: true}, function (error, num) {
if (error) {
reject(error);
} else {
resolve();
}
});
});
}))
.catch(function (error) {
console.log(error);
})
.then(function () {
res.send("LOL");
});
//if (pagination.next) {
// pagination.next(mtr); // Will get second page results
//}
});
}
function findByTag(ig, tag, count) {
return new Promise(function (resolve, reject) {
ig.tag_media_recent(tag, {count: count}, function (err, medias, pagination, remaining, limit) {
if (err) {
reject(err);
} else {
resolve({
medias: medias,
pagination: pagination,
remaining: remaining,
limit: limit
});
}
});
});
}
+12
View File
@@ -0,0 +1,12 @@
/**
* Created by tmshv on 22/11/14.
*/
var config = require("../config");
var db = require("../core/db");
var server = require("../server");
db.init(config.db.uri)
.then(function () {
server(config.port);
});
+30
View File
@@ -0,0 +1,30 @@
{
"name": "hudozhka",
"version": "2.0.0",
"authors": [
"Roman Timashev <roman@tmshv.ru>"
],
"moduleType": [
"amd",
"es6",
"globals",
"node"
],
"license": "MIT",
"private": true,
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
],
"dependencies": {
"fotorama": "~4.6.2",
"jquery": "~2.1.1",
"angular-route": "~1.3.3",
"angular-animate": "~1.3.3",
"angular": "~1.3.3",
"angulartics": "~0.17.2"
}
}
+13
View File
@@ -0,0 +1,13 @@
/**
* Created by tmshv on 22/11/14.
*/
module.exports = function(app) {
app.factory("api", function ($http) {
var api = {};
var Endpoint = require("./news");
api.news = new Endpoint($http);
return api;
});
};
+13
View File
@@ -0,0 +1,13 @@
/**
* Created by tmshv on 22/11/14.
*/
function APIFeed(http){
this.request = http;
}
APIFeed.prototype.feed = function() {
return this.request.get("/news");
};
module.exports = APIFeed;
+79
View File
@@ -0,0 +1,79 @@
/**
* Created by tmshv on 04/11/14.
*/
var app = angular.module("hudozhka", [
"hudozhka.data",
"ngRoute",
"angulartics",
"angulartics.google.analytics"
]);
app.config(function ($locationProvider, $routeProvider) {
$locationProvider.hashPrefix("!");
$locationProvider.html5Mode(true);
var routes = [
{
name: "/",
templateUrl: "/views/home.html",
controller: "HomePageController",
title:"ДШХ Шлиссельбурга"
},
{
name: "/schedule",
templateUrl: "/views/schedule.html",
controller: "SchedulePageController",
title:"Расписание"
},
{
name: "/team",
templateUrl: "/views/team.html",
controller: "TeamPageController",
title:"Преподаватели"
},
{
name: "/docs",
templateUrl: "/views/docs.html",
controller: "DocsPageController",
title: "Документы"
}
];
routes.forEach(function (route) {
$routeProvider.when(route.name, route);
});
$routeProvider.otherwise({
templateUrl: "/404.html"
});
});
app.run(function($location, $rootScope, $http) {
$rootScope.$on("$routeChangeSuccess", function (event, current) {
$rootScope.title = current["$$route"].title;
});
$http.defaults.headers.common["Accept"] = "application/json";
});
require("./api/api")(app);
require("./ui/menu")(app);
require("./ui/timeline")(app);
require("./filters/uppercase-first")(app);
require("./pages/home")(app);
require("./pages/schedule")(app);
require("./pages/team")(app);
require("./pages/docs")(app);
app.controller("SchedulePageController", function ($scope) {
$scope.pageClass = "page-schedule";
});
app.controller("TeamPageController", function ($scope) {
$scope.pageClass = "page-team";
});
app.controller("DocsPageController", function ($scope) {
$scope.pageClass = "page-docs";
});
+19
View File
@@ -0,0 +1,19 @@
/**
* Created by tmshv on 06/11/14.
*/
angular.module("hudozhka.data", [])
.service("team", function () {
return require("../models/team");
})
.service("schedule", function () {
return require("../models/schedule");
})
.service("docs", function () {
return require("../models/document");
})
.service("config", function(){
return {
telephone: "8 (81362) 77-502"
};
});
+24 -126
View File
@@ -1,132 +1,30 @@
var Doc = (function(){
var Document = function(baseURL){
this.pages = [];
this.baseURL = baseURL;
}
Document.prototype.hasPage = function(index){
return index >= 0 && index < this.pages.length;
}
Document.prototype.getPageURL = function(pageNumber){
var s = pageNumber <2 ? "" : "/" + pageNumber;
return this.baseURL + s;
}
Document.prototype.page = function(index){
return index + 1;
}
return Document;
})();
var app = angular.module("hudozhka.document", [
"hudozhka.data",
"angulartics",
"angulartics.google.analytics"
]);
(function(){
const PAGES = [];
var currentPageIndex = 0;
var doc = new Doc(location.pathname.replace(/\/\d+$/, ""));
$(document).ready(function(){
try{
var hrefPage = /\/(\d+)$/.exec(location.href)[1];
currentPageIndex = parseInt(hrefPage) - 1;
}catch(error){
}
$("#buttonNext").click(function(event){
loadNext();
});
$("#buttonPrev").click(function(event){
loadPrevious();
});
$("#page-container .pf").each(function(index, elem){
var url = $(elem).data("page-url");
doc.pages.push(url);
});
$("#currentPage").attr("max", doc.pages.length);
$("#totalPages").text(doc.pages.length);
$("#currentPage").change(function(){
var i = parseInt($(this).val()) - 1;
if(i && doc.hasPage(i)){
loadPage(i);
}
});
$("#page-container").html("");
loadPage(currentPageIndex);
window.addEventListener("popstate", function(event){
console.log("pops");
console.log(event);
var i = event.state;
loadPage(i);
});
});
function loadNext(){
var i = currentPageIndex + 1;
if(doc.hasPage(i)){
loadPage(i);
app.factory("docname", function ($location) {
return function(){
var abs = $location.absUrl();
var doc_uri = /\/([\w-]+)$/.exec(abs);
if(doc_uri.length >= 2) {
return doc_uri[1];
}else{
return null;
}
}
function loadPrevious(){
var i = currentPageIndex - 1;
if(doc.hasPage(i)){
loadPage(i);
}else{
}
});
app.controller("DocumentController", function ($rootScope, $scope, docs, docname) {
$scope.pageClass = "page-document";
var n = docname();
if(n) {
var d = docs.doc(n);
$scope.document = d;
$rootScope.title = d.title;
}
function loadPage(index){
if(doc.hasPage(index)){
var url = doc.pages[index];
// $.ajax(
// url,
});
// {
// xhrFields: {
// crossDomain: true,
// withCredentials: true
// },
// success: function(data, status){
// currentPageIndex = index;
// $("#currentPage").val(doc.page(currentPageIndex));
// $("#page-container").html(data);
// var p = doc.page(currentPageIndex);
// console.log("look at page ", p);
// window.history.pushState(
// currentPageIndex,
// "State 2013 — " + p,
// doc.getPageURL(p)
// );
// },
// error: function(xhr, aaa, error){
// console.log(error);
// }
// }
// );
$.get(url, function(data){
currentPageIndex = index;
$("#currentPage").val(doc.page(currentPageIndex));
$("#page-container").html(data);
var p = doc.page(currentPageIndex);
console.log("look at page ", p);
window.history.pushState(
currentPageIndex,
"State 2013 — " + p,
doc.getPageURL(p)
);
});
}
}
})();
require("./filters/uppercase-first")(app);
+11
View File
@@ -0,0 +1,11 @@
/**
* Created by tmshv on 21/11/14.
*/
module.exports = function(app) {
app.filter("uppercaseFirst", function () {
return function(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
};
});
};
+48
View File
@@ -0,0 +1,48 @@
module.exports = function (app) {
app.controller("DocumentsController", function ($scope, docs) {
$scope.documents = docs.docs;
});
};
/**
* Generates list of numbers
* @param {Number} start starting value
* @param {Number} num amount of numbers in list
* @param {Number} step difference value
* @return {Array} list of numbers
*/
function range(start, num, step) {
var list = [];
var val = start;
for (var i = 0; i < num; i++) {
list.push(val);
val += step;
}
return list;
}
///**
// * Monday date of current week
// * @param {[type]} d [description]
// * @return {[type]} [description]
// */
//function getMonday(d) {
// d = new Date(d);
// var day = d.getDay();
// var diff = d.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday
// return new Date(d.setDate(diff));
//}
function getDates(day) {
var dates = [];
var prev = day == 0 ? 0 : day - 1;
var next = 6 - prev;
var dayMask = range(-1, prev, -1).concat([0]).concat(range(1, next, 1));
dayMask.forEach(function (m) {
var time = Date.now() + (1000 * 60 * 60 * 24) * m;
var date = new Date(time);
dates.push(date.getDate());
});
return dates;
}
+12
View File
@@ -0,0 +1,12 @@
/**
* Created by tmshv on 22/11/14.
*/
module.exports = function (app) {
app.controller("HomePageController", function ($scope, config) {
$scope.pageClass = "page-home";
$scope.telephone = config.telephone;
$(".fotorama").fotorama();
});
};
+81
View File
@@ -0,0 +1,81 @@
var populate = require("../../utils/populate").populate;
const course = require("../../models/course");
module.exports = function (app) {
app.controller("ScheduleController", function ($scope, $http, schedule, team) {
var now = new Date();
var dates = getDates(now);
var sem = "autumn";
$scope.sem = [["spring", "весеннего"], ["autumn", "осеннего"]].reduce(function (s, word) {
if (word[0] === sem) return word[1];
});
$scope.year = "2014-2015";
$http.get("/schedule/2014-2015/spring")
.success(function (s) {
$scope.schedule = schedule.populate(s.schedule, [
populate(team.short, "teacher"),
populate(course.name, "lesson")
]);
});
$scope.isToday = function (weekDayIndex) {
return (now.getDay() - 1) === weekDayIndex;
};
$scope.weekDay = function (weekDayIndex) {
return dates[weekDayIndex];
};
$(window).scroll(function () {
if ($(this).scrollTop() >= 220) {
$(".schedule table thead").addClass("fix animated fadeInDown");
$(".schedule table tbody").addClass("fix");
} else {
$(".schedule table thead").removeClass("fix animated fadeInDown");
$(".schedule table tbody").removeClass("fix");
}
});
});
};
/**
* Generates list of numbers
* @param {Number} start starting value
* @param {Number} num amount of numbers in list
* @param {Number} step difference value
* @return {Array} list of numbers
*/
function range(start, num, step) {
var list = [];
var val = start;
for (var i = 0; i < num; i++) {
list.push(val);
val += step;
}
return list;
}
///**
// * Monday date of current week
// * @param {[type]} d [description]
// * @return {[type]} [description]
// */
//function getMonday(d) {
// d = new Date(d);
// var day = d.getDay();
// var diff = d.getDate() - day + (day == 0 ? -6 : 1); // adjust when day is sunday
// return new Date(d.setDate(diff));
//}
function getDates(start) {
var day = start.getDay();
return range(0, 6, 1).reduce(function (dates, weekDay) {
var d = 1 + weekDay - day;
var time = start.getTime() + (1000 * 60 * 60 * 24) * d;
var date = new Date(time);
dates.push(date.getDate());
return dates;
}, []);
}
+11
View File
@@ -0,0 +1,11 @@
var populate = require("../../utils/populate").populate;
const course = require("../../models/course");
module.exports = function (app) {
app.controller("TeamController", function ($scope, team) {
$scope.team = team.team.map(function (person) {
person.names = team.splitName(person.name);
return person;
});
});
};
-83
View File
@@ -1,83 +0,0 @@
$(document).ready(function(){
$(window).scroll(function(){
if ($(window).scrollTop() >= 220) {
$(".schedule table thead").addClass("fix animated fadeInDown");
$(".schedule table tbody").addClass("fix");
}else{
$(".schedule table thead").removeClass("fix animated fadeInDown");
$(".schedule table tbody").removeClass("fix");
}
});
var now = new Date();
var day = now.getDay();
// day = 3;
if(day == 0) deselectDays();
else selectDay(day);
var dates = getDates(day);
$(".schedule thead .date").each(function(index, elem){
$(elem).text(dates[index]);
});
function selectDay(day){
deselectDays();
// day = Math.min(1, day);
// day = Math.max(6, day);
$($(".schedule thead th")[day]).addClass("current first");
$(".schedule tbody tr").each(function(index, elem){
$($(elem).find("td")[day]).addClass("current");
});
$($(".schedule tbody tr").last().find("td")[day]).addClass("last");
}
function deselectDays(){
$(".schedule thead th").removeClass("current first");
$(".schedule tbody td").removeClass("current last");
}
});
/**
* Generates list of numbers
* @param {Number} start starting value
* @param {Number} num amount of numbers in list
* @param {Number} step difference value
* @return {Array} list of numbers
*/
function range(start, num, step){
var list= [];
var val = start;
for(var i = 0; i<num; i++){
list.push(val);
val += step;
}
return list;
}
/**
* Monday date of current week
* @param {[type]} d [description]
* @return {[type]} [description]
*/
function getMonday(d) {
d = new Date(d);
var day = d.getDay();
var diff = d.getDate() - day + (day == 0 ? -6:1); // adjust when day is sunday
return new Date(d.setDate(diff));
}
function getDates(day){
var dates = [];
var prev = day == 0 ? 0 : day - 1;
var next = 6 - prev;
var dayMask = range(-1, prev, -1).concat([0]).concat(range(1, next, 1));
console.log("day mask", dayMask);
dayMask.forEach(function(m){
var time = Date.now() + (1000 * 60 * 60 * 24) * m;
var date = new Date(time);
console.log(date);
dates.push(date.getDate());
});
return dates;
}
+31
View File
@@ -0,0 +1,31 @@
/**
* Created by tmshv on 05/11/14.
*/
var menu = require("../../models/menu.json");
module.exports = function(app) {
app.service("menu", function ($route) {
menu.isActive = function (path) {
if ($route.current && $route.current.regexp) {
return $route.current.regexp.test(path);
}
return false;
};
return menu;
});
app.controller("MenuController", function ($scope, menu) {
$scope.vkgroup = menu.vkgroup;
$scope.menu = menu.menu;
$scope.isCurrent = function(item) {
return menu.isActive(item.url);
};
$scope.isValid = function(item) {
return Boolean(item.url);
};
});
};
+61
View File
@@ -0,0 +1,61 @@
/**
* Created by tmshv on 23/11/14.
*/
function personByInstagram(list, instagram){
list = list.filter(function (member) {
try {
return member.contacts.instagram === instagram;
} catch (error) {
return false;
}
});
if(list.length){
return list[0].id;
}else{
return null;
}
}
function postText(post){
try{
return post.data.caption.text.replace(/#[\w_]+/, "")
}catch(error){
return "";
}
}
module.exports = function(app) {
app.directive("timeline", function (team) {
return {
templateUrl: "/views/timeline.html",
scope: {
},
link: function(scope, element, attrs){
scope.isEven = function(index){
return index % 2 === 1;
}
},
controller: function($scope, api){
api.news.feed()
.success(function (list) {
$scope.feed = list.map(function (post) {
var author_id = personByInstagram(team.team, post.data.user.username);
var name = author_id ? team.short(author_id) : post.data.user.username;
return {
date: post.publishDate,
image: post.data.images.standard_resolution.url,
url: post.data.link,
username: name,
userpic: post.data.user.profile_picture,
text: postText(post)
};
});
});
}
};
});
};
+22 -13
View File
@@ -1,5 +1,4 @@
var populate = require("./utils/populate").populate;
var fs = require("fs");
const MENU = require("./models/menu.json");
const team = require("./models/team");
@@ -7,18 +6,28 @@ const course = require("./models/course");
const document = require("./models/document");
const schedule = require("./models/schedule");
module.exports = {
port: 18010,
var privateFile = process.env["PRIVATE"] || "private.json";
var privateData = JSON.parse(fs.readFileSync(privateFile, "utf-8"));
var config = {
port: process.env["PORT"] || 3000,
pub: "./",
data:{
data: {
menu: MENU,
documents: document.docs,
team: team.team,
courses: course.courses,
schedule: schedule([
populate(team.short, "teacher"),
populate(course.name, "lesson")
])
}
}
courses: course.courses
},
db: {
uri: "mongodb://localhost:27017/hudozka"
},
tags: ["shlb_hudozka"]
};
module.exports = Object.keys(privateData)
.reduce(function (config, key) {
config[key] = privateData[key];
return config;
}, config);
+42
View File
@@ -0,0 +1,42 @@
/**
* Created by tmshv on 22/11/14.
*/
var mongo = require("promised-mongo");
var ObjectId = mongo.ObjectId;
var client = null;
module.exports = {
init: function (uri) {
//noinspection JSUnresolvedFunction
return new Promise(function (resolve) {
client = mongo(uri);
resolve();
});
},
get db() {
return client;
},
c: function(name){
return client.collection(name);
},
id: function(i) {
if(typeof i === "string"){
return ObjectId(i);
}
else if(i instanceof ObjectId) {
return i;
}
else if(i instanceof Object) {
return "_id" in i ? ObjectId(i._id) : null;
}
return null;
}
};
+46
View File
@@ -0,0 +1,46 @@
/**
* Created by tmshv on 22/11/14.
*/
var config = require("../config");
var Promise = require("promise");
var auth_clients = {};
module.exports = {
client: function(param){
if(param in auth_clients) {
return auth_clients[param];
}else{
return createClient();
}
},
authorize: function(code){
return new Promise(function(resolve, reject){
var api = createClient();
api.authorize_user(code, config.instagram.redirect_uri, function (err, result) {
if (err) return reject(err);
else {
var token = result.access_token;
var c = createClient(token);
auth_clients[code] = c;
resolve(c);
}
});
});
}
};
function createClient(token) {
var api = require('instagram-node').instagram();
if (token) {
api.use({access_token: token});
} else {
api.use({
client_id: config.instagram.client_id,
client_secret: config.instagram.client_secret
});
}
return api;
}
Executable
+22
View File
@@ -0,0 +1,22 @@
#!/bin/sh
tarfile=build.tar.gz
tarpath=$TMPDIR$tarfile
env GZIP=-9 tar -czf $tarpath \
--disable-copyfile \
--exclude=node_modules \
--exclude=.git \
--exclude=.idea \
--exclude=.DS_Store \
--exclude=deploy.sh \
--exclude=install.sh .
echo "build file: $tarpath"
ssh shburg.et "rm -rf art/*"
scp $tarpath shburg@37.139.6.120:~
scp install.sh shburg@37.139.6.120:~
ssh shburg.et "./install.sh"
rm $tarpath
echo "art.shlisselburg.org deployment completed successfully"
+36 -14
View File
@@ -1,33 +1,55 @@
var path = require("path");
var gulp = require("gulp");
var sass = require("gulp-sass");
var minifyCSS = require("gulp-minify-css");
var minify_css = require("gulp-minify-css");
var autoprefixer = require("gulp-autoprefixer");
var imageMin = require("gulp-imagemin");
var uglify = require("gulp-uglify");
var pub = "./public/";
var concat = require("gulp-concat");
var browserify = require("gulp-browserify");
var annotate = require("browserify-ngannotate");
gulp.task("sass", function () {
gulp.src("./assets/style/*.scss")
.pipe(sass())
.pipe(minifyCSS())
.pipe(autoprefixer())
.pipe(gulp.dest("./public/s"));
.pipe(concat("style.css"))
.pipe(autoprefixer())
.pipe(minify_css({processImport:false}))
.pipe(gulp.dest("public"));
});
gulp.task("copy", function(){
gulp.src("./assets/fonts/*")
.pipe(gulp.dest("./public/fonts"));
gulp.src("./assets/style/*.css")
.pipe(gulp.dest("./public/s"));
gulp.src("./assets/graphics/*")
.pipe(gulp.dest("./public/graphics"));
gulp.src("./3rdparty/*")
.pipe(gulp.dest("./public"));
});
gulp.task("uglify", function(){
gulp.src("./client/*.js")
// .pipe(uglify())
.pipe(gulp.dest("./public/c"));
gulp.task("compile", function(){
gulp.src("client/app.js")
.pipe(browserify({
transform: [annotate]
}))
.pipe(uglify())
.pipe(gulp.dest("public"));
gulp.src("client/document.js")
.pipe(browserify({
transform: [annotate]
}))
.pipe(uglify())
.pipe(gulp.dest("public"));
gulp.src("client/data.js")
.pipe(browserify({
transform: [annotate]
}))
.pipe(uglify())
.pipe(gulp.dest("public"));
});
gulp.task("imagemin", function(){
@@ -36,5 +58,5 @@ gulp.task("imagemin", function(){
.pipe(gulp.dest("./public/img"));
});
gulp.task("default", ["sass", "copy", "uglify"]);
gulp.task("deploy", ["default", "imagemin"]);
gulp.task("default", ["sass", "compile"]);
gulp.task("deploy", ["default", "copy", "imagemin"]);
Executable
+19
View File
@@ -0,0 +1,19 @@
#!/bin/sh
gunzip build.tar.gz
tar xf build.tar -C ~/art
rm build.tar
cd ~/art
npm install --production --loglevel error
export NODE_ENV=production
export PORT=18010
#starting www
if forever restart bin/www.js; then
echo www.js restarted
else
forever start bin/www.js
echo www.js started
fi
-18
View File
@@ -1,18 +0,0 @@
const CONTENT_PATH = "http://hudozhka.tmshv.ru/files/";
const CONTENT_PATH = "/files/";
var fs = require("fs");
function gatherNotFoundCollection (dir) {
var list = fs.readdirSync(dir);
if(list){
list.forEach(function(i){
});
}
return [];
}
var config = require("./config").populate({
});
+19 -57
View File
@@ -2,85 +2,47 @@
{
"name": "statue-2013",
"title": "устав школы за 2013 год",
"path": "/document/statue-2013",
"preview": "/img/preview/statue-2013.png",
"download": "http://static.shburg.org/art/docs/hudozhka_statue-2013.pdf",
"url": [
"/f/hudozhka_statue-2013-1.page",
"/f/hudozhka_statue-2013-2.page",
"/f/hudozhka_statue-2013-3.page",
"/f/hudozhka_statue-2013-4.page",
"/f/hudozhka_statue-2013-5.page",
"/f/hudozhka_statue-2013-6.page",
"/f/hudozhka_statue-2013-7.page",
"/f/hudozhka_statue-2013-8.page",
"/f/hudozhka_statue-2013-9.page",
"/f/hudozhka_statue-2013-10.page",
"/f/hudozhka_statue-2013-11.page",
"/f/hudozhka_statue-2013-12.page",
"/f/hudozhka_statue-2013-13.page",
"/f/hudozhka_statue-2013-14.page",
"/f/hudozhka_statue-2013-15.page",
"/f/hudozhka_statue-2013-16.page",
"/f/hudozhka_statue-2013-17.page",
"/f/hudozhka_statue-2013-18.page",
"/f/hudozhka_statue-2013-19.page",
"/f/hudozhka_statue-2013-20.page",
"/f/hudozhka_statue-2013-21.page",
"/f/hudozhka_statue-2013-22.page",
"/f/hudozhka_statue-2013-23.page",
"/f/hudozhka_statue-2013-24.page",
"/f/hudozhka_statue-2013-25.page",
"/f/hudozhka_statue-2013-26.page",
"/f/hudozhka_statue-2013-27.page"
],
"extra": {
"style": ["http://static.shburg.org/art/docs/preview/hudozhka_statue-2013.css"]
},
"viewer": "default"
"url": "http://static.shburg.org/art/docs/hudozhka_statue-2013.pdf",
"preview": "http://static.shburg.org/art/graphics/statue-2013-preview.png",
"files": ["http://static.shburg.org/art/docs/hudozhka_statue-2013.pdf"]
},
{
"name": "edu-license",
"title": "образовательная лицензия",
"path": "/document/edu-license",
"preview": "/img/preview/license_edu.png",
"url": [
"url": "/document/edu-license",
"preview": "http://static.shburg.org/art/graphics/license_edu-preview.png",
"files": [
"http://static.shburg.org/art/docs/hudozhka_license_edu.jpg",
"http://static.shburg.org/art/docs/hudozhka_license_edu_back.jpg",
"http://static.shburg.org/art/docs/hudozhka_license_edu_attachment.jpg"
],
"viewer": "img-sheet"
]
},
{
"name": "gov-certificate",
"title": "свидетельство о государственной регистрации права",
"path": "/document/gov-certificate",
"preview": "/img/preview/certificate_gov.png",
"url": ["http://static.shburg.org/art/docs/hudozhka_certificate_gov.jpg"],
"viewer": "img-sheet"
"url": "/document/gov-certificate",
"preview": "http://static.shburg.org/art/graphics/certificate_gov-preview.png",
"files": ["http://static.shburg.org/art/docs/hudozhka_certificate_gov.jpg"]
},
{
"name": "VAT",
"title": "ИНН",
"path": "/document/VAT",
"preview": "/img/preview/vatin.png",
"url": ["http://static.shburg.org/art/docs/hudozhka_vatin.jpg"],
"viewer": "img-sheet"
"url": "/document/VAT",
"preview": "http://static.shburg.org/art/graphics/vatin-preview.png",
"files": ["http://static.shburg.org/art/docs/hudozhka_vatin.jpg"]
},
{
"name": "EGRYL1",
"title": "свидетельство о внесении в «ЕГРЮЛ»",
"path": "/document/EGRYL1",
"preview": "/img/preview/certificate_egryl1.png",
"url": ["http://static.shburg.org/art/docs/hudozhka_certificate_egryl1.jpg"],
"viewer": "img-sheet"
"url": "/document/EGRYL1",
"preview": "http://static.shburg.org/art/graphics/certificate_egryl1-preview.png",
"files": ["http://static.shburg.org/art/docs/hudozhka_certificate_egryl1.jpg"]
},
{
"name": "EGRYL2",
"title": "свидетельство о внесении в «ЕГРЮЛ»",
"path": "/document/EGRYL2",
"preview": "/img/preview/certificate_egryl2.png",
"url": ["http://static.shburg.org/art/docs/hudozhka_certificate_egryl2.jpg"],
"viewer": "img-sheet"
"url": "/document/EGRYL2",
"preview": "http://static.shburg.org/art/graphics/certificate_egryl2-preview.png",
"files": ["http://static.shburg.org/art/docs/hudozhka_certificate_egryl2.jpg"]
}
]
+31 -31
View File
@@ -1,33 +1,33 @@
{
"items":[
{
"text":"Школа",
"url":"/",
"class":"selected blue"
},
{
"text":"Расписание",
"url":"/schedule",
"class":"selected green"
},
{
"text":"Занятия",
"class":"selected"
},
{
"text":"Коллектив",
"url":"/team",
"class":"selected pink"
},
{
"text":"Галерея",
"class":"selected"
},
{
"text":"Документы",
"url":"/docs",
"class":"selected yellow"
}
],
"vkgroup":"https://vk.com/club10436104"
"menu": [
{
"text": "Школа",
"url": "/",
"color": "blue"
},
{
"text": "Расписание",
"url": "/schedule",
"color": "green"
},
{
"text": "Занятия",
"color": ""
},
{
"text": "Коллектив",
"url": "/team",
"color": "pink"
},
{
"text": "Галерея",
"color": ""
},
{
"text": "Документы",
"url": "/docs",
"color": "yellow"
}
],
"vkgroup": "https://vk.com/club10436104"
}
-438
View File
@@ -1,438 +0,0 @@
[
{
"name": "1-1",
"tuesday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"thursday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"saturday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"11:00 – 11:45",
"11:55 – 12:40"
]
}
},
{
"name": "1-2",
"tuesday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"thursday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"saturday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"13:00 – 13:45",
"13:55 – 14:40"
]
}
},
{
"name": "1-3",
"monday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"friday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"saturday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
}
},
{
"name": "2-1",
"monday": {
"lesson": "composition",
"teacher": ".",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"wednesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"saturday": {
"lesson": "composition",
"teacher": "Тимашева А.С.",
"time": [
"11:00 – 11:45",
"11:55 – 12:40"
]
}
},
{
"name": "2-2",
"monday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"wednesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"saturday": {
"lesson": "composition",
"teacher": "Тимашева А.С.",
"time": [
"13:00 – 13:45",
"13:55 – 14:40"
]
}
},
{
"name": "2-3",
"monday": {
"lesson": "painting",
"teacher": " ",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"thursday": {
"lesson": "cg",
"teacher": "nv-andreeva",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"friday": {
"lesson": "composition",
"teacher": "Тимашева А.С.",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
}
},
{
"name": "3-1",
"monday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"tuesday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 – 17:45",
""
]
},
"thursday": {
"lesson": "painting",
"teacher": "sa-latipova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"saturday": {
"lesson": "cg",
"teacher": "rk-timashev",
"time": [
"13:00 – 13:45",
"13:55 – 14:40"
]
}
},
{
"name": "3-2",
"monday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"tuesday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 – 17:45",
""
]
},
"thursday": {
"lesson": "painting",
"teacher": ".",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"saturday": {
"lesson": "cg",
"teacher": "rk-timashev",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
}
},
{
"name": "3-3",
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 – 17:45",
""
]
},
"thursday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"friday": {
"lesson": "painting",
"teacher": "Тимашева А.С.",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"saturday": {
"lesson": "drawing",
"teacher": "Тимашева А.С.",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
}
},
{
"name": "4-1",
"monday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"tuesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 – 18:45",
""
]
},
"friday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
}
},
{
"name": "4-2",
"monday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"tuesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 – 18:45",
""
]
},
"friday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
}
},
{
"name": "5-1",
"monday": {
"lesson": "painting",
"teacher": ".",
"time": [
"15:00 – 15:45",
"15:55 – 16:40"
]
},
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 – 17:45",
""
]
}
},
{
"name": "5-2",
"monday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"tuesday": {
"lesson": "drawing",
"teacher": "mg-timasheva",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 – 17:45",
""
]
}
},
{
"name": "6-1",
"wednesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 – 17:45",
"17:55 – 18:40"
]
},
"thursday": {
"lesson": "drawing",
"teacher": "mg-timasheva",
"time": [
"16:00 – 17:45",
""
]
},
"friday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"17:00 – 17:45",
"17:55 18:40"
]
}
},
{
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 – 18:45",
""
]
}
}
]
-402
View File
@@ -1,402 +0,0 @@
[
{
"name": "1",
"monday": {
"lesson": "composition",
"teacher": "as-timasheva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"tuesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"saturday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"10:00 10:45",
"10:55 11:40"
]
}
},
{
"name": "2",
"tuesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"friday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"saturday": {
"lesson": "composition",
"teacher": "as-timasheva",
"time": [
"12:00 12:45",
"12:55 13:40"
]
}
},
{
"name": "3",
"thursday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"friday": {
"lesson": "sculpting",
"teacher": "in-vturina",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"saturday": {
"lesson": "composition",
"teacher": "as-timasheva",
"time": [
"10:00 10:45",
"10:55 11:40"
]
}
},
{
"name": "4",
"monday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"wednesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"thursday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
}
},
{
"name": "5",
"monday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"wednesday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"thursday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
}
},
{
"name": "6",
"wednesday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"thursday": {
"lesson": "painting",
"teacher": "od-gogoleva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"friday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"15:00 15:45",
"15:55 16:40"
]
}
},
{
"name": "7",
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 17:45"
]
},
"thursday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"friday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"saturday": {
"lesson": "cg",
"teacher": "rk-timashev",
"time": [
"10:00 10:45",
"10:55 11:40"
]
}
},
{
"name": "8",
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 17:45"
]
},
"thursday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"friday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"saturday": {
"lesson": "cg",
"teacher": "rk-timashev",
"time": [
"12:00 12:45",
"12:55 13:40"
]
}
},
{
"name": "9",
"monday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"tuesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 18:45"
]
},
"friday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
}
},
{
"name": "10",
"monday": {
"lesson": "drawing",
"teacher": "sa-latipova",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"tuesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"wednesday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 18:45"
]
},
"friday": {
"lesson": "composition",
"teacher": "nv-andreeva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
}
},
{
"name": "11",
"monday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"wednesday": {
"lesson": "drawing",
"teacher": "mg-timasheva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
},
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 17:45"
]
},
"friday": {
"lesson": "composition",
"teacher": "od-gogoleva",
"time": [
"15:00 15:45",
"15:55 16:40"
]
}
},
{
"name": "12",
"monday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"wednesday": {
"lesson": "drawing",
"teacher": "mg-timasheva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"17:00 17:45"
]
},
"friday": {
"lesson": "composition",
"teacher": "od-gogoleva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
}
},
{
"name": "13",
"tuesday": {
"lesson": "drawing",
"teacher": "mg-timasheva",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"wednesday": {
"lesson": "painting",
"teacher": "va-sarzhin",
"time": [
"17:00 17:45",
"17:55 18:40"
]
},
"thursday": {
"lesson": "history",
"teacher": "my-valkova",
"time": [
"18:00 18:45"
]
},
"friday": {
"lesson": "composition",
"teacher": "vv-voronova",
"time": [
"17:00 17:45",
"17:55 18:40"
]
}
}
]
+54 -53
View File
@@ -1,61 +1,62 @@
var pop = require("../utils/populate").pop;
var populate = require("../utils/populate").populate;
const SCHEDULE = require("./schedule-2014-early.json");
const WEEK = ["monday", "tuesday", "wednesday", "thursday", "friday", "saturday"];
module.exports = schedule;
function schedule(pops){
var days = function(group){
var result = [];
WEEK.forEach(function(i){
var lesson = group[i];
if(lesson){
result.push(
pop(lesson)
.populate(time())
.populate(pops)
.result()
)
}else{
result.push(null);
}
});
return result;
}
module.exports = {
populate: populateSchedule
};
var time = function(){
return function(lesson){
for(var i=0; i < lesson.time.length; i++){
lesson.time[i] = lesson.time[i].replace(" ", "—");
}
return lesson;
}
}
function populateSchedule(s, pops) {
var days = function (group) {
var result = [];
var mondayTime = function(group){
var day;
for(var i=0; i<WEEK.length; i++){
if(group[WEEK[i]]){
day = WEEK[i];
break;
}
}
if(day){
return group[day].time[0].substr(0, 5);
}else{
return "00:00"
}
}
WEEK.forEach(function (i) {
var lesson = group[i];
if (lesson) {
result.push(
pop(lesson)
.populate(time())
.populate(pops)
.result()
)
} else {
result.push(null);
}
});
return result;
};
var result = [];
SCHEDULE.forEach(function(group){
result.push({
name: group.name,
days: days(group),
time: mondayTime(group)
});
});
return result;
var time = function () {
return function (lesson) {
for (var i = 0; i < lesson.time.length; i++) {
lesson.time[i] = lesson.time[i].replace(" ", "—");
}
return lesson;
}
};
var mondayTime = function (group) {
var day;
for (var i = 0; i < WEEK.length; i++) {
if (group[WEEK[i]]) {
day = WEEK[i];
break;
}
}
if (day) {
return group[day].time[0].substr(0, 5);
} else {
return "00:00"
}
};
var result = [];
s.forEach(function (group) {
result.push({
name: group.name,
days: days(group),
time: mondayTime(group)
});
});
return result;
}
+12 -5
View File
@@ -1,9 +1,12 @@
const TEAM = require("./team.json");
exports.team = TEAM;
exports.person = getPersonByID;
exports.name = getNameByID;
exports.short = getShortNameByID;
module.exports = {
team: TEAM,
person: getPersonByID,
name: getNameByID,
short: getShortNameByID,
splitName: splitName
};
function getPersonByID(id){
for(var i=0; i<TEAM.length; i++){
@@ -28,9 +31,13 @@ function getShortNameByID(id){
}
function shortifyName(name){
var m = /(.+)\s(.+)\s(.+)/.exec(name);
var m = splitName(name);
var n = m[1].replace(/^(.).+/, "$1. ") +
m[2].replace(/^(.).+/, "$1. ") +
m[3];
return n;
}
function splitName(name){
return /(.+)\s(.+)\s(.+)/.exec(name);
}
+18 -14
View File
@@ -4,16 +4,17 @@
"name": "Марина Геннадьевна Тимашева",
"position": "Директор",
"edu": "Ленинградский инженерно-строительный институт",
"diplom": "НВ №222567",
"diploma": "НВ №222567",
"status": "",
"picture": "http://static.shburg.org/art/team/teacher5.jpg"
"picture": "http://static.shburg.org/art/team/teacher5.jpg",
"anchor": "director"
},
{
"id": "va-sarzhin",
"name": "Валерий Александрович Саржин",
"position": "Преподаватель живописи",
"edu": "Академия художеств имени И. Е. Репина",
"diplom": "B-I №259798",
"diploma": "B-I №259798",
"status": "Первая квалификационная категория по живописи и станковой композиции",
"picture": "http://static.shburg.org/art/team/teacher10.jpg"
},
@@ -22,7 +23,7 @@
"name": "Ольга Дмитриевна Гоголева",
"position": "Преподаватель живописи",
"edu": "Ленинградский инженерно-строительный институт",
"diplom": "B-I №222572",
"diploma": "B-I №222572",
"status": "Высшая квалификационная категория по живописи и станковой композиции",
"picture": "http://static.shburg.org/art/team/teacher11.jpg"
},
@@ -31,7 +32,7 @@
"name": "Наталья Викторовна Андреева",
"position": "Преподаватель композиции",
"edu": "Санкт-Петербургский государственный университет технологии и дизайна",
"diplom": "ИВС 0514253",
"diploma": "ИВС 0514253",
"status": "Вторая квалификационная категория по прикладной композиции",
"picture": "http://static.shburg.org/art/team/teacher2.jpg"
},
@@ -40,7 +41,7 @@
"name": "Вера Викторовна Воронова",
"position": "Преподаватель композииции",
"edu": "Российский государственный университет имени А. И. Герцена",
"diplom": "ВСГ 0530340",
"diploma": "ВСГ 0530340",
"status": "Вторая квалификационная категория по прикладной композиции",
"picture": "http://static.shburg.org/art/team/teacher1.jpg"
},
@@ -49,7 +50,7 @@
"name": "Ирина Николаевна Втюрина",
"position": "Преподаватель скульптуры",
"edu": "Кировский государственный педагогический институт имени В. И. Ленина",
"diplom": "ШВ №164501",
"diploma": "ШВ №164501",
"status": "Первая квалификационная категория по скульптуре",
"picture": "http://static.shburg.org/art/team/teacher8.jpg"
},
@@ -58,7 +59,7 @@
"name": "Мария Юрьевна Валькова",
"position": "Преподаватель истории искусства",
"edu": "Педагогический институт имени А. И. Герцена",
"diplom": "ПП №224197",
"diploma": "ПП №224197",
"status": "Высшая квалификационная категория по истории искусства",
"picture": "http://static.shburg.org/art/team/teacher.jpg"
},
@@ -67,25 +68,28 @@
"name": "Руслан Камилевич Тимашев",
"position": "Преподаватель компьютерной графики",
"edu": "Санкт-Петербургский государственный архитектурно-строительный университет",
"diplom": "ВСГ 5344910",
"diploma": "ВСГ 5344910",
"status": "",
"picture": "http://static.shburg.org/art/team/teacher4.jpg"
},
{
"id": "as-timasheva",
"name": "Анна Сергеевна Манцева",
"name": "Анна Сергеевна Тимашева",
"position": "Преподаватель рисунка",
"edu": "Московский архитектурный институт",
"diplom": "РН 70241",
"diploma": "РН 70241",
"status": "",
"picture": "http://static.shburg.org/art/team/teacher3.jpg"
"picture": "http://static.shburg.org/art/team/teacher3.jpg",
"contacts": {
"instagram": "annm101"
}
},
{
"id": "sa-latipova",
"name": "Серафима Александровна Латыпова",
"position": "Преподаватель рисунка",
"edu": "Незаконченный Ленинградский государственный педагогический университет имени А. С. Пушкина",
"diplom": "",
"diploma": "",
"status": "",
"picture": "http://static.shburg.org/art/team/teacher9.jpg"
},
@@ -94,7 +98,7 @@
"name": "Евгения Юрьевна Тарасова",
"position": "Преподаватель гравюры",
"edu": "Санкт-Петербургский государственный архитектурно-строительный университет",
"diplom": "ВСВ 1321444",
"diploma": "ВСВ 1321444",
"status": "",
"picture": "http://static.shburg.org/art/team/teacher.jpg"
}
+3 -44
View File
@@ -5,58 +5,17 @@ server {
server_name art.shlisselburg.org;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ /index.html;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
proxy_pass http://localhost:18010;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $remote_addr;
}
error_log /var/log/nginx/hudozhka.error.log;
access_log /var/log/nginx/hudozhka.access.log;
# Only for nginx-naxsi used with nginx-naxsi-ui : process denied requests
#location /RequestDenied {
# proxy_pass http://127.0.0.1:8080;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root /usr/share/nginx/html;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# fastcgi_split_path_info ^(.+\.php)(/.+)$;
# # NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
#
# # With php5-cgi alone:
# fastcgi_pass 127.0.0.1:9000;
# # With php5-fpm:
# fastcgi_pass unix:/var/run/php5-fpm.sock;
# fastcgi_index index.php;
# include fastcgi_params;
#}
}
server {
listen 80;
server_name hudozhka.shlisselburg.org
hudozka.shlisselburg.org
artschool.shlisselburg.org
art-school.shlisselburg.org
hudozhka.shburg.org
hudozka.shburg.org
artschool.shburg.org
art-school.shburg.org
;
server_name art.shburg.org;
return 301 $scheme://art.shlisselburg.org$request_uri;
}
+25 -14
View File
@@ -1,12 +1,10 @@
{
"name": "app",
"name": "Hudozka",
"private": true,
"version": "0.1.0",
"version": "3.0.0",
"description": "",
"main": "main.js",
"scripts": {
"start": "node ./server.js",
"install": "gulp deploy",
"test": "mocha"
},
"repository": {
@@ -16,18 +14,31 @@
"author": "Roman Timashev",
"license": "ISC",
"dependencies": {
"consolidate": "~0.10.0",
"jade": "~1.1.5",
"express": "~3.4.8",
"gulp-uglify": "^0.2.1"
"instagram-node": "^0.5.1",
"koa": "^0.18.0",
"koa-conditional-get": "^1.0.2",
"koa-etag": "^2.0.0",
"koa-helmet": "0.0.3",
"koa-logger": "^1.2.2",
"koa-prerender": "^1.0.3",
"koa-route": "^2.4.0",
"koa-static": "^1.4.9",
"koa-useragent": "0.0.5",
"mz": "^1.3.0",
"promised-mongo": "^0.11.1"
},
"devDependencies": {
"gulp": "~3.5.2",
"should": "~3.1.2",
"mocha": "~1.17.1",
"gulp-sass": "~0.6.0",
"gulp-minify-css": "~0.3.0",
"bower": "^1.3.12",
"browserify-ngannotate": "^0.7.1",
"gulp": "^3.8.10",
"gulp-autoprefixer": "0.0.6",
"gulp-browserify": "^0.5.0",
"gulp-concat": "^2.4.1",
"gulp-imagemin": "~0.1.5",
"gulp-autoprefixer": "0.0.6"
"gulp-minify-css": "~0.3.0",
"gulp-sass": "^1.2.2",
"gulp-uglify": "^1.1.0",
"mocha": "~1.17.1",
"should": "~3.1.2"
}
}
-118
View File
@@ -1,118 +0,0 @@
extends ../layout
block custom_head
link(rel="stylesheet", href="/s/docs.css")
block content
include ../menu
.main
for group in blocks
.docblock
if(group.type == 'documents')
//- h2 #{group.name}
for i in group.items
.doc
a(href='#{i.path}')
img(src='#{i.preview}')
span #{i.title}
//- .docblock
//- h2 Лицензии, свидетельства и уставы
//- .panel
//- .docs
//- .doc
//- img(src='/docs/preview/statue-2013.png')
//- a(href='/document/statue-2013') Устав школы в 2013 году
//- .doc
//- img(src='/docs/preview/license_edu.png')
//- a(href='/document/edu-license') Образовательная лицензия
//- .doc
//- img(src='/docs/preview/certificate_gov.png')
//- a(href='/document/gov_certificate') Свидетельство о государственной регистрации права
//- .doc
//- img(src='/docs/preview/vatin.png')
//- a(href='/document/VAT') ИНН
//- .doc
//- img(src='/docs/preview/certificate_egryl1.png')
//- a(href='/document/EGRYL1') Свидетельство о внесении в «ЕГРЮЛ»
//- .doc
//- img(src='/docs/preview/certificate_egryl2.png')
//- a(href='/document/EGRYL2') Свидетельство о внесении в «ЕГРЮЛ»
//- .docblock
//- h2 Грамоты
//- .panel
//- ul
//- li
//- a(href='').act.select ученикам
//- li
//- a(href='').act учителям
//- ul
//- li
//- a(href='').act 2014
//- li
//- a(href='').act.select 2013
//- li
//- a(href='').act 2012
//- li
//- a(href='').act 2011
//- li
//- a(href='').act 2010
//- li
//- a(href='').act 2009
//- li
//- a(href='').act 2008
//- li
//- a(href='').act 2007
//- .docs
//- .doc
//- img(src='/docs/temp/0002_600_0.jpg')
//- .doc
//- img(src='/docs/temp/gramota1296478114.jpg')
//- .doc
//- img(src='/docs/temp/Грамота_Буркун_И.Г.jpg')
//- .doc
//- img(src='/docs/temp/Грамота_ГребенникО.С.jpg')
//- .docblock
//- h2 Образовательные программы
//- .panel
//- .docs
//- .doc
//- img(src='/docs/temp/03_.JPG')
//- .docinfo
//- p
//- a(href='') Живопись
//- p 500 страниц
//- p
//- a(href='') Скачать пдф (5 mb)
//- .doc
//- img(src='/docs/temp/22.jpg')
//- .docinfo
//- p
//- a(href='') Рисунок
//- p 500 страниц
//- p
//- a(href='') Скачать пдф (5 mb)
//- .doc
//- img(src='/docs/temp/dokument.gif')
//- .docinfo
//- p
//- a(href='') Скульптура
//- p 500 страниц
//- p
//- a(href='') Скачать пдф (5 mb)
//- .doc
//- img(src='/docs/temp/license_cryptomodulc.jpg')
//- .docinfo
//- p
//- a(href='') ДПИ
//- p 500 страниц
//- p
//- a(href='') Скачать пдф (5 mb)
//- .doc
//- img(src='/docs/temp/1340870449_1283936456_dog_bez_pol.jpg')
//- .docinfo
//- p
//- a(href='') История искусств
//- p 500 страниц
//- p
//- a(href='') Скачать пдф (5 mb)
-15
View File
@@ -1,15 +0,0 @@
extends ../layout
block custom_head
link(rel="stylesheet", href="/s/document.css")
block menu
.menu
h1
span.bold ДХШ
span.norm Шлиссельбурга,
span.norm #{doc.name}
block content
.displaybox
iframe#doc(src="#{doc.download}")
-57
View File
@@ -1,57 +0,0 @@
extends ../layout
block custom_head
if doc.viewer == "default"
link(rel='stylesheet', href='/s/pdf.css')
link(rel='stylesheet', href='/s/document.css')
if doc.extra && doc.extra.style
for style in doc.extra.style
link(rel='stylesheet', href='#{style}')
if doc.viewer == "default"
script(src='http://code.jquery.com/jquery-2.1.0.min.js')
script(src='/c/document.js')
if doc.extra && doc.extra.script
for script in doc.extra.script
script(src='#{script}')
block content
.menu.opac
.panel
h1
span.bold ДХШ
span.norm Шлиссельбурга,
span.norm #{doc.title}
.panel.right
if doc.viewer == "default" && doc.url.length > 1
.controls
p.block
span Страница
input#currentPage(pattern='[0-9]{,3}')
| из
span#totalPages
p.block
button#buttonPrev ←
button#buttonNext →
if doc.download
p.block
a.download(href='#{doc.download}')
if doc.viewer == "default"
div(id='page-container')
for url in doc.url
//- p #{url}
.pf(data-page-url='#{url}')
//- img(src='#{url}')
//- //- for url in doc.url
//- //- .pf
//- //- //-
if doc.viewer == "img-sheet"
.doclist
for url in doc.url
img(src='#{url}')
-11
View File
@@ -1,11 +0,0 @@
doctype html
html
head
link(rel="stylesheet", href="/s/main.css")
link(rel="stylesheet", href="/fonts/stylesheet.css")
block custom_head
body
block content
include yandex.metrika.jade
-7
View File
@@ -1,7 +0,0 @@
extends ../layout
block custom_head
meta(name="google-site-verification", content="8BxOTw-Q02DS2KAdcGcnIMwiPZ58DVB18XpOfRibCcg")
block content
include ../menu
-10
View File
@@ -1,10 +0,0 @@
.menu
ul
each i in menu.items
li(class='#{i.class}')
if(i.url)
a(href='#{i.url}') #{i.text}
else
span #{i.text}
a.vk(href='#{menu.vkgroup}')
img(src='/img/icon.vk.png')
-46
View File
@@ -1,46 +0,0 @@
extends ../layout
block custom_head
link(rel='stylesheet', href='/s/animate.min.css')
link(rel='stylesheet', href='/s/schedule.css')
//- script(src='http://code.jquery.com/jquery-2.1.0.min.js')
script(src='/c/jquery-2.1.0.js')
script(src='/c/schedule.js')
block content
include ../menu
.schedule
p Расписание весеннего семестра 2014 года
//- ul
//- li
//- a(href='') 2012, осень
//- li
//- a(href='') 2013, весна
//- li
//- a(href='') 2013, осень
//- li.current 2014, весна
table
thead
- var days = ["Понедельник", "Вторник", "Среда", "Четверг", "Пятница", "Суббота"];
th.group Гр.
for day in days
//- th.current.first
//- th.weekend
th
p.day #{day}
p.date
tbody
for group in groups
tr
td.group
p.name #{group.name}
p.time #{group.time}
for day in group.days
td
if day
p.lesson
a(href='') #{day.lesson}
p.teacher
a(href='') #{day.teacher}
for time in day.time
p.time #{time}
-19
View File
@@ -1,19 +0,0 @@
extends ../layout
block custom_head
link(rel="stylesheet", href="/s/team.css")
block content
img.main-picture(src='http://static.shburg.org/art/team/team.jpg')
include ../menu
.main
ul.team-list
for member in team
li.team-member
img(src='#{member.picture}')
.info
h3 #{member.firstName} #{member.middleName}
span #{member.lastName}
p #{member.position}
p #{member.status}
p #{member.edu}
-13
View File
@@ -1,13 +0,0 @@
//- //Yandex.Metrika informer
//- a(href='http://metrika.yandex.ru/stat/?id=24027460&from=informer', target='_blank', rel='nofollow')
//- img(src='//bs.yandex.ru/informer/24027460/3_1_FFFFFFFF_EFEFEFFF_0_pageviews', style='width: 88px; height: 31px; border: 0;', alt='Яндекс.Метрика', title='Яндекс.Метрика: данные за сегодня (просмотры, визиты и уникальные посетители)', onclick='try{Ya.Metrika.informer({i:this,id:24027460,lang:\'ru\'});return false}catch(e){}')
//- //Yandex.Metrika informer
// Yandex.Metrika counter
script
include yandex.metrika.js
noscript
div
img(src='//mc.yandex.ru/watch/24027460', style='position: absolute; left: -9999px;', alt='')
// Yandex.Metrika counter
-1
View File
@@ -1 +0,0 @@
(function (d, w, c) { (w[c] = w[c] || []).push(function() { try { w.yaCounter24027460 = new Ya.Metrika({id:24027460, webvisor:true, clickmap:true, trackLinks:true, accurateTrackBounce:true}); } catch(e) { } }); var n = d.getElementsByTagName("script")[0], s = d.createElement("script"), f = function () { n.parentNode.insertBefore(s, n); }; s.type = "text/javascript"; s.async = true; s.src = (d.location.protocol == "https:" ? "https:" : "http:") + "//mc.yandex.ru/metrika/watch.js"; if (w.opera == "[object Opera]") { d.addEventListener("DOMContentLoaded", f, false); } else { f(); } })(document, window, "yandex_metrika_callbacks");
-46
View File
@@ -1,46 +0,0 @@
var Router = require("express").Router;
var route = require("./route");
var document = require("../models/document");
var router = new Router();
module.exports = router.middleware;
router.get("/docs", function(req, res){
var url = "/docs";
res.render("docs/docs", {
menu: route.menu(url),
blocks: [
{
type: "documents",
name: "Лицензии, свидетельства и уставы",
items: document.cap(
document.doc(
["statue-2013", "edu-license", "gov-certificate", "VAT", "EGRYL1", "EGRYL2"]
)
)
}
]
});
});
router.get("/document/:doc/:page?", function(req, res){
var name = req.param("doc");
var doc = document.doc(name);
// doc = document.extra(doc, {
// "style": [
// "/s/pdf.css"
// ],
// "script": [
// "http://code.jquery.com/jquery-2.1.0.min.js",
// "/c/document.js"
// ]
// });
if(doc){
doc.startPage = req.param("page");
res.render("document/document", {doc: doc});
}else{
res.error(404);
}
});
-45
View File
@@ -1,45 +0,0 @@
const config = require("../config")
function getMenu(){
return clone(config.data.menu);
}
function clone(obj){
if(obj == null || typeof(obj) != 'object')
return obj;
var temp = obj.constructor(); // changed
for(var key in obj)
temp[key] = clone(obj[key]);
return temp;
}
exports.menu = function(url){
var m = getMenu();
m.items.forEach(function(i){
if(i.url != url) i.class = "";
});
return m;
}
exports.team = function(processor) {
var list = [];
config.data.team.forEach(function(m){
if(processor){
processor(m);
}
list.push(m);
});
return list;
}
exports.nameProcessor = function(delimiter){
if(!delimiter) delimiter = /\s+/;
return function(member){
var nnn = member.name.split(delimiter);
member.firstName = nnn[0];
member.middleName = nnn[1];
member.lastName = nnn[2];
}
}
-15
View File
@@ -1,15 +0,0 @@
var Router = require("express").Router;
var config = require("../config");
var route = require("./route");
var router = new Router();
module.exports = router.middleware;
router.get("/schedule", function(req, res){
var url = "/schedule";
res.render("schedule/schedule", {
menu: route.menu(url),
groups: config.data.schedule
});
});
-20
View File
@@ -1,20 +0,0 @@
var Router = require("express").Router;
var route = require("./route");
// var router = Object.create(Router);
var router = new Router();
router.get("/team", function(req, res){
var url = "/team";
res.render("team/team", {
menu: route.menu(url),
team: route.team(route.nameProcessor())
});
});
router.get("/teachers/:name", function(req, res){
var name = req.param("name");
res.error(404);
});
module.exports = router;
+31
View File
@@ -0,0 +1,31 @@
/**
* Created by tmshv on 01/03/15.
*/
var route = require("koa-route");
var router = require("./");
module.exports = function (app) {
app.use(function *(next) {
yield next;
if (404 != this.status) return;
this.status = 404;
yield router.accepts({
"text/html": router.index(),
"text/plain": function *() {
this.type = "text/plain";
this.body = "Page not found";
},
"application/json": function *() {
this.type = "application/json";
this.body = {
message: "Not Found"
};
}
});
});
};
+41
View File
@@ -0,0 +1,41 @@
/**
* Created by tmshv on 01/03/15.
*/
var path = require("path");
var fs = require("mz/fs");
function accepts(routes, def) {
return function *() {
var req = this.request;
var types = Object.keys(routes)
.filter(function (type) {
return req.accepts(type);
});
if (types.length) {
var type = types[0];
yield routes[type].apply(this, arguments);
} else if(def){
yield def;
}else{
this.status = 406;
}
};
}
function index(filename) {
if (!filename){
filename = path.join(__dirname, "../templates/index.html");
}
return function *() {
this.type = "text/html";
this.body = fs.createReadStream(filename);
}
}
module.exports = {
index: index,
accepts: accepts
};
+42
View File
@@ -0,0 +1,42 @@
/**
* Created by tmshv on 22/11/14.
*/
var Router = require("express").Router;
var instagram = require("../core/instagram");
module.exports = function (app) {
var router;
router = new Router();
router.route("/auth/instagram/callback")
.get(function (req, res) {
var code = req.query.code;
instagram.authorize(code)
.catch(function(error){
console.log(error.body);
res.status(500).send('');
})
.then(function (client) {
res.cookie("instagram_code", code);
res.redirect("/");
});
});
app.use(router);
//http://your-callback.com/url/?hub.mode=subscribe&hub.challenge=15f7d1a91c1f40f8a748fd134752feb3&hub.verify_token=myVerifyToken
router = new Router();
router.route("/instagram/tag/:tag")
.get(function (req, res) {
var hub_challenge = req.query["hub.challenge"];
//var hub_verify_token = req.query["hub.verify_token"];
console.log("real time get", req.param("tag"), hub_challenge);
res.send(hub_challenge);
})
.post(function (req, res) {
console.log("real time tag", req.param("tag"));
console.log(req.body);
res.send("");
});
app.use(router);
};
+12
View File
@@ -0,0 +1,12 @@
/**
* Created by tmshv on 22/11/14.
*/
var route = require("koa-route");
var db = require("../core/db");
module.exports = function (app) {
app.use(route.get("/news", function *(){
this.body = yield db.c("posts").find().toArray();
}));
};
+47
View File
@@ -0,0 +1,47 @@
/**
* Created by tmshv on 22/11/14.
*/
var route = require("koa-route");
var router = require("./");
var db = require("../core/db");
var schedule = require("../models/schedule");
var populate = require("../utils/populate").populate;
const course = require("../models/course");
const team = require("../models/team");
module.exports = function (app) {
app.use(
route.get("/schedule/:period?/:semester?", router.accepts(
{
"text/html": router.index(),
"text/plain": router.index(),
"application/json": function *(period, semester) {
this.type = "application/json";
var doPopulate = this.query.populate || false;
var data = yield db.c("schedules").findOne({
period: period,
semester: semester
});
if(!data) {
this.status = 404;
return;
}
if(doPopulate) {
data.schedule = schedule.populate(data.schedule, [
populate(team.short, "teacher"),
populate(course.name, "lesson")
]);
}
this.body = data;
}
}
))
);
};
+67 -23
View File
@@ -1,31 +1,75 @@
var express = require("express");
var consolidate = require("consolidate");
var path = require("path");
var koa = require("koa");
var route = require("koa-route");
var serve = require("koa-static");
var logger = require("koa-logger");
var conditional = require("koa-conditional-get");
var etag = require("koa-etag");
var prerender = require("koa-prerender");
var helmet = require('koa-helmet');
var config = require("./config");
var routes = require("./routes");
var pub = "./public";
// var pub = path.resolve("~/Dropbox/Dev/Hud school/public/");
// console.log(pub);
// console.log(pub);
var app = koa();
app.proxy = true;
var server = express();
server.engine("jade", consolidate.jade);
server.set("view engine", "jade");
server.set("views", [__dirname, "/pages"].join(""));
server.use(express.static(pub));
app.use(logger());
app.use(conditional());
app.use(etag());
app.use(prerender(config.prerender));
server.get("/", function(req, res){
var url = "/";
var route = require("./routers/route");
res.render("main/main", {
menu: route.menu(url)
});
app.use(serve(path.join(__dirname, "public")));
app.use(serve(path.join(__dirname, "templates")));
app.use(helmet.defaults());
app.use(function *(next) {
var q = this.query;
this.query = Object.keys(q)
.reduce(function (q, key) {
var v = q[key];
if(v === "true"){
v = true;
}else if(v === "false"){
v = false;
}
q[key] = v;
return q;
}, q);
yield next;
});
server.use(require("./routers/schedule"));
server.use(require("./routers/team.router").middleware);
server.use(require("./routers/docs"));
app.use(route.get("/", routes.index()));
app.use(route.get("/team", routes.index()));
app.use(route.get("/docs", routes.index()));
server.listen(config.port);
console.log("welcome!");
// console.log(JSON.stringify(config.data.schedule, null, "\t"));
app.use(route.get("/document/:doc", routes.index(
path.join(__dirname, "templates/document.html")
)));
require("./routes/schedule")(app);
require("./routes/news")(app);
require("./routes/404")(app);
if (process.env["NODE_ENV"] === "development") {
app.use(route.get("/debug", function *() {
var out = {};
out.ip = this.ip;
out.host = this.host;
out.headers = this.headers;
out.protocol = this.protocol;
out.query = this.query;
out.url = this.url;
this.type = "application/json";
this.body = out;
}));
}
module.exports = function (port) {
app.listen(port);
};
+4
View File
@@ -0,0 +1,4 @@
<div class="error-404">
<h1>Страница не найдена.</h1>
<img src="http://static.shburg.org/art/graphics/skull.jpg" alt=""/>
</div>
+54
View File
@@ -0,0 +1,54 @@
<!DOCTYPE html>
<html ng-app="hudozhka.document">
<head>
<base href="/">
<link rel="stylesheet" href="/style.css">
<link rel="stylesheet" href="/fonts/stylesheet.css">
<meta name="google-site-verification" content="8BxOTw-Q02DS2KAdcGcnIMwiPZ58DVB18XpOfRibCcg">
<title ng-bind="title | uppercaseFirst"></title>
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/bower_components/angular/angular.min.js"></script>
<script src="/bower_components/angulartics/dist/angulartics.min.js"></script>
<script src="/bower_components/angulartics/dist/angulartics-ga.min.js"></script>
<script src="data.js"></script>
<script src="document.js"></script>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-60209057-1', 'auto');
// ga('send', 'pageview');
</script>
</head>
<body>
<div class="document-block" ng-controller="DocumentController">
<div class="menu transparent">
<div class="panel">
<h1>
<span class="bold">ДХШ</span>
<span class="norm">Шлиссельбурга</span> ,
<span class="norm">{{document.title}}</span>
</h1>
</div>
</div>
<div class="document doclist">
<img ng-src="{{url}}" alt="" ng-repeat="url in document.files"/>
</div>
</div>
</body>
</html>
+91
View File
@@ -0,0 +1,91 @@
<!DOCTYPE html>
<html ng-app="hudozhka">
<head>
<base href="/">
<meta name="fragment" content="!">
<meta name="google-site-verification" content="8BxOTw-Q02DS2KAdcGcnIMwiPZ58DVB18XpOfRibCcg">
<title ng-bind="title">ДШХ Шлиссельбурга</title>
<link rel="stylesheet" href="/style.css">
<link rel="stylesheet" href="/animate.min.css">
<link rel="stylesheet" href="/fonts/stylesheet.css">
<script src="/bower_components/jquery/dist/jquery.min.js"></script>
<script src="/bower_components/angular/angular.min.js"></script>
<script src="/bower_components/angular-route/angular-route.min.js"></script>
<script src="/bower_components/angular-animate/angular-animate.min.js"></script>
<script src="/bower_components/angulartics/dist/angulartics.min.js"></script>
<script src="/bower_components/angulartics/dist/angulartics-ga.min.js"></script>
<link rel="stylesheet" href="/bower_components/fotorama/fotorama.css">
<script src="/bower_components/fotorama/fotorama.js"></script>
<script src="/data.js"></script>
<script src="/app.js"></script>
<script>
(function (i, s, o, g, r, a, m) {
i['GoogleAnalyticsObject'] = r;
i[r] = i[r] || function () {
(i[r].q = i[r].q || []).push(arguments)
}, i[r].l = 1 * new Date();
a = s.createElement(o),
m = s.getElementsByTagName(o)[0];
a.async = 1;
a.src = g;
m.parentNode.insertBefore(a, m)
})(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga');
ga('create', 'UA-60209057-1', 'auto');
// ga('send', 'pageview');
</script>
</head>
<body>
<div class="menu" ng-controller="MenuController">
<ul>
<li ng-repeat="item in menu" class="{{item.color}}" ng-class="{selected:isCurrent(item)}">
<span ng-hide="isValid(item)">{{item.text}}</span>
<a href="{{item.url}}" ng-show="isValid(item)">{{item.text}}</a>
</li>
<a href="{{vkgroup}}" class="vk"><img src="/graphics/icon.vk.png"></a>
</ul>
</div>
<div class="page {{pageClass}}" ng-view></div>
<footer>
<div class="info-block">
<div>
<h4>Ссылки на образовательные сайты</h4>
<ul>
<li><a href="http://минобрнауки.рф">минобрнауки.рф</a> — Министерство образования и науки Российской Федерации</li>
<li><a href="http://edu.ru">edu.ru</a> — Федеральный сайт «Российское образование»</li>
<li><a href="http://window.edu.ru">window.edu.ru</a> — Единое окно доступа к образовательным ресурсам</li>
<li><a href="http://school-collection.edu.ru">school-collection.edu.ru</a> — Единая коллекция цифровых образовательных ресурсов</li>
<li><a href="http://fcior.edu.ru">fcior.edu.ru</a> — Федеральный центр информационных образовательных ресурсов</li>
</ul>
<ul>
<li><a href="http://dkhshmga.ru">dkhshmga.ru</a> — Художественная школа Мги</li>
<li><a href="http://kirovskdmh.ucoz.ru">kirovskdmh.ucoz.ru</a> — Музыкальная школа Кировска</li>
</ul>
</div>
<div>
<h4>Документы</h4>
<ul>
<li><a target="_blank" href="/document/edu-license">Лицензия на осуществление образовательной деятельности</a></li>
<li><a target="_blank" href="/document/gov-certificate">Свидетельство о государственной регистрации права</a></li>
<li><a target="_blank" href="/document/EGRYL1">Свидетельство о внесении в «ЕГРЮЛ»</a></li>
<li><a target="_blank" href="/document/VAT">ИНН</a></li>
<li><a target="_blank" href="/document/statue-2013">Устав школы</a></li>
</ul>
</div>
</div>
<div class="info-block">
<p>Художественная школа Шлиссельбурга, 2014 год</p>
</div>
</footer>
</body>
</html>
+10
View File
@@ -0,0 +1,10 @@
<div class="main" ng-controller="DocumentsController">
<div class="docblock"><h2>Лицензии, свидетельства и уставы</h2>
<div class="doc" ng-repeat="doc in documents">
<a href="{{doc.url}}" target="_blank">
<img ng-src="{{doc.preview}}">
<span>{{doc.title | uppercaseFirst}}</span>
</a>
</div>
</div>
</div>
+38
View File
@@ -0,0 +1,38 @@
<div>
<div class="main">
<div class="block">
<span class="telephone">{{telephone}}</span>
<!--<ul class="submenu">-->
<!--<li><a href="/team#director">директор</a><p>М. Г. Тимашева</p></li>-->
<!--<li><a href="/enter">поступление</a></li>-->
<!--<li><a href="/contacts">контактная информация</a></li>-->
<!--<li><a href="/awards">награды</a></li>-->
<!--</ul>-->
</div>
<h1>«Художественная школа <strong>Шлиссельбурга</strong>»</h1>
</div>
<div class="tape-block">
<div class="tape-block-content">
<div class="tape tape-tl"></div>
<div class="tape tape-tr"></div>
<div class="tape tape-bl"></div>
<div class="tape tape-br"></div>
<div class="fotorama"
data-transition="crossfade"
data-autoplay="6000"
data-arrows="false"
data-width="100%"
data-fit="cover"
data-loop="true">
<img src="http://static.shlisselburg.org/art/graphics/sample2.jpg" alt="">
<img src="http://static.shlisselburg.org/art/graphics/sample4.jpg" alt="">
<img src="http://static.shlisselburg.org/art/graphics/sample5.jpg" alt="">
</div>
</div>
</div>
<timeline></timeline>
</div>
+49
View File
@@ -0,0 +1,49 @@
<div class="schedule" ng-controller="ScheduleController">
<p> Расписание {{sem}} семестра {{year}} года</p>
<table>
<thead class="">
<tr>
<th class="group">Гр.</th>
<th ng-class="{current: isToday(0)}">
<p class="day">Понедельник</p>
<p class="date">{{weekDay(0)}}</p>
</th>
<th ng-class="{current: isToday(1)}">
<p class="day">Вторник</p>
<p class="date">{{weekDay(1)}}</p>
</th>
<th ng-class="{current: isToday(2)}">
<p class="day">Среда</p>
<p class="date">{{weekDay(2)}}</p>
</th>
<th ng-class="{current: isToday(3)}">
<p class="day">Четверг</p>
<p class="date">{{weekDay(3)}}</p>
</th>
<th ng-class="{current: isToday(4)}">
<p class="day">Пятница</p>
<p class="date">{{weekDay(4)}}</p>
</th>
<th ng-class="{current: isToday(5)}">
<p class="day">Суббота</p>
<p class="date">{{weekDay(5)}}</p>
</th>
</tr>
</thead>
<tbody class="">
<tr ng-repeat="group in schedule">
<td class="group">
<p class="name">{{group.name}}</p>
<p class="time">{{group.time}}</p>
</td>
<td ng-repeat="day in group.days track by $index" ng-class="{current: isToday($index)}">
<p class="lesson"><a href="">{{day.lesson}}</a></p>
<p class="teacher"><a href="">{{day.teacher}}</a></p>
<p class="time">{{day.time[0]}}</p>
<p class="time">{{day.time[1]}}</p>
</td>
</tr>
</tbody>
</table>
</div>
+18
View File
@@ -0,0 +1,18 @@
<img class="background-picture" src="http://static.shlisselburg.org/art/team/team.jpg">
<div class="team-block">
<ul ng-controller="TeamController">
<li class="team-member" ng-repeat="person in team">
<a name="{{person.anchor}}"></a>
<img ng-src="{{person.picture}}">
<div class="info">
<h3>{{person.names[1]}} {{person.names[2]}} <span>{{person.names[3]}}</span></h3>
<p>{{person.position}}</p>
<p>{{person.status}}</p>
<p></p>
<p class="edu">{{person.edu}} </p>
<p class="diploma">Диплом {{person.diploma}}</p>
</div>
</li>
</ul>
</div>
+22
View File
@@ -0,0 +1,22 @@
<div class="timeline">
<div class="post"
ng-repeat="post in feed"
ng-class="{left: isEven($index), right: !isEven($index)}">
<div class="head">
<div class="user">
<img ng-src="{{post.userpic}}" alt=""/>
<span>{{post.username}}</span>
</div>
<p class="date">{{post.date | date : "dd.MM.yyyy"}}</p>
</div>
<div class="body">
<!--<h2>Рисунок</h2>-->
<p>{{post.text}}</p>
<a href="{{post.url}}" target="_blank">
<img ng-src="{{post.image}}" alt="">
</a>
</div>
</div>
</div>