{"version":3,"sources":["modules/home.js","modules/search.js","modules/annotationViewer.js","modules/textEditor.js","modules/folders.js","modules/documentGrid.js","modules/canvasEditor.js","modules/fetch.js","modules/constants.js","modules/project.js","modules/index.js","store.js","modules/redux-token-auth-config.js","LoginRegistrationDialog.js","AdminDialog.js","SearchBar.js","Navigation.js","Home.js","ProjectSettingsDialog.js","AddDocumentButton.js","LinkableSummary.js","DocumentFolder.js","modules/iiif.js","ListDropTarget.js","LinkableList.js","TableOfContents.js","icons/PageMargins.js","TextStyleMarkSpec.js","TextSchema.js","TextCommands.js","TextTableCommands.js","HighlightColorSelect.js","ProseMirrorEditorView.js","TextLinkTooltipPlugin.js","TextImageTooltipPlugin.js","TextResource.js","icons/RemoveFromPhotos.js","AddImageLayer.js","CanvasResource.js","DocumentStatusBar.js","DocumentViewer.js","DraggableLinkIcon.js","LinkInspector.js","LinkInspectorPopup.js","LinkInspectorPopupLayer.js","SearchResultsPopup.js","SearchResultsPopupLayer.js","BatchImagePrompt.js","Project.js","App.js","registerServiceWorker.js","index.js"],"names":["LOADING","ERRORED","FETCH_SUCCESS","LOGIN_SHOWN","LOGIN_HIDDEN","REGISTRATION_SHOWN","REGISTRATION_HIDDEN","APPROVAL_PENDING_SHOWN","APPROVAL_PENDING_HIDDEN","USER_EMAIL_CHANGED","USER_NAME_CHANGED","USER_PASSWORD_CHANGED","USER_PASSWORD_CONFIRMATION_CHANGED","USER_AUTH_ERRORED","AUTH_MENU_TOGGLED","AUTH_MENU_HIDDEN","ADMIN_DIALOG_SHOWN","ADMIN_DIALOG_HIDDEN","USER_ADMIN_LIST_LOADING","USER_ADMIN_LIST_ERRORED","USER_ADMIN_LIST_SUCCESS","UPDATE_USER_LOADING","UPDATE_USER_ERRORED","UPDATE_USER_SUCCESS","DELETE_USER_LOADING","DELETE_USER_ERRORED","DELETE_USER_SUCCESS","CONFIRM_USER_SUCCESS","CONFIRM_USER_ERRORED","CONFIRM_USER_SUCCESS_DIALOG_CLOSED","RESEND_CONFIRMATION_STARTED","RESEND_CONFIRMATION_SUCCESS","RESEND_CONFIRMATION_ERRORED","initialState","projects","loading","errored","loginShown","registrationShown","approvalPendingShown","userEmail","userName","userPassword","userPasswordConfirmation","userAuthError","authMenuShown","authMenuAnchor","adminDialogShown","userAdminList","userAdminListLoading","userAdminListErrored","confirmUserSuccessDialogShown","confirmUserErrored","confirmUserErroredDialogShown","confirmationEmailResent","confirmationEmailErrored","confirmationResendButtonDisabled","confirmationEmailErrorMsg","load","dispatch","type","fetch","headers","localStorage","getItem","then","response","ok","Error","statusText","json","field","sort","a","b","nameA","toUpperCase","nameB","catch","showLogin","hideLogin","showRegistration","hideRegistration","showApprovalPending","hideApprovalPending","userEmailChanged","event","value","target","userNameChanged","userPasswordChanged","userPasswordConfirmationChanged","userAuthErrored","error","toggleAuthMenu","anchor","hideAuthMenu","showAdminDialog","users","hideAdminDialog","updateUser","userId","attributes","method","body","JSON","stringify","deleteUser","confirmUser","token","res","account_confirmation_success","resendConfirmationEmail","getState","email","home","errors","length","err","closeConfirmDialog","START_SEARCH","SEARCH_SUCCESS","SEARCH_ERRORED","UPDATE_SEARCH_PHRASE_BUFFER","CLOSE_SEARCH_POPUP","searchPhrase","searchPhraseBuffer","searchResults","popupOpen","startSearch","projectID","encodeURI","closeSearchPopup","updateSearchPhraseBuffer","SELECT_TARGET","SELECT_LOAD_SUCCESS","SELECT_SIDEBAR_TARGET","SELECT_SIDEBAR_LOAD_SUCCESS","SELECT_LOAD_ERRORED","REFRESH_TARGET","REFRESH_SUCCESS","REFRESH_ERRORED","CLOSE_TARGET","CLOSE_TARGET_ROLLOVER","CLOSE_SIDEBAR_TARGET","CLOSE_DOCUMENT_TARGETS","PROMOTE_TARGET","CLEAR_SELECTION","DELETE_LINK_SUCCESS","ADD_LINK_SUCCESS","MOVE_LINK","MOVE_LINK_SUCCESS","MOVE_LINK_ERRORED","selectedTargets","sidebarTarget","sidebarLoading","addedLink","selectTarget","document_id","highlight_id","targetUrl","loadedTarget","refreshTargetByDocumentID","annotationViewer","forEach","targetIndex","links_to","find","link","refreshTarget","index","existingTarget","selectSidebarTarget","closeTargetRollover","highlight_uid","closeTarget","closeDocumentTargets","promoteTarget","clearSelection","addLink","origin","linked","newLinkPosition","listType","linkable_a_id","linkable_id","linkable_a_type","linkable_type","linkable_b_id","linkable_b_type","newLink","payload","id","linkable_a","linkable_b","position","deleteLink","doomedLinkID","link_id","moveLink","linkId","targetId","targetParentType","UPDATE_EDITOR_STATE","CLOSE_EDITOR","SET_HIGHLIGHT_COLOR","HIDE_COLOR_PICKER","TOGGLE_COLOR_PICKER","SET_HIGHLIGHT_SELECT_MODE","SELECT_HIGHLIGHT","TOGGLE_HIGHLIGHTS","editorStates","highlightColors","displayColorPickers","highlightSelectModes","selectedHighlights","highlightsHidden","updateEditorState","editorKey","editorState","closeEditor","setTextHighlightColor","highlightColor","toggleTextColorPicker","setHighlightSelectMode","highlightKey","window","setTimeout","textEditor","selectHighlight","toggleTextHighlights","NEW_FOLDER","POST_SUCCESS","POST_ERRORED","FOLDER_OPENED","OPEN_SUCCESS","OPEN_ERRORED","FOLDER_CLOSED","UPDATE_FOLDER","PATCH_SUCCESS","PATCH_ERRORED","DELETE_FOLDER","DELETE_SUCCESS","DELETE_ERRORED","MOVE_FOLDER_SUCCESS","MOVE_FOLDER_ERRORED","ADD_TREE","ADD_TREE_SUCCESS","ADD_TREE_ERRORED","openFolderContents","createFolder","parentId","parentType","title","project_id","project","parent_id","parent_type","loadProject","openFolder","folder","contentsChildren","contents_children","closeFolder","moveFolder","folderID","destination_id","destinationParentType","document_folder","updateFolder","deleteFolder","folderId","descendants","folders","documentGrid","openDocuments","document","closeDocument","timeOpened","addTree","tree","SET_ADD_TILE_SOURCE_MODE","SET_IS_PENCIL_MODE","SET_GLOBAL_CANVAS_DISPLAY","SET_IMAGE_URL","IIIF_TILE_SOURCE_TYPE","IMAGE_URL_SOURCE_TYPE","UPLOAD_SOURCE_TYPE","PAGE_TO_CHANGE","RENAME_LAYER_SUCCESS","TOGGLE_EDIT_LAYER_NAME","addTileSourceMode","imageURLs","isPencilMode","globalCanvasDisplay","pageToChange","editingLayerName","setCanvasHighlightColor","toggleCanvasColorPicker","setAddTileSourceMode","mode","setImageUrl","url","setIsPencilMode","toggleCanvasHighlights","setGlobalCanvasDisplay","changePage","page","toggleEditLayerName","fetchWithTimeout","resource","options","retryDelay","timeout","controller","AbortController","abort","signal","clearTimeout","defaultRequestTimeout","TEXT_HIGHLIGHT_DELETE","CANVAS_HIGHLIGHT_DELETE","DOCUMENT_DELETE","FOLDER_DELETE","OPEN_DOCUMENT","OPEN_DOCUMENT_SUCCESS","OPEN_DOCUMENT_ERRORED","CLOSE_DOCUMENT","REPLACE_DOCUMENT","CLEAR_RESOURCES","ADD_HIGHLIGHT","ADD_HIGHLIGHT_SUCCESS","ADD_HIGHLIGHT_ERRORED","DELETE_HIGHLIGHT_ERRORED","DELETE_HIGHLIGHT_SUCCESS","UPDATE_HIGHLIGHT","UPDATE_HIGHLIGHT_ERRORED","UPDATE_HIGHLIGHT_SUCCESS","DUPLICATE_HIGHLIGHTS","DUPLICATE_HIGHLIGHTS_SUCCESS","DUPLICATE_HIGHLIGHTS_ERRORED","MOVE_DOCUMENT","MOVE_DOCUMENT_SUCCESS","MOVE_DOCUMENT_ERRORED","UPDATE_DOCUMENT","CHECK_IN_DOCS","UPDATE_SNACK_BAR","NEW_DOCUMENT","DELETE_DOCUMENT","OPEN_DELETE_DIALOG","CLOSE_DELETE_DIALOG","SET_CURRENT_LAYOUT","MOVE_DOCUMENT_WINDOW","CANVAS_LAYER_DELETE","REFRESH_DOCUMENTS","GET_CURRENT_DOC_CONTENT","GET_CURRENT_DOC_CONTENT_ERRORED","FETCH_LOCK_SUCCESS","FETCH_LOCK_ERRORED","FROM_IMAGE_SUCCESS","layoutOptions","rows","cols","description","MAX_EXCERPT_LENGTH","layout","highlightsLoading","deleteDialogOpen","deleteDialogTitle","deleteDialogBody","deleteDialogSubmit","deleteDialogPayload","deleteDialogKind","snackBarOpen","snackBarMessage","currentLayout","openDocument","documentId","firstTarget","inContents","pos","documentPosition","closeAllResources","addHighlight","highlightTarget","color","excerpt","callback","uid","savedHighlight","deleteHighlights","highlights","highlight","reduce","matched","updateHighlight","shouldStartLoading","Object","prototype","hasOwnProperty","call","duplicateHighlights","newHighlights","createTextDocument","Array","isArray","document_title","document_kind","TEXT_RESOURCE_TYPE","content","createTextDocumentWithLink","moveDocument","updateDocument","adjustLock","shouldSkipReplacement","refreshDocumentContent","locked","instanceKey","replaceThisDocument","refreshLists","map","child","includes","refreshDocuments","setDocumentThumbnail","image_url","status","setHighlightThumbnail","highlightId","coords","svg_string","createCanvasDocument","CANVAS_RESOURCE_TYPE","tileSources","replaceDocument","openDeleteDialog","submit","kind","closeDeleteDialog","confirmDeleteDialog","transaction","newState","apply","doc","highlightsToDuplicate","alteredHighlights","canvas","fabricObjects","object","remove","layer","firstTileSource","imageUrlForThumbnail","replace","deleteLayer","setCurrentLayout","moveDocumentWindow","dragIndex","moveIndex","updateSnackBar","moveLayer","direction","renameLayer","name","fetchLock","locked_by_me","locked_by_user_name","createCanvasDocWithImage","signedId","filename","images","queuedJob","IMAGE_UPLOAD_DOC_CREATED","errMsg","message","IMAGE_UPLOAD_ERRORED","createFolderForBatch","projectId","newFolderName","createMultipleCanvasDocs","signedIds","Promise","allSettled","retryFetch","retries","image","blob","substring","lastIndexOf","IMAGE_UPLOAD_TO_RAILS_SUCCESS","resolve","reject","jobsQueue","jobs","filter","jobPromise","job","signed_id","retryOn","attempt","finishedStatuses","IMAGE_UPLOAD_COMPLETE","IMAGE_UPLOAD_TIMEOUT","unfinished","some","console","createBatchImages","inFolder","existingFolder","IMAGE_UPLOAD_STARTED","parseInt","LOAD_PROJECT","GET_SUCCESS","GET_ERRORED","CLEAR_PROJECT","NEW_PROJECT","UPDATE_PROJECT","DELETE_PROJECT","OPEN_DOCUMENT_POPOVER","CLOSE_DOCUMENT_POPOVER","SETTINGS_SHOWN","SETTINGS_HIDDEN","NEW_PERMISSION_LEVEL_CHANGE","NEW_PERMISSION_USER_CHANGE","CREATE_PERMISSION_LOADING","CREATE_PERMISSION_ERRORED","CREATE_PERMISSION_SUCCESS","TOGGLE_DELETE_CONFIRMATION","TOGGLE_SIDEBAR","HIDE_BATCH_IMAGE_PROMPT","SHOW_BATCH_IMAGE_PROMPT","SET_UPLOADING_TRUE","KILL_UPLOADING","ADD_FOLDER_DATA","SHOW_CLOSE_DIALOG","HIDE_CLOSE_DIALOG","userProjectPermissions","public","currentUserPermissions","documentPopoverOpenFor","settingsShown","newPermissionLoading","newPermissionUser","newPermissionLevel","newPermissionError","deleteConfirmed","sidebarWidth","sidebarOpen","batchImagePromptShown","uploads","uploading","folderData","closeDialogShown","uploadError","clearProject","forbidden","push","projectTitle","projectDescription","newProject","showSettings","updateProject","openDocumentPopover","closeDocumentPopover","hideSettings","setNewPermissionUser","user","setNewPermissionLevel","level","createNewPermission","permission","deletePermission","updatePermission","permissionLevel","checkInAll","docIDs","checked_in_docs","toggleDeleteConfirmation","toggleSidebar","deleteProject","hideBatchImagePrompt","showBatchImagePrompt","folderIds","descendant_folder_ids","descendant","folder_ids","getFolderDataFromIds","getFolderData","startUploading","killUploading","showCloseDialog","hideCloseDialog","combineReducers","routing","routerReducer","reduxTokenAuth","reduxTokenAuthReducer","state","action","log","uploadsWithFilename","upload","createdUploads","newUploads","stillUploadingComplete","uploadsWithError","stillUploadingErrored","uploadsWithTimeout","stillUploadingTimeout","loadingOpenFolderContents","assign","successOpenFolderContents","erroredOpenFolderContents","closeOpenFolderContents","openDocumentsCopy","slice","splice","positionToSplice","Date","now","nextOpenDocs","docID","numDocs","preRefreshDocumentsCopy","preReplaceDocumentsCopy","preCloseDocumentsCopy","toCloseIndex","findIndex","toString","targetID","resourceIndex","updatedopenDocuments","updatedResource","highlight_map","links","duplicatesUpdatedOpenDocuments","hResourceIndex","hUpdatedOpenDocuments","hUpdatedResource","draggedDocument","openDocumentsMoveCopy","openDocumentsFetchUpdated","concat","opened","preUpdateTargetsCopy","toUpdateIndex","updatedTarget","preRefreshTargetsCopy","refreshingTarget","preReplaceTargetsCopy","refreshedTarget","preCloseTargetsCopy","rollover","newSelectedTargets","prePromoteTargetsCopy","toPromoteIndex","targetToPromote","nextSelectedTargets","nextSidebarTarget","updatedStates","cleanedStates","updatedHighlightColors","updatedDisplayColorPickers","updatedToggleDisplayColorPickers","updatedHighlightSelectModes","updatedSelectedHighlights","canvasEditor","updatedAddTileSourceMode","updatedPencilMode","updatedPageToChange","updatedEditingLayerName","search","history","createBrowserHistory","middleware","thunk","routerMiddleware","composedEnhancers","compose","applyMiddleware","store","createStore","rootReducer","currentUser","isLoading","isSignedIn","config","authUrl","userAttributes","approved","admin","confirmed","userRegistrationAttributes","password_confirmation","generateAuthActions","registerUser","signInUser","signOutUser","verifyCredentials","LoginRegistrationDialog","actions","open","requestedClose","showNameField","showEmailField","showPasswordField","showPasswordConfirmationField","location","this","props","label","primary","onClick","password","pathname","modal","onRequestClose","autoScrollBodyContent","style","red500","data","bind","disabled","green400","full_messages","blue900","floatingLabelText","hintText","onChange","autoComplete","errorText","Component","connect","bindActionCreators","withRouter","AdminDialog","contentStyle","width","maxWidth","Table","selectable","displaySelectAll","adjustForCheckbox","displayRowCheckbox","key","background","lightBlue50","red50","toggled","onToggle","isInputChecked","backgroundColor","red400","hoverColor","red600","grey200","SearchBar","onSearch","e","onKeypress","keyCode","which","display","marginRight","inputStyle","hintStyle","grey500","onKeyPress","marginTop","LoginMenuBody","primaryText","returnHome","Navigation","onCloseProject","layoutTooltipOpen","layoutTooltipAnchor","persist","currentTarget","preventDefault","setState","prevState","userMenuLabel","fontSize","top","left","showMenuIconButton","isHome","iconElementLeft","tooltip","tooltipPosition","iconElementRight","inputId","height","labelStyle","lineHeight","menuStyle","onMouseOver","onTooltipOpen","onMouseOut","onTooltipClose","option","minWidth","icon","labelPosition","zIndex","anchorEl","anchorOrigin","horizontal","vertical","targetOrigin","zDepth","className","useLayerForClickAway","autoCloseWhenOffScreen","Home","confirmationToken","maxHeight","margin","overflowY","List","padding","secondaryText","secondaryTextLines","projectClick","bottom","borderRadius","fullWidth","ownProps","split","slug","ProjectSettingsDialog","newValue","renderAddButtonLabel","validateAddCollab","lightBlue100","lightBlue200","userProjectPermission","user_email","red100","red200","renderCollabTableRow","renderAddCollabRow","defaultValue","scheduleProjectTitleUpdate","scheduleProjectDescriptionUpdate","multiLine","rowsMax","checked","onCheck","Tabs","tabItemContainerStyle","grey600","renderProjectTab","renderCollaboratorsTab","renderDeleteTab","scheduledProjectTitleUpdate","scheduledProjectDescriptionUpdate","AddDocumentButton","buttonId","idString","marginLeft","documentPopoverOpen","getElementById","textClick","imageClick","batchImageClick","Summary","singleClickTimeout","doubleClickCutoffMs","defaultBgColor","item","linkItem","grey100","isOpen","grey800","prevProps","isDraggable","white","black","writeEnabled","removeLinkCallback","thumbnail_url","onMouseEnter","grey300","onMouseLeave","leftAvatar","src","leftIcon","rightIcon","renderRightIcon","rightIconButton","renderRightButton","borderStyle","borderWidth","borderBold","borderColor","grey400","cursor","isDragging","innerDivStyle","paddingLeft","stopPropagation","handleClick","onDoubleClick","handleDoubleClick","children","DraggableSummary","connectDragPreview","linkDragIcon","Image","connectDragSource","DragSource","beginDrag","isFolder","isLinkItem","existingParentId","existingParentType","monitor","dragSource","dragPreview","LinkableSummary","ListItem","defaultProps","disableTouchRipple","disableFocusRipple","FolderContents","contents","red800","items","openDocumentIds","adminEnabled","allDraggable","insideFolder","parentFolderId","DocumentFolder","isOver","noMargin","grey900","underlineShow","iconStyle","MAX_IIIF_CANVASES","ListTargetInner","borderTop","handleFileSystemDrop","monitorItem","targetParentId","buoyancyTarget","droppedFile","files","droppedFileName","reader","FileReader","onload","sequences","manifestJSON","manifest","parse","canvasCount","sequence","newSequence","canvases","service","canvasLabel","image_info_uri","parseIIIFManifest","result","readAsText","listDropTarget","canDrop","drop","didDrop","handler","idToPass","handleDMItemDrop","ListDropTarget","connectDropTarget","DropTarget","NativeTypes","FILE","dropTarget","LinkableList","itemKey","originKey","originId","originTimeOpened","paddingTop","renderFolder","renderItem","TableOfContents","minHeight","alignItems","flexGrow","noGutter","checkInAllClick","settingsClick","PageMargins","size","xmlns","fill","viewBox","d","stroke","strokeDasharray","supportedTextStyles","cssKey","default","fontFamily","textDecoration","textStyle","attrs","markAttrs","keys","styleKey","textStyleMarkAttributes","parseDOM","tag","getAttrs","dom","styleAttribute","cssExpressions","foundStyles","cssExpression","styleRegEx","RegExp","matches","match","cssToMarkAttr","getAttribute","toDOM","mark","markAttrsToCSS","styleStr","blockquoteDOM","hrDOM","preDOM","brDOM","nodes","paragraph","group","node","indentLevel","lineHeightParsed","parseFloat","isNaN","indented","textIndent","blockquote","defining","horizontal_rule","heading","code_block","marks","code","preserveWhitespace","text","inline","alt","draggable","hard_break","emDOM","strongDOM","codeDOM","href","inclusive","em","underline","strikethrough","strong","fontWeight","test","schema","Schema","markApplies","ranges","i","$from","$to","can","depth","allowsMarkType","nodesBetween","inlineContent","addMark","markType","selection","empty","$cursor","tr","addStoredMark","create","has","rangeHasMark","removeMark","transform","highlightUid","nodeSize","removeStoredMark","scrollIntoView","replaceNodeWith","nodeType","canReplaceWith","canInsert","replaceSelectionWith","increaseIndent","withHanging","newNode","step","ReplaceAroundStep","Slice","Fragment","from","docChanged","decreaseIndent","removedFromList","liftListItem","cmd","addTable","rowsCount","colsCount","withHeaderRow","cellContent","end","$head","resolvedEnd","types","tableNodeTypes","headerCells","cells","createCell","cellType","createChecked","createAndFill","cell","headerCell","header_cell","row","table","createTable","setSelection","TextSelection","near","offset","resolvedPos","HighlightColorSelect","toggleColorPicker","boxShadow","displayColorPicker","colors","yellow500","orange300","redA100","purpleA100","blueA100","cyanA100","lightGreenA700","lightGreenA200","setHighlightColor","hex","ProseMirrorEditorView","editorView","propse","focus","destroy","nextProps","columnCount","ref","createEditorView","LinkTooltip","view","createElement","parentNode","appendChild","update","lastState","eq","to","insideLink","start","coordsAtPos","box","offsetParent","getBoundingClientRect","scrollTop","origTooltipLeft","tooltipBottom","innerHTML","tooltipRect","overflow","right","diff","ImageTooltip","buttons","tooltipImageSmall","innerText","tooltipImageMedium","tooltipImageLarge","tooltipImageOrig","button","tooltipDiv","onclick","setNodeMarkup","nodeSelection","NodeSelection","imageSelected","Math","max","newTooltipLeft","fontFamilies","lineHeights","buttonWidth","validURLRegex","validImageRegex","TextResource","renderTool","toolName","getInstanceKey","selectedHighlight","documentSchema","createDocumentSchema","createEditorState","onMouseDown","onHighlight","hiddenTools","undefined","onColorPickerOpen","textColor","onBold","onItalic","onUnderline","onStrikethrough","renderFontSizeDropDown","renderFontFamilyDropDown","onHyperLink","onImage","renderTableMenu","renderLineSpacingMenu","renderColumnsMenu","onBulletList","onOrderedList","onDecreaseIndent","onIncreaseIndent","onBlockquote","onHR","onHighlightSelectMode","onMarginClick","onDeleteHighlight","getEditorState","onChangeTextColor","colorMarkType","toggleMark","onUnderlineByKey","preventDefaultKeymaps","metaKey","ctrlKey","onStrikethroughByKey","onIncreaseIndentByKey","onDecreaseIndentByKey","linkDialogOpen","createHyperlink","imageDialogOpen","createImage","imageNodeType","onLineSpacingChange","setNodeAttributes","isEditable","lockedByMe","element","EditorView","dispatchTransaction","handlePaste","editable","targetHighlight","currentHighlight","targetPosition","domNode","nodeDOM","block","scrollTo","execCommand","targetHighlights","createHighlight","serializer","div","serializeFragment","textContent","pastedMarks","markEntry","tx","processAndConfirmTransaction","nextEditorState","updateState","setSaving","doneSaving","postponeCallback","postContentChanges","DOMSerializer","fromSchema","steps","effectedMarks","AddMarkStep","curSelection","ReplaceStep","RemoveMarkStep","parentOffset","collectHighlights","additionTo","before","newHighlightUid","removedMarks","effectedIndex","indexOf","serializeNode","toRemoveUids","scheduleContentUpdate","onCancelHyperlinkDialog","initialLinkDialogState","onSubmitHyperlinkDialog","linkDialogBuffer","linkDialogBufferInvalid","onCancelImageDialog","initialImageDialogState","onSubmitImageDialog","imageDialogBuffer","uploadedImage","imageDialogBufferInvalid","onCancelTableDialog","initialTableDialogState","onSubmitTableDialog","tableDialogRows","tableDialogCols","tableDialogHeader","tableDialogRowsInvalid","tableDialogColsInvalid","onCancelMarginDialog","marginDialogOpen","priorMargins","onSubmitMarginDialog","marginBottom","setPageMargin","marginTopInvalid","marginBottomInvalid","marginLeftInvalid","marginRightInvalid","scheduledContentUpdate","editorViewWrapper","React","createRef","tools","tool","tableTools","addColumnBefore","addColumnAfter","deleteColumn","addRowBefore","addRowAfter","deleteRow","toggleHeaderColumn","toggleHeaderRow","mergeCells","deleteTable","uploadingImage","imageUploadText","tableDialogOpen","initialMarginDialogState","marginLefttInvalid","currentScrollTop","toolbarWidth","hiddenToolsOpen","hiddenToolsAnchor","colorPickerOpen","colorPickerAnchor","tooltipOpen","tooltipAnchor","tableMenuOpen","tableMenuAnchor","current","setLastSaved","toLocaleString","offsetWidth","sumWidths","hidingBegan","refs","filteredRefs","Boolean","inst","highlightSpec","tempColor","highlightInfo","getHighlightMap","properties","class","onmouseenter","onmouseleave","spec","addBefore","addListNodes","append","tableNodes","tableGroup","cellAttributes","getFromDOM","setDOMAttr","existingEditorState","dmSchema","plugins","exampleSetup","menuBar","columnResizing","tableEditing","keymap","undo","redo","handleTab","handleShiftTab","highlightSelectPlugin","Plugin","decorations","getSelectedHighlight","Decoration","DecorationSet","highlightTargetPlugin","linkPreviewPlugin","imageResizePlugin","nodeFromJSON","EditorState","textBetween","orderedListNodeType","ordered_list","wrapInList","bulletListNodeType","bullet_list","blockquoteNodeType","wrapIn","hrNodeType","textStyleMarkType","fontFamilyMarkType","onTableClick","isInTable","goToNextCell","startNode","search_text","toSearchText","onColorPickerClose","animated","onChangeComplete","onFontSizeChange","autoWidth","onFontFamilyChange","family","iconButtonElement","openTableMenu","closeTableMenu","onTableMenuChange","onItemClick","onColumnsChange","onToolbarWidthChange","Toolbar","onHiddenToolsOpen","onHiddenToolsClose","renderTooltipFromHidden","renderColorPicker","onSuccess","finishedUpload","render","handleUpload","ready","file","progress","progressString","toFixed","min","flexDirection","renderToolbar","mergeRefs","onScrollChange","onKeyDown","thickness","renderLinkDialog","renderImageDialog","renderTableDialog","renderMarginDialog","RemoveFromPhotos","displayName","muiName","tileSourceTypeLabels","select","textField","AddImageLayer","addTileSource","newContent","existingTileSources","existingIiifTileNames","iiifTileNames","shouldSetThumbnail","newTileSources","image_urls","newImageUrls","decodeURIComponent","newTileSourceValue","onIIIFLink","uploadErrorMessage","linkError","onWebLink","onLinkSubmit","tileSource","tileSourceMode","validateTileSource","onCancel","addingNewLayers","deepEqual","buttonStyle","allowNewLayers","endpoint","path","model","attribute","protocol","multiple","onSubmit","onError","containerElement","accept","renderUploadButton","floatingLabelStyle","verticalAlign","openSeaDragonFabricOverlay","OpenSeadragon","fabric","_renderStroke","ctx","strokeWidth","shadow","affectStroke","_removeShadow","save","scale","scaleX","scaleY","_setLineDash","strokeDashArray","_renderDashedStroke","_applyPatternGradientTransform","restore","CanvasResource","osdId","osdViewer","upButton","downButton","layerSelect","imageLayerControls","viewportUpdatedYet","currentMode","hasOpenedOnce","currentPage","totalPages","layerName","zoomLevel","maxZoom","minZoom","openTileSources","goToPage","hasLayerControls","controls","ctrl","hasLayers","addControl","ControlAnchor","TOP_LEFT","autoFade","removeControl","refreshLayerSelect","raiseEvent","initialColor","iOS","navigator","userAgent","platform","maxTouchPoints","containsImageFile","source","viewer","prefixUrl","showNavigationControl","maxZoomPixelRatio","navigatorSizeRatio","gestureSettingsMouse","clickToZoom","showNavigator","sequenceMode","showSequenceControl","preserveViewport","preserveImageSizeOnResize","useCanvas","Button","srcRest","srcGroup","srcHover","srcDown","onRelease","prevPage","makeNeutralElement","addEventListener","opt","getLayerName","nextPage","wrapper","buttonGroup","ButtonGroup","innerTracker","MouseTracker","overlay","fabricjsOverlay","addHandler","viewport","getMaxZoom","getMinZoom","viewportUpdatedForPageYet","renderHighlights","zoom","fabricCanvas","getZoom","forEachObject","_isMarker","radius","markObjectsDirtyNextUpdate","dirty","freeDrawingBrush","resize","resizecanvas","pageNumber","selectedIndex","onOpen","on","_highlightUid","setFocusHighlight","discardActiveObject","_isTarget","obj","_isTargetChild","canvasMouseDown","canvasMouseMove","canvasMouseUp","highlightCoords","computeMarkerThumbBounds","aCoords","toJSON","toSVG","showRollover","hideRollover","perPixelTargetFind","setActiveObject","onresize","tileSourceSSL","resourceURL","successCallBack","errorCallback","retryWithInfoJSON","initialResponse","withInfoJson","checkTileSource","validResourceURL","errorResponse","selected","firstChild","removeChild","lastChild","t","targetHighLight","x","y","w","h","targetRect","Rect","fitBoundsWithConstraints","isMouseDown","pointerCoords","getPointer","drawMarker","newShape","addShape","Circle","originX","originY","newColor","selectedObject","getActiveObject","set","checkDoubleClick","drawLine","endLineMode","prevLineEndPoint","o","lineInProgress","mouse","abs","renderAll","forceRedraw","calcCoords","svg","panClick","jsonBlob","objects","parsedHighlight","hoverCursor","Shadow","blur","jsonString","loadFromJSON","lockCanvasObject","lastTime","currentTime","elapsedTime","pointer","activeShape","lineOptions","centerPoint","getCenterPoint","oldCircle","Polyline","add","oldHoverLine","hoverLine","oldPolyline","points","markerCoords","tl","bl","br","pCoords","markerFill","Color","fromHex","setAlpha","rad","marker","toRgba","lockScalingX","lockScalingY","lockRotation","lockScalingFlip","lockSkewingX","lockSkewingY","lockUniScaling","hasControls","defaultCursor","fabricObject","lock","lockMovementX","lockMovementY","getObjects","isDrawingMode","stopDrawing","lockCanvasObjects","setMouseNavEnabled","selectedObjects","currentLayer","currentLayerName","tile","layerNamePayload","zoomTo","image_thumbnail_urls","iconBackdropStyle","iconBackdropStyleActive","cyan100","iconBackdropStyleSpaced","floatingIconBackdropStyle","smallIconStyle","tooltipStyle","pointerEvents","highlightHidden","isEmpty","clear","tooltipStyles","editShapeClick","rectClick","circleClick","markerClick","pencilClick","lineClick","colorizeClick","deleteHighlightClick","moveLayerClick","deleteLayerClick","submitLayerName","flex","borderBottom","onChangeLayerName","editLayerNameClick","cancelEditLayerName","sliderStyle","axis","zoomControlChange","DocumentStatusBar","show","lastSaved","lockedByUserName","saving","float","resourceName","renderCheckInOutButtons","renderSaveIcon","renderLastSaved","renderDeleteButton","renderTooltip","getStatusMessage","DocumentInner","DocumentViewer","onChangeTitle","titleChangeTimeout","titleChangeDelayMs","elementRef","cornerIconTooltipOpen","cornerIconTooltipAnchor","currentState","toggleHighlights","flexShrink","linkInspectorAnchorClick","onToggleHighlights","onCloseDocument","numRows","documentGridOffsetWidth","innerWidth","windowHeight","innerHeight","opacity","renderTitleBar","renderStatusBar","hover","component","hoverIndex","DraggableLinkIcon","LinkList","LinkDropTarget","border","textAlign","justifyContent","fontStyle","LinkArea","LinkInspector","getItemList","timeUpdateDelay","LinkInspectorPopup","newTitle","titleUpdateTimer","titleBuffer","titleHasFocus","Paper","transitionEnabled","yellow100","orange100","purple100","blue100","green100","lightGreen100","titleBarColor","canEditTitle","titleBarID","underlineStyle","onTitleBlur","onTitleFocus","getTitleColor","linkInspectorVisible","linkInspectorProps","openDoc","startPos","startPosition","handle","bounds","getInnerID","popupIndex","onDragHandleMouseDown","paddingRight","renderTitle","closeHandler","generatePopupKey","LinkInspectorPopupLayer","boxSizing","targets","mouseDownHandler","dialogStartPosition","SearchResultsPopup","minConstraints","maxConstraints","SearchResultsPopupLayer","onClose","TableRow","progressTrStyle","nameTdStyle","overflowWrap","progressTdStyle","statusTdStyle","lightBlue400","yellow400","CloseDialog","closeAction","cancelAction","secondary","BatchImagePrompt","defaultState","invalidFiles","menuItemsToRender","parent","newItem","repeat","toLowerCase","pushSelfAndDescendants","spaced","updateCheck","RadioButton","defaultSelected","changeFolderType","val","selectFolder","uploadsNotDone","folderChoiceValid","validFileFormats","batchSize","filesAreValidFormat","showInitStuff","red900","renderFolderChoice","renderMultipleUploadButton","Project","renderDocumentViewer","mainContainer","mouseX","mouseY","rolloverTimer","createTarget","activateRolloverTimer","deactivateRolloverTimer","documentID","highlightID","newTarget","scrollY","selectTextHighlight","params","renderDeleteDialog","newNumRows","ceil","newScrollPos","pageYOffset","gridInnerStyle","flexWrap","el","onMouseMove","clientX","clientY","autoHideDuration","onTitleChange","renderDialogLayers","renderDocumentGrid","renderSnackbar","onBeforeunload","adminUsers","sidebarIsDragging","write","DragDropContext","HTML5Backend","App","muiTheme","getMuiTheme","darkBaseTheme","palette","primary1Color","slider","trackColor","trackColorSelected","handleColorZero","handleFillColor","selectionColor","rippleColor","Route","exact","hostname","ReactDOM","serviceWorker","registration","unregister"],"mappings":"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","file":"static/js/main.1a0eca4d.chunk.js","sourcesContent":["export const LOADING = 'home/LOADING';\nexport const ERRORED = 'home/ERRORED';\nexport const FETCH_SUCCESS = 'home/FETCH_SUCCESS';\nexport const LOGIN_SHOWN = 'home/LOGIN_SHOWN';\nexport const LOGIN_HIDDEN = 'home/LOGIN_HIDDEN';\nexport const REGISTRATION_SHOWN = 'home/REGISTRATION_SHOWN';\nexport const REGISTRATION_HIDDEN = 'home/REGISTRATION_HIDDEN';\nexport const APPROVAL_PENDING_SHOWN = 'home/APPROVAL_PENDING_SHOWN';\nexport const APPROVAL_PENDING_HIDDEN = 'home/APPROVAL_PENDING_HIDDEN';\nexport const USER_EMAIL_CHANGED = 'home/USER_EMAIL_CHANGED';\nexport const USER_NAME_CHANGED = 'home/USER_NAME_CHANGED';\nexport const USER_PASSWORD_CHANGED = 'home/USER_PASSWORD_CHANGED';\nexport const USER_PASSWORD_CONFIRMATION_CHANGED = 'home/USER_PASSWORD_CONFIRMATION_CHANGED';\nexport const USER_AUTH_ERRORED = 'home/USER_AUTH_ERRORED';\nexport const AUTH_MENU_TOGGLED = 'home/AUTH_MENU_TOGGLED';\nexport const AUTH_MENU_HIDDEN = 'home/AUTH_MENU_HIDDEN';\nexport const ADMIN_DIALOG_SHOWN = 'home/ADMIN_DIALOG_SHOWN';\nexport const ADMIN_DIALOG_HIDDEN = 'home/ADMIN_DIALOG_HIDDEN';\nexport const USER_ADMIN_LIST_LOADING = 'home/USER_ADMIN_LIST_LOADING';\nexport const USER_ADMIN_LIST_ERRORED = 'home/USER_ADMIN_LIST_ERRORED';\nexport const USER_ADMIN_LIST_SUCCESS = 'home/USER_ADMIN_LIST_SUCCESS';\nexport const UPDATE_USER_LOADING = 'home/UPDATE_USER_LOADING';\nexport const UPDATE_USER_ERRORED = 'home/UPDATE_USER_ERRORED';\nexport const UPDATE_USER_SUCCESS = 'home/UPDATE_USER_SUCCESS';\nexport const DELETE_USER_LOADING = 'home/DELETE_USER_LOADING';\nexport const DELETE_USER_ERRORED = 'home/DELETE_USER_ERRORED';\nexport const DELETE_USER_SUCCESS = 'home/DELETE_USER_SUCCESS';\nexport const CONFIRM_USER_SUCCESS = 'home/CONFIRM_USER_SUCCESS';\nexport const CONFIRM_USER_ERRORED = 'home/CONFIRM_USER_ERRORED';\nexport const CONFIRM_USER_SUCCESS_DIALOG_CLOSED = 'home/CONFIRM_USER_SUCCESS_DIALOG_CLOSED';\nexport const RESEND_CONFIRMATION_STARTED = 'home/RESEND_CONFIRMATION_STARTED';\nexport const RESEND_CONFIRMATION_SUCCESS = 'home/RESEND_CONFIRMATION_SUCCESS';\nexport const RESEND_CONFIRMATION_ERRORED = 'home/RESEND_CONFIRMATION_ERRORED';\n\nconst initialState = {\n projects: [],\n loading: false,\n errored: false,\n loginShown: false,\n registrationShown: false,\n approvalPendingShown: false,\n userEmail: '',\n userName: '',\n userPassword: '',\n userPasswordConfirmation: '',\n userAuthError: false,\n authMenuShown: false,\n authMenuAnchor: null,\n adminDialogShown: false,\n userAdminList: [],\n userAdminListLoading: false,\n userAdminListErrored: false,\n confirmUserSuccessDialogShown: false,\n confirmUserErrored: false,\n confirmUserErroredDialogShown: false,\n confirmationEmailResent: false,\n confirmationEmailErrored: false,\n confirmationResendButtonDisabled: false,\n confirmationEmailErrorMsg: '',\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case LOADING:\n return {\n ...state,\n loading: true\n };\n\n case ERRORED:\n return {\n ...state,\n errored: true\n };\n\n case FETCH_SUCCESS:\n return {\n ...state,\n loading: false,\n projects: action.projects\n };\n\n case LOGIN_SHOWN:\n return {\n ...state,\n loginShown: true,\n registrationShown: false,\n approvalPendingShown: false,\n authMenuShown: false\n };\n\n case LOGIN_HIDDEN:\n return {\n ...state,\n loginShown: false,\n userAuthError: false,\n userEmail: '',\n userName: '',\n userPassword: '',\n userPasswordConfirmation: '',\n confirmationEmailResent: false,\n }\n\n case REGISTRATION_SHOWN:\n return {\n ...state,\n registrationShown: true,\n loginShown: false,\n approvalPendingShown: false,\n authMenuShown: false\n };\n\n case REGISTRATION_HIDDEN:\n return {\n ...state,\n registrationShown: false,\n userAuthError: false,\n userEmail: '',\n userName: '',\n userPassword: '',\n userPasswordConfirmation: ''\n };\n\n case APPROVAL_PENDING_SHOWN:\n return {\n ...state,\n approvalPendingShown: true,\n userAuthError: false,\n registrationShown: false,\n loginShown: false,\n authMenuShown: false\n };\n\n case APPROVAL_PENDING_HIDDEN:\n return {\n ...state,\n approvalPendingShown: false,\n userAuthError: false,\n userEmail: '',\n userName: '',\n userPassword: '',\n userPasswordConfirmation: ''\n };\n\n case USER_EMAIL_CHANGED:\n return {\n ...state,\n userEmail: action.value\n };\n\n case USER_NAME_CHANGED:\n return {\n ...state,\n userName: action.value\n };\n\n case USER_PASSWORD_CHANGED:\n return {\n ...state,\n userPassword: action.value\n };\n\n case USER_PASSWORD_CONFIRMATION_CHANGED:\n return {\n ...state,\n userPasswordConfirmation: action.value\n };\n\n case USER_AUTH_ERRORED:\n return {\n ...state,\n userAuthError: action.error\n };\n\n case AUTH_MENU_TOGGLED:\n return {\n ...state,\n authMenuShown: !state.authMenuShown,\n authMenuAnchor: action.anchor\n };\n\n case AUTH_MENU_HIDDEN:\n return {\n ...state,\n userAuthError: false,\n authMenuShown: false\n };\n\n case ADMIN_DIALOG_SHOWN:\n return {\n ...state,\n adminDialogShown: true\n };\n\n case ADMIN_DIALOG_HIDDEN:\n return {\n ...state,\n adminDialogShown: false\n };\n\n case USER_ADMIN_LIST_LOADING:\n case UPDATE_USER_LOADING:\n case DELETE_USER_LOADING:\n return {\n ...state,\n userAdminListLoading: true,\n };\n\n case USER_ADMIN_LIST_ERRORED:\n case UPDATE_USER_ERRORED:\n case DELETE_USER_ERRORED:\n return {\n ...state,\n userAdminListErrored: true,\n userAdminListLoading: false\n };\n\n case USER_ADMIN_LIST_SUCCESS:\n case UPDATE_USER_SUCCESS:\n case DELETE_USER_SUCCESS:\n return {\n ...state,\n userAdminListLoading: false,\n userAdminListErrored: false,\n userAdminList: action.users\n };\n\n case CONFIRM_USER_SUCCESS:\n return {\n ...state,\n userAuthError: false,\n confirmUserSuccessDialogShown: true,\n confirmUserErrored: false,\n };\n\n case CONFIRM_USER_SUCCESS_DIALOG_CLOSED:\n return {\n ...state,\n userAuthError: false,\n confirmUserSuccessDialogShown: false,\n confirmUserErrored: false,\n }\n\n case CONFIRM_USER_ERRORED:\n return {\n ...state,\n userAuthError: false,\n confirmUserSuccessDialogShown: true,\n confirmUserErrored: true,\n };\n\n case RESEND_CONFIRMATION_STARTED:\n return {\n ...state,\n confirmationResendButtonDisabled: true,\n confirmationEmailErrored: false,\n confirmationEmailResent: false,\n confirmationEmailErrorMsg: '',\n }\n\n case RESEND_CONFIRMATION_SUCCESS:\n return {\n ...state,\n confirmationEmailResent: true,\n confirmationEmailErrored: false,\n confirmationResendButtonDisabled: true,\n confirmationEmailErrorMsg: '',\n };\n \n case RESEND_CONFIRMATION_ERRORED:\n return {\n ...state,\n confirmationEmailErrored: true,\n confirmationEmailErrorMsg: action.error,\n confirmationEmailResent: false,\n confirmationResendButtonDisabled: false,\n }\n \n default:\n return state;\n }\n}\n\nexport function load() {\n return function(dispatch) {\n dispatch({\n type: LOADING\n });\n\n fetch('/projects', {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(projects => {\n // sort by title\n projects = projects.sort(createAlphaNumericComparator('title'));\n dispatch({\n type: FETCH_SUCCESS,\n projects\n })\n })\n .catch(() => dispatch({\n type: ERRORED\n }));\n };\n}\n\nexport function showLogin() {\n return function(dispatch) {\n dispatch({\n type: LOGIN_SHOWN\n });\n };\n}\n\nexport function hideLogin() {\n return function(dispatch) {\n dispatch({\n type: LOGIN_HIDDEN\n });\n };\n}\n\nexport function showRegistration() {\n return function(dispatch) {\n dispatch({\n type: REGISTRATION_SHOWN\n });\n };\n}\n\nexport function hideRegistration() {\n return function(dispatch) {\n dispatch({\n type: REGISTRATION_HIDDEN\n });\n };\n}\n\nexport function showApprovalPending() {\n return function(dispatch) {\n dispatch({\n type: APPROVAL_PENDING_SHOWN\n });\n };\n}\n\nexport function hideApprovalPending() {\n return function(dispatch) {\n dispatch({\n type: APPROVAL_PENDING_HIDDEN\n });\n };\n}\n\nexport function userEmailChanged(event) {\n return function(dispatch) {\n dispatch({\n type: USER_EMAIL_CHANGED,\n value: event.target.value\n });\n };\n}\n\nexport function userNameChanged(event) {\n return function(dispatch) {\n dispatch({\n type: USER_NAME_CHANGED,\n value: event.target.value\n });\n };\n}\n\nexport function userPasswordChanged(event) {\n return function(dispatch) {\n dispatch({\n type: USER_PASSWORD_CHANGED,\n value: event.target.value\n });\n };\n}\n\nexport function userPasswordConfirmationChanged(event) {\n return function(dispatch) {\n dispatch({\n type: USER_PASSWORD_CONFIRMATION_CHANGED,\n value: event.target.value\n });\n };\n}\n\nexport function userAuthErrored(error) {\n return function(dispatch) {\n dispatch({\n type: USER_AUTH_ERRORED,\n error\n });\n };\n}\n\nexport function toggleAuthMenu(anchor) {\n return function(dispatch) {\n dispatch({\n type: AUTH_MENU_TOGGLED,\n anchor\n });\n };\n}\n\nexport function hideAuthMenu(anchor) {\n return function(dispatch) {\n dispatch({\n type: AUTH_MENU_HIDDEN\n });\n };\n}\n\nexport function showAdminDialog() {\n return function(dispatch) {\n dispatch({\n type: ADMIN_DIALOG_SHOWN\n });\n dispatch(loadUserAdminList());\n };\n}\n\nexport function loadUserAdminList() {\n return function(dispatch) {\n dispatch({\n type: USER_ADMIN_LIST_LOADING\n });\n\n fetch('/users/list_admin', {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(users => dispatch({\n type: USER_ADMIN_LIST_SUCCESS,\n users\n }))\n .catch(() => dispatch({\n type: USER_ADMIN_LIST_ERRORED\n }));\n };\n}\n\nexport function hideAdminDialog() {\n return function(dispatch) {\n dispatch({\n type: ADMIN_DIALOG_HIDDEN\n });\n };\n}\n\nexport function updateUser(userId, attributes) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_USER_LOADING\n });\n\n fetch(`/users/${userId}`, {\n method: 'PATCH',\n body: JSON.stringify(attributes),\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(users => dispatch({\n type: UPDATE_USER_SUCCESS,\n users\n }))\n .catch(() => dispatch({\n type: UPDATE_USER_ERRORED\n }));\n }\n}\n\nexport function deleteUser(userId) {\n return function(dispatch) {\n dispatch({\n type: DELETE_USER_LOADING\n });\n\n fetch(`/users/${userId}`, {\n method: 'DELETE',\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(users => dispatch({\n type: DELETE_USER_SUCCESS,\n users\n }))\n .catch(() => dispatch({\n type: DELETE_USER_ERRORED\n }));\n }\n}\n\nfunction createAlphaNumericComparator( field ) {\n return function alphaNumericCompare(a,b) {\n var nameA = a[field].toUpperCase(); // ignore upper and lowercase\n var nameB = b[field].toUpperCase(); // ignore upper and lowercase\n if (nameA < nameB) {\n return -1;\n }\n if (nameA > nameB) {\n return 1;\n }\n \n // names must be equal\n return 0;\n } \n}\n\nexport function confirmUser(token) {\n return function(dispatch) {\n fetch(`/auth/confirmation?confirmation_token=${token}`, {\n method: 'GET',\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(res => {\n if (res.account_confirmation_success === \"true\" || res.account_confirmation_success === true) {\n dispatch({\n type: CONFIRM_USER_SUCCESS\n });\n } else {\n throw Error(res);\n }\n })\n .catch((error) => {\n dispatch({\n type: CONFIRM_USER_ERRORED,\n error\n });\n })\n }\n}\n\nexport function resendConfirmationEmail() {\n return function(dispatch, getState) {\n dispatch({\n type: RESEND_CONFIRMATION_STARTED,\n })\n fetch('/auth/confirmation', {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n body: JSON.stringify({\n email: getState().home.userEmail\n }),\n })\n .then(response => {\n if (!response.ok) {\n const { errors } = response.json();\n if (errors && errors.length > 0) {\n throw Error(errors[0]);\n }\n throw Error(response.statusText);\n }\n dispatch({\n type: RESEND_CONFIRMATION_SUCCESS,\n });\n return response;\n })\n .catch(err => {\n dispatch({\n type: RESEND_CONFIRMATION_ERRORED,\n err\n });\n })\n }\n}\n\nexport function closeConfirmDialog() {\n return function (dispatch) {\n dispatch({\n type: CONFIRM_USER_SUCCESS_DIALOG_CLOSED,\n })\n }\n}","\nexport const START_SEARCH = 'search/START_SEARCH';\nexport const SEARCH_SUCCESS = 'search/SEARCH_SUCCESS';\nexport const SEARCH_ERRORED = 'search/SEARCH_ERRORED';\nexport const UPDATE_SEARCH_PHRASE_BUFFER = 'search/UPDATE_SEARCH_PHRASE_BUFFER';\nexport const CLOSE_SEARCH_POPUP = 'search/CLOSE_SEARCH_POPUP';\n\nconst initialState = {\n loading: false,\n searchPhrase: '',\n searchPhraseBuffer: '',\n searchResults: [],\n popupOpen: false,\n errored: false\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case START_SEARCH:\n return {\n ...state,\n searchPhrase: action.searchPhrase,\n searchResults: [],\n loading: true,\n errored: false\n }\n\n case SEARCH_SUCCESS:\n return {\n ...state,\n searchResults: action.searchResults,\n popupOpen: true,\n loading: false,\n errored: false\n }\n\n case SEARCH_ERRORED:\n return {\n ...state,\n popupOpen: false,\n loading: false,\n errored: true\n }\n\n case CLOSE_SEARCH_POPUP:\n return {\n ...initialState\n }\n\n case UPDATE_SEARCH_PHRASE_BUFFER:\n return {\n ...state,\n searchPhraseBuffer: action.searchPhraseBuffer\n }\n\n default:\n return state;\n }\n}\n\nexport function startSearch(projectID, searchPhrase) {\n return function(dispatch) {\n dispatch({\n type: START_SEARCH,\n searchPhrase\n });\n \n fetch(`/projects/${projectID}/search?q=${encodeURI(searchPhrase)}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(searchResults => {\n return searchResults;\n })\n .then(searchResults => dispatch({\n type: SEARCH_SUCCESS,\n searchResults\n }))\n .catch(() => dispatch({\n type: SEARCH_ERRORED\n }));\n };\n }\n\n export function closeSearchPopup() {\n return function(dispatch) {\n dispatch({\n type: CLOSE_SEARCH_POPUP\n });\n }\n }\n\n export function updateSearchPhraseBuffer(searchPhraseBuffer) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_SEARCH_PHRASE_BUFFER,\n searchPhraseBuffer\n });\n }\n }\n","\nexport const SELECT_TARGET = 'annotationViewer/SELECT_TARGET';\nexport const SELECT_LOAD_SUCCESS = 'annotationViewer/SELECT_LOAD_SUCCESS';\nexport const SELECT_SIDEBAR_TARGET = 'annotationViewer/SELECT_SIDEBAR_TARGET';\nexport const SELECT_SIDEBAR_LOAD_SUCCESS = 'annotationViewer/SELECT_SIDEBAR_LOAD_SUCCESS';\nexport const SELECT_LOAD_ERRORED = 'annotationViewer/SELECT_LOAD_ERRORED';\nexport const REFRESH_TARGET = 'annotationViewer/REFRESH_TARGET';\nexport const REFRESH_SUCCESS = 'annotationViewer/REFRESH_SUCCESS';\nexport const REFRESH_ERRORED = 'annotationViewer/REFRESH_ERRORED';\nexport const CLOSE_TARGET = 'annotationViewer/CLOSE_TARGET';\nexport const CLOSE_TARGET_ROLLOVER = 'annotationViewer/CLOSE_TARGET_ROLLOVER';\nexport const CLOSE_SIDEBAR_TARGET = 'annotationViewer/CLOSE_SIDEBAR_TARGET';\nexport const CLOSE_DOCUMENT_TARGETS = 'annotationViewer/CLOSE_DOCUMENT_TARGETS';\nexport const PROMOTE_TARGET = 'annotationViewer/PROMOTE_TARGET';\nexport const CLEAR_SELECTION = 'annotationViewer/CLEAR_SELECTION';\nexport const DELETE_LINK_SUCCESS = 'annotationViewer/DELETE_LINK_SUCCESS';\nexport const ADD_LINK_SUCCESS = 'annotationViewer/ADD_LINK_SUCCESS';\nexport const MOVE_LINK = 'annotationViewer/MOVE_LINK';\nexport const MOVE_LINK_SUCCESS = 'annotationViewer/MOVE_LINK_SUCCESS';\nexport const MOVE_LINK_ERRORED = 'annotationViewer/MOVE_LINK_ERRORED';\n\nconst initialState = {\n selectedTargets: [],\n sidebarTarget: null,\n sidebarLoading: true,\n addedLink: {},\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case SELECT_TARGET:\n return {\n ...state,\n selectedTargets: state.selectedTargets.concat([Object.assign({loading: true, opened: Date.now()}, action.target)])\n };\n\n case SELECT_LOAD_SUCCESS:\n let preUpdateTargetsCopy = state.selectedTargets.slice(0);\n let toUpdateIndex = -1;\n if (action.target.highlight_id) {\n toUpdateIndex = preUpdateTargetsCopy.findIndex(target => target.highlight_id === action.target.highlight_id);\n }\n else {\n toUpdateIndex = preUpdateTargetsCopy.findIndex(target => target.document_id === action.target.document_id && !target.highlight_id);\n }\n if (toUpdateIndex >= 0) {\n let updatedTarget = Object.assign({opened: Date.now()}, action.target);\n updatedTarget.loading = false;\n Object.assign(updatedTarget, action.loadedTarget);\n preUpdateTargetsCopy.splice(toUpdateIndex, 1, updatedTarget);\n }\n return {\n ...state,\n selectedTargets: preUpdateTargetsCopy\n };\n\n case REFRESH_TARGET:\n let preRefreshTargetsCopy = state.selectedTargets.slice(0);\n if (action.index >= 0) {\n let refreshingTarget = Object.assign({}, preRefreshTargetsCopy[action.index]);\n refreshingTarget.loading = true;\n preRefreshTargetsCopy.splice(action.index, 1, refreshingTarget);\n }\n return {\n ...state,\n selectedTargets: preRefreshTargetsCopy\n }\n\n case REFRESH_SUCCESS:\n let preReplaceTargetsCopy = state.selectedTargets.slice(0);\n if (action.index >= 0) {\n let refreshedTarget = Object.assign({}, state.selectedTargets[action.index]);\n refreshedTarget.loading = false;\n Object.assign(refreshedTarget, action.loadedTarget);\n preReplaceTargetsCopy.splice(action.index, 1, refreshedTarget);\n }\n return {\n ...state,\n selectedTargets: preReplaceTargetsCopy\n };\n\n case SELECT_SIDEBAR_TARGET:\n return {\n ...state,\n sidebarTarget: action.target,\n sidebarLoading: true\n };\n\n case SELECT_SIDEBAR_LOAD_SUCCESS:\n let updatedTarget = Object.assign({}, action.target);\n Object.assign(updatedTarget, action.loadedTarget);\n return {\n ...state,\n sidebarTarget: updatedTarget,\n sidebarLoading: false\n };\n\n case CLOSE_TARGET: {\n let preCloseTargetsCopy = state.selectedTargets.slice(0);\n let toCloseIndex = -1;\n if (action.highlight_id) {\n toCloseIndex = preCloseTargetsCopy.findIndex(target => target.highlight_id === action.highlight_id);\n }\n else {\n toCloseIndex = preCloseTargetsCopy.findIndex(target => (target.document_id === action.document_id && !target.highlight_id))\n }\n if (toCloseIndex >= 0) {\n preCloseTargetsCopy.splice(toCloseIndex, 1);\n }\n return {\n ...state,\n selectedTargets: preCloseTargetsCopy\n };\n }\n\n case CLOSE_TARGET_ROLLOVER: {\n let preCloseTargetsCopy = state.selectedTargets.slice(0);\n let toCloseIndex = -1;\n toCloseIndex = preCloseTargetsCopy.findIndex(target => target.rollover && target.uid === action.highlight_uid);\n if (toCloseIndex >= 0) {\n preCloseTargetsCopy.splice(toCloseIndex, 1);\n }\n return {\n ...state,\n selectedTargets: preCloseTargetsCopy\n };\n }\n\n case CLOSE_DOCUMENT_TARGETS:\n const newSelectedTargets = state.selectedTargets.filter(target => target.document_id !== action.document_id)\n return {\n ...state,\n selectedTargets: newSelectedTargets\n };\n\n case CLOSE_SIDEBAR_TARGET:\n return {\n ...state,\n sidebarTarget: null\n };\n\n case PROMOTE_TARGET:\n let prePromoteTargetsCopy = state.selectedTargets.slice(0);\n let toPromoteIndex = -1;\n if (action.highlight_id) {\n toPromoteIndex = prePromoteTargetsCopy.findIndex(target => target.highlight_id === action.highlight_id);\n }\n else {\n toPromoteIndex = prePromoteTargetsCopy.findIndex(target => target.document_id === action.document_id && !target.highlight_id)\n }\n if (toPromoteIndex >= 0 && toPromoteIndex < prePromoteTargetsCopy.length - 1) {\n const targetToPromote = prePromoteTargetsCopy.splice(toPromoteIndex, 1)[0];\n prePromoteTargetsCopy.push(targetToPromote);\n }\n return {\n ...state,\n selectedTargets: prePromoteTargetsCopy\n }\n\n case CLEAR_SELECTION:\n return {\n ...state,\n selectedTargets: []\n };\n\n case DELETE_LINK_SUCCESS:\n // remove the link from the active targets\n const {selectedTargets, sidebarTarget} = state\n let nextSidebarTarget = null, nextSelectedTargets; \n if (sidebarTarget) {\n nextSidebarTarget = { ...sidebarTarget }\n nextSidebarTarget.links_to = sidebarTarget.links_to.filter( link => link.link_id !== action.link_id )\n }\n\n nextSelectedTargets = [ ...selectedTargets ]\n nextSelectedTargets.forEach( target => {\n target.links_to = target.links_to.filter( link => link.link_id !== action.link_id )\n })\n\n return {\n ...state,\n sidebarTarget: nextSidebarTarget,\n selectedTargets: nextSelectedTargets\n };\n\n case ADD_LINK_SUCCESS:\n const { id, highlight_id, document_id, position, listType } = action.payload;\n return {\n ...state,\n addedLink: {\n id,\n highlight_id,\n document_id,\n position,\n listType,\n }\n };\n\n case MOVE_LINK:\n return {\n ...state,\n sidebarLoading: true\n };\n\n case MOVE_LINK_SUCCESS:\n return {\n ...state,\n sidebarLoading: false\n };\n\n case MOVE_LINK_ERRORED:\n return {\n ...state,\n sidebarLoading: false\n };\n \n default:\n return state;\n }\n}\n\nexport function selectTarget(target) {\n return function(dispatch) {\n dispatch({\n type: CLOSE_TARGET,\n document_id: target.document_id,\n highlight_id: target.highlight_id\n });\n dispatch({\n type: SELECT_TARGET,\n target\n });\n\n const targetUrl = target.highlight_id ? `/highlights/${target.highlight_id}` : `/documents/${target.document_id}`;\n fetch(targetUrl, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(loadedTarget => dispatch({\n type: SELECT_LOAD_SUCCESS,\n loadedTarget,\n target\n }))\n // .catch(() => dispatch({\n // type: SELECT_LOAD_ERRORED\n // }));\n }\n}\n\n// refresh all the targets that have links to this document\nexport function refreshTargetByDocumentID( document_id ) {\n return function(dispatch, getState) {\n const selectedTargets = getState().annotationViewer.selectedTargets;\n selectedTargets.forEach( (target,targetIndex) => {\n const linkToDoc = target.links_to.find( link => link.document_id === document_id )\n if( linkToDoc ) {\n dispatch( refreshTarget(targetIndex) );\n }\n })\n }\n}\n\nexport function refreshTarget(index) {\n return function(dispatch, getState) {\n dispatch({\n type: REFRESH_TARGET,\n index\n });\n\n const existingTarget = getState().annotationViewer.selectedTargets[index];\n if (existingTarget) {\n const targetUrl = existingTarget.highlight_id ? `/highlights/${existingTarget.highlight_id}` : `/documents/${existingTarget.document_id}`;\n\n fetch(targetUrl, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(loadedTarget => dispatch({\n type: REFRESH_SUCCESS,\n loadedTarget,\n index\n }))\n .catch(() => dispatch({\n type: REFRESH_ERRORED,\n index\n }));\n }\n }\n}\n\nexport function selectSidebarTarget(target) {\n return function(dispatch) {\n dispatch({\n type: SELECT_SIDEBAR_TARGET,\n target\n });\n\n const targetUrl = target.highlight_id ? `/highlights/${target.highlight_id}` : `/documents/${target.document_id}`;\n fetch(targetUrl, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(loadedTarget => dispatch({\n type: SELECT_SIDEBAR_LOAD_SUCCESS,\n loadedTarget,\n target\n }))\n .catch(() => dispatch({\n type: SELECT_LOAD_ERRORED\n }));\n }\n}\n\nexport function closeTargetRollover(highlight_uid) {\n return function(dispatch) {\n dispatch({\n type: CLOSE_TARGET_ROLLOVER,\n highlight_uid\n });\n }\n}\n\nexport function closeTarget(document_id, highlight_id) {\n return function(dispatch) {\n dispatch({\n type: CLOSE_TARGET,\n document_id,\n highlight_id\n });\n }\n}\n\n// close all targets related to this document\nexport function closeDocumentTargets(document_id) {\n return function(dispatch) {\n dispatch({\n type: CLOSE_DOCUMENT_TARGETS,\n document_id\n });\n }\n}\n\nexport function closeSidebarTarget() {\n return function(dispatch) {\n dispatch({\n type: CLOSE_SIDEBAR_TARGET\n });\n }\n}\n\nexport function promoteTarget(document_id, highlight_id) {\n return function(dispatch) {\n dispatch({\n type: PROMOTE_TARGET,\n document_id,\n highlight_id\n });\n }\n}\n\nexport function clearSelection() {\n return function(dispatch) {\n dispatch({\n type: CLEAR_SELECTION\n });\n }\n}\n\nexport function addLink(origin, linked, newLinkPosition, listType) {\n return function(dispatch, getState) {\n fetch('/links', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n linkable_a_id: origin.linkable_id,\n linkable_a_type: origin.linkable_type,\n linkable_b_id: linked.linkable_id,\n linkable_b_type: linked.linkable_type\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then((newLink) => {\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget) {\n let { highlight_id, document_id } = sidebarTarget;\n if (highlight_id) {\n if ((origin.linkable_type === 'Highlight' && origin.linkable_id === highlight_id) || (linked.linkable_type === 'Highlight' && linked.linkable_id === highlight_id))\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n else if ((origin.linkable_type === 'Document' && origin.linkable_id === document_id) || (linked.linkable_type === 'Document' && linked.linkable_id === document_id))\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n let { highlight_id, document_id } = target;\n if (highlight_id) {\n if ((origin.linkable_type === 'Highlight' && origin.linkable_id === highlight_id) || (linked.linkable_type === 'Highlight' && linked.linkable_id === highlight_id))\n dispatch(refreshTarget(index));\n }\n else if ((origin.linkable_type === 'Document' && origin.linkable_id === document_id) || (linked.linkable_type === 'Document' && linked.linkable_id === document_id))\n dispatch(refreshTarget(index));\n });\n if (newLinkPosition) {\n dispatch({\n type: ADD_LINK_SUCCESS,\n payload: {\n id: newLink.id,\n highlight_id: newLink.linkable_a.highlight_id || newLink.linkable_b.highlight_id,\n document_id: newLink.linkable_a.document_id || newLink.linkable_b.document_id,\n position: newLinkPosition,\n listType,\n },\n });\n }\n })\n .catch(() => {\n // TODO\n });\n };\n}\n\nexport function deleteLink(doomedLinkID) {\n return function(dispatch, getState) {\n fetch(`/links/${doomedLinkID}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'DELETE'\n }) \n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(() => {\n dispatch({\n type: DELETE_LINK_SUCCESS,\n link_id: doomedLinkID\n });\n })\n .then(() => {\n // Update positions in UI\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.highlight_id || sidebarTarget.document_id)) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.highlight_id || target.document_id) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .catch(() => {\n // TODO\n });\n };\n}\n\nexport function moveLink(linkId, targetId, targetParentType, position) {\n return function(dispatch, getState) {\n dispatch({\n type: MOVE_LINK\n });\n return fetch(`/links/${linkId}/move`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n targetId,\n targetParentType,\n position,\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(() => {\n // Update positions in UI\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.highlight_id || sidebarTarget.document_id)) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.highlight_id || target.document_id) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .then(() => {\n dispatch({\n type: MOVE_LINK_SUCCESS\n });\n })\n .catch(() => dispatch({\n type: MOVE_LINK_ERRORED\n }));\n }\n}","export const UPDATE_EDITOR_STATE = 'textEditor/UPDATE_EDITOR_STATE';\nexport const CLOSE_EDITOR = 'textEditor/CLOSE_EDITOR';\nexport const SET_HIGHLIGHT_COLOR = 'textEditor/SET_HIGHLIGHT_COLOR';\nexport const HIDE_COLOR_PICKER = 'textEditor/HIDE_COLOR_PICKER';\nexport const TOGGLE_COLOR_PICKER = 'textEditor/TOGGLE_COLOR_PICKER';\nexport const SET_HIGHLIGHT_SELECT_MODE = 'textEditor/SET_HIGHLIGHT_SELECT_MODE';\nexport const SELECT_HIGHLIGHT = 'textEditor/SELECT_HIGHLIGHT';\nexport const TOGGLE_HIGHLIGHTS = 'textEditor/TOGGLE_HIGHLIGHTS';\n\nconst initialState = {\n editorStates: {},\n highlightColors: {},\n displayColorPickers: {},\n errored: false,\n highlightSelectModes: {},\n selectedHighlights: {},\n highlightsHidden: {},\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case UPDATE_EDITOR_STATE:\n let updatedStates = Object.assign({}, state.editorStates);\n updatedStates[action.editorKey] = action.editorState;\n return {\n ...state,\n editorStates: updatedStates\n };\n\n case CLOSE_EDITOR:\n let cleanedStates = Object.assign({}, state.editorStates);\n delete cleanedStates[action.editorKey];\n return {\n ...state,\n editorStates: cleanedStates\n };\n\n case SET_HIGHLIGHT_COLOR:\n let updatedHighlightColors = Object.assign({}, state.highlightColors);\n updatedHighlightColors[action.editorKey] = action.highlightColor;\n return {\n ...state,\n highlightColors: updatedHighlightColors\n };\n\n case HIDE_COLOR_PICKER:\n let updatedDisplayColorPickers = Object.assign({}, state.displayColorPickers);\n updatedDisplayColorPickers[action.editorKey] = false;\n return {\n ...state,\n displayColorPickers: updatedDisplayColorPickers\n };\n\n case TOGGLE_COLOR_PICKER:\n let updatedToggleDisplayColorPickers = Object.assign({}, state.displayColorPickers);\n updatedToggleDisplayColorPickers[action.editorKey] = !updatedToggleDisplayColorPickers[action.editorKey];\n return {\n ...state,\n displayColorPickers: updatedToggleDisplayColorPickers\n };\n\n case SET_HIGHLIGHT_SELECT_MODE:\n let updatedHighlightSelectModes = Object.assign({}, state.highlightSelectModes);\n updatedHighlightSelectModes[action.editorKey] = action.value;\n return {\n ...state,\n highlightSelectModes: updatedHighlightSelectModes\n };\n\n case SELECT_HIGHLIGHT:\n let updatedSelectedHighlights = Object.assign({}, state.selectedHighlights);\n updatedSelectedHighlights[action.editorKey] = action.highlightKey;\n return {\n ...state,\n selectedHighlights: updatedSelectedHighlights\n };\n \n case TOGGLE_HIGHLIGHTS:\n let highlightsHidden = { ...state.highlightsHidden };\n highlightsHidden[action.editorKey] = action.value;\n return {\n ...state,\n highlightsHidden\n };\n \n default:\n return state;\n }\n}\n\nexport function updateEditorState(editorKey, editorState) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_EDITOR_STATE,\n editorKey,\n editorState\n });\n }\n}\n\nexport function closeEditor(editorKey) {\n return function(dispatch) {\n return dispatch({\n type: CLOSE_EDITOR,\n editorKey\n });\n }\n}\n\nexport function setTextHighlightColor(editorKey, highlightColor) {\n return function(dispatch) {\n dispatch({\n type: SET_HIGHLIGHT_COLOR,\n editorKey,\n highlightColor\n });\n dispatch({\n type: HIDE_COLOR_PICKER,\n editorKey\n });\n }\n}\n\nexport function toggleTextColorPicker(editorKey) {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_COLOR_PICKER,\n editorKey\n });\n }\n}\n\nexport function setHighlightSelectMode(editorKey, value) {\n return function(dispatch, getState) {\n dispatch({\n type: SET_HIGHLIGHT_SELECT_MODE,\n editorKey,\n value\n });\n // deselect when leaving highlight-select-mode\n if (!value) {\n dispatch({\n type: SELECT_HIGHLIGHT,\n editorKey,\n highlightKey: null\n });\n window.setTimeout(() => {\n dispatch({\n type: UPDATE_EDITOR_STATE,\n editorKey,\n editorState: getState().textEditor.editorStates[editorKey]\n });\n }, 500)\n }\n }\n}\n\nexport function selectHighlight(editorKey, highlightKey) {\n return function(dispatch) {\n dispatch({\n type: SELECT_HIGHLIGHT,\n editorKey,\n highlightKey // pass null to this parameter to deselect\n });\n }\n}\n\nexport function toggleTextHighlights(editorKey, value) {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_HIGHLIGHTS,\n editorKey,\n value\n });\n };\n}\n","import { loadProject } from './project';\nimport { closeDocumentFolders } from './documentGrid'\n\nexport const NEW_FOLDER = 'folders/NEW_FOLDER';\nexport const POST_SUCCESS = 'folders/POST_SUCCESS';\nexport const POST_ERRORED = 'folders/POST_ERRORED';\nexport const FOLDER_OPENED = 'folders/FOLDER_OPENED';\nexport const OPEN_SUCCESS = 'folders/OPEN_SUCCESS';\nexport const OPEN_ERRORED = 'folders/OPEN_ERRORED';\nexport const FOLDER_CLOSED = 'folders/FOLDER_CLOSED';\nexport const UPDATE_FOLDER = 'folders/UPDATE_FOLDER';\nexport const PATCH_SUCCESS = 'folders/PATCH_SUCCESS';\nexport const PATCH_ERRORED = 'folders/PATCH_ERRORED';\nexport const DELETE_FOLDER = 'folders/DELETE_DOCUMENT';\nexport const DELETE_SUCCESS = 'folders/DELETE_SUCCESS';\nexport const DELETE_ERRORED = 'folders/DELETE_ERRORED';\nexport const MOVE_FOLDER = 'folders/MOVE_FOLDER';\nexport const MOVE_FOLDER_SUCCESS = 'folders/MOVE_FOLDER_SUCCESS';\nexport const MOVE_FOLDER_ERRORED = 'folders/MOVE_FOLDER_ERRORED';\nexport const ADD_TREE = 'folders/ADD_TREE';\nexport const ADD_TREE_SUCCESS = 'folders/ADD_TREE_SUCCESS';\nexport const ADD_TREE_ERRORED = 'folders/ADD_TREE_ERRORED';\n\nconst initialState = {\n openFolderContents: {}\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case FOLDER_OPENED:\n case MOVE_FOLDER:\n case DELETE_FOLDER:\n let loadingOpenFolderContents = Object.assign({}, state.openFolderContents);\n loadingOpenFolderContents[action.id] = 'loading';\n return {\n ...state,\n openFolderContents: loadingOpenFolderContents\n };\n\n case OPEN_SUCCESS:\n case MOVE_FOLDER_SUCCESS:\n let successOpenFolderContents = Object.assign({}, state.openFolderContents);\n successOpenFolderContents[action.id] = action.contentsChildren;\n return {\n ...state,\n openFolderContents: successOpenFolderContents\n };\n\n case OPEN_ERRORED:\n case MOVE_FOLDER_ERRORED:\n case DELETE_ERRORED:\n let erroredOpenFolderContents = Object.assign({}, state.openFolderContents);\n erroredOpenFolderContents[action.id] = 'errored'\n return {\n ...state,\n openFolderContents: erroredOpenFolderContents\n };\n\n case FOLDER_CLOSED:\n case DELETE_SUCCESS:\n let closeOpenFolderContents = Object.assign({}, state.openFolderContents);\n closeOpenFolderContents[action.id] = null;\n return {\n ...state,\n openFolderContents: closeOpenFolderContents\n };\n\n default:\n return state;\n }\n}\n\nexport function createFolder(parentId, parentType, title = 'New Folder') {\n return function(dispatch, getState) {\n dispatch({\n type: NEW_FOLDER\n });\n\n fetch('/document_folders', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n title,\n project_id: getState().project.id,\n parent_id: parentId,\n parent_type: parentType\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => dispatch(loadProject(getState().project.id)))\n .then(() => dispatch({\n type: POST_SUCCESS\n }))\n .catch(() => dispatch({\n type: POST_ERRORED\n }));\n }\n}\n\nexport function openFolder(id) {\n return function(dispatch) {\n dispatch({\n type: FOLDER_OPENED,\n id\n });\n\n fetch(`document_folders/${id}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(folder => dispatch({\n type: OPEN_SUCCESS,\n id,\n contentsChildren: folder.contents_children\n }))\n .catch(() => dispatch({\n type: OPEN_ERRORED\n }));\n };\n}\n\nexport function closeFolder(id) {\n return function(dispatch) {\n dispatch({\n type: FOLDER_CLOSED,\n id\n });\n };\n}\n\nexport function moveFolder(folderID, destination_id, destinationParentType, position ) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_FOLDER\n });\n\n return fetch(`/document_folders/${folderID}/move`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n document_folder: {\n destination_id,\n position\n }\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(() => {\n dispatch({\n type: MOVE_FOLDER_SUCCESS\n });\n })\n .catch(() => dispatch({\n type: MOVE_FOLDER_ERRORED\n }));\n }\n}\n\nexport function updateFolder(id, attributes) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_FOLDER\n });\n\n return fetch(`/document_folders/${id}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify(attributes)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(folder => {\n dispatch({\n type: PATCH_SUCCESS,\n folder\n });\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n }\n}\n\nexport function deleteFolder(folderId, parentType, parentId) {\n return function(dispatch, getState) {\n dispatch({\n type: DELETE_FOLDER,\n id: folderId\n });\n\n fetch(`/document_folders/${folderId}`, {\n method: 'DELETE',\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => response.json())\n .then((descendants) => {\n dispatch(closeDocumentFolders(descendants));\n dispatch({\n type: DELETE_SUCCESS,\n id: folderId\n });\n if (parentType === 'Project') {\n dispatch(loadProject(getState().project.id));\n }\n if (parentType === 'DocumentFolder' && getState().folders.openFolderContents[parentId]) {\n dispatch(openFolder(parentId))\n }\n })\n .catch(() => dispatch({\n type: DELETE_ERRORED,\n id: folderId\n }));\n };\n}\n\nexport function addTree( parentId, parentType, tree) {\n return function(dispatch, getState) {\n dispatch({\n type: ADD_TREE\n });\n\n fetch(`/document_folders/${parentId}/add_tree`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n document_folder: {\n parent_id: parentId,\n parent_type: parentType,\n tree \n }\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => dispatch(loadProject(getState().project.id)))\n .then(() => dispatch({\n type: ADD_TREE_SUCCESS\n }))\n .catch(() => dispatch({\n type: ADD_TREE_ERRORED\n }));\n }\n}","import {\n TEXT_RESOURCE_TYPE,\n CANVAS_RESOURCE_TYPE,\n loadProject,\n IMAGE_UPLOAD_STARTED,\n IMAGE_UPLOAD_COMPLETE,\n IMAGE_UPLOAD_ERRORED,\n IMAGE_UPLOAD_TIMEOUT,\n IMAGE_UPLOAD_TO_RAILS_SUCCESS,\n IMAGE_UPLOAD_DOC_CREATED,\n} from './project';\nimport {\n addLink,\n selectSidebarTarget,\n closeSidebarTarget,\n refreshTarget,\n closeDocumentTargets,\n refreshTargetByDocumentID,\n closeTarget\n} from './annotationViewer';\nimport {\n updateEditorState,\n selectHighlight,\n setHighlightSelectMode\n} from './textEditor';\nimport { deleteFolder } from './folders';\nimport {\n setAddTileSourceMode,\n UPLOAD_SOURCE_TYPE,\n PAGE_TO_CHANGE,\n RENAME_LAYER_SUCCESS,\n TOGGLE_EDIT_LAYER_NAME,\n} from './canvasEditor';\nimport fetchWithTimeout from './fetch';\nimport retryFetch from 'fetch-retry';\nimport { defaultRequestTimeout } from './constants';\n\nexport const DEFAULT_LAYOUT = 'default';\nexport const TEXT_HIGHLIGHT_DELETE = 'TEXT_HIGHLIGHT_DELETE';\nexport const CANVAS_HIGHLIGHT_DELETE = 'CANVAS_HIGHLIGHT_DELETE';\nexport const DOCUMENT_DELETE = 'DOCUMENT_DELETE';\nexport const FOLDER_DELETE = 'FOLDER_DELETE';\nexport const OPEN_DOCUMENT = 'document_grid/OPEN_DOCUMENT';\nexport const OPEN_DOCUMENT_SUCCESS = 'document_grid/OPEN_DOCUMENT_SUCCESS';\nexport const OPEN_DOCUMENT_ERRORED = 'document_grid/OPEN_DOCUMENT_ERRORED';\nexport const CLOSE_DOCUMENT = 'document_grid/CLOSE_DOCUMENT';\nexport const REPLACE_DOCUMENT = 'document_grid/REPLACE_DOCUMENT';\nexport const CLEAR_RESOURCES = 'document_grid/CLEAR_RESOURCES';\nexport const ADD_HIGHLIGHT = 'document_grid/ADD_HIGHLIGHT';\nexport const ADD_HIGHLIGHT_SUCCESS = 'document_grid/ADD_HIGHLIGHT_SUCCESS';\nexport const ADD_HIGHLIGHT_ERRORED = 'document_grid/ADD_HIGHLIGHT_ERRORED';\nexport const DELETE_HIGHLIGHT = 'document_grid/DELETE_HIGHLIGHT';\nexport const DELETE_HIGHLIGHT_ERRORED = 'document_grid/DELETE_HIGHLIGHT_ERRORED';\nexport const DELETE_HIGHLIGHT_SUCCESS = 'document_grid/DELETE_HIGHLIGHT_SUCCESS';\nexport const UPDATE_HIGHLIGHT = 'document_grid/UPDATE_HIGHLIGHT';\nexport const UPDATE_HIGHLIGHT_ERRORED = 'document_grid/UPDATE_HIGHLIGHT_ERRORED';\nexport const UPDATE_HIGHLIGHT_SUCCESS = 'document_grid/UPDATE_HIGHLIGHT_SUCCESS';\nexport const DUPLICATE_HIGHLIGHTS = 'document_grid/DUPLICATE_HIGHLIGHTS';\nexport const DUPLICATE_HIGHLIGHTS_SUCCESS = 'document_grid/DUPLICATE_HIGHLIGHTS_SUCCESS';\nexport const DUPLICATE_HIGHLIGHTS_ERRORED = 'document_grid/DUPLICATE_HIGHLIGHTS_ERRORED';\nexport const MOVE_DOCUMENT = 'document_grid/MOVE_DOCUMENT';\nexport const MOVE_DOCUMENT_SUCCESS = 'document_grid/MOVE_DOCUMENT_SUCCESS';\nexport const MOVE_DOCUMENT_ERRORED = 'document_grid/MOVE_DOCUMENT_ERRORED';\nexport const UPDATE_DOCUMENT = 'document_grid/UPDATE_CONTENT';\nexport const CHECK_IN_DOCS = 'document_grid/CHECK_IN_DOCS';\nexport const UPDATE_SNACK_BAR = 'document_grid/UPDATE_SNACK_BAR';\nexport const PATCH_SUCCESS = 'document_grid/PATCH_SUCCESS';\nexport const PATCH_ERRORED = 'document_grid/PATCH_ERRORED';\nexport const NEW_DOCUMENT = 'document_grid/NEW_DOCUMENT';\nexport const POST_SUCCESS = 'document_grid/POST_SUCCESS';\nexport const POST_ERRORED = 'document_grid/POST_ERRORED';\nexport const DELETE_DOCUMENT = 'document_grid/DELETE_DOCUMENT';\nexport const DELETE_SUCCESS = 'document_grid/DELETE_SUCCESS';\nexport const DELETE_ERRORED = 'document_grid/DELETE_ERRORED';\nexport const OPEN_DELETE_DIALOG = 'document_grid/OPEN_DELETE_DIALOG';\nexport const CLOSE_DELETE_DIALOG = 'document_grid/CLOSE_DELETE_DIALOG';\nexport const ADD_IMAGE_TO_DOCUMENT = 'document_grid/ADD_IMAGE_TO_DOCUMENT';\nexport const ADD_IMAGE_SUCCESS = 'document_grid/ADD_IMAGE_SUCCESS';\nexport const ADD_IMAGE_ERRORED = 'document_grid/ADD_IMAGE_ERRORED';\nexport const SET_CURRENT_LAYOUT = 'document_grid/SET_CURRENT_LAYOUT';\nexport const MOVE_DOCUMENT_WINDOW = 'document_grid/MOVE_DOCUMENT_WINDOW';\nexport const CANVAS_LAYER_DELETE = 'document_grid/CANVAS_LAYER_DELETE';\nexport const REFRESH_DOCUMENTS = 'document_grid/REFRESH_DOCUMENTS';\nexport const GET_CURRENT_DOC_CONTENT = 'document_grid/GET_CURRENT_DOC_CONTENT';\nexport const GET_CURRENT_DOC_CONTENT_SUCCESS = 'document_grid/GET_CURRENT_DOC_CONTENT_SUCCESS';\nexport const GET_CURRENT_DOC_CONTENT_ERRORED = 'document_grid/GET_CURRENT_DOC_CONTENT_ERRORED';\nexport const FETCH_LOCK_SUCCESS = 'document_grid/FETCH_LOCK_SUCCESS';\nexport const FETCH_LOCK_ERRORED = 'document_grid/FETCH_LOCK_ERRORED';\nexport const FROM_IMAGE_SUCCESS = 'document_grid/FROM_IMAGE_SUCCESS';\n\n\nexport const layoutOptions = [\n { rows: 1, cols: 1, description: '1 x 1' },\n { rows: 1, cols: 2, description: '1 x 2' },\n { rows: 2, cols: 2, description: '2 x 2' },\n { rows: 3, cols: 3, description: '3 x 3' }\n];\n\nexport const MAX_EXCERPT_LENGTH = 80;\n\nconst initialState = {\n layout: DEFAULT_LAYOUT,\n openDocuments: [],\n loading: false,\n highlightsLoading: false,\n errored: false,\n deleteDialogOpen: false,\n deleteDialogTitle: 'Confirm Delete',\n deleteDialogBody: 'Are you sure you want to delete this item?',\n deleteDialogSubmit: 'Delete',\n deleteDialogPayload: null,\n deleteDialogKind: null,\n snackBarOpen: false,\n snackBarMessage: null,\n currentLayout: 2\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case ADD_HIGHLIGHT:\n case DELETE_HIGHLIGHT:\n case DUPLICATE_HIGHLIGHTS:\n return {\n ...state,\n highlightsLoading: true,\n loading: true\n }\n case UPDATE_HIGHLIGHT:\n return {\n ...state,\n highlightsLoading: action.shouldStartLoading,\n loading: action.shouldStartLoading\n }\n case OPEN_DOCUMENT:\n case NEW_DOCUMENT:\n case DELETE_DOCUMENT:\n case MOVE_DOCUMENT:\n return {\n ...state,\n loading: true\n }\n\n case UPDATE_DOCUMENT:\n return state\n\n case OPEN_DOCUMENT_SUCCESS:\n case POST_SUCCESS:\n let openDocumentsCopy = state.openDocuments.slice(0);\n state.openDocuments.forEach((document, index) => {\n if (+document.id === +action.document.id)\n openDocumentsCopy.splice(index, 1, Object.assign({timeOpened: document.timeOpened}, action.document));\n });\n let positionToSplice = action.documentPosition;\n openDocumentsCopy.splice(positionToSplice, 0, Object.assign({timeOpened: Date.now(), firstTarget: action.firstTarget }, action.document));\n return {\n ...state,\n openDocuments: openDocumentsCopy,\n loading: false\n }\n\n case FROM_IMAGE_SUCCESS:\n return {\n ...state,\n loading: false\n }\n\n case OPEN_DOCUMENT_ERRORED:\n case PATCH_ERRORED:\n case POST_ERRORED:\n case MOVE_DOCUMENT_ERRORED:\n case DELETE_ERRORED:\n console.log('document error');\n console.log(action.type);\n return {\n ...state,\n loading: false,\n errored: true\n }\n\n \n case DELETE_HIGHLIGHT_ERRORED:\n case UPDATE_HIGHLIGHT_ERRORED:\n case DUPLICATE_HIGHLIGHTS_ERRORED:\n case ADD_HIGHLIGHT_ERRORED:\n console.log('highlight error');\n console.log(action.type);\n return {\n ...state,\n loading: false,\n highlightsLoading: false,\n errored: true\n }\n\n case CHECK_IN_DOCS: {\n const nextOpenDocs = [ ...state.openDocuments ]\n nextOpenDocs.forEach( resource => {\n if( action.docIDs.find( docID => docID === resource.document_id ) ) {\n resource.locked=false\n resource.locked_by_me=false\n resource.locked_by_user_name=null\n }\n })\n\n const numDocs = action.docIDs.length\n const snackBarMessage = numDocs > 0 ? `Checked in ${numDocs} documents.` : \"All your documents are checked in.\"\n\n return {\n ...state,\n snackBarOpen: true,\n snackBarMessage,\n openDocuments: nextOpenDocs\n };\n }\n\n case UPDATE_SNACK_BAR: {\n const { snackBarOpen, snackBarMessage } = action\n return {\n ...state,\n snackBarOpen,\n snackBarMessage \n }\n }\n\n case REFRESH_DOCUMENTS:\n let preRefreshDocumentsCopy = state.openDocuments.slice(0);\n state.openDocuments.forEach((document, index) => {\n if (+document.id === +action.document.id \n && action.timeOpened \n && document.timeOpened !== action.timeOpened) {\n const { timeOpened } = document;\n preRefreshDocumentsCopy.splice(index, 1, Object.assign({timeOpened}, action.document));\n }\n });\n return {\n ...state,\n openDocuments: preRefreshDocumentsCopy\n };\n \n case PATCH_SUCCESS:\n case REPLACE_DOCUMENT:\n let preReplaceDocumentsCopy = state.openDocuments.slice(0);\n if (!action.shouldSkipReplacement) {\n state.openDocuments.forEach((document, index) => {\n if (+document.id === +action.document.id) {\n const { timeOpened } = document;\n preReplaceDocumentsCopy.splice(index, 1, Object.assign({timeOpened}, action.document));\n }\n });\n }\n return {\n ...state,\n loading: state.highlightsLoading,\n openDocuments: preReplaceDocumentsCopy\n };\n\n case CLOSE_DOCUMENT:\n let preCloseDocumentsCopy = state.openDocuments.slice(0);\n let toCloseIndex = state.openDocuments.findIndex(resource => {\n return ( resource.id.toString() === action.documentId.toString() &&\n resource.timeOpened === action.timeOpened )\n });\n if (toCloseIndex >= 0) {\n preCloseDocumentsCopy.splice(toCloseIndex, 1);\n }\n return {\n ...state,\n openDocuments: preCloseDocumentsCopy\n };\n\n case DELETE_SUCCESS:\n const targetID = action.documentId.toString();\n const openDocuments = state.openDocuments.filter( openDocument => ( openDocument.id.toString() !== targetID ) )\n return {\n ...state,\n openDocuments,\n loading: false,\n };\n\n case CLEAR_RESOURCES:\n return {\n ...state,\n openDocuments: []\n };\n\n case ADD_HIGHLIGHT_SUCCESS:\n let resourceIndex = state.openDocuments.findIndex(resource => resource.id === action.document_id);\n let updatedopenDocuments = state.openDocuments.slice(0);\n if (resourceIndex >= 0) {\n let updatedResource = Object.assign(updatedopenDocuments[resourceIndex], {});\n updatedResource.highlight_map[action.highlight_id] = {\n id: action.id,\n target: action.highlightTarget,\n color: action.color,\n excerpt: action.excerpt,\n links: []\n };\n updatedopenDocuments.splice(resourceIndex, 1, updatedResource);\n }\n return {\n ...state,\n openDocuments: updatedopenDocuments,\n loading: false,\n highlightsLoading: false,\n }\n\n case DUPLICATE_HIGHLIGHTS_SUCCESS:\n let duplicatesUpdatedOpenDocuments = state.openDocuments.slice(0);\n action.highlights.forEach(highlight => {\n let resourceIndex = state.openDocuments.findIndex(resource => resource.id === action.document_id);\n if (resourceIndex >= 0) {\n let updatedResource = Object.assign(duplicatesUpdatedOpenDocuments[resourceIndex], {});\n updatedResource.highlight_map[highlight.uid] = {\n id: highlight.id,\n target: highlight.target,\n color: highlight.color,\n excerpt: highlight.excerpt,\n links: highlight.links\n };\n duplicatesUpdatedOpenDocuments.splice(resourceIndex, 1, updatedResource);\n }\n });\n return {\n ...state,\n openDocuments: duplicatesUpdatedOpenDocuments,\n loading: false,\n highlightsLoading: false,\n }\n\n case UPDATE_HIGHLIGHT_SUCCESS:\n let hResourceIndex = state.openDocuments.findIndex(resource => resource.id === action.document_id);\n let hUpdatedOpenDocuments = state.openDocuments.slice(0);\n if (hResourceIndex >= 0) {\n let hUpdatedResource = Object.assign(hUpdatedOpenDocuments[hResourceIndex], {});\n if (hUpdatedResource.highlight_map[action.highlight_id])\n hUpdatedResource.highlight_map[action.highlight_id].color = action.color;\n hUpdatedOpenDocuments.splice(hResourceIndex, 1, hUpdatedResource);\n }\n return {\n ...state,\n openDocuments: hUpdatedOpenDocuments,\n highlightsLoading: false,\n loading: false\n }\n\n case MOVE_DOCUMENT_SUCCESS:\n case DELETE_HIGHLIGHT_SUCCESS:\n return {\n ...state,\n highlightsLoading: false,\n loading: false\n }\n\n case OPEN_DELETE_DIALOG:\n return {\n ...state,\n deleteDialogOpen: true,\n deleteDialogTitle: action.title,\n deleteDialogBody: action.body,\n deleteDialogSubmit: action.submit,\n deleteDialogPayload: action.payload,\n deleteDialogKind: action.kind\n };\n\n case CLOSE_DELETE_DIALOG:\n return {\n ...state,\n deleteDialogOpen: false,\n deleteDialogTitle: initialState.deleteDialogTitle,\n deleteDialogBody: initialState.deleteDialogBody,\n deleteDialogSubmit: initialState.deleteDialogSubmit,\n deleteDialogPayload: initialState.deleteDialogPayload,\n deleteDialogKind: initialState.deleteDialogKind\n };\n\n case SET_CURRENT_LAYOUT:\n return {\n ...state,\n currentLayout: action.index\n };\n\n case MOVE_DOCUMENT_WINDOW:\n let draggedDocument = state.openDocuments[action.dragIndex];\n let openDocumentsMoveCopy = state.openDocuments.slice(0);\n openDocumentsMoveCopy.splice(action.dragIndex, 1);\n openDocumentsMoveCopy.splice(action.moveIndex, 0, draggedDocument);\n return {\n ...state,\n openDocuments: openDocumentsMoveCopy\n };\n\n case FETCH_LOCK_SUCCESS:\n const {\n documentId,\n locked,\n locked_by_me,\n locked_by_user_name,\n } = action;\n const openDocumentsFetchUpdated = state.openDocuments.map((doc) => {\n if (+doc.id === +documentId) {\n return {\n ...doc,\n locked,\n locked_by_me,\n locked_by_user_name,\n };\n } else return doc;\n });\n return {\n ...state,\n openDocuments: openDocumentsFetchUpdated\n };\n\n default:\n return state;\n }\n}\n\nexport function openDocument(documentId, firstTarget, inContents, pos) {\n return function(dispatch, getState) {\n let documentPosition = getState().documentGrid.openDocuments.length;\n if (!inContents && pos) {\n documentPosition = pos;\n }\n dispatch({\n type: OPEN_DOCUMENT\n });\n\n fetch(`/documents/${documentId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n return document;\n })\n .then(document => dispatch({\n type: OPEN_DOCUMENT_SUCCESS,\n document,\n firstTarget,\n documentPosition\n }))\n .catch(() => dispatch({\n type: OPEN_DOCUMENT_ERRORED\n }));\n };\n}\n\nexport function closeAllResources() {\n return function(dispatch) {\n dispatch({\n type: CLEAR_RESOURCES\n });\n };\n}\n\nexport function addHighlight(document_id, highlight_id, highlightTarget, color, excerpt, callback) {\n return function(dispatch) {\n dispatch({\n type: ADD_HIGHLIGHT\n });\n\n fetch('/highlights', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n document_id: document_id,\n uid: highlight_id,\n target: highlightTarget,\n color: color,\n excerpt: excerpt\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(savedHighlight => {\n dispatch({\n type: ADD_HIGHLIGHT_SUCCESS,\n document_id,\n highlight_id,\n highlightTarget,\n color,\n excerpt,\n id: savedHighlight.id\n });\n return savedHighlight\n })\n .then(savedHighlight => {\n if (callback) {\n callback(savedHighlight);\n }\n })\n .catch(() => dispatch({\n type: ADD_HIGHLIGHT_ERRORED\n }));\n }\n}\n\nexport function deleteHighlights(highlights = []) {\n return function(dispatch, getState) {\n highlights.forEach(highlight => {\n if (highlight && highlight.id) {\n fetch(`/highlights/${highlight.id}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'DELETE'\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: DELETE_HIGHLIGHT_SUCCESS,\n uid: highlight.uid,\n document_id: highlight.document_id\n });\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (+sidebarTarget.document_id === +highlight.document_id && +sidebarTarget.highlight_id === +highlight.id)) {\n dispatch(closeSidebarTarget());\n }\n else if (sidebarTarget && sidebarTarget.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false)) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (+target.document_id === +highlight.document_id && +target.highlight_id === +highlight.id) {\n dispatch(closeTarget(highlight.document_id, highlight.id));\n }\n else if(target.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false)) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .catch(() => dispatch({\n type: DELETE_HIGHLIGHT_ERRORED\n }));\n }\n });\n }\n}\n\nexport function updateHighlight(id, attributes, callback) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_HIGHLIGHT,\n shouldStartLoading: !Object.prototype.hasOwnProperty.call(attributes, 'excerpt'),\n });\n\n return fetch(`/highlights/${id}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify(attributes)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(highlight => {\n if (!Object.prototype.hasOwnProperty.call(attributes, 'excerpt')) {\n dispatch(refreshCurrentDocContent(highlight.document_id));\n }\n dispatch({\n type: UPDATE_HIGHLIGHT_SUCCESS,\n color: highlight.color,\n highlight_id: highlight.uid,\n document_id: highlight.document_id\n });\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && ((+sidebarTarget.document_id === +highlight.document_id && +sidebarTarget.highlight_id === +highlight.id) || sidebarTarget.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if ((+target.document_id === +highlight.document_id && +target.highlight_id === +highlight.id) || target.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false)) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .then(highlight => {\n if (callback) {\n callback(highlight);\n }\n })\n .catch(() => dispatch({\n type: UPDATE_HIGHLIGHT_ERRORED\n }));\n }\n}\n\nexport function duplicateHighlights(highlights, document_id) {\n return function(dispatch) {\n dispatch({\n type: DUPLICATE_HIGHLIGHTS\n });\n\n fetch('/highlights/duplicate', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n highlights,\n document_id\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(newHighlights => {\n dispatch({\n type: DUPLICATE_HIGHLIGHTS_SUCCESS,\n highlights: newHighlights,\n document_id\n });\n })\n .catch(() => dispatch({\n type: DUPLICATE_HIGHLIGHTS_ERRORED\n }));\n }\n}\n\n\nexport function createTextDocument(parentId, parentType, callback) {\n return function(dispatch, getState) {\n dispatch({\n type: NEW_DOCUMENT\n });\n\n // Annotation title handling\n let title = parentType === 'Document' ? 'New Annotation' : 'Untitled Document';\n if (\n parentType === 'Document' \n && getState().annotationViewer\n && Array.isArray(getState().annotationViewer.selectedTargets)\n && getState().annotationViewer.selectedTargets.length > 0\n ) {\n getState().annotationViewer.selectedTargets.forEach(target => {\n if (target.document_id === parentId) {\n title = `Annotation for ${target.document_title}`;\n }\n });\n }\n\n fetch('/documents', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n title,\n project_id: getState().project.id,\n document_kind: TEXT_RESOURCE_TYPE,\n content: {type: 'doc', content: [{\"type\":\"paragraph\",\"content\":[]}]},\n parent_id: parentId,\n parent_type: parentType\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n dispatch({\n type: POST_SUCCESS,\n document,\n documentPosition: getState().documentGrid.openDocuments.length\n });\n if (parentType === 'Project') // refresh project if document has been added to its table of contents\n dispatch(loadProject(getState().project.id));\n return document;\n })\n .then(document => {\n if (callback) {\n callback(document);\n }\n })\n .catch(() => dispatch({\n type: POST_ERRORED\n }));\n }\n}\n\nexport function createTextDocumentWithLink(origin, parentId = null, parentType = null) {\n return function(dispatch) {\n dispatch(createTextDocument(parentId, parentType, document => {\n dispatch(addLink(origin, {\n linkable_id: document.id,\n linkable_type: 'Document'\n }, null, origin.linkable_type));\n }));\n }\n}\n\nexport function moveDocument(documentId, destination_id, destinationParentType, position ) {\n return function(dispatch, getState) {\n dispatch({\n type: MOVE_DOCUMENT\n });\n\n return fetch(`/documents/${documentId}/move`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n document: {\n destination_id,\n position\n }\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(() => {\n dispatch({\n type: MOVE_DOCUMENT_SUCCESS\n });\n })\n .catch(() => dispatch({\n type: MOVE_DOCUMENT_ERRORED\n }));\n }\n}\n\nexport function refreshDocuments(document, timeOpened) {\n return function(dispatch) {\n dispatch({\n type: REFRESH_DOCUMENTS,\n document,\n timeOpened,\n });\n }\n}\n\nexport function updateDocument(documentId, attributes, options) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_DOCUMENT\n });\n\n // patch via the lock method if we're adjusting the state of the lock\n const url = ( options && options.adjustLock ) ? `/documents/${documentId}/lock` : `/documents/${documentId}`;\n\n return fetch(url, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify(attributes)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n dispatch({\n type: PATCH_SUCCESS,\n document,\n shouldSkipReplacement: (!!options && !!options.refreshDocumentContent && !!options.timeOpened),\n });\n if (options && options.adjustLock) {\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n if (attributes.locked === false && options.instanceKey) {\n dispatch(selectHighlight(options.instanceKey, null));\n dispatch(setHighlightSelectMode(options.instanceKey, false));\n }\n }\n if (options && options.replaceThisDocument) {\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n }\n if (options && options.refreshLists) {\n if (getState().project.contentsChildren.map(child => child.document_id).includes(documentId)) {\n dispatch(loadProject(getState().project.id));\n }\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.document_id === documentId || sidebarTarget.links_to.map(link => link.document_id).includes(documentId))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.document_id === documentId || target.links_to.map(link => link.document_id).includes(documentId)) {\n dispatch(refreshTarget(index));\n }\n });\n }\n if (options && options.refreshDocumentContent && options.timeOpened) {\n dispatch(refreshDocuments(document, options.timeOpened))\n }\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n }\n}\n\nexport function setDocumentThumbnail({\n documentId,\n image_url,\n }) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_DOCUMENT\n });\n\n fetchWithTimeout(`/documents/${documentId}/set_thumbnail`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n image_url\n }),\n retryDelay: 12000,\n })\n .then(response => {\n if (!response.ok) {\n if (response.status === 408) {\n throw Error('Unable to set thumbnail');\n } else {\n throw Error(response.statusText);\n }\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n dispatch({\n type: PATCH_SUCCESS,\n document\n });\n if (getState().project.contentsChildren.map(child => child.document_id).includes(documentId)) {\n dispatch(loadProject(getState().project.id));\n }\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.document_id === documentId || sidebarTarget.links_to.map(link => link.document_id).includes(documentId))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.document_id === documentId || target.links_to.map(link => link.document_id).includes(documentId)) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .catch(() => {\n dispatch({\n type: PATCH_ERRORED\n });\n });\n }\n}\n\nexport function setHighlightThumbnail(highlightId, image_url, coords, svg_string) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_HIGHLIGHT\n });\n\n fetch(`/highlights/${highlightId}/set_thumbnail`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n image_url,\n coords,\n svg_string\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(highlight => {\n dispatch({\n type: UPDATE_HIGHLIGHT_SUCCESS\n });\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && ((+sidebarTarget.document_id === +highlight.document_id && +sidebarTarget.highlight_id === +highlight.id) || sidebarTarget.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if ((+target.document_id === +highlight.document_id && +target.highlight_id === +highlight.id) || target.links_to.reduce((matched, link) => matched || (+link.document_id === +highlight.document_id && +link.highlight_id === +highlight.id), false)) {\n dispatch(refreshTarget(index));\n }\n });\n })\n .catch(() => dispatch({\n type: UPDATE_HIGHLIGHT_ERRORED\n }));\n }\n}\n\nexport function createCanvasDocument({ parentId, parentType, callback }) {\n return function(dispatch, getState) {\n dispatch({\n type: NEW_DOCUMENT\n });\n\n fetch('/documents', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n title: 'Untitled Image',\n project_id: getState().project.id,\n document_kind: CANVAS_RESOURCE_TYPE,\n content: { tileSources: [] },\n parent_id: parentId,\n parent_type: parentType\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n dispatch({\n type: POST_SUCCESS,\n document,\n documentPosition: getState().documentGrid.openDocuments.length\n });\n dispatch(setAddTileSourceMode(document.id, UPLOAD_SOURCE_TYPE));\n if (parentType === 'Project') // refresh project if document has been added to its table of contents\n dispatch(loadProject(getState().project.id));\n return document;\n })\n .then(document => {\n if (callback) {\n callback(document);\n }\n })\n .catch(() => dispatch({\n type: POST_ERRORED\n }));\n }\n}\n\nexport function closeDocument(documentId, timeOpened) {\n return function(dispatch) {\n dispatch({\n type: CLOSE_DOCUMENT,\n documentId,\n timeOpened\n });\n };\n}\n\nexport function replaceDocument(document) {\n return function(dispatch) {\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n };\n}\n\nexport function deleteDocument(documentId) {\n return function(dispatch, getState) {\n dispatch({\n type: DELETE_DOCUMENT\n });\n\n fetch(`/documents/${documentId}`, {\n method: 'DELETE',\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: DELETE_SUCCESS,\n documentId\n });\n dispatch(closeDocumentTargets(documentId));\n dispatch(refreshTargetByDocumentID(documentId));\n dispatch(loadProject(getState().project.id));\n })\n .catch(() => dispatch({\n type: DELETE_ERRORED\n }));\n };\n}\n\nexport function openDeleteDialog(title, body, submit, payload, kind) {\n return function(dispatch) {\n dispatch({\n type: OPEN_DELETE_DIALOG,\n title,\n body,\n submit,\n payload,\n kind\n });\n }\n}\n\nexport function closeDeleteDialog() {\n return function(dispatch) {\n dispatch({\n type: CLOSE_DELETE_DIALOG\n });\n }\n}\n\n// close any documents found in these folders\nexport function closeDocumentFolders( folders ) {\n return function(dispatch, getState) {\n const openDocuments = getState().documentGrid.openDocuments\n openDocuments.forEach( (document) => {\n const found = folders.find( folderID => folderID === document.parent_id )\n if( found ) {\n dispatch(closeDocumentTargets(document.id));\n dispatch(closeDocument(document.id,document.timeOpened));\n dispatch(refreshTargetByDocumentID(document.id));\n }\n })\n }\n}\n\nexport function confirmDeleteDialog() {\n return function(dispatch, getState) {\n const payload = getState().documentGrid.deleteDialogPayload;\n switch (getState().documentGrid.deleteDialogKind) {\n case TEXT_HIGHLIGHT_DELETE:\n const { editorStates } = getState().textEditor;\n if (payload.transaction && payload.document_id && payload.instanceKey) {\n const newState = editorStates[payload.instanceKey].apply(payload.transaction);\n dispatch(updateEditorState(payload.instanceKey, newState));\n dispatch(updateDocument(\n payload.document_id,\n {content: {type: 'doc', content: payload.transaction.doc.content}},\n { refreshDocumentContent: payload.timeOpened ? true : false, timeOpened: payload.timeOpened }\n ));\n dispatch(deleteHighlights(payload.highlights));\n if (payload.highlightsToDuplicate.length > 0) dispatch(duplicateHighlights(payload.highlightsToDuplicate, payload.document_id));\n payload.alteredHighlights.forEach(highlight => {\n dispatch(updateHighlight(highlight.id, {excerpt: highlight.excerpt}));\n });\n dispatch(selectHighlight(payload.instanceKey, null));\n }\n dispatch(closeDeleteDialog());\n break;\n\n case CANVAS_HIGHLIGHT_DELETE:\n dispatch(deleteHighlights(payload.highlights));\n if (payload.canvas) {\n payload.fabricObjects.forEach(object => {\n payload.canvas.remove(object);\n });\n }\n dispatch(closeDeleteDialog());\n break;\n \n case CANVAS_LAYER_DELETE:\n dispatch(deleteLayer(payload));\n dispatch(closeDeleteDialog());\n break;\n \n case DOCUMENT_DELETE:\n dispatch(deleteDocument(payload.documentId));\n dispatch(closeDeleteDialog());\n break;\n\n case FOLDER_DELETE:\n // TODO close any document windows that are children of this folder and any target windows related to those documents\n dispatch(deleteFolder(payload.folderId, payload.parentType, payload.parentId));\n dispatch(closeDeleteDialog());\n break;\n\n default:\n dispatch(closeDeleteDialog());\n }\n }\n}\n\nexport function setCurrentLayout(event, index) {\n return function(dispatch) {\n dispatch({\n type: SET_CURRENT_LAYOUT,\n index\n });\n };\n}\n\nexport function moveDocumentWindow(dragIndex, moveIndex) {\n return function(dispatch) {\n dispatch({\n type: MOVE_DOCUMENT_WINDOW,\n dragIndex,\n moveIndex\n });\n };\n}\n\nexport function updateSnackBar(snackBarOpen,snackBarMessage) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_SNACK_BAR,\n snackBarMessage, \n snackBarOpen\n });\n };\n}\n\nexport function moveLayer({ documentId, origin, direction, editorKey }) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_DOCUMENT\n });\n\n fetch(`/documents/${documentId}/move_layer`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n origin,\n direction,\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n if (getState().project.contentsChildren.map(child => child.document_id).includes(documentId)) {\n dispatch(loadProject(getState().project.id));\n }\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.document_id === documentId || sidebarTarget.links_to.map(link => link.document_id).includes(documentId))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.document_id === documentId || target.links_to.map(link => link.document_id).includes(documentId)) {\n dispatch(refreshTarget(index));\n }\n });\n if (document.content && document.content.tileSources && document.content.tileSources[0]) {\n const firstTileSource = document.content.tileSources[0];\n // Update doc thumbnail\n let imageUrlForThumbnail = '';\n if (typeof firstTileSource === 'string') {\n // Tile source is a string, so it's IIIF\n let resourceURL = firstTileSource.replace('http:', 'https:').replace('/info.json', '');\n imageUrlForThumbnail = resourceURL + '/full/!400,400/0/default.png';\n } else if (firstTileSource.url && firstTileSource.type === 'image') {\n imageUrlForThumbnail = firstTileSource.url;\n } else {\n imageUrlForThumbnail = firstTileSource;\n }\n dispatch(setDocumentThumbnail({\n documentId,\n image_url: imageUrlForThumbnail,\n }));\n }\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n })\n .then(() => {\n dispatch({\n type: PAGE_TO_CHANGE,\n pageToChange: origin + direction,\n editorKey,\n });\n dispatch({\n type: PATCH_SUCCESS,\n document\n });\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n }\n}\n\n\nexport function deleteLayer({ documentId, layer, editorKey }) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_DOCUMENT\n });\n\n fetch(`/documents/${documentId}/delete_layer`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n layer,\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n if (getState().project.contentsChildren.map(child => child.document_id).includes(documentId)) {\n dispatch(loadProject(getState().project.id));\n }\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.document_id === documentId || sidebarTarget.links_to.map(link => link.document_id).includes(documentId))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.document_id === documentId || target.links_to.map(link => link.document_id).includes(documentId)) {\n dispatch(refreshTarget(index));\n }\n });\n if (layer === 0 && document.content && document.content.tileSources && document.content.tileSources[0]) {\n const firstTileSource = document.content.tileSources[0];\n // Update doc thumbnail\n let imageUrlForThumbnail = '';\n if (typeof firstTileSource === 'string') {\n // Tile source is a string, so it's IIIF\n let resourceURL = firstTileSource.replace('http:', 'https:').replace('/info.json', '');\n imageUrlForThumbnail = resourceURL + '/full/!400,400/0/default.png';\n } else if (firstTileSource.url && firstTileSource.type === 'image') {\n imageUrlForThumbnail = firstTileSource.url;\n } else {\n imageUrlForThumbnail = firstTileSource;\n }\n dispatch(setDocumentThumbnail({\n documentId,\n image_url: imageUrlForThumbnail\n }));\n }\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n })\n .then(() => {\n dispatch({\n type: PAGE_TO_CHANGE,\n pageToChange: 0,\n editorKey,\n });\n dispatch({\n type: PATCH_SUCCESS,\n document\n });\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n }\n}\n\n\nexport function renameLayer({ documentId, layer, name, editorKey }) {\n return function(dispatch, getState) {\n dispatch({\n type: UPDATE_DOCUMENT\n });\n\n fetch(`/documents/${documentId}/rename_layer`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify({\n layer,\n name,\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => {\n if (getState().project.contentsChildren.map(child => child.document_id).includes(documentId)) {\n dispatch(loadProject(getState().project.id));\n }\n const sidebarTarget = getState().annotationViewer.sidebarTarget;\n if (sidebarTarget && (sidebarTarget.document_id === documentId || sidebarTarget.links_to.map(link => link.document_id).includes(documentId))) {\n dispatch(selectSidebarTarget(sidebarTarget));\n }\n getState().annotationViewer.selectedTargets.forEach((target, index) => {\n if (target.document_id === documentId || target.links_to.map(link => link.document_id).includes(documentId)) {\n dispatch(refreshTarget(index));\n }\n });\n dispatch({\n type: REPLACE_DOCUMENT,\n document\n });\n })\n .then(() => {\n dispatch({\n type: PAGE_TO_CHANGE,\n pageToChange: layer,\n editorKey,\n });\n dispatch({\n type: TOGGLE_EDIT_LAYER_NAME,\n editorKey,\n value: false,\n });\n dispatch({\n type: RENAME_LAYER_SUCCESS,\n });\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n }\n}\n\nexport function refreshCurrentDocContent(documentId) {\n return function(dispatch) {\n dispatch({\n type: GET_CURRENT_DOC_CONTENT\n });\n\n fetch(`/documents/${documentId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => dispatch({\n type: REPLACE_DOCUMENT,\n document,\n }))\n .catch(() => dispatch({\n type: GET_CURRENT_DOC_CONTENT_ERRORED\n }));\n };\n}\n\nexport function fetchLock(documentId) {\n return function(dispatch) {\n fetch(`/documents/${documentId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(document => dispatch({\n type: FETCH_LOCK_SUCCESS,\n documentId,\n locked: document.locked,\n locked_by_me: document.locked_by_me,\n locked_by_user_name: document.locked_by_user_name,\n }))\n .catch(() => dispatch({\n type: FETCH_LOCK_ERRORED\n }));\n };\n}\n\nfunction createCanvasDocWithImage ({ parentId, parentType, signedId, url, filename }) {\n return async function(dispatch, getState) {\n dispatch({\n type: NEW_DOCUMENT\n });\n try {\n const response = await fetchWithTimeout('/documents/create_batch', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n title: 'Loading',\n project_id: getState().project.id,\n document_kind: CANVAS_RESOURCE_TYPE,\n content: {\n tileSources: [\n {\n type: 'image',\n url,\n name: filename,\n }\n ]\n },\n parent_id: parentId,\n parent_type: parentType,\n locked: false,\n images: [signedId],\n mode: 'batch',\n }),\n })\n if (!response.ok) {\n throw Error(response.statusText);\n }\n const queuedJob = await response.json();\n dispatch({\n type: FROM_IMAGE_SUCCESS,\n });\n dispatch({\n type: IMAGE_UPLOAD_DOC_CREATED,\n signedId,\n });\n return queuedJob;\n }\n catch(error) {\n let errMsg = error.message;\n if (error.name === 'AbortError') {\n errMsg = 'Upload failed';\n }\n dispatch({\n type: IMAGE_UPLOAD_ERRORED,\n signedId,\n error: errMsg,\n });\n dispatch({\n type: POST_ERRORED\n });\n }\n }\n}\n\nasync function createFolderForBatch({ projectId, newFolderName }) {\n return fetchWithTimeout('/document_folders', {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n title: newFolderName,\n project_id: projectId,\n parent_id: projectId,\n parent_type: 'Project'\n }),\n retryDelay: defaultRequestTimeout,\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response.json();\n })\n}\n\nfunction createMultipleCanvasDocs({ parentId, parentType, signedIds }) {\n return async function(dispatch, getState) {\n try {\n const jobsQueue = await Promise.allSettled(\n signedIds.map(async signedId => {\n try {\n const response = await retryFetch(fetchWithTimeout)(`/images/${signedId}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'GET',\n retryDelay: defaultRequestTimeout,\n retries: 3,\n })\n if (!response.ok) {\n throw Error(response.statusText);\n }\n const image = await response.json();\n const filename = image.blob.filename.substring(\n 0, image.blob.filename.lastIndexOf('.')\n );\n dispatch({\n type: IMAGE_UPLOAD_TO_RAILS_SUCCESS,\n signedId,\n image: image.blob,\n });\n const queuedJob = await dispatch(createCanvasDocWithImage({\n parentId,\n parentType,\n signedId,\n filename,\n url: image.url,\n }));\n return Promise.resolve({ ...queuedJob, signedId });\n } \n catch (error) {\n let errMsg = error.message;\n if (error.name === 'AbortError') {\n errMsg = 'Upload failed';\n }\n dispatch({\n type: IMAGE_UPLOAD_ERRORED,\n signedId,\n error: errMsg,\n });\n return Promise.reject(error);\n }\n })\n );\n let jobs = jobsQueue\n .filter(jobPromise => jobPromise.status === 'fulfilled')\n .map(job => ({\n signed_id: job.value.signedId,\n id: job.value.id,\n }));\n try {\n const response = await retryFetch(fetchWithTimeout)(`/jobs`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'POST',\n body: JSON.stringify({\n jobs\n }),\n retryDelay: defaultRequestTimeout / 4,\n retries: 35,\n retryOn: async (attempt, error, response) => {\n const finishedStatuses = ['complete', 'failed', 'interrupted'];\n const res = await response.json();\n if (attempt > 35) {\n res\n .forEach(job => {\n if (job.status === 'complete') {\n dispatch({\n type: IMAGE_UPLOAD_COMPLETE,\n signedId: job.signed_id,\n });\n } else if (job.status === 'failed' || job.status === 'interrupted') {\n dispatch({\n type: IMAGE_UPLOAD_ERRORED,\n signedId: job.signed_id,\n error: job.status,\n });\n } else {\n dispatch({\n type: IMAGE_UPLOAD_TIMEOUT,\n signedId: job.signed_id,\n error: 'Queued and processing',\n });\n }\n });\n return false;\n }\n res.forEach(job => {\n if (job.status === 'complete') {\n dispatch({\n type: IMAGE_UPLOAD_COMPLETE,\n signedId: job.signed_id,\n });\n } else if (job.status === 'failed' || job.status === 'interrupted') {\n dispatch({\n type: IMAGE_UPLOAD_ERRORED,\n signedId: job.signed_id,\n error: job.status,\n });\n }\n })\n const unfinished = res.some(job => !finishedStatuses.includes(job.status));\n if (error !== null || response.status >= 400 || unfinished) {\n return true;\n }\n },\n })\n if (!response.ok) {\n throw Error(response.statusText);\n }\n } catch (error) {\n console.error(error);\n }\n if (parentType === 'Project') // refresh project if documents added to its table of contents\n dispatch(loadProject(getState().project.id));\n } catch (error) {\n console.error(error);\n }\n }\n}\n\nexport function createBatchImages ({\n projectId,\n signedIds,\n inFolder,\n existingFolder,\n folderId,\n newFolderName,\n}) {\n return async function(dispatch) {\n dispatch({\n type: IMAGE_UPLOAD_STARTED,\n signedIds,\n });\n let parentId = projectId;\n let parentType = 'Project';\n try { \n if (inFolder) {\n if (existingFolder && folderId) {\n parentType = 'DocumentFolder';\n parentId = parseInt(folderId, 10);\n await dispatch(createMultipleCanvasDocs({\n parentId,\n parentType,\n signedIds,\n }));\n } else if (!existingFolder && newFolderName) {\n parentType = 'DocumentFolder';\n const folder = await createFolderForBatch({\n projectId,\n newFolderName,\n });\n await dispatch(createMultipleCanvasDocs({\n parentId: folder.id,\n parentType,\n signedIds,\n }));\n dispatch(loadProject(projectId));\n }\n } else {\n await dispatch(createMultipleCanvasDocs({\n parentId,\n parentType,\n signedIds,\n }));\n }\n } catch (error) {\n console.error(error);\n }\n };\n}","export const SET_HIGHLIGHT_COLOR = 'canvasEditor/SET_HIGHLIGHT_COLOR';\nexport const HIDE_COLOR_PICKER = 'canvasEditor/HIDE_COLOR_PICKER';\nexport const TOGGLE_COLOR_PICKER = 'canvasEditor/TOGGLE_COLOR_PICKER';\nexport const SET_ADD_TILE_SOURCE_MODE = 'canvasEditor/SET_ADD_TILE_SOURCE_MODE';\nexport const SET_IS_PENCIL_MODE = 'canvasEditor/SET_IS_PENCIL_MODE';\nexport const SET_GLOBAL_CANVAS_DISPLAY = 'canvasEditor/SET_GLOBAL_CANVAS_DISPLAY';\nexport const SET_IMAGE_URL = 'canvasEditor/SET_IMAGE_URL';\nexport const TOGGLE_HIGHLIGHTS = 'canvasEditor/TOGGLE_HIGHLIGHTS';\nexport const IIIF_TILE_SOURCE_TYPE = 'iiif';\nexport const IMAGE_URL_SOURCE_TYPE = 'image_url';\nexport const UPLOAD_SOURCE_TYPE = 'upload';\nexport const PAGE_TO_CHANGE = 'canvasEditor/PAGE_TO_CHANGE';\nexport const RENAME_LAYER = 'canvasEditor/RENAME_LAYER';\nexport const RENAME_LAYER_SUCCESS = 'canvasEditor/RENAME_LAYER_SUCCESS';\nexport const TOGGLE_EDIT_LAYER_NAME = 'canvasEditor/TOGGLE_EDIT_LAYER_NAME';\n\nconst initialState = {\n highlightColors: {},\n displayColorPickers: {},\n addTileSourceMode: {},\n highlightsHidden: {},\n imageURLs: {},\n isPencilMode: {},\n globalCanvasDisplay: true,\n pageToChange: {},\n editingLayerName: {},\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case SET_HIGHLIGHT_COLOR:\n let updatedHighlightColors = Object.assign({}, state.highlightColors);\n updatedHighlightColors[action.editorKey] = action.highlightColor;\n return {\n ...state,\n highlightColors: updatedHighlightColors\n };\n\n case HIDE_COLOR_PICKER:\n let updatedDisplayColorPickers = Object.assign({}, state.displayColorPickers);\n updatedDisplayColorPickers[action.editorKey] = false;\n return {\n ...state,\n displayColorPickers: updatedDisplayColorPickers\n };\n\n case TOGGLE_COLOR_PICKER:\n let updatedToggleDisplayColorPickers = Object.assign({}, state.displayColorPickers);\n updatedToggleDisplayColorPickers[action.editorKey] = !updatedToggleDisplayColorPickers[action.editorKey];\n return {\n ...state,\n displayColorPickers: updatedToggleDisplayColorPickers\n };\n\n case SET_ADD_TILE_SOURCE_MODE:\n let updatedAddTileSourceMode = Object.assign({}, state.addTileSourceMode);\n updatedAddTileSourceMode[action.editorKey] = action.mode;\n return {\n ...state,\n addTileSourceMode: updatedAddTileSourceMode\n };\n \n case SET_IMAGE_URL:\n let imageURLs = { ...state.imageURLs };\n imageURLs[action.editorKey] = action.url;\n return {\n ...state,\n imageURLs\n };\n\n case SET_IS_PENCIL_MODE:\n let updatedPencilMode = Object.assign({}, state.isPencilMode);\n updatedPencilMode[action.editorKey] = action.isPencilMode;\n return {\n ...state,\n isPencilMode: updatedPencilMode\n };\n\n case SET_GLOBAL_CANVAS_DISPLAY:\n return {\n ...state,\n globalCanvasDisplay: action.value\n };\n\n case TOGGLE_HIGHLIGHTS:\n let highlightsHidden = { ...state.highlightsHidden };\n highlightsHidden[action.editorKey] = action.value;\n return {\n ...state,\n highlightsHidden\n };\n \n case PAGE_TO_CHANGE:\n let updatedPageToChange = Object.assign({}, state.pageToChange);\n updatedPageToChange[action.editorKey] = action.pageToChange;\n return {\n ...state,\n pageToChange: updatedPageToChange,\n };\n \n case TOGGLE_EDIT_LAYER_NAME:\n let updatedEditingLayerName = Object.assign({}, state.editingLayerName);\n updatedEditingLayerName[action.editorKey] = action.value;\n return {\n ...state,\n editingLayerName: updatedEditingLayerName,\n };\n \n case RENAME_LAYER_SUCCESS:\n return {\n ...state,\n loading: false,\n };\n\n default:\n return state;\n }\n}\n\nexport function setCanvasHighlightColor(editorKey, highlightColor) {\n return function(dispatch) {\n dispatch({\n type: SET_HIGHLIGHT_COLOR,\n editorKey,\n highlightColor\n });\n dispatch({\n type: HIDE_COLOR_PICKER,\n editorKey\n });\n }\n}\n\nexport function toggleCanvasColorPicker(editorKey) {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_COLOR_PICKER,\n editorKey\n });\n }\n}\n\nexport function setAddTileSourceMode(editorKey, mode) {\n return function(dispatch) {\n dispatch({\n type: SET_ADD_TILE_SOURCE_MODE,\n editorKey,\n mode\n });\n }\n}\n\nexport function setImageUrl(editorKey, url) {\n return function(dispatch) {\n dispatch({\n type: SET_IMAGE_URL,\n editorKey,\n url\n });\n }\n}\n\nexport function setIsPencilMode(editorKey, isPencilMode) {\n return function(dispatch) {\n dispatch({\n type: SET_IS_PENCIL_MODE,\n editorKey,\n isPencilMode\n });\n }\n}\n\nexport function toggleCanvasHighlights(editorKey, value) {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_HIGHLIGHTS,\n editorKey,\n value\n });\n };\n}\n\nexport function setGlobalCanvasDisplay(value) {\n return function(dispatch) {\n dispatch({\n type: SET_GLOBAL_CANVAS_DISPLAY,\n value\n });\n }\n}\n\nexport function changePage({ editorKey, page }) {\n return function(dispatch) {\n dispatch({\n type: PAGE_TO_CHANGE,\n pageToChange: page,\n editorKey,\n });\n }\n}\n\nexport function toggleEditLayerName({ editorKey, value }) {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_EDIT_LAYER_NAME,\n editorKey,\n value,\n });\n }\n}\n","export default async function fetchWithTimeout(resource, options = {}) {\n const { retryDelay = 8000 } = options;\n const timeout = retryDelay + 100;\n\n const controller = new AbortController();\n const id = setTimeout(() => controller.abort(), timeout);\n\n const response = await fetch(resource, {\n ...options,\n signal: controller.signal,\n });\n clearTimeout(id);\n\n return response;\n}\n","export const authUrl = '/auth';\nexport const defaultRequestTimeout = 28000;","import { push, replace } from 'react-router-redux';\nimport { CLOSE_SEARCH_POPUP } from './search'\nimport { CHECK_IN_DOCS } from './documentGrid'\n\nexport const TEXT_RESOURCE_TYPE = 'text';\nexport const CANVAS_RESOURCE_TYPE = 'canvas';\nexport const READ_PERMISSION = 'read';\nexport const WRITE_PERMISSION = 'write';\nexport const ADMIN_PERMISSION = 'admin';\n\nexport const LOAD_PROJECT = 'project/LOAD_PROJECT';\nexport const GET_SUCCESS = 'project/GET_SUCCESS';\nexport const GET_ERRORED = 'project/GET_ERRORED';\nexport const CLEAR_PROJECT = 'project/CLEAR_PROJECT';\nexport const NEW_PROJECT = 'project/NEW_PROJECT';\nexport const POST_SUCCESS = 'project/POST_SUCCESS';\nexport const POST_ERRORED = 'project/POST_ERRORED';\nexport const UPDATE_PROJECT = 'project/UPDATE_PROJECT';\nexport const PATCH_SUCCESS = 'project/PATCH_SUCCESS';\nexport const PATCH_ERRORED = 'project/PATCH_ERRORED';\nexport const DELETE_PROJECT = 'project/DELETE_PROJECT';\nexport const DELETE_SUCCESS = 'project/DELETE_SUCCESS';\nexport const DELETE_ERRORED = 'project/DELETE_ERRORED';\nexport const OPEN_DOCUMENT_POPOVER = 'project/OPEN_DOCUMENT_POPOVER';\nexport const CLOSE_DOCUMENT_POPOVER = 'project/CLOSE_DOCUMENT_POPOVER';\nexport const SETTINGS_SHOWN = 'project/SETTINGS_SHOWN';\nexport const SETTINGS_HIDDEN = 'project/SETTINGS_HIDDEN';\nexport const NEW_PERMISSION_LEVEL_CHANGE = 'project/NEW_PERMISSION_LEVEL_CHANGE';\nexport const NEW_PERMISSION_USER_CHANGE = 'project/NEW_PERMISSION_USER_CHANGE';\nexport const CREATE_PERMISSION_LOADING = 'project/CREATE_PERMISSION_LOADING';\nexport const CREATE_PERMISSION_ERRORED = 'project/CREATE_PERMISSION_ERRORED';\nexport const CREATE_PERMISSION_SUCCESS = 'project/CREATE_PERMISSION_SUCCESS';\nexport const TOGGLE_DELETE_CONFIRMATION = 'project/TOGGLE_DELETE_CONFIRMATION';\nexport const TOGGLE_SIDEBAR = 'project/TOGGLE_SIDEBAR';\nexport const HIDE_BATCH_IMAGE_PROMPT = 'project/HIDE_BATCH_IMAGE_PROMPT';\nexport const SHOW_BATCH_IMAGE_PROMPT = 'project/SHOW_BATCH_IMAGE_PROMPT';\nexport const IMAGE_UPLOAD_STARTED = 'project/IMAGE_UPLOAD_STARTED';\nexport const IMAGE_UPLOAD_COMPLETE = 'project/IMAGE_UPLOAD_COMPLETE';\nexport const IMAGE_UPLOAD_ERRORED = 'project/IMAGE_UPLOAD_ERRORED';\nexport const IMAGE_UPLOAD_TIMEOUT = 'project/IMAGE_UPLOAD_TIMEOUT';\nexport const IMAGE_UPLOAD_TO_RAILS_SUCCESS = 'project/IMAGE_UPLOAD_TO_RAILS_SUCCESS';\nexport const SET_UPLOADING_TRUE = 'project/SET_UPLOADING_TRUE';\nexport const KILL_UPLOADING = 'project/KILL_UPLOADING';\nexport const ADD_FOLDER_DATA = 'project/ADD_FOLDER_DATA';\nexport const SHOW_CLOSE_DIALOG = 'project/SHOW_CLOSE_DIALOG';\nexport const HIDE_CLOSE_DIALOG = 'project/HIDE_CLOSE_DIALOG';\nexport const IMAGE_UPLOAD_DOC_CREATED = 'project/IMAGE_UPLOAD_DOC_CREATED';\n\nconst sidebarOpenWidth = 490\n\nconst initialState = {\n id: null,\n title: 'No project selected',\n description: '',\n contentsChildren: [],\n userProjectPermissions: [],\n public: false,\n currentUserPermissions: {},\n loading: false,\n errored: false,\n documentPopoverOpenFor: null,\n settingsShown: false,\n newPermissionLoading: false,\n newPermissionUser: null,\n newPermissionLevel: READ_PERMISSION,\n newPermissionError: null,\n deleteConfirmed: false,\n sidebarWidth: sidebarOpenWidth,\n sidebarOpen: true,\n batchImagePromptShown: false,\n uploads: [],\n uploading: false,\n folderData: [],\n closeDialogShown: false,\n uploadError: null,\n};\n\nexport default function(state = initialState, action) {\n switch (action.type) {\n case LOAD_PROJECT:\n return {\n ...state,\n title: action.title || state.title,\n loading: true\n };\n\n case DELETE_SUCCESS:\n case CLEAR_PROJECT:\n return initialState;\n\n case NEW_PROJECT:\n return {\n ...state,\n loading: true,\n title: 'Untitled Project'\n };\n\n case UPDATE_PROJECT:\n case DELETE_PROJECT:\n return {\n ...state,\n loading: true\n }\n\n case GET_SUCCESS:\n case POST_SUCCESS:\n case PATCH_SUCCESS:\n return {\n ...state,\n loading: false,\n id: action.projectId,\n title: action.projectTitle,\n description: action.projectDescription,\n userProjectPermissions: action.userProjectPermissions || [],\n contentsChildren: action.contentsChildren || [],\n public: action.public,\n currentUserPermissions: action.currentUserPermissions\n };\n\n case GET_ERRORED:\n case POST_ERRORED:\n case PATCH_ERRORED:\n case DELETE_ERRORED:\n console.log('project error');\n return {\n ...state,\n loading: false,\n errored: true\n };\n\n case OPEN_DOCUMENT_POPOVER:\n return {\n ...state,\n documentPopoverOpenFor: action.target\n };\n\n case CLOSE_DOCUMENT_POPOVER:\n return {\n ...state,\n documentPopoverOpenFor: null\n };\n\n case SETTINGS_SHOWN:\n return {\n ...state,\n settingsShown: true\n };\n\n case SETTINGS_HIDDEN:\n return {\n ...state,\n settingsShown: false\n };\n\n case CREATE_PERMISSION_LOADING:\n return {\n ...state,\n newPermissionLoading: true,\n };\n\n case CREATE_PERMISSION_SUCCESS:\n return {\n ...state,\n newPermissionLoading: false,\n newPermissionError: null,\n newPermissionUser: null\n };\n\n case CREATE_PERMISSION_ERRORED:\n return {\n ...state,\n newPermissionLoading: false,\n newPermissionError: 'Unable to add user.',\n }\n\n case NEW_PERMISSION_USER_CHANGE:\n return {\n ...state,\n newPermissionUser: action.user\n };\n\n case NEW_PERMISSION_LEVEL_CHANGE:\n return {\n ...state,\n newPermissionLevel: action.level\n };\n\n case TOGGLE_DELETE_CONFIRMATION:\n return {\n ...state,\n deleteConfirmed: !state.deleteConfirmed\n };\n\n case TOGGLE_SIDEBAR:\n const sidebarOpen = !state.sidebarOpen\n const sidebarWidth = sidebarOpen ? sidebarOpenWidth : 0\n return {\n ...state,\n sidebarOpen,\n sidebarWidth \n };\n\n case SHOW_BATCH_IMAGE_PROMPT:\n return {\n ...state,\n batchImagePromptShown: action.projectId,\n };\n\n case HIDE_BATCH_IMAGE_PROMPT:\n return {\n ...state,\n batchImagePromptShown: false,\n uploading: false,\n uploads: [],\n folderData: [],\n uploadError: null,\n };\n\n case SET_UPLOADING_TRUE:\n return {\n ...state,\n uploading: true,\n uploadError: null,\n };\n\n case KILL_UPLOADING:\n return {\n ...state,\n uploading: false,\n uploadError: action.err,\n };\n \n case IMAGE_UPLOAD_STARTED:\n const uploads = action.signedIds.map((signedId) => ({\n signedId,\n state: 'uploading',\n }));\n return {\n ...state,\n uploads,\n };\n \n case IMAGE_UPLOAD_TO_RAILS_SUCCESS:\n const uploadsWithFilename = state.uploads.map((upload) => ({\n ...upload,\n filename: upload.signedId === action.signedId ? action.image.filename : upload.filename,\n }));\n return {\n ...state,\n uploads: uploadsWithFilename,\n };\n\n case IMAGE_UPLOAD_DOC_CREATED:\n const createdUploads = state.uploads.map((upload) => ({\n ...upload,\n state: upload.signedId === action.signedId ? 'doc-created' : upload.state,\n }));\n return {\n ...state,\n uploads: createdUploads,\n };\n \n case IMAGE_UPLOAD_COMPLETE:\n const newUploads = state.uploads.map((upload) => ({\n ...upload,\n state: upload.signedId === action.signedId ? 'finished' : upload.state,\n }));\n const stillUploadingComplete = newUploads.some(upload => !['timeout', 'finished', 'error'].includes(upload.state));\n return {\n ...state,\n uploads: newUploads,\n uploading: stillUploadingComplete,\n };\n \n case IMAGE_UPLOAD_ERRORED:\n const uploadsWithError = state.uploads.map((upload) => ({\n ...upload,\n state: upload.signedId === action.signedId ? 'error' : upload.state,\n error: upload.signedId === action.signedId ? action.error : upload.error,\n }));\n const stillUploadingErrored = uploadsWithError.some(upload => !['timeout', 'finished', 'error'].includes(upload.state));\n return {\n ...state,\n uploads: uploadsWithError,\n uploading: stillUploadingErrored,\n };\n\n case IMAGE_UPLOAD_TIMEOUT:\n const uploadsWithTimeout = state.uploads.map((upload) => ({\n ...upload,\n state: upload.signedId === action.signedId ? 'timeout' : upload.state,\n error: upload.signedId === action.signedId ? action.error : upload.error,\n }));\n const stillUploadingTimeout = uploadsWithTimeout.some(upload => !['timeout', 'finished', 'error'].includes(upload.state));\n return {\n ...state,\n uploads: uploadsWithTimeout,\n uploading: stillUploadingTimeout,\n };\n\n case ADD_FOLDER_DATA:\n return {\n ...state,\n folderData: action.folders,\n }\n \n case SHOW_CLOSE_DIALOG:\n return {\n ...state,\n closeDialogShown: true,\n }\n\n case HIDE_CLOSE_DIALOG:\n return {\n ...state,\n closeDialogShown: false,\n }\n default:\n return state;\n }\n}\n\nexport function clearProject() {\n return function(dispatch) {\n dispatch({\n type: CLOSE_SEARCH_POPUP\n });\n dispatch({\n type: CLEAR_PROJECT\n });\n };\n}\n\nexport function loadProject(projectId, title) {\n return function(dispatch) {\n dispatch({\n type: LOAD_PROJECT\n });\n\n fetch(`projects/${projectId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(project => {\n if( project.forbidden ) {\n dispatch(push('/'))\n } else {\n dispatch({\n type: GET_SUCCESS,\n projectId: project.id,\n projectTitle: project.title,\n projectDescription: project.description,\n contentsChildren: project['contents_children'],\n userProjectPermissions: project['user_project_permissions'],\n public: project.public,\n currentUserPermissions: project['current_user_permissions']\n }) \n }\n })\n .catch(() => dispatch({\n type: GET_ERRORED\n }));\n };\n}\n\nexport function newProject() {\n return function(dispatch) {\n dispatch({\n type: NEW_PROJECT\n });\n dispatch(push('/new'));\n\n fetch('/projects', {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n title: 'Untitled Project'\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(project => {\n dispatch({\n type: POST_SUCCESS,\n projectId: project.id,\n projectTitle: project.title,\n userProjectPermissions: project['user_project_permissions'],\n public: project.public,\n currentUserPermissions: project['current_user_permissions']\n });\n dispatch(replace(`/${project.id}`));\n dispatch(showSettings());\n })\n .catch(() => dispatch({\n type: POST_ERRORED\n }));\n };\n}\n\nexport function updateProject(projectId, attributes) {\n return function(dispatch) {\n dispatch({\n type: UPDATE_PROJECT\n });\n\n fetch(`/projects/${projectId}`, {\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n },\n method: 'PATCH',\n body: JSON.stringify(attributes)\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(project => {\n dispatch({\n type: PATCH_SUCCESS,\n projectId: project.id,\n projectTitle: project.title,\n projectDescription: project.description,\n contentsChildren: project['contents_children'],\n userProjectPermissions: project['user_project_permissions'],\n public: project.public,\n currentUserPermissions: project['current_user_permissions']\n });\n })\n .catch(() => dispatch({\n type: PATCH_ERRORED\n }));\n };\n}\n\nexport function openDocumentPopover(target) {\n return function(dispatch) {\n dispatch({\n type: OPEN_DOCUMENT_POPOVER,\n target\n });\n };\n}\n\nexport function closeDocumentPopover() {\n return function(dispatch) {\n dispatch({\n type: CLOSE_DOCUMENT_POPOVER\n });\n };\n}\n\nexport function showSettings() {\n return function(dispatch) {\n dispatch({\n type: SETTINGS_SHOWN\n });\n };\n}\n\nexport function hideSettings() {\n return function(dispatch) {\n dispatch({\n type: SETTINGS_HIDDEN\n });\n };\n}\n\nexport function setNewPermissionUser(user) {\n return function(dispatch) {\n dispatch({\n type: NEW_PERMISSION_USER_CHANGE,\n user\n });\n };\n}\n\nexport function setNewPermissionLevel(level) {\n return function(dispatch) {\n dispatch({\n type: NEW_PERMISSION_LEVEL_CHANGE,\n level\n });\n };\n}\n\nexport function createNewPermission() {\n return function(dispatch, getState) {\n const { id, newPermissionUser, newPermissionLevel } = getState().project;\n\n if (newPermissionUser !== null) {\n dispatch({\n type: CREATE_PERMISSION_LOADING\n });\n\n fetch('/user_project_permissions', {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n project_id: id,\n email: newPermissionUser,\n permission: newPermissionLevel\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: CREATE_PERMISSION_SUCCESS\n });\n dispatch(loadProject(id));\n })\n .catch(() => dispatch({\n type: CREATE_PERMISSION_ERRORED\n }));\n }\n }\n}\n\nexport function deletePermission(id) {\n return function(dispatch, getState) {\n dispatch({\n type: CREATE_PERMISSION_LOADING\n });\n\n fetch(`/user_project_permissions/${id}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'DELETE'\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: CREATE_PERMISSION_SUCCESS\n });\n dispatch(loadProject(getState().project.id));\n })\n .catch(() => dispatch({\n type: CREATE_PERMISSION_ERRORED\n }));\n }\n}\n\nexport function updatePermission(id, permissionLevel) {\n return function(dispatch, getState) {\n dispatch({\n type: CREATE_PERMISSION_LOADING\n });\n\n fetch(`/user_project_permissions/${id}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'PATCH',\n body: JSON.stringify({\n permission: permissionLevel\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: CREATE_PERMISSION_SUCCESS\n });\n dispatch(loadProject(getState().project.id));\n })\n .catch(() => dispatch({\n type: CREATE_PERMISSION_ERRORED\n }));\n }\n}\n\nexport function checkInAll(projectID) {\n return function(dispatch) {\n fetch(`/projects/${projectID}/check_in`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST'\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(status => {\n dispatch({\n type: CHECK_IN_DOCS,\n projectId: projectID,\n docIDs: status.checked_in_docs,\n });\n })\n .catch(() => dispatch({\n type: POST_ERRORED\n }));\n };\n}\n\nexport function toggleDeleteConfirmation() {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_DELETE_CONFIRMATION\n });\n }\n}\n\nexport function toggleSidebar() {\n return function(dispatch) {\n dispatch({\n type: TOGGLE_SIDEBAR\n });\n }\n}\n\nexport function deleteProject(projectId) {\n return function(dispatch) {\n dispatch({\n type: DELETE_PROJECT\n });\n\n fetch(`/projects/${projectId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'DELETE'\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n })\n .then(() => {\n dispatch({\n type: DELETE_SUCCESS\n });\n dispatch(push('/'));\n })\n .catch(() => dispatch({\n type: DELETE_ERRORED\n }));\n }\n}\n\nexport function hideBatchImagePrompt() {\n return function(dispatch) {\n dispatch({\n type: HIDE_BATCH_IMAGE_PROMPT,\n });\n }\n}\n\nexport function showBatchImagePrompt({ projectId }) {\n return function(dispatch) {\n dispatch({\n type: SHOW_BATCH_IMAGE_PROMPT,\n projectId,\n });\n dispatch(getFolderData({ projectId }));\n }\n}\n\nexport function startUploading() {\n return function(dispatch) {\n dispatch({\n type: SET_UPLOADING_TRUE,\n });\n }\n}\n\nexport function killUploading(err) {\n return function(dispatch) {\n dispatch({\n type: KILL_UPLOADING,\n err,\n });\n }\n}\n\nfunction getFolderDataFromIds({ folderIds }) {\n return function(dispatch, getState) {\n const { id } = getState().project;\n fetch('/document_folders/get_many', {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid'),\n 'Accept': 'application/json',\n 'Content-Type': 'application/json'\n },\n method: 'POST',\n body: JSON.stringify({\n folder_ids: folderIds,\n project_id: id,\n })\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response.json()\n })\n .then(folders => {\n dispatch({\n type: ADD_FOLDER_DATA,\n folders: folders.map(folder => ({\n id: folder[0],\n title: folder[1],\n parent_type: folder[2],\n parent_id: folder[3],\n }))\n })\n })\n .catch(error => {\n console.error(error);\n });\n }\n}\n\nexport function getFolderData({ projectId }) {\n return function(dispatch, getState) {\n fetch(`/projects/${projectId}`, {\n headers: {\n 'access-token': localStorage.getItem('access-token'),\n 'token-type': localStorage.getItem('token-type'),\n 'client': localStorage.getItem('client'),\n 'expiry': localStorage.getItem('expiry'),\n 'uid': localStorage.getItem('uid')\n }\n })\n .then(response => {\n if (!response.ok) {\n throw Error(response.statusText);\n }\n return response;\n })\n .then(response => response.json())\n .then(project => {\n let folderIds = [];\n if (project.contents_children) { \n project.contents_children.filter(\n child => child['document_kind'] === 'folder'\n ).forEach(child => {\n folderIds.push(child.id);\n child.descendant_folder_ids.forEach(descendant => {\n if (!folderIds.includes(descendant)) {\n folderIds.push(descendant);\n }\n })\n });\n dispatch(getFolderDataFromIds({ folderIds }));\n }\n });\n }\n}\n\nexport function showCloseDialog() {\n return function(dispatch) {\n dispatch({\n type: SHOW_CLOSE_DIALOG,\n })\n }\n}\n\nexport function hideCloseDialog() {\n return function(dispatch) {\n dispatch({\n type: HIDE_CLOSE_DIALOG,\n })\n }\n}","import { combineReducers } from 'redux';\nimport { routerReducer } from 'react-router-redux';\nimport { reduxTokenAuthReducer } from 'redux-token-auth';\nimport home from './home';\nimport project from './project';\nimport folders from './folders';\nimport documentGrid from './documentGrid';\nimport annotationViewer from './annotationViewer';\nimport textEditor from './textEditor';\nimport canvasEditor from './canvasEditor';\nimport search from './search';\n\nexport default combineReducers({\n routing: routerReducer,\n reduxTokenAuth: reduxTokenAuthReducer,\n home,\n project,\n folders,\n documentGrid,\n annotationViewer,\n textEditor,\n canvasEditor,\n search\n});\n","import { createStore, applyMiddleware, compose } from 'redux';\nimport { routerMiddleware } from 'react-router-redux';\nimport thunk from 'redux-thunk';\nimport { createBrowserHistory } from 'history';\nimport rootReducer from './modules';\n\nexport const history = createBrowserHistory();\n\nconst initialState = {\n reduxTokenAuth: {\n currentUser: {\n isLoading: false,\n isSignedIn: false,\n attributes: {}\n }\n }\n};\nconst enhancers = [];\nconst middleware = [\n thunk,\n routerMiddleware(history)\n];\n\nif (process.env.NODE_ENV === 'development') {\n const devToolsExtension = window.devToolsExtension;\n\n if (typeof devToolsExtension === 'function') {\n enhancers.push(devToolsExtension());\n }\n}\n\nconst composedEnhancers = compose(\n applyMiddleware(...middleware),\n ...enhancers\n);\n\nconst store = createStore(\n rootReducer,\n initialState,\n composedEnhancers\n);\n\nexport default store;\n","import { generateAuthActions } from 'redux-token-auth';\nimport { authUrl } from './constants';\n\nconst config = {\n authUrl,\n userAttributes: {\n name: 'name',\n approved: 'approved',\n admin: 'admin',\n id: 'id',\n confirmed: 'confirmed',\n },\n userRegistrationAttributes: {\n name: 'name',\n password_confirmation: 'password_confirmation',\n email: 'email',\n uid: 'uid',\n }\n}\n\nconst {\n registerUser,\n signInUser,\n signOutUser,\n verifyCredentials\n} = generateAuthActions(config);\n\nexport {\n registerUser,\n signInUser,\n signOutUser,\n verifyCredentials\n};\n","import React, { Component } from 'react';\nimport { connect } from 'react-redux';\nimport { bindActionCreators } from 'redux';\nimport { withRouter } from 'react-router';\nimport Dialog from 'material-ui/Dialog';\nimport TextField from 'material-ui/TextField';\nimport FlatButton from 'material-ui/FlatButton';\nimport { red500, green400, blue900 } from 'material-ui/styles/colors';\nimport { registerUser, signInUser } from './modules/redux-token-auth-config';\nimport {\n load,\n hideLogin,\n hideRegistration,\n showApprovalPending,\n hideApprovalPending,\n userEmailChanged,\n userNameChanged,\n userPasswordChanged,\n userPasswordConfirmationChanged,\n userAuthErrored,\n closeConfirmDialog,\n resendConfirmationEmail,\n} from './modules/home';\n\nclass LoginRegistrationDialog extends Component {\n render() {\n let title = '';\n let actions = [];\n let open = false;\n let requestedClose = () => {};\n let showNameField = false;\n let showEmailField = false;\n let showPasswordField = false;\n let showPasswordConfirmationField = false;\n const { location } = this.props;\n\n if (this.props.registrationShown) {\n title = 'Register new user';\n actions.push(\n
Loading...
;\n\n case 'errored':\n returnError!
;\n\n default:\n if (props.contents.length > 0) {\n return (\nEmpty
;\n }\n}\n\nclass DocumentFolder extends Component {\n render() {\n return (\n\n Deleting this folder will destroy all its contents.\n
\n\n That means that all contained documents or folders, and any child annotations\n original to those documents, will be destroyed.\n
\n\n If you wish to preserve any documents or folders inside, click\n Cancel and move them out of this folder before deleting it.\n
\n >),\n 'Destroy folder',\n { folderId: this.props.item.id, parentType: this.props.item.parent_type, parentId: this.props.parentId },\n FOLDER_DELETE\n );\n }}\n >\n` element.\n paragraph: {\n content: \"inline*\",\n group: \"block\",\n parseDOM: [{\n tag: \"p\",\n getAttrs: node => {\n const marginLeft = node.style['margin-left'].split('px')[0];\n const indentLevel = parseInt(marginLeft, 10) / 48;\n const lineHeightParsed = parseFloat(node.style['line-height']);\n const lineHeight = !isNaN(lineHeightParsed) ? lineHeightParsed : node.style['line-height'];\n return {\n indented: node.style['text-indent'] === '3em',\n indentLevel,\n lineHeight,\n }\n }\n }],\n attrs: {\n indented: {default: false},\n indentLevel: {default: 0},\n lineHeight: {default: 'normal'},\n },\n toDOM(node) {\n const textIndent = node.attrs.indented ? '3em' : '0';\n const marginLeft = `${node.attrs.indentLevel * 48}px`;\n const lineHeight = node.attrs.lineHeight;\n return [\"p\", {\n style: `text-indent: ${textIndent}; margin-left: ${marginLeft}; line-height: ${lineHeight}`\n }, 0];\n }\n },\n\n // :: NodeSpec A blockquote (`
`) wrapping one or more blocks.\n blockquote: {\n content: \"block+\",\n group: \"block\",\n defining: true,\n parseDOM: [{tag: \"blockquote\"}],\n toDOM() { return blockquoteDOM }\n },\n\n // :: NodeSpec A horizontal rule (`
`).\n horizontal_rule: {\n group: \"block\",\n parseDOM: [{tag: \"hr\"}],\n toDOM() { return hrDOM }\n },\n\n // :: NodeSpec A heading textblock, with a `level` attribute that\n // should hold the number 1 to 6. Parsed and serialized as `` to\n // `
` elements.\n heading: {\n attrs: {level: {default: 1}},\n content: \"inline*\",\n group: \"block\",\n defining: true,\n parseDOM: [{tag: \"h1\", attrs: {level: 1}},\n {tag: \"h2\", attrs: {level: 2}},\n {tag: \"h3\", attrs: {level: 3}},\n {tag: \"h4\", attrs: {level: 4}},\n {tag: \"h5\", attrs: {level: 5}},\n {tag: \"h6\", attrs: {level: 6}}],\n toDOM(node) { return [\"h\" + node.attrs.level, 0] }\n },\n\n // :: NodeSpec A code listing. Disallows marks or non-text inline\n // nodes by default. Represented as a `
` element with a\n // `` element inside of it.\n code_block: {\n content: \"text*\",\n marks: \"\",\n group: \"block\",\n code: true,\n defining: true,\n parseDOM: [{tag: \"pre\", preserveWhitespace: \"full\"}],\n toDOM() { return preDOM }\n },\n\n // :: NodeSpec The text node.\n text: {\n group: \"inline\"\n },\n\n // :: NodeSpec An inline image (`
`) node. Supports `src`,\n // `alt`, and `href` attributes. The latter two default to the empty\n // string.\n image: {\n inline: true,\n attrs: {\n src: {},\n width: {default: \"unset\"},\n alt: {default: null},\n title: {default: null}\n },\n group: \"inline\",\n draggable: true,\n parseDOM: [{tag: \"img[src][width]\", getAttrs(dom) {\n return {\n src: dom.getAttribute(\"src\"),\n title: dom.getAttribute(\"title\"),\n alt: dom.getAttribute(\"alt\"),\n width: dom.getAttribute(\"width\")\n }\n }}],\n toDOM(node) { \n const attrs = {style: `width: ${node.attrs.width}`}\n return [\"img\", { ...node.attrs, ...attrs }] \n }\n },\n\n // :: NodeSpec A hard line break, represented in the DOM as `
`.\n hard_break: {\n inline: true,\n group: \"inline\",\n selectable: false,\n parseDOM: [{tag: \"br\"}],\n toDOM() { return brDOM }\n }\n}\n\nconst emDOM = [\"em\", 0], strongDOM = [\"strong\", 0], codeDOM = [\"code\", 0]\n\n// :: Object [Specs](#model.MarkSpec) for the marks in the schema.\nexport const marks = {\n // :: MarkSpec A link. Has `href` and `title` attributes. `title`\n // defaults to the empty string. Rendered and parsed as an ``\n // element.\n link: {\n attrs: {\n href: {},\n title: {default: null},\n target: {default: '_blank'}\n },\n inclusive: false,\n parseDOM: [{tag: \"a[href]\", getAttrs(dom) {\n return {href: dom.getAttribute(\"href\"), title: dom.getAttribute(\"title\")}\n }}],\n toDOM(node) { return [\"a\", node.attrs, 0] }\n },\n\n // :: MarkSpec An emphasis mark. Rendered as an `` element.\n // Has parse rules that also match `` and `font-style: italic`.\n em: {\n parseDOM: [{tag: \"i\"}, {tag: \"em\"}],\n toDOM() { return emDOM }\n },\n\n underline: {\n parseDOM: [{tag: \"u\"}],\n toDOM() { return [\"u\", 0] }\n },\n\n strikethrough: {\n parseDOM: [{tag: \"s\"}],\n toDOM() { return [\"s\", 0] }\n },\n\n fontSize: {\n attrs: {fontSize: {default: '12pt'}},\n toDOM(mark) {\n let fontSize=mark.attrs.fontSize; \n return [\"span\", { style: `font-size:${fontSize}` }, 0] \n }\n },\n\n fontFamily: {\n attrs: {fontFamily: {default: 'sans-serif'}},\n toDOM(mark) {\n let fontFamily=mark.attrs.fontFamily; \n return [\"span\", { style: `font-family:${fontFamily}` }, 0] \n }\n },\n\n color: {\n attrs: {color: {default: 'black'}},\n toDOM(mark) {\n let color=mark.attrs.color; \n return [\"span\", { style: `color:${color}` }, 0] \n }\n },\n\n textStyle: textStyle,\n\n // :: MarkSpec A strong mark. Rendered as ``, parse rules\n // also match `` and `font-weight: bold`.\n strong: {\n parseDOM: [{tag: \"strong\"},\n // This works around a Google Docs misbehavior where\n // pasted content will be inexplicably wrapped in ``\n // tags with a font-weight normal.\n {tag: \"b\", getAttrs: node => node.style.fontWeight !== \"normal\" && null},\n {style: \"font-weight\", getAttrs: value => /^(bold(er)?|[5-9]\\d{2,})$/.test(value) && null}],\n toDOM() { return strongDOM }\n },\n\n // :: MarkSpec Code font mark. Represented as a `` element.\n code: {\n parseDOM: [{tag: \"code\"}],\n toDOM() { return codeDOM }\n }\n}\n\n// :: Schema\n// This schema rougly corresponds to the document schema used by\n// [CommonMark](http://commonmark.org/), minus the list elements,\n// which are defined in the [`prosemirror-schema-list`](#schema-list)\n// module.\n//\n// To reuse elements from this schema, extend or read from its\n// `spec.nodes` and `spec.marks` [properties](#model.Schema.spec).\nexport const schema = new Schema({nodes, marks})\n","import { liftListItem } from 'prosemirror-schema-list';\nimport { ReplaceAroundStep } from 'prosemirror-transform';\nimport { Slice, Fragment } from 'prosemirror-model';\n\nfunction markApplies(doc, ranges, type) {\n for (let i = 0; i < ranges.length; i++) {\n let {$from, $to} = ranges[i]\n let can = $from.depth === 0 ? doc.type.allowsMarkType(type) : false\n doc.nodesBetween($from.pos, $to.pos, node => {\n if (can) return false\n can = node.inlineContent && node.type.allowsMarkType(type)\n })\n if (can) return true\n }\n return false\n}\n\nexport function addMark(markType, attrs) {\n return function(state, dispatch) {\n let {empty, $cursor, ranges} = state.selection\n if ((empty && !$cursor) || !markApplies(state.doc, ranges, markType)) return false\n if (dispatch) {\n if ($cursor) {\n dispatch(state.tr.addStoredMark(markType.create(attrs)))\n } else {\n let has = false, tr = state.tr\n for (let i = 0; !has && i < ranges.length; i++) {\n let {$from, $to} = ranges[i]\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType)\n }\n for (let i = 0; i < ranges.length; i++) {\n let {$from, $to} = ranges[i]\n tr.addMark($from.pos, $to.pos, markType.create(attrs))\n }\n dispatch(tr) \n }\n }\n return true\n }\n}\n\nexport function removeMark(markType, uid) {\n return function(state, dispatch) {\n let {empty, $cursor, ranges} = state.selection\n if (!uid && ((empty && !$cursor) || !markApplies(state.doc, ranges, markType))) return false\n if (dispatch) {\n if (markType && uid) {\n let transform = null;\n state.doc.descendants((node, position) => {\n node.marks.forEach(mark => {\n if (mark.type.name === markType.name && mark.attrs.highlightUid === uid) {\n if (transform) {\n // chain removal steps for additional marks onto the first step in the transform\n transform.removeMark(position, position + node.nodeSize, mark);\n }\n else {\n transform = state.tr.removeMark(position, position + node.nodeSize, mark);\n }\n }\n });\n });\n if (transform) dispatch(transform);\n }\n // no longer used for deleting highlights\n else if ($cursor) {\n dispatch(state.tr.removeStoredMark(markType))\n } else {\n let has = false, tr = state.tr\n for (let i = 0; !has && i < ranges.length; i++) {\n let {$from, $to} = ranges[i]\n has = state.doc.rangeHasMark($from.pos, $to.pos, markType)\n }\n for (let i = 0; i < ranges.length; i++) {\n let {$from, $to} = ranges[i]\n if (has) tr.removeMark($from.pos, $to.pos, markType)\n }\n dispatch(tr.scrollIntoView())\n }\n }\n return true\n }\n}\n\nfunction canInsert(state, nodeType) {\n const $from = state.selection.$from;\n for (let d = $from.depth; d >= 0; d--) {\n const index = $from.index(d);\n if ($from.node(d).canReplaceWith(index, index, nodeType)) { return true }\n }\n return false\n }\n\nexport function replaceNodeWith (nodeType, attrs) {\n return function(state, dispatch) {\n if (canInsert(state, nodeType)) {\n dispatch(state.tr.replaceSelectionWith(nodeType.create(attrs)));\n }\n return true\n }\n}\n\nexport function setNodeAttributes (nodeType, attributes) {\n return function(state, dispatch) {\n const { ranges } = state.selection;\n let transaction = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.name === nodeType.name) {\n const attrs = { ...node.attrs, ...attributes};\n const newNode = nodeType.create(attrs, null, node.marks);\n transaction.step(\n new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1,\n pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0),\n 1, true,\n ),\n );\n }\n })\n }\n if(transaction.docChanged){\n dispatch(transaction);\n }\n return true;\n }\n}\n\nexport function increaseIndent (nodeType, withHanging) {\n return function(state, dispatch) {\n const { ranges } = state.selection;\n let transaction = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.name === nodeType.name) {\n if (node.attrs.indented === false && node.attrs.indentLevel === 0 && withHanging) {\n const attrs = { ...node.attrs, indented: true };\n const newNode = nodeType.create(attrs, null, node.marks);\n transaction.step(\n new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1,\n pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0),\n 1, true,\n ),\n );\n } else if (node.attrs.indentLevel < 5) {\n let { indentLevel } = node.attrs;\n indentLevel += 1;\n const attrs = { ...node.attrs, indentLevel };\n const newNode = nodeType.create(attrs, null, node.marks);\n transaction.step(\n new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1,\n pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0),\n 1, true,\n ),\n );\n }\n }\n })\n }\n if(transaction.docChanged){\n dispatch(transaction);\n }\n return true;\n }\n}\n\nexport function decreaseIndent (nodeType, withHanging) {\n return function(state, dispatch) {\n const { ranges } = state.selection;\n let transaction = state.tr;\n for (let i = 0; i < ranges.length; i++) {\n let { $from, $to } = ranges[i];\n let removedFromList = false;\n state.doc.nodesBetween($from.pos, $to.pos, (node) => {\n if (node.type.name === 'list_item') {\n node.descendants((node) => {\n if (node.type.name === nodeType.name) {\n if (node.attrs.indentLevel === 0 && node.attrs.indented === false) {\n removedFromList = true;\n }\n } \n });\n if (removedFromList) {\n const cmd = liftListItem(node.type);\n cmd(state, dispatch);\n }\n }\n })\n if (removedFromList) return true;\n else {\n state.doc.nodesBetween($from.pos, $to.pos, (node, pos) => {\n if (node.type.name === nodeType.name) {\n if (node.attrs.indentLevel > 0 && (\n node.attrs.indented === false || (withHanging && node.attrs.indented === true)\n )) {\n let { indentLevel } = node.attrs;\n indentLevel -= 1;\n const attrs = { ...node.attrs, indentLevel };\n const newNode = nodeType.create(attrs, null, node.marks);\n transaction.step(\n new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1,\n pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0),\n 1, true,\n ),\n );\n } else if (node.attrs.indented === true && !withHanging) {\n const attrs = { ...node.attrs, indented: false };\n const newNode = nodeType.create(attrs, null, node.marks);\n transaction.step(\n new ReplaceAroundStep(pos, pos + node.nodeSize, pos + 1,\n pos + node.nodeSize - 1,\n new Slice(Fragment.from(newNode), 0, 0),\n 1, true,\n ),\n );\n }\n } \n });\n if(transaction.docChanged){\n dispatch(transaction);\n }\n return true;\n }\n }\n }\n}","import { tableNodeTypes } from 'prosemirror-tables';\nimport { TextSelection } from 'prosemirror-state';\n\nfunction createTable(state, rowsCount, colsCount, withHeaderRow, cellContent) {\n const types = tableNodeTypes(state.schema)\n const headerCells = []\n const cells = []\n const createCell = (cellType, cellContent) => cellContent ? cellType.createChecked(null, cellContent) : cellType.createAndFill()\n\n for (let index = 0; index < colsCount; index += 1) {\n const cell = createCell(types.cell, cellContent)\n\n if (cell) {\n cells.push(cell)\n }\n\n if (withHeaderRow) {\n const headerCell = createCell(types.header_cell, cellContent)\n\n if (headerCell) {\n headerCells.push(headerCell)\n }\n }\n }\n\n const rows = []\n\n for (let index = 0; index < rowsCount; index += 1) {\n rows.push(types.row.createChecked(null, withHeaderRow && index === 0 ? headerCells : cells))\n }\n\n return types.table.createChecked(null, rows)\n}\n\n// add table to a new paragraph\nexport function addTable(state, dispatch, { rowsCount, colsCount, withHeaderRow, cellContent }) {\n let tr = state.tr\n\n // get block end position\n const end = tr.selection.$head.end(1) // param 1 is node deep\n const resolvedEnd = tr.doc.resolve(end)\n\n // move cursor to the end, then insert table\n const nodes = createTable(state, rowsCount, colsCount, withHeaderRow, cellContent)\n tr.setSelection(TextSelection.near(resolvedEnd))\n tr = tr.replaceSelectionWith(nodes).scrollIntoView()\n\n // move cursor into table\n const offset = end + 1\n const resolvedPos = tr.doc.resolve(offset)\n tr.setSelection(TextSelection.near(resolvedPos))\n\n dispatch(tr)\n}","import React, { Component } from 'react';\nimport { GithubPicker } from 'react-color';\nimport { yellow500, orange300, redA100, purpleA100, blueA100, cyanA100, lightGreenA700, lightGreenA200 } from 'material-ui/styles/colors';\n\nexport default class HighlightColorSelect extends Component {\n render() {\n return (\n \n
\n \n\n {this.props.displayColorPicker &&\n\n\n }\n \n );\n }\n}\n","import React, { Component } from 'react';\n\n/**\n * This wraps ProseMirror's EditorView into React component.\n */\nexport default class ProseMirrorEditorView extends Component {\n \n focus() {\n if (this.props.editorView) {\n this.propse.editorView.focus();\n }\n }\n\n componentWillUnmount() {\n if (this.props.editorView) {\n this.props.editorView.destroy();\n }\n }\n\n shouldComponentUpdate(nextProps) {\n // Update component if style attrs change\n if (this.props.style !== nextProps.style || this.props.columnCount !== nextProps.columnCount) {\n return true\n }\n // Note that EditorView manages its DOM itself so we'd rather not mess\n // with it otherwise.\n return false;\n }\n\n render() {\n // Render just an empty div which is then used as a container for an\n // EditorView instance.\n const style = { flexGrow: '1', padding: '10px', ...this.props.style };\n let className = '';\n switch (this.props.columnCount) {\n case 1: \n className = 'one-column';\n break;\n case 2: \n className = 'two-column';\n break;\n case 3:\n className = 'three-column';\n break;\n default:\n className = '';\n break;\n }\n return ;\n }\n}\n","class LinkTooltip {\n constructor(view) {\n this.tooltip = document.createElement('div');\n this.tooltip.className = 'link-tooltip';\n view.dom.parentNode.appendChild(this.tooltip);\n\n this.update(view, null);\n }\n\n update(view, lastState) {\n let state = view.state;\n // Don't do anything if the document/selection didn't change\n if (\n lastState &&\n lastState.doc.eq(state.doc) &&\n lastState.selection.eq(state.selection)\n ) {\n return;\n }\n\n let { empty, $cursor } = state.selection;\n // Don't display if there's a non-empty selection, or no cursor\n if (!$cursor || !empty) {\n this.tooltip.style.display = 'none';\n return;\n }\n this.tooltip.style.display = '';\n let { from, to } = state.selection;\n let href = '';\n // Check that we're inside a link\n let insideLink = false;\n state.doc.nodesBetween(from, to, (node) => {\n node.marks.forEach(mark => {\n if (mark.type.name === 'link') {\n insideLink = true;\n // Grab link from mark attrs\n href = mark.attrs.href;\n }\n })\n });\n // Otherwise don't display\n if (!insideLink) {\n this.tooltip.style.display = 'none';\n return;\n }\n // Viewport coordinates\n let start = view.coordsAtPos(from);\n \n // Parent bounding box\n let box = this.tooltip.offsetParent.getBoundingClientRect();\n const scrollTop = this.tooltip.offsetParent.scrollTop;\n const origTooltipLeft = start.left - box.left;\n this.tooltip.style.left = `${origTooltipLeft}px`;\n let tooltipBottom = box.bottom - start.top - scrollTop;\n this.tooltip.style.bottom = `${tooltipBottom}px`;\n let text = href;\n if (text.length > 30) {\n text = `${text.substring(0, 27)}...`;\n }\n\n this.tooltip.innerHTML = `${text}`;\n\n let tooltipRect = this.tooltip.getBoundingClientRect();\n\n // Handle horizontal overflow\n if (tooltipRect.left < box.left) {\n const overflow = box.left - tooltipRect.left;\n this.tooltip.style.left = `${origTooltipLeft + overflow + 5}px`;\n }\n if (tooltipRect.right > box.right) {\n const overflow = tooltipRect.right - box.right;\n this.tooltip.style.left = `${origTooltipLeft - overflow - 20}px`;\n }\n \n // Handle vertical overflow\n if (tooltipRect.top < box.top) {\n const lineHeight = start.bottom - start.top;\n tooltipBottom = box.top - scrollTop - (lineHeight + 3);\n this.tooltip.style.bottom = `${tooltipBottom}px`;\n tooltipRect = this.tooltip.getBoundingClientRect();\n const diff = tooltipRect.top - start.bottom;\n if (diff > 10) {\n this.tooltip.style.bottom = `${tooltipBottom + diff - 10}px`;\n }\n }\n }\n\n destroy() {\n this.tooltip.remove();\n }\n}\n\nexport default LinkTooltip;\n","import { NodeSelection } from 'prosemirror-state';\n\nclass ImageTooltip {\n constructor(view) {\n this.tooltip = document.createElement('div');\n this.tooltip.className = 'link-tooltip image-tooltip';\n\n this.buttons = [];\n\n this.tooltipImageSmall = document.createElement('span');\n this.tooltipImageSmall.innerText = 'Small';\n this.buttons.push(this.tooltipImageSmall);\n this.tooltipImageMedium = document.createElement('span');\n this.tooltipImageMedium.innerText= 'Medium';\n this.buttons.push(this.tooltipImageMedium);\n this.tooltipImageLarge = document.createElement('span');\n this.tooltipImageLarge.innerText = 'Large';\n this.buttons.push(this.tooltipImageLarge);\n this.tooltipImageOrig = document.createElement('span');\n this.tooltipImageOrig.innerText = 'Original';\n this.buttons.push(this.tooltipImageOrig);\n\n this.buttons.forEach((button, index) => {\n let tooltipDiv = document.createElement('div');\n tooltipDiv.className = index === 3 ? '' : 'image-tooltip-div';\n button.onclick = () => console.log(button.innerText);\n tooltipDiv.appendChild(button);\n this.tooltip.appendChild(tooltipDiv);\n })\n \n view.dom.parentNode.appendChild(this.tooltip);\n\n this.update(view, null);\n }\n\n handleClick({ node, from, view, width }) {\n let transaction = view.state.tr.setNodeMarkup(\n from, null, {src: node.attrs.src, width: width} \n );\n const resolvedPos = transaction.doc.resolve(from);\n const nodeSelection = new NodeSelection(resolvedPos);\n transaction = transaction.setSelection(nodeSelection);\n view.dispatch(transaction);\n view.focus();\n }\n\n update(view, lastState) {\n let state = view.state;\n // Don't do anything if the document/selection didn't change\n if (\n lastState &&\n lastState.doc.eq(state.doc) &&\n lastState.selection.eq(state.selection)\n ) {\n return;\n }\n\n let { empty } = state.selection;\n // Don't display if there's a non-empty selection, or no cursor\n if (empty) {\n this.tooltip.style.display = 'none';\n return;\n }\n this.tooltip.style.display = '';\n let { from, to } = state.selection;\n // Check that we've selected an image\n let imageSelected = false;\n let nodeSelection = null;\n state.doc.nodesBetween(from, to, (node) => {\n if (node.type.name === 'image') {\n imageSelected = true;\n nodeSelection = NodeSelection.create(state.doc, from);\n }\n });\n // Otherwise don't display\n if (!imageSelected) {\n this.tooltip.style.display = 'none';\n return;\n }\n // Viewport coordinates\n let start = view.coordsAtPos(from);\n let end = view.coordsAtPos(to)\n \n // Parent bounding box\n let box = this.tooltip.offsetParent.getBoundingClientRect();\n const scrollTop = this.tooltip.offsetParent.scrollTop;\n let origTooltipLeft = Math.max((start.left + end.left) / 2, start.left + 3) - box.left;\n this.tooltip.style.left = `${origTooltipLeft}px`;\n let tooltipBottom = box.bottom - start.top - 42 - scrollTop;\n this.tooltip.style.bottom = `${tooltipBottom}px`;\n\n let tooltipRect = this.tooltip.getBoundingClientRect();\n\n // Handle horizontal overflow\n if (tooltipRect.left < box.left) {\n let newTooltipLeft = (box.left + box.right) / 2 - box.left;\n this.tooltip.style.left = `${newTooltipLeft}px`;\n }\n if (tooltipRect.right > box.right) {\n const overflow = tooltipRect.right - box.right;\n this.tooltip.style.left = `${origTooltipLeft - overflow - 20}px`;\n }\n \n // Handle vertical overflow\n if (tooltipRect.top < box.top) {\n const diff = box.top - tooltipRect.top;\n this.tooltip.style.bottom = `${tooltipBottom - diff - 10}px`;\n }\n const node = nodeSelection !== null ? nodeSelection.node : null;\n this.tooltipImageSmall.onclick = () => this.handleClick({ node, from, view, width: '240px' });\n this.tooltipImageMedium.onclick = () => this.handleClick({ node, from, view, width: '500px' });\n this.tooltipImageLarge.onclick = () => this.handleClick({ node, from, view, width: '1024px' });\n this.tooltipImageOrig.onclick = () => this.handleClick({ node, from, view, width: 'unset' });\n }\n\n destroy() {\n this.tooltip.remove();\n }\n}\n\nexport default ImageTooltip;\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\n\nimport { yellow500 } from 'material-ui/styles/colors';\nimport DropDownMenu from 'material-ui/DropDownMenu';\nimport IconMenu from 'material-ui/IconMenu';\nimport Popover from 'material-ui/Popover';\nimport Menu from 'material-ui/Menu';\nimport MenuItem from 'material-ui/MenuItem';\nimport { Toolbar, ToolbarGroup } from 'material-ui/Toolbar';\nimport Dialog from 'material-ui/Dialog';\nimport FlatButton from 'material-ui/FlatButton';\nimport TextField from 'material-ui/TextField';\nimport CircularProgress from 'material-ui/CircularProgress';\nimport DeleteForever from 'material-ui/svg-icons/action/delete-forever';\n\nimport { SketchPicker } from 'react-color';\n\nimport IconButton from 'material-ui/IconButton';\nimport TextFields from 'material-ui/svg-icons/editor/text-fields';\nimport FormatBold from 'material-ui/svg-icons/editor/format-bold';\nimport FormatItalic from 'material-ui/svg-icons/editor/format-italic';\nimport FormatUnderlined from 'material-ui/svg-icons/editor/format-underlined';\nimport FormatStrikethrough from 'material-ui/svg-icons/editor/format-strikethrough';\nimport FormatQuote from 'material-ui/svg-icons/editor/format-quote';\nimport InsertLink from 'material-ui/svg-icons/editor/insert-link';\nimport LineSpacing from 'material-ui/svg-icons/editor/format-line-spacing';\nimport FormatListBulleted from 'material-ui/svg-icons/editor/format-list-bulleted';\nimport FormatListNumbered from 'material-ui/svg-icons/editor/format-list-numbered';\nimport IncreaseIndent from 'material-ui/svg-icons/editor/format-indent-increase';\nimport DecreaseIndent from 'material-ui/svg-icons/editor/format-indent-decrease';\nimport EllipsisIcon from 'material-ui/svg-icons/navigation/more-horiz';\nimport BorderColor from 'material-ui/svg-icons/editor/border-color';\nimport CropFree from 'material-ui/svg-icons/image/crop-free';\nimport ViewColumn from 'material-ui/svg-icons/action/view-column';\nimport InsertImage from 'material-ui/svg-icons/editor/insert-photo';\nimport { Hr, Table } from 'react-bootstrap-icons';\nimport PageMargins from './icons/PageMargins';\nimport { Schema, DOMSerializer } from 'prosemirror-model';\nimport { EditorState, TextSelection, Plugin } from 'prosemirror-state';\nimport { EditorView, Decoration, DecorationSet } from 'prosemirror-view';\nimport { AddMarkStep, RemoveMarkStep, ReplaceStep } from 'prosemirror-transform';\nimport { addListNodes, wrapInList } from 'prosemirror-schema-list';\nimport { toggleMark, wrapIn } from 'prosemirror-commands';\nimport { exampleSetup } from 'prosemirror-example-setup';\nimport { undo, redo } from \"prosemirror-history\";\nimport { keymap } from \"prosemirror-keymap\";\nimport {\n tableEditing,\n columnResizing,\n tableNodes,\n addColumnBefore,\n addColumnAfter,\n deleteColumn,\n addRowBefore,\n addRowAfter,\n deleteRow,\n deleteTable,\n mergeCells,\n toggleHeaderColumn,\n toggleHeaderRow,\n isInTable,\n goToNextCell,\n} from \"prosemirror-tables\";\n\nimport { schema } from './TextSchema';\nimport {\n addMark,\n decreaseIndent,\n increaseIndent,\n removeMark,\n replaceNodeWith,\n setNodeAttributes,\n} from './TextCommands';\nimport { addTable } from './TextTableCommands';\nimport HighlightColorSelect from './HighlightColorSelect';\nimport {\n updateEditorState,\n setTextHighlightColor,\n toggleTextColorPicker,\n setHighlightSelectMode,\n selectHighlight,\n closeEditor\n} from './modules/textEditor';\nimport { setGlobalCanvasDisplay } from './modules/canvasEditor';\nimport {\n TEXT_HIGHLIGHT_DELETE,\n MAX_EXCERPT_LENGTH,\n addHighlight,\n updateHighlight,\n duplicateHighlights,\n updateDocument,\n openDeleteDialog\n} from './modules/documentGrid';\n\nimport ProseMirrorEditorView from './ProseMirrorEditorView';\nimport Checkbox from 'material-ui/Checkbox';\nimport LinkTooltip from './TextLinkTooltipPlugin';\nimport ImageTooltip from './TextImageTooltipPlugin';\nimport { DirectUploadProvider } from '@docflow/react-activestorage-provider';\n\nconst fontFamilies = ['sans-serif', 'serif', 'monospace', 'cursive'];\n\nconst lineHeights = [1, 1.15, 1.5, 2];\n\nconst buttonWidth = 48;\n\nconst validURLRegex = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i\nconst validImageRegex = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?\\.(?:jpg|gif|png)$/i\n\nclass TextResource extends Component {\n\n constructor(props) {\n super(props);\n\n this.highlightsToDuplicate = [];\n this.props.setTextHighlightColor(this.getInstanceKey(), yellow500);\n this.scheduledContentUpdate = null;\n\n this.editorViewWrapper = React.createRef();\n\n this.tools = [\n { name: 'highlight-color', width: buttonWidth, text: 'Change highlight color' },\n { name: 'highlight', width: buttonWidth, text: 'Highlight selected text' },\n { name: 'highlight-select', width: buttonWidth, text: 'Select a highlight' },\n { name: 'text-color', width: buttonWidth, text: 'Change text color' },\n { name: 'bold', width: buttonWidth, text: 'Bold' },\n { name: 'italic', width: buttonWidth, text: 'Italicize' },\n { name: 'underline', width: buttonWidth, text: 'Underline' },\n { name: 'strikethrough', width: buttonWidth, text: 'Strikethrough' },\n { name: 'font-family', width: 148 },\n { name: 'font-size', width: 72 },\n { name: 'link', width: buttonWidth, text: 'Hyperlink' },\n { name: 'image', width: buttonWidth, text: 'Insert image' },\n { name: 'blockquote', width: buttonWidth, text: 'Blockquote' },\n { name: 'hr', width: buttonWidth, text: 'Horizontal rule' },\n { name: 'table', width: buttonWidth, text: 'Insert/edit table' },\n { name: 'line-spacing', width: buttonWidth, text: 'Line spacing' },\n { name: 'decrease-indent', width: buttonWidth, text: 'Decrease indent' },\n { name: 'increase-indent', width: buttonWidth, text: 'Increase indent' },\n { name: 'bulleted-list', width: buttonWidth, text: 'Bulleted list' },\n { name: 'numbered-list', width: buttonWidth, text: 'Numbered list' },\n { name: 'columns', width: buttonWidth, text: 'Set column count' },\n { name: 'margin', width: buttonWidth, text: 'Set page margins' },\n { name: 'highlight-delete', width: buttonWidth, text: 'Delete selected highlight' },\n ].map((tool, position) => {\n return { ...tool, position }\n });\n\n this.tableTools = [\n { name: 'insert-col-before', text: 'Insert column before', cmd: addColumnBefore },\n { name: 'insert-col-after', text: 'Insert column after', cmd: addColumnAfter },\n { name: 'delete col', text: 'Delete column', cmd: deleteColumn },\n { name: 'insert-row-before', text: 'Insert row before', cmd: addRowBefore },\n { name: 'insert-row-after', text: 'Insert row after', cmd: addRowAfter },\n { name: 'delete-row', text: 'Delete row', cmd: deleteRow },\n { name: 'toggle-header-col', text: 'Toggle header column', cmd: toggleHeaderColumn },\n { name: 'toggle-header-row', text: 'Toggle header row', cmd: toggleHeaderRow },\n { name: 'merge-cells', text: 'Merge cells', cmd: mergeCells },\n { name: 'delete-table', text: 'Delete table', cmd: deleteTable },\n ];\n\n this.initialLinkDialogState = {\n linkDialogOpen: false,\n linkDialogBuffer: \"\",\n linkDialogBufferInvalid: false,\n createHyperlink: null,\n }\n\n this.initialImageDialogState = {\n imageDialogOpen: false,\n imageDialogBuffer: '',\n imageDialogBufferInvalid: false,\n createImage: null,\n uploadedImage: null,\n uploadingImage: false,\n imageUploadText: '',\n }\n\n this.initialTableDialogState = {\n tableDialogOpen: false,\n tableDialogRows: '',\n tableDialogCols: '',\n tableDialogHeader: false,\n tableDialogRowsInvalid: false,\n tableDialogColsInvalid: false,\n createTable: null,\n }\n\n this.initialMarginDialogState = {\n marginDialogOpen: false,\n marginLeft: this.props.content.marginLeft || '',\n marginRight: this.props.content.marginRight || '',\n marginTop: this.props.content.marginTop || '',\n marginBottom: this.props.content.marginBottom || '',\n priorMargins: {\n marginLeft: this.props.content.marginLeft || '',\n marginRight: this.props.content.marginRight || '',\n marginTop: this.props.content.marginTop || '',\n marginBottom: this.props.content.marginBottom || '',\n },\n marginLefttInvalid: false,\n marginRightInvalid: false,\n marginTopInvalid: false,\n marginBottomInvalid: false,\n setPageMargin: null,\n }\n\n this.state = {\n editorView: null,\n documentSchema: this.createDocumentSchema(),\n targetHighlights: [],\n currentScrollTop: 0,\n toolbarWidth: 0,\n hiddenTools: ['highlight-delete'],\n hiddenToolsOpen: false,\n hiddenToolsAnchor: undefined,\n textColor: 'teal',\n colorPickerOpen: false,\n colorPickerAnchor: undefined,\n tooltipOpen: {},\n tooltipAnchor: {},\n tableMenuOpen: false,\n tableMenuAnchor: undefined,\n columnCount: this.props.content.columnCount || 1,\n ...this.initialLinkDialogState,\n ...this.initialTableDialogState,\n ...this.initialMarginDialogState,\n ...this.initialImageDialogState,\n };\n }\n \n componentDidUpdate(prevProps, prevState) {\n if (this.state.targetHighlights !== prevState.targetHighlights) {\n this.createEditorState();\n }\n if (this.props.index !== prevProps.index && this.state.currentScrollTop && this.editorViewWrapper.current) {\n this.editorViewWrapper.current.scrollTo(0, this.state.currentScrollTop);\n }\n if (this.props.content !== prevProps.content) {\n this.createEditorState();\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n this.props.setSaving({ doneSaving: true });\n }\n if (this.props.content.marginLeft !== prevProps.content.marginLeft) {\n this.setState({ marginLeft: this.props.content.marginLeft });\n }\n if (this.props.content.marginRight !== prevProps.content.marginRight) {\n this.setState({ marginRight: this.props.content.marginRight });\n }\n if (this.props.content.marginTop !== prevProps.content.marginTop) {\n this.setState({ marginTop: this.props.content.marginTop });\n }\n if (this.props.content.marginBottom !== prevProps.content.marginBottom) {\n this.setState({ marginBottom: this.props.content.marginBottom });\n }\n if (this.props.content.columnCount !== prevProps.content.columnCount) {\n this.setState({ columnCount: this.props.content.columnCount });\n }\n }\n\n renderTool = ({ toolName, text }) => {\n const { \n highlightColors,\n displayColorPickers,\n setTextHighlightColor,\n toggleTextColorPicker,\n highlightSelectModes,\n selectedHighlights,\n loading\n } = this.props;\n \n const instanceKey = this.getInstanceKey();\n let tooltip = '';\n\n switch (toolName) {\n case 'highlight-color':\n return (\n{this.props.setHighlightColor(color.hex);}}\n />\n {toggleTextColorPicker(instanceKey);}}\n onMouseOver={this.onTooltipOpen.bind(this, toolName)}\n onMouseOut={this.onTooltipClose.bind(this, toolName)}\n />\n );\n\n case 'highlight':\n return (\n \n \n );\n\n case 'text-color':\n return (\n\n \n \n )\n \n case 'bold':\n return (\n\n \n \n );\n\n case 'italic':\n return (\n\n \n \n );\n\n case 'underline':\n return (\n\n \n \n );\n\n case 'strikethrough':\n return (\n\n \n \n );\n \n case 'font-size':\n return this.renderFontSizeDropDown(loading);\n\n case 'font-family':\n return this.renderFontFamilyDropDown(loading);\n\n case 'link':\n return (\n\n \n \n );\n\n case 'image':\n return (\n\n \n \n );\n\n case 'table':\n tooltip=!this.state.hiddenTools.includes(toolName) ? text : undefined;\n return this.renderTableMenu(loading, tooltip);\n\n case 'line-spacing':\n tooltip=!this.state.hiddenTools.includes(toolName) ? text : undefined;\n return this.renderLineSpacingMenu(loading, tooltip);\n\n case 'columns':\n tooltip=!this.state.hiddenTools.includes(toolName) ? text : undefined;\n return this.renderColumnsMenu(loading, tooltip);\n\n case 'bulleted-list':\n return (\n\n \n \n );\n\n case 'numbered-list':\n return (\n\n \n \n );\n\n case 'decrease-indent':\n return (\n\n \n \n );\n\n case 'increase-indent':\n return (\n\n \n \n );\n \n case 'blockquote':\n return (\n\n \n \n );\n\n case 'hr': {\n return (\n\n \n \n )\n }\n \n case 'highlight-select':\n return (\n
\n\n \n );\n\n case 'margin':\n return (\n\n \n \n );\n \n case 'highlight-delete':\n return (\n\n \n \n );\n \n default:\n return ();\n }\n }\n\n renderTooltipFromHidden ({ toolName, text }) {\n return (\n\n \n {text}\n \n );\n }\n\n onTooltipOpen (toolName, e) {\n e.persist();\n const anchorEl = e.currentTarget;\n e.preventDefault();\n this.setState((prevState) => {\n return {\n ...prevState,\n tooltipOpen: { ...prevState.tooltipOpen, [toolName]: true },\n tooltipAnchor: { ...prevState.tooltipAnchor, [toolName]: anchorEl },\n }\n });\n }\n\n onTooltipClose (toolName) {\n this.setState((prevState) => {\n return {\n ...prevState,\n tooltipOpen: { ...prevState.tooltipOpen, [toolName]: false },\n }\n });\n this.state.editorView.focus();\n }\n\n onToolbarWidthChange(node) {\n if (node && node.offsetWidth !== this.state.toolbarWidth) {\n let hiddenTools = this.state.hiddenTools;\n let sumWidths = 0;\n let hidingBegan = false;\n this.tools\n .sort((a, b) => a.position - b.position)\n .forEach((tool) => {\n if (sumWidths + tool.width + buttonWidth < node.offsetWidth && !hidingBegan) {\n sumWidths += tool.width;\n if (hiddenTools.includes(tool.name) && tool.name !== 'highlight-delete') {\n hiddenTools.splice(hiddenTools.indexOf(tool.name), 1);\n }\n } else {\n hidingBegan = true;\n hiddenTools.push(tool.name);\n }\n });\n this.setState({ hiddenTools });\n this.setState({ toolbarWidth: node.offsetWidth });\n }\n }\n \n mergeRefs (...refs) {\n const filteredRefs = refs.filter(Boolean);\n if (!filteredRefs.length) return null;\n if (filteredRefs.length === 1) return filteredRefs[0];\n return inst => {\n for (const ref of filteredRefs) {\n if (typeof ref === 'function') {\n ref(inst);\n } else if (ref) {\n ref.current = inst;\n }\n }\n };\n };\n \n onScrollChange (node) {\n if (node !== null && node.scrollTop !== this.state.currentScrollTop) {\n this.setState({ currentScrollTop: node.scrollTop });\n }\n }\n\n createDocumentSchema() {\n const { document_id } = this.props;\n const instanceKey = this.getInstanceKey();\n\n const toDOM = function(mark) {\n const highlightInfo = this.props.getHighlightMap()[mark.attrs.highlightUid];\n const color = highlightInfo ? highlightInfo.color : (mark.attrs.tempColor || this.props.highlightColors[instanceKey]);\n const properties = {\n class: `dm-highlight ${instanceKey}-${mark.attrs.highlightUid}`,\n style: `background: ${color};`,\n onclick: `window.selectTextHighlight('${document_id}', '${mark.attrs.highlightUid}', '${instanceKey}')`,\n onmouseenter: `window.showRollover('${document_id}', '${mark.attrs.highlightUid}', '${instanceKey}')`,\n onmouseleave: `window.hideRollover('${mark.attrs.highlightUid}')`\n };\n properties['data-highlight-uid'] = mark.attrs.highlightUid;\n properties['data-document-id'] = mark.attrs.documentId;\n return ['span', properties, 0];\n }.bind(this);\n\n const highlightSpec = {\n attrs: {highlightUid: {default: 'dm_new_highlight'}, documentId: {default: null}, tempColor: {default: null}},\n toDOM: toDOM,\n parseDOM: [{tag: 'span.dm-highlight', getAttrs(dom) {\n return {\n highlightUid: dom.getAttribute('data-highlight-uid'),\n documentId: dom.getAttribute('data-document-id'),\n tempColor: dom.style.background\n };\n }}]\n }\n\n const marks = schema.spec.marks.addBefore('link', 'highlight', highlightSpec)\n let nodes = addListNodes( schema.spec.nodes, 'paragraph block*', 'block')\n nodes = nodes.append( tableNodes({\n tableGroup: \"block\",\n cellContent: \"block+\",\n cellAttributes: {\n background: {\n default: null,\n getFromDOM(dom) { return dom.style.backgroundColor || null },\n setDOMAttr(value, attrs) { if (value) attrs.style = (attrs.style || \"\") + `background-color: ${value};` }\n }\n }\n }))\n\n // create schema based on prosemirror-schema-basic\n return new Schema({ nodes, marks });\n }\n\n getEditorState() {\n const { editorStates } = this.props;\n const existingEditorState = editorStates[this.getInstanceKey()];\n\n if( !existingEditorState ) {\n return this.createEditorState();\n } else {\n return existingEditorState;\n }\n }\n\n createEditorState() {\n const dmSchema = this.state.documentSchema;\n\n let plugins = exampleSetup({\n schema: dmSchema,\n menuBar: false\n });\n\n // add table and history commands\n plugins.push( \n columnResizing(),\n tableEditing(),\n keymap({\n \"Mod-z\": undo,\n \"Mod-y\": redo,\n \"Mod-u\": this.onUnderlineByKey.bind(this),\n \"Ctrl-u\": this.onUnderlineByKey.bind(this),\n \"Mod-X\": this.onStrikethroughByKey.bind(this),\n \"Ctrl-X\": this.onStrikethroughByKey.bind(this),\n \"Tab\": this.handleTab.bind(this),\n \"Shift-Tab\": this.handleShiftTab.bind(this),\n })\n );\n\n const highlightSelectPlugin = new Plugin({\n props: {\n decorations: function(state) {\n let decorations = [];\n const selectedHighlight = this.props.getSelectedHighlight(this.getInstanceKey());\n if (selectedHighlight) {\n state.doc.descendants((node, position) => {\n node.marks.forEach(mark => {\n if (mark.type.name === this.state.documentSchema.marks.highlight.name && mark.attrs.highlightUid === selectedHighlight) {\n decorations.push(Decoration.inline(position, position + node.nodeSize, {class: 'selected'}));\n }\n });\n });\n }\n return DecorationSet.create(state.doc, decorations);\n }.bind(this)\n }\n });\n\n plugins.push(highlightSelectPlugin);\n\n\n const highlightTargetPlugin = new Plugin({\n props: {\n decorations: function(state) {\n let decorations = [];\n const targetHighlights = this.state.targetHighlights;\n if (targetHighlights && targetHighlights.length > 0) {\n state.doc.descendants((node, position) => {\n node.marks.forEach(mark => {\n if (mark.type.name === this.state.documentSchema.marks.highlight.name && targetHighlights.includes(mark.attrs.highlightUid)) {\n decorations.push(Decoration.inline(position, position + node.nodeSize, {class: 'targeted'}));\n }\n });\n });\n }\n return DecorationSet.create(state.doc, decorations);\n }.bind(this)\n }\n });\n\n plugins.push(highlightTargetPlugin);\n\n const linkPreviewPlugin = new Plugin({\n view(editorView) { return new LinkTooltip(editorView) }\n });\n\n plugins.push(linkPreviewPlugin);\n\n const imageResizePlugin = new Plugin({\n view(editorView) { return new ImageTooltip(editorView) }\n });\n \n if(this.isEditable()) plugins.push(imageResizePlugin);\n\n // create a new editor state\n const doc = dmSchema.nodeFromJSON(this.props.content);\n const editorState = EditorState.create({\n doc,\n selection: TextSelection.create(doc, 0),\n plugins\n })\n this.props.updateEditorState(this.getInstanceKey(), editorState);\n return editorState;\n }\n\n toSearchText(document) {\n return document.textBetween(0,document.nodeSize - 2, ' ');\n }\n\n onHighlight = (e) => {\n e.preventDefault();\n const markType = this.state.documentSchema.marks.highlight;\n const { document_id } = this.props;\n const editorState = this.getEditorState();\n const cmd = addMark( markType, {highlightUid: `dm_text_highlight_${Date.now()}`, documentId: document_id });\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onColorPickerOpen(e) {\n e.preventDefault();\n this.setState({\n colorPickerOpen: true,\n colorPickerAnchor: e.currentTarget,\n });\n }\n\n onColorPickerClose() {\n this.setState({\n colorPickerOpen: false,\n });\n this.state.editorView.focus();\n }\n\n onChangeTextColor = (color) => {\n this.setState({ textColor: color.hex });\n const colorMarkType = this.state.documentSchema.marks.color;\n const editorState = this.getEditorState();\n const cmd = color ? addMark( colorMarkType, { color: color.hex } ) : removeMark( colorMarkType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onBold = (e) => {\n e.preventDefault();\n const markType = this.state.documentSchema.marks.strong;\n const editorState = this.getEditorState();\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onItalic = (e) => {\n e.preventDefault();\n const markType = this.state.documentSchema.marks.em;\n const editorState = this.getEditorState();\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onUnderlineByKey = (editorState) => {\n const markType = this.state.documentSchema.marks.underline;\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n preventDefaultKeymaps = (e) => {\n if (\n (e.metaKey && e.key === 'u')\n || (e.ctrlKey && e.key === 'u')\n || (e.key === 'Tab')\n ) {\n e.preventDefault();\n }\n }\n\n onUnderline = (e) => {\n e.preventDefault();\n const markType = this.state.documentSchema.marks.underline;\n const editorState = this.getEditorState();\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onStrikethrough = (e) => {\n e.preventDefault();\n const markType = this.state.documentSchema.marks.strikethrough;\n const editorState = this.getEditorState();\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onStrikethroughByKey = (editorState) => {\n const markType = this.state.documentSchema.marks.strikethrough;\n const cmd = toggleMark( markType );\n cmd( editorState, this.state.editorView.dispatch );\n }\n\n onIncreaseIndent = (e) => {\n e.preventDefault();\n const nodeType = this.state.documentSchema.nodes.paragraph;\n const editorState = this.getEditorState();\n const cmd = increaseIndent(nodeType, false);\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onDecreaseIndent = (e) => {\n e.preventDefault();\n const nodeType = this.state.documentSchema.nodes.paragraph;\n const editorState = this.getEditorState();\n const cmd = decreaseIndent(nodeType, true);\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onIncreaseIndentByKey = (editorState) => {\n const nodeType = this.state.documentSchema.nodes.paragraph;\n const cmd = increaseIndent(nodeType, true);\n cmd( editorState, this.state.editorView.dispatch );\n }\n\n onDecreaseIndentByKey = (editorState) => {\n const nodeType = this.state.documentSchema.nodes.paragraph;\n const cmd = decreaseIndent(nodeType, false);\n cmd( editorState, this.state.editorView.dispatch );\n }\n // markActive(state, type) {\n // let {from, $from, to, empty} = state.selection\n // if (empty) return type.isInSet(state.storedMarks || $from.marks())\n // else return state.doc.rangeHasMark(from, to, type)\n // }\n\n onHyperLink = (e) => {\n e.preventDefault();\n\n // http://prosemirror.net/examples/menu/\n // is the caret in a hyperlink presently?\n\n const createHyperlink = (url) => {\n const markType = this.state.documentSchema.marks.link;\n const editorState = this.getEditorState();\n const cmd = addMark( markType, { href: url } );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n this.setState( {...this.state, linkDialogOpen: true, createHyperlink } );\n }\n\n onImage = (e) => {\n e.preventDefault();\n const createImage = (url) => {\n const imageNodeType = this.state.documentSchema.nodes.image;\n const editorState = this.getEditorState();\n const cmd = replaceNodeWith(imageNodeType, { src: url });\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n this.setState( {...this.state, imageDialogOpen: true, createImage } );\n }\n\n onOrderedList(e) {\n e.preventDefault();\n const orderedListNodeType = this.state.documentSchema.nodes.ordered_list;\n const editorState = this.getEditorState();\n const cmd = wrapInList( orderedListNodeType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onBulletList(e) {\n e.preventDefault();\n const bulletListNodeType = this.state.documentSchema.nodes.bullet_list;\n const editorState = this.getEditorState();\n const cmd = wrapInList( bulletListNodeType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onBlockquote(e) {\n e.preventDefault();\n const blockquoteNodeType = this.state.documentSchema.nodes.blockquote;\n const editorState = this.getEditorState();\n const cmd = wrapIn( blockquoteNodeType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onHR(e) {\n e.preventDefault();\n const hrNodeType = this.state.documentSchema.nodes.horizontal_rule;\n const editorState = this.getEditorState();\n const cmd = replaceNodeWith(hrNodeType);\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onFontSizeChange(e,i,fontSize) {\n e.preventDefault();\n const textStyleMarkType = this.state.documentSchema.marks.textStyle;\n const editorState = this.getEditorState();\n const cmd = fontSize ? addMark( textStyleMarkType, { fontSize } ) : removeMark( textStyleMarkType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onFontFamilyChange(e,i,fontFamily) {\n e.preventDefault();\n const fontFamilyMarkType = this.state.documentSchema.marks.fontFamily;\n const editorState = this.getEditorState();\n const cmd = fontFamily ? addMark( fontFamilyMarkType, { fontFamily } ) : removeMark( fontFamilyMarkType );\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onLineSpacingChange = (e, lineHeight) => {\n e.preventDefault();\n const nodeType = this.state.documentSchema.nodes.paragraph;\n const editorState = this.getEditorState();\n const cmd = setNodeAttributes(nodeType, { lineHeight });\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n }\n\n onHighlightSelectMode(e) {\n e.preventDefault();\n const key = this.getInstanceKey();\n this.props.setHighlightSelectMode(key, !this.props.highlightSelectModes[key]);\n }\n\n onDeleteHighlight(e) {\n e.preventDefault();\n const selectedHighlight = this.props.selectedHighlights[this.getInstanceKey()];\n if (selectedHighlight) {\n const markType = this.state.documentSchema.marks.highlight;\n const editorState = this.getEditorState();\n const cmd = removeMark( markType, selectedHighlight );\n cmd( editorState, this.state.editorView.dispatch );\n }\n this.state.editorView.focus();\n }\n\n onTableClick(e) {\n e.preventDefault();\n const createTable = ({ rowsCount, colsCount, withHeaderRow }) => {\n const editorState = this.getEditorState();\n const dispatch = this.state.editorView.dispatch;\n addTable(editorState, dispatch, { rowsCount, colsCount, withHeaderRow });\n this.state.editorView.focus();\n }\n this.setState( {...this.state, tableDialogOpen: true, createTable } );\n }\n\n onTableMenuChange(e, action) {\n e.preventDefault();\n switch (action) {\n case 'insert-table':\n this.onTableClick(e);\n break;\n default:\n const editorState = this.getEditorState();\n const { cmd } = this.tableTools.find((tool) => tool.name === action);\n cmd( editorState, this.state.editorView.dispatch );\n this.state.editorView.focus();\n break;\n }\n }\n\n onHiddenToolsOpen(e) {\n e.preventDefault();\n this.setState({\n hiddenToolsOpen: true,\n hiddenToolsAnchor: e.currentTarget,\n });\n }\n\n onHiddenToolsClose(e) {\n this.setState({\n hiddenToolsOpen: false,\n });\n }\n\n onMarginClick(e) {\n e.preventDefault();\n const setPageMargin = ({ marginTop, marginBottom, marginLeft, marginRight }) => {\n const editorState = this.getEditorState();\n this.props.updateDocument(\n this.props.document_id,\n { \n content: {\n type: 'doc',\n content: editorState.doc.content,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n columnCount: this.state.columnCount,\n },\n },\n { refreshDocumentContent: true, timeOpened: this.props.timeOpened },\n );\n this.state.editorView.focus();\n }\n const { marginTop, marginBottom, marginLeft, marginRight } = this.state;\n this.setState(prevState => ({\n ...prevState,\n marginDialogOpen: true,\n setPageMargin,\n priorMargins: {\n marginTop, marginBottom, marginLeft, marginRight\n },\n }));\n }\n\n onColumnsChange(e, columnCount) {\n e.preventDefault();\n const editorState = this.getEditorState();\n this.setState({ columnCount });\n const { marginTop, marginBottom, marginLeft, marginRight } = this.state;\n this.props.updateDocument(\n this.props.document_id,\n { \n content: {\n type: 'doc',\n content: editorState.doc.content,\n marginTop,\n marginBottom,\n marginLeft,\n marginRight,\n columnCount,\n },\n },\n { refreshDocumentContent: true, timeOpened: this.props.timeOpened },\n );\n this.state.editorView.focus();\n }\n\n handleTab(editorState) {\n if (isInTable(editorState)) {\n goToNextCell(1)(editorState, this.state.editorView.dispatch);\n } else {\n this.onIncreaseIndentByKey(editorState);\n }\n }\n\n handleShiftTab(editorState) {\n if (isInTable(editorState)) {\n goToNextCell(-1)(editorState, this.state.editorView.dispatch);\n } else {\n this.onDecreaseIndentByKey(editorState);\n }\n }\n\n componentWillReceiveProps(nextProps) {\n // When we receive new EditorState through props — we apply it to the\n // EditorView instance and update local state for this component\n const editorState = this.getEditorState();\n if (editorState && nextProps.editorStates ) {\n const nextEditorState = nextProps.editorStates[this.getInstanceKey()];\n if( this.state.editorView && nextEditorState ) {\n this.state.editorView.updateState(nextEditorState);\n }\n }\n }\n\n isEditable = () => {\n const { writeEnabled, lockedByMe } = this.props;\n return ( writeEnabled && lockedByMe );\n }\n\n createEditorView = (element) => {\n if( !this.state.editorView ) {\n const editorState = this.getEditorState();\n const editorView = new EditorView(element, {\n state: editorState,\n dispatchTransaction: this.dispatchTransaction,\n handlePaste: this.handlePaste,\n editable: () => this.isEditable() && !this.props.loading,\n });\n\n let targetHighlight = null;\n // if a highlight is targeted, locate it in props\n if( this.props.firstTarget ) {\n for( let key in this.props.highlight_map ) {\n let currentHighlight = this.props.highlight_map[key]\n if( currentHighlight.uid === this.props.firstTarget ) {\n targetHighlight = currentHighlight\n break\n }\n }\n if( targetHighlight ) {\n // find the highlight position in the doc\n let targetPosition\n editorState.doc.descendants( (node, pos) => {\n if( targetPosition ) return false\n if( node.marks.find( mark => { return mark.attrs.highlightUid === targetHighlight.target } ) )\n targetPosition = pos\n })\n // scroll to position\n if( targetPosition ) {\n const domNode = editorView.nodeDOM(targetPosition)\n if( domNode ) {\n // parent node is the highlight span\n domNode.parentNode.scrollIntoView({block: \"center\"})\n window.scrollTo(0,0)\n }\n }\n }\n }\n\n // to allow resize of tables\n document.execCommand(\"enableObjectResizing\", false, false)\n document.execCommand(\"enableInlineTableEditing\", false, false)\n\n this.setState(prevState => (\n { \n ...prevState,\n targetHighlights: targetHighlight !== null ? [...prevState.targetHighlights, targetHighlight.target] : [],\n editorView\n }\n ));\n }\n }\n\n collectHighlights(startNode, from, to) {\n let highlights = [];\n startNode.nodesBetween(from, to, node => {\n node.marks.forEach(mark => {\n if (mark.type.name === this.state.documentSchema.marks.highlight.name)\n highlights.push(mark);\n });\n });\n return highlights;\n }\n\n createHighlight = (mark, slice, serializer) => {\n const { document_id, highlightColors } = this.props;\n const { highlightUid } = mark.attrs;\n const instanceKey = this.getInstanceKey();\n let div = document.createElement('div');\n div.appendChild(serializer.serializeFragment(slice.content));\n const excerpt = div.textContent.length > MAX_EXCERPT_LENGTH ? `${div.textContent.slice(0,MAX_EXCERPT_LENGTH-3)}...` : div.textContent\n this.props.addHighlight(document_id, highlightUid, highlightUid, highlightColors[instanceKey],excerpt);\n }\n\n handlePaste = (view, event, slice) => {\n // process highlights that entered via copy and paste\n let pastedMarks = [];\n slice.content.descendants(node => {\n node.marks.forEach(mark => {\n if (mark.type === this.state.documentSchema.marks.highlight) pastedMarks.push(mark);\n });\n });\n pastedMarks.forEach((mark, index) => {\n let markEntry = Object.assign({}, mark.attrs);\n mark.attrs['highlightUid'] = markEntry['newHighlightUid'] = `dm_text_highlight_${Date.now()}_${index}`;\n mark.attrs['documentId'] = this.props.document_id;\n this.highlightsToDuplicate.push(markEntry);\n });\n }\n\n dispatchTransaction = (tx) => {\n this.processAndConfirmTransaction(tx, function(tx) {\n const editorState = this.getEditorState();\n const nextEditorState = editorState.apply(tx);\n this.state.editorView.updateState(nextEditorState);\n this.props.updateEditorState(this.getInstanceKey(), nextEditorState);\n }.bind(this));\n };\n\n processAndConfirmTransaction = (tx, callback) => {\n this.props.setSaving({ doneSaving: false });\n let postponeCallback = false;\n let postContentChanges = true;\n const serializer = DOMSerializer.fromSchema(this.state.documentSchema);\n const { steps } = tx;\n const { document_id } = this.props;\n let alteredHighlights = [];\n let effectedMarks = [];\n const editorState = this.getEditorState();\n steps.forEach(step => {\n // save new highlight\n if (step instanceof AddMarkStep && step.mark.type.name === this.state.documentSchema.marks.highlight.name) {\n this.createHighlight(step.mark, tx.curSelection.content(), serializer);\n }\n // process highlights that have been removed or altered by a text content change or a mark toggle\n else if (step instanceof ReplaceStep || (step instanceof RemoveMarkStep && step.mark.type.name === this.state.documentSchema.marks.highlight.name)) {\n // TODO: handle case where the space between two highlights is eliminated\n // pad the range where we look for effected highlights in order to accommodate edge cases with cursor at beginning or end of highlight\n let from = Math.max(step.from - 1, 0), to = step.to;\n if (step.to - step.from < 1) {\n let resolvedFrom = tx.doc.resolve(step.from);\n if (resolvedFrom.parentOffset < 1) {\n to += 1;\n }\n }\n try {\n editorState.doc.resolve(from);\n editorState.doc.resolve(to);\n effectedMarks = effectedMarks.concat(this.collectHighlights(editorState.doc, from, to));\n } catch (e) {\n console.log(e);\n }\n const additionTo = step.to + (tx.doc.nodeSize - tx.before.nodeSize);\n try {\n tx.doc.resolve(step.from);\n tx.doc.resolve(additionTo);\n const possibleNewMarks = this.collectHighlights(tx.doc, step.from, additionTo);\n possibleNewMarks.forEach(mark => {\n if (!effectedMarks.includes(mark) && !this.highlightsToDuplicate.map(item => item.newHighlightUid).includes(mark.attrs.highlightUid)) {\n this.createHighlight(mark, tx.doc.slice(step.from, additionTo), serializer);\n }\n });\n } catch (e) {\n console.log(e);\n }\n }\n });\n if (effectedMarks.length > 0) {\n let removedMarks = effectedMarks.slice(0);\n tx.doc.descendants(node => {\n node.marks.forEach(mark => {\n if (mark.type.name === this.state.documentSchema.marks.highlight.name) {\n const effectedIndex = effectedMarks.indexOf(mark);\n if (effectedIndex >= 0) {\n if (this.props.highlight_map[mark.attrs.highlightUid] && serializer.serializeNode(node).textContent !== this.props.highlight_map[mark.attrs.highlightUid].excerpt) {\n alteredHighlights.push({\n id: this.props.highlight_map[mark.attrs.highlightUid].id,\n excerpt: serializer.serializeNode(node).textContent\n });\n }\n removedMarks.splice(effectedIndex, 1); // the mark remains, so exclude it from the list of removed marks\n }\n }\n });\n });\n let toRemoveUids = [];\n for (let i = 0; i < removedMarks.length; i++) {\n const uid = removedMarks[i].attrs.highlightUid;\n if (toRemoveUids.indexOf(uid) < 0) toRemoveUids.push(uid);\n }\n if (toRemoveUids.length > 0) {\n postponeCallback = true;\n postContentChanges = false;\n this.props.openDeleteDialog(\n 'Removing highlight' + (toRemoveUids.length > 1 ? 's' : ''),\n 'Are you sure you want to destroy ' + (toRemoveUids.length > 1 ? (toRemoveUids.length) + ' highlights and their ' : 'a highlight and its ') + 'links?',\n 'Destroy ' + (toRemoveUids.length > 1 ? (toRemoveUids.length) + ' highlights' : 'highlight'),\n {\n transaction: tx,\n document_id,\n highlights: toRemoveUids.map(uid => this.props.highlight_map[uid]),\n highlightsToDuplicate: this.highlightsToDuplicate.slice(0),\n alteredHighlights,\n instanceKey: this.getInstanceKey(),\n timeOpened: this.props.timeOpened,\n },\n TEXT_HIGHLIGHT_DELETE\n );\n }\n }\n if (steps.length === 0) this.props.setSaving({ doneSaving: true });\n if (postContentChanges && tx.before.content !== tx.doc.content)\n this.scheduleContentUpdate(tx.doc)\n if (!postponeCallback) {\n if (this.highlightsToDuplicate.length > 0) {\n this.props.duplicateHighlights(this.highlightsToDuplicate, document_id);\n }\n alteredHighlights.forEach(highlight => {\n this.props.updateHighlight(highlight.id, {excerpt: highlight.excerpt});\n });\n callback(tx);\n }\n this.highlightsToDuplicate = [];\n }\n\n scheduleContentUpdate(doc) {\n const delay = 500; // milliseconds\n const content = doc.content;\n const search_text = this.toSearchText(doc)\n if (this.scheduledContentUpdate) {\n window.clearTimeout(this.scheduledContentUpdate);\n }\n this.scheduledContentUpdate = window.setTimeout(function() {\n this.props.updateDocument(\n this.props.document_id,\n {content: {type: 'doc', content}, search_text},\n { refreshDocumentContent: true, timeOpened: this.props.timeOpened },\n );\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n this.props.setSaving({ doneSaving: true });\n }.bind(this), delay);\n }\n\n getInstanceKey() {\n const { document_id, timeOpened } = this.props;\n return `${document_id}-${timeOpened}`;\n }\n\n renderColorPicker() {\n return (\n\n \n )\n }\n\n renderFontSizeDropDown(loading) {\n return (\n\n \n {[...Array(128).keys()].filter(key => key !== 0).map(key =>\n \n );\n }\n\n renderFontFamilyDropDown(loading) {\n return (\n\n )}\n \n {fontFamilies.map(family =>\n \n );\n }\n\n renderLineSpacingMenu(loading, tooltip) {\n return (\n\n )}\n \n \n )\n }\n\n closeTableMenu() {\n this.setState({\n tableMenuOpen: false,\n });\n }\n\n openTableMenu(event) {\n this.setState({\n tableMenuOpen: true,\n tableMenuAnchor: event.currentTarget,\n });\n }\n\n renderTableMenu(loading, tooltip) {\n return (\n\n \n }\n anchorOrigin={{horizontal: 'left', vertical: 'top'}}\n targetOrigin={{horizontal: 'left', vertical: 'top'}}\n >\n {lineHeights.map(height =>\n \n )}\n \n\n );\n }\n\n renderColumnsMenu(loading, tooltip) {\n return (\n{\n this.openTableMenu(event);\n }}\n >\n \n\n
this.closeTableMenu()}\n animated={true}\n style={{ zIndex: 20000 }}\n >\n \n \n\n \n )\n }\n\n renderToolbar() {\n\n if( !this.isEditable() ) return ;\n\n return (\n\n \n }\n anchorOrigin={{horizontal: 'left', vertical: 'top'}}\n targetOrigin={{horizontal: 'left', vertical: 'top'}}\n >\n {[1, 2, 3].map(columnCount =>\n \n )}\n \n\n );\n }\n\n onCancelHyperlinkDialog = () => {\n // discard the buffer state and close dialog\n this.setState({...this.state, ...this.initialLinkDialogState});\n }\n\n onSubmitHyperlinkDialog = () => {\n // call the callback if it is valid, otherwise, set error state and stay open\n const url = this.state.linkDialogBuffer;\n if( url && url.length > 0 && validURLRegex.test( url ) ) {\n this.state.createHyperlink( url );\n this.setState({\n ...this.state,\n ...this.initialLinkDialogState\n });\n } else {\n this.setState({ ...this.state, linkDialogBufferInvalid: true });\n }\n }\n\n renderLinkDialog() {\n const actions = [\ne.preventDefault()} \n >\n \n { this.renderColorPicker() }\n\n {this.tools.sort((a, b) => a.position - b.position)\n .filter(tool => !this.state.hiddenTools.includes(tool.name))\n .map(tool => this.renderTool({ toolName: tool.name, text: tool.text }))\n }\n {this.state.hiddenTools.length > 0 && (\n <>\n \n\n \n\n \n {this.tools.sort((a, b) => a.position - b.position)\n .filter(tool => this.state.hiddenTools.includes(tool.name))\n .map(tool => this.renderTool({ toolName: tool.name, text: tool.text }))\n }\n \n {this.tools.sort((a, b) => a.position - b.position)\n .filter(tool => this.state.hiddenTools.includes(tool.name))\n .map(tool => this.renderTooltipFromHidden({ toolName: tool.name, text: tool.text }))\n }\n >\n )}\n {this.renderTooltipFromHidden({ toolName: 'highlight-color', text: 'Change highlight color' })}\n {this.renderTooltipFromHidden({ toolName: 'font-family', text: 'Font' })}\n {this.renderTooltipFromHidden({ toolName: 'font-size', text: 'Font size (pt)' })}\n,\n ,\n ];\n\n return (\n \n );\n }\n\n onCancelImageDialog = () => {\n // discard the buffer state and close dialog\n this.setState({...this.state, ...this.initialImageDialogState});\n }\n\n onSubmitImageDialog = () => {\n // call the callback if it is valid, otherwise, set error state and stay open\n const url = this.state.imageDialogBuffer;\n if( url && url.length > 0 && (validImageRegex.test( url ) || this.state.uploadedImage) ) {\n this.state.createImage( url );\n this.setState({\n ...this.state,\n ...this.initialImageDialogState\n });\n } else {\n this.setState({ ...this.state, imageDialogBufferInvalid: true });\n }\n }\n\n renderImageDialog() {\n const actions = [\n ,\n ,\n ];\n\n return (\n \n );\n }\n\n onCancelTableDialog = () => {\n // discard the buffer state and close dialog\n this.setState({...this.state, ...this.initialTableDialogState});\n }\n\n onSubmitTableDialog = () => {\n // call the callback if it is valid, otherwise, set error state and stay open\n const rowsCount = parseInt(this.state.tableDialogRows, 10);\n const colsCount = parseInt(this.state.tableDialogCols, 10);\n const withHeaderRow = this.state.tableDialogHeader;\n if(!isNaN(rowsCount) && !isNaN(colsCount) \n && rowsCount > 0 && colsCount > 0\n && rowsCount < 50 && colsCount < 50) {\n this.state.createTable({ rowsCount, colsCount, withHeaderRow });\n this.setState({\n ...this.state,\n ...this.initialTableDialogState\n });\n } else {\n this.setState({ \n ...this.state, \n tableDialogRowsInvalid: (isNaN(rowsCount) || rowsCount <= 0 || rowsCount >= 50), \n tableDialogColsInvalid: (isNaN(colsCount) || colsCount <= 0 || colsCount >= 50),\n });\n }\n }\n\n renderTableDialog() {\n const actions = [\n ,\n ,\n ];\n\n return (\n \n );\n }\n\n onCancelMarginDialog = () => {\n // discard the buffer state and close dialog\n this.setState({ marginDialogOpen: false, ...this.state.priorMargins });\n }\n\n onSubmitMarginDialog = () => {\n // call the callback if it is valid, otherwise, set error state and stay open\n const marginTop = parseInt(this.state.marginTop || 0, 10);\n const marginBottom = parseInt(this.state.marginBottom || 0, 10);\n const marginLeft = parseInt(this.state.marginLeft || 0, 10);\n const marginRight = parseInt(this.state.marginRight || 0, 10);\n\n if(!isNaN(marginTop) && !isNaN(marginBottom) && !isNaN(marginLeft) && !isNaN(marginRight)\n && marginTop >= 0 && marginBottom >= 0 && marginLeft >= 0 && marginRight >= 0) {\n this.state.setPageMargin({ marginTop, marginBottom, marginLeft, marginRight });\n this.setState({\n marginDialogOpen: false,\n });\n } else {\n this.setState({\n ...this.state,\n marginTopInvalid: (isNaN(marginTop) || marginTop < 0),\n marginBottomInvalid: (isNaN(marginBottom) || marginBottom < 0),\n marginLeftInvalid: (isNaN(marginLeft) || marginLeft < 0),\n marginRightInvalid: (isNaN(marginRight) || marginRight < 0),\n });\n }\n }\n\n renderMarginDialog() {\n const actions = [\n ,\n ,\n ];\n\n return (\n \n );\n }\n\n render() {\n const marginTop = parseInt(this.state.marginTop || 0, 10);\n const marginBottom = parseInt(this.state.marginBottom || 0, 10);\n const marginLeft = parseInt(this.state.marginLeft || 0, 10);\n const marginRight = parseInt(this.state.marginRight || 0, 10);\n const columnCount = parseInt(this.state.columnCount || 1, 10);\n return (\n \n { this.props.writeEnabled ? this.renderToolbar() : \"\" }\n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n editorStates: state.textEditor.editorStates,\n highlightColors: state.textEditor.highlightColors,\n displayColorPickers: state.textEditor.displayColorPickers,\n highlightSelectModes: state.textEditor.highlightSelectModes,\n selectedHighlights: state.textEditor.selectedHighlights\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n updateEditorState,\n addHighlight,\n updateHighlight,\n duplicateHighlights,\n setTextHighlightColor,\n toggleTextColorPicker,\n setHighlightSelectMode,\n selectHighlight,\n updateDocument,\n openDeleteDialog,\n setGlobalCanvasDisplay,\n closeEditor,\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(TextResource);\n","import React from 'react';\nimport SvgIcon from 'material-ui/SvgIcon';\n\nconst RemoveFromPhotos = (props) => (\n\n {this.props.loading && this.isEditable() && (\n\n\n\n )}\n\n \n { this.renderLinkDialog() }\n { this.renderImageDialog() }\n { this.renderTableDialog() }\n { this.renderMarginDialog() }\n \n \n);\n\nRemoveFromPhotos.displayName = 'ImageAddToPhotos';\nRemoveFromPhotos.muiName = 'SvgIcon';\n\nexport default RemoveFromPhotos;","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport ActiveStorageProvider from '@docflow/react-activestorage-provider';\nimport TextField from 'material-ui/TextField';\nimport RaisedButton from 'material-ui/RaisedButton';\nimport CircularProgress from 'material-ui/CircularProgress';\nimport FlatButton from 'material-ui/FlatButton';\n\nimport CloudUpload from 'material-ui/svg-icons/file/cloud-upload';\nimport InsertLink from 'material-ui/svg-icons/editor/insert-link';\nimport Error from 'material-ui/svg-icons/alert/error';\n\nimport {\n setAddTileSourceMode,\n setImageUrl,\n IIIF_TILE_SOURCE_TYPE,\n IMAGE_URL_SOURCE_TYPE,\n UPLOAD_SOURCE_TYPE,\n changePage\n} from './modules/canvasEditor';\nimport {\n replaceDocument,\n updateDocument,\n setDocumentThumbnail,\n} from './modules/documentGrid';\nimport deepEqual from 'deep-equal';\n\nconst tileSourceTypeLabels = {};\ntileSourceTypeLabels[IIIF_TILE_SOURCE_TYPE] = {select: 'IIIF', textField: 'Link to IIIF Image Information URI'};\ntileSourceTypeLabels[IMAGE_URL_SOURCE_TYPE] = {select: 'Image URL', textField: 'Link to Web Image'};\ntileSourceTypeLabels[UPLOAD_SOURCE_TYPE] = {select: 'Upload image', textField: 'Choose files'};\n\nconst validURLRegex = /^(?:(?:(?:https?|ftp):)?\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!(?:10|127)(?:\\.\\d{1,3}){3})(?!(?:169\\.254|192\\.168)(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})).?)(?::\\d{2,5})?(?:[/?#]\\S*)?$/i\n\nclass AddImageLayer extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n newTileSourceValue: null,\n linkError: false,\n uploadErrorMessage: null,\n uploading: false,\n newImageUrls: [],\n addingNewLayers: false,\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.image_urls.length > prevProps.image_urls.length) {\n if (this.props.addTileSourceMode[this.props.document_id] === UPLOAD_SOURCE_TYPE) {\n this.props.image_urls.forEach(url =>{\n if (!prevProps.image_urls.includes(url)) {\n this.setState((prevState) => ({ ...prevState, newImageUrls: prevState.newImageUrls.concat([url]) }));\n }\n })\n } else {\n this.setState({ newImageUrls: [] });\n }\n }\n if (prevProps.content && this.props.content \n && this.props.content.tileSources && this.props.content.tileSources[0]\n && !deepEqual(prevProps.content.tileSources, this.props.content.tileSources))\n {\n this.setState({addingNewLayers: true});\n }\n }\n\n addTileSource = (addTileSourceMode) => {\n let imageUrlForThumbnail = null;\n const newContent = {};\n if (this.props.content) Object.assign(newContent, this.props.content);\n const existingTileSources = newContent.tileSources || [];\n const existingIiifTileNames = newContent.iiifTileNames || [];\n const shouldSetThumbnail = existingTileSources.length < 1;\n\n let iiifTileNames = [];\n\n let newTileSources = [];\n switch (addTileSourceMode) {\n case UPLOAD_SOURCE_TYPE:\n if (this.props.image_urls && this.props.image_urls.length > 0 \n && this.state.newImageUrls && this.state.newImageUrls.length > 0) {\n this.state.newImageUrls.forEach((url) => {\n const filename = decodeURIComponent(url.substring(\n url.lastIndexOf('/')+1,\n url.lastIndexOf('.')\n ));\n newTileSources.push({\n type: 'image',\n url,\n name: filename,\n });\n if (shouldSetThumbnail && newTileSources.length > 0)\n imageUrlForThumbnail = newTileSources[0].url;\n })\n }\n break;\n\n case IMAGE_URL_SOURCE_TYPE:\n const url = this.state.newTileSourceValue;\n const filename = url.substring(url.lastIndexOf('/')+1, url.lastIndexOf('.'));\n newTileSources.push({\n type: 'image',\n url,\n name: filename,\n });\n if (shouldSetThumbnail)\n imageUrlForThumbnail = url;\n break;\n\n case IIIF_TILE_SOURCE_TYPE:\n newTileSources.push(this.state.newTileSourceValue);\n if (shouldSetThumbnail) {\n imageUrlForThumbnail = this.state.newTileSourceValue.replace('http:', 'https:').replace('/info.json', '') + '/full/!160,160/0/default.png';\n }\n iiifTileNames.push({\n name: 'IIIF layer',\n url: this.state.newTileSourceValue,\n });\n break;\n\n default:\n newTileSources.push(this.state.newTileSourceValue);\n }\n\n this.setState(prevState => ({\n ...prevState,\n newImageUrls: [],\n newTileSourceValue: null,\n }));\n this.props.setAddTileSourceMode(this.props.document_id, null);\n\n if (shouldSetThumbnail && imageUrlForThumbnail) {\n this.props.setDocumentThumbnail({\n documentId: this.props.document_id, \n image_url: imageUrlForThumbnail,\n });\n }\n\n newContent.tileSources = existingTileSources.concat(newTileSources);\n newContent.iiifTileNames = existingIiifTileNames.concat(iiifTileNames);\n this.props.updateDocument(this.props.document_id, {\n content: newContent\n }, { replaceThisDocument: true });\n\n this.props.changePage({\n page: newContent.tileSources.length - 1,\n editorKey: this.props.editorKey,\n });\n }\n\n renderUploadButton(buttonStyle,iconStyle) {\n const {\n content,\n document_id,\n replaceDocument,\n setAddTileSourceMode,\n setLastSaved,\n setSaving,\n } = this.props;\n const allowNewLayers = this.state.addingNewLayers || (content && content.tileSources && content.tileSources.length > 0);\n return (\n\n {\n replaceDocument({\n ...document,\n locked_by_me: document.locked ? true : false,\n });\n this.addTileSource(UPLOAD_SOURCE_TYPE);\n this.setState({\n ...this.state,\n uploadErrorMessage: null,\n uploading: false,\n });\n setLastSaved(new Date().toLocaleString('en-US'));\n setSaving({ doneSaving: true });\n }}\n onError={() => {\n this.setState({\n ...this.state,\n uploadErrorMessage: 'Unable to process file.',\n uploading: false,\n });\n }}\n render={({ handleUpload, uploads, ready }) => (\n }\n label=\"Upload from Computer\"\n disabled={this.state.uploading}\n >\n {\n setAddTileSourceMode(\n document_id,\n UPLOAD_SOURCE_TYPE\n );\n this.setState({\n ...this.state,\n uploadErrorMessage: null,\n uploading: true,\n });\n setSaving({ doneSaving: false });\n handleUpload(e.currentTarget.files);\n }}\n style={{ display: 'none' }}\n multiple={allowNewLayers}\n />\n \n )}\n />\n );\n }\n\n onIIIFLink = () => {\n this.props.setAddTileSourceMode(this.props.document_id, IIIF_TILE_SOURCE_TYPE);\n this.setState( { ...this.state, uploadErrorMessage: null, uploading: false, linkError: false } );\n }\n\n onWebLink = () => {\n this.props.setAddTileSourceMode(this.props.document_id, IMAGE_URL_SOURCE_TYPE);\n this.setState( { ...this.state, uploadErrorMessage: null, uploading: false, linkError: false } );\n }\n\n onLinkSubmit = () => {\n const { document_id, addTileSourceMode } = this.props;\n const tileSource = this.state.newTileSourceValue\n const tileSourceMode = addTileSourceMode[document_id];\n\n if( this.validateTileSource(tileSource) ) {\n this.addTileSource(tileSourceMode);\n this.setState( { ...this.state, linkError: false } );\n } else {\n this.setState( { ...this.state, linkError: true } );\n }\n }\n\n validateTileSource(tileSource) {\n if( tileSource && tileSource.length > 0 ) {\n return validURLRegex.test( tileSource );\n }\n return false;\n }\n\n onCancel = () => {\n this.props.setAddTileSourceMode(this.props.document_id, null);\n }\n\n render() {\n const { document_id, writeEnabled, addTileSourceMode, content } = this.props;\n const tileSourceMode = addTileSourceMode[document_id];\n const allowNewLayers = this.state.addingNewLayers || (content && content.tileSources && content.tileSources.length > 0);\n \n if (!writeEnabled || !tileSourceMode) return null;\n \n const divStyle = { margin: 20 };\n const textStyle = { color: 'white' };\n const buttonStyle = { margin: 12, height: 60 };\n const iconStyle = { width: 50, height: 50 };\n \n return (\n \n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n addTileSourceMode: state.canvasEditor.addTileSourceMode\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n setAddTileSourceMode,\n updateDocument,\n setImageUrl,\n setDocumentThumbnail,\n replaceDocument,\n changePage,\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(AddImageLayer);\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport OpenSeadragon from 'openseadragon-fabricjs-overlay/openseadragon/openseadragon';\nimport { fabric } from 'openseadragon-fabricjs-overlay/fabric/fabric.adapted';\nimport { openSeaDragonFabricOverlay } from 'openseadragon-fabricjs-overlay/openseadragon-fabricjs-overlay';\nimport Slider from 'material-ui/Slider';\nimport IconButton from 'material-ui/IconButton';\nimport PanTool from 'material-ui/svg-icons/action/pan-tool';\nimport CropFree from 'material-ui/svg-icons/image/crop-free';\nimport CropSquare from 'material-ui/svg-icons/image/crop-square';\nimport PanoramaFishEye from 'material-ui/svg-icons/image/panorama-fish-eye';\nimport Place from 'material-ui/svg-icons/maps/place';\nimport Edit from 'material-ui/svg-icons/image/edit';\nimport Colorize from 'material-ui/svg-icons/image/colorize';\nimport ShowChart from 'material-ui/svg-icons/editor/show-chart';\nimport DeleteForever from 'material-ui/svg-icons/action/delete-forever';\nimport AddToPhotos from 'material-ui/svg-icons/image/add-to-photos';\nimport RemoveFromPhotos from './icons/RemoveFromPhotos';\nimport Done from 'material-ui/svg-icons/action/done';\nimport Cancel from 'material-ui/svg-icons/navigation/close';\nimport { LayerBackward, LayerForward } from 'react-bootstrap-icons';\nimport { yellow500, cyan100 } from 'material-ui/styles/colors';\nimport {\n setCanvasHighlightColor,\n toggleCanvasColorPicker,\n setImageUrl,\n setIsPencilMode,\n setAddTileSourceMode,\n UPLOAD_SOURCE_TYPE,\n toggleEditLayerName,\n} from './modules/canvasEditor';\nimport {\n addHighlight,\n updateHighlight,\n setHighlightThumbnail,\n openDeleteDialog,\n CANVAS_HIGHLIGHT_DELETE,\n moveLayer,\n CANVAS_LAYER_DELETE,\n renameLayer,\n} from './modules/documentGrid';\nimport { checkTileSource } from './modules/iiif';\nimport HighlightColorSelect from './HighlightColorSelect';\nimport AddImageLayer from './AddImageLayer';\nimport TextField from 'material-ui/TextField';\nimport deepEqual from 'deep-equal';\n\n// overlay these modules\nopenSeaDragonFabricOverlay(OpenSeadragon, fabric);\n\n// from https://stackoverflow.com/a/48343346/6126327 - show consistent stroke width regardless of object scaling\nfabric.Object.prototype._renderStroke = function(ctx) {\n if (!this.stroke || this.strokeWidth === 0) {\n return;\n }\n if (this.shadow && !this.shadow.affectStroke) {\n this._removeShadow(ctx);\n }\n ctx.save();\n ctx.scale(1 / this.scaleX, 1 / this.scaleY);\n this._setLineDash(ctx, this.strokeDashArray, this._renderDashedStroke);\n this._applyPatternGradientTransform(ctx, this.stroke);\n ctx.stroke();\n ctx.restore();\n};\n\nconst strokeWidth = 3.0;\nconst markerRadius = 4.0;\nconst doubleClickTimeout = 500;\nconst markerThumbnailSize = 100;\nconst fabricViewportScale = 2000;\nconst maxZoomPixelRatio = 2.25;\n\nclass CanvasResource extends Component {\n constructor(props) {\n super(props);\n this.osdId =`openseadragon-${this.props.document_id}-${Date.now()}`;\n this.osdViewer = null;\n this.upButton = null;\n this.downButton = null;\n this.layerSelect = null;\n this.imageLayerControls = null;\n this.highlight_map = {};\n this.viewportUpdatedYet = false;\n this.currentMode = 'pan';\n this.hasOpenedOnce = false;\n\n this.state = {\n currentPage: 0,\n totalPages: 0,\n layerName: '',\n zoomLevel: 0,\n maxZoom: 100,\n minZoom: 0,\n };\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.content && this.props.content \n && this.props.content.tileSources && this.props.content.tileSources[0]\n && !deepEqual(prevProps.content.tileSources, this.props.content.tileSources))\n {\n this.openTileSources(this.props.content.tileSources);\n if (this.props.content.tileSources.length !== prevProps.content.tileSources.length) {\n this.osdViewer.goToPage(0);\n this.setState({ totalPages: this.props.content.tileSources.length });\n } else {\n this.osdViewer.goToPage(this.props.pageToChange[this.getInstanceKey()] || 0);\n }\n const hasLayerControls = this.osdViewer.controls \n && this.osdViewer.controls.find(ctrl => ctrl.element.className === 'image-layer-controls');\n if (this.hasLayers() && !hasLayerControls) {\n this.osdViewer.addControl(this.imageLayerControls, {\n anchor: OpenSeadragon.ControlAnchor.TOP_LEFT,\n autoFade: false,\n });\n } else if (!this.hasLayers() && hasLayerControls) {\n this.osdViewer.removeControl(this.imageLayerControls);\n }\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n }\n if (this.layerSelect \n && prevProps.content && this.props.content && this.props.content.tileSources\n && !deepEqual(prevProps.content.iiifTileNames, this.props.content.iiifTileNames)) {\n this.refreshLayerSelect(this.props.content.tileSources);\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n }\n if (prevProps.pageToChange[this.getInstanceKey()] !== this.props.pageToChange[this.getInstanceKey()]) {\n this.osdViewer.goToPage(this.props.pageToChange[this.getInstanceKey()] || 0);\n }\n if (this.props.highlightsHidden[this.getInstanceKey()] !== prevProps.highlightsHidden[this.getInstanceKey()]\n && !this.props.highlightsHidden[this.getInstanceKey()]) {\n this.osdViewer.raiseEvent( 'update-viewport', {} );\n }\n }\n\n componentDidMount() {\n const {content, highlight_map, document_id, setCanvasHighlightColor, setAddTileSourceMode, updateHighlight, addHighlight, setHighlightThumbnail} = this.props;\n this.highlight_map = highlight_map;\n\n const initialColor = yellow500;\n const key = this.getInstanceKey();\n setCanvasHighlightColor(key, initialColor);\n\n // Handle iOS bug with \"canvas area exceeds the maximum limit\": set { useCanvas: false } if on\n // iOS and at least one of the tile sources is an image (i.e. not IIIF) \n const iOS = \n // userAgent detection (does not work on iPad)\n /iPad|iPhone|iPod/.test(navigator.userAgent) ||\n // navigator.platform detection (soon to be deprecated)\n [\n \"iPad Simulator\",\n \"iPhone Simulator\",\n \"iPod Simulator\",\n \"iPad\",\n \"iPhone\",\n \"iPod\",\n ].includes(navigator.platform) ||\n // iPad on iOS 13 detection\n (navigator.userAgent.includes(\"Mac\") &&\n (\"ontouchend\" in document || navigator.maxTouchPoints > 0));\n const containsImageFile = content &&\n content.tileSources &&\n content.tileSources.some((source) => source.type === \"image\");\n\n const viewer = this.osdViewer = OpenSeadragon({\n id: this.osdId,\n prefixUrl: '/images/',\n showNavigationControl: false,\n tileSources: [],\n maxZoomPixelRatio,\n navigatorSizeRatio: 0.15,\n gestureSettingsMouse: { clickToZoom: false },\n showNavigator: true,\n sequenceMode: true,\n showSequenceControl: false,\n preserveViewport: true,\n preserveImageSizeOnResize: true,\n useCanvas: !(iOS && containsImageFile),\n });\n const hasLayers = this.hasLayers();\n\n const upButton = this.upButton = new OpenSeadragon.Button({\n tooltip: \"Previous layer\",\n srcRest: \"/images/up_rest.png\",\n srcGroup: \"/images/up_grouphover.png\",\n srcHover: \"/images/up_hover.png\",\n srcDown: \"/images/up_pressed.png\",\n onRelease: () => {\n let prevPage = this.state.currentPage - 1;\n if (this.state && this.state.totalPages && this.state.currentPage === 0) {\n // Wrap around if at beginning\n prevPage = this.state.totalPages - 1;\n }\n viewer.goToPage(prevPage);\n },\n });\n const layerSelect = this.layerSelect = OpenSeadragon.makeNeutralElement('select');\n layerSelect.style = '';\n layerSelect.className = 'image-layer-select';\n layerSelect.name = `${this.getInstanceKey()}-layer-select`;\n layerSelect.addEventListener('change', () => {\n viewer.goToPage(parseInt(layerSelect.value, 10));\n });\n \n if (hasLayers) {\n content.tileSources.forEach((tileSource, index) => {\n const opt = OpenSeadragon.makeNeutralElement('option');\n opt.value = index;\n opt.label = `${index+1}: ${this.getLayerName(index)}`;\n layerSelect.appendChild(opt);\n });\n }\n\n const downButton = this.downButton = new OpenSeadragon.Button({\n tooltip: \"Next layer\",\n srcRest: \"/images/down_rest.png\",\n srcGroup: \"/images/down_grouphover.png\",\n srcHover: \"/images/down_hover.png\",\n srcDown: \"/images/down_pressed.png\",\n onRelease: () => {\n let nextPage = this.state.currentPage + 1;\n if (this.state && this.state.totalPages && this.state.currentPage === (this.state.totalPages-1)) {\n // Wrap around if at end\n nextPage = 0;\n }\n viewer.goToPage(nextPage);\n },\n });\n\n const wrapper = this.imageLayerControls = OpenSeadragon.makeNeutralElement('div');\n wrapper.className = 'image-layer-controls';\n const buttons = [upButton, downButton];\n const buttonGroup = new OpenSeadragon.ButtonGroup({ buttons });\n buttonGroup.element.className = 'layer-button-group';\n wrapper.appendChild(buttonGroup.element);\n wrapper.appendChild(layerSelect);\n wrapper.innerTracker = new OpenSeadragon.MouseTracker({\n element: wrapper,\n });\n if (hasLayers) {\n viewer.addControl(wrapper, {\n anchor: OpenSeadragon.ControlAnchor.TOP_LEFT,\n autoFade: false,\n });\n }\n\n const overlay = this.overlay = viewer.fabricjsOverlay({scale: fabricViewportScale});\n\n let tileSources = (content && content.tileSources) ? content.tileSources : [];\n let imageUrlForThumbnail = null\n const firstTileSource = tileSources[0];\n\n if (firstTileSource) {\n this.setState({ totalPages: tileSources.length });\n imageUrlForThumbnail = this.openTileSources(tileSources);\n } else {\n // we don't have an image yet, so this causes AddImageLayer to display\n setAddTileSourceMode(document_id, UPLOAD_SOURCE_TYPE);\n }\n\n viewer.addHandler('update-viewport', () => {\n const maxZoom = this.osdViewer.viewport.getMaxZoom();\n const minZoom = this.osdViewer.viewport.getMinZoom();\n let zoomLevel = maxZoom;\n if (this.state.zoomLevel <= minZoom) {\n zoomLevel = minZoom;\n } else if (this.state.zoomLevel <= maxZoom) {\n zoomLevel = this.state.zoomLevel;\n } \n this.setState((prevState) => ({ ...prevState, minZoom, maxZoom, zoomLevel }));\n if (!this.viewportUpdatedForPageYet) {\n this.renderHighlights(overlay, highlight_map);\n this.viewportUpdatedForPageYet = true;\n }\n const zoom = overlay.fabricCanvas().getZoom();\n overlay.fabricCanvas().forEachObject(object => {\n if (object._isMarker) {\n object.radius = markerRadius / zoom;\n }\n object.strokeWidth = strokeWidth / zoom;\n if (this.markObjectsDirtyNextUpdate) object.dirty = true;\n });\n this.markObjectsDirtyNextUpdate = false;\n overlay.fabricCanvas().freeDrawingBrush.width = strokeWidth / overlay.fabricCanvas().getZoom();\n overlay.resize();\n overlay.resizecanvas();\n });\n\n viewer.addHandler('page', (event) => {\n const pageNumber = parseInt(event.page, 10);\n if (this.layerSelect) {\n this.layerSelect.selectedIndex = pageNumber;\n }\n\n this.markObjectsDirtyNextUpdate = true;\n this.setState({\n currentPage: pageNumber,\n layerName: this.getLayerName(pageNumber),\n });\n });\n\n viewer.addHandler('open', this.onOpen.bind(this) );\n\n viewer.addHandler('zoom', event => {\n const maxZoom = this.osdViewer.viewport.getMaxZoom();\n const minZoom = this.osdViewer.viewport.getMinZoom();\n let zoomLevel = maxZoom;\n if (event.zoom <= minZoom) {\n zoomLevel = minZoom;\n } else if (event.zoom <= maxZoom) {\n zoomLevel = event.zoom;\n } \n this.setState((prevState) => ({ ...prevState, zoomLevel, minZoom, maxZoom }));\n });\n\n overlay.fabricCanvas().freeDrawingBrush.color = initialColor;\n overlay.fabricCanvas().freeDrawingBrush.width = strokeWidth / overlay.fabricCanvas().getZoom();\n\n overlay.fabricCanvas().on('object:selected', event => {\n if (this.currentMode === 'pan' && event.target && event.target._highlightUid) {\n window.setFocusHighlight(document_id, event.target._highlightUid, key); // the code that pops up the annotation\n overlay.fabricCanvas().discardActiveObject();\n } else if (this.currentMode === 'edit' && event && event.target._isTarget) {\n for (let i = 0; i < 3; i++){ // For some reason it's necessary to do this multiple times\n overlay.fabricCanvas().forEachObject((obj) => {\n if (obj && obj._isTargetChild) {\n overlay.fabricCanvas().remove(obj);\n }\n });\n }\n }\n });\n overlay.fabricCanvas().on('mouse:down', this.canvasMouseDown.bind(this) );\n overlay.fabricCanvas().on('mouse:move', this.canvasMouseMove.bind(this) );\n overlay.fabricCanvas().on('mouse:up', this.canvasMouseUp.bind(this) );\n overlay.fabricCanvas().on('object:modified', event => {\n if( this.currentMode === 'edit' && event && event.target && event.target._highlightUid && !event.target._isTargetChild ) {\n const highlight_id = this.highlight_map[event.target._highlightUid].id;\n if (highlight_id && imageUrlForThumbnail) {\n const highlightCoords = event.target._isMarker ?\n this.computeMarkerThumbBounds(event.target) :\n event.target.aCoords\n \n this.props.setSaving({ doneSaving: false });\n updateHighlight(\n highlight_id, \n {target: JSON.stringify(event.target.toJSON(['_highlightUid', '_isMarker']))},\n () => {\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n }\n );\n setHighlightThumbnail(highlight_id, imageUrlForThumbnail, highlightCoords, event.target.toSVG());\n }\n }\n });\n\n // rollover highlights\n overlay.fabricCanvas().on('mouse:over', event => {\n if (this.currentMode === 'pan' && event.target && event.target._highlightUid) {\n window.showRollover(this.props.document_id, event.target._highlightUid, key);\n }\n });\n overlay.fabricCanvas().on('mouse:out', function(event) {\n if (this.currentMode === 'pan' && event.target && event.target._highlightUid) {\n window.hideRollover(event.target._highlightUid);\n }\n }.bind(this));\n\n // process paths created with pencil tool\n overlay.fabricCanvas().on('path:created', event => {\n if (event.path) {\n let path = event.path;\n const highlightUid = `dm_canvas_highlight_${Date.now()}`;\n path._highlightUid = highlightUid;\n path.perPixelTargetFind = true;\n this.overlay.fabricCanvas().setActiveObject(path);\n this.props.setSaving({ doneSaving: false });\n addHighlight(\n document_id,\n highlightUid,\n JSON.stringify(path.toJSON(['_highlightUid', '_isMarker'])),\n this.overlay.fabricCanvas().freeDrawingBrush.color,\n 'Pencil highlight',\n savedHighlight => {\n setHighlightThumbnail(savedHighlight.id, imageUrlForThumbnail, path.aCoords, path.toSVG());\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n });\n }\n });\n\n // handle window resize\n window.onresize = function() {\n overlay.resize();\n overlay.resizecanvas();\n };\n }\n\n openTileSources(tileSources) {\n const key = this.getInstanceKey()\n let imageUrlForThumbnail = '';\n let firstTileSource = tileSources[0];\n\n if (firstTileSource && firstTileSource.type === 'image' && firstTileSource.url) {\n imageUrlForThumbnail = firstTileSource.url\n // don't force ssl for localhost\n if( imageUrlForThumbnail.match(/^http:\\/\\/localhost/) ) {\n this.props.setImageUrl(key, imageUrlForThumbnail);\n if (tileSources.length > 1) {\n const newTileSources = [{ type: 'image', url: imageUrlForThumbnail }, ...tileSources.slice(1)]\n this.osdViewer.open(newTileSources);\n } else this.osdViewer.open([{ type: 'image', url: imageUrlForThumbnail }]);\n } else {\n const tileSourceSSL = imageUrlForThumbnail.replace('http:', 'https:')\n this.props.setImageUrl(key, tileSourceSSL);\n if (tileSources.length > 1) {\n const newTileSources = [{ type: 'image', url: tileSourceSSL }, ...tileSources.slice(1)]\n this.osdViewer.open(newTileSources);\n } else this.osdViewer.open([{ type: 'image', url: tileSourceSSL }]);\n }\n } else if (firstTileSource && typeof firstTileSource === 'string') {\n // Tile source is a string, so it's IIIF\n let resourceURL = firstTileSource.replace('http:', 'https:').replace('/info.json', '');\n imageUrlForThumbnail = resourceURL + '/full/!400,400/0/default.png'\n this.props.setImageUrl(key, imageUrlForThumbnail);\n checkTileSource(\n resourceURL,\n (validResourceURL) => { \n if (tileSources.length > 1) {\n const newTileSources = [validResourceURL, ...tileSources.slice(1)]\n this.osdViewer.open(newTileSources);\n } else this.osdViewer.open([validResourceURL]);\n },\n (errorResponse) => { console.log( errorResponse ) }\n )\n }\n this.refreshLayerSelect(tileSources);\n\n return imageUrlForThumbnail;\n }\n\n refreshLayerSelect(tileSources) {\n if (this.layerSelect) {\n const selected = this.layerSelect.selectedIndex;\n while (this.layerSelect.firstChild) {\n this.layerSelect.removeChild(this.layerSelect.lastChild);\n }\n tileSources.forEach((t, index) => {\n const opt = OpenSeadragon.makeNeutralElement('option');\n opt.value = index;\n opt.label = `${index+1}: ${this.getLayerName(index)}`;\n this.layerSelect.appendChild(opt);\n });\n this.layerSelect.selectedIndex = selected;\n }\n }\n\n // if a first target for this window has been specified, pan and zoom to it.\n onOpen() {\n if( this.props.firstTarget && !this.hasOpenedOnce ) {\n let targetHighLight = null;\n for( let key in this.props.highlight_map ) {\n let currentHighlight = this.props.highlight_map[key]\n if( currentHighlight.id === this.props.firstTarget ) {\n targetHighLight = currentHighlight\n break\n }\n }\n if( targetHighLight ) {\n const target = JSON.parse(targetHighLight.target)\n const x = target.left / fabricViewportScale\n const y = target.top / fabricViewportScale\n const w = target.width / fabricViewportScale\n const h = target.height / fabricViewportScale\n // back out a little so we can see highlight in context\n const targetRect = new OpenSeadragon.Rect(x-0.1,y-0.1,w+0.2,h+0.2)\n const viewport = this.osdViewer.viewport;\n viewport.fitBoundsWithConstraints( targetRect );\n this.hasOpenedOnce = true;\n // console.log(`tr: ${targetRect.toString()} tr2: ${targetRect2.toString()}`)\n }\n }\n }\n\n canvasMouseDown(event) {\n\n if( this.currentMode === 'edit' || this.currentMode === 'pan' ) return;\n\n this.isMouseDown = true;\n this.pointerCoords = this.overlay.fabricCanvas().getPointer(event.e);\n\n switch(this.currentMode) {\n case 'marker':\n this.drawMarker(this.pointerCoords);\n break;\n\n case 'rect':\n this.newShape = new fabric.Rect({\n left: this.pointerCoords.x,\n top: this.pointerCoords.y,\n width: 20,\n height: 20,\n fill: 'transparent'\n });\n this.addShape(this.newShape);\n break;\n\n case 'circle':\n this.newShape = new fabric.Circle({\n radius: 15,\n left: this.pointerCoords.x,\n top: this.pointerCoords.y,\n fill: 'transparent',\n originX: 'center', originY: 'center' // when circle is resized, the center remains constant\n });\n this.addShape(this.newShape);\n break;\n\n case 'colorize':\n // select new color\n const newColor = this.props.highlightColors[this.getInstanceKey()]\n // get object, if one is clicked\n const selectedObject = this.overlay.fabricCanvas().getActiveObject();\n\n // make sure the click selected an object\n if(selectedObject) {\n selectedObject.set({ stroke: newColor });\n // this deselects the highlight, which causes the color change to take place\n // without this line, a object that was previously selected prior to use of the tool would not change color until deselected\n this.overlay.fabricCanvas().discardActiveObject();\n\n const highlight_id = this.highlight_map[selectedObject._highlightUid].id;\n this.props.setSaving({ doneSaving: false });\n this.props.updateHighlight(\n highlight_id,\n {color: newColor, target: JSON.stringify(selectedObject.toJSON(['_highlightUid', '_isMarker']))},\n () => {\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n }\n );\n }\n break;\n\n case 'lineDraw':\n if( this.checkDoubleClick() ) {\n this.drawLine(this.pointerCoords, true);\n this.endLineMode();\n } else {\n this.drawLine(this.pointerCoords, true);\n this.prevLineEndPoint = this.pointerCoords;\n }\n break;\n default:\n break;\n }\n }\n\n canvasMouseMove(o) {\n if( this.currentMode === 'edit' || this.currentMode === 'pan' ) return;\n\n if (this.currentMode === 'lineDraw' && this.lineInProgress) {\n this.pointerCoords = this.overlay.fabricCanvas().getPointer(o.e);\n this.drawLine(this.pointerCoords, false);\n }\n\n if( this.newShape && this.isMouseDown ) {\n const mouse = this.overlay.fabricCanvas().getPointer(o.e);\n switch(this.currentMode) {\n case 'rect':\n if(mouse.x < this.pointerCoords.x) {\n this.newShape.set({left: mouse.x });\n }\n if(mouse.y < this.pointerCoords.y) {\n this.newShape.set({top: mouse.y });\n }\n\n this.newShape.set({width: Math.abs(this.pointerCoords.x - mouse.x) });\n this.newShape.set({height: Math.abs(this.pointerCoords.y - mouse.y) });\n\n this.overlay.fabricCanvas().renderAll();\n break;\n case 'circle':\n if( Math.abs(mouse.x - this.pointerCoords.x) > Math.abs(mouse.y - this.pointerCoords.y) ) {\n this.newShape.set({radius: Math.abs( mouse.x - this.pointerCoords.x ) });\n } else {\n this.newShape.set({radius: Math.abs( mouse.y - this.pointerCoords.y ) });\n }\n\n this.overlay.fabricCanvas().renderAll();\n break;\n default:\n break;\n\n }\n }\n }\n\n canvasMouseUp() {\n if( this.currentMode !== 'rect' && this.currentMode !== 'circle') {\n if( this.currentMode !== 'edit' && this.currentMode !== 'colorize' && this.currentMode !== 'pan' && this.currentMode !== 'lineDraw') {\n this.panClick(); // jonah *** change here the current mode to 'pan'\n }\n return;\n }\n\n // needed for new shape to respond to mouse clicks\n this.osdViewer.forceRedraw();\n const label = this.currentMode === 'rect' ? 'Rectangular highlight' : 'Circular highlight';\n this.isMouseDown = false;\n const key = this.getInstanceKey();\n const aCoords = this.newShape.calcCoords(true);\n const svg = this.newShape.toSVG();\n const imageUrlForThumbnail = this.props.imageURLs[key]\n\n this.props.setSaving({ doneSaving: false });\n this.props.addHighlight(\n this.props.document_id,\n this.newShape._highlightUid,\n JSON.stringify(this.newShape.toJSON(['_highlightUid', '_isMarker'])),\n this.props.highlightColors[key],\n label,\n savedHighlight => {\n this.props.setHighlightThumbnail(\n savedHighlight.id,\n imageUrlForThumbnail,\n aCoords,\n svg\n );\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n });\n this.panClick(); // jonah *** change here the current mode to 'pan'\n this.newShape = null;\n }\n\n renderHighlights(overlay, highlight_map) {\n const jsonBlob = {objects: []};\n for (const highlightUid in highlight_map) {\n const highlight = highlight_map[highlightUid];\n const parsedHighlight = JSON.parse(highlight.target);\n if( this.props.firstTarget ) {\n if( highlight.id === this.props.firstTarget ) {\n for (let i = 0; i < 3; i += 1) {\n // Copy the object 3 times to make the glow more visible\n jsonBlob.objects.push({ ...parsedHighlight,\n selectable: false,\n hoverCursor: 'default',\n _isTargetChild: true,\n shadow: new fabric.Shadow({\n color: 'blue',\n blur: 10,\n }),\n });\n }\n parsedHighlight._isTarget = true;\n }\n }\n jsonBlob.objects.push(parsedHighlight);\n }\n const jsonString = JSON.stringify(jsonBlob);\n const zoom = overlay.fabricCanvas().getZoom();\n overlay.fabricCanvas().loadFromJSON(jsonString, () => {\n overlay.fabricCanvas().forEachObject(object => {\n this.lockCanvasObject(object, true);\n if (object._isMarker) {\n object.radius = markerRadius / zoom;\n }\n object.strokeWidth = strokeWidth / zoom;\n object.dirty = true;\n object.perPixelTargetFind = true;\n if (!object._isTargetChild) object.selectable = true;\n\n if (!this.props.writeEnabled) {\n object.hoverCursor = 'default';\n }\n });\n });\n }\n\n // doing it this way because double click events are not reliably\n // processed by osdViewer or fabric js.\n checkDoubleClick() {\n if( this.lastTime ) {\n const currentTime = Date.now();\n const elapsedTime = currentTime - this.lastTime;\n this.lastTime = currentTime;\n return ( elapsedTime < doubleClickTimeout );\n } else {\n this.lastTime = Date.now();\n return false;\n }\n }\n\n drawLine(pointer, activeShape) {\n // draw first segment normally\n // draw a line connecting most recent segment to current mouse position\n // on click add that line to points array\n const key = this.getInstanceKey();\n const lineOptions = {\n fill: 'transparent',\n selectable: false,\n stroke: this.props.highlightColors[key],\n strokeWidth: strokeWidth / this.overlay.fabricCanvas().getZoom()\n };\n\n if( this.lineInProgress ) {\n if (this.lineInProgress.radius) { // drawing first line segment\n // if we have a circle, replace it with a line\n const centerPoint = this.lineInProgress.getCenterPoint();\n const oldCircle = this.lineInProgress;\n this.lineInProgress = new fabric.Polyline(\n [{ x: centerPoint.x, y: centerPoint.y}, { x: pointer.x, y: pointer.y }],\n lineOptions\n );\n this.overlay.fabricCanvas().remove(oldCircle);\n this.overlay.fabricCanvas().add(this.lineInProgress);\n } else if (this.prevLineEndPoint && !activeShape) {\n // if we are just hovering make a line\n const oldHoverLine = this.hoverLine;\n this.hoverLine = new fabric.Polyline(\n [{ x: this.prevLineEndPoint.x, y: this.prevLineEndPoint.y}, { x: pointer.x, y: pointer.y }],\n lineOptions\n );\n this.overlay.fabricCanvas().remove(oldHoverLine);\n this.overlay.fabricCanvas().add(this.hoverLine);\n \n } else {\n // otherwise, add to the line\n const oldPolyline = this.lineInProgress;\n const oldHoverLine = this.hoverLine;\n const points = oldPolyline.points.concat({ x: pointer.x, y: pointer.y });\n this.lineInProgress = new fabric.Polyline( points, lineOptions );\n this.overlay.fabricCanvas().remove(oldHoverLine);\n this.overlay.fabricCanvas().remove(oldPolyline);\n this.overlay.fabricCanvas().add(this.lineInProgress);\n }\n }\n else {\n // start with a circle\n let radius = markerRadius / this.overlay.fabricCanvas().getZoom()\n this.lineInProgress = new fabric.Circle({\n radius,\n left: pointer.x - radius,\n top: pointer.y - radius,\n selectable: false,\n fill: this.props.highlightColors[key],\n stroke: 'transparent',\n _isMarker: true\n });\n this.overlay.fabricCanvas().add(this.lineInProgress);\n }\n }\n\n computeMarkerThumbBounds(markerCoords) {\n return {\n tl: { x: markerCoords.left - markerThumbnailSize, y: markerCoords.top - markerThumbnailSize },\n tr: { x: markerCoords.left + markerThumbnailSize, y: markerCoords.top - markerThumbnailSize },\n bl: { x: markerCoords.left - markerThumbnailSize, y: markerCoords.top + markerThumbnailSize },\n br: { x: markerCoords.left + markerThumbnailSize, y: markerCoords.top + markerThumbnailSize }\n }\n }\n\n drawMarker(pCoords) {\n const imageUrlForThumbnail = this.props.imageURLs[this.getInstanceKey()];\n\n // create marker shape on canvas\n let markerFill = fabric.Color.fromHex(this.props.highlightColors[this.getInstanceKey()]);\n markerFill.setAlpha(0.3);\n var rad = markerRadius / this.overlay.fabricCanvas().getZoom();\n let markerCoords = { left: pCoords.x - rad, top: pCoords.y - rad }\n let marker = new fabric.Circle({\n radius: rad,\n left: markerCoords.left, // offset to put marker at center of click\n top: markerCoords.top,\n fill: markerFill.toRgba(),\n lockScalingX: true,\n lockScalingY: true,\n lockRotation: true,\n lockScalingFlip: true,\n lockSkewingX: true,\n lockSkewingY: true,\n lockUniScaling: true,\n hasControls: false,\n _isMarker: true\n });\n this.addShape(marker);\n const highlightCoords = this.computeMarkerThumbBounds(markerCoords)\n\n this.props.setSaving({ doneSaving: false });\n // save as a highlight\n this.props.addHighlight(\n this.props.document_id,\n marker._highlightUid,\n JSON.stringify(marker.toJSON(['_highlightUid', '_isMarker'])),\n this.props.highlightColors[this.getInstanceKey()],\n 'Marker highlight',\n savedHighlight => {\n this.props.setHighlightThumbnail(\n savedHighlight.id,\n imageUrlForThumbnail,\n highlightCoords,\n marker.toSVG()\n );\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n });\n }\n\n endLineMode() {\n if( !this.lineInProgress ) return;\n const aCoords = this.lineInProgress.aCoords;\n const svg = this.lineInProgress.toSVG();\n const imageUrlForThumbnail = this.props.imageURLs[this.getInstanceKey()];\n\n // now act like other shapes, assign a unique id\n this.lineInProgress.perPixelTargetFind = true;\n this.lineInProgress.selectable = true;\n this.lockCanvasObject(this.lineInProgress, true);\n const highlightUid = `dm_canvas_highlight_${Date.now()}`;\n this.lineInProgress['_highlightUid'] = highlightUid;\n\n this.props.setSaving({ doneSaving: false });\n this.props.addHighlight(\n this.props.document_id,\n this.lineInProgress._highlightUid,\n JSON.stringify(this.lineInProgress.toJSON(['_highlightUid', '_isMarker'])),\n this.props.highlightColors[this.getInstanceKey()],\n 'Line highlight',\n savedHighlight => {\n this.props.setHighlightThumbnail(\n savedHighlight.id,\n imageUrlForThumbnail,\n aCoords,\n svg\n );\n this.props.setSaving({ doneSaving: true });\n this.props.setLastSaved(new Date().toLocaleString('en-US'));\n });\n this.lineInProgress = null;\n this.overlay.fabricCanvas().defaultCursor = 'default';\n this.osdViewer.forceRedraw();\n this.panClick(); // jonah *** change here the current mode to 'pan'\n }\n\n addShape(fabricObject) {\n const highlightUid = `dm_canvas_highlight_${Date.now()}`;\n const { highlightColors } = this.props;\n const instanceKey = this.getInstanceKey();\n fabricObject['_highlightUid'] = highlightUid;\n fabricObject.stroke = highlightColors[instanceKey];\n fabricObject.strokeWidth = strokeWidth / this.overlay.fabricCanvas().getZoom();\n fabricObject.perPixelTargetFind = true;\n fabricObject.selectable = true;\n this.lockCanvasObject(fabricObject, true);\n this.overlay.fabricCanvas().add(fabricObject);\n }\n\n lockCanvasObject( object, lock ) {\n if( lock ) {\n object.lockScalingX = true;\n object.lockScalingY = true;\n object.lockRotation = true;\n object.lockScalingFlip = true;\n object.lockSkewingX = true;\n object.lockSkewingY = true;\n object.lockUniScaling = true;\n object.lockMovementX = true;\n object.lockMovementY = true;\n object.hasControls = false;\n } else {\n if( !object._isMarker ) {\n object.lockScalingX = false;\n object.lockScalingY = false;\n object.lockRotation = false;\n object.lockScalingFlip = false;\n object.lockSkewingX = false;\n object.lockSkewingY = false;\n object.lockUniScaling = false;\n object.hasControls = true;\n }\n object.lockMovementX = false;\n object.lockMovementY = false;\n }\n }\n\n lockCanvasObjects( lock ) {\n const canvasObjects = this.overlay.fabricCanvas().getObjects();\n canvasObjects.forEach( object => {\n this.lockCanvasObject( object, lock );\n });\n }\n\n stopDrawing() {\n this.endLineMode();\n // turn off pencil mode\n this.overlay.fabricCanvas().isDrawingMode = false;\n this.props.setIsPencilMode(this.props.document_id, false);\n }\n\n panClick() {\n // deselect highlight to ensure resize handles behave properly\n this.overlay.fabricCanvas().discardActiveObject();\n this.stopDrawing()\n this.lockCanvasObjects(true);\n this.currentMode = 'pan';\n this.osdViewer.setMouseNavEnabled(true);\n }\n\n editShapeClick() {\n this.stopDrawing()\n this.currentMode = 'edit';\n this.lockCanvasObjects(false);\n this.osdViewer.setMouseNavEnabled(false);\n\n // deselect highlight to ensure resize handles behave properly\n this.overlay.fabricCanvas().discardActiveObject();\n }\n\n rectClick() {\n this.stopDrawing()\n this.currentMode = 'rect';\n this.lockCanvasObjects(true);\n this.osdViewer.setMouseNavEnabled(false);\n }\n\n circleClick() {\n this.stopDrawing()\n this.currentMode = 'circle';\n this.lockCanvasObjects(true);\n this.osdViewer.setMouseNavEnabled(false);\n }\n\n markerClick() {\n this.stopDrawing()\n this.currentMode = 'marker';\n this.lockCanvasObjects(true);\n this.osdViewer.setMouseNavEnabled(false);\n }\n\n pencilClick() {\n this.currentMode = 'freeDraw';\n this.osdViewer.setMouseNavEnabled(false);\n this.stopDrawing()\n\n this.lockCanvasObjects(true);\n this.overlay.fabricCanvas().isDrawingMode = true;\n this.props.setIsPencilMode(this.props.document_id, true);\n }\n\n lineClick() {\n this.currentMode = 'lineDraw';\n this.osdViewer.setMouseNavEnabled(false);\n this.stopDrawing()\n this.lockCanvasObjects(true);\n this.overlay.fabricCanvas().defaultCursor = 'crosshair';\n }\n\n colorizeClick() {\n this.stopDrawing()\n this.currentMode = 'colorize';\n this.lockCanvasObjects(true);\n this.osdViewer.setMouseNavEnabled(false);\n }\n\n deleteHighlightClick() {\n const selectedObject = this.overlay.fabricCanvas().getActiveObject();\n let selectedObjects = [];\n if (selectedObject) selectedObjects.push(selectedObject);\n if (selectedObjects.length > 0) {\n this.props.openDeleteDialog(\n 'Removing highlight' + (selectedObjects.length > 1 ? 's' : ''),\n 'Deleting the selection will destroy ' + (selectedObjects.length > 1 ? (selectedObjects.length) + ' highlights and their ' : 'a highlight and its ') + 'links.',\n 'Destroy ' + (selectedObjects.length > 1 ? (selectedObjects.length) + ' highlights' : 'highlight'),\n {\n highlights: selectedObjects.map(object => this.props.highlight_map[object._highlightUid]),\n fabricObjects: selectedObjects,\n canvas: this.overlay.fabricCanvas()\n },\n CANVAS_HIGHLIGHT_DELETE\n );\n }\n\n }\n\n moveLayerClick(direction) {\n this.props.setSaving({ doneSaving: false });\n this.props.moveLayer({\n documentId: this.props.document_id,\n origin: this.state.currentPage,\n direction,\n editorKey: this.getInstanceKey(),\n });\n }\n\n deleteLayerClick() {\n this.props.openDeleteDialog(\n 'Deleting layer',\n `This will delete layer ${this.state.currentPage + 1}, ${this.getLayerName(this.state.currentPage)}, from the stack.`,\n 'Delete layer',\n {\n documentId: this.props.document_id,\n layer: this.state.currentPage,\n editorKey: this.getInstanceKey(),\n },\n CANVAS_LAYER_DELETE\n );\n }\n\n editLayerNameClick() {\n this.props.toggleEditLayerName({\n editorKey: this.getInstanceKey(),\n value: true,\n });\n this.setState({\n layerName: this.getLayerName(this.state.currentPage),\n })\n }\n\n cancelEditLayerName() {\n this.props.toggleEditLayerName({\n editorKey: this.getInstanceKey(),\n value: false,\n });\n }\n\n getLayerName(page) {\n const { content } = this.props;\n const currentLayer = content.tileSources[page];\n let currentLayerName = 'Untitled image layer';\n if (typeof currentLayer === 'string') {\n // Tile source is a string, so it's IIIF\n if (content.iiifTileNames && content.iiifTileNames.find(tile => tile.url === currentLayer)) {\n currentLayerName = content.iiifTileNames.find(tile => tile.url === currentLayer).name;\n } else {\n currentLayerName = 'IIIF layer';\n }\n } else if (currentLayer && currentLayer.name) {\n currentLayerName = currentLayer.name;\n } else if (currentLayer && currentLayer.url) {\n const url = currentLayer.url;\n currentLayerName = decodeURIComponent(url.substring(url.lastIndexOf('/')+1, url.lastIndexOf('.')));\n }\n return currentLayerName;\n }\n\n onChangeLayerName(event, newValue) {\n this.setState({\n layerName: newValue,\n })\n }\n\n submitLayerName(e) {\n e.preventDefault();\n const target = e.currentTarget[`layer${this.state.currentPage}-name`];\n let layerNamePayload = {};\n if (target && target.value) {\n layerNamePayload = {\n documentId: this.props.document_id,\n layer: this.state.currentPage,\n name: target.value,\n editorKey: this.getInstanceKey(),\n };\n this.props.renameLayer(layerNamePayload);\n this.props.setSaving({ doneSaving: false });\n }\n }\n\n zoomControlChange(event, value) {\n if (this.osdViewer && this.osdViewer.viewport) {\n const zoomLevel = value;\n this.setState({ zoomLevel });\n this.osdViewer.viewport.zoomTo(zoomLevel);\n }\n }\n\n getInstanceKey() {\n const { document_id, timeOpened } = this.props;\n return `${document_id}-${timeOpened}`;\n }\n\n hasLayers() {\n const { content } = this.props;\n return (\n content \n && content.tileSources \n && Array.isArray(content.tileSources) \n && content.tileSources.length > 1\n );\n }\n\n render() {\n const {\n loading,\n document_id,\n content,\n image_thumbnail_urls,\n addTileSourceMode,\n setAddTileSourceMode,\n image_urls,\n highlightsHidden,\n displayColorPickers,\n highlightColors,\n toggleCanvasColorPicker,\n setCanvasHighlightColor,\n writeEnabled,\n lockedByMe,\n globalCanvasDisplay,\n setLastSaved,\n setSaving,\n projectId,\n } = this.props;\n const key = this.getInstanceKey();\n\n this.highlight_map = this.props.highlight_map;\n\n const iconBackdropStyle = {\n width: '20px',\n height: '20px',\n marginBottom: '10px',\n marginLeft: '5px',\n background: 'white',\n padding: '1px',\n borderRadius: '1px'\n };\n const iconBackdropStyleActive = Object.assign({}, iconBackdropStyle);\n iconBackdropStyleActive.background = cyan100;\n const iconBackdropStyleSpaced = Object.assign({}, iconBackdropStyle);\n iconBackdropStyleSpaced.marginLeft = '12px';\n\n const floatingIconBackdropStyle = {\n width: '16px',\n height: '16px',\n paddingTop: '2px',\n paddingLeft: '5px',\n };\n\n const iconStyle = {\n width: '18px',\n height: '18px'\n };\n\n const smallIconStyle = {\n width: '16px',\n height: '16px',\n };\n\n const tooltipStyle = {\n pointerEvents: 'none',\n }\n\n let editable = ( writeEnabled && lockedByMe );\n const mode = addTileSourceMode[document_id];\n const highlightHidden = !editable && highlightsHidden[key]\n const hasLayers = this.hasLayers();\n\n if( !editable && this.currentMode !== 'pan' ) {\n this.panClick();\n }\n // don't render highlights if they are hidden\n if( !lockedByMe && this.overlay ) {\n const canvas = this.overlay.fabricCanvas()\n if( highlightHidden && !canvas.isEmpty() ) {\n canvas.clear();\n } else {\n if( !highlightHidden && canvas.isEmpty() ) {\n this.renderHighlights(this.overlay,this.highlight_map)\n }\n }\n }\n \n const currentLayerName = this.getLayerName(this.state.currentPage);\n const editingLayerName = this.props.editingLayerName[key];\n\n return (\n\n {allowNewLayers && (\n <>\n Add image layer(s)\n >\n )}\n {!allowNewLayers && (\n <>\n Add an image\n >\n )}\n
\nChoose an image source:
\n \n {this.renderUploadButton(buttonStyle, iconStyle)}\n \n}\n onClick={this.onIIIFLink}\n disabled={this.state.uploading}\n style={buttonStyle}\n />\n }\n onClick={this.onWebLink}\n disabled={this.state.uploading}\n style={buttonStyle}\n />\n \n {tileSourceMode !== UPLOAD_SOURCE_TYPE && (\n \n\n )}\n {tileSourceMode === UPLOAD_SOURCE_TYPE && this.state.uploading ? (\n{\n this.setState({ ...this.state, newTileSourceValue: newValue });\n }}\n />\n \n \n\n ) : (\n this.state.uploadErrorMessage != null && (\nUploading image...
\n\n \n\n )\n )}\n \n {allowNewLayers && (\n\n
\n\n {this.state.uploadErrorMessage}\n \n )}\n \n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n highlightColors: state.canvasEditor.highlightColors,\n highlightsHidden: state.canvasEditor.highlightsHidden,\n displayColorPickers: state.canvasEditor.displayColorPickers,\n addTileSourceMode: state.canvasEditor.addTileSourceMode,\n imageURLs: state.canvasEditor.imageURLs,\n isPencilMode: state.canvasEditor.isPencilMode,\n globalCanvasDisplay: state.canvasEditor.globalCanvasDisplay,\n pageToChange: state.canvasEditor.pageToChange,\n loading: state.documentGrid.loading,\n editingLayerName: state.canvasEditor.editingLayerName,\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n addHighlight,\n updateHighlight,\n setAddTileSourceMode,\n setImageUrl,\n setHighlightThumbnail,\n setCanvasHighlightColor,\n toggleCanvasColorPicker,\n setIsPencilMode,\n openDeleteDialog,\n moveLayer,\n renameLayer,\n toggleEditLayerName,\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(CanvasResource);\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { updateDocument, openDeleteDialog, DOCUMENT_DELETE } from './modules/documentGrid';\nimport IconButton from 'material-ui/IconButton';\nimport RaisedButton from 'material-ui/RaisedButton';\nimport DeleteForever from 'material-ui/svg-icons/action/delete-forever';\nimport Popover from 'material-ui/Popover';\nimport CircularProgress from 'material-ui/CircularProgress';\n\nclass DocumentStatusBar extends Component {\n\n constructor(props) {\n super(props);\n this.state = {\n tooltipOpen: {},\n tooltipAnchor: {},\n }\n }\n\n renderLastSaved() {\n let style = {\n color: this.props.document_kind === 'canvas' ? 'lightgray' : 'gray',\n marginLeft: '6px',\n };\n const saving = !this.props.doneSaving && !this.props.loading;\n const show = !saving && this.props.lastSaved !== '' && this.props.locked && this.props.lockedByMe;\n return (\n {show ? `Saved: ${this.props.lastSaved}` : ''}\n );\n }\n\n getStatusMessage() {\n let statusMessage = '';\n if (this.props.locked) {\n if (this.props.lockedByMe) {\n statusMessage = \"Check document in for team to edit.\"\n } else {\n statusMessage = `This document is checked out by ${this.props.lockedByUserName}.`;\n }\n } else {\n statusMessage = \"Check document out to edit it.\";\n }\n\n return statusMessage;\n }\n\n onTooltipOpen(anchor, e) {\n e.persist();\n const anchorEl = e.currentTarget;\n e.preventDefault();\n this.setState((prevState) => {\n return {\n ...prevState,\n tooltipOpen: { ...prevState.tooltipOpen, [anchor]: true },\n tooltipAnchor: { ...prevState.tooltipAnchor, [anchor]: anchorEl },\n }\n });\n }\n\n onTooltipClose(anchor) {\n this.setState((prevState) => {\n return {\n ...prevState,\n tooltipOpen: { ...prevState.tooltipOpen, [anchor]: false },\n }\n });\n }\n\n renderTooltip({ name, text }) {\n return (\n\n {editable &&\n\n\n\n }\n{\n setCanvasHighlightColor(key, color);\n if (this.overlay) {\n this.overlay.fabricCanvas().freeDrawingBrush.color = color;\n }\n }}\n toggleColorPicker={() => {toggleCanvasColorPicker(key);}}\n />\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n \n \n\n setAddTileSourceMode(document_id, UPLOAD_SOURCE_TYPE)}\n style={iconBackdropStyleSpaced}\n iconStyle={iconStyle}\n tooltipStyles={tooltipStyle}\n disabled={loading}\n >\n \n\n this.moveLayerClick(-1)}\n style={iconBackdropStyle}\n tooltipStyles={tooltipStyle}\n >\n \n\n this.moveLayerClick(1)}\n style={iconBackdropStyle}\n tooltipStyles={tooltipStyle}\n >\n \n\n \n \n {hasLayers && (\n \n )}\n\n\n \n\n\n \n \n \n {text}\n \n );\n }\n\n\n renderCheckInOutButtons() {\n let label;\n if (this.props.locked) {\n if (this.props.lockedByMe) {\n label = 'check in';\n } else {\n label = 'checked out';\n }\n } else {\n label = 'check out';\n }\n\n return (\n{\n this.props.updateDocument(this.props.document_id, { locked: !this.props.locked }, {\n adjustLock: true,\n instanceKey: this.props.instanceKey,\n })\n }}\n onMouseOver={this.onTooltipOpen.bind(this, 'checkInOut')}\n onMouseOut={this.onTooltipClose.bind(this, 'checkInOut')}\n disabled={this.props.loading || (this.props.locked && !this.props.lockedByMe)}\n />\n );\n }\n\n renderSaveIcon() {\n if (!this.props.locked || (this.props.locked && !this.props.lockedByMe)) return null;\n const saving = !this.props.doneSaving && !this.props.loading;\n const style = {\n verticalAlign: 'middle',\n width: '24px',\n maxWidth: '24px',\n minWidth: '24px',\n height: '24px',\n maxHeight: '24px',\n minHeight: '24px',\n marginLeft: '6px',\n color: 'gray'\n };\n return (\n <>\n {saving && (\n \n )}\n {uploading && !(this.props.uploads && this.props.uploads.length > 0) && (\n <>\n {!(uploads && uploads.length > 0) && (\n <>\n\n )}\n >\n )\n }\n\n renderDeleteButton() {\n // don't allow deletion if locked by someone else\n if (this.props.locked && !this.props.lockedByMe) return null;\n\n return (\n {\n this.props.openDeleteDialog(\n 'Destroying \"' + this.props.resourceName + '\"',\n ( \n );\n }\n\n render() {\n if (!this.props.writeEnabled) return null;\n\n const style = {\n backgroundColor: this.props.document_kind === 'canvas' ? '#424242' : '#ccc',\n paddingLeft: '7px',\n zIndex: 2,\n }\n\n return (\n\n Deleting this document will destroy all its associated highlights\n and links, and any child annotations original to the document,\n in addition to the content of the document itself.\n
),\n 'Destroy document',\n { documentId: this.props.document_id },\n DOCUMENT_DELETE\n );\n }}\n >\n\n \n {this.renderCheckInOutButtons()}\n {this.renderSaveIcon()}\n {this.renderLastSaved()}\n {this.renderDeleteButton()}\n {this.renderTooltip({ name: 'checkInOut', text: this.getStatusMessage() })}\n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n updateDocument,\n openDeleteDialog\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DocumentStatusBar);\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport {\n\tDragSource,\n\tDropTarget\n} from 'react-dnd';\nimport Paper from 'material-ui/Paper';\nimport TextField from 'material-ui/TextField';\nimport IconButton from 'material-ui/IconButton';\nimport Close from 'material-ui/svg-icons/navigation/close';\nimport Visibility from 'material-ui/svg-icons/action/visibility';\nimport VisibilityOff from 'material-ui/svg-icons/action/visibility-off';\nimport Description from 'material-ui/svg-icons/action/description';\nimport { grey100, grey800, grey900 } from 'material-ui/styles/colors';\nimport { updateDocument, closeDocument, moveDocumentWindow, layoutOptions } from './modules/documentGrid';\nimport { toggleCanvasHighlights } from './modules/canvasEditor';\nimport { toggleTextHighlights } from './modules/textEditor';\nimport { closeDocumentTargets } from './modules/annotationViewer';\nimport TextResource from './TextResource';\nimport CanvasResource from './CanvasResource';\nimport DocumentStatusBar from './DocumentStatusBar';\nimport { Popover } from 'material-ui';\n\nconst DocumentInner = function(props) {\n switch (props.document_kind) {\n case 'text':\n return;\n case 'canvas':\n return ;\n default:\n return Error: no type defined for this resource.;\n }\n}\n\nconst documentSource = {\n beginDrag(props) {\n return {\n id: props.id,\n index: props.index\n };\n }\n}\n\nconst documentTarget = {\n hover(props, monitor, component) {\n if (!component) {\n return null;\n }\n\n const dragIndex = monitor.getItem().index;\n const hoverIndex = props.index;\n\n if (dragIndex === hoverIndex) {\n return null;\n }\n\n props.moveDocumentWindow(dragIndex, hoverIndex);\n monitor.getItem().index = hoverIndex;\n }\n}\n\nfunction collectDrag(connect, monitor) {\n return {\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n };\n}\n\nfunction collectDrop(connect, monitor) {\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver()\n };\n}\n\nclass DocumentViewer extends Component {\n constructor(props) {\n super(props);\n\n this.titleChangeTimeout = null;\n this.titleChangeDelayMs = 800;\n\n this.elementRef = React.createRef();\n\n this.state = {\n resourceName: this.props.resourceName,\n lastSaved: '',\n doneSaving: true,\n cornerIconTooltipOpen: false,\n cornerIconTooltipAnchor: null,\n }\n }\n\n componentDidUpdate(prevProps) {\n if (this.props.resourceName !== prevProps.resourceName) {\n this.setState({\n resourceName: this.props.resourceName,\n });\n }\n }\n\n componentDidMount() {\n this.props.connectDragPreview(new Image());\n }\n\n isEditable = () => {\n const { writeEnabled, lockedByMe } = this.props;\n return ( writeEnabled && lockedByMe );\n }\n\n setLastSaved(lastSaved) {\n this.setState({ lastSaved });\n }\n\n onChangeTitle = (event, newValue) => {\n this.setSaving({ doneSaving: false })\n this.setState({\n resourceName: newValue,\n })\n window.clearTimeout(this.titleChangeTimeout);\n this.titleChangeTimeout = window.setTimeout(() => {\n this.props.updateDocument(this.props.document_id, {title: newValue}, {\n refreshLists: true,\n refreshDocumentContent: true,\n timeOpened: this.props.timeOpened,\n });\n this.setLastSaved(new Date().toLocaleString('en-US'));\n this.setSaving({ doneSaving: true })\n }, this.titleChangeDelayMs);\n }\n\n onToggleHighlights() {\n const key = this.getInstanceKey();\n const currentState = this.props.highlightsHidden[key] === true ? true : false\n this.props.toggleHighlights( key, !currentState )\n }\n\n getInstanceKey() {\n const { document_id, timeOpened } = this.props;\n return `${document_id}-${timeOpened}`;\n }\n\n onCloseDocument() {\n this.props.closeDocument(this.props.document_id, this.props.timeOpened)\n this.props.closeDocumentTargets(this.props.document_id)\n }\n\n setSaving({ doneSaving }) {\n this.setState({ doneSaving });\n }\n\n\n onTooltipOpen (e) {\n e.persist();\n const cornerIconTooltipAnchor = e.currentTarget;\n e.preventDefault();\n this.setState((prevState) => {\n return {\n ...prevState,\n cornerIconTooltipOpen: true,\n cornerIconTooltipAnchor,\n }\n });\n }\n\n onTooltipClose () {\n this.setState((prevState) => {\n return {\n ...prevState,\n cornerIconTooltipOpen: false,\n }\n });\n }\n\n renderTitleBar() {\n const iconStyle = {\n padding: '0',\n width: '20px',\n height: '20px'\n };\n const buttonStyle = Object.assign({ margin: '2px' }, iconStyle);\n const highlightsHidden = this.props.highlightsHidden[this.getInstanceKey()];\n\n return (\n this.props.connectDragSource(\n\n\n )\n );\n }\n\n renderStatusBar() {\n const {\n document_kind,\n document_id,\n loading,\n locked,\n lockedByMe,\n lockedByUserName,\n resourceName,\n writeEnabled\n } = this.props;\n\n return (\n\n\n\n \n\n \n Show link inspector\n \n\n { !this.isEditable() &&\n \n { highlightsHidden \n ? \n }\n\n : \n }\n \n \n\n \n );\n }\n\n render() {\n const { currentLayout, isDragging, document_kind, connectDropTarget, numRows, sidebarWidth } = this.props;\n const documentGridOffsetWidth = window.innerWidth - sidebarWidth - 16;\n const windowHeight = window.innerHeight;\n const width = (documentGridOffsetWidth / currentLayout.cols) - 100\n const rows = currentLayout.rows < numRows ? currentLayout.rows : numRows;\n const height = ((windowHeight - 72.0) / rows) - 16;\n const highlightsHidden = this.props.highlightsHidden[this.getInstanceKey()];\n\n return (\n \n {connectDropTarget(\n \n );\n }\n}\nDocumentViewer = DragSource(\n 'documentViewer',\n documentSource,\n collectDrag\n)(DropTarget(\n 'documentViewer',\n documentTarget,\n collectDrop\n)(DocumentViewer));\n\nconst mapStateToProps = (state, ownProps) => ({\n openDocuments: state.documentGrid.openDocuments,\n loading: state.documentGrid.loading,\n currentLayout: layoutOptions[state.documentGrid.currentLayout],\n sidebarWidth: state.project.sidebarWidth,\n highlightsHidden: ownProps.document_kind === 'canvas' ? state.canvasEditor.highlightsHidden : state.textEditor.highlightsHidden,\n});\n\nconst mapDispatchToProps = (dispatch, props) => bindActionCreators({\n updateDocument,\n closeDocument,\n moveDocumentWindow,\n closeDocumentTargets,\n toggleHighlights: props.document_kind === 'canvas' ? toggleCanvasHighlights : toggleTextHighlights,\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DocumentViewer);\n","import React, { Component } from 'react';\nimport { DragSource } from 'react-dnd';\nimport Link from 'material-ui/svg-icons/content/link';\nimport { IconButton } from 'material-ui';\n\nconst summarySource = {\n beginDrag(props) {\n const { id, highlight_id, document_id, parent_id, parent_type, descendant_folder_ids } = props.item;\n\n return {\n id,\n linkable_id: highlight_id || document_id,\n linkable_type: highlight_id ? 'Highlight' : 'Document',\n isFolder: props.isFolder,\n descendant_folder_ids: props.isFolder ? descendant_folder_ids : null,\n existingParentId: parent_id,\n existingParentType: parent_type\n };\n }\n};\n\nfunction collect(connect, monitor) {\n return {\n connectDragSource: connect.dragSource(),\n connectDragPreview: connect.dragPreview(),\n isDragging: monitor.isDragging()\n };\n}\n\nclass DraggableLinkIcon extends Component { \n\n componentDidMount() {\n // use a static image for dragg preview\n const { connectDragPreview } = this.props;\n let linkDragIcon = new Image();\n linkDragIcon.src = '/dragging-link.png';\n connectDragPreview(linkDragIcon);\n }\n\n render() {\n return this.props.connectDragSource( \n\n { this.renderTitleBar() }\n\n )}\n\n { this.renderStatusBar() }\n \n \n\n );\n }\n\n\n oldrender() {\n return this.props.connectDragSource( \n\n\n );\n }\n}\n\nexport default DragSource(\n props => props.inContents ? 'contentsSummary' : 'linkableSummary',\n summarySource,\n collect\n)(DraggableLinkIcon);\n\n","import React, {Component} from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport { DropTarget } from 'react-dnd';\nimport Subheader from 'material-ui/Subheader';\nimport { grey400 } from 'material-ui/styles/colors';\nimport { addLink, deleteLink, selectSidebarTarget } from './modules/annotationViewer';\nimport NoteAdd from 'material-ui/svg-icons/action/note-add';\nimport LinkableList from './LinkableList';\nimport { createTextDocumentWithLink } from './modules/documentGrid';\nimport { openDocumentPopover, closeDocumentPopover } from './modules/project';\nimport RaisedButton from 'material-ui/RaisedButton';\nimport 'react-resizable/css/styles.css';\nimport DraggableLinkIcon from './DraggableLinkIcon';\n\nconst LinkList = function(props) {\n if (props.items && props.items.length > 0) {\n return (\nDrag this icon to make a link.}\n >\n \n \n\n );\n }\n return null;\n}\n\nconst linkTarget = {\n canDrop(props, monitor) {\n return true;\n },\n\n drop(props, monitor) {\n const origin = {\n linkable_id: props.highlight_id || props.document_id,\n linkable_type: props.highlight_id ? 'Highlight' : 'Document'\n }\n const target = monitor.getItem();\n\n // first, make sure origin !== target\n if( origin.linkable_type === target.linkable_type &&\n origin.linkable_id === target.linkable_id ) {\n // TODO indicate invalid\n return;\n }\n // then, make sure linked isn't already in our set of links\n const existingLinkFound = props.items.find( (link) => {\n if( target.linkable_type === 'Highlight') {\n // are these same highlight?\n return ( target.linkable_id === link.highlight_id )\n } else {\n // are these same doc?\n return ( !link.highlight_id && target.linkable_id === link.document_id ) \n }\n });\n\n if( existingLinkFound ) {\n // TODO indicate invalid\n return\n }\n\n // this is a fresh link, create it...\n props.addLink(origin, target, null, origin.linkable_type);\n }\n};\n\nfunction collect(connect, monitor) {\n return {\n connectDropTarget: connect.dropTarget(),\n isOver: monitor.isOver()\n };\n}\n\nclass LinkDropTarget extends Component {\n render() {\n return (\n \n\n );\n }\n}\nLinkDropTarget = DropTarget(\n ['contentsSummary', 'linkableSummary'],\n linkTarget,\n collect\n)(LinkDropTarget);\n\nconst LinkArea = props => {\n if (props.writeEnabled) {\n return\n\n {(this.props.connectDropTarget(\n\n \n {!this.props.isOver &&\n\n ))}\nDrop link here. \n }\n;\n }\n return ;\n}\n\nclass LinkInspector extends Component {\n\n getItemList() {\n const links = this.props.target.links_to;\n if( links && links.length > 0 ) {\n return links.map( (link) => {\n const linkID = link.document_id + (link.highlight_id ? '-' + link.highlight_id : '');\n return { \n ...link, \n id: linkID, \n linkItem: true, \n removeLinkCallback: (linkItem) => {\n this.props.deleteLink(linkItem.link_id);\n } \n };\n })\n } else {\n return [];\n }\n }\n \n render() {\n const { target } = this.props;\n if (target === null) return null;\n\n const items = this.getItemList();\n const buttonId = `addNewDocumentButton-${this.props.idString}`;\n return (\n \n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n documentPopoverOpenFor: state.project.documentPopoverOpenFor\n})\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n addLink,\n deleteLink,\n openDocumentPopover,\n closeDocumentPopover,\n createTextDocumentWithLink,\n selectSidebarTarget\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(LinkInspector);\n","import React, {Component} from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport Draggable from 'react-draggable';\n\nimport Paper from 'material-ui/Paper';\nimport IconButton from 'material-ui/IconButton';\nimport Subheader from 'material-ui/Subheader';\nimport TextField from 'material-ui/TextField';\n\nimport Close from 'material-ui/svg-icons/navigation/close';\nimport Done from 'material-ui/svg-icons/action/done';\nimport ModeComment from 'material-ui/svg-icons/editor/mode-comment';\nimport { yellow100, orange100, red100, purple100, blue100, cyan100, green100, lightGreen100 } from 'material-ui/styles/colors';\nimport { yellow500, orange300, redA100, purpleA100, cyanA100, blueA100, lightGreenA700, lightGreenA200, grey400 } from 'material-ui/styles/colors';\n\nimport LinkInspector from './LinkInspector';\nimport { updateHighlight } from './modules/documentGrid';\n\nconst timeUpdateDelay = 1000\n\nclass LinkInspectorPopup extends Component {\n\n constructor(props) {\n super(props)\n this.state = {\n titleBuffer: props.target.title ? props.target.title : props.target.excerpt,\n titleUpdateTimer: null,\n titleHasFocus: false \n }\n }\n\n componentWillMount() {\n Paper.defaultProps.transitionEnabled = false;\n }\n\n getTitleColor(color) {\n if( color === yellow500) return yellow100\n if( color === orange300) return orange100\n if( color === redA100) return red100\n if( color === purpleA100) return purple100\n if( color === cyanA100) return cyan100\n if( color === blueA100) return blue100\n if( color === lightGreenA700) return green100\n if( color === lightGreenA200) return lightGreen100\n return grey400;\n }\n\n onChangeTitle = (e,newTitle) => {\n let {titleUpdateTimer} = this.state; \n\n if (titleUpdateTimer) {\n window.clearTimeout(titleUpdateTimer);\n }\n titleUpdateTimer = window.setTimeout(function() {\n this.props.updateHighlight(this.props.target.id, {title: newTitle}); \n }.bind(this), timeUpdateDelay);\n\n this.setState( {...this.state, titleBuffer: newTitle, titleUpdateTimer })\n }\n\n onTitleFocus(e) {\n this.setState( {...this.state, titleHasFocus: true })\n }\n\n onTitleBlur() {\n this.setState( {...this.state, titleHasFocus: false })\n }\n\n renderTitle(titleBarColor, canEditTitle) {\n const titleBarID = `highlight-title-${this.props.target.uid}`\n\n if( this.props.target.highlight_id ) {\n if( canEditTitle && this.state.titleHasFocus && !this.props.rollover ) {\n return (\n \n\n {this.props.writeEnabled && \n \n\n }\n}\n style={{margin: 5}}\n onClick={() => {\n this.props.createTextDocumentWithLink({\n linkable_id: target.highlight_id || target.document_id,\n linkable_type: target.highlight_id ? 'Highlight' : 'Document'\n }, this.props.target.document_id, 'Document');\n this.props.closeDocumentPopover();\n }}\n id={buttonId}\n />\n \n\n\n \n \n \n \n ) \n } else {\n return(\n {}}>\n {this.state.titleBuffer}\n \n ) \n }\n } else {\n return (\n \n {this.props.target.title}\n \n )\n }\n }\n\n getInnerID() {\n return `${this.props.id}-inner`\n }\n\n render() {\n const { target, writeEnabled, adminEnabled, rollover } = this.props;\n \n const titleBarColor = this.getTitleColor(target.color);\n \n const linkIconStyle = {\n paddingLeft: 5,\n paddingRight: 10,\n marginBottom: '-5px',\n width: '20px',\n height: '20px'\n };\n\n const linkInspectorVisible = (writeEnabled && !rollover) || (this.props.target.links_to && this.props.target.links_to.length > 0) \n const linkInspectorProps = { ...this.props, writeEnabled: writeEnabled && !rollover, adminEnabled }\n\n const canEditTitle = this.props.writeEnabled && (this.props.target.document_id \n ? this.props.openDocuments.some(\n openDoc => openDoc.id === this.props.target.document_id && openDoc.locked === true\n )\n : true);\n const startPos = target.startPosition;\n let open = true;\n if (!startPos) {\n open = false;\n }\n return open && (\n\n \n )\n }\n\n}\n\nconst mapStateToProps = state => ({\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n updateHighlight\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(LinkInspectorPopup);","import React, { Component } from 'react';\nimport LinkInspectorPopup from './LinkInspectorPopup';\n\nconst generatePopupKey = target => `${target.document_id}${(target.highlight_id ? '-' + target.highlight_id : '')}-${target.opened}`;\n\nexport default class LinkInspectorPopupLayer extends Component {\n render() {\n return (\n\n \n\n\n { linkInspectorVisible && \n\n \n\n { this.renderTitle(titleBarColor, canEditTitle) } \n \n { !this.props.rollover && \n}\n \n\n }\n\n \n\n );\n }\n}\n","import React, {Component} from 'react';\nimport { ResizableBox } from 'react-resizable';\nimport Draggable from 'react-draggable';\nimport Paper from 'material-ui/Paper';\nimport IconButton from 'material-ui/IconButton';\nimport Close from 'material-ui/svg-icons/navigation/close';\nimport Subheader from 'material-ui/Subheader';\nimport Search from 'material-ui/svg-icons/action/search';\nimport Divider from 'material-ui/Divider';\nimport LinkableList from './LinkableList';\n\nconst dialogStartPosition = { x: 300, y: 100, z: 1100 };\n\nexport default class SearchResultsPopup extends Component {\n componentWillMount() {\n Paper.defaultProps.transitionEnabled = false;\n }\n\n render() {\n\n const searchIconStyle = {\n paddingLeft: 5,\n paddingRight: 10,\n marginBottom: '-5px',\n width: '20px',\n height: '20px'\n };\n\n return (\n\n {this.props.targets.map((target, index) => (\n\n{this.props.closeHandler(target.document_id, target.highlight_id);}}\n onDragHandleMouseDown={() => {this.props.mouseDownHandler(target.document_id, target.highlight_id);}}\n openDocumentIds={this.props.openDocumentIds}\n openDocuments={this.props.openDocuments}\n writeEnabled={this.props.writeEnabled}\n adminEnabled={this.props.adminEnabled}\n rollover={target.rollover}\n />\n ))}\n \n \n );\n }\n}\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport SearchResultsPopup from './SearchResultsPopup';\nimport { closeSearchPopup } from './modules/search';\n\nclass SearchResultsPopupLayer extends Component {\n\n onClose = () => {\n if( !this.props.search.loading ) {\n this.props.closeSearchPopup();\n }\n }\n\n render() {\n const search = this.props.search;\n return (\n\n \n\n \n\n\n\n\n\n \n\n Search for: {this.props.searchPhrase}\n \n \n\n \n \n { this.props.searchResults.length > 0 ? \n\n\n :\n \n No documents found.\n\n } \n\n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n search: state.search\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n closeSearchPopup\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(SearchResultsPopupLayer);\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport Checkbox from 'material-ui/Checkbox';\nimport Dialog from 'material-ui/Dialog';\nimport DropDownMenu from 'material-ui/DropDownMenu';\nimport FlatButton from 'material-ui/FlatButton';\nimport LinearProgress from 'material-ui/LinearProgress';\nimport RaisedButton from 'material-ui/RaisedButton';\nimport { RadioButton, RadioButtonGroup } from 'material-ui/RadioButton';\nimport TextField from 'material-ui/TextField';\nimport CloudUpload from 'material-ui/svg-icons/file/cloud-upload';\nimport {\n hideBatchImagePrompt,\n hideCloseDialog,\n killUploading,\n showCloseDialog,\n startUploading,\n} from './modules/project';\nimport { createBatchImages } from './modules/documentGrid';\nimport { DirectUploadProvider } from '@docflow/react-activestorage-provider';\nimport { red400, red900, green400, lightBlue400, yellow400 } from 'material-ui/styles/colors';\nimport MenuItem from 'material-ui/MenuItem/MenuItem';\n\nconst TableRow = ({ upload, mode }) => {\n let name = '';\n let id = '';\n if (mode === 'fromProps') {\n name = upload.filename || upload.signedId;\n id = upload.signedId;\n } else {\n name = upload.file.name;\n id = upload.id;\n }\n const progressTrStyle = {\n marginTop: '20px',\n };\n const nameTdStyle = {\n width: '400px',\n maxWidth: '400px',\n minWidth: '400px',\n overflowWrap: 'break-word',\n paddingRight: '10px',\n fontWeight: 'bold',\n };\n const progressTdStyle = {\n width: '320px',\n maxWidth: '320px',\n minWidth: '320px',\n paddingRight: '10px',\n };\n const statusTdStyle = {\n width: '200px',\n maxWidth: '200px',\n minWidth: '200px',\n textAlign: 'right',\n }\n switch (upload.state) {\n case 'waiting':\n case 'uploading':\n return (\n\n { search.popupOpen &&\n\n\n }\n \n \n );\n case 'doc-created':\n return (\n\n {name}\n \n\n \n {mode === 'fromProps' ? 'Processing' : 'Uploading'}\n \n\n \n );\n case 'error':\n return (\n\n {name}\n \n\n \n Processing\n \n\n \n );\n case 'finished':\n return (\n\n {name}\n \n\n \n {upload.error.toString()}\n \n\n \n );\n case 'timeout':\n return (\n\n {name}\n \n\n \n {mode === 'fromProps' ? 'Complete' : 'Processing'}\n \n\n \n );\n default:\n return (\n\n {name}\n \n\n \n\n \n {upload.error.toString()}\n \n\n \n );\n }\n}\n\nconst CloseDialog = ({ closeAction, cancelAction, open }) => {\n return (\n ,\n{name} \n\n \n Unknown\n \n,\n ]}\n >\n Are you sure you want to close this dialog? It may interrupt uploads in progress.\n \n );\n}\n\nclass BatchImagePrompt extends Component {\n constructor(props) {\n super(props);\n this.defaultState = {\n invalidFiles: null,\n inFolder: false,\n existingFolder: false,\n newFolderName: '',\n folderId: '',\n menuItemsToRender: [],\n };\n this.state = {\n ...this.defaultState,\n };\n }\n\n pushSelfAndDescendants({ parent, folderData, level }) {\n if(!this.state.menuItemsToRender.some(item => item.key === parent.id)) {\n const newItem = {\n key: parent.id,\n value: parent.id,\n primaryText: `${level > 0 ? `└${'─'.repeat(level-1)}` : ''} ${parent.title}`,\n };\n this.setState((prevState) => ({ menuItemsToRender: [...prevState.menuItemsToRender, newItem] }));\n folderData\n .filter(child => \n child.parent_type === 'DocumentFolder' && \n child.parent_id === parent.id\n )\n .sort((a, b) => {\n if (a.title.toLowerCase() < b.title.toLowerCase()) { return -1; }\n if (a.title.toLowerCase() > b.title.toLowerCase()) { return 1; }\n return 0;\n })\n .forEach(child => this.pushSelfAndDescendants({\n parent: child,\n folderData,\n level: level+1,\n }));\n }\n }\n\n updateCheck() {\n this.setState((prevState) => {\n if (prevState.inFolder === false) {\n return {\n ...prevState,\n inFolder: !prevState.inFolder,\n existingFolder: false,\n }\n } else {\n return {\n ...prevState,\n inFolder: !prevState.inFolder,\n };\n }\n });\n }\n\n changeFolderType(event, value) {\n const { folderData } = this.props;\n this.setState({\n existingFolder: value === 'existing',\n })\n if (value === 'existing') {\n folderData\n .filter(child => child['parent_type'] === 'Project')\n .sort((a, b) => {\n if (a.title.toLowerCase() < b.title.toLowerCase()) { return -1; }\n if (a.title.toLowerCase() > b.title.toLowerCase()) { return 1; }\n return 0;\n })\n .forEach(child => this.pushSelfAndDescendants(\n { parent: child, folderData, level: 0}\n ));\n }\n }\n\n selectFolder(event, index, value) {\n this.setState({\n folderId: value,\n })\n }\n\n renderFolderChoice() {\n const { contentsChildren } = this.props;\n const { inFolder, existingFolder, folderId, newFolderName } = this.state;\n const spaced = { marginBottom: '16px' };\n const dropdownStyle = { width: '100%', marginTop: '-6px', marginBottom: '22px' };\n const grayStyle = { color: 'gray' };\n return (\n <>\n \n {inFolder && (\n <>\n \n \n {!existingFolder && (\n <>\n New folder:\n {' '}\n\n child['document_kind'] === 'folder'\n ).length === 0\n }\n />\n this.setState({ newFolderName: val })}\n hintText=\"Name\"\n style={{ marginLeft: '4px', ...spaced }}\n >\n \n >\n )}\n {existingFolder && ( \n\n \n )}\n >\n )}\n >\n )\n }\n\n renderMultipleUploadButton({ projectId }) {\n const { createBatchImages, uploading, startUploading, killUploading, uploadError } = this.props;\n const { folderId, newFolderName, inFolder, existingFolder } = this.state;\n const uploadsNotDone = this.props.uploads && this.props.uploads.length > 0 && this.props.uploads.some(\n (upload) => !['timeout', 'finished', 'error'].includes(upload.state)\n );\n const folderChoiceValid = \n !inFolder || \n (existingFolder === false && newFolderName !== '') ||\n (existingFolder === true && folderId !== '');\n return !uploadError ? (\n\n {\n this.state.menuItemsToRender.map(item => (\n \n ))\n }\n {\n createBatchImages({\n projectId,\n signedIds,\n inFolder,\n existingFolder,\n folderId,\n newFolderName,\n });\n }}\n render={({ handleUpload, uploads, ready }) => (\n <>\n {!uploading && !(this.props.uploads && this.props.uploads.length > 0) && (\n }\n label=\"Upload multiple\"\n disabled={\n !ready ||\n uploads.length > 0 ||\n uploadsNotDone ||\n !folderChoiceValid\n }\n >\n 0 ||\n uploadsNotDone ||\n !folderChoiceValid}\n multiple\n onChange={(e) => {\n const { files } = e.currentTarget;\n if (files.length > 50) {\n this.setState((prevState) => ({ ...prevState, invalidFiles: 'count' }));\n } else {\n const validFileFormats = ['image/png', 'image/jpeg', 'image/jpg'];\n let batchSize = 0.0;\n let filesAreValidFormat = true;\n for (let i = 0; i < files.length; i += 1) {\n const sizeInBytes = files[i].size;\n const sizeInMB = sizeInBytes / (1024*1024);\n batchSize += sizeInMB;\n if (!validFileFormats.includes(files[i].type)) {\n filesAreValidFormat = false;\n }\n }\n if (batchSize <= 150 && filesAreValidFormat) {\n handleUpload(files).catch(err => {\n console.error(err);\n killUploading(err);\n });\n startUploading();\n this.setState((prevState) => ({ ...prevState, invalidFiles: null }));\n } else if (batchSize > 150) {\n this.setState((prevState) => ({ ...prevState, invalidFiles: 'size' }));\n } else {\n this.setState((prevState) => ({ ...prevState, invalidFiles: 'format' }));\n }\n }\n }}\n style={{ display: 'none' }}\n />\n \n Loading...\n
\n\n >\n )}\n {uploads && uploads.length > 0 && (\n \n \n {uploads.map((upload) => (\n
\n )}\n >\n )}\n {this.props.uploads && this.props.uploads.length > 0 && (\n\n ))}\n \n \n \n {this.props.uploads.map((upload) => (\n
\n )}\n >\n )}\n />\n ) : (<>>);\n }\n\n render() {\n const { \n batchImagePromptShown,\n closeDialogShown,\n hideBatchImagePrompt,\n hideCloseDialog,\n showCloseDialog,\n uploading,\n uploads,\n uploadError,\n } = this.props;\n const projectId = batchImagePromptShown;\n\n const uploadsNotDone = uploads.some(\n (upload) => !['timeout', 'finished', 'error'].includes(upload.state)\n );\n\n const showInitStuff = !uploading && !(this.props.uploads && this.props.uploads.length > 0);\n\n return (\n \n );\n }\n}\n\nconst mapStateToProps = (state) => ({\n batchImagePromptShown: state.project.batchImagePromptShown,\n uploads: state.project.uploads,\n uploading: state.project.uploading,\n contentsChildren: state.project.contentsChildren,\n folderData: state.project.folderData,\n closeDialogShown: state.project.closeDialogShown,\n uploadError: state.project.uploadError,\n});\n\nconst mapDispatchToProps = (dispatch) =>\n bindActionCreators(\n {\n hideBatchImagePrompt,\n startUploading,\n killUploading,\n createBatchImages,\n showCloseDialog,\n hideCloseDialog,\n },\n dispatch\n );\n\nexport default connect(mapStateToProps, mapDispatchToProps)(BatchImagePrompt);\n","import React, { Component } from 'react';\nimport { bindActionCreators } from 'redux';\nimport { connect } from 'react-redux';\nimport HTML5Backend from 'react-dnd-html5-backend';\nimport { DragDropContext } from 'react-dnd';\nimport { loadProject, updateProject, showSettings, hideSettings, checkInAll } from './modules/project';\nimport { selectTarget, closeTarget, closeTargetRollover, promoteTarget } from './modules/annotationViewer';\nimport { closeDeleteDialog, confirmDeleteDialog, layoutOptions, updateSnackBar, fetchLock } from './modules/documentGrid';\nimport { selectHighlight } from './modules/textEditor';\nimport Dialog from 'material-ui/Dialog';\nimport Snackbar from 'material-ui/Snackbar';\nimport FlatButton from 'material-ui/FlatButton';\nimport Navigation from './Navigation';\nimport ProjectSettingsDialog from './ProjectSettingsDialog';\nimport TableOfContents from './TableOfContents';\nimport DocumentViewer from './DocumentViewer';\nimport LinkInspectorPopupLayer from './LinkInspectorPopupLayer';\nimport SearchResultsPopupLayer from './SearchResultsPopupLayer';\nimport BatchImagePrompt from './BatchImagePrompt';\nimport { Beforeunload } from 'react-beforeunload';\n\nconst rolloverTimeout = 500\n\nclass Project extends Component {\n constructor(props) {\n super(props);\n\n this.mainContainer = null;\n this.mouseX = 0;\n this.mouseY = 0;\n this.rolloverTimer = null;\n }\n\n setFocusHighlight(document_id, highlight_id, key) {\n this.hideRollover(highlight_id)\n const target = this.createTarget(document_id, highlight_id, key)\n if (target) {\n this.props.selectTarget(target);\n }\n }\n\n selectTextHighlight(document_id, highlight_id, key) {\n if (!(key && this.props.highlightsHidden && this.props.highlightsHidden[key])) {\n if (this.props.highlightSelectModes[key]) {\n this.props.selectHighlight(key, highlight_id);\n }\n // if the clicked highlight is currently selected, don't proceed with the normal popover behavior to facilitate editing the highlighted text\n else if (this.props.selectedHighlights[key] !== highlight_id) {\n this.setFocusHighlight(document_id, highlight_id, key);\n }\n }\n }\n\n showRollover(document_id, highlight_id, key) {\n // if this doc's highlights are hidden, or the hovered highlight is currently selected,\n // don't proceed with the normal popover behavior to facilitate editing the highlighted text\n if ((key && this.props.highlightsHidden && this.props.highlightsHidden[key]) || this.props.selectedHighlights[key] === highlight_id) return;\n const existingPopover = this.props.selectedTargets.find( target => !target.rollover && target.uid === highlight_id )\n if( !existingPopover ) {\n this.activateRolloverTimer( () => {\n const target = this.createTarget(document_id, highlight_id, key)\n if (target) {\n target.rollover = true\n this.props.selectTarget(target);\n }\n else {\n console.log('tried to show rollover for a non-existent target', document_id, highlight_id);\n }\n })\n }\n }\n\n hideRollover(highlight_uid) {\n const existingRollover = this.props.selectedTargets.find( target => target.rollover && target.uid === highlight_uid )\n if( existingRollover ) {\n this.props.closeTargetRollover(highlight_uid);\n } else {\n this.deactivateRolloverTimer()\n }\n }\n\n createTarget( documentID, highlightID, key ) {\n const resource = this.props.openDocuments.find(resource => resource.id.toString() === documentID.toString());\n const target = resource && highlightID ? resource.highlight_map[highlightID] : resource;\n if (target) {\n let newTarget = { ...target }\n newTarget.document_id = documentID;\n newTarget.originKey = key;\n newTarget.highlight_id = highlightID ? target.id : null;\n newTarget.document_title = resource.title;\n newTarget.document_kind = resource.document_kind;\n newTarget.startPosition = {\n x: Math.min(Math.max(this.mouseX - this.props.sidebarWidth, 0), this.mainContainer.offsetWidth),\n y: this.mouseY + window.scrollY\n };\n return newTarget\n } else {\n return null\n }\n }\n\n activateRolloverTimer( callback ) {\n this.deactivateRolloverTimer()\n this.rolloverTimer = setTimeout(callback, rolloverTimeout )\n }\n\n deactivateRolloverTimer() {\n if( this.rolloverTimer ) {\n clearTimeout(this.rolloverTimer)\n this.rolloverTimer = null\n }\n }\n\n componentDidMount() {\n window.setFocusHighlight = this.setFocusHighlight.bind(this);\n window.selectTextHighlight = this.selectTextHighlight.bind(this);\n window.showRollover = this.showRollover.bind(this);\n window.hideRollover = this.hideRollover.bind(this);\n if (this.props.match.params.slug !== 'new') {\n this.props.loadProject(this.props.match.params.slug, this.props.projectTitle)\n }\n }\n\n componentDidUpdate(prevProps) {\n if (prevProps.currentUser !== this.props.currentUser && this.props.match.params.slug !== 'new') {\n this.props.loadProject(this.props.match.params.slug, this.props.projectTitle);\n this.props.openDocumentIds.forEach((id) => {\n this.props.fetchLock(id);\n });\n }\n }\n\n renderDeleteDialog() {\n const { deleteDialogTitle, closeDeleteDialog, deleteDialogSubmit, deleteDialogOpen, deleteDialogBody, confirmDeleteDialog } = this.props;\n\n return (\n ,\n\n ))}\n \n \n ]}\n modal={true}\n open={deleteDialogOpen}\n >\n {deleteDialogBody}\n \n );\n }\n\n renderDialogLayers() {\n return (\n \n\n );\n }\n\n getSelectedHighlight(key) {\n return this.props.selectedHighlights[key];\n }\n\n renderDocumentViewer = (document,index) => {\n const { projectId, writeEnabled } = this.props;\n const key = `${document.id}-${document.timeOpened}`;\n return (\n\n \n { this.renderDeleteDialog() }\n \n \n {this.setFocusHighlight(document.id, undefined, key);}}\n writeEnabled={writeEnabled}\n locked={document.locked}\n lockedByUserName={document.locked_by_user_name}\n lockedByMe={document.locked_by_me}\n numRows={this.numRows}\n firstTarget={document.firstTarget}\n getSelectedHighlight={this.getSelectedHighlight.bind(this)}\n />\n );\n }\n\n renderDocumentGrid() {\n const { currentLayout, openDocuments } = this.props;\n const newNumRows = Math.max(1, Math.ceil(openDocuments.length / currentLayout.cols));\n\n // if the number of rows goes up, bump the scroll bar\n if( this.numRows && newNumRows > currentLayout.rows && newNumRows > this.numRows ) {\n const newScrollPos = 100 + window.pageYOffset;\n window.scrollTo(0, newScrollPos);\n }\n this.numRows = newNumRows;\n\n const gridInnerStyle = {\n margin: `72px 8px 0 ${this.props.sidebarWidth + 8}px`,\n display: 'flex',\n flexWrap: 'wrap',\n overflow: 'hidden'\n }\n\n return (\n {this.mainContainer = el;}}\n onMouseMove={event => {this.mouseX = event.clientX; this.mouseY = event.clientY;}}\n >\n\n );\n }\n\n renderSnackbar() {\n const { snackBarMessage, snackBarOpen, updateSnackBar } = this.props \n return (\n\n {openDocuments.map( this.renderDocumentViewer )}\n\n{ updateSnackBar(false,null) } }\n />\n ) \n }\n\n render() {\n const {\n title,\n projectId,\n loading,\n adminEnabled,\n sidebarWidth,\n contentsChildren,\n openDocumentIds,\n writeEnabled,\n uploads,\n uploading,\n batchImagePromptShown,\n } = this.props;\n const uploadsNotDone = uploads.some(\n (upload) => upload.state !== 'finished' && upload.state !== 'error'\n );\n return (\n \n\n );\n }\n}\n\nconst mapStateToProps = state => ({\n currentUser: state.reduxTokenAuth.currentUser,\n projectId: state.project.id,\n title: state.project.title,\n loading: state.project.loading,\n errored: state.project.errored,\n adminUsers: state.project.adminUsers,\n contentsChildren: state.project.contentsChildren,\n sidebarWidth: state.project.sidebarWidth,\n sidebarIsDragging: state.project.sidebarIsDragging,\n uploads: state.project.uploads,\n uploading: state.project.uploading,\n batchImagePromptShown: state.project.batchImagePromptShown,\n writeEnabled: state.project.currentUserPermissions.write,\n adminEnabled: state.project.currentUserPermissions.admin,\n openDocuments: state.documentGrid.openDocuments,\n openDocumentIds: state.documentGrid.openDocuments.map(document => document.id.toString()),\n deleteDialogOpen: state.documentGrid.deleteDialogOpen,\n deleteDialogTitle: state.documentGrid.deleteDialogTitle,\n deleteDialogBody: state.documentGrid.deleteDialogBody,\n deleteDialogSubmit: state.documentGrid.deleteDialogSubmit,\n snackBarOpen: state.documentGrid.snackBarOpen,\n snackBarMessage: state.documentGrid.snackBarMessage,\n currentLayout: layoutOptions[state.documentGrid.currentLayout],\n selectedTargets: state.annotationViewer.selectedTargets,\n sidebarTarget: state.annotationViewer.sidebarTarget,\n highlightSelectModes: state.textEditor.highlightSelectModes,\n selectedHighlights: state.textEditor.selectedHighlights,\n highlightsHidden: state.textEditor.highlightsHidden,\n});\n\nconst mapDispatchToProps = dispatch => bindActionCreators({\n loadProject,\n updateProject,\n selectTarget,\n closeTarget,\n closeTargetRollover,\n promoteTarget,\n closeDeleteDialog,\n confirmDeleteDialog,\n showSettings,\n checkInAll,\n updateSnackBar,\n hideSettings,\n selectHighlight,\n fetchLock,\n}, dispatch);\n\nexport default connect(\n mapStateToProps,\n mapDispatchToProps\n)(DragDropContext(HTML5Backend)(Project));\n","import React, { Component } from 'react';\nimport { Route } from 'react-router-dom';\nimport darkBaseTheme from 'material-ui/styles/baseThemes/darkBaseTheme';\nimport MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';\nimport getMuiTheme from 'material-ui/styles/getMuiTheme';\nimport { grey200, grey400, grey900 } from 'material-ui/styles/colors';\nimport Home from './Home';\nimport Project from './Project';\nimport 'prosemirror-view/style/prosemirror.css';\nimport 'prosemirror-menu/style/menu.css';\nimport 'prosemirror-example-setup/style/style.css';\n\nexport default class App extends Component {\n render() {\n return (\n{this.props.updateProject(projectId, {title: newValue});}}\n isLoading={loading}\n />\n this.props.checkInAll(projectId) }\n sidebarWidth={sidebarWidth} \n contentsChildren={contentsChildren} \n openDocumentIds={openDocumentIds} \n writeEnabled={writeEnabled} \n />\n { this.renderDialogLayers() }\n { this.renderDocumentGrid() }\n { this.renderSnackbar() }\n {(loading || \n (\n uploads && \n uploads.length > 0 && \n uploadsNotDone\n ) ||\n uploading ||\n batchImagePromptShown)\n && (\n event.preventDefault()} />\n )}\n \n \n );\n }\n}\n","// In production, we register a service worker to serve assets from local cache.\n\n// This lets the app load faster on subsequent visits in production, and gives\n// it offline capabilities. However, it also means that developers (and users)\n// will only see deployed updates on the \"N+1\" visit to a page, since previously\n// cached resources are updated in the background.\n\n// To learn more about the benefits of this model, read https://goo.gl/KwvDNy.\n// This link also includes instructions on opting out of this behavior.\n\nconst isLocalhost = Boolean(\n window.location.hostname === 'localhost' ||\n // [::1] is the IPv6 localhost address.\n window.location.hostname === '[::1]' ||\n // 127.0.0.1/8 is considered localhost for IPv4.\n window.location.hostname.match(\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\n )\n);\n\nexport default function register() {\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\n // The URL constructor is available in all browsers that support SW.\n const publicUrl = new URL(process.env.PUBLIC_URL, window.location);\n if (publicUrl.origin !== window.location.origin) {\n // Our service worker won't work if PUBLIC_URL is on a different origin\n // from what our page is served on. This might happen if a CDN is used to\n // serve assets; see https://github.com/facebookincubator/create-react-app/issues/2374\n return;\n }\n\n window.addEventListener('load', () => {\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\n\n if (isLocalhost) {\n // This is running on localhost. Lets check if a service worker still exists or not.\n checkValidServiceWorker(swUrl);\n\n // Add some additional logging to localhost, pointing developers to the\n // service worker/PWA documentation.\n navigator.serviceWorker.ready.then(() => {\n console.log(\n 'This web app is being served cache-first by a service ' +\n 'worker. To learn more, visit https://goo.gl/SC7cgQ'\n );\n });\n } else {\n // Is not local host. Just register service worker\n registerValidSW(swUrl);\n }\n });\n }\n}\n\nfunction registerValidSW(swUrl) {\n navigator.serviceWorker\n .register(swUrl)\n .then(registration => {\n registration.onupdatefound = () => {\n const installingWorker = registration.installing;\n installingWorker.onstatechange = () => {\n if (installingWorker.state === 'installed') {\n if (navigator.serviceWorker.controller) {\n // At this point, the old content will have been purged and\n // the fresh content will have been added to the cache.\n // It's the perfect time to display a \"New content is\n // available; please refresh.\" message in your web app.\n console.log('New content is available; please refresh.');\n } else {\n // At this point, everything has been precached.\n // It's the perfect time to display a\n // \"Content is cached for offline use.\" message.\n console.log('Content is cached for offline use.');\n }\n }\n };\n };\n })\n .catch(error => {\n console.error('Error during service worker registration:', error);\n });\n}\n\nfunction checkValidServiceWorker(swUrl) {\n // Check if the service worker can be found. If it can't reload the page.\n fetch(swUrl)\n .then(response => {\n // Ensure service worker exists, and that we really are getting a JS file.\n if (\n response.status === 404 ||\n response.headers.get('content-type').indexOf('javascript') === -1\n ) {\n // No service worker found. Probably a different app. Reload the page.\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister().then(() => {\n window.location.reload();\n });\n });\n } else {\n // Service worker found. Proceed as normal.\n registerValidSW(swUrl);\n }\n })\n .catch(() => {\n console.log(\n 'No internet connection found. App is running in offline mode.'\n );\n });\n}\n\nexport function unregister() {\n if ('serviceWorker' in navigator) {\n navigator.serviceWorker.ready.then(registration => {\n registration.unregister();\n });\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\nimport { ConnectedRouter } from 'react-router-redux';\nimport store, { history } from './store';\nimport { verifyCredentials } from './modules/redux-token-auth-config';\nimport './index.css';\nimport App from './App';\nimport {unregister} from './registerServiceWorker';\n\nverifyCredentials(store);\n\nReactDOM.render(\n\n\n\n \n\n \n \n ,\n document.getElementById('root')\n);\n\nunregister();\n// TODO perhaps enable this later.\n//registerServiceWorker();\n"],"sourceRoot":""}\n \n\n\n\n