scinote-web/app/assets/javascripts/my_modules/results.js.erb

222 lines
6.7 KiB
Text
Raw Normal View History

//= require assets
//= require comments
2017-05-10 19:53:32 +08:00
(function(global) {
'use strict';
global.Results = (function() {
var ResultTypeEnum = Object.freeze({
FILE: 0,
TABLE: 1,
TEXT: 2,
COMMENT: 3
});
2017-05-10 19:53:32 +08:00
function init() {
2017-05-11 22:54:28 +08:00
initHandsOnTables($(document));
2017-05-10 19:53:32 +08:00
_expandAllResults();
_initTutorial();
2017-05-11 22:54:28 +08:00
applyCollapseLinkCallBack();
2017-05-10 19:53:32 +08:00
Comments.bindNewElement();
Comments.initialize();
Comments.initCommentOptions('ul.content-comments');
Comments.initEditComments('#results');
Comments.initDeleteComments('#results');
$(function () {
$('#results-collapse-btn').click(function () {
$('.result .panel-collapse').collapse('hide');
$(document).find('span.collapse-result-icon').each(function() {
$(this).addClass('glyphicon-collapse-down');
$(this).removeClass('glyphicon-collapse-up');
});
});
$('#results-expand-btn').click(_expandAllResults);
});
2017-05-10 19:53:32 +08:00
// This checks if the ctarget param exist in the rendered url and opens the
// comment tab
if( getParam('ctarget') ){
var target = '#'+ getParam('ctarget');
$(target).find('a.comment-tab-link').click();
2016-02-12 23:52:43 +08:00
}
2017-05-10 19:53:32 +08:00
}
function initHandsOnTables(root) {
root.find('div.hot-table').each(function() {
var $container = $(this).find('.step-result-hot-table');
var contents = $(this).find('.hot-contents');
$container.handsontable({
width: '100%',
startRows: 5,
startCols: 5,
rowHeaders: true,
colHeaders: true,
fillHandle: false,
formulas: true,
cells: function (row, col, prop) {
var cellProperties = {};
if (col >= 0)
cellProperties.readOnly = true;
else
cellProperties.readOnly = false;
return cellProperties;
}
});
var hot = $container.handsontable('getInstance');
var data = JSON.parse(contents.attr('value'));
hot.loadData(data.data);
});
}
function applyCollapseLinkCallBack() {
$('.result-panel-collapse-link')
.on('ajax:success', function() {
var collapseIcon = $(this).find('.collapse-result-icon');
var collapsed = $(this).hasClass('collapsed');
// Toggle collapse button
collapseIcon.toggleClass('glyphicon-collapse-up', !collapsed);
collapseIcon.toggleClass('glyphicon-collapse-down', collapsed);
});
}
// Toggle editing buttons
function toggleResultEditButtons(show) {
if(show) {
2017-05-10 19:53:32 +08:00
$('#results-toolbar').show();
$('.edit-result-button').show();
} else {
$('.edit-result-button').hide();
$('#results-toolbar').hide();
}
}
// Expand all results
function _expandAllResults() {
$('.result .panel-collapse').collapse('show');
$(document).find('span.collapse-result-icon').each(function() {
$(this).addClass('glyphicon-collapse-up');
$(this).removeClass('glyphicon-collapse-down');
});
$(document).find('div.step-result-hot-table').each(function() {
_renderTable(this);
});
}
2016-02-12 23:52:43 +08:00
2017-05-10 19:53:32 +08:00
function expandResult(result) {
$('.panel-collapse', result).collapse('show');
$(result).find('span.collapse-result-icon').each(function() {
$(this).addClass('glyphicon-collapse-up');
$(this).removeClass('glyphicon-collapse-down');
});
_renderTable($(result).find('div.step-result-hot-table'));
animateSpinner(null, false);
setupAssetsLoading();
}
function _renderTable(table) {
$(table).handsontable('render');
// Yet another dirty hack to solve HandsOnTable problems
if (parseInt($(table).css('height'), 10) <
parseInt($(table).css('max-height'), 10) - 30) {
$(table).find('.ht_master .wtHolder').css({ 'height': '100%',
'width': '100%' });
}
2017-05-10 19:53:32 +08:00
}
/**
* Initializes tutorial
*/
function _initTutorial() {
var stepNum = parseInt(Cookies.get('current_tutorial_step'), 10);
if (stepNum >= 15 && stepNum <= 16) {
var samplesTab = $('#module-samples-nav-tab');
var nextPage = samplesTab.find('a').attr('href');
var steps = [{
element: $('#results-toolbar')[0],
intro: I18n.t('tutorial.module_results_html')
2017-05-11 22:54:28 +08:00
}, {
2017-05-10 19:53:32 +08:00
element: samplesTab[0],
intro: I18n.t('tutorial.module_results_click_samples_html'),
position: 'left'
}];
initPageTutorialSteps(15, 16, nextPage, function() {}, function() {},
steps);
}
}
function processResult(ev, resultTypeEnum, editMode) {
var $form = $(ev.target.form);
$form.clearFormErrors();
switch(resultTypeEnum) {
2017-05-11 22:54:28 +08:00
case ResultTypeEnum.TABLE:
2017-05-10 19:53:32 +08:00
var $nameInput = $form.find('#result_name');
var nameValid = textValidator(ev, $nameInput, 0,
<%= Constants::NAME_MAX_LENGTH %>);
break;
2017-05-11 22:54:28 +08:00
case ResultTypeEnum.TEXT:
2017-05-10 19:53:32 +08:00
var $nameInput = $form.find('#result_name');
var nameValid = textValidator(ev, $nameInput, 0,
<%= Constants::NAME_MAX_LENGTH %>);
var $textInput = TinyMCE.getContent();
textValidator(ev, $textInput, 1, <%= Constants::TEXT_MAX_LENGTH %>, false, true);
break;
2017-05-11 22:54:28 +08:00
case ResultTypeEnum.COMMENT:
2017-05-10 19:53:32 +08:00
var $commentInput = $form.find('#comment_message');
var commentValid = textValidator(ev, $commentInput, 1,
<%= Constants::TEXT_MAX_LENGTH %>);
break;
}
}
// init cancel button
function initCancelFormButton(form, callback) {
$(form).find('.cancel-new').click(function(event) {
event.preventDefault();
event.stopPropagation();
event.stopImmediatePropagation();
$(form).remove();
toggleResultEditButtons(true);
callback();
});
}
function archive(e, element) {
e.preventDefault();
e.stopPropagation();
e.stopImmediatePropagation();
var el = $(element);
if(confirm(el.data('confirm-text'))) {
animateSpinner();
$('#' + el.data('form-id')).submit();
}
}
2017-05-10 19:53:32 +08:00
var publicAPI = Object.freeze({
init: init,
initHandsOnTables: initHandsOnTables,
applyCollapseLinkCallBack: applyCollapseLinkCallBack,
toggleResultEditButtons: toggleResultEditButtons,
expandResult: expandResult,
processResult: processResult,
ResultTypeEnum: ResultTypeEnum,
initCancelFormButton: initCancelFormButton,
archive: archive
2017-05-10 19:53:32 +08:00
});
2017-05-10 19:53:32 +08:00
return publicAPI;
})();
2016-12-08 18:26:13 +08:00
2017-05-10 19:53:32 +08:00
$(document).ready(function(){
Results.init();
});
})(window);