%PDF- %PDF-
Direktori : /home/vacivi36/intranet.vacivitta.com.br/static/js/humhub/ |
Current File : /home/vacivi36/intranet.vacivitta.com.br/static/js/humhub/humhub.ui.status.js |
humhub.module('ui.status', function (module, require, $) { /** @module ui/status **/ var event = require('event'); var log = require('log'); var util = require('util'); var object = util.object; var string = util.string; var client = require('client'); module.initOnPjaxLoad = true; module.template = { info: '<i class="fa fa-info-circle info"></i><span>{msg}</span>', success: '<i class="fa fa-check-circle success"></i><span>{msg}</span>', warn: '<i class="fa fa-exclamation-triangle warning"></i><span>{msg}</span>', error: '<i class="fa fa-exclamation-circle error"></i><span>{msg}</span>', closeButton: '<a class="status-bar-close pull-right" style="">×</a>', showMoreButton: '<a class="showMore"><i class="fa fa-angle-up"></i></a>', errorBlock: '<div class="status-bar-details" style="display:none;"><pre>{msg}</pre><div>' }; var title; var SELECTOR_ROOT = '#status-bar'; var SELECTOR_BODY = '.status-bar-body'; var SELECTOR_CONTENT = '.status-bar-content'; var AUTOCLOSE_INFO = 6000; var AUTOCLOSE_SUCCESS = 2000; var AUTOCLOSE_WARN = 10000; /** * @class StatusBar */ var StatusBar = function () { this.$ = $(SELECTOR_ROOT); }; StatusBar.prototype.info = function (msg, closeAfter) { closeAfter = closeAfter || AUTOCLOSE_INFO; this._trigger(string.template(module.template.info, {msg: msg}), undefined, closeAfter); }; StatusBar.prototype.success = function (msg, closeAfter) { closeAfter = closeAfter || AUTOCLOSE_SUCCESS; this._trigger(string.template(module.template.success, {msg: msg}), undefined, closeAfter); }; StatusBar.prototype.warn = function (msg, error, closeAfter) { closeAfter = closeAfter || AUTOCLOSE_WARN; this._trigger(string.template(module.template.warn, {msg: msg}), error, closeAfter); }; StatusBar.prototype.error = function (msg, error, closeAfter) { this._trigger(string.template(module.template.error, {msg: msg}), error, closeAfter); }; StatusBar.prototype._trigger = function (content, error, closeAfter) { if (this.closeTimer) { clearTimeout(this.closeTimer); } var that = this; this.hide(function () { that.setContent(content, error).show(function () { if (closeAfter > 0) { that.closeTimer = setTimeout(function () { that.hide(); }, closeAfter); } }); }); }; StatusBar.prototype.setContent = function (content, error) { var that = this; var $content = this.$.find(SELECTOR_CONTENT).html(content); var $closeButton = $(module.template.closeButton); if (error && module.config['showMore']) { this._addShowMore($content, error); } $closeButton.on('click', function () { that.hide(); }); $content.prepend($closeButton); return this; }; StatusBar.prototype._addShowMore = function ($content, error) { var proxy = $.proxy(this.toggle, this, error); $(module.template.showMoreButton).on('click', proxy).appendTo($content); this.$.find('.status-bar-content span').on('click', proxy).css('cursor', 'pointer'); }; StatusBar.prototype.toggle = function (error) { var $content = this.$.find(SELECTOR_CONTENT); var $showMore = this.$.find('.showMore'); var $details = $content.find('.status-bar-details'); if ($details.length) { $details.stop().slideToggle('fast', function () { $details.remove(); }); $showMore.find('i').attr('class', 'fa fa-angle-up'); } else { $details = $(string.template(module.template.errorBlock, {msg: getErrorMessage(error)})); $content.append($details); $details.slideToggle('fast'); $showMore.find('i').attr('class', 'fa fa-angle-down'); } }; var getErrorMessage = function (error) { if (!error) { return; } try { if (object.isString(error)) { return error; } else if (error instanceof Error) { var result = error.toString(); if (error.stack) { result += error.stack; } return result; } else { if (error.error instanceof Error) { error.stack = (error.error.stack) ? error.error.stack : undefined; error.error = error.error.message; } else if (error instanceof client.Response) { error = error.getLog(); } try { // encode return $('<div/>').text(JSON.stringify(error, null, 4)).html(); } catch (e) { return error.toString(); } } } catch (e) { log.error(e); } }; StatusBar.prototype.show = function (callback) { // Make the container transparent for beeing able to measure the body height this.$.css('opacity', 0); this.$.show(); // Prepare the body node for animation, we set auto height to get the real node height var $body = this.$.find(SELECTOR_BODY).stop().css('height', 'auto'); var height = $body.innerHeight(); // Hide element before animation $body.css({'opacity': '0', 'bottom': -height}); // Show root container this.$.css('opacity', 1); $body.animate({bottom: '0', opacity: 1.0}, 500, function () { if (callback) { callback(); } }); }; StatusBar.prototype.hide = function (callback) { var that = this; var $body = this.$.find(SELECTOR_BODY); var height = $body.innerHeight(); $body.stop().animate({bottom: -height, opacity: 0}, 500, function () { that.$.hide(); $body.css('bottom', '0'); if (callback) { callback(); } }); }; var init = function ($pjax) { title = document.title; if (!$pjax) { module.statusBar = new StatusBar(); event.on('humhub:modules:log:setStatus', function (evt, msg, details, level) { switch (level) { case log.TRACE_ERROR: case log.TRACE_FATAL: module.statusBar.error(msg, details); break; case log.TRACE_WARN: module.statusBar.warn(msg, details); break; case log.TRACE_SUCCESS: module.statusBar.success(msg); break; default: module.statusBar.info(msg); break; } }); // The initState can be used to append status messages before the module is initialized if (module.initState) { module.statusBar[module.initState[0]].apply(module.statusBar, module.initState[1]); module.initState = null; } } }; module.export({ init: init, sortOrder: 100, StatusBar: StatusBar, success: function (msg, closeAfter) { if (!module.statusBar) { module.initState = ['success', [msg, closeAfter]]; } else { module.statusBar.success(msg, closeAfter); } }, info: function (msg, closeAfter) { if (!module.statusBar) { module.initState = ['info', [msg, closeAfter]]; } else { module.statusBar.info(msg, closeAfter); } }, warn: function (msg, error, closeAfter) { if (!module.statusBar) { module.initState = ['warn', [msg, error, closeAfter]]; } else { module.statusBar.warn(msg, error, closeAfter); } }, error: function (msg, error, closeAfter) { if (!module.statusBar) { module.initState = ['error', [msg, error, closeAfter]]; } else { module.statusBar.error(msg, error, closeAfter); } } }); });