mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-04 15:09:16 +02:00
187 lines
5.7 KiB
JavaScript
187 lines
5.7 KiB
JavaScript
// Generated by CoffeeScript 1.6.3
|
|
var LinkParser,
|
|
__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.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: "<div class=\"annotator-outer annotator-viewer\">\n <ul class=\"annotator-widget annotator-listing\"></ul>\n</div>",
|
|
item: "<li class=\"annotator-annotation annotator-item\">\n <span class=\"annotator-controls\">\n <a href=\"#\" title=\"View as webpage\" class=\"annotator-link\">View as webpage</a>\n <button title=\"Edit\" class=\"annotator-edit\">Edit</button>\n <button title=\"Delete\" class=\"annotator-delete\">Delete</button>\n </span>\n</li>"
|
|
};
|
|
|
|
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;
|
|
Annotator.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) {
|
|
Annotator.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, _len1, _ref, _ref1;
|
|
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');
|
|
}
|
|
};
|
|
}
|
|
_ref1 = this.fields;
|
|
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
|
|
field = _ref1[_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 = $('<div />')[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;
|
|
|
|
})();
|
|
|
|
/*
|
|
//@ sourceMappingURL=viewer.map
|
|
*/
|