120 lines
2.6 KiB
JavaScript
120 lines
2.6 KiB
JavaScript
/*
|
|
* Copyright (c) 2016
|
|
*
|
|
* This file is licensed under the Affero General Public License version 3
|
|
* or later.
|
|
*
|
|
* See the COPYING-README file.
|
|
*
|
|
*/
|
|
|
|
var NS_OWNCLOUD = 'http://owncloud.org/ns';
|
|
/**
|
|
* @class CommentModel
|
|
* @classdesc
|
|
*
|
|
* Comment
|
|
*
|
|
*/
|
|
var CommentModel = OC.Backbone.Model.extend(
|
|
/** @lends OCA.Comments.CommentModel.prototype */ {
|
|
sync: OC.Backbone.davSync,
|
|
|
|
/**
|
|
* Object type
|
|
*
|
|
* @type string
|
|
*/
|
|
_objectType: 'deckCard',
|
|
|
|
/**
|
|
* Object id
|
|
*
|
|
* @type string
|
|
*/
|
|
_objectId: null,
|
|
|
|
initialize: function(model, options) {
|
|
options = options || {};
|
|
if (options.objectType) {
|
|
this._objectType = options.objectType;
|
|
}
|
|
if (options.objectId) {
|
|
this._objectId = options.objectId;
|
|
}
|
|
},
|
|
|
|
defaults: {
|
|
actorType: 'users',
|
|
objectType: 'deckCard'
|
|
},
|
|
|
|
davProperties: {
|
|
'id': '{' + NS_OWNCLOUD + '}id',
|
|
'message': '{' + NS_OWNCLOUD + '}message',
|
|
'actorType': '{' + NS_OWNCLOUD + '}actorType',
|
|
'actorId': '{' + NS_OWNCLOUD + '}actorId',
|
|
'actorDisplayName': '{' + NS_OWNCLOUD + '}actorDisplayName',
|
|
'creationDateTime': '{' + NS_OWNCLOUD + '}creationDateTime',
|
|
'objectType': '{' + NS_OWNCLOUD + '}objectType',
|
|
'objectId': '{' + NS_OWNCLOUD + '}objectId',
|
|
'isUnread': '{' + NS_OWNCLOUD + '}isUnread',
|
|
'mentions': '{' + NS_OWNCLOUD + '}mentions'
|
|
},
|
|
|
|
parse: function(data) {
|
|
return {
|
|
id: data.id,
|
|
message: data.message,
|
|
actorType: data.actorType,
|
|
actorId: data.actorId,
|
|
actorDisplayName: data.actorDisplayName,
|
|
creationDateTime: data.creationDateTime,
|
|
objectType: data.objectType,
|
|
objectId: data.objectId,
|
|
isUnread: (data.isUnread === 'true'),
|
|
mentions: this._parseMentions(data.mentions)
|
|
};
|
|
},
|
|
|
|
_parseMentions: function(mentions) {
|
|
if(_.isUndefined(mentions)) {
|
|
return {};
|
|
}
|
|
var result = {};
|
|
for(var i in mentions) {
|
|
var mention = mentions[i];
|
|
if(_.isUndefined(mention.localName) || mention.localName !== 'mention') {
|
|
continue;
|
|
}
|
|
result[i] = {};
|
|
for (var child = mention.firstChild; child; child = child.nextSibling) {
|
|
if(_.isUndefined(child.localName) || !child.localName.startsWith('mention')) {
|
|
continue;
|
|
}
|
|
result[i][child.localName] = child.textContent;
|
|
}
|
|
}
|
|
return result;
|
|
},
|
|
|
|
url: function() {
|
|
let baseUrl;
|
|
if (typeof this.collection === 'undefined') {
|
|
baseUrl = OC.linkToRemote('dav') + '/comments/' +
|
|
encodeURIComponent(this.get('objectType')) + '/' +
|
|
encodeURIComponent(this.get('objectId')) + '/';
|
|
} else {
|
|
baseUrl = this.collection.url();
|
|
}
|
|
if (typeof this.get('id') !== 'undefined') {
|
|
return baseUrl + this.get('id');
|
|
} else {
|
|
return baseUrl;
|
|
}
|
|
}
|
|
});
|
|
|
|
export default CommentModel;
|
|
|