@ -93,6 +93,9 @@ AnnotationElementFactory.prototype =
@@ -93,6 +93,9 @@ AnnotationElementFactory.prototype =
case AnnotationType . POPUP :
return new PopupAnnotationElement ( parameters ) ;
case AnnotationType . LINE :
return new LineAnnotationElement ( parameters ) ;
case AnnotationType . HIGHLIGHT :
return new HighlightAnnotationElement ( parameters ) ;
@ -681,6 +684,10 @@ var ChoiceWidgetAnnotationElement = (
@@ -681,6 +684,10 @@ var ChoiceWidgetAnnotationElement = (
* @ alias PopupAnnotationElement
* /
var PopupAnnotationElement = ( function PopupAnnotationElementClosure ( ) {
// Do not render popup annotations for parent elements with these types as
// they create the popups themselves (because of custom trigger divs).
var IGNORE _TYPES = [ 'Line' ] ;
function PopupAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable ) ;
@ -697,6 +704,10 @@ var PopupAnnotationElement = (function PopupAnnotationElementClosure() {
@@ -697,6 +704,10 @@ var PopupAnnotationElement = (function PopupAnnotationElementClosure() {
render : function PopupAnnotationElement _render ( ) {
this . container . className = 'popupAnnotation' ;
if ( IGNORE _TYPES . indexOf ( this . data . parentType ) >= 0 ) {
return this . container ;
}
var selector = '[data-annotation-id="' + this . data . parentId + '"]' ;
var parentElement = this . layer . querySelector ( selector ) ;
if ( ! parentElement ) {
@ -866,6 +877,69 @@ var PopupElement = (function PopupElementClosure() {
@@ -866,6 +877,69 @@ var PopupElement = (function PopupElementClosure() {
return PopupElement ;
} ) ( ) ;
/ * *
* @ class
* @ alias LineAnnotationElement
* /
var LineAnnotationElement = ( function LineAnnotationElementClosure ( ) {
var SVG _NS = 'http://www.w3.org/2000/svg' ;
function LineAnnotationElement ( parameters ) {
var isRenderable = ! ! ( parameters . data . hasPopup ||
parameters . data . title || parameters . data . contents ) ;
AnnotationElement . call ( this , parameters , isRenderable ,
/* ignoreBorder = */ true ) ;
}
Util . inherit ( LineAnnotationElement , AnnotationElement , {
/ * *
* Render the line annotation ' s HTML element in the empty container .
*
* @ public
* @ memberof LineAnnotationElement
* @ returns { HTMLSectionElement }
* /
render : function LineAnnotationElement _render ( ) {
this . container . className = 'lineAnnotation' ;
// Create an invisible line with the same starting and ending coordinates
// that acts as the trigger for the popup. Only the line itself should
// trigger the popup, not the entire container.
var data = this . data ;
var width = data . rect [ 2 ] - data . rect [ 0 ] ;
var height = data . rect [ 3 ] - data . rect [ 1 ] ;
var svg = document . createElementNS ( SVG _NS , 'svg:svg' ) ;
svg . setAttributeNS ( null , 'version' , '1.1' ) ;
svg . setAttributeNS ( null , 'width' , width + 'px' ) ;
svg . setAttributeNS ( null , 'height' , height + 'px' ) ;
svg . setAttributeNS ( null , 'preserveAspectRatio' , 'none' ) ;
svg . setAttributeNS ( null , 'viewBox' , '0 0 ' + width + ' ' + height ) ;
// PDF coordinates are calculated from a bottom left origin, so transform
// the line coordinates to a top left origin for the SVG element.
var line = document . createElementNS ( SVG _NS , 'svg:line' ) ;
line . setAttributeNS ( null , 'x1' , data . rect [ 2 ] - data . lineCoordinates [ 0 ] ) ;
line . setAttributeNS ( null , 'y1' , data . rect [ 3 ] - data . lineCoordinates [ 1 ] ) ;
line . setAttributeNS ( null , 'x2' , data . rect [ 2 ] - data . lineCoordinates [ 2 ] ) ;
line . setAttributeNS ( null , 'y2' , data . rect [ 3 ] - data . lineCoordinates [ 3 ] ) ;
line . setAttributeNS ( null , 'stroke-width' , data . borderStyle . width ) ;
line . setAttributeNS ( null , 'stroke' , 'transparent' ) ;
svg . appendChild ( line ) ;
this . container . append ( svg ) ;
// Create the popup ourselves so that we can bind it to the line instead
// of to the entire container (which is the default).
this . _createPopup ( this . container , line , this . data ) ;
return this . container ;
}
} ) ;
return LineAnnotationElement ;
} ) ( ) ;
/ * *
* @ class
* @ alias HighlightAnnotationElement