{"version":3,"sources":["1initializers.js","annotationmodels.js","annotationsviews.js","batchviews.js","drawingsviews.js","drawingviewer.js","drawingviewerarea.js","helpers.js","models.js","ordering.js","utilityviews.js"],"names":["PJQ","collections","drawings","models","views","modules","routes","route","name","callback","projectId","projectWall","initProjectNavigator","parseInt","versionId","accessKey","ajax","Request","endpoint","helpers","urlHelpers","generateEndpoint","value","get","success","_","bind","data","prj","versions","Versions","attachments","files","Files","hasDrawings","find","version","size","projects","Project","done","settings","$container","$","class","app","$el","html","downloadPerFileFee","createPsuedoFolders","each","attachment","isFetched","view","renderView","Attachments","el","project","collection","forShare","isAdmin","orderSettings","Dashboard","this","tmp","templating","Template","constants","DRAWINGS","TemplateRenderer","renderTemplate","fail","responseJSON","message","dashboardModes","VIEW","EDIT","SELECT","downloadStatus","FAILED","NEW","QUEUED","IN_PROGRESS","COMPLETE","downloadFrameId","imageExtensions","annotationTypes","INSPECT","PEN","HIGHLIGHTER","LINE","ARROW","RECTANGLE","ELLIPSE","CLOUD","LINK_RECTANGLE","LINK_ELLIPSE","LINK_CLOUD","TEXT","PHOTO","RULER","AREA_RECT","RULER_FREE_FORM","AREA_FREE_FORM","CALIBRATION","PIN_PUNCH_LIST_ITEM","PIN_ACTION_ITEM","PIN_RFI","PIN_SUBMITTAL","annotationTypeNames","refTypes","DRAWING","PUNCH_LIST_ITEM","ACTION_ITEM","RFI","SUBMITTAL","dragPoints","START","END","TOP_LEFT","TOP_RIGHT","BOTTOM_LEFT","BOTTOM_RIGHT","scaleTypes","IMPERIAL","METRIC","addRoutes","Annotation","BaseModel","extend","idAttribute","notifyName","minWidth","minHeight","afterInit","objectHelpers","checkNested","options","isAPIv2","session","preferences","hasPref","preferenceTypes","ENABLE_DRAWING_ANNOTATION_REFS","indexOf","id","canEdit","user","canEditColor","type","parse","model","AnnotationAttachments","refData","refId","refType","punchlistItemId","punchListItem","punchlists","PunchlistItem","actionItemId","actionItem","actionItems","ActionItem","getDisplayName","getDeepLink","drawDragPoints","ct","scale","getStrokeColor","stroke","strokeColor","lineWidth","setLineDash","strokeStyle","getFillColor","fill","fillColor","fillStyle","start","x","y","set","Math","round","attributes","end","normalize","arguments","length","undefined","normalizeCoords","move","xDiff","yDiff","maxX","maxY","newStartX","newStartY","newEndX","newEndY","moveDragPoint","dragPoint","position","getCoords","coords","getNormalizedCoords","startX","startY","endX","endY","height","width","encodePath","decodePath","collides","getCollidingDragPoint","point","trigHelpers","checkRectCollision","beforeSave","getChangedModels","publish","toJSON","put","Pen","path","floor","push","stopDrawing","smooth","prevX","prevY","index","thisX","thisY","isAdd","pts","decodedPts","deltaX","deltaY","i","dComb","distance","lineLen","draw","beginPath","pointX","pointY","moveTo","lineTo","result","ptCount","sStartX","ptWidth","sStartY","eStartX","eStartY","clearRect","canvasHelpers","drawRoundRect","Highlighter","ts","max","rgb","colorHelpers","getRGBFromHex","R","toString","G","B","Line","Arrow","headLength","dx","dy","angle","atan2","cos","PI","sin","Rectangle","rect","drawLink","margin","tlStartX","tlStartY","brStartX","brStartY","trStartX","trStartY","blStartX","blStartY","Ellipse","radiusX","radiusY","centerX","centerY","a","pi2","closePath","Cloud","lastX","lastY","bumpWidth","bumpWidthHalf","bumpHeight","thisBumpWidth","thisBumpHeight","bezierCurveTo","Text","beforeConstruct","text","textSize","getTextSize","font","words","split","line","n","testLine","measureText","fillText","isDrawing","Pin","prototype","call","newX","newY","isHf","getIconSize","getIcon","is","PinRFI","PinPunchListItem","res","getStatusColor","_this$punchListItem","setPunchListItem","item","title","itemNumber","status","isDirty","PinActionItem","_this$actionItem","setActionItem","PinSubmittal","Photo","LinkRectangle","_this","document","fonts","load","then","LinkEllipse","_this2","LinkCloud","Ruler","len","sqrt","gap","min","d1","d2","middle1","middle2","rulerLength","getRulerLength","drawing","rulerText","inches","d","AreaRectangle","RulerFreeForm","AreaFreeForm","AnnotationAttachment","File","Layers","BaseCollection","Layer","fetchAnnotations","drawingId","fetchedDrawingIds","annotations","annotation","layer","layerId","add","Annotations","attrs","mod","toUpperCase","merge","mergeAnnotations","contextId","_this3","fnMerge","exist","findWhere","annotationId","remove","cid","refinedType","params","context","parameter","saveAll","_this4","annotationsMap","saveAnnotations","map","changedCt","saveNextAnnotation","thisSet","response","EditAnnotation","BaseView","defaults","template","subTemplates","textSizePicker","focusText","isEditLink","onShapeChange","onPublish","onDelete","onClose","onAnnotationDataChange","onAttachmentChange","onDrawingSelected","events","click .text-size-picker>button","click .version-drawing-outer","click .btn-edit-link","click .btn-save-link","click .btn-cancel-link","click .view-punch-list-item","click .view-action-item","click .btn-publish-annotation","click .btn-delete-annotation","click .btn-close-annotation","beforeFirstRender","renderData","afterRender","inputs","Selectpicker","defaultValue","onChange","render","choices","sortBy","getUniqueDrawings","refIdPicker","isIntChoices","isLiveSearch","fileUploader","FileUploaderGrid","previewImageDimension","canUpload","canDelete","onSuccess","renderTextSizePicker","focus","renderPunchListDetails","renderActionItemDetails","Binder","watchElements","afterChange","attribute","editLink","e","stopPropagation","saveLink","getValue","cancelEditLink","drawingClicked","getDrawing","_this5","canAdd","permissions","hasPermission","fnMapItems","items","punchListItems","$selectItem","punchListItemSelect","pickerWidth","setValue","newPunchListItem","fnUpdateChoices","updateChoices","setTimeout","toggle","loader","Loader","fetchPunchListItems","newItem","viewPunchListItem","viewPunchListItemClicked","currentTarget","_this6","PunchlistItemEditorModal","onSave","_this7","actionItemSelect","newActionItem","fetchActionItems","viewActionItem","viewActionItemClicked","_this8","ActionItemEditorModal","renderSubTemplate","textSizeClicked","delete","close","DrawingBatchModal","BaseModal","step","batchHeader","drawingTags","drawingDetailHeader","sortDrawings","isShowCloseButton","click .btn-next-step","click .btn-prev-step","change .checkbox-new-version","change .checkbox-existing-version","click .existing-version","keyup .input-version-name","click .select-batch-drawing","click .btn-drawing-rotate-90","click .btn-drawing-rotate-180","click .btn-drawing-rotate-270","click .btn-drawing-delete","click .btn-save","click .btn-publish","click .btn-cancel","click .btn-close","blur .input-drawing-name,.input-drawing-title,.input-drawing-tag","focus .input-drawing-name,.input-drawing-title,.input-drawing-tag","keydown .input-drawing-name","keyup .input-drawing-name","keydown .input-drawing-title","keyup .input-drawing-title","keydown .input-drawing-tag","keyup .input-drawing-tag","click .btn-add-drawing-tag","click .btn-delete-tag","click .btn-upload-log","change .checkbox-add-current-set","change .checkbox-add-all-current-set","change .checkbox-replace-current-set","change .cb-replace-existing-drawing","click .btn-highlight-area","highlightArea","DrawingAreaHighlight","batch","nameArea","layers","titleArea","patch","beforeModalCreated","DrawingBatch","fetch","setCurrentSetDefaults","currentSetDefault","DRAWINGS_CURRENT_SET_DEFAULT_OFF","beforeRender","fitHeight","publishedIds","getWidth","maxWidth","initVersionSelect","initFileUpload","initBatchWait","initBatchPublish","initBatchSort","Datepicker","isShowTimezone","datepickerOptions","format","dateHelpers","dateFormats","datePicker","DATE","newDate","validateNewVersion","useNewVersion","uploads","allowedExtensions","style","dataChanged","onFileStatusChange","onDrop","afterDelete","hasUploads","queued","uploading","upload","$queued","addClass","$uploaded","$success","empty","append","prop","isUploading","checkBatchStatus","refreshTags","drawingVersionCounts","fullSet","filter","matchedDrawing","renderBatchDrawing","renderBatchDrawingAutoCompletes","renderReplaceCurrentSet","lazyLoad","update","_this9","AutocompleteInput","onSelect","sel","drawingNameChanged","source","req","term","names","toLowerCase","DRAWING_HIDE_TAG","tags","tag","getBatchDrawingElement","fullSetDrawing","drawingName","$header","inCurrentSet","curSet","getVersionStatsForDrawing","same","versionCount","renderDrawingTags","renderBatchHeader","newCount","revisedCount","count","older","newer","replaceCurrentSet","totalCount","_this10","sortDrawingsView","SortDrawings","css","fetchStatus","statusTimeout","viewUploadLog","DrawingUploadLogModal","$name","versionNameExists","isNameValid","$issuedOn","isIssuedValid","newerVersionCount","Date","inputHelpers","setInputError","errors","previousStep","nextStep","hasFiles","isNew","save","guid","uuid","invalidDrawings","isValid","existingDrawing","$drawing","setBatchError","error","$err","versionNameChanged","val","valLen","keyCode","removeClass","Version","useExistingVersion","existingVersionSelected","$target","viewBatchDrawing","_this11","closest","DrawingViewer","showSortableViewLink","isEdit","changed","rotateBatchDrawing90Clicked","rotateDrawing","rotateBatchDrawing180Clicked","rotateBatchDrawing270Clicked","degrees","rotateLoader","rotate","attr","thumbUrl","cropUrl","deleteBatchDrawing","$row","drawingBlur","drawingFocus","select","drawingCenter","scrollTop","top","drawingNameKeydown","which","shiftKey","$next","nextDrawing","firstDrawing","prevDrawing","target","drawingTitleKeydown","drawingTitleChanged","drawingTagKeydown","addDrawingTags","$firstDrawing","first","$prevDrawing","prev","$nextDrawing","next","drawingTagChanged","siblings","addDrawingTagClicked","$tag","deleteTagClicked","tagName","deleteTag","tagTrim","trim","addTags","batchTags","apply","_toConsumableArray","union","uniq","getDrawingTags","addAllToCurrentSetChanged","addAllToCurrent","shouldAdd","replaceCurrentSetChanged","replaceCurrent","addToCurrentSetChanged","addCurrent","replaceExistingDrawingChanged","replaceExisting","cancel","modals","SaveDontSave","header","body","onDontSave","removeModal","closeModal","clearTimeout","autoNotify","_verAppend","verAppend","verName","DrawingBatchNotification","batchId","subject","allProjectContacts","notify","_this12","hasNonCurSetPublish","fnPublish","billRawFileUploadId","billDeerfieldTicketId","notes","urlOptions","isShowCancelButton","fnPrePublish","IS_DOCUMENT_CLERK","ENABLE_RAW_FILE_UPLOAD_BILLING","RawFileUploadBilling","onContinue","rawFileUploadId","deerfieldTicketId","onSkip","okButtonText","isShowSecondaryButton","secondaryButtonText","onOk","noop","click .billing-skip","click .billing-continue","inputmask","alias","prefix","digits","placeholder","clearMaskOnLostFocus","rightAlign","billingReferenceSelectPicker","isMultiple","mustSelectValue","skipBilling","continueBilling","rawFileUpload","rawFileUploads","RawFileUpload","notifications","errorNotify","mode","versionGrid","versionList","versionStats","versionSelect","emptyState","isReadOnly","click .btn-share-drawings","click .btn-download-all-split","click .btn-download-all-merged","click .btn-download-version-split","click .btn-download-version-merged","click .btn-download-filtered-split","click .btn-download-filtered-merged","click .btn-download-advanced","click .btn-export-drawing-list","click .btn-order-version","click .btn-order-filtered","click .btn-order-advanced","click .btn-bulk-tag","click .btn-sort-version","click .btn-save-version","click .btn-edit-version","click .btn-cancel-edit-version","click .btn-new-batch","click .version-select","click .btn-manage-versions","keyup .input-drawings-search","click .btn-view-grid","click .btn-view-list","click .btn-delete-drawing","contextVersion","IS_DOCUMENT_CLERK_COMPANY","canShare","DISABLE_SHARE_PEI","ENABLE_ADMIN_PAID_DOWNLOADS","canDownload","isPaidDownload","canOrder","DISABLE_ORDER_PRINT","hideIssuedOn","HIDE_VERSION_SELECTOR_ISSUED_ON","fetchCallback","listenTo","getUnPublishedBatchesCount","batchCount","unPublishedBatchCount","fetchVersions","_this$options$initOpt","initOptions","mVersionId","console","log","drawingCount","getDrawingCount","search","tagSelectPicker","filterTags","noneSelectedText","renderContextVersion","renderEmptyState","refresh","deleteDrawing","self","DeleteVersionModal","onDeleteInAll","destroy","verDrawing","compDrawing","parent","onDeleteInThis","updateTagChoices","sort","sortHelpers","sortAlphaNum","renderViewGrid","renderViewList","saveVersion","valid","thisValid","compareDrawing","duplicateNameAlert","isFileAPI","contextDrawing","otherDrawing","silent","Alert","isBefore","extraClasses","bulkTag","BulkTagModal","sortVersion","SortDrawingsModal","sortFullSet","onDone","editVersion","cancelEditVersion","restore","getFilteredDrawings","isSearch","isFilterTags","filterTag","drawingTag","versionTmpl","renderVersionSelector","getDateString","newBatch","initViewer","checkDownloadRequirements","versionSelected","$versionSelect","ver","currentSet","manageVersions","ManageVersionsModal","shareDrawings","DrawingShareModal","Drawings","versionIds","allDrawings","DRAWING_SHARE_PREVENT_EXPIRATION","guids","Drawing","sharingModal","sharing","SharingModal","share","successNotify","urlChanged","url","downloadDrawings","download","createDownload","downloadContextVersionSplit","entryIds","CAN_ORDER_ON_ACCOUNT","OrderDownloadAdmin","OrderPrintsModal","modes","DOWNLOAD","downloadContextVersionMerged","downloadFilteredSplit","downloadFilteredMerged","downloadAdvanced","AdvancedDownloadModal","exportDrawingList","downloadFile","orderContextVersion","PRINT","orderFiltered","orderAdvanced","isPrintOrder","defaultEvents","selectedVersions","DrawingSelectorTree","flatten","click .version-expand","change .cb-version","change .cb-drawing","selectedDrawings","expandVersion","toggleClass","$outer","isSelected","versionCid","selectedVersion","ids","deleteVersion","drawingSelected","drawingCid","contains","without","$cbVersion","isShowOkButton","okButtonColorClass","secondaryButtonColorClass","onSecondary","cancelButtonText","onCancel","change .cb-specify-version","click .btn-add-tag","keyup .input-tag","renderDrawingSelector","renderExistingTags","drawingSelector","validateTag","tagChanged","addTag","getSelectedDrawingIds","getInputTags","tagString","drawingIds","allVersions","isDelete","mVer","mDr","post","clearTagInput","alterTags","photos","PhotoViewer","elementId","drawingDetails","annotationMenu","isAnnotationsEnabled","onAnnotationChange","canAddAnnotations","shouldCreateCanvas","noNavigation","zoomValue","snapView","maxZoom","refreshOnResize","zoomOnMouseWheel","triggerRoute","isDisableDownload","onSortChange","keyListeners","keys","window","viewDrawingDetails","click .iv-canvas,.iv-active-canvas","click .btn-prev-drawing","click .btn-next-drawing","click .btn-drawing-details","click .btn-add-to-current","click .btn-remove-from-current","click .btn-delete-pub-drawing","mouseup .iv-image-view","mousemove .iv-active-canvas","mouseleave .iv-active-canvas","_this13","showNavigationControls","canEditDrawing","renderDrawingSort","setDrawing","$sort","showViewLink","$drawingDetails","$btnDetails","hasClass","animateCSS","addToCurrentSet","YesNo","onYes","existing","renderDrawingDetails","removeFromCurrentSet","deletePublishedDrawing","attached","newCurSetDrawing","replacement","newDrawing","currentImg","canvas","prevItemInfo","imageDim","renderPagingState","hasPrevious","hasNext","setContextVersion","contextAnnotation","calibration","clearAnnotations","getTime","fnFindByName","contextVerDrawing","activeVersion","contextVerIssued","prevVersions","renderDrawing","show","renderUrl","persistZoom","canViewAnnotations","isAnnotationsAdmin","systemPermissions","ann","renderAnnotations","$controls","hide","hideDisabled","selectedDrawing","findVersionsForDrawing","showCurrentSetLabel","canEditTags","canRemoveCurrentSet","$details","on","nameChanged","titleChanged","drawingTagInputChanged","tagNameLen","DeleteCancel","mouse","isClicked","isDragging","isMoving","moveContext","current","isCalibrating","relativeMouse","toCanvasX","clientX","toCanvasY","clientY","toCanvas","setMouseStart","getMouse","canDraw","getType","canEditAnnotations","startDraw","stopDraw","startMove","clone","stopMove","startDrag","stopDrag","startCalibrating","stopCalibrating","startCalibrationStep","drawCalibration","activeCtx","clearCanvas","terminatorHalf","colors","RED","closeCalibration","drawAnnotations","stepContent","fnAfterRender","calibrationTypeBtn","ButtonGroup","colorInactiveButtons","buttons","colorClass","label","buttonClasses","$metric","$imperial","calibrationType","$feet","$inches","feet","isNaN","updateScale","nextType","afterCalibrateType","setType","imageView","onMouseDown","_this$annotationMenu","_this14","collidingDragPoint","fnFindColliding","colliding","_this14$contextAnnota","editAnnotation","annotationType","setContextAnnotation","cancelEditAnnotation","canvasMouseMove","newAnnotation","color","getColor","drawContextAnnotation","pixelsX","pixelsY","saveAnnotation","queueSave","queuePatch","canvasMouseUp","fnSave","hasChanged","enableConsecutive","canvasMouseLeave","afterDimensionChange","afterLoad","loaded","renderAnnotationMenu","reset","ctx","_this15","_this16","removeEditView","$iv","$editOuter","editAnnotationView","publishAnnotation","deleteAnnotation","redraw","enablePicker","enableColorPicker","setColor","$canvas","canvasClicked","collapseSubMenus","AnnotationMenu","onColorChange","onTypeChange","$activeCanvas","BLUE","click .sub-menu-item","click .consecutive-item","click .color-picker-item","click .menu-item","click .iv-content","cookieHelpers","getCookie","cookies","ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS","canViewPunchList","canViewActionItems","enableRefs","renderColorPicker","colorPicker","SimpleColorPicker","onColorPicked","colorClicked","colorPickerMenuItemClicked","colorPickerEnabled","hideColorPicker","typeClicked","selectedType","subMenuItemClicked","isActive","consecutiveItemClicked","setCookie","enabled","$colorPicker","isHighlighting","click .btn-select-name","click .btn-select-title","mousedown .iv-image-view","mousemove .iv-image-view","canvasX","canvasY","startMouse","offset","left","canvasMouseDown","mousedown","curMouse","contextLayer","wd","ht","renderSelectionActions","nameLayer","drawRectangle","titleLayer","selectName","selectTitle","canDrag","raster","includeAttachments","includeMyAnnotations","includePublishedAnnotations","annotationMode","versionsObj","arr","queueDownload","trigger","urlOpts","revert","file","join","createdBy","users","User","withAnnotations","downloadUrl","isApi2","includeAccessKey","cropNameUrl","cropTitleUrl","curRotation","newRotation","rotation","newTags","difference","fnAdd","_this$get","fnDelete","scaleType","total","ownVersion","ownIssued","ownCreated","thisIssued","thisCreated","includeOwnVersion","excludeVersion","foundNames","drawingsFolderId","uniqueId","drawingAttachments","tryHideCurrentSet","getPref","HIDE_CURRENT_SET_WHEN_POSSIBLE","isHideCurrentSet","versionsWithDrawings","getDrawingNames","drawingNames","currentSetDrawingNames","isEqual","versionFolderId","ProjectAttachment","entryId","folderId","sortOrder","isFolder","modifiedOn","DrawingBatches","byName","fileGuids","emails","drawingGuids","DrawingDownload","endpointArr","DrawingsShare","onOrderPlaced","fnContinue","createOrder","price","xhr","err","contact","formatHelpers","formatCurrency","Order","description","poNumber","largeFormatBinding","ORDER_LARGE_FORMAT_BINDING_TYPE","largeFormatPaperType","ORDER_LARGE_FORMAT_PAPER_TYPE","largeFormatQuantity","ORDER_LARGE_FORMAT_QUANTITY","smallFormatBinding","ORDER_SMALL_FORMAT_BINDING_TYPE","smallFormatQuantity","ORDER_SMALL_FORMAT_QUANTITY","smallFormatPaperType","ORDER_SMALL_FORMAT_PAPER_TYPE","halfSizeQuantity","cdQuantity","shippingSpeed","ORDER_DELIVER_BY","recipients","contacts","Contact","notifyEmail","billingCompanyName","billingContactName","billingPhone","billingPhoneExtension","billingAddress1","billingAddress2","billingCity","billingState","billingZip","billingCountry","isDownload","placeOrder","location","href","origin","isSelectRecipients","orderCalculatedItems","change .input-select-recipients","click .ordering-folder","click .select-file","click .order-jump-step","click .view-file","click .delete-recipient","click .edit-recipient","click .select-all-files","ALT_PRINT","selectRecipientsChanged","Contacts","ContactsSelectInput","contexts","PARTICIPANTS","CONTACTS","selectedContact","showSelectorAddress","isSingleChoice","selectedContacts","statePicker","countryChanged","inputMaskPhone","calculateCost","goToStep","renderFolderPicker","renderAddressBook","deleteRecipient","contactId","editRecipient","BaseEditContactModal","selectAllFiles","isChecked","fileSelects","selectedFolderFiles","viewFile","filesTable","getRow","isImage","renderPhotoViewer","canRender","FileViewer","selectedFolder","fnRender","folders","isSecondLevel","getFolderAttachments","hideFolders","folder","renderFilesTable","fetchAttachments","isShared","isPrivate","forceRecursive","addressBookView","addressbook","AddressBook","selectionMode","addressBook","ADD_TO_PROJECT","disabledContacts","disabledContactGroups","onSelection","contactsAll","contactsNoGroup","contactGroups","selectedRecipients","dataTables","DataTable","rowId","order","language","zeroRecords","pageLength","onRowDoubleClick","row","columns","columnData","orderable","searchable","renderFileSelect","b","selectFolder","manageSelectAllButtonState","fileSelectChanged","tr","country","states","state","abbreviation","inputMaskZip","isSelectAll","thisStep","thisStepHeader","not","collapse","isOnline","renderCalculatedTotals","orders","templateData","hasError","ORDER_PO_REQUIRED","$po","$company","$contact","$address1","$city","$zip","$state","$country","$email","$phone","orderType","click .btn-revert-batch","click .btn-notify","click .btn-publish-batch","click .btn-delete-batch","dataTable","isHideSearch","getContactAnchor","display","DATE_TIME","content","dom","BatchNotifyModal","revertBatch","publishBatch","deleteBatch","removeRow","click .btn-view-drawing","click .btn-sort-common","click .btn-sort-alpha-num","click .btn-sort-up","click .btn-sort-down","click .btn-sort-top","click .btn-sort-bottom","_this17","mergeCurrentSet","fullset","isCurrentSet","isPublished","where","matches","toReversed","sortDrawing","sDrawing","sortItem","drawingsSorted","drawingSortable","Sortable","containment","multiple","connectWith","onStop","setSortLabels","match","viewDrawing","sortCommon","autoSort","sortAlphaNumeric","sortCommonPageNumbers","sortDrawingUp","insertBefore","sortDrawingDown","insertAfter","sortTop","moveSelectedTop","sortBottom","moveSelectedBottom","click .btn-done","click .btn-download","selDrawingCount","dl","click .btn-upload-to-version","click .btn-delete-version","onTableDraw","contextEditVersion","disabledAttr","uploadToVersion","isIssuedOnValid","emailBadge","GLOBAL","click .btn-back","click .btn-next","click .btn-send","click .btn-add-project-contacts","keyup .input-share-search","focus .input-share-search","click .share-email-delete","mousedown .modal-dialog","_beforeModalCreated","_asyncToGenerator","_regeneratorRuntime","mark","_callee","_verAppend2","wrap","_context","selectedEmailsTo","selectedEmailsCC","stop","_this18","StepIndicator","steps","activeStep","bodyEditor","HTMLEditor","editorHeight","isHideTokens","contents","email","renderEmail","addProjectContacts","_this19","selector","SelectContactsModal","PROJECTCONTACTS","enableSelectAll","newContacts","toValid","subjectValid","focusSearch","_this20","focusType","contactEmailSelector","ContactSearchSelect","selectedEmails","getFocusSearchText","onAdd","checkIsFocused","targetParent","parentElement","searchChanged","renderRecipientCount","emailCount","deleteEmail","emailContainer","emailLineType","emailArray","send","_this21","to","cc","_this22"],"mappings":"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","file":"app.js","sourcesContent":["PJQ.collections.drawings = {};\n\nPJQ.models.drawings = {};\n\nPJQ.views.drawings = {};\n\n//Routes\nPJQ.modules.drawings = {\n routes: [\n {\n route: 'projects/:projectId/drawings',\n name: 'drawings',\n callback: function (projectId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"drawings\");\n }\n },\n {\n route: 'projects/:projectId/drawings/:versionId',\n name: 'drawings',\n callback: function (projectId, versionId) {\n PJQ.modules.projectWall.initProjectNavigator(parseInt(projectId), \"drawings\", {\n versionId: versionId\n });\n }\n },\n {\n route: 'drawings/share/:accessKey',\n name: 'shareDrawings',\n callback: function (accessKey) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'share',\n value: accessKey\n }\n ])\n }).get().success(_.bind(function (data) {\n let versions = new PJQ.collections.drawings.Versions(data.versions),\n attachments = new PJQ.collections.files.Files(data.attachments),\n hasDrawings = _.find(versions.models, function (version) {\n return _.size(version.drawings.models) > 0;\n }) != null, prj;\n\n if (data.projectId > 0) {\n prj = new PJQ.models.projects.Project({\n projectId: data.projectId\n });\n } else {\n prj = null;\n }\n\n if (_.size(attachments.models) === 0 && !hasDrawings) {\n let tmp = new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'share-not-available');\n PJQ.templating.TemplateRenderer.renderTemplate(false, tmp, PJQ.app.$el);\n } else {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'orders'\n },\n {\n endpoint: 'settings'\n }\n ])\n }).get().done(_.bind(function (settings) {\n let $container = $('
', {\n class: 'p-3'\n });\n PJQ.app.$el.html($container);\n if (_.size(attachments.models) > 0 || settings.downloadPerFileFee > 0) {\n versions.createPsuedoFolders(attachments);\n\n _.each(attachments.models, function (attachment) {\n if (attachment.get('isFolder'))\n attachment.isFetched = true;\n });\n\n PJQ.app.view.renderView(PJQ.views.projects.Attachments, {\n el: $container,\n project: prj,\n collection: attachments,\n forShare: true,\n isAdmin: false,\n orderSettings: settings,\n accessKey: accessKey\n });\n } else {\n PJQ.app.view.renderView(PJQ.views.drawings.Dashboard, {\n el: $container,\n project: prj,\n collection: versions,\n forShare: true,\n orderSettings: settings,\n accessKey: accessKey\n });\n }\n }, this));\n }\n\n }, this)).fail(_.bind(function (data) {\n if (data.responseJSON.message == 'BUSY') {\n PJQ.app.$el.html(`\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
Drawing Share Unavailable
\n\t\t\t\t\t\t\t\t\t
Files for this project are currently being processed.
Please try again later.
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t`);\n } else if (data.responseJSON.message == 'OFFLINE') {\n PJQ.app.$el.html(`\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
Drawing Share Unavailable
\n\t\t\t\t\t\t\t\t\t
This project is currently unavailable for download.
Please try again later, or check with the sender if the issue persists.
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t`);\n } else {\n PJQ.app.$el.html(`\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
Drawing Share Expired
\n\t\t\t\t\t\t\t\t\t
This drawing share has expired and can no longer be viewed
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t
\n\t\t\t\t\t\t`);\n }\n }, this));\n }\n }\n ]\n};\n\nPJQ.constants.drawings = {\n dashboardModes: {\n VIEW: 'VIEW',\n EDIT: 'EDIT',\n SELECT: 'SELECT'\n },\n downloadStatus: {\n FAILED: -1,\n NEW: 0,\n QUEUED: 1,\n IN_PROGRESS: 2,\n COMPLETE: 3\n },\n downloadFrameId: 'pjqDownload',\n imageExtensions: ['jpg', 'jpeg', 'png', 'bmp', 'gif'],\n annotationTypes: {\n INSPECT: 'INSPECT',\n PEN: 'PEN',\n HIGHLIGHTER: 'HIGHLIGHTER',\n LINE: 'LINE',\n ARROW: 'ARROW',\n RECTANGLE: 'RECT',\n ELLIPSE: 'ELLIPSE',\n CLOUD: 'CLOUD',\n LINK_RECTANGLE: 'LINK_RECT',\n LINK_ELLIPSE: 'LINK_ELLIPSE',\n LINK_CLOUD: 'LINK_CLOUD',\n TEXT: 'TEXT',\n PHOTO: 'PHOTO',\n RULER: 'RULER',\n AREA_RECT: 'AREA_RECT',\n RULER_FREE_FORM: 'RULER_FREE_FROM',\n AREA_FREE_FORM: 'AREA_FREE_FORM',\n CALIBRATION: 'CALIBRATION',\n PIN_PUNCH_LIST_ITEM: 'PIN_PUNCH_LIST_ITEM',\n PIN_ACTION_ITEM: 'PIN_ACTION_ITEM',\n PIN_RFI: 'PIN_RFI',\n PIN_SUBMITTAL: 'PIN_SUBMITTAL'\n },\n annotationTypeNames: {\n INSPECT: 'Inspect/Select',\n LINE: 'Line',\n PEN: 'Pen',\n HIGHLIGHTER: 'Highlighter',\n ARROW: 'Arrow',\n RECTANGLE: 'Rectangle',\n ELLIPSE: 'Ellipse',\n CLOUD: 'Cloud',\n LINK_RECTANGLE: 'Rectangle Link',\n LINK_ELLIPSE: 'Ellipse Link',\n LINK_CLOUD: 'Cloud Link',\n TEXT: 'Text Box',\n PHOTO: 'Photo',\n RULER: 'Ruler',\n AREA_RECT: 'Area Rectangle',\n RULER_FREE_FORM: 'Free Form Ruler',\n AREA_FREE_FORM: 'Free Form Area',\n CALIBRATION: 'Calibration',\n PIN_PUNCH_LIST_ITEM: 'Punch List Item',\n PIN_ACTION_ITEM: 'Action Item',\n PIN_RFI: 'RFI',\n PIN_SUBMITTAL: 'Submittal'\n },\n refTypes: {\n DRAWING: 'DRAWING',\n PUNCH_LIST_ITEM: 'PUNCH',\n ACTION_ITEM: 'ACTION',\n RFI: 'RFI',\n SUBMITTAL: 'SUBMITTAL'\n },\n dragPoints: {\n START: 'START',\n END: 'END',\n TOP_LEFT: 'TL',\n TOP_RIGHT: 'TR',\n BOTTOM_LEFT: 'BL',\n BOTTOM_RIGHT: 'BR'\n },\n scaleTypes: {\n IMPERIAL: 'IMPERIAL',\n METRIC: 'METRIC'\n }\n};\n\nPJQ.app.addRoutes(PJQ.modules.drawings.routes);","PJQ.models.drawings.Annotation = PJQ.models.BaseModel.extend({\n idAttribute: 'annotationId',\n notifyName: 'Annotation',\n minWidth: 0,\n minHeight: 0,\n afterInit: function () {\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'session', 'preferences')) {\n this.options.isAPIv2 = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS);\n }\n },\n endpoint: function (options) {\n if (!options) {\n options = {};\n }\n\n options.isAPIv2 = this.options.isAPIv2 = [PJQ.constants.drawings.annotationTypes.PIN_RFI,\n PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM,\n PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM,\n PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL].indexOf(this.get('type')) !== -1;\n\n if (this.id > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'annotations',\n value: this.id\n }\n ]);\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.get('drawingId')\n },\n {\n endpoint: 'annotations'\n }\n ]);\n },\n canEdit: function () {\n return (PJQ.app.session.user != null && this.get('userId') === -PJQ.app.session.user.id) || this.get('canEdit');\n },\n canEditColor: function (type) {\n if (type == null) {\n type = this.get('type');\n }\n return type !== PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM && type !== PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM\n && type !== PJQ.constants.drawings.annotationTypes.PIN_RFI && type !== PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL;\n },\n parse: function (model) {\n if (!model) {\n return model;\n }\n\n if (_.size(model.attachments) > 0) {\n this.attachments = new PJQ.collections.drawings.AnnotationAttachments(model.attachments);\n } else if (this.attachments == null) {\n this.attachments = new PJQ.collections.drawings.AnnotationAttachments();\n }\n\n if (model.refData && model.refId > 0) {\n switch (model.refType) {\n case PJQ.constants.drawings.refTypes.PUNCH_LIST_ITEM:\n model.refData.punchlistItemId = model.refId;\n this.punchListItem = new PJQ.models.punchlists.PunchlistItem(model.refData);\n break;\n case PJQ.constants.drawings.refTypes.ACTION_ITEM:\n model.refData.actionItemId = model.refId;\n this.actionItem = new PJQ.models.actionItems.ActionItem(model.refData);\n break;\n }\n }\n\n return model;\n },\n getDisplayName: function () {\n return '';\n },\n getDeepLink: function () {\n return null;\n },\n drawDragPoints: function (ct, scale) {\n this.dragPoints = [];\n },\n getStrokeColor: function () {\n return this.get('color');\n },\n stroke: function (ct, scale) {\n let strokeColor = this.getStrokeColor();\n if (strokeColor) {\n ct.lineWidth = 6 / scale;\n ct.setLineDash([0]);\n ct.strokeStyle = strokeColor;\n ct.stroke();\n }\n },\n getFillColor: function () {\n return this.get('color') + '75';\n },\n fill: function (ct) {\n let fillColor = this.getFillColor();\n if (fillColor) {\n ct.fillStyle = fillColor;\n ct.fill();\n }\n },\n start: function (x, y) {\n this.set({\n start: {\n x: Math.round(x),\n y: Math.round(y)\n }\n });\n\n if (this.attributes.end == null) {\n this.end(x, y);\n }\n },\n end: function (x, y, normalize = false) {\n this.set({\n end: {\n x: Math.round(x),\n y: Math.round(y)\n }\n });\n\n if (normalize) {\n this.normalizeCoords();\n }\n\n if (this.minHeight > this.attributes.end.y - this.attributes.start.y) {\n this.attributes.end.y = this.attributes.start.y + this.minHeight;\n }\n\n if (this.minWidth > this.attributes.end.x - this.attributes.start.x) {\n this.attributes.end.x = this.attributes.start.x + this.minWidth;\n }\n },\n move: function (xDiff, yDiff, maxX, maxY) {\n let start = this.attributes.start,\n end = this.attributes.end,\n newStartX = start.x + xDiff,\n newStartY = start.y + yDiff,\n newEndX = end.x + xDiff,\n newEndY = end.y + yDiff;\n\n if (newStartX < 0) {\n newEndX -= newStartX;\n newStartX = 0;\n } else if (newEndX >= maxX) {\n newStartX -= newEndX - maxX;\n newEndX = maxX;\n }\n\n if (newStartY < 0) {\n newEndY -= newStartY;\n newStartY = 0;\n } else if (newEndY >= maxY) {\n newStartY -= newEndY - maxY;\n newEndY = maxY;\n }\n\n this.start(newStartX, newStartY);\n this.end(newEndX, newEndY);\n },\n moveDragPoint: function (dragPoint, x, y) {\n let start = this.attributes.start,\n end = this.attributes.end;\n switch (dragPoint.position) {\n case PJQ.constants.drawings.dragPoints.TOP_LEFT:\n case PJQ.constants.drawings.dragPoints.START:\n this.start(x, y);\n break;\n case PJQ.constants.drawings.dragPoints.BOTTOM_RIGHT:\n case PJQ.constants.drawings.dragPoints.END:\n this.end(x, y);\n break;\n case PJQ.constants.drawings.dragPoints.TOP_RIGHT:\n this.start(start.x, y);\n this.end(x, end.y);\n break;\n case PJQ.constants.drawings.dragPoints.BOTTOM_LEFT:\n this.start(x, start.y);\n this.end(end.x, y);\n break;\n }\n },\n getCoords(scale = 1) {\n let coords = this.getNormalizedCoords();\n if (coords == null) {\n return null;\n }\n\n let startX = coords.start.x / scale,\n startY = coords.start.y / scale,\n endX = coords.end.x / scale,\n endY = coords.end.y / scale;\n return {\n start: {\n x: startX,\n y: startY\n },\n end: {\n x: endX,\n y: endY\n },\n height: endY - startY,\n width: endX - startX\n };\n },\n encodePath: function () {\n return null;\n },\n decodePath: function () {\n return null;\n },\n normalizeCoords: function () {\n this.set(this.getNormalizedCoords());\n },\n getNormalizedCoords: function () {\n let start = this.get('start'),\n end = this.get('end');\n if (start == null || end == null) {\n return null;\n }\n return {\n start: start,\n end: end\n };\n },\n collides: function (x, y) {\n return false;\n },\n getCollidingDragPoint: function (x, y) {\n if (this.dragPoints == null) {\n return null;\n }\n\n return _.find(this.dragPoints, function (point) {\n return PJQ.helpers.trigHelpers.checkRectCollision(point.start, point.end, x, y);\n });\n },\n beforeSave: function () {\n if (this.attachments) {\n this.set('attachments', this.attachments.getChangedModels());\n }\n },\n publish: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'annotations',\n value: this.id\n },\n {\n endpoint: 'publish'\n }\n ]),\n data: this.toJSON()\n }).put().done(_.bind(function () {\n if (typeof callback === 'function') {\n callback();\n }\n }, this)).fail(_.bind(function () {\n this.set('isPublished', !this.get('isPublished'));\n if (typeof callback === 'function') {\n callback();\n }\n }, this));\n }\n});\n\nPJQ.models.drawings.Pen = PJQ.models.drawings.Annotation.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.PEN;\n },\n start: function (x, y) {\n // start in the case of pen creates a points array and adds the coordinate as the start point\n if (_.size(this.attributes.path) > 0) {\n this.attributes.path[0][0] = x;\n this.attributes.path[0][1] = y;\n } else if (_.size(this.path) === 0) {\n this.path = [[Math.floor(x), Math.floor(y)]];\n }\n },\n end: function (x, y) {\n if (this.path != null) {\n this.path.push([Math.floor(x), Math.floor(y)]);\n } else {\n this.start(x, y);\n }\n },\n normalizeCoords: function (stopDrawing) {\n if (stopDrawing && _.size(this.path) > 0) {\n let smooth = [],\n threshold = 25,\n prevX = null,\n prevY = null;\n _.each(this.path, function (point, index) {\n // remove points which are less than 25 units away (x and y) from the previous point\n let thisX = point[0],\n thisY = point[1],\n isAdd = false;\n if (prevX != null && prevY != null) {\n let xDiff = thisX - prevX,\n yDiff = thisY - prevY;\n if ((xDiff > threshold || xDiff < -threshold) || (yDiff > threshold || yDiff < -threshold))\n isAdd = true;\n } else {\n isAdd = true;\n }\n\n if (isAdd) {\n prevX = thisX;\n prevY = thisY;\n smooth.push(point);\n }\n\n // take every 10th point to cut down the amount of data stored for the path\n // this method results in about a 5% reduction from the above method\n // the downside to this method is thicker lines look blocky\n // if (index % 10 === 0) {\n // \tsmooth.push(point);\n // }\n });\n this.encodePath(smooth);\n }\n },\n moveDragPoint: function (dragPoint, x, y) {\n let pts = this.get('path');\n if (_.size(pts) > 0) {\n switch (dragPoint.position) {\n case PJQ.constants.drawings.dragPoints.START:\n pts[0][0] = Math.floor(x);\n pts[0][1] = Math.floor(y);\n break;\n case PJQ.constants.drawings.dragPoints.END:\n let decodedPts = this.decodePath();\n pts[0][0] = Math.floor(pts[0][0] + x - decodedPts[decodedPts.length - 1][0]);\n pts[0][1] = Math.floor(pts[0][1] + y - decodedPts[decodedPts.length - 1][1]);\n break;\n }\n this.set('path', pts);\n }\n },\n encodePath: function (pts) {\n // delta encode each point x/y coordinate corresponding to the previous\n let path = [],\n prevX = null,\n prevY = null;\n if (_.size(pts) > 0) {\n _.each(pts, function (point, index) {\n let thisX = pts[index][0],\n thisY = pts[index][1],\n deltaX,\n deltaY;\n if (prevX != null && prevY != null) {\n deltaX = thisX - prevX;\n deltaY = thisY - prevY;\n } else {\n deltaX = thisX;\n deltaY = thisY;\n }\n prevX = thisX;\n prevY = thisY;\n path.push([deltaX, deltaY]);\n }, this);\n }\n this.set('path', path);\n return path;\n },\n decodePath: function () {\n // delta encode each point x/y coordinate corresponding to the previous\n let pts = this.get('path'),\n path = [],\n prevX = null,\n prevY = null;\n if (_.size(pts) > 0) {\n _.each(pts, function (point, index) {\n let thisX = pts[index][0],\n thisY = pts[index][1],\n deltaX,\n deltaY;\n if (prevX != null && prevY != null) {\n deltaX = prevX + thisX;\n deltaY = prevY + thisY;\n } else {\n deltaX = thisX;\n deltaY = thisY;\n }\n prevX = deltaX;\n prevY = deltaY;\n path.push([deltaX, deltaY]);\n }, this);\n }\n return path;\n },\n collides: function (x, y) {\n if (_.size(this.get('path')) > 0) {\n let path = this.decodePath(),\n buffer = 20,\n start = {\n x: 0,\n y: 0\n };\n for (let i = 0; i < _.size(path); i++) {\n let end = {\n x: path[i][0],\n y: path[i][1]\n };\n if (i > 0) {\n let dStart = PJQ.helpers.trigHelpers.distance(start.x, start.y, x, y),\n dEnd = PJQ.helpers.trigHelpers.distance(end.x, end.y, x, y),\n dComb = dStart + dEnd,\n lineLen = PJQ.helpers.trigHelpers.distance(start.x, start.y, end.x, end.y);\n if (dComb >= lineLen - buffer && dComb <= lineLen + buffer) {\n return true;\n }\n }\n start = end;\n }\n }\n return false;\n },\n draw: function (ct, scale) {\n let path;\n if (_.size(this.get('path')) > 0) {\n path = this.decodePath();\n } else if (_.size(this.path) > 0) {\n path = this.path;\n } else {\n path = null;\n }\n if (path != null) {\n ct.beginPath();\n let startX = null,\n startY = null;\n _.each(path, function (point) {\n let pointX = point[0] / scale,\n pointY = point[1] / scale;\n if (startX == null && startY == null) {\n startX = pointX;\n startY = pointY;\n ct.moveTo(startX, startY);\n } else {\n ct.lineTo(pointX, pointY);\n }\n });\n this.stroke(ct, scale);\n }\n },\n getCoords: function (scale) {\n let result = {\n start: {\n x: 0,\n y: 0\n },\n end: {\n x: 0,\n y: 0\n }\n };\n let path = this.decodePath(),\n ptCount = _.size(path);\n if (ptCount > 0) {\n result.start.x = path[0][0] / scale;\n result.start.y = path[0][1] / scale;\n if (ptCount > 1) {\n result.end.x = path[ptCount - 1][0] / scale;\n result.end.y = path[ptCount - 1][1] / scale;\n }\n }\n return result;\n },\n drawDragPoints: function (ct, scale) {\n let ptWidth = 15,\n coords = this.getCoords(scale),\n hfPtWidth = ptWidth / 2,\n sStartX = coords.start.x - hfPtWidth,\n sStartY = coords.start.y - hfPtWidth,\n eStartX = coords.end.x - hfPtWidth,\n eStartY = coords.end.y - hfPtWidth\n\n this.dragPoints = [\n {\n position: PJQ.constants.drawings.dragPoints.START,\n start: {\n x: sStartX,\n y: sStartY\n },\n end: {\n x: sStartX + ptWidth,\n y: sStartY + ptWidth\n }\n },\n {\n position: PJQ.constants.drawings.dragPoints.END,\n start: {\n x: eStartX,\n y: eStartY\n },\n end: {\n x: eStartX + ptWidth,\n y: eStartY + ptWidth\n }\n }\n ];\n\n ct.beginPath();\n ct.lineWidth = 3;\n ct.strokeStyle = '#343a40';\n ct.setLineDash([]);\n _.each(this.dragPoints, function (point) {\n ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n });\n }\n});\n\nPJQ.models.drawings.Highlighter = PJQ.models.drawings.Pen.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.HIGHLIGHTER;\n },\n stroke: function (ct, scale) {\n let strokeColor = this.getStrokeColor();\n if (strokeColor) {\n let ts = this.get('textSize');\n ct.lineWidth = Math.max(20, ts ? ts : 0) / scale;\n ct.setLineDash([0]);\n let rgb = PJQ.helpers.colorHelpers.getRGBFromHex(strokeColor);\n ct.strokeStyle = 'rgba(' + rgb.R.toString() + ',' + rgb.G.toString() + ',' + rgb.B.toString() + ', 0.5)';\n ct.stroke();\n }\n },\n});\n\nPJQ.models.drawings.Line = PJQ.models.drawings.Annotation.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.LINE;\n },\n end: function (x, y, normalize = false) {\n this.set({\n end: {\n x: Math.round(x),\n y: Math.round(y)\n }\n });\n\n if (normalize) {\n this.normalizeCoords();\n }\n },\n collides: function (x, y) {\n let start = this.get('start'),\n end = this.get('end');\n\n if (start == null || end == null) {\n return false;\n }\n\n let dStart = PJQ.helpers.trigHelpers.distance(start.x, start.y, x, y),\n dEnd = PJQ.helpers.trigHelpers.distance(end.x, end.y, x, y),\n dComb = dStart + dEnd,\n lineLen = PJQ.helpers.trigHelpers.distance(start.x, start.y, end.x, end.y),\n buffer = 20;\n if (dComb >= lineLen - buffer && dComb <= lineLen + buffer) {\n return true;\n }\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n ct.beginPath();\n ct.moveTo(coords.start.x, coords.start.y);\n ct.lineTo(coords.end.x, coords.end.y);\n\n this.stroke(ct, scale);\n },\n drawDragPoints: function (ct, scale) {\n let ptWidth = 15,\n coords = this.getCoords(scale),\n hfPtWidth = ptWidth / 2,\n sStartX = coords.start.x - hfPtWidth,\n sStartY = coords.start.y - hfPtWidth,\n eStartX = coords.end.x - hfPtWidth,\n eStartY = coords.end.y - hfPtWidth\n\n this.dragPoints = [\n {\n position: PJQ.constants.drawings.dragPoints.START,\n start: {\n x: sStartX,\n y: sStartY\n },\n end: {\n x: sStartX + ptWidth,\n y: sStartY + ptWidth\n }\n },\n {\n position: PJQ.constants.drawings.dragPoints.END,\n start: {\n x: eStartX,\n y: eStartY\n },\n end: {\n x: eStartX + ptWidth,\n y: eStartY + ptWidth\n }\n }\n ];\n\n ct.beginPath();\n ct.lineWidth = 3;\n ct.strokeStyle = '#343a40';\n ct.setLineDash([]);\n _.each(this.dragPoints, function (point) {\n ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n });\n }\n});\n\nPJQ.models.drawings.Arrow = PJQ.models.drawings.Line.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.ARROW;\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n let headLength = 100 / scale,\n dx = coords.end.x - coords.start.x,\n dy = coords.end.y - coords.start.y,\n angle = Math.atan2(dy, dx);\n\n ct.beginPath();\n ct.moveTo(coords.start.x, coords.start.y);\n ct.lineTo(coords.end.x, coords.end.y);\n\n ct.lineTo(coords.end.x - headLength * Math.cos(angle - Math.PI / 6), coords.end.y - headLength * Math.sin(angle - Math.PI / 6));\n\n ct.moveTo(coords.end.x, coords.end.y);\n ct.lineTo(coords.end.x - headLength * Math.cos(angle + Math.PI / 6), coords.end.y - headLength * Math.sin(angle + Math.PI / 6));\n\n this.stroke(ct, scale);\n }\n});\n\nPJQ.models.drawings.Rectangle = PJQ.models.drawings.Annotation.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.RECTANGLE;\n },\n minWidth: 100,\n minHeight: 100,\n getNormalizedCoords: function () {\n let start = this.get('start'),\n end = this.get('end');\n if (start == null || end == null) {\n return null;\n }\n\n let result = {\n start: start,\n end: end\n };\n if (start.x > end.x && start.y > end.y) {\n // starts at bottom right - swap end/start points\n result = {\n start: end,\n end: start\n };\n } else if (start.y > end.y) {\n // starts at bottom left\n result = {\n start: {\n x: start.x,\n y: end.y\n },\n end: {\n x: end.x,\n y: start.y\n }\n };\n } else if (start.x > end.x) {\n // starts at top right\n result = {\n start: {\n x: end.x,\n y: start.y\n },\n end: {\n x: start.x,\n y: end.y\n }\n };\n }\n return result;\n },\n collides: function (x, y) {\n let start = this.get('start'),\n end = this.get('end');\n\n if (start == null || end == null) {\n return false;\n }\n\n return PJQ.helpers.trigHelpers.checkRectCollision(start, end, x, y);\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n ct.beginPath();\n ct.rect(coords.start.x, coords.start.y, coords.width, coords.height);\n\n this.stroke(ct, scale);\n\n if (typeof this.drawLink === 'function') {\n this.drawLink(ct, scale);\n }\n },\n drawDragPoints: function (ct, scale) {\n let ptWidth = 16,\n margin = 10 / scale,\n coords = this.getCoords(scale),\n tlStartX = coords.start.x - ptWidth - margin,\n tlStartY = coords.start.y - ptWidth - margin,\n brStartX = coords.end.x + margin,\n brStartY = coords.end.y + margin,\n trStartX = coords.end.x + margin,\n trStartY = coords.start.y - ptWidth - margin,\n blStartX = coords.start.x - ptWidth - margin,\n blStartY = coords.end.y + margin;\n\n ct.beginPath();\n ct.rect(tlStartX + (ptWidth / 2), tlStartY + (ptWidth / 2), brStartX - tlStartX, brStartY - tlStartY);\n ct.setLineDash([6]);\n ct.lineWidth = 3;\n ct.strokeStyle = '#343a40';\n ct.stroke()\n\n this.dragPoints = [{\n position: PJQ.constants.drawings.dragPoints.TOP_LEFT,\n start: {\n x: tlStartX,\n y: tlStartY\n },\n end: {\n x: tlStartX + ptWidth,\n y: tlStartY + ptWidth\n }\n }, {\n position: PJQ.constants.drawings.dragPoints.BOTTOM_RIGHT,\n start: {\n x: brStartX,\n y: brStartY\n },\n end: {\n x: brStartX + ptWidth,\n y: brStartY + ptWidth\n }\n }, {\n position: PJQ.constants.drawings.dragPoints.TOP_RIGHT,\n start: {\n x: trStartX,\n y: trStartY\n },\n end: {\n x: trStartX + ptWidth,\n y: trStartY + ptWidth\n }\n }, {\n position: PJQ.constants.drawings.dragPoints.BOTTOM_LEFT,\n start: {\n x: blStartX,\n y: blStartY\n },\n end: {\n x: blStartX + ptWidth,\n y: blStartY + ptWidth\n }\n }];\n\n ct.beginPath();\n ct.lineWidth = 3;\n ct.strokeStyle = '#343a40';\n ct.setLineDash([]);\n _.each(this.dragPoints, function (point) {\n ct.clearRect(point.start.x, point.start.y, ptWidth, ptWidth);\n PJQ.helpers.canvasHelpers.drawRoundRect(ct, point.start.x, point.start.y, ptWidth, ptWidth, 4, false, true)\n });\n }\n});\n\nPJQ.models.drawings.Ellipse = PJQ.models.drawings.Rectangle.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.ELLIPSE;\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n let radiusX = (coords.end.x - coords.start.x) * 0.5,\n radiusY = (coords.end.y - coords.start.y) * 0.5,\n centerX = coords.start.x + radiusX,\n centerY = coords.start.y + radiusY,\n step = 0.01,\n a = step,\n pi2 = Math.PI * 2 - step;\n\n ct.beginPath();\n ct.moveTo(centerX + radiusX * Math.cos(0), centerY + radiusY * Math.sin(0));\n for (; a < pi2; a += step) {\n ct.lineTo(centerX + radiusX * Math.cos(a),\n centerY + radiusY * Math.sin(a));\n }\n ct.closePath();\n\n this.stroke(ct, scale);\n\n if (typeof this.drawLink === 'function') {\n this.drawLink(ct, scale);\n }\n }\n});\n\nPJQ.models.drawings.Cloud = PJQ.models.drawings.Rectangle.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.CLOUD;\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n let lastX = coords.start.x,\n lastY = coords.start.y,\n bumpWidth = 60 / scale,\n bumpWidthHalf = bumpWidth / 2,\n bumpHeight = bumpWidth / 3;\n\n ct.beginPath();\n ct.moveTo(lastX, lastY);\n while (lastX < coords.end.x) {\n if (lastX + bumpWidth > coords.end.x) {\n let thisBumpWidth = coords.end.x - lastX,\n thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n ct.bezierCurveTo(lastX + (thisBumpWidth / 2), lastY - thisBumpHeight, lastX + (thisBumpWidth / 2), lastY - thisBumpHeight, coords.end.x, lastY);\n lastX = coords.end.x;\n } else {\n ct.bezierCurveTo(lastX + bumpWidthHalf, lastY - bumpHeight, lastX + bumpWidthHalf, lastY - bumpHeight, lastX + bumpWidth, lastY);\n lastX += bumpWidth;\n }\n }\n while (lastY < coords.end.y) {\n if (lastY + bumpWidth > coords.end.y) {\n let thisBumpWidth = coords.end.y - lastY,\n thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n ct.bezierCurveTo(lastX + thisBumpHeight, lastY + (thisBumpWidth / 2), lastX + thisBumpHeight, lastY + (thisBumpWidth / 2), lastX, coords.end.y);\n lastY = coords.end.y;\n } else {\n ct.bezierCurveTo(lastX + bumpHeight, lastY + bumpWidthHalf, lastX + bumpHeight, lastY + bumpWidthHalf, lastX, lastY + bumpWidth);\n lastY += bumpWidth;\n }\n }\n while (lastX > coords.start.x) {\n if (lastX - bumpWidth < coords.start.x) {\n let thisBumpWidth = lastX - coords.start.x,\n thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n ct.bezierCurveTo(lastX - (thisBumpWidth / 2), lastY + thisBumpHeight, lastX - (thisBumpWidth / 2), lastY + thisBumpHeight, coords.start.x, lastY);\n lastX = coords.start.x;\n } else {\n ct.bezierCurveTo(lastX - bumpWidthHalf, lastY + bumpHeight, lastX - bumpWidthHalf, lastY + bumpHeight, lastX - bumpWidth, lastY);\n lastX -= bumpWidth;\n }\n }\n while (lastY > coords.start.y) {\n if (lastY - bumpWidth < coords.start.y) {\n let thisBumpWidth = lastY - coords.start.y,\n thisBumpHeight = (thisBumpWidth / bumpWidth) * bumpHeight;\n ct.bezierCurveTo(lastX - thisBumpHeight, lastY - (thisBumpWidth / 2), lastX - thisBumpHeight, lastY - (thisBumpWidth / 2), lastX, coords.start.y);\n lastY = coords.start.y;\n } else {\n ct.bezierCurveTo(lastX - bumpHeight, lastY - bumpWidthHalf, lastX - bumpHeight, lastY - bumpWidthHalf, lastX, lastY - bumpWidth);\n lastY -= bumpWidth;\n }\n }\n ct.closePath();\n\n this.stroke(ct, scale);\n\n if (typeof this.drawLink === 'function') {\n this.drawLink(ct, scale);\n }\n }\n});\n\nPJQ.models.drawings.Text = PJQ.models.drawings.Rectangle.extend({\n beforeConstruct: function (attributes) {\n attributes.text = attributes.text != null ? attributes.text : \"\";\n attributes.textSize = attributes.textSize != null ? attributes.textSize : 100;\n },\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.TEXT;\n },\n getTextSize: function (scale = 1) {\n let ts = this.get('textSize');\n return (60 * ((ts ? ts : 100) / 100) / scale);\n },\n draw: function (ct, scale, options = {}) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n let textSize = this.getTextSize(scale);\n ct.beginPath();\n ct.fillStyle = this.getStrokeColor();\n ct.font = textSize + 'px Roboto';\n\n // we start the y position at y + textsize because\n // the y coordinate of text is at the bottom of the characters\n let y = coords.start.y + textSize,\n words = this.attributes.text.split(' '),\n line = '';\n for (let n = 0; n < words.length; n++) {\n let testLine = line + words[n],\n metrics = ct.measureText(testLine + ' '),\n testWidth = metrics.width;\n if (testWidth > coords.width && n > 0) {\n ct.fillText(line, coords.start.x, y);\n line = words[n] + ' ';\n y += textSize;\n } else {\n line = testLine + ' ';\n }\n }\n ct.fillText(line, coords.start.x, y);\n\n if (options.isDrawing) {\n ct.beginPath();\n ct.rect(coords.start.x, coords.start.y, coords.width, coords.height);\n ct.setLineDash([6]);\n ct.lineWidth = 6 / scale;\n ct.strokeStyle = '#343a40';\n ct.stroke();\n }\n }\n});\n\nPJQ.models.drawings.Pin = PJQ.models.drawings.Annotation.extend({\n getDisplayName: function () {\n return \"\";\n },\n end: function (x, y) {\n PJQ.models.drawings.Annotation.prototype.end.call(this, x, y)\n return this.start(x, y);\n },\n move: function (xDiff, yDiff, maxX, maxY) {\n let newX = this.attributes.start.x + xDiff,\n newY = this.attributes.start.y + yDiff;\n if (newX < 0) {\n newX = 0;\n } else if (newX > maxX) {\n newX = maxX;\n }\n\n if (newY < 0) {\n newY = 0;\n } else if (newY > maxY) {\n newY = maxY;\n }\n\n this.end(newX, newY);\n },\n collides: function (x, y) {\n let start = this.get('start');\n if (start == null) {\n return false;\n }\n\n let isHf = this.getIconSize() / 2;\n return PJQ.helpers.trigHelpers.checkRectCollision({\n x: start.x - isHf,\n y: start.y - isHf\n }, {\n x: start.x + isHf,\n y: start.y + isHf\n }, x, y);\n },\n getIcon: function () {\n return \"\\uF041\";\n },\n getIconSize: function (scale = 1) {\n return (80 / scale);\n },\n draw: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n let is = this.getIconSize(scale),\n isHf = is / 2,\n font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n ct.beginPath();\n ct.font = font;\n ct.fillStyle = this.getStrokeColor();\n ct.fillText(this.getIcon(), coords.start.x - isHf, coords.start.y + isHf);\n }\n});\n\nPJQ.models.drawings.PinRFI = PJQ.models.drawings.Pin.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.PIN_RFI;\n },\n getIcon: function () {\n return \"\\uF60b\";\n }\n});\n\nPJQ.models.drawings.PinPunchListItem = PJQ.models.drawings.Pin.extend({\n getDisplayName: function () {\n let res = PJQ.constants.drawings.annotationTypeNames.PIN_PUNCH_LIST_ITEM;\n if (this.punchListItem != null) {\n res += ' #' + this.punchListItem.get('itemNumber');\n }\n return res\n },\n getIcon: function () {\n return \"\\uF606\";\n },\n getStrokeColor: function () {\n if (this.punchListItem != null) {\n return this.punchListItem.getStatusColor();\n }\n return PJQ.models.drawings.Pin.prototype.getStrokeColor.call(this);\n },\n getFillColor: function () {\n if (this.punchListItem != null) {\n return this.punchListItem.getStatusColor() + '75';\n }\n return PJQ.models.drawings.Pin.prototype.getFillColor.call(this);\n },\n getDeepLink: function () {\n return this.punchListItem?.getDeepLink();\n },\n setPunchListItem: function (item) {\n this.set({\n refId: item.id,\n refType: PJQ.constants.drawings.refTypes.PUNCH_LIST_ITEM,\n refData: {\n id: item.id,\n title: item.get('title'),\n itemNumber: item.get('itemNumber'),\n status: item.get('status'),\n },\n isDirty: true\n });\n this.punchListItem = item;\n }\n});\n\nPJQ.models.drawings.PinActionItem = PJQ.models.drawings.Pin.extend({\n getDisplayName: function () {\n let res = PJQ.constants.drawings.annotationTypeNames.PIN_ACTION_ITEM;\n if (this.actionItem != null) {\n res += ' #' + this.actionItem.get('itemNumber');\n }\n return res\n },\n getIcon: function () {\n return \"\\uF608\";\n },\n getStrokeColor: function () {\n if (this.actionItem != null) {\n return this.actionItem.getStatusColor();\n }\n return PJQ.models.drawings.Pin.prototype.getStrokeColor.call(this);\n },\n getFillColor: function () {\n if (this.actionItem != null) {\n return this.actionItem.getStatusColor() + '75';\n }\n return PJQ.models.drawings.Pin.prototype.getFillColor.call(this);\n },\n getDeepLink: function () {\n return this.actionItem?.getDeepLink();\n },\n setActionItem: function (item) {\n this.set({\n refId: item.id,\n refType: PJQ.constants.drawings.refTypes.ACTION_ITEM,\n refData: {\n id: item.id,\n title: item.get('title'),\n itemNumber: item.get('itemNumber'),\n status: item.get('status'),\n },\n isDirty: true\n });\n this.actionItem = item;\n },\n});\n\nPJQ.models.drawings.PinSubmittal = PJQ.models.drawings.Pin.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.PIN_SUBMITTAL;\n },\n getIcon: function () {\n return \"\\uF041\";\n }\n});\n\nPJQ.models.drawings.Photo = PJQ.models.drawings.Pin.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.PHOTO;\n },\n getIcon: function () {\n return \"\\uF030\";\n }\n});\n\nPJQ.models.drawings.LinkRectangle = PJQ.models.drawings.Rectangle.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.LINK_RECTANGLE;\n },\n drawLink: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return null;\n }\n\n let is = (80 / scale),\n isHf = is / 2,\n font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n document.fonts.load(font).then((_) => {\n ct.beginPath();\n ct.font = font;\n ct.fillStyle = this.getStrokeColor();\n ct.fillText(\"\\uf0c1\", coords.start.x + isHf, coords.end.y - isHf);\n })\n }\n});\n\nPJQ.models.drawings.LinkEllipse = PJQ.models.drawings.Ellipse.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.LINK_ELLIPSE;\n },\n drawLink: function (ct, scale) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return null;\n }\n\n let is = (80 / scale),\n isHf = is / 2,\n font = '900 ' + is + 'px \"Font Awesome 5 Pro\"';\n document.fonts.load(font).then((_) => {\n let x = coords.start.x + (coords.width / 2),\n y = coords.end.y\n ct.beginPath();\n ct.font = font;\n ct.fillStyle = this.getStrokeColor();\n ct.fillText(\"\\uf0c1\", x - isHf, y - isHf);\n })\n }\n});\n\nPJQ.models.drawings.LinkCloud = PJQ.models.drawings.Cloud.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.LINK_CLOUD;\n },\n drawLink: PJQ.models.drawings.LinkRectangle.prototype.drawLink\n});\n\nPJQ.models.drawings.Ruler = PJQ.models.drawings.Line.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.RULER;\n },\n draw: function (ct, scale, options) {\n let coords = this.getCoords(scale);\n if (coords == null) {\n return;\n }\n\n // draw the line with a gap in the middle for the length text\n // to do this, we find 2 points offset \"gap\" pixels in either direction (scaled) from the center point of the line\n // we then draw 2 lines, 1 from the start to center offset 1 - the other from center offset 2 to the end\n let dx = coords.start.x - coords.end.x,\n dy = coords.start.y - coords.end.y,\n len = Math.sqrt(dx * dx + dy * dy) / 2,\n gap = Math.min(50, len / 4),\n textSize = (gap * 0.8) / scale,\n d1 = len - (gap / scale),\n d2 = len + (gap / scale),\n angle = Math.atan2(coords.end.y - coords.start.y, coords.end.x - coords.start.x),\n middle1 = {\n x: coords.start.x + d1 * Math.cos(angle),\n y: coords.start.y + d1 * Math.sin(angle)\n },\n middle2 = {\n x: coords.start.x + d2 * Math.cos(angle),\n y: coords.start.y + d2 * Math.sin(angle)\n };\n ct.beginPath();\n ct.moveTo(coords.start.x, coords.start.y);\n ct.lineTo(middle1.x, middle1.y);\n ct.moveTo(middle2.x, middle2.y);\n ct.lineTo(coords.end.x, coords.end.y);\n this.stroke(ct, scale);\n\n // write the ruler calculated length\n // we start the y position at y + textsize because\n // the y coordinate of text is at the bottom of the characters\n let rulerLength = this.getRulerLength(options.drawing.get('scale')),\n scaleType = options.drawing.get('scaleType'),\n rulerText = '';\n if (scaleType === PJQ.constants.drawings.scaleTypes.IMPERIAL) {\n let inches = rulerLength,\n feet = 0;\n if (inches > 12) {\n feet = Math.floor(inches / 12);\n rulerText = feet.toString() + \"' \" + (inches % 12).toString() + \"\\\"\";\n } else {\n rulerText = inches.toString() + \"\\\"\";\n }\n } else {\n\n }\n\n ct.beginPath();\n ct.fillStyle = this.getStrokeColor();\n ct.font = textSize + 'px Roboto';\n ct.fillText(rulerText, middle1.x, middle1.y);\n },\n getRulerLength: function (scale) {\n let start = this.get('start'),\n end = this.get('end'),\n dx = end.x - start.x,\n dy = end.y - start.y,\n d = Math.sqrt(dx * dx + dy * dy);\n return Math.round(d / scale);\n }\n});\n\nPJQ.models.drawings.AreaRectangle = PJQ.models.drawings.Rectangle.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.AREA_RECT;\n }\n});\n\nPJQ.models.drawings.RulerFreeForm = PJQ.models.drawings.Pen.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.RULER_FREE_FORM;\n }\n});\n\nPJQ.models.drawings.AreaFreeForm = PJQ.models.drawings.Pen.extend({\n getDisplayName: function () {\n return PJQ.constants.drawings.annotationTypeNames.AREA_FREE_FORM;\n }\n});\n\nPJQ.models.drawings.AnnotationAttachment = PJQ.models.files.File.extend({\n idAttribute: 'attachmentId',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'annotations',\n value: this.get('annotationId')\n },\n {\n endpoint: 'attachments',\n value: this.id\n }\n ]);\n }\n});\n\nPJQ.collections.drawings.Layers = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.drawings.Layer,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.projectId\n },\n {\n endpoint: 'layers'\n }\n ]);\n },\n fetchAnnotations: function (drawingId, callback) {\n if (_.indexOf(this.fetchedDrawingIds, drawingId) === -1) {\n if (this.fetchedDrawingIds == null) {\n this.fetchedDrawingIds = [drawingId];\n } else {\n this.fetchedDrawingIds.push(drawingId);\n }\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: drawingId\n },\n {\n endpoint: 'annotations'\n }\n ])\n }).get().done(_.bind(function (annotations) {\n _.each(annotations, function (annotation) {\n let layer = this.get(annotation.layerId);\n if (layer != null) {\n layer.annotations.add(annotation);\n }\n }, this);\n callback();\n }, this)).fail(_.bind(function () {\n callback();\n }, this));\n } else {\n callback();\n }\n }\n});\n\nPJQ.collections.drawings.Annotations = PJQ.collections.BaseCollection.extend({\n afterInit: function () {\n if (PJQ.helpers.objectHelpers.checkNested(PJQ.app, 'session', 'preferences')) {\n this.options.isAPIv2 = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS);\n }\n },\n model: function (attrs, options) {\n let mod;\n switch (attrs.type.toUpperCase()) {\n case PJQ.constants.drawings.annotationTypes.LINE:\n mod = PJQ.models.drawings.Line;\n break;\n case PJQ.constants.drawings.annotationTypes.PEN:\n mod = PJQ.models.drawings.Pen;\n break;\n case PJQ.constants.drawings.annotationTypes.HIGHLIGHTER:\n mod = PJQ.models.drawings.Highlighter;\n break;\n case PJQ.constants.drawings.annotationTypes.ARROW:\n mod = PJQ.models.drawings.Arrow;\n break;\n case PJQ.constants.drawings.annotationTypes.RECTANGLE:\n mod = PJQ.models.drawings.Rectangle;\n break;\n case PJQ.constants.drawings.annotationTypes.ELLIPSE:\n mod = PJQ.models.drawings.Ellipse;\n break;\n case PJQ.constants.drawings.annotationTypes.CLOUD:\n mod = PJQ.models.drawings.Cloud;\n break;\n case PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE:\n mod = PJQ.models.drawings.LinkRectangle;\n break;\n case PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE:\n mod = PJQ.models.drawings.LinkEllipse;\n break;\n case PJQ.constants.drawings.annotationTypes.LINK_CLOUD:\n mod = PJQ.models.drawings.LinkCloud;\n break;\n case PJQ.constants.drawings.annotationTypes.TEXT:\n mod = PJQ.models.drawings.Text;\n break;\n case PJQ.constants.drawings.annotationTypes.PHOTO:\n mod = PJQ.models.drawings.Photo;\n break;\n case PJQ.constants.drawings.annotationTypes.RULER:\n mod = PJQ.models.drawings.Ruler;\n break;\n case PJQ.constants.drawings.annotationTypes.AREA_RECT:\n mod = PJQ.models.drawings.AreaRectangle;\n break;\n case PJQ.constants.drawings.annotationTypes.RULER_FREE_FORM:\n mod = PJQ.models.drawings.RulerFreeForm;\n break;\n case PJQ.constants.drawings.annotationTypes.AREA_FREE_FORM:\n mod = PJQ.models.drawings.AreaFreeForm;\n break;\n case PJQ.constants.drawings.annotationTypes.PIN_RFI:\n mod = PJQ.models.drawings.PinRFI;\n break;\n case PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM:\n mod = PJQ.models.drawings.PinPunchListItem;\n break;\n case PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM:\n mod = PJQ.models.drawings.PinActionItem;\n break;\n case PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL:\n mod = PJQ.models.drawings.PinSubmittal;\n break;\n default:\n mod = PJQ.models.drawings.Annotation;\n break;\n }\n return new mod(attrs, options)\n },\n merge: function (mergeAnnotations, contextId) {\n let fnMerge = (annotation) => {\n if ((contextId == null || annotation.get('contextId') === contextId) && (this.options.drawingId == null || this.options.drawingId === annotation.get('drawingId'))) {\n if (annotation.id > 0) {\n let exist = this.findWhere({annotationId: annotation.id});\n if (exist != null) {\n this.remove(exist.cid);\n }\n }\n this.add(annotation);\n }\n }\n if (PJQ.helpers.objectHelpers.refinedType(mergeAnnotations) === 'array') {\n _.each(mergeAnnotations, (annotation) => {\n fnMerge(annotation);\n });\n } else {\n fnMerge(mergeAnnotations);\n }\n },\n endpoint: function (options) {\n if (!options) {\n options = {};\n }\n\n options.isAPIv2 = this.options.isAPIv2 = [PJQ.constants.drawings.annotationTypes.PIN_RFI,\n PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM,\n PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM,\n PJQ.constants.drawings.annotationTypes.PIN_SUBMITTAL].indexOf(this.get('type')) !== -1;\n\n let params;\n if (_.size(this.options.context) > 0 && this.options.contextId > 0) {\n params = [{\n parameter: 'context',\n value: this.options.context\n }, {\n parameter: 'contextId',\n value: this.options.contextId\n }];\n } else {\n params = [];\n }\n\n if (this.options.accessKey != null) {\n params.push({\n parameter: 'accessKey',\n value: this.options.accessKey\n });\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.options.drawingId\n },\n {\n endpoint: 'annotations'\n }\n ], params);\n },\n saveAll: function (callback) {\n let annotationsMap = {};\n _.each(this.models, (annotation) => {\n if (annotationsMap[annotation.get('drawingId')] == null) {\n annotationsMap[annotation.get('drawingId')] = [];\n }\n annotation.beforeSave();\n annotationsMap[annotation.get('drawingId')].push(annotation);\n });\n\n let saveAnnotations = _.map(annotationsMap, function (annotations) {\n return annotations;\n });\n let changedCt = _.size(saveAnnotations),\n saveNextAnnotation = (i) => {\n if (changedCt < i + 1) {\n if (typeof callback === 'function') {\n callback();\n }\n return;\n }\n let thisSet = saveAnnotations[i];\n if (_.size(thisSet) > 0) {\n let drawingId = thisSet[0].get('drawingId');\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: drawingId\n },\n {\n endpoint: 'annotations'\n }\n ]),\n data: thisSet\n }).put().done(_.bind(function (response) {\n saveNextAnnotation(i + 1);\n }, this));\n } else {\n saveNextAnnotation(i + 1);\n }\n };\n saveNextAnnotation(0);\n }\n});\n\nPJQ.collections.drawings.AnnotationAttachments = PJQ.collections.files.Files.extend({\n model: PJQ.models.drawings.AnnotationAttachment\n});","PJQ.views.drawings.EditAnnotation = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'annotation-edit'),\n subTemplates: {\n textSizePicker: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'text-size-picker')\n },\n focusText: false,\n isEditLink: false,\n onShapeChange: null,\n onPublish: null,\n canEdit: false,\n onDelete: null,\n onClose: null,\n onAnnotationDataChange: null,\n onAttachmentChange: null,\n onDrawingSelected: null\n },\n events: {\n \"click .text-size-picker>button\": \"textSizeClicked\",\n \"click .version-drawing-outer\": \"drawingClicked\",\n \"click .btn-edit-link\": \"editLink\",\n \"click .btn-save-link\": \"saveLink\",\n \"click .btn-cancel-link\": \"cancelEditLink\",\n \"click .view-punch-list-item\": \"viewPunchListItemClicked\",\n \"click .view-action-item\": \"viewActionItemClicked\",\n \"click .btn-publish-annotation\": \"publish\",\n \"click .btn-delete-annotation\": \"delete\",\n \"click .btn-close-annotation\": \"close\"\n },\n beforeFirstRender: function () {\n let type = this.model.get('type');\n if (type === PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE || type === PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE || type === PJQ.constants.drawings.annotationTypes.LINK_CLOUD) {\n if (this.model.get('refType') == null) {\n this.model.set('refType', PJQ.constants.drawings.refTypes.DRAWING);\n }\n }\n },\n renderData: function () {\n return {\n model: this.model,\n versions: this.options.versions,\n context: this.options.context,\n isEditLink: this.options.isEditLink,\n canEdit: this.options.canEdit,\n isAdmin: this.options.isAdmin\n };\n },\n afterRender: function () {\n let type = this.model.get('type');\n if (type === PJQ.constants.drawings.annotationTypes.LINK_RECTANGLE || type === PJQ.constants.drawings.annotationTypes.LINK_ELLIPSE || type === PJQ.constants.drawings.annotationTypes.LINK_CLOUD) {\n new PJQ.inputs.Selectpicker({\n el: this.$('.select-link-ref-type'),\n defaultValue: this.model.get('refType'),\n onChange: _.bind(function (value) {\n this.model.set('refType', value);\n this.render();\n }, this)\n });\n\n let choices = _.map(_.sortBy(this.options.versions.getUniqueDrawings(), (drawing) => {\n return drawing.get('sortOrder');\n }), (drawing) => {\n return {\n id: drawing.id,\n name: drawing.get('name')\n };\n });\n this.refIdPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.select-link-ref-id'),\n defaultValue: this.model.get('refId'),\n isIntChoices: true,\n isLiveSearch: true,\n choices: choices,\n size: 15,\n onChange: _.bind(function (value) {\n if (value > 0 && this.model.get('refId') == null) {\n this.model.set('refId', value);\n this.render();\n this.onAnnotationDataChange();\n }\n }, this)\n });\n } else if (type === PJQ.constants.drawings.annotationTypes.PHOTO) {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.annotation-file-uploader'),\n collection: this.model.attachments,\n previewImageDimension: 140,\n canUpload: this.options.canEdit,\n canDelete: this.options.canEdit,\n onSuccess: _.bind(function () {\n if (typeof this.options.onAttachmentChange === 'function') {\n this.options.onAttachmentChange(this.model);\n }\n }, this),\n onDelete: _.bind(function (attachment, callback) {\n if (attachment.id > 0) {\n attachment.set('isDeleted', true);\n } else {\n this.model.attachments.remove(attachment);\n }\n this.model.isDirty = true;\n\n attachment.set('drawingId', this.model.id);\n if (typeof this.options.onAttachmentChange === 'function') {\n this.options.onAttachmentChange(this.model);\n }\n callback();\n }, this)\n });\n } else if (type === PJQ.constants.drawings.annotationTypes.TEXT) {\n this.renderTextSizePicker();\n\n if (this.options.focusText) {\n this.$('.input-annotation-text').focus();\n }\n } else if (type === PJQ.constants.drawings.annotationTypes.PIN_PUNCH_LIST_ITEM) {\n this.renderPunchListDetails();\n } else if (type === PJQ.constants.drawings.annotationTypes.PIN_ACTION_ITEM) {\n this.renderActionItemDetails();\n }\n\n new PJQ.Binder(this.$el, this.model, {\n watchElements: [\n 'input',\n 'textarea'\n ],\n afterChange: _.bind(function (_, attribute) {\n if (attribute === 'text') {\n this.onShapeChange();\n } else {\n this.onAnnotationDataChange();\n }\n }, this)\n });\n },\n editLink: function (e) {\n e.stopPropagation();\n this.options.isEditLink = true;\n this.render();\n },\n saveLink: function () {\n this.model.set('refId', this.refIdPicker.getValue());\n this.onAnnotationDataChange();\n this.cancelEditLink();\n },\n cancelEditLink: function () {\n this.options.isEditLink = false;\n this.render();\n },\n drawingClicked: function () {\n if (typeof this.options.onDrawingSelected === 'function') {\n let drawing = this.options.versions.getDrawing(this.model.get('refId'));\n if (drawing != null) {\n this.options.onDrawingSelected(drawing);\n }\n }\n },\n renderPunchListDetails: function () {\n let canAdd = this.options.project.permissions.hasPermission('punchList.canAdd'),\n choices,\n fnMapItems = () => {\n let items = _.map(this.punchListItems.models, (punchListItem) => {\n return {\n id: punchListItem.id,\n name: '' + punchListItem.get('itemNumber') + '' + \" - \" + punchListItem.get('title')\n };\n });\n if (!canAdd) {\n return items;\n }\n\n return [\n {\n name: '',\n choices: [\n {\n id: 0,\n name: 'New Item'\n }\n ]\n },\n {\n name: '',\n choices: items\n }\n ];\n }\n\n if (!(this.model.get('refId') > 0)) {\n if (this.punchListItems != null) {\n choices = fnMapItems();\n } else {\n choices = [];\n }\n\n let $selectItem = this.$('.select-punch-list-item'),\n punchListItemSelect = new PJQ.inputs.Selectpicker({\n el: $selectItem,\n isLiveSearch: true,\n choices: choices,\n isIntChoices: true,\n pickerWidth: '275px',\n onChange: (value) => {\n if (value === 0) {\n punchListItemSelect.setValue(null);\n this.newPunchListItem();\n return;\n }\n\n let item = this.punchListItems.get(value);\n if (item == null) {\n return;\n }\n\n this.model.setPunchListItem(item);\n this.render();\n this.onAnnotationDataChange();\n }\n });\n\n let fnUpdateChoices = () => {\n punchListItemSelect.updateChoices(fnMapItems());\n setTimeout(() => {\n punchListItemSelect.toggle();\n }, 100);\n };\n if (this.punchListItems != null) {\n fnUpdateChoices();\n } else {\n let loader = new PJQ.Loader($selectItem);\n this.options.project.fetchPunchListItems((punchListItems) => {\n loader.remove();\n this.punchListItems = punchListItems;\n fnUpdateChoices();\n });\n }\n }\n },\n newPunchListItem: function () {\n let newItem = new PJQ.models.punchlists.PunchlistItem({\n projectId: this.options.project ? this.options.project.id : null\n });\n this.viewPunchListItem(newItem);\n },\n viewPunchListItemClicked: function (e) {\n let target = $(e.currentTarget),\n id = target.data('id'),\n item = this.model.punchListItem;\n if (item == null) {\n item = new PJQ.models.punchlists.PunchlistItem({\n id: id\n })\n }\n this.viewPunchListItem(item);\n },\n viewPunchListItem: function (item) {\n new PJQ.views.punchlists.PunchlistItemEditorModal({\n model: item,\n collection: this.punchListItems,\n project: this.options.project,\n onSave: () => {\n this.model.setPunchListItem(item);\n this.render();\n this.onAnnotationDataChange();\n }\n });\n },\n renderActionItemDetails: function () {\n let canAdd = this.options.project.permissions.hasPermission('actionItems.canAdd'),\n choices,\n fnMapItems = () => {\n let items = _.map(this.actionItems.models, (actionItem) => {\n return {\n id: actionItem.id,\n name: '' + actionItem.get('itemNumber') + '' + \" - \" + actionItem.get('title')\n };\n });\n if (!canAdd) {\n return items;\n }\n\n return [\n {\n name: '',\n choices: [\n {\n id: 0,\n name: 'New Item'\n }\n ]\n },\n {\n name: '',\n choices: items\n }\n ];\n }\n\n if (this.model.actionItem == null) {\n if (this.actionItems != null) {\n choices = fnMapItems();\n } else {\n choices = [];\n }\n\n let $selectItem = this.$('.select-action-item'),\n actionItemSelect = new PJQ.inputs.Selectpicker({\n el: $selectItem,\n isLiveSearch: true,\n choices: choices,\n isIntChoices: true,\n pickerWidth: '275px',\n onChange: (value) => {\n if (value === 0) {\n actionItemSelect.setValue(null);\n this.newActionItem();\n return;\n }\n\n let item = this.actionItems.get(value);\n if (item == null) {\n return;\n }\n\n this.model.setActionItem(item);\n this.render();\n this.onAnnotationDataChange();\n }\n });\n\n let fnUpdateChoices = () => {\n actionItemSelect.updateChoices(fnMapItems());\n setTimeout(() => {\n actionItemSelect.toggle();\n }, 100);\n };\n if (this.actionItems != null) {\n fnUpdateChoices();\n } else {\n let loader = new PJQ.Loader($selectItem);\n this.options.project.fetchActionItems((actionItems) => {\n loader.remove();\n this.actionItems = actionItems;\n fnUpdateChoices();\n });\n }\n }\n },\n newActionItem: function () {\n let newItem = new PJQ.models.actionItems.ActionItem({\n projectId: this.options.project ? this.options.project.id : null\n });\n this.viewActionItem(newItem);\n },\n viewActionItemClicked: function (e) {\n let target = $(e.currentTarget),\n id = target.data('id'),\n item = this.model.actionItem\n if (item == null) {\n item = new PJQ.models.actionItems.ActionItem({\n id: id\n })\n }\n this.viewActionItem(item);\n },\n viewActionItem: function (item) {\n new PJQ.views.actionItems.ActionItemEditorModal({\n model: item,\n collection: this.actionItems,\n project: this.options.project,\n onSave: () => {\n this.model.setActionItem(item);\n this.render();\n this.onAnnotationDataChange();\n }\n });\n },\n renderTextSizePicker: function () {\n this.renderSubTemplate(false, this.options.subTemplates.textSizePicker, this.$('.text-size-outer'), {\n textSize: this.model.get('textSize')\n });\n },\n textSizeClicked: function (e) {\n e.stopPropagation();\n this.model.set('textSize', parseInt($(e.currentTarget).data('textSize')));\n this.renderTextSizePicker();\n this.onShapeChange();\n },\n onAnnotationDataChange: function () {\n if (typeof this.options.onAnnotationDataChange === 'function') {\n this.options.onAnnotationDataChange(this.model);\n }\n },\n onShapeChange: function () {\n if (typeof this.options.onShapeChange === 'function') {\n this.options.onShapeChange(this.model);\n }\n },\n publish: function () {\n if (typeof this.options.onPublish === 'function') {\n this.options.onPublish(this.model);\n }\n this.render();\n },\n delete: function () {\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete(this.model);\n }\n this.close();\n },\n close: function () {\n this.remove();\n if (typeof this.options.onClose === 'function') {\n this.options.onClose(this.model);\n }\n }\n});\n\n","PJQ.views.drawings.DrawingBatchModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-New-Drawing-Batch'),\n step: 1,\n subTemplates: {\n batchHeader: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Batch-Header'),\n drawingTags: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Tags'),\n drawingDetailHeader: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Upload-Drawing-Detail-Header'),\n sortDrawings: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Sort-Drawings')\n },\n isShowCloseButton: true\n },\n events: {\n 'click .btn-next-step': 'nextStep',\n 'click .btn-prev-step': 'previousStep',\n 'change .checkbox-new-version': 'useNewVersion',\n 'change .checkbox-existing-version': 'useExistingVersion',\n 'click .existing-version': 'existingVersionSelected',\n 'keyup .input-version-name': 'versionNameChanged',\n 'click .select-batch-drawing': 'viewBatchDrawing',\n 'click .btn-drawing-rotate-90': 'rotateBatchDrawing90Clicked',\n 'click .btn-drawing-rotate-180': 'rotateBatchDrawing180Clicked',\n 'click .btn-drawing-rotate-270': 'rotateBatchDrawing270Clicked',\n 'click .btn-drawing-delete': 'deleteBatchDrawing',\n 'click .btn-save': 'save',\n 'click .btn-publish': 'publish',\n 'click .btn-cancel': 'cancel',\n 'click .btn-close': 'closeModal',\n 'blur .input-drawing-name,.input-drawing-title,.input-drawing-tag': 'drawingBlur',\n 'focus .input-drawing-name,.input-drawing-title,.input-drawing-tag': 'drawingFocus',\n 'keydown .input-drawing-name': 'drawingNameKeydown',\n 'keyup .input-drawing-name': 'drawingNameChanged',\n 'keydown .input-drawing-title': 'drawingTitleKeydown',\n 'keyup .input-drawing-title': 'drawingTitleChanged',\n 'keydown .input-drawing-tag': 'drawingTagKeydown',\n 'keyup .input-drawing-tag': 'drawingTagChanged',\n 'click .btn-add-drawing-tag': 'addDrawingTagClicked',\n 'click .btn-delete-tag': 'deleteTagClicked',\n 'click .btn-upload-log': 'viewUploadLog',\n 'change .checkbox-add-current-set': 'addToCurrentSetChanged',\n 'change .checkbox-add-all-current-set': 'addAllToCurrentSetChanged',\n 'change .checkbox-replace-current-set': 'replaceCurrentSetChanged',\n 'change .cb-replace-existing-drawing': 'replaceExistingDrawingChanged',\n 'click .btn-highlight-area': 'highlightArea'\n },\n highlightArea: function (e) {\n let drawing = this.model.drawings.models[0];\n new PJQ.views.drawings.DrawingAreaHighlight({\n model: drawing,\n batch: this.model,\n versions: this.options.versions,\n onSave: _.bind(function (result) {\n this.model.set({\n nameArea: result.layers.name,\n titleArea: result.layers.title\n });\n this.model.patch(this.model.attributes, {\n success: _.bind(function () {\n this.options.step = 3;\n this.render();\n }, this)\n });\n }, this)\n });\n },\n beforeModalCreated: function () {\n if (this.model == null) {\n this.model = new PJQ.models.drawings.DrawingBatch({\n projectId: this.options.project.id\n });\n\n if (this.options.version != null) {\n this.model.version = this.options.version;\n this.options.step = 2;\n }\n } else if (this.model.id > 0) {\n // we are continuing an existing upload\n this.options.step = 4;\n this.model.fetch({\n success: _.bind(function () {\n this.setCurrentSetDefaults();\n this.render();\n }, this)\n });\n }\n },\n setCurrentSetDefaults: function () {\n this.options.currentSetDefault = !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWINGS_CURRENT_SET_DEFAULT_OFF);\n if (this.model) {\n _.each(this.model.drawings.models, function (drawing) {\n drawing.set(\"isCurrentSet\", this.options.currentSetDefault);\n }, this);\n }\n },\n beforeRender: function () {\n this.options.fitHeight = this.options.step === 5;\n\n if (this.options.step === 4) {\n let publishedIds = [];\n _.each(this.model.drawings.models, function (drawing) {\n if (drawing.get('isPublished')) {\n publishedIds.push(drawing.id);\n }\n });\n this.model.drawings.remove(publishedIds);\n }\n },\n getWidth: function () {\n let result;\n if (this.options.step === 4) {\n result = {\n minWidth: 400,\n maxWidth: '80%',\n width: 1200\n };\n } else {\n result = {\n minWidth: 600,\n maxWidth: this.options.maxWidth,\n width: this.options.width\n };\n }\n return result;\n },\n renderData: function () {\n return {\n model: this.model,\n versions: this.options.versions,\n step: this.options.step\n };\n },\n afterRender: function () {\n switch (this.options.step) {\n case 1:\n this.initVersionSelect();\n break;\n case 2:\n this.initFileUpload();\n break;\n case 3:\n this.initBatchWait();\n break;\n case 4:\n if (this.model.isFetched) {\n this.initBatchPublish();\n }\n break;\n case 5:\n this.initBatchSort();\n break;\n }\n },\n initVersionSelect: function () {\n this.$(\".input-version-name\").focus();\n new PJQ.inputs.Datepicker({\n el: this.$('.input-version-date-issued'),\n isShowTimezone: false,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n },\n onChange: _.bind(function (newDate) {\n this.model.version.set('issuedOn', newDate);\n this.validateNewVersion();\n }, this)\n });\n this.useNewVersion();\n },\n initFileUpload: function () {\n this.fileUploader = new PJQ.views.files.FileUploaderGrid({\n el: this.$('.version-file-uploader'),\n collection: this.model.uploads,\n allowedExtensions: ['pdf', 'tif', 'tiff'],\n style: 'list',\n onSuccess: _.bind(this.dataChanged, this),\n onFileStatusChange: _.bind(this.dataChanged, this),\n onDrop: _.bind(this.dataChanged, this),\n afterDelete: _.bind(this.dataChanged, this)\n });\n },\n dataChanged: function () {\n let uploadCount = _.size(this.model.uploads.models),\n hasUploads = uploadCount > 0,\n queued = 0,\n uploading = 0,\n success = 0;\n _.each(this.model.uploads.models, function (upload) {\n switch (upload.get('status')) {\n case 'queued':\n queued++;\n break;\n case 'uploading':\n uploading++;\n break;\n case 'success':\n success++;\n break;\n }\n\n let $queued = $('Queued: ' + queued.toString() + '');\n if (queued === 0) {\n $queued.addClass('op-6 font-weight-light');\n }\n\n let $uploaded = $('Uploading: ' + uploading.toString() + '');\n if (uploading === 0) {\n $uploaded.addClass('op-6 font-weight-light');\n }\n\n\n let $success = $('Uploaded: ' + success.toString() + '');\n if (success === 0) {\n $success.addClass('op-6 font-weight-light');\n }\n\n this.$('.upload-files-status').empty().append([$queued, $uploaded, $success]);\n }, this);\n this.$('.btn-next-step').prop('disabled', !hasUploads || this.fileUploader.isUploading());\n },\n initBatchWait: function () {\n if (this.model.get('status') === 0 || this.model.get('status') === 1) {\n this.checkBatchStatus();\n } else {\n this.options.step++;\n this.render();\n }\n },\n initBatchPublish: function () {\n this.refreshTags();\n\n this.drawingVersionCounts = {};\n this.fullSet = null;\n\n _.each(_.filter(this.model.drawings.models, _.bind(function (drawing) {\n return !drawing.get('isPublished');\n }), this), _.bind(function (drawing) {\n\n if (_.size(drawing.get('name')) > 0 && _.size(drawing.get('tags')) == 0) {\n let matchedDrawing = null;\n _.each(this.options.versions.models, function (version) {\n if (matchedDrawing == null) {\n _.each(version.drawings.models, function (model) {\n if (model.get('name') === drawing.get('name') && matchedDrawing == null && _.size(model.get('tags')) > 0) {\n matchedDrawing = model;\n drawing.set('tags', matchedDrawing.get('tags'));\n }\n });\n }\n });\n }\n\n this.renderBatchDrawing(drawing);\n }, this));\n this.renderBatchDrawingAutoCompletes();\n\n this.renderReplaceCurrentSet();\n\n PJQ.app.lazyLoad().update();\n },\n renderBatchDrawingAutoCompletes: function () {\n new PJQ.inputs.AutocompleteInput({\n el: this.$('.input-drawing-name'),\n onSelect: (sel) => {\n this.drawingNameChanged(sel.e);\n },\n source: (req, res) => {\n if (_.size(req.term) === 0) {\n return [];\n }\n res(_.filter(this.names, function (name) {\n if (name.toLowerCase().indexOf(req.term.toLowerCase()) !== -1) {\n return name;\n }\n }));\n }\n });\n\n if (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_HIDE_TAG)) {\n new PJQ.inputs.AutocompleteInput({\n el: this.$('.input-drawing-tag'),\n source: _.bind(function (req, res) {\n if (_.size(req.term) === 0) {\n return [];\n }\n res(_.filter(this.options.tags, function (tag) {\n if (tag.toLowerCase().indexOf(req.term.toLowerCase()) !== -1) {\n return tag;\n }\n }));\n }, this)\n });\n }\n },\n getBatchDrawingElement: function (drawing) {\n return this.$('.batch-drawing[data-cid=\"' + drawing.cid + '\"]')\n },\n renderBatchDrawing: function (drawing) {\n if (this.fullSet == null) {\n this.fullSet = this.options.versions.getUniqueDrawings();\n this.names = [];\n _.each(this.fullSet, _.bind(function (fullSetDrawing) {\n let drawingName = fullSetDrawing.get('name');\n if (this.names.indexOf(drawingName) === -1) {\n this.names.push(drawingName);\n }\n }, this));\n }\n\n let $drawing = this.getBatchDrawingElement(drawing),\n $header = $drawing.find('.drawing-details-header');\n\n let inCurrentSet = false,\n curSet = this.options.versions.get(-1);\n if (curSet != null) {\n inCurrentSet = curSet.drawings.findWhere({name: drawing.get('name')}) != null;\n }\n this.drawingVersionCounts[drawing.cid] = this.options.versions.getVersionStatsForDrawing(drawing);\n if (!this.drawingVersionCounts[drawing.cid].same) {\n drawing.set('keepExisting', false);\n }\n\n this.renderSubTemplate(false, this.options.subTemplates.drawingDetailHeader, $header, {\n inCurrentSet: inCurrentSet,\n versionCount: this.drawingVersionCounts[drawing.cid],\n drawing: drawing\n });\n\n this.renderDrawingTags(drawing);\n\n this.renderBatchHeader();\n },\n renderBatchHeader: function () {\n let newCount = 0,\n revisedCount = 0;\n _.each(this.drawingVersionCounts, function (count, cid) {\n let drawing = this.model.drawings.get(cid);\n if (drawing == null || drawing.get('isDeleted')) {\n return;\n }\n\n if (count.older + count.newer > 0) {\n revisedCount++;\n } else {\n newCount++;\n }\n }, this);\n this.renderSubTemplate(false, this.options.subTemplates.batchHeader, this.$('.batch-header'), {\n currentSetDefault: this.options.currentSetDefault,\n replaceCurrentSet: this.model.get('replaceCurrentSet'),\n newCount: newCount,\n revisedCount: revisedCount,\n totalCount: newCount + revisedCount\n });\n },\n initBatchSort: function () {\n this.sortDrawingsView = new PJQ.views.drawings.SortDrawings({\n el: this.$('.sort-drawings'),\n batch: this.model,\n versions: this.options.versions,\n afterRender: () => {\n this.$('.drawings-sort').css('height', parseInt(this.$('.modal-body').css('min-height')) - 220);\n }\n });\n },\n checkBatchStatus: function () {\n this.model.fetchStatus(_.bind(function (status) {\n if (status === 0 || status === 1) {\n this.model.statusTimeout = setTimeout(_.bind(function () {\n this.checkBatchStatus();\n }, this), 2000);\n } else {\n this.model.fetch({\n success: _.bind(function () {\n this.setCurrentSetDefaults();\n this.render();\n }, this)\n });\n }\n }, this));\n },\n viewUploadLog: function () {\n this.close();\n new PJQ.views.drawings.DrawingUploadLogModal({\n project: this.options.project,\n versions: this.options.versions\n });\n },\n validateNewVersion: function (onSave = false) {\n let $name = this.$('.input-version-name'),\n versionNameExists = false,\n isNameValid = !onSave || _.size(this.model.version.get('name')) > 0,\n $issuedOn = this.$('.input-version-date-issued'),\n isIssuedValid = !onSave || this.model.version.get('issuedOn') != null;\n\n let newerVersionCount = 0;\n _.each(this.options.versions.models, _.bind(function (version) {\n if (new Date(this.model.version.get('issuedOn')) < new Date(version.get('issuedOn'))) {\n newerVersionCount++;\n }\n\n if (this.model.version.get('name').toLowerCase() === version.get('name').toLowerCase()) {\n versionNameExists = true;\n }\n }, this));\n isNameValid = isNameValid && !versionNameExists;\n\n PJQ.helpers.inputHelpers.setInputError($name, isNameValid);\n PJQ.helpers.inputHelpers.setInputError($issuedOn, isIssuedValid);\n\n let errors = '';\n if (newerVersionCount > 0) {\n errors += '
There are ' + newerVersionCount.toString() + ' versions newer than this
';\n }\n if (versionNameExists) {\n errors += '
There is already a version with this name
';\n }\n this.$('.new-version-errors').html('
' + errors + '
');\n\n return isNameValid && isIssuedValid;\n },\n previousStep: function () {\n // this should only be allowed when going back from sorting to naming\n this.options.step--;\n this.render();\n },\n nextStep: function () {\n switch (this.options.step) {\n case 1:\n let hasFiles = _.size(this.model.files.models) > 0;\n if (this.model.version.isNew()) {\n let isValid = this.validateNewVersion(true);\n if (isValid) {\n this.options.versions.add(this.model.version);\n this.model.version.save(null, {\n success: _.bind(function () {\n if (hasFiles) {\n //skip the upload step\n this.options.step = this.options.step + 2;\n this.model.save(null, {\n success: _.bind(function () {\n this.render();\n }, this)\n });\n } else {\n this.options.step++;\n this.render();\n }\n }, this)\n });\n }\n } else if (hasFiles) {\n //skip the upload step\n this.options.step = this.options.step + 2;\n this.model.save(null, {\n success: _.bind(function () {\n this.render();\n }, this)\n });\n } else {\n this.options.step++;\n this.render();\n }\n break;\n case 2:\n this.model.save({\n guid: this.fileUploader.options.uuid\n }, {\n success: _.bind(function () {\n this.options.step++;\n this.render();\n }, this)\n });\n break;\n case 4:\n let invalidDrawings = [];\n _.each(this.model.drawings.models, function (drawing) {\n if (drawing.get('isDeleted')) {\n return;\n }\n\n let isValid = true;\n if (_.find(this.model.drawings.models, function (existingDrawing) {\n return existingDrawing.get('name') === drawing.get('name') && existingDrawing.id !== drawing.id && !existingDrawing.get('isDeleted');\n }) != null) {\n invalidDrawings.push(drawing);\n isValid = false;\n }\n let $drawing = this.getBatchDrawingElement(drawing);\n PJQ.helpers.inputHelpers.setInputError($drawing.find('.input-drawing-name'), isValid);\n }, this);\n\n if (_.size(invalidDrawings) > 0) {\n this.setBatchError(\"Some drawings have duplicated names, please fix these before finalizing\");\n } else {\n this.setBatchError();\n this.options.step++;\n this.render();\n }\n break;\n default:\n this.options.step++;\n this.render();\n break;\n }\n },\n setBatchError: function (error) {\n let $err = this.$('.batch-error');\n if (error != null) {\n $err.html(error);\n } else {\n $err.empty();\n }\n },\n versionNameChanged: function (e) {\n let val = $(e.currentTarget).val(),\n valLen = _.size(val);\n if (valLen > 0 && e.keyCode === 13) {\n this.nextStep();\n return;\n }\n this.model.version.set(\"name\", val);\n this.$(\".btn-next-step\").prop('disabled', valLen === 0);\n this.validateNewVersion();\n },\n useNewVersion: function () {\n this.$('.checkbox-new-version').prop('checked', true);\n this.$('.checkbox-existing-version').prop('checked', false);\n this.$('.new-version').removeClass('disabled');\n this.$('.existing-versions').addClass('disabled');\n this.model.version = new PJQ.models.drawings.Version({\n projectId: this.options.project.id,\n name: this.$('.input-version-name').val()\n });\n },\n useExistingVersion: function () {\n this.$('.checkbox-existing-version').prop('checked', true);\n this.$('.checkbox-new-version').prop('checked', false);\n this.$('.existing-versions').removeClass('disabled');\n this.$('.new-version').addClass('disabled');\n this.$(\".btn-next-step\").prop('disabled', false);\n this.model.version = this.options.versions.get(this.$('.existing-version.selected').data('cid'));\n },\n existingVersionSelected: function (e) {\n let $target = $(e.currentTarget);\n this.$('.existing-version').removeClass('selected');\n $target.addClass('selected');\n this.model.version = this.options.versions.get($target.data('cid'));\n },\n viewBatchDrawing: function (e) {\n this.$el.addClass('hidden');\n\n let $drawing = $(e.currentTarget).closest('.batch-drawing'),\n cid = $drawing.data('cid'),\n drawing = this.model.drawings.get(cid);\n new PJQ.views.drawings.DrawingViewer({\n model: drawing,\n batch: this.model,\n showSortableViewLink: false,\n isEdit: true,\n versions: this.options.versions,\n onClose: (changed) => {\n this.$el.removeClass('hidden');\n if (changed) {\n this.render();\n }\n }\n });\n },\n rotateBatchDrawing90Clicked: function (e) {\n let $row = $(e.currentTarget).closest('.batch-drawing'),\n cid = $row.data('cid'),\n drawing = this.model.drawings.get(cid);\n this.rotateDrawing(drawing, 90);\n },\n rotateBatchDrawing180Clicked: function (e) {\n let $row = $(e.currentTarget).closest('.batch-drawing'),\n cid = $row.data('cid'),\n drawing = this.model.drawings.get(cid);\n this.rotateDrawing(drawing, 180);\n },\n rotateBatchDrawing270Clicked: function (e) {\n let $row = $(e.currentTarget).closest('.batch-drawing'),\n cid = $row.data('cid'),\n drawing = this.model.drawings.get(cid);\n this.rotateDrawing(drawing, 270);\n },\n rotateDrawing: function (drawing, degrees) {\n let $drawing = this.getBatchDrawingElement(drawing),\n rotateLoader = new PJQ.Loader($drawing);\n drawing.rotate(degrees, _.bind(function () {\n rotateLoader.remove();\n $drawing.find('.batch-drawing-thumb').attr('src', drawing.thumbUrl());\n $drawing.find('.batch-drawing-crop').attr('src', drawing.cropUrl());\n this.renderBatchDrawing(drawing);\n }, this));\n },\n deleteBatchDrawing: function (e) {\n let $row = $(e.currentTarget).closest('.batch-drawing'),\n cid = $row.data('cid'),\n drawing = this.model.drawings.get(cid);\n drawing.set('isDeleted', true);\n $row.remove();\n this.renderBatchHeader();\n },\n drawingBlur: function () {\n this.$('.batch-drawing').removeClass('focus');\n },\n drawingFocus: function (e) {\n let $target = $(e.currentTarget),\n $drawing = $target.closest('.batch-drawing');\n this.drawingBlur();\n $drawing.addClass('focus');\n $target.select();\n },\n drawingCenter: function ($drawing) {\n this.$el.scrollTop($drawing.position().top - $drawing.height())\n },\n drawingNameKeydown: function (e) {\n let $drawing = $(e.currentTarget).closest('.batch-drawing');\n if (e.which === 13 || (e.shiftKey && e.which === 40)) {\n let $next = this.nextDrawing($drawing);\n if (_.size($next) > 0) {\n $next.find('.input-drawing-name').focus();\n } else {\n this.firstDrawing().find('.input-drawing-title').focus();\n }\n } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n let $prev = this.prevDrawing($drawing);\n $prev.find('.input-drawing-name').focus();\n }\n },\n drawingNameChanged: function (e) {\n let $target = $(e.target),\n $drawing = $target.closest('.batch-drawing'),\n cid = $drawing.data('cid'),\n drawing = this.model.drawings.get(cid),\n name = $target.val(),\n matchedDrawing = null;\n _.each(this.options.versions.models, function (version) {\n if (matchedDrawing == null) {\n _.each(version.drawings.models, function (drawing) {\n if (drawing.get('name') === name && (matchedDrawing == null || _.size(matchedDrawing.get('title')) === 0)) {\n matchedDrawing = drawing;\n }\n });\n }\n });\n\n if (matchedDrawing != null) {\n let title = matchedDrawing.get('title'),\n tags = matchedDrawing.get('tags');\n drawing.set({\n name: name,\n title: title,\n tags: tags\n });\n $drawing.find('.input-drawing-title').val(title);\n this.renderDrawingTags(drawing, null);\n } else {\n drawing.set({\n name: name\n });\n }\n\n this.renderBatchDrawing(drawing);\n },\n drawingTitleKeydown: function (e) {\n let $drawing = $(e.currentTarget).closest('.batch-drawing');\n if (e.which === 13 || (e.shiftKey && e.which === 40)) {\n let $next = this.nextDrawing($drawing);\n if (_.size($next) > 0) {\n $next.find('.input-drawing-title').focus();\n } else {\n this.firstDrawing().find('.input-drawing-tag').focus();\n }\n } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n let $prev = this.prevDrawing($drawing);\n $prev.find('.input-drawing-title').focus();\n return false;\n }\n },\n drawingTitleChanged: function (e) {\n let $target = $(e.currentTarget),\n cid = $target.closest('.batch-drawing').data('cid'),\n drawing = this.model.drawings.get(cid);\n drawing.set('title', $target.val());\n },\n drawingTagKeydown: function (e) {\n let $target = $(e.currentTarget),\n tag = $target.val(),\n $drawing = $target.closest('.batch-drawing'),\n drawing = this.model.drawings.get($drawing.data('cid'));\n if (e.shiftKey && (e.which === 13 || e.which === 40)) {\n let $next = this.nextDrawing($drawing);\n $next.find('.input-drawing-tag').focus();\n return false;\n } else if (e.shiftKey && (e.which === 8 || e.which === 38)) {\n let $prev = this.prevDrawing($drawing);\n $prev.find('.input-drawing-tag').focus();\n return false;\n } else if (e.which === 13) {\n this.addDrawingTags(drawing, tag);\n $target.val('');\n return false;\n } else if (e.which === 9) {\n this.nextDrawing($drawing);\n }\n },\n firstDrawing: function () {\n let $firstDrawing = this.$('.batch-drawing').first();\n this.drawingCenter($firstDrawing);\n return $firstDrawing;\n },\n prevDrawing: function ($drawing) {\n let $prevDrawing = $drawing.prev();\n if (_.size($prevDrawing) > 0) {\n this.drawingCenter($prevDrawing);\n }\n return $prevDrawing;\n },\n nextDrawing: function ($drawing) {\n let $nextDrawing = $drawing.next();\n if (_.size($nextDrawing) > 0) {\n this.drawingCenter($nextDrawing);\n }\n return $nextDrawing;\n },\n drawingTagChanged: function (e) {\n let $target = $(e.currentTarget);\n $target.siblings('.btn-add-drawing-tag').prop('disabled', _.size($target.val()) === 0);\n },\n addDrawingTagClicked: function (e) {\n let $target = $(e.currentTarget),\n $drawing = $target.closest('.batch-drawing'),\n $tag = $drawing.find('.input-drawing-tag'),\n tag = $tag.val();\n if (_.size(tag) > 0) {\n let drawing = this.model.drawings.get($drawing.data('cid'));\n this.addDrawingTags(drawing, tag);\n $tag.val('');\n }\n },\n deleteTagClicked: function (e) {\n let $target = $(e.currentTarget),\n tagName = $target.closest('.drawing-tag').data('name'),\n $drawing = $target.closest('.batch-drawing'),\n drawing = this.model.drawings.get($drawing.data('cid'));\n drawing.deleteTag(tagName, null, _.bind(function () {\n this.refreshTags();\n this.renderDrawingTags(drawing, _.bind(function ($drawing) {\n $drawing.find('.input-drawing-tag').focus();\n }, this));\n }, this));\n },\n addDrawingTags: function (drawing, tag) {\n let tags = [];\n if (_.size(tag) > 0) {\n _.each(tag.split(','), function (tag) {\n let tagTrim = tag.trim();\n if (_.size(tagTrim) > 0) {\n tags.push(tagTrim);\n }\n });\n }\n\n drawing.addTags(tags, {\n save: false\n }, _.bind(function () {\n this.refreshTags();\n this.renderDrawingTags(drawing, _.bind(function ($drawing) {\n $drawing.find('.input-drawing-tag').focus();\n }, this));\n }, this));\n },\n renderDrawingTags: function (drawing, callback) {\n let $drawing = this.getBatchDrawingElement(drawing);\n this.renderSubTemplate(false, this.options.subTemplates.drawingTags, $drawing.find('.drawing-tags'), {\n tags: drawing.get('tags')\n }, function () {\n if (typeof callback === 'function') {\n callback($drawing);\n }\n });\n },\n refreshTags: function () {\n let batchTags = [];\n _.each(this.model.drawings.models, function (drawing) {\n let drawingTags = drawing.get('tags');\n if (_.size(drawingTags) > 0) {\n batchTags.push(...drawingTags);\n }\n });\n\n this.options.tags = [];\n _.each(_.union(_.uniq(batchTags), this.options.versions.getDrawingTags()), _.bind(function (tag) {\n if (_.size(tag) > 0 && this.options.tags.indexOf(tag) === -1) {\n this.options.tags.push(tag);\n }\n }, this));\n },\n addAllToCurrentSetChanged: function (e) {\n this.addAllToCurrent($(e.currentTarget).prop('checked'));\n },\n addAllToCurrent: function (shouldAdd) {\n this.$('.checkbox-add-all-current-set,.checkbox-add-current-set').prop('checked', shouldAdd);\n _.each(this.model.drawings.models, function (drawing) {\n drawing.set('isCurrentSet', shouldAdd);\n });\n },\n replaceCurrentSetChanged: function (e) {\n let $target = $(e.currentTarget),\n replaceCurrent = $target.prop('checked');\n this.model.set('replaceCurrentSet', replaceCurrent);\n this.addAllToCurrent(true);\n this.renderReplaceCurrentSet();\n },\n renderReplaceCurrentSet: function () {\n this.$('.checkbox-add-all-current-set,.checkbox-add-current-set').prop('disabled', this.model.get('replaceCurrentSet'));\n },\n addToCurrentSetChanged: function (e) {\n let $target = $(e.currentTarget),\n cid = $target.closest('.batch-drawing').data('cid'),\n drawing = this.model.drawings.get(cid),\n addCurrent = $target.prop('checked');\n\n drawing.set('isCurrentSet', addCurrent);\n\n if (!addCurrent) {\n this.$('.checkbox-add-all-current-set').prop('checked', false);\n }\n },\n replaceExistingDrawingChanged: function (e) {\n let $target = $(e.currentTarget),\n cid = $target.closest('.batch-drawing').data('cid'),\n drawing = this.model.drawings.get(cid),\n replaceExisting = $target.prop('checked');\n drawing.set('keepExisting', !replaceExisting);\n },\n cancel: function () {\n if (this.options.step === 4 || this.options.step === 5) {\n new PJQ.views.modals.SaveDontSave({\n header: \"Unsaved Changes\",\n body: \"Do you want to save changes?\",\n onSave: _.bind(function () {\n this.save();\n }, this),\n onDontSave: _.bind(function () {\n this.removeModal();\n }, this)\n });\n } else {\n this.removeModal();\n }\n },\n closeModal: function () {\n this.removeModal();\n if (this.model.statusTimeout != null) {\n clearTimeout(this.model.statusTimeout);\n this.model.statusTimeout = null;\n }\n },\n close: function () {\n if (this.options.step === 3) {\n this.closeModal();\n } else {\n this.cancel();\n }\n },\n save: function () {\n this.model.save(null, {\n success: _.bind(function () {\n this.removeModal();\n }, this)\n });\n },\n autoNotify: function (callback) {\n let verAppend = null,\n verName = '';\n if (this.options.versions != null) {\n let version = this.options.versions.get(this.model.get('versionId'));\n if (version != null) {\n verName = version.get('name');\n verAppend = ' (' + verName + ')';\n }\n }\n\n this.model = new PJQ.models.drawings.DrawingBatchNotification({\n batchId: this.model.id,\n subject: 'Drawings Published to ' + this.options.project.get('projectName') + (verAppend ?? \"\"),\n message: 'New drawings have been published to ' + this.options.project.get('projectName') + ' - Version: ' + verName + '.',\n allProjectContacts: true\n });\n this.model.save(null, {\n notify: false,\n success: () => {\n callback();\n },\n error: () => {\n callback();\n }\n });\n },\n publish: function (callback) {\n let hasNonCurSetPublish = _.find(this.model.drawings.models, function (drawing) {\n return drawing.get('versionId') === this.model.get('versionId') && drawing.get('isCurrentSet') === false;\n }, this) != null,\n fnPublish = (billRawFileUploadId, billDeerfieldTicketId, notes) => {\n new PJQ.Loader(this.$('.modal-content'));\n this.model.save(null, {\n urlOptions: {\n publish: true,\n billRawFileUploadId: billRawFileUploadId,\n billDeerfieldTicketId: billDeerfieldTicketId,\n notes: notes\n },\n success: () => {\n if ((billRawFileUploadId > 0 || billDeerfieldTicketId > 0) && this.model.get('docClerkOrderId') > 0) {\n new PJQ.views.BaseModal({\n header: \"Doc Clerk Order Created\",\n body: 'The Order ID is ' + this.model.get('docClerkOrderId'),\n isShowCancelButton: false\n });\n }\n\n this.autoNotify(() => {\n this.options.versions.fetch({\n success: () => {\n this.removeModal();\n\n if (typeof callback === 'function') {\n callback();\n }\n }\n });\n });\n }\n });\n },\n fnPrePublish = _.bind(function () {\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK) && PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_RAW_FILE_UPLOAD_BILLING)) {\n new PJQ.views.drawings.RawFileUploadBilling({\n onContinue: _.bind(function (rawFileUploadId, deerfieldTicketId, notes) {\n fnPublish(rawFileUploadId, deerfieldTicketId, notes);\n }, this),\n onSkip: _.bind(function () {\n fnPublish();\n }, this)\n });\n } else\n fnPublish();\n }, this);\n\n if (hasNonCurSetPublish) {\n new PJQ.views.BaseModal({\n header: \"Confirm Publish\",\n okButtonText: \"Confirm\",\n isShowSecondaryButton: true,\n secondaryButtonText: \"Cancel\",\n body: \"You have selected for some drawings to not be published as part of the current set. Please confirm this selection.\",\n onOk: _.bind(function () {\n fnPrePublish();\n }, this)\n });\n } else {\n fnPrePublish();\n }\n }\n});\n\nPJQ.views.drawings.RawFileUploadBilling = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Raw-File-Upload-Billing'),\n onSkip: _.noop(),\n onContinue: _.noop()\n },\n events: {\n 'click .billing-skip': 'skipBilling',\n 'click .billing-continue': 'continueBilling'\n },\n afterRender: function () {\n this.$('.billing-id').inputmask({\n alias: \"integer\",\n prefix: \"\",\n digits: 0,\n placeholder: \" \",\n clearMaskOnLostFocus: true,\n rightAlign: false\n });\n\n this.billingReferenceSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('.billing-reference'),\n isIntChoices: false,\n isMultiple: false,\n mustSelectValue: true,\n defaultValue: 'rawFileUploadId'\n });\n },\n skipBilling: function () {\n if (typeof this.options.onSkip === 'function') {\n this.options.onSkip();\n this.removeModal();\n } else\n this.removeModal();\n },\n continueBilling: function () {\n let rawFileUploadId = 0,\n deerfieldTicketId = 0;\n\n if (this.billingReferenceSelectPicker.getValue() === 'rawFileUploadId')\n rawFileUploadId = parseInt(this.$('.billing-id').val());\n else\n deerfieldTicketId = parseInt(this.$('.billing-id').val());\n\n let rawFileUpload = new PJQ.models.rawFileUploads.RawFileUpload({\n rawFileUploadId: rawFileUploadId,\n projectId: PJQ.app.session.project.id\n });\n\n if (rawFileUploadId > 0) {\n rawFileUpload.fetch({\n success: _.bind(function () {\n this.options.onContinue(rawFileUpload.id, null, this.$('.notes').val());\n this.removeModal();\n }, this),\n error: _.bind(function () {\n PJQ.notifications.notify.errorNotify({\n message: 'Raw Upload Id not found, or does not match this Project.'\n });\n }, this)\n });\n } else if (deerfieldTicketId > 0) {\n this.options.onContinue(null, deerfieldTicketId, this.$('.notes').val());\n this.removeModal();\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'Enter Raw Upload Id or Deerfield Ticket Id to continue.'\n });\n }\n }\n});","PJQ.views.drawings.Dashboard = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard'),\n view: 'grid',\n mode: PJQ.constants.drawings.dashboardModes.VIEW,\n subTemplates: {\n versionGrid: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-Grid'),\n versionList: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-List'),\n versionStats: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Version-Stats'),\n versionSelect: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Viewer-Version-Selector'),\n emptyState: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Dashboard-Empty-State')\n },\n isReadOnly: false\n },\n events: {\n 'click .btn-share-drawings': 'shareDrawings',\n 'click .btn-download-all-split': 'downloadAllSplit',\n 'click .btn-download-all-merged': 'downloadAllMerged',\n 'click .btn-download-version-split': 'downloadContextVersionSplit',\n 'click .btn-download-version-merged': 'downloadContextVersionMerged',\n 'click .btn-download-filtered-split': 'downloadFilteredSplit',\n 'click .btn-download-filtered-merged': 'downloadFilteredMerged',\n 'click .btn-download-advanced': 'downloadAdvanced',\n 'click .btn-export-drawing-list': 'exportDrawingList',\n 'click .btn-order-version': 'orderContextVersion',\n 'click .btn-order-filtered': 'orderFiltered',\n 'click .btn-order-advanced': 'orderAdvanced',\n 'click .btn-bulk-tag': 'bulkTag',\n 'click .btn-sort-version': 'sortVersion',\n 'click .btn-save-version': 'saveVersion',\n 'click .btn-edit-version': 'editVersion',\n 'keyup .input-drawing-name': 'drawingNameChanged',\n 'keyup .input-drawing-title': 'drawingTitleChanged',\n 'click .btn-cancel-edit-version': 'cancelEditVersion',\n 'click .btn-new-batch': 'newBatch',\n 'click .version-drawing-outer': 'drawingClicked',\n 'click .version-select': 'versionSelected',\n 'click .btn-manage-versions': 'manageVersions',\n 'click .btn-upload-log': 'viewUploadLog',\n 'keyup .input-drawings-search': 'renderContextVersion',\n 'click .btn-view-grid': 'renderViewGrid',\n 'click .btn-view-list': 'renderViewList',\n 'click .btn-delete-drawing': 'deleteDrawing',\n 'click .btn-drawing-rotate-90': 'rotateBatchDrawing90Clicked',\n 'click .btn-drawing-rotate-180': 'rotateBatchDrawing180Clicked',\n 'click .btn-drawing-rotate-270': 'rotateBatchDrawing270Clicked',\n },\n contextVersion: null,\n beforeFirstRender: function () {\n this.options.canEdit = PJQ.app.session.project != null\n && PJQ.app.session.project.hasPermission('drawings.isAdmin')\n && (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n if (PJQ.app.session.user == null || (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK_COMPANY) && PJQ.app.session.user.id !== 81732 &&\n !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK))) {\n this.options.canEdit = false;\n }\n this.options.canShare = PJQ.app.session.project != null\n && PJQ.app.session.project.hasPermission('drawings.canShare')\n && (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId'))\n && (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_SHARE_PEI)) &&\n (this.options.orderSettings == null || (this.options.orderSettings.get('downloadPerFileFee') === 0 || !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS)));\n\n this.options.canDownload = true;\n this.options.isPaidDownload = false;\n this.options.canOrder = !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DISABLE_ORDER_PRINT);\n\n if (!this.options.orderSettings && PJQ.app.session.project && PJQ.app.session.project.orderSettings)\n this.options.orderSettings = PJQ.app.session.project.orderSettings;\n\n if (this.options.orderSettings && PJQ.app.session.project != null && !PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK)) {\n this.options.canDownload = this.options.orderSettings.get('downloadPerFileFee') === 0 || PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId');\n this.options.isPaidDownload = !(this.options.orderSettings.get('downloadPerFileFee') === 0 || (PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && !PJQ.app.session.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS)));\n }\n\n if (this.options.isReadOnly) {\n this.options.canEdit = false;\n this.options.canShare = false;\n }\n\n if (this.options.project != null) {\n this.options.hideIssuedOn = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n } else {\n this.options.hideIssuedOn = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n }\n\n let fetchCallback = _.bind(function () {\n this.listenTo(this.collection, 'update', _.bind(function () {\n this.render();\n }, this));\n // set the context version to current set if it has drawings\n if (this.options.project != null && this.options.canEdit) {\n PJQ.helpers.drawings.getUnPublishedBatchesCount(this.options.project.id, _.bind(function (batchCount) {\n this.unPublishedBatchCount = batchCount;\n this.render();\n }, this));\n } else {\n this.render();\n }\n }, this);\n if (this.collection == null) {\n this.options.project.fetchVersions(_.bind(function (versions) {\n this.collection = versions;\n fetchCallback();\n }, this));\n } else {\n fetchCallback();\n }\n },\n beforeRender: function () {\n if (this.collection != null) {\n if (this.contextVersion == null && this.options.initOptions?.versionId > 0) {\n let mVersionId = parseInt(this.options.initOptions.versionId);\n this.contextVersion = _.find(this.collection.models, (version) => {\n return version.id === mVersionId;\n });\n console.log({\n versionId: this.options.initOptions.versionId,\n contextVersion: this.contextVersion\n });\n } else if (this.contextVersion == null) {\n this.contextVersion = _.find(this.collection.models, (version) => {\n return version.id === -1;\n });\n }\n\n if (this.contextVersion != null && _.size(this.contextVersion.drawings.models) === 0 && _.size(this.collection.models) > 0) {\n this.contextVersion = this.contextVersion = _.find(this.collection.models, function (version) {\n return _.size(version.drawings.models) > 0;\n });\n }\n\n if (this.contextVersion == null && _.size(this.collection.models) > 0) {\n this.contextVersion = this.collection.models[0];\n }\n }\n },\n renderData: function () {\n return {\n hideIssuedOn: this.options.hideIssuedOn,\n canEdit: this.options.canEdit,\n canShare: this.options.canShare,\n canDownload: this.options.canDownload,\n canOrder: this.options.canOrder,\n isPaidDownload: this.options.isPaidDownload,\n drawingCount: this.collection ? this.collection.getDrawingCount() : 0,\n versions: this.collection,\n view: this.options.view,\n mode: this.options.mode,\n search: this.options.search,\n contextVersion: this.contextVersion,\n unPublishedBatchCount: this.unPublishedBatchCount\n };\n },\n afterRender: function () {\n if (this.collection != null) {\n if (this.collection.getDrawingCount() > 0) {\n this.tagSelectPicker = new PJQ.inputs.Selectpicker({\n el: this.$('select.drawings-filter'),\n defaultValue: this.filterTags,\n noneSelectedText: 'Filter Tags',\n isMultiple: true,\n onChange: _.bind(function (value) {\n this.filterTags = value;\n this.renderContextVersion();\n }, this)\n });\n this.renderContextVersion();\n if (this.scrollTop > 0) {\n this.$('.version-drawings').scrollTop(this.scrollTop);\n this.scrollTop = null;\n }\n } else if (this.collection.isFetched) {\n this.renderEmptyState();\n }\n }\n },\n refresh: function () {\n this.scrollTop = $('.version-drawings').scrollTop();\n this.render();\n },\n deleteDrawing: function (e) {\n e.stopPropagation();\n\n let $drawing = $(e.currentTarget).closest('.version-drawing-outer'),\n drawing = this.contextVersion.drawings.get($drawing.data('cid')),\n self = this;\n new PJQ.views.modals.DeleteVersionModal({\n onDeleteInAll: function () {\n drawing.destroy({\n success: function () {\n _.each(self.collection.models, function (version) {\n let verDrawing = _.find(version.drawings.models, function (compDrawing) {\n return drawing.get('name') === compDrawing.get('name');\n });\n if (verDrawing != null) {\n verDrawing.destroy();\n version.drawings.remove(verDrawing);\n }\n });\n $drawing.parent().remove();\n }\n });\n },\n onDeleteInThis: function () {\n drawing.destroy({\n success: function () {\n let curSet = self.collection.get(-1);\n if (curSet != null) {\n let verDrawing = _.find(curSet.drawings.models, function (compDrawing) {\n return drawing.get('name') === compDrawing.get('name');\n });\n if (verDrawing != null) {\n verDrawing.destroy();\n curSet.drawings.remove(verDrawing);\n }\n }\n $drawing.parent().remove();\n }\n });\n }\n });\n },\n rotateBatchDrawing90Clicked: function (e) {\n e.stopPropagation();\n this.rotateDrawing(e, 90);\n },\n rotateBatchDrawing180Clicked: function (e) {\n e.stopPropagation();\n this.rotateDrawing(e, 180);\n },\n rotateBatchDrawing270Clicked: function (e) {\n e.stopPropagation();\n this.rotateDrawing(e, 270);\n },\n rotateDrawing: function (e, degrees) {\n let $drawing = $(e.currentTarget).closest('.version-drawing-outer'),\n drawing = this.contextVersion.drawings.get($drawing.data('cid')),\n rotateLoader = new PJQ.Loader($drawing);\n drawing.rotate(degrees, _.bind(function () {\n rotateLoader.remove();\n $drawing.find('.version-drawing').attr('src', drawing.thumbUrl());\n rotateLoader.remove();\n }, this));\n },\n updateTagChoices: function () {\n if (this.tagSelectPicker != null) {\n let tags = this.contextVersion.getDrawingTags().sort(PJQ.helpers.sortHelpers.sortAlphaNum);\n this.tagSelectPicker.updateChoices(tags);\n }\n },\n renderViewGrid: function () {\n this.$('.btn-view-grid').removeClass('btn-light').addClass('btn-primary');\n this.$('.btn-view-list').removeClass('btn-primary').addClass('btn-light');\n this.options.view = 'grid';\n this.renderContextVersion();\n },\n renderViewList: function () {\n this.$('.btn-view-list').removeClass('btn-light').addClass('btn-primary');\n this.$('.btn-view-grid').removeClass('btn-primary').addClass('btn-light');\n this.options.view = 'list';\n this.renderContextVersion();\n },\n saveVersion: function () {\n this.contextVersion.drawings.options.project = this.options.project;\n\n let valid = true;\n _.each(this.contextVersion.drawings.models, function (drawing) {\n let thisValid = null == _.find(this.contextVersion.drawings.models, function (compareDrawing) {\n return drawing.cid !== compareDrawing.cid && drawing.get('name') === compareDrawing.get('name');\n });\n valid = valid && thisValid;\n\n let $drawing = this.$('.version-drawing-outer[data-cid=\"' + drawing.cid + '\"]');\n PJQ.helpers.inputHelpers.setInputError($drawing.find('.input-drawing-name'), thisValid);\n }, this);\n\n if (!valid) {\n if (this.duplicateNameAlert == null) {\n this.duplicateNameAlert = new PJQ.Alert(this.$('.version-drawings'), {\n type: 'danger',\n isBefore: true,\n text: 'Some of the drawings have duplicated names. Drawing names must be unique per version.',\n extraClasses: ['alert-duplicate-name']\n });\n }\n return;\n } else if (this.duplicateNameAlert != null) {\n this.duplicateNameAlert.destroy();\n this.duplicateNameAlert = null;\n }\n\n this.contextVersion.drawings.save({\n put: true,\n urlOptions: {\n isFileAPI: true\n },\n success: _.bind(function () {\n _.each(this.contextVersion.drawings.models, function (contextDrawing) {\n _.each(this.collection.models, function (version) {\n _.each(version.drawings.models, function (otherDrawing) {\n if (otherDrawing.get('name') === contextDrawing.get('name')) {\n otherDrawing.set('title', contextDrawing.get('title'), {\n silent: true\n });\n }\n });\n });\n }, this);\n\n this.options.mode = PJQ.constants.drawings.dashboardModes.VIEW;\n this.render();\n }, this)\n });\n },\n bulkTag: function () {\n new PJQ.views.drawings.BulkTagModal({\n collection: this.collection,\n onClose: _.bind(function () {\n this.render();\n }, this)\n });\n },\n sortVersion: function () {\n new PJQ.views.drawings.SortDrawingsModal({\n versions: this.collection,\n sortVersion: this.contextVersion,\n sortFullSet: true,\n onDone: _.bind(function () {\n this.render();\n }, this)\n });\n },\n editVersion: function () {\n this.options.mode = PJQ.constants.drawings.dashboardModes.EDIT;\n this.render();\n },\n cancelEditVersion: function () {\n _.each(this.contextVersion.drawings.models, function (drawing) {\n drawing.restore();\n });\n this.options.mode = PJQ.constants.drawings.dashboardModes.VIEW;\n this.render();\n },\n getFilteredDrawings: function () {\n this.options.search = this.$('.input-drawings-search').val().toLowerCase();\n\n let result,\n isSearch = _.size(this.options.search) > 0,\n isFilterTags = _.size(this.filterTags) > 0;\n if (isSearch || isFilterTags) {\n result = [];\n _.each(this.contextVersion.drawings.models, _.bind(function (drawing) {\n if (isSearch && drawing.get('name').toLowerCase().indexOf(this.options.search) === -1 && drawing.get('title').toLowerCase().indexOf(this.options.search) === -1) {\n return false;\n }\n if (isFilterTags && _.find(this.filterTags, function (filterTag) {\n return _.find(drawing.get('tags'), function (drawingTag) {\n return filterTag === drawingTag;\n }) != null;\n }) == null) {\n return false;\n }\n result.push(drawing);\n }, this));\n } else {\n result = this.contextVersion.drawings.models;\n }\n return result;\n },\n renderEmptyState: function () {\n this.renderSubTemplate(false, this.options.subTemplates.emptyState, this.$('.version-drawings'), {\n canEdit: this.options.canEdit\n });\n },\n renderContextVersion: function () {\n if (this.options.mode === PJQ.constants.drawings.dashboardModes.VIEW && this.contextVersion.get('issuedOn') != null) {\n this.renderVersionSelector();\n }\n\n this.$('.selector-version-name,.context-version-name').text(this.contextVersion.get('name'));\n this.$('.context-version-issued').text(PJQ.helpers.dateHelpers.getDateString(new Date(this.contextVersion.get('issuedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE, true));\n this.$('.context-version-drawing-count').text(_.size(this.contextVersion.drawings.models));\n this.updateTagChoices();\n let versionTmpl;\n if (this.options.view === 'list') {\n versionTmpl = this.options.subTemplates.versionList;\n } else {\n versionTmpl = this.options.subTemplates.versionGrid;\n }\n this.renderSubTemplate(false, versionTmpl, this.$('.version-drawings'), {\n mode: this.options.mode,\n versions: this.collection,\n canEdit: this.options.canEdit,\n drawings: this.getFilteredDrawings()\n }, _.bind(function () {\n PJQ.app.lazyLoad().update();\n this.renderSubTemplate(false, this.options.subTemplates.versionStats, this.$('.version-stats'), {\n versions: this.collection,\n contextVersion: this.contextVersion\n });\n }, this));\n },\n newBatch: function () {\n new PJQ.views.drawings.DrawingBatchModal({\n versions: this.collection,\n project: this.options.project\n });\n },\n drawingNameChanged: function (e) {\n let $target = $(e.currentTarget),\n $drawing = $target.closest('.version-drawing-outer'),\n cid = $drawing.data('cid'),\n drawing = this.contextVersion.drawings.get(cid),\n name = $target.val();\n drawing.set('name', name);\n },\n drawingTitleChanged: function (e) {\n let $target = $(e.currentTarget),\n cid = $target.closest('.version-drawing-outer').data('cid'),\n drawing = this.contextVersion.drawings.get(cid);\n drawing.set('title', $target.val());\n },\n drawingClicked: function (e) {\n let cid = $(e.currentTarget).data('cid'),\n drawing = this.contextVersion.drawings.get(cid);\n\n let initViewer = _.bind(function () {\n new PJQ.views.drawings.DrawingViewer({\n model: drawing,\n project: this.options.project,\n forShare: this.options.forShare,\n isEdit: this.options.mode === PJQ.constants.drawings.dashboardModes.EDIT,\n canEdit: this.options.canEdit,\n contextVersion: this.contextVersion,\n accessKey: this.options.accessKey,\n versions: this.collection,\n onClose: _.bind(function (changed) {\n if (changed) {\n this.refresh();\n }\n }, this),\n onDelete: _.bind(function () {\n this.refresh();\n }, this)\n });\n }, this);\n if (this.options.project != null) {\n this.options.project.checkDownloadRequirements(_.bind(function () {\n initViewer();\n }, this));\n } else {\n initViewer();\n }\n },\n versionSelected: function (e) {\n let cid = $(e.currentTarget).data('cid');\n if (cid != null) {\n this.contextVersion = this.collection.get(cid);\n this.renderContextVersion();\n }\n },\n renderVersionSelector: function () {\n let $versionSelect = this.$('.drawing-versions');\n this.renderSubTemplate(false, this.options.subTemplates.versionSelect, $versionSelect, {\n versions: _.filter(this.collection.models, function (ver) {\n return _.size(ver.drawings) > 0;\n }),\n hideIssuedOn: this.options.hideIssuedOn,\n contextVersion: this.contextVersion,\n currentSet: this.collection.get(-1)\n });\n },\n manageVersions: function () {\n new PJQ.views.drawings.ManageVersionsModal({\n collection: this.collection,\n project: this.options.project,\n });\n },\n viewUploadLog: function () {\n new PJQ.views.drawings.DrawingUploadLogModal({\n project: this.options.project,\n versions: this.collection\n });\n },\n shareDrawings: function () {\n new PJQ.views.drawings.DrawingShareModal({\n collection: this.collection,\n onSave: _.bind(function (versions) {\n let shareDrawings = new PJQ.collections.drawings.Drawings(),\n versionIds = [];\n\n shareDrawings.options.allDrawings = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.DRAWING_SHARE_PREVENT_EXPIRATION);\n\n _.each(versions, function (version) {\n versionIds.push(version.versionId);\n _.each(version.guids, function (guid) {\n shareDrawings.add(new PJQ.models.drawings.Drawing({\n guid: guid\n }));\n });\n });\n let sharingModal = new PJQ.views.sharing.SharingModal({\n collection: shareDrawings,\n subject: 'Drawings have been shared with you',\n onSave: _.bind(function (data) {\n shareDrawings.share(versionIds, null, data, this.options.project, _.bind(function (share) {\n PJQ.notifications.notify.successNotify({\n message: 'Drawing share email sent'\n });\n }, this));\n }, this)\n });\n shareDrawings.share(versionIds, null, null, this.options.project, function (share) {\n let callback = _.bind(sharingModal.urlChanged, sharingModal);\n callback(share.url);\n });\n }, this)\n });\n },\n downloadDrawings: function (drawings, options) {\n let download = _.bind(function () {\n PJQ.helpers.drawings.createDownload(this.options.project, [{\n versionId: this.contextVersion.id,\n guids: _.map(drawings, function (drawing) {\n return drawing.get('guid');\n })\n }], options);\n }, this);\n if (this.options.project != null) {\n this.options.project.checkDownloadRequirements(_.bind(function () {\n download();\n }, this));\n } else {\n download();\n }\n },\n downloadContextVersionSplit: function () {\n if (this.options.isPaidDownload) {\n let entryIds = [];\n _.each(this.contextVersion.drawings.models, function (model) {\n entryIds.push(model.get('drawingId') * -1);\n });\n\n if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n new PJQ.views.drawings.OrderDownloadAdmin({\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.DOWNLOAD,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n }\n } else {\n this.downloadDrawings(this.contextVersion.drawings.models);\n }\n },\n downloadContextVersionMerged: function () {\n this.downloadDrawings(this.contextVersion.drawings.models, {\n merge: true\n });\n },\n downloadFilteredSplit: function () {\n if (this.options.isPaidDownload) {\n let entryIds = [];\n _.each(this.getFilteredDrawings(), function (model) {\n entryIds.push(model.get('drawingId') * -1);\n });\n\n if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n new PJQ.views.drawings.OrderDownloadAdmin({\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.DOWNLOAD,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n }\n } else {\n this.downloadDrawings(this.getFilteredDrawings());\n }\n\n },\n downloadFilteredMerged: function () {\n this.downloadDrawings(this.getFilteredDrawings(), {\n merge: true\n });\n },\n downloadAdvanced: function () {\n new PJQ.views.drawings.AdvancedDownloadModal({\n project: this.options.project,\n orderSettings: this.options.orderSettings,\n collection: this.collection,\n isPaidDownload: this.options.isPaidDownload\n });\n },\n exportDrawingList: function () {\n PJQ.files.downloadFile(PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'export'\n }\n ]));\n },\n orderContextVersion: function () {\n let entryIds = [];\n _.each(this.contextVersion.drawings.models, function (model) {\n entryIds.push(model.get('drawingId') * -1);\n });\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.PRINT,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n\n },\n orderFiltered: function () {\n let entryIds = [];\n _.each(this.getFilteredDrawings(), function (model) {\n entryIds.push(model.get('drawingId') * -1);\n });\n if (_.size(entryIds) > 0) {\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.PRINT,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n PJQ.notifications.notify.errorNotify({\n message: 'No drawings in filter'\n });\n }\n\n },\n orderAdvanced: function () {\n new PJQ.views.drawings.AdvancedDownloadModal({\n project: this.options.project,\n orderSettings: this.options.orderSettings,\n collection: this.collection,\n isPaidDownload: false,\n isPrintOrder: true\n });\n }\n});\n\nPJQ.views.drawings.DrawingShareModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Drawing-Share'),\n onSave: null\n },\n defaultEvents: {\n 'click .btn-cancel': 'removeModal',\n 'click .btn-save': 'save'\n },\n beforeModalCreated: function () {\n this.selectedVersions = [];\n },\n afterRender: function () {\n new PJQ.views.drawings.DrawingSelectorTree({\n el: this.$('.drawings-tree'),\n collection: this.collection,\n onChange: _.bind(function (versions) {\n this.selectedVersions = versions;\n }, this)\n });\n },\n renderData: function () {\n return {\n collection: this.collection\n };\n },\n save: function () {\n if (typeof this.options.onSave === 'function') {\n this.options.onSave(this.selectedVersions);\n }\n this.removeModal();\n }\n});\n\nPJQ.views.drawings.DrawingSelectorTree = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Selector-Tree'),\n flatten: false,\n onChange: null\n },\n events: {\n 'click .version-expand': 'expandVersion',\n 'change .cb-version': 'versionSelected',\n 'change .cb-drawing': 'drawingSelected'\n },\n beforeFirstRender: function () {\n this.selectedVersions = [];\n this.selectedDrawings = [];\n this.drawings = this.collection.getUniqueDrawings();\n },\n renderData: function () {\n return {\n versions: this.collection.models,\n drawings: this.drawings,\n flatten: this.options.flatten\n };\n },\n flatten: function (flatten) {\n this.options.flatten = flatten;\n this.render();\n },\n expandVersion: function (e) {\n let $outer = $(e.currentTarget).closest('.version-outer'),\n $drawings = $outer.find('.version-drawings');\n $drawings.toggleClass('hidden');\n },\n versionSelected: function (e) {\n let $target = $(e.currentTarget),\n $outer = $target.closest('.version-outer'),\n isSelected = $target.prop('checked'),\n versionCid = $target.data('versionCid'),\n version = this.collection.get(versionCid);\n\n if (isSelected) {\n let selectedVersion = _.findWhere(this.selectedVersions, {versionId: version.id});\n if (selectedVersion == null) {\n selectedVersion = {\n versionId: version.id,\n };\n }\n selectedVersion.guids = _.map(version.drawings.models, function (drawing) {\n return drawing.get('guid');\n });\n selectedVersion.ids = _.map(version.drawings.models, function (drawing) {\n return drawing.id;\n });\n\n if (_.size(selectedVersion.guids) > 0 || _.size(selectedVersion.ids) > 0) {\n this.selectedVersions.push(selectedVersion);\n }\n } else {\n this.selectedVersions = _.filter(this.selectedVersions, function (deleteVersion) {\n return deleteVersion.versionId !== version.id;\n });\n }\n $outer.find('.cb-drawing').prop('checked', isSelected);\n this.onChange();\n },\n drawingSelected: function (e) {\n let $target = $(e.currentTarget),\n isSelected = $target.prop('checked'),\n drawingCid = $target.data('drawingCid');\n\n if (this.options.flatten) {\n let drawing = _.find(this.drawings, function (drawing) {\n return drawing.cid === drawingCid;\n });\n if (isSelected && !_.contains(this.selectedDrawings, drawing.id)) {\n this.selectedDrawings.push(drawing.id);\n } else {\n this.selectedDrawings = _.without(this.selectedDrawings, drawing.id);\n }\n } else {\n let $outer = $target.closest('.version-outer'),\n $cbVersion = $outer.find('.cb-version'),\n versionCid = $target.data('versionCid'),\n version = this.collection.get(versionCid),\n drawing = _.find(version.drawings.models, function (drawing) {\n return drawing.cid === drawingCid;\n }),\n selectedVersion = _.findWhere(this.selectedVersions, {versionId: version.id});\n if (isSelected) {\n if (selectedVersion == null) {\n selectedVersion = {\n versionId: version.id,\n guids: [drawing.get('guid')],\n ids: [drawing.id]\n };\n this.selectedVersions.push(selectedVersion);\n } else {\n selectedVersion.guids.push(drawing.get('guid'));\n selectedVersion.ids.push(drawing.id);\n }\n\n if (_.size($outer.find(\".cb-drawing:not(:checked)\")) === 0) {\n $cbVersion.prop('checked', true);\n }\n } else if (selectedVersion != null) {\n selectedVersion.guids = _.without(selectedVersion.guids, drawing.get('guid'));\n selectedVersion.ids = _.without(selectedVersion.ids, drawing.id);\n if (_.size(selectedVersion.guids) === 0) {\n this.selectedVersions = _.filter(this.selectedVersions, function (deleteVersion) {\n return deleteVersion.versionId !== version.id;\n });\n }\n\n $cbVersion.prop('checked', false);\n }\n }\n\n this.onChange();\n },\n onChange: function () {\n if (typeof this.options.onChange === 'function') {\n this.options.onChange(this.options.flatten ? this.selectedDrawings : this.selectedVersions);\n }\n }\n});\n\nPJQ.views.modals.DeleteVersionModal = PJQ.views.BaseModal.extend({\n defaults: {\n header: \"Confirm Delete\",\n body: \"Where would you like to delete this drawing from?\"\n },\n beforeModalCreated: function () {\n this.options = _.defaults({\n isShowOkButton: true,\n okButtonText: 'All Versions',\n okButtonColorClass: 'danger',\n onOk: _.bind(function () {\n if (typeof this.options.onDeleteInAll === 'function') {\n this.options.onDeleteInAll();\n }\n }, this),\n isShowSecondaryButton: true,\n secondaryButtonColorClass: 'outline-danger',\n secondaryButtonText: 'This Version',\n onSecondary: _.bind(function () {\n if (typeof this.options.onDeleteInThis === 'function') {\n this.options.onDeleteInThis();\n }\n }, this),\n isShowCancelButton: true,\n cancelButtonText: \"Cancel\",\n onClose: _.bind(function () {\n if (typeof this.options.onCancel === 'function') {\n this.options.onCancel();\n }\n }, this)\n }, this.options);\n }\n});\n\nPJQ.views.drawings.BulkTagModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Bulk-Tag'),\n subTemplates: {\n drawingTags: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Tags'),\n },\n onClose: null\n },\n defaultEvents: {\n 'change .cb-specify-version': 'renderDrawingSelector',\n 'click .btn-add-tag': 'addTag',\n 'click .btn-delete-tag': 'deleteTag',\n 'keyup .input-tag': 'tagChanged',\n 'click .btn-close': 'close'\n },\n afterRender: function () {\n this.renderDrawingSelector();\n this.renderExistingTags();\n },\n renderDrawingSelector: function () {\n this.selectedVersions = [];\n this.selectedDrawings = [];\n let flatten = !this.$('.cb-specify-version').prop('checked');\n if (this.drawingSelector == null) {\n this.drawingSelector = new PJQ.views.drawings.DrawingSelectorTree({\n el: this.$('.drawings-tree'),\n flatten: !this.$('.cb-specify-version').prop('checked'),\n collection: this.collection,\n onChange: _.bind(function (data) {\n if (!this.$('.cb-specify-version').prop('checked')) {\n this.selectedDrawings = data;\n } else {\n this.selectedVersions = data;\n }\n this.renderExistingTags();\n this.validateTag();\n }, this)\n });\n } else {\n this.drawingSelector.flatten(flatten);\n }\n },\n tagChanged: function (e) {\n if (e.keyCode === 13) {\n this.addTag();\n return;\n }\n\n this.validateTag();\n },\n validateTag: function () {\n let tag = this.$('.input-tag').val();\n this.$('.btn-add-tag').prop('disabled', _.size(this.getSelectedDrawingIds()) === 0 || _.size(tag) === 0);\n },\n getInputTags: function () {\n let tagString = $('.input-tag').val(),\n tags = [];\n if (_.size(tagString) > 0) {\n _.each(tagString.split(','), function (tag) {\n let tagTrim = tag.trim();\n if (_.size(tagTrim) > 0) {\n tags.push(tagTrim);\n }\n });\n }\n return tags;\n },\n getSelectedDrawingIds: function () {\n let drawingIds = [];\n _.each(this.selectedVersions, function (version) {\n drawingIds.push(...version.ids);\n });\n drawingIds.push(...this.selectedDrawings);\n return drawingIds;\n },\n endpoint: function (allVersions = false, isDelete = false) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: PJQ.app.session.project.id\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'tags'\n }\n ], [\n {\n parameter: 'delete',\n value: isDelete\n },\n {\n parameter: 'allVersions',\n value: allVersions\n }\n ]);\n },\n renderExistingTags: function () {\n let tags = [];\n if (_.size(this.selectedVersions) > 0) {\n _.each(this.selectedVersions, _.bind(function (version) {\n let mVer = this.collection.get(version.versionId);\n _.each(version.ids, function (drawingId) {\n let mDr = mVer.drawings.get(drawingId);\n _.each(mDr.get('tags'), function (tag) {\n if (!_.contains(tags, tag)) {\n tags.push(tag);\n }\n });\n });\n }, this));\n }\n\n if (_.size(this.selectedDrawings) > 0) {\n _.each(this.selectedDrawings, _.bind(function (drawingId) {\n _.each(this.collection.models, function (version) {\n let mDr = version.drawings.get(drawingId);\n if (mDr != null) {\n _.each(mDr.get('tags'), function (tag) {\n if (!_.contains(tags, tag)) {\n tags.push(tag);\n }\n });\n }\n });\n }, this));\n }\n this.renderSubTemplate(false, this.options.subTemplates.drawingTags, this.$('.drawing-tags'), {\n tags: tags\n });\n },\n addTag: function () {\n let allVersions = !this.$('.cb-specify-version').prop('checked'),\n tags = this.getInputTags();\n new PJQ.ajax.Request({\n endpoint: this.endpoint(allVersions),\n data: {\n drawingIds: this.getSelectedDrawingIds(),\n tags: tags\n }\n }).post().done(_.bind(function () {\n this.clearTagInput();\n this.alterTags(tags);\n this.renderExistingTags();\n }, this)).fail(function () {\n this.error();\n });\n },\n deleteTag: function (e) {\n let allVersions = !this.$('.cb-specify-version').prop('checked'),\n tag = $(e.currentTarget).closest('.drawing-tag').data('name');\n new PJQ.ajax.Request({\n endpoint: this.endpoint(allVersions, true),\n data: {\n drawingIds: this.getSelectedDrawingIds(),\n tags: [tag]\n }\n }).post().done(_.bind(function (data) {\n this.clearTagInput();\n this.alterTags(tag, true);\n this.renderExistingTags();\n }, this)).fail(function () {\n this.error()\n });\n },\n alterTags: function (tags, isDelete = false) {\n if (_.size(this.selectedVersions) > 0) {\n _.each(this.selectedVersions, _.bind(function (version) {\n let mVer = this.collection.get(version.versionId);\n _.each(version.ids, function (drawingId) {\n let mDr = mVer.drawings.get(drawingId);\n if (isDelete) {\n mDr.deleteTag(tags, {\n save: false\n });\n } else {\n mDr.addTags(tags, {\n save: false\n });\n }\n });\n }, this));\n }\n\n if (_.size(this.selectedDrawings) > 0) {\n _.each(this.selectedDrawings, _.bind(function (drawingId) {\n _.each(this.collection.models, function (version) {\n let mDr = version.drawings.get(drawingId);\n if (mDr != null) {\n if (isDelete) {\n mDr.deleteTag(tags, {\n save: false\n });\n } else {\n mDr.addTags(tags, {\n save: false\n });\n }\n }\n });\n }, this));\n }\n },\n clearTagInput: function () {\n this.$('.input-tag').val('');\n this.validateTag();\n },\n error: function () {\n\n },\n close: function () {\n this.removeModal();\n if (typeof this.options.onClose === 'function') {\n this.options.onClose();\n }\n }\n});\n","PJQ.views.drawings.DrawingViewer = PJQ.views.photos.PhotoViewer.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer'),\n elementId: 'dv-outer',\n subTemplates: {\n versionSelect: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer-version-selector'),\n drawingDetails: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'drawing-viewer-details')\n },\n annotationMenu: {\n type: PJQ.constants.drawings.annotationTypes.INSPECT\n },\n batch: null,\n isAnnotationsEnabled: false,\n onAnnotationChange: null,\n mergeAnnotations: null,\n canEdit: true,\n canAddAnnotations: true,\n shouldCreateCanvas: true,\n noNavigation: false,\n zoomValue: 100,\n snapView: true,\n isEdit: false,\n context: null,\n maxZoom: 500,\n refreshOnResize: true,\n zoomOnMouseWheel: true,\n triggerRoute: false,\n isDisableDownload: false,\n onSortChange: null,\n showSortableViewLink: true,\n keyListeners: [\n {\n which: 27,\n keys: ['Escape', 'Esc'],\n callback: function () {\n this.destroy();\n }\n },\n {\n which: 37,\n callback: function () {\n this.prevDrawing();\n }\n },\n {\n which: 13,\n callback: function () {\n this.nextDrawing();\n }\n },\n {\n which: 66,\n shiftKey: true,\n callback: function () {\n this.prevDrawing();\n }\n },\n {\n which: 39,\n callback: function () {\n this.nextDrawing();\n }\n },\n {\n which: 78,\n shiftKey: true,\n callback: function () {\n this.nextDrawing();\n }\n },\n {\n which: 68,\n shiftKey: true,\n callback: function () {\n this.downloadFile();\n $(window).focus();\n }\n },\n {\n which: 73,\n shiftKey: true,\n callback: function () {\n this.viewDrawingDetails();\n }\n }\n ]\n },\n defaultEvents: {\n 'click .iv-canvas,.iv-active-canvas': 'canvasClicked',\n 'click .version-select': 'versionSelected',\n 'click .btn-prev-drawing': 'prevDrawing',\n 'click .btn-next-drawing': 'nextDrawing',\n 'click .btn-drawing-details': 'viewDrawingDetails',\n 'keyup .input-drawing-name': 'nameChanged',\n 'keyup .input-drawing-title': 'titleChanged',\n 'keyup .input-tag': 'drawingTagInputChanged',\n 'click .btn-add-tag': 'addTag',\n 'click .btn-delete-tag': 'deleteTag',\n 'click .btn-add-to-current': 'addToCurrentSet',\n 'click .btn-remove-from-current': 'removeFromCurrentSet',\n 'click .btn-delete-pub-drawing': 'deletePublishedDrawing',\n 'mouseup .iv-image-view': 'canvasMouseUp',\n 'mousemove .iv-active-canvas': 'canvasMouseMove',\n 'mouseleave .iv-active-canvas': 'canvasMouseLeave'\n },\n beforeRender: function () {\n this.options.project = PJQ.app.session.project;\n if (this.options.project != null) {\n this.options.isAnnotationsEnabled = this.options.batch == null;\n if (this.options.project.orderSettings) {\n this.options.isDisableDownload = this.options.project.orderSettings.get('downloadPerFileFee') > 0 && (PJQ.app.session.get('masterUserId') !== this.options.project.get('masterUserId') || this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_ADMIN_PAID_DOWNLOADS));\n } else {\n this.options.isDisableDownload = true;\n }\n\n if (this.options.versions == null && !this.options.noNavigation) {\n this.options.project.fetchVersions((versions) => {\n this.options.versions = versions;\n });\n }\n } else {\n this.options.isAnnotationsEnabled = this.options.batch == null;\n }\n },\n renderData: function () {\n return {\n options: this.options,\n showNavigationControls: this.options.versions != null\n };\n },\n initViewer: function () {\n // tracking mechanism for if any model was changed in this viewer session\n this.changed = false;\n this.options.canEditDrawing = this.options.canEdit && (!PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK_COMPANY) ||\n PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.IS_DOCUMENT_CLERK));\n\n if (this.options.batch != null) {\n this.options.contextVersion = this.options.batch.version;\n }\n\n this.renderDrawingSelector();\n this.renderDrawingSort();\n this.setDrawing(this.model, this.options.contextVersion);\n },\n renderDrawingSort: function () {\n if (this.options.batch != null) {\n let $sort = this.$('.sort-container');\n new PJQ.views.drawings.SortDrawings({\n el: $sort,\n batch: this.options.batch,\n contextDrawing: this.model,\n showViewLink: this.options.showSortableViewLink,\n versions: this.options.versions,\n onChange: _.bind(function () {\n this.changed = true;\n if (typeof this.options.onSortChange === 'function') {\n this.options.onSortChange();\n }\n }, this)\n });\n $sort.removeClass('hidden');\n }\n },\n viewDrawingDetails: function () {\n let $drawingDetails = this.$('.drawing-details'),\n $btnDetails = this.$('.btn-drawing-details');\n if ($drawingDetails.hasClass('hidden')) {\n $btnDetails.addClass('text-primary');\n $drawingDetails.animateCSS('fadeInRight', _.bind(function () {\n this.refresh();\n }, this));\n } else {\n $btnDetails.removeClass('text-primary');\n $drawingDetails.animateCSS('fadeOutRight', _.bind(function () {\n this.refresh();\n }, this));\n }\n },\n addToCurrentSet: function () {\n new PJQ.views.modals.YesNo({\n header: \"Add to Current Set\",\n body: \"Are you sure you want to add this drawing to the current set? If this sheet number already exists in the current set, it will be replaced by this version.\",\n onYes: _.bind(function () {\n this.model.patch(null, {\n urlOptions: {\n currentSet: true\n },\n success: _.bind(function () {\n this.options.versions.fetch({\n success: _.bind(function () {\n let currentSet = this.options.versions.get(-1);\n if (currentSet != null) {\n let existing = _.findWhere(currentSet.drawings.models, {title: this.model.get('title')});\n // remove any drawings that match this drawings title from the current set\n currentSet.drawings.remove(existing);\n // add this drawing to the current set\n currentSet.drawings.add(this.model);\n }\n this.renderVersionSelector();\n this.renderDrawingDetails();\n }, this)\n });\n }, this)\n });\n }, this)\n });\n },\n removeFromCurrentSet: function () {\n new PJQ.views.modals.YesNo({\n header: \"Add to Current Set\",\n body: \"Are you sure you want to remove this drawing from the current set?\",\n onYes: _.bind(function () {\n this.model.patch(null, {\n urlOptions: {\n currentSet: false\n },\n success: _.bind(function () {\n this.options.versions.fetch({\n success: _.bind(function () {\n let currentSet = this.options.versions.get(-1);\n if (currentSet != null) {\n currentSet.drawings.remove(this.model);\n }\n this.renderVersionSelector();\n this.renderDrawingDetails();\n }, this)\n });\n }, this)\n });\n }, this)\n });\n },\n deletePublishedDrawing: function () {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.model.get('guid')\n },\n {\n endpoint: 'checkattached'\n }\n ])\n }).get().done(_.bind(function (response) {\n new PJQ.views.modals.YesNo({\n header: \"Delete Drawing\",\n body: response.attached ? \"This drawing is currently attached to at least 1 item on this project. Deleting the drawing will unlink it from all items. Are you sure you want to delete this drawing?\" : \"Are you sure you want to delete this drawing?\",\n onYes: _.bind(function (model, data) {\n this.model.destroy({\n success: _.bind(function () {\n let newCurSetDrawing = null;\n _.each(this.options.versions.models, function (version) {\n if (data && data.replacement > 0) {\n _.each(version.drawings.models, function (drawing) {\n if (drawing.id === data.replacement) {\n newCurSetDrawing = drawing;\n drawing.set('isCurrentSet', true);\n }\n }, this);\n }\n version.drawings.remove(this.model);\n }, this);\n\n this.renderDrawingSelector();\n\n if (newCurSetDrawing != null) {\n this.setDrawing(newCurSetDrawing);\n }\n // then try to go to the next drawing\n else if (!this.nextDrawing()) {\n // then try to go to the previous drawing\n if (!this.prevDrawing()) {\n // next try to go to a different drawing in a different version\n let newDrawing = _.find(this.options.versions.models, function (version) {\n if (_.size(version.drawings.models) > 0) {\n return version.drawings.models[0];\n }\n }, this);\n if (newDrawing != null) {\n this.setDrawing(newDrawing);\n } else {\n // we couldnt find any other drawings to go to\n // close the viewer\n this.destroy();\n }\n }\n }\n\n if (typeof this.options.onDelete === 'function') {\n this.options.onDelete();\n }\n\n PJQ.notifications.notify.successNotify({\n message: 'Drawing deleted'\n });\n }, this)\n });\n }, this)\n });\n }, this));\n },\n prevDrawing: function () {\n let item = this.currentImg,\n canvas = this.canvas;\n this.prevItemInfo = {\n position: item.position(),\n size: this.imageDim,\n canvas: canvas\n };\n let contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n return -drawing.get('sortOrder');\n }), _.bind(function (drawing) {\n return drawing.get('sortOrder') < this.model.get('sortOrder');\n }, this));\n if (contextDrawing != null) {\n this.setDrawing(contextDrawing);\n return true;\n }\n return false;\n },\n nextDrawing: function () {\n let item = this.currentImg,\n canvas = this.canvas;\n this.prevItemInfo = {\n position: item.position(),\n size: this.imageDim,\n canvas: canvas\n };\n let contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n return drawing.get('sortOrder');\n }), _.bind(function (drawing) {\n return drawing.get('sortOrder') === this.model.get('sortOrder') + 1;\n }, this));\n\n if (contextDrawing == null) {\n contextDrawing = _.find(_.sortBy(this.fullSet, function (drawing) {\n return drawing.get('sortOrder');\n }), _.bind(function (drawing) {\n return drawing.get('sortOrder') > this.model.get('sortOrder');\n }, this));\n }\n\n if (contextDrawing != null) {\n this.setDrawing(contextDrawing);\n return true;\n }\n return false;\n },\n renderPagingState: function () {\n let hasPrevious = _.find(_.sortBy(this.fullSet, function (drawing) {\n return -drawing.get('sortOrder');\n }), _.bind(function (drawing) {\n return drawing.get('sortOrder') < this.model.get('sortOrder');\n }, this)) != null,\n hasNext = _.find(_.sortBy(this.fullSet, function (drawing) {\n return drawing.get('sortOrder');\n }), _.bind(function (drawing) {\n return drawing.get('sortOrder') > this.model.get('sortOrder');\n }, this)) != null;\n this.$('.btn-prev-drawing').prop('disabled', !hasPrevious);\n this.$('.btn-next-drawing').prop('disabled', !hasNext);\n },\n versionSelected: function (e) {\n let cid = $(e.currentTarget).data('cid');\n if (cid != null) {\n let ver = this.options.versions.get(cid),\n drawing = ver.drawings.findWhere({name: this.model.get('name')});\n this.setDrawing(drawing, ver);\n }\n },\n setContextVersion: function (version) {\n this.contextVersion = version;\n if (this.options.batch != null) {\n this.fullSet = _.filter(this.options.batch.drawings.models, function (drawing) {\n return !drawing.get('isPublished');\n });\n } else if (this.options.isEdit || this.contextVersion != null) {\n this.fullSet = this.contextVersion.drawings.models;\n } else {\n this.fullSet = this.options.versions.getUniqueDrawings();\n }\n\n this.renderDrawingSelector();\n this.renderDrawingSort();\n },\n setDrawing: function (drawing, version) {\n this.contextAnnotation = null;\n this.calibration = null;\n this.clearAnnotations();\n\n if (version != null) {\n this.setContextVersion(version);\n }\n\n if (this.options.versions != null && this.options.batch == null) {\n if (this.contextVersion == null) {\n // no version was provided, and we dont already have a context version\n // use the current set (if exists), else use the most recent version by issued on\n this.contextVersion = this.options.versions.get(-1);\n if (this.contextVersion == null) {\n this.contextVersion = _.sortBy(this.options.versions.models, function (version) {\n return -(new Date(version.get('issuedOn'))).getTime();\n })[0];\n }\n }\n\n let fnFindByName = function (ver) {\n return _.find(ver.drawings.models, _.bind(function (verDrawing) {\n return drawing.get('name') === verDrawing.get('name');\n }, this));\n }\n\n let contextVerDrawing = fnFindByName(this.contextVersion);\n if (contextVerDrawing != null) {\n this.model = contextVerDrawing;\n this.activeVersion = this.contextVersion;\n } else {\n // we weren't able to find the drawing in the context version\n // find the newest version that was published BEFORE the context version which does contain this drawing\n let contextVerIssued = (new Date(this.contextVersion.get('issuedOn'))).getTime(),\n prevVersions = _.sortBy(_.filter(this.options.versions.models, _.bind(function (ver) {\n return ver.id !== -1 && ver.id !== this.contextVersion.id && contextVerIssued >= (new Date(ver.get('issuedOn'))).getTime() && fnFindByName(ver) != null;\n }, this)), function (version) {\n return -(new Date(version.get('issuedOn'))).getTime();\n });\n if (_.size(prevVersions) > 0) {\n this.activeVersion = prevVersions[0];\n } else {\n // we werent able to find this drawing in a version older than the context version\n // find the oldest version we have of this drawing that is not the current set\n this.activeVersion = _.sortBy(_.filter(this.options.versions.models, function (ver) {\n return ver.id !== -1 && fnFindByName(ver) != null;\n }), function (version) {\n return (new Date(version.get('issuedOn'))).getTime();\n })[0];\n }\n this.model = fnFindByName(this.activeVersion);\n }\n } else {\n if (version != null) {\n this.contextVersion = version;\n this.activeVersion = version;\n }\n this.model = drawing;\n }\n this.renderDrawing();\n this.renderPagingState();\n return {\n drawing: this.model,\n version: this.activeVersion\n };\n },\n renderDrawing: function () {\n if (this.drawingSelector != null) {\n this.drawingSelector.setValue(this.model.get('name'));\n }\n\n this.renderDrawingDetails();\n this.renderVersionSelector();\n this.show(this.model.renderUrl(), {\n persistZoom: true\n });\n\n if (this.options.project != null) {\n this.options.canViewAnnotations = this.options.project.permissions.hasPermission('drawings.canViewAnnotations');\n this.options.isAnnotationsAdmin = this.options.project.permissions.hasPermission('drawings.isAnnotationsAdmin');\n } else if (this.options.forShare) {\n this.options.canViewAnnotations = true;\n this.options.canAddAnnotations = false;\n this.options.isAnnotationsAdmin = false;\n } else {\n this.options.canViewAnnotations = PJQ.app.session.systemPermissions.hasPermission('drawings.canViewAnnotations');\n this.options.isAnnotationsAdmin = PJQ.app.session.systemPermissions.hasPermission('drawings.isAnnotationsAdmin');\n }\n\n if (this.options.isAnnotationsEnabled && this.options.canViewAnnotations) {\n this.model.fetchAnnotations({\n context: this.options.context,\n contextId: this.options.contextId,\n accessKey: this.options.accessKey\n }, _.bind(function (ann) {\n this.annotations = ann;\n\n if (this.options.mergeAnnotations != null) {\n this.annotations.merge(this.options.mergeAnnotations, this.options.contextId);\n }\n this.renderAnnotations();\n }, this));\n } else {\n this.renderAnnotations();\n }\n },\n renderDrawingSelector: function () {\n let $controls = this.$('.drawing-nav-controls');\n if (this.options.noNavigation) {\n $controls.hide();\n return;\n }\n\n let choices = _.map(_.sortBy(this.fullSet, function (drawing) {\n return drawing.get('sortOrder');\n }), function (drawing) {\n return drawing.get('name');\n });\n\n if (_.size(choices) === 0) {\n $controls.hide();\n } else if (this.drawingSelector != null) {\n this.drawingSelector.updateChoices(choices);\n this.drawingSelector.setValue(this.model.get('name'));\n } else {\n $controls.show();\n this.drawingSelector = new PJQ.inputs.Selectpicker({\n el: this.$('.select-drawing'),\n hideDisabled: true,\n defaultValue: this.model.get('name'),\n choices: choices,\n onChange: _.bind(function (value) {\n let selectedDrawing;\n if (this.contextVersion != null) {\n selectedDrawing = this.contextVersion.drawings.findWhere({name: value});\n }\n if (selectedDrawing == null) {\n selectedDrawing = _.find(this.fullSet, function (drawing) {\n return drawing.get('name') === value;\n });\n }\n this.setDrawing(selectedDrawing)\n }, this)\n });\n }\n },\n renderVersionSelector: function () {\n let $versionSelect = this.$('.drawing-versions');\n if (this.options.versions == null || this.options.noNavigation) {\n $versionSelect.empty();\n return;\n }\n\n if (this.options.batch == null && !this.options.isEdit) {\n let hideIssuedOn;\n if (this.options.project != null) {\n hideIssuedOn = this.options.project.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n } else {\n hideIssuedOn = PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.HIDE_VERSION_SELECTOR_ISSUED_ON);\n }\n this.renderSubTemplate(false, this.options.subTemplates.versionSelect, $versionSelect, {\n versions: this.options.versions.findVersionsForDrawing(this.model, true),\n contextVersion: this.activeVersion,\n showCurrentSetLabel: true,\n hideIssuedOn: hideIssuedOn,\n currentSet: this.options.versions && this.options.versions.get(-1)\n });\n }\n },\n renderDrawingDetails: function (callback) {\n if (this.options.versions == null) {\n this.$('.btn-drawing-details').addClass('hidden');\n return;\n }\n\n this.$('.btn-drawing-details').removeClass('hidden');\n\n let canEditTags = this.options.project != null\n && this.options.project.hasPermission('drawings.isAdmin')\n && (this.options.project.get('masterUserId') === PJQ.app.session.get('masterUserId'));\n this.renderSubTemplate(false, this.options.subTemplates.drawingDetails, this.$('.drawing-details'), {\n model: this.model,\n version: this.activeVersion,\n isEdit: this.options.isEdit,\n currentSet: this.options.versions.get(-1),\n canEditTags: canEditTags,\n canEditDrawing: this.options.canEditDrawing,\n canRemoveCurrentSet: this.options.canEdit\n }, _.bind(function ($details) {\n $details.find('.input-drawing-name,.input-drawing-title').on('keydown', _.bind(function (e) {\n if (e.which === 13) {\n if (e.shiftKey) {\n if (this.prevDrawing()) {\n this.$('.input-drawing-name').focus().select();\n }\n } else {\n if (this.nextDrawing()) {\n this.$('.input-drawing-name').focus().select();\n }\n }\n }\n }, this));\n let tags = [],\n drawingTags = this.model.get('tags');\n _.each(this.options.versions.getDrawingTags(), _.bind(function (tag) {\n if (drawingTags != null && drawingTags.indexOf(tag) === -1 && tags.indexOf(tag) === -1) {\n tags.push(tag);\n }\n }, this));\n if (_.size(tags) > 0 && canEditTags) {\n new PJQ.inputs.AutocompleteInput({\n el: $details.find('.input-tag'),\n source: tags\n });\n }\n if (typeof callback === 'function') {\n callback();\n }\n }, this));\n },\n download: function (e) {\n this.model.download($(e.currentTarget).data('annotations') === true, this.options.context, this.options.contextId);\n },\n nameChanged: function (e) {\n let name = $(e.currentTarget).val();\n this.model.set('name', name);\n this.renderDrawingSelector();\n this.changed = true;\n },\n titleChanged: function (e) {\n let title = $(e.currentTarget).val();\n this.model.set('title', title);\n this.changed = true;\n },\n drawingTagInputChanged: function (e) {\n let tagNameLen = _.size($(e.currentTarget).val().trim());\n if (e.keyCode === 13 && tagNameLen > 0) {\n this.addTag();\n return;\n }\n\n this.$('.btn-add-tag').prop('disabled', tagNameLen === 0);\n this.changed = true;\n },\n addTag: function () {\n let tagString = this.$('.input-tag').val(),\n tags = [];\n if (_.size(tagString) > 0) {\n _.each(tagString.split(','), function (tag) {\n let tagTrim = tag.trim();\n if (_.size(tagTrim) > 0) {\n tags.push(tagTrim);\n }\n });\n }\n this.model.addTags(tags, null, _.bind(function () {\n this.renderDrawingDetails(_.bind(function () {\n this.$('.input-tag').focus();\n }, this));\n }, this));\n this.changed = true;\n },\n deleteTag: function (e) {\n let tagName = $(e.currentTarget).closest('.drawing-tag').data('name');\n this.model.deleteTag(tagName, null, _.bind(function () {\n this.renderDrawingDetails();\n }, this));\n this.changed = true;\n },\n deleteDrawing: function () {\n new PJQ.views.modals.DeleteCancel({\n header: \"Confirm Deletion\",\n body: \"Are you sure you want to delete this drawing?\",\n onDelete: _.bind(function () {\n this.model.destroy({\n success: _.bind(function () {\n this.changed = true;\n this.options.versions.fetch({\n success: _.bind(function () {\n this.destroy();\n }, this)\n });\n }, this)\n });\n }, this)\n });\n },\n scale: 1,\n mouse: {\n isClicked: false,\n isDrawing: false,\n isDragging: false,\n dragPoint: null,\n isMoving: false,\n moveContext: null,\n start: null,\n current: null,\n isCalibrating: false\n },\n relativeMouse: function (e) {\n let toCanvasX = (e.clientX - this.canvas.x),\n toCanvasY = (e.clientY - this.canvas.y);\n return {\n toCanvas: {\n x: toCanvasX,\n y: toCanvasY\n },\n x: toCanvasX * this.scale,\n y: toCanvasY * this.scale\n };\n },\n setMouseStart: function (e) {\n if (!e) {\n this.mouse.start = null;\n return;\n }\n this.mouse.start = this.relativeMouse(e);\n return this.mouse.start;\n },\n getMouse: function (e) {\n return {\n start: this.mouse.start,\n current: this.relativeMouse(e),\n dragPoint: this.mouse.dragPoint,\n moveContext: this.mouse.moveContext\n };\n },\n isClicked: function () {\n return this.mouse.isClicked === true;\n },\n isDrawing: function () {\n return this.mouse.isDrawing === true;\n },\n canDraw: function () {\n if (this.annotationMenu == null) {\n return false;\n }\n\n let type = this.annotationMenu.getType();\n return type !== PJQ.constants.drawings.annotationTypes.INSPECT;\n },\n isDragging: function () {\n return this.mouse.isDragging === true;\n },\n isMoving: function () {\n return this.mouse.isMoving === true;\n },\n isCalibrating: function () {\n return this.mouse.isCalibrating === true;\n },\n canEditAnnotations: function () {\n return !this.isDrawing() && this.annotationMenu != null && this.annotationMenu.getType() === PJQ.constants.drawings.annotationTypes.INSPECT;\n },\n startDraw: function (e) {\n this.setMouseStart(e);\n this.mouse.isDrawing = true;\n return this.getMouse(e);\n },\n stopDraw: function () {\n this.mouse.isDrawing = false;\n this.setMouseStart();\n },\n startMove: function (e) {\n this.setMouseStart(e);\n this.mouse.moveContext = {\n start: _.clone(this.contextAnnotation.attributes.start),\n end: _.clone(this.contextAnnotation.attributes.end),\n path: this.contextAnnotation.decodePath()\n }\n this.mouse.isMoving = true;\n },\n stopMove: function () {\n this.mouse.isMoving = false;\n this.moveContext = null;\n this.setMouseStart();\n },\n startDrag: function (dragPoint) {\n this.mouse.isDragging = true;\n this.mouse.dragPoint = dragPoint;\n },\n stopDrag: function () {\n this.mouse.isDragging = false;\n this.mouse.dragPoint = null;\n },\n startCalibrating: function (e) {\n let start = this.setMouseStart(e);\n this.calibration = {\n start: {\n x: start.x,\n y: start.y\n }\n };\n this.mouse.isCalibrating = true;\n },\n stopCalibrating: function () {\n this.mouse.isCalibrating = false;\n this.setMouseStart();\n this.startCalibrationStep(2);\n },\n drawCalibration: function () {\n if (this.activeCtx != null && this.calibration != null && this.calibration.end != null) {\n this.clearCanvas(this.activeCtx);\n let start = {\n x: this.calibration.start.x / this.scale,\n y: this.calibration.start.y / this.scale\n },\n end = {\n x: this.calibration.end.x / this.scale,\n y: this.calibration.end.y / this.scale\n },\n terminatorHeight = 40 / this.scale,\n terminatorHalf = terminatorHeight / 2;\n this.activeCtx.beginPath();\n this.activeCtx.moveTo(start.x, start.y);\n this.activeCtx.lineTo(end.x, end.y);\n this.activeCtx.moveTo(start.x, start.y - terminatorHalf);\n this.activeCtx.lineTo(start.x, start.y + terminatorHalf);\n this.activeCtx.moveTo(end.x, end.y - terminatorHalf);\n this.activeCtx.lineTo(end.x, end.y + terminatorHalf);\n this.activeCtx.lineWidth = 4 / this.scale;\n this.activeCtx.setLineDash([0]);\n this.activeCtx.strokeStyle = PJQ.constants.colors.RED;\n this.activeCtx.stroke();\n }\n },\n closeCalibration: function () {\n this.$('.calibration-outer').remove();\n this.calibration = null;\n this.drawAnnotations();\n },\n startCalibrationStep: function (step) {\n let stepContent,\n fnAfterRender = null;\n switch (step) {\n case 1:\n stepContent = '
Start the calibration by drawing a line on a known length
';\n break;\n case 2:\n stepContent = `
Enter the length of the drawn line
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tfeet\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tinches\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t
\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t
`;\n fnAfterRender = _.bind(function () {\n let calibrationTypeBtn = new PJQ.inputs.ButtonGroup({\n el: this.$('.calibration-type'),\n colorInactiveButtons: true,\n buttons: [{\n colorClass: 'info',\n label: 'Imperial',\n value: PJQ.constants.drawings.scaleTypes.IMPERIAL\n }, {\n colorClass: 'info',\n label: 'Metric',\n value: PJQ.constants.drawings.scaleTypes.METRIC\n }],\n buttonClasses: 'wd-80p',\n fitHeight: true,\n defaultValue: PJQ.constants.drawings.scaleTypes.IMPERIAL,\n onChange: _.bind(function (value) {\n let $metric = this.$('.calibration-metric'),\n $imperial = this.$('.calibration-imperial');\n if (value === PJQ.constants.drawings.scaleTypes.METRIC) {\n $imperial.addClass('hidden');\n $metric.removeClass('hidden');\n } else {\n $metric.addClass('hidden');\n $imperial.removeClass('hidden');\n }\n }, this)\n });\n\n this.$('.btn-save-calibration').on('click', _.bind(function () {\n let dx = this.calibration.end.x - this.calibration.start.x,\n dy = this.calibration.end.y - this.calibration.start.y,\n d = Math.sqrt(dx * dx + dy * dy),\n calibrationType = calibrationTypeBtn.getValue(),\n scale = null;\n if (calibrationType.toUpperCase() === PJQ.constants.drawings.scaleTypes.IMPERIAL) {\n let $feet = this.$('.calibration-length-feet'),\n $inches = this.$('.calibration-length-inches'),\n feet = parseInt($feet.val()),\n inches = parseInt($inches.val());\n if (isNaN(feet)) {\n feet = 0;\n }\n if (isNaN(inches)) {\n inches = 0;\n }\n scale = d / ((feet * 12) + inches);\n } else {\n\n }\n\n if (scale > 0) {\n this.model.updateScale(Math.round(scale), calibrationType, _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Calibration saved'\n });\n this.closeCalibration();\n if (this.annotationMenu != null) {\n let nextType;\n if (this.afterCalibrateType != null) {\n nextType = this.afterCalibrateType;\n } else {\n nextType = PJQ.constants.drawings.annotationTypes.INSPECT;\n }\n this.annotationMenu.setType(nextType);\n }\n this.afterCalibrateType = null;\n }, this));\n }\n }, this));\n this.$('.btn-cancel-calibration').on('click', _.bind(function () {\n this.closeCalibration();\n }, this));\n }, this);\n break;\n }\n this.$('.calibration-outer').remove();\n this.imageView.append('
' + stepContent + '
');\n\n if (typeof fnAfterRender === 'function') {\n fnAfterRender();\n }\n },\n onMouseDown: function (e) {\n if (this.annotations == null) {\n return;\n }\n\n this.mouse.isClicked = true;\n\n let mouse = this.getMouse(e);\n if (this.contextAnnotation != null && !this.isDrawing()) {\n let collidingDragPoint = this.contextAnnotation.getCollidingDragPoint(mouse.current.toCanvas.x, mouse.current.toCanvas.y);\n if (collidingDragPoint != null) {\n this.startDrag(collidingDragPoint);\n return false;\n }\n }\n\n let fnFindColliding = () => {\n if (this.isMoving() || this.isDrawing() || this.isDragging()) {\n return false;\n }\n\n let colliding = this.annotations.find((a) => {\n return a.cid !== this.contextAnnotation?.cid && a.collides(mouse.current.x, mouse.current.y);\n });\n if (colliding != null) {\n this.editAnnotation(colliding);\n return true;\n }\n return false;\n }\n\n if (!this.options.canAddAnnotations) {\n fnFindColliding();\n return false;\n }\n\n let canEdit = this.canEditAnnotations(),\n annotationType = this.annotationMenu?.getType();\n if (this.annotationMenu != null && annotationType === PJQ.constants.drawings.annotationTypes.CALIBRATION) {\n this.setContextAnnotation(null);\n this.startCalibrating(e);\n return false;\n } else if ((canEdit || this.annotationMenu == null) && annotationType === PJQ.constants.drawings.annotationTypes.INSPECT) {\n if (this.contextAnnotation != null && this.contextAnnotation.canEdit()) {\n if (this.contextAnnotation.collides(mouse.current.x, mouse.current.y)) {\n //this currently selected annotation collides\n // loop through colliding items and find the next one\n setTimeout(() => {\n if (this.isClicked()) {\n this.startMove(e);\n return;\n }\n\n fnFindColliding();\n }, 100);\n return !canEdit;\n }\n }\n\n if (fnFindColliding()) {\n return true;\n }\n\n if (!this.isMoving() && !this.isDrawing() && !this.isDragging()) {\n setTimeout(_.bind(function () {\n //if its still clicked, then its moving/dragging/drawing\n if (!this.isClicked()) {\n this.cancelEditAnnotation();\n }\n }, this), 100);\n }\n } else {\n if (this.contextAnnotation != null) {\n this.setContextAnnotation(null);\n }\n if (annotationType !== PJQ.constants.drawings.annotationTypes.INSPECT) {\n this.startDraw(e);\n }\n return false;\n }\n },\n canvasMouseMove: function (e) {\n if (this.isCalibrating()) {\n let mouse = this.getMouse(e);\n this.calibration.end = {\n x: mouse.current.x,\n y: mouse.current.y\n };\n this.drawCalibration(e);\n } else if (this.isDrawing()) {\n let mouse = this.getMouse(e);\n if (this.contextAnnotation == null) {\n let newAnnotation = this.annotations.model({\n drawingId: this.model.id,\n type: this.annotationMenu.getType(),\n color: this.annotationMenu.getColor(),\n context: this.options.context,\n contextId: this.options.contextId\n });\n this.setContextAnnotation(newAnnotation);\n }\n this.contextAnnotation.start(mouse.start.x, mouse.start.y);\n this.contextAnnotation.end(mouse.current.x, mouse.current.y);\n this.drawContextAnnotation();\n } else if (this.isDragging()) {\n let mouse = this.getMouse(e);\n this.contextAnnotation.moveDragPoint(mouse.dragPoint, mouse.current.x, mouse.current.y);\n this.drawContextAnnotation();\n } else if (this.isMoving()) {\n let mouse = this.getMouse(e),\n xDiff = mouse.current.x - mouse.start.x,\n yDiff = mouse.current.y - mouse.start.y;\n if (_.size(mouse.moveContext.path) > 0) {\n let newStartX = mouse.moveContext.path[0][0] + xDiff,\n newStartY = mouse.moveContext.path[0][1] + yDiff;\n this.contextAnnotation.start(newStartX, newStartY);\n this.drawContextAnnotation();\n } else if (mouse.moveContext.start != null && mouse.moveContext.end != null) {\n let newStartX = mouse.moveContext.start.x + xDiff,\n newStartY = mouse.moveContext.start.y + yDiff,\n newEndX = mouse.moveContext.end.x + xDiff,\n newEndY = mouse.moveContext.end.y + yDiff,\n maxX = this.model.attributes.pixelsX,\n maxY = this.model.attributes.pixelsY;\n\n if (newStartX < 0) {\n newEndX -= newStartX;\n newStartX = 0;\n } else if (newEndX >= maxX) {\n newStartX -= newEndX - maxX;\n newEndX = maxX;\n }\n\n if (newStartY < 0) {\n newEndY -= newStartY;\n newStartY = 0;\n } else if (newEndY >= maxY) {\n newStartY -= newEndY - maxY;\n newEndY = maxY;\n }\n\n this.contextAnnotation.start(newStartX, newStartY);\n this.contextAnnotation.end(newEndX, newEndY);\n this.drawContextAnnotation();\n }\n }\n },\n saveAnnotation: function (annotation) {\n if (typeof this.options.onAnnotationChange === 'function') {\n this.options.onAnnotationChange(annotation);\n } else {\n this.contextAnnotation.beforeSave();\n this.contextAnnotation.isNew() ? this.contextAnnotation.queueSave() : this.contextAnnotation.queuePatch();\n }\n },\n canvasMouseUp: function (e) {\n this.mouse.isClicked = false;\n if (this.isCalibrating()) {\n this.stopCalibrating();\n } else if (this.isDrawing() || this.isDragging() || this.isMoving()) {\n let fnSave = _.bind(function () {\n if (this.contextAnnotation.hasChanged()) {\n this.saveAnnotation(this.contextAnnotation);\n }\n }, this);\n if (this.isDrawing()) {\n this.stopDraw();\n this.contextAnnotation.normalizeCoords(true);\n this.annotations.add(this.contextAnnotation);\n fnSave();\n this.editAnnotation(this.contextAnnotation);\n\n if (!this.annotationMenu.enableConsecutive) {\n this.annotationMenu.setType(PJQ.constants.drawings.annotationTypes.INSPECT);\n }\n } else if (this.isDragging()) {\n this.stopDrag();\n this.contextAnnotation.normalizeCoords();\n fnSave();\n } else if (this.isMoving()) {\n this.stopMove();\n fnSave();\n }\n }\n },\n canvasMouseLeave: function () {\n this.mouse.isClicked = false;\n if (this.isDrawing()) {\n // this.stopDraw();\n }\n if (this.isDragging()) {\n this.stopDrag();\n }\n if (this.isMoving()) {\n this.stopMove();\n }\n },\n updateScale: function () {\n this.scale = this.model.attributes.pixelsX / this.canvas.width;\n },\n afterDimensionChange: function () {\n this.updateScale();\n this.renderAnnotations();\n },\n afterLoad: function () {\n this.renderAnnotations();\n },\n renderAnnotations: function () {\n if (this.options.isAnnotationsEnabled && this.loaded && this.annotations && this.annotations.isFetched) {\n this.clearAnnotations();\n this.renderAnnotationMenu();\n this.drawAnnotations();\n }\n },\n clearCanvas: function (ct) {\n if (ct != null) {\n // ct.clearRect(0, 0, this.canvas.width, this.canvas.height);\n ct.reset();\n }\n },\n clearAnnotations: function () {\n this.clearCanvas(this.ctx);\n this.clearCanvas(this.activeCtx);\n },\n drawAnnotations: function () {\n this.drawContextAnnotation();\n if (this.calibration != null) {\n this.drawCalibration();\n }\n\n this.clearCanvas(this.ctx);\n _.each(_.filter(this.annotations.models, (annotation) => {\n return !annotation.get('delete') && (this.options.contextId == null || annotation.get('contextId') == null || (annotation.get('contextId') === this.options.contextId && annotation.get('context') === this.options.context));\n }), function (annotation) {\n if (this.contextAnnotation != null && this.contextAnnotation.cid === annotation.cid) {\n return;\n }\n annotation.draw(this.ctx, this.scale, {\n isDrawing: false,\n drawing: this.model\n });\n }, this);\n },\n drawContextAnnotation: function () {\n this.clearCanvas(this.activeCtx);\n if (this.contextAnnotation != null) {\n this.contextAnnotation.draw(this.activeCtx, this.scale, {\n isDrawing: this.isDrawing(),\n drawing: this.model\n });\n if (!this.isDrawing() && (this.options.isAnnotationsAdmin || !this.contextAnnotation.get('isPublished'))) {\n this.contextAnnotation.drawDragPoints(this.activeCtx, this.scale);\n }\n }\n },\n editAnnotation: function (annotation) {\n this.setContextAnnotation(annotation, true);\n this.removeEditView();\n\n let $iv = this.$('.iv-content'),\n $editOuter = this.$('.annotation-edit-outer');\n if ($editOuter.length === 0) {\n $editOuter = $('
', {\n class: 'annotation-edit-outer ht-100 wd-350p position-absolute right-0 top-0 elevation-3'\n });\n $iv.append($editOuter);\n }\n $iv.addClass('annotating');\n\n this.editAnnotationView = new PJQ.views.drawings.EditAnnotation({\n el: $editOuter,\n model: annotation,\n project: this.options.project,\n context: this.options.context,\n versions: this.options.versions,\n canEdit: this.options.isAnnotationsAdmin || annotation.canEdit(),\n isAdmin: this.options.isAnnotationsAdmin,\n focusText: annotation.isNew() && annotation.get('type') === PJQ.constants.drawings.annotationTypes.TEXT,\n onAttachmentChange: () => {\n this.saveAnnotation(annotation);\n },\n onAnnotationDataChange: () => {\n this.drawContextAnnotation();\n this.saveAnnotation(annotation);\n },\n onShapeChange: () => {\n this.drawContextAnnotation();\n this.saveAnnotation(annotation);\n },\n onPublish: (annotation) => {\n this.publishAnnotation(annotation);\n },\n onDelete: (annotation) => {\n this.deleteAnnotation(annotation);\n },\n onClose: () => {\n this.cancelEditAnnotation();\n },\n onDrawingSelected: (drawing) => {\n this.cancelEditAnnotation();\n this.setDrawing(drawing);\n }\n });\n },\n cancelEditAnnotation() {\n this.setContextAnnotation(null, true);\n this.removeEditView();\n },\n removeEditView: function () {\n if (this.editAnnotationView != null) {\n this.editAnnotationView.remove();\n this.editAnnotationView = null;\n this.$('.iv-content').removeClass('annotating');\n }\n },\n publishAnnotation: function (annotation) {\n if (annotation != null) {\n annotation.set('isPublished', !annotation.get('isPublished'));\n if (typeof this.options.onAnnotationChange === 'function') {\n this.options.onAnnotationChange(annotation);\n } else {\n annotation.publish();\n }\n }\n },\n deleteAnnotation: function (annotation) {\n if (annotation != null) {\n if (typeof this.options.onAnnotationChange === 'function') {\n annotation.set('delete', true);\n this.options.onAnnotationChange(annotation);\n } else {\n this.annotations.remove(annotation);\n annotation.destroy();\n this.cancelEditAnnotation();\n }\n }\n },\n setContextAnnotation: function (annotation = null, redraw = true) {\n let enablePicker = annotation == null || annotation.canEditColor();\n if (this.annotationMenu != null) {\n this.annotationMenu.enableColorPicker(enablePicker);\n }\n\n if (annotation) {\n this.contextAnnotation = annotation;\n if (this.annotationMenu != null && enablePicker) {\n this.annotationMenu.setColor(this.contextAnnotation.getStrokeColor());\n }\n if (this.$canvas) {\n this.$canvas.css('opacity', '0.5');\n }\n } else {\n this.contextAnnotation = null;\n if (this.$canvas) {\n this.$canvas.css('opacity', 'initial');\n }\n }\n\n if (redraw) {\n this.drawAnnotations();\n }\n },\n canvasClicked: function () {\n if (this.annotationMenu != null) {\n this.annotationMenu.collapseSubMenus();\n }\n },\n renderAnnotationMenu: function () {\n if (this.annotationMenu != null) {\n this.annotationMenu.remove();\n }\n\n if (this.options.canAddAnnotations === false) {\n return;\n }\n\n this.annotationMenu = new PJQ.views.drawings.AnnotationMenu({\n el: this.$('.annotation-menu-outer'),\n type: this.options.annotationMenu.type,\n color: this.options.annotationMenu.color,\n project: this.options.project,\n onColorChange: _.bind(function (color) {\n this.options.annotationMenu.color = color;\n if (this.contextAnnotation != null) {\n this.contextAnnotation.set('color', color);\n this.drawContextAnnotation();\n this.contextAnnotation.isNew() ? this.contextAnnotation.queueSave() : this.contextAnnotation.queuePatch();\n }\n }, this),\n onTypeChange: _.bind(function (type) {\n if (type !== PJQ.constants.drawings.annotationTypes.INSPECT) {\n this.setContextAnnotation(null, false);\n }\n\n this.options.annotationMenu.type = type;\n this.drawAnnotations();\n if (this.canDraw()) {\n this.$activeCanvas.addClass('annotate');\n } else {\n this.$activeCanvas.removeClass('annotate');\n }\n\n if (this.model.get('scale') == null && (type === PJQ.constants.drawings.annotationTypes.RULER || type === PJQ.constants.drawings.annotationTypes.AREA_RECT\n || type === PJQ.constants.drawings.annotationTypes.RULER_FREE_FORM || type === PJQ.constants.drawings.annotationTypes.AREA_FREE_FORM)) {\n this.afterCalibrateType = type;\n type = PJQ.constants.drawings.annotationTypes.CALIBRATION;\n this.annotationMenu.setType(type);\n }\n\n if (type === PJQ.constants.drawings.annotationTypes.CALIBRATION) {\n this.startCalibrationStep(1);\n } else {\n this.closeCalibration();\n }\n }, this)\n });\n },\n onClose: function () {\n if (typeof this.options.onClose === 'function') {\n this.options.onClose(this.changed === true);\n }\n },\n});\n\nPJQ.views.drawings.AnnotationMenu = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'annotation-menu'),\n color: PJQ.constants.colors.BLUE,\n onTypeChange: null,\n onColorChange: null,\n enableConsecutive: false\n },\n events: {\n 'click .sub-menu-item': 'subMenuItemClicked',\n 'click .consecutive-item': 'consecutiveItemClicked',\n 'click .color-picker-item': 'colorPickerMenuItemClicked',\n 'click .menu-item': 'typeClicked',\n 'click .iv-content': 'collapseAnnotationMenu',\n },\n beforeFirstRender: function () {\n this.enableConsecutive = 'true' === PJQ.helpers.cookieHelpers.getCookie(PJQ.constants.cookies.ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS);\n if (this.options.type == null) {\n this.options.type = PJQ.constants.drawings.annotationTypes.INSPECT;\n }\n },\n renderData: function () {\n return {\n enableConsecutive: this.enableConsecutive,\n type: this.getType(),\n color: this.getColor(),\n canViewPunchList: this.options.project.permissions.hasPermission('punchList.canView'),\n canViewActionItems: this.options.project.permissions.hasPermission('actionItems.canView'),\n enableRefs: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ENABLE_DRAWING_ANNOTATION_REFS)\n };\n },\n afterRender: function () {\n this.renderColorPicker();\n },\n renderColorPicker: function () {\n this.colorPicker = new PJQ.colors.SimpleColorPicker(this.$('.color-menu-outer'), {\n color: this.options.color,\n onColorPicked: _.bind(function (color) {\n this.colorClicked(color);\n }, this)\n });\n },\n colorClicked: function (color) {\n this.options.color = color;\n this.$('.active-color').css('background', this.options.color);\n if (typeof this.options.onColorChange === 'function') {\n this.options.onColorChange(this.options.color);\n }\n this.render();\n },\n colorPickerMenuItemClicked: function () {\n if (this.colorPickerEnabled === false) {\n return;\n }\n\n this.collapseSubMenus();\n this.colorPicker.toggle();\n },\n hideColorPicker: function () {\n if (this.colorPicker != null) {\n this.colorPicker.hide();\n }\n },\n setColor: function (color) {\n this.options.color = color;\n if (this.colorPicker != null) {\n this.colorPicker.setColor(this.options.color);\n this.render();\n }\n },\n getColor: function () {\n return this.options.color;\n },\n typeClicked: function (e) {\n e.stopPropagation();\n let $target = $(e.currentTarget),\n selectedType = $target.data('type');\n if (selectedType != null && selectedType !== this.options.type) {\n this.setType(selectedType);\n } else {\n this.render();\n }\n },\n setType: function (type) {\n this.options.type = type;\n this.render();\n if (typeof this.options.onTypeChange === 'function') {\n this.options.onTypeChange(this.options.type);\n }\n\n this.enableColorPicker(PJQ.models.drawings.Annotation.prototype.canEditColor(this.options.type));\n },\n getType: function () {\n return this.options.type;\n },\n subMenuItemClicked: function (e) {\n let $target = $(e.currentTarget),\n isActive = $target.hasClass('active');\n this.collapseSubMenus();\n if (!isActive) {\n $target.addClass('active');\n }\n },\n consecutiveItemClicked: function () {\n this.enableConsecutive = !this.enableConsecutive;\n PJQ.helpers.cookieHelpers.setCookie(PJQ.constants.cookies.ENABLE_CONSECUTIVE_DRAWING_ANNOTATIONS, this.enableConsecutive.toString());\n this.render();\n },\n collapseSubMenus: function (hideColorPicker = false) {\n this.$('.sub-menu-item').removeClass('active');\n if (hideColorPicker) {\n this.hideColorPicker();\n }\n },\n enableColorPicker: function (enabled) {\n let $colorPicker = this.$('.color-picker-item');\n if (enabled) {\n $colorPicker.removeClass('op-3');\n } else {\n $colorPicker.addClass('op-3');\n }\n this.colorPickerEnabled = enabled;\n }\n});\n","PJQ.views.drawings.DrawingAreaHighlight = PJQ.views.drawings.DrawingViewer.extend({\n\tdefaults: {\n\t\ttemplate: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Drawing-Area-Highlight'),\n\t\tcanEdit: true,\n\t\tshouldCreateCanvas: true,\n\t\tzoomValue: 100,\n\t\tsnapView: true,\n\t\tisEdit: false,\n\t\tcontext: null,\n\t\tmaxZoom: 500,\n\t\trefreshOnResize: true,\n\t\tzoomOnMouseWheel: true,\n\t\tisHighlighting: false,\n\t\tkeyListeners: []\n\t},\n\tevents: {\n\t\t'click .btn-select-name': 'selectName',\n\t\t'click .btn-select-title': 'selectTitle',\n\t\t'mousedown .iv-image-view': 'canvasMouseDown',\n\t\t'mouseup .iv-image-view': 'canvasMouseUp',\n\t\t'mousemove .iv-image-view': 'canvasMouseMove',\n\t\t'click .btn-save': 'save'\n\t},\n\tcanvasX: 0,\n\tcanvasY: 0,\n\tmouse: {\n\t\tstartX: 0,\n\t\tstartY: 0\n\t},\n\tgetMouse: function (e) {\n\t\treturn {\n\t\t\tx: parseInt((e.clientX - this.canvasX) * this.scale),\n\t\t\ty: parseInt((e.clientY - this.canvasY) * this.scale),\n\t\t\tstartX: this.mouse.startX,\n\t\t\tstartY: this.mouse.startY\n\t\t};\n\t},\n\trenderDrawingDetails: function () {\n\t\t// override from base view - we never want this to do anything in the area picker\n\t},\n\tstartMouse: function (e) {\n\t\tthis.canvasX = this.$canvas.offset().left;\n\t\tthis.canvasY = this.$canvas.offset().top;\n\t\tthis.mouse.startX = parseInt((e.clientX - this.canvasX) * this.scale);\n\t\tthis.mouse.startY = parseInt((e.clientY - this.canvasY) * this.scale);\n\t},\n\tcanvasMouseDown: function (e) {\n\t\tif (!this.options.isHighlighting) {\n\t\t\treturn false;\n\t\t}\n\t\tthis.startMouse(e);\n\t\tthis.mousedown = true;\n\n\t\tlet curMouse = this.getMouse(e);\n\t\tthis.contextLayer.set({\n\t\t\tx: curMouse.startX,\n\t\t\ty: curMouse.startY\n\t\t});\n\t},\n\tcanvasMouseUp: function () {\n\t\tthis.mousedown = false;\n\t\tif (this.contextLayer != null) {\n\t\t\tif (this.contextLayer.get('width') < 0) {\n\t\t\t\tlet wd = this.contextLayer.get('width');\n\t\t\t\tthis.contextLayer.set({\n\t\t\t\t\twidth: -wd,\n\t\t\t\t\tx: this.contextLayer.get('x') + wd\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('height') < 0) {\n\t\t\t\tlet ht = this.contextLayer.get('height');\n\t\t\t\tthis.contextLayer.set({\n\t\t\t\t\theight: -ht,\n\t\t\t\t\ty: this.contextLayer.get('y') + ht\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('width') + this.contextLayer.get('x') > this.model.get('pixelsX')) {\n\t\t\t\tthis.contextLayer.set('width', this.model.get('pixelsX') - this.contextLayer.get('x'));\n\t\t\t}\n\n\t\t\tif (this.contextLayer.get('height') + this.contextLayer.get('y') > this.model.get('pixelsY')) {\n\t\t\t\tthis.contextLayer.set('height', this.model.get('pixelsY') - this.contextLayer.get('y'));\n\t\t\t}\n\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false;\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t\tthis.renderSelectionActions();\n\t\t}\n\t},\n\tcanvasMouseMove: function (e) {\n\t\tif (!this.options.isHighlighting || !this.mousedown) {\n\t\t\treturn;\n\t\t}\n\n\t\tlet curMouse = this.getMouse(e);\n\t\tthis.contextLayer.set({\n\t\t\twidth: curMouse.x - curMouse.startX,\n\t\t\theight: curMouse.y - curMouse.startY,\n\t\t});\n\t\tthis.renderAnnotations();\n\t},\n\trenderAnnotations: function () {\n\t\tif (this.loaded) {\n\t\t\tthis.clearCanvas(this.activeCtx);\n\t\t\tif (this.nameLayer != null) {\n\t\t\t\tthis.drawRectangle(this.nameLayer);\n\t\t\t}\n\t\t\tif (this.titleLayer != null) {\n\t\t\t\tthis.drawRectangle(this.titleLayer);\n\t\t\t}\n\t\t}\n\t},\n\tdrawRectangle: function (rect) {\n\t\tthis.activeCtx.beginPath();\n\t\tthis.activeCtx.rect(rect.get('x') / this.scale, rect.get('y') / this.scale, rect.get('width') / this.scale, rect.get('height') / this.scale);\n\t\tthis.activeCtx.fillStyle = rect.get('color');\n\t\tthis.activeCtx.fill();\n\t},\n\tselectName: function () {\n\t\tif (this.options.isHighlighting) {\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t}\n\t\telse {\n\t\t\tthis.options.isHighlighting = true;\n\t\t\tthis.$activeCanvas.addClass('annotate');\n\t\t\tthis.nameLayer = null;\n\t\t\tthis.renderAnnotations();\n\t\t\tthis.nameLayer = new PJQ.models.BaseModel({\n\t\t\t\tlayerId: 'name',\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: '#4caf5075'\n\t\t\t});\n\t\t\tthis.contextLayer = this.nameLayer;\n\t\t}\n\t\tthis.renderSelectionActions();\n\t},\n\tselectTitle: function () {\n\t\tif (this.options.isHighlighting) {\n\t\t\tthis.contextLayer = null;\n\t\t\tthis.options.isHighlighting = false;\n\t\t\tthis.$activeCanvas.removeClass('annotate');\n\t\t}\n\t\telse {\n\t\t\tthis.options.isHighlighting = true;\n\t\t\tthis.$activeCanvas.addClass('annotate');\n\t\t\tthis.titleLayer = null;\n\t\t\tthis.renderAnnotations();\n\t\t\tthis.titleLayer = new PJQ.models.BaseModel({\n\t\t\t\tlayerId: 'title',\n\t\t\t\ttype: 'rect',\n\t\t\t\tcolor: '#ef6c0075'\n\t\t\t});\n\t\t\tthis.contextLayer = this.titleLayer;\n\t\t}\n\t\tthis.renderSelectionActions();\n\t},\n\trenderSelectionActions: function () {\n\t\tif (this.contextLayer != null) {\n\t\t\tif (this.contextLayer.get('layerId') === 'title') {\n\t\t\t\tthis.$('.btn-select-name').prop('disabled', true);\n\t\t\t\tthis.$('.btn-select-title').text('Stop Selecting Title').prop('disabled', false);\n\t\t\t}\n\t\t\telse if (this.contextLayer.get('layerId') === 'name') {\n\t\t\t\tthis.$('.btn-select-title').prop('disabled', true);\n\t\t\t\tthis.$('.btn-select-name').text('Stop Selecting Name').prop('disabled', false);\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tthis.$('.btn-select-name').text(this.nameLayer != null ? 'Change Name Area' : 'Select Name Area').prop('disabled', false);\n\t\t\tthis.$('.btn-select-title').text(this.titleLayer != null ? 'Change Title Area' : 'Select Title Area').prop('disabled', false);\n\t\t}\n\n\t},\n\tcanDrag: function () {\n\t\treturn !this.options.isHighlighting;\n\t},\n\tsave: function () {\n\t\tif (typeof this.options.onSave === 'function') {\n\t\t\tthis.options.onSave({\n\t\t\t\tlayers: {\n\t\t\t\t\tname: this.nameLayer,\n\t\t\t\t\ttitle: this.titleLayer\n\t\t\t\t}\n\t\t\t});\n\t\t\tthis.destroy();\n\t\t}\n\t}\n});","PJQ.helpers.drawings = {\n\tcreateDownload: function (project, versions, options) {\n\t\tlet params = [];\n\t\tif (options) {\n\t\t\tif (options.raster) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'raster',\n\t\t\t\t\tvalue: options.raster\n\t\t\t\t});\n\t\t\t}\n\t\t\tif (options.merge) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'merge',\n\t\t\t\t\tvalue: options.merge\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options.includeAttachments) {\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'attachments',\n\t\t\t\t\tvalue: options.includeAttachments\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (options.includeMyAnnotations || options.includePublishedAnnotations) {\n\t\t\t\tlet annotationMode = 0;\n\t\t\t\tif (options.includeMyAnnotations && options.includePublishedAnnotations) {\n\t\t\t\t\tannotationMode = 3;\n\t\t\t\t}\n\t\t\t\telse if (options.includeMyAnnotations) {\n\t\t\t\t\tannotationMode = 1;\n\t\t\t\t}\n\t\t\t\telse if (options.includePublishedAnnotations) {\n\t\t\t\t\tannotationMode = 2;\n\t\t\t\t}\n\t\t\t\tparams.push({\n\t\t\t\t\tparameter: 'annotationMode',\n\t\t\t\t\tvalue: annotationMode\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tif (_.size(PJQ.app.session.get('accessKey')) > 0) {\n\t\t\tparams.push({\n\t\t\t\tparameter: 'accessKey',\n\t\t\t\tvalue: PJQ.app.session.get('accessKey')\n\t\t\t});\n\t\t}\n\n\t\tlet versionsObj = {},\n\t\t\tarr = [];\n\n\t\tif (project != null) {\n\t\t\tarr.push({\n\t\t\t\tendpoint: 'projects',\n\t\t\t\tvalue: project.id\n\t\t\t});\n\t\t}\n\t\tarr.push({\n\t\t\tendpoint: 'drawings'\n\t\t});\n\t\tarr.push({\n\t\t\tendpoint: 'downloads'\n\t\t});\n\n\t\t_.each(versions, function (version) {\n\t\t\tversionsObj[version.versionId] = version.guids;\n\t\t});\n\t\tlet endpoint = PJQ.helpers.urlHelpers.generateEndpoint(arr, params),\n\t\t\tdata = {\n\t\t\t\tversions: versionsObj\n\t\t\t};\n\t\tPJQ.files.queueDownload(endpoint, data);\n\t},\n\tgetUnPublishedBatchesCount: function (projectId, callback) {\n\t\tnew PJQ.ajax.Request({\n\t\t\tendpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'projects',\n\t\t\t\t\tvalue: projectId\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'drawings'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'batches'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tendpoint: 'unpublished'\n\t\t\t\t}\n\t\t\t])\n\t\t}).get().done(function (data) {\n\t\t\tcallback(data.count);\n\t\t}).fail(function () {\n\t\t\tcallback(null);\n\t\t});\n\t}\n};","PJQ.models.drawings.Version = PJQ.models.BaseModel.extend({\n idAttribute: 'versionId',\n notifyName: 'Version',\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.get('projectId')\n },\n {\n endpoint: 'versions',\n value: this.id\n }\n ]);\n },\n parse: function (model) {\n this.drawings = new PJQ.collections.drawings.Drawings(model.drawings);\n this.listenTo(this.drawings, 'change', _.bind(function () {\n this.trigger('change');\n }, this));\n return model;\n },\n beforeSave: function () {\n this.set('drawings', this.drawings.getChangedModels());\n },\n download: function () {\n PJQ.files.queueDownload(this.endpoint() + '/download');\n },\n getDrawingTags: function () {\n let tags = [];\n _.each(this.drawings.models, function (drawing) {\n let drawingTags = drawing.get('tags');\n if (_.size(drawingTags) > 0) {\n tags.push(...drawingTags);\n }\n });\n return _.uniq(tags);\n }\n});\n\nPJQ.models.drawings.DrawingBatch = PJQ.models.BaseModel.extend({\n idAttribute: 'batchId',\n notifyName: 'Batch',\n defaults: {\n isFileAPI: true\n },\n endpoint: function (urlOpts) {\n if (this.id > 0) {\n let params = null;\n if (urlOpts && urlOpts.publish) {\n params = [\n {\n parameter: 'publish',\n value: true\n }\n ];\n\n if (urlOpts.billRawFileUploadId) {\n params.push({\n parameter: 'billRawFileUploadId',\n value: urlOpts.billRawFileUploadId\n });\n }\n if (urlOpts.billDeerfieldTicketId) {\n params.push({\n parameter: 'billDeerfieldTicketId',\n value: urlOpts.billDeerfieldTicketId\n });\n }\n\n } else if (urlOpts && urlOpts.revert) {\n params = [\n {\n parameter: 'revert',\n value: true\n }\n ];\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'batches',\n value: this.id\n }\n ], params);\n } else if (_.size(this.files.models) > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.get('projectId')\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'versions',\n value: this.version.id\n },\n {\n endpoint: 'filebatch'\n },\n ], [\n {\n parameter: 'entryList',\n value: _.map(this.files.models, function (file) {\n return file.get('entryId');\n }).join(',')\n }\n ]);\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.get('projectId')\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'batches',\n value: this.id\n }\n ]);\n },\n parse: function (model) {\n if (model != null) {\n if (model.createdBy != null) {\n this.createdBy = new PJQ.models.users.User(model.createdBy);\n }\n\n if (model.version != null) {\n this.version = new PJQ.models.drawings.Version(model.version);\n }\n }\n\n this.files = new PJQ.collections.files.Files(model.files);\n this.uploads = new PJQ.collections.drawings.Drawings(model.uploads);\n this.drawings = new PJQ.collections.drawings.Drawings(model.drawings);\n return model;\n },\n fetchStatus: function (callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'batches',\n value: this.get('guid')\n },\n {\n endpoint: 'status'\n }\n ])\n }).get().done(_.bind(function (data) {\n this.set('status', data.status);\n callback(data.status);\n }, this));\n },\n beforeSave: function () {\n if (this.version != null) {\n this.set('versionId', this.version.id);\n }\n\n this.set('files', this.files.getChangedModels());\n this.set('uploads', this.uploads.getChangedModels());\n this.set('drawings', this.drawings);\n }\n});\n\nPJQ.models.drawings.DrawingBatchNotification = PJQ.models.BaseModel.extend({\n defaults: {\n isAPIv2: true\n },\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'batches',\n value: this.get('batchId')\n },\n {\n endpoint: 'notify',\n value: this.id\n }\n ]);\n },\n beforeSave: function () {\n\n }\n});\n\nPJQ.models.drawings.Drawing = PJQ.models.files.File.extend({\n idAttribute: 'drawingId',\n endpoint: function (urlOpts) {\n let params = [];\n if (urlOpts && urlOpts.currentSet != null) {\n params = [\n {\n parameter: 'currentSet',\n value: urlOpts.currentSet\n }\n ];\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: _.size(this.get('guid')) > 0 ? this.get('guid') : this.id\n }\n ], params);\n },\n download: function (withAnnotations = false, context = null, contextId = null) {\n let downloadUrl = this.endpoint() + '/download';\n if (PJQ.app.session.project != null) {\n downloadUrl = \"/projects/\" + PJQ.app.session.project.id.toString() + \"/\" + downloadUrl\n }\n\n if (withAnnotations) {\n downloadUrl += \"?annotations=true&_=\" + PJQ.helpers.guid();\n\n if (_.size(context) > 0 && contextId > 0) {\n downloadUrl = downloadUrl + (downloadUrl.indexOf(\"?\") === -1 ? \"?\" : \"&\") + \"context=\" + context + \"&contextId=\" + contextId.toString();\n }\n }\n\n PJQ.files.downloadFile(downloadUrl, {\n isApi2: true,\n includeAccessKey: true\n });\n },\n thumbUrl: function () {\n return this.url({\n isFileAPI: true\n }) + \"/thumbnail?r=\" + this.get('rotation').toString();\n },\n cropUrl: function () {\n return this.url({\n isFileAPI: true\n }) + \"/crop?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n },\n cropNameUrl: function () {\n return this.url({\n isFileAPI: true\n }) + \"/cropname?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n },\n cropTitleUrl: function () {\n return this.url({\n isFileAPI: true\n }) + \"/croptitle?r=\" + this.get('rotation').toString() + '&g=' + PJQ.helpers.guid();\n },\n renderUrl: function () {\n return this.url({\n isFileAPI: true\n }) + \"/render?r=\" + this.get('rotation').toString();\n },\n rotate: function (degrees, callback) {\n let curRotation = this.get('rotation'),\n newRotation = (curRotation ? curRotation : 0) + degrees;\n if (newRotation >= 360) {\n newRotation = newRotation -= 360;\n } else if (newRotation < 0) {\n newRotation = newRotation += 360;\n }\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.get('guid')\n },\n {\n endpoint: 'rotate'\n }\n ], [\n {\n parameter: 'degrees',\n value: degrees\n }\n ]),\n isApi2: true\n }).post().done(_.bind(function (data) {\n this.set({\n rotation: newRotation\n });\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(false);\n }\n });\n },\n addTags: function (tags, options, callback) {\n let newTags = _.difference(tags, this.get('tags')),\n fnAdd = _.bind(function () {\n this.get('tags').push(...newTags);\n this.trigger(\"change\");\n if (typeof callback === 'function') {\n callback(newTags);\n }\n }, this);\n if (options == null || options.save !== false) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.id\n },\n {\n endpoint: 'tags'\n }\n ], [\n {\n parameter: 'tags',\n value: newTags.join(',')\n }\n ])\n }).post().done(_.bind(function () {\n fnAdd();\n }, this)).fail(function () {\n if (typeof callback === 'function') {\n callback(null);\n }\n });\n } else {\n fnAdd();\n }\n },\n deleteTag: function (name, options, callback) {\n let fnDelete = _.bind(function () {\n this.set('tags', _.without(this.get('tags'), name));\n this.trigger(\"change\");\n if (typeof callback === 'function') {\n callback(true);\n }\n }, this);\n\n if (options == null || options.save !== false) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.id\n },\n {\n endpoint: 'tags'\n }\n ], [\n {\n parameter: 'name',\n value: name\n }\n ])\n }).delete().done(_.bind(function () {\n fnDelete();\n }, this)).fail(function () {\n callback(false);\n });\n } else {\n fnDelete();\n }\n },\n fetchAnnotations: function (options, callback) {\n if (this.annotations != null && options.context == this.annotations.options.context && options.contextId == this.annotations.options.contextId) {\n callback(this.annotations);\n return;\n }\n\n this.annotations = new PJQ.collections.drawings.Annotations(null, {\n drawingId: this.id,\n context: options != null ? options.context : null,\n contextId: options != null ? options.contextId : null,\n accessKey: options != null ? options.accessKey : null\n });\n this.annotations.fetch({\n success: _.bind(function () {\n callback(this.annotations);\n }, this)\n });\n },\n updateScale: function (scale, scaleType, callback) {\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings',\n value: this.id\n }\n ], [\n {\n parameter: 'scale',\n value: scale\n },\n {\n parameter: 'scaleType',\n value: scaleType\n }\n ])\n }).put().done(_.bind(function () {\n this.set({\n scale: scale,\n scaleType: scaleType\n });\n callback(true);\n }, this)).fail(function () {\n callback(false);\n });\n }\n});\n\nPJQ.collections.drawings.Versions = PJQ.collections.BaseCollection.extend({\n model: PJQ.models.drawings.Version,\n endpoint: function () {\n if (_.size(this.options.accessKey) > 0) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'share',\n value: this.options.accessKey\n }\n ]);\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'versions'\n }\n ]);\n },\n getDrawing: function (drawingId) {\n let result = null;\n _.each(this.models, function (version) {\n let drawing = _.find(version.drawings.models, function (drawing) {\n return drawing.id === drawingId;\n });\n if (drawing != null) {\n result = drawing\n }\n });\n return result;\n },\n getDrawingCount: function () {\n let result = 0;\n _.each(this.models, function (version) {\n result += _.size(version.drawings.models);\n });\n return result;\n },\n getVersionStatsForDrawing: function (drawing) {\n // total starts at 1 because the code below will not match on \"own version\"\n // drawings have to belong to at least 1 version, so it starts at 1\n let result = {\n older: 0,\n newer: 0,\n total: 1,\n same: false,\n hide: false\n },\n ownVersion = this.get(drawing.get('versionId'))\n if (ownVersion == null) {\n result.hide = true;\n } else {\n let ownIssued = new Date(ownVersion.get('issuedOn')),\n ownCreated = new Date(ownVersion.get('createdOn'));\n _.each(this.models, function (version) {\n if (version.id > 0 && version.drawings.find(function (verDrawing) {\n return drawing.get('name') === verDrawing.get('name') && verDrawing.id !== drawing.id;\n }) != null) {\n result.total++;\n if (version.id === ownVersion.id) {\n result.same = true;\n } else {\n let thisIssued = new Date(version.get('issuedOn'));\n if (thisIssued > ownIssued) {\n result.newer++;\n } else if (thisIssued < ownIssued) {\n result.older++;\n } else {\n let thisCreated = new Date(version.get('createdOn'));\n if (thisCreated > ownCreated) {\n result.newer++;\n } else if (thisCreated < ownCreated) {\n result.older++;\n }\n }\n }\n }\n });\n }\n return result;\n },\n findVersionsForDrawing: function (drawing, includeOwnVersion = true) {\n return _.filter(this.models, function (version) {\n return (includeOwnVersion || (!includeOwnVersion && version.id !== drawing.get('versionId'))) && version.drawings.findWhere({name: drawing.get('name')}) != null;\n }, this);\n },\n getDrawingTags: function () {\n let result = [];\n _.each(this.models, function (version) {\n result.push(...version.getDrawingTags());\n });\n return result;\n },\n getUniqueDrawings: function (excludeVersion) {\n let foundNames = [],\n fullSet = [];\n _.each(this.models, _.bind(function (version) {\n if (excludeVersion != null && version.id === excludeVersion.id) {\n return;\n }\n\n _.each(version.drawings.models, _.bind(function (drawing) {\n let drawingName = drawing.get('name');\n if (foundNames.indexOf(drawingName) === -1) {\n foundNames.push(drawingName);\n fullSet.push(drawing);\n }\n }, this));\n }, this));\n return fullSet;\n },\n createPsuedoFolders: function (attachments) {\n let hasDrawings = false,\n drawingsFolderId = -parseInt(_.uniqueId()),\n drawingAttachments = [],\n tryHideCurrentSet = PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.HIDE_CURRENT_SET_WHEN_POSSIBLE),\n isHideCurrentSet = false;\n if (tryHideCurrentSet) {\n let versionsWithDrawings = _.filter(this.models, (version) => {\n return version.drawings.models.length > 0;\n });\n if (versionsWithDrawings.length <= 2) {\n let getDrawingNames = (version) => {\n let drawingNames = [];\n _.each(version.drawings.models, (drawing) => {\n drawingNames.push(drawing.get('name'));\n });\n return drawingNames;\n },\n currentSet = this.get(-1);\n if (currentSet != null) {\n let currentSetDrawingNames = getDrawingNames(currentSet);\n isHideCurrentSet = null == _.find(versionsWithDrawings, (version) => {\n if (version.id === -1) {\n return false;\n }\n return version.id !== -1 && !_.isEqual(currentSetDrawingNames, getDrawingNames(version));\n });\n }\n }\n }\n _.each(_.sortBy(this.models, function (version) {\n return new Date(version.get('issuedOn'));\n }), _.bind(function (version, index) {\n if (isHideCurrentSet && version.id === -1) {\n return;\n }\n\n if (_.size(version.drawings.models) > 0) {\n hasDrawings = true;\n\n let versionFolderId = -parseInt(_.uniqueId());\n drawingAttachments.push(new PJQ.models.projects.ProjectAttachment({\n entryId: versionFolderId,\n name: version.get('name'),\n folderId: drawingsFolderId,\n sortOrder: version.id === -1 ? -1 : index,\n isFolder: true,\n isDrawing: true,\n versionId: version.id,\n modifiedOn: version.get('createdOn')\n }));\n _.each(version.drawings.models, _.bind(function (drawing) {\n drawingAttachments.push(new PJQ.models.projects.ProjectAttachment({\n entryId: -parseInt(_.uniqueId()),\n name: drawing.get('fileName'),\n guid: drawing.get('guid'),\n folderId: versionFolderId,\n size: drawing.get('fileSize'),\n url: drawing.get('url'),\n drawingId: drawing.id,\n isFolder: false,\n isDrawing: true,\n versionId: version.id,\n sortOrder: drawing.get('sortOrder'),\n modifiedOn: version.get('createdOn')\n }));\n }, this));\n }\n }, this));\n if (_.size(drawingAttachments) > 0) {\n attachments.add(new PJQ.models.projects.ProjectAttachment({\n entryId: drawingsFolderId,\n name: \"Drawings\",\n folderId: 0,\n isFolder: true,\n isDrawing: true,\n modifiedOn: _.max(this.models, function (ver) {\n return ver.id;\n }).get('createdOn'),\n sortOrder: -2\n }));\n attachments.add(drawingAttachments);\n }\n return attachments;\n },\n download: function () {\n\n },\n merge: function () {\n\n }\n});\n\nPJQ.collections.drawings.DrawingBatches = PJQ.collections.files.Files.extend({\n model: PJQ.models.drawings.DrawingBatch,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'batches'\n }\n ]);\n }\n});\n\nPJQ.collections.drawings.Drawings = PJQ.collections.files.Files.extend({\n model: PJQ.models.drawings.Drawing,\n endpoint: function (urlOptions) {\n let params = [];\n if (urlOptions.byName) {\n params.push({\n parameter: 'byName',\n value: true\n });\n }\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.options.project.id\n },\n {\n endpoint: 'drawings'\n }\n ], params);\n },\n share: function (versionIds, fileGuids, data, project, callback) {\n this.options.versionIds = versionIds;\n this.options.fileGuids = fileGuids;\n this.options.data = data;\n this.options.projectId = project ? project.id : null;\n\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'share'\n }\n ], [\n {\n parameter: 'allDrawings',\n value: this.options.allDrawings === true ? true : null\n }\n ]);\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n projectId: this.options.projectId,\n subject: data != null ? data.subject : null,\n emails: data != null ? data.emails : null,\n versionIds: this.options.versionIds,\n drawingGuids: _.map(this.models, function (model) {\n return model.get('guid');\n }),\n guids: this.options.fileGuids\n }\n }).post().done(_.bind(function (data) {\n this.options.url = data.url;\n this.options.accessKey = data.accessKey;\n if (typeof callback === 'function') {\n callback(data);\n }\n }, this)).fail(function () {\n callback();\n });\n },\n update: function (callback) {\n let endpoint = PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'share',\n value: this.options.accessKey\n }\n ], [\n {\n parameter: 'allDrawings',\n value: this.options.allDrawings === true ? true : null\n }\n ]);\n\n let data = this.options.data;\n new PJQ.ajax.Request({\n endpoint: endpoint,\n data: {\n projectId: this.options.projectId,\n subject: data != null ? data.subject : null,\n emails: data != null ? data.emails : null,\n versionIds: this.options.versionIds,\n drawingGuids: _.map(this.models, function (model) {\n return model.get('guid');\n }),\n guids: this.options.fileGuids\n }\n }).put().done(function (data) {\n if (typeof callback === 'function') {\n callback(data);\n }\n }).fail(function () {\n callback();\n });\n }\n});\n\nPJQ.models.drawings.DrawingDownload = PJQ.models.files.File.extend({\n endpointArr: function () {\n return [\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'downloads',\n value: this.get('guid')\n }\n ];\n },\n cancel: function () {\n\n }\n});\n\nPJQ.collections.drawings.DrawingsShare = PJQ.collections.files.Files.extend({\n model: PJQ.models.drawings.Drawing,\n endpoint: function () {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'drawings'\n },\n {\n endpoint: 'share',\n value: this.options.accessKey\n }\n ]);\n }\n});","PJQ.views.drawings.OrderDownloadAdmin = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'modal-order-download-admin'),\n minWidth: '200px',\n onOrderPlaced: null\n },\n events: {\n 'click .btn-save': 'placeOrder'\n },\n beforeModalCreated: function () {\n\n let fnContinue = _.bind(function() {\n this.createOrder();\n\n this.model.beforeSave();\n let endpoint = this.model.project != null ? [\n {\n endpoint: 'projects',\n value: this.model.project.get('projectId')\n },\n {\n endpoint: 'orders'\n },\n {\n endpoint: 'calculate'\n }\n ] : [\n {\n endpoint: 'orders'\n },\n {\n endpoint: 'calculate'\n }\n ];\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpoint),\n data: this.model.attributes\n }).post().done(_.bind(function (data) {\n this.price = data.total * 100;\n this.render();\n }, this)).fail(function (xhr, err, result) {\n });\n }, this);\n\n if (PJQ.app.session.contact != null) {\n PJQ.app.session.preferences.fetch();\n if (!PJQ.app.session.contact.isFetched) {\n PJQ.app.session.contact.fetch({\n success: _.bind(function () {\n fnContinue();\n }, this)\n });\n }\n else\n fnContinue();\n } else if (PJQ.app.session.user != null) {\n PJQ.app.session.preferences.fetch();\n if (!PJQ.app.session.user.isFetched) {\n PJQ.app.session.user.fetch({\n success: _.bind(function () {\n fnContinue();\n }, this)\n });\n }\n else\n fnContinue();\n }\n\n },\n afterRender: function() {\n this.$('.file-count').text(_.size(this.options.entryIds));\n this.$('.unit-cost').text(PJQ.helpers.formatHelpers.formatCurrency(PJQ.app.session.project.orderSettings.get('downloadPerFileFee')));\n this.$('.total').text(PJQ.helpers.formatHelpers.formatCurrency(this.price));\n if (this.price)\n this.$('.btn-save').prop('disabled', false);\n },\n createOrder: function () {\n if (this.model == null) {\n this.model = new PJQ.models.drawings.Order({\n project: PJQ.app.session.project,\n description: \"\",\n poNumber: \"\",\n notes: \"\",\n largeFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) : \"STAPLED\",\n largeFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n largeFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) : 1,\n smallFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) : \"STAPLED\",\n smallFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) : 1,\n smallFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n halfSizeQuantity: 0,\n cdQuantity: 0,\n shippingSpeed: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) : \"Next Day (Morning)\",\n entryIds: this.options.entryIds\n });\n }\n\n this.model.recipients = null;\n let contact;\n if (PJQ.app.session.contact != null) {\n contact = PJQ.app.session.contact;\n } else if (PJQ.app.session.user != null) {\n contact = PJQ.app.session.user;\n } else {\n contact = new PJQ.models.contacts.Contact();\n }\n this.model.set({\n notifyEmail: contact.get('email'),\n billingCompanyName: contact.get('companyName'),\n billingContactName: contact.get('contactName'),\n billingPhone: contact.get('phone'),\n billingPhoneExtension: contact.get('phoneExtension'),\n billingAddress1: contact.get('address1'),\n billingAddress2: contact.get('address2'),\n billingCity: contact.get('city'),\n billingState: contact.get('state'),\n billingZip: contact.get('zip'),\n billingCountry: contact.get('country'),\n isDownload: true\n });\n },\n placeOrder: function() {\n this.model.save(null, {\n success: _.bind(function (result) {\n if (result.get('status') === 'NEW') {\n this.removeModal();\n\n new PJQ.views.BaseModal({\n header: \"Order Completed\",\n body: 'Order #' + result.get('orderId') + ' has been placed successfully.',\n isShowCancelButton: false\n });\n\n if (typeof this.options.onOrderPlaced === 'function') {\n this.options.onOrderPlaced();\n }\n } else {\n let orderType = 'Download';\n window.location.href = window.location.origin + '/DesktopModules/PanteraModuleGlobal/OrderPayment.aspx?oc=PROJECT_WALLS&o=' + this.model.id + '&ot=' + orderType;\n }\n }, this)\n });\n }\n});\n\nPJQ.views.drawings.OrderPrintsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Order-Prints'),\n minWidth: '600px',\n maxWidth: '1400px',\n isSelectRecipients: false,\n onOrderPlaced: null,\n mode: PJQ.constants.files.modes.PRINT,\n subTemplates: {\n orderCalculatedItems: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'ordering-calculated-items')\n },\n },\n events: {\n 'change .input-select-recipients': 'selectRecipientsChanged',\n 'click .btn-close': 'onCancel',\n 'click .btn-save': 'onSave',\n 'click .ordering-folder': 'selectFolder',\n 'click .select-file': 'fileSelectChanged',\n 'click .order-jump-step': 'goToStep',\n 'click .view-file': 'viewFile',\n 'click .delete-recipient': 'deleteRecipient',\n 'click .edit-recipient': 'editRecipient',\n 'click .select-all-files': 'selectAllFiles'\n },\n beforeModalCreated: function () {\n this.options.isAdmin = PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId');\n this.mode = this.options.mode ? this.options.mode : 'PRINTS';\n this.options.maxWidth = this.mode === PJQ.constants.files.modes.ALT_PRINT || (PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() === \"busy\") ? '1400px' : '600px';\n\n if (this.options.isAdmin && _.size(this.options.recipients) > 0) {\n this.options.isSelectRecipients = true;\n }\n\n // Fetch any updated preferences to make sure all are up to date\n if (PJQ.app.session.contact != null) {\n PJQ.app.session.preferences.fetch();\n if (!PJQ.app.session.contact.isFetched) {\n PJQ.app.session.contact.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n }\n } else if (PJQ.app.session.user != null) {\n PJQ.app.session.preferences.fetch();\n if (!PJQ.app.session.user.isFetched) {\n PJQ.app.session.user.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n }\n }\n },\n beforeRender: function () {\n this.createOrder();\n },\n selectRecipientsChanged: function () {\n this.options.isSelectRecipients = this.$('.input-select-recipients').prop('checked');\n this.render();\n },\n createOrder: function () {\n if (this.model == null) {\n this.model = new PJQ.models.drawings.Order({\n project: PJQ.app.session.project,\n description: \"\",\n poNumber: \"\",\n notes: \"\",\n largeFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_BINDING_TYPE) : \"STAPLED\",\n largeFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n largeFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_LARGE_FORMAT_QUANTITY) : 1,\n smallFormatBinding: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_BINDING_TYPE) : \"STAPLED\",\n smallFormatQuantity: PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) > 0 ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_QUANTITY) : 1,\n smallFormatPaperType: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_SMALL_FORMAT_PAPER_TYPE) : \"WHITE BOND\",\n halfSizeQuantity: 0,\n cdQuantity: 0,\n shippingSpeed: PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) ? PJQ.app.session.preferences.getPref(PJQ.constants.preferenceTypes.ORDER_DELIVER_BY) : \"Next Day (Morning)\",\n entryIds: this.options.entryIds\n });\n }\n\n if (this.options.isAdmin && this.options.isSelectRecipients) {\n this.model.recipients = new PJQ.collections.contacts.Contacts(this.options.recipients != null ? this.options.recipients : []);\n } else {\n this.model.recipients = null;\n let contact;\n if (PJQ.app.session.contact != null) {\n contact = PJQ.app.session.contact;\n } else if (PJQ.app.session.user != null) {\n contact = PJQ.app.session.user;\n } else {\n contact = new PJQ.models.contacts.Contact();\n }\n this.model.set({\n notifyEmail: contact.get('email'),\n billingCompanyName: contact.get('companyName'),\n billingContactName: contact.get('contactName'),\n billingPhone: contact.get('phone'),\n billingPhoneExtension: contact.get('phoneExtension'),\n billingAddress1: contact.get('address1'),\n billingAddress2: contact.get('address2'),\n billingCity: contact.get('city'),\n billingState: contact.get('state'),\n billingZip: contact.get('zip'),\n billingCountry: _.size(contact.get('country')) > 0 ? contact.get('country') : 'us',\n isDownload: this.mode === PJQ.constants.files.modes.DOWNLOAD\n });\n }\n },\n renderData: function () {\n return {\n isAdmin: this.options.isAdmin,\n isSelectRecipients: this.options.isSelectRecipients,\n mode: this.mode,\n model: this.model,\n price: this.price,\n isPaidDownload: this.options.isPaidDownload\n };\n },\n afterRender: function () {\n if (this.model != null) {\n if (this.options.isAdmin && this.options.isSelectRecipients) {\n new PJQ.views.contacts.ContactsSelectInput({\n el: this.$('.order-recipients'),\n context: PJQ.app.session.project != null ? PJQ.constants.contacts.contexts.PARTICIPANTS : PJQ.constants.contacts.contexts.CONTACTS,\n selectedContact: this.model.recipients.models,\n showSelectorAddress: true,\n isSingleChoice: false,\n onChange: _.bind(function (selectedContacts) {\n this.model.recipients.reset(selectedContacts);\n }, this)\n });\n } else {\n this.statePicker = new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-state'),\n noneSelectedText: 'Select Value',\n defaultValue: this.model.get('billingState'),\n onChange: _.bind(function (value) {\n this.model.set('billingState', value.toUpperCase());\n }, this)\n });\n this.countryChanged();\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.contact-edit-country'),\n noneSelectedText: 'Select Value',\n defaultValue: this.model.get('billingCountry'),\n onChange: _.bind(function (value) {\n this.model.set('billingCountry', value.toUpperCase());\n this.model.set('billingZip', '');\n this.model.set('billingState', '');\n this.statePicker.setValue('');\n this.$('.contact-edit-zip').val('');\n this.countryChanged();\n }, this)\n });\n\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-phone'));\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-fax'));\n PJQ.helpers.inputHelpers.inputMaskPhone(this.$('.contact-edit-cell'));\n }\n\n /*\n new PJQ.views.files.FileSelectInput({\n el: this.$('.order-files'),\n project: this.model.project,\n selectedFiles: this.model.files,\n collection: this.options.collection,\n selectorOptions: {\n header: 'Select files to order',\n confirmButton: 'Update Order'\n },\n isShowChangeButton: true,\n onChange: _.bind(function (selectedFiles) {\n this.model.files = selectedFiles;\n this.calculateCost();\n }, this)\n });\n\n */\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.order-lf-paper'),\n defaultValue: this.model.get('largeFormatPaperType'),\n onChange: _.bind(function (value) {\n this.model.set('largeFormatPaperType', value.toUpperCase());\n }, this)\n });\n new PJQ.inputs.Selectpicker({\n el: this.$('.order-lf-binding'),\n defaultValue: this.model.get('largeFormatBinding'),\n onChange: _.bind(function (value) {\n this.model.set('largeFormatBinding', value.toUpperCase());\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.order-sf-paper'),\n defaultValue: this.model.get('smallFormatPaperType'),\n onChange: _.bind(function (value) {\n this.model.set('smallFormatPaperType', value.toUpperCase());\n }, this)\n });\n new PJQ.inputs.Selectpicker({\n el: this.$('.order-sf-binding'),\n defaultValue: this.model.get('smallFormatBinding'),\n onChange: _.bind(function (value) {\n this.model.set('smallFormatBinding', value.toUpperCase());\n }, this)\n });\n\n new PJQ.inputs.Selectpicker({\n el: this.$('.order-shipping-speed'),\n defaultValue: this.model.get('shippingSpeed'),\n onChange: _.bind(function (value) {\n this.model.set('shippingSpeed', value.toUpperCase());\n }, this)\n });\n\n if (this.price == null && this.mode === PJQ.constants.files.modes.DOWNLOAD) {\n this.calculateCost();\n }\n\n if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n this.goToStep(1)\n this.renderFolderPicker();\n this.renderAddressBook();\n }\n\n new PJQ.Binder(this.$el, this.model);\n } else {\n new PJQ.Loader(this.$('.order-loading'));\n }\n },\n deleteRecipient: function(e){\n let target = $(e.currentTarget),\n contactId = target.closest('.card-body').data('id');\n\n this.model.recipients.remove(contactId);\n this.calculateCost();\n },\n editRecipient: function(e){\n let target = $(e.currentTarget),\n contactId = target.closest('.card-body').data('id');\n\n new PJQ.views.contacts.BaseEditContactModal({\n model: this.model.recipients.get(contactId),\n onSave: _.bind(function () {\n this.calculateCost();\n }, this)\n });\n },\n selectAllFiles: function(e){\n let isChecked = $(e.currentTarget).prop('checked'),\n fileSelects = this.$('.select-file');\n\n if(isChecked){\n this.model.files = _.union(this.model.files, this.selectedFolderFiles);\n }\n else{\n _.each(this.selectedFolderFiles, function(file){\n this.model.files = _.without(this.model.files, file);\n }, this)\n }\n\n fileSelects.prop('checked', isChecked);\n\n this.$('.order-selected-file-count').text(this.model.files.length);\n this.$('.step-1-continue').attr('disabled', !_.size(this.model.files) > 0);\n },\n viewFile: function(e){\n let target = $(e.currentTarget),\n row = this.filesTable.getRow(target.closest('tr')),\n file = row.data();\n\n if (file.isImage()) {\n PJQ.app.view.renderPhotoViewer({\n model: file,\n canDownload: false,\n canDelete: false\n });\n }\n else if (file.canRender()) {\n new PJQ.views.files.FileViewer({\n model: file,\n isDisableDownload: true\n });\n }\n },\n renderFolderPicker: function(selectedFolder){\n let fnRender = _.bind(function(){\n this.folders = _.filter(this.attachments.models, function (attachment) {\n let isSecondLevel = false;\n if(attachment.get('isFolder') && attachment.get('entryId') !== -1){\n let parent = this.attachments.get(attachment.get('folderId'));\n if(parent){\n isSecondLevel = parent.get('entryId') === -1 || parent.get('folderId') === 0;\n }\n }\n return isSecondLevel && _.size(attachment.getFolderAttachments(true, {\n hideFolders: true\n })) > 0;\n }, this);\n\n if (selectedFolder) {\n this.selectedFolder = _.find(this.attachments.models, function (folder) {\n return folder.id === selectedFolder;\n })\n }\n else {\n this.selectedFolder = this.folders[0];\n }\n\n if(this.selectedFolder){\n this.selectedFolderFiles = _.filter(this.attachments.models, function (attachment) {\n return attachment.get('folderId') === this.selectedFolder.get('entryId') && !attachment.get('isFolder');\n }, this)\n }\n\n let templateData = {\n models: this.folders,\n selectedFolder: this.selectedFolder\n }\n this.renderFilesTable();\n }, this);\n if(this.attachments == null || this.folders == null) {\n this.options.project.fetchAttachments({\n isShared: true,\n isPrivate: false,\n forceRecursive: true\n }, _.bind(function (attachments) {\n this.attachments = attachments;\n fnRender();\n }, this))\n }\n else{\n fnRender();\n }\n },\n renderAddressBook: function(){\n this.addressBookView = new PJQ.views.addressbook.AddressBook({\n el: this.$('.address-book'),\n selectionMode: PJQ.constants.addressBook.selectionMode.ADD_TO_PROJECT,\n disabledContacts: [],\n disabledContactGroups: null,\n onSelection: _.bind(function (contactsAll, contactsNoGroup, contactGroups) {\n this.$('.order-selected-contact-count').text(contactsAll.length);\n this.$('.step-2-continue').attr('disabled', !contactsAll.length > 0);\n this.selectedRecipients = contactsAll;\n }, this)\n });\n },\n renderFilesTable: function () {\n this.filesTable = new PJQ.views.dataTables.DataTable({\n el: this.$(\".file-selector-table\"),\n data: this.selectedFolderFiles,\n rowId: \"cid\",\n order: [0, 'asc'],\n language: {\n zeroRecords: 'Folder contains no files'\n },\n pageLength: 50,\n onRowDoubleClick: _.bind(function (row) {\n\n }, this),\n columns: [\n {\n \"columnData\": '',\n \"title\": '
',\n \"width\": \"20px\",\n \"data\": \"null\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(this.renderFileSelect, this)\n },\n {\n \"title\": \"Name\",\n \"data\": \"attributes.name\",\n \"orderable\": true\n },\n {\n \"title\": \"Folder\",\n \"data\": \"\",\n \"orderable\": true,\n \"render\": _.bind(function (data, a, b) {\n return this.selectedFolder.get('name');\n }, this)\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"width\": \"80px\",\n \"render\": _.bind(function (data, type, row) {\n if(row.canRender() || row.isImage()){\n return '
';\n }\n else{\n return '';\n }\n }, this)\n }\n ]\n });\n },\n selectFolder: function(e){\n let target = $(e.currentTarget);\n this.renderFolderPicker(target.data('id'));\n },\n renderFileSelect: function (data, type, row) {\n let isSelected = _.find(this.model.files, function(file){\n return file.get('entryId') === row.get('entryId')\n }, this) != null\n\n this.manageSelectAllButtonState();\n\n return ('
' +\n '' +\n '
' +\n '
');\n },\n fileSelectChanged: function (e) {\n let tr = $(e.currentTarget).closest('tr'),\n row = this.filesTable.getRow(tr),\n file = row.data();\n if ($(e.currentTarget).prop('checked')) {\n this.model.files.push(file);\n }\n else {\n this.model.files = _.without(this.model.files, file);\n }\n\n this.manageSelectAllButtonState();\n this.$('.order-selected-file-count').text(this.model.files.length);\n this.$('.step-1-continue').attr('disabled', !_.size(this.model.files) > 0);\n },\n countryChanged: function () {\n let country = this.model.get('billingCountry') && this.model.get('billingCountry').length > 0 ? this.model.get('billingCountry').toLowerCase() : 'us',\n options = '';\n _.each(PJQ.constants.states[country], function (state) {\n options += '';\n });\n this.statePicker.$el.html(options);\n this.statePicker.refresh();\n if (this.model.get('billingState'))\n this.statePicker.setValue(this.model.get('billingState').toLowerCase());\n\n PJQ.helpers.inputHelpers.inputMaskZip(this.$('.contact-edit-zip'), country);\n },\n manageSelectAllButtonState: function() {\n let isSelectAll = true;\n _.each(this.selectedFolderFiles, function(row){\n if(isSelectAll){\n isSelectAll = _.find(this.model.files, function(file){\n return file.get('entryId') === row.get('entryId')\n }, this) != null\n }\n }, this)\n\n this.$('.select-all-files').prop('checked', isSelectAll);\n },\n goToStep: function (step) {\n if(step.currentTarget){\n this.step = $(step.currentTarget).data('step')\n }\n else{\n this.step = step;\n }\n let thisStep = $('.step-' + this.step.toString()),\n thisStepHeader = $('.step-header-' + this.step.toString());\n this.$('[class*=step-]').not(thisStep).collapse('hide');\n this.$('[class*=step-header-]').not(thisStepHeader).removeClass('text-primary').addClass('text-dark op-4');\n thisStepHeader.removeClass('text-dark op-4').addClass('text-primary');\n\n if (this.step === 1) {\n this.$('.order-selected-file-count').parent().removeClass('text-dark op-4').addClass('text-info');\n this.$('.order-selected-contact-count').parent().removeClass('text-info').addClass('text-dark op-4');\n }\n else if (this.step === 2) {\n this.$('.order-selected-file-count').parent().removeClass('text-info').addClass('text-dark op-4');\n this.$('.order-selected-contact-count').parent().removeClass('text-dark op-4').addClass('text-info');\n }\n else if (this.step === 3) {\n this.$('.order-selected-contact-count').parent().removeClass('text-info').addClass('text-dark op-4');\n\n if(this.model.recipients == null){\n this.model.recipients = new PJQ.collections.contacts.Contacts();\n }\n this.model.recipients.reset(_.map(this.selectedRecipients, function(contact, a, b){\n return new PJQ.models.contacts.Contact({\n contactId: contact,\n id: contact\n });\n }, this));\n this.calculateCost();\n }\n\n\n // don't hide the footer if the project is offline\n let isOnline = false;\n if(!PJQ.app.session.project){\n isOnline = true;\n }\n else if(PJQ.app.session.project && PJQ.app.session.project.get('status').toLowerCase() !== \"busy\"){\n isOnline = true;\n }\n\n this.$('.modal-footer').attr('hidden', this.step !== 3 && isOnline);\n\n thisStep.collapse('show');\n },\n calculateCost: function () {\n this.model.beforeSave();\n let endpoint = this.model.project != null ? [\n {\n endpoint: 'projects',\n value: this.model.project.get('projectId')\n },\n {\n endpoint: 'orders'\n },\n {\n endpoint: this.mode === PJQ.constants.files.modes.ALT_PRINT ? 'calculatemultiple' : 'calculate'\n }\n ] : [\n {\n endpoint: 'orders'\n },\n {\n endpoint: 'calculate'\n }\n ];\n\n new PJQ.ajax.Request({\n endpoint: PJQ.helpers.urlHelpers.generateEndpoint(endpoint),\n data: this.model.attributes\n }).post().done(_.bind(function (data) {\n if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n this.renderCalculatedTotals(data);\n }\n else{\n this.price = data.total * 100;\n this.render();\n }\n }, this)).fail(function (xhr, err, result) {\n });\n },\n renderCalculatedTotals: function(orders) {\n let templateData = {\n orders: orders\n }\n this.renderSubTemplate(false, this.options.subTemplates.orderCalculatedItems, this.$('.calculated-totals'), templateData);\n },\n onCancel: function () {\n this.removeModal();\n },\n onSave: function () {\n let hasError = false;\n\n if (this.options.isAdmin && this.options.isSelectRecipients) {\n if (_.size(this.model.recipients.models) === 0) {\n hasError = true;\n }\n }\n else if(this.mode === PJQ.constants.files.modes.ALT_PRINT){\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_PO_REQUIRED)) {\n let $po = this.$('.order-po-number');\n PJQ.helpers.inputHelpers.setInputError($po, true);\n if (_.size(this.model.get('poNumber')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($po, false);\n hasError = true;\n }\n }\n }\n else{\n let $company = this.$('.contact-edit-company');\n PJQ.helpers.inputHelpers.setInputError($company, true);\n if (_.size($company.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($company, false);\n hasError = true;\n }\n\n let $contact = this.$('.contact-edit-name');\n PJQ.helpers.inputHelpers.setInputError($contact, true);\n if (_.size($contact.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($contact, false);\n hasError = true;\n }\n\n let $address1 = this.$('.contact-edit-address-1');\n PJQ.helpers.inputHelpers.setInputError($address1, true);\n if (_.size($address1.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($address1, false);\n hasError = true;\n }\n\n let $city = this.$('.contact-edit-city');\n PJQ.helpers.inputHelpers.setInputError($city, true);\n if (_.size($city.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($city, false);\n hasError = true;\n }\n\n let $zip = this.$('.contact-edit-zip');\n PJQ.helpers.inputHelpers.setInputError($zip, true);\n if (_.size($zip.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($zip, false);\n hasError = true;\n }\n\n let $state = this.$('select.contact-edit-state');\n PJQ.helpers.inputHelpers.setInputError($state, true);\n if (_.size(this.model.get('billingState')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($state, false);\n hasError = true;\n }\n\n let $country = this.$('select.contact-edit-country');\n PJQ.helpers.inputHelpers.setInputError($country, true);\n if (_.size(this.model.get('billingCountry')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($country, false);\n hasError = true;\n }\n\n let $email = this.$('.contact-edit-email');\n PJQ.helpers.inputHelpers.setInputError($email, true);\n if (_.size($email.val()) === 0) {\n PJQ.helpers.inputHelpers.setInputError($email, false);\n hasError = true;\n }\n\n let $phone = this.$('.contact-edit-phone');\n PJQ.helpers.inputHelpers.setInputError($phone, true);\n if (_.size(this.model.get('billingPhone')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($phone, false);\n hasError = true;\n }\n }\n\n if (_.size(this.options.entryIds) === 0)\n hasError = true;\n\n if (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.ORDER_PO_REQUIRED) && this.mode !== PJQ.constants.files.modes.DOWNLOAD) {\n let $po = this.$('.order-po-number');\n PJQ.helpers.inputHelpers.setInputError($po, true);\n if (_.size(this.model.get('poNumber')) === 0) {\n PJQ.helpers.inputHelpers.setInputError($po, false);\n hasError = true;\n }\n }\n\n if (hasError) {\n this.$('.ordering-error').removeClass('hidden');\n } else {\n this.$('.ordering-error').addClass('hidden');\n this.model.save(null, {\n success: _.bind(function (result) {\n if (this.options.isAdmin && result.get('status') === 'NEW' && this.mode !== PJQ.constants.files.modes.DOWNLOAD) {\n PJQ.notifications.notify.successNotify({\n message: 'Order #' + result.get('orderId') + ' placed successfully'\n });\n this.removeModal();\n\n if (typeof this.options.onOrderPlaced === 'function') {\n this.options.onOrderPlaced();\n }\n } else {\n let orderType = this.mode === PJQ.constants.files.modes.DOWNLOAD ? 'Download' : 'OrderPrints';\n window.location.href = window.location.origin + '/DesktopModules/PanteraModuleGlobal/OrderPayment.aspx?oc=PROJECT_WALLS&o=' + this.model.id + '&ot=' + orderType;\n }\n }, this)\n });\n }\n }\n});\n\nPJQ.models.drawings.Order = PJQ.models.BaseModel.extend({\n idAttribute: 'orderId',\n endpoint: function () {\n if (this.project != null) {\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'projects',\n value: this.project.id\n },\n {\n endpoint: 'orders'\n }\n ])\n }\n\n return PJQ.helpers.urlHelpers.generateEndpoint([\n {\n endpoint: 'orders'\n }\n ])\n },\n parse: function (model) {\n if (model == null) {\n return model;\n }\n\n if (model.project != null) {\n this.project = model.project;\n }\n\n if (model.recipients != null) {\n this.recipients = model.recipients;\n }\n\n return model;\n },\n beforeSave: function () {\n this.set({\n recipients: this.recipients ? this.recipients.toJSON() : []\n })\n }\n});\n","PJQ.views.drawings.DrawingUploadLogModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Upload-Log'),\n width: 800,\n maxWidth: '90%'\n },\n events: {\n 'click .btn-revert-batch': 'revertBatch',\n 'click .btn-notify': 'notify',\n 'click .btn-publish-batch': 'publishBatch',\n 'click .btn-delete-batch': 'deleteBatch',\n 'click .btn-new-batch': 'newBatch',\n 'click .btn-close': 'close'\n },\n beforeModalCreated: function () {\n this.collection = new PJQ.collections.drawings.DrawingBatches(null, {\n project: this.options.project\n });\n this.collection.fetch({\n success: _.bind(function () {\n this.render();\n this.listenTo(this.collection, 'fetch', this.render);\n }, this)\n });\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.upload-log'),\n data: this.collection.models,\n language: {\n zeroRecords: 'Click \"Upload Drawings\" to publish a new version'\n },\n isHideSearch: true,\n order: [3, 'desc'],\n columns: [\n {\n \"data\": \"attributes.drawingCount\",\n \"render\": _.bind(function (data, type, row) {\n if (row.get('status') === 2) {\n return '
' + data.toString() + '
';\n }\n return '';\n }, this),\n \"title\": \"\",\n \"width\": \"50px\"\n },\n {\"data\": \"attributes.versionName\", \"title\": \"Version\", \"orderable\": true},\n {\n \"data\": \"createdBy\",\n \"render\": _.bind(function (data) {\n return PJQ.helpers.contacts.getContactAnchor({id: -data.id, name: data.get('companyName')});\n }, this),\n \"title\": \"Created By\"\n },\n {\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('createdOn'));\n },\n \"filter\": \"attributes.createdOn\",\n \"display\": function (row) {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('createdOn')), PJQ.helpers.dateHelpers.dateFormats.DATE_TIME);\n }\n },\n \"title\": \"Created On\",\n \"width\": \"150px\"\n },\n {\n \"data\": \"attributes.isPublished\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let status = row.get('status'),\n content;\n if (status === 0 || status === 1) {\n content = 'Processing...';\n } else if (status === 2 && row.get('isPublished')) {\n let btn = `
\n \n \n
`;\n // let btn = '';\n content = 'Published' + btn;\n } else {\n content = '';\n }\n return '
' + content + '
';\n }, this),\n \"width\": '150px'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n\n _.each(this.collection.models, _.bind(function (batch) {\n this.checkBatchStatus(batch)\n }, this));\n },\n checkBatchStatus: function (batch) {\n if (batch.get('status') === 0 || batch.get('status') === 1) {\n batch.statusTimeout = setTimeout(_.bind(function () {\n batch.fetchStatus(_.bind(function (status) {\n if (status === 2) {\n // we want to fetch the batch now to get the correct drawing count\n this.collection.fetch({\n success: _.bind(function () {\n this.dataTable.refresh();\n }, this)\n });\n return;\n }\n this.checkBatchStatus(batch);\n }, this));\n }, this), 3000)\n }\n },\n notify: function (e) {\n this.removeModal();\n\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n batch = row.data();\n new PJQ.views.drawings.BatchNotifyModal({\n batch: batch,\n versions: this.options.versions\n });\n },\n revertBatch: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n batch = row.data();\n new PJQ.views.modals.YesNo({\n header: \"Revert Upload\",\n body: \"Are you sure you want to revert? This will un-publish all of the drawings in this upload.\",\n onYes: _.bind(function () {\n batch.save(null, {\n urlOptions: {\n revert: true\n },\n success: _.bind(function () {\n batch.set('isPublished', false);\n this.dataTable.refresh();\n this.options.versions.fetch({\n success: _.bind(function () {\n PJQ.notifications.notify.successNotify({\n message: 'Drawing upload reverted'\n });\n }, this)\n });\n }, this)\n });\n }, this)\n });\n },\n publishBatch: function (e) {\n let row = this.dataTable.getRow($(e.currentTarget).closest('tr')),\n batch = row.data();\n this.close();\n new PJQ.views.drawings.DrawingBatchModal({\n model: batch,\n versions: this.options.versions,\n project: this.options.project\n });\n },\n deleteBatch: function (e) {\n let $row = $(e.currentTarget).closest('tr'),\n row = this.dataTable.getRow($row),\n batch = row.data();\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Upload\",\n body: \"Are you sure you want to delete this upload?\",\n onDelete: _.bind(function () {\n batch.destroy({\n success: _.bind(function () {\n this.collection.remove(batch);\n this.dataTable.removeRow(row);\n }, this)\n });\n }, this)\n });\n },\n newBatch: function () {\n this.close();\n new PJQ.views.drawings.DrawingBatchModal({\n versions: this.options.versions,\n project: this.options.project\n });\n },\n close: function () {\n this.removeModal();\n _.each(this.collection.models, _.bind(function (batch) {\n if (batch.statusTimeout != null) {\n clearTimeout(batch.statusTimeout);\n batch.statusTimeout = null;\n }\n }, this));\n }\n});\n\nPJQ.views.drawings.SortDrawings = PJQ.views.BaseView.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Sort-Drawings'),\n onChange: null,\n showViewLink: true,\n batch: null,\n sortFullSet: false\n },\n events: {\n 'click .btn-view-drawing': 'viewDrawing',\n 'click .btn-sort-common': 'sortCommon',\n 'click .btn-sort-alpha-num': 'sortAlphaNumeric',\n 'click .btn-sort-up': 'sortDrawingUp',\n 'click .btn-sort-down': 'sortDrawingDown',\n 'click .btn-sort-top': 'sortTop',\n 'click .btn-sort-bottom': 'sortBottom'\n },\n beforeFirstRender: function () {\n this.sortDrawings = [];\n this.fullset = [];\n let mergeCurrentSet = false;\n if (this.options.batch != null) {\n let hasCurrentSetChange = !this.options.batch.get('replaceCurrentSet') && null != this.options.batch.drawings.findWhere({\n isCurrentSet: true,\n isPublished: false\n });\n\n if (!hasCurrentSetChange) {\n this.options.batch.drawings.reset(this.options.batch.drawings.where({isPublished: false}));\n } else {\n mergeCurrentSet = true;\n }\n\n _.each(this.options.batch.drawings.models, function (drawing) {\n if (!drawing.get('isDeleted')) {\n this.fullset.push(drawing);\n this.sortDrawings.push({\n drawing: drawing,\n matches: []\n });\n }\n }, this);\n\n _.each(this.sortDrawings.toReversed(), function (sortDrawing, index) {\n sortDrawing.drawing.set('sortOrder', index * -1);\n });\n\n } else if (this.options.sortVersion != null) {\n let curSet = this.options.versions.get(-1);\n mergeCurrentSet = null != _.find(this.options.sortVersion.drawings.models, (sDrawing) => {\n return curSet.drawings.findWhere({name: sDrawing.get('name')});\n });\n } else {\n mergeCurrentSet = true;\n }\n\n if (this.options.sortVersion != null && !mergeCurrentSet) {\n _.each(this.options.sortVersion.drawings.models, (drawing) => {\n this.sortDrawings.push({\n drawing: drawing,\n matches: []\n });\n this.fullset.push(drawing);\n });\n } else {\n let self = this,\n curSet = self.options.versions.get(-1);\n if (curSet != null) {\n _.each(curSet.drawings.models, function (drawing) {\n let sortItem = _.find(self.sortDrawings, function (sortItem) {\n return drawing.get('name') === sortItem.drawing.get('name');\n });\n if (sortItem != null) {\n sortItem.matches.push(drawing);\n sortItem.drawing.set('sortOrder', drawing.get('sortOrder'));\n } else {\n self.fullset.push(drawing);\n self.sortDrawings.push({\n drawing: drawing,\n matches: []\n });\n\n if (self.options.batch != null) {\n // we have to add this drawing to the batch so it gets saved with the new sort order\n // it will save across all by name if the drawing being updated is already published\n self.options.batch.drawings.add(drawing);\n }\n }\n });\n }\n\n _.each(self.options.versions.models, function (version) {\n _.each(version.drawings.models, function (drawing) {\n if (!drawing.get('isDeleted')) {\n let sortItem = _.find(self.sortDrawings, function (sortItem) {\n return drawing.get('name') === sortItem.drawing.get('name');\n });\n if (sortItem != null) {\n sortItem.matches.push(drawing);\n } else if (self.options.sortFullSet) {\n self.fullset.push(drawing);\n self.sortDrawings.push({\n drawing: drawing,\n matches: []\n });\n\n if (self.options.batch != null) {\n // we have to add this drawing to the batch so it gets saved with the new sort order\n // it will save across all by name if the drawing being updated is already published\n self.options.batch.drawings.add(drawing);\n }\n }\n }\n });\n });\n\n // iterate through each of the models in order of their sort order and e-set their sort order\n // this is to ensure they are sequential with no gaps or duplicates\n if (self.options.batch != null) {\n let drawingsSorted = _.sortBy(self.options.batch.drawings.models, function (drawing) {\n return drawing.get('sortOrder');\n });\n for (let i = 0; i < drawingsSorted.length; i++) {\n drawingsSorted[i].set('sortOrder', i + 1);\n }\n }\n }\n },\n renderData: function () {\n return {\n showViewLink: this.options.showViewLink,\n sortDrawings: this.fullset,\n contextDrawing: this.options.contextDrawing\n };\n },\n afterRender: function () {\n let self = this;\n self.drawingSortable = new PJQ.Sortable(self.$('.drawings-sort'), {\n containment: \"parent\",\n items: '.drawing-sort',\n multiple: true,\n connectWith: '.drawing-sort',\n onStop: function () {\n self.setSortLabels();\n }\n });\n },\n setSortLabels: function () {\n let self = this;\n self.$('.drawing-sort').each(function (index) {\n let id = $(this).data('id'),\n item = _.find(self.fullset, function (sortDrawing) {\n return sortDrawing.id === id\n }),\n name = item.get(\"name\"),\n sortItem = _.find(self.sortDrawings, function (sortDrawing) {\n return sortDrawing.drawing.get('name') === name\n }),\n sortOrder = index + 1;\n\n sortItem.drawing.set('sortOrder', sortOrder);\n _.each(sortItem.matches, function (match) {\n match.set('sortOrder', sortOrder);\n });\n $(this).find('.sort-index').html(sortOrder.toString() + '.');\n });\n this.onChange();\n },\n viewDrawing: function (e) {\n let drawingId = $(e.currentTarget).closest('.drawing-sort').data('id'),\n drawing = _.find(this.fullset, function (d) {\n return d.id === drawingId;\n });\n new PJQ.views.drawings.DrawingViewer({\n model: drawing,\n contextVersion: this.options.versions.get(drawing.get('versionId')),\n batch: this.options.batch,\n versions: this.options.versions,\n onSortChange: _.bind(function () {\n this.onChange();\n this.render();\n }, this)\n });\n },\n sortCommon: function () {\n this.autoSort('common');\n },\n sortAlphaNumeric: function () {\n this.autoSort('alpha');\n },\n autoSort: function (type) {\n switch (type) {\n case 'common':\n this.fullset = this.fullset.sort(function (a, b) {\n return PJQ.helpers.sortHelpers.sortCommonPageNumbers(a.get('name'), b.get('name'));\n });\n break;\n case 'alpha':\n this.fullset = this.fullset.sort(function (a, b) {\n return PJQ.helpers.sortHelpers.sortAlphaNum(a.get('name'), b.get('name'));\n });\n break;\n }\n\n _.each(this.fullset, function (drawing, index) {\n let sortItem = _.find(this.sortDrawings, function (sortDrawing) {\n return sortDrawing.drawing.get('name') === drawing.get('name');\n }),\n sortOrder = index + 1;\n sortItem.drawing.set('sortOrder', sortOrder);\n _.each(sortItem.matches, function (match) {\n match.set('sortOrder', sortOrder);\n });\n }, this);\n this.onChange();\n this.render();\n },\n sortDrawingUp: function (e) {\n let $drawing = $(e.currentTarget).closest('.drawing-sort');\n $drawing.insertBefore($drawing.prev());\n this.setSortLabels();\n },\n sortDrawingDown: function () {\n let $drawing = $(e.currentTarget).closest('.drawing-sort');\n $drawing.insertAfter($drawing.next());\n this.setSortLabels();\n },\n sortTop: function () {\n this.drawingSortable.moveSelectedTop();\n },\n sortBottom: function () {\n this.drawingSortable.moveSelectedBottom();\n },\n onChange: function () {\n if (typeof this.options.onChange === 'function') {\n this.options.onChange();\n }\n }\n});\n\nPJQ.views.drawings.SortDrawingsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Sort-Drawings'),\n width: 600,\n maxWidth: '90%',\n onDone: _.noop,\n sortFullSet: false\n },\n events: {\n 'click .btn-done': 'done'\n },\n afterRender: function () {\n new PJQ.views.drawings.SortDrawings({\n el: this.$('.sort-drawings'),\n versions: this.options.versions,\n sortVersion: this.options.sortVersion,\n batch: this.options.batch,\n sortFullSet: this.options.sortFullSet\n });\n },\n done: function () {\n if (typeof this.options.onDone === 'function') {\n this.options.onDone();\n }\n this.removeModal();\n }\n});\n\nPJQ.views.drawings.AdvancedDownloadModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Advanced-Download'),\n width: 500,\n maxWidth: '90%',\n onDone: _.noop\n },\n events: {\n 'click .btn-download': 'download'\n },\n renderData: function () {\n return {\n project: this.options.project,\n isPaidDownload: this.options.isPaidDownload,\n isPrintOrder: this.options.isPrintOrder\n };\n },\n afterRender: function () {\n if (this.options.isPrintOrder) {\n this.$('.context-title').text('Order Prints')\n this.$('.btn-download').text('Continue');\n }\n\n this.renderDrawingSelector();\n },\n renderDrawingSelector: function () {\n new PJQ.views.drawings.DrawingSelectorTree({\n el: this.$('.drawings-tree'),\n collection: this.collection,\n onChange: _.bind(function (versions) {\n this.selectedVersions = versions;\n\n let selDrawingCount = 0;\n _.each(versions, function (version) {\n selDrawingCount += _.size(version.guids);\n });\n this.$('.btn-download').prop('disabled', selDrawingCount === 0);\n }, this)\n });\n },\n download: function () {\n let raster = this.$('.checkbox-raster').prop('checked'),\n merge = this.$('.checkbox-merge').prop('checked'),\n includeAttachments = this.$('.checkbox-attachments').prop('checked'),\n includeMyAnnotations = this.$('.checkbox-my-annotations').prop('checked'),\n includePublishedAnnotations = this.$('.checkbox-published-annotations').prop('checked');\n\n let dl = _.bind(function () {\n let entryIds = [];\n _.each(this.selectedVersions, function (selectedVersions) {\n entryIds.push(..._.map(selectedVersions.ids, function (id) {\n return id * -1;\n }));\n });\n if (this.options.isPaidDownload) {\n if (PJQ.app.session.project != null && PJQ.app.session.project.get('masterUserId') === PJQ.app.session.get('masterUserId') && (PJQ.app.session.preferences.hasPref(PJQ.constants.preferenceTypes.CAN_ORDER_ON_ACCOUNT) || PJQ.app.session.hasPermission('documents.onAccount'))) {\n new PJQ.views.drawings.OrderDownloadAdmin({\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.DOWNLOAD,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n }\n } else if (this.options.isPrintOrder) {\n new PJQ.views.drawings.OrderPrintsModal({\n mode: PJQ.constants.files.modes.PRINT,\n entryIds: entryIds,\n orderSettings: this.options.orderSettings\n });\n } else {\n PJQ.helpers.drawings.createDownload(this.options.project, this.selectedVersions, {\n raster: raster,\n merge: merge,\n includeAttachments: includeAttachments,\n includeMyAnnotations: includeMyAnnotations,\n includePublishedAnnotations: includePublishedAnnotations\n });\n }\n }, this);\n if (this.options.project != null) {\n this.options.project.checkDownloadRequirements(_.bind(function () {\n dl();\n this.removeModal();\n }, this));\n } else {\n dl();\n }\n }\n});\n\nPJQ.views.drawings.ManageVersionsModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'Modal-Manage-Versions'),\n width: 600,\n maxWidth: '90%'\n },\n events: {\n 'click .btn-upload-to-version': 'uploadToVersion',\n 'click .btn-new-batch': 'newBatch',\n 'click .btn-sort-version': 'sortVersion',\n 'click .btn-edit-version': 'editVersion',\n 'click .btn-cancel-edit-version': 'cancelEditVersion',\n 'click .btn-delete-version': 'deleteVersion',\n 'click .btn-save-version': 'saveVersion',\n 'click .btn-close': 'close'\n },\n beforeModalCreated: function () {\n if (this.collection == null) {\n this.collection = new PJQ.collections.drawings.Versions(null, {\n project: this.options.project\n });\n this.collection.fetch({\n success: _.bind(function () {\n this.render();\n }, this)\n });\n }\n },\n afterRender: function () {\n this.dataTable = new PJQ.views.dataTables.DataTable({\n el: this.$('.upload-log'),\n data: _.filter(this.collection.models, function (version) {\n return version.id > 0;\n }),\n language: {\n zeroRecords: 'Click \"Upload Drawings\" to publish a new version'\n },\n onTableDraw: _.bind(function () {\n if (this.contextEditVersion != null) {\n this.datePicker = new PJQ.inputs.Datepicker({\n el: this.$('.input-version-date-issued'),\n isShowTimezone: false,\n datepickerOptions: {\n format: PJQ.helpers.dateHelpers.dateFormats.datePicker.DATE\n },\n onChange: _.bind(function (newDate) {\n this.contextEditVersion.set('issuedOn', newDate);\n }, this)\n });\n }\n }, this),\n isHideSearch: true,\n order: [1, 'desc'],\n columns: [\n // {\n // \t\"data\": \"attributes.drawings\",\n // \t\"render\": _.bind(function (data, type, row) {\n // \t\tlet drawingCount = _.size(row.drawings);\n // \t\tif (drawingCount > 0) {\n // \t\t\treturn '
' + drawingCount.toString() + '
';\n // \t\t}\n // \t\telse {\n // \t\t\treturn '
' + drawingCount.toString() + '
';\n // \t\t}\n // \t}, this),\n // \t\"title\": \"\",\n // \t\"width\": \"50px\"\n // },\n {\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('name'));\n },\n \"filter\": \"attributes.name\",\n \"display\": _.bind(function (row) {\n if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n return '';\n } else {\n return row.get('name');\n }\n }, this)\n },\n \"title\": \"Version Name\"\n },\n {\n \"data\": {\n \"_\": function (row) {\n return new Date(row.get('issuedOn'));\n },\n \"filter\": \"attributes.issuedOn\",\n \"display\": _.bind(function (row) {\n if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n return '';\n } else {\n return PJQ.helpers.dateHelpers.getDateString(new Date(row.get('issuedOn')), PJQ.helpers.dateHelpers.dateFormats.DATE, true);\n }\n }, this)\n },\n \"title\": \"Issued On\",\n \"width\": \"100px\"\n },\n {\n \"data\": \"\",\n \"title\": \"\",\n \"orderable\": false,\n \"searchable\": false,\n \"render\": _.bind(function (data, type, row) {\n let content = '';\n if (this.contextEditVersion != null && this.contextEditVersion.id === row.id) {\n content = '';\n } else {\n let disabledAttr = this.contextEditVersion != null ? ' disabled ' : '';\n content = '';\n }\n return '
' + content + '
'\n }, this),\n \"width\": '100px'\n }\n ],\n dom: '<\"top\"<\"clear\">>rt<\"bottom\"p<\"clear\">>'\n });\n },\n newBatch: function () {\n this.close();\n new PJQ.views.drawings.DrawingBatchModal({\n versions: this.collection,\n project: this.options.project\n });\n },\n uploadToVersion: function (e) {\n let $row = $(e.currentTarget).closest('tr'),\n version = this.dataTable.getRow($row).data();\n this.close();\n new PJQ.views.drawings.DrawingBatchModal({\n version: version,\n project: this.options.project,\n versions: this.collection\n });\n },\n editVersion: function (e) {\n this.contextEditVersion = this.dataTable.getRow($(e.currentTarget).closest('tr')).data();\n this.dataTable.refresh();\n },\n cancelEditVersion: function () {\n this.contextEditVersion = null;\n this.dataTable.refresh();\n },\n saveVersion: function (e) {\n let $row = $(e.currentTarget).closest('tr'),\n version = this.dataTable.getRow($row).data(),\n $name = $row.find('.input-version-name');\n version.set('name', $name.val());\n\n let isNameValid = _.size(version.get('name')) > 0;\n PJQ.helpers.inputHelpers.setInputError($name, isNameValid);\n\n let isIssuedOnValid = version.get('issuedOn') != null;\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-version-date-issued'), isIssuedOnValid);\n\n if (isNameValid && isIssuedOnValid) {\n version.save(null, {\n success: _.bind(function () {\n this.contextEditVersion = null;\n this.dataTable.refresh();\n }, this)\n });\n }\n },\n deleteVersion: function (e) {\n let $row = $(e.currentTarget).closest('tr'),\n row = this.dataTable.getRow($row),\n version = row.data();\n new PJQ.views.modals.DeleteCancel({\n header: \"Delete Version\",\n body: \"Are you sure you want to delete this version?\",\n onDelete: _.bind(function () {\n version.destroy({\n success: _.bind(function () {\n this.collection.remove(version);\n this.dataTable.removeRow(row);\n }, this)\n });\n }, this)\n });\n },\n close: function () {\n this.removeModal();\n _.each(this.collection.models, _.bind(function (batch) {\n if (batch.statusTimeout != null) {\n clearTimeout(batch.statusTimeout);\n batch.statusTimeout = null;\n }\n }, this));\n }\n});\n\nPJQ.views.drawings.BatchNotifyModal = PJQ.views.BaseModal.extend({\n defaults: {\n template: new PJQ.templating.Template(PJQ.constants.modules.DRAWINGS, 'modal-batch-notify'),\n subTemplates: {\n emailBadge: new PJQ.templating.Template(PJQ.constants.modules.GLOBAL, 'Share-Email-Badge')\n },\n maxWidth: 650,\n },\n events: {\n 'click .btn-back': 'previousStep',\n 'click .btn-next': 'nextStep',\n 'click .btn-send': 'send',\n 'click .btn-cancel': 'cancel',\n 'click .btn-add-project-contacts': 'addProjectContacts',\n 'keyup .input-share-search': 'searchChanged',\n 'focus .input-share-search': 'focusSearch',\n 'click .share-email-delete': 'deleteEmail',\n 'mousedown .modal-dialog': 'checkIsFocused'\n },\n beforeModalCreated: async function () {\n if (this.options.project == null) {\n this.options.project = PJQ.app.session.project;\n }\n\n this.isFetched = false;\n this.step = 1;\n\n this.selectedEmailsTo = [];\n this.selectedEmailsCC = [];\n\n let verAppend = null;\n if (this.options.versions != null) {\n let version = this.options.versions.get(this.options.batch.get('versionId'));\n if (version != null) {\n verAppend = ' (' + version.get('name') + ')';\n }\n }\n\n this.model = new PJQ.models.drawings.DrawingBatchNotification({\n batchId: this.options.batch.id,\n subject: 'Drawings Published to ' + this.options.project.get('projectName') + (verAppend ?? \"\"),\n message: ''\n });\n\n this.isFetched = true;\n this.render();\n },\n renderData: function () {\n return {\n model: this.model,\n step: this.step,\n batch: this.options.batch,\n selectedEmailsTo: this.selectedEmailsTo,\n selectedEmailsCC: this.selectedEmailsCC\n }\n },\n afterRender: function () {\n if (!this.isFetched) {\n return;\n }\n\n new PJQ.StepIndicator(this.$('.steps-outer'), {\n steps: [{\n name: 'Compose Email'\n }, {\n name: 'Review & Send'\n }],\n activeStep: this.step - 1\n });\n\n switch (this.step) {\n case 1:\n this.bodyEditor = new PJQ.inputs.HTMLEditor({\n el: this.$('.email-message'),\n editorHeight: 300,\n isHideTokens: true,\n onChange: (contents) => {\n this.model.set('message', contents);\n }\n });\n\n _.each(this.selectedEmailsTo, (email) => {\n this.renderEmail(email, 'to');\n });\n\n _.each(this.selectedEmailsCC, (email) => {\n this.renderEmail(email, 'cc');\n })\n break;\n case 2:\n break;\n case 3:\n break;\n }\n },\n addProjectContacts: function () {\n this.selector = new PJQ.views.contacts.SelectContactsModal({\n context: PJQ.constants.contacts.contexts.PROJECTCONTACTS,\n enableSelectAll: true,\n isSingleChoice: false,\n // saveButtonText: this.options.saveButtonText,\n onSave: (newContacts) => {\n let emails = _.filter(_.map(newContacts, (contact) => {\n return contact.get('email');\n }), (email) => {\n return _.size(email) > 0;\n });\n _.each(emails, (email) => {\n if (_.contains(this.selectedEmailsTo, email)) {\n return;\n }\n this.selectedEmailsTo.push(email);\n this.renderEmail(email, 'to');\n });\n }\n });\n },\n previousStep: function () {\n this.step--;\n this.render();\n },\n nextStep: function () {\n switch (this.step) {\n case 1:\n let toValid = _.size(this.selectedEmailsTo) > 0;\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-to'), toValid);\n\n let subject = this.$('.input-subject').val(),\n subjectValid = _.size(subject) > 0;\n this.model.set('subject', subject);\n PJQ.helpers.inputHelpers.setInputError(this.$('.input-subject'), subjectValid);\n\n if (!subjectValid || !toValid) {\n return;\n }\n break;\n case 2:\n break;\n case 3:\n break;\n }\n\n this.step++;\n this.render();\n },\n focusSearch: function (e) {\n this.focusType = $(e.currentTarget).data('email-line');\n if (this.contactEmailSelector != null)\n this.contactEmailSelector.remove();\n\n this.contactEmailSelector = new PJQ.views.email.ContactSearchSelect({\n el: this.focusType === \"to\" ? this.$('.contact-emails-to') : this.$('.contact-emails-cc'),\n selectedEmails: this.focusType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC,\n search: this.getFocusSearchText(),\n project: this.options.project,\n onAdd: (email) => {\n this.renderEmail(email);\n }\n });\n },\n checkIsFocused: function (e) {\n if (this.$(e.target).closest('.share-contact').length > 0) {\n return;\n }\n\n // Removes contact email selector if not selecting a contact, or entering an email\n let target = $(e.target),\n targetParent = $(e.target.parentElement);\n\n if (this.focusType != null\n && !target.hasClass('share-contact')\n && !targetParent.hasClass('share-contact')\n && !target.hasClass('input-share-search')\n && !target.hasClass('share-contact-email')\n && !target.hasClass('share-email-entry')\n && !target.hasClass('share-contact-name')) {\n this.contactEmailSelector.remove();\n this.focusType = null;\n }\n },\n getFocusSearchText: function () {\n return this.focusType != null ? this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').val().toLowerCase() : this.$('.input-share-search').val().toLowerCase();\n },\n searchChanged: function () {\n if (this.contactEmailSelector == null) {\n return;\n }\n\n this.contactEmailSelector.searchChanged(this.getFocusSearchText());\n },\n renderRecipientCount: function () {\n let emailCount = _.size(this.selectedEmailsTo) + _.size(this.selectedEmailsCC);\n this.$('.recipient-count').html(emailCount.toString() + (emailCount === 1 ? ' recipient' : ' recipients'));\n },\n renderEmail: function (email, type = null) {\n this.renderSubTemplate(true, this.options.subTemplates.emailBadge, this.$('.share-selected-emails[data-email-line=\"' + (type ?? this.focusType) + '\"]'), {\n email: email\n });\n this.$('.input-share-search').val('');\n this.$('.modal-share-send').prop('disabled', false);\n this.renderRecipientCount();\n this.$('.input-share-search[data-email-line=\"' + this.focusType + '\"]').focus();\n },\n deleteEmail: function (e) {\n let emailContainer = $(e.currentTarget).closest('.share-email'),\n emailLineType = $(e.currentTarget).closest('.share-selected-emails').data('email-line'),\n emailArray = emailLineType === \"to\" ? this.selectedEmailsTo : this.selectedEmailsCC\n emailArray = _.without(emailArray, emailContainer.data('email').toLowerCase());\n\n if (emailLineType === \"to\")\n this.selectedEmailsTo = emailArray\n else\n this.selectedEmailsCC = emailArray\n\n emailContainer.remove();\n this.searchChanged();\n this.$('.modal-share-send').prop('disabled', _.size(emailArray) === 0);\n this.renderRecipientCount();\n },\n send: function () {\n let loader = new PJQ.Loader(this.$('.modal-content'));\n this.model.set({\n to: this.selectedEmailsTo,\n cc: this.selectedEmailsCC\n })\n\n this.model.save(null, {\n success: () => {\n PJQ.notifications.notify.successNotify({\n message: 'Published Drawings Notification sent'\n });\n this.removeModal();\n },\n error: () => {\n PJQ.notifications.notify.errorNotify({\n message: 'Encountered an error sending notification, please contact customer service'\n });\n },\n });\n },\n cancel: function () {\n new PJQ.views.modals.YesNo({\n header: \"Cancel Notification?\",\n body: \"Are you sure you want to cancel sending this notification?\",\n onYes: () => {\n this.removeModal();\n }\n });\n }\n});"]}