mirador
Version:
An open-source, web-based 'multi-up' viewer that supports zoom-pan-rotate functionality, ability to display/compare simple images, and images with annotations.
189 lines (153 loc) • 4.5 kB
JavaScript
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
import compact from 'lodash/compact';
import flatten from 'lodash/flatten';
import { v4 as uuid } from 'uuid';
/**
* A modeled WebAnnotation item
*/
var AnnotationItem = /*#__PURE__*/function () {
/** */
function AnnotationItem() {
var resource = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
_classCallCheck(this, AnnotationItem);
this.resource = resource;
}
/** */
_createClass(AnnotationItem, [{
key: "isOnlyTag",
value: function isOnlyTag() {
return this.motivations.length === 1 && this.motivations[0] === 'tagging';
}
/** */
}, {
key: "id",
get: function get() {
this._id = this._id || this.resource.id || uuid(); // eslint-disable-line no-underscore-dangle
return this._id; // eslint-disable-line no-underscore-dangle
}
/** */
}, {
key: "targetId",
get: function get() {
var target = this.target[0];
switch (typeof target) {
case 'string':
return target.replace(/#?xywh=(.*)$/, '');
case 'object':
return target.source && target.source.id || target.source || target.id;
default:
return null;
}
}
/**
* @return {[Array]}
*/
}, {
key: "motivations",
get: function get() {
return flatten(compact(new Array(this.resource.motivation)));
}
/** */
}, {
key: "body",
get: function get() {
return flatten(compact(new Array(this.resource.body)));
}
/** */
}, {
key: "resources",
get: function get() {
return this.body;
}
/** */
}, {
key: "tags",
get: function get() {
if (this.isOnlyTag()) {
return this.body.map(function (r) {
return r.value;
});
}
return this.body.filter(function (r) {
return r.purpose === 'tagging';
}).map(function (r) {
return r.value;
});
}
/** */
}, {
key: "target",
get: function get() {
return flatten(compact(new Array(this.resource.target)));
}
/** */
}, {
key: "chars",
get: function get() {
if (this.isOnlyTag()) return null;
return this.body.filter(function (r) {
return r.purpose !== 'tagging';
}).map(function (r) {
return r.value;
}).join(' ');
}
/** */
}, {
key: "selector",
get: function get() {
var target = this.target[0];
switch (typeof target) {
case 'string':
return target;
case 'object':
return flatten(compact(new Array(target.selector)));
default:
return null;
}
}
/** */
}, {
key: "svgSelector",
get: function get() {
var selector = this.selector;
switch (typeof selector) {
case 'string':
return null;
case 'object':
return selector.find(function (s) {
return s.type && s.type === 'SvgSelector';
});
default:
return null;
}
}
/** */
}, {
key: "fragmentSelector",
get: function get() {
var selector = this.selector;
var match;
var fragmentSelector;
switch (typeof selector) {
case 'string':
match = selector.match(/xywh=(.*)$/);
break;
case 'object':
fragmentSelector = selector.find(function (s) {
return s.type && s.type === 'FragmentSelector';
});
match = fragmentSelector && fragmentSelector.value.match(/xywh=(.*)$/);
break;
default:
return null;
}
return match && match[1].split(',').map(function (str) {
return parseInt(str, 10);
});
}
}]);
return AnnotationItem;
}();
export { AnnotationItem as default };