mirror of
https://github.com/futurepress/epub.js.git
synced 2025-10-03 14:59:18 +02:00
259 lines
7.8 KiB
JavaScript
259 lines
7.8 KiB
JavaScript
// 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.Document = (function(_super) {
|
|
var $;
|
|
|
|
__extends(Document, _super);
|
|
|
|
function Document() {
|
|
this._getFavicon = __bind(this._getFavicon, this);
|
|
this._getLinks = __bind(this._getLinks, this);
|
|
this._getTitle = __bind(this._getTitle, this);
|
|
this._getMetaTags = __bind(this._getMetaTags, this);
|
|
this._getEprints = __bind(this._getEprints, this);
|
|
this._getPrism = __bind(this._getPrism, this);
|
|
this._getDublinCore = __bind(this._getDublinCore, this);
|
|
this._getTwitter = __bind(this._getTwitter, this);
|
|
this._getFacebook = __bind(this._getFacebook, this);
|
|
this._getHighwire = __bind(this._getHighwire, this);
|
|
this.getDocumentMetadata = __bind(this.getDocumentMetadata, this);
|
|
this.beforeAnnotationCreated = __bind(this.beforeAnnotationCreated, this);
|
|
this.uris = __bind(this.uris, this);
|
|
this.uri = __bind(this.uri, this);
|
|
_ref = Document.__super__.constructor.apply(this, arguments);
|
|
return _ref;
|
|
}
|
|
|
|
$ = Annotator.$;
|
|
|
|
Document.prototype.events = {
|
|
'beforeAnnotationCreated': 'beforeAnnotationCreated'
|
|
};
|
|
|
|
Document.prototype.pluginInit = function() {
|
|
return this.getDocumentMetadata();
|
|
};
|
|
|
|
Document.prototype.uri = function() {
|
|
var link, uri, _i, _len, _ref1;
|
|
uri = decodeURIComponent(document.location.href);
|
|
_ref1 = this.metadata;
|
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|
link = _ref1[_i];
|
|
if (link.rel === "canonical") {
|
|
uri = link.href;
|
|
}
|
|
}
|
|
return uri;
|
|
};
|
|
|
|
Document.prototype.uris = function() {
|
|
var href, link, uniqueUrls, _i, _len, _ref1;
|
|
uniqueUrls = {};
|
|
_ref1 = this.metadata.link;
|
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|
link = _ref1[_i];
|
|
if (link.href) {
|
|
uniqueUrls[link.href] = true;
|
|
}
|
|
}
|
|
return (function() {
|
|
var _results;
|
|
_results = [];
|
|
for (href in uniqueUrls) {
|
|
_results.push(href);
|
|
}
|
|
return _results;
|
|
})();
|
|
};
|
|
|
|
Document.prototype.beforeAnnotationCreated = function(annotation) {
|
|
return annotation.document = this.metadata;
|
|
};
|
|
|
|
Document.prototype.getDocumentMetadata = function() {
|
|
this.metadata = {};
|
|
this._getHighwire();
|
|
this._getDublinCore();
|
|
this._getFacebook();
|
|
this._getEprints();
|
|
this._getPrism();
|
|
this._getTwitter();
|
|
this._getFavicon();
|
|
this._getTitle();
|
|
this._getLinks();
|
|
return this.metadata;
|
|
};
|
|
|
|
Document.prototype._getHighwire = function() {
|
|
return this.metadata.highwire = this._getMetaTags("citation", "name", "_");
|
|
};
|
|
|
|
Document.prototype._getFacebook = function() {
|
|
return this.metadata.facebook = this._getMetaTags("og", "property", ":");
|
|
};
|
|
|
|
Document.prototype._getTwitter = function() {
|
|
return this.metadata.twitter = this._getMetaTags("twitter", "name", ":");
|
|
};
|
|
|
|
Document.prototype._getDublinCore = function() {
|
|
return this.metadata.dc = this._getMetaTags("dc", "name", ".");
|
|
};
|
|
|
|
Document.prototype._getPrism = function() {
|
|
return this.metadata.prism = this._getMetaTags("prism", "name", ".");
|
|
};
|
|
|
|
Document.prototype._getEprints = function() {
|
|
return this.metadata.eprints = this._getMetaTags("eprints", "name", ".");
|
|
};
|
|
|
|
Document.prototype._getMetaTags = function(prefix, attribute, delimiter) {
|
|
var content, match, meta, n, name, tags, _i, _len, _ref1;
|
|
tags = {};
|
|
_ref1 = $("meta");
|
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|
meta = _ref1[_i];
|
|
name = $(meta).attr(attribute);
|
|
content = $(meta).prop("content");
|
|
if (name) {
|
|
match = name.match(RegExp("^" + prefix + delimiter + "(.+)$", "i"));
|
|
if (match) {
|
|
n = match[1];
|
|
if (tags[n]) {
|
|
tags[n].push(content);
|
|
} else {
|
|
tags[n] = [content];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return tags;
|
|
};
|
|
|
|
Document.prototype._getTitle = function() {
|
|
if (this.metadata.highwire.title) {
|
|
return this.metadata.title = this.metadata.highwire.title[0];
|
|
} else if (this.metadata.eprints.title) {
|
|
return this.metadata.title = this.metadata.eprints.title;
|
|
} else if (this.metadata.prism.title) {
|
|
return this.metadata.title = this.metadata.prism.title;
|
|
} else if (this.metadata.facebook.title) {
|
|
return this.metadata.title = this.metadata.facebook.title;
|
|
} else if (this.metadata.twitter.title) {
|
|
return this.metadata.title = this.metadata.twitter.title;
|
|
} else if (this.metadata.dc.title) {
|
|
return this.metadata.title = this.metadata.dc.title;
|
|
} else {
|
|
return this.metadata.title = $("head title").text();
|
|
}
|
|
};
|
|
|
|
Document.prototype._getLinks = function() {
|
|
var doi, href, id, l, link, name, rel, type, url, values, _i, _j, _k, _len, _len1, _len2, _ref1, _ref2, _ref3, _results;
|
|
this.metadata.link = [
|
|
{
|
|
href: document.location.href
|
|
}
|
|
];
|
|
_ref1 = $("link");
|
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|
link = _ref1[_i];
|
|
l = $(link);
|
|
href = this._absoluteUrl(l.prop('href'));
|
|
rel = l.prop('rel');
|
|
type = l.prop('type');
|
|
if ((rel === "alternate" || rel === "canonical" || rel === "bookmark") && (type !== "application/rss+xml" && type !== "application/atom+xml")) {
|
|
this.metadata.link.push({
|
|
href: href,
|
|
rel: rel,
|
|
type: type
|
|
});
|
|
}
|
|
}
|
|
_ref2 = this.metadata.highwire;
|
|
for (name in _ref2) {
|
|
values = _ref2[name];
|
|
if (name === "pdf_url") {
|
|
for (_j = 0, _len1 = values.length; _j < _len1; _j++) {
|
|
url = values[_j];
|
|
this.metadata.link.push({
|
|
href: this._absoluteUrl(url),
|
|
type: "application/pdf"
|
|
});
|
|
}
|
|
}
|
|
if (name === "doi") {
|
|
for (_k = 0, _len2 = values.length; _k < _len2; _k++) {
|
|
doi = values[_k];
|
|
if (doi.slice(0, 4) !== "doi:") {
|
|
doi = "doi:" + doi;
|
|
}
|
|
this.metadata.link.push({
|
|
href: doi
|
|
});
|
|
}
|
|
}
|
|
}
|
|
_ref3 = this.metadata.dc;
|
|
_results = [];
|
|
for (name in _ref3) {
|
|
values = _ref3[name];
|
|
if (name === "identifier") {
|
|
_results.push((function() {
|
|
var _l, _len3, _results1;
|
|
_results1 = [];
|
|
for (_l = 0, _len3 = values.length; _l < _len3; _l++) {
|
|
id = values[_l];
|
|
if (id.slice(0, 4) === "doi:") {
|
|
_results1.push(this.metadata.link.push({
|
|
href: id
|
|
}));
|
|
} else {
|
|
_results1.push(void 0);
|
|
}
|
|
}
|
|
return _results1;
|
|
}).call(this));
|
|
} else {
|
|
_results.push(void 0);
|
|
}
|
|
}
|
|
return _results;
|
|
};
|
|
|
|
Document.prototype._getFavicon = function() {
|
|
var link, _i, _len, _ref1, _ref2, _results;
|
|
_ref1 = $("link");
|
|
_results = [];
|
|
for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
|
|
link = _ref1[_i];
|
|
if ((_ref2 = $(link).prop("rel")) === "shortcut icon" || _ref2 === "icon") {
|
|
_results.push(this.metadata["favicon"] = this._absoluteUrl(link.href));
|
|
} else {
|
|
_results.push(void 0);
|
|
}
|
|
}
|
|
return _results;
|
|
};
|
|
|
|
Document.prototype._absoluteUrl = function(url) {
|
|
var img;
|
|
img = $("<img src='" + url + "'>");
|
|
url = img.prop('src');
|
|
img.prop('src', null);
|
|
return url;
|
|
};
|
|
|
|
return Document;
|
|
|
|
})(Annotator.Plugin);
|
|
|
|
/*
|
|
//@ sourceMappingURL=document.map
|
|
*/
|