Разработка web-приложения "Виртуальная тестирующая среда "Познай себя"" для педагогов-психологов БагГУ
Обоснование технических приемов программирования, сущность функционального, полного тестирования. Проведение расчета прогнозируемой цены и прибыли на программное средство. Характеристика и особенности экономической целесообразности проведения мероприятия.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 10.12.2016 |
Размер файла | 2,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
.container
h2 Найти нас на карте
i.icon-circle-down
#map-bargu
append scriptsAndLinks
if local
script(data-main='/assets/js/require/index', src='/assets/cdn/require.js',async)
else
script(data-main='/assets/js/require/index', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)
noscript
link(rel="stylesheet", href="/assets/css/style-landing-page.css")
script.
function loadAllCssw(){['/assets/css/style-landing-page.css'].forEach(function(s){loadCss(s)})}window.addEventListener?window.addEventListener("DOMContentLoaded",loadAllCssw,!1):window.attachEvent?window.attachEvent("onreadystatechange",loadAllCssw):window.onload=loadAllCssw;
if is_phone == false
noscript
link(rel="stylesheet", href="/assets/cdn/animate.css")
link(rel="stylesheet", href="/assets/css/poptrox-notmobile.css")
script.
function loadAllCssIndex(){['/assets/cdn/animate.css','/assets/css/poptrox-notmobile.css'].forEach(function(s){loadCss(s)})}window.addEventListener?window.addEventListener("DOMContentLoaded",loadAllCssIndex,!1):window.attachEvent?window.attachEvent("onreadystatechange",loadAllCssIndex):window.onload=loadAllCssIndex;
script.
var downloadJSAtOnload;
downloadJSAtOnload = function() {
var arrScripts, element, i, len, srcScript;
arrScripts = ["//api-maps.yandex.ru/services/constructor/1.0/js/?sid=1y6VfLJ3vI_Z3lrrbaql7S9tpfWCcTRC&height=400&id=map-bargu"];
for (i = 0, len = arrScripts.length; i < len; i++) {
srcScript = arrScripts[i];
element = document.createElement('script');
element.src = srcScript;
element.async = true;
element.charset = 'utf-8';
document.body.appendChild(element);
}
};
if (window.addEventListener) {
window.addEventListener('load', downloadJSAtOnload, false);
} else if (window.attachEvent) {
window.attachEvent('onload', downloadJSAtOnload);
} else {
window.onload = downloadJSAtOnload;
}
div!=hot.content
extends ../layout
append head
if _server
title='Авторизация | ' + _server.name
else
title Авторизация
include cri/login
block content
if !user
.form
span.auth Авторизация
.providers
a.icon-vk(href="/auth/vk")
a.icon-facebook(href="/auth/facebook")
a.icon-yandex(href="/auth/yandex")
hr
if errMessage
.anim-border(style="display:block"): .warning=errMessage
else
.anim-border: .warning
form#form-login(action="/login",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")
label(for="password") Пароль:
input.txt#password(type="password", name="password", required, autocomplete="off",placeholder="Введите пароль",maxlength="20")
a(href="/forgot",title="Забыли пароль?") Забыли пароль?
input.submit(type="submit",name="register" value="Войти")
br
br
p.text-center: a(href="/signup",title="Регистрация") Регистрация
else
.massage
.container
h1 Вы уже авторизованны
append scriptsAndLinks
if local
script(data-main='/assets/js/require/login', src='/assets/cdn/require.js',async)
else
script(data-main='/assets/js/require/login', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)
extends ../layout
append head
if news
if _server
title=news.title + ' | ' + _server.name
else
title=news.title
block content
if news
br
.container
h3=news.title
hr
div!=news.content
extends ../layout
append head
if _server
title='Постеры | ' + _server.name
else
title Постеры
include cri/posters
mixin roww(items)
.row
each poster in items
.col-sm-2
a(href="/assets/img/posters/#{poster.img}")
img.lazylazy(src="/assets/img/poptrox/loader.gif",data-src="/assets/img/posters/thumb/#{poster.img}", title="#{poster.title}").img-responsive.grayscale
block content
br
#posters-gallery.container
-var arrPosters = [{title:"Помощь студентам",img:"!!!!!!!!!!!!!!!!!!!!!!!!!!!.jpg"},{title:"1 марта",img:"1 марта.jpg"},{title:"Депрессия",img:"Депрессия.jpg"},{title:"Скажи наркотикам НЕТ!",img:"мой 21 век без наркотиков.jpg"},{title:"Как спать и высыпаться",img:"Постер 3 Как спать и высыпаться.jpg"},{title:"Осознай прямо сейчас",img:"ПОСТЕР-Осознай-пррямо-сейчас-1.jpg"},{title:"Стань оптимистом",img:"посттер-№3-пессимизм-и-оптимизм.jpg"},{title:"Сессия",img:"Сессия!!!.jpg"},{title:"С улыбкой по жизни",img:"С улыбкой по жизни.jpg"},{title:"Секреты отношений между юношами и девушками",img:"Секреты отношений между юношами и девушками.jpg"},{title:"Сессия",img:"Сессия.jpg"},{title:"1 апреля",img:"1 апреля.jpg"}],n = 0,__exit=true,__len=arrPosters.length
while __exit
- n+=6;
if (n < __len)
+roww(arrPosters.slice(n-6, n))
else
+roww(arrPosters.slice(n-6, __len))
- __exit= false
append scriptsAndLinks
if local
script(data-main='/assets/js/require/posters', src='/assets/cdn/require.js',async)
else
script(data-main='/assets/js/require/posters', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)
noscript
link(rel="stylesheet",href="/assets/cdn/photobox/photobox.css")
script.
photoboxCss = function(){
loadCss('/assets/cdn/photobox/photobox.css')
}
if (window.addEventListener) {
window.addEventListener('DOMContentLoaded', photoboxCss);
} else if (window.attachEvent) {
window.attachEvent('onreadystatechange', photoboxCss);
} else {
window.onload = photoboxCss;
}
extends ../layout
append head
if _server
title='Обновление профиля | ' + _server.name
else
title Обновление профиля
extends ../layout
block content
if user
.wrp
.form
span.auth Заполните данные
hr
.warning.anim-border
form#form(action="/signup/step2",method="post")
input(type="hidden",name="_csrf",value="#{csrfToken}")
label(for="familyName") Фамилия :
input.txt#familyName(type="text",value="#{user.familyName?user.familyName:''}" name="familyName" ,required ,placeholder="Введите Фамилию")
label(for="givenName") Имя :
input.txt#givenName(type="text",value="#{user.givenName?user.givenName:''}" name="givenName" ,required ,placeholder="Введите Имя")
label(for="middleName") Отчество :
input.txt#middleName(type="text",value="#{user.middleName?user.middleName:''}" name="middleName" ,required ,placeholder="Введите Отчество")
label(for="idGroup") Группа :
input.txt#idGroup(list="character",value="#{userGroup?userGroup:''}",type="text", name="idGroup" ,required ,placeholder="Группа", data-placement="top", title="Пример: ИСТ-11, ТОСп-41",pattern="([А-Яа-яЁё]{2,}(-\\d{2}))")
if arrGroups && arrGroups.length != 0
datalist#character
each grp,index in arrGroups
option(value="#{grp.full}")
label(for="birthDate") Дата рождения :
input.txt#birthDate(type="text",value="#{user.getDatePickerFormat()}", name="birthDate" ,required ,placeholder="Дата рождения",pattern="\\d{4}-\\d{2}-\\d{2}",title="ГГГГ-ММ-ДД (пример 1995-09-17)")
input.submit(type="submit",name="fullUser" value="Отправить")
else
.massage
.container
h1 Доступ запрещен
extends ../layout
block scriptsAndLinks
if local
script(data-main='/assets/js/require/signupStep2', src='/assets/cdn/require.js',async)
else
script(data-main='/assets/js/require/signupStep2', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)
script.
loadAllCss = function(arr) {
arr.forEach(function(s) {
loadCss(s);
});
};
loadAllCssCallBack = function(){
if (LOCAL_BEDUG){
loadAllCss(['/assets/cdn/pickadate/default.css','/assets/cdn/pickadate/default.date.css'])
}else{
loadAllCss(['//cdnjs.cloudflare.com/ajax/libs/pickadate.js/3.5.6/compressed/themes/default.css','//cdnjs.cloudflare.com/ajax/libs/pickadate.js/3.5.6/compressed/themes/default.date.css'])
}
}
if (window.addEventListener) {
window.addEventListener('DOMContentLoaded', loadAllCssCallBack);
} else if (window.attachEvent) {
window.attachEvent('onreadystatechange', loadAllCssCallBack);
} else {
window.onload = loadAllCssCallBack;
}
noscript
if local
link(rel="stylesheet", href="/assets/cdn/pickadate/default.css")
link(rel="stylesheet", href="/assets/cdn/pickadate/default.date.css")
else
link(rel="stylesheet", href="//cdnjs.cloudflare.com/ajax/libs/pickadate.js/3.5.6/compressed/themes/default.css")
link(rel="stylesheet", href="//cdnjs.cloudflare.com/ajax/libs/pickadate.js/3.5.6/compressed/themes/default.date.css")
extends ../layout
append head
if _server
title='Регистрация | ' + _server.name
else
title Регистрация
include cri/signup
block content
if !user
.form
span.auth Регистрация
.providers
a.icon-vk(href="/auth/vk")
a.icon-facebook(href="/auth/facebook")
a.icon-yandex(href="/auth/yandex")
hr
.anim-border: .warning
form#form(action="/signup",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")
label(for="password") Пароль:
input.txt#password(type="password", name="password", required, autocomplete="off",placeholder="Введите пароль",maxlength="20")
!=captcha
input.submit(type="submit",name="register" value="Зарегистрироваться")
else
.massage
.container
h1 Вы уже авторизованны
append scriptsAndLinks
if local
script(data-main='/assets/js/require/signup', src='/assets/cdn/require.js',async)
else
script(data-main='/assets/js/require/signup', src='//cdnjs.cloudflare.com/ajax/libs/require.js/2.1.17/require.min.js',async)
extends ../layout
block head
if arrTests && arrTests.length !=0
if _server
title Тесты (#{declOfNumBig(arrTests.length,["новый тест","новых теста","новых тестов"])}) | #{_server.name}
else
title Тесты (#{declOfNumBig(arrTests.length,["новый тест","новых теста","новых тестов"])})
else
title Тесты
extends ../layout
block content
if user
.massage
.container
if arrTests
h1 Список доступных тестов
ul
each test in arrTests
li: a(href="/test/#{test._id}")=test.title +" ["+ declOfNum(test.questions.length,"вопрос",["","а","ов"])+"]"
else
//- TODO Может будет обработка пройденых тестов
h1 Нет новых тестов.
else
.massage
.container
h1 Доступ запрещен
extends ../layout
append head
if oneTest
if _server
title=oneTest.title + ' | ' + _server.name
else
title=oneTest.title
block content
if user
.massage
.container
if oneTest
if oneTest.type == 'temperament'
include type-test/testId-yesno.jade
else if oneTest.type == 'motivation'
include type-test/testId-check.jade
else
h1 Ошибка сервера.
else
.massage
.container
h1 Доступ запрещен
extends ../layout
append head
if user
if user.familyName && user.givenName
if _server
title=user.familyName + ' ' + user.givenName + ' | ' + _server.name
else
title=user.familyName + ' ' + user.givenName
else
title='Профиль'
block content
if user
.container
if user.verifiedEmail
h1.center=user.username
else
h1.text-center=user.username + " (Email адрес не подтвержден)"
.row
.col-sm-3 Фамилия
.col-sm-9=user.familyName
.row
.col-sm-3 Имя
.col-sm-9=user.givenName
.row
.col-sm-3 Отчество
.col-sm-9=user.middleName
if user.group
.row
.col-sm-3 Группа
.col-sm-9=user.group.full
if user.birthDate
.row
.col-sm-3 Дата рождения
.col-sm-9=user.birthDate.getFullYear()+'/'+(user.birthDate.getMonth()+1)+'/'+user.birthDate.getDate()
if user.providers && user.providers.length != 0
h3 Привязанные внешние аккаунты
each provider in user.providers
.row
.col-sm-1
if provider.name == 'vkontakte'
h2.icon-vk
else if provider.name == 'facebook'
h2.icon-facebook
else if provider.name == 'yandex'
h2.icon-yandex
.col-sm-11
small=provider.name
h5=provider.profile.displayName
else
.container
h1 Доступ запрещен
ПРИЛОЖЕНИЕ Г
Программный код клиентской части
do ->
arrJs = ['jquery','main','messWarn']
if LOCAL_BEDUG
arrJs.push('cdn/unveil')
else
arrJs.push('unveil')
define arrJs, ($) ->
if is_phone_type
_offset_head = 0
else
_offset_head = 75
do ->
shakeBtn = $('a.scroll')
setInterval (->
top = $(document).scrollTop()
stop = shakeBtn.offset().top
if top <= stop
return shakeBtn.toggleClass('animated').toggleClass('shake')
return
), 2222
do ->
nextNews = $('#next-news')
allNews = $('#all-news-site')
page = 1
state=""
nextNews.bind 'click', (event) ->
if not state
$.ajax
type: 'GET'
url: '/news/ajax/' + page
success: (msg) ->
if msg.success and msg.news.length != 0
liElem = ''
delayAnim = 0
ref = msg.news
i = 0
len = ref.length
while i < len
oneNews = ref[i]
createdNews = new Date(oneNews.created)
delayAnim += 0.2
liElem += "<li data-wow-delay=\"#{delayAnim}s\" class=\"col-sm-3 wow bounceIn\"> <div class=\"media\"><div class=\"date\"><span class=\"day\">#{createdNews.getDate()}</span> <span class=\"month\">#{rusMount(createdNews.getMonth())}</span> </div> <a href=\"/news/#{oneNews._id}\"><div class=\"news-img\"> <img src=\"#{oneNews.imgTitle}\" alt=\"#{oneNews.title}\"> </div></a> </div><a href=\"/news/#{oneNews._id}\"><h3>#{oneNews.title}</h3></a></li>"
i++
page++
allNews.append '<div class="row"><ul class="list-news">' + liElem + '</ul></div>'
state = false
return nextNews.html("<i class=\"icon-arrows\"></i>Ещё новости")
else if msg.message == 'end'
state = 'Все новости загружены'
else
state = 'Ошибка'
nextNews.text(state)
error: (err) ->
console.log err
state = 'Ошибка'
nextNews.text(state)
do->
checkEmail = (email)->
return ///^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$ ///.test(email.trim())
bodyTextView = $('#text-print')
btnView = $('#view-all')
btnView.bind 'click', (event) ->
bodyTextView.toggleClass 'pre'
if bodyTextView[0].clientHeight == 300
h = bodyTextView[0].scrollHeight
innerText = 'Свернуть'
else
h = 300
innerText = 'Читать дальше'
$('html, body').stop().animate { scrollTop: $('#embodies').offset().top - _offset_head }, 1000, ->
bodyTextView.stop().animate { height: h }, 1000, ->
btnView.text innerText
btnSubmit = document.querySelector('input.submit.inline')
FeedBackForm = $('#feedback-form')
FBmessageJQ = $('#FBmessage')
window.recaptchaOnLoad = ()->
btnSubmit.disabled = false
window.GreWidgetId1 = grecaptcha.render 'g-recaptcha-feedback',
'sitekey' : '6LecfAcTAAAAAAjbB8n9Z_B75h5Q8fbjQ0pj0LYy'
FBmessageJQ.click ()->
if not grecaptcha?
btnSubmit.disabled = true
element = document.createElement('script');
element.src = "https://www.google.com/recaptcha/api.js?onload=recaptchaOnLoad&render=explicit";
element.async = true;
document.body.appendChild(element);
FeedBackForm.submit (e) ->
e.preventDefault()
if !checkEmail(FBemail.value)
return showWarn('Введите корректный эмайл адрес! Пример:<br> example@mail.com')
if FBemail.value.trim().length != 0 and FBname.value.trim().length != 0 and FBmessage.value.trim().length != 0
hideWarn()
btnSubmit.disabled = true
$.ajax
type: 'POST'
url: '/feedback'
data: FeedBackForm.serialize()
success: (msg) ->
if msg.success == true
showDone 'Ваше сообщение отправлено.'
FeedBackForm.hide()
else
console.log msg
showWarn 'Извините. Произошла неизвестная ошибка!'
btnSubmit.disabled = false
grecaptcha?.reset(GreWidgetId1)
error: (err) ->
if err.responseJSON?.error?.message?
showWarn err.responseJSON.error.message
else
showWarn 'Извините. Произошла неизвестная ошибка!'
btnSubmit.disabled = false
# console.log err
grecaptcha?.reset(GreWidgetId1)
else
showWarn 'Заполните все поля!'
do->
$('a.mimiscroll').bind 'click', (e) ->
e.preventDefault()
anchor = $(this)
$('html, body').stop().animate { scrollTop: $(anchor.attr('href')).offset().top - _offset_head }, 1000
do->
header =$('#header')
addEventListener 'scroll', ->
if header.offset().top > 70
header.addClass 'top-nav-collapse'
else
header.removeClass 'top-nav-collapse'
do ->
AllImgLazyLoad = $('img.lazylazy')
if AllImgLazyLoad.length > 0
$(AllImgLazyLoad).unveil 0, ->
$(this).load ->
$(this).addClass 'lazy-loaded'
do ->
# a simple event handler wrapper
onn = (el, ev, callback) ->
if el.addEventListener
el.addEventListener ev, callback, false
else if el.attachEvent
el.attachEvent 'on' + ev, callback
return
# quick way to determine whether a css file has been cached locally
fileIsCached = (href) ->
window.localStorage and localStorage.cache_fonts_all and localStorage.cache_fonts_all_file == href
# time to get the actual css file
injectFontsStylesheet = ->
# if this is an older browser
if !window.localStorage or !window.XMLHttpRequest
stylesheet = document.createElement('link')
stylesheet.href = css_href
stylesheet.rel = 'stylesheet'
stylesheet.type = 'text/css'
document.getElementsByTagName('head')[0].appendChild stylesheet
# just use the native browser cache
# this requires a good expires header on the server
document.cookie = 'cache_fonts_all'
# if this isn't an old browser
else
# use the cached version if we already have it
if fileIsCached(css_href)
injectRawStyle localStorage.cache_fonts_all
# otherwise, load it with ajax
else
xhr = new XMLHttpRequest
xhr.open 'GET', css_href, true
# cater for IE8 which does not support addEventListener or attachEvent on XMLHttpRequest
xhr.onreadystatechange = ->
if xhr.readyState == 4
# once we have the content, quickly inject the css rules
injectRawStyle xhr.responseText
# and cache the text content for further use
# notice that this overwrites anything that might have already been previously cached
localStorage.cache_fonts_all = xhr.responseText
localStorage.cache_fonts_all_file = css_href
return
xhr.send()
return
# this is the simple utitily that injects the cached or loaded css text
injectRawStyle = (text) ->
style = document.createElement('style')
# cater for IE8 which doesn't support style.innerHTML
# style.setAttribute 'type', 'text/css'
if style.styleSheet
style.styleSheet.cssText = text
else
style.innerHTML = text
document.getElementsByTagName('head')[0].appendChild style
return
'use strict'
# once cached, the css file is stored on the client forever unless
# the URL below is changed. Any change will invalidate the cache
#TODO кросбраузерные запросы
css_href = "#{window.location.protocol}//#{window.location.host}/assets/css/font-face.css"
# console.debug("Main file:"+css_href)
# if we have the fonts in localStorage or if we've cached them using the native batrowser cache
if window.localStorage and localStorage.cache_fonts_all or document.cookie.indexOf('cache_fonts_all') > -1
# just use the cached version
injectFontsStylesheet()
else
# otherwise, don't block the loading of the page; wait until it's done.
onn window, 'load', injectFontsStylesheet
return
arrJs = ['jquery']
if LOCAL_BEDUG
arrJs.push('cdn/wow')
arrJs.push('cdn/poptrox')
else
arrJs.push('wow')
arrJs.push('poptrox')
define arrJs, ($) ->
new WOW().init();
$('#gallery').poptrox
useBodyOverflow: false
usePopupEasyClose: false
overlayColor: '#0a1919'
usePopupDefaultStyling: false
usePopupCaption: true
popupLoaderText: ''
windowMargin: 10
usePopupNav: true
do->
intro= $('#transform-head')
interp = (t) ->
iX= t * 0.5
intro.css
transform: "translate3d(0,#{iX}px,0)"
MozTransform: "translateY(0,#{iX}px,0)"
WebkitTransform: "translateY(0,#{iX}px,0)"
msTransform: "translateY(0,#{iX}px,0)"
embodies = $('#embodies')
addEventListener 'scroll', ->
top = $(document).scrollTop()
if top<embodies.offset().top
interp top
define [
'jquery'
], ($)->
do->
nav = $('.nav')
rotate = $('#nav-btn i')
$ '#nav-btn'
.click ->
rotate.toggleClass 'rotate-180'
do nav.slideToggle
do->
body = document.body
window.addEventListener 'scroll', ->
clearTimeout timer
if not body.classList.contains('dis-hover')
body.classList.add('dis-hover')
timer = setTimeout ->
body.classList.remove('dis-hover')
,500
, false
do ()->
warning = document.querySelector('.anim-border')
if warning?
textMesg = warning.children[0]
window.hideWarn = ()->
warning?.style.display = 'none'
window.showWarn = (mess)->
textMesg?.innerHTML = mess
warning?.style.display = 'block'
textMesg?.style.background = '#CC2E39'
window.showDone = (mess)->
textMesg?.innerHTML = mess
warning?.style.display = 'block'
textMesg?.style.background = '#6FCC2E'
do ->
arrJs = ['jquery','main','cdn/photobox/jquery.photobox']
if LOCAL_BEDUG
arrJs.push('cdn/unveil')
else
arrJs.push('unveil')
define arrJs, ($) ->
$('#posters-gallery').photobox 'a',
time: 0
do ->
AllImgLazyLoad = $('img.lazylazy')
if AllImgLazyLoad.length > 0
$(AllImgLazyLoad).unveil 0, ->
$(this).load ->
$(this).addClass 'lazy-loaded'
$(document).ready ->
socket = io.connect()
form = document.querySelector(".questions-form")
formQ = $(form)
qBody = document.querySelector("#question-body")
textQuestion = document.querySelector(".text-question")
idQuestion = document.querySelector("#quest_id")
btnSubmit = document.querySelector('.submit')
ArrQuestion=[]
#values
index = 0
loadNext= ()->
if ArrQuestion.length != 0
if index != ArrQuestion.length
thisQuestion = ArrQuestion[index]
textQuestion.innerHTML = thisQuestion.text
idQuestion.value = thisQuestion._id
index++
countQuestion.innerHTML = ' '+index+' из '
else
qBody.style.opacity="0"
btnSubmit.disabled = true
socket.emit 'TestDone',test_id.value
socket.on 'Done',(id)->
console.log "Done"
window.location.href="/result/temperament/#{id}"
socket.on 'SaveError',(err)->
showWarn("Ошибка сохраннения.")
console.log err
socket.on 'TestQuestion', (test) ->
ArrQuestion = test
qBody.style.display='block'
btnSubmit.disabled = false
loadNext()
socket.on 'TestMessages', (obj) ->
showWarn(obj.message)
if obj instanceof Error
console.log obj
form.onsubmit = (e)->
e.preventDefault()
if ArrQuestion.length != 0
formData =
_id:test_id.value
quest_id:quest_id.value
yesno:$("input[name=\"yesno\"]:checked").val()
socket.emit "submit",formData
btnSubmit.disabled = true
socket.on 'submitOk', ()->
btnSubmit.disabled = false
$("input:radio[name=yesno]").attr("checked", false);
loadNext()
socket.on 'connect', ()->
console.log "Соединение установленно!"
socket.emit 'first load',test_id.value
socket.on 'disconnect', ->
console.log "Соединение разорванно!"
qBody.style.opacity="0.3"
btnSubmit.disabled = true
showWarn("Соединение разорванно, сервер не доступен.")
$(document).ready ->
socket = io.connect()
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] ];
}`
form = document.querySelector(".questions-form")
formQ = $(form)
qBody = document.querySelector("#question-body")
textQuestion = document.querySelector(".text-question")
idQuestion = document.querySelector("#quest_id")
btnSubmit = document.querySelector('.submit')
btnSubmit.disabled = true
valuesQ = $(values)
ArrQuestion=[]
gMinimal = 0
index = 0
loadNext= ()->
if ArrQuestion.length != 0
if index != ArrQuestion.length
thisQuestion = ArrQuestion[index]
textQuestion.innerHTML = thisQuestion.text
idQuestion.value = thisQuestion._id
gMinimal = thisQuestion.minimal
values.innerHTML=''
minimal.innerHTML = "Выберите #{declOfNum(thisQuestion.minimal,'ответ',['','а','ов'])}"
thisQuestion.answer.forEach (ansvr)->
valuesQ.append("<li><div class=\"checkboxi\"><input id=\"#{ansvr._id}\" name=\"#{ansvr._id}\" type=\"checkbox\"><span></span></div><label for=\"#{ansvr._id}\">#{ansvr.val}</label></li>")
index++
countQuestion.innerHTML = ' '+index+' из '
else
qBody.style.opacity="0"
btnSubmit.disabled = true
socket.emit 'TestDone',test_id.value
socket.on 'Done',(id)->
console.log "Done"
window.location.href="/result/temperament/#{id}"
socket.on 'SaveError',(err)->
showWarn("Ошибка сохраннения.")
console.log err
socket.on 'TestQuestion', (test) ->
ArrQuestion = test
qBody.style.display='block'
loadNext()
socket.on 'TestMessages', (obj) ->
showWarn(obj.message)
if obj instanceof Error
console.log obj
form.onchange = (e)->
counter=0
$("input[type=checkbox]").each ()->
if @checked
counter++
if counter == gMinimal
btnSubmit.disabled = false
minimal.style.opacity = 0
else
btnSubmit.disabled = true
minimal.style.opacity = 1
form.onsubmit = (e)->
e.preventDefault()
checkedNames = []
$("input[type=checkbox]").each ()->
if @checked
checkedNames.push
_id:this.name
if ArrQuestion.length != 0
formData =
_id:test_id.value
quest_id:quest_id.value
answer:checkedNames
socket.emit "submit",formData
btnSubmit.disabled = true
socket.on 'submitOk', ()->
minimal.style.opacity = 1
loadNext()
socket.on 'connect', ()->
console.log "Соединение установленно!"
socket.emit 'first load',test_id.value
socket.on 'disconnect', ->
console.log "Соединение разорванно!"
qBody.style.opacity="0.3"
btnSubmit.disabled = true
showWarn("Соединение разорванно, сервер не доступен.")
define ['jquery','main','messWarn'],($)->
btnSubmit = $('.submit')
$('#form-login').bind 'submit', (e)->
e.preventDefault()
hideWarn()
btnSubmit.disabled = true
$.ajax
type: "POST"
url: "/login"
data: $(@).serialize()
success: (msg)->
location.href = "/user"
error:(err)->
if err.responseJSON?.error?.message?
showWarn(err.responseJSON.error.message)
else
showWarn('Извините. Произошла неизвестная ошибка!')
btnSubmit.disabled = false
console.log(err)
define ['jquery','main','messWarn'],($)->
email = document.getElementById('email')
pass = document.getElementById('password')
btnSubmit = document.querySelector('.submit')
checkEmail = (email)->
return ///^[-\w.]+@([A-z0-9][-A-z0-9]+\.)+[A-z]{2,4}$ ///.test(email.trim())
checkPass = (password)->
password = password.trim()
if not (4 <= password.length <= 100)
return false
return true
pass.addEventListener 'blur',()->
if @value.length != 0
if checkPass(@value)
hideWarn()
else
showWarn("Длина пароля должна быть не менее 4-х символов")
email.addEventListener 'blur',()->
if @value.length != 0
if checkEmail(@value)
hideWarn()
email.classList.remove('invalid')
else
showWarn("Введите корректный эмайл адрес! Пример:<br> example@mail.com")
email.classList.add('invalid')
form.addEventListener 'submit',(e)->
e.preventDefault()
if not checkEmail(email.value)
email.classList.add('invalid')
return showWarn("Введите корректный эмайл адрес! Пример:<br> example@mail.com")
else
email.classList.remove('invalid')
if not checkPass(pass.value)
showWarn("Длина пароля должна быть не менее 4-х символов")
pass.classList.add('invalid')
else
pass.classList.remove('invalid')
hideWarn()
btnSubmit.disabled = true
$.ajax
type: "POST"
url: "/signup"
data: $(@).serialize()
success: (msg)->
if msg.success == true
showDone 'Вы зарегистрированы. Пожалуйста, загляните в почтовый ящик, там письмо с Email-подтверждением.'
$(form).hide()
else
console.log(msg)
btnSubmit.disabled = false
showWarn('Извините. Произошла неизвестная ошибка!')
grecaptcha?.reset()
error:(err)->
if err.responseJSON?.error?.message?
showWarn(err.responseJSON.error.message)
else
showWarn('Извините. Произошла неизвестная ошибка!')
btnSubmit.disabled = false
console.debug(err)
grecaptcha?.reset()
do ->
arrJsFiles =[
'jquery'
'main'
'messWarn'
'cdn/bootstrap-min/b'
]
if LOCAL_BEDUG
arrJsFiles.push('cdn/pickadate/picker')
arrJsFiles.push('cdn/pickadate/picker.date')
else
arrJsFiles.push('picker')
arrJsFiles.push('picker.date')
define arrJsFiles,($)->
btnSubmit = $('.submit')
form.addEventListener 'submit',(e)->
e.preventDefault()
hideWarn()
btnSubmit.disabled = true
$.ajax
type: "POST"
url: "/signup/step2"
data: $(@).serialize()
success: (msg)->
if msg.success == true
location.href = "/user"
else
console.debug(msg)
btnSubmit.disabled = false
showWarn(msg.data.error)
error:(err)->
showWarn('Извините. Произошла неизвестная ошибка!')
btnSubmit.disabled = false
console.debug(err)
idGroup.onfocus = ->
$(idGroup).tooltip 'show'
idGroup.onblur = ->
$(idGroup).tooltip 'hide'
$('#birthDate').pickadate
selectYears: true
selectMonths: true
monthsFull: ['января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря']
monthsShort: ['янв','фев','мар','апр','май','июн','июл','авг','сен','окт','ноя','дек']
weekdaysFull: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота']
weekdaysShort: ['вс','пн','вт','ср','чт','пт','сб']
today: ''
close: 'Закрыть'
firstDay: 1
format: 'yyyy-mm-dd'
formatSubmit: 'yyyy-mm-dd'
clear: 'Очистить'
max: true
Размещено на Allbest.ru
...Подобные документы
Создание административной части сайта. Дизайн веб-сайта. Установка шаблона 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