Разработка 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

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