You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
220 lines
5.6 KiB
220 lines
5.6 KiB
/* |
|
* Copyright (c) 2015 |
|
* |
|
* This file is licensed under the Affero General Public License version 3 |
|
* or later. |
|
* |
|
* See the COPYING-README file. |
|
* |
|
*/ |
|
|
|
(function() { |
|
|
|
/** |
|
* @class OCA.Activity.ActivityTabView |
|
* @classdesc |
|
* |
|
* Displays activity information for a given file |
|
* |
|
*/ |
|
var ActivityTabView = OCA.Files.DetailTabView.extend(/** @lends OCA.Activity.ActivityTabView.prototype */ { |
|
id: 'activityTabView', |
|
className: 'activityTabView tab', |
|
|
|
events: { |
|
'click .showMore': '_onClickShowMore' |
|
}, |
|
|
|
_loading: false, |
|
_plugins: [], |
|
|
|
initialize: function() { |
|
this.collection = new OCA.Activity.ActivityCollection(); |
|
this.collection.setObjectType('files'); |
|
this.collection.on('request', this._onRequest, this); |
|
this.collection.on('sync', this._onEndRequest, this); |
|
this.collection.on('error', this._onError, this); |
|
this.collection.on('add', this._onAddModel, this); |
|
|
|
this._plugins = OC.Plugins.getPlugins('OCA.Activity.RenderingPlugins'); |
|
_.each(this._plugins, function(plugin) { |
|
if (_.isFunction(plugin.initialize)) { |
|
plugin.initialize(); |
|
} |
|
}); |
|
}, |
|
|
|
template: function(data) { |
|
return OCA.Activity.Templates['activitytabview'](data); |
|
}, |
|
|
|
get$: function() { |
|
return this.$el; |
|
}, |
|
|
|
getLabel: function() { |
|
return t('activity', 'Activity'); |
|
}, |
|
|
|
getIcon: function() { |
|
return 'icon-activity'; |
|
}, |
|
|
|
setFileInfo: function(fileInfo) { |
|
this._fileInfo = fileInfo; |
|
if (this._fileInfo) { |
|
this.collection.setObjectId(this._fileInfo.get('id')); |
|
this.collection.reset(); |
|
this.collection.fetch(); |
|
|
|
_.each(this._plugins, function(plugin) { |
|
if (_.isFunction(plugin.setFileInfo)) { |
|
plugin.setFileInfo('files', fileInfo.get('id')); |
|
} |
|
}); |
|
} else { |
|
this.collection.reset(); |
|
|
|
_.each(this._plugins, function(plugin) { |
|
if (_.isFunction(plugin.resetFileInfo)) { |
|
plugin.resetFileInfo(); |
|
} |
|
}); |
|
} |
|
}, |
|
|
|
_onError: function() { |
|
var $emptyContent = this.$el.find('.emptycontent'); |
|
$emptyContent.removeClass('hidden'); |
|
$emptyContent.find('p').text(t('activity', 'An error occurred while loading activities')); |
|
}, |
|
|
|
_onRequest: function() { |
|
if (this.collection.lastGivenId === 0) { |
|
this.render(); |
|
} |
|
this.$el.find('.showMore').addClass('hidden'); |
|
}, |
|
|
|
_onEndRequest: function() { |
|
this.$container.removeClass('hidden'); |
|
this.$el.find('.loading').addClass('hidden'); |
|
if (this.collection.length) { |
|
this.$el.find('.emptycontent').addClass('hidden'); |
|
} |
|
if (this.collection.hasMore) { |
|
this.$el.find('.showMore').removeClass('hidden'); |
|
} |
|
}, |
|
|
|
_onClickShowMore: function() { |
|
this.collection.fetch({ |
|
reset: false |
|
}); |
|
}, |
|
|
|
/** |
|
* Format an activity model for display |
|
* |
|
* @param {OCA.Activity.ActivityModel} activity |
|
* @return {Object} |
|
*/ |
|
_formatItem: function(activity) { |
|
|
|
var subject = escapeHTML(activity.get('subject')), |
|
subject_rich = activity.get('subject_rich'); |
|
if (subject_rich[0].length > 1) { |
|
subject = OCA.Activity.RichObjectStringParser.parseMessage(subject_rich[0], subject_rich[1]); |
|
} |
|
var message = escapeHTML(activity.get('message')), |
|
message_rich = activity.get('message_rich'); |
|
if (message_rich[0].length > 1) { |
|
message = OCA.Activity.RichObjectStringParser.parseMessage(message_rich[0], message_rich[1]); |
|
} |
|
|
|
var output = { |
|
subject: subject, |
|
formattedDate: activity.getRelativeDate(), |
|
formattedDateTooltip: activity.getFullDate(), |
|
isMonochromeIcon: activity.isMonochromeIcon(), |
|
timestamp: moment(activity.get('datetime')).valueOf(), |
|
message: message, |
|
icon: activity.get('icon') |
|
}; |
|
|
|
/** |
|
* Disable previews in the rightside bar, |
|
* it's always the same image anyway. |
|
if (activity.has('previews')) { |
|
output.previews = _.map(activity.get('previews'), function(data) { |
|
return { |
|
previewClass: data.isMimeTypeIcon ? 'preview-mimetype-icon': '', |
|
source: data.source |
|
}; |
|
}); |
|
} |
|
*/ |
|
return output; |
|
}, |
|
|
|
activityTemplate: function(params) { |
|
return OCA.Activity.Templates['activitytabview_activity'](params); |
|
}, |
|
|
|
_onAddModel: function(model, collection, options) { |
|
var $el = $(this.activityTemplate(this._formatItem(model))); |
|
|
|
_.each(this._plugins, function(plugin) { |
|
if (_.isFunction(plugin.prepareModelForDisplay)) { |
|
plugin.prepareModelForDisplay(model, $el, 'ActivityTabView'); |
|
} |
|
}); |
|
|
|
if (!_.isUndefined(options.at) && collection.length > 1) { |
|
this.$container.find('li').eq(options.at).before($el); |
|
} else { |
|
this.$container.append($el); |
|
} |
|
|
|
this._postRenderItem($el); |
|
}, |
|
|
|
_postRenderItem: function($el) { |
|
$el.find('.avatar').each(function() { |
|
var element = $(this); |
|
if (element.data('user-display-name')) { |
|
element.avatar(element.data('user'), 21, undefined, false, undefined, element.data('user-display-name')); |
|
} else { |
|
element.avatar(element.data('user'), 21); |
|
} |
|
}); |
|
$el.find('.avatar-name-wrapper').each(function() { |
|
var element = $(this); |
|
var avatar = element.find('.avatar'); |
|
var label = element.find('strong'); |
|
|
|
$.merge(avatar, label).contactsMenu(element.data('user'), 0, element); |
|
}); |
|
$el.find('.has-tooltip').tooltip({ |
|
placement: 'bottom' |
|
}); |
|
}, |
|
|
|
|
|
/** |
|
* Renders this details view |
|
*/ |
|
render: function() { |
|
if (this._fileInfo) { |
|
this.$el.html(this.template({ |
|
emptyMessage: t('activity', 'No activity yet'), |
|
moreLabel: t('activity', 'Load more activities') |
|
})); |
|
this.$container = this.$el.find('ul.activities'); |
|
} |
|
} |
|
}); |
|
|
|
OCA.Activity = OCA.Activity || {}; |
|
OCA.Activity.ActivityTabView = ActivityTabView; |
|
})();
|
|
|