/*!
mason_viewer.js
github.com/yeastrc/mason
The Mason Viewer is created by calling MasonViewer.createMasonViewer = function ( $rootDiv, requestParams, configParams, callbackFunctionsObj ) {
where MasonViewer is an object at window.MasonViewer.
configParams is merged with the following parameters
MasonViewerPerInstanceRenderOnPage.prototype.configDisplayOptionDefaults = {
TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE : 2,
LABEL_FONT_SIZE : 12,
ROW_HEIGHT : 15, // Adjust the ROW_HEIGHT to accommodate the height of the label
BLOCK_HEIGHT : 14, // Adjust the BLOCK_HEIGHT to accommodate the height of the label
LABEL_WIDTH : 100, // Adjust the LABEL_WIDTH to accommodate the width of the longest label
ICON_EXPAND_ROW_STARTING_POSITION : 1,
ICON_EXPAND_ROW_WIDTH : 15,
ICON_EXPAND_ROW_SPACE_AFTER : 2,
ROW_TOTALS_BAR_RIGHT_MAX_WIDTH : 30,
ROW_TOTAL_BLOCK_MINIMUM_SIZE : 1,
ROW_TOTALS_BAR_RIGHT_SPACE_FROM_MAIN_GRID : 10,
ROW_TOTALS_BAR_RIGHT_SPACE_FROM_RIGHT_EDGE : 4,
BORDER_COLOR : "black",
BORDER_WIDTH : 1,
FOOTER_HEIGHT : 2,
// Tool tip text
CLICK_TO_CONTRACT_TO_HIDE_INDIVIDUAL_BLOCKS_TOOLTIP_TEXT_PREFIX : "Click to hide individual ",
CLICK_TO_EXPAND_TO_SHOW_INDIVIDUAL_BLOCKS_TOOLTIP_TEXT_PREFIX : "Click to show individual ",
blockTypeLabelPlural : "blocks",
BLOCK_HIGHLIGHT_BORDER_COLOR : "pink",
BLOCK_HIGHLIGHT_BORDER_WIDTH : 2,
createCombinedLineOnly : undefined, // set to true to only create combined line
skipCreateCombinedLine : undefined, // set to true to skip create combined line
combinedLineLabel : "Combined", // label on left for combined line
combinedLineTooltipHTML : undefined, // tool tip for label on left for combined line
ALIGNMENT_LINE_COLOR : "black",
ALIGNMENT_LINE_WIDTH : 2
};
*/
(function(window){var MasonViewer=function(){};MasonViewer.prototype.instanceCounter=0;MasonViewer.prototype.createMasonViewer=function($rootDiv,requestParams,configParams,callbackFunctionsObj){if($rootDiv===undefined||$rootDiv===null){throw"$rootDiv is missing or null"}if(requestParams===undefined||requestParams===null){throw"requestParams is missing or null"}if(configParams===undefined||configParams===null){throw"configParams is missing or null"}if(callbackFunctionsObj===undefined||callbackFunctionsObj===null){throw"callbackFunctionsObj is missing or null"}var rootDivLength=$rootDiv.length;if(rootDivLength!=1){throw"Error calling 'MasonViewer.createMasonViewer': $rootDiv must contain exactly one element"}var svgSupport=Modernizr.svg;if(!svgSupport){throw"SVG not supported"}this.instanceCounter++;var internalParams={masonViewerMain:this,instanceCounter:this.instanceCounter};var masonViewerInstance=new MasonViewerPerInstance($rootDiv,requestParams,configParams,callbackFunctionsObj,internalParams);return masonViewerInstance};MasonViewer.prototype.getDataElement=function(){return"MasonViewer"};MasonViewer.prototype.getProtCovObjectStorageClassName=function(){return"ProtCovObjectStorageClass"};var MasonViewer=new MasonViewer();window.MasonViewer=MasonViewer;"use strict";"use strict";var MasonViewerPerInstance=function($rootDiv,requestParams,configParams,callbackFunctionsObj,internalParams){var objectThis=this;var rootDivLength=$rootDiv.length;if(rootDivLength!=1){throw"Error calling 'MasonViewer.createMasonViewer': $rootDiv must contain exactly one element"}var masonViewerMain=internalParams.masonViewerMain;var protCovObjectStorageNodeHTML='
';$(protCovObjectStorageNodeHTML).appendTo($rootDiv);var protCovObjectStorageNodeSelector="."+masonViewerMain.getProtCovObjectStorageClassName();var $protCovObjectStorageNode=$rootDiv.children(protCovObjectStorageNodeSelector);if($protCovObjectStorageNode.size()===0){throw"Unable to find protCovObjectStorageNode under $rootDiv, protCovObjectStorageNodeSelector = "+protCovObjectStorageNodeSelector}$protCovObjectStorageNode.data(masonViewerMain.getDataElement(),this);var dataReformattedToInternalFormat=objectThis.reformatDataToInternalFormat(requestParams);var computedRepresentation=objectThis.computeRepresentation($rootDiv,dataReformattedToInternalFormat,requestParams,configParams);objectThis.renderViewerOnThePage($rootDiv,computedRepresentation,requestParams,configParams,callbackFunctionsObj,internalParams)};MasonViewerPerInstance.prototype.renderViewerOnThePage=function($rootDiv,data,requestParams,configParams,callbackFunctionsObj,internalParams){var objectThisMasonViewerPerInstanceCopy=this;this.masonViewerPerInstanceRenderOnPage=new MasonViewerPerInstanceRenderOnPage($rootDiv,data,requestParams,configParams,callbackFunctionsObj,internalParams,objectThisMasonViewerPerInstanceCopy);this.masonViewerPerInstanceRenderOnPage.renderViewerOnThePageMain()};MasonViewerPerInstance.prototype.MESSAGE_TYPE_RENDER_ON_PAGE="RENDER_ON_PAGE";MasonViewerPerInstance.prototype.hideVerticalDataLines=function(){this.masonViewerPerInstanceRenderOnPage.hideVerticalDataLines()};MasonViewerPerInstance.prototype.showVerticalDataLines=function(){this.masonViewerPerInstanceRenderOnPage.showVerticalDataLines()};MasonViewerPerInstance.prototype.deleteViewer=function(){this.masonViewerPerInstanceRenderOnPage.deleteViewer()};MasonViewerPerInstance.prototype.acceptMessage=function(message){if(message.type===MasonViewerPerInstance.prototype.MESSAGE_TYPE_RENDER_ON_PAGE){this.masonViewerPerInstanceRenderOnPage.acceptMessage(message.data)}else{throw"unknown type in message at 'MasonViewerPerInstance.prototype.acceptMessage'. type: "+message.type}};MasonViewerPerInstance.prototype.registerBlockHoverListener=function(params){this.masonViewerPerInstanceRenderOnPage.registerBlockHoverListener(params)};"use strict";MasonViewerPerInstance.prototype.computeRepresentation=function($rootDiv,dataReformattedToInternalFormat,requestParams,configParams){var objectThis=this;var computedData={outputRows:[]};var outputRows=computedData.outputRows;
var inputData=dataReformattedToInternalFormat;var rowItems=inputData.rowItems;for(var rowItemsIndex=0;rowItemsIndex200){var errorMsg="combineOverlapsProteinPositionBased(...): numTimesSplitAnEntryLoop > 200 so throwing exception. ";throw errorMsg}splitAnEntryThisIterationOfLoop=false;blockItemListInput=blockItemListOutput;blockItemListOutput=[];blockItemListInput.sort(this.combineOverlaps_Z_compareForSortBlocks);var index=-1;while((++index)MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.MIN_MAX_VALUES.MAXIMUM_ROWS_PER_GROUP){this.GLOBALS.rowsPerGroup=MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.MIN_MAX_VALUES.MAXIMUM_ROWS_PER_GROUP}}};MasonViewerPerInstanceRenderOnPage.prototype.putDataOnThePageMain=function(){var outputRows=this.constructorParams.data.outputRows;this.add_callbackDataStorage_ToElementsIn_outputRows(outputRows);var SVGrootGroupInsideBoundingBox=this.GLOBALS.masonViewerSVG.group();SVGrootGroupInsideBoundingBox.attr("label","SVGrootGroupInsideBoundingBox");var currentGroupOfRowsSVGgroup=this.GLOBALS.masonViewerSVG.group();this.setupGroupOfRows(currentGroupOfRowsSVGgroup);var currentGroupOfRowsSVGgroupProgramaticStorage=this.getProgramaticDataStorageFromSVG_js_Item(currentGroupOfRowsSVGgroup);SVGrootGroupInsideBoundingBox.add(currentGroupOfRowsSVGgroup);var currentSVGgroupOfRowXandBelow=this.GLOBALS.masonViewerSVG.group();this.setupRootGroupForEachRow(currentSVGgroupOfRowXandBelow);var currentSVGgroupOfRowXandBelowProgramaticDataStorage=this.getProgramaticDataStorageFromSVG_js_Item(currentSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelowProgramaticDataStorage._type="currentSVGgroupOfRowXandBelow";currentSVGgroupOfRowXandBelowProgramaticDataStorage._attachedTo=currentSVGgroupOfRowXandBelow;currentGroupOfRowsSVGgroup.add(currentSVGgroupOfRowXandBelow);currentGroupOfRowsSVGgroupProgramaticStorage.setFirstOutputRowSVGGroup(currentSVGgroupOfRowXandBelow);var rowOffsetMainArea=0;if((outputRows.length>1||this.configDisplayOptions.createCombinedLineOnly)&&!this.configDisplayOptions.skipCreateCombinedLine){this.processCombinedRow(outputRows,0,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage);nextSVGgroupOfRowXandBelow=this.GLOBALS.masonViewerSVG.group();nextSVGgroupOfRowXandBelow.attr("label","nextSVGgroupOfRowXandBelow");currentSVGgroupOfRowXandBelow.add(nextSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelowProgramaticDataStorage.setGroupToMoveForExpansion(nextSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelow=nextSVGgroupOfRowXandBelow;this.setupRootGroupForEachRow(currentSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelowProgramaticDataStorage=this.getProgramaticDataStorageFromSVG_js_Item(currentSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelowProgramaticDataStorage._type="currentSVGgroupOfRowXandBelow";currentSVGgroupOfRowXandBelowProgramaticDataStorage._attachedTo=currentSVGgroupOfRowXandBelow;rowOffsetMainArea=1}this.precomputeValuesOnCreateForMainRows(outputRows);var rowCount=0;if(this.configDisplayOptions.createCombinedLineOnly!==true){rowCount=outputRows.length;for(var rowIdx=0;rowIdx0&&(rowIdx%this.GLOBALS.rowsPerGroup===0)){var nextGroupOfRowsSVGgroup=this.GLOBALS.masonViewerSVG.group();this.setupGroupOfRows(nextGroupOfRowsSVGgroup);var nextGroupOfRowsSVGgroupProgramaticStorage=this.getProgramaticDataStorageFromSVG_js_Item(nextGroupOfRowsSVGgroup);currentGroupOfRowsSVGgroup.add(nextGroupOfRowsSVGgroup);currentGroupOfRowsSVGgroupProgramaticStorage.setNextProgramaticDataStorageGroupOfRows(nextGroupOfRowsSVGgroupProgramaticStorage);currentGroupOfRowsSVGgroup=nextGroupOfRowsSVGgroup;currentGroupOfRowsSVGgroupProgramaticStorage=nextGroupOfRowsSVGgroupProgramaticStorage;currentGroupOfRowsSVGgroup.add(nextSVGgroupOfRowXandBelow);currentGroupOfRowsSVGgroupProgramaticStorage.setFirstOutputRowSVGGroup(nextSVGgroupOfRowXandBelow)}else{currentSVGgroupOfRowXandBelow.add(nextSVGgroupOfRowXandBelow);currentSVGgroupOfRowXandBelowProgramaticDataStorage.setGroupToMoveForExpansion(nextSVGgroupOfRowXandBelow)}currentSVGgroupOfRowXandBelow=nextSVGgroupOfRowXandBelow}}this.addFullHeightLines();this.addBottomLineAndBottomScale(currentSVGgroupOfRowXandBelow,rowCount);this.addTopLine(SVGrootGroupInsideBoundingBox)};MasonViewerPerInstanceRenderOnPage.prototype.addTopLine=function(currentSVGgroupOfRowXandBelow){var topLine=this.GLOBALS.masonViewerSVG.line(this.GLOBALS.leftLineX-0.5,this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE,this.GLOBALS.rightLineX+0.5,this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE).stroke({color:this.configDisplayOptions.BORDER_COLOR,width:this.configDisplayOptions.BORDER_WIDTH});currentSVGgroupOfRowXandBelow.add(topLine)};MasonViewerPerInstanceRenderOnPage.prototype.addBottomLineAndBottomScale=function(currentSVGgroupOfRowXandBelow,rowCount){var bottomOfGrid=(rowCount+1)*this.configDisplayOptions.ROW_HEIGHT;if(rowCount<=1||this.configDisplayOptions.skipCreateCombinedLine){bottomOfGrid=(rowCount)*this.configDisplayOptions.ROW_HEIGHT}if(this.configDisplayOptions.createCombinedLineOnly){bottomOfGrid=(rowCount+1)*this.configDisplayOptions.ROW_HEIGHT}var leftScaleTextSVG=this.GLOBALS.masonViewerSVG.text("1");var textY=(bottomOfGrid)+(this.configDisplayOptions.ROW_HEIGHT/2);textY=textY+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE;this.setSVGTextPosition({textSVG:leftScaleTextSVG,x:this.GLOBALS.leftLineX,y:textY});var rightScaleValue=this.constructorParams.requestParams.inputData.maxSequenceLength+"";var rightScaleTextSVG=this.GLOBALS.masonViewerSVG.text(rightScaleValue);this.clearStyleAnd_dy_OnSVGtextItem(rightScaleTextSVG);var textY=(bottomOfGrid)+(this.configDisplayOptions.ROW_HEIGHT/2);textY=textY+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE;this.setSVGTextPosition({textSVG:rightScaleTextSVG,x:this.GLOBALS.rightLineX,y:textY,otherAttrsToSet:[{attrName:"text-anchor",attrValue:"end"}]});var bottomLine=this.GLOBALS.masonViewerSVG.line(this.GLOBALS.leftLineX-0.5,(bottomOfGrid)+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE,this.GLOBALS.rightLineX+0.5,(bottomOfGrid)+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE).stroke({color:this.configDisplayOptions.BORDER_COLOR,width:this.configDisplayOptions.BORDER_WIDTH});currentSVGgroupOfRowXandBelow.add(leftScaleTextSVG);currentSVGgroupOfRowXandBelow.add(rightScaleTextSVG);currentSVGgroupOfRowXandBelow.add(bottomLine)};MasonViewerPerInstanceRenderOnPage.prototype.resizeOverallImageLength=function(){var visibleBlocksRowCount=this.constructorParams.data.outputRows.length;if(visibleBlocksRowCount>1&&(!this.configDisplayOptions.skipCreateCombinedLine)){visibleBlocksRowCount+=1}if(this.configDisplayOptions.createCombinedLineOnly){visibleBlocksRowCount=1}var visibleRowsHeight=this.configDisplayOptions.ROW_HEIGHT*visibleBlocksRowCount;var hiddenBlocksThatAreVisibleHeight=0;for(var index=0;index0&&objectThis.constructorParams.callbackFunctionsObj.allRowsVerticalLines_callbackFunctions&&objectThis.constructorParams.callbackFunctionsObj.allRowsVerticalLines_callbackFunctions.getColorForLine){this.GLOBALS.setSVGVerticalDataFullHeightLines=this.GLOBALS.masonViewerSVG.set();for(var vertLinesAllRowsItemsIdx=0;vertLinesAllRowsItemsIdx255){throw"colorForBlock.red calculated < 0 or > 255, is = "+colorForBlockOut.red}if(colorForBlockOut.green<0||colorForBlockOut.green>255){throw"colorForBlock.green calculated < 0 or > 255, is = "+colorForBlockOut.green}if(colorForBlockOut.blue<0||colorForBlockOut.blue>255){throw"colorForBlock.blue calculated < 0 or > 255, is = "+colorForBlockOut.blue}return colorForBlockOut};MasonViewerPerInstanceRenderOnPage.prototype.getIdForSVG_js_item=function(SVG_js_item){var id=SVG_js_item.attr("id");return id};MasonViewerPerInstanceRenderOnPage.prototype.getJQueryObjForRawSVGFromSVG_js_item=function(SVG_js_item){if(SVG_js_item===undefined||SVG_js_item===null){throw"ERROR: SVG_js_item === undefined || SVG_js_item === null"
}var $jQueryObj=$(SVG_js_item.node);return $jQueryObj};MasonViewerPerInstanceRenderOnPage.prototype.getSVG_js_itemForJQueryObj=function($jQueryObj){if($jQueryObj===undefined||$jQueryObj===null){throw"ERROR: $jQueryObj === undefined || $jQueryObj === null"}if($jQueryObj.length===0){throw"ERROR: $jQueryObj.length === 0"}var SVG_js_item=$jQueryObj[0].instance;return SVG_js_item};MasonViewerPerInstanceRenderOnPage.prototype.addProgramaticDataStorageGroupOfRowsToJQueryItem=function($item){var programaticDataStorageGroupOfRows=new ProgramaticDataStorageGroupOfRows();$item.data(MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.JQUERY_DATA_LABELS.JQUERY_DATA_LABEL_PROGRAMATIC,programaticDataStorageGroupOfRows);programaticDataStorageGroupOfRows.$item=$item;return programaticDataStorageGroupOfRows};MasonViewerPerInstanceRenderOnPage.prototype.getProgramaticDataStorageGroupOfRowsFromJQueryItem=function($item){var programaticDataStorageGroupOfRows=$item.data(MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.JQUERY_DATA_LABELS.JQUERY_DATA_LABEL_PROGRAMATIC);if(programaticDataStorageGroupOfRows===undefined){}return programaticDataStorageGroupOfRows};MasonViewerPerInstanceRenderOnPage.prototype.addProgramaticDataStorageGroupOfRowsToSVG_js_Item=function(SVGitem){var $jQueryItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGitem);return this.addProgramaticDataStorageGroupOfRowsToJQueryItem($jQueryItem)};MasonViewerPerInstanceRenderOnPage.prototype.getProgramaticDataStorageGroupOfRowsFromSVG_js_Item=function(SVGitem){var $jQueryItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGitem);var programaticDataStorageGroupOfRows=this.getProgramaticDataStorageGroupOfRowsFromJQueryItem($jQueryItem);return programaticDataStorageGroupOfRows};MasonViewerPerInstanceRenderOnPage.prototype.addProgramaticDataStorageToJQueryItem=function($item){var programaticDataStorage=new ProgramaticDataStorage();$item.data(MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.JQUERY_DATA_LABELS.JQUERY_DATA_LABEL_PROGRAMATIC,programaticDataStorage);programaticDataStorage.$item=$item;return programaticDataStorage};MasonViewerPerInstanceRenderOnPage.prototype.getProgramaticDataStorageFromJQueryItem=function($item){var programaticDataStorage=$item.data(MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.JQUERY_DATA_LABELS.JQUERY_DATA_LABEL_PROGRAMATIC);if(programaticDataStorage===undefined){}return programaticDataStorage};MasonViewerPerInstanceRenderOnPage.prototype.addProgramaticDataStorageToSVG_js_Item=function(SVGitem){var $jQueryItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGitem);return this.addProgramaticDataStorageToJQueryItem($jQueryItem)};MasonViewerPerInstanceRenderOnPage.prototype.getProgramaticDataStorageFromSVG_js_Item=function(SVGitem){var $jQueryItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGitem);var programaticDataStorage=this.getProgramaticDataStorageFromJQueryItem($jQueryItem);return programaticDataStorage};MasonViewerPerInstanceRenderOnPage.prototype.set_class_directly_OnSVGItem_using_jQuery=function(SVGItem,classValue){var $SVGItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGItem);$SVGItem.attr("class",classValue)};MasonViewerPerInstanceRenderOnPage.prototype.set_attr_directly_OnSVGtextItem_using_jQuery=function(SVGtextItem,attrName,attrValue){var $SVGtextItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGtextItem);$SVGtextItem.attr(attrName,attrValue);var $tspanChild=$SVGtextItem.children("tspan");$tspanChild.attr(attrName,attrValue)};MasonViewerPerInstanceRenderOnPage.prototype.clearStyleAnd_dy_OnSVGtextItem=function(SVGtextItem){var $SVGtextItem=this.getJQueryObjForRawSVGFromSVG_js_item(SVGtextItem);$SVGtextItem.attr("style","");$SVGtextItem.attr("dy","");var $tspanChild=$SVGtextItem.children("tspan");$tspanChild.attr("style","");$tspanChild.attr("dy","")};MasonViewerPerInstanceRenderOnPage.prototype.attachToolTipToJqueryHtmlNode=function($htmlNode,getTooltipTextFcn,callbackFunctions){$htmlNode.mouseenter(function(eventObject){var text=getTooltipTextFcn();Tip(text,DELAY,0);if(callbackFunctions&&callbackFunctions.mouseenter){callbackFunctions.mouseenter(this)}});$htmlNode.mouseleave(function(eventObject){UnTip();if(callbackFunctions&&callbackFunctions.mouseleave){callbackFunctions.mouseleave(this)}})};MasonViewerPerInstanceRenderOnPage.prototype.attachMouseOverVerticalLine=function(params){var verticalLineSVG=params.verticalLineSVG;var lineData=params.lineData;var callbackFunctions=params.callbackFunctions;var $verticalLineSVG=this.getJQueryObjForRawSVGFromSVG_js_item(verticalLineSVG);var getToolTextParams={vertLineData:lineData.vertLineData,linePos:lineData.linePos,callbackDataStorage:lineData.callbackDataStorage};this.attachToolTipToJqueryHtmlNode($verticalLineSVG,function(tooltip,node){var tooltipHTML=callbackFunctions.getLinesToolTipText(getToolTextParams);$(tooltip).html(tooltipHTML);return tooltipHTML})};MasonViewerPerInstanceRenderOnPage.prototype.get$groupOfRowsFor$currentElement=function($currentElement){var groupOfRowsSelector="g."+MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.CLASSES.PROT_COV_VIEWER_GROUP_OR_ROWS;var $groupOfRows=$currentElement.parent().closest(groupOfRowsSelector);if($groupOfRows.length===0){throw"Unable to find group of rows element using selector '"+groupOfRowsSelector+"'."}return $groupOfRows};MasonViewerPerInstanceRenderOnPage.prototype.get$rowMainGroupFor$currentElement=function($currentElement){var rowMainGroupSelector="g."+MasonViewerPerInstanceRenderOnPage.prototype.CONSTANTS.CLASSES.PROT_COV_VIEWER_GROUP_ROW_MAIN;var $rowMainGroup=$currentElement.parent().closest(rowMainGroupSelector);if($rowMainGroup.length===0){throw"Unable to find main group element using selector '"+rowMainGroupSelector+"'."}return $rowMainGroup};MasonViewerPerInstanceRenderOnPage.prototype.attachClickShowHideToggleHiddenBlocksRow=function(SVGObject){var objectThis=this;var $SVGObject=this.getJQueryObjForRawSVGFromSVG_js_item(SVGObject);$SVGObject.click(function(event,ui){objectThis.clickShowHideToggleHiddenBlocksRow(event,ui,this)
})};MasonViewerPerInstanceRenderOnPage.prototype.setSVGTextPosition=function(setSVGTextPositionParams){var textSVG=setSVGTextPositionParams.textSVG;var x=setSVGTextPositionParams.x;var y=setSVGTextPositionParams.y;var otherAttrsToSet=setSVGTextPositionParams.otherAttrsToSet;var additionalStyle=setSVGTextPositionParams.additionalStyle;if(additionalStyle===undefined||additionalStyle===null){additionalStyle=""}textSVG.move(x,y);this.set_attr_directly_OnSVGtextItem_using_jQuery(textSVG,"dy",".35em");this.set_attr_directly_OnSVGtextItem_using_jQuery(textSVG,"style","font-size:"+this.configDisplayOptions.LABEL_FONT_SIZE+"px;font-family:Helvetica, Arial, sans-serif"+additionalStyle);if(otherAttrsToSet!==undefined&&otherAttrsToSet!==null&&otherAttrsToSet instanceof Array&&otherAttrsToSet.length>0){for(var otherAttrsIdx=0;otherAttrsIdx0){var colorForBlock=colorAndSize.colorForBlock;var fillColor=this.convertBlockColorTo_SVGJS_FillColor(colorForBlock);var rectWidth=sizeZeroToOne*this.configDisplayOptions.ROW_TOTALS_BAR_RIGHT_MAX_WIDTH;if(rectWidth(blockItemInList.blockEndPositionPixel)){addedToList=true;hiddenBlockRow.push(blockItem);break}}if(!addedToList){var hiddenBlockRow_NewRow=[];hiddenBlockRow_NewRow.push(blockItem);hiddenBlockRows.push(hiddenBlockRow_NewRow)}prevEndsLastEntry++;prevEnds[prevEndsLastEntry]=blockItem.blockEndPos;prevEndsScaled[prevEndsLastEntry]=endPixel}return hiddenBlockRows};MasonViewerPerInstanceRenderOnPage.prototype.processHiddenBlocksForRow=function(outputRow,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage,rowOffset){var objectThis=this;if(!objectThis.constructorParams.callbackFunctionsObj.mainRowsBlocks_callbackFunctions||!objectThis.constructorParams.callbackFunctionsObj.mainRowsBlocks_callbackFunctions.precomputeValuesOnCreate){throw"callback function mainRowsBlocks_callbackFunctions.precomputeValuesOnCreate is missing"}var groupOfHiddenBlocksForRow=this.GLOBALS.masonViewerSVG.group();groupOfHiddenBlocksForRow.attr("label","groupOfHiddenBlocksForRow");currentSVGgroupOfRowXandBelow.add(groupOfHiddenBlocksForRow);currentSVGgroupOfRowXandBelowProgramaticDataStorage.setHiddenBlocksForRowSet(groupOfHiddenBlocksForRow);var hiddenBlockRows=this.getHiddenBlocksForRow(outputRow);var hiddenBlocksRowsHeight=(hiddenBlockRows.length-1)*this.configDisplayOptions.ROW_HEIGHT;currentSVGgroupOfRowXandBelowProgramaticDataStorage.setHiddenBlocksHeight(hiddenBlocksRowsHeight);var boxUnderHeight=hiddenBlocksRowsHeight+this.configDisplayOptions.ROW_HEIGHT;this.addHiddenBlocksBoxUnderEachRowForMouseOver(boxUnderHeight,groupOfHiddenBlocksForRow,currentSVGgroupOfRowXandBelowProgramaticDataStorage,rowOffset);for(var hiddenBlockRowIdx=0;hiddenBlockRowIdx0&&objectThis.constructorParams.callbackFunctionsObj.mainRowsVerticalLines_callbackFunctions&&objectThis.constructorParams.callbackFunctionsObj.mainRowsVerticalLines_callbackFunctions.getColorForLine){for(var hiddenBlockRowIdx=0;hiddenBlockRowIdx0){var splitAnyEntriesForRow=outputRow.splitAnyEntries;for(var mainLineBlocksIdx=0;mainLineBlocksIdx0&&objectThis.constructorParams.callbackFunctionsObj.mainRowsVerticalLines_callbackFunctions&&objectThis.constructorParams.callbackFunctionsObj.mainRowsVerticalLines_callbackFunctions.getColorForLine){for(var mainLineLinesIdx=0;mainLineLinesIdxmaxPosition){positionCharPosition=maxPosition}}return positionCharPosition};"use strict";MasonViewerPerInstanceRenderOnPage.prototype.attachMouseOverBlockTotalsOverlappingBlocksRow=function(blockBlockSVG,blockData){var objectThis=this;if(objectThis.constructorParams.callbackFunctionsObj===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.getBlocksToolTipText===undefined){return}var $blockBlockSVG=this.getJQueryObjForRawSVGFromSVG_js_item(blockBlockSVG);var getSingleBlockToolTipTextParams={startPos:blockData.blockStartPos,endPos:blockData.blockEndPos,blockDataItems:blockData.blockDataItems,callbackDataStorage:blockData.callbackDataStorage};var getTooltipTextFcn=function(tooltip,node){var tooltipHTML=objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.getBlocksToolTipText(getSingleBlockToolTipTextParams);$(tooltip).html(tooltipHTML);return tooltipHTML};var callbackFunctions={mouseenter:function(node){objectThis.callListenersForBlockMouseEnter({node:node,blockInfo:getSingleBlockToolTipTextParams})},mouseleave:function(node){objectThis.callListenersForBlockMouseLeave({node:node,blockInfo:getSingleBlockToolTipTextParams})}};this.attachToolTipToJqueryHtmlNode($blockBlockSVG,getTooltipTextFcn,callbackFunctions)};MasonViewerPerInstanceRenderOnPage.prototype.attachMouseOverBlockTotalsNonOverlappingBlocksRow=function(blockBlockSVG,blockData){var objectThis=this;if(objectThis.constructorParams.callbackFunctionsObj===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.getBlocksToolTipText===undefined){return}var $blockBlockSVG=this.getJQueryObjForRawSVGFromSVG_js_item(blockBlockSVG);var getSingleBlockToolTipTextParams={startPos:blockData.blockStartPos,endPos:blockData.blockEndPos,blockDataItems:blockData.blockDataItems,callbackDataStorage:blockData.callbackDataStorage};
var getTooltipTextFcn=function(tooltip,node){var tooltipHTML=objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.getBlocksToolTipText(getSingleBlockToolTipTextParams);$(tooltip).html(tooltipHTML);return tooltipHTML};var callbackFunctions={mouseenter:function(node){objectThis.callListenersForBlockMouseEnter({node:node,blockInfo:getSingleBlockToolTipTextParams})},mouseleave:function(node){objectThis.callListenersForBlockMouseLeave({node:node,blockInfo:getSingleBlockToolTipTextParams})}};this.attachToolTipToJqueryHtmlNode($blockBlockSVG,getTooltipTextFcn,callbackFunctions)};MasonViewerPerInstanceRenderOnPage.prototype.attachClickHandlerBlockCombinedRow=function(blockBlockSVG,blockData){var objectThis=this;if(objectThis.constructorParams.callbackFunctionsObj===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.processClick===undefined){return}var $blockBlockSVG=this.getJQueryObjForRawSVGFromSVG_js_item(blockBlockSVG);var processClickParams={startPos:blockData.blockStartPos,endPos:blockData.blockEndPos,blockDataItems:blockData.blockDataItems,callbackDataStorage:blockData.callbackDataStorage};$blockBlockSVG.click(function(eventObject){objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.processClick(processClickParams)})};MasonViewerPerInstanceRenderOnPage.prototype.attachMouseOverCombinedRowTotalBlock=function(rowTotalBlockSVG,callbackDataStorage){var objectThis=this;if(objectThis.constructorParams.callbackFunctionsObj===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions.getTotalBarToolTipText===undefined){return}var $rowTotalBlockSVG=this.getJQueryObjForRawSVGFromSVG_js_item(rowTotalBlockSVG);var getCombinedRowBlockToolTipTextParams={callbackDataStorage:callbackDataStorage};this.attachToolTipToJqueryHtmlNode($rowTotalBlockSVG,function(tooltip,node){var tooltipHTML=objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions.getTotalBarToolTipText(getCombinedRowBlockToolTipTextParams);$(tooltip).html(tooltipHTML);return tooltipHTML})};MasonViewerPerInstanceRenderOnPage.prototype.attachClickHandlerCombinedRowTotalBlock=function(rowTotalBlockSVG,callbackDataStorage){var objectThis=this;if(objectThis.constructorParams.callbackFunctionsObj===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions===undefined||objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions.processClick===undefined){return}var $rowTotalBlockSVG=this.getJQueryObjForRawSVGFromSVG_js_item(rowTotalBlockSVG);var processClickParams={callbackDataStorage:callbackDataStorage};$rowTotalBlockSVG.click(function(eventObject){objectThis.constructorParams.callbackFunctionsObj.combinedRowTotalBar_callbackFunctions.processClick(processClickParams)})};MasonViewerPerInstanceRenderOnPage.prototype.processCombinedRow=function(outputRows,rowIdx,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage){currentSVGgroupOfRowXandBelow.attr("class","prot_cov_viewer_group_row_main");currentSVGgroupOfRowXandBelow.attr("label","Totals Row Group");var combinedBlockItems=this.combineTotalsBlocksWhereStartEndMatch(outputRows);var splitOutput=this.constructorParams.objectThisMasonViewerPerInstance.combineOverlapsProteinPositionBased(combinedBlockItems);var splitAnyEntries=splitOutput.splitAnyEntries;var mainLineTotalBlocks=splitOutput.outputList;this.processTotalsLabel(rowIdx,splitAnyEntries,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage);this.addBoxUnderEachRowForMouseOver(currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage,rowIdx);var outputTotalRow={mainLineTotalBlocks:mainLineTotalBlocks,combinedBlockItems:combinedBlockItems,splitAnyEntries:splitAnyEntries};var SVGRowXmainBlocksGROUP=this.GLOBALS.masonViewerSVG.group();currentSVGgroupOfRowXandBelow.add(SVGRowXmainBlocksGROUP);SVGRowXmainBlocksGROUP.attr("label","SVGRowXmainBlocksGROUP_processCombinedRow");currentSVGgroupOfRowXandBelowProgramaticDataStorage.setSVGRowXmainBlocksGROUP(SVGRowXmainBlocksGROUP);this.processCombinedRowMainLineBlocks(outputTotalRow,currentSVGgroupOfRowXandBelow,SVGRowXmainBlocksGROUP,rowIdx);if(splitAnyEntries){this.createTotalsLineHiddenBlocksIfNotCreatedCallbackCreator(rowIdx,combinedBlockItems,splitOutput.splitAnyEntries,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage)}this.processRowTotalBlockForCombinedRow(rowIdx,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage)};MasonViewerPerInstanceRenderOnPage.prototype.createTotalsLineHiddenBlocksIfNotCreatedCallbackCreator=function(rowIdx,combinedBlockItems,splitAnyEntries,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage){var objectThis=this;var createHiddenBlocksIfNotCreatedCallback=function(){var hiddenBlocksForRowSet=currentSVGgroupOfRowXandBelowProgramaticDataStorage.getHiddenBlocksForRowSet();if(splitAnyEntries&&(hiddenBlocksForRowSet===undefined||hiddenBlocksForRowSet===null)){objectThis.processCombinedRowHiddenBlocks(rowIdx,combinedBlockItems,splitAnyEntries,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage)}};currentSVGgroupOfRowXandBelowProgramaticDataStorage.setCreateHiddenBlocksIfNotCreatedCallback(createHiddenBlocksIfNotCreatedCallback)};MasonViewerPerInstanceRenderOnPage.prototype.processTotalsLabel=function(rowIdx,splitAnyEntries,currentSVGgroupOfRowXandBelow,currentSVGgroupOfRowXandBelowProgramaticDataStorage){var objectThis=this;var labelText=this.configDisplayOptions.combinedLineLabel;var labelTextSVG=this.GLOBALS.masonViewerSVG.text(labelText);this.addProgramaticDataStorageToSVG_js_Item(labelTextSVG);
labelTextSVG.data("Totals-Label","");currentSVGgroupOfRowXandBelow.add(labelTextSVG);objectThis.clearStyleAnd_dy_OnSVGtextItem(labelTextSVG);var textY=(rowIdx*this.configDisplayOptions.ROW_HEIGHT)+(this.configDisplayOptions.ROW_HEIGHT/2);textY=textY+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE;var labelAdditionalStyle="";this.setSVGTextPosition({textSVG:labelTextSVG,x:this.configDisplayOptions.LABEL_STARTING_POSITION,y:textY,otherAttrsToSet:undefined,additionalStyle:labelAdditionalStyle});var y=(rowIdx*this.configDisplayOptions.ROW_HEIGHT);y=y+this.configDisplayOptions.TOP_ROW_OFFSET_FROM_TOP_OF_IMAGE;if(this.configDisplayOptions.combinedLineTooltipHTML){var labelTooltipHTML=this.configDisplayOptions.combinedLineTooltipHTML;var $labelTextSVG=this.getJQueryObjForRawSVGFromSVG_js_item(labelTextSVG);this.attachToolTipToJqueryHtmlNode($labelTextSVG,function(tooltip,node){var tooltipHTML=labelTooltipHTML;$(tooltip).html(tooltipHTML);return tooltipHTML})}if(splitAnyEntries){this.createHiddenBlocksExpansionIcon(this.configDisplayOptions.CLICK_TO_EXPAND_TO_SHOW_INDIVIDUAL_BLOCKS_TOOLTIP_TEXT,currentSVGgroupOfRowXandBelow,rowIdx,currentSVGgroupOfRowXandBelowProgramaticDataStorage)}};MasonViewerPerInstanceRenderOnPage.prototype.combineTotalsBlocksWhereStartEndMatch=function(outputRows){var combinedBlockItems=[];var allBlockItems=[];for(var outputRowsIdx=0;outputRowsIdx(blockItemInList.totalBlockEndPositionPixel)){addedToList=true;totalBlockRow.push(blockItem);break}}if(!addedToList){var totalBlockRow_NewRow=[];totalBlockRow_NewRow.push(blockItem);totalBlockRows.push(totalBlockRow_NewRow)}prevEndsLastEntry++;prevEnds[prevEndsLastEntry]=blockItem.blockEndPos;prevEndsScaled[prevEndsLastEntry]=endPixel}return totalBlockRows};MasonViewerPerInstanceRenderOnPage.prototype.processCombinedRowMainLineBlocks=function(outputRow,currentSVGgroupOfRowXandBelow,SVGRowXmainBlocksGROUP,rowIdx){var objectThis=this;if(!objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions||!objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.precomputeValuesOnCreate){throw"callback function combinedRow_callbackFunctions.precomputeValuesOnCreate is missing"}if(!objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions||!objectThis.constructorParams.callbackFunctionsObj.combinedRow_callbackFunctions.getColorForBlock){throw"callback function combinedRow_callbackFunctions.getColorForBlock is missing"}var mainLineBlocks=outputRow.mainLineTotalBlocks;if(mainLineBlocks.length>0){var splitAnyEntriesForRow=outputRow.splitAnyEntries;for(var mainLineBlocksIdx=0;mainLineBlocksIdx0&&objectThis.constructorParams.callbackFunctionsObj.combinedRowVerticalLines_callbackFunctions&&objectThis.constructorParams.callbackFunctionsObj.combinedRowVerticalLines_callbackFunctions.getColorForLine){for(var combinedRowLinesIdx=0;combinedRowLinesIdx0&&objectThis.constructorParams.callbackFunctionsObj.combinedRowVerticalLines_callbackFunctions&&objectThis.constructorParams.callbackFunctionsObj.combinedRowVerticalLines_callbackFunctions.getColorForLine){for(var totalBlockRowIdx=0;totalBlockRowIdx0){var colorForBlock=colorAndSize.colorForBlock;var fillColor=this.convertBlockColorTo_SVGJS_FillColor(colorForBlock);var rectWidth=sizeZeroToOne*this.configDisplayOptions.ROW_TOTALS_BAR_RIGHT_MAX_WIDTH;if(rectWidth