1
0
mirror of https://github.com/humhub/humhub.git synced 2025-03-16 04:59:51 +01:00
humhub/static/assets/2c475e8c/js/humhub.content.form.js
2017-12-13 18:24:31 +01:00

162 lines
5.1 KiB
JavaScript

/**
* Core module for managing Streams and StreamItems
* @type Function
*/
humhub.module('content.form', function(module, require, $) {
var CREATE_FORM_ROOT_SELECTOR = '#contentFormBody';
var object = require('util').object;
var client = require('client');
var event = require('event');
var Widget = require('ui.widget').Widget;
var instance;
var CreateForm = function(node) {
Widget.call(this, node);
};
object.inherits(CreateForm, Widget);
CreateForm.prototype.init = function() {
this.$.hide();
// Hide options by default
$('.contentForm_options').hide();
$('#contentFormError').hide();
this.setDefaultVisibility();
this.$.fadeIn('fast');
if(!module.config['disabled']) {
// Remove info text from the textinput
$('#contentFormBody').on('click.humhub:content:form dragover.humhub:content:form', function() {
// Hide options by default
$('.contentForm_options').fadeIn();
});
} else {
$('#contentFormBody').find('.humhub-ui-richtext').trigger('disable');
}
};
CreateForm.prototype.submit = function(evt) {
this.$.find("#contentFormError, .preferences, .fileinput-button").hide();
this.$.find("#contentFormError li").remove();
var that = this;
evt.block = 'manual';
client.submit(evt).then(function(response) {
that.$.find(".preferences, .fileinput-button").show();
$('.contentForm_options .preferences, .fileinput-button').show();
if(!response.errors) {
event.trigger('humhub:modules:content:newEntry', response.output);
that.resetForm();
} else {
that.handleError(response);
}
}).catch(function(e) {
module.log.error(e, true);
}).finally(function() {
evt.finish();
});
};
/**
* Todo: this is post form only, this needs to be added to post module perhaps by calling $form.trigger('humhub:form:clear');
* @returns {undefined}
*/
CreateForm.prototype.resetForm = function() {
// Reset Form (Empty State)
$('.contentForm_options').hide();
var $contentForm = $('.contentForm');
$contentForm.filter(':text').val('');
$contentForm.filter('textarea').val('').trigger('autosize.resize');
$contentForm.attr('checked', false);
this.resetNotifyUser();
this.setDefaultVisibility();
this.resetFilePreview();
$('#public').attr('checked', false);
$('#contentFormBody').find('.humhub-ui-richtext').trigger('clear');
};
CreateForm.prototype.resetNotifyUser = function() {
$('#notifyUserContainer').hide();
Widget.instance('#notifyUserInput').reset();
};
CreateForm.prototype.resetFilePreview = function() {
Widget.instance($('#contentFormFiles_preview')).reset();
};
CreateForm.prototype.handleError = function(response) {
$('#contentFormError').show();
$.each(response.errors, function(fieldName, errorMessage) {
// Mark Fields as Error
var fieldId = 'contentForm_' + fieldName;
$('#' + fieldId).addClass('error');
$.each(errorMessage, function(key, msg) {
$('#contentFormError').append('<li><i class=\"icon-warning-sign\"></i> ' + msg + '</li>');
});
});
};
CreateForm.prototype.getForm = function() {
return this.$.find('form:visible');
};
CreateForm.prototype.changeVisibility = function() {
if(!$('#contentForm_visibility').prop('checked')) {
this.setPublicVisibility();
} else {
this.setPrivateVisibility();
}
};
CreateForm.prototype.setDefaultVisibility = function() {
if(module.config['defaultVisibility']) {
this.setPublicVisibility();
} else {
this.setPrivateVisibility();
}
};
CreateForm.prototype.setPublicVisibility = function() {
$('#contentForm_visibility').prop("checked", true);
$('#contentForm_visibility_entry').html('<i class="fa fa-lock"></i>' + module.text(['makePrivate']));
$('.label-public').removeClass('hidden');
};
CreateForm.prototype.setPrivateVisibility = function() {
$('#contentForm_visibility').prop("checked", false);
$('#contentForm_visibility_entry').html('<i class="fa fa-unlock"></i>' + module.text(['makePublic']));
$('.label-public').addClass('hidden');
};
CreateForm.prototype.notifyUser = function() {
$('#notifyUserContainer').show();
Widget.instance('#notifyUserInput').focus();
};
var init = function() {
var $root = $(CREATE_FORM_ROOT_SELECTOR);
if($root.length) {
instance = Widget.instance($root);
}
};
var unload = function() {
instance = undefined;
}
module.export({
CreateForm: CreateForm,
instance: instance,
init: init,
initOnPjaxLoad: true,
unload: unload
});
});