Разработка web-приложения "Виртуальная тестирующая среда "Познай себя"" для педагогов-психологов БагГУ

Обоснование технических приемов программирования, сущность функционального, полного тестирования. Проведение расчета прогнозируемой цены и прибыли на программное средство. Характеристика и особенности экономической целесообразности проведения мероприятия.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык русский
Дата добавления 10.12.2016
Размер файла 2,8 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

– производить отключение питания во время выполнения активной задачи; производить частые переключения питания;

– допускать попадание влаги на поверхность системного блока (процессора), монитора, рабочую поверхность клавиатуры, дисководов, принтеров и др. устройств;

– включать сильноохлажденное (принесенное с улицы в зимнее время) оборудование;

– производить самостоятельно вскрытие и ремонт оборудования.

7.4 Требования безопасности в аварийных ситуациях

Программист обязан:

– во всех случаях обнаружения обрыва проводов питания, неисправности заземления и других повреждений электрооборудования, появления запаха гари немедленно отключить питание и сообщить об аварийной ситуации руководителю и дежурному электрику;

– при обнаружении человека, попавшего под напряжение, немедленно освободить его от действия тока путем отключения электропитания и до прибытия врача оказать потерпевшему первую медицинскую помощь;

– при любых случаях сбоя в работе технического оборудования или программного обеспечения немедленно вызвать представителя инженерно-технической службы эксплуатации вычислительной техники;

– в случае появления рези в глазах, резком ухудшении видимости, - невозможности сфокусировать взгляд или навести его на резкость, появлении боли в пальцах и кистях рук, усилении сердцебиения немедленно покинуть рабочее место, сообщить о происшедшем руководителю работ и обратиться к врачу;

– при возгорании оборудования отключить питание и принять меры к тушению очага пожара при помощи углекислотного или порошкового огнетушителя, вызвать пожарную команду и сообщить о происшествии руководителю работ.

7.5 Требования безопасности по окончании работы

По окончании работ программист обязан соблюдать следующую последовательность выключения вычислительной техники:

– произвести закрытие всех активных задач;

– выполнить парковку считывающей головки жесткого диска (если не предусмотрена автоматическая парковка головки);

– убедиться, что в дисководах нет дискет;

– выключить питание системного блока (процессора);

– выключить питание всех периферийных устройств;

– отключить блок питания.

По окончании работ программист обязан осмотреть и привести в порядок рабочее место, повесить халат в шкаф и вымыть с мылом руки и лицо.

ЗАКЛЮЧЕНИЕ

В данном дипломном проекте были подробно рассмотрены особенности и этапы создания web-приложения. И на основе представленного теоретического материала был разработан сайт для педагогов-психологов.

При этом мною были решены следующие задачи:

– ознакомление с современными Интернет-технологиями и их использование в настоящей разработке;

– изучение программного инструментария, применяемого для разработки и создания web-приложения;

– выявление и учёт методов и способов представления на web-страницах различных видов информации;

– ознакомление с основными правилами и рекомендациями по разработке и созданию web-приложения;

– определение структуры web-страниц;

– поддержка мобильных устройств;

– кроссбраузерность;

– быстрая загрузка;

– обеспечена отказоустойчивость web-приложения.

Результатом выполненного проекта является созданная web-приложения «Виртуальная тестирующая среда «Познай себя»». С помощью которого теперь студенты смогут пройти требуемые тесты онлайн, а педагоги-психологи получить отчет в удобном виде. Система позволяет осуществлять интерактивный поиск информации, предоставить в удобном виде все последние новости и предстоящие мероприятия. Существует возможность на прямую задать интересующий вопрос педагогам-психологам, реализованного через форму обратной связи.

В ходе тестирования web-приложения удостоверились в правильности его функционирования. Продемонстрирована высокая производительность web-сервера и скорость загрузки страницы как на мобильном устройстве, так и на персональном компьютере. Отклонений от нормальной работы не обнаружено.

В рамках дипломного проекта были проанализированы нормативные требования к организации охраны труда.

Были произведены экономические расчёты. Они показали, что разработанный программный продукт позволяет сэкономить время, затрачиваемое на обработку тестов и распространение информации, а также предоставить информацию в свободном доступе. В дальнейшем, возможно расширение функциональности web-приложения.

СПИСОК ИСПОЛЬЗОВАНЫХ ИСТОЧНИКОВ

1. Node.js в действии / М.С. Кантелон [и др.] - СПб.: Питер. - 2014. - 540c.

2. Борисенко, А. А. Web-дизайн. Просто как дважды два. / А. А. Борисенко. - М.: Эксмо, 2008. - 320 с.

3. Глушаков, С. В. - Программирование Web-страниц. - Харьков: Фолио, 2005. - 390 с.

4. ГОСТ 19.402-2000 Описание программы. Требования к содержанию, оформлению и контролю качества;

5. ГОСТ 19.404-79 Единая система программной документации. Пояснительная записка. Требования к содержанию и оформлению;

6. ГОСТ 2.105-98 Единая система конструкторской документации. Общие требования к текстовым документам;

7. ГОСТ 7.32-2001 Система стандартов по информации, библиотечному и издательскому делу. Отчёт о научно-исследовательской работе. Структура и правила оформления;

8. Гудман, Д.К. JavaScript Библия пользователя / Д.К. Гудман. - 4-е изд., - Диалектика, 2003. - 960 с.

9. Кох, С. Введение в JavaScript для мага / С.П. Кох. - М., 1997. - 78с.

10. Крокфорд, Д. JavaScript: сильные стороны / Д. Крокфорд. - СПб.: Питер, 2012 - 176с.

11. Никсон, Р. Создаем динамические web-сайты с помощью PHP, MySQL и JavaScript / Р. Никсон. - П.: Питер, 2011. - 496 с.

12. Пауэрс Ш. Изучаем Node.js / Ш. Пауэрс. - СПб.:Питер, 2014. - 400с.: - (Серия «Бестселлеры O'Reilly»).

13. Прохоренок, Н. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера / Н. Прохоренок. - СПб.: БХВ - Петербург., 2010. - 900 с.

14. Рева, О.Н. JavaScript в кармане / О.Н. Рева. - Apress, 2010. - 342 с.

15. Рейсиг, Д. JavaScript Профессиональные приемы программирования / Д. Рейсинг. - П.: Питер, 2008. - 352 с.

16. Рейчел Эндрю CSS. 100 и 1 совет. - Символ-Плюс, 2010. - 336 с.

17. Спека, М.В. Создание Web-сайтов. Самоучитель. - Диалектика, 2009. - 233 с.

18. Фланагон Д.Н JavaScript: Подробное руководство / Д.Н. Фланагон. - Питер, 2008. - 982 с.

19. Хеник, Б.Н. HTML и CSS Путь к совершенству / Б.Н. Хеник. - Питер, 2011. - 336 с.

20. Хоган, Б HTML5 и CSS3. Веб-разработка по стандартам нового поколения/ Б. Хоган - СПб.: Питер, 2012. - 270с.

21. Хольцшлаг, М.В. Языки HTML и CSS для создания Web-сайтов / Хольцшлаг, М.В., Молли Е. - Триумф, 2007. - 203 с.

22. Руководство MongoDB // [Электронный ресурс] - Режим доступа: https://docs.mongodb.org/manual/ - Дата доступа 17.04.2015

23. Руководство и документация по Node.js [Электронный ресурс] - Режим доступа: https://nodejs.org/api/ - Дата доступа 20.04.2015

24. Документация по Express.js [Электронный ресурс] - Режим доступа: http://expressjs.com/4x/api.html Дата доступа 27.04.2015

ПРИЛОЖЕНИЕ А

Программный код серверной части

app = require 'app'

config = require 'config'

http = require 'http'

fs = require('fs')

server = http.createServer(app);

onListening = ()->

host = server.address().address

port = server.address().port

console.log "\n\n\nВся магия на порту -> http://#{host}:#{port}"

onError = (error)->

if error.syscall != 'listen'

throw error;

bind = if typeof port == 'string'

'Pipe ' + port

else

'Port ' + port

switch (error.code)

when 'EACCES'

console.error(bind + ' requires elevated privileges')

process.exit 1

when 'EADDRINUSE'

console.error(bind + ' is already in use')

process.exit 1

else throw error

server_port = process.env.PORT || process.env.OPENSHIFT_NODEJS_PORT || 80

server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1'

server.listen(server_port,server_ip_address)

server.on('error', onError);

server.on('listening', onListening);

io = require('libs/io')(server,app)

app.set('io', io);

nconf = require 'nconf'

path = require 'path'

nconf

.argv()

.env()

.file({ file: path.join __dirname,'config.json' });

module.exports = nconf

http = require('http')

class HttpError extends Error

constructor: (@status, message) ->

Error.apply this, arguments

Error.captureStackTrace this, HttpError

@message = message or http.STATUS_CODES[@status] or 'Error'

HttpError::name = 'HttpError'

exports.HttpError = HttpError

mongoose = require 'mongoose'

config = require 'config'

if config.get('DEBUG_LOCAL') == 'true'

URL = "mongodb://admin:admin@127.0.0.1:27017/itest2"

else

URL = config.get('MONGOLAB_URI') || config.get('OPENSHIFT_MONGODB_DB_URL')

mongoose.connect URL,config.get('mongoose:options')

mongoose.set('debug', true)

mongoose.connection.on 'connected', ->

console.log 'Mongoose default connection open to '

mongoose.connection.on 'error',(err)->

console.log 'Mongoose default connection error: ' + err

mongoose.connection.on 'disconnected',->

console.log('Mongoose default connection disconnected')

process.on 'SIGINT',->

mongoose.connection.close ->

console.log 'Mongoose default connection disconnected through app termination'

process.exit(0)

module.exports = mongoose;

session = require 'express-session'

RedisStore = require('connect-redis')(session)

config = require 'config'

module.exports =(app)->

if config.get('DEBUG_LOCAL') == 'true'

URL = "redis://rediscloud:mysupersecretpass@127.0.0.1:6379"

else

URL = config.get('REDISCLOUD_URL')

store = new RedisStore('url':URL)

sessionMiddleware = session

'secret': config.get "session:secret"

'key' : config.get "session:key"

'cookie': config.get "session:cookie"

'saveUninitialized': true

'resave': true

'store':store

app.use sessionMiddleware

app.set('sessionMiddleware',sessionMiddleware)

app.set('sessionStore',store)

cookie = require('express/node_modules/cookie')

User = require('models/user/index').User

HttpError = require('error').HttpError

module.exports = (server,app)->

io = require('socket.io')(server)

sessionMiddleware = app.get('sessionMiddleware')

io.use (socket, next) ->

# console.log socket

sessionMiddleware(socket.request, socket.request.res, next)

io.use (socket, next)->

# console.log socket.request.session

socket.user = null

if !socket.request.session.passport.user

return next(new HttpError(401, "Нет сессии пользователя."))

User.findById socket.request.session.passport.user, (err, user) ->

if err then return next(err)

if user

socket.sessionID = socket.request.session.id

socket.user = user

return next()

else

return next(new HttpError(403, "Anonymous session may not connect"))

# io.

require('./testHendlers')(io)

Io

Test = require('models/test').Test

debug = require('debug')('socket:test')

async = require('async')

module.exports = (io)->

io.on 'connection',(socket)->

socket.on 'submit',(data)->

subTest = socket.user.arrTest.id(data._id)

if subTest.typeTest == 'temperament'

subTest.answers.push

_id :data.quest_id

yesno:data.yesno

date :new Date()

else if subTest.typeTest == 'motivation'

subTest.answers.push

_id :data.quest_id

answer :data.answer

date :new Date()

else

return socket.emit 'TestMessages',message:'Ошибка, неизвестный тип теста'

socket.emit 'submitOk'

socket.on 'TestDone',(id)->

thisTest = null

async.waterfall [

(callback)->

if id

callback null,id

else

callback(message:'Ошибка, нет входных данных о тесте.#2')

(id,callback)->

thisTest = socket.user.arrTest.id(id)

if thisTest

thisTest.dateEnd = new Date()

callback null,thisTest

else

callback(message:'Ошибка, запрашиваемый тест не найден.')

(thisTest,callback)->

Test.findById thisTest._id,callback

(testQuestion,callback)->

if testQuestion.type == 'temperament'

countAns = {}

for answer in thisTest.answers

question = testQuestion.questions.id(answer._id)

if question

if question.yesno == answer.yesno

if question.keys of countAns

countAns[question.keys]++

else

countAns[question.keys]=1

else

console.log "AnalysisTest : answer._id:#{answer._id} not fond to result.questions"

thisTest.keysTest = countAns

callback null

else if testQuestion.type == 'motivation'

callback null

else callback message:"Это не тест другого типа"

(callback)->

thisTest.done = true

socket.user.save callback

],(err)->

if err

console.log err.stack

return socket.emit "TestMessages",message:"Ошибка сервера"

else

return socket.emit 'Done',id

socket.on 'first load',(id)->

if !id

socket.emit 'TestMessages',message:'Ошибка, нет входных данных о тесте.#1'

console.log "Ошибка, нет входных данных о тесте.#1"

console.log "user:\n"

console.log "#{socket.user}"

return console.log "args:#{arguments}"

Test.findById id,(err,test)->

if err

socket.emit 'TestMessages',message:'Ошибка сервера. Приносим свои извинения. Вкоре ошибка будет исправленна.'

return console.log(err)

if !test

socket.emit 'TestMessages',message:'Ошибка сервера. Тест ненайден.'

return console.log("Нет теста")

if !test.questions? and !Array.isArray(test.questions) and test.questions.length == 0

return socket.emit 'TestMessages',message:"Нет вопросов в тесте."

else

tmp = []

if test.type == 'temperament'

test.questions.forEach (elem)->

tmp.push

_id:elem._id

text:elem.text

else if test.type == 'motivation'

test.questions.forEach (elem)->

tmp.push

_id:elem._id

text:elem.text

answer:elem.answer

minimal:elem.minimal

else

#todo говорим что пользователь начал проходить тест но не сохраняем

loged = socket.user.arrTest.id test._id

if !loged

socket.user.arrTest.push

typeTest:test.type #говорим что пользователь начал проходить тест но не сохраняем

_id :test._id

done:false

return socket.emit 'TestQuestion', tmp

else

if loged.done==false

return socket.emit 'TestMessages',message:"Тест уже запушен"

else if loged.done == true

return socket.emit 'TestMessages',message:"Тест уже пройден."

else

return socket.emit 'TestMessages',message:"Ошибка сервера. Server error"

passport = require 'passport'

User = require('models/user/index').User

Group = require('models/group').Group

Test = require('models/test').Test

async = require('async')

module.exports = (app)->

app.use do passport.initialize

app.use do passport.session

passport.serializeUser (user, done)->

done(null, user._id)

passport.deserializeUser (id, done)->

User.findById id,(err,user)->

if err then console.error(err)

done(err, user)

app.use (req,res,next)->

async.waterfall [

(callback) ->

if req.user?

res.locals.user = req.user

callback null,req.user

else

callback "guest",

(user,callback)->

if user.isAdmin == null

if user.idGroup

Group.findById user.idGroup,callback

else callback "bad user group:#{user._id}"

else callback "this is admin"

(group, callback) ->

req.user.group = group

Test.count

year:

$in: [ 0, req.user.group.year ]

,callback

(count, callback)->

res.locals.user.testCount = req.user.testCount = count

callback(null)

], (err, result) ->

if typeof err == "string"

console.log(err)

return do next

else

return next(err)

do next

passport.use 'local-login',require('./localStrategy')

passport.use 'local-signup',require('./signupStretegy')

passport.use 'vk',require('./vkStrategy')

passport.use 'fb',require('./fbStrategy')

# passport.use 'gp',require('./GpStrategy')

passport.use 'ya',require('./YaStrategy')

HttpError = require('error').HttpError

module.exports = (req, res, next) ->

if !req.user

return next(new HttpError(401, 'Вы не авторизованы.'))

next()

module.exports = (req,res,next)->

res.redirectAjax = (url)->

if res.req.headers['x-requested-with'] == 'XMLHttpRequest'

res.json

success:true

else

res.redirect(url)

res.sendHttpError = (error)->

res.status(error.status or 500)

if res.req.headers['x-requested-with'] == 'XMLHttpRequest'

res.json

error:error

success:false

else

res.render 'error', message: error.message,error:error

next()

config = require 'config'

module.exports = (req,res,next)->

res.locals.severalRandom =

`function(min, max, num) {

var i, arr = [], res = [];

for (i = min; i <= max; i++ ) arr.push(i);

for (i = 0; i < num; i++) res.push(arr.splice(Math.floor(Math.random() * (arr.length)), 1)[0])

return res;

}`

res.locals.declOfNum =

`function(number, base, titles, separator)

{

if(!separator){

separator = " ";

}

cases = [2, 0, 1, 1, 1, 2];

return number+separator+base+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];

}`

res.locals.declOfNumBig =

`function(number, titles, separator)

{

if(!separator){

separator = " ";

}

cases = [2, 0, 1, 1, 1, 2];

return number+separator+titles[ (number%100>4 && number%100<20)? 2 : cases[(number%10<5)?number%10:5] ];

}`

res.locals.rusMount = (mount)->

rus =

0:"Янв"

1:"Фев"

2:"Мар"

3:"Апр"

4:"Май"

5:"Июн"

6:"Июл"

7:"Авг"

8:"Сен"

9:"Окт"

10:"Ноя"

11:"Дек"

return rus[mount]

res.locals.formatDate = (data)->

('0'+(data.getDate() + 1)).slice(-2)+'-'+('0'+(data.getMonth() + 1)).slice(-2)+'-'+data.getFullYear()+' '+('0'+( data.getHours() + 1)).slice(-2)+':'+('0'+( data.getMinutes() + 1)).slice(-2)

if config.get('DEBUG_LOCAL') == 'true'

res.locals.local = true

else

res.locals.local = false

do next

crypto = require 'crypto'

mongoose = require 'libs/mongoose'

Schema = mongoose.Schema;

hash = require './hash'

HttpError = require('error').HttpError

Group = require('models/group').Group

Test = require('models/test').Test

async = require('async')

ProviderSchema = new mongoose.Schema

name: String

nameId:

type: String

index: true

profile:{}

schema = new Schema

# fullAccount:

# type : Boolean

# default : false

email:

type: String

default: "" # если посетитель удалён, то у него нет email!

validate:[

{

validator: checkNonEmpty = (value)->

if not @.isAdmin

value.length > 0

else

true

msg:"E-mail пользователя не должен быть пустым."

}

{

validator: checkEmail = (value)->

if not @.isAdmin

///^[-.\w]+@([\w-]+\.)+[\w-]{2,12}$///.test(value)

else

true

msg:'Укажите, пожалуйста, корркетный email.'

}

]

index:

unique: true,

sparse: true,

errorMessage: "Такой e-mail уже используется."

# verifiedEmail:

# type: Boolean

# default: true

deleted:# private & login data is deleted

type: Boolean

default: false

isAdmin : Boolean

# lastActivity : Date

familyName : String # Фамилия

givenName : String # Имя

middleName : String # Имя

# photo : String # Фото

birthDate : Date

idGroup:

type : String

index: true

providers : [ProviderSchema]

created:

type : Date

default : Date.now

passwordHash:

type: String # user may have no password if used facebook to login/register

salt:

type: String

arrTest:[

dateStart:

type : Date

default : Date.now

dateEnd:Date

done:Boolean

keysTest:{}

typeTest:String

test:

type:String

index:

unique: true

sparse: true

# performed:Boolean #TODO востановление и продолжение

answers:[]

]

schema.virtual('username')

.get ()->

if @familyName? and @givenName?

@familyName + ' ' + @givenName

else

return null

schema.virtual('password')

.set (password)->

if password?.length < 4

this.invalidate('password', 'Пароль должен быть минимум 4 символа.')

@_plainPassword = password;

@salt = hash.createSalt()

@passwordHash = hash.createHashSlow(password,@salt)

.get ()->

@_plainPassword

schema.methods.checkPassword = (password)->

if password.length == 0 then return false

""+hash.createHashSlow(password,@salt) == @passwordHash

schema.methods.getDatePickerFormat = ->

if @birthDate

"#{@birthDate.getFullYear()}-#{('0' + (@birthDate.getMonth()+1)).slice(-2)}-#{@birthDate.getDate()}"

else

return ''

schema.methods.updateInfo = (familyName,givenName,middleName,_Group,birthDate,callback)->

User = @

errMesg = ""

if familyName?.trim()?.length == 0

errMesg += "- Укажите Фамилию.<br>"

if givenName?.trim()?.length == 0

errMesg += "- Укажите Имя.<br>"

if middleName?.trim()?.length == 0

errMesg += "- Укажите Отчество.<br>"

if birthDate?.trim()?.length != 9

dateArr = birthDate.split('-')

if dateArr.length == 3

year = +dateArr[0]

mount = +dateArr[1] - 1

day = +dateArr[2]

birthDate = new Date(year,mount,day)

else

errMesg +="- Проверьте введенную дату (Пример: 1995-09-17).<br>"

if errMesg

return callback(new HttpError(400,errMesg))

else

Group.newGroup _Group,(err,group)->

if err then return callback err

User.familyName = familyName

User.givenName = givenName

User.middleName = middleName

User.idGroup = group._id

User.birthDate = birthDate

console.log(User)

User.save callback

schema.methods.fullUserInfo = ()->

debug = @birthDate? or @idGroup? or @familyName? or @givenName? or @middleName?

return debug

exports.User = mongoose.model 'User',schema

crypto = require 'crypto'

config = require 'config'

# warning, takes time, about ~70ms for length=128, iterations=12000

exports.createHashSlow = (password, salt)->

crypto.pbkdf2Sync(password, salt, 12000, 128);

exports.createSalt = ()->

crypto.randomBytes(128).toString('base64');

mongoose = require 'libs/mongoose'

Schema = mongoose.Schema;

schema = new Schema

realYear:Number #TODO про консультир про группы

year:

type:Number

min: 1

max: 5

default:1

number :Number

faculty:String

curator:String

schema.virtual('full')

.get ()->

@faculty + '-' + @year+@number # ИСТ-12

schema.statics.newGroup= (group,callback)->

Group = this

group = group.split('-')

year=+group[1][0]

number=+group[1][1]

faculty=group[0]

tmp =new Date()

Group

.find

realYear:+tmp.getFullYear()

year:year

number:number

faculty:faculty

.exec (err,groupResult)->

if err then return callback(err)

if groupResult?.length != 0

return callback null,groupResult[0]

else

newGroup = new Group

realYear:+tmp.getFullYear()

year:year

number:number

faculty:faculty

newGroup.save callback

schema.methods.incYear = (callback)->

if @year != 5 then @year++

@save callback

exports.Group = mongoose.model 'Group',schema

mongoose = require 'libs/mongoose'

Schema = mongoose.Schema;

schema = new Schema

production:

type : Boolean

default : false

title :String

content :String

dataString:String

date:Date

created:

type : Date

default : Date.now

exports.HotInfo = mongoose.model 'HotInfo',schema

mongoose = require 'libs/mongoose'

Schema = mongoose.Schema;

schema = new Schema

production:

type : Boolean

default : false

title :String

imgTitle:String

content :String

created:

type : Date

default : Date.no

exports.News = mongoose.model 'News',schema

mongoose = require '../libs/mongoose'

Schema = mongoose.Schema;

HttpError = require('error').HttpError

questionsSchema = new Schema

text:

type : String

required: true

minimal:Number

answer:[{

val:String

}]

yesno:

type: String

enum:

values: ['yes', 'no']

message: "Неизвестное значение (yes\\no)"

keys:

type: String

enum:

values: ['Ложь','Экстраверсия','Нейротизм']

message: "Неизвестное значение ответа (Ложь\\Экстраверсия\\Нейротизм)"

schema = new Schema

dev:Boolean #TODO продукцен для теста

type:

type : String

required: true

enum:

values: ['motivation','temperament','null']

message: "Неизвестный тип теста!"

title:

type : String

required: true

year:

type : Number

min :0

max :5

questions:[questionsSchema]

# {text:'Вы гей'

# yesno:'yes'

# keys:'Ложь'}

schema.methods.addQuestionMotiv = (obgeckQuestion,callback)->

if @type == 'motivation'

if Array.isArray(obgeckQuestion)

for question in obgeckQuestion

@questions.push question

else

@questions.push obgeckQuestion

@save callback

schema.methods.addQuestionTemperam = (obgeckQuestion,callback)->

if @type == 'temperament'

if Array.isArray(obgeckQuestion)

for question in obgeckQuestion

@questions.push question

else

@questions.push obgeckQuestion

@save callback

schema.methods.editQuestionTemperam = (id,text,callback)->

schema.statics.newTest = (type,title,year,callback)->

# console.log arguments

Test = this

temperam = Test()

if title then temperam.title = title

if not isNaN(year) then temperam.year = year

temperam.type = type

temperam.save callback

exports.Test = mongoose.model 'Test',schema

bodyParser = require 'body-parser'

config = require 'config'

cookieParser = require 'cookie-parser'

express = require 'express'

favicon = require 'serve-favicon'

mongoose = require './libs/mongoose'

path = require 'path'

compress = require 'compression'

device = require 'express-device'

csurf = require 'csurf'

helmet = require 'helmet'

app = do express

HttpError = require('error').HttpError

recaptcha = require('express-recaptcha')

if config.get('RHC') == 'true'

recaptcha.init('6LecfAcTAAAAAAjbB8n9Z_B75h5Q8fbjQ0pj0LYy', '6LecfAcTAAAAAHp-P0AEYHOfQEE7FKKAWpTguUAq')

else if config.get('HEROKU') == 'true'

recaptcha.init('6LdGgAcTAAAAAPWf7_1bf0kdYuTsHfOBfN1RYRSk', '6LdGgAcTAAAAAEIMcJLrpz2flhw2FxqO-SW3cPcd')

else

recaptcha.init('6LebMgUTAAAAAMCI9cURMlkmwo2Dx9Sx2LI9P34F', '6LebMgUTAAAAAOVWadcVXAvkkfc9kMn0VXqtmSeq')

app.use(require './middleware/sendHttpError')

app.use do helmet

app.disable 'x-powered-by'

app.set 'views',path.join(__dirname, 'views')

app.set 'view engine','jade'

app.use favicon(__dirname + '/public/favicon.ico')

app.use do compress # GZIP сжатие

if config.get('DEBUG_LOCAL') == 'true'

app.use express.static(path.join(__dirname, 'public'))

else

app.use express.static(path.join(__dirname, 'public'),maxAge: 2592000000)

logger = require 'morgan'

if app.get('env') == 'development'

app.use logger 'dev'

else

app.use logger 'default'

app.use do bodyParser.json

app.use bodyParser.urlencoded(extended: true)

app.use do cookieParser

app.use do device.capture

device.enableDeviceHelpers ap

#инициализация сесии 7дн. (session + user._id))

require('./libs/session')(app)

app.use do csurf

app.use (req, res, next)->

res.locals.csrfToken = req.csrfToken()

next()

app.use(require './middleware/subFunctions')

require('./libs/passport')(app)

require('./routes')(app)

# catch 404 and forward to error handler

app.use (req, res, next)->

next(404)

# error handler

app.use (err, req, res, next) ->

if typeof err == 'number'

err = new HttpError(err)

if err instanceof HttpError

res.sendHttpError err

else

if app.get('env') == 'development' #TODO log error

res.sendHttpError err

else

console.error err

err = new HttpError(500)

res.sendHttpError err

module.exports = app

module.exports = (app)->

require('./site')(app) # Роутеры сайта

require('./api')(app) #Роутеры API

require('./admin')(app) # Роутеры Адм. панели

#TODO - Удалить или закоментировать в продакшене

app.get '/session',(req,res)->

os = require('os')

info =

gay :process.memoryUsage()

tmpdir : os.tmpdir()

endianness : os.endianness()

hostname : os.hostname()

type : os.type()

platform : os.platform()

arch : os.arch()

release : os.release()

uptime : os.uptime()

loadavg : os.loadavg()

totalmem : os.totalmem()

freemem : os.freemem()

cpus : os.cpus()

networkInterfaces : os.networkInterfaces()

EEOL : os.EOL

res.json

info : info

user : req.user

session:req.session

ПРИЛОЖЕНИЕ Б

Таблица стилей web-приложения

@media (max-width:767px)

.google-lol

margin: 6px 0

#intro

@media (min-width:768px)

height 100%

overflow hidden

#transform-head

background url(../img/bg.jpg) no-repeat top center

background-size cover

@media (min-width:768px)

height 100%

padding-top 70px

.slogan,

.scroll

text-align center

color #fff

.slogan

text-shadow -1px 1px 1px #000

font-family "Lobster","PT Sans", sans-serif

.who

font-size 3em

color gold

font-size 35px

.that

padding 0 50px

margin-top 7%

text-decoration none

font-size 2em

// Мобилки

@media (max-width:767px)

display none !important

h4

font bold 2em/1em "Open Sans Condensed"

sizeMainScrool = 60px

.scroll

text-align center

font-size (sizeMainScrool / 2)

width sizeMainScrool

height sizeMainScrool

border 2px solid

border-radius 50%

line-height sizeMainScrool

animation-delay 1s

// animation-iteration-count infinite

@media (max-width:767px)

display block

margin 10px auto

@media (min-width:768px)

&,

.slogan

position relative

.scroll

display inline-block

position absolute

bottom (sizeMainScrool / 2)

right 48%

right -webkit-calc(50% - 30px)

right -moz-calc(50% - 30px)

right calc(50% - 30px)

#text-print

.blue-block

background #99CCFF

padding 10px

ul

margin-left 10px

.leftimg

float left

margin 15px 15px 15px 0

.rightimg

float right

margin 15px 0 15px 15px

height 300px

overflow hidden

position relative

&.pre

&:after

content ''

position absolute

background-image linear-gradient(0deg, #FFF,transparent)

bottom 0

width 100%

height 100px

#hot-info

.body

list-style none

.title-hot

font-size 20px

color #555

.date-hot

background-color #AF3A3A

color white

display inline-block

padding 3px 5px

margin-right 10px

// Мобилки

@media (max-width:767px)

li

padding 3px

margin-bottom 20px

// НЕ Мобилки

@media (min-width:768px)

li

padding 10px 20px

&:hover

box-shadow 0 0 10px rgba(0,0,0,.3)

#sitenews

padding-bottom 30px

h3

font-family "Open Sans Condensed"

@media (max-width:767px)

font-size 1.3em

margin 15px 0

.list-news

list-style none

a

color #616161

font-size 15px

// Мобилки

@media (max-width:767px)

li

margin-bottom 20px

border-bottom 1px solid #D6D6D6

.date

position absolute

top 0px

left 30px

width 40px

padding 10px 0px

background none repeat scroll 0% 0% rgba(62, 62, 62, 0.7)

text-align center

z-index 1

span

display block

color #FFF

.media

position relative

h3

color #616161

font-size 16px

line-height 26px

margin-top 20px

img

transition transform .3s cubic-bezier(0.68, -0.55, 0.265, 1.55)

&:hover

transform scale(1.3) rotate(6deg)

.day

font-size 25px

font-weight bold

.month

font-size 14px

.news-img

width 100%

border-radius 3px

overflow hidden

img

width 100%

.load

margin 30px auto 0 auto

#people

.micro

text-align center

// Мобилки

@media (max-width:767px)

border-bottom 1px solid

//НЕ мобилки

@media (min-width:768px)

margin 0 auto

width 100%

overflow auto

&:hover .info-people

opacity 1

transform translate3d(0,0,0)

transition transform .3s ease-out,opacity .2s .1s

.subtitle

font-style italic

font-size .8em

.info-people

text-align left

display inline-block

li ul

padding-left 20px

@media (min-width:768px)

position relative

transform translate3d(0,-100%,0)

opacity 0

// transition transform .3s ease-out,opacity .1s .2s

.avatar-img

width 50%

margin 0 auto

height auto

border-radius 50%

overflow hidden

box-shadow 0 0 0 3px #FFF, 0 0 10px 3px rgba(0, 0, 0, 0.1)

.avatar программирование прибыль экономический

width 80%

margin 15px auto

// Мобилки

@media (max-width:767px)

.avatar-img

width 55%

margin 0 auto

#gallery

.fluid

width 100%

overflow auto

heigtPhotoBlock = 260px

.col-my-2

width 20%

display inline-block

float left

background url(../img/poptrox/loader.gif) no-repeat center center,#fff

img

min-height heigtPhotoBlock

display block

.link-zomm

img

transition transform .3s ease-in-out

&:hover img

transform scale(1.1)

display block

height heigtPhotoBlock

overflow hidden

position relative

&:after

thisSize=50px

position absolute

border-radius 50%

border 1px solid #FFF

color #FFF

left 50%

top 50%

width thisSize

height thisSize

text-align center

margin-left (- thisSize / 2)

margin-top (- thisSize / 2)

transition all 0.3s ease 0s

opacity 0

transform scale(0)

content '\e80c'

font 20px/thisSize "fontello"

&:hover:after

opacity 1

transform scale(1)

.lazy-loaded

opacity 1

#feedback

padding-bottom 20px

.list-fb

list-style none

padding 0

li

font-size 1.2em

line-height 1.5em

i

color #666 !important

margin-right 10px

.contact

margin 15px 0

font-weight bold

//НЕ мобилки

@media (min-width:768px)

.submit

width auto

#map-bargu

height 400px

box-sizing content-box

border 2px dashed

.container>h2

margin-top 15px

text-align center

font 45px/45px 'Lobster'

text-shadow 2px 2px white,3px 3px #666

&>i

font-size 23px

text-shadow none

color #CCC

display block

.ui

background url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmlld0JveD0iMCAwIDIwIDIwIj48cGF0aCBmaWxsPSIjQjNCM0IzIiBzdHJva2U9IiM5OTkiIHN0cm9rZS1taXRlcmxpbWl0PSIxMCIgZD0iTTEwIDEyTC00LTJsMTQtMTRMMjQtMnoiLz48L3N2Zz4=") top repeat-x, #fff

padding-bottom 20px

hr

margin 20px 0

.load

colorBase = #8E44AD

user-select none

background none

outline none

border 2px solid colorBase

border-radius 100px

color colorBase

padding 5px 20px

transition background .3s,color .3s, transform .1s

cursor pointer

display inline-block

&:active

transform translate3d(0,3px,0)

&:hover

background colorBase

color white

i

padding-right 5px

&:disabled

&:hover

background inherit !important

color inherit !important

cursor not-allowed

colorBase = #73598E

border 2px solid colorBase

color colorBase

//НЕ мобилки

@media (min-width:768px)

.ui

box-shadow 0 0 10px #666

// Мобилки

@media (max-width:767px)

.hide-mobile

display none !important

.container>h2

font 30px/30px 'Lobster'

font-smoothing-on()

-webkit-font-smoothing antialiased

-moz-osx-font-smoothing grayscale

bfs = 16px

blh = bfs*1.5

gr = 3px

gc = #0080FF

heigthHeader = 75px

heigthFooter = 50px

BBBBcolor = #2BA2CE

BBBBcolor = darken(BBBBcolor,10)

*,

*:before,

*:after

box-sizing border-box

html,

body

height 100%

html

-ms-text-size-adjust 100%

-moz-text-size-adjust 100%

-webkit-text-size-adjust 100%

body

margin 0

opacity 1 !important

color #666

font bfs/blh 'PT Sans', Arial, sans-serif,sans

font-smoothing-on()

background #fff

// background: url('../img/bg/bgtr.svg') top right no-repeat,

// url('../img/bg/bgbl.svg') bottom left no-repeat,

// url('../img/bg/bgbl.svg') bottom left no-repeat,

// url('../img/bg/overlay.png'),

// linear-gradient(45deg, #b39c68, #a56365, #412e4c);

a

text-decoration none

&:hover

text-decoration underline

hr

box-sizing content-box

border none

border-top 1px solid #9C9C9C

opacity .5

ul

padding: 0

input

border 0

outline 0

.hidden

display none

.warning

background #CC2E39

padding 10px

color #FFF

transform-origin top center

transition display .3s linear

.anim-border

display none

transform scale( 1.02, 1.08 )

padding 4px

background #fff

margin-bottom 15px

colorGradient = #858585

background repeating-linear-gradient(45deg, transparent, transparent 50px, colorGradient 50px, colorGradient 87px) repeat

animation linear 5s infinite linear

.dis-hover

& *

pointer-events none !important

.justify

text-align justify

.center

text-align center

#footer,

#header

width 100%

color #fff

#header

z-index 99

fixed top left right

height 75px

padding 10px 0

transition all .3s ease-in

#footer

height heigthFooter

#wrapper

min-height 100%

margin-bottom -(heigthFooter)

&:after

content ""

display block

height heigthFooter

#nav-btn

display none

text-align center

color white

font-size 1.5em

padding 10px 0

font-weight bold

background-color #1F7493

i:before

transition transform .3s

.rotate-180:before

transform: rotate(180deg)

.nav

float right

BBBBcol = #fff

li

display inline-block

background-color: rgba(BBBBcol,.5)

transition all .3s ease

button

background none

outline none

border none

width: 100%;

a

button

text-decoration none

transition all .3s ease

font 1.4em/50px "Open Sans Condensed"

@media (max-width:1020px)

font-size 1.3em

color black

display inline-block

height 50px

padding 0 5px

border-bottom 0px solid #fff

&.active,

&:hover

border-bottom-width 4px

background rgba(BBBBcol, .3)

.test

position relative

&:hover .counter

transform rotate(360deg)

.counter

position absolute

line-height 22px

padding 0px 6px

font-weight 700

font-size .7em

background #E64C65

border-radius 100%

top -5px

right -1px

transition all .3s ease-in-out

height 22px

width 22px

color #FFF

text-align center

#header.top-nav-collapse

box-shadow 0 0 15px black

background BBBBcolor

background linear-gradient(0deg,rgba(BBBBcolor, .8),BBBBcolor 70%)

padding 0

.nav

li

background none

button

a

color white

display inline-block

height 75px

line-height 75px

&.active,

&:hover

background rgba(#000, .3)

.counter

top 5px

right 3px

#footer

background BBBBcolor

#posters-gallery

img

border 2px solid transparent

border-radius 3px

transition border-color .3s ease-in-out,transform .5s cubic-bezier(0, 1.01, .61, 1.47)

@media (max-width:767px)

border-color #EB9F14

@media (min-width:768px)

&:hover

border-color #EB9F14

transform scale(1.1)

@media (max-width:767px)

margin: 0 auto

margin-bottom 10px

.row

margin-top 15px

@media (min-width:768px)

.grayscale

transition filter .3s

-webkit-filter grayscale(100%)

filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0.3333 0.3333 0.3333 0 0 0 0 0 1 0\'/></filter></svg>#grayscale")

filter: s('gray')

&:hover

filter: url("data:image/svg+xml;utf8,<svg xmlns=\'http://www.w3.org/2000/svg\'><filter id=\'grayscale\'><feColorMatrix type=\'matrix\' values=\'1 0 0 0 0, 0 1 0 0 0, 0 0 1 0 0, 0 0 0 1 0\'/></filter></svg>#grayscale");

-webkit-filter grayscale(0)

.form

max-width 400px

margin 20px auto

width 100%

background rgba(170, 170, 170, 0.5)

padding 15px

border-radius gr

box-shadow 0 0 10px rgba(0,0,0,.3)

.txt

margin-bottom 10px

border 2px dashed #2BA2CE

padding 10px 15px

transition .2s all linear

width 100%

&.invalid

animation input-invalid 2s infinite alternate

border-color red

.submit

font-size bfs * 1.3

color #2BA2CE

width 100%

margin-top 10px

padding 7px 20px

cursor pointer

color #ECF0F1

text-shadow 0 1px 2px rgba(0,0,0,0.2)

background #2ecc71

box-shadow 0 5px 0 #27ae60, 0 5px 10px rgba(0, 0, 0, 0.3)

border-radius 5px

&:disabled

&:hover

box-shadow 0 5px 0 #5A8366, 0 5px 10px rgba(0, 0, 0, 0.3)

&:active

top 0

cursor not-allowed

background #679475

box-shadow 0 5px 0 #5A8366, 0 5px 10px rgba(0, 0, 0, 0.3)

&:hover

box-shadow 0 5px 0 #27ae60,0 5px 10px rgba(0,0,0,0.5)

&:active

position relative

top 2px

box-shadow 0 3px 0 #27ae60,0 5px 10px rgba(0,0,0,0.5)

.auth

font 40px/50px 'Lobster'

text-align center

color white

text-shadow 0 0 3px rgba(0,0,0,.3)

display block

cursor default

user-select none

.providers

text-align center

margin-top 30px

a

display inline-block

width 55px

height 55px

font-size bfs*2

text-decoration none

margin-right 10px

text-shadow 0 0 1px black

border-radius 100%

line-height 55px

box-shadow inset 0 0 5px rgba(0,0,0,.3)

transition color .3s,box-shadow .3s

&:hover

color white

text-shadow 0 0 5px rgba(255,255,255,.5)

.icon-vk

color #45668e

&:hover

box-shadow inset 0 0 0 40px #45668e

.icon-facebook

color #3b5998

&:hover

box-shadow inset 0 0 0 40px #3b5998

.icon-yandex

color #D8232A

&:hover

box-shadow inset 0 0 0 40px #fc0

.g-recaptcha

margin-top 10px

@keyframes linear

from

background-position 0 0

to

background-position 370px 0

@keyframes input-invalid

colorRed= rgba(255, 0, 0, .3)

0%

box-shadow inset 0 0 0 colorRed

100%

box-shadow inset 0 0 10px colorRed

heigthFooter = 50px

@media (min-width:768px)

.massage

padding 20px 0

.nav

display block !important

#fix-head

height 75px

@media (max-width:767px)

#header

position static

height auto

background darken(#2BA2CE,10)

#fix-head

display none !important

width 0

height 0

.nav

float none

display none

text-align center

li

display block

a

width 100%

&.active,

&:hover

border-bottom none

border-left 4px solid #0E8487

.counter

top 25%

left calc(50% + 30px)

right 0

#nav-btn

display block

.form

box-shadow none

border-radius 0

width auto

darkk = #292929

lightt = #efefef

redd = #4183D7

greenn = #9CBFEB

#question-body

display none

.hidden-radio

opacity 0

position relative

transform translate(70px,13px)

&:invalid + .button-label

box-shadow 0px 5px 5px rgba(255, 43, 43, .5), inset 0 -3px 0 rgba(0, 0, 0, .2)

.button-label

display inline-block

padding 20px 35px

margin .5em

cursor pointer

color darkk

border-radius .25em

background lightt

box-shadow 0 3px 10px rgba(0, 0, 0, .2), inset 0 -3px 0 rgba(0, 0, 0, .2)

transition .2s

user-select none

font-size 1.5em

font-width bold

&:hover

background darken(lightt, 10%)

color darken(darkk, 10%)

box-shadow 0 3px 10px rgba(0, 0, 0, .2), inset 0 -3px 0 rgba(0, 0, 0, .3)

&:active

transform translateY(2px)

box-shadow 0 3px 10px rgba(0, 0, 0, .2), inset 0px -1px 0 rgba(0, 0, 0, .2)

.hidden-radio:checked + .button-label

background greenn

color lightt

&:hover

background darken(greenn, 5%)

color darken(lightt, 5%)

.submit.test

width auto

.text-question

padding 20px

font-size 1.3em

transition box-shadow .2s ease-in-out

box-shadow 0 0 10px rgba(0, 0, 0, .1)

&:hover

box-shadow 0 0 20px rgba(0, 0, 0, .2)

.questions-form

margin 20px

#minimal

display inline-block

padding 10px

margin-left 10px

background-color #CC6161

color white

border-radius 40px

transition opacity .3s

#values

.checkboxi

transform translateY(5px)

display inline-block

margin-right 10px

label

cursor pointer

list-style none

li

padding 5px

input[type=checkbox]

cursor pointer

height 30px

position absolute

opacity 0

width 30px

z-index 2

& + span

background #666

border-radius 50%

box-shadow 0 2px 3px 0 rgba(0,0,0,.1)

display inline-block

height 30px

// margin 4px 0 0

position relative

width 30px

transition all .2s ease

&::before

height 16px

left 13px

top 7px

-webkit-transform rotate(-45deg)

transform rotate(-45deg)

&::after

height 16px

right 13px

top 7px

-webkit-transform rotate(45deg)

transform rotate(45deg)

input[type=checkbox] + span::before, input[type=checkbox] + span::after

background #fff

content ''

display block

position absolute

width 4px

transition all .2s ease

input[type=checkbox]:checked

& + span

background #2ecc71

&::before

height 9px

left 9px

top 13px

-webkit-transform rotate(-47deg)

transform rotate(-47deg)

&::after

height 15px

right 11px

top 8px

media (max-width:767px)

.questions-form

margin 20px 0

.text-question

padding 5px

box-shadow none

.submit.test

width 100%

.title-test

font-size 25px

.button-label

padding 15px 25px

margin .3em

ПРИЛОЖЕНИЕ В

Разметка web-страниц

mixin header

header#header(class=landing ? '':'top-nav-collapse')

.container

.row

.logo.col-sm-4

a(href="/"): img.img-responsive(src="/assets/img/logotype.svg", alt="",width="260",heigth="75")

.head-menu.col-sm-8

ul.nav

li

a(href="/search")

i.icon-search

| Поиск

if user

li.test: a(href="/test")

i.icon-list-alt

| Тесты

if user.testCount

.counter=user.testCount

li: a(href="/project")

i.icon-garden

| Проекты

li: a(href="/posters")

i.icon-picture

| Постеры

if user

if user.isAdmin

li: a(href="#{_server.secretPage}")

i.icon-cogs

| Управление

else

li: a(href="/user")

i.icon-user

| Профиль

li

form(action='/logout',method="post")

input(type="hidden",name="_csrf",value="#{csrfToken}")

button(type='submit')

i.icon-logout

| Выход

else

li: a(href="/signup")

i.icon-user-add

| Регистрация

li: a(href="/login")

i.icon-login

| Вход

#nav-btn

i.icon-circle-down

| Меню

<!DOCTYPE html>

html(lang="ru")

head

block head

script.

LOCAL_BEDUG = true

function loadCss(s){var e=document.createElement("link");e.type="text/css",e.rel="stylesheet",e.href=s,document.getElementsByTagName("head")[0].appendChild(e)}

script

include ../public/assets/js/load-font.js

noscript

link(rel="stylesheet", href="/assets/css/font-face.css")

include inc/icons.jade

meta(name='yandex-verification',content='45627696ba23d0bb')

meta(name="google-site-verification",content="vjrGAMlp1BV4jmXTqO9qrLPbJs9W116IBVI72m1D7Zw")

meta(charset="utf-8")

meta(http-equiv="X-UA-Compatible",content="IE=edge")

meta(name="viewport",content="width=device-width, initial-scale=1")

body

if !landing

#wrapper

+header

#fix-head

block content

else

+header

block content

footer#footer

.container Copyright © 2015, Отдел ... | Сайт Баргу <a title="Сайт Баргу" href="http://barsu.by">barsu.by</a>

noscript

link(rel="stylesheet", href="/assets/cdn/bootstrap-min/b.css")

link(rel="stylesheet", href="/assets/css/style-styl.css")

link(rel="stylesheet", href="/assets/cdn/fontello/fontello.css")

script.

function loadAllCss(){["/assets/cdn/bootstrap-min/b.css","/assets/css/style-styl.css","/assets/cdn/fontello/fontello.css"].forEach(function(s){loadCss(s)})}window.addEventListener?window.addEventListener("DOMContentLoaded",loadAllCss,!1):window.attachEvent?window.attachEvent("onreadystatechange",loadAllCss):window.onload=loadAllCss;

//- // /Yandex.Metrika counter

script(type='text/javascript').

(function (d, w, c) {

(w[c] = w[c] || []).push(function() {

try {

w.yaCounter30734698 = new Ya.Metrika({id:30734698,

webvisor:true,

clickmap: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");

noscript

div

img(src='//mc.yandex.ru/watch/30734698', style='position:absolute; left:-9999px;', alt='')

//- // /Yandex.Metrika counter

block scriptsAndLinks

if local

script(data-main='/assets/js/require/mainG', src='/assets/cdn/require.js',async)

else

script(data-main='/assets/js/require/mainG', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)

extends ../layout

append head

if _server

title="Восстановление пароля | " + _server.name

else

title Восстановление пароля

include cri/login

block content

if !user

.form

span.auth Восстановление пароля

if doneMsg

.anim-border(style="display:block"): .warning(style="background:#6FCC2E")!=doneMsg

else

if errMessage

.anim-border(style="display:block"): .warning!=errMessage

else

.anim-border: .warning

form#form-forgot(action="/forgot",method="post")

input(type="hidden",name="_csrf",value="#{csrfToken}")

label(for="email") Email:

input.txt#email(type="email", name="email", required, autocomplete="on",placeholder="Введите email",value="#{emailVal?emailVal:''}")

!=captcha

input.submit(type="submit",value="Восстановить пароль")

else

.massage

.container

h1 Вы уже авторизованны

extends ../layout

append head

if _server

title="Восстановление пароля | " + _server.name

else

title Восстановление пароля

include cri/login

block content

if !user

.form

span.auth Восстановление пароля

if doneMsg

.anim-border(style="display:block"): .warning(style="background:#6FCC2E")!=doneMsg

else

if errMessage

.anim-border(style="display:block"): .warning!=errMessage

form#form-forgot(action="/forgot/update",method="post")

input(type="hidden", name="passwordResetToken",value="#{passwordResetToken}")

input(type="hidden",name="_csrf",value="#{csrfToken}")

label(for="password") Новый пароль:

input.txt#password(type="password", name="password", required,placeholder="Введите пароль")

input.submit(type="submit",value="Обновить пароль")

else

.massage

.container

h1 Вы уже авторизованны

extends ../layout

append head

if hot

if _server

title=hot.title + ' | ' + _server.name

else

title=hot.title

block content

if hot

.container

br

h3=hot.dataString+' '+hot.title

hr

extends ../layout

append head

if _server

title=_server.name+' | '+_server.description

include cri/index

block content

section#intro

#transform-head

.container

.slogan

h2.who Педагоги-психологи БарГУ

h3.that Добро пожаловать на сайт педагогов-психологов Барановичского государственного университета, где вы можете получить самую актуальную информацию по психологии личности, влиянии социума и другие не менее интересные сведения.

h4 Наш сайт - это не ответ на все жизненные вопросы, это хороший способ получить необходимую информацию использовать которую придется вам самим!!!

a.scroll.mimiscroll.animated.shake(href='#sitenews')

i.icon-angle

section.ui#embodies

.container

h2 Суть психологической помощи

i.icon-circle-down

include inc/embodies.jade

if arrHotInfo && arrHotInfo.length != 0

include inc/hot.jade

if arrNews && arrNews.length != 0

section.ui#sitenews

.container

h2 Новости

i.icon-circle-down

include inc/news.jade

if is_phone == false

section#gallery.hide-mobile

.fluid

- var values = [{index:"1",comm:'Руководители и участники клуба "Молодая семья"'},{index:"2",comm:'Дебаты Студенческая - семья "за" или "против"'},{index:"3",comm:'Открытая молодежная площадка "Экзамены - установка на успех"'},{index:"4",comm:'Танцевальный тренинг - "Лидеры объединяйтесь!"'},{index:"5",comm:'Образовательный семинар - "Ты староста"'},{index:"6",comm:'Тренинг с элементами танцевальной терапии'},{index:"7",comm:'Образовательный семинар - "Кодекс старосты: 12 правил хорошего руководителя"'},{index:"8",comm:'Тренинг - "Имидж делового человека"'},{index:"9",comm:'Практикум - "Мы вместе"'},{index:"10",comm:'Тренинг групповой сплоченности'},{index:"11",comm:'Тренинг личностного роста'},{index:"12",comm:'Тренинг командообразования'}];

if severalRandom

- var keysRandPhoto = severalRandom(0,values.length-1,5)

if keysRandPhoto

each val in keysRandPhoto

.col-my-2

a.link-zomm.grayscale(href="/assets/img/gallery/#{values[val].index}.jpg")

img.lazylazy(src="/assets/img/poptrox/loader.gif",data-src="/assets/img/gallery/thumb/#{values[val].index}.jpg",title="#{values[val].comm}")

//- noscrip...


Подобные документы

  • Создание административной части сайта. Дизайн веб-сайта. Установка шаблона Joomla. Система администрирования. Определение прибыли и свободной отпускной цены программного средства. Обоснование экономической целесообразности проведения мероприятия.

    дипломная работа [1,2 M], добавлен 02.09.2016

  • Разработка редактора частиц "Easy Particles", позволяющего создавать несложные эффекты графики. Инсталляция программы, анализ ее надёжности. Модель и сборка приложения. Обоснование экономической целесообразности разработки программного средства.

    дипломная работа [742,6 K], добавлен 09.09.2010

  • Разработка тестирующего приложения, которое будет наглядно показывать, как должна выглядеть тестирующая программа для вычисления уровня интеллекта. Программная среда разработки, характеристика основных возможностей приложения. Стандартные диалоговые окна.

    курсовая работа [716,9 K], добавлен 02.12.2013

  • Основные этапы разработки web-сайта. Классификации современных бирж. Выбор программного средства для разработки сайта. Требования к сайту. Расчет прогнозируемой цены и прибыли на программное средство. Описание языков для разработки web–приложений.

    дипломная работа [1,4 M], добавлен 02.09.2016

  • Архитектура и история создания операционной системы Android. Язык программирования Java. Выбор средства для реализации Android приложения. Программная реализация Android приложения. Проведение тестирования разработанного программного обеспечения.

    курсовая работа [167,8 K], добавлен 18.01.2017

  • Общая характеристика и структурная схема приложения, требования к нему и функциональные особенности, сферы практического применения. Обоснование выбора языка программирования. Описание интерфейса и инструкция пользователя. Проведение листинга программы.

    дипломная работа [1,0 M], добавлен 10.07.2017

  • Элементы объектно-ориентированного программирования. Среда Visual Studio: улучшения интегрированной среды разработки и увеличение ее производительности. Проектирование архитектуры программы и ее интерфейса. Использование двухуровневой системы приложения.

    курсовая работа [516,8 K], добавлен 09.08.2015

  • Требования к аппаратным и операционным ресурсам. Логическая и физическая организация. Состав основных классов проекта. Технико-экономическое обоснование разработки программного средства. Задержки при обработке данных. Разработка интерфейса приложения.

    дипломная работа [4,4 M], добавлен 16.06.2017

  • Проектирование структуры программы, принцип ее работы, сферы практического использования и оценка возможностей. Выбор и обоснование среды программирования. Разработка пользовательского интерфейса и модулей приложения. Проведение тестирования программы.

    курсовая работа [637,7 K], добавлен 14.01.2015

  • Технология создания многопоточных приложений в современных системах программирования с использованием языка C# в Visual Studio.NET. Разработка алгоритма и структуры программы. Описание и особенности тестирования приложения с разным количеством потоков.

    курсовая работа [773,0 K], добавлен 14.03.2013

  • Проверка и коррекция знаний учащихся в системе личностно ориентированной технологии образования с использованием тестирования. Подготовка материалов для компьютерного контроля знаний. Разработка проекта "тестирующая программа". Понятие и виды тестов.

    дипломная работа [696,2 K], добавлен 16.06.2015

  • Разработка приложения на базе скриптового языка программирования JavaScript, с использованием каскадных таблиц стилей CSS в среде программирования Bluefish Editor. Обоснование выбора инструментов. Применение клавиш управления памятью калькулятора.

    курсовая работа [3,8 M], добавлен 22.06.2015

  • Характеристика системы программирования. Главные составные части Delphi. Интерфейс программного приложения. Результаты работы программы. Руководство системного программиста и оператора. Язык программирования Delphi, среда компилятора Borland 7.0.

    курсовая работа [1,6 M], добавлен 29.05.2013

  • Разложение функции в ряд Тейлора, алгоритм работы программного интерфейса сокетов, исходный текст программ с комментариями. Возможности языка программирования Си и среда разработки приложений в ОС Linux. Виртуальная среда VMWare Player и VirtualBox.

    лабораторная работа [1,8 M], добавлен 02.09.2014

  • Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.

    курсовая работа [1,6 M], добавлен 19.04.2017

  • Обеспечение универсальности функций тестирования при разработке программы для тестирования студентов. Бесплатное программное обеспечение. Анализ выбора среды программирования. Особенности среды Delphi и СУБД MySQL. Описание алгоритма и блок-схемы.

    курсовая работа [1,6 M], добавлен 01.02.2013

  • Содержание и требования, предъявляемые к информации. Требования к аппаратным и операционным ресурсам. Проектирование справочной системы приложения. Входные и выходные данные. Описание программного средства. Проведение функционального тестирования.

    курсовая работа [814,5 K], добавлен 24.01.2016

  • Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения.

    курсовая работа [2,2 M], добавлен 14.04.2019

  • Главные составные части среды программирования. Требование к надежности, к составу и параметрам технических средств. Табличные базы данных. Выбор и обоснование выбора системы управления базами данных. Высокопроизводительный компилятор в машинный код.

    курсовая работа [793,5 K], добавлен 31.01.2016

  • Разработка программы для сбора и анализа информации об автобусах на парковке. Назначение и область применения. Алгоритм в словесной форме. Состав технических и программных средств. Разработка приложения в среде визуального программирования C++Builder 6.

    курсовая работа [1,5 M], добавлен 06.09.2014

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.