Files
edx-platform/common/static/js/vendor/ova/reply-annotator.js

111 lines
3.8 KiB
JavaScript

/*
Reply Annotator Plugin v1.0 (https://github.com/danielcebrian/reply-annotator)
Copyright (C) 2014 Daniel Cebrian Robles
License: https://github.com/danielcebrian/reply-annotator/blob/master/License.rst
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
// Generated by CoffeeScript 1.6.3
var _ref,
__bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
__hasProp = {}.hasOwnProperty,
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
Annotator.Plugin.Reply = (function(_super) {
__extends(Reply, _super);
function Reply() {
this.pluginSubmit = __bind(this.pluginSubmit, this);
this.updateField = __bind(this.updateField, this);
_ref = Reply.__super__.constructor.apply(this, arguments);
return _ref;
}
Reply.prototype.field = null;
Reply.prototype.input = null;
Reply.prototype.pluginInit = function() {
console.log("Reply-pluginInit");
//Check that annotator is working
if (!Annotator.supported()) {
return;
}
//-- Editor
this.field = this.annotator.editor.addField({
type: 'input', //options (textarea,input,select,checkbox)
load: this.updateField,
submit: this.pluginSubmit,
});
var newfield = Annotator.$('<li class="annotator-item reply-item" style="display:none"><span class="parent-annotation">0</span></li>');//reply-item is the parent value
Annotator.$(this.field).replaceWith(newfield);
this.field=newfield[0];
//-- Viewer
var newview = this.annotator.viewer.addField({
load: this.updateViewer,
});
return this.input = $(this.field).find(':input');
};
// New JSON for the database
Reply.prototype.pluginSubmit = function(field, annotation) {
// since each annotation has their own reply item, this "find" is element specific
var replyItem = $(this.annotator.editor.element).find(".reply-item span.parent-annotation");
// checks to see if the current annotation is a reply by checking parent numbers
var parent = replyItem.html() !== '' ? replyItem.html() : '0';
// if the parent number is not empty or zero, we know that this is a comment
if (parent !== '0') {
annotation.media = 'comment';
}
// apparently some browsers continue adding <font> tags here for nonreplies
// this will check and set to 0 (nonreply) if it fails
if (parseInt(parent, 10) === NaN){
parent = '0';
}
// set 0, because it is not a reply
annotation.parent = parent;
return annotation.parent;
};
Reply.prototype.updateViewer = function(field, annotation) {
var self = this,
field = $(field),
ret = field.addClass('reply-viewer-annotator').html(function() {
var string;
return self;
});
field.remove();
this.annotation = annotation;
//Create the actions for the buttons
return ret;
};
Reply.prototype.updateField = function(field, annotation) {
//reset parent value
var replyItem = $(this.annotator.editor.element).find(".reply-item span.parent-annotation");
return replyItem.html('0');
};
return Reply;
})(Annotator.Plugin);