mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-06-16 23:00:51 +03:00
Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
65d738a2c8
|
@ -221,7 +221,7 @@ class ActionAjax extends Action {
|
|||
if ($oPoll->Add()) {
|
||||
$oViewer=$this->Viewer_GetLocalViewer();
|
||||
$oViewer->Assign('oPoll',$oPoll);
|
||||
$this->Viewer_AssignAjax('sPollItem',$oViewer->Fetch("polls/poll.form.item.tpl"));
|
||||
$this->Viewer_AssignAjax('sPollItem',$oViewer->Fetch("polls/poll.form.list.item.tpl"));
|
||||
return true;
|
||||
} else {
|
||||
$this->Message_AddError($this->Lang_Get('common.error.save'),$this->Lang_Get('error'));
|
||||
|
@ -264,7 +264,7 @@ class ActionAjax extends Action {
|
|||
if ($oPoll->Update()) {
|
||||
$oViewer=$this->Viewer_GetLocalViewer();
|
||||
$oViewer->Assign('oPoll',$oPoll);
|
||||
$this->Viewer_AssignAjax('sPollItem',$oViewer->Fetch("polls/poll.form.item.tpl"));
|
||||
$this->Viewer_AssignAjax('sPollItem',$oViewer->Fetch("polls/poll.form.list.item.tpl"));
|
||||
$this->Viewer_AssignAjax('iPollId',$oPoll->getId());
|
||||
return true;
|
||||
} else {
|
||||
|
|
|
@ -15,218 +15,222 @@ ls.poll = (function ($) {
|
|||
* Дефолтные опции
|
||||
*/
|
||||
var defaults = {
|
||||
// Роутер голосования
|
||||
sRouterVoteUrl: aRouter['ajax'] + 'poll/vote/',
|
||||
// Роутеры
|
||||
routers: {
|
||||
vote: aRouter['ajax'] + 'poll/vote/',
|
||||
add: aRouter['ajax'] + 'poll/create/',
|
||||
update: aRouter['ajax'] + 'poll/update/',
|
||||
remove: aRouter['ajax'] + 'poll/remove/',
|
||||
},
|
||||
|
||||
// Селекторы
|
||||
selectors: {
|
||||
modal: '#modal-poll-create',
|
||||
|
||||
poll: {
|
||||
poll: '.js-poll',
|
||||
vote_form: '.js-poll-vote-form',
|
||||
vote: '.js-poll-vote',
|
||||
abstain: '.js-poll-abstain',
|
||||
},
|
||||
|
||||
form: {
|
||||
list: '.js-poll-form-list',
|
||||
item: '.js-poll-form-list-item',
|
||||
item_remove: '.js-poll-form-list-item-remove',
|
||||
submit: '.js-poll-form-submit'
|
||||
},
|
||||
|
||||
answer: {
|
||||
list: '.js-poll-form-answer-list',
|
||||
add: '.js-poll-form-answer-add',
|
||||
item: {
|
||||
item: '.js-poll-form-answer-item',
|
||||
text: '.js-poll-form-answer-item-text',
|
||||
id: '.js-poll-form-answer-item-id',
|
||||
remove: '.js-poll-form-answer-item-remove',
|
||||
}
|
||||
},
|
||||
|
||||
// Селекторы результата опроса
|
||||
result: {
|
||||
container: '.js-poll-result',
|
||||
item: '.js-poll-result-item',
|
||||
sort: '.js-poll-result-sort',
|
||||
}
|
||||
},
|
||||
|
||||
// Максимальное кол-во вариантов ответов
|
||||
iMaxItems: 20,
|
||||
|
||||
// Селекторы добавления опроса
|
||||
sAddSelector: '.js-poll-add',
|
||||
sAddListSelector: '.js-poll-add-list',
|
||||
sAddItemSelector: '.js-poll-add-item',
|
||||
sAddItemRemoveSelector: '.js-poll-add-item-remove',
|
||||
sAddItemInputSelector: '.js-poll-add-item-input',
|
||||
sAddButtonSelector: '.js-poll-add-button',
|
||||
|
||||
// Селекторы опроса
|
||||
sPollSelector: '.js-poll',
|
||||
sPollItemOptionSelector: '.js-poll-item-option',
|
||||
sPollButtonVoteSelector: '.js-poll-button-vote',
|
||||
sPollButtonAbstainSelector: '.js-poll-button-abstain',
|
||||
|
||||
// Селекторы результата опроса
|
||||
sPollResultSelector: '.js-poll-result',
|
||||
sPollResultItemSelector: '.js-poll-result-item',
|
||||
sPollResultButtonSortSelector: '.js-poll-result-button-sort',
|
||||
|
||||
// Html варианта ответа
|
||||
sAddItemHtml: '<li class="poll-add-item js-poll-add-item">' +
|
||||
'<input type="checkbox" disabled="disabled">' +
|
||||
'<input type="hidden" name="answers[_NUMBER_][id]" value="_ANSWER_ID_">' +
|
||||
'<input type="text" name="answers[_NUMBER_][title]" class="poll-add-item-input js-poll-add-item-input" value="_ANSWER_TITLE_">' +
|
||||
'<i class="icon-remove poll-add-item-remove js-poll-add-item-remove" title="' + ls.lang.get('delete') + '"></i>' +
|
||||
'</li>'
|
||||
iMaxAnswers: 20,
|
||||
};
|
||||
|
||||
this.aAnswersInit=[];
|
||||
this.iCountAnswers=0;
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param {Object} options Опции
|
||||
*/
|
||||
this.init = function(options) {
|
||||
var self = this;
|
||||
var _this = this;
|
||||
|
||||
this.options = $.extend({}, defaults, options);
|
||||
|
||||
$(this.options.sPollSelector).each(function () {
|
||||
/**
|
||||
* Форма добавления
|
||||
*/
|
||||
|
||||
// Сабмит формы
|
||||
$(document).on('submit', '#form-poll-create', function (e) {
|
||||
var oForm = $(this);
|
||||
|
||||
_this[ oForm.data('action') == 'add' ? 'add' : 'update' ](oForm, $(_this.options.selectors.form.submit));
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Добавление варианта
|
||||
$(document).on('click', this.options.selectors.answer.add, function () {
|
||||
_this.answerAdd($(_this.options.selectors.answer.list));
|
||||
});
|
||||
|
||||
// Добавление варианта по нажатию Ctrl + Enter
|
||||
$(document).on('keyup', this.options.selectors.answer.text, function (e) {
|
||||
var key = e.keyCode || e.which;
|
||||
|
||||
if (e.ctrlKey && key == 13) {
|
||||
_this.answerAdd($(_this.options.selectors.answer.list));
|
||||
}
|
||||
});
|
||||
|
||||
// Удаление варианта
|
||||
$(document).on('click', this.options.selectors.answer.item.remove, function () {
|
||||
_this.answerRemove($(this));
|
||||
});
|
||||
|
||||
// Удаление опроса
|
||||
$(document).on('click', this.options.selectors.form.item_remove, function () {
|
||||
var oButton = $(this),
|
||||
oItem = oButton.closest(_this.options.selectors.form.item);
|
||||
|
||||
_this.remove(oItem.data('poll-id'), oItem.data('poll-target-tmp'));
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Опрос
|
||||
*/
|
||||
|
||||
$(this.options.selectors.poll.poll).each(function () {
|
||||
var oPoll = $(this),
|
||||
iPollId = oPoll.data('poll-id');
|
||||
|
||||
// Голосование за вариант
|
||||
oPoll.find(self.options.sPollButtonVoteSelector).on('click', function () {
|
||||
oPoll.find(_this.options.selectors.poll.vote).on('click', function () {
|
||||
var form = oPoll.find('form');
|
||||
|
||||
self.vote(form,this);
|
||||
_this.vote(form, $(this));
|
||||
});
|
||||
|
||||
// Воздержаться
|
||||
oPoll.find(self.options.sPollButtonAbstainSelector).on('click', function () {
|
||||
oPoll.find(_this.options.selectors.poll.abstain).on('click', function () {
|
||||
var form = oPoll.find('form');
|
||||
|
||||
self.vote(form,this,true);
|
||||
_this.vote(form, $(this), true);
|
||||
});
|
||||
|
||||
// Сортировка
|
||||
oPoll.on('click', self.options.sPollResultButtonSortSelector, function () {
|
||||
self.toggleSort(oPoll);
|
||||
oPoll.on('click', _this.options.selectors.result.sort, function () {
|
||||
_this.toggleSort(oPoll);
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.initFormUpdate = function() {
|
||||
this.initFormCreate();
|
||||
/**
|
||||
* Добавление опроса
|
||||
*/
|
||||
this.add = function(oForm, oButton) {
|
||||
ls.ajax.submit(this.options.routers.add, oForm, function(result) {
|
||||
$(this.options.selectors.form.list).append(result.sPollItem);
|
||||
$(this.options.selectors.modal).modal('hide');
|
||||
}.bind(this), { submitButton: oButton });
|
||||
};
|
||||
|
||||
this.initFormCreate = function() {
|
||||
var self = this;
|
||||
|
||||
var oPollAdd=$('#form-poll-create').find(self.options.sAddSelector);
|
||||
$.each(self.aAnswersInit,function(k,v){
|
||||
self.addItem(oPollAdd,v);
|
||||
});
|
||||
|
||||
|
||||
$(this.options.sAddSelector).each(function () {
|
||||
var oPollAdd = $(this);
|
||||
|
||||
// Добавление варианта
|
||||
oPollAdd.find(self.options.sAddButtonSelector).on('click', function () {
|
||||
self.addItem(oPollAdd);
|
||||
}.bind(self));
|
||||
|
||||
// Добавление варианта по нажатию Ctrl + Enter
|
||||
oPollAdd.on('keyup', self.options.sAddItemInputSelector, function (e) {
|
||||
var key = e.keyCode || e.which;
|
||||
|
||||
if (e.ctrlKey && key == 13) {
|
||||
self.addItem(oPollAdd);
|
||||
}
|
||||
});
|
||||
|
||||
// Удаление
|
||||
oPollAdd.on('click', self.options.sAddItemRemoveSelector, function () {
|
||||
self.removeItem(this);
|
||||
});
|
||||
});
|
||||
/**
|
||||
* Обновление опроса
|
||||
*/
|
||||
this.update = function(oForm, oButton) {
|
||||
ls.ajax.submit(this.options.routers.update, oForm, function(result) {
|
||||
$(this.options.selectors.form.item + '[data-poll-id=' + result.iPollId + ']').replaceWith(result.sPollItem);
|
||||
$(this.options.selectors.modal).modal('hide');
|
||||
}.bind(this), { submitButton: oButton });
|
||||
};
|
||||
|
||||
this.createPoll = function(form,button) {
|
||||
ls.ajax.submit(aRouter.ajax+'poll/create/', form, function(result){
|
||||
$('#poll-form-items').append(result.sPollItem);
|
||||
|
||||
$('#modal-poll-create').modal('hide');
|
||||
},{ submitButton: $(button) });
|
||||
};
|
||||
|
||||
this.updatePoll = function(form,button) {
|
||||
ls.ajax.submit(aRouter.ajax+'poll/update/', form, function(result){
|
||||
$('#poll-form-item-'+result.iPollId).replaceWith(result.sPollItem);
|
||||
|
||||
$('#modal-poll-create').modal('hide');
|
||||
},{ submitButton: $(button) });
|
||||
};
|
||||
|
||||
this.removePoll = function(id,tmp) {
|
||||
ls.ajax.load(aRouter.ajax+'poll/remove/', { id: id, tmp: tmp }, function(result){
|
||||
/**
|
||||
* Удаление опроса
|
||||
*/
|
||||
this.remove = function(iId, tmp) {
|
||||
ls.ajax.load(this.options.routers.remove, { id: iId, tmp: tmp }, function(result) {
|
||||
if (result.bStateError) {
|
||||
ls.msg.error(null, result.sMsg);
|
||||
} else {
|
||||
$('#poll-form-item-'+id).fadeOut('slow', function() {
|
||||
$(this.options.selectors.form.item + '[data-poll-id=' + iId + ']').fadeOut('slow', function() {
|
||||
$(this).remove();
|
||||
});
|
||||
}
|
||||
});
|
||||
return false;
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
/**
|
||||
* Добавляет вариант ответа
|
||||
*
|
||||
* @param {Object} oPollAdd Блок добавления опроса
|
||||
* @param {Object} oAnswerList Блок с ответами
|
||||
*/
|
||||
this.addItem = function(oPollAdd,params) {
|
||||
var defaults = {
|
||||
number: "0",
|
||||
answer_id: '',
|
||||
answer_title: '',
|
||||
disable_remove: false,
|
||||
disable_update: false
|
||||
}
|
||||
params = $.extend({}, defaults, params);
|
||||
this.answerAdd = function(oAnswerList) {
|
||||
var iAnswersCount = oAnswerList.find(this.options.selectors.answer.item.item).length;
|
||||
|
||||
if(oPollAdd.find(this.options.sAddItemSelector).length == this.options.iMaxItems) {
|
||||
ls.msg.error(null, ls.lang.get('topic_question_create_answers_error_max'));
|
||||
if (iAnswersCount == this.options.iMaxAnswers) {
|
||||
ls.msg.error(null, ls.lang.get('poll.notices.error_answers_max'));
|
||||
return false;
|
||||
}
|
||||
|
||||
var self = this,
|
||||
sTpl = this.options.sAddItemHtml;
|
||||
var oAnswerItem = $(this.options.selectors.answer.item.item + '[data-is-template=true]').clone().removeAttr('data-is-template').show(),
|
||||
oAnswerItemText = oAnswerItem.find(this.options.selectors.answer.item.text),
|
||||
oAnswerItemId = oAnswerItem.find(this.options.selectors.answer.item.id);
|
||||
|
||||
sTpl = sTpl.replace(/_NUMBER_/g, this.iCountAnswers);
|
||||
sTpl = sTpl.replace(/_ANSWER_ID_/g, params.answer_id);
|
||||
sTpl = sTpl.replace(/_ANSWER_TITLE_/g, params.answer_title);
|
||||
|
||||
|
||||
oNewItem = $(sTpl);
|
||||
if (params.disable_remove) {
|
||||
oNewItem.find(this.options.sAddItemRemoveSelector).remove();
|
||||
}
|
||||
if (params.disable_update) {
|
||||
oNewItem.find(this.options.sAddItemInputSelector).attr('disabled','disabled');
|
||||
}
|
||||
|
||||
oPollAdd.find(this.options.sAddListSelector).append(oNewItem);
|
||||
oNewItem.find('input[type=text]').focus();
|
||||
this.iCountAnswers++;
|
||||
oAnswerList.append(oAnswerItem);
|
||||
oAnswerItemId.attr('name', 'answers[' + iAnswersCount + '][id]');
|
||||
oAnswerItemText.attr('name', 'answers[' + iAnswersCount + '][title]').focus();
|
||||
};
|
||||
|
||||
this.addItemInit = function(params) {
|
||||
this.aAnswersInit.push(params);
|
||||
};
|
||||
|
||||
this.clearItemInit = function() {
|
||||
this.aAnswersInit=[];
|
||||
};
|
||||
|
||||
/**
|
||||
* Удаляет вариант ответа
|
||||
*
|
||||
* @param {Number} oRemoveButton Кнопка удаления
|
||||
* @param {Object} oRemoveButton Кнопка удаления
|
||||
*/
|
||||
this.removeItem = function(oRemoveButton) {
|
||||
$(oRemoveButton).closest(this.options.sAddItemSelector).remove();
|
||||
this.answerRemove = function(oRemoveButton) {
|
||||
oRemoveButton.closest(this.options.selectors.answer.item.item).fadeOut(200, function () {
|
||||
$(this).remove();
|
||||
});
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Голосование в опросе
|
||||
*
|
||||
* @param {Object} form Форма с данными опроса
|
||||
* @param {Object} button Копка для анимации загрузки
|
||||
* @param {Object} oForm Форма с данными опроса
|
||||
* @param {Object} oButton Копка для анимации загрузки
|
||||
* @param {Boolean} bAbstain Воздержаться при голосовании
|
||||
*/
|
||||
this.vote = function(form,button,abstain) {
|
||||
form=$(form);
|
||||
var formData=form.serializeJSON();
|
||||
this.vote = function(oForm, oButton, bAbstain) {
|
||||
var oFormData = oForm.serializeJSON();
|
||||
|
||||
ls.hook.marker('voteBefore');
|
||||
|
||||
ls.ajax.submit(this.options.sRouterVoteUrl, form, function(result){
|
||||
var oPoll = $('[data-poll-id=' + formData.id + ']');
|
||||
ls.ajax.submit(this.options.routers.vote, oForm, function(result) {
|
||||
var oPoll = $(this.options.selectors.poll.poll + '[data-poll-id=' + oFormData.id + ']').find(this.options.selectors.poll.vote_form);
|
||||
|
||||
oPoll.html(result.sText);
|
||||
|
||||
ls.hook.run('ls_pool_vote_after', [form, result], oPoll);
|
||||
}, { submitButton: $(button), params: { abstain: abstain ? 1 : 0 } });
|
||||
ls.hook.run('ls_pool_vote_after', [oForm, result], oPoll);
|
||||
}.bind(this), { submitButton: oButton, params: { abstain: bAbstain ? 1 : 0 } });
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -235,10 +239,10 @@ ls.poll = (function ($) {
|
|||
* @param {Object} oPoll Блок опроса
|
||||
*/
|
||||
this.toggleSort = function(oPoll) {
|
||||
var oButton = oPoll.find(this.options.sPollResultButtonSortSelector),
|
||||
oPollResult = oPoll.find(this.options.sPollResultSelector),
|
||||
aItems = oPollResult.find(this.options.sPollResultItemSelector),
|
||||
sSortType = oButton.hasClass('active') ? 'poll-item-pos' : 'poll-item-count';
|
||||
var oButton = oPoll.find(this.options.selectors.result.sort),
|
||||
oPollResult = oPoll.find(this.options.selectors.result.container),
|
||||
aItems = oPollResult.find(this.options.selectors.result.item),
|
||||
sSortType = oButton.hasClass(ls.options.classes.states.active) ? 'poll-item-pos' : 'poll-item-count';
|
||||
|
||||
aItems.sort(function (a, b) {
|
||||
a = $(a).data(sSortType);
|
||||
|
@ -253,7 +257,7 @@ ls.poll = (function ($) {
|
|||
}
|
||||
});
|
||||
|
||||
oButton.toggleClass('active');
|
||||
oButton.toggleClass(ls.options.classes.states.active);
|
||||
oPollResult.empty().append(aItems);
|
||||
};
|
||||
|
||||
|
|
|
@ -414,6 +414,36 @@ return array(
|
|||
),
|
||||
),
|
||||
|
||||
/**
|
||||
* Опросы
|
||||
*/
|
||||
'poll' => array(
|
||||
'vote' => 'Голосовать',
|
||||
'abstain' => 'Воздержаться',
|
||||
|
||||
// Результат
|
||||
'result' => array(
|
||||
'voted_total' => 'Проголосовало',
|
||||
'abstained_total' => 'Воздержалось',
|
||||
'sort' => 'Включить\выключить сортировку',
|
||||
),
|
||||
|
||||
// Форма добавления
|
||||
'form' => array(
|
||||
'title' => array(
|
||||
'add' => 'Добавление опроса',
|
||||
'edit' => 'Редактирование опроса',
|
||||
),
|
||||
'answers_title' => 'Варианты ответов',
|
||||
),
|
||||
|
||||
// Всплывающие сообщения
|
||||
'notices' => array(
|
||||
// TODO: Fix max number
|
||||
'error_answers_max' => 'Максимально возможное число вариантов ответа 20',
|
||||
),
|
||||
),
|
||||
|
||||
/**
|
||||
* Почта
|
||||
*/
|
||||
|
@ -607,33 +637,6 @@ return array(
|
|||
'topic_preview' => 'Предпросмотр',
|
||||
'topic_delete' => 'Удалить',
|
||||
'topic_delete_confirm' => 'Вы действительно хотите удалить топик?',
|
||||
/**
|
||||
* Топик-опрос
|
||||
*/
|
||||
'topic_question_title' => 'Опросы',
|
||||
'topic_question_title_edit' => 'Редактирование опроса',
|
||||
'topic_question_title_create' => 'Добавление опроса',
|
||||
'topic_question_vote' => 'Голосовать',
|
||||
'topic_question_vote_ok' => 'Ваш голос учтен.',
|
||||
'topic_question_vote_already' => 'Ваш голос уже учтен!',
|
||||
'topic_question_vote_result' => 'Проголосовало',
|
||||
'topic_question_vote_result_sort' => 'Включить\выключить сортировку',
|
||||
'topic_question_abstain' => 'Воздержаться',
|
||||
'topic_question_abstain_result' => 'Воздержалось',
|
||||
'topic_question_create' => 'Создание топика-опроса',
|
||||
'topic_question_edit' => 'Редактирование топика-опроса',
|
||||
'topic_question_create_title' => 'Вопрос',
|
||||
'topic_question_create_title_notice' => 'Вопрос должен быть наполнен смыслом, чтобы можно было понять, о чем будет опрос.',
|
||||
'topic_question_create_title_error' => 'Вопрос должен быть от 2 до 200 символов',
|
||||
'topic_question_create_answers' => 'Варианты ответов',
|
||||
'topic_question_create_answers_add' => 'Добавить вариант',
|
||||
'topic_question_create_answers_delete' => 'Удалить',
|
||||
'topic_question_create_answers_error' => 'Ответ должен быть от 1 до 100 символов',
|
||||
'topic_question_create_answers_error_min' => 'Вариантов ответа должно быть как минимум два',
|
||||
'topic_question_create_answers_error_max' => 'Максимально возможное число вариантов ответа 20',
|
||||
'topic_question_create_text' => 'Краткое описание (максимум 500 символов)',
|
||||
'topic_question_create_text_notice' => 'HTML-теги запрещены',
|
||||
'topic_question_create_text_error' => 'Описание опроса должно быть не более 500 символов',
|
||||
/**
|
||||
* Голосование за топик
|
||||
*/
|
||||
|
|
|
@ -1,26 +1,28 @@
|
|||
/**
|
||||
* Опросы
|
||||
*
|
||||
* @template topics/topic.question.tpl
|
||||
* @template polls/*.tpl
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.poll { margin-bottom: 15px; background: #fafafa; padding: 15px; }
|
||||
.poll { margin-bottom: 15px; background: #fafafa; padding: 15px; }
|
||||
|
||||
.poll-list { margin-bottom: 20px; margin-left: 0; list-style-type: none; }
|
||||
.poll-title { font-size: 20px; margin-bottom: 10px; }
|
||||
|
||||
.poll-item { margin-bottom: 10px; }
|
||||
.poll-item:last-child { margin-bottom: 0; }
|
||||
.poll-item label { display: inline; }
|
||||
.poll-answer-list { margin-bottom: 20px; margin-left: 0; list-style-type: none; }
|
||||
|
||||
.poll-answer-list-item { margin-bottom: 10px; }
|
||||
.poll-answer-list-item:last-child { margin-bottom: 0; }
|
||||
.poll-answer-list-item label { display: inline; }
|
||||
|
||||
|
||||
/**
|
||||
* Результат опроса
|
||||
*
|
||||
* @template topics/poll_result.tpl
|
||||
* @template polls/poll.result.tpl
|
||||
*/
|
||||
.poll-result { margin-bottom: 10px; padding: 15px 15px 0; background: #fff; border: 1px solid #eee; }
|
||||
.poll-result-item { margin-bottom: 20px; overflow: hidden; zoom: 1; }
|
||||
|
@ -38,9 +40,11 @@
|
|||
/**
|
||||
* Создание опроса
|
||||
*
|
||||
* @template actions/ActionQuestion/add.tpl
|
||||
* @template polls/poll.form.tpl
|
||||
*/
|
||||
.poll-add-item { margin-bottom: 10px; padding-right: 25px; position: relative; }
|
||||
.poll-add-item:last-child { margin-bottom: 0; }
|
||||
.poll-add-item-input { width: 100%; }
|
||||
.poll-add-item-remove { position: absolute; top: 7px; right: 0; cursor: pointer; }
|
||||
.poll-form-answer-item { margin-bottom: 10px; padding-right: 25px; position: relative; }
|
||||
.poll-form-answer-item:last-child { margin-bottom: 0; }
|
||||
.poll-form-answer-item-remove { position: absolute; top: 7px; right: 0; cursor: pointer; }
|
||||
|
||||
.poll-form-list { }
|
||||
.poll-form-list-item { padding: 10px 70px 10px 15px; background: #fff; margin-bottom: 1px; position: relative; }
|
|
@ -266,7 +266,7 @@ jQuery(document).ready(function($){
|
|||
|
||||
// Временный костыль для сабмита форм
|
||||
// TODO: Перенести в плагин button
|
||||
$('button[data-button-submit-form]').on('click', function () {
|
||||
$(document).on('click', 'button[data-button-submit-form]', function () {
|
||||
$( '#' + $(this).data('button-submit-form') ).submit();
|
||||
});
|
||||
|
||||
|
|
|
@ -1,7 +1 @@
|
|||
<div id="poll-form-items">
|
||||
{if $aPollItems}
|
||||
{foreach $aPollItems as $oPoll}
|
||||
{include file="polls/poll.form.item.tpl" oPoll=$oPoll}
|
||||
{/foreach}
|
||||
{/if}
|
||||
</div>
|
||||
{include 'polls/poll.form.list.tpl'}
|
|
@ -10,10 +10,11 @@
|
|||
|
||||
{block name='field_holder' prepend}
|
||||
{if $sFieldLabel}<label>{/if}
|
||||
<input type="checkbox"
|
||||
id="{if $sFieldId}{$sFieldId}{else}{$sFieldName}{/if}"
|
||||
name="{$sFieldName}"
|
||||
value="{if $sFieldValue}{$sFieldValue}{else}1{/if}"
|
||||
<input type="checkbox"
|
||||
id="{if $sFieldId}{$sFieldId}{else}{$sFieldName}{/if}"
|
||||
name="{$sFieldName}"
|
||||
value="{if $sFieldValue}{$sFieldValue}{else}1{/if}"
|
||||
{if $bFieldIsDisabled}disabled{/if}
|
||||
{if $bFieldChecked}checked{else}{if $_aRequest[$sFieldName] == 1}checked{/if}{/if} />
|
||||
{if $sFieldLabel}{$sFieldLabel}</label>{/if}
|
||||
{/block}
|
|
@ -0,0 +1,20 @@
|
|||
{**
|
||||
*
|
||||
*}
|
||||
|
||||
{extends file='forms/fields/form.field.base.tpl'}
|
||||
|
||||
{block name='field_before'}
|
||||
{$bFieldNoLabel = true}
|
||||
{/block}
|
||||
|
||||
{block name='field_holder' prepend}
|
||||
{if $sFieldLabel}<label>{/if}
|
||||
<input type="radio"
|
||||
id="{if $sFieldId}{$sFieldId}{else}{$sFieldName}{/if}"
|
||||
name="{$sFieldName}"
|
||||
value="{if $sFieldValue}{$sFieldValue}{else}1{/if}"
|
||||
{if $bFieldIsDisabled}disabled{/if}
|
||||
{if $bFieldChecked}checked{else}{if $_aRequest[$sFieldName] == 1}checked{/if}{/if} />
|
||||
{if $sFieldLabel}{$sFieldLabel}</label>{/if}
|
||||
{/block}
|
|
@ -75,7 +75,7 @@
|
|||
|
||||
<script>
|
||||
ls.lang.load({json var = $aLangJs});
|
||||
ls.lang.load({lang_load name="blog.blog, favourite.add, favourite.remove, topic_question_create_answers_error_max, geo_select_city, geo_select_region, blog.add.fields.type.note_open, blog.add.fields.type.note_close, common.success.add, common.success.remove"});
|
||||
ls.lang.load({lang_load name="poll.notices.error_answers_max, blog.blog, favourite.add, favourite.remove, geo_select_city, geo_select_region, blog.add.fields.type.note_open, blog.add.fields.type.note_close, common.success.add, common.success.remove"});
|
||||
|
||||
ls.registry.set('comment_max_tree', {json var=$oConfig->Get('module.comment.max_tree')});
|
||||
ls.registry.set('block_stream_show_tip', {json var=$oConfig->Get('block.stream.show_tip')});
|
||||
|
|
|
@ -8,73 +8,22 @@
|
|||
|
||||
{block name='modal_id'}modal-poll-create{/block}
|
||||
{block name='modal_class'}modal-poll-create js-modal-default{/block}
|
||||
{block name='modal_title'}{if $oPoll}Редактирование опроса{else}Создание опроса{/if}{/block}
|
||||
{block name='modal_title'}
|
||||
{if $oPoll}
|
||||
{$aLang.poll.form.title.edit}
|
||||
{else}
|
||||
{$aLang.poll.form.title.add}
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block name='modal_content'}
|
||||
<form action="" method="post" onsubmit="return false;" id="form-poll-create">
|
||||
|
||||
{* Заголовок топика *}
|
||||
{include file='forms/fields/form.field.text.tpl'
|
||||
sFieldName = 'poll[title]'
|
||||
sFieldValue = {($oPoll) ? $oPoll->getTitle() : '' }
|
||||
sFieldLabel = 'Название опроса'}
|
||||
|
||||
{if $oPoll and $oPoll->getCountVote()}
|
||||
{$bDisableChangeType=true}
|
||||
{/if}
|
||||
|
||||
Пользователь может выбрать:
|
||||
<label><input type="radio" name="poll[type]" value="one" {if !$oPoll or $oPoll->getCountAnswerMax()==1}checked="checked"{/if} {if $bDisableChangeType}disabled="disabled"{/if}> один вариант</label>
|
||||
<label><input type="radio" name="poll[type]" value="many" {if $oPoll and $oPoll->getCountAnswerMax()>1}checked="checked"{/if} {if $bDisableChangeType}disabled="disabled"{/if}>
|
||||
несколько вариантов
|
||||
</label>
|
||||
{include file='forms/fields/form.field.text.tpl'
|
||||
sFieldName = 'poll[count_answer_max]'
|
||||
sFieldValue = {($oPoll) ? $oPoll->getCountAnswerMax() : 2 }
|
||||
bFieldIsDisabled = $bDisableChangeType }
|
||||
|
||||
<div class="fieldset poll-add js-poll-add">
|
||||
<header class="fieldset-header">
|
||||
<h3 class="fieldset-title">{$aLang.topic_question_create_answers}</h3>
|
||||
</header>
|
||||
|
||||
<ul class="fieldset-body poll-add-list js-poll-add-list">
|
||||
<script type="text/javascript">
|
||||
ls.poll.clearItemInit();
|
||||
{if $oPoll}
|
||||
{$aAnswers=$oPoll->getAnswers()}
|
||||
{foreach $aAnswers as $oAnswer}
|
||||
ls.poll.addItemInit({
|
||||
'answer_title': {json var=$oAnswer->getTitle()},
|
||||
'answer_id': {json var=$oAnswer->getId()},
|
||||
'disable_update': {json var=!$oPoll->isAllowUpdate()},
|
||||
'disable_remove': {json var=(!$oPoll->isAllowUpdate() || $oAnswer->getCountVote()) } });
|
||||
{/foreach}
|
||||
{else}
|
||||
ls.poll.addItemInit({ });
|
||||
{/if}
|
||||
</script>
|
||||
</ul>
|
||||
|
||||
{if !$oPoll or $oPoll->isAllowUpdate()}
|
||||
<footer class="fieldset-footer">
|
||||
<button type="button" class="button button-primary js-poll-add-button" title="[Ctrl + Enter]">{$aLang.topic_question_create_answers_add}</button>
|
||||
</footer>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
||||
{if $oPoll}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='poll_id' sFieldValue=$oPoll->getId()}
|
||||
{else}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[type]' sFieldValue=$sTargetType}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[id]' sFieldValue=$sTargetId}
|
||||
{/if}
|
||||
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[tmp]' sFieldValue=$sTargetTmp}
|
||||
</form>
|
||||
{include 'polls/poll.form.tpl'}
|
||||
{/block}
|
||||
|
||||
{block name='modal_footer_begin'}
|
||||
<button type="submit" class="button button-primary" onclick="{if $oPoll}ls.poll.updatePoll('#form-poll-create',this);{else}ls.poll.createPoll('#form-poll-create',this);{/if}">{if $oPoll}{$aLang.common.save}{else}{$aLang.common.add}{/if}</button>
|
||||
{include file='forms/fields/form.field.button.tpl'
|
||||
sFieldAttributes = 'data-button-submit-form="form-poll-create"'
|
||||
sFieldText = ($oPoll) ? $aLang.common.save : $aLang.common.add
|
||||
sFieldClasses = 'js-poll-form-submit'
|
||||
sFieldStyle = 'primary'}
|
||||
{/block}
|
|
@ -0,0 +1,20 @@
|
|||
{**
|
||||
* Блок добавления ответа
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
<li class="poll-form-answer-item js-poll-form-answer-item" {if $bPollItemIsTemplate|default:false}data-is-template="true"{/if} {if $bPollItemIsTemplate|default:false}style="display: none"{/if}>
|
||||
<input type="hidden" name="answers[{$iPollItemIndex|default:0}][id]" value="{if $oPollItem}{$oPollItem->getId()}{/if}" class="js-poll-form-answer-item-id">
|
||||
|
||||
<input type="text"
|
||||
name="answers[{$iPollItemIndex|default:0}][title]"
|
||||
class="width-full js-poll-form-answer-item-text"
|
||||
value="{if $oPollItem}{$oPollItem->getTitle()}{/if}"
|
||||
{if ! $bPollIsAllowUpdate|default:true}disabled{/if}>
|
||||
|
||||
{if $bPollIsAllowRemove|default:true}
|
||||
<i class="icon-remove poll-form-answer-item-remove js-poll-form-answer-item-remove" title="{$aLang.common.remove}"></i>
|
||||
{/if}
|
||||
</li>
|
|
@ -1,9 +1,25 @@
|
|||
<div>
|
||||
<a href="#" data-type="modal-toggle" data-modal-url="{router page='ajax/poll/modal-create'}" data-modal-aftershow="ls.poll.initFormCreate();" data-param-target_type="{$sTargetType}" data-param-target_id="{$sTargetId}">Добавить опрос</a>
|
||||
{**
|
||||
* Форма добавления
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
{$aBlockParams = []}
|
||||
{$aBlockParams.target_type = $sTargetType}
|
||||
{$aBlockParams.target_id = $sTargetId}
|
||||
<div class="fieldset">
|
||||
<header class="fieldset-header">
|
||||
<h3 class="fieldset-title">Опросы</h3>
|
||||
</header>
|
||||
|
||||
{insert name="block" block="pollFormItems" params=$aBlockParams}
|
||||
<div class="fieldset-body">
|
||||
<a href="#" class="button button-primary" data-type="modal-toggle" data-modal-url="{router page='ajax/poll/modal-create'}" data-param-target_type="{$sTargetType}" data-param-target_id="{$sTargetId}">Добавить опрос</a>
|
||||
|
||||
<br>
|
||||
<br>
|
||||
|
||||
{$aBlockParams = []}
|
||||
{$aBlockParams.target_type = $sTargetType}
|
||||
{$aBlockParams.target_id = $sTargetId}
|
||||
|
||||
{insert name="block" block="pollFormItems" params=$aBlockParams}
|
||||
</div>
|
||||
</div>
|
|
@ -1,5 +0,0 @@
|
|||
<div id="poll-form-item-{$oPoll->getId()}">
|
||||
Опрос: {$oPoll->getTitle()} —
|
||||
<a href="#" data-type="modal-toggle" data-modal-url="{router page='ajax/poll/modal-update'}" data-modal-aftershow="ls.poll.initFormUpdate();" data-param-id="{$oPoll->getId()}" data-param-target_tmp="{$oPoll->getTargetTmp()}">{$aLang.common.edit}</a>
|
||||
<a href="#" onclick="return ls.poll.removePoll({$oPoll->getId()},'{$oPoll->getTargetTmp()}');">{$aLang.common.remove}</a>
|
||||
</div>
|
|
@ -0,0 +1,15 @@
|
|||
{**
|
||||
* Добавленный опрос в форме добавления
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
<li class="poll-form-list-item js-poll-form-list-item" data-poll-id="{$oPoll->getId()}" data-poll-target-tmp="{$oPoll->getTargetTmp()}">
|
||||
{$oPoll->getTitle()}
|
||||
|
||||
<ul class="user-list-small-item-actions">
|
||||
<li class="icon-edit js-poll-form-list-item-edit" title="{$aLang.common.edit}" data-type="modal-toggle" data-modal-url="{router page='ajax/poll/modal-update'}" data-param-id="{$oPoll->getId()}" data-param-target_tmp="{$oPoll->getTargetTmp()}"></li>
|
||||
<li class="icon-remove js-poll-form-list-item-remove" title="{$aLang.common.remove}"></li>
|
||||
</ul>
|
||||
</li>
|
14
application/frontend/skin/developer/polls/poll.form.list.tpl
Normal file
14
application/frontend/skin/developer/polls/poll.form.list.tpl
Normal file
|
@ -0,0 +1,14 @@
|
|||
{**
|
||||
* Список добавленных опросов в форме добавления
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
<ul class="poll-form-list js-poll-form-list">
|
||||
{if $aPollItems}
|
||||
{foreach $aPollItems as $oPoll}
|
||||
{include 'polls/poll.form.list.item.tpl' oPoll=$oPoll}
|
||||
{/foreach}
|
||||
{/if}
|
||||
</ul>
|
85
application/frontend/skin/developer/polls/poll.form.tpl
Normal file
85
application/frontend/skin/developer/polls/poll.form.tpl
Normal file
|
@ -0,0 +1,85 @@
|
|||
{**
|
||||
* Форма добавления опроса
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
<form action="" method="post" id="form-poll-create" data-action="{if $oPoll}update{else}add{/if}">
|
||||
{* Заголовок топика *}
|
||||
{include file='forms/fields/form.field.text.tpl'
|
||||
sFieldName = 'poll[title]'
|
||||
sFieldValue = {($oPoll) ? $oPoll->getTitle() : '' }
|
||||
sFieldLabel = 'Вопрос'}
|
||||
|
||||
|
||||
{* Кол-во вариантов которые может выбрать пользователь *}
|
||||
{if $oPoll and $oPoll->getCountVote()}
|
||||
{$bDisableChangeType = true}
|
||||
{/if}
|
||||
|
||||
Пользователь может выбрать:
|
||||
|
||||
{include file='forms/fields/form.field.radio.tpl'
|
||||
sFieldName = 'poll[type]'
|
||||
sFieldValue = 'one'
|
||||
sFieldLabel = 'Один вариант'
|
||||
bFieldChecked = ! $oPoll or $oPoll->getCountAnswerMax() == 1
|
||||
bFieldIsDisabled = $bDisableChangeType}
|
||||
|
||||
{include file='forms/fields/form.field.radio.tpl'
|
||||
sFieldName = 'poll[type]'
|
||||
sFieldValue = 'many'
|
||||
sFieldLabel = 'Несколько вариантов'
|
||||
bFieldChecked = $oPoll and $oPoll->getCountAnswerMax() > 1
|
||||
bFieldIsDisabled = $bDisableChangeType}
|
||||
|
||||
{include file='forms/fields/form.field.text.tpl'
|
||||
sFieldName = 'poll[count_answer_max]'
|
||||
sFieldValue = ($oPoll) ? $oPoll->getCountAnswerMax() : 2
|
||||
bFieldIsDisabled = $bDisableChangeType}
|
||||
|
||||
|
||||
{* Варианты ответов *}
|
||||
<div class="fieldset js-poll-add">
|
||||
<header class="fieldset-header">
|
||||
<h3 class="fieldset-title">{$aLang.poll.form.answers_title}</h3>
|
||||
</header>
|
||||
|
||||
<ul class="fieldset-body poll-form-answer-list js-poll-form-answer-list">
|
||||
{if $oPoll}
|
||||
{$aAnswers = $oPoll->getAnswers()}
|
||||
|
||||
{foreach $aAnswers as $oAnswer}
|
||||
{include 'polls/poll.form.answers.item.tpl'
|
||||
oPollItem = $oAnswer
|
||||
iPollItemIndex = $oAnswer@index
|
||||
bPollIsAllowUpdate = $oPoll->isAllowUpdate()
|
||||
bPollIsAllowRemove = $oPoll->isAllowUpdate() || ! $oAnswer->getCountVote()}
|
||||
{/foreach}
|
||||
{else}
|
||||
{include 'polls/poll.form.answers.item.tpl'}
|
||||
{/if}
|
||||
</ul>
|
||||
|
||||
{if ! $oPoll or $oPoll->isAllowUpdate()}
|
||||
<footer class="fieldset-footer">
|
||||
<button type="button" class="button js-poll-form-answer-add" title="[Ctrl + Enter]">{$aLang.common.add}</button>
|
||||
</footer>
|
||||
{/if}
|
||||
</div>
|
||||
|
||||
|
||||
{* Скрытые поля *}
|
||||
{if $oPoll}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='poll_id' sFieldValue=$oPoll->getId()}
|
||||
{else}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[type]' sFieldValue=$sTargetType}
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[id]' sFieldValue=$sTargetId}
|
||||
{/if}
|
||||
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='target[tmp]' sFieldValue=$sTargetTmp}
|
||||
</form>
|
||||
|
||||
{* Шаблон ответа для добавления с помощью js *}
|
||||
{include 'polls/poll.form.answers.item.tpl' bPollItemIsTemplate=true}
|
|
@ -1,32 +1,10 @@
|
|||
{foreach $aPollItems as $oPollItem}
|
||||
|
||||
<div class="poll poll-type-{$oPollItem->getTargetType()} js-poll" data-poll-id="{$oPollItem->getId()}" data-poll-answer-max="{$oPollItem->getCountAnswerMax()}">
|
||||
{$oPollItem->getTitle()}
|
||||
|
||||
{if !$oPollItem->getVoteCurrent()}
|
||||
<form action="" method="post" onsubmit="return false;">
|
||||
<ul class="poll-list">
|
||||
{foreach $oPollItem->getAnswers() as $oAnswer}
|
||||
<li class="poll-item">
|
||||
<label>
|
||||
{if $oPollItem->getCountAnswerMax()>1}
|
||||
<input type="checkbox" name="answers[]" value="{$oAnswer->getId()}" />
|
||||
{else}
|
||||
<input type="radio" name="answers[]" value="{$oAnswer->getId()}" />
|
||||
{/if}
|
||||
{$oAnswer->getTitle()}
|
||||
</label>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
<input type="hidden" name="id" value="{$oPollItem->getId()}">
|
||||
<button type="submit" class="button button-primary js-poll-button-vote">Голосовать</button>
|
||||
<button type="submit" class="button js-poll-button-abstain">Воздержаться</button>
|
||||
</form>
|
||||
{else}
|
||||
{include file='polls/poll.result.tpl' oPoll=$oPollItem}
|
||||
{/if}
|
||||
</div>
|
||||
{**
|
||||
* Список опросов
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
{foreach $aPollItems as $oPoll}
|
||||
{include 'polls/poll.tpl'}
|
||||
{/foreach}
|
|
@ -1,35 +1,33 @@
|
|||
{**
|
||||
* Результат опроса
|
||||
*
|
||||
* @styles assets/css/poll.css
|
||||
* @scripts <framework>/js/livestreet/poll.js
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
{$oPoll->getTitle()}
|
||||
|
||||
<ul class="poll-result js-poll-result">
|
||||
{$aAnswerItems=$oPoll->getAnswers()}
|
||||
{$iPollItemsCount = count($aAnswerItems)}
|
||||
{$aAnswerItems = $oPoll->getAnswers()}
|
||||
{$iPollItemsCount = count($aAnswerItems)}
|
||||
|
||||
{foreach $aAnswerItems as $oAnswer}
|
||||
<li class="poll-result-item {if $oPoll->getCountVoteAnswerMax() == $oAnswer->getCountVote()}poll-result-item-most{/if} js-poll-result-item"
|
||||
data-poll-item-count="{$oAnswer->getCountVote()}"
|
||||
data-poll-item-pos="{$iPollItemsCount - $oAnswer@index - 1}">
|
||||
{foreach $aAnswerItems as $oAnswer}
|
||||
<li class="poll-result-item {if $oPoll->getCountVoteAnswerMax() == $oAnswer->getCountVote()}poll-result-item-most{/if} js-poll-result-item"
|
||||
data-poll-item-count="{$oAnswer->getCountVote()}"
|
||||
data-poll-item-pos="{$iPollItemsCount - $oAnswer@index - 1}">
|
||||
|
||||
<div class="poll-result-item-count">
|
||||
<strong>{$oPoll->getAnswerPercent($oAnswer)}%</strong>
|
||||
<span>({$oAnswer->getCountVote()})</span>
|
||||
</div>
|
||||
<div class="poll-result-item-count">
|
||||
<strong>{$oPoll->getAnswerPercent($oAnswer)}%</strong>
|
||||
<span>({$oAnswer->getCountVote()})</span>
|
||||
</div>
|
||||
|
||||
<div class="poll-result-item-chart">
|
||||
<div class="poll-result-item-label">{$oAnswer->getTitle()}</div>
|
||||
<div class="poll-result-item-bar" style="width: {$oPoll->getAnswerPercent($oAnswer)}%;" ></div>
|
||||
</div>
|
||||
</li>
|
||||
{/foreach}
|
||||
<div class="poll-result-item-chart">
|
||||
<div class="poll-result-item-label">{$oAnswer->getTitle()}</div>
|
||||
<div class="poll-result-item-bar" style="width: {$oPoll->getAnswerPercent($oAnswer)}%;" ></div>
|
||||
</div>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
{* Кнопка сортировки *}
|
||||
<button class="button button-icon js-poll-result-button-sort" title="Включить\выключить сортировку"><i class="icon-align-left"></i></button>
|
||||
<button class="button button-icon js-poll-result-sort" title="{$aLang.poll.result.sort}"><i class="icon-align-left"></i></button>
|
||||
|
||||
<span class="poll-result-total">Проголосовало: {$oPoll->getCountVote()} | Воздержалось: {$oPoll->getCountAbstain()}</span>
|
||||
<span class="poll-result-total">{$aLang.poll.result.voted_total}: {$oPoll->getCountVote()} | {$aLang.poll.result.abstained_total}: {$oPoll->getCountAbstain()}</span>
|
37
application/frontend/skin/developer/polls/poll.tpl
Normal file
37
application/frontend/skin/developer/polls/poll.tpl
Normal file
|
@ -0,0 +1,37 @@
|
|||
{**
|
||||
* Опрос
|
||||
*
|
||||
* @styles poll.css
|
||||
* @scripts <common>/js/poll.js
|
||||
*}
|
||||
|
||||
<div class="poll poll-type-{$oPoll->getTargetType()} js-poll" data-poll-id="{$oPoll->getId()}" data-poll-answer-max="{$oPoll->getCountAnswerMax()}">
|
||||
<h3 class="poll-title">{$oPoll->getTitle()}</h3>
|
||||
|
||||
{if ! $oPoll->getVoteCurrent()}
|
||||
<form action="" method="post" onsubmit="return false;" class="js-poll-vote-form">
|
||||
<ul class="poll-answer-list">
|
||||
{foreach $oPoll->getAnswers() as $oAnswer}
|
||||
<li class="poll-answer-list-item">
|
||||
<label>
|
||||
{if $oPoll->getCountAnswerMax()>1}
|
||||
<input type="checkbox" name="answers[]" value="{$oAnswer->getId()}" />
|
||||
{else}
|
||||
<input type="radio" name="answers[]" value="{$oAnswer->getId()}" />
|
||||
{/if}
|
||||
|
||||
{$oAnswer->getTitle()}
|
||||
</label>
|
||||
</li>
|
||||
{/foreach}
|
||||
</ul>
|
||||
|
||||
{include file='forms/fields/form.field.hidden.tpl' sFieldName='id' sFieldValue=$oPoll->getId()}
|
||||
|
||||
<button type="submit" class="button button-primary js-poll-vote">{$aLang.poll.vote}</button>
|
||||
<button type="submit" class="button js-poll-abstain">{$aLang.poll.abstain}</button>
|
||||
</form>
|
||||
{else}
|
||||
{include file='polls/poll.result.tpl' oPoll=$oPoll}
|
||||
{/if}
|
||||
</div>
|
Loading…
Reference in a new issue