-
Notifications
You must be signed in to change notification settings - Fork 26
JavaScript Notes
В системе используется Twitter Bootstrap, который позволяет достаточно быстро разрабатывать прототипы интерфейсов, идеально подходит для интерфейсов панели администратора.
Так же в системе используется RequireJS для организации AMD
Глобальных настроек нет
В довесок к Twiter Boostrap и RequireJS в системе есть еще пару хаков:
- ссылка с классом
confirm
запросит подтверждение перехода по указанному URL, в качестве текста будет использоватьсяdata-confirm
атрибут, можно совмещать с классомajax
- ссылка с классом
ajax
будет стучаться по указанному URL посредством XMLHttpRequest:- в довесок к URL будут собраны все данные из
data
(т.е.data-id="2"
эквивалентно?id=2
) - можно указать метод доставки, используя атрибут
data-ajax-method
, по умолчанию - POST - можно указать тип ожидаемых данных -
data-ajax-type
, по умолчанию - JSON
- в довесок к URL будут собраны все данные из
- форма с классом
ajax
будет отправлена посредством XMLHttpRequest по указанному в action URL- можно указать метод доставки используя атрибут
method
, по умолчанию - GET - можно указать тип ожидаемых данных -
data-ajax-type
, по умолчанию - JSON
- можно указать метод доставки используя атрибут
- элемент с классом
load
подгружает HTML контент со страницы указанной в атрибутеhref
илиdata-ajax-source
в элемент по селектору указанному в атрибутеdata-ajax-target
- можно указать метод доставки -
data-ajax-method
- можно указать метод доставки -
- элемент с классом
modal
открывает модальный диалог, контент которого в формате HTML будет доставлен посредством XMLHttpRequest
<a class="ajax" href="/get">Click Me!</a>
<a class="confirm" href="/delete" data-id="42" data-confirm="Are you sure?">Click Me!</a>
<a class="ajax confirm" href="/delete" data-id="42">Click Me!</a>
<a class="dialog" href="/dialog">Click Me!</a>
<div class="load" data-source="/get/five" data-ajax-target="#load">
<div id="load">...</load>
</div>
<form class="ajax" action="/save/" method="post">
...
</form>
Со стороны сервера передача данных не требует от нас чего-либо экстраординарного:
<?php
return
function() use ($view) {
$view->test = 123;
}
Как и при работе с обычными контроллерами, мы можем использовать пакет Messages:
<?php
return
function() use ($view) {
$this->getMessages()->addNotice('Notice Text');
$this->getMessages()->addSuccess('Success Text');
$this->getMessages()->addError('Error Text');
}
Есть так же отслеживание ключевого слова callback
, что позволяет выполнять какие-либо функции уже на стороне браузера:
<?php
return
function() use ($view) {
/** @var View $view */
$view->callback = 'callback_function_name'; // call custom function
$view->callback = 'bluz.validate.notices'; // call function by AMD
}
Или даже перезагрузить текущую страницу:
<?php
return
function() {
$this->reload():
}
Или отправить куда-нибудь:
<?php
return
function() {
$this->redirect("http://google.com"):
}
Так же есть возможность указать каким образом будут отправлены данные на сервер (имеется ввиду HTTP метод передачи):
<a href="/delete" class="ajax confirm" data-id="42" data-method="DELETE" title="Are you sure?">Click Me!</a>
- автоматическая инициализация Tooltips для элементов с классом
bluz-tooltip
- просмотр картинок для ссылок с классом
bluz-preview
, гдеhref
указывает на полноразмерную картинку - просмотр картинок для
img
с классомbluz-preview
, гдеdata-preview
указывает на полноразмерную картинку
<a href="#" class="bluz-tooltip" data-toggle="tooltip" title="User Role">Username</a>
Все ajax запросы отправляются посредством POST, необходимо добавить обработку data
параметра data-ajax-method
.
Так же надо бы предусмотреть удобное добавление кастомного обработчика ответа сервера, опять идём к data
- data-ajax-callback
Ещё есть мысль перевесить управление с классов на data-spy
(по аналогии с Twitter Bootstrap)? Но тут я вижу сразу два недостатка, которые есть в самом Bootstrap:
- обработчики вешаются независимо на data-spy[scroll] и data-spy[affix]
- нет возможности использовать их одновременно для одного элемента
Думаю было бы правильно, чтобы был следующий функционал (где-то должен быть уже реализован, нутром чую), начну с HTML:
<div data-helper="ajax confirm"></div>
Далее должна быть регистрация хэлперов в JavaScript:
$.helper.register('ajax', { 'click': function(element){/*click logic*/} } );
$.helper.register('confirm', { 'click': function(element){/*click logic*/} } );
И собственно инициализация обработчика:
$(body).on('click.bluz.helper', '[data-bluz-helper]', function(){
var helpers = $(this).data('bluz-helper').split(' ');
var chain = null;
for (helperName in helpers) {
if ($.helper.isRegistered(helperName )) {
var helper = $.helper.get(helperName);
if (helper.click) {
chain = helper.click(this, chain); // or use apply?
if (false === chain) return;
}
}
}
});
Database standards
Requirements
Server
Notes
— HTML and CSS
— JavaScript
— Database
Modules
— ACL
— API
— Cache
— Categories
— Comments
— Media
— Options
— Pages
— System
— Tests
— Twitter
— Users