%PDF- %PDF-
| Direktori : /home/vacivi36/intranet.vacivitta.com.br/static/assets/50f19907/js/ |
| Current File : /home/vacivi36/intranet.vacivitta.com.br/static/assets/50f19907/js/humhub.stream.StreamRequest.js |
/*
* @link https://www.humhub.org/
* @copyright Copyright (c) 2018 HumHub GmbH & Co. KG
* @license https://www.humhub.com/licences
*
*/
/**do
* Core module for managing Streams and StreamItems
* @type Function
*/
humhub.module('stream.StreamRequest', function (module, require, $) {
var util = require('util');
var object = util.object;
var client = require('client');
/**
* The stream request is responsible for sending stream entry requests and forwarding the result.
*
* Available options:
*
* - url: Used as stream request url, if not given the url is fetched from the stream root element by means of the data-stream.
* - limit: Used to limit the result of a request if not given a module default is used
* - from: First content id which should be included in the result if not provided, the stream state is used
* - contentId: Used to load a single entry with a given id
* - loader: Weather or not triggering the stream loader for this request (default: true)
* - suppressionsOnly: Used for reloading suppressed entries
*
* @param stream
* @param options
* @constructor
*/
var StreamRequest = function(stream, options) {
this.options = options || {};
this.stream = stream;
this.stream.request = this;
this.initOptions(options);
};
StreamRequest.prototype.initOptions = function(options) {
this.contentId = this.options.contentId;
if (this.options.commentId) {
this.commentId = this.options.commentId;
}
this.viewContext = this.options.viewContext;
this.loader = object.defaultValue(this.options.loader, !object.isDefined(this.options.insertAfter));
this.url = object.defaultValue(this.options.url, this.stream.options.stream);
this.limit = object.defaultValue(this.options.limit, this.stream.options.loadCount);
if(!object.isDefined(this.options.to)) {
this.from = object.defaultValue(this.options.from, this.stream.state.lastContentId);
} else {
this.to = this.options.to;
}
this.suppressionsOnly = this.options.suppressionsOnly;
this.channel = this.options.channel;
};
StreamRequest.prototype.loadSingle = function(contentId) {
this.options.contentId = contentId;
return this.load();
};
StreamRequest.prototype.load = function() {
this.stream.trigger('humhub:stream:beforeLoadEntries', [this.stream, this]);
if(this.stream.isLoading()) {
return Promise.resolve();
}
if(this.loader) {
this.stream.loader.show(true);
}
this.stream.state.loading = true;
this.stream.state.lastRequest = this;
var that = this;
return that._send().then(function (response) {
that.response = response;
if(that.loader) {
that.stream.loader.show(false);
}
that.stream.state.loading = false;
that.stream.trigger('humhub:stream:afterLoadEntries', [that.stream, this]);
return that;
}).finally(function () {
that.stream.state.loading = false;
});
};
StreamRequest.prototype._send = function () {
var that = this;
var stream = this.stream;
if (stream.currentXhr) {
stream.currentXhr.abort();
}
return client.ajax(this.url, {data: this.getRequestData(), beforeSend: function (xhr) {
// Update requests do not interfer with other request
if(!that.isUpdateRequest()) {
stream.currentXhr = xhr;
}
}}).then(function(response) {
stream.currentXhr = undefined;
stream.state.initialized = true;
return response;
});
};
StreamRequest.prototype.getRequestData = function() {
var data = {};
var that = this;
if(!this.contentId) {
data[this.buildRequestDataKey('sort')] = this.sort;
if(!object.isDefined(this.to)) {
data[this.buildRequestDataKey('from')] = this.from;
} else {
data[this.buildRequestDataKey('to')] = this.to;
}
data[this.buildRequestDataKey('limit')] = this.limit;
}
if(this.viewContext) {
data['viewContext'] = this.viewContext;
}
data[this.buildRequestDataKey('contentId')] = this.contentId;
if (this.commentId) {
data[this.buildRequestDataKey('commentId')] = this.commentId;
}
data[this.buildRequestDataKey('suppressionsOnly')] = this.suppressionsOnly;
if(this.options.data) {
$.each(this.options.data, function(key, value) {
data[this.buildRequestDataKey(key)] = value;
});
}
$.each(this.stream.filter.getFilterMap(), function(key, value) {
data[that.buildRequestDataKey(key)] = value;
});
return data;
};
StreamRequest.prototype.buildRequestDataKey = function(key) {
return 'StreamQuery['+key+']';
};
StreamRequest.prototype.isLastEntryResponse = function () {
return !this.isSingleEntryRequest() && !this.isUpdateRequest() && object.isEmpty(this.response.content);
};
StreamRequest.prototype.getResultHtml = function() {
var result = '';
this.forEachResult(function(key, entry, output) {
result += output;
});
return result;
};
StreamRequest.prototype.forEachResult = function(handler) {
var that = this;
$.each(this.response.contentOrder, function (i, key) {
handler.call(null, key, that.response.content[key], that.response.content[key].output);
});
};
StreamRequest.prototype.isSingleEntryRequest = function() {
return !!this.contentId;
};
StreamRequest.prototype.isUpdateRequest = function() {
return !!this.to;
};
module.export = StreamRequest;
});