var LinkParser, __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, __hasProp = Object.prototype.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.Viewer = (function(_super) { __extends(Viewer, _super); Viewer.prototype.events = { ".annotator-edit click": "onEditClick", ".annotator-delete click": "onDeleteClick" }; Viewer.prototype.classes = { hide: 'annotator-hide', showControls: 'annotator-visible' }; Viewer.prototype.html = { element: "
\n \n
", item: "
  • \n \n View as webpage\n \n \n \n
  • " }; Viewer.prototype.options = { readOnly: false }; function Viewer(options) { this.onDeleteClick = __bind(this.onDeleteClick, this); this.onEditClick = __bind(this.onEditClick, this); this.load = __bind(this.load, this); this.hide = __bind(this.hide, this); this.show = __bind(this.show, this); Viewer.__super__.constructor.call(this, $(this.html.element)[0], options); this.item = $(this.html.item)[0]; this.fields = []; this.annotations = []; } Viewer.prototype.show = function(event) { var controls, _this = this; util.preventEventDefault(event); controls = this.element.find('.annotator-controls').addClass(this.classes.showControls); setTimeout((function() { return controls.removeClass(_this.classes.showControls); }), 500); this.element.removeClass(this.classes.hide); return this.checkOrientation().publish('show'); }; Viewer.prototype.isShown = function() { return !this.element.hasClass(this.classes.hide); }; Viewer.prototype.hide = function(event) { util.preventEventDefault(event); this.element.addClass(this.classes.hide); return this.publish('hide'); }; Viewer.prototype.load = function(annotations) { var annotation, controller, controls, del, edit, element, field, item, link, links, list, _i, _j, _len, _len2, _ref, _ref2; this.annotations = annotations || []; list = this.element.find('ul:first').empty(); _ref = this.annotations; for (_i = 0, _len = _ref.length; _i < _len; _i++) { annotation = _ref[_i]; item = $(this.item).clone().appendTo(list).data('annotation', annotation); controls = item.find('.annotator-controls'); link = controls.find('.annotator-link'); edit = controls.find('.annotator-edit'); del = controls.find('.annotator-delete'); links = new LinkParser(annotation.links || []).get('alternate', { 'type': 'text/html' }); if (links.length === 0 || !(links[0].href != null)) { link.remove(); } else { link.attr('href', links[0].href); } if (this.options.readOnly) { edit.remove(); del.remove(); } else { controller = { showEdit: function() { return edit.removeAttr('disabled'); }, hideEdit: function() { return edit.attr('disabled', 'disabled'); }, showDelete: function() { return del.removeAttr('disabled'); }, hideDelete: function() { return del.attr('disabled', 'disabled'); } }; } _ref2 = this.fields; for (_j = 0, _len2 = _ref2.length; _j < _len2; _j++) { field = _ref2[_j]; element = $(field.element).clone().appendTo(item)[0]; field.load(element, annotation, controller); } } this.publish('load', [this.annotations]); return this.show(); }; Viewer.prototype.addField = function(options) { var field; field = $.extend({ load: function() {} }, options); field.element = $('
    ')[0]; this.fields.push(field); field.element; return this; }; Viewer.prototype.onEditClick = function(event) { return this.onButtonClick(event, 'edit'); }; Viewer.prototype.onDeleteClick = function(event) { return this.onButtonClick(event, 'delete'); }; Viewer.prototype.onButtonClick = function(event, type) { var item; item = $(event.target).parents('.annotator-annotation'); return this.publish(type, [item.data('annotation')]); }; return Viewer; })(Annotator.Widget); LinkParser = (function() { function LinkParser(data) { this.data = data; } LinkParser.prototype.get = function(rel, cond) { var d, k, keys, match, v, _i, _len, _ref, _results; if (cond == null) cond = {}; cond = $.extend({}, cond, { rel: rel }); keys = (function() { var _results; _results = []; for (k in cond) { if (!__hasProp.call(cond, k)) continue; v = cond[k]; _results.push(k); } return _results; })(); _ref = this.data; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { d = _ref[_i]; match = keys.reduce((function(m, k) { return m && (d[k] === cond[k]); }), true); if (match) { _results.push(d); } else { continue; } } return _results; }; return LinkParser; })();