Skip to content
Snippets Groups Projects
Commit ff788f0c authored by Tedeev Acamaz's avatar Tedeev Acamaz Committed by xamgore
Browse files

Closes #6: Blocks "News" & "Updates" on the auth page

!24
parent f4b4fb13
Branches
Tags
No related merge requests found
......@@ -128,32 +128,4 @@ $(function()
}
}
});
$('.Updates .left').click(function() {
var block = $(this).closest('.Updates');
block.removeClass('visible');
block.next().addClass('visible');
});
$('.Updates .right').click(function() {
var block = $(this).closest('.Updates');
block.removeClass('visible');
block.prev().addClass('visible');
});
$('.Updates').bind('mousewheel DOMMouseScroll', function(event){
var block = $(this);
if (event.originalEvent.wheelDelta > 0 || event.originalEvent.detail < 0) {
if (block.next().hasClass('Updates')) {
block.removeClass('visible');
block.next().addClass('visible'); // scroll up == left
}
} else {
if (block.prev().hasClass('Updates')) {
block.removeClass('visible');
block.prev().addClass('visible'); // scroll down == right
}
}
});
});
$(function () {
// tab select
var $lastTab = $('.updates .tab.selected');
var $lastMsg = $('.updates [id^=content-][class!=hidden]');
$('.updates [id^=tab-]').each(function (idx) {
var $tab = $(this);
var attr = $tab.attr('id');
var block = attr.substring(attr.lastIndexOf('-') + 1);
var $msg = $('.updates [id^=content-' + block + ']');
$tab.click(function () {
$lastTab.removeClass('selected');
$lastMsg.addClass('hidden');
$tab.addClass('selected');
$msg.removeClass('hidden');
$lastTab = $tab;
$lastMsg = $msg;
})
});
// extending list
$.post('handler/news', function (res) {
var $updates = $('.updates');
var data = JSON.parse(res);
for (var block in data) {
if (data.hasOwnProperty(block)) {
var $content = $updates.find('#content-' + block);
var $main = $content.find('.extra');
var $button = $content.find('.expand');
addBlocks($main, $button, data[block]);
}
}
});
function addBlocks($elem, $tumbler, messages) {
$.each(messages, function () {
$elem.append('<h3>' + this.date + '</h3>');
$elem.append(this.text);
});
if (messages.length) $tumbler.show();
}
$('.updates [id^=content-]').each(function (idx) {
var $content = $(this);
var $button = $content.find('.expand');
var $extra = $content.find('.extra');
var hidden = 'hidden';
$button.click(function () {
if ($extra.hasClass(hidden)) {
$extra.removeClass(hidden);
$button.text('Скрыть');
} else {
$extra.addClass(hidden);
$button.text('Ещё');
}
});
});
});
@import (reference) "../common";
@ImagePath: '../../img';
.main_layer
{
max-width: 850px;
min-width: 320px;
width: 100%;
.main_content
{
padding: 0;
}
.main_layer {
max-width: 850px;
min-width: 320px;
width: 100%;
.main_content {
padding: 0;
}
}
h2
{
text-align: center;
margin: 5px auto;
margin-bottom: 15px;
padding: 5px;
color: @ColorBaseWhite;
background: @ColorLightBlue;
h2 {
text-align: center;
margin: 5px auto;
margin-bottom: 15px;
padding: 5px;
color: @ColorBaseWhite;
background: @ColorLightBlue;
}
.Updates, .AuthForm
{
padding: 15px;
width: 50%;
margin: 0 auto;
height: 100%;
vertical-align: top;
display: inline-block;
.updates, .AuthForm {
padding: 15px;
width: 50%;
margin: 0 auto;
height: 100%;
vertical-align: top;
display: inline-block;
}
.AuthForm
{
float: right;
.AuthForm {
float: right;
}
.tips
{
padding: 5px;
font-size: 0.9em;
text-align: justify;
border: 1px solid @ColorLightGrey;
background: @ColorBaseGrey;
margin-bottom: 5px;
.tips {
padding: 5px;
font-size: 0.9em;
text-align: justify;
border: 1px solid @ColorLightGrey;
background: @ColorBaseGrey;
margin-bottom: 5px;
}
.Updates
{
ol
{
margin-top: 10px;
li
{
list-style-type: decimal;
margin: 10px 0;
margin-left: 20px;
&:first-child { margin-top: 0; }
&:last-child { margin-bottom: 0; }
.updates .tabs {
width: 100%;
margin: 0 auto;
padding-bottom: 5px;
height: 100%;
vertical-align: top;
display: inline-block;
cursor: default;
.tab {
float: left;
text-align: center;
padding-top: 0.6em;
margin-top: 5px;
margin-left: 2%;
height: 2.3em;
background: #417ba3;
color: #ffffff;
width: 48%;
&.selected {
background: @ColorLightBlue;
}
}
.tab:hover {
background: @ColorLightBlue;
cursor: pointer;
}
}
.updates .content {
ol {
margin-top: 10px;
li {
list-style-type: decimal;
margin: 10px 0 10px 20px;
&:first-child {
margin-top: 0;
}
&:last-child {
margin-bottom: 0;
}
}
}
ul {
margin-top: 10px;
li {
list-style-type: circle;
margin: 10px 0 10px 20px;
&:first-child {
margin-top: 0;
}
&:last-child {
margin-bottom: 0;
}
}
}
}
}
\ No newline at end of file
h3 {
margin-top: 0.7em;
margin-bottom: 0.7em;
text-align: center;
}
.expand {
line-height: 1.2;
margin-top: 1.8em;
text-align: center;
padding: 7px 0;
font-size: 0.9em;
border-radius: 5px;
background: #009933;
color: #ffffff;
cursor: pointer;
}
.expand:hover {
background: #009e35;
}
.extra {
line-height: 1.2;
}
.hidden {
display: none;
}
padding-left: 0.5em;
padding-right: 0.5em;
padding-bottom: 0.7em;
}
......@@ -19,7 +19,10 @@ class Controller_Authentication extends Controller
public function after() {
$this->twig->set([
'Markdown' => new Parsedown(),
'Updates' => Model_System::getChangeLog(),
'Blocks' => [
'News' => Model_System::getChangeLog('news.md'),
'Updates' => Model_System::getChangeLog('updates.md'),
]
]);
$this->response->body($this->twig);
......
<?php defined('SYSPATH') or die('No direct script access.');
class Controller_Handler_News extends Controller_Handler
{
public function action_index() {
$info = [];
foreach (['news', 'updates'] as $block) {
$info[$block] = $this->parse($block . '.md');
}
$this->response->body(json_encode($info));
}
private function parse($file) {
$log = Model_System::getChangeLog($file);
array_splice($log, 0, 2);
foreach ($log as &$arr) {
$arr['text'] = Parsedown::instance()->parse($arr['text']);
}
return $log;
}
}
......@@ -23,8 +23,8 @@ class Model_System extends Model
}
public static function getChangeLog() {
$file = APPPATH . 'updates.md';
public static function getChangeLog($fileName) {
$file = APPPATH . $fileName;
$source = file_exists($file) ? file_get_contents($file) : '';
$blocks = preg_split("/[\r\n]*---[-]*[\r\n]*/", $source);
......
......@@ -27,6 +27,9 @@ class RusLang implements ArrayAccess
'autumn' => 'Осень',
'spring' => 'Весна',
'news' => 'новости',
'updates' => 'обновления',
];
/**
......@@ -47,4 +50,4 @@ class RusLang implements ArrayAccess
public function offsetSet($offset, $value) { }
public function offsetUnset($offset) { }
}
\ No newline at end of file
}
07.07.15
Тестик тестишка тестанчик
11.06.15
1. Новые ведомости формируются для каждого этапа отдельно
* Новые ведомости формируются для каждого этапа отдельно
---
25.05.15
1. Добавлен тип дисциплины дифференцированный зачет (зачет с оценкой)
2. Добавлено создание курсовых работ в виде дисциплин
3. Изменены печатные формы аттестационных ведомостей
* Добавлен тип дисциплины дифференцированный зачет (зачет с оценкой)
* Добавлено создание курсовых работ в виде дисциплин
* Изменены печатные формы аттестационных ведомостей
---
03.04.15
1. Исправлена функция восстановления пароля. Теперь письма на mail.ru и другие почтовые сервисы успешно доставляются.
* Исправлена функция восстановления пароля. Теперь письма на mail.ru и другие почтовые сервисы успешно доставляются.
---
05.03.15
1. Устранена уязвимость в безопасности системы
* Устранена уязвимость в безопасности системы
---
08.02.15
1. Добавлено ведение дисциплин по семестрам
2. Добавлена возможность указать неявку и экзамен автоматом (при 60 баллах)
3. Исправлен механизм добора баллов
4. Обновлен интерфейс
* Добавлено ведение дисциплин по семестрам
* Добавлена возможность указать неявку и экзамен автоматом (при 60 баллах)
* Исправлен механизм добора баллов
* Обновлен интерфейс
---
30.12.14
1. Добавлен интерфейс деканата
2. Добавлена возможность формировать ведомости по всем дисциплинам (зачет) группы
* Добавлен интерфейс деканата
* Добавлена возможность формировать ведомости по всем дисциплинам (зачет) группы
---
22.12.14
1. В интерфейсе преподавателей добавлена страница "Сессия" (ссылка на нее находится на странице "Оценивание")
2. Добавлена возможность печати ведомости в формате Excel (на странице "Сессия")
* В интерфейсе преподавателей добавлена страница "Сессия" (ссылка на нее находится на странице "Оценивание")
* Добавлена возможность печати ведомости в формате Excel (на странице "Сессия")
---
30.11.14
1. Добавлена возможность восстановления пароля;
2. Добавлен фильтр по группам в оценивании;
* Добавлена возможность восстановления пароля;
* Добавлен фильтр по группам в оценивании;
---
27.10.14
1. Добавлена возможность удаления дисциплины при отсутствии выставленных баллов;
2. Реализована передача дисциплины другому преподавателю (в интерфейсе добавления преподавателей к дисциплине);
3. Заблокирована возможность оценивания, если УКД не включает необходимое количество баллов (100 или 110 с бонусными баллами);
4. Улучшен внешний вид;
5. Обновлен иструмент прикрепления студентов к дисциплине;
6. Частично удалены всплывающие окна, сообщающие об успехе операции;
\ No newline at end of file
* Добавлена возможность удаления дисциплины при отсутствии выставленных баллов;
* Реализована передача дисциплины другому преподавателю (в интерфейсе добавления преподавателей к дисциплине);
* Заблокирована возможность оценивания, если УКД не включает необходимое количество баллов (100 или 110 с бонусными баллами);
* Улучшен внешний вид;
* Обновлен иструмент прикрепления студентов к дисциплине;
* Частично удалены всплывающие окна, сообщающие об успехе операции;
\ No newline at end of file
......@@ -28,6 +28,8 @@
{{ HTML.script('static/js/wnd/wnd.js')|raw }}
{{ HTML.script('static/js/event_inspector/eventInspector.js')|raw }}
{{ HTML.script('static/js/supportDialog.js')|raw }}
{{ HTML.script('static/js/updates.js')|raw }}
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
......@@ -51,26 +53,32 @@
<div class="main_layer">
<div class="main">
<div class="main_content sidePadding" style="overflow: hidden">
<style>.invisible { display: none; } .visible { display: inline-block; }</style>
{% for Message in Updates|slice(0, 10) %}
<div class="Updates invisible {% if loop.first %}visible{% endif %}">
<h2>
{% if not loop.last %}
<span style="float:left">
<a href="#" class="left" style="color:white">&lt;</a>
</span>
{% endif %}
Обновления {{ Message.date }}
{% if not loop.first %}
<span style="float:right">
<a href="#" class="right" style="color:white">&gt;</a>
</span>
{% endif %}
</h2>
{{ Markdown.parse(Message.text)|raw }}
<div class="updates">
<div class="tabs">
{% for Title, Messages in Blocks %}
<div id="tab-{{ Title|lower }}" class="tab {{ loop.first ? 'selected' }}">
{{ Rus[Title|lower] |capitalize }}
</div>
{% endfor %}
</div>
{% endfor %}
<div class="content">
{% for Title, Messages in Blocks %}
<div id="content-{{ Title|lower }}" class="{{ not loop.first ? 'hidden' }}">
<div class="message">
{% for Message in Messages|slice(0, 2) %}
<h3>{{ Message.date }}</h3>
{{ Markdown.parse(Message.text)|raw }}
{% endfor %}
</div>
<div class="expand" style="display:none">Ещё</div>
<div class="extra hidden"></div>
</div>
{% endfor %}
</div>
</div>
<div class="AuthForm">
<h2>{% block title %} {% endblock %}</h2>
{% block forms %} {% endblock %}
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment